From a1ca41aa5db7cd64ef5bc7af2b8eca4bab054fe1 Mon Sep 17 00:00:00 2001 From: Juan Pablo Arce Date: Wed, 13 May 2020 12:55:42 -0300 Subject: [PATCH] (5a377a8ee) Unstable v0.9.1000.0 --- .gitignore | 3 + .../BarotraumaClient/ClientSource/Camera.cs | 2 +- .../Characters/AI/EnemyAIController.cs | 2 +- .../Characters/AI/Wreck/WreckAI.cs | 50 + .../Characters/Animation/Ragdoll.cs | 35 +- .../ClientSource/Characters/Character.cs | 31 +- .../ClientSource/Characters/CharacterHUD.cs | 34 +- .../ClientSource/Characters/CharacterInfo.cs | 98 +- .../Characters/CharacterNetworking.cs | 71 +- .../Characters/Health/AfflictionHusk.cs | 2 +- .../Characters/Health/AfflictionPsychosis.cs | 48 +- .../Characters/Health/CharacterHealth.cs | 32 +- .../ClientSource/Characters/Jobs/JobPrefab.cs | 8 +- .../ClientSource/Characters/Limb.cs | 151 +- .../ClientSource/DebugConsole.cs | 110 +- .../Events/Missions/SalvageMission.cs | 14 +- .../ClientSource/Fonts/ScalableFont.cs | 94 +- .../ClientSource/GUI/ChatBox.cs | 72 +- .../ClientSource/GUI/FileSelection.cs | 49 +- .../BarotraumaClient/ClientSource/GUI/GUI.cs | 127 +- .../ClientSource/GUI/GUICanvas.cs | 52 +- .../ClientSource/GUI/GUIComponent.cs | 24 +- .../ClientSource/GUI/GUIDropDown.cs | 2 +- .../ClientSource/GUI/GUIImage.cs | 99 +- .../ClientSource/GUI/GUILayoutGroup.cs | 1 - .../ClientSource/GUI/GUIListBox.cs | 23 +- .../ClientSource/GUI/GUIMessageBox.cs | 9 +- .../ClientSource/GUI/GUIStyle.cs | 8 + .../ClientSource/GUI/GUITextBlock.cs | 175 +- .../ClientSource/GUI/GUITextBox.cs | 129 +- .../ClientSource/GUI/HUDLayoutSettings.cs | 20 +- .../ClientSource/GUI/LoadingScreen.cs | 2 + .../ClientSource/GUI/RectTransform.cs | 20 +- .../ClientSource/GUI/TabMenu.cs | 941 ++++++++++ .../ClientSource/GUI/VideoPlayer.cs | 7 +- .../BarotraumaClient/ClientSource/GameMain.cs | 58 +- .../ClientSource/GameSession/CrewManager.cs | 1276 ++++++++++---- .../GameModes/MultiPlayerCampaign.cs | 4 +- .../GameModes/SinglePlayerCampaign.cs | 3 +- .../GameModes/Tutorials/CaptainTutorial.cs | 6 +- .../GameModes/Tutorials/DoctorTutorial.cs | 2 +- .../GameModes/Tutorials/OfficerTutorial.cs | 2 +- .../GameModes/Tutorials/ScenarioTutorial.cs | 2 +- .../GameModes/Tutorials/Tutorial.cs | 8 +- .../ClientSource/GameSession/GameSession.cs | 170 +- .../ClientSource/GameSession/RoundSummary.cs | 4 +- .../ClientSource/GameSettings.cs | 262 ++- .../ClientSource/Items/CharacterInventory.cs | 100 +- .../ClientSource/Items/Components/Door.cs | 5 +- .../Items/Components/ElectricalDischarger.cs | 11 +- .../Items/Components/Holdable/Holdable.cs | 3 + .../Items/Components/Holdable/RangedWeapon.cs | 2 +- .../Items/Components/ItemComponent.cs | 5 +- .../Items/Components/ItemLabel.cs | 6 +- .../Items/Components/LightComponent.cs | 5 +- .../Items/Components/Machines/Controller.cs | 2 +- .../Items/Components/Machines/Engine.cs | 4 + .../Items/Components/Machines/Fabricator.cs | 18 +- .../Items/Components/Machines/MiniMap.cs | 11 +- .../Items/Components/Machines/Pump.cs | 2 +- .../Items/Components/Machines/Reactor.cs | 16 +- .../Items/Components/Machines/Sonar.cs | 100 +- .../Items/Components/Machines/Steering.cs | 4 +- .../Items/Components/Projectile.cs | 12 +- .../Items/Components/Repairable.cs | 24 +- .../ClientSource/Items/Components/Rope.cs | 9 + .../Items/Components/Signal/Connection.cs | 2 +- .../Items/Components/Signal/Terminal.cs | 14 +- .../Items/Components/Signal/Wire.cs | 122 +- .../ClientSource/Items/Components/Turret.cs | 51 +- .../ClientSource/Items/Inventory.cs | 120 +- .../ClientSource/Items/Item.cs | 95 +- .../ClientSource/Items/ItemPrefab.cs | 37 +- .../ClientSource/Map/FireSource.cs | 4 +- .../BarotraumaClient/ClientSource/Map/Gap.cs | 38 +- .../BarotraumaClient/ClientSource/Map/Hull.cs | 77 +- .../ClientSource/Map/ItemAssemblyPrefab.cs | 5 +- .../ClientSource/Map/Levels/WaterRenderer.cs | 17 +- .../ClientSource/Map/Lights/ConvexHull.cs | 85 +- .../ClientSource/Map/Lights/LightManager.cs | 259 +-- .../ClientSource/Map/Lights/LightSource.cs | 39 +- .../ClientSource/Map/LinkedSubmarine.cs | 49 +- .../ClientSource/Map/MapEntity.cs | 301 +++- .../ClientSource/Map/MapEntityPrefab.cs | 12 +- .../ClientSource/Map/Structure.cs | 10 +- .../ClientSource/Map/StructurePrefab.cs | 11 +- .../ClientSource/Map/Submarine.cs | 13 +- .../ClientSource/Map/SubmarineInfo.cs | 6 +- .../ClientSource/Map/WayPoint.cs | 114 +- .../ClientSource/Media/Video.cs | 2 +- .../ClientSource/Networking/ChatMessage.cs | 4 +- .../Networking/ChildServerRelay.cs | 13 +- .../ClientSource/Networking/Client.cs | 4 + .../Networking/FileTransfer/FileReceiver.cs | 10 +- .../ClientSource/Networking/GameClient.cs | 254 ++- .../ClientSource/Networking/KarmaManager.cs | 19 + .../ClientSource/Networking/NetStats.cs | 22 +- .../Primitives/Peers/LidgrenClientPeer.cs | 8 +- .../Primitives/Peers/SteamP2PClientPeer.cs | 22 +- .../Primitives/Peers/SteamP2POwnerPeer.cs | 18 +- .../ClientSource/Networking/ServerLog.cs | 107 +- .../ClientSource/Networking/ServerSettings.cs | 4 +- .../ClientSource/Networking/SteamManager.cs | 350 ++-- .../Networking/Voip/VoipCapture.cs | 48 +- .../Networking/Voip/VoipClient.cs | 8 +- .../ClientSource/Networking/Voting.cs | 22 +- .../ClientSource/Particles/Particle.cs | 10 +- .../ClientSource/Particles/ParticleEmitter.cs | 19 +- .../ClientSource/Physics/PhysicsBody.cs | 4 +- .../ClientSource/PlayerInput.cs | 76 +- .../BarotraumaClient/ClientSource/Program.cs | 10 +- .../ClientSource/Screens/CampaignSetupUI.cs | 3 +- .../ClientSource/Screens/CampaignUI.cs | 27 +- .../CharacterEditor/CharacterEditorScreen.cs | 86 +- .../Screens/CharacterEditor/Wizard.cs | 2 +- .../ClientSource/Screens/GameScreen.cs | 66 +- .../ClientSource/Screens/LevelEditorScreen.cs | 33 +- .../ClientSource/Screens/MainMenuScreen.cs | 16 +- .../ClientSource/Screens/NetLobbyScreen.cs | 286 ++- .../Screens/ParticleEditorScreen.cs | 45 +- .../ClientSource/Screens/Screen.cs | 3 +- .../ClientSource/Screens/ServerListScreen.cs | 57 +- .../Screens/SpriteEditorScreen.cs | 16 +- .../Screens/SteamWorkshopScreen.cs | 147 +- .../ClientSource/Screens/SubEditorScreen.cs | 1562 +++++++++++++---- .../Serialization/SerializableEntityEditor.cs | 181 +- .../ClientSource/Sounds/Sound.cs | 2 +- .../ClientSource/Sounds/SoundChannel.cs | 2 +- .../ClientSource/Sounds/SoundManager.cs | 27 +- .../ClientSource/Sounds/SoundPlayer.cs | 208 ++- .../ClientSource/Sounds/VoipSound.cs | 44 +- .../ClientSource/Sprite/DecorativeSprite.cs | 14 +- .../ClientSource/Sprite/DeformableSprite.cs | 24 +- .../ClientSource/Sprite/Sprite.cs | 53 +- .../Traitors/TraitorMissionPrefab.cs | 1 + .../ClientSource/Utils/HttpEncoder.cs | 10 +- .../ClientSource/Utils/HttpUtility.cs | 17 +- .../Utils/LocalizationCSVtoXML.cs | 8 +- .../ClientSource/Utils/Quad.cs | 67 + .../ClientSource/Utils/TextureLoader.cs | 187 +- .../Content/Effects/deformshader.xnb | Bin 8220 -> 8781 bytes .../Content/Effects/deformshader_opengl.xnb | Bin 8469 -> 8871 bytes .../Content/Effects/losshader.xnb | Bin 914 -> 1397 bytes .../Content/Effects/losshader_opengl.xnb | Bin 767 -> 1307 bytes .../Content/Effects/postprocess.xnb | Bin 12662 -> 13222 bytes .../Content/Effects/postprocess_opengl.xnb | Bin 9777 -> 10634 bytes .../Content/Effects/solidcolor.xnb | Bin 1876 -> 2429 bytes .../Content/Effects/solidcolor_opengl.xnb | Bin 1500 -> 1890 bytes .../Content/Effects/watershader.xnb | Bin 6677 -> 6673 bytes .../BarotraumaClient/LinuxClient.csproj | 2 +- Barotrauma/BarotraumaClient/MacClient.csproj | 2 +- .../Shaders/Content_opengl.mgcb | 5 - .../BarotraumaClient/Shaders/blurshader.fx | 2 +- .../Shaders/blurshader_opengl.fx | 2 +- .../BarotraumaClient/Shaders/damageshader.fx | 2 +- .../Shaders/damageshader_opengl.fx | 2 +- .../BarotraumaClient/Shaders/deformshader.fx | 18 +- .../Shaders/deformshader_opengl.fx | 18 +- .../Shaders/gradientshader.fx | 2 +- .../Shaders/gradientshader_opengl.fx | 2 +- .../BarotraumaClient/Shaders/losshader.fx | 38 +- .../Shaders/losshader_opengl.fx | 38 +- .../BarotraumaClient/Shaders/postprocess.fx | 113 +- .../Shaders/postprocess_opengl.fx | 89 +- .../BarotraumaClient/Shaders/solidcolor.fx | 19 +- .../Shaders/solidcolor_opengl.fx | 21 +- .../BarotraumaClient/Shaders/watershader.fx | 6 +- .../Shaders/watershader_opengl.fx | 6 +- .../BarotraumaClient/WindowsClient.csproj | 2 +- .../BarotraumaServer/LinuxServer.csproj | 2 +- Barotrauma/BarotraumaServer/MacServer.csproj | 2 +- .../ServerSource/Characters/Character.cs | 8 +- .../Characters/CharacterNetworking.cs | 61 +- .../ServerSource/DebugConsole.cs | 98 +- .../Events/Missions/CargoMission.cs | 2 +- .../Events/Missions/SalvageMission.cs | 16 +- .../BarotraumaServer/ServerSource/GameMain.cs | 13 +- .../GameModes/MultiPlayerCampaign.cs | 13 +- .../ServerSource/Items/Components/Door.cs | 3 +- .../Items/Components/Holdable/Holdable.cs | 3 +- .../Items/Components/Machines/Controller.cs | 2 +- .../Items/Components/Machines/Engine.cs | 2 +- .../Items/Components/Machines/Pump.cs | 4 +- .../Items/Components/Power/PowerContainer.cs | 2 +- .../Items/Components/Projectile.cs | 14 +- .../Components/Signal/ConnectionPanel.cs | 14 +- .../Components/Signal/CustomInterface.cs | 2 +- .../Items/Components/Signal/Terminal.cs | 2 +- .../ServerSource/Items/Inventory.cs | 21 +- .../ServerSource/Items/Item.cs | 10 +- .../ServerSource/Networking/BanList.cs | 6 +- .../ServerSource/Networking/ChatMessage.cs | 1 + .../Networking/ChildServerRelay.cs | 2 +- .../ServerSource/Networking/Client.cs | 8 +- .../ServerSource/Networking/EntitySpawner.cs | 2 +- .../Networking/FileTransfer/FileSender.cs | 4 +- .../ServerSource/Networking/GameServer.cs | 177 +- .../ServerSource/Networking/KarmaManager.cs | 203 ++- .../ServerEntityEventManager.cs | 23 +- .../Peers/Server/LidgrenServerPeer.cs | 14 +- .../Peers/Server/SteamP2PServerPeer.cs | 10 +- .../ServerSource/Networking/RespawnManager.cs | 2 +- .../ServerSource/Networking/ServerSettings.cs | 15 +- .../Networking/Voip/VoipServer.cs | 3 +- .../ServerSource/Networking/Voting.cs | 2 +- .../ServerSource/Networking/WhiteList.cs | 6 +- .../BarotraumaServer/ServerSource/Program.cs | 11 +- .../Traitors/Goals/GoalDestroyItemsWithTag.cs | 4 +- .../ServerSource/Traitors/TraitorMission.cs | 9 +- .../BarotraumaServer/WindowsServer.csproj | 2 +- .../Data/ContentPackages/Vanilla 0.9.xml | 3 + .../BarotraumaShared/Data/karmasettings.xml | 12 +- .../Characters/AI/AIController.cs | 2 +- .../Characters/AI/EnemyAIController.cs | 522 ++++-- .../Characters/AI/HumanAIController.cs | 137 +- .../Characters/AI/IndoorsSteeringManager.cs | 138 +- .../SharedSource/Characters/AI/LatchOntoAI.cs | 52 +- .../Characters/AI/NPCConversation.cs | 6 +- .../Characters/AI/Objectives/AIObjective.cs | 26 +- .../Objectives/AIObjectiveChargeBatteries.cs | 7 +- .../AI/Objectives/AIObjectiveCombat.cs | 20 +- .../AI/Objectives/AIObjectiveContainItem.cs | 2 +- .../Objectives/AIObjectiveExtinguishFire.cs | 7 +- .../Objectives/AIObjectiveExtinguishFires.cs | 6 +- .../Objectives/AIObjectiveFightIntruders.cs | 13 +- .../AI/Objectives/AIObjectiveFindSafety.cs | 124 +- .../AI/Objectives/AIObjectiveFixLeak.cs | 18 +- .../AI/Objectives/AIObjectiveFixLeaks.cs | 18 +- .../AI/Objectives/AIObjectiveGetItem.cs | 69 +- .../AI/Objectives/AIObjectiveGoTo.cs | 67 +- .../AI/Objectives/AIObjectiveIdle.cs | 50 +- .../AI/Objectives/AIObjectiveLoop.cs | 9 +- .../AI/Objectives/AIObjectiveManager.cs | 152 +- .../AI/Objectives/AIObjectiveOperateItem.cs | 70 +- .../AI/Objectives/AIObjectivePumpWater.cs | 8 +- .../AI/Objectives/AIObjectiveRepairItem.cs | 28 +- .../AI/Objectives/AIObjectiveRepairItems.cs | 47 +- .../AI/Objectives/AIObjectiveRescue.cs | 68 +- .../AI/Objectives/AIObjectiveRescueAll.cs | 65 +- .../SharedSource/Characters/AI/Order.cs | 142 +- .../SharedSource/Characters/AI/PathFinder.cs | 26 +- .../Characters/AI/SteeringPath.cs | 37 +- .../Characters/AI/Wreck/WreckAI.cs | 202 ++- .../Characters/AI/Wreck/WreckAIConfig.cs | 53 +- .../SharedSource/Characters/AICharacter.cs | 15 +- .../Characters/Animation/AnimController.cs | 3 +- .../Animation/FishAnimController.cs | 64 +- .../Animation/HumanoidAnimController.cs | 84 +- .../Characters/Animation/Ragdoll.cs | 225 ++- .../SharedSource/Characters/Attack.cs | 36 +- .../SharedSource/Characters/Character.cs | 432 +++-- .../SharedSource/Characters/CharacterInfo.cs | 11 +- .../Characters/CharacterPrefab.cs | 2 +- .../Health/Afflictions/Affliction.cs | 4 +- .../Health/Afflictions/AfflictionHusk.cs | 43 +- .../Health/Afflictions/AfflictionPrefab.cs | 3 +- .../Health/Afflictions/AfflictionPsychosis.cs | 2 +- .../Health/Buffs/BuffDurationIncrease.cs | 14 +- .../Characters/Health/CharacterHealth.cs | 73 +- .../Characters/Health/DamageModifier.cs | 7 + .../SharedSource/Characters/Jobs/Job.cs | 2 +- .../SharedSource/Characters/Jobs/JobPrefab.cs | 4 +- .../SharedSource/Characters/Limb.cs | 196 ++- .../Params/Animation/AnimationParams.cs | 2 +- .../Params/Animation/FishAnimations.cs | 19 +- .../Characters/Params/CharacterParams.cs | 29 +- .../Characters/Params/EditableParams.cs | 14 +- .../Params/Ragdoll/RagdollParams.cs | 23 +- .../SharedSource/Characters/SkillSettings.cs | 2 +- .../SharedSource/ContentPackage.cs | 59 +- .../SharedSource/DebugConsole.cs | 22 +- .../BarotraumaShared/SharedSource/Enums.cs | 19 +- .../SharedSource/Events/EventManager.cs | 128 +- .../Events/EventManagerSettings.cs | 3 +- .../Events/Missions/CombatMission.cs | 17 - .../Events/Missions/MonsterMission.cs | 2 +- .../Events/Missions/SalvageMission.cs | 67 +- .../SharedSource/Events/MonsterEvent.cs | 31 +- .../Events/ScriptedEventPrefab.cs | 2 - .../Extensions/IEnumerableExtensions.cs | 13 +- .../SharedSource/FrameCounter.cs | 3 +- .../SharedSource/GameAnalyticsManager.cs | 2 +- .../GameSession/AutoItemPlacer.cs | 6 +- .../SharedSource/GameSession/CargoManager.cs | 22 +- .../GameModes/MultiPlayerCampaign.cs | 3 +- .../SharedSource/GameSession/GameSession.cs | 11 +- .../SharedSource/GameSettings.cs | 441 ++--- .../SharedSource/InputType.cs | 1 + .../SharedSource/Items/CharacterInventory.cs | 12 +- .../Items/Components/DockingPort.cs | 89 +- .../SharedSource/Items/Components/Door.cs | 43 +- .../Items/Components/ElectricalDischarger.cs | 26 +- .../Items/Components/Holdable/Holdable.cs | 39 +- .../Items/Components/Holdable/MeleeWeapon.cs | 71 +- .../Items/Components/Holdable/Pickable.cs | 2 +- .../Items/Components/Holdable/Propulsion.cs | 2 +- .../Items/Components/Holdable/RangedWeapon.cs | 4 +- .../Items/Components/Holdable/RepairTool.cs | 87 +- .../Items/Components/Holdable/Throwable.cs | 2 +- .../Items/Components/ItemComponent.cs | 168 +- .../Items/Components/ItemContainer.cs | 30 +- .../Items/Components/Machines/Controller.cs | 20 +- .../Components/Machines/Deconstructor.cs | 4 +- .../Items/Components/Machines/Engine.cs | 11 +- .../Items/Components/Machines/Fabricator.cs | 4 +- .../Components/Machines/OxygenGenerator.cs | 2 +- .../Items/Components/Machines/Pump.cs | 7 +- .../Items/Components/Machines/Reactor.cs | 23 +- .../Items/Components/Machines/Steering.cs | 68 +- .../Items/Components/Power/PowerTransfer.cs | 2 + .../Items/Components/Power/Powered.cs | 1 + .../Items/Components/Projectile.cs | 40 +- .../Items/Components/Repairable.cs | 2 +- .../SharedSource/Items/Components/Rope.cs | 4 + .../Items/Components/Signal/AndComponent.cs | 6 +- .../Components/Signal/ArithmeticComponent.cs | 8 +- .../Components/Signal/ConnectionPanel.cs | 26 +- .../Items/Components/Signal/DelayComponent.cs | 6 +- .../Components/Signal/EqualsComponent.cs | 6 +- .../Signal/ExponentiationComponent.cs | 2 +- .../Components/Signal/FunctionComponent.cs | 2 +- .../Items/Components/Signal/LightComponent.cs | 31 +- .../Components/Signal/MemoryComponent.cs | 2 +- .../Components/Signal/ModuloComponent.cs | 2 +- .../Items/Components/Signal/MotionSensor.cs | 20 +- .../Components/Signal/OscillatorComponent.cs | 4 +- .../Components/Signal/RegExFindComponent.cs | 8 +- .../Items/Components/Signal/RelayComponent.cs | 2 +- .../Components/Signal/SignalCheckComponent.cs | 6 +- .../Items/Components/Signal/SmokeDetector.cs | 44 +- .../Items/Components/Signal/Terminal.cs | 2 +- .../Signal/TrigonometricFunctionComponent.cs | 4 +- .../Items/Components/Signal/WaterDetector.cs | 4 +- .../Items/Components/Signal/WifiComponent.cs | 65 +- .../Items/Components/Signal/Wire.cs | 29 +- .../SharedSource/Items/Components/Turret.cs | 222 ++- .../SharedSource/Items/Components/Wearable.cs | 19 +- .../SharedSource/Items/Inventory.cs | 36 + .../SharedSource/Items/Item.cs | 119 +- .../SharedSource/Items/ItemPrefab.cs | 34 +- .../SharedSource/Map/CorpsePrefab.cs | 11 +- .../SharedSource/Map/Entity.cs | 4 +- .../SharedSource/Map/Explosion.cs | 88 +- .../SharedSource/Map/FireSource.cs | 32 +- .../BarotraumaShared/SharedSource/Map/Gap.cs | 72 +- .../BarotraumaShared/SharedSource/Map/Hull.cs | 113 +- .../SharedSource/Map/ItemAssemblyPrefab.cs | 18 +- .../SharedSource/Map/Levels/CaveGenerator.cs | 73 +- .../SharedSource/Map/Levels/Level.cs | 104 +- .../Map/Levels/LevelGenerationParams.cs | 9 +- .../Map/Levels/LevelObjects/LevelTrigger.cs | 27 +- .../Map/Levels/Ruins/RuinGenerationParams.cs | 6 +- .../Map/Levels/Ruins/RuinGenerator.cs | 5 +- .../SharedSource/Map/LinkedSubmarine.cs | 37 +- .../SharedSource/Map/Map/LocationType.cs | 2 +- .../SharedSource/Map/Md5Hash.cs | 2 +- .../SharedSource/Map/RoundEndCinematic.cs | 9 + .../SharedSource/Map/Structure.cs | 32 +- .../SharedSource/Map/StructurePrefab.cs | 2 +- .../SharedSource/Map/Submarine.cs | 249 ++- .../SharedSource/Map/SubmarineBody.cs | 47 +- .../SharedSource/Map/SubmarineInfo.cs | 115 +- .../SharedSource/Map/WayPoint.cs | 14 +- .../SharedSource/Networking/ChatMessage.cs | 12 +- .../Networking/ChildServerRelay.cs | 20 +- .../SharedSource/Networking/Client.cs | 12 + .../Networking/ClientPermissions.cs | 2 +- .../SharedSource/Networking/EntitySpawner.cs | 6 +- .../SharedSource/Networking/KarmaManager.cs | 23 +- .../SharedSource/Networking/NetConfig.cs | 20 + .../NetEntityEvent/NetEntityEvent.cs | 3 +- .../SharedSource/Networking/NetworkMember.cs | 9 +- .../Networking/OrderChatMessage.cs | 2 +- .../Networking/Primitives/Message/Message.cs | 8 +- .../SharedSource/Networking/ServerLog.cs | 18 +- .../SharedSource/Networking/ServerSettings.cs | 2 +- .../SharedSource/Networking/SteamManager.cs | 6 +- .../SharedSource/Networking/Voip/VoipQueue.cs | 51 +- .../SharedSource/Networking/WhiteList.cs | 2 +- .../SharedSource/Physics/Physics.cs | 2 +- .../SharedSource/Physics/PhysicsBody.cs | 16 +- .../SharedSource/ProcGen/VoronoiElements.cs | 14 +- .../SharedSource/Screens/GameScreen.cs | 6 - .../Serialization/SerializableProperty.cs | 21 +- .../Serialization/XMLExtensions.cs | 2 +- .../SharedSource/Sprite/ConditionalSprite.cs | 25 +- .../SharedSource/Sprite/DeformableSprite.cs | 6 +- .../SharedSource/Sprite/Sprite.cs | 13 +- .../StatusEffects/PropertyConditional.cs | 2 +- .../StatusEffects/StatusEffect.cs | 132 +- .../SharedSource/SteamAchievementManager.cs | 38 +- .../SharedSource/TextManager.cs | 41 +- .../BarotraumaShared/SharedSource/TextPack.cs | 11 +- .../SharedSource/Utils/RichTextData.cs | 85 + .../SharedSource/Utils/SafeIO.cs | 546 ++++++ .../SharedSource/Utils/SaveUtil.cs | 35 +- .../SharedSource/Utils/ToolBox.cs | 15 +- .../SharedSource/Utils/UpdaterUtil.cs | 12 +- .../BarotraumaShared/Submarines/Azimuth.sub | Bin 216657 -> 217413 bytes .../BarotraumaShared/Submarines/Berilia.sub | Bin 303078 -> 303685 bytes .../BarotraumaShared/Submarines/Dugong.sub | Bin 210903 -> 211096 bytes .../BarotraumaShared/Submarines/Hemulen.sub | Bin 254811 -> 255181 bytes .../BarotraumaShared/Submarines/Humpback.sub | Bin 207126 -> 207639 bytes .../BarotraumaShared/Submarines/Kastrull.sub | Bin 553602 -> 572637 bytes .../Submarines/KastrullDrone.sub | Bin 289192 -> 289652 bytes .../BarotraumaShared/Submarines/Remora.sub | Bin 331372 -> 332315 bytes .../BarotraumaShared/Submarines/Typhon.sub | Bin 271662 -> 283709 bytes .../BarotraumaShared/Submarines/Typhon2.sub | Bin 298915 -> 291927 bytes Barotrauma/BarotraumaShared/changelog.txt | 225 ++- Barotrauma/BarotraumaShared/config.xml | 2 +- .../BarotraumaShared/serversettings.xml | 2 +- .../Enum/DebugOutputType.cs | 2 +- .../Interfaces/ISteamNetworkingUtils.cs | 4 +- .../SteamNetworkingUtils.cs | 5 + .../Structs/SteamNetworking.cs | 3 +- .../Dynamics/Body.cs | 4 +- .../GA_SDK_NETSTANDARD.csproj | 2 +- Libraries/Lidgren.Network/NetPeer.Internal.cs | 2 +- .../Lidgren.Network/NetPeerConfiguration.cs | 6 + .../Graphics/GraphicsDevice.DirectX.cs | 4 +- .../Graphics/SpriteBatch.cs | 39 + .../Graphics/SpriteBatchItem.cs | 2 +- .../Graphics/SpriteBatcher.cs | 63 +- .../Graphics/Texture2D.DirectX.cs | 5 +- ...oGame.Framework.Windows.NetStandard.csproj | 9 +- .../Properties/launchSettings.json | 8 + 426 files changed, 14384 insertions(+), 5708 deletions(-) create mode 100644 Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs create mode 100644 Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs create mode 100644 Barotrauma/BarotraumaClient/ClientSource/Utils/Quad.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Utils/RichTextData.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Utils/SafeIO.cs create mode 100644 Libraries/MonoGame.Framework/Src/MonoGame.Framework/Properties/launchSettings.json diff --git a/.gitignore b/.gitignore index 2afaafc0a..4dd2d8677 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,8 @@ Libraries/webm_mem_playback/opus_x64_linux/ # Mac *.DS_Store +# Win +desktop.ini + #Merge script temp.txt diff --git a/Barotrauma/BarotraumaClient/ClientSource/Camera.cs b/Barotrauma/BarotraumaClient/ClientSource/Camera.cs index 48648f15b..1c5adb3ff 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Camera.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Camera.cs @@ -200,7 +200,7 @@ namespace Barotrauma worldView = new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight); viewMatrix = Matrix.CreateTranslation(new Vector3(GameMain.GraphicsWidth / 2.0f, GameMain.GraphicsHeight / 2.0f, 0)); - globalZoomScale = (float)Math.Pow(new Vector2(resolution.X, resolution.Y).Length() / new Vector2(1920, 1080).Length(), 2); + globalZoomScale = (float)Math.Pow(new Vector2(GUI.UIWidth, resolution.Y).Length() / GUI.ReferenceResolution.Length(), 2); } public void UpdateTransform(bool interpolate = true) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs index a9ff967ca..b773968c5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs @@ -35,7 +35,7 @@ namespace Barotrauma } targetPos.Y = -targetPos.Y; GUI.DrawLine(spriteBatch, pos, targetPos, GUI.Style.Red * 0.5f, 0, 4); - if (wallTarget != null) + if (wallTarget != null && (State == AIState.Attack || State == AIState.Aggressive || State == AIState.PassiveAggressive)) { Vector2 wallTargetPos = wallTarget.Position; if (wallTarget.Structure.Submarine != null) { wallTargetPos += wallTarget.Structure.Submarine.Position; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs new file mode 100644 index 000000000..fd9e93f7e --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs @@ -0,0 +1,50 @@ +using Barotrauma.Extensions; +using Microsoft.Xna.Framework; +using System.Collections.Generic; +using Barotrauma.Networking; + +namespace Barotrauma +{ + partial class WreckAI : IServerSerializable + { + private CoroutineHandle fadeOutRoutine; + partial void FadeOutColors() + { + if (fadeOutRoutine != null) + { + CoroutineManager.StopCoroutines(fadeOutRoutine); + } + fadeOutRoutine = CoroutineManager.StartCoroutine(FadeOutColors(Config.DeadEntityColorFadeOutTime)); + } + + private IEnumerable FadeOutColors(float time) + { + float timer = 0; + while (timer < time) + { + timer += CoroutineManager.DeltaTime; + float m = MathHelper.Lerp(1, Config.DeadEntityColorMultiplier, MathUtils.InverseLerp(0, time, timer)); + foreach (var item in thalamusItems) + { + if (item.Prefab.BrokenSprites.None()) + { + Color c = item.prefab.SpriteColor; + item.SpriteColor = new Color(c.R / 255f * m, c.G / 255f * m, c.B / 255f * m, c.A / 255f); + } + } + foreach (var structure in thalamusStructures) + { + Color c = structure.prefab.SpriteColor; + structure.SpriteColor = new Color(c.R / 255f * m, c.G / 255f * m, c.B / 255f * m, c.A / 255f); + } + yield return CoroutineStatus.Running; + } + yield return CoroutineStatus.Success; + } + + public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) + { + IsAlive = msg.ReadBoolean(); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs index eb622fe34..3a2159e52 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs @@ -389,7 +389,7 @@ namespace Barotrauma { foreach (Limb limb in Limbs) { - if (limb == null || limb.IsSevered || limb.ActiveSprite == null) continue; + if (limb == null || limb.IsSevered || limb.ActiveSprite == null) { continue; } Vector2 spriteOrigin = limb.ActiveSprite.Origin; spriteOrigin.X = limb.ActiveSprite.SourceRect.Width - spriteOrigin.X; @@ -404,8 +404,8 @@ namespace Barotrauma float gibParticleAmount = MathHelper.Clamp(limb.Mass / character.AnimController.Mass, 0.1f, 1.0f); foreach (ParticleEmitter emitter in character.GibEmitters) { - if (inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Air) continue; - if (!inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Water) continue; + if (inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Air) { continue; } + if (!inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Water) { continue; } emitter.Emit(1.0f, limb.WorldPosition, character.CurrentHull, amountMultiplier: gibParticleAmount); } @@ -418,7 +418,8 @@ namespace Barotrauma if (playSound) { - SoundPlayer.PlayDamageSound("Gore", 1.0f, limbJoint.LimbA.body); + var damageSound = character.GetSound(s => s.Type == CharacterSound.SoundType.Damage); + SoundPlayer.PlayDamageSound(limbJoint.Params.BreakSound, 1.0f, limbJoint.LimbA.body.DrawPosition, range: damageSound != null ? damageSound.Range : 800); } } @@ -446,9 +447,10 @@ namespace Barotrauma float depthOffset = GetDepthOffset(); for (int i = 0; i < limbs.Length; i++) { - if (depthOffset != 0.0f) { inversedLimbDrawOrder[i].ActiveSprite.Depth += depthOffset; } - inversedLimbDrawOrder[i].Draw(spriteBatch, cam, color); - if (depthOffset != 0.0f) { inversedLimbDrawOrder[i].ActiveSprite.Depth -= depthOffset; } + var limb = inversedLimbDrawOrder[i]; + if (depthOffset != 0.0f) { limb.ActiveSprite.Depth += depthOffset; } + limb.Draw(spriteBatch, cam, color); + if (depthOffset != 0.0f) { limb.ActiveSprite.Depth -= depthOffset; } } LimbJoints.ForEach(j => j.Draw(spriteBatch)); } @@ -489,8 +491,8 @@ namespace Barotrauma public void DebugDraw(SpriteBatch spriteBatch) { - if (!GameMain.DebugDraw || !character.Enabled) return; - if (simplePhysicsEnabled) return; + if (!GameMain.DebugDraw || !character.Enabled) { return; } + if (simplePhysicsEnabled) { return; } foreach (Limb limb in Limbs) { @@ -522,7 +524,10 @@ namespace Barotrauma if (limb.body.TargetPosition != null) { Vector2 pos = ConvertUnits.ToDisplayUnits((Vector2)limb.body.TargetPosition); - if (currentHull?.Submarine != null) pos += currentHull.Submarine.DrawPosition; + if (currentHull?.Submarine != null) + { + pos += currentHull.Submarine.DrawPosition; + } pos.Y = -pos.Y; GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X - 10, (int)pos.Y - 10, 20, 20), Color.Cyan, false, 0.01f); @@ -541,13 +546,19 @@ namespace Barotrauma if (character.MemState.Count > 1) { Vector2 prevPos = ConvertUnits.ToDisplayUnits(character.MemState[0].Position); - if (currentHull?.Submarine != null) prevPos += currentHull.Submarine.DrawPosition; + if (currentHull?.Submarine != null) + { + prevPos += currentHull.Submarine.DrawPosition; + } prevPos.Y = -prevPos.Y; for (int i = 1; i < character.MemState.Count; i++) { Vector2 currPos = ConvertUnits.ToDisplayUnits(character.MemState[i].Position); - if (currentHull?.Submarine != null) currPos += currentHull.Submarine.DrawPosition; + if (currentHull?.Submarine != null) + { + currPos += currentHull.Submarine.DrawPosition; + } currPos.Y = -currPos.Y; GUI.DrawRectangle(spriteBatch, new Rectangle((int)currPos.X - 3, (int)currPos.Y - 3, 6, 6), Color.Cyan * 0.6f, true, 0.01f); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs index 7522954e5..c6a2f74d3 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using Barotrauma.Extensions; namespace Barotrauma { @@ -233,7 +234,7 @@ namespace Barotrauma pressureParticleTimer += pressure * deltaTime; if (pressureParticleTimer > 10.0f) { - Particle p = GameMain.ParticleManager.CreateParticle("waterblood", WorldPosition + Rand.Vector(5.0f), Rand.Vector(10.0f)); + GameMain.ParticleManager.CreateParticle(Params.BleedParticleWater, WorldPosition + Rand.Vector(5.0f), Rand.Vector(10.0f)); pressureParticleTimer = 0.0f; } } @@ -355,7 +356,7 @@ namespace Barotrauma } } - partial void OnAttackedProjSpecific(Character attacker, AttackResult attackResult) + partial void OnAttackedProjSpecific(Character attacker, AttackResult attackResult, float stun) { if (attackResult.Damage <= 1.0f || IsDead) { return; } if (soundTimer < soundInterval * 0.5f) @@ -444,6 +445,7 @@ namespace Barotrauma if (item.body != null && !item.body.Enabled) continue; if (item.ParentInventory != null) continue; if (ignoredItems != null && ignoredItems.Contains(item)) continue; + if (Screen.Selected is SubEditorScreen editor && editor.WiringMode && item.GetComponent() == null) { continue; } if (draggingItemToWorld) { @@ -812,19 +814,23 @@ namespace Barotrauma return progressBar; } + private readonly List matchingSounds = new List(); private SoundChannel soundChannel; public void PlaySound(CharacterSound.SoundType soundType) { if (sounds == null || sounds.Count == 0) { return; } if (soundChannel != null && soundChannel.IsPlaying) { return; } - - var matchingSounds = sounds.Where(s => - s.Type == soundType && - (s.Gender == Gender.None || (info != null && info.Gender == s.Gender))); - if (!matchingSounds.Any()) { return; } - - var matchingSoundsList = matchingSounds.ToList(); - var selectedSound = matchingSoundsList[Rand.Int(matchingSoundsList.Count)]; + if (GameMain.SoundManager?.Disabled ?? true) { return; } + matchingSounds.Clear(); + foreach (var s in sounds) + { + if (s.Type == soundType && (s.Gender == Gender.None || (info != null && info.Gender == s.Gender))) + { + matchingSounds.Add(s); + } + } + var selectedSound = matchingSounds.GetRandom(); + if (selectedSound?.Sound == null) { return; } soundChannel = SoundPlayer.PlaySound(selectedSound.Sound, AnimController.WorldPosition, selectedSound.Volume, selectedSound.Range, CurrentHull); soundTimer = soundInterval; } @@ -843,6 +849,11 @@ namespace Barotrauma activeObjectiveEntities.Remove(found); } + /// + /// Note that when a predicate is provided, the random option uses Linq.Where() extension method, which creates a new collection. + /// + public CharacterSound GetSound(Func predicate = null, bool random = false) => random ? sounds.GetRandom(predicate) : sounds.FirstOrDefault(predicate); + partial void ImplodeFX() { Vector2 centerOfMass = AnimController.GetCenterOfMass(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs index 8ccf31dcc..f9ce57161 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs @@ -2,6 +2,7 @@ using FarseerPhysics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; using System; using System.Collections.Generic; using System.Linq; @@ -28,7 +29,7 @@ namespace Barotrauma { if (hudFrame == null) { - hudFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: null) + hudFrame = new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, GUI.Canvas), style: null) { CanBeFocused = false }; @@ -37,6 +38,9 @@ namespace Barotrauma } } + private static bool shouldRecreateHudTexts = true; + private static bool heldDownShiftWhenGotHudTexts; + private static bool ShouldDrawInventory(Character character) { return @@ -140,7 +144,11 @@ namespace Barotrauma else { focusedItemOverlayTimer = Math.Max(focusedItemOverlayTimer - deltaTime, 0.0f); - if (focusedItemOverlayTimer <= 0.0f) focusedItem = null; + if (focusedItemOverlayTimer <= 0.0f) + { + focusedItem = null; + shouldRecreateHudTexts = true; + } } } @@ -194,6 +202,7 @@ namespace Barotrauma foreach (Item brokenItem in brokenItems) { + if (brokenItem.NonInteractable) { continue; } float dist = Vector2.Distance(character.WorldPosition, brokenItem.WorldPosition); Vector2 drawPos = brokenItem.DrawPosition; float alpha = Math.Min((1000.0f - dist) / 1000.0f * 2.0f, 1.0f); @@ -209,20 +218,20 @@ namespace Barotrauma DrawCharacterHoverTexts(spriteBatch, cam, character); } - float circleSize; if (character.FocusedItem != null) { if (focusedItem != character.FocusedItem) { focusedItemOverlayTimer = Math.Min(1.0f, focusedItemOverlayTimer); + shouldRecreateHudTexts = true; } - focusedItem = character.FocusedItem; + focusedItem = character.FocusedItem; } if (focusedItem != null && focusedItemOverlayTimer > ItemOverlayDelay) { Vector2 circlePos = cam.WorldToScreen(focusedItem.DrawPosition); - circleSize = Math.Max(focusedItem.Rect.Width, focusedItem.Rect.Height) * 1.5f; + float circleSize = Math.Max(focusedItem.Rect.Width, focusedItem.Rect.Height) * 1.5f; circleSize = MathHelper.Clamp(circleSize, 45.0f, 100.0f) * Math.Min((focusedItemOverlayTimer - 1.0f) * 5.0f, 1.0f); if (circleSize > 0.0f) { @@ -238,7 +247,14 @@ namespace Barotrauma if (!GUI.DisableItemHighlights && !Inventory.DraggingItemToWorld) { - var hudTexts = focusedItem.GetHUDTexts(character); + bool shiftDown = PlayerInput.KeyDown(Keys.LeftShift) || PlayerInput.KeyDown(Keys.RightShift); + if(shouldRecreateHudTexts || heldDownShiftWhenGotHudTexts != shiftDown) + { + shouldRecreateHudTexts = true; + heldDownShiftWhenGotHudTexts = shiftDown; + } + var hudTexts = focusedItem.GetHUDTexts(character, shouldRecreateHudTexts); + shouldRecreateHudTexts = false; int dir = Math.Sign(focusedItem.WorldPosition.X - character.WorldPosition.X); @@ -358,7 +374,7 @@ namespace Barotrauma { GUIComponent.DrawToolTip( spriteBatch, - character.Info?.Job == null ? character.DisplayName : character.Name + " (" + character.Info.Job.Name + ")", + character.Info?.Job == null ? character.DisplayName : character.DisplayName + " (" + character.Info.Job.Name + ")", HUDLayoutSettings.PortraitArea); } } @@ -378,10 +394,6 @@ namespace Barotrauma startPos = cam.WorldToScreen(startPos); string focusName = character.FocusedCharacter.DisplayName; - if (character.FocusedCharacter.Info != null) - { - focusName = character.FocusedCharacter.Info.DisplayName; - } Vector2 textPos = startPos; Vector2 textSize = GUI.Font.MeasureString(focusName); Vector2 largeTextSize = GUI.SubHeadingFont.MeasureString(focusName); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs index 4a93fc785..8058762f4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs @@ -19,75 +19,107 @@ namespace Barotrauma } - public GUIFrame CreateInfoFrame(GUIFrame frame) + public GUIComponent CreateInfoFrame(GUIFrame frame, bool returnParent, Sprite permissionIcon = null) { - var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.9f), frame.RectTransform, Anchor.TopCenter) { RelativeOffset = new Vector2(0.0f, 0.1f) }) + var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.874f, 0.58f), frame.RectTransform, Anchor.TopCenter) { RelativeOffset = new Vector2(0.0f, 0.05f) }) { - Stretch = true, - RelativeSpacing = 0.03f + RelativeSpacing = 0.05f + //Stretch = true }; - var headerArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.4f), paddedFrame.RectTransform), isHorizontal: true) - { - RelativeSpacing = 0.05f, - Stretch = true - }; + var headerArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.322f), paddedFrame.RectTransform), isHorizontal: true); - new GUICustomComponent(new RectTransform(new Vector2(0.25f, 1.0f), headerArea.RectTransform), - onDraw: (sb, component) => DrawIcon(sb, component.Rect.Center.ToVector2(), targetAreaSize: component.Rect.Size.ToVector2())); + new GUICustomComponent(new RectTransform(new Vector2(0.425f, 1.0f), headerArea.RectTransform), + onDraw: (sb, component) => DrawInfoFrameCharacterIcon(sb, component.Rect)); ScalableFont font = paddedFrame.Rect.Width < 280 ? GUI.SmallFont : GUI.Font; - var headerTextArea = new GUILayoutGroup(new RectTransform(new Vector2(0.75f, 1.0f), headerArea.RectTransform)) + var headerTextArea = new GUILayoutGroup(new RectTransform(new Vector2(0.575f, 1.0f), headerArea.RectTransform)) { - RelativeSpacing = 0.05f, + RelativeSpacing = 0.02f, Stretch = true }; Color? nameColor = null; if (Job != null) { nameColor = Job.Prefab.UIColor; } - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), - Name, textColor: nameColor, font: GUI.LargeFont) + + GUITextBlock characterNameBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), ToolBox.LimitString(Name, GUI.Font, headerTextArea.Rect.Width), textColor: nameColor, font: GUI.Font) { - Padding = Vector4.Zero, - AutoScaleHorizontal = true + ForceUpperCase = true, + Padding = Vector4.Zero }; - if (Job != null) + if (permissionIcon != null) { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), - Job.Name, textColor: Job.Prefab.UIColor, font: font); + Point iconSize = permissionIcon.SourceRect.Size; + int iconWidth = (int)((float)characterNameBlock.Rect.Height / iconSize.Y * iconSize.X); + new GUIImage(new RectTransform(new Point(iconWidth, characterNameBlock.Rect.Height), characterNameBlock.RectTransform) { AbsoluteOffset = new Point(-iconWidth - 2, 0) }, permissionIcon) { IgnoreLayoutGroups = true }; + } + + if (Job != null) + { + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), Job.Name, textColor: Job.Prefab.UIColor, font: font) + { + Padding = Vector4.Zero + }; } if (personalityTrait != null) { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), - TextManager.AddPunctuation(':', TextManager.Get("PersonalityTrait"), TextManager.Get("personalitytrait." + personalityTrait.Name.Replace(" ", ""))), font: font); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), TextManager.AddPunctuation(':', TextManager.Get("PersonalityTrait"), TextManager.Get("personalitytrait." + personalityTrait.Name.Replace(" ", ""))), font: font) + { + Padding = Vector4.Zero + }; } - //spacing - new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), paddedFrame.RectTransform), style: null); - - if (Job != null) + if (Job != null && (Character == null || !Character.IsDead)) { + var skillsArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.63f), paddedFrame.RectTransform, Anchor.BottomCenter, Pivot.BottomCenter)) + { + Stretch = true + }; + var skills = Job.Skills; skills.Sort((s1, s2) => -s1.Level.CompareTo(s2.Level)); - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), paddedFrame.RectTransform), - TextManager.Get("Skills") + ":", font: font); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillsArea.RectTransform), TextManager.AddPunctuation(':', TextManager.Get("skills"), string.Empty), font: font) { Padding = Vector4.Zero }; foreach (Skill skill in skills) { Color textColor = Color.White * (0.5f + skill.Level / 200.0f); - var skillName = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), paddedFrame.RectTransform), - TextManager.Get("SkillName." + skill.Identifier), textColor: textColor, font: font); - new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), skillName.RectTransform), - ((int)skill.Level).ToString(), textColor: textColor, font: font, textAlignment: Alignment.CenterRight); + var skillName = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillsArea.RectTransform), TextManager.Get("SkillName." + skill.Identifier), textColor: textColor, font: font) { Padding = Vector4.Zero }; + new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), skillName.RectTransform), ((int)skill.Level).ToString(), textColor: textColor, font: font, textAlignment: Alignment.CenterRight); } } + else if (Character != null && Character.IsDead) + { + var deadArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.63f), paddedFrame.RectTransform, Anchor.BottomCenter, Pivot.BottomCenter)) + { + Stretch = true + }; - return frame; + string deadDescription = TextManager.AddPunctuation(':', TextManager.Get("deceased") + "\n" + Character.CauseOfDeath.Affliction?.CauseOfDeathDescription ?? + TextManager.AddPunctuation(':', TextManager.Get("CauseOfDeath"), TextManager.Get("CauseOfDeath." + Character.CauseOfDeath.Type.ToString()))); + + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), deadArea.RectTransform), deadDescription, textColor: GUI.Style.Red, font: font, textAlignment: Alignment.TopLeft) { Padding = Vector4.Zero }; + } + + if (returnParent) + { + return frame; + } + else + { + return paddedFrame; + } + } + + private void DrawInfoFrameCharacterIcon(SpriteBatch sb, Rectangle componentRect) + { + Vector2 targetAreaSize = componentRect.Size.ToVector2(); + float scale = Math.Min(targetAreaSize.X / headSprite.size.X, targetAreaSize.Y / headSprite.size.Y); + DrawIcon(sb, componentRect.Location.ToVector2() + headSprite.size / 2 * scale, targetAreaSize); } public GUIFrame CreateCharacterFrame(GUIComponent parent, string text, object userData) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs index 5726215f5..8a815e11f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs @@ -278,7 +278,7 @@ namespace Barotrauma break; case ServerNetObject.ENTITY_EVENT: - int eventType = msg.ReadRangedInteger(0, 3); + int eventType = msg.ReadRangedInteger(0, 4); switch (eventType) { case 0: @@ -338,6 +338,40 @@ namespace Barotrauma info?.SetSkillLevel(skillIdentifier, skillLevel, WorldPosition + Vector2.UnitY * 150.0f); } break; + case 4: + int attackLimbIndex = msg.ReadByte(); + UInt16 targetEntityID = msg.ReadUInt16(); + int targetLimbIndex = msg.ReadByte(); + + //255 = entity already removed, no need to do anything + if (attackLimbIndex == 255) { break; } + + if (attackLimbIndex >= AnimController.Limbs.Length) + { + DebugConsole.ThrowError($"Received invalid ExecuteAttack message. Limb index out of bounds ({attackLimbIndex})"); + break; + } + Limb attackLimb = AnimController.Limbs[attackLimbIndex]; + Limb targetLimb = null; + if (!(FindEntityByID(targetEntityID) is IDamageable targetEntity)) + { + DebugConsole.ThrowError($"Received invalid ExecuteAttack message. Target entity not found (ID {targetEntityID})"); + break; + } + if (targetEntity is Character targetCharacter) + { + if (targetLimbIndex >= targetCharacter.AnimController.Limbs.Length) + { + DebugConsole.ThrowError($"Received invalid ExecuteAttack message. Target limb index out of bounds ({targetLimbIndex})"); + break; + } + targetLimb = targetCharacter.AnimController.Limbs[targetLimbIndex]; + } + if (attackLimb?.attack != null) + { + attackLimb.ExecuteAttack(targetEntity, targetLimb, out _); + } + break; } msg.ReadPadBits(); break; @@ -397,8 +431,7 @@ namespace Barotrauma if (orderPrefabIndex >= 0 && orderPrefabIndex < Order.PrefabList.Count) { var orderPrefab = Order.PrefabList[orderPrefabIndex]; - if ((orderPrefab.ItemComponentType == null && orderPrefab.ItemIdentifiers.None()) || - (targetEntity != null && (targetEntity as Item).Components.Any(c => c?.GetType() == orderPrefab.ItemComponentType))) + if (!orderPrefab.MustSetTarget || (targetEntity != null && (targetEntity as Item).Components.Any(c => c?.GetType() == orderPrefab.ItemComponentType))) { character.SetOrder( new Order(orderPrefab, targetEntity, (targetEntity as Item)?.Components.FirstOrDefault(c => c?.GetType() == orderPrefab.ItemComponentType), orderGiver: orderGiver), @@ -469,11 +502,9 @@ namespace Barotrauma causeOfDeathAffliction = AfflictionPrefab.Prefabs[afflictionName]; } } - - byte severedLimbCount = msg.ReadByte(); if (!IsDead) { - if (causeOfDeathType == CauseOfDeathType.Pressure) + if (causeOfDeathType == CauseOfDeathType.Pressure || causeOfDeathAffliction == AfflictionPrefab.Pressure) { Implode(true); } @@ -482,26 +513,26 @@ namespace Barotrauma Kill(causeOfDeathType, causeOfDeathAffliction?.Instantiate(1.0f), true); } } - - for (int i = 0; i < severedLimbCount; i++) - { - int severedJointIndex = msg.ReadByte(); - if (severedJointIndex < 0 || severedJointIndex >= AnimController.LimbJoints.Length) - { - string errorMsg = $"Error in CharacterNetworking.ReadStatus: severed joint index out of bounds (index: {severedJointIndex}, joint count: {AnimController.LimbJoints.Length})"; - GameAnalyticsManager.AddErrorEventOnce("CharacterNetworking.ReadStatus:JointIndexOutOfBounts", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); - } - else - { - AnimController.SeverLimbJoint(AnimController.LimbJoints[severedJointIndex]); - } - } } else { if (IsDead) { Revive(); } CharacterHealth.ClientRead(msg); } + byte severedLimbCount = msg.ReadByte(); + for (int i = 0; i < severedLimbCount; i++) + { + int severedJointIndex = msg.ReadByte(); + if (severedJointIndex < 0 || severedJointIndex >= AnimController.LimbJoints.Length) + { + string errorMsg = $"Error in CharacterNetworking.ReadStatus: severed joint index out of bounds (index: {severedJointIndex}, joint count: {AnimController.LimbJoints.Length})"; + GameAnalyticsManager.AddErrorEventOnce("CharacterNetworking.ReadStatus:JointIndexOutOfBounts", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); + } + else + { + AnimController.SeverLimbJoint(AnimController.LimbJoints[severedJointIndex]); + } + } } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionHusk.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionHusk.cs index 1ba700e72..cbef93fdc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionHusk.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionHusk.cs @@ -1,6 +1,6 @@ using Microsoft.Xna.Framework; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionPsychosis.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionPsychosis.cs index c6a8139fc..03ab84938 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionPsychosis.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/AfflictionPsychosis.cs @@ -1,4 +1,5 @@ using Barotrauma.Extensions; +using Barotrauma.Items.Components; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -20,9 +21,9 @@ namespace Barotrauma } const int MaxFakeFireSources = 10; - private float minFakeFireSourceInterval = 10.0f, maxFakeFireSourceInterval = 200.0f; + const float MinFakeFireSourceInterval = 30.0f, MaxFakeFireSourceInterval = 240.0f; private float createFireSourceTimer; - private List fakeFireSources = new List(); + private readonly List fakeFireSources = new List(); enum FloodType { @@ -31,26 +32,30 @@ namespace Barotrauma HideFlooding } - private float minSoundInterval = 10.0f, maxSoundInterval = 60.0f; + const float MinSoundInterval = 10.0f, MaxSoundInterval = 180.0f; private FloodType currentFloodType; private float soundTimer; - private float minFloodInterval = 30.0f, maxFloodInterval = 180.0f; + const float MinFloodInterval = 60.0f, MaxFloodInterval = 240.0f; private float createFloodTimer; private float currentFloodState; private float currentFloodDuration; + private float fakeBrokenInterval = 30.0f; + private float fakeBrokenTimer = 0.0f; + partial void UpdateProjSpecific(CharacterHealth characterHealth, Limb targetLimb, float deltaTime) { if (Character.Controlled != characterHealth.Character) return; UpdateFloods(deltaTime); UpdateSounds(characterHealth.Character, deltaTime); - UpdateFires(characterHealth.Character, deltaTime); + UpdateFires(characterHealth.Character, deltaTime); + UpdateFakeBroken(deltaTime); } private void UpdateSounds(Character character, float deltaTime) { - if (soundTimer < MathHelper.Lerp(maxSoundInterval, minSoundInterval, Strength / 100.0f)) + if (soundTimer < MathHelper.Lerp(MaxSoundInterval, MinSoundInterval, Strength / 100.0f)) { soundTimer += deltaTime; return; @@ -97,7 +102,7 @@ namespace Barotrauma return; } - if (createFloodTimer < MathHelper.Lerp(maxFloodInterval, minFloodInterval, Strength / 100.0f)) + if (createFloodTimer < MathHelper.Lerp(MaxFloodInterval, MinFloodInterval, Strength / 100.0f)) { createFloodTimer += deltaTime; return; @@ -124,7 +129,7 @@ namespace Barotrauma createFireSourceTimer += deltaTime; if (fakeFireSources.Count < MaxFakeFireSources && character.Submarine != null && - createFireSourceTimer > MathHelper.Lerp(maxFakeFireSourceInterval, minFakeFireSourceInterval, Strength / 100.0f)) + createFireSourceTimer > MathHelper.Lerp(MaxFakeFireSourceInterval, MinFakeFireSourceInterval, Strength / 100.0f)) { Hull fireHull = Hull.hullList.GetRandom(h => h.Submarine == character.Submarine); @@ -140,9 +145,9 @@ namespace Barotrauma foreach (FakeFireSource fakeFireSource in fakeFireSources) { - if (fakeFireSource.Hull.Surface > fakeFireSource.Hull.Rect.Y - fakeFireSource.Hull.Rect.Height + fakeFireSource.Position.Y) + if (fakeFireSource.Hull.DrawSurface > fakeFireSource.Hull.Rect.Y - fakeFireSource.Hull.Rect.Height + fakeFireSource.Position.Y) { - fakeFireSource.LifeTime -= deltaTime * 10.0f; + fakeFireSource.LifeTime -= deltaTime * 100.0f; } fakeFireSource.LifeTime -= deltaTime; @@ -162,5 +167,28 @@ namespace Barotrauma fakeFireSources.RemoveAll(fs => fs.LifeTime <= 0.0f); } + + private void UpdateFakeBroken(float deltaTime) + { + fakeBrokenTimer -= deltaTime; + if (fakeBrokenTimer > 0.0f) { return; } + + foreach (Item item in Item.ItemList) + { + var repairable = item.GetComponent(); + if (repairable == null) { continue; } + if (ShouldFakeBrokenItem(item)) + { + repairable.FakeBrokenTimer = 60.0f; + } + } + + fakeBrokenTimer = fakeBrokenInterval; + } + + private bool ShouldFakeBrokenItem(Item item) + { + return Rand.Range(0.0f, 1000.0f) < Strength; + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs index f2aaecdd4..54c1ba354 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs @@ -251,8 +251,7 @@ namespace Barotrauma { get { - // 0.38775510204f = percentage of offset before reaching the healthbar portion of the graphic going from bottom upwards - return new Point(2, (int)(HUDLayoutSettings.HealthBarArea.Size.Y * 0.38775510204f)); + return new Point(Math.Max(2, GUI.IntScaleCeiling(1.5f)), Math.Min(GUI.IntScaleFloor(18f), 19)); } } @@ -260,7 +259,7 @@ namespace Barotrauma { get { - return new Point((int)Math.Ceiling(HUDLayoutSettings.HealthBarArea.Size.X - 45 * GUI.Scale), (int)(healthBarHolder.Rect.Height - Math.Min(23 * GUI.Scale, 25)) / 2); + return new Point(healthBarHolder.Rect.Width - Math.Min(GUI.IntScale(45f), 47), GUI.IntScale(15f)); } } @@ -505,8 +504,6 @@ namespace Barotrauma Character.Controlled.AnimController.Anim = (Character.Controlled.AnimController.Anim == AnimController.Animation.CPR) ? AnimController.Animation.None : AnimController.Animation.CPR; - button.Selected = Character.Controlled.AnimController.Anim == AnimController.Animation.CPR; - selectedCharacter.AnimController.ResetPullJoints(); if (GameMain.Client != null) @@ -599,12 +596,14 @@ namespace Barotrauma switch (alignment) { case Alignment.Left: - healthInterfaceFrame.RectTransform.SetPosition(Anchor.CenterLeft); + healthInterfaceFrame.RectTransform.SetPosition(Anchor.BottomLeft); break; case Alignment.Right: - healthInterfaceFrame.RectTransform.SetPosition(Anchor.CenterRight); + healthInterfaceFrame.RectTransform.SetPosition(Anchor.BottomRight); break; } + + healthInterfaceFrame.RectTransform.AbsoluteOffset = new Point(HUDLayoutSettings.Padding, screenResolution.Y - HUDLayoutSettings.ChatBoxArea.Y + HUDLayoutSettings.Padding); healthInterfaceFrame.RectTransform.RecalculateChildren(false); } @@ -651,10 +650,14 @@ namespace Barotrauma bloodParticleTimer -= deltaTime * (affliction.Strength / 10.0f); if (bloodParticleTimer <= 0.0f) { + bool inWater = Character.AnimController.InWater; float bloodParticleSize = MathHelper.Lerp(0.5f, 1.0f, affliction.Strength / 100.0f); - if (!Character.AnimController.InWater) bloodParticleSize *= 2.0f; + if (!inWater) + { + bloodParticleSize *= 2.0f; + } var blood = GameMain.ParticleManager.CreateParticle( - Character.AnimController.InWater ? "waterblood" : "blooddrop", + inWater ? Character.Params.BleedParticleWater : Character.Params.BleedParticleAir, targetLimb.WorldPosition, Rand.Vector(affliction.Strength), 0.0f, Character.AnimController.CurrentHull); if (blood != null) @@ -765,7 +768,8 @@ namespace Barotrauma { OpenHealthWindow = null; } - else if (Character.Controlled == Character && Character.Controlled.FocusedCharacter == null) + else if (Character.Controlled == Character && + (Character.Controlled.FocusedCharacter?.CharacterHealth == null || !Character.Controlled.FocusedCharacter.CharacterHealth.UseHealthWindow)) { OpenHealthWindow = this; forceAfflictionContainerUpdate = true; @@ -946,6 +950,10 @@ namespace Barotrauma && !Character.IsDead && openHealthWindow == this; cprButton.IgnoreLayoutGroups = !cprButton.Visible; + cprButton.Selected = + Character.Controlled != null && + Character == Character.Controlled.SelectedCharacter && + Character.Controlled.AnimController.Anim == AnimController.Animation.CPR; cprFrame.RectTransform.Resize(new Vector2(0.7f, 1.0f)); cprButton.RectTransform.Resize(new Vector2(1.0f, 1.0f)); @@ -1100,7 +1108,7 @@ namespace Barotrauma float currHealth = healthBar.BarSize; Color prevColor = healthBar.Color; healthBarShadow.BarSize = healthShadowSize; - healthBarShadow.Color = GUI.Style.Red; + healthBarShadow.Color = Color.Lerp(GUI.Style.Red, Color.Black, 0.5f); healthBarShadow.Visible = true; healthBar.BarSize = currHealth; healthBar.Color = prevColor; @@ -1815,7 +1823,7 @@ namespace Barotrauma Vector2 iconPos = highlightArea.Center.ToVector2(); //Affliction mostSevereAffliction = thisAfflictions.FirstOrDefault(a => !a.Prefab.IsBuff && !thisAfflictions.Any(a2 => !a2.Prefab.IsBuff && a2.Strength > a.Strength)) ?? thisAfflictions.FirstOrDefault(); - Affliction mostSevereAffliction = SortAfflictionsBySeverity(thisAfflictions).FirstOrDefault(); + Affliction mostSevereAffliction = SortAfflictionsBySeverity(thisAfflictions, excludeBuffs: false).FirstOrDefault(); if (mostSevereAffliction != null) { DrawLimbAfflictionIcon(spriteBatch, mostSevereAffliction, iconScale, ref iconPos); } if (thisAfflictions.Count() > 1) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs index feb8dee03..ad9f5ff23 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs @@ -12,8 +12,10 @@ namespace Barotrauma { int width = 500, height = 400; - GUIButton backFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker"); - GUIFrame frame = new GUIFrame(new RectTransform(new Point(width, height), backFrame.RectTransform, Anchor.Center)); + GUIButton frameHolder = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, frameHolder.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + + GUIFrame frame = new GUIFrame(new RectTransform(new Point(width, height), frameHolder.RectTransform, Anchor.Center)); GUIFrame paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.9f), frame.RectTransform, Anchor.Center), style: null); new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), paddedFrame.RectTransform), Name, font: GUI.LargeFont); @@ -49,7 +51,7 @@ namespace Barotrauma font: GUI.SmallFont); }*/ - return backFrame; + return frameHolder; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs index fea4134be..e44ed6055 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs @@ -8,7 +8,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; using SpriteParams = Barotrauma.RagdollParams.SpriteParams; @@ -70,7 +70,6 @@ namespace Barotrauma } } } - } public void Draw(SpriteBatch spriteBatch) @@ -110,6 +109,7 @@ namespace Barotrauma private float wetTimer; private float dripParticleTimer; + private float deadTimer; /// /// Note that different limbs can share the same deformations. @@ -125,7 +125,7 @@ namespace Barotrauma { get { - var conditionalSprite = ConditionalSprites.FirstOrDefault(c => c.IsActive && c.DeformableSprite != null); + var conditionalSprite = ConditionalSprites.FirstOrDefault(c => c.Exclusive && c.IsActive && c.DeformableSprite != null); if (conditionalSprite != null) { return conditionalSprite.DeformableSprite; @@ -143,7 +143,7 @@ namespace Barotrauma { get { - var conditionalSprite = ConditionalSprites.FirstOrDefault(c => c.IsActive && c.ActiveSprite != null); + var conditionalSprite = ConditionalSprites.FirstOrDefault(c => c.Exclusive && c.IsActive && c.ActiveSprite != null); if (conditionalSprite != null) { return conditionalSprite.ActiveSprite; @@ -165,6 +165,12 @@ namespace Barotrauma public Sprite DamagedSprite { get; private set; } + public bool Hide + { + get => Params.Hide; + set => Params.Hide = value; + } + public List ConditionalSprites { get; private set; } = new List(); private Dictionary spriteAnimState = new Dictionary(); private Dictionary> DecorativeSpriteGroups = new Dictionary>(); @@ -273,7 +279,17 @@ namespace Barotrauma DamagedSprite = new Sprite(subElement, file: GetSpritePath(subElement, Params.damagedSpriteParams)); break; case "conditionalsprite": - var conditionalSprite = new ConditionalSprite(subElement, character, file: GetSpritePath(subElement, null)); + ISerializableEntity targetEntity; + string target = subElement.GetAttributeString("target", null); + if (string.Equals(target, "character", StringComparison.OrdinalIgnoreCase)) + { + targetEntity = character; + } + else + { + targetEntity = this; + } + var conditionalSprite = new ConditionalSprite(subElement, targetEntity, file: GetSpritePath(subElement, null)); ConditionalSprites.Add(conditionalSprite); if (conditionalSprite.DeformableSprite != null) { @@ -372,12 +388,16 @@ namespace Barotrauma private string GetSpritePath(XElement element, SpriteParams spriteParams) { - string texturePath = element.GetAttributeString("texture", null); - if (string.IsNullOrWhiteSpace(texturePath) && spriteParams != null) + if (spriteParams != null) { - texturePath = spriteParams.Ragdoll.Texture; + return GetSpritePath(spriteParams.GetTexturePath()); + } + else + { + string texturePath = element.GetAttributeString("texture", null); + texturePath = string.IsNullOrWhiteSpace(texturePath) ? ragdoll.RagdollParams.Texture : texturePath; + return GetSpritePath(texturePath); } - return GetSpritePath(texturePath); } /// @@ -418,19 +438,46 @@ namespace Barotrauma } } - partial void AddDamageProjSpecific(Vector2 simPosition, List afflictions, bool playSound, List appliedDamageModifiers) + partial void AddDamageProjSpecific(bool playSound, AttackResult result) { - float bleedingDamage = character.CharacterHealth.DoesBleed ? afflictions.FindAll(a => a is AfflictionBleeding).Sum(a => a.GetVitalityDecrease(character.CharacterHealth)) : 0; - float damage = afflictions.FindAll(a => a.Prefab.AfflictionType == "damage").Sum(a => a.GetVitalityDecrease(character.CharacterHealth)); - float damageMultiplier = 1; - foreach (DamageModifier damageModifier in appliedDamageModifiers) + float bleedingDamage = 0; + if (character.CharacterHealth.DoesBleed) { - damageMultiplier *= damageModifier.DamageMultiplier; + foreach (var affliction in result.Afflictions) + { + if (affliction is AfflictionBleeding) + { + bleedingDamage += affliction.GetVitalityDecrease(character.CharacterHealth); + } + } + } + float damage = 0; + foreach (var affliction in result.Afflictions) + { + if (affliction.Prefab.AfflictionType == "damage") + { + damage += affliction.GetVitalityDecrease(character.CharacterHealth); + } + } + float damageMultiplier = 1; + foreach (DamageModifier damageModifier in result.AppliedDamageModifiers) + { + foreach (var afflictionPrefab in AfflictionPrefab.List) + { + if (damageModifier.MatchesAffliction(afflictionPrefab.Identifier, afflictionPrefab.AfflictionType)) + { + if (afflictionPrefab.Effects.Any(e => e.MaxVitalityDecrease > 0)) + { + damageMultiplier *= damageModifier.DamageMultiplier; + break; + } + } + } } if (playSound) { string damageSoundType = (bleedingDamage > damage) ? "LimbSlash" : "LimbBlunt"; - foreach (DamageModifier damageModifier in appliedDamageModifiers) + foreach (DamageModifier damageModifier in result.AppliedDamageModifiers) { if (!string.IsNullOrWhiteSpace(damageModifier.DamageSound)) { @@ -447,9 +494,8 @@ namespace Barotrauma { foreach (ParticleEmitter emitter in character.DamageEmitters) { - if (inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Air) continue; - if (!inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Water) continue; - + if (inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Air) { continue; } + if (!inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Water) { continue; } emitter.Emit(1.0f, WorldPosition, character.CurrentHull, amountMultiplier: damageParticleAmount); } } @@ -461,9 +507,8 @@ namespace Barotrauma foreach (ParticleEmitter emitter in character.BloodEmitters) { - if (inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Air) continue; - if (!inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Water) continue; - + if (inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Air) { continue; } + if (!inWater && emitter.Prefab.ParticlePrefab.DrawTarget == ParticlePrefab.DrawTargetType.Water) { continue; } emitter.Emit(1.0f, WorldPosition, character.CurrentHull, sizeMultiplier: bloodParticleSize, amountMultiplier: bloodParticleAmount); } @@ -471,19 +516,26 @@ namespace Barotrauma { character.CurrentHull.AddDecal(character.BloodDecalName, WorldPosition, MathHelper.Clamp(bloodParticleSize, 0.5f, 1.0f)); } - } - + } } partial void UpdateProjSpecific(float deltaTime) { - if (!body.Enabled) return; + if (!body.Enabled) { return; } - if (!character.IsDead) + if (!IsDead) { DamageOverlayStrength -= deltaTime; BurnOverlayStrength -= deltaTime; } + else + { + var spriteParams = Params.GetSprite(); + if (spriteParams.DeadColorTime > 0 && deadTimer < spriteParams.DeadColorTime) + { + deadTimer += deltaTime; + } + } if (inWater) { @@ -524,7 +576,14 @@ namespace Barotrauma public void Draw(SpriteBatch spriteBatch, Camera cam, Color? overrideColor = null) { float brightness = 1.0f - (burnOverLayStrength / 100.0f) * 0.5f; - Color color = new Color(brightness, brightness, brightness); + var spriteParams = Params.GetSprite(); + if (spriteParams == null) { return; } + + Color color = new Color(spriteParams.Color.R / 255f * brightness, spriteParams.Color.G / 255f * brightness, spriteParams.Color.B / 255f * brightness, spriteParams.Color.A / 255f); + if (deadTimer > 0) + { + color = Color.Lerp(color, spriteParams.DeadColor, MathUtils.InverseLerp(0, spriteParams.DeadColorTime, deadTimer)); + } color = overrideColor ?? color; @@ -545,7 +604,7 @@ namespace Barotrauma float herpesStrength = character.CharacterHealth.GetAfflictionStrength("spaceherpes"); - bool hideLimb = Params.Hide || + bool hideLimb = Hide || OtherWearables.Any(w => w.HideLimb) || wearingItems.Any(w => w != null && w.HideLimb); @@ -566,6 +625,7 @@ namespace Barotrauma { var deformation = SpriteDeformation.GetDeformation(Deformations, deformSprite.Size); deformSprite.Deform(deformation); + LightSource?.DeformableLightSprite?.Deform(deformation); } else { @@ -577,6 +637,31 @@ namespace Barotrauma { body.Draw(spriteBatch, activeSprite, color, null, Scale * TextureScale, Params.MirrorHorizontally, Params.MirrorVertically); } + // Handle non-exlusive, i.e. additional conditional sprites + foreach (var conditionalSprite in ConditionalSprites) + { + // Exclusive conditional sprites are handled in the Properties + if (conditionalSprite.Exclusive) { continue; } + if (!conditionalSprite.IsActive) { continue; } + if (conditionalSprite.DeformableSprite != null) + { + var defSprite = conditionalSprite.DeformableSprite; + if (Deformations != null && Deformations.Any()) + { + var deformation = SpriteDeformation.GetDeformation(Deformations, defSprite.Size); + defSprite.Deform(deformation); + } + else + { + defSprite.Reset(); + } + body.Draw(defSprite, cam, Vector2.One * Scale * TextureScale, color, Params.MirrorHorizontally); + } + else + { + body.Draw(spriteBatch, conditionalSprite.Sprite, color, null, Scale * TextureScale, Params.MirrorHorizontally, Params.MirrorVertically); + } + } } SpriteEffects spriteEffect = (dir == Direction.Right) ? SpriteEffects.None : SpriteEffects.FlipHorizontally; if (LightSource != null) @@ -594,13 +679,19 @@ namespace Barotrauma foreach (var decorativeSprite in DecorativeSprites) { if (!spriteAnimState[decorativeSprite].IsActive) { continue; } + Color c = new Color(decorativeSprite.Color.R / 255f * brightness, decorativeSprite.Color.G / 255f * brightness, decorativeSprite.Color.B / 255f * brightness, decorativeSprite.Color.A / 255f); + if (deadTimer > 0) + { + c = Color.Lerp(c, spriteParams.DeadColor, MathUtils.InverseLerp(0, Params.GetSprite().DeadColorTime, deadTimer)); + } + c = overrideColor ?? c; float rotation = decorativeSprite.GetRotation(ref spriteAnimState[decorativeSprite].RotationState); Vector2 offset = decorativeSprite.GetOffset(ref spriteAnimState[decorativeSprite].OffsetState) * Scale; var ca = (float)Math.Cos(-body.Rotation); var sa = (float)Math.Sin(-body.Rotation); Vector2 transformedOffset = new Vector2(ca * offset.X + sa * offset.Y, -sa * offset.X + ca * offset.Y); - decorativeSprite.Sprite.Draw(spriteBatch, new Vector2(body.DrawPosition.X + transformedOffset.X, -(body.DrawPosition.Y + transformedOffset.Y)), color, - -body.Rotation + rotation, Scale, spriteEffect, + decorativeSprite.Sprite.Draw(spriteBatch, new Vector2(body.DrawPosition.X + transformedOffset.X, -(body.DrawPosition.Y + transformedOffset.Y)), c, + -body.Rotation + rotation, decorativeSprite.Scale * Scale, spriteEffect, depth: decorativeSprite.Sprite.Depth); } float depthStep = 0.000001f; diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index fd4394742..393c1228d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -5,13 +5,14 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using System.Xml.Linq; using System.Globalization; using FarseerPhysics; using Barotrauma.Extensions; +using Barotrauma.Steam; namespace Barotrauma { @@ -217,6 +218,8 @@ namespace Barotrauma case "toggleupperhud": case "togglecharacternames": case "fpscounter": + case "dumptofile": + case "findentityids": return true; default: return client.HasConsoleCommandPermission(command); @@ -453,17 +456,10 @@ namespace Barotrauma GameMain.CharacterEditorScreen.Select(); })); - commands.Add(new Command("money", "", args => + commands.Add(new Command("steamnetdebug", "steamnetdebug: Toggles Steamworks debug logging.", (string[] args) => { - if (args.Length == 0) { return; } - if (GameMain.GameSession.GameMode is CampaignMode campaign) - { - if (int.TryParse(args[0], out int money)) - { - campaign.Money += money; - } - } - }, isCheat: true)); + SteamManager.NetworkingDebugLog = !SteamManager.NetworkingDebugLog; + })); AssignRelayToServer("kick", false); AssignRelayToServer("kickid", false); @@ -476,6 +472,7 @@ namespace Barotrauma AssignRelayToServer("help", false); AssignRelayToServer("verboselogging", false); AssignRelayToServer("freecam", false); + AssignRelayToServer("steamnetdebug", false); #if DEBUG AssignRelayToServer("crash", false); AssignRelayToServer("simulatedlatency", false); @@ -495,6 +492,7 @@ namespace Barotrauma AssignRelayToServer("setpassword", true); commands.Add(new Command("traitorlist", "", (string[] args) => { })); AssignRelayToServer("traitorlist", true); + AssignRelayToServer("money", true); AssignOnExecute("control", (string[] args) => { @@ -515,13 +513,14 @@ namespace Barotrauma AssignOnExecute("explosion", (string[] args) => { Vector2 explosionPos = GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); - float range = 500, force = 10, damage = 50, structureDamage = 10, empStrength = 0.0f; + float range = 500, force = 10, damage = 50, structureDamage = 10, itemDamage = 100, empStrength = 0.0f; if (args.Length > 0) float.TryParse(args[0], out range); if (args.Length > 1) float.TryParse(args[1], out force); if (args.Length > 2) float.TryParse(args[2], out damage); if (args.Length > 3) float.TryParse(args[3], out structureDamage); - if (args.Length > 4) float.TryParse(args[4], out empStrength); - new Explosion(range, force, damage, structureDamage, empStrength).Explode(explosionPos, null); + if (args.Length > 4) float.TryParse(args[4], out itemDamage); + if (args.Length > 5) float.TryParse(args[5], out empStrength); + new Explosion(range, force, damage, structureDamage, itemDamage, empStrength).Explode(explosionPos, null); }); AssignOnExecute("teleportcharacter|teleport", (string[] args) => @@ -836,7 +835,7 @@ namespace Barotrauma return; } - if (Submarine.MainSub.SaveAs(System.IO.Path.Combine(SubmarineInfo.SavePath, fileName + ".sub"))) + if (Submarine.MainSub.SaveAs(Barotrauma.IO.Path.Combine(SubmarineInfo.SavePath, fileName + ".sub"))) { NewMessage("Sub saved", Color.Green); } @@ -1028,8 +1027,7 @@ namespace Barotrauma foreach (var deconstructItem in itemPrefab.DeconstructItems) { - var targetItem = MapEntityPrefab.Find(null, deconstructItem.ItemIdentifier, showErrorMessages: false) as ItemPrefab; - if (targetItem == null) + if (!(MapEntityPrefab.Find(null, deconstructItem.ItemIdentifier, showErrorMessages: false) is ItemPrefab targetItem)) { ThrowError("Error in item \"" + itemPrefab.Name + "\" - could not find deconstruct item \"" + deconstructItem.ItemIdentifier + "\"!"); continue; @@ -1044,9 +1042,14 @@ namespace Barotrauma if (fabricationRecipe != null) { - if (!fabricationRecipe.RequiredItems.Any(r => r.ItemPrefab == targetItem)) + var ingredient = fabricationRecipe.RequiredItems.Find(r => r.ItemPrefab == targetItem); + if (ingredient == null) { - NewMessage("Deconstructing \"" + itemPrefab.Name + "\" produces \"" + deconstructItem.ItemIdentifier + "\", which isn't required in the fabrication recipe of the item.", Color.Orange); + NewMessage("Deconstructing \"" + itemPrefab.Name + "\" produces \"" + deconstructItem.ItemIdentifier + "\", which isn't required in the fabrication recipe of the item.", Color.Red); + } + else if (ingredient.UseCondition && ingredient.MinCondition < deconstructItem.OutCondition) + { + NewMessage($"Deconstructing \"{itemPrefab.Name}\" produces more \"{deconstructItem.ItemIdentifier}\", than what's required to fabricate the item (required: {ingredient.ItemPrefab.Name} {(int)(ingredient.MinCondition * 100)}%, output: {deconstructItem.ItemIdentifier} {(int)(deconstructItem.OutCondition * 100)}%)", Color.Red); } } } @@ -1430,7 +1433,7 @@ namespace Barotrauma element.Value = lines[i]; i++; } - doc.Save(destinationPath); + doc.SaveSafe(destinationPath); }, () => { @@ -1465,7 +1468,7 @@ namespace Barotrauma while ((!(nextNode is XElement) || nextNode == element) && nextNode != null) nextNode = nextNode.NextNode; destinationElement = nextNode as XElement; } - destinationDoc.Save(destinationPath); + destinationDoc.SaveSafe(destinationPath); }, () => { @@ -1720,69 +1723,69 @@ namespace Barotrauma GameMain.Config.SaveNewPlayerConfig(); - var saveFiles = System.IO.Directory.GetFiles(SaveUtil.SaveFolder); + var saveFiles = Barotrauma.IO.Directory.GetFiles(SaveUtil.SaveFolder); foreach (string saveFile in saveFiles) { - System.IO.File.Delete(saveFile); + Barotrauma.IO.File.Delete(saveFile); NewMessage("Deleted " + saveFile, Color.Green); } - if (System.IO.Directory.Exists(System.IO.Path.Combine(SaveUtil.SaveFolder, "temp"))) + if (Barotrauma.IO.Directory.Exists(Barotrauma.IO.Path.Combine(SaveUtil.SaveFolder, "temp"))) { - System.IO.Directory.Delete(System.IO.Path.Combine(SaveUtil.SaveFolder, "temp"), true); + Barotrauma.IO.Directory.Delete(Barotrauma.IO.Path.Combine(SaveUtil.SaveFolder, "temp"), true); NewMessage("Deleted temp save folder", Color.Green); } - if (System.IO.Directory.Exists(ServerLog.SavePath)) + if (Barotrauma.IO.Directory.Exists(ServerLog.SavePath)) { - var logFiles = System.IO.Directory.GetFiles(ServerLog.SavePath); + var logFiles = Barotrauma.IO.Directory.GetFiles(ServerLog.SavePath); foreach (string logFile in logFiles) { - System.IO.File.Delete(logFile); + Barotrauma.IO.File.Delete(logFile); NewMessage("Deleted " + logFile, Color.Green); } } - if (System.IO.File.Exists("filelist.xml")) + if (Barotrauma.IO.File.Exists("filelist.xml")) { - System.IO.File.Delete("filelist.xml"); + Barotrauma.IO.File.Delete("filelist.xml"); NewMessage("Deleted filelist", Color.Green); } - if (System.IO.File.Exists("Data/bannedplayers.txt")) + if (Barotrauma.IO.File.Exists("Data/bannedplayers.txt")) { - System.IO.File.Delete("Data/bannedplayers.txt"); + Barotrauma.IO.File.Delete("Data/bannedplayers.txt"); NewMessage("Deleted bannedplayers.txt", Color.Green); } - if (System.IO.File.Exists("Submarines/TutorialSub.sub")) + if (Barotrauma.IO.File.Exists("Submarines/TutorialSub.sub")) { - System.IO.File.Delete("Submarines/TutorialSub.sub"); + Barotrauma.IO.File.Delete("Submarines/TutorialSub.sub"); NewMessage("Deleted TutorialSub from the submarine folder", Color.Green); } - /*if (System.IO.File.Exists(GameServer.SettingsFile)) + /*if (Barotrauma.IO.File.Exists(GameServer.SettingsFile)) { - System.IO.File.Delete(GameServer.SettingsFile); + Barotrauma.IO.File.Delete(GameServer.SettingsFile); NewMessage("Deleted server settings", Color.Green); } - if (System.IO.File.Exists(GameServer.ClientPermissionsFile)) + if (Barotrauma.IO.File.Exists(GameServer.ClientPermissionsFile)) { - System.IO.File.Delete(GameServer.ClientPermissionsFile); + Barotrauma.IO.File.Delete(GameServer.ClientPermissionsFile); NewMessage("Deleted client permission file", Color.Green); }*/ - if (System.IO.File.Exists("crashreport.log")) + if (Barotrauma.IO.File.Exists("crashreport.log")) { - System.IO.File.Delete("crashreport.log"); + Barotrauma.IO.File.Delete("crashreport.log"); NewMessage("Deleted crashreport.log", Color.Green); } - if (!System.IO.File.Exists("Content/Map/TutorialSub.sub")) + if (!Barotrauma.IO.File.Exists("Content/Map/TutorialSub.sub")) { ThrowError("TutorialSub.sub not found!"); } @@ -2196,7 +2199,7 @@ namespace Barotrauma ThrowError("Cannot use the flipx command while playing online."); return; } - Submarine.MainSub?.FlipX(); + if (Submarine.MainSub.SubBody != null) { Submarine.MainSub?.FlipX(); } }, isCheat: true)); commands.Add(new Command("gender", "Set the gender of the controlled character. Allowed parameters: Male, Female, None.", args => @@ -2318,9 +2321,16 @@ namespace Barotrauma } try { - SubmarineInfo subInfo = new SubmarineInfo(args[0]); - Submarine spawnedSub = Submarine.Load(subInfo, false); - spawnedSub.SetPosition(GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition)); + var subInfo = SubmarineInfo.SavedSubmarines.FirstOrDefault(s => s.DisplayName.Equals(args[0], StringComparison.OrdinalIgnoreCase)); + if (subInfo == null) + { + ThrowError($"Could not find a submarine with the name \"{args[0]}\"."); + } + else + { + Submarine spawnedSub = Submarine.Load(subInfo, false); + spawnedSub.SetPosition(GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition)); + } } catch (Exception e) { @@ -2328,7 +2338,15 @@ namespace Barotrauma ThrowError(errorMsg, e); GameAnalyticsManager.AddErrorEventOnce("DebugConsole.SpawnSubmarine:Error", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg + '\n' + e.Message + '\n' + e.StackTrace); } - }, isCheat: true)); + }, + () => + { + return new string[][] + { + SubmarineInfo.SavedSubmarines.Select(s => s.DisplayName).ToArray() + }; + }, + isCheat: true)); commands.Add(new Command("pause", "Toggles the pause state when playing offline", (string[] args) => { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/SalvageMission.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/SalvageMission.cs index 8dd4e5862..8755b9d40 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/SalvageMission.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/SalvageMission.cs @@ -26,7 +26,19 @@ namespace Barotrauma } } - item.body.FarseerBody.BodyType = BodyType.Kinematic; + int executedEffectCount = msg.ReadByte(); + for (int i = 0; i < executedEffectCount; i++) + { + int index1 = msg.ReadByte(); + int index2 = msg.ReadByte(); + var selectedEffect = statusEffects[index1][index2]; + item.ApplyStatusEffect(selectedEffect, selectedEffect.type, deltaTime: 1.0f, worldPosition: item.Position); + } + + if (item.body != null) + { + item.body.FarseerBody.BodyType = BodyType.Kinematic; + } } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs b/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs index 74a57080f..c16ab84b2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs @@ -7,76 +7,6 @@ using System.Xml.Linq; namespace Barotrauma { - public class ColorData - { - public int StartIndex, EndIndex; - public Color Color; - - private const char colorDefinitionIndicator = '‖'; - private const char lineChangeIndicator = '\n'; - private const string colorDefinitionStartString = "‖color:"; - private const string coloringEndDefinition = "‖color:end‖"; - - public static List GetColorData(string text, out string sanitizedText) - { - List textColors = null; - if (text != null && text.IndexOf(colorDefinitionIndicator) != -1 && text.Contains(colorDefinitionStartString)) - { - textColors = new List(); - List lineChangeIndexes = null; - - int currentIndex = text.IndexOf(lineChangeIndicator); - if (currentIndex != -1) - { - lineChangeIndexes = new List(); - lineChangeIndexes.Add(currentIndex); - int startIndex = currentIndex + 1; - - while (true) - { - if (startIndex >= text.Length) break; - currentIndex = text.IndexOf(lineChangeIndicator, startIndex); - if (currentIndex == -1) break; - lineChangeIndexes.Add(currentIndex); - startIndex = currentIndex + 1; - } - } - - while (text.IndexOf(colorDefinitionStartString) != -1) - { - ColorData colorData = new ColorData(); - - int colorDefinitionStartIndex = text.IndexOf(colorDefinitionStartString); - int colorDefinitionEndIndex = text.IndexOf(colorDefinitionIndicator, colorDefinitionStartIndex + 1); - - string[] colorDefinition = text.Substring(colorDefinitionStartIndex + colorDefinitionStartString.Length, colorDefinitionEndIndex - colorDefinitionStartIndex - colorDefinitionStartString.Length).Split(','); - - colorData.StartIndex = colorDefinitionStartIndex; - colorData.Color = new Color(int.Parse(colorDefinition[0]), int.Parse(colorDefinition[1]), int.Parse(colorDefinition[2])); - text = text.Remove(colorDefinitionStartIndex, colorDefinitionEndIndex - colorDefinitionStartIndex + 1); - colorData.EndIndex = text.IndexOf(coloringEndDefinition); - text = text.Remove(colorData.EndIndex, coloringEndDefinition.Length); - - if (lineChangeIndexes != null) - { - for (int i = 0; i < lineChangeIndexes.Count; i++) - { - if (colorData.StartIndex > lineChangeIndexes[i]) - { - colorData.StartIndex--; - colorData.EndIndex--; - } - } - } - - textColors.Add(colorData); - } - } - - sanitizedText = text; - return textColors; - } - } public class ScalableFont : IDisposable { private static List FontList = new List(); @@ -492,12 +422,12 @@ namespace Barotrauma } } - public void DrawStringWithColors(SpriteBatch sb, string text, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects se, float layerDepth, List colorData) + public void DrawStringWithColors(SpriteBatch sb, string text, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects se, float layerDepth, List richTextData) { - DrawStringWithColors(sb, text, position, color, rotation, origin, new Vector2(scale), se, layerDepth, colorData); + DrawStringWithColors(sb, text, position, color, rotation, origin, new Vector2(scale), se, layerDepth, richTextData); } - public void DrawStringWithColors(SpriteBatch sb, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects se, float layerDepth, List colorData) + public void DrawStringWithColors(SpriteBatch sb, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects se, float layerDepth, List richTextData) { if (textures.Count == 0 && !DynamicLoading) { return; } @@ -505,8 +435,8 @@ namespace Barotrauma Vector2 currentPos = position; Vector2 advanceUnit = rotation == 0.0f ? Vector2.UnitX : new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)); - int colorDataIndex = 0; - ColorData currentColorData = colorData[colorDataIndex]; + int richTextDataIndex = 0; + RichTextData currentRichTextData = richTextData[richTextDataIndex]; for (int i = 0; i < text.Length; i++) { @@ -527,15 +457,19 @@ namespace Barotrauma Color currentTextColor; - if (currentColorData != null && i > currentColorData.EndIndex + lineNum) + if (currentRichTextData != null && i > currentRichTextData.EndIndex + lineNum) { - colorDataIndex++; - currentColorData = colorDataIndex < colorData.Count ? colorData[colorDataIndex] : null; + richTextDataIndex++; + currentRichTextData = richTextDataIndex < richTextData.Count ? richTextData[richTextDataIndex] : null; } - if (currentColorData != null && currentColorData.StartIndex + lineNum <= i && i <= currentColorData.EndIndex + lineNum) + if (currentRichTextData != null && currentRichTextData.StartIndex + lineNum <= i && i <= currentRichTextData.EndIndex + lineNum) { - currentTextColor = currentColorData.Color; + currentTextColor = currentRichTextData.Color ?? color; + if (!string.IsNullOrEmpty(currentRichTextData.Metadata)) + { + currentTextColor = Color.Lerp(currentTextColor, Color.White, 0.5f); + } } else { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs index 39494a661..6724f3ab0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs @@ -52,7 +52,20 @@ namespace Barotrauma public GUITextBox InputBox { get; private set; } - public GUIButton ToggleButton; + private GUIButton toggleButton; + + public GUIButton ToggleButton + { + get => toggleButton; + set + { + if (toggleButton != null) + { + toggleButton.RectTransform.Parent = null; + } + toggleButton = value; + } + } private GUIButton showNewMessagesButton; @@ -109,7 +122,7 @@ namespace Barotrauma }; chatSendButton.RectTransform.AbsoluteOffset = new Point((int)(InputBox.Rect.Height * 0.15f), 0); InputBox.TextBlock.RectTransform.MaxSize - = new Point((int)(InputBox.Rect.Width - chatSendButton.Rect.Width * 1.25f - InputBox.TextBlock.Padding.Z), int.MaxValue); + = new Point((int)(InputBox.Rect.Width - chatSendButton.Rect.Width * 1.25f - InputBox.TextBlock.Padding.X - chatSendButton.RectTransform.AbsoluteOffset.X), int.MaxValue); showNewMessagesButton = new GUIButton(new RectTransform(new Vector2(1f, 0.075f), GUIFrame.RectTransform, Anchor.BottomCenter) { RelativeOffset = new Vector2(0.0f, 0.125f) }, TextManager.Get("chat.shownewmessages")); showNewMessagesButton.OnClicked += (GUIButton btn, object userdata) => @@ -190,22 +203,49 @@ namespace Barotrauma var msgHolder = new GUIFrame(new RectTransform(new Vector2(0.95f, 0.0f), chatBox.Content.RectTransform, Anchor.TopCenter), style: null, color: ((chatBox.Content.CountChildren % 2) == 0) ? Color.Transparent : Color.Black * 0.1f); - GUITextBlock senderNameBlock = new GUITextBlock(new RectTransform(new Vector2(0.98f, 0.0f), msgHolder.RectTransform) { AbsoluteOffset = new Point((int)(5 * GUI.Scale), 0) }, + GUITextBlock senderNameTimestamp = new GUITextBlock(new RectTransform(new Vector2(0.98f, 0.0f), msgHolder.RectTransform) { AbsoluteOffset = new Point((int)(5 * GUI.Scale), 0) }, ChatMessage.GetTimeStamp(), textColor: Color.LightGray, font: GUI.SmallFont, textAlignment: Alignment.TopLeft, style: null) { CanBeFocused = true }; if (!string.IsNullOrEmpty(senderName)) { - new GUITextBlock(new RectTransform(new Vector2(0.8f, 1.0f), senderNameBlock.RectTransform) { AbsoluteOffset = new Point((int)(senderNameBlock.TextSize.X), 0) }, - senderName, textColor: senderColor, font: GUI.SmallFont, textAlignment: Alignment.TopLeft, style: null) + var senderNameBlock = new GUIButton(new RectTransform(new Vector2(0.8f, 1.0f), senderNameTimestamp.RectTransform) { AbsoluteOffset = new Point((int)(senderNameTimestamp.TextSize.X), 0) }, + senderName, textAlignment: Alignment.TopLeft, style: null, color: Color.Transparent) { - CanBeFocused = true + TextBlock = + { + Padding = Vector4.Zero + }, + Font = GUI.SmallFont, + CanBeFocused = true, + ForceUpperCase = false, + UserData = message.SenderClient, + OnClicked = (_, o) => + { + if (!(o is Client client)) { return false; } + GameMain.NetLobbyScreen?.SelectPlayer(client); + return true; + }, + OnSecondaryClicked = (_, o) => + { + if (!(o is Client client)) { return false; } + GameMain.GameSession?.CrewManager?.CreateModerationContextMenu(PlayerInput.MousePosition.ToPoint(), client); + return true; + }, + Text = senderName }; + + senderNameBlock.RectTransform.NonScaledSize = senderNameBlock.TextBlock.TextSize.ToPoint(); + senderNameBlock.TextBlock.OverrideTextColor(senderColor); + if (senderNameBlock.UserData != null) + { + senderNameBlock.TextBlock.HoverTextColor = Color.White; + } } var msgText =new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), msgHolder.RectTransform) - { AbsoluteOffset = new Point((int)(10 * GUI.Scale), senderNameBlock == null ? 0 : senderNameBlock.Rect.Height) }, + { AbsoluteOffset = new Point((int)(10 * GUI.Scale), senderNameTimestamp == null ? 0 : senderNameTimestamp.Rect.Height) }, displayedText, textColor: message.Color, font: GUI.SmallFont, textAlignment: Alignment.TopLeft, style: null, wrap: true, color: ((chatBox.Content.CountChildren % 2) == 0) ? Color.Transparent : Color.Black * 0.1f) { @@ -230,7 +270,7 @@ namespace Barotrauma msgHolder.RectTransform.SizeChanged -= Recalculate; //resize the holder to match the size of the message and add some spacing msgText.RectTransform.MaxSize = new Point(msgHolder.Rect.Width - msgText.RectTransform.AbsoluteOffset.X, int.MaxValue); - senderNameBlock.RectTransform.MaxSize = new Point(msgHolder.Rect.Width - senderNameBlock.RectTransform.AbsoluteOffset.X, int.MaxValue); + senderNameTimestamp.RectTransform.MaxSize = new Point(msgHolder.Rect.Width - senderNameTimestamp.RectTransform.AbsoluteOffset.X, int.MaxValue); msgHolder.Children.ForEach(c => (c as GUITextBlock)?.CalculateHeightFromText()); msgHolder.RectTransform.Resize(new Point(msgHolder.Rect.Width, msgHolder.Children.Sum(c => c.Rect.Height) + (int)(10 * GUI.Scale)), resizeChildren: false); msgHolder.RectTransform.SizeChanged += Recalculate; @@ -247,6 +287,11 @@ namespace Barotrauma showNewMessagesButton.Visible = true; } + if (message.Type == ChatMessageType.Server && message.ChangeType != PlayerConnectionChangeType.None) + { + TabMenu.StorePlayerConnectionChangeMessage(message); + } + if (!ToggleOpen) { var popupMsg = new GUIFrame(new RectTransform(Vector2.One, GUIFrame.RectTransform), style: "GUIToolTip") @@ -339,17 +384,6 @@ namespace Barotrauma prevUIScale = GUI.Scale; } - //hide chatbox when accessing the inventory of another character to prevent overlaps - if (Character.Controlled?.SelectedCharacter?.Inventory != null && - Character.Controlled.SelectedCharacter.CanInventoryBeAccessed) - { - SetVisibility(false); - } - else - { - SetVisibility(true); - } - if (showNewMessagesButton.Visible && chatBox.ScrollBar.BarScroll == 1f) { showNewMessagesButton.Visible = false; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs index b813565e0..0afc20985 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; @@ -38,7 +38,7 @@ namespace Barotrauma private static GUIDropDown fileTypeDropdown; private static GUIButton openButton; - private static FileSystemWatcher fileSystemWatcher; + private static System.IO.FileSystemWatcher fileSystemWatcher; private static string currentFileTypePattern; @@ -78,10 +78,10 @@ namespace Barotrauma currentDirectory += "/"; } fileSystemWatcher?.Dispose(); - fileSystemWatcher = new FileSystemWatcher(currentDirectory) + fileSystemWatcher = new System.IO.FileSystemWatcher(currentDirectory) { Filter = "*", - NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName + NotifyFilter = System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName }; fileSystemWatcher.Created += OnFileSystemChanges; fileSystemWatcher.Deleted += OnFileSystemChanges; @@ -97,11 +97,11 @@ namespace Barotrauma set; } - private static void OnFileSystemChanges(object sender, FileSystemEventArgs e) + private static void OnFileSystemChanges(object sender, System.IO.FileSystemEventArgs e) { switch (e.ChangeType) { - case WatcherChangeTypes.Created: + case System.IO.WatcherChangeTypes.Created: { var itemFrame = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), fileList.Content.RectTransform), e.Name) { @@ -114,15 +114,15 @@ namespace Barotrauma fileList.Content.RectTransform.SortChildren(SortFiles); } break; - case WatcherChangeTypes.Deleted: + case System.IO.WatcherChangeTypes.Deleted: { var itemFrame = fileList.Content.FindChild(c => (c is GUITextBlock tb) && (tb.Text == e.Name || tb.Text == e.Name + "/")); if (itemFrame != null) { fileList.RemoveChild(itemFrame); } } break; - case WatcherChangeTypes.Renamed: + case System.IO.WatcherChangeTypes.Renamed: { - RenamedEventArgs renameArgs = e as RenamedEventArgs; + System.IO.RenamedEventArgs renameArgs = e as System.IO.RenamedEventArgs; var itemFrame = fileList.Content.FindChild(c => (c is GUITextBlock tb) && (tb.Text == renameArgs.OldName || tb.Text == renameArgs.OldName + "/")) as GUITextBlock; itemFrame.UserData = (bool?)Directory.Exists(e.FullPath); itemFrame.Text = renameArgs.Name; @@ -156,7 +156,7 @@ namespace Barotrauma public static void Init() { - backgroundFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: null) + backgroundFrame = new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, GUI.Canvas), style: null) { Color = Color.Black * 0.5f, HoverColor = Color.Black * 0.5f, @@ -169,10 +169,10 @@ namespace Barotrauma var horizontalLayout = new GUILayoutGroup(new RectTransform(Vector2.One * 0.9f, window.RectTransform, Anchor.Center), true); sidebar = new GUIListBox(new RectTransform(new Vector2(0.29f, 1.0f), horizontalLayout.RectTransform)); - var drives = DriveInfo.GetDrives(); + var drives = System.IO.DriveInfo.GetDrives(); foreach (var drive in drives) { - if (drive.DriveType == DriveType.Ram) { continue; } + if (drive.DriveType == System.IO.DriveType.Ram) { continue; } if (ignoredDrivePrefixes.Any(p => drive.Name.StartsWith(p))) { continue; } new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), sidebar.Content.RectTransform), drive.Name.Replace('\\','/')); } @@ -348,17 +348,24 @@ namespace Barotrauma } IEnumerable files = null; - foreach (string pattern in currentFileTypePattern.Split(',')) + if (currentFileTypePattern == null) { - string patternTrimmed = pattern.Trim(); - patternTrimmed = "*" + filterBox.Text + "*" + patternTrimmed; - if (files == null) + files = Directory.GetFiles(currentDirectory); + } + else + { + foreach (string pattern in currentFileTypePattern.Split(',')) { - files = Directory.EnumerateFiles(currentDirectory, patternTrimmed); - } - else - { - files = files.Concat(Directory.EnumerateFiles(currentDirectory, patternTrimmed)); + string patternTrimmed = pattern.Trim(); + patternTrimmed = "*" + filterBox.Text + "*" + patternTrimmed; + if (files == null) + { + files = Directory.EnumerateFiles(currentDirectory, patternTrimmed); + } + else + { + files = files.Concat(Directory.EnumerateFiles(currentDirectory, patternTrimmed)); + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs index 5e3cba69a..f2d904791 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; using Barotrauma.CharacterEditor; @@ -80,13 +80,33 @@ namespace Barotrauma public static readonly string[] colorComponentLabels = { "R", "G", "B", "A" }; public static Vector2 ReferenceResolution => new Vector2(1920f, 1080f); - public static float Scale => (GameMain.GraphicsWidth / ReferenceResolution.X + GameMain.GraphicsHeight / ReferenceResolution.Y) / 2.0f * GameSettings.HUDScale; - public static float xScale => GameMain.GraphicsWidth / ReferenceResolution.X * GameSettings.HUDScale; + public static float Scale => (UIWidth / ReferenceResolution.X + GameMain.GraphicsHeight / ReferenceResolution.Y) / 2.0f * GameSettings.HUDScale; + public static float xScale => UIWidth / ReferenceResolution.X * GameSettings.HUDScale; public static float yScale => GameMain.GraphicsHeight / ReferenceResolution.Y * GameSettings.HUDScale; + public static int IntScale(float f) => (int)(f * Scale); + public static int IntScaleFloor(float f) => (int)Math.Floor(f * Scale); + public static int IntScaleCeiling(float f) => (int) Math.Ceiling(f * Scale); public static float HorizontalAspectRatio => GameMain.GraphicsWidth / (float)GameMain.GraphicsHeight; public static float VerticalAspectRatio => GameMain.GraphicsHeight / (float)GameMain.GraphicsWidth; public static float RelativeHorizontalAspectRatio => HorizontalAspectRatio / (ReferenceResolution.X / ReferenceResolution.Y); public static float RelativeVerticalAspectRatio => VerticalAspectRatio / (ReferenceResolution.Y / ReferenceResolution.X); + public static bool IsUltrawide => HorizontalAspectRatio > 2.0f; + + public static int UIWidth + { + get + { + // Ultrawide + if (IsUltrawide) + { + return (int)(GameMain.GraphicsHeight * ReferenceResolution.X / ReferenceResolution.Y); + } + else + { + return GameMain.GraphicsWidth; + } + } + } public static float SlicedSpriteScale { @@ -496,9 +516,58 @@ namespace Barotrauma if (MouseOn != null) { - DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - 500, 20), - $"Selected UI Element: {MouseOn.GetType().Name} ({ (MouseOn.Style?.Element.Name.LocalName ?? "no style") }, {MouseOn.Rect})", - Color.LightGreen, Color.Black * 0.5f, 0, SmallFont); + RectTransform mouseOnRect = MouseOn.RectTransform; + bool isAbsoluteOffsetInUse = mouseOnRect.AbsoluteOffset != Point.Zero || mouseOnRect.RelativeOffset == Vector2.Zero; + + string selectedString = $"Selected UI Element: {MouseOn.GetType().Name} ({ MouseOn.Style?.Element.Name.LocalName ?? "no style" }, {MouseOn.Rect}"; + string offsetString = $"Relative Offset: {mouseOnRect.RelativeOffset} | Absolute Offset: {(isAbsoluteOffsetInUse ? mouseOnRect.AbsoluteOffset : mouseOnRect.ParentRect.MultiplySize(mouseOnRect.RelativeOffset))}{(isAbsoluteOffsetInUse ? "" : " (Calculated from RelativeOffset)")}"; + string anchorPivotString = $"Anchor: {mouseOnRect.Anchor} | Pivot: {mouseOnRect.Pivot}"; + Vector2 selectedStringSize = SmallFont.MeasureString(selectedString); + Vector2 offsetStringSize = SmallFont.MeasureString(offsetString); + Vector2 anchorPivotStringSize = SmallFont.MeasureString(anchorPivotString); + + int padding = IntScale(10); + int yPos = padding; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)selectedStringSize.X - padding, yPos), selectedString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)selectedStringSize.Y + padding / 2; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)offsetStringSize.X - padding, yPos), offsetString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)offsetStringSize.Y + padding / 2; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)anchorPivotStringSize.X - padding, yPos), anchorPivotString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)anchorPivotStringSize.Y + padding / 2; + } + else + { + string guiScaleString = $"GUI.Scale: {Scale}"; + string guixScaleString = $"GUI.xScale: {xScale}"; + string guiyScaleString = $"GUI.yScale: {yScale}"; + string relativeHorizontalAspectRatioString = $"RelativeHorizontalAspectRatio: {RelativeHorizontalAspectRatio}"; + string relativeVerticalAspectRatioString = $"RelativeVerticalAspectRatio: {RelativeVerticalAspectRatio}"; + Vector2 guiScaleStringSize = SmallFont.MeasureString(guiScaleString); + Vector2 guixScaleStringSize = SmallFont.MeasureString(guixScaleString); + Vector2 guiyScaleStringSize = SmallFont.MeasureString(guiyScaleString); + Vector2 relativeHorizontalAspectRatioStringSize = SmallFont.MeasureString(relativeHorizontalAspectRatioString); + Vector2 relativeVerticalAspectRatioStringSize = SmallFont.MeasureString(relativeVerticalAspectRatioString); + + int padding = IntScale(10); + int yPos = padding; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)guiScaleStringSize.X - padding, yPos), guiScaleString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)guiScaleStringSize.Y + padding / 2; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)guixScaleStringSize.X - padding, yPos), guixScaleString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)guixScaleStringSize.Y + padding / 2; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)guiyScaleStringSize.X - padding, yPos), guiyScaleString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)guiyScaleStringSize.Y + padding / 2; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)relativeHorizontalAspectRatioStringSize.X - padding, yPos), relativeHorizontalAspectRatioString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)relativeHorizontalAspectRatioStringSize.Y + padding / 2; + + DrawString(spriteBatch, new Vector2(GameMain.GraphicsWidth - (int)relativeVerticalAspectRatioStringSize.X - padding, yPos), relativeVerticalAspectRatioString, Color.LightGreen, Color.Black, 0, SmallFont); + yPos += (int)relativeVerticalAspectRatioStringSize.Y + padding / 2; } } @@ -521,6 +590,34 @@ namespace Barotrauma MouseOn.DrawToolTip(spriteBatch); } + if (SubEditorScreen.IsSubEditor()) + { + // Draw our "infinite stack" on the cursor + switch (SubEditorScreen.DraggedItemPrefab) + { + case ItemPrefab itemPrefab: + { + var sprite = itemPrefab.InventoryIcon ?? itemPrefab.sprite; + sprite?.Draw(spriteBatch, PlayerInput.MousePosition, scale: Math.Min(64 / sprite.size.X, 64 / sprite.size.Y) * Scale); + break; + } + case ItemAssemblyPrefab iPrefab: + { + var (x, y) = PlayerInput.MousePosition; + foreach (var pair in iPrefab.DisplayEntities) + { + Rectangle dRect = pair.Second; + dRect = new Rectangle(x: (int)(dRect.X * iPrefab.Scale + x), + y: (int)(dRect.Y * iPrefab.Scale - y), + width: (int)(dRect.Width * iPrefab.Scale), + height: (int)(dRect.Height * iPrefab.Scale)); + pair.First.DrawPlacing(spriteBatch, dRect, pair.First.Scale * iPrefab.Scale); + } + break; + } + } + } + if (GameMain.WindowActive && !HideCursor) { spriteBatch.End(); @@ -541,6 +638,10 @@ namespace Barotrauma GameMain.GameScreen.PostProcessEffect.Parameters["blurDistance"].SetValue(0.001f * aberrationStrength); GameMain.GameScreen.PostProcessEffect.Parameters["chromaticAberrationStrength"].SetValue(new Vector3(-0.025f, -0.01f, -0.05f) * (float)(PerlinNoise.CalculatePerlin(aberrationT, aberrationT, 0) + 0.5f) * aberrationStrength); + + Matrix.CreateOrthographicOffCenter(0, GameMain.GraphicsWidth, GameMain.GraphicsHeight, 0, 0, -1, out Matrix projection); + + GameMain.GameScreen.PostProcessEffect.Parameters["MatrixTransform"].SetValue(projection); GameMain.GameScreen.PostProcessEffect.CurrentTechnique = GameMain.GameScreen.PostProcessEffect.Techniques["BlurChromaticAberration"]; GameMain.GameScreen.PostProcessEffect.CurrentTechnique.Passes[0].Apply(); @@ -780,6 +881,8 @@ namespace Barotrauma if (MouseCursor == CursorState.Waiting) { return CursorState.Waiting; } if (GUIScrollBar.DraggingBar != null) { return GUIScrollBar.DraggingBar.Bar.HoverCursor; } + if (SubEditorScreen.IsSubEditor() && SubEditorScreen.DraggedItemPrefab != null) { return CursorState.Hand; } + // Wire cursors if (Character.Controlled != null) { @@ -816,8 +919,7 @@ namespace Barotrauma case SubEditorScreen editor: { // Portrait area - if ((editor.CharacterMode || editor.WiringMode) && - HUDLayoutSettings.BottomRightInfoArea.Contains(PlayerInput.MousePosition)) + if (editor.WiringMode && HUDLayoutSettings.BottomRightInfoArea.Contains(PlayerInput.MousePosition)) { return CursorState.Hand; } @@ -1137,7 +1239,7 @@ namespace Barotrauma font.DrawString(sb, text, pos, color); } - public static void DrawStringWithColors(SpriteBatch sb, Vector2 pos, string text, Color color, List colorData, Color? backgroundColor = null, int backgroundPadding = 0, ScalableFont font = null, float depth = 0.0f) + public static void DrawStringWithColors(SpriteBatch sb, Vector2 pos, string text, Color color, List richTextData, Color? backgroundColor = null, int backgroundPadding = 0, ScalableFont font = null, float depth = 0.0f) { if (font == null) font = Font; if (backgroundColor != null) @@ -1146,7 +1248,7 @@ namespace Barotrauma DrawRectangle(sb, pos - Vector2.One * backgroundPadding, textSize + Vector2.One * 2.0f * backgroundPadding, (Color)backgroundColor, true, depth, 5); } - font.DrawStringWithColors(sb, text, pos, color, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, depth, colorData); + font.DrawStringWithColors(sb, text, pos, color, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, depth, richTextData); } public static void DrawRectangle(SpriteBatch sb, Vector2 start, Vector2 size, Color clr, bool isFilled = false, float depth = 0.0f, int thickness = 1) @@ -1863,8 +1965,9 @@ namespace Barotrauma Inventory.draggingItem = null; Inventory.DraggingInventory = null; - PauseMenu = new GUIFrame(new RectTransform(Vector2.One, Canvas), style: null, color: Color.Black * 0.5f); - + PauseMenu = new GUIFrame(new RectTransform(Vector2.One, Canvas, Anchor.Center), style: null); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, PauseMenu.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + var pauseMenuInner = new GUIFrame(new RectTransform(new Vector2(0.13f, 0.3f), PauseMenu.RectTransform, Anchor.Center) { MinSize = new Point(250, 300) }); var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.7f, 0.6f), pauseMenuInner.RectTransform, Anchor.Center)) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUICanvas.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUICanvas.cs index 2ad741c20..8595c032e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUICanvas.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUICanvas.cs @@ -8,7 +8,7 @@ namespace Barotrauma { public class GUICanvas : RectTransform { - protected GUICanvas() : base(Vector2.One, parent: null) { } + protected GUICanvas() : base(size, parent: null) { } private static GUICanvas _instance; public static GUICanvas Instance @@ -22,15 +22,63 @@ namespace Barotrauma { GameMain.Instance.OnResolutionChanged += RecalculateSize; } + _instance.ItemComponentHolder = new GUIFrame(new RectTransform(Vector2.One, _instance, Anchor.Center)).RectTransform; } return _instance; } } + public RectTransform ItemComponentHolder; + + private static Vector2 size => new Vector2(GameMain.GraphicsWidth / (float)GUI.UIWidth, 1f); + + protected override Rectangle NonScaledUIRect => UIRect; + + private enum ResizeAxis { Both = 0, X = 1, Y = 2 } + // Turn public, if there is a need to call this manually. private static void RecalculateSize() { - Instance.Resize(Vector2.One, resizeChildren: true); + Vector2 recalculatedSize = size; + + // Scale children that are supposed to encompass the whole screen so that they are properly scaled on ultrawide as well + for (int i = 0; i < Instance.Children.Count(); i++) + { + RectTransform target = Instance.GetChild(i); + if (target == null || target.RelativeSize.X < 1 && target.RelativeSize.Y < 1) continue; + + ResizeAxis axis; + + if (target.RelativeSize.X >= 1 && target.RelativeSize.Y >= 1) + { + axis = ResizeAxis.Both; + } + else if (target.RelativeSize.X >= 1) + { + axis = ResizeAxis.X; + } + else + { + axis = ResizeAxis.Y; + } + + switch (axis) + { + case ResizeAxis.Both: + target.RelativeSize = recalculatedSize; + break; + + case ResizeAxis.X: + target.RelativeSize = new Vector2(recalculatedSize.X, target.RelativeSize.Y); + break; + + case ResizeAxis.Y: + target.RelativeSize = new Vector2(target.RelativeSize.X, recalculatedSize.Y); + break; + } + } + + Instance.Resize(size, resizeChildren: true); Instance.GetAllChildren().Select(c => c.GUIComponent as GUITextBlock).ForEach(t => t?.SetTextPos()); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs index d733439b0..76f412e71 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs @@ -5,7 +5,7 @@ using System.Linq; using Barotrauma.Extensions; using System; using System.Xml.Linq; -using System.IO; +using Barotrauma.IO; using RestSharp; using System.Net; @@ -18,6 +18,9 @@ namespace Barotrauma public CursorState HoverCursor = CursorState.Default; + public delegate bool SecondaryButtonDownHandler(GUIComponent component, object userData); + public SecondaryButtonDownHandler OnSecondaryClicked; + public IEnumerable Children => RectTransform.Children.Select(c => c.GUIComponent); public T GetChild() where T : GUIComponent @@ -202,12 +205,12 @@ namespace Barotrauma set { RawToolTip = value; - TooltipColorData = ColorData.GetColorData(value, out value); + TooltipRichTextData = RichTextData.GetRichTextData(value, out value); toolTip = value; } } - public List TooltipColorData = null; + public List TooltipRichTextData = null; public GUIComponentStyle Style { @@ -451,6 +454,15 @@ namespace Barotrauma protected virtual void Update(float deltaTime) { if (!Visible) return; + + if (CanBeFocused && OnSecondaryClicked != null) + { + if (GUI.IsMouseOn(this) && PlayerInput.SecondaryMouseButtonClicked()) + { + OnSecondaryClicked?.Invoke(this, userData); + } + } + if (flashTimer > 0.0f) { flashTimer -= deltaTime; @@ -638,10 +650,10 @@ namespace Barotrauma public void DrawToolTip(SpriteBatch spriteBatch) { if (!Visible) return; - DrawToolTip(spriteBatch, ToolTip, GUI.MouseOn.Rect, TooltipColorData); + DrawToolTip(spriteBatch, ToolTip, GUI.MouseOn.Rect, TooltipRichTextData); } - public static void DrawToolTip(SpriteBatch spriteBatch, string toolTip, Rectangle targetElement, List colorData = null) + public static void DrawToolTip(SpriteBatch spriteBatch, string toolTip, Rectangle targetElement, List richTextData = null) { if (Tutorials.Tutorial.ContentRunning) { return; } @@ -651,7 +663,7 @@ namespace Barotrauma if (toolTipBlock == null || (string)toolTipBlock.userData != toolTip) { - toolTipBlock = new GUITextBlock(new RectTransform(new Point(width, height), null), colorData, toolTip, font: GUI.SmallFont, wrap: true, style: "GUIToolTip"); + toolTipBlock = new GUITextBlock(new RectTransform(new Point(width, height), null), richTextData, toolTip, font: GUI.SmallFont, wrap: true, style: "GUIToolTip"); toolTipBlock.RectTransform.NonScaledSize = new Point( (int)(GUI.SmallFont.MeasureString(toolTipBlock.WrappedText).X + padding.X + toolTipBlock.Padding.X + toolTipBlock.Padding.Z), (int)(GUI.SmallFont.MeasureString(toolTipBlock.WrappedText).Y + padding.Y + toolTipBlock.Padding.Y + toolTipBlock.Padding.W)); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs index f4b41a3e8..d1560e7ed 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs @@ -394,7 +394,7 @@ namespace Barotrauma if (Dropped) { - listBox.AddToGUIUpdateList(false, UpdateOrder); + listBox.AddToGUIUpdateList(false, 1); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIImage.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIImage.cs index 9e950e020..e8a601c8d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIImage.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIImage.cs @@ -1,12 +1,27 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; +using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace Barotrauma { public class GUIImage : GUIComponent { + //paths of the textures that are being loaded asynchronously + private static readonly List activeTextureLoads = new List(); + + private static bool loadingTextures; + + public static bool LoadingTextures + { + get + { + return loadingTextures; + } + } + public float Rotation; private Sprite sprite; @@ -15,8 +30,12 @@ namespace Barotrauma private bool crop; - private bool scaleToFit; - + private readonly bool scaleToFit; + + private bool lazyLoaded, loading; + + public bool LoadAsynchronously; + public bool Crop { get @@ -75,7 +94,6 @@ namespace Barotrauma private GUIImage(RectTransform rectT, Sprite sprite, Rectangle? sourceRect, bool scaleToFit, string style) : base(style, rectT) { this.scaleToFit = scaleToFit; - sprite?.EnsureLazyLoaded(); Sprite = sprite; if (sourceRect.HasValue) { @@ -95,18 +113,45 @@ namespace Barotrauma } else { - rectT.SizeChanged += RecalculateScale; + if (Sprite != null && !Sprite.LazyLoad) + { + rectT.SizeChanged += RecalculateScale; + } } Enabled = true; } protected override void Draw(SpriteBatch spriteBatch) { - if (!Visible) return; + if (!Visible || loading) { return; } if (Parent != null) { State = Parent.State; } if (OverrideState != null) { State = OverrideState.Value; } + if (Sprite != null && Sprite.LazyLoad && !lazyLoaded) + { + if (LoadAsynchronously) + { + loadingTextures = true; + loading = true; + TaskPool.Add(LoadTextureAsync(), (Task) => + { + loading = false; + lazyLoaded = true; + RectTransform.SizeChanged += RecalculateScale; + RecalculateScale(); + }); + return; + } + else + { + Sprite.EnsureLazyLoaded(); + RectTransform.SizeChanged += RecalculateScale; + RecalculateScale(); + lazyLoaded = true; + } + } + Color currentColor = GetColor(State); if (BlendState != null) @@ -146,9 +191,53 @@ namespace Barotrauma private void RecalculateScale() { + if (sourceRect == Rectangle.Empty && sprite != null) + { + sourceRect = sprite.SourceRect; + } + Scale = sprite == null || sprite.SourceRect.Width == 0 || sprite.SourceRect.Height == 0 ? 1.0f : Math.Min(RectTransform.Rect.Width / (float)sprite.SourceRect.Width, RectTransform.Rect.Height / (float)sprite.SourceRect.Height); } + + private async Task LoadTextureAsync() + { + await Task.Yield(); + bool wait = true; + { + //if another GUIImage is already loading the same texture, wait for it to finish + while (wait) + { + await Task.Delay(5); + lock (activeTextureLoads) + { + wait = activeTextureLoads.Contains(Sprite.FullPath); + } + } + } + try + { + lock (activeTextureLoads) + { + activeTextureLoads.Add(Sprite.FullPath); + } + Sprite.EnsureLazyLoaded(); + } + finally + { + DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, 10); + while (!Sprite.Loaded && DateTime.Now < timeOut) + { + await Task.Delay(5); + } + lock (activeTextureLoads) + { + activeTextureLoads.Remove(Sprite.FullPath); + loadingTextures = activeTextureLoads.Count > 0; + } + } + return true; + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUILayoutGroup.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUILayoutGroup.cs index 7658be341..e2a351874 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUILayoutGroup.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUILayoutGroup.cs @@ -77,7 +77,6 @@ namespace Barotrauma public GUILayoutGroup(RectTransform rectT, bool isHorizontal = false, Anchor childAnchor = Anchor.TopLeft) : base(null, rectT) { CanBeFocused = false; - this.isHorizontal = isHorizontal; this.childAnchor = childAnchor; rectT.ChildrenChanged += (child) => needsToRecalculate = true; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs index 013c7513b..3852ecca1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs @@ -70,6 +70,11 @@ namespace Barotrauma scrollBarNeedsRecalculation = true; } } + + /// + /// true if mouse down should select elements instead of mouse up + /// + private bool useMouseDownToSelect = false; private Vector4? overridePadding; public Vector4 Padding @@ -80,7 +85,11 @@ namespace Barotrauma if (Style == null) { return Vector4.Zero; } return Style.Padding; } - set { overridePadding = value; } + set + { + dimensionsNeedsRecalculation = true; + overridePadding = value; + } } public GUIComponent SelectedComponent @@ -182,10 +191,11 @@ namespace Barotrauma public GUIComponent DraggedElement => draggedElement; /// For horizontal listbox, default side is on the bottom. For vertical, it's on the right. - public GUIListBox(RectTransform rectT, bool isHorizontal = false, Color? color = null, string style = "", bool isScrollBarOnDefaultSide = true) : base(style, rectT) + public GUIListBox(RectTransform rectT, bool isHorizontal = false, Color? color = null, string style = "", bool isScrollBarOnDefaultSide = true, bool useMouseDownToSelect = false) : base(style, rectT) { CanBeFocused = true; selected = new List(); + this.useMouseDownToSelect = useMouseDownToSelect; ContentBackground = new GUIFrame(new RectTransform(Vector2.One, rectT), style) { CanBeFocused = false @@ -237,7 +247,7 @@ namespace Barotrauma UpdateDimensions(); } - private void UpdateDimensions() + public void UpdateDimensions() { dimensionsNeedsRecalculation = false; ContentBackground.RectTransform.Resize(Rect.Size); @@ -403,7 +413,10 @@ namespace Barotrauma if (Enabled && CanBeFocused && child.CanBeFocused && (GUI.IsMouseOn(child)) && child.Rect.Contains(PlayerInput.MousePosition)) { child.State = ComponentState.Hover; - if (PlayerInput.PrimaryMouseButtonClicked()) + + var mouseDown = useMouseDownToSelect ? PlayerInput.PrimaryMouseButtonDown() : PlayerInput.PrimaryMouseButtonClicked(); + + if (mouseDown) { Select(i, autoScroll: false); } @@ -426,7 +439,7 @@ namespace Barotrauma } else { - child.State = ComponentState.None; + child.State = !child.ExternalHighlight ? ComponentState.None : ComponentState.Hover; } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs index 9eb0be459..7a48e553c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs @@ -11,7 +11,7 @@ namespace Barotrauma public static List MessageBoxes = new List(); private static int DefaultWidth { - get { return Math.Max(400, 400 * (GameMain.GraphicsWidth / 1920)); } + get { return Math.Max(400, (int)(400 * (GameMain.GraphicsWidth / GUI.ReferenceResolution.X))); } } private float inGameCloseTimer = 0.0f; @@ -63,7 +63,7 @@ namespace Barotrauma } public GUIMessageBox(string headerText, string text, string[] buttons, Vector2? relativeSize = null, Point? minSize = null, Alignment textAlignment = Alignment.TopLeft, Type type = Type.Default, string tag = "", Sprite icon = null) - : base(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: GUI.Style.GetComponentStyle("GUIMessageBox." + type) != null ? "GUIMessageBox." + type : "GUIMessageBox") + : base(new RectTransform(GUI.Canvas.RelativeSize, GUI.Canvas, Anchor.Center), style: GUI.Style.GetComponentStyle("GUIMessageBox." + type) != null ? "GUIMessageBox." + type : "GUIMessageBox") { int width = (int)(DefaultWidth * (type == Type.Default ? 1.0f : 1.5f)), height = 0; if (relativeSize.HasValue) @@ -249,7 +249,10 @@ namespace Barotrauma InnerFrame.RectTransform.AbsoluteOffset = Vector2.SmoothStep(initialPos, defaultPos, openState).ToPoint(); openState = Math.Min(openState + deltaTime * 2.0f, 1.0f); - inGameCloseTimer += deltaTime; + if (GUI.MouseOn != InnerFrame && !InnerFrame.IsParentOf(GUI.MouseOn)) + { + inGameCloseTimer += deltaTime; + } if (inGameCloseTimer >= inGameCloseTime) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs index 01e36a545..75ddeeb79 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs @@ -59,6 +59,11 @@ namespace Barotrauma /// public Color Blue { get; private set; } = Color.Blue; + /// + /// General yellow color used for elements whose colors are set from code + /// + public Color Yellow { get; private set; } = Color.Yellow; + public Color ColorInventoryEmpty { get; private set; } = Color.Red; public Color ColorInventoryHalf { get; private set; } = Color.Orange; public Color ColorInventoryFull { get; private set; } = Color.LightGreen; @@ -128,6 +133,9 @@ namespace Barotrauma case "blue": Blue = subElement.GetAttributeColor("color", Blue); break; + case "yellow": + Yellow = subElement.GetAttributeColor("color", Yellow); + break; case "colorinventoryempty": ColorInventoryEmpty = subElement.GetAttributeColor("color", ColorInventoryEmpty); break; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs index 73daf81f0..0725d9dcd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs @@ -238,9 +238,40 @@ namespace Barotrauma get { return censoredText; } } - private List colorData = null; - private bool hasColorHighlight = false; - + public class StrikethroughSettings + { + private Color color = GUI.Style.Red; + private int thickness; + private int expand; + + public StrikethroughSettings(Color? color = null, int thickness = 1, int expand = 0) + { + if (color != null) this.color = color.Value; + this.thickness = thickness; + this.expand = expand; + } + + public void Draw(SpriteBatch spriteBatch, float textSizeHalf, float xPos, float yPos) + { + ShapeExtensions.DrawLine(spriteBatch, new Vector2(xPos - textSizeHalf - expand, yPos), new Vector2(xPos + textSizeHalf + expand, yPos), color, thickness); + } + } + + public StrikethroughSettings Strikethrough = null; + + private readonly List richTextData = null; + + private readonly bool hasColorHighlight = false; + + public struct ClickableArea + { + public RichTextData Data; + + public delegate void OnClickDelegate(GUITextBlock textBlock, ClickableArea area); + public OnClickDelegate OnClick; + } + public List ClickableAreas { get; private set; } = new List(); + /// /// This is the new constructor. /// If the rectT height is set 0, the height is calculated from the text. @@ -282,11 +313,11 @@ namespace Barotrauma Enabled = true; Censor = false; } - public GUITextBlock(RectTransform rectT, List colorData, string text, Color? textColor = null, ScalableFont font = null, Alignment textAlignment = Alignment.Left, bool wrap = false, string style = "", Color? color = null, bool playerInput = false) + public GUITextBlock(RectTransform rectT, List richTextData, string text, Color? textColor = null, ScalableFont font = null, Alignment textAlignment = Alignment.Left, bool wrap = false, string style = "", Color? color = null, bool playerInput = false) : this(rectT, text, textColor, font, textAlignment, wrap, style, color, playerInput) { - this.colorData = colorData; - hasColorHighlight = colorData != null; + this.richTextData = richTextData; + hasColorHighlight = richTextData != null; } public void CalculateHeightFromText(int padding = 0) @@ -427,6 +458,131 @@ namespace Barotrauma disabledTextColor = color; } + protected List> GetAllPositions() + { + float halfHeight = Font.MeasureString("T").Y * 0.5f; + string textDrawn = Censor ? CensoredText : WrappedText; + var positions = new List>(); + if (textDrawn.Contains("\n")) + { + string[] lines = textDrawn.Split('\n'); + int index = 0; + int totalIndex = 0; + for (int i = 0; i < lines.Length; i++) + { + string line = lines[i]; + totalIndex += line.Length; + float totalTextHeight = Font.MeasureString(textDrawn.Substring(0, totalIndex)).Y; + for (int j = 0; j <= line.Length; j++) + { + Vector2 lineTextSize = Font.MeasureString(line.Substring(0, j)); + Vector2 indexPos = new Vector2(lineTextSize.X + Padding.X, totalTextHeight + Padding.Y - halfHeight); + //DebugConsole.NewMessage($"index: {index}, pos: {indexPos}", Color.AliceBlue); + positions.Add(new Tuple(indexPos, index + j)); + } + index = totalIndex; + } + } + else + { + textDrawn = Censor ? CensoredText : Text; + for (int i = 0; i <= Text.Length; i++) + { + Vector2 textSize = Font.MeasureString(textDrawn.Substring(0, i)); + Vector2 indexPos = new Vector2(textSize.X + Padding.X, textSize.Y + Padding.Y - halfHeight) + TextPos - Origin; + //DebugConsole.NewMessage($"index: {i}, pos: {indexPos}", Color.WhiteSmoke); + positions.Add(new Tuple(indexPos, i)); + } + } + return positions; + } + + public int GetCaretIndexFromScreenPos(Vector2 pos) + { + return GetCaretIndexFromLocalPos(pos - Rect.Location.ToVector2()); + } + + public int GetCaretIndexFromLocalPos(Vector2 pos) + { + var positions = GetAllPositions(); + if (positions.Count == 0) { return 0; } + float halfHeight = Font.MeasureString("T").Y * 0.5f; + + var currPosition = positions[0]; + + float topY = positions.Min(p => p.Item1.Y); + + for (int i = 1; i < positions.Count; i++) + { + var p1 = positions[i]; + var p2 = currPosition; + + float diffY = Math.Abs(p1.Item1.Y - pos.Y) - Math.Abs(p2.Item1.Y - pos.Y); + if (diffY < -3.0f) + { + currPosition = p1; continue; + } + else if (diffY > 3.0f) + { + continue; + } + else + { + diffY = Math.Abs(p1.Item1.Y - pos.Y); + if (diffY < halfHeight || (p1.Item1.Y == topY && pos.Y < topY)) + { + //we are on this line, select the nearest character + float diffX = Math.Abs(p1.Item1.X - pos.X) - Math.Abs(p2.Item1.X - pos.X); + if (diffX < -1.0f) + { + currPosition = p1; continue; + } + else + { + continue; + } + } + else + { + //we are on a different line, preserve order + if (p1.Item2 < p2.Item2) + { + if (p1.Item1.Y > pos.Y) { currPosition = p1; } + } + else if (p1.Item2 > p2.Item2) + { + if (p1.Item1.Y < pos.Y) { currPosition = p1; } + } + continue; + } + } + } + //GUI.AddMessage($"index: {posIndex.Item2}, pos: {posIndex.Item1}", Color.WhiteSmoke); + return currPosition != null ? currPosition.Item2 : Text.Length; + } + + protected override void Update(float deltaTime) + { + base.Update(deltaTime); + + if (ClickableAreas.Any() && (GUI.MouseOn?.IsParentOf(this) ?? true) && Rect.Contains(PlayerInput.MousePosition)) + { + int index = GetCaretIndexFromScreenPos(PlayerInput.MousePosition); + foreach (ClickableArea clickableArea in ClickableAreas) + { + if (clickableArea.Data.StartIndex <= index && index <= clickableArea.Data.EndIndex) + { + GUI.MouseCursor = CursorState.Hand; + if (PlayerInput.PrimaryMouseButtonClicked()) + { + clickableArea.OnClick?.Invoke(this, clickableArea); + } + break; + } + } + } + } + protected override void Draw(SpriteBatch spriteBatch) { if (!Visible) { return; } @@ -480,7 +636,12 @@ namespace Barotrauma else { Font.DrawStringWithColors(spriteBatch, Censor ? censoredText : (Wrap ? wrappedText : text), pos, - currentTextColor * (currentTextColor.A / 255.0f), 0.0f, origin, TextScale, SpriteEffects.None, textDepth, colorData); + currentTextColor * (currentTextColor.A / 255.0f), 0.0f, origin, TextScale, SpriteEffects.None, textDepth, richTextData); + } + + if (Strikethrough != null) + { + Strikethrough.Draw(spriteBatch, (int)Math.Ceiling(TextSize.X / 2f), pos.X, ForceUpperCase ? pos.Y : pos.Y + GUI.Scale * 2f); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs index 2b67a0674..9be942058 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs @@ -67,7 +67,12 @@ namespace Barotrauma private Vector2 selectionEndPos; private Vector2 selectionRectSize; + private bool mouseHeldInside; + private readonly Memento memento = new Memento(); + + // Skip one update cycle, fixes Enter key instantly deselecting the chatbox + private bool skipUpdate; public GUIFrame Frame { @@ -362,114 +367,14 @@ namespace Barotrauma caretPosDirty = false; } - protected List> GetAllPositions() - { - float halfHeight = Font.MeasureString("T").Y * 0.5f; - string textDrawn = Censor ? textBlock.CensoredText : textBlock.WrappedText; - var positions = new List>(); - if (textDrawn.Contains("\n")) - { - string[] lines = textDrawn.Split('\n'); - int index = 0; - int totalIndex = 0; - for (int i = 0; i < lines.Length; i++) - { - string line = lines[i]; - totalIndex += line.Length; - float totalTextHeight = Font.MeasureString(textDrawn.Substring(0, totalIndex)).Y; - for (int j = 0; j <= line.Length; j++) - { - Vector2 lineTextSize = Font.MeasureString(line.Substring(0, j)); - Vector2 indexPos = new Vector2(lineTextSize.X + textBlock.Padding.X, totalTextHeight + textBlock.Padding.Y - halfHeight); - //DebugConsole.NewMessage($"index: {index}, pos: {indexPos}", Color.AliceBlue); - positions.Add(new Tuple(indexPos, index + j)); - } - index = totalIndex; - } - } - else - { - textDrawn = Censor ? textBlock.CensoredText : textBlock.Text; - for (int i = 0; i <= textBlock.Text.Length; i++) - { - Vector2 textSize = Font.MeasureString(textDrawn.Substring(0, i)); - Vector2 indexPos = new Vector2(textSize.X + textBlock.Padding.X, textSize.Y + textBlock.Padding.Y - halfHeight) + textBlock.TextPos - textBlock.Origin; - //DebugConsole.NewMessage($"index: {i}, pos: {indexPos}", Color.WhiteSmoke); - positions.Add(new Tuple(indexPos, i)); - } - } - return positions; - } - - public int GetCaretIndexFromScreenPos(Vector2 pos) - { - return GetCaretIndexFromLocalPos(pos - textBlock.Rect.Location.ToVector2()); - } - - public int GetCaretIndexFromLocalPos(Vector2 pos) - { - var positions = GetAllPositions(); - if (positions.Count==0) { return 0; } - float halfHeight = Font.MeasureString("T").Y * 0.5f; - - var currPosition = positions[0]; - - for (int i=1;i 3.0f) - { - continue; - } - else - { - diffY = Math.Abs(p1.Item1.Y - pos.Y); - if (diffY < halfHeight) - { - //we are on this line, select the nearest character - float diffX = Math.Abs(p1.Item1.X - pos.X) - Math.Abs(p2.Item1.X - pos.X); - if (diffX < -1.0f) - { - currPosition = p1; continue; - } - else - { - continue; - } - } - else - { - //we are on a different line, preserve order - if (p1.Item2 < p2.Item2) - { - if (p1.Item1.Y > pos.Y) { currPosition = p1; } - } - else if (p1.Item2 > p2.Item2) - { - if (p1.Item1.Y < pos.Y) { currPosition = p1; } - } - continue; - } - } - } - //GUI.AddMessage($"index: {posIndex.Item2}, pos: {posIndex.Item1}", Color.WhiteSmoke); - return currPosition != null ? currPosition.Item2 : textBlock.Text.Length; - } - public void Select(int forcedCaretIndex = -1) { + skipUpdate = true; if (memento.Current == null) { memento.Store(Text); } - CaretIndex = forcedCaretIndex == - 1 ? GetCaretIndexFromScreenPos(PlayerInput.MousePosition) : forcedCaretIndex; + CaretIndex = forcedCaretIndex == - 1 ? textBlock.GetCaretIndexFromScreenPos(PlayerInput.MousePosition) : forcedCaretIndex; ClearSelection(); selected = true; GUI.KeyboardDispatcher.Subscriber = this; @@ -499,11 +404,19 @@ namespace Barotrauma if (flashTimer > 0.0f) flashTimer -= deltaTime; if (!Enabled) { return; } + + if (skipUpdate) + { + skipUpdate = false; + return; + } + if (MouseRect.Contains(PlayerInput.MousePosition) && (GUI.MouseOn == null || (!(GUI.MouseOn is GUIButton) && GUI.IsMouseOn(this)))) { State = ComponentState.Hover; if (PlayerInput.PrimaryMouseButtonDown()) { + mouseHeldInside = true; Select(); } else @@ -518,7 +431,7 @@ namespace Barotrauma { if (!MathUtils.NearlyEqual(PlayerInput.MouseSpeed.X, 0)) { - CaretIndex = GetCaretIndexFromScreenPos(PlayerInput.MousePosition); + CaretIndex = textBlock.GetCaretIndexFromScreenPos(PlayerInput.MousePosition); CalculateCaretPos(); CalculateSelection(); } @@ -526,7 +439,11 @@ namespace Barotrauma } else { - if ((PlayerInput.LeftButtonClicked() || PlayerInput.RightButtonClicked()) && selected) Deselect(); + if ((PlayerInput.LeftButtonClicked() || PlayerInput.RightButtonClicked()) && selected) + { + if (!mouseHeldInside) { Deselect(); } + mouseHeldInside = false; + } isSelecting = false; State = ComponentState.None; } @@ -793,7 +710,7 @@ namespace Barotrauma InitSelectionStart(); } float lineHeight = Font.MeasureString("T").Y; - int newIndex = GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y-lineHeight)); + int newIndex = textBlock.GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y-lineHeight)); CaretIndex = newIndex; caretTimer = 0; HandleSelection(); @@ -804,7 +721,7 @@ namespace Barotrauma InitSelectionStart(); } lineHeight = Font.MeasureString("T").Y; - newIndex = GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y+lineHeight)); + newIndex = textBlock.GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y+lineHeight)); CaretIndex = newIndex; caretTimer = 0; HandleSelection(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs index 8df88614e..6be9c9283 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs @@ -50,10 +50,6 @@ namespace Barotrauma get; private set; } - /*public static Rectangle HealthBarAreaRight - { - get; private set; - }*/ public static Rectangle HealthBarArea { get; private set; @@ -120,17 +116,11 @@ namespace Barotrauma //horizontal slices at the corners of the screen for health bar and affliction icons int afflictionAreaHeight = (int)(50 * GUI.Scale); - int healthBarWidth = BottomRightInfoArea.Width + CharacterInventory.SlotSize.X + CharacterInventory.Spacing * 2 + CharacterInventory.HideButtonWidth; + int healthBarWidth = (int)(BottomRightInfoArea.Width * 1.58f); int healthBarHeight = (int)(50f * GUI.Scale); - HealthBarArea = new Rectangle(BottomRightInfoArea.X - (healthBarWidth - BottomRightInfoArea.Width) + (int)(2 * GUI.Scale), BottomRightInfoArea.Y - healthBarHeight + (int)(10 * GUI.Scale), healthBarWidth, healthBarHeight); - AfflictionAreaLeft = new Rectangle(HealthBarArea.X, HealthBarArea.Y - Padding - afflictionAreaHeight, HealthBarArea.Width, afflictionAreaHeight); - - //HealthBarAreaRight = new Rectangle(Padding, GameMain.GraphicsHeight - healthBarHeight - Padding, healthBarWidth, healthBarHeight); - /*if (HealthBarAreaRight.Y + healthBarHeight * 0.75f < PortraitArea.Y) - { - HealthBarAreaRight = new Rectangle(GameMain.GraphicsWidth - Padding - healthBarWidth, HealthBarAreaRight.Y, HealthBarAreaRight.Width, HealthBarAreaRight.Height); - }*/ - //AfflictionAreaRight = new Rectangle(HealthBarAreaRight.X, HealthBarAreaRight.Y + healthBarHeight + Padding, healthBarWidth, afflictionAreaHeight); + HealthBarArea = new Rectangle(BottomRightInfoArea.Right - healthBarWidth + (int)Math.Floor(1 / GUI.Scale), BottomRightInfoArea.Y - healthBarHeight + GUI.IntScale(10), healthBarWidth, healthBarHeight); + AfflictionAreaLeft = new Rectangle(HealthBarArea.X, HealthBarArea.Y - Padding - afflictionAreaHeight, HealthBarArea.Width, afflictionAreaHeight); + int messageAreaWidth = GameMain.GraphicsWidth / 3; MessageAreaTop = new Rectangle((GameMain.GraphicsWidth - messageAreaWidth) / 2, ButtonAreaTop.Bottom, messageAreaWidth, ButtonAreaTop.Height); @@ -146,7 +136,7 @@ namespace Barotrauma CrewArea = new Rectangle(Padding, Padding, (int)Math.Max(400 * GUI.Scale, 220), ObjectiveAnchor.Top - Padding * 2); - InventoryAreaLower = new Rectangle(Padding, inventoryTopY, GameMain.GraphicsWidth - Padding * 2, GameMain.GraphicsHeight - inventoryTopY); + InventoryAreaLower = new Rectangle(ChatBoxArea.Right + Padding * 7, inventoryTopY, GameMain.GraphicsWidth - Padding * 9 - ChatBoxArea.Width, GameMain.GraphicsHeight - inventoryTopY); int healthWindowWidth = (int)(GameMain.GraphicsWidth * 0.5f); int healthWindowHeight = (int)(GameMain.GraphicsWidth * 0.5f * 0.65f); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs index f730a55f2..79b77f528 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs @@ -338,6 +338,8 @@ namespace Barotrauma PendingSplashScreens.Clear(); currSplashScreen = null; } + + if (currSplashScreen == null) { return; } } if (currSplashScreen.IsPlaying) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs index d61cc17e9..8f7c9d2bf 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs @@ -253,11 +253,12 @@ namespace Barotrauma return _rect; } } - public Rectangle ParentRect => Parent != null ? Parent.Rect : ScreenRect; - + public Rectangle ParentRect => Parent != null ? Parent.Rect : UIRect; protected Rectangle NonScaledRect => new Rectangle(NonScaledTopLeft, NonScaledSize); - protected Rectangle NonScaledParentRect => parent != null ? Parent.NonScaledRect : ScreenRect; - protected Rectangle ScreenRect => new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight); + protected virtual Rectangle NonScaledUIRect => NonScaledRect; + protected Rectangle NonScaledParentRect => parent != null ? Parent.NonScaledRect : UIRect; + protected Rectangle NonScaledParentUIRect => parent != null ? Parent.NonScaledUIRect : UIRect; + protected Rectangle UIRect => new Rectangle(0, 0, GUI.UIWidth, GameMain.GraphicsHeight); private Pivot pivot; /// @@ -444,14 +445,14 @@ namespace Barotrauma protected void RecalculateRelativeSize() { - relativeSize = new Vector2(NonScaledSize.X, NonScaledSize.Y) / new Vector2(NonScaledParentRect.Width, NonScaledParentRect.Height); + relativeSize = new Vector2(NonScaledSize.X, NonScaledSize.Y) / new Vector2(NonScaledParentUIRect.Width, NonScaledParentUIRect.Height); recalculateRect = true; SizeChanged?.Invoke(); } protected void RecalculateAbsoluteSize() { - Point size = NonScaledParentRect.Size; + Point size = NonScaledParentUIRect.Size; switch (ScaleBasis) { case ScaleBasis.BothWidth: @@ -651,6 +652,13 @@ namespace Barotrauma Parent.ChildrenChanged?.Invoke(this); } + public void ReverseChildren() + { + children.Reverse(); + RecalculateAll(false, false, true); + Parent.ChildrenChanged?.Invoke(this); + } + public void SetAsLastChild() { if (IsLastChild) { return; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs new file mode 100644 index 000000000..deea61de3 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs @@ -0,0 +1,941 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System.Linq; +using Barotrauma.Networking; + +namespace Barotrauma +{ + class TabMenu + { + public static bool PendingChanges = false; + + private static bool initialized = false; + + private static UISprite spectateIcon, deadIcon, disconnectedIcon; + private static Sprite ownerIcon, moderatorIcon; + + private enum InfoFrameTab { Crew, Mission, MyCharacter, Traitor }; + private static InfoFrameTab selectedTab; + private GUIFrame infoFrame, contentFrame; + + private readonly List tabButtons = new List(); + private GUIFrame infoFrameHolder; + private List linkedGUIList; + private GUIListBox logList; + private GUIListBox[] crewListArray; + private float sizeMultiplier = 1f; + + private IEnumerable crew; + private List teamIDs; + private const string inLobbyString = "\u2022 \u2022 \u2022"; + + private static Color ownCharacterBGColor = Color.Gold * 0.7f; + + private class LinkedGUI + { + private const ushort lowPingThreshold = 100; + private const ushort mediumPingThreshold = 200; + + private ushort currentPing; + private Client client; + private Character character; + private bool hasCharacter; + private GUITextBlock textBlock; + private GUIFrame frame; + + public LinkedGUI(Client client, GUIFrame frame, bool hasCharacter, GUITextBlock textBlock) + { + this.client = client; + this.textBlock = textBlock; + this.frame = frame; + this.hasCharacter = hasCharacter; + } + + public LinkedGUI(Character character, GUIFrame frame, bool hasCharacter, GUITextBlock textBlock) + { + this.character = character; + this.textBlock = textBlock; + this.frame = frame; + this.hasCharacter = hasCharacter; + } + + public bool HasMultiplayerCharacterChanged() + { + if (client == null) return false; + bool characterState = client.Character != null; + if (characterState && client.Character.IsDead) characterState = false; + return hasCharacter != characterState; + } + + public bool HasMultiplayerCharacterDied() + { + if (client == null || !hasCharacter || client.Character == null) return false; + return client.Character.IsDead; + } + + public bool HasAICharacterDied() + { + if (character == null) return false; + return character.IsDead; + } + + public void TryPingRefresh() + { + if (client == null) return; + if (currentPing == client.Ping) return; + currentPing = client.Ping; + textBlock.Text = currentPing.ToString(); + textBlock.TextColor = GetPingColor(); + } + + private Color GetPingColor() + { + if (currentPing < lowPingThreshold) + { + return GUI.Style.Green; + } + else if (currentPing < mediumPingThreshold) + { + return GUI.Style.Yellow; + } + else + { + return GUI.Style.Red; + } + } + + public void Remove(GUIFrame parent) + { + parent.RemoveChild(frame); + } + } + + public void Initialize() + { + spectateIcon = GUI.Style.GetComponentStyle("SpectateIcon").Sprites[GUIComponent.ComponentState.None][0]; + deadIcon = GUI.Style.GetComponentStyle("DeadIcon").Sprites[GUIComponent.ComponentState.None][0]; + disconnectedIcon = GUI.Style.GetComponentStyle("DisconnectedIcon").Sprites[GUIComponent.ComponentState.None][0]; + ownerIcon = GUI.Style.GetComponentStyle("OwnerIcon").Sprites[GUIComponent.ComponentState.None][0].Sprite; + moderatorIcon = GUI.Style.GetComponentStyle("ModeratorIcon").Sprites[GUIComponent.ComponentState.None][0].Sprite; + initialized = true; + } + + public TabMenu() + { + if (!initialized) Initialize(); + + CreateInfoFrame(selectedTab); + SelectInfoFrameTab(null, selectedTab); + } + + public void Update() + { + if (selectedTab != InfoFrameTab.Crew) return; + if (linkedGUIList == null) return; + + if (GameMain.IsMultiplayer) + { + for (int i = 0; i < linkedGUIList.Count; i++) + { + linkedGUIList[i].TryPingRefresh(); + if (linkedGUIList[i].HasMultiplayerCharacterChanged() || linkedGUIList[i].HasMultiplayerCharacterDied() || linkedGUIList[i].HasAICharacterDied()) + { + RemoveCurrentElements(); + CreateMultiPlayerList(true); + return; + } + } + } + else + { + for (int i = 0; i < linkedGUIList.Count; i++) + { + if (linkedGUIList[i].HasAICharacterDied()) + { + RemoveCurrentElements(); + CreateSinglePlayerList(true); + } + } + } + } + + public void AddToGUIUpdateList() + { + infoFrame?.AddToGUIUpdateList(); + NetLobbyScreen.JobInfoFrame?.AddToGUIUpdateList(); + } + + public static void OnRoundEnded() + { + storedMessages.Clear(); + PendingChanges = false; + } + + private void CreateInfoFrame(InfoFrameTab selectedTab) + { + tabButtons.Clear(); + + infoFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, infoFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + + switch (selectedTab) + { + case InfoFrameTab.Crew: + case InfoFrameTab.Mission: + case InfoFrameTab.Traitor: + default: + contentFrame = new GUIFrame(new RectTransform(new Vector2(0.33f, 0.667f), infoFrame.RectTransform, Anchor.TopCenter, Pivot.TopCenter) { /*MinSize = new Point(width, height),*/ RelativeOffset = new Vector2(0.025f, 0.12f) }); + break; + case InfoFrameTab.MyCharacter: + contentFrame = new GUIFrame(new RectTransform(new Vector2(0.33f, 0.5f), infoFrame.RectTransform, Anchor.TopCenter, Pivot.TopCenter) { /*MinSize = new Point(width, height),*/ RelativeOffset = new Vector2(0.025f, 0.12f) }); + break; + } + + var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.958f, 0.943f), contentFrame.RectTransform, Anchor.TopCenter, Pivot.TopCenter) { AbsoluteOffset = new Point(0, GUI.IntScale(17.5f)) }, style: null); + var buttonArea = new GUILayoutGroup(new RectTransform(new Point(innerFrame.Rect.Width, GUI.IntScale(25f)), innerFrame.RectTransform) { AbsoluteOffset = new Point(2, 0) }, isHorizontal: true) + { + RelativeSpacing = 0.01f + }; + + infoFrameHolder = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.926f), innerFrame.RectTransform, Anchor.BottomCenter, Pivot.BottomCenter), style: null); + + var crewButton = new GUIButton(new RectTransform(new Vector2(0.245f, 1.0f), buttonArea.RectTransform), TextManager.Get("Crew"), style: "GUITabButton") + { + UserData = InfoFrameTab.Crew, + OnClicked = SelectInfoFrameTab + }; + tabButtons.Add(crewButton); + + var missionButton = new GUIButton(new RectTransform(new Vector2(0.245f, 1.0f), buttonArea.RectTransform), TextManager.Get("Mission"), style: "GUITabButton") + { + UserData = InfoFrameTab.Mission, + OnClicked = SelectInfoFrameTab + }; + tabButtons.Add(missionButton); + + bool isTraitor = GameMain.Client?.Character?.IsTraitor ?? false; + if (isTraitor && GameMain.Client.TraitorMission != null) + { + var traitorButton = new GUIButton(new RectTransform(new Vector2(0.245f, 1.0f), buttonArea.RectTransform), TextManager.Get("tabmenu.traitor"), style: "GUITabButton") + { + UserData = InfoFrameTab.Traitor, + OnClicked = SelectInfoFrameTab + }; + tabButtons.Add(traitorButton); + } + + if (GameMain.NetworkMember != null) + { + var myCharacterButton = new GUIButton(new RectTransform(new Vector2(0.245f, 1.0f), buttonArea.RectTransform), TextManager.Get("tabmenu.character"), style: "GUITabButton") + { + UserData = InfoFrameTab.MyCharacter, + OnClicked = SelectInfoFrameTab + }; + tabButtons.Add(myCharacterButton); + } + } + + private bool SelectInfoFrameTab(GUIButton button, object userData) + { + selectedTab = (InfoFrameTab)userData; + + CreateInfoFrame(selectedTab); + tabButtons.ForEach(tb => tb.Selected = (InfoFrameTab)tb.UserData == selectedTab); + + switch (selectedTab) + { + case InfoFrameTab.Crew: + CreateCrewListFrame(infoFrameHolder); + break; + case InfoFrameTab.Mission: + CreateMissionInfo(infoFrameHolder); + break; + case InfoFrameTab.Traitor: + TraitorMissionPrefab traitorMission = GameMain.Client.TraitorMission; + Character traitor = GameMain.Client.Character; + if (traitor == null || traitorMission == null) return false; + CreateTraitorInfo(infoFrameHolder, traitorMission, traitor); + break; + case InfoFrameTab.MyCharacter: + if (GameMain.NetworkMember == null) { return false; } + GameMain.NetLobbyScreen.CreatePlayerFrame(infoFrameHolder); + break; + } + + return true; + } + + private const float jobColumnWidthPercentage = 0.138f; + private const float characterColumnWidthPercentage = 0.656f; + private const float pingColumnWidthPercentage = 0.206f; + + private int jobColumnWidth, characterColumnWidth, pingColumnWidth; + + private void CreateCrewListFrame(GUIFrame crewFrame) + { + crew = GameMain.GameSession.CrewManager.GetCharacters(); + teamIDs = crew.Select(c => c.TeamID).Distinct().ToList(); + + // Show own team first when there's more than one team + if (teamIDs.Count > 1 && GameMain.Client.Character != null) + { + Character.TeamType ownTeam = GameMain.Client.Character.TeamID; + teamIDs = teamIDs.OrderBy(i => i != ownTeam).ThenBy(i => i).ToList(); + } + + if (!teamIDs.Any()) teamIDs.Add(Character.TeamType.None); + + var content = new GUILayoutGroup(new RectTransform(Vector2.One, crewFrame.RectTransform)); + + crewListArray = new GUIListBox[teamIDs.Count]; + GUILayoutGroup[] headerFrames = new GUILayoutGroup[teamIDs.Count]; + + float nameHeight = 0.075f; + + Vector2 crewListSize = new Vector2(1f, 1f / teamIDs.Count - (teamIDs.Count > 1 ? nameHeight * 1.1f : 0f)); + for (int i = 0; i < teamIDs.Count; i++) + { + if (teamIDs.Count > 1) + { + new GUITextBlock(new RectTransform(new Vector2(1.0f, nameHeight), content.RectTransform), CombatMission.GetTeamName(teamIDs[i]), textColor: i == 0 ? GUI.Style.Green : GUI.Style.Orange) { ForceUpperCase = true }; + } + + headerFrames[i] = new GUILayoutGroup(new RectTransform(Vector2.Zero, content.RectTransform, Anchor.TopLeft, Pivot.BottomLeft) { AbsoluteOffset = new Point(2, -1) }, isHorizontal: true) + { + AbsoluteSpacing = 2, + UserData = i + }; + + GUIListBox crewList = new GUIListBox(new RectTransform(crewListSize, content.RectTransform)) + { + Padding = new Vector4(2, 5, 0, 0), + AutoHideScrollBar = false + }; + crewList.UpdateDimensions(); + + if (teamIDs.Count > 1) + { + crewList.OnSelected = (component, obj) => + { + for (int i = 0; i < crewListArray.Length; i++) + { + if (crewListArray[i] == crewList) continue; + crewListArray[i].Deselect(); + } + SelectElement(component.UserData, crewList); + return true; + }; + } + else + { + crewList.OnSelected = (component, obj) => + { + SelectElement(component.UserData, crewList); + return true; + }; + } + + crewListArray[i] = crewList; + } + + for (int i = 0; i < teamIDs.Count; i++) + { + headerFrames[i].RectTransform.RelativeSize = new Vector2(1f - crewListArray[i].ScrollBar.Rect.Width / (float)crewListArray[i].Rect.Width, GUI.HotkeyFont.Size / (float)crewFrame.RectTransform.Rect.Height * 1.5f); + + if (!GameMain.IsMultiplayer) + { + CreateSinglePlayerListContentHolder(headerFrames[i]); + } + else + { + CreateMultiPlayerListContentHolder(headerFrames[i]); + } + } + + crewFrame.RectTransform.AbsoluteOffset = new Point(0, (int)(headerFrames[0].Rect.Height * headerFrames.Length) - (teamIDs.Count > 1 ? GUI.IntScale(10f) : 0)); + + if (GameMain.IsMultiplayer) + { + CreateMultiPlayerList(false); + CreateMultiPlayerLogContent(crewFrame); + } + else + { + CreateSinglePlayerList(false); + } + } + + private void CreateSinglePlayerListContentHolder(GUILayoutGroup headerFrame) + { + GUIButton jobButton = new GUIButton(new RectTransform(new Vector2(0f, 1f), headerFrame.RectTransform), TextManager.Get("tabmenu.job"), style: "GUIButtonSmallFreeScale"); + GUIButton characterButton = new GUIButton(new RectTransform(new Vector2(0f, 1f), headerFrame.RectTransform), TextManager.Get("name"), style: "GUIButtonSmallFreeScale"); + + sizeMultiplier = (headerFrame.Rect.Width - headerFrame.AbsoluteSpacing * (headerFrame.CountChildren - 1)) / (float)headerFrame.Rect.Width; + + jobButton.RectTransform.RelativeSize = new Vector2(jobColumnWidthPercentage * sizeMultiplier, 1f); + characterButton.RectTransform.RelativeSize = new Vector2((1f - jobColumnWidthPercentage * sizeMultiplier) * sizeMultiplier, 1f); + + jobButton.TextBlock.Font = characterButton.TextBlock.Font = GUI.HotkeyFont; + jobButton.CanBeFocused = characterButton.CanBeFocused = false; + jobButton.TextBlock.ForceUpperCase = characterButton.TextBlock.ForceUpperCase = true; + + jobColumnWidth = jobButton.Rect.Width; + characterColumnWidth = characterButton.Rect.Width; + } + + private void CreateSinglePlayerList(bool refresh) + { + if (refresh) + { + crew = GameMain.GameSession.CrewManager.GetCharacters(); + } + + linkedGUIList = new List(); + + for (int i = 0; i < teamIDs.Count; i++) + { + foreach (Character character in crew.Where(c => c.TeamID == teamIDs[i])) + { + CreateSinglePlayerCharacterElement(character, i); + } + } + } + + private void CreateSinglePlayerCharacterElement(Character character, int i) + { + GUIFrame frame = new GUIFrame(new RectTransform(new Point(crewListArray[i].Content.Rect.Width, GUI.IntScale(33f)), crewListArray[i].Content.RectTransform), style: "ListBoxElement") + { + UserData = character, + Color = (Character.Controlled == character) ? ownCharacterBGColor : Color.Transparent + }; + + var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.9f), frame.RectTransform, Anchor.Center), isHorizontal: true) + { + AbsoluteSpacing = 2 + }; + + new GUICustomComponent(new RectTransform(new Point(jobColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform, Anchor.Center), onDraw: (sb, component) => character.Info.DrawJobIcon(sb, component.Rect)) + { + CanBeFocused = false, + HoverColor = Color.White, + SelectedColor = Color.White + }; + + GUITextBlock characterNameBlock = new GUITextBlock(new RectTransform(new Point(characterColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), + ToolBox.LimitString(character.Info.Name, GUI.Font, characterColumnWidth), textAlignment: Alignment.Center, textColor: character.Info.Job.Prefab.UIColor); + + linkedGUIList.Add(new LinkedGUI(character, frame, !character.IsDead, null)); + } + + private void CreateMultiPlayerListContentHolder(GUILayoutGroup headerFrame) + { + GUIButton jobButton = new GUIButton(new RectTransform(new Vector2(0f, 1f), headerFrame.RectTransform), TextManager.Get("tabmenu.job"), style: "GUIButtonSmallFreeScale"); + GUIButton characterButton = new GUIButton(new RectTransform(new Vector2(0f, 1f), headerFrame.RectTransform), TextManager.Get("name"), style: "GUIButtonSmallFreeScale"); + GUIButton pingButton = new GUIButton(new RectTransform(new Vector2(0f, 1f), headerFrame.RectTransform), TextManager.Get("serverlistping"), style: "GUIButtonSmallFreeScale"); + + sizeMultiplier = (headerFrame.Rect.Width - headerFrame.AbsoluteSpacing * (headerFrame.CountChildren - 1)) / (float)headerFrame.Rect.Width; + + jobButton.RectTransform.RelativeSize = new Vector2(jobColumnWidthPercentage * sizeMultiplier, 1f); + characterButton.RectTransform.RelativeSize = new Vector2(characterColumnWidthPercentage * sizeMultiplier, 1f); + pingButton.RectTransform.RelativeSize = new Vector2(pingColumnWidthPercentage * sizeMultiplier, 1f); + + jobButton.TextBlock.Font = characterButton.TextBlock.Font = pingButton.TextBlock.Font = GUI.HotkeyFont; + jobButton.CanBeFocused = characterButton.CanBeFocused = pingButton.CanBeFocused = false; + jobButton.TextBlock.ForceUpperCase = characterButton.TextBlock.ForceUpperCase = pingButton.ForceUpperCase = true; + + jobColumnWidth = jobButton.Rect.Width; + characterColumnWidth = characterButton.Rect.Width; + pingColumnWidth = pingButton.Rect.Width; + } + + private void CreateMultiPlayerList(bool refresh) + { + if (refresh) + { + crew = GameMain.GameSession.CrewManager.GetCharacters(); + } + + linkedGUIList = new List(); + + List connectedClients = GameMain.Client.ConnectedClients; + + for (int i = 0; i < teamIDs.Count; i++) + { + foreach (Character character in crew.Where(c => c.TeamID == teamIDs[i])) + { + if (!(character is AICharacter) && connectedClients.Find(c => c.Character == null && c.Name == character.Name) != null) continue; + CreateMultiPlayerCharacterElement(character, GameMain.Client.ConnectedClients.Find(c => c.Character == character), i); + } + } + + for (int j = 0; j < connectedClients.Count; j++) + { + Client client = connectedClients[j]; + + if (!client.InGame || client.Character == null || client.Character.IsDead) + { + CreateMultiPlayerClientElement(client); + } + } + } + + private void CreateMultiPlayerCharacterElement(Character character, Client client, int i) + { + GUIFrame frame = new GUIFrame(new RectTransform(new Point(crewListArray[i].Content.Rect.Width, GUI.IntScale(33f)), crewListArray[i].Content.RectTransform), style: "ListBoxElement") + { + UserData = character, + Color = (GameMain.NetworkMember != null && GameMain.Client.Character == character) ? ownCharacterBGColor : Color.Transparent + }; + + frame.OnSecondaryClicked += (component, data) => + { + GameMain.GameSession?.CrewManager?.CreateModerationContextMenu(PlayerInput.MousePosition.ToPoint(), client); + return true; + }; + + var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.9f), frame.RectTransform, Anchor.Center), isHorizontal: true) + { + AbsoluteSpacing = 2 + }; + + new GUICustomComponent(new RectTransform(new Point(jobColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform, Anchor.Center), onDraw: (sb, component) => character.Info.DrawJobIcon(sb, component.Rect)) + { + CanBeFocused = false, + HoverColor = Color.White, + SelectedColor = Color.White + }; + + if (client != null) + { + CreateNameWithPermissionIcon(client, paddedFrame); + linkedGUIList.Add(new LinkedGUI(client, frame, true, new GUITextBlock(new RectTransform(new Point(pingColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), client.Ping.ToString(), textAlignment: Alignment.Center))); + } + else + { + GUITextBlock characterNameBlock = new GUITextBlock(new RectTransform(new Point(characterColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), + ToolBox.LimitString(character.Info.Name, GUI.Font, characterColumnWidth), textAlignment: Alignment.Center, textColor: character.Info.Job.Prefab.UIColor); + + if (character is AICharacter) + { + linkedGUIList.Add(new LinkedGUI(character, frame, !character.IsDead, new GUITextBlock(new RectTransform(new Point(pingColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), TextManager.Get("tabmenu.bot"), textAlignment: Alignment.Center) { ForceUpperCase = true })); + } + else + { + linkedGUIList.Add(new LinkedGUI(client: null, frame, true, null)); + + new GUICustomComponent(new RectTransform(new Point(pingColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform, Anchor.Center), onDraw: (sb, component) => DrawDisconnectedIcon(sb, component.Rect)) + { + CanBeFocused = false, + HoverColor = Color.White, + SelectedColor = Color.White + }; + } + } + } + + private void CreateMultiPlayerClientElement(Client client) + { + int teamIndex = GetTeamIndex(client); + if (teamIndex == -1) teamIndex = 0; + + GUIFrame frame = new GUIFrame(new RectTransform(new Point(crewListArray[teamIndex].Content.Rect.Width, GUI.IntScale(33f)), crewListArray[teamIndex].Content.RectTransform), style: "ListBoxElement") + { + UserData = client, + Color = Color.Transparent + }; + + var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.9f), frame.RectTransform, Anchor.Center), isHorizontal: true) + { + AbsoluteSpacing = 2 + }; + + new GUICustomComponent(new RectTransform(new Point(jobColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform, Anchor.Center), + onDraw: (sb, component) => DrawNotInGameIcon(sb, component.Rect, client)) + { + CanBeFocused = false, + HoverColor = Color.White, + SelectedColor = Color.White + }; + + CreateNameWithPermissionIcon(client, paddedFrame); + linkedGUIList.Add(new LinkedGUI(client, frame, false, new GUITextBlock(new RectTransform(new Point(pingColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), client.Ping.ToString(), textAlignment: Alignment.Center))); + } + + private int GetTeamIndex(Client client) + { + if (teamIDs.Count <= 1) return 0; + + if (client.Character != null) + { + return teamIDs.IndexOf(client.Character.TeamID); + } + + if (client.CharacterID != 0) + { + foreach (Character c in crew) + { + if (client.CharacterID == c.ID) + { + return teamIDs.IndexOf(c.TeamID); + } + } + } + else + { + foreach (Character c in crew) + { + if (client.Name == c.Name) + { + return teamIDs.IndexOf(c.TeamID); + } + } + } + + return 0; + } + + private void CreateNameWithPermissionIcon(Client client, GUILayoutGroup paddedFrame) + { + GUITextBlock characterNameBlock; + Sprite permissionIcon = GetPermissionIcon(client); + JobPrefab prefab = client.Character?.Info?.Job?.Prefab; + Color nameColor = prefab != null ? prefab.UIColor : Color.White; + + if (permissionIcon != null) + { + Point iconSize = permissionIcon.SourceRect.Size; + float characterNameWidthAdjustment = (iconSize.X + paddedFrame.AbsoluteSpacing) / characterColumnWidth; + + characterNameBlock = new GUITextBlock(new RectTransform(new Point(characterColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), + ToolBox.LimitString(client.Name, GUI.Font, (int)(characterColumnWidth - paddedFrame.Rect.Width * characterNameWidthAdjustment)), textAlignment: Alignment.Center, textColor: nameColor); + + float iconWidth = iconSize.X / (float)characterColumnWidth; + int xOffset = (int)(jobColumnWidth + characterNameBlock.TextPos.X - GUI.Font.MeasureString(characterNameBlock.Text).X / 2f - paddedFrame.AbsoluteSpacing - iconWidth * paddedFrame.Rect.Width); + new GUIImage(new RectTransform(new Vector2(iconWidth, 1f), paddedFrame.RectTransform) { AbsoluteOffset = new Point(xOffset + 2, 0) }, permissionIcon) { IgnoreLayoutGroups = true }; + } + else + { + characterNameBlock = new GUITextBlock(new RectTransform(new Point(characterColumnWidth, paddedFrame.Rect.Height), paddedFrame.RectTransform), + ToolBox.LimitString(client.Name, GUI.Font, characterColumnWidth), textAlignment: Alignment.Center, textColor: nameColor); + } + + if (client.Character != null && client.Character.IsDead) + { + characterNameBlock.Strikethrough = new GUITextBlock.StrikethroughSettings(null, GUI.IntScale(1f), GUI.IntScale(5f)); + } + } + + private Sprite GetPermissionIcon(Client client) + { + if (GameMain.NetworkMember == null || client == null || !client.HasPermissions) return null; + + if (!client.AllowKicking) // Owner cannot be kicked + { + return ownerIcon; + } + else + { + return moderatorIcon; + } + } + + private void DrawNotInGameIcon(SpriteBatch spriteBatch, Rectangle area, Client client) + { + if (client.Spectating) + { + spectateIcon.Draw(spriteBatch, area, Color.White); + } + else if (client.Character != null && client.Character.IsDead) + { + client.Character.Info.DrawJobIcon(spriteBatch, area); + } + else + { + Vector2 stringOffset = GUI.GlobalFont.MeasureString(inLobbyString) / 2f; + GUI.GlobalFont.DrawString(spriteBatch, inLobbyString, area.Center.ToVector2() - stringOffset, Color.White); + } + } + + private void DrawDisconnectedIcon(SpriteBatch spriteBatch, Rectangle area) + { + disconnectedIcon.Draw(spriteBatch, area, GUI.Style.Red); + } + + /// + /// Select an element from CrewListFrame + /// + private bool SelectElement(object userData, GUIComponent crewList) + { + Character character = userData as Character; + Client client = userData as Client; + + GUIComponent existingPreview = infoFrameHolder.FindChild("SelectedCharacter"); + if (existingPreview != null) infoFrameHolder.RemoveChild(existingPreview); + + GUIFrame background = new GUIFrame(new RectTransform(new Vector2(0.543f, 0.717f), infoFrameHolder.RectTransform, Anchor.TopLeft, Pivot.TopRight) { RelativeOffset = new Vector2(-0.061f, 0) }) + { + UserData = "SelectedCharacter" + }; + + if (character != null) + { + if (GameMain.NetworkMember == null) + { + GUIComponent preview = character.Info.CreateInfoFrame(background, false, null); + } + else + { + GUIComponent preview = character.Info.CreateInfoFrame(background, false, GetPermissionIcon(GameMain.Client.ConnectedClients.Find(c => c.Character == character))); + GameMain.Client.SelectCrewCharacter(character, preview); + } + } + else if (client != null) + { + GUIComponent preview = CreateClientInfoFrame(background, client, GetPermissionIcon(client)); + if (GameMain.NetworkMember != null) GameMain.Client.SelectCrewClient(client, preview); + } + + return true; + } + + private GUIComponent CreateClientInfoFrame(GUIFrame frame, Client client, Sprite permissionIcon = null) + { + GUIComponent paddedFrame; + + if (client.Character == null) + { + paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.874f, 0.58f), frame.RectTransform, Anchor.TopCenter) { RelativeOffset = new Vector2(0.0f, 0.05f) }) + { + RelativeSpacing = 0.05f + //Stretch = true + }; + + var headerArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.322f), paddedFrame.RectTransform), isHorizontal: true); + + new GUICustomComponent(new RectTransform(new Vector2(0.425f, 1.0f), headerArea.RectTransform), + onDraw: (sb, component) => DrawNotInGameIcon(sb, component.Rect, client)); + + ScalableFont font = paddedFrame.Rect.Width < 280 ? GUI.SmallFont : GUI.Font; + + var headerTextArea = new GUILayoutGroup(new RectTransform(new Vector2(0.575f, 1.0f), headerArea.RectTransform)) + { + RelativeSpacing = 0.02f, + Stretch = true + }; + + GUITextBlock clientNameBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), ToolBox.LimitString(client.Name, GUI.Font, headerTextArea.Rect.Width), textColor: Color.White, font: GUI.Font) + { + ForceUpperCase = true, + Padding = Vector4.Zero + }; + + if (permissionIcon != null) + { + Point iconSize = permissionIcon.SourceRect.Size; + int iconWidth = (int)((float)clientNameBlock.Rect.Height / iconSize.Y * iconSize.X); + new GUIImage(new RectTransform(new Point(iconWidth, clientNameBlock.Rect.Height), clientNameBlock.RectTransform) { AbsoluteOffset = new Point(-iconWidth - 2, 0) }, permissionIcon) { IgnoreLayoutGroups = true }; + } + + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), client.Spectating ? TextManager.Get("playingasspectator") : TextManager.Get("tabmenu.inlobby"), textColor: Color.White, font: font, wrap: true) + { + Padding = Vector4.Zero + }; + } + else + { + paddedFrame = client.Character.Info.CreateInfoFrame(frame, false, permissionIcon); + } + + return paddedFrame; + } + + private void CreateMultiPlayerLogContent(GUIFrame crewFrame) + { + var logContainer = new GUIFrame(new RectTransform(new Vector2(0.543f, 0.717f), crewFrame.RectTransform, Anchor.TopRight, Pivot.TopLeft) { RelativeOffset = new Vector2(-0.061f, 0) }); + var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.900f, 0.900f), logContainer.RectTransform, Anchor.TopCenter, Pivot.TopCenter) { RelativeOffset = new Vector2(0f, 0.0475f) }, style: null); + var content = new GUILayoutGroup(new RectTransform(Vector2.One, innerFrame.RectTransform)) + { + Stretch = true + }; + + logList = new GUIListBox(new RectTransform(Vector2.One, content.RectTransform)) + { + Padding = new Vector4(0, 10 * GUI.Scale, 0, 10 * GUI.Scale), + UserData = crewFrame, + AutoHideScrollBar = false, + Spacing = (int)(5 * GUI.Scale) + }; + + foreach (Pair pair in storedMessages) + { + AddLineToLog(pair.First, pair.Second); + } + + logList.BarScroll = 1f; + } + + private static readonly List> storedMessages = new List>(); + + public static void StorePlayerConnectionChangeMessage(ChatMessage message) + { + if (!GameMain.GameSession?.GameMode?.IsRunning ?? true) { return; } + + string msg = ChatMessage.GetTimeStamp() + message.TextWithSender; + storedMessages.Add(new Pair(msg, message.ChangeType)); + + if (GameSession.IsTabMenuOpen) + { + TabMenu instance = GameSession.TabMenuInstance; + instance.AddLineToLog(msg, message.ChangeType); + + // Update crew + if (selectedTab == InfoFrameTab.Crew) + { + instance.RemoveCurrentElements(); + instance.CreateMultiPlayerList(true); + } + } + } + + private void RemoveCurrentElements() + { + for (int i = 0; i < crewListArray.Length; i++) + { + for (int j = 0; j < linkedGUIList.Count; j++) + { + linkedGUIList[j].Remove(crewListArray[i].Content); + } + } + + linkedGUIList.Clear(); + } + + private void AddLineToLog(string line, PlayerConnectionChangeType type) + { + Color textColor = Color.White; + + switch (type) + { + case PlayerConnectionChangeType.Joined: + textColor = GUI.Style.Green; + break; + case PlayerConnectionChangeType.Kicked: + textColor = GUI.Style.Orange; + break; + case PlayerConnectionChangeType.Disconnected: + textColor = GUI.Style.Yellow; + break; + case PlayerConnectionChangeType.Banned: + textColor = GUI.Style.Red; + break; + } + + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), logList.Content.RectTransform), line, wrap: true, font: GUI.SmallFont) + { + TextColor = textColor, + CanBeFocused = false, + UserData = line + }.CalculateHeightFromText(); + + //if ((prevSize == 1.0f && listBox.BarScroll == 0.0f) || (prevSize < 1.0f && listBox.BarScroll == 1.0f)) listBox.BarScroll = 1.0f; + } + + private void CreateMissionInfo(GUIFrame infoFrame) + { + infoFrame.ClearChildren(); + GUIFrame missionFrame = new GUIFrame(new RectTransform(Vector2.One, infoFrame.RectTransform, Anchor.TopCenter), style: "GUIFrameListBox"); + int padding = (int)(0.0245f * missionFrame.Rect.Height); + Location endLocation = GameMain.GameSession.EndLocation; + Sprite portrait = endLocation.Type.GetPortrait(endLocation.PortraitId); + bool hasPortrait = portrait != null && portrait.SourceRect.Width > 0 && portrait.SourceRect.Height > 0; + int contentWidth = hasPortrait ? (int)(missionFrame.Rect.Width * 0.951f) : missionFrame.Rect.Width - padding * 2; + + Vector2 locationNameSize = GUI.LargeFont.MeasureString(endLocation.Name); + Vector2 locationTypeSize = GUI.SubHeadingFont.MeasureString(endLocation.Name); + GUITextBlock locationNameText = new GUITextBlock(new RectTransform(new Point(contentWidth, (int)locationNameSize.Y), missionFrame.RectTransform, Anchor.TopCenter) { AbsoluteOffset = new Point(0, padding) }, endLocation.Name, font: GUI.LargeFont); + GUITextBlock locationTypeText = new GUITextBlock(new RectTransform(new Point(contentWidth, (int)locationTypeSize.Y), missionFrame.RectTransform, Anchor.TopCenter) { AbsoluteOffset = new Point(0, locationNameText.Rect.Height + padding) }, endLocation.Type.Name, font: GUI.SubHeadingFont); + + int locationInfoYOffset = locationNameText.Rect.Height + locationTypeText.Rect.Height + padding * 2; + + GUIFrame missionDescriptionHolder; + + if (hasPortrait) + { + GUIFrame missionImageHolder = new GUIFrame(new RectTransform(new Point(contentWidth, (int)(missionFrame.Rect.Height * 0.588f)), missionFrame.RectTransform, Anchor.TopCenter) { AbsoluteOffset = new Point(0, locationInfoYOffset) }); + float portraitAspectRatio = portrait.SourceRect.Width / portrait.SourceRect.Height; + GUIImage portraitImage = new GUIImage(new RectTransform(new Vector2(1.0f, 1f), missionImageHolder.RectTransform), portrait, scaleToFit: true); + missionImageHolder.RectTransform.NonScaledSize = new Point(portraitImage.Rect.Size.X, (int)(portraitImage.Rect.Size.X / portraitAspectRatio)); + missionDescriptionHolder = new GUIFrame(new RectTransform(new Point(contentWidth, 0), missionFrame.RectTransform, Anchor.TopCenter) { AbsoluteOffset = new Point(0, missionImageHolder.RectTransform.AbsoluteOffset.Y + missionImageHolder.Rect.Height + padding) }, style: null); + } + else + { + missionDescriptionHolder = new GUIFrame(new RectTransform(new Point(contentWidth, 0), missionFrame.RectTransform, Anchor.TopCenter) { AbsoluteOffset = new Point(0, locationInfoYOffset) }, style: null); + } + + Mission mission = GameMain.GameSession?.Mission; + if (mission != null) + { + GUILayoutGroup missionTextGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.744f, 0f), missionDescriptionHolder.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.225f, 0f) }, false, childAnchor: Anchor.TopLeft); + + string missionNameString = ToolBox.WrapText(mission.Name, missionTextGroup.Rect.Width, GUI.LargeFont); + string missionDescriptionString = ToolBox.WrapText(mission.Description, missionTextGroup.Rect.Width, GUI.Font); + string missionRewardString = ToolBox.WrapText(TextManager.GetWithVariable("MissionReward", "[reward]", mission.Reward.ToString()), missionTextGroup.Rect.Width, GUI.Font); + + Vector2 missionNameSize = GUI.LargeFont.MeasureString(missionNameString); + Vector2 missionDescriptionSize = GUI.Font.MeasureString(missionDescriptionString); + Vector2 missionRewardSize = GUI.Font.MeasureString(missionRewardString); + + missionDescriptionHolder.RectTransform.NonScaledSize = new Point(missionDescriptionHolder.RectTransform.NonScaledSize.X, (int)(missionNameSize.Y + missionDescriptionSize.Y + missionRewardSize.Y)); + missionTextGroup.RectTransform.NonScaledSize = new Point(missionTextGroup.RectTransform.NonScaledSize.X, missionDescriptionHolder.RectTransform.NonScaledSize.Y); + + float iconAspectRatio = mission.Prefab.Icon.SourceRect.Width / mission.Prefab.Icon.SourceRect.Height; + int iconWidth = (int)(0.225f * missionDescriptionHolder.RectTransform.NonScaledSize.X); + int iconHeight = Math.Max(missionTextGroup.RectTransform.NonScaledSize.Y, (int)(iconWidth * iconAspectRatio)); + Point iconSize = new Point(iconWidth, iconHeight); + + new GUIImage(new RectTransform(iconSize, missionDescriptionHolder.RectTransform), mission.Prefab.Icon, null, true) { Color = mission.Prefab.IconColor }; + + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionTextGroup.RectTransform), missionNameString, font: GUI.LargeFont); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionTextGroup.RectTransform), missionRewardString); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionTextGroup.RectTransform), missionDescriptionString); + } + else + { + GUILayoutGroup missionTextGroup = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0f), missionDescriptionHolder.RectTransform, Anchor.CenterLeft), false, childAnchor: Anchor.TopLeft); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionTextGroup.RectTransform), TextManager.Get("NoMission"), font: GUI.LargeFont); + } + } + + private void CreateTraitorInfo(GUIFrame infoFrame, TraitorMissionPrefab traitorMission, Character traitor) + { + GUIFrame missionFrame = new GUIFrame(new RectTransform(Vector2.One, infoFrame.RectTransform, Anchor.TopCenter), style: "GUIFrameListBox"); + + int padding = (int)(0.0245f * missionFrame.Rect.Height); + + GUIFrame missionDescriptionHolder = new GUIFrame(new RectTransform(new Point(missionFrame.Rect.Width - padding * 2, 0), missionFrame.RectTransform, Anchor.TopCenter) { AbsoluteOffset = new Point(0, padding) }, style: null); + GUILayoutGroup missionTextGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.65f, 0f), missionDescriptionHolder.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.319f, 0f) }, false, childAnchor: Anchor.TopLeft); + + string missionNameString = ToolBox.WrapText(TextManager.Get("tabmenu.traitor"), missionTextGroup.Rect.Width, GUI.LargeFont); + string missionDescriptionString = ToolBox.WrapText(traitor.TraitorCurrentObjective, missionTextGroup.Rect.Width, GUI.Font); + + Vector2 missionNameSize = GUI.LargeFont.MeasureString(missionNameString); + Vector2 missionDescriptionSize = GUI.Font.MeasureString(missionDescriptionString); + + missionDescriptionHolder.RectTransform.NonScaledSize = new Point(missionDescriptionHolder.RectTransform.NonScaledSize.X, (int)(missionNameSize.Y + missionDescriptionSize.Y)); + missionTextGroup.RectTransform.NonScaledSize = new Point(missionTextGroup.RectTransform.NonScaledSize.X, missionDescriptionHolder.RectTransform.NonScaledSize.Y); + + float aspectRatio = traitorMission.Icon.SourceRect.Width / traitorMission.Icon.SourceRect.Height; + + int iconWidth = (int)(0.319f * missionDescriptionHolder.RectTransform.NonScaledSize.X); + int iconHeight = Math.Max(missionTextGroup.RectTransform.NonScaledSize.Y, (int)(iconWidth * aspectRatio)); + Point iconSize = new Point(iconWidth, iconHeight); + + new GUIImage(new RectTransform(iconSize, missionDescriptionHolder.RectTransform), traitorMission.Icon, null, true) { Color = traitorMission.IconColor }; + + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionTextGroup.RectTransform), missionNameString, font: GUI.LargeFont); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionTextGroup.RectTransform), missionDescriptionString); + } + } +} diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/VideoPlayer.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/VideoPlayer.cs index af99de492..d3feabe8f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/VideoPlayer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/VideoPlayer.cs @@ -3,7 +3,7 @@ using Microsoft.Xna.Framework.Graphics; using System; using System.Xml.Linq; using Barotrauma.Media; -using System.IO; +using Barotrauma.IO; using Microsoft.Xna.Framework.Input; namespace Barotrauma @@ -56,7 +56,7 @@ namespace Barotrauma public VideoPlayer() // GUI elements with size set to Point.Zero are resized based on content { - int screenWidth = (int)(GameMain.GraphicsWidth * 0.55f); + int screenWidth = (int)(GameMain.GraphicsWidth * 0.65f); scaledVideoResolution = new Point(screenWidth, (int)(screenWidth / 16f * 9f)); int width = scaledVideoResolution.X; @@ -178,6 +178,7 @@ namespace Barotrauma videoFrame.RectTransform.NonScaledSize = scaledVideoResolution + new Point(scaledBorderSize, scaledBorderSize); videoView.RectTransform.NonScaledSize = scaledVideoResolution; + videoFrame.RectTransform.AbsoluteOffset = new Point(0, videoFrame.RectTransform.NonScaledSize.Y); title.RectTransform.NonScaledSize = new Point(scaledTextWidth, scaledTitleHeight); title.RectTransform.AbsoluteOffset = new Point((int)(5 * GUI.Scale), (int)(10 * GUI.Scale)); @@ -247,7 +248,7 @@ namespace Barotrauma } else { - videoFrame.RectTransform.AbsoluteOffset = new Point(0, (int)(100 * GUI.Scale)); + videoFrame.RectTransform.AbsoluteOffset = new Point(0, 0); okButton = new GUIButton(new RectTransform(scaledButtonSize, videoFrame.RectTransform, Anchor.TopLeft, Pivot.TopLeft) { AbsoluteOffset = new Point(scaledBorderSize, scaledBorderSize) }, TextManager.Get("Back")) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs index 03351a772..3d4a8018d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs @@ -12,7 +12,7 @@ using System.Diagnostics; using System.Linq; using System.Reflection; using GameAnalyticsSDK.Net; -using System.IO; +using Barotrauma.IO; using System.Threading; using Barotrauma.Tutorials; using Barotrauma.Media; @@ -112,6 +112,8 @@ namespace Barotrauma public event Action OnResolutionChanged; + private bool exiting; + public static GameMain Instance { get; @@ -144,7 +146,17 @@ namespace Barotrauma public static bool WindowActive { - get { return Instance == null || Instance.IsActive; } + get + { + try + { + return Instance != null && !Instance.exiting && Instance.IsActive; + } + catch (NullReferenceException) + { + return false; + } + } } public static GameClient Client; @@ -179,10 +191,14 @@ namespace Barotrauma { Content.RootDirectory = "Content"; - GraphicsDeviceManager = new GraphicsDeviceManager(this); - - GraphicsDeviceManager.IsFullScreen = false; - GraphicsDeviceManager.GraphicsProfile = GfxProfile; +#if DEBUG && WINDOWS + GraphicsAdapter.UseDebugLayers = true; +#endif + GraphicsDeviceManager = new GraphicsDeviceManager(this) + { + IsFullScreen = false, + GraphicsProfile = GfxProfile + }; GraphicsDeviceManager.ApplyChanges(); Window.Title = "Barotrauma"; @@ -329,6 +345,8 @@ namespace Barotrauma //do this here because we need it for the loading screen WaterRenderer.Instance = new WaterRenderer(base.GraphicsDevice, Content); + Quad.Init(GraphicsDevice); + loadingScreenOpen = true; TitleScreen = new LoadingScreen(GraphicsDevice) { @@ -409,7 +427,7 @@ namespace Barotrauma SoundManager.SetCategoryGainMultiplier("ui", Config.SoundVolume, 0); SoundManager.SetCategoryGainMultiplier("waterambience", Config.SoundVolume, 0); SoundManager.SetCategoryGainMultiplier("music", Config.MusicVolume, 0); - SoundManager.SetCategoryGainMultiplier("voip", Config.VoiceChatVolume, 0); + SoundManager.SetCategoryGainMultiplier("voip", Math.Min(Config.VoiceChatVolume, 1.0f), 0); if (Config.EnableSplashScreen && !ConsoleArguments.Contains("-skipintro")) { @@ -514,6 +532,8 @@ namespace Barotrauma ScriptedEventSet.LoadPrefabs(); AfflictionPrefab.LoadAll(GetFilesOfType(ContentType.Afflictions)); SkillSettings.Load(GetFilesOfType(ContentType.SkillSettings)); + Order.Init(); + EventManagerSettings.Init(); TitleScreen.LoadState = 50.0f; yield return CoroutineStatus.Running; @@ -829,6 +849,10 @@ namespace Barotrauma { (GameSession.GameMode as TutorialMode).Tutorial.CloseActiveContentGUI(); } + else if (GameSession.IsTabMenuOpen) + { + gameSession.ToggleTabMenu(); + } else if (GUI.PauseMenuOpen) { GUI.TogglePauseMenu(); @@ -837,7 +861,8 @@ namespace Barotrauma else if ((Character.Controlled == null || !itemHudActive()) //TODO: do we need to check Inventory.SelectedSlot? && Inventory.SelectedSlot == null && CharacterHealth.OpenHealthWindow == null - && !CrewManager.IsCommandInterfaceOpen) + && !CrewManager.IsCommandInterfaceOpen + && !(Screen.Selected is SubEditorScreen editor && !editor.WiringMode && Character.Controlled?.SelectedConstruction != null)) { // Otherwise toggle pausing, unless another window/interface is open. GUI.TogglePauseMenu(); @@ -928,7 +953,7 @@ namespace Barotrauma sw.Stop(); PerformanceCounter.AddElapsedTicks("Update total", sw.ElapsedTicks); - PerformanceCounter.UpdateTimeGraph.Update(sw.ElapsedTicks / (float)TimeSpan.TicksPerMillisecond); + PerformanceCounter.UpdateTimeGraph.Update(sw.ElapsedTicks * 1000.0f / (float)Stopwatch.Frequency); PerformanceCounter.UpdateIterationsGraph.Update(updateIterations); } @@ -950,10 +975,13 @@ namespace Barotrauma double deltaTime = gameTime.ElapsedGameTime.TotalSeconds; - double step = 1.0 / Timing.FrameLimit; - while (!Config.VSyncEnabled && sw.Elapsed.TotalSeconds + deltaTime < step) + if (Timing.FrameLimit > 0) { - Thread.Sleep(1); + double step = 1.0 / Timing.FrameLimit; + while (!Config.VSyncEnabled && sw.Elapsed.TotalSeconds + deltaTime < step) + { + Thread.Sleep(1); + } } PerformanceCounter.Update(sw.Elapsed.TotalSeconds + deltaTime); @@ -978,7 +1006,7 @@ namespace Barotrauma sw.Stop(); PerformanceCounter.AddElapsedTicks("Draw total", sw.ElapsedTicks); - PerformanceCounter.DrawTimeGraph.Update(sw.ElapsedTicks / (float)TimeSpan.TicksPerMillisecond); + PerformanceCounter.DrawTimeGraph.Update(sw.ElapsedTicks * 1000.0f / (float)Stopwatch.Frequency); } @@ -1147,7 +1175,9 @@ namespace Barotrauma protected override void OnExiting(object sender, EventArgs args) { - if (NetworkMember != null) NetworkMember.Disconnect(); + exiting = true; + DebugConsole.NewMessage("Exiting..."); + NetworkMember?.Disconnect(); SteamManager.ShutDown(); try diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs index bb2bb7897..160f54f88 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using Barotrauma.Steam; namespace Barotrauma { @@ -36,6 +37,9 @@ namespace Barotrauma private bool toggleCrewListOpen = true; private Point crewListEntrySize; + private GUIFrame contextMenu; + private GUIListBox subContextMenu; + /// /// Present only in single player games. In multiplayer. The chatbox is found from GameSession.Client. /// @@ -392,7 +396,19 @@ namespace Barotrauma new RectTransform(crewListEntrySize, parent: crewList.Content.RectTransform, anchor: Anchor.TopRight), style: "CrewListBackground") { - UserData = character + UserData = character, + OnSecondaryClicked = (comp, data) => + { + if (data == null) { return false; } + + var client = GameMain.NetworkMember?.ConnectedClients?.Find(c => c.Character == data); + if (client != null) + { + CreateModerationContextMenu(PlayerInput.MousePosition.ToPoint(), client); + return true; + } + return false; + } }; var iconRelativeWidth = (float)crewListEntrySize.Y / background.Rect.Width; @@ -469,7 +485,7 @@ namespace Barotrauma characterButton.ToolTip = characterTooltip; if (character.Info?.Job?.Prefab != null) { - characterButton.TooltipColorData = new List() { new ColorData() + characterButton.TooltipRichTextData = new List() { new RichTextData() { Color = character.Info.Job.Prefab.UIColor, EndIndex = characterTooltip.Length - 1 @@ -679,6 +695,8 @@ namespace Barotrauma #endregion + #region Crew List Order Displayment + /// /// Sets the character's current order (if it's close enough to receive messages from orderGiver) and /// displays the order in the crew UI @@ -689,7 +707,7 @@ namespace Barotrauma { if (orderGiver == null || orderGiver.CurrentHull == null) { return; } var hull = orderGiver.CurrentHull; - AddOrder(new Order(order.Prefab, hull, null, orderGiver), order.Prefab.FadeOutTime); + AddOrder(new Order(order.Prefab ?? order, hull, null, orderGiver), order.FadeOutTime); if (IsSinglePlayer) { orderGiver.Speak( @@ -703,11 +721,8 @@ namespace Barotrauma } else { - if (character == null) - { - //can't issue an order if no characters are available - return; - } + //can't issue an order if no characters are available + if (character == null) { return; } if (IsSinglePlayer) { @@ -717,7 +732,7 @@ namespace Barotrauma } else if (orderGiver != null) { - OrderChatMessage msg = new OrderChatMessage(order, option, order?.TargetItemComponent?.Item, character, orderGiver); + OrderChatMessage msg = new OrderChatMessage(order, option, order?.TargetEntity ?? order?.TargetItemComponent?.Item, character, orderGiver); GameMain.Client?.SendChatMessage(msg); } } @@ -867,6 +882,8 @@ namespace Barotrauma } } + #endregion + #region Updating and drawing the UI private void DrawMiniMapOverlay(SpriteBatch spriteBatch, GUICustomComponent container) @@ -895,6 +912,213 @@ namespace Barotrauma GUI.DrawLine(spriteBatch, center + start, center + end, Color.DarkCyan * Rand.Range(0.3f, 0.35f), width: 10); } } + + #region Context Menu + + public void CreateModerationContextMenu(Point mousePos, Client client) + { + if (IsSinglePlayer || client == null || (GameMain.NetworkMember?.ConnectedClients?.All(match => match != client) ?? true)) { return; } + + contextMenu = new GUIFrame(new RectTransform(new Vector2(0.1f, 0.12f), GUI.Canvas) { ScreenSpaceOffset = mousePos }, style: "GUIToolTip") { UserData = client }; + + var nameLabel = new GUITextBlock(new RectTransform(new Vector2(1f, 0.2f), contextMenu.RectTransform), client.Name, font: GUI.SubHeadingFont) + { + Padding = new Vector4(8), + TextColor = client.Character?.Info?.Job.Prefab.UIColor ?? Color.White + }; + + var optionsList = new GUIListBox(new RectTransform(new Vector2(1f, 0.8f), contextMenu.RectTransform, Anchor.BottomLeft), style: null) + { + Padding = new Vector4(4, 0, 4, 4) + }; + + bool hasSteam = client.SteamID > 0 && SteamManager.IsInitialized, + canKick = GameMain.Client.HasPermission(ClientPermissions.Kick), + canBan = GameMain.Client.HasPermission(ClientPermissions.Ban) && client.AllowKicking, + canPromo = GameMain.Client.HasPermission(ClientPermissions.ManagePermissions); + + // Disable options if we are targeting ourselves + if (client.ID == GameMain.Client?.ID) + { + canKick = canBan = canPromo = false; + } + + RectTransform parent = optionsList.Content.RectTransform; + new GUITextBlock(new RectTransform(Point.Zero, parent), TextManager.Get("viewsteamprofile"), font: GUI.SmallFont) + { + Padding = new Vector4(4), + Enabled = hasSteam, + UserData = "steam" + }; + + new GUITextBlock(new RectTransform(Point.Zero, parent), TextManager.Get("permissions"), font: GUI.SmallFont) + { + Padding = new Vector4(4), + Enabled = canPromo, + UserData = "promote" + }; + + new GUITextBlock(new RectTransform(Point.Zero, parent), TextManager.Get(client.MutedLocally ? "unmute" : "mute"), font: GUI.SmallFont) + { + Padding = new Vector4(4), + Enabled = client.ID != GameMain.Client?.ID, + UserData = "mute" + }; + + new GUITextBlock(new RectTransform(Point.Zero, parent), TextManager.Get(canKick ? "kick" : "votetokick"), font: GUI.SmallFont) + { + Padding = new Vector4(4), + Enabled = client.ID != GameMain.Client?.ID && client.AllowKicking, + UserData = canKick ? "kick" : "votekick" + }; + + new GUITextBlock(new RectTransform(Point.Zero, parent), TextManager.Get("ban"), font: GUI.SmallFont) + { + Padding = new Vector4(4), + Enabled = canBan, + UserData = "ban" + }; + + foreach (GUIComponent c in optionsList.Content.Children) + { + if (c is GUITextBlock child && !child.Enabled) + { + child.TextColor *= 0.5f; + } + } + + var children = optionsList.Content.Children.ToList(); + + // Resize all children to the size of their text + foreach (GUITextBlock block in children.Where(c => c is GUITextBlock).Cast()) + { + block.RectTransform.NonScaledSize = new Point((int) (block.TextSize.X + (block.Padding.X + block.Padding.Z)), (int)(18 * GUI.Scale)); + } + + int horizontalPadding = (int)(optionsList.Padding.X + optionsList.Padding.Z); + int verticalPadding = (int)(optionsList.Padding.Y + optionsList.Padding.W); + int largestWidth = children.Max(c => c.Rect.Width + horizontalPadding); + + // If the name is bigger than any of the options then overwrite + nameLabel.RectTransform.MinSize = new Point((int)(nameLabel.TextSize.X + (nameLabel.Padding.X + nameLabel.Padding.Z)), nameLabel.RectTransform.NonScaledSize.Y); + if (largestWidth < nameLabel.RectTransform.MinSize.X) { largestWidth = nameLabel.RectTransform.MinSize.X; } + + // Resize all children to the size of the longest element + foreach (GUIComponent c in children) { c.RectTransform.MinSize = new Point(largestWidth, c.Rect.Height); } + + // crop the context menu + contextMenu.RectTransform.NonScaledSize = new Point(largestWidth, (children.Sum(c => c.Rect.Height) + verticalPadding) + nameLabel.Rect.Height); + + // if the menu would go off the screen then move it up + if (contextMenu.Rect.Bottom > GameMain.GraphicsHeight) + { + contextMenu.RectTransform.ScreenSpaceOffset = new Point(mousePos.X, mousePos.Y - contextMenu.Rect.Height); + } + + optionsList.OnSelected = (component, obj) => + { + if (component.Enabled) + { + switch (obj) + { + case "steam": + Steamworks.SteamFriends.OpenWebOverlay($"https://steamcommunity.com/profiles/{client.SteamID}"); + break; + case "mute": + client.MutedLocally = !client.MutedLocally; + break; + case "kick": + GameMain.Client?.CreateKickReasonPrompt(client.Name, false); + break; + case "votekick": + GameMain.Client?.VoteForKick(client); + break; + case "ban": + GameMain.Client?.CreateKickReasonPrompt(client.Name, true); + break; + } + contextMenu = null; + return true; + } + return false; + }; + } + + private void CreatePromoteSubMenu(Point pos, Client client) + { + if (client == null ) { return; } + + subContextMenu = new GUIListBox(new RectTransform(new Vector2(0.1f, 0.1f), GUI.Canvas) { ScreenSpaceOffset = pos }, style: "GUIToolTip"); + + foreach (var rank in PermissionPreset.List) + { + new GUITextBlock(new RectTransform(Point.Zero, subContextMenu.Content.RectTransform), rank.Name, font: GUI.SmallFont) + { + ToolTip = rank.Description, + UserData = rank, + Padding = new Vector4(4) + }; + } + + var children = subContextMenu.Content.Children.ToList(); + + // Resize all children to the size of their text + foreach (GUITextBlock block in children.Where(c => c is GUITextBlock).Cast()) + { + block.RectTransform.NonScaledSize = new Point((int) (block.TextSize.X + (block.Padding.X + block.Padding.Z)), (int)(18 * GUI.Scale)); + } + + int horizontalPadding = (int)(subContextMenu.Padding.X + subContextMenu.Padding.Z); + int largestWidth = children.Max(c => c.Rect.Width + horizontalPadding); + + // Resize all children to the size of the longest element + foreach (GUIComponent c in children) { c.RectTransform.MinSize = new Point(largestWidth, c.Rect.Height); } + + // crop the context menu + subContextMenu.RectTransform.NonScaledSize = new Point(largestWidth, children.Sum(c => c.Rect.Height) + horizontalPadding); + + // if the menu would go off the screen then move it up + if (subContextMenu.Rect.Bottom > GameMain.GraphicsHeight) + { + subContextMenu.RectTransform.ScreenSpaceOffset = new Point(pos.X, pos.Y - subContextMenu.Rect.Height); + } + + subContextMenu.OnSelected = (component, obj) => + { + if (component.Enabled && obj is PermissionPreset preset) + { + var label = TextManager.GetWithVariables(preset.Permissions == ClientPermissions.None ? "clearrankprompt" : "giverankprompt", new []{ "[user]", "[rank]" }, new []{ client.Name, preset.Name }); + + var msgBox = new GUIMessageBox(string.Empty, label, new[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }); + + msgBox.Buttons[0].OnClicked = (yesBtn, userdata) => + { + client.SetPermissions(preset.Permissions, preset.PermittedCommands); + GameMain.Client.UpdateClientPermissions(client); + msgBox.Close(); + return true; + }; + msgBox.Buttons[1].OnClicked = (_, userdata) => + { + msgBox.Close(); + return true; + }; + contextMenu = null; + subContextMenu = null; + return true; + } + return false; + }; + } + + private static bool IsMouseOnContextMenu(Rectangle rect) + { + Rectangle expandedRect = rect; + expandedRect.Inflate(20, 20); + return expandedRect.Contains(PlayerInput.MousePosition); + } + + #endregion public void AddToGUIUpdateList() { @@ -922,6 +1146,8 @@ namespace Barotrauma } guiFrame.AddToGUIUpdateList(); + contextMenu?.AddToGUIUpdateList(false, 1); + subContextMenu?.AddToGUIUpdateList(false, 1); } public void SelectNextCharacter() @@ -985,6 +1211,43 @@ namespace Barotrauma SelectPreviousCharacter(); } } + + // context menu behavior + if (contextMenu != null) + { + var promote = contextMenu.GetChild()?.Content.GetChildByUserData("promote"); + + if (promote != null && promote.Enabled) + { + promote.ExternalHighlight = subContextMenu != null; + + if (GUI.IsMouseOn(promote)) + { + if (contextMenu.UserData is Client client && subContextMenu == null) + { + CreatePromoteSubMenu(new Point(promote.Rect.Right, promote.Rect.Y), client); + } + } + else if (subContextMenu != null && !IsMouseOnContextMenu(subContextMenu.Rect)) + { + subContextMenu = null; + } + } + else + { + subContextMenu = null; + } + + if (subContextMenu == null && !IsMouseOnContextMenu(contextMenu.Rect)) + { + contextMenu = null; + } + } + + if (contextMenu == null && subContextMenu != null) + { + subContextMenu = null; + } if (GUI.DisableHUD) { return; } @@ -995,7 +1258,14 @@ namespace Barotrauma if (PlayerInput.KeyDown(InputType.Command) && (GUI.KeyboardDispatcher.Subscriber == null || GUI.KeyboardDispatcher.Subscriber == crewList) && commandFrame == null && !clicklessSelectionActive && CanIssueOrders) { - CreateCommandUI(HUDLayoutSettings.PortraitArea.Contains(PlayerInput.MousePosition) ? Character.Controlled : GUI.MouseOn?.UserData as Character); + if (PlayerInput.KeyDown(Keys.LeftShift) || PlayerInput.KeyDown(Keys.RightShift)) + { + CreateCommandUI(FindEntityContext(), true); + } + else + { + CreateCommandUI(HUDLayoutSettings.BottomRightInfoArea.Contains(PlayerInput.MousePosition) ? Character.Controlled : GUI.MouseOn?.UserData as Character); + } GUI.PlayUISound(GUISoundType.PopupMenu); clicklessSelectionActive = isOpeningClick = true; } @@ -1018,19 +1288,9 @@ namespace Barotrauma else if (PlayerInput.SecondaryMouseButtonClicked() && characterContext == null && (optionNodes.Any(n => GUI.IsMouseOn(n.Item1)) || shortcutNodes.Any(n => GUI.IsMouseOn(n)))) { - var node = optionNodes.Find(n => GUI.IsMouseOn(n.Item1))?.Item1; - if (node == null) - { - node = shortcutNodes.Find(n => GUI.IsMouseOn(n)); - } - // Make sure the node is for an option-less order... - if (node.UserData is Order order && - !(order.ItemComponentType != null || order.ItemIdentifiers.Length > 0 || order.Options.Length > 1)) - { - CreateAssignmentNodes(node); - } - // ...or an order option - else if (node.UserData is Tuple) + var node = optionNodes.Find(n => GUI.IsMouseOn(n.Item1))?.Item1 ?? shortcutNodes.Find(n => GUI.IsMouseOn(n)); + // Make sure the node is for an option-less order or an order option + if ((node.UserData is Order order && !order.HasOptions && (!order.MustSetTarget || itemContext != null)) || node.UserData is Tuple) { CreateAssignmentNodes(node); } @@ -1091,7 +1351,7 @@ namespace Barotrauma } } - if (closestNode == selectedNode) + if (closestNode != null && closestNode == selectedNode) { timeSelected += deltaTime; if (timeSelected >= selectionTime) @@ -1116,6 +1376,32 @@ namespace Barotrauma } } + if (assignmentNodeIcons.Any()) + { + if (PlayerInput.KeyDown(Keys.LeftShift) || PlayerInput.KeyDown(Keys.RightShift)) + { + if (assignmentNodeIcons.First().OrderIcon.Visible) + { + foreach (AssignmentNodeIconSet set in assignmentNodeIcons) + { + set.OrderIcon.Visible = false; + set.JobIcon.Visible = true; + } + } + } + else + { + if (assignmentNodeIcons.First().JobIcon.Visible) + { + foreach (AssignmentNodeIconSet set in assignmentNodeIcons) + { + set.JobIcon.Visible = false; + set.OrderIcon.Visible = true; + } + } + } + } + var hotkeyHit = false; foreach (Tuple node in optionNodes) { @@ -1162,8 +1448,6 @@ namespace Barotrauma #endregion - if (GUI.DisableUpperHUD) { return; } - if (ChatBox != null) { ChatBox.Update(deltaTime); @@ -1205,49 +1489,52 @@ namespace Barotrauma } } - crewArea.Visible = characters.Count > 0 && CharacterHealth.OpenHealthWindow == null; - - foreach (GUIComponent child in crewList.Content.Children) + if (!GUI.DisableUpperHUD) { - if (child.UserData is Character character) + crewArea.Visible = characters.Count > 0 && CharacterHealth.OpenHealthWindow == null; + + foreach (GUIComponent child in crewList.Content.Children) { - child.Visible = Character.Controlled == null || Character.Controlled.TeamID == character.TeamID; - if (child.Visible) + if (child.UserData is Character character) { - if (character == Character.Controlled && child.State != GUIComponent.ComponentState.Selected) + child.Visible = Character.Controlled == null || Character.Controlled.TeamID == character.TeamID; + if (child.Visible) { - crewList.Select(character, force: true); - } - if (child.FindChild(c => c is GUILayoutGroup) is GUILayoutGroup layoutGroup) - { - if (GetCurrentOrderComponent(layoutGroup) is GUIComponent orderButton && - orderButton.GetChildByUserData("colorsource") is GUIComponent orderIcon && - orderButton.GetChildByUserData("cancel") is GUIComponent cancelIcon) + if (character == Character.Controlled && child.State != GUIComponent.ComponentState.Selected) { - cancelIcon.Visible = GUI.IsMouseOn(orderIcon); + crewList.Select(character, force: true); } - if (layoutGroup.GetChildByUserData("soundicons")? - .FindChild(c => c.UserData is Pair pair && pair.First == "soundicon") is GUIImage soundIcon) + if (child.FindChild(c => c is GUILayoutGroup) is GUILayoutGroup layoutGroup) { - VoipClient.UpdateVoiceIndicator(soundIcon, 0.0f, deltaTime); + if (GetCurrentOrderComponent(layoutGroup) is GUIComponent orderButton && + orderButton.GetChildByUserData("colorsource") is GUIComponent orderIcon && + orderButton.GetChildByUserData("cancel") is GUIComponent cancelIcon) + { + cancelIcon.Visible = GUI.IsMouseOn(orderIcon); + } + if (layoutGroup.GetChildByUserData("soundicons")? + .FindChild(c => c.UserData is Pair pair && pair.First == "soundicon") is GUIImage soundIcon) + { + VoipClient.UpdateVoiceIndicator(soundIcon, 0.0f, deltaTime); + } } } } } - } - crewArea.RectTransform.AbsoluteOffset = Vector2.SmoothStep( - new Vector2(-crewArea.Rect.Width - HUDLayoutSettings.Padding, 0.0f), - Vector2.Zero, - crewListOpenState).ToPoint(); - crewListOpenState = ToggleCrewListOpen ? - Math.Min(crewListOpenState + deltaTime * 2.0f, 1.0f) : - Math.Max(crewListOpenState - deltaTime * 2.0f, 0.0f); + crewArea.RectTransform.AbsoluteOffset = Vector2.SmoothStep( + new Vector2(-crewArea.Rect.Width - HUDLayoutSettings.Padding, 0.0f), + Vector2.Zero, + crewListOpenState).ToPoint(); + crewListOpenState = ToggleCrewListOpen ? + Math.Min(crewListOpenState + deltaTime * 2.0f, 1.0f) : + Math.Max(crewListOpenState - deltaTime * 2.0f, 0.0f); - if (GUI.KeyboardDispatcher.Subscriber == null && PlayerInput.KeyHit(InputType.CrewOrders)) - { - GUI.PlayUISound(GUISoundType.PopupMenu); - ToggleCrewListOpen = !ToggleCrewListOpen; + if (GUI.KeyboardDispatcher.Subscriber == null && PlayerInput.KeyHit(InputType.CrewOrders)) + { + GUI.PlayUISound(GUISoundType.PopupMenu); + ToggleCrewListOpen = !ToggleCrewListOpen; + } } UpdateReports(); @@ -1273,34 +1560,51 @@ namespace Barotrauma } private GUIFrame commandFrame, targetFrame; private GUIButton centerNode, returnNode, expandNode, shortcutCenterNode; - private List> optionNodes = new List>(); + private readonly List> optionNodes = new List>(); private Keys returnNodeHotkey = Keys.None, expandNodeHotkey = Keys.None; - private List shortcutNodes = new List(); - private List extraOptionNodes = new List(); + private readonly List shortcutNodes = new List(); + private readonly List extraOptionNodes = new List(); private GUICustomComponent nodeConnectors; private GUIImage background; private GUIButton selectedNode; - private float selectionTime = 0.75f, timeSelected = 0.0f; + private readonly float selectionTime = 0.75f; + private float timeSelected = 0.0f; private bool clicklessSelectionActive, isOpeningClick, isSelectionHighlighted; - private Point centerNodeSize, nodeSize, shortcutCenterNodeSize, shortcutNodeSize, returnNodeSize; + private Point centerNodeSize, nodeSize, shortcutCenterNodeSize, shortcutNodeSize, returnNodeSize, assignmentNodeSize; private float centerNodeMargin, optionNodeMargin, shortcutCenterNodeMargin, shortcutNodeMargin, returnNodeMargin; private List availableCategories; private Stack historyNodes = new Stack(); - private List extraOptionCharacters = new List(); + private readonly List extraOptionCharacters = new List(); + private readonly List assignmentNodeIcons = new List(); + private struct AssignmentNodeIconSet + { + public GUIImage OrderIcon { get; private set; } + public GUIImage JobIcon { get; private set; } + public AssignmentNodeIconSet(GUIImage orderIcon, GUIImage jobIcon) + { + OrderIcon = orderIcon; + JobIcon = jobIcon; + } + } /// /// node.Color = node.HighlightColor * nodeColorMultiplier /// private const float nodeColorMultiplier = 0.75f; - private const int assignmentNodeMaxCount = 8; private int nodeDistance = (int)(GUI.Scale * 250); - private float returnNodeDistanceModifier = 0.65f; + private const float returnNodeDistanceModifier = 0.65f; private Order dismissedOrderPrefab; private Character characterContext; + private Item itemContext; + private Hull hullContext; + private bool isContextual; + private readonly List contextualOrders = new List(); private Point shorcutCenterNodeOffset; + private const int maxShorcutNodeCount = 4; + private bool WasCommandInterfaceDisabledThisUpdate { get; set; } private bool CanIssueOrders { @@ -1309,7 +1613,7 @@ namespace Barotrauma #if DEBUG return Character.Controlled == null || Character.Controlled.Info != null && Character.Controlled.SpeechImpediment < 100.0f; #else - return Character.Controlled != null && Character.Controlled.SpeechImpediment < 100.0f; + return Character.Controlled?.Info != null && Character.Controlled.SpeechImpediment < 100.0f; #endif } } @@ -1323,11 +1627,65 @@ namespace Barotrauma #endif } - private void CreateCommandUI(Character characterContext = null) + private Entity FindEntityContext() + { + if (Character.Controlled?.FocusedCharacter != null) + { + if (Character.Controlled?.FocusedItem != null) + { + Vector2 mousePos = GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); + if (Vector2.Distance(mousePos, Character.Controlled.FocusedCharacter.WorldPosition) < Vector2.Distance(mousePos, Character.Controlled.FocusedItem.WorldPosition)) + { + return Character.Controlled.FocusedCharacter; + } + else + { + return Character.Controlled.FocusedItem; + } + } + else + { + return Character.Controlled.FocusedCharacter; + } + + } + else if (TryGetBreachedHullAtHoveredWall(out Hull breachedHull)) + { + return breachedHull; + } + else + { + return Character.Controlled?.FocusedItem; + } + } + + private void CreateCommandUI(Entity entityContext = null, bool forceContextual = false) { if (commandFrame != null) { DisableCommandUI(); } + CharacterHealth.OpenHealthWindow = null; + + // Character context works differently to others as we still use the "basic" command interface, + // but the order will be automatically assigned to this character + isContextual = forceContextual; + if (entityContext is Character character) + { + characterContext = character; + isContextual = false; + } + else if (entityContext is Item item) + { + itemContext = item; + isContextual = true; + } + else if (entityContext is Hull hull) + { + hullContext = hull; + isContextual = true; + } + ScaleCommandUI(); + commandFrame = new GUIFrame( new RectTransform(Vector2.One, GUICanvas.Instance, anchor: Anchor.Center), style: null, @@ -1336,8 +1694,6 @@ namespace Barotrauma new RectTransform(Vector2.One, commandFrame.RectTransform, anchor: Anchor.Center), "CommandBackground"); background.Color = background.Color * 0.8f; - - this.characterContext = characterContext; GUIButton startNode = null; if (characterContext == null) { @@ -1367,7 +1723,11 @@ namespace Barotrauma new RectTransform(Vector2.One, startNode.RectTransform, anchor: Anchor.Center), (spriteBatch, _) => { - characterContext.Info.DrawIcon(spriteBatch, startNode.Center, startNode.Rect.Size.ToVector2() * 0.6f); + if (!(entityContext is Character character)) { return; } + var node = startNode; + character.Info.DrawJobIcon(spriteBatch, + new Rectangle((int)(node.Rect.X + node.Rect.Width * 0.5f), (int)(node.Rect.Y + node.Rect.Height * 0.1f), (int)(node.Rect.Width * 0.6f), (int)(node.Rect.Height * 0.8f))); + character.Info.DrawIcon(spriteBatch, new Vector2(node.Rect.X + node.Rect.Width * 0.35f, node.Center.Y), node.Rect.Size.ToVector2() * 0.7f); }) { ToolTip = characterContext.Info.DisplayName + " (" + characterContext.Info.Job.Name + ")" @@ -1378,8 +1738,16 @@ namespace Barotrauma availableCategories ??= GetAvailableCategories(); dismissedOrderPrefab ??= Order.GetPrefab("dismissed"); - CreateShortcutNodes(); - CreateOrderCategoryNodes(); + if (isContextual) + { + CreateContextualOrderNodes(); + } + else + { + CreateShortcutNodes(); + CreateOrderCategoryNodes(); + } + CreateNodeConnectors(); if (Character.Controlled != null) { @@ -1404,16 +1772,21 @@ namespace Barotrauma private void ScaleCommandUI() { - centerNodeSize = new Point((int)(100 * GUI.Scale)); + // Node sizes nodeSize = new Point((int)(100 * GUI.Scale)); - shortcutCenterNodeSize = new Point((int)(48 * GUI.Scale)); - shortcutNodeSize = new Point((int)(64 * GUI.Scale)); + centerNodeSize = nodeSize; returnNodeSize = new Point((int)(48 * GUI.Scale)); + assignmentNodeSize = new Point((int)(64 * GUI.Scale)); + shortcutCenterNodeSize = returnNodeSize; + shortcutNodeSize = assignmentNodeSize; + + // Node margins (used in drawing the connecting lines) centerNodeMargin = centerNodeSize.X * 0.5f; optionNodeMargin = nodeSize.X * 0.5f; shortcutCenterNodeMargin = shortcutCenterNodeSize.X * 0.45f; shortcutNodeMargin = shortcutNodeSize.X * 0.5f; returnNodeMargin = returnNodeSize.X * 0.5f; + nodeDistance = (int)(150 * GUI.Scale); shorcutCenterNodeOffset = new Point(0, (int)(1.25f * nodeDistance)); } @@ -1423,7 +1796,6 @@ namespace Barotrauma availableCategories = new List(); foreach (OrderCategory category in Enum.GetValues(typeof(OrderCategory))) { - if (category == OrderCategory.Undefined) { continue; } if (Order.PrefabList.Any(o => o.Category == category && !o.TargetAllCharacters)) { availableCategories.Add(category); @@ -1445,12 +1817,12 @@ namespace Barotrauma { if (centerNode == null || optionNodes == null) { return; } var startNodePos = centerNode.Rect.Center.ToVector2(); - if (targetFrame == null || !targetFrame.Visible) + // Don't draw connectors for mini map options or assignment nodes + if ((targetFrame == null || !targetFrame.Visible) && !(optionNodes.FirstOrDefault()?.Item1.UserData is Character)) { optionNodes.ForEach(n => DrawNodeConnector(startNodePos, centerNodeMargin, n.Item1, optionNodeMargin, spriteBatch)); } DrawNodeConnector(startNodePos, centerNodeMargin, returnNode, returnNodeMargin, spriteBatch); - DrawNodeConnector(startNodePos, centerNodeMargin, expandNode, optionNodeMargin, spriteBatch); if (shortcutCenterNode == null || !shortcutCenterNode.Visible) { return; } DrawNodeConnector(startNodePos, centerNodeMargin, shortcutCenterNode, shortcutCenterNodeMargin, spriteBatch); startNodePos = shortcutCenterNode.Rect.Center.ToVector2(); @@ -1493,8 +1865,12 @@ namespace Barotrauma background = null; commandFrame = null; extraOptionCharacters.Clear(); + assignmentNodeIcons.Clear(); isOpeningClick = isSelectionHighlighted = false; characterContext = null; + itemContext = null; + isContextual = false; + contextualOrders.Clear(); returnNodeHotkey = expandNodeHotkey = Keys.None; if (Character.Controlled != null) { @@ -1509,6 +1885,7 @@ namespace Barotrauma shortcutNodes.Remove(node); }; RemoveOptionNodes(); + if (returnNode != null) { returnNode.RemoveChild(returnNode.GetChildByUserData("hotkey")); @@ -1516,15 +1893,20 @@ namespace Barotrauma returnNode.Visible = false; historyNodes.Push(returnNode); } - SetReturnNode(centerNode, new Point( - (int)(node.RectTransform.AbsoluteOffset.X * -returnNodeDistanceModifier), - (int)(node.RectTransform.AbsoluteOffset.Y * -returnNodeDistanceModifier))); + + // When the mini map is shown, always position the return node on the bottom + var offset = node?.UserData is Order order && order.GetMatchingItems(true).Count > 1 ? + new Point(0, (int)(returnNodeDistanceModifier * nodeDistance)) : + node.RectTransform.AbsoluteOffset.Multiply(-returnNodeDistanceModifier); + SetReturnNode(centerNode, offset); + SetCenterNode(node); if (shortcutCenterNode != null) { commandFrame.RemoveChild(shortcutCenterNode); shortcutCenterNode = null; } + CreateNodes(userData); CreateReturnNodeHotkey(); return true; @@ -1573,9 +1955,14 @@ namespace Barotrauma } } - private void SetCenterNode(GUIButton node) + private void SetCenterNode(GUIButton node, bool resetAnchor = false) { node.RectTransform.Parent = commandFrame.RectTransform; + if (resetAnchor) + { + node.RectTransform.SetPosition(Anchor.Center); + } + node.RectTransform.SetPosition(Anchor.Center); node.RectTransform.MoveOverTime(Point.Zero, CommandNodeAnimDuration); node.RectTransform.ScaleOverTime(centerNodeSize, CommandNodeAnimDuration); node.RemoveChild(node.GetChildByUserData("hotkey")); @@ -1610,8 +1997,15 @@ namespace Barotrauma { if (userData == null) { - CreateShortcutNodes(); - CreateOrderCategoryNodes(); + if (isContextual) + { + CreateContextualOrderNodes(); + } + else + { + CreateShortcutNodes(); + CreateOrderCategoryNodes(); + } } else if (userData is OrderCategory category) { @@ -1634,6 +2028,7 @@ namespace Barotrauma expandNode = null; expandNodeHotkey = Keys.None; RemoveExtraOptionNodes(); + assignmentNodeIcons.Clear(); } private void RemoveExtraOptionNodes() @@ -1673,15 +2068,13 @@ namespace Barotrauma private void CreateShortcutNodes() { - var sub = Character.Controlled != null && Character.Controlled.TeamID == Character.TeamType.Team2 && Submarine.MainSubs.Length > 1 ? - Submarine.MainSubs[1] : Submarine.MainSub; + Submarine sub = GetTargetSubmarine(); if (sub == null) { return; } shortcutNodes.Clear(); - var reactor = sub.GetItems(false).Find(i => i.HasTag("reactor"))?.GetComponent(); - if (reactor != null) + if (shortcutNodes.Count < maxShorcutNodeCount && sub.GetItems(false).Find(i => i.HasTag("reactor") && !i.NonInteractable)?.GetComponent() is Reactor reactor) { var reactorOutput = -reactor.CurrPowerConsumption; // If player is not an engineer AND the reactor is not powered up AND nobody is using the reactor @@ -1690,16 +2083,17 @@ namespace Barotrauma reactorOutput < float.Epsilon && characters.None(c => c.SelectedConstruction == reactor.Item)) { var order = new Order(Order.GetPrefab("operatereactor"), reactor.Item, reactor, Character.Controlled); + var option = order.Prefab.Options[0]; shortcutNodes.Add( - CreateOrderOptionNode(shortcutNodeSize, null, Point.Zero, order, order.Prefab.Options[0], order.Prefab.OptionNames[0], -1)); + CreateOrderOptionNode(shortcutNodeSize, null, Point.Zero, order, option, order.Prefab.GetOptionName(option), -1)); } } // TODO: Reconsider the conditions as bot captain can have the nav term selected without operating it // If player is not a captain AND nobody is using the nav terminal AND the nav terminal is powered up // --> Create shortcut node for Steer order - if ((Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("captain")) && - sub.GetItems(false).Find(i => i.HasTag("navterminal")) is Item nav && characters.None(c => c.SelectedConstruction == nav) && + if (shortcutNodes.Count < maxShorcutNodeCount && (Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("captain")) && + sub.GetItems(false).Find(i => i.HasTag("navterminal") && !i.NonInteractable) is Item nav && characters.None(c => c.SelectedConstruction == nav) && nav.GetComponent() is Steering steering && steering.Voltage > steering.MinVoltage) { shortcutNodes.Add( @@ -1708,7 +2102,7 @@ namespace Barotrauma // If player is not a security officer AND invaders are reported // --> Create shorcut node for Fight Intruders order - if ((Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("securityofficer")) && + if (shortcutNodes.Count < maxShorcutNodeCount && (Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("securityofficer")) && (Order.GetPrefab("reportintruders") is Order reportIntruders && ActiveOrders.Any(o => o.First.Prefab == reportIntruders))) { shortcutNodes.Add( @@ -1717,7 +2111,7 @@ namespace Barotrauma // If player is not a mechanic AND a breach has been reported // --> Create shorcut node for Fix Leaks order - if ((Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("mechanic")) && + if (shortcutNodes.Count < maxShorcutNodeCount && (Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("mechanic")) && (Order.GetPrefab("reportbreach") is Order reportBreach && ActiveOrders.Any(o => o.First.Prefab == reportBreach))) { shortcutNodes.Add( @@ -1726,7 +2120,7 @@ namespace Barotrauma // If player is not an engineer AND broken devices have been reported // --> Create shortcut node for Repair Damaged Systems order - if ((Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("engineer")) && + if (shortcutNodes.Count < maxShorcutNodeCount && (Character.Controlled == null || Character.Controlled.Info.Job.Prefab != JobPrefab.Get("engineer")) && (Order.GetPrefab("reportbrokendevices") is Order reportBrokenDevices && ActiveOrders.Any(o => o.First.Prefab == reportBrokenDevices))) { shortcutNodes.Add( @@ -1735,12 +2129,30 @@ namespace Barotrauma // If fire is reported // --> Create shortcut node for Extinguish Fires order - if (ActiveOrders.Any(o=> o.First.Prefab == Order.GetPrefab("reportfire"))) + if (shortcutNodes.Count < maxShorcutNodeCount && ActiveOrders.Any(o=> o.First.Prefab == Order.GetPrefab("reportfire"))) { shortcutNodes.Add( CreateOrderNode(shortcutNodeSize, null, Point.Zero, Order.GetPrefab("extinguishfires"), -1)); } + if (shortcutNodes.Count < maxShorcutNodeCount && characterContext?.Info?.Job?.Prefab?.AppropriateOrders != null) + { + foreach (string orderIdentifier in characterContext.Info.Job.Prefab.AppropriateOrders) + { + if (Order.GetPrefab(orderIdentifier) is Order orderPrefab && + shortcutNodes.None(n => (n.UserData is Order order && order.Identifier == orderIdentifier) || + (n.UserData is Tuple orderWithOption && orderWithOption.Item1.Identifier == orderIdentifier)) && + !orderPrefab.TargetAllCharacters && orderPrefab.Category != null) + { + if (!orderPrefab.MustSetTarget || orderPrefab.GetMatchingItems(sub, true).Any()) + { + shortcutNodes.Add(CreateOrderNode(shortcutNodeSize, null, Point.Zero, orderPrefab, -1)); + } + if (shortcutNodes.Count >= maxShorcutNodeCount) { break; } + } + } + } + if (shortcutNodes.Count < 1) { return; } shortcutCenterNode = new GUIButton( @@ -1757,27 +2169,139 @@ namespace Barotrauma var nodeCountForCalculations = shortcutNodes.Count * 2 + 2; var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, 0.75f * nodeDistance, nodeCountForCalculations); + var firstOffsetIndex = nodeCountForCalculations / 2 - 1; for (int i = 0; i < shortcutNodes.Count; i++) { shortcutNodes[i].RectTransform.Parent = commandFrame.RectTransform; - shortcutNodes[i].RectTransform.MoveOverTime(shorcutCenterNodeOffset + offsets[i + 1].ToPoint(), CommandNodeAnimDuration); + shortcutNodes[i].RectTransform.MoveOverTime(shorcutCenterNodeOffset + offsets[firstOffsetIndex - i].ToPoint(), CommandNodeAnimDuration); } } private void CreateOrderNodes(OrderCategory orderCategory) { var orders = Order.PrefabList.FindAll(o => o.Category == orderCategory && !o.TargetAllCharacters); + Order order; + bool disableNode; var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, nodeDistance, GetCircumferencePointCount(orders.Count), GetFirstNodeAngle(orders.Count)); for (int i = 0; i < orders.Count; i++) { + order = orders[i]; + disableNode = !CanSomeoneHearCharacter() || + (order.MustSetTarget && (order.ItemComponentType != null || order.ItemIdentifiers.Length > 0) && order.GetMatchingItems(true).None()); optionNodes.Add(new Tuple( - CreateOrderNode(nodeSize, commandFrame.RectTransform, offsets[i].ToPoint(), orders[i], (i + 1) % 10), - CanSomeoneHearCharacter() ? Keys.D0 + (i + 1) % 10 : Keys.None)); + CreateOrderNode(nodeSize, commandFrame.RectTransform, offsets[i].ToPoint(), order, (i + 1) % 10, disableNode: disableNode, checkIfOrderCanBeHeard: false), + !disableNode ? Keys.D0 + (i + 1) % 10 : Keys.None)); } } - private GUIButton CreateOrderNode(Point size, RectTransform parent, Point offset, Order order, int hotkey) + /// + /// Create order nodes based on the item context + /// + private void CreateContextualOrderNodes() + { + if (contextualOrders.None()) + { + // Check if targeting an item or a hull + if (itemContext != null && !itemContext.NonInteractable) + { + foreach (Order p in Order.PrefabList) + { + if ((p.ItemIdentifiers.Length > 0 && (p.ItemIdentifiers.Contains(itemContext.Prefab.Identifier) || itemContext.HasTag(p.ItemIdentifiers))) || + (p.ItemComponentType != null && itemContext.Components.Any(c => c?.GetType() == p.ItemComponentType))) + { + contextualOrders.Add(p.HasOptions ? p : + new Order(p, itemContext, itemContext.Components.FirstOrDefault(c => c?.GetType() == p.ItemComponentType), Character.Controlled)); + } + } + + // If targeting a periscope connected to a turret, show the 'operateweapons' order + var orderIdentifier = "operateweapons"; + var operateWeaponsPrefab = Order.GetPrefab(orderIdentifier); + if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier)) && itemContext.Components.Any(c => c is Controller)) + { + var turret = itemContext.GetConnectedComponents().FirstOrDefault(c => operateWeaponsPrefab.ItemIdentifiers.Contains(c.Item.Prefab.Identifier)) ?? + itemContext.GetConnectedComponents(recursive: true).FirstOrDefault(c => operateWeaponsPrefab.ItemIdentifiers.Contains(c.Item.Prefab.Identifier)); + if (turret != null) { contextualOrders.Add(new Order(operateWeaponsPrefab, turret.Item, turret, Character.Controlled)); } + } + + // If targeting a repairable item, show the 'repairsystems' order + orderIdentifier = "repairsystems"; + if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier)) && itemContext.Repairables.Any()) + { + contextualOrders.Add(new Order(Order.GetPrefab(orderIdentifier), itemContext, null, Character.Controlled)); + if (itemContext.Repairables.Any(r => r != null && r.requiredSkills.Any(s => s != null && s.Identifier.Equals("electrical")))) + { + contextualOrders.Add(new Order(Order.GetPrefab("repairelectrical"), itemContext, null, Character.Controlled)); + } + else if (itemContext.Repairables.Any(r => r != null && r.requiredSkills.Any(s => s != null && s.Identifier.Equals("mechanical")))) + { + contextualOrders.Add(new Order(Order.GetPrefab("repairmechanical"), itemContext, null, Character.Controlled)); + } + } + + // Always show the 'wait' order if there are other crew members alive + orderIdentifier = "wait"; + if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier)) && characters.Any(c => c != Character.Controlled)) + { + contextualOrders.Add(new Order(Order.GetPrefab(orderIdentifier), itemContext, null, Character.Controlled)); + } + + // Remove the 'pumpwater' order if the target pump is auto-controlled (as it will immediately overwrite the work done by the bot) + orderIdentifier = "pumpwater"; + if (contextualOrders.FirstOrDefault(o => o.Identifier.Equals(orderIdentifier)) is Order o && + itemContext.Components.FirstOrDefault(c => c.GetType() == o.ItemComponentType) is Pump pump) + { + if (pump.IsAutoControlled) { contextualOrders.Remove(o); } + } + } + else if(hullContext != null) + { + contextualOrders.Add(new Order(Order.GetPrefab("fixleaks"), hullContext, null, Character.Controlled)); + } + + // Show the 'follow' and 'dismissed' orders if there are other crew members alive + if (characters.Any(c => c != Character.Controlled)) + { + var orderIdentifier = "follow"; + if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier))) + { + contextualOrders.Add(Order.GetPrefab(orderIdentifier)); + } + // Show 'dismissed' order only when there are crew members with active orders + orderIdentifier = "dismissed"; + if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier)) && + characters.Any(c => c.CurrentOrder != null && !c.CurrentOrder.Identifier.Equals(orderIdentifier))) + { + contextualOrders.Add(Order.GetPrefab(orderIdentifier)); + } + } + } + + var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, nodeDistance, contextualOrders.Count, MathHelper.ToRadians(90f + 180f / contextualOrders.Count)); + bool disableNode = !CanSomeoneHearCharacter(); + for (int i = 0; i < contextualOrders.Count; i++) + { + optionNodes.Add(new Tuple( + CreateOrderNode(nodeSize, commandFrame.RectTransform, offsets[i].ToPoint(), contextualOrders[i], (i + 1) % 10, disableNode: disableNode, checkIfOrderCanBeHeard: false), + !disableNode ? Keys.D0 + (i + 1) % 10 : Keys.None)); + } + } + + public static bool DoesItemHaveContextualOrders(Item item) + { + if (Order.PrefabList.Any(o => o.ItemIdentifiers.Length > 0 && o.ItemIdentifiers.Contains(item.Prefab.Identifier))) { return true; } + if (Order.PrefabList.Any(o => item.HasTag(o.ItemIdentifiers))) { return true; } + if (Order.PrefabList.Any(o => o.ItemComponentType != null && item.Components.Any(c => c?.GetType() == o.ItemComponentType))) { return true; } + + if (item.Repairables.Any()) { return true; } + var operateWeaponsPrefab = Order.GetPrefab("operateweapons"); + return item.Components.Any(c => c is Controller) && + (item.GetConnectedComponents().Any(c => operateWeaponsPrefab.ItemIdentifiers.Contains(c.Item.Prefab.Identifier)) || + item.GetConnectedComponents(recursive: true).Any(c => operateWeaponsPrefab.ItemIdentifiers.Contains(c.Item.Prefab.Identifier))); + } + + private GUIButton CreateOrderNode(Point size, RectTransform parent, Point offset, Order order, int hotkey, bool disableNode = false, bool checkIfOrderCanBeHeard = true) { var node = new GUIButton( new RectTransform(size, parent: parent, anchor: Anchor.Center), style: null) @@ -1787,34 +2311,33 @@ namespace Barotrauma node.RectTransform.MoveOverTime(offset, CommandNodeAnimDuration); - var canSomeoneHearCharacter = CanSomeoneHearCharacter(); - var hasOptions = order.ItemComponentType != null || order.ItemIdentifiers.Length > 0 || order.Options.Length > 1; + if (checkIfOrderCanBeHeard && !disableNode) { disableNode = !CanSomeoneHearCharacter(); } + var mustSetOptionOrTarget = order.HasOptions || (order.MustSetTarget && itemContext == null); node.OnClicked = (button, userData) => { - if (!canSomeoneHearCharacter || !CanIssueOrders) { return false; } + if (disableNode || !CanIssueOrders) { return false; } var o = userData as Order; - // TODO: Consider defining orders' or order categories' quick-assignment possibility in the XML - if (o.Category == OrderCategory.Movement && characterContext == null) + if (o.MustManuallyAssign && characterContext == null) { CreateAssignmentNodes(node); } - else if (hasOptions) + else if (mustSetOptionOrTarget) { NavigateForward(button, userData); } else { - SetCharacterOrder(characterContext ?? GetBestCharacterForOrder(o), o, null, Character.Controlled); + SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o), o, null, Character.Controlled); DisableCommandUI(); } return true; }; var icon = CreateNodeIcon(node.RectTransform, order.SymbolSprite, order.Color, - tooltip: hasOptions || characterContext != null ? order.Name : order.Name + + tooltip: mustSetOptionOrTarget || characterContext != null ? order.Name : order.Name + "\n" + (!PlayerInput.MouseButtonsSwapped() ? TextManager.Get("input.leftmouse") : TextManager.Get("input.rightmouse")) + ": " + TextManager.Get("commandui.quickassigntooltip") + "\n" + (!PlayerInput.MouseButtonsSwapped() ? TextManager.Get("input.rightmouse") : TextManager.Get("input.leftmouse")) + ": " + TextManager.Get("commandui.manualassigntooltip")); - - if (!canSomeoneHearCharacter) + + if (disableNode) { node.CanBeFocused = icon.CanBeFocused = false; CreateBlockIcon(node.RectTransform); @@ -1828,25 +2351,11 @@ namespace Barotrauma private void CreateOrderOptions(Order order) { - // This is largely based on the CreateOrderTargetFrame() method - - Submarine submarine = Character.Controlled != null && Character.Controlled.TeamID == Character.TeamType.Team2 && Submarine.MainSubs.Length > 1 ? - Submarine.MainSubs[1] : - Submarine.MainSub; - - List matchingItems = new List(); - if (order.ItemComponentType != null || order.ItemIdentifiers.Length > 0) - { - matchingItems = order.ItemIdentifiers.Length > 0 ? - Item.ItemList.FindAll(it => order.ItemIdentifiers.Contains(it.Prefab.Identifier) || it.HasTag(order.ItemIdentifiers)) : - Item.ItemList.FindAll(it => it.Components.Any(ic => ic.GetType() == order.ItemComponentType)); - - matchingItems.RemoveAll(it => it.Submarine != submarine && !submarine.DockedTo.Contains(it.Submarine)); - matchingItems.RemoveAll(it => it.Submarine != null && it.Submarine.Info.Type != SubmarineInfo.SubmarineType.Player); - } + Submarine submarine = GetTargetSubmarine(); + var matchingItems = (itemContext == null && order.MustSetTarget) ? order.GetMatchingItems(submarine, true) : new List(); //more than one target item -> create a minimap-like selection with a pic of the sub - if (matchingItems.Count > 1) + if (itemContext == null && matchingItems.Count > 1) { // TODO: Further adjustments to frameSize calculations // I just divided the existing sizes by 2 to get it working quickly without it overlapping too much @@ -1882,7 +2391,7 @@ namespace Barotrauma UserData = submarine }; - List optionFrames = new List(); + List optionElements = new List(); foreach (Item item in matchingItems) { var itemTargetFrame = targetFrame.Children.First().FindChild(item); @@ -1903,52 +2412,87 @@ namespace Barotrauma anchor = Anchor.TopRight; } - var optionFrame = new GUIFrame( - new RectTransform( - new Point((int)(250 * GUI.Scale), (int)((40 + order.Options.Length * 40) * GUI.Scale)), - parent: itemTargetFrame.RectTransform, - anchor: anchor), - style: "InnerFrame"); - - new GUIFrame( - new RectTransform(Vector2.One, optionFrame.RectTransform, anchor: Anchor.Center), - style: "OuterGlow", - color: Color.Black * 0.7f); - - var optionContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.9f), optionFrame.RectTransform, anchor: Anchor.Center)) + GUIComponent optionElement; + if (order.Options.Length > 1) { - RelativeSpacing = 0.05f, - Stretch = true - }; + optionElement = new GUIFrame( + new RectTransform( + new Point((int)(250 * GUI.Scale), (int)((40 + order.Options.Length * 40) * GUI.Scale)), + parent: itemTargetFrame.RectTransform, + anchor: anchor), + style: "InnerFrame"); - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.3f), optionContainer.RectTransform), item != null ? item.Name : order.Name); + new GUIFrame( + new RectTransform(Vector2.One, optionElement.RectTransform, anchor: Anchor.Center), + style: "OuterGlow", + color: Color.Black * 0.7f); - for (int i = 0; i < order.Options.Length; i++) - { - optionNodes.Add(new Tuple( - new GUIButton( - new RectTransform(new Vector2(1.0f, 0.2f), optionContainer.RectTransform), - text: order.OptionNames[i], - style: "GUITextBox") - { - UserData = new Tuple( - item == null ? order : new Order(order, item, item.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)), - order.Options[i]), - Font = GUI.SmallFont, - OnClicked = (_, userData) => + var optionContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.9f), optionElement.RectTransform, anchor: Anchor.Center)) + { + RelativeSpacing = 0.05f, + Stretch = true + }; + + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.3f), optionContainer.RectTransform), item != null ? item.Name : order.Name); + + for (int i = 0; i < order.Options.Length; i++) + { + optionNodes.Add(new Tuple( + new GUIButton( + new RectTransform(new Vector2(1.0f, 0.2f), optionContainer.RectTransform), + text: order.GetOptionName(i), + style: "GUITextBox") { - if (!CanIssueOrders) { return false; } - var o = userData as Tuple; - SetCharacterOrder(characterContext ?? GetBestCharacterForOrder(o.Item1), o.Item1, o.Item2, Character.Controlled); - DisableCommandUI(); - return true; - } - }, - Keys.None)); + UserData = new Tuple( + item == null ? order : new Order(order, item, item.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)), + order.Options[i]), + Font = GUI.SmallFont, + OnClicked = (_, userData) => + { + if (!CanIssueOrders) { return false; } + var o = userData as Tuple; + SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o.Item1), o.Item1, o.Item2, Character.Controlled); + DisableCommandUI(); + return true; + } + }, + Keys.None)); + } } - optionFrames.Add(optionFrame); + else + { + var userData = new Tuple(item == null ? order : new Order(order, item, item.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)), ""); + optionElement = new GUIButton( + new RectTransform( + new Point((int)(50 * GUI.Scale)), + parent: itemTargetFrame.RectTransform, + anchor: anchor), + style: null) + { + UserData = userData, + Font = GUI.SmallFont, + ToolTip = item?.Name ?? order.Name, + OnClicked = (_, userData) => + { + if (!CanIssueOrders) { return false; } + var o = userData as Tuple; + SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o.Item1), o.Item1, o.Item2, Character.Controlled); + DisableCommandUI(); + return true; + } + }; + + Sprite icon = null; + order.MinimapIcons?.TryGetValue(item.Prefab.Identifier, out icon); + var colorMultiplier = characters.Any(c => c.CurrentOrder != null && + c.CurrentOrder.Identifier == userData.Item1.Identifier && + c.CurrentOrder.TargetEntity == userData.Item1.TargetEntity) ? 0.5f : 1f; + CreateNodeIcon(optionElement.RectTransform, icon ?? order.SymbolSprite, order.Color * colorMultiplier); + optionNodes.Add(new Tuple(optionElement, Keys.None)); + } + optionElements.Add(optionElement); } - GUI.PreventElementOverlap(optionFrames, clampArea: new Rectangle(10, 10, GameMain.GraphicsWidth - 20, GameMain.GraphicsHeight - 20)); + GUI.PreventElementOverlap(optionElements, clampArea: new Rectangle(10, 10, GameMain.GraphicsWidth - 20, GameMain.GraphicsHeight - 20)); var shadow = new GUIFrame( new RectTransform(targetFrame.Rect.Size + new Point((int)(200 * GUI.Scale)), targetFrame.RectTransform, anchor: Anchor.Center), @@ -1959,8 +2503,10 @@ namespace Barotrauma //only one target (or an order with no particular targets), just show options else { - var item = matchingItems.Count > 0 ? matchingItems[0] : null; - var o = item == null ? order : new Order(order, item, item.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)); + var item = itemContext != null ? + (order.UseController ? itemContext.GetConnectedComponents().FirstOrDefault()?.Item ?? itemContext.GetConnectedComponents(recursive: true).FirstOrDefault()?.Item : itemContext) : + (matchingItems.Count > 0 ? matchingItems[0] : null); + var o = item == null || !order.IsPrefab ? order : new Order(order, item, item.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)); var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, nodeDistance, GetCircumferencePointCount(order.Options.Length), GetFirstNodeAngle(order.Options.Length)); @@ -1968,7 +2514,7 @@ namespace Barotrauma for (int i = 0; i < order.Options.Length; i++) { optionNodes.Add(new Tuple( - CreateOrderOptionNode(nodeSize, commandFrame.RectTransform, offsets[offsetIndex++].ToPoint(), o, order.Options[i], order.OptionNames[i], (i + 1) % 10), + CreateOrderOptionNode(nodeSize, commandFrame.RectTransform, offsets[offsetIndex++].ToPoint(), o, order.Options[i], order.GetOptionName(i), (i + 1) % 10), Keys.D0 + (i + 1) % 10)); } } @@ -1976,23 +2522,20 @@ namespace Barotrauma private GUIButton CreateOrderOptionNode(Point size, RectTransform parent, Point offset, Order order, string option, string optionName, int hotkey) { - var node = new GUIButton( - new RectTransform(size, parent: parent, anchor: Anchor.Center) - { - AbsoluteOffset = offset - }, - style: null) + var node = new GUIButton(new RectTransform(size, parent: parent, anchor: Anchor.Center), style: null) { UserData = new Tuple(order, option), OnClicked = (_, userData) => { if (!CanIssueOrders) { return false; } var o = userData as Tuple; - SetCharacterOrder(characterContext ?? GetBestCharacterForOrder(o.Item1), o.Item1, o.Item2, Character.Controlled); + SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o.Item1), o.Item1, o.Item2, Character.Controlled); DisableCommandUI(); return true; } }; + node.RectTransform.MoveOverTime(offset, CommandNodeAnimDuration); + GUIImage icon = null; if (order.Prefab.OptionSprites.TryGetValue(option, out Sprite sprite)) { @@ -2019,41 +2562,48 @@ namespace Barotrauma var order = (node.UserData is Order) ? new Tuple(node.UserData as Order, null) : node.UserData as Tuple; - var characters = GetCharactersSortedForOrder(order.Item1); - if (characters.Count < 1) { return; } + var characters = GetCharactersForManualAssignment(order.Item1); + if (characters.None()) { return; } if (!(optionNodes.Find(n => n.Item1 == node) is Tuple optionNode) || !optionNodes.Remove(optionNode)) { shortcutNodes.Remove(node); }; RemoveOptionNodes(); + if (returnNode != null) { returnNode.Children.ForEach(child => child.Visible = false); returnNode.Visible = false; historyNodes.Push(returnNode); } - SetReturnNode(centerNode, new Point( - (int)(node.RectTransform.AbsoluteOffset.X * -returnNodeDistanceModifier), - (int)(node.RectTransform.AbsoluteOffset.Y * -returnNodeDistanceModifier))); + SetReturnNode(centerNode, new Point(0, (int)(returnNodeDistanceModifier * nodeDistance))); + if (targetFrame == null || !targetFrame.Visible) { SetCenterNode(node as GUIButton); } else { - var clickedOptionNode = new GUIButton( + if (string.IsNullOrEmpty(order.Item2)) + { + SetCenterNode(node as GUIButton, resetAnchor: true); + } + else + { + var clickedOptionNode = new GUIButton( new RectTransform(centerNodeSize, parent: commandFrame.RectTransform, anchor: Anchor.Center), style: null) - { - UserData = node.UserData - }; - if (order.Item1.Prefab.OptionSprites.TryGetValue(order.Item2, out Sprite sprite)) - { - CreateNodeIcon(clickedOptionNode.RectTransform, sprite, order.Item1.Color, tooltip: order.Item2); + { + UserData = node.UserData + }; + if (order.Item1.Prefab.OptionSprites.TryGetValue(order.Item2, out Sprite sprite)) + { + CreateNodeIcon(clickedOptionNode.RectTransform, sprite, order.Item1.Color, tooltip: order.Item2); + } + SetCenterNode(clickedOptionNode); + node = null; } - SetCenterNode(clickedOptionNode); - node = null; targetFrame.Visible = false; } if (shortcutCenterNode != null) @@ -2062,21 +2612,36 @@ namespace Barotrauma shortcutCenterNode = null; } - var needToExpand = characters.Count > assignmentNodeMaxCount + 1; - var nodeCount = needToExpand ? assignmentNodeMaxCount + 1 : characters.Count; - var extraNodeDistance = Math.Max(nodeCount - 6, 0) * (GUI.Scale * 30); - var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, nodeDistance + extraNodeDistance, - GetCircumferencePointCount(nodeCount), - GetFirstNodeAngle(nodeCount)); - - var i = 0; - var assignmentNodeCount = (needToExpand ? nodeCount - 1 : nodeCount); - for (; i < assignmentNodeCount; i++) + var characterCount = characters.Count; + int hotkey = 1; + Vector2[] offsets; + var needToExpand = characterCount > 10; + if (characterCount > 5) { - CreateAssignmentNode(order, characters[i], offsets[i].ToPoint(), (i + 1) % 10); + // First ring + var charactersOnFirstRing = needToExpand ? 5 : (int)Math.Floor(characterCount / 2f); + offsets = GetAssignmentNodeOffsets(charactersOnFirstRing); + for (int i = 0; i < charactersOnFirstRing; i++) + { + CreateAssignmentNode(order, characters[i], offsets[i].ToPoint(), hotkey++ % 10); + } + // Second ring + var charactersOnSecondRing = needToExpand ? 4 : characterCount - charactersOnFirstRing; + offsets = GetAssignmentNodeOffsets(needToExpand ? 5 : charactersOnSecondRing, false); + for (int i = 0; i < charactersOnSecondRing; i++) + { + CreateAssignmentNode(order, characters[charactersOnFirstRing + i], offsets[i].ToPoint(), hotkey++ % 10); + } + } + else + { + offsets = GetAssignmentNodeOffsets(characterCount); + for (int i = 0; i < characterCount; i++) + { + CreateAssignmentNode(order, characters[i], offsets[i].ToPoint(), hotkey++ % 10); + } } - int hotkey; if (!needToExpand) { hotkey = optionNodes.Count + 1; @@ -2087,12 +2652,14 @@ namespace Barotrauma } extraOptionCharacters.Clear(); - extraOptionCharacters.AddRange(characters.GetRange(i, characters.Count - i)); + // Sort expanded assignment nodes by characters' jobs and then by their names + extraOptionCharacters.AddRange(characters.GetRange(hotkey - 1, characterCount - (hotkey - 1)) + .OrderBy(c => c?.Info?.Job?.Name).ThenBy(c => c?.Info?.DisplayName)); expandNode = new GUIButton( - new RectTransform(nodeSize, parent: commandFrame.RectTransform, anchor: Anchor.Center) + new RectTransform(assignmentNodeSize, parent: commandFrame.RectTransform, anchor: Anchor.Center) { - AbsoluteOffset = offsets[i].ToPoint() + AbsoluteOffset = offsets.Last().ToPoint() }, style: null) { @@ -2108,6 +2675,22 @@ namespace Barotrauma returnNodeHotkey = Keys.D0 + hotkey % 10; } + private Vector2[] GetAssignmentNodeOffsets(int characters, bool firstRing = true) + { + var nodeDistance = 1.8f * this.nodeDistance; + var nodePositionsOnEachSide = characters % 2 > 0 ? 7 : 6; + var nodeCountForCalculation = 2 * nodePositionsOnEachSide + 2; + var offsets = MathUtils.GetPointsOnCircumference(firstRing ? new Vector2(0f, 0.5f * nodeDistance) : Vector2.Zero, + nodeDistance, nodeCountForCalculation, MathHelper.ToRadians(180f + 360f / nodeCountForCalculation)); + var emptySpacesPerSide = (nodePositionsOnEachSide - characters) / 2; + var offsetsInUse = new Vector2[nodePositionsOnEachSide - 2 * emptySpacesPerSide]; + for (int i = 0; i < offsetsInUse.Length; i++) + { + offsetsInUse[i] = offsets[i + emptySpacesPerSide]; + } + return offsetsInUse; + } + private bool ExpandAssignmentNodes(GUIButton node, object userData) { node.OnClicked = (button, _) => @@ -2117,57 +2700,107 @@ namespace Barotrauma return true; }; - var order = userData as Tuple; - // TODO: The value 100 should be determined by how large the inner circle is - var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, (nodeDistance + GUI.Scale * 100) * 1.55f, - GetCircumferencePointCount(extraOptionCharacters.Count), - GetFirstNodeAngle(extraOptionCharacters.Count)); + var availableNodePositions = 20; + var offsets = MathUtils.GetPointsOnCircumference(Vector2.Zero, 2.7f * this.nodeDistance, availableNodePositions, + firstAngle: MathHelper.ToRadians(-90f - ((extraOptionCharacters.Count - 1) * 0.5f * (360f / availableNodePositions)))); for (int i = 0; i < extraOptionCharacters.Count; i++) { - CreateAssignmentNode(order, extraOptionCharacters[i], offsets[i].ToPoint(), -1); + CreateAssignmentNode(userData as Tuple, extraOptionCharacters[i], offsets[i].ToPoint(), -1, nameLabelScale: 1.15f); } return true; } - private void CreateAssignmentNode(Tuple order, Character character, Point offset, int hotkey) + private void CreateAssignmentNode(Tuple order, Character character, Point offset, int hotkey, float nameLabelScale = 1f) { // Button var node = new GUIButton( - new RectTransform(nodeSize, parent: commandFrame.RectTransform, anchor: Anchor.Center), + new RectTransform(assignmentNodeSize, parent: commandFrame.RectTransform, anchor: Anchor.Center), style: null) { - OnClicked = (button, userData) => + UserData = character, + OnClicked = (_, userData) => { if (!CanIssueOrders) { return false; } - SetCharacterOrder(character, order.Item1, order.Item2, Character.Controlled); + SetCharacterOrder(userData as Character, order.Item1, order.Item2, Character.Controlled); DisableCommandUI(); return true; } }; node.RectTransform.MoveOverTime(offset, CommandNodeAnimDuration); - // Container - var icon = new GUIImage( - new RectTransform(new Vector2(1.2f), node.RectTransform, anchor: Anchor.Center), - "CommandNodeContainer", - scaleToFit: true) + + var jobColor = character.Info?.Job?.Prefab?.UIColor ?? Color.White; + + // Order icon + GUIImage orderIcon; + if (character.CurrentOrder != null && !character.CurrentOrder.Identifier.Equals("dismissed")) { - Color = character.Info.Job.Prefab.UIColor * nodeColorMultiplier, - HoverColor = character.Info.Job.Prefab.UIColor, - PressedColor = character.Info.Job.Prefab.UIColor, - SelectedColor = character.Info.Job.Prefab.UIColor, - UserData = "colorsource" - }; - // Character icon - new GUICustomComponent( - new RectTransform(Vector2.One, node.RectTransform), - (spriteBatch, _) => + orderIcon = new GUIImage(new RectTransform(new Vector2(1.2f), node.RectTransform, anchor: Anchor.Center), + character.CurrentOrder.SymbolSprite, scaleToFit: true); + var tooltip = character.CurrentOrder.Name; + if (!string.IsNullOrWhiteSpace(character.CurrentOrderOption)) { tooltip += " (" + character.CurrentOrder.GetOptionName(character.CurrentOrderOption) + ")"; }; + orderIcon.ToolTip = tooltip; + } + else + { + // TODO: Replace with an icon that symbols the characters dismissed state and their availability to new orders OR localize the text + orderIcon = new GUIImage(new RectTransform(new Vector2(1.2f), node.RectTransform, anchor: Anchor.Center), + "CommandNodeContainer", scaleToFit: true); + var label = new GUITextBlock(new RectTransform(new Vector2(0.9f / 1.2f), orderIcon.RectTransform, anchor: Anchor.Center), + "FREE", textColor: jobColor * nodeColorMultiplier, font: GUI.SubHeadingFont, textAlignment: Alignment.Center, style: null) { - character.Info.DrawIcon(spriteBatch, node.Center, node.Rect.Size.ToVector2() * 0.75f); - }) + CanBeFocused = false, + ForceUpperCase = true, + HoverTextColor = jobColor + }; + } + orderIcon.Color = jobColor * nodeColorMultiplier; + orderIcon.HoverColor = jobColor; + orderIcon.PressedColor = jobColor; + orderIcon.SelectedColor = jobColor; + orderIcon.UserData = "colorsource"; + + // Name label + var width = (int)(nameLabelScale * nodeSize.X); + var font = GUI.SmallFont; + var nameLabel = new GUITextBlock( + new RectTransform(new Point(width, 0), parent: node.RectTransform, anchor: Anchor.TopCenter, pivot: Pivot.BottomCenter) + { + RelativeOffset = new Vector2(0f, -0.1f) + }, + ToolBox.LimitString(character.Info?.DisplayName, font, width), textColor: jobColor * nodeColorMultiplier, font: font, textAlignment: Alignment.Center, style: null) { - ToolTip = character.Info.DisplayName + " (" + character.Info.Job.Name + ")" + CanBeFocused = false, + ForceUpperCase = true, + HoverTextColor = jobColor }; + // Job icon + GUIImage jobIcon = null; + if (character?.Info?.Job?.Prefab?.Icon is Sprite sprite) + { + jobIcon = new GUIImage(new RectTransform(new Vector2(1.2f), node.RectTransform, anchor: Anchor.Center), + "CommandNodeContainer", scaleToFit: true) + { + CanBeFocused = false, + Color = jobColor * nodeColorMultiplier, + HoverColor = jobColor, + PressedColor = jobColor, + SelectedColor = jobColor, + Visible = false + }; ; + new GUIImage(new RectTransform(new Vector2(0.9f / 1.2f), jobIcon.RectTransform, anchor: Anchor.Center), + sprite, scaleToFit: true) + { + CanBeFocused = false, + Color = jobColor * nodeColorMultiplier, + HoverColor = jobColor, + PressedColor = jobColor, + SelectedColor = jobColor + }; + } + + assignmentNodeIcons.Add(new AssignmentNodeIconSet(orderIcon, jobIcon)); + #if DEBUG bool canHear = true; #else @@ -2175,7 +2808,7 @@ namespace Barotrauma #endif if (!canHear) { - node.CanBeFocused = icon.CanBeFocused = false; + node.CanBeFocused = orderIcon.CanBeFocused = false; CreateBlockIcon(node.RectTransform); } if (hotkey >= 0) @@ -2250,8 +2883,9 @@ namespace Barotrauma private void CreateBlockIcon(RectTransform parent) { - new GUIImage(new RectTransform(Vector2.One, parent, anchor: Anchor.Center), cancelIcon, scaleToFit: true) + new GUIImage(new RectTransform(new Vector2(0.9f), parent, anchor: Anchor.Center), cancelIcon, scaleToFit: true) { + CanBeFocused = false, Color = GUI.Style.Red * nodeColorMultiplier, HoverColor = GUI.Style.Red }; @@ -2291,9 +2925,48 @@ namespace Barotrauma return (degrees < 0) ? (degrees + 360) : degrees; } + private bool TryGetBreachedHullAtHoveredWall(out Hull breachedHull) + { + breachedHull = null; + // Based on the IsValidTarget() method of AIObjectiveFixLeaks class + List leaks = Gap.GapList.FindAll(g => + g != null && g.ConnectedWall != null && g.ConnectedDoor == null && g.Open > 0 && g.linkedTo.Any(l => l != null) && + g.Submarine != null && (Character.Controlled != null && g.Submarine.TeamID == Character.Controlled.TeamID && g.Submarine.Info.IsPlayer)); + if (leaks.None()) { return false; } + Vector2 mouseWorldPosition = GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); + foreach (Gap leak in leaks) + { + if (Submarine.RectContains(leak.ConnectedWall.WorldRect, mouseWorldPosition)) + { + breachedHull = leak.FlowTargetHull; + return true; + } + } + return false; + } + + private Submarine GetTargetSubmarine() + { + var sub = Submarine.MainSub; + if (Character.Controlled != null) + { + // Pick the second main sub when we have two teams (in combat mission) + if (Character.Controlled.TeamID == Character.TeamType.Team2 && Submarine.MainSubs.Length > 1) + { + sub = Submarine.MainSubs[1]; + } + // Target current submarine (likely a shuttle) when undocked from the main sub + if (Character.Controlled.Submarine is Submarine currentSub && currentSub != sub && currentSub.TeamID == Character.Controlled.TeamID && !currentSub.IsConnectedTo(sub)) + { + sub = currentSub; + } + } + return sub; + } + #region Crew Member Assignment Logic - private Character GetBestCharacterForOrder(Order order) + private Character GetCharacterForQuickAssignment(Order order) { #if !DEBUG if (Character.Controlled == null) { return null; } @@ -2302,123 +2975,37 @@ namespace Barotrauma { return operatingCharacter; } - return characters.FindAll(c => Character.Controlled == null || (c != Character.Controlled && c.TeamID == Character.Controlled.TeamID)) - .OrderByDescending(c => c.CurrentOrder == null || c.CurrentOrder.Identifier == dismissedOrderPrefab.Identifier) - .ThenByDescending(c => order.HasAppropriateJob(c)) - .ThenBy(c => c.CurrentOrder?.Weight) - .FirstOrDefault(); + return GetCharactersSortedForOrder(order, false).FirstOrDefault() ?? Character.Controlled; } - private List GetCharactersSortedForOrder(Order order) + private List GetCharactersForManualAssignment(Order order) { #if !DEBUG if (Character.Controlled == null) { return new List(); } #endif - if (order.Identifier == "follow") + if (order.Identifier == dismissedOrderPrefab.Identifier) { - return characters.FindAll(c => Character.Controlled == null || (c != Character.Controlled && c.TeamID == Character.Controlled.TeamID)) - .OrderByDescending(c => c.CurrentOrder == null || c.CurrentOrder.Identifier == dismissedOrderPrefab.Identifier) - .ToList(); + return characters.FindAll(c => c.CurrentOrder != null && c.CurrentOrder.Identifier != dismissedOrderPrefab.Identifier) + .OrderBy(c => c.Info.DisplayName).ToList(); } - else - { - return characters.FindAll(c => Character.Controlled == null || c.TeamID == Character.Controlled.TeamID) - .OrderByDescending(c => c.CurrentOrder == null || c.CurrentOrder.Identifier == dismissedOrderPrefab.Identifier) + return GetCharactersSortedForOrder(order, order.Identifier != "follow").ToList(); + } + + private IEnumerable GetCharactersSortedForOrder(Order order, bool includeSelf) + { + return characters.FindAll(c => Character.Controlled == null || ((includeSelf || c != Character.Controlled) && c.TeamID == Character.Controlled.TeamID)) + .OrderByDescending(c => c.CurrentOrder != null && order.Category == OrderCategory.Operate && c.CurrentOrder.Identifier == order.Identifier && c.CurrentOrder.TargetEntity == order.TargetEntity) + .ThenByDescending(c => c.CurrentOrder == null || c.CurrentOrder.Identifier == dismissedOrderPrefab.Identifier) + .ThenBy(c => c.CurrentOrder != null && c.CurrentOrder.Identifier == order.Identifier && c.CurrentOrder.TargetEntity == order.TargetEntity) .ThenByDescending(c => order.HasAppropriateJob(c)) .ThenBy(c => c.CurrentOrder?.Weight) - .ToList(); - } + .ThenByDescending(c => c.GetSkillLevel(order.AppropriateSkill)); } #endregion #endregion - /// - /// Creates a listbox that includes all the characters in the crew, can be used externally (round info menus etc) - /// - public void CreateCrewListFrame(IEnumerable crew, GUIFrame crewFrame) - { - List teamIDs = crew.Select(c => c.TeamID).Distinct().ToList(); - - if (!teamIDs.Any()) teamIDs.Add(Character.TeamType.None); - - int listBoxHeight = 300 / teamIDs.Count; - - var content = new GUILayoutGroup(new RectTransform(new Vector2(0.5f, 1.0f), crewFrame.RectTransform)) - { - Stretch = true - }; - - for (int i = 0; i < teamIDs.Count; i++) - { - if (teamIDs.Count > 1) - { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), content.RectTransform), CombatMission.GetTeamName(teamIDs[i])); - } - - GUIListBox crewList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.5f), content.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.1f) }) - { - UserData = crewFrame - }; - crewList.OnSelected = (component, obj) => - { - SelectCrewCharacter(component.UserData as Character, crewList); - return true; - }; - - foreach (Character character in crew.Where(c => c.TeamID == teamIDs[i])) - { - GUIFrame frame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.15f), crewList.Content.RectTransform), style: "ListBoxElement") - { - UserData = character, - Color = (GameMain.NetworkMember != null && GameMain.Client.Character == character) ? Color.Gold * 0.2f : Color.Transparent - }; - - var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.9f), frame.RectTransform, Anchor.Center), isHorizontal: true) - { - RelativeSpacing = 0.05f, - Stretch = true - }; - - new GUICustomComponent(new RectTransform(new Vector2(0.2f, 1.0f), paddedFrame.RectTransform, Anchor.CenterLeft), - onDraw: (sb, component) => character.Info.DrawIcon(sb, component.Rect.Center.ToVector2(), targetAreaSize: component.Rect.Size.ToVector2())) - { - CanBeFocused = false, - HoverColor = Color.White, - SelectedColor = Color.White - }; - - GUITextBlock textBlock = new GUITextBlock(new RectTransform(Vector2.One, paddedFrame.RectTransform), - ToolBox.LimitString(character.Info.Name + " (" + character.Info.Job.Name + ")", GUI.Font, paddedFrame.Rect.Width - paddedFrame.Rect.Height), - textColor: character.Info.Job.Prefab.UIColor); - } - } - } - - /// - /// Select a character from CrewListFrame - /// - protected bool SelectCrewCharacter(Character character, GUIComponent crewList) - { - if (character == null) { return false; } - - GUIComponent crewFrame = (GUIComponent)crewList.UserData; - GUIComponent existingPreview = crewFrame.FindChild("SelectedCharacter"); - if (existingPreview != null) { crewFrame.RemoveChild(existingPreview); } - - var previewPlayer = new GUIFrame(new RectTransform(new Vector2(0.5f, 0.7f), crewFrame.RectTransform, Anchor.TopRight), style: null) - { - UserData = "SelectedCharacter" - }; - - character.Info.CreateInfoFrame(previewPlayer); - - if (GameMain.NetworkMember != null) { GameMain.Client.SelectCrewCharacter(character, previewPlayer); } - - return true; - } - #region Reports /// @@ -2430,22 +3017,21 @@ namespace Barotrauma if (Character.Controlled?.CurrentHull?.Submarine != null && Character.Controlled.SpeechImpediment < 100.0f) { WifiComponent radio = GetHeadset(Character.Controlled, true); - canIssueOrders = radio != null && radio.CanTransmit(); + canIssueOrders = + radio != null && + radio.CanTransmit() && + Character.Controlled?.CurrentHull?.Submarine?.TeamID == Character.Controlled.TeamID && + !Character.Controlled.CurrentHull.Submarine.Info.IsWreck; } if (canIssueOrders) { - //report buttons are hidden when accessing another character's inventory - ReportButtonFrame.Visible = !Character.Controlled.ShouldLockHud() && - (Character.Controlled?.SelectedCharacter?.Inventory == null || - !Character.Controlled.SelectedCharacter.CanInventoryBeAccessed); + ReportButtonFrame.Visible = !Character.Controlled.ShouldLockHud(); + if (!ReportButtonFrame.Visible) { return; } var reportButtonParent = ChatBox ?? GameMain.Client?.ChatBox; if (reportButtonParent == null) { return; } - var sub = Character.Controlled.Submarine; - if (sub == null || sub.TeamID != Character.Controlled.TeamID || sub.Info.IsWreck) { return; } - ReportButtonFrame.RectTransform.AbsoluteOffset = new Point(reportButtonParent.GUIFrame.Rect.Right + (int)(10 * GUI.Scale), reportButtonParent.GUIFrame.Rect.Y); bool hasFires = Character.Controlled.CurrentHull.FireSources.Count > 0; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs index e73d93e9c..06ba7d188 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -134,7 +134,7 @@ namespace Barotrauma foreach (PurchasedItem pi in CargoManager.PurchasedItems) { msg.Write(pi.ItemPrefab.Identifier); - msg.Write((UInt16)pi.Quantity); + msg.WriteRangedInteger(pi.Quantity, 0, 100); } } @@ -162,7 +162,7 @@ namespace Barotrauma for (int i = 0; i < purchasedItemCount; i++) { string itemPrefabIdentifier = msg.ReadString(); - UInt16 itemQuantity = msg.ReadUInt16(); + int itemQuantity = msg.ReadRangedInteger(0, CargoManager.MaxQuantity); purchasedItems.Add(new PurchasedItem(ItemPrefab.Prefabs[itemPrefabIdentifier], itemQuantity)); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs index f9a62b2bb..f61c1174a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs @@ -25,7 +25,7 @@ namespace Barotrauma : base(preset, param) { int buttonHeight = (int)(HUDLayoutSettings.ButtonAreaTop.Height * 0.7f); - endRoundButton = new GUIButton(HUDLayoutSettings.ToRectTransform(new Rectangle(HUDLayoutSettings.ButtonAreaTop.Right - 200, HUDLayoutSettings.ButtonAreaTop.Center.Y - buttonHeight / 2, 200, buttonHeight), GUICanvas.Instance), + endRoundButton = new GUIButton(HUDLayoutSettings.ToRectTransform(new Rectangle(HUDLayoutSettings.ButtonAreaTop.Right - GUI.IntScale(200), HUDLayoutSettings.ButtonAreaTop.Center.Y - buttonHeight / 2, GUI.IntScale(200), buttonHeight), GUICanvas.Instance), TextManager.Get("EndRound"), textAlignment: Alignment.Center) { Font = GUI.SmallFont, @@ -276,6 +276,7 @@ namespace Barotrauma c.SaveInventory(c.Inventory, inventoryElement); c.Info.InventoryData = inventoryElement; c.Inventory?.DeleteAllItems(); + c.ResetCurrentOrder(); } GameMain.GameSession.SubmarineInfo = new SubmarineInfo(GameMain.GameSession.Submarine); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs index 89c5fbf6c..8825ec280 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs @@ -246,7 +246,7 @@ namespace Barotrauma.Tutorials { //captain_navConsoleCustomInterface.HighlightElement(0, uiHighlightColor, duration: 1.0f, pulsateAmount: 0.0f); yield return new WaitForSeconds(1.0f, false); - } while (!Submarine.MainSub.AtEndPosition || Submarine.MainSub.DockedTo.Any()); + } while (!Submarine.MainSub.AtEndPosition || !Submarine.MainSub.DockedTo.Any()); RemoveCompletedObjective(segments[6]); yield return new WaitForSeconds(3f, false); GameMain.GameSession?.CrewManager.AddSinglePlayerChatMessage(radioSpeakerName, TextManager.GetWithVariable("Captain.Radio.Complete", "[OUTPOSTNAME]", GameMain.GameSession.EndLocation.Name), ChatMessageType.Radio, null); @@ -284,7 +284,9 @@ namespace Barotrauma.Tutorials private bool IsSelectedItem(Item item) { - return captain?.SelectedConstruction == item; + return + captain?.SelectedConstruction == item || + (captain?.SelectedConstruction?.linkedTo?.Contains(item) ?? false); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs index 28999e871..d4717ab96 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs @@ -156,7 +156,7 @@ namespace Barotrauma.Tutorials //yield return new WaitForSeconds(2.5f); doctor.SetStun(1.5f); - var explosion = new Explosion(range: 100, force: 10, damage: 0, structureDamage: 0); + var explosion = new Explosion(range: 100, force: 10, damage: 0, structureDamage: 0, itemDamage: 0); explosion.DisableParticles(); GameMain.GameScreen.Cam.Shake = shakeAmount; explosion.Explode(Character.Controlled.WorldPosition - Vector2.UnitX * 25, null); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs index b11083859..0585ae807 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Xml.Linq; using System.Linq; using Barotrauma.Items.Components; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs index d659ef6ea..e82aef15e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs @@ -2,7 +2,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs index bbd67e90e..8127788ae 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs @@ -515,7 +515,7 @@ namespace Barotrauma.Tutorials height += (int)GUI.Font.MeasureString(title).Y + (int)(150 * GUI.Scale); } - var background = new GUIFrame(new RectTransform(new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight), GUI.Canvas, Anchor.Center), style: null, Color.Black * 0.5f); + var background = new GUIFrame(new RectTransform(new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight), GUI.Canvas, Anchor.Center), style: "GUIBackgroundBlocker"); var infoBlock = new GUIFrame(new RectTransform(new Point(width, height), background.RectTransform, anchor)); infoBlock.Flash(GUI.Style.Green); @@ -533,15 +533,15 @@ namespace Barotrauma.Tutorials titleBlock.RectTransform.IsFixedSize = true; } - List colorData = ColorData.GetColorData(text, out text); + List richTextData = RichTextData.GetRichTextData(text, out text); GUITextBlock textBlock; - if (colorData == null) + if (richTextData == null) { textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), " " + text, wrap: true); } else { - textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), colorData, " " + text, wrap: true); + textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), richTextData, " " + text, wrap: true); } textBlock.RectTransform.IsFixedSize = true; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs index 903f55d0f..38e4dff6d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs @@ -1,159 +1,41 @@ -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using System.Collections.Generic; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; namespace Barotrauma { partial class GameSession { - private InfoFrameTab selectedTab; - private GUIFrame infoFrame; - - private readonly List tabButtons = new List(); - - private GUIFrame infoFrameContent; public RoundSummary RoundSummary { get; private set; } - public static bool IsInfoFrameOpen => GameMain.GameSession?.infoFrame != null; + public static bool IsTabMenuOpen => GameMain.GameSession?.tabMenu != null; + public static TabMenu TabMenuInstance => GameMain.GameSession?.tabMenu; - private bool ToggleInfoFrame() + private TabMenu tabMenu; + + public bool ToggleTabMenu() { if (GameMain.NetworkMember != null && GameMain.NetLobbyScreen != null) { if (GameMain.NetLobbyScreen.HeadSelectionList != null) { GameMain.NetLobbyScreen.HeadSelectionList.Visible = false; } if (GameMain.NetLobbyScreen.JobSelectionFrame != null) { GameMain.NetLobbyScreen.JobSelectionFrame.Visible = false; } } - if (infoFrame == null) + if (tabMenu == null && GameMode is TutorialMode == false) { - CreateInfoFrame(); - SelectInfoFrameTab(null, selectedTab); + tabMenu = new TabMenu(); } else { - infoFrame = null; + tabMenu = null; + NetLobbyScreen.JobInfoFrame = null; } return true; } - public void CreateInfoFrame() - { - int width = 600, height = 400; - - tabButtons.Clear(); - - infoFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker"); - - var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.5f, 0.35f), infoFrame.RectTransform, Anchor.Center) { MinSize = new Point(width, height), RelativeOffset = new Vector2(0.0f, 0.033f) }); - - var paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.95f, 0.9f), innerFrame.RectTransform, Anchor.Center), style: null); - var buttonArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.08f), paddedFrame.RectTransform), isHorizontal: true) - { - RelativeSpacing = 0.01f - }; - infoFrameContent = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.85f), paddedFrame.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.08f) }, style: "InnerFrame"); - - var crewButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), buttonArea.RectTransform), TextManager.Get("Crew"), style: "GUITabButton") - { - UserData = InfoFrameTab.Crew, - OnClicked = SelectInfoFrameTab - }; - tabButtons.Add(crewButton); - - var missionButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), buttonArea.RectTransform), TextManager.Get("Mission"), style: "GUITabButton") - { - UserData = InfoFrameTab.Mission, - OnClicked = SelectInfoFrameTab - }; - tabButtons.Add(missionButton); - - if (GameMain.NetworkMember != null) - { - var myCharacterButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), buttonArea.RectTransform), TextManager.Get("MyCharacter"), style: "GUITabButton") - { - UserData = InfoFrameTab.MyCharacter, - OnClicked = SelectInfoFrameTab - }; - tabButtons.Add(myCharacterButton); - } - - /*TODO: fix - if (GameMain.Server != null) - { - var manageButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), buttonArea.RectTransform), TextManager.Get("ManagePlayers")) - { - UserData = InfoFrameTab.ManagePlayers, - OnClicked = SelectInfoFrameTab - }; - }*/ - - } - - private bool SelectInfoFrameTab(GUIButton button, object userData) - { - selectedTab = (InfoFrameTab)userData; - - CreateInfoFrame(); - tabButtons.ForEach(tb => tb.Selected = (InfoFrameTab)tb.UserData == selectedTab); - - switch (selectedTab) - { - case InfoFrameTab.Crew: - CrewManager.CreateCrewListFrame(CrewManager.GetCharacters(), infoFrameContent); - break; - case InfoFrameTab.Mission: - CreateMissionInfo(infoFrameContent); - break; - case InfoFrameTab.MyCharacter: - if (GameMain.NetworkMember == null) { return false; } - GameMain.NetLobbyScreen.CreatePlayerFrame(infoFrameContent); - break; - case InfoFrameTab.ManagePlayers: - //TODO: fix - //GameMain.Server.ManagePlayersFrame(infoFrameContent); - break; - } - - return true; - } - - private void CreateMissionInfo(GUIFrame infoFrame) - { - infoFrameContent.ClearChildren(); - - var isTraitor = GameMain.Client?.Character?.IsTraitor ?? false; - - var missionFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, isTraitor ? 0.95f : 0.45f), infoFrameContent.RectTransform)) - { - RelativeSpacing = 0.05f - }; - - if (Mission != null) - { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionFrame.RectTransform), Mission.Name, font: GUI.LargeFont); - - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionFrame.RectTransform), TextManager.GetWithVariable("MissionReward", "[reward]", Mission.Reward.ToString())); - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionFrame.RectTransform), Mission.Description, wrap: true); - } - else - { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), missionFrame.RectTransform, Anchor.TopCenter), TextManager.Get("NoMission"), font: GUI.LargeFont); - } - if (isTraitor) - { - var traitorFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.45f), infoFrameContent.RectTransform, Anchor.BottomLeft)) - { - RelativeSpacing = 0.05f - }; - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), traitorFrame.RectTransform), TextManager.Get("Traitors"), font: GUI.LargeFont); - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), traitorFrame.RectTransform), GameMain.Client.Character.TraitorCurrentObjective, wrap: true); - } - } - public void AddToGUIUpdateList() { if (GUI.DisableHUD) return; GameMode?.AddToGUIUpdateList(); - infoFrame?.AddToGUIUpdateList(); + tabMenu?.AddToGUIUpdateList(); if (GameMain.NetworkMember != null) { @@ -166,17 +48,31 @@ namespace Barotrauma { if (GUI.DisableHUD) return; - if (PlayerInput.KeyDown(InputType.InfoTab) && - (GUI.KeyboardDispatcher.Subscriber == null || GUI.KeyboardDispatcher.Subscriber is GUIListBox)) + if (GameMode.IsRunning) { - if (infoFrame == null) + if (tabMenu == null) { - ToggleInfoFrame(); + if (PlayerInput.KeyHit(InputType.InfoTab) && GUI.KeyboardDispatcher.Subscriber is GUITextBox == false) + { + ToggleTabMenu(); + } + } + else + { + tabMenu.Update(); + + if (PlayerInput.KeyHit(InputType.InfoTab) && GUI.KeyboardDispatcher.Subscriber is GUITextBox == false) + { + ToggleTabMenu(); + } } } - else if (infoFrame != null) + else { - ToggleInfoFrame(); + if (tabMenu != null) + { + ToggleTabMenu(); + } } if (GameMain.NetworkMember != null) @@ -202,9 +98,7 @@ namespace Barotrauma public void Draw(SpriteBatch spriteBatch) { if (GUI.DisableHUD) return; - GameMode?.Draw(spriteBatch); - //infoFrame?.DrawManually(spriteBatch); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs index 78b8f52fe..12cd4a55e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs @@ -32,7 +32,9 @@ namespace Barotrauma SoundPlayer.OverrideMusicDuration = 18.0f; } - GUIFrame frame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker") + GUIFrame background = new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, GUI.Canvas, Anchor.Center), style: "GUIBackgroundBlocker"); + + GUIFrame frame = new GUIFrame(new RectTransform(Vector2.One, background.RectTransform, Anchor.Center), style: null) { UserData = "roundsummary" }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs index 0bea0a5b6..c3f9fb6a3 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs @@ -18,6 +18,7 @@ namespace Barotrauma { Graphics, Audio, + VoiceChat, Controls, #if DEBUG Debug @@ -43,6 +44,8 @@ namespace Barotrauma } } + private const int inventoryHotkeyCount = 10; + public void SetDefaultBindings(XDocument doc = null, bool legacy = false) { keyMapping = new KeyOrMouse[Enum.GetNames(typeof(InputType)).Length]; @@ -60,6 +63,7 @@ namespace Barotrauma keyMapping[(int)InputType.CrewOrders] = new KeyOrMouse(Keys.C); keyMapping[(int)InputType.Voice] = new KeyOrMouse(Keys.V); + keyMapping[(int)InputType.LocalVoice] = new KeyOrMouse(Keys.B); keyMapping[(int)InputType.Command] = new KeyOrMouse(MouseButton.MiddleMouse); if (Language == "French") @@ -98,6 +102,13 @@ namespace Barotrauma keyMapping[(int)InputType.Select] = new KeyOrMouse(MouseButton.PrimaryMouse); // shoot and deselect are handled in CheckBindings() so that we don't override the legacy settings. } + + inventoryKeyMapping = new KeyOrMouse[inventoryHotkeyCount]; + for (int i = 0; i < inventoryKeyMapping.Length; i++) + { + inventoryKeyMapping[i] = new KeyOrMouse(Keys.D0 + (i + 1) % 10); + } + if (doc != null) { LoadControls(doc); @@ -177,6 +188,26 @@ namespace Barotrauma } } + private void LoadInventoryKeybinds(XElement element) + { + for (int i = 0; i < inventoryKeyMapping.Length; i++) + { + XAttribute attribute = element.Attributes().ElementAt(i); + if (int.TryParse(attribute.Value.ToString(), out int mouseButtonInt)) + { + inventoryKeyMapping[i] = new KeyOrMouse((MouseButton)mouseButtonInt); + } + else if (Enum.TryParse(attribute.Value.ToString(), true, out MouseButton mouseButton)) + { + inventoryKeyMapping[i] = new KeyOrMouse(mouseButton); + } + else if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key)) + { + inventoryKeyMapping[i] = new KeyOrMouse(key); + } + } + } + private void LoadControls(XDocument doc) { XElement keyMapping = doc.Root.Element("keymapping"); @@ -184,6 +215,12 @@ namespace Barotrauma { LoadKeyBinds(keyMapping); } + + XElement inventoryKeyMapping = doc.Root.Element("inventorykeymapping"); + if (inventoryKeyMapping != null) + { + LoadInventoryKeybinds(inventoryKeyMapping); + } } public KeyOrMouse KeyBind(InputType inputType) @@ -193,25 +230,14 @@ namespace Barotrauma public string KeyBindText(InputType inputType) { - KeyOrMouse bind = keyMapping[(int)inputType]; - - if (bind.MouseButton != MouseButton.None) - { - switch (bind.MouseButton) - { - case MouseButton.PrimaryMouse: - return PlayerInput.MouseButtonsSwapped() ? TextManager.Get("input.rightmouse") : TextManager.Get("input.leftmouse"); - case MouseButton.SecondaryMouse: - return PlayerInput.MouseButtonsSwapped() ? TextManager.Get("input.leftmouse") : TextManager.Get("input.rightmouse"); - default: - return TextManager.Get("input." + bind.MouseButton.ToString().ToLowerInvariant()); - - } - } - - return bind.ToString(); + return keyMapping[(int)inputType].Name; } - + + public KeyOrMouse InventoryKeyBind(int index) + { + return inventoryKeyMapping[index]; + } + private GUIListBox contentPackageList; private bool ChangeSliderText(GUIScrollBar scrollBar, float barScroll) @@ -257,7 +283,8 @@ namespace Barotrauma } else { - settingsFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: null, color: Color.Black * 0.5f); + settingsFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, settingsFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); var settingsFrameContent = new GUIFrame(new RectTransform(new Vector2(0.8f, 0.8f), settingsFrame.RectTransform, Anchor.Center)); settingsHolder = settingsFrameContent.RectTransform; } @@ -290,6 +317,25 @@ namespace Barotrauma ButtonEnabled = ContentPackage.List.Count(cp => cp.CorePackage) > 1 }; + var filterContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.05f), leftPanel.RectTransform), isHorizontal: true) + { + Stretch = true + }; + var searchTitle = new GUITextBlock(new RectTransform(new Vector2(0.001f, 1.0f), filterContainer.RectTransform), TextManager.Get("serverlog.filter"), textAlignment: Alignment.CenterLeft, font: GUI.Font); + var searchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 1.0f), filterContainer.RectTransform, Anchor.CenterRight), font: GUI.Font, createClearButton: true); + filterContainer.RectTransform.MinSize = searchBox.RectTransform.MinSize; + searchBox.OnSelected += (sender, userdata) => { searchTitle.Visible = false; }; + searchBox.OnDeselected += (sender, userdata) => { searchTitle.Visible = true; }; + searchBox.OnTextChanged += (textBox, text) => + { + foreach (GUIComponent child in contentPackageList.Content.Children) + { + if (!(child.UserData is ContentPackage cp)) { continue; } + child.Visible = string.IsNullOrEmpty(text) ? true : cp.Name.ToLower().Contains(text.ToLower()); + } + return true; + }; + contentPackageList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.70f), leftPanel.RectTransform)) { OnSelected = (gc, obj) => false, @@ -443,11 +489,13 @@ namespace Barotrauma UserData = tab }; + float tabWidth = 0.25f; #if DEBUG + tabWidth = 0.2f; if (tab != Tab.Debug) { #endif - tabButtons[(int)tab] = new GUIButton(new RectTransform(new Vector2(0.25f, 1.0f), tabButtonHolder.RectTransform), + tabButtons[(int)tab] = new GUIButton(new RectTransform(new Vector2(tabWidth, 1.0f), tabButtonHolder.RectTransform), TextManager.Get("SettingsTab." + tab.ToString()), style: "GUITabButton") { UserData = tab, @@ -457,7 +505,7 @@ namespace Barotrauma } else { - tabButtons[(int)tab] = new GUIButton(new RectTransform(new Vector2(0.25f, 1.0f), tabButtonHolder.RectTransform), "Debug", style: "GUITabButton") + tabButtons[(int)tab] = new GUIButton(new RectTransform(new Vector2(tabWidth, 1.0f), tabButtonHolder.RectTransform), "Debug", style: "GUITabButton") { UserData = tab, OnClicked = (bt, userdata) => { SelectTab((Tab)userdata); return true; } @@ -547,6 +595,37 @@ namespace Barotrauma }; + GUITickBox textureCompressionTickBox = new GUITickBox(new RectTransform(tickBoxScale, leftColumn.RectTransform), TextManager.Get("EnableTextureCompression")) + { + ToolTip = TextManager.Get("EnableTextureCompressionToolTip"), + OnSelected = (GUITickBox box) => + { + if (box.Selected == TextureCompressionEnabled) { return true; } + bool prevTextureCompressionEnabled = TextureCompressionEnabled; + TextureCompressionEnabled = box.Selected; + + var msgBox = new GUIMessageBox( + TextManager.Get("RestartRequiredLabel"), + TextManager.Get("RestartRequiredGeneric"), + buttons: new string[] { TextManager.Get("OK"), TextManager.Get("Cancel") }); + msgBox.Buttons[0].OnClicked += (btn, userdata) => + { + ApplySettings(); + GameMain.Instance.Exit(); + return true; + }; msgBox.Buttons[1].OnClicked += (btn, userdata) => + { + TextureCompressionEnabled = prevTextureCompressionEnabled; + box.Selected = prevTextureCompressionEnabled; + msgBox.Close(); + return true; + }; + + return true; + }, + Selected = TextureCompressionEnabled + }; + GUITickBox pauseOnFocusLostBox = new GUITickBox(new RectTransform(tickBoxScale, leftColumn.RectTransform), TextManager.Get("PauseOnFocusLost")) { @@ -608,7 +687,8 @@ namespace Barotrauma { ChangeSliderText(scrollBar, barScroll); LightMapScale = MathHelper.Lerp(0.2f, 1.0f, barScroll); - UnsavedSettings = true; return true; + UnsavedSettings = true; + return true; }, Step = 0.25f }; @@ -677,10 +757,10 @@ namespace Barotrauma var audioContent = new GUILayoutGroup(new RectTransform(new Vector2(0.97f, 0.97f), tabs[(int)Tab.Audio].RectTransform, Anchor.Center), childAnchor: Anchor.TopCenter) { - Stretch = true, + Stretch = false, RelativeSpacing = 0.01f }; - + GUITextBlock soundVolumeText = new GUITextBlock(new RectTransform(textBlockScale, audioContent.RectTransform), TextManager.Get("SoundVolume"), font: GUI.SubHeadingFont); GUIScrollBar soundScrollBar = new GUIScrollBar(new RectTransform(textBlockScale, audioContent.RectTransform), style: "GUISlider", barSize: 0.05f) @@ -718,15 +798,16 @@ namespace Barotrauma style: "GUISlider", barSize: 0.05f) { UserData = voiceChatVolumeText, - BarScroll = VoiceChatVolume, - OnMoved = (scrollBar, scroll) => - { - ChangeSliderText(scrollBar, scroll); - VoiceChatVolume = scroll; - return true; - }, + Range = new Vector2(0.0f, 2.0f), Step = 0.05f }; + voiceChatScrollBar.BarScrollValue = VoiceChatVolume; + voiceChatScrollBar.OnMoved = (scrollBar, scroll) => + { + ChangeSliderText(scrollBar, scrollBar.BarScrollValue); + VoiceChatVolume = scrollBar.BarScrollValue; + return true; + }; voiceChatScrollBar.OnMoved(voiceChatScrollBar, voiceChatScrollBar.BarScroll); GUITickBox muteOnFocusLostBox = new GUITickBox(new RectTransform(tickBoxScale, audioContent.RectTransform), TextManager.Get("MuteOnFocusLost")) @@ -765,7 +846,15 @@ namespace Barotrauma } }; - new GUITextBlock(new RectTransform(textBlockScale, audioContent.RectTransform), TextManager.Get("VoiceChat"), font: GUI.SubHeadingFont); + /// Voice chat tab ---------------------------------------------------------------- + + var voiceChatContent = new GUILayoutGroup(new RectTransform(new Vector2(0.97f, 0.97f), tabs[(int)Tab.VoiceChat].RectTransform, Anchor.Center), childAnchor: Anchor.TopCenter) + { + Stretch = false, + RelativeSpacing = 0.01f + }; + + //new GUITextBlock(new RectTransform(textBlockScale, voiceChatContent.RectTransform), TextManager.Get("VoiceChat"), font: GUI.SubHeadingFont); CaptureDeviceNames = Alc.GetStringList((IntPtr)null, Alc.CaptureDeviceSpecifier); foreach (string name in CaptureDeviceNames) @@ -773,7 +862,7 @@ namespace Barotrauma DebugConsole.NewMessage(name + " " + name.Length.ToString(), Color.Lime); } - GUITickBox directionalVoiceChat = new GUITickBox(new RectTransform(tickBoxScale, audioContent.RectTransform), TextManager.Get("DirectionalVoiceChat")) + GUITickBox directionalVoiceChat = new GUITickBox(new RectTransform(tickBoxScale, voiceChatContent.RectTransform), TextManager.Get("DirectionalVoiceChat")) { Selected = UseDirectionalVoiceChat, ToolTip = TextManager.Get("DirectionalVoiceChatToolTip"), @@ -794,7 +883,7 @@ namespace Barotrauma VoiceSetting = VoiceMode.Disabled; } #if (!OSX) - var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.15f), audioContent.RectTransform), TrimAudioDeviceName(VoiceCaptureDevice), CaptureDeviceNames.Count); + var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.15f), voiceChatContent.RectTransform), TrimAudioDeviceName(VoiceCaptureDevice), CaptureDeviceNames.Count); if (CaptureDeviceNames?.Count > 0) { foreach (string name in CaptureDeviceNames) @@ -819,7 +908,7 @@ namespace Barotrauma } #else - var defaultDeviceGroup = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.3f), audioContent.RectTransform), true, Anchor.CenterLeft); + var defaultDeviceGroup = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.3f), voiceChatContent.RectTransform), true, Anchor.CenterLeft); var currentDeviceTextBlock = new GUITextBlock(new RectTransform(new Vector2(.7f, 0.75f), null), TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TrimAudioDeviceName(VoiceCaptureDevice)), font: GUI.SubHeadingFont) { @@ -857,15 +946,15 @@ namespace Barotrauma #endif var voiceModeCount = Enum.GetNames(typeof(VoiceMode)).Length; - var voiceModeDropDown = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.15f), audioContent.RectTransform), elementCount: voiceModeCount); + var voiceModeDropDown = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.15f), voiceChatContent.RectTransform), elementCount: voiceModeCount); for (int i = 0; i < voiceModeCount; i++) { var voiceMode = "VoiceMode." + ((VoiceMode)i).ToString(); voiceModeDropDown.AddItem(TextManager.Get(voiceMode), userData: i, toolTip: TextManager.Get(voiceMode + "ToolTip")); } - var micVolumeText = new GUITextBlock(new RectTransform(textBlockScale, audioContent.RectTransform), TextManager.Get("MicrophoneVolume"), font: GUI.SubHeadingFont); - var micVolumeSlider = new GUIScrollBar(new RectTransform(textBlockScale, audioContent.RectTransform), + var micVolumeText = new GUITextBlock(new RectTransform(textBlockScale, voiceChatContent.RectTransform), TextManager.Get("MicrophoneVolume"), font: GUI.SubHeadingFont); + var micVolumeSlider = new GUIScrollBar(new RectTransform(textBlockScale, voiceChatContent.RectTransform), style: "GUISlider", barSize: 0.05f) { UserData = micVolumeText, @@ -882,7 +971,7 @@ namespace Barotrauma }; micVolumeSlider.OnMoved(micVolumeSlider, micVolumeSlider.BarScroll); - var extraVoiceSettingsContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.25f), audioContent.RectTransform, Anchor.BottomCenter), style: null); + var extraVoiceSettingsContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.2f), voiceChatContent.RectTransform, Anchor.BottomCenter), style: null); var voiceActivityGroup = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.5f), extraVoiceSettingsContainer.RectTransform)) { @@ -928,8 +1017,8 @@ namespace Barotrauma return true; }; - var voiceInputContainer = new GUILayoutGroup( - new RectTransform(new Vector2(1.0f, 0.25f), extraVoiceSettingsContainer.RectTransform) + var voiceInputContainerHorizontal = new GUILayoutGroup( + new RectTransform(new Vector2(1.0f, 0.5f), extraVoiceSettingsContainer.RectTransform) { RelativeOffset = new Vector2(0.0f, voiceActivityGroup.RectTransform.RelativeSize.Y + 0.1f) }, @@ -937,6 +1026,11 @@ namespace Barotrauma { Visible = VoiceSetting == VoiceMode.PushToTalk }; + + var voiceInputContainer = new GUILayoutGroup( + new RectTransform(new Vector2(0.5f, 1.0f), voiceInputContainerHorizontal.RectTransform), + isHorizontal: true, childAnchor: Anchor.CenterLeft); + new GUITextBlock(new RectTransform(new Vector2(0.6f, 1.0f), voiceInputContainer.RectTransform), TextManager.Get("InputType.Voice"), font: GUI.SubHeadingFont); var voiceKeyBox = new GUITextBox(new RectTransform(new Vector2(0.4f, 1.0f), voiceInputContainer.RectTransform, Anchor.TopRight), text: KeyBindText(InputType.Voice)) { @@ -945,6 +1039,39 @@ namespace Barotrauma }; voiceKeyBox.OnSelected += KeyBoxSelected; + var localVoiceInputContainer = new GUILayoutGroup( + new RectTransform(new Vector2(0.5f, 1.0f), voiceInputContainerHorizontal.RectTransform), + isHorizontal: true, childAnchor: Anchor.CenterLeft); + + new GUITextBlock(new RectTransform(new Vector2(0.6f, 1.0f), localVoiceInputContainer.RectTransform), TextManager.Get("InputType.LocalVoice"), font: GUI.SubHeadingFont); + var localVoiceKeyBox = new GUITextBox(new RectTransform(new Vector2(0.4f, 1.0f), localVoiceInputContainer.RectTransform, Anchor.TopRight), text: KeyBindText(InputType.LocalVoice)) + { + SelectedColor = Color.Gold * 0.3f, + UserData = InputType.LocalVoice + }; + localVoiceKeyBox.OnSelected += KeyBoxSelected; + + var cutoffPreventionText = new GUITextBlock(new RectTransform(textBlockScale, voiceChatContent.RectTransform), TextManager.Get("CutoffPrevention"), font: GUI.SubHeadingFont) + { + ToolTip = TextManager.Get("CutoffPreventionTooltip") + }; + var cutoffPreventionSlider = new GUIScrollBar(new RectTransform(textBlockScale, voiceChatContent.RectTransform), + style: "GUISlider", barSize: 0.05f) + { + UserData = micVolumeText, + Range = new Vector2(0,540), + Step = 1.0f / 9.0f + }; + cutoffPreventionSlider.BarScrollValue = VoiceChatCutoffPrevention; + cutoffPreventionSlider.OnMoved = (scrollBar, scroll) => + { + VoiceChatCutoffPrevention = (int)scrollBar.BarScrollValue; + cutoffPreventionText.Text = TextManager.Get("CutoffPrevention") + + " " + TextManager.GetWithVariable("timeformatmilliseconds", "[milliseconds]", VoiceChatCutoffPrevention.ToString()); + return true; + }; + cutoffPreventionSlider.OnMoved(cutoffPreventionSlider, cutoffPreventionSlider.BarScrollValue); + voiceModeDropDown.OnSelected = (GUIComponent selected, object userData) => { try @@ -961,7 +1088,7 @@ namespace Barotrauma { VoiceSetting = vMode = VoiceMode.Disabled; voiceActivityGroup.Visible = false; - voiceInputContainer.Visible = false; + voiceInputContainerHorizontal.Visible = false; return true; } } @@ -977,7 +1104,7 @@ namespace Barotrauma noiseGateText.Visible = (vMode == VoiceMode.Activity); noiseGateSlider.Visible = (vMode == VoiceMode.Activity); voiceActivityGroup.Visible = (vMode != VoiceMode.Disabled); - voiceInputContainer.Visible = (vMode == VoiceMode.PushToTalk); + voiceInputContainerHorizontal.Visible = (vMode == VoiceMode.PushToTalk); UnsavedSettings = true; } catch (Exception e) @@ -1062,6 +1189,24 @@ namespace Barotrauma keyBox.SelectedColor = Color.Gold * 0.3f; } + for (int i = 0; i < inventoryHotkeyCount; i++) + { + var inputContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.06f), ((i + 1) <= inventoryHotkeyCount / 2 ? inputColumnLeft : inputColumnRight).RectTransform)) + { Stretch = true, IsHorizontal = true, RelativeSpacing = 0.01f, Color = new Color(12, 14, 15, 215) }; + var inputName = new GUITextBlock(new RectTransform(new Vector2(0.6f, 1.0f), inputContainer.RectTransform, Anchor.TopLeft) { MinSize = new Point(100, 0) }, + TextManager.GetWithVariable("inventoryslotkeybind", "[slotnumber]", (i + 1).ToString()), font: GUI.SmallFont) + { ForceUpperCase = true }; + inputNameBlocks.Add(inputName); + var keyBox = new GUITextBox(new RectTransform(new Vector2(0.4f, 1.0f), inputContainer.RectTransform), + text: inventoryKeyMapping[i].Name, font: GUI.SmallFont, style: "GUITextBoxNoIcon") + { + UserData = i + }; + keyBox.Text = ToolBox.LimitString(keyBox.Text, keyBox.Font, (int)(keyBox.Rect.Width - keyBox.Padding.X - keyBox.Padding.Z)); + keyBox.OnSelected += InventoryKeyBoxSelected; + keyBox.SelectedColor = Color.Gold * 0.3f; + } + GUITextBlock.AutoScaleAndNormalize(inputNameBlocks); var resetControlsArea = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.07f), controlsLayoutGroup.RectTransform), style: null); @@ -1302,7 +1447,7 @@ namespace Barotrauma { switch (tab) { - case Tab.Audio: + case Tab.VoiceChat: if (VoiceSetting != VoiceMode.Disabled) { if (GameMain.Client == null && VoipCapture.Instance == null) @@ -1329,7 +1474,13 @@ namespace Barotrauma private void KeyBoxSelected(GUITextBox textBox, Keys key) { textBox.Text = ""; - CoroutineManager.StartCoroutine(WaitForKeyPress(textBox)); + CoroutineManager.StartCoroutine(WaitForKeyPress(textBox, keyMapping)); + } + + private void InventoryKeyBoxSelected(GUITextBox textBox, Keys key) + { + textBox.Text = ""; + CoroutineManager.StartCoroutine(WaitForKeyPress(textBox, inventoryKeyMapping)); } private void ResetControls(bool legacy) @@ -1425,7 +1576,7 @@ namespace Barotrauma return true; } - private IEnumerable WaitForKeyPress(GUITextBox keyBox) + private IEnumerable WaitForKeyPress(GUITextBox keyBox, KeyOrMouse[] keyArray) { yield return CoroutineStatus.Running; @@ -1449,42 +1600,43 @@ namespace Barotrauma if (PlayerInput.LeftButtonClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.LeftMouse); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.LeftMouse); } else if (PlayerInput.RightButtonClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.RightMouse); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.RightMouse); } else if (PlayerInput.MidButtonClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.MiddleMouse); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.MiddleMouse); } else if (PlayerInput.Mouse4ButtonClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.MouseButton4); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.MouseButton4); } else if (PlayerInput.Mouse5ButtonClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.MouseButton5); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.MouseButton5); } else if (PlayerInput.MouseWheelUpClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.MouseWheelUp); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.MouseWheelUp); } else if (PlayerInput.MouseWheelDownClicked()) { - keyMapping[keyIndex] = new KeyOrMouse(MouseButton.MouseWheelDown); + keyArray[keyIndex] = new KeyOrMouse(MouseButton.MouseWheelDown); } else if (PlayerInput.GetKeyboardState.GetPressedKeys().Length > 0) { Keys key = PlayerInput.GetKeyboardState.GetPressedKeys()[0]; - keyMapping[keyIndex] = new KeyOrMouse(key); + keyArray[keyIndex] = new KeyOrMouse(key); } else { yield return CoroutineStatus.Success; } - keyBox.Text = KeyBindText((InputType)keyIndex); + + keyBox.Text = keyArray[keyIndex].Name; keyBox.Text = ToolBox.LimitString(keyBox.Text, keyBox.Font, keyBox.Rect.Width); keyBox.Deselect(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs index 42de38bdd..85e6546d9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs @@ -345,9 +345,7 @@ namespace Barotrauma { hideButton.RectTransform.SetPosition(Anchor.TopLeft, Pivot.TopLeft); hideButton.RectTransform.NonScaledSize = new Point(HideButtonWidth, HUDLayoutSettings.BottomRightInfoArea.Height); - hideButton.RectTransform.AbsoluteOffset = new Point( - personalSlotArea.Right + Spacing * 2, - HUDLayoutSettings.BottomRightInfoArea.Y); + hideButton.RectTransform.AbsoluteOffset = new Point(HUDLayoutSettings.BottomRightInfoArea.Left - HideButtonWidth + GUI.IntScaleCeiling(2f), HUDLayoutSettings.BottomRightInfoArea.Y + GUI.IntScaleCeiling(1f)); hideButton.Visible = true; SetIndicatorSizes(); @@ -356,7 +354,6 @@ namespace Barotrauma break; case Layout.Right: { - int extraOffset = 0; int x = HUDLayoutSettings.InventoryAreaLower.Right; int personalSlotX = HUDLayoutSettings.InventoryAreaLower.Right - SlotSize.X - Spacing; for (int i = 0; i < slots.Length; i++) @@ -373,17 +370,18 @@ namespace Barotrauma } int lowerX = x; + int personalSlotY = GameMain.GraphicsHeight - bottomOffset * 2 - Spacing * 2 - (int)(!GUI.IsFourByThree() ? UnequippedIndicator.size.Y * UIScale * IndicatorScaleAdjustment : UnequippedIndicator.size.Y * UIScale * IndicatorScaleAdjustment * 2f); for (int i = 0; i < SlotPositions.Length; i++) { if (HideSlot(i)) continue; if (PersonalSlots.HasFlag(SlotTypes[i])) { - SlotPositions[i] = new Vector2(personalSlotX, GameMain.GraphicsHeight - bottomOffset * 2 - extraOffset - Spacing * 2); + SlotPositions[i] = new Vector2(personalSlotX, personalSlotY); personalSlotX -= slots[i].Rect.Width + Spacing; } else { - SlotPositions[i] = new Vector2(x, GameMain.GraphicsHeight - bottomOffset - extraOffset); + SlotPositions[i] = new Vector2(x, GameMain.GraphicsHeight - bottomOffset); x += slots[i].Rect.Width + Spacing; } } @@ -393,7 +391,7 @@ namespace Barotrauma { if (!HideSlot(i)) continue; x -= slots[i].Rect.Width + Spacing; - SlotPositions[i] = new Vector2(x, GameMain.GraphicsHeight - bottomOffset - extraOffset); + SlotPositions[i] = new Vector2(x, GameMain.GraphicsHeight - bottomOffset); } } break; @@ -401,12 +399,14 @@ namespace Barotrauma { int x = HUDLayoutSettings.InventoryAreaLower.X; int personalSlotX = x; + int personalSlotY = GameMain.GraphicsHeight - bottomOffset * 2 - Spacing * 2 - (int)(!GUI.IsFourByThree() ? UnequippedIndicator.size.Y * UIScale * IndicatorScaleAdjustment : UnequippedIndicator.size.Y * UIScale * IndicatorScaleAdjustment * 2f); + for (int i = 0; i < SlotPositions.Length; i++) { if (HideSlot(i)) continue; if (PersonalSlots.HasFlag(SlotTypes[i])) { - SlotPositions[i] = new Vector2(personalSlotX, GameMain.GraphicsHeight - bottomOffset * 2 - Spacing * 2); + SlotPositions[i] = new Vector2(personalSlotX, personalSlotY); personalSlotX += slots[i].Rect.Width + Spacing; } else @@ -493,7 +493,7 @@ namespace Barotrauma ((selectedSlot != null && selectedSlot.IsSubSlot) || (draggingItem != null && (draggingSlot == null || !draggingSlot.MouseOn()))); if (CharacterHealth.OpenHealthWindow != null) hoverOnInventory = true; - if (layout == Layout.Default) + if (layout == Layout.Default && (Screen.Selected != GameMain.SubEditorScreen || Screen.Selected is SubEditorScreen editor && editor.WiringMode)) { if (hideButton.Visible) { @@ -525,8 +525,7 @@ namespace Barotrauma for (int i = 0; i < capacity; i++) { if (Items[i] != null && Items[i] != draggingItem && Character.Controlled?.Inventory == this && - GUI.KeyboardDispatcher.Subscriber == null && !CrewManager.IsCommandInterfaceOpen && - slots[i].QuickUseKey != Keys.None && PlayerInput.KeyHit(slots[i].QuickUseKey)) + GUI.KeyboardDispatcher.Subscriber == null && !CrewManager.IsCommandInterfaceOpen && PlayerInput.InventoryKeyHit(slots[i].InventoryKeyIndex)) { QuickUseItem(Items[i], true, false, true); } @@ -586,6 +585,19 @@ namespace Barotrauma } } } + + // In sub editor we cannot hover over the slot because they are not rendered so we override it here + if (Screen.Selected is SubEditorScreen subEditor && !subEditor.WiringMode) + { + for (int i = 0; i < slots.Length; i++) + { + var subInventory = GetSubInventory(i); + if (subInventory != null) + { + ShowSubInventory(new SlotReference(this, slots[i], i, false, Items[i].GetComponent().Inventory), deltaTime, cam, hideSubInventories, true); + } + } + } foreach (var subInventorySlot in hideSubInventories) { @@ -771,21 +783,16 @@ namespace Barotrauma } } - private void AssignQuickUseNumKeys() + public void AssignQuickUseNumKeys() { - int num = 1; + int keyBindIndex = 0; for (int i = 0; i < slots.Length; i++) { - if (HideSlot(i)) - { - slots[i].QuickUseKey = Keys.None; - continue; - } - + if (HideSlot(i)) continue; if (SlotTypes[i] == InvSlotType.Any) { - slots[i].QuickUseKey = Keys.D0 + num % 10; - num++; + slots[i].InventoryKeyIndex = keyBindIndex; + keyBindIndex++; } } } @@ -808,16 +815,21 @@ namespace Barotrauma { if (item.Container == null || character.Inventory.FindIndex(item.Container) == -1) // Not a subinventory in the character's inventory { - return item.ParentInventory is CharacterInventory ? - QuickUseAction.TakeFromCharacter : QuickUseAction.TakeFromContainer; + if (character.SelectedItems.Any(i => i?.OwnInventory != null && i.OwnInventory.CanBePut(item))) + { + return QuickUseAction.PutToEquippedItem; + } + else + { + return item.ParentInventory is CharacterInventory ? QuickUseAction.TakeFromCharacter : QuickUseAction.TakeFromContainer; + } } else { var selectedContainer = character.SelectedConstruction?.GetComponent(); if (selectedContainer != null && selectedContainer.Inventory != null && - !selectedContainer.Inventory.Locked && - allowInventorySwap) + !selectedContainer.Inventory.Locked) { // Move the item from the subinventory to the selected container return QuickUseAction.PutToContainer; @@ -854,7 +866,7 @@ namespace Barotrauma { return QuickUseAction.TakeFromCharacter; } - else if (character.SelectedItems.Any(i => i?.OwnInventory != null && i.OwnInventory.CanBePut(item))) + else if (character.SelectedItems.Any(i => i?.OwnInventory != null && i.OwnInventory.CanBePut(item)) && allowInventorySwap) { return QuickUseAction.PutToEquippedItem; } @@ -882,13 +894,40 @@ namespace Barotrauma private void QuickUseItem(Item item, bool allowEquip, bool allowInventorySwap, bool allowApplyTreatment) { + if (Screen.Selected is SubEditorScreen editor && !editor.WiringMode && !Submarine.Unloading) + { + // Find the slot the item was contained in and flash it + if (item.ParentInventory?.slots != null) + { + var invSlots = item.ParentInventory.slots; + var invItems = item.ParentInventory.Items; + for (int i = 0; i < invSlots.Length; i++) + { + if (i < 0 || invSlots.Length <= i || i < 0 || invItems.Length <= i) { break; } + + var slot = invSlots[i]; + var slotItem = invItems[i]; + + if (slotItem == item) + { + slot.ShowBorderHighlight(GUI.Style.Red, 0.1f, 0.4f); + GUI.PlayUISound(GUISoundType.PickItem); + break; + } + } + } + + item.Remove(); + return; + } + var quickUseAction = GetQuickUseAction(item, allowEquip, allowInventorySwap, allowApplyTreatment); bool success = false; switch (quickUseAction) { case QuickUseAction.Equip: //attempt to put in a free slot first - for (int i = 0; i < capacity; i++) + for (int i = capacity - 1; i >= 0; i--) { if (Items[i] != null) continue; if (SlotTypes[i] == InvSlotType.Any || !item.AllowedSlots.Any(a => a.HasFlag(SlotTypes[i]))) continue; @@ -898,11 +937,11 @@ namespace Barotrauma if (!success) { - for (int i = 0; i < capacity; i++) + for (int i = capacity - 1; i >= 0; i--) { if (SlotTypes[i] == InvSlotType.Any || !item.AllowedSlots.Any(a => a.HasFlag(SlotTypes[i]))) continue; - //something else already equipped in the slot, attempt to unequip it - if (Items[i] != null && Items[i].AllowedSlots.Contains(InvSlotType.Any)) + // something else already equipped in a hand slot, attempt to unequip it so items aren't unnecessarily swapped to it + if (Items[i] != null && Items[i].AllowedSlots.Contains(InvSlotType.Any) && SlotTypes[i] == InvSlotType.LeftHand || SlotTypes[i] == InvSlotType.RightHand) { TryPutItem(Items[i], Character.Controlled, new List() { InvSlotType.Any }, true); } @@ -1003,6 +1042,7 @@ namespace Barotrauma prevUIScale != UIScale || prevHUDScale != GUI.Scale) { + CreateSlots(); SetSlotPositions(layout); prevUIScale = UIScale; prevHUDScale = GUI.Scale; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Door.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Door.cs index 9e751d1df..fb818670e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Door.cs @@ -237,6 +237,7 @@ namespace Barotrauma.Items.Components { StopPicking(null); PlaySound(forcedOpen ? ActionType.OnPicked : ActionType.OnUse); + if (isOpen) { stuck = MathHelper.Clamp(stuck - StuckReductionOnOpen, 0.0f, 100.0f); } } } } @@ -245,7 +246,8 @@ namespace Barotrauma.Items.Components { base.ClientRead(type, msg, sendingTime); - bool open = msg.ReadBoolean(); + bool open = msg.ReadBoolean(); + bool broken = msg.ReadBoolean(); bool forcedOpen = msg.ReadBoolean(); SetState(open, isNetworkMessage: true, sendNetworkMessage: false, forcedOpen: forcedOpen); Stuck = msg.ReadRangedSingle(0.0f, 100.0f, 8); @@ -258,6 +260,7 @@ namespace Barotrauma.Items.Components } if (isStuck) { OpenState = 0.0f; } + IsBroken = broken; PredictedState = null; } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs index e2e03e335..b87d69d5e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs @@ -1,4 +1,5 @@ -using Microsoft.Xna.Framework; +using Barotrauma.Networking; +using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; @@ -52,5 +53,13 @@ namespace Barotrauma.Items.Components } } } + + public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) + { + CurrPowerConsumption = powerConsumption; + charging = true; + timer = Duration; + IsActive = true; + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Holdable.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Holdable.cs index 4d06b050d..f6abd8b28 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Holdable.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Holdable.cs @@ -71,6 +71,8 @@ namespace Barotrauma.Items.Components base.ClientRead(type, msg, sendingTime); bool shouldBeAttached = msg.ReadBoolean(); Vector2 simPosition = new Vector2(msg.ReadSingle(), msg.ReadSingle()); + UInt16 submarineID = msg.ReadUInt16(); + Submarine sub = Entity.FindEntityByID(submarineID) as Submarine; if (!attachable) { @@ -84,6 +86,7 @@ namespace Barotrauma.Items.Components { Drop(false, null); item.SetTransform(simPosition, 0.0f); + item.Submarine = sub; AttachToWall(); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs index 09c3d6896..3491978b7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Text; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs index 9a76f7419..d1025621a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -436,8 +436,7 @@ namespace Barotrauma.Items.Components if (subElement.Attribute("color") != null) color = subElement.GetAttributeColor("color", Color.White); string style = subElement.Attribute("style") == null ? null : subElement.GetAttributeString("style", ""); - - GuiFrame = new GUIFrame(RectTransform.Load(subElement, GUI.Canvas, Anchor.Center), style, color); + GuiFrame = new GUIFrame(RectTransform.Load(subElement, GUI.Canvas.ItemComponentHolder, Anchor.Center), style, color); DefaultLayout = GUILayoutSettings.Load(subElement); break; case "alternativelayout": diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemLabel.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemLabel.cs index aa81a968c..4bc8d1250 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemLabel.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemLabel.cs @@ -28,7 +28,7 @@ namespace Barotrauma.Items.Components } private string text; - [Serialize("", true, translationTextTag: "Label.", description: "The text displayed in the label."), Editable(100)] + [Serialize("", true, translationTextTag: "Label.", description: "The text displayed in the label.", alwaysUseInstanceValues: true), Editable(100)] public string Text { get { return text; } @@ -58,7 +58,7 @@ namespace Barotrauma.Items.Components private set; } - [Editable, Serialize("0,0,0,255", true, description: "The color of the text displayed on the label (R,G,B,A).")] + [Editable, Serialize("0,0,0,255", true, description: "The color of the text displayed on the label (R,G,B,A).", alwaysUseInstanceValues: true)] public Color TextColor { get { return textColor; } @@ -69,7 +69,7 @@ namespace Barotrauma.Items.Components } } - [Editable(0.0f, 10.0f), Serialize(1.0f, true, description: "The scale of the text displayed on the label.")] + [Editable(0.0f, 10.0f), Serialize(1.0f, true, description: "The scale of the text displayed on the label.", alwaysUseInstanceValues: true)] public float TextScale { get { return textBlock == null ? 1.0f : textBlock.TextScale; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs index 51a3a14fd..823cdd6ea 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs @@ -48,7 +48,10 @@ namespace Barotrauma.Items.Components { if (light.LightSprite != null && (item.body == null || item.body.Enabled) && lightBrightness > 0.0f && IsOn) { - light.LightSprite.Draw(spriteBatch, new Vector2(item.DrawPosition.X, -item.DrawPosition.Y), lightColor * lightBrightness, 0.0f, item.Scale, SpriteEffects.None, item.SpriteDepth - 0.0001f); + Vector2 origin = light.LightSprite.Origin; + if (light.LightSpriteEffect == SpriteEffects.FlipHorizontally) { origin.X = light.LightSprite.SourceRect.Width - origin.X; } + if (light.LightSpriteEffect == SpriteEffects.FlipVertically) { origin.Y = light.LightSprite.SourceRect.Height - origin.Y; } + light.LightSprite.Draw(spriteBatch, new Vector2(item.DrawPosition.X, -item.DrawPosition.Y), lightColor * lightBrightness, origin, -light.Rotation, item.Scale, light.LightSpriteEffect, item.SpriteDepth - 0.0001f); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Controller.cs index d19b33666..01439da52 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Controller.cs @@ -76,7 +76,7 @@ namespace Barotrauma.Items.Components public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) { - state = msg.ReadBoolean(); + State = msg.ReadBoolean(); ushort userID = msg.ReadUInt16(); if (userID == 0) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Engine.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Engine.cs index cadfb6011..6240e6ddf 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Engine.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Engine.cs @@ -16,6 +16,10 @@ namespace Barotrauma.Items.Components private GUIScrollBar forceSlider; private GUITickBox autoControlIndicator; + private int particlesPerSec = 60; + private float particleTimer; + + public float AnimSpeed { get; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs index 89165ecc0..f08be819d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs @@ -318,10 +318,10 @@ namespace Barotrauma.Items.Components { if (item.ParentInventory.slots[availableSlotIndex].HighlightTimer <= 0.0f) { - item.ParentInventory.slots[availableSlotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f); + item.ParentInventory.slots[availableSlotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f, 0.2f); if (slotIndex < inputContainer.Capacity) { - inputContainer.Inventory.slots[slotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f); + inputContainer.Inventory.slots[slotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f, 0.2f); } } } @@ -337,10 +337,22 @@ namespace Barotrauma.Items.Components slotRect.Center.ToVector2(), color: requiredItem.ItemPrefab.InventoryIconColor * 0.3f, scale: Math.Min(slotRect.Width / itemIcon.size.X, slotRect.Height / itemIcon.size.Y)); - + + if (requiredItem.UseCondition && requiredItem.MinCondition < 1.0f) + { + GUI.DrawRectangle(spriteBatch, new Rectangle(slotRect.X, slotRect.Bottom - 8, slotRect.Width, 8), Color.Black * 0.8f, true); + GUI.DrawRectangle(spriteBatch, + new Rectangle(slotRect.X, slotRect.Bottom - 8, (int)(slotRect.Width * requiredItem.MinCondition), 8), + GUI.Style.Green * 0.8f, true); + } + if (slotRect.Contains(PlayerInput.MousePosition)) { string toolTipText = requiredItem.ItemPrefab.Name; + if (requiredItem.UseCondition && requiredItem.MinCondition < 1.0f) + { + toolTipText += " " + (int)Math.Round(requiredItem.MinCondition * 100) + "%"; + } if (!string.IsNullOrEmpty(requiredItem.ItemPrefab.Description)) { toolTipText += '\n' + requiredItem.ItemPrefab.Description; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs index 6114dc576..b80dd19d0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs @@ -91,6 +91,7 @@ namespace Barotrauma.Items.Components if ((item.Submarine == null && displayedSubs.Count > 0) || //item not inside a sub anymore, but display is still showing subs !displayedSubs.Contains(item.Submarine) || //current sub not displayer item.Submarine.DockedTo.Any(s => !displayedSubs.Contains(s)) || //some of the docked subs not diplayed + !submarineContainer.Children.Any() || // We lack a GUI displayedSubs.Any(s => s != item.Submarine && !item.Submarine.DockedTo.Contains(s))) //displaying a sub that shouldn't be displayed { CreateHUD(); @@ -116,15 +117,17 @@ namespace Barotrauma.Items.Components private void DrawHUDFront(SpriteBatch spriteBatch, GUICustomComponent container) { if (Voltage < MinVoltage) - { + { Vector2 textSize = GUI.Font.MeasureString(noPowerTip); Vector2 textPos = GuiFrame.Rect.Center.ToVector2(); GUI.DrawString(spriteBatch, textPos - textSize / 2, noPowerTip, - GUI.Style.Orange * (float)Math.Abs(Math.Sin(Timing.TotalTime)), Color.Black * 0.8f, font: GUI.SubHeadingFont); + GUI.Style.Orange * (float)Math.Abs(Math.Sin(Timing.TotalTime)), Color.Black * 0.8f, font: GUI.SubHeadingFont); return; } + if (!submarineContainer.Children.Any()) { return; } + foreach (GUIComponent child in submarineContainer.Children.First().Children) { if (child.UserData is Hull hull) @@ -151,7 +154,7 @@ namespace Barotrauma.Items.Components foreach (Hull hull in Hull.hullList) { - var hullFrame = submarineContainer.Children.First().FindChild(hull); + var hullFrame = submarineContainer.Children.FirstOrDefault()?.FindChild(hull); if (hullFrame == null) { continue; } if (GUI.MouseOn == hullFrame || hullFrame.IsParentOf(GUI.MouseOn)) @@ -175,7 +178,7 @@ namespace Barotrauma.Items.Components foreach (Hull hull in Hull.hullList) { if (hull.Submarine == null) continue; - var hullFrame = submarineContainer.Children.First().FindChild(hull); + var hullFrame = submarineContainer.Children.FirstOrDefault()?.FindChild(hull); if (hullFrame == null) continue; hullDatas.TryGetValue(hull, out HullData hullData); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Pump.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Pump.cs index 069231f64..2632cc2cf 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Pump.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Pump.cs @@ -163,7 +163,7 @@ namespace Barotrauma.Items.Components { pumpSpeedLockTimer -= deltaTime; isActiveLockTimer -= deltaTime; - autoControlIndicator.Selected = pumpSpeedLockTimer > 0.0f || isActiveLockTimer > 0.0f; + autoControlIndicator.Selected = IsAutoControlled; PowerButton.Enabled = isActiveLockTimer <= 0.0f; if (HasPower) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs index 1604387a7..2ddb5a88f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs @@ -192,9 +192,10 @@ namespace Barotrauma.Items.Components { RelativeOffset = new Vector2(0, fissionMeter.RectTransform.RelativeOffset.Y + meterSize.Y) }, - style: "DeviceSlider", barSize: 0.1f) + style: "DeviceSlider", barSize: 0.15f) { Enabled = false, + Step = 1.0f / 255, OnMoved = (GUIScrollBar bar, float scrollAmount) => { LastUser = Character.Controlled; @@ -209,9 +210,10 @@ namespace Barotrauma.Items.Components { RelativeOffset = new Vector2(0, turbineMeter.RectTransform.RelativeOffset.Y + meterSize.Y) }, - style: "DeviceSlider", barSize: 0.1f, isHorizontal: true) + style: "DeviceSlider", barSize: 0.15f, isHorizontal: true) { Enabled = false, + Step = 1.0f / 255, OnMoved = (GUIScrollBar bar, float scrollAmount) => { LastUser = Character.Controlled; @@ -715,8 +717,14 @@ namespace Barotrauma.Items.Components targetTurbineOutput = msg.ReadRangedSingle(0.0f, 100.0f, 8); degreeOfSuccess = msg.ReadRangedSingle(0.0f, 1.0f, 8); - FissionRateScrollBar.BarScroll = targetFissionRate / 100.0f; - TurbineOutputScrollBar.BarScroll = targetTurbineOutput / 100.0f; + if (Math.Abs(FissionRateScrollBar.BarScroll - targetFissionRate / 100.0f) > 0.01f) + { + FissionRateScrollBar.BarScroll = targetFissionRate / 100.0f; + } + if (Math.Abs(TurbineOutputScrollBar.BarScroll - targetTurbineOutput / 100.0f) > 0.01f) + { + TurbineOutputScrollBar.BarScroll = targetTurbineOutput / 100.0f; + } IsActive = true; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs index 2282053b9..b7df977f6 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs @@ -18,6 +18,8 @@ namespace Barotrauma.Items.Components Disruption } + private PathFinder pathFinder; + private bool dynamicDockingIndicator = true; private bool unsentChanges; @@ -45,7 +47,7 @@ namespace Barotrauma.Items.Components private Sprite sonarBlip; private Sprite lineSprite; - private Dictionary targetIcons = new Dictionary(); + private readonly Dictionary targetIcons = new Dictionary(); private float displayBorderSize; @@ -65,7 +67,23 @@ namespace Barotrauma.Items.Components //Vector2 = vector from the ping source to the position of the disruption //float = strength of the disruption, between 0-1 - List> disruptedDirections = new List>(); + private readonly List> disruptedDirections = new List>(); + + class CachedDistance + { + public readonly Vector2 TransducerWorldPos; + public readonly Vector2 WorldPos; + public readonly float Distance; + + public CachedDistance(Vector2 transducerWorldPos, Vector2 worldPos, float dist) + { + TransducerWorldPos = transducerWorldPos; + WorldPos = worldPos; + Distance = dist; + } + } + + private readonly Dictionary markerDistances = new Dictionary(); private readonly Color positiveColor = Color.Green; private readonly Color warningColor = Color.Orange; @@ -74,7 +92,7 @@ namespace Barotrauma.Items.Components public static readonly Vector2 controlBoxSize = new Vector2(0.33f, 0.32f); public static readonly Vector2 controlBoxOffset = new Vector2(0.025f, 0); - public static readonly float sonarAreaSize = 1.09f; + private static readonly float sonarAreaSize = 1.09f; private static readonly Dictionary blipColorGradient = new Dictionary() { @@ -94,6 +112,8 @@ namespace Barotrauma.Items.Components public float DisplayRadius { get; private set; } + public static Vector2 GUISizeCalculation => Vector2.One * Math.Min(GUI.RelativeHorizontalAspectRatio, 1f) * sonarAreaSize; + partial void InitProjSpecific(XElement element) { System.Diagnostics.Debug.Assert(Enum.GetValues(typeof(BlipType)).Cast().All(t => blipColorGradient.ContainsKey(t))); @@ -254,7 +274,7 @@ namespace Barotrauma.Items.Components controlContainer.RectTransform.SetPosition(Anchor.TopLeft); sonarView.RectTransform.ScaleBasis = ScaleBasis.Smallest; sonarView.RectTransform.SetPosition(Anchor.CenterRight); - sonarView.RectTransform.Resize(Vector2.One * GUI.RelativeHorizontalAspectRatio * sonarAreaSize); + sonarView.RectTransform.Resize(GUISizeCalculation); GUITextBlock.AutoScaleAndNormalize(passiveTickBox.TextBlock, activeTickBox.TextBlock, zoomText, directionalModeSwitchText); } } @@ -490,6 +510,7 @@ namespace Barotrauma.Items.Components disruptedDirections.Clear(); foreach (AITarget t in AITarget.List) { + if (t.Entity is Character c && c.Params.HideInSonar) { continue; } if (t.SoundRange <= 0.0f || float.IsNaN(t.SoundRange) || float.IsInfinity(t.SoundRange)) { continue; } float distSqr = Vector2.DistanceSquared(t.WorldPosition, transducerCenter); @@ -652,12 +673,16 @@ namespace Barotrauma.Items.Components DrawMarker(spriteBatch, GameMain.GameSession.StartLocation.Name, "outpost", - (Level.Loaded.StartPosition - transducerCenter), displayScale, center, DisplayRadius); + GameMain.GameSession.StartLocation.Name, + Level.Loaded.StartPosition, transducerCenter, + displayScale, center, DisplayRadius); DrawMarker(spriteBatch, GameMain.GameSession.EndLocation.Name, "outpost", - (Level.Loaded.EndPosition - transducerCenter), displayScale, center, DisplayRadius); + GameMain.GameSession.EndLocation.Name, + Level.Loaded.EndPosition, transducerCenter, + displayScale, center, DisplayRadius); foreach (AITarget aiTarget in AITarget.List) { @@ -669,7 +694,9 @@ namespace Barotrauma.Items.Components DrawMarker(spriteBatch, aiTarget.SonarLabel, aiTarget.SonarIconIdentifier, - aiTarget.WorldPosition - transducerCenter, displayScale, center, DisplayRadius * 0.975f); + aiTarget, + aiTarget.WorldPosition, transducerCenter, + displayScale, center, DisplayRadius * 0.975f); } } @@ -684,7 +711,9 @@ namespace Barotrauma.Items.Components DrawMarker(spriteBatch, mission.SonarLabel, mission.SonarIconIdentifier, - sonarPosition - transducerCenter, displayScale, center, DisplayRadius * 0.95f); + mission, + sonarPosition, transducerCenter, + displayScale, center, DisplayRadius * 0.95f); } } } @@ -701,9 +730,10 @@ namespace Barotrauma.Items.Components if (sub.WorldPosition.Y > Level.Loaded.Size.Y) { continue; } DrawMarker(spriteBatch, - sub.Info.Name, + sub.Info.DisplayName, sub.Info.HasTag(SubmarineTag.Shuttle) ? "shuttle" : "submarine", - sub.WorldPosition - transducerCenter, + sub, + sub.WorldPosition, transducerCenter, displayScale, center, DisplayRadius * 0.95f); } @@ -801,8 +831,11 @@ namespace Barotrauma.Items.Components { if (Level.Loaded != null && dockingPort.Item.Submarine.WorldPosition.Y > Level.Loaded.Size.Y) { continue; } + if (dockingPort.Item.Submarine == null) { continue; } + if (dockingPort.Item.Submarine.Info.IsWreck) { continue; } + //don't show the docking ports of the opposing team on the sonar - if (item.Submarine != null && dockingPort.Item.Submarine != null) + if (item.Submarine != null) { if ((dockingPort.Item.Submarine.TeamID == Character.TeamType.Team1 && item.Submarine.TeamID == Character.TeamType.Team2) || (dockingPort.Item.Submarine.TeamID == Character.TeamType.Team2 && item.Submarine.TeamID == Character.TeamType.Team1)) @@ -947,14 +980,13 @@ namespace Barotrauma.Items.Components } foreach (AITarget aiTarget in AITarget.List) { - if (aiTarget.SonarDisruption <= 0.0f || !aiTarget.Enabled) { continue; } + float disruption = aiTarget.Entity is Character c ? c.Params.SonarDisruption : aiTarget.SonarDisruption; + if (disruption <= 0.0f || !aiTarget.Enabled) { continue; } float distSqr = Vector2.DistanceSquared(aiTarget.WorldPosition, pingSource); if (distSqr > worldPingRadiusSqr) { continue; } - float disruptionDist = (float)Math.Sqrt(distSqr); disruptedDirections.Add(new Pair((aiTarget.WorldPosition - pingSource) / disruptionDist, aiTarget.SonarDisruption)); - - CreateBlipsForDisruption(aiTarget.WorldPosition, aiTarget.SonarDisruption); + CreateBlipsForDisruption(aiTarget.WorldPosition, disruption); } } @@ -1127,6 +1159,7 @@ namespace Barotrauma.Items.Components foreach (Character c in Character.CharacterList) { if (c.AnimController.CurrentHull != null || !c.Enabled) { continue; } + if (c.Params.HideInSonar) { continue; } if (DetectSubmarineWalls && c.AnimController.CurrentHull == null && item.CurrentHull != null) { continue; } if (c.AnimController.SimplePhysicsEnabled) @@ -1298,9 +1331,42 @@ namespace Barotrauma.Items.Components sonarBlip.Draw(spriteBatch, center + pos, color * 0.5f, sonarBlip.Origin, 0, scale * 0.08f, SpriteEffects.None, 0); } - private void DrawMarker(SpriteBatch spriteBatch, string label, string iconIdentifier, Vector2 position, float scale, Vector2 center, float radius) + private void DrawMarker(SpriteBatch spriteBatch, string label, string iconIdentifier, object targetIdentifier, Vector2 worldPosition, Vector2 transducerPosition, float scale, Vector2 center, float radius) { - float dist = position.Length(); + float dist = Vector2.Distance(worldPosition, transducerPosition); + if (Vector2.DistanceSquared(worldPosition, transducerPosition) > Range * Range) + { + if (markerDistances.TryGetValue(targetIdentifier, out CachedDistance cachedDistance)) + { + if (Vector2.DistanceSquared(cachedDistance.TransducerWorldPos, transducerPosition) > 500 * 500 || + Vector2.DistanceSquared(cachedDistance.WorldPos, worldPosition) > 500 * 500) + { + markerDistances.Remove(targetIdentifier); + CalculateDistance(); + } + else + { + dist = cachedDistance.Distance; + } + } + else + { + CalculateDistance(); + } + } + + void CalculateDistance() + { + pathFinder ??= new PathFinder(WayPoint.WayPointList, indoorsSteering: false); + var path = pathFinder.FindPath(ConvertUnits.ToSimUnits(transducerPosition), ConvertUnits.ToSimUnits(worldPosition)); + if (!path.Unreachable) + { + markerDistances.Add(targetIdentifier, new CachedDistance(transducerPosition, worldPosition, path.TotalLength)); + dist = path.TotalLength; + } + } + + Vector2 position = worldPosition - transducerPosition; position *= zoom; position *= scale; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs index 6a51dc250..bbba34b4d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs @@ -390,7 +390,7 @@ namespace Barotrauma.Items.Components }; // Sonar area - steerArea = new GUICustomComponent(new RectTransform(Vector2.One * GUI.RelativeHorizontalAspectRatio * Sonar.sonarAreaSize, GuiFrame.RectTransform, Anchor.CenterRight, scaleBasis: ScaleBasis.Smallest), + steerArea = new GUICustomComponent(new RectTransform(Sonar.GUISizeCalculation, GuiFrame.RectTransform, Anchor.CenterRight, scaleBasis: ScaleBasis.Smallest), (spriteBatch, guiCustomComponent) => { DrawHUD(spriteBatch, guiCustomComponent.Rect); }, null); steerRadius = steerArea.Rect.Width / 2; @@ -667,7 +667,7 @@ namespace Barotrauma.Items.Components if (Vector2.DistanceSquared(PlayerInput.MousePosition, steerArea.Rect.Center.ToVector2()) < steerRadius * steerRadius) { - if (PlayerInput.PrimaryMouseButtonHeld() && !CrewManager.IsCommandInterfaceOpen && !GameSession.IsInfoFrameOpen) + if (PlayerInput.PrimaryMouseButtonHeld() && !CrewManager.IsCommandInterfaceOpen && !GameSession.IsTabMenuOpen) { Vector2 displaySubPos = (-sonar.DisplayOffset * sonar.Zoom) / sonar.Range * sonar.DisplayRadius * sonar.Zoom; displaySubPos.Y = -displaySubPos.Y; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Projectile.cs index 58e1a8209..765a44282 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Projectile.cs @@ -13,6 +13,8 @@ namespace Barotrauma.Items.Components bool isStuck = msg.ReadBoolean(); if (isStuck) { + ushort submarineID = msg.ReadUInt16(); + ushort hullID = msg.ReadUInt16(); Vector2 simPosition = new Vector2( msg.ReadSingle(), msg.ReadSingle()); @@ -20,7 +22,12 @@ namespace Barotrauma.Items.Components msg.ReadSingle(), msg.ReadSingle()); UInt16 entityID = msg.ReadUInt16(); - Entity entity = Entity.FindEntityByID(entityID); + + Entity entity = Entity.FindEntityByID(entityID); + Submarine submarine = Entity.FindEntityByID(submarineID) as Submarine; + Hull hull = Entity.FindEntityByID(hullID) as Hull; + item.Submarine = submarine; + item.CurrentHull = hull; item.body.SetTransform(simPosition, item.body.Rotation); if (entity is Character character) { @@ -30,12 +37,14 @@ namespace Barotrauma.Items.Components DebugConsole.ThrowError($"Failed to read a projectile update from the server. Limb index out of bounds ({limbIndex}, character: {character.ToString()})"); return; } + if (character.Removed) { return; } var limb = character.AnimController.Limbs[limbIndex]; StickToTarget(limb.body.FarseerBody, axis); } else if (entity is Structure structure) { byte bodyIndex = msg.ReadByte(); + if (bodyIndex == 255) { bodyIndex = 0; } if (bodyIndex >= structure.Bodies.Count) { DebugConsole.ThrowError($"Failed to read a projectile update from the server. Structure body index out of bounds ({bodyIndex}, structure: {structure.ToString()})"); @@ -46,6 +55,7 @@ namespace Barotrauma.Items.Components } else if (entity is Item item) { + if (item.Removed) { return; } StickToTarget(item.body.FarseerBody, axis); } else if (entity is Submarine sub) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs index 998db3672..1391bcecd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs @@ -27,6 +27,8 @@ namespace Barotrauma.Items.Components private FixActions requestStartFixAction; + public float FakeBrokenTimer; + [Serialize("", false, description: "An optional description of the needed repairs displayed in the repair interface.")] public string Description { @@ -117,9 +119,18 @@ namespace Barotrauma.Items.Components case "emitter": case "particleemitter": particleEmitters.Add(new ParticleEmitter(subElement)); - particleEmitterConditionRanges.Add(new Vector2( - subElement.GetAttributeFloat("mincondition", 0.0f), - subElement.GetAttributeFloat("maxcondition", 100.0f))); + float minCondition = subElement.GetAttributeFloat("mincondition", 0.0f); + float maxCondition = subElement.GetAttributeFloat("maxcondition", 100.0f); + + if (maxCondition < minCondition) + { + DebugConsole.ThrowError("Invalid damage particle configuration in the Repairable component of " + item.Name + ". MaxCondition needs to be larger than MinCondition."); + float temp = maxCondition; + maxCondition = minCondition; + minCondition = temp; + } + particleEmitterConditionRanges.Add(new Vector2(minCondition, maxCondition)); + break; } } @@ -127,6 +138,9 @@ namespace Barotrauma.Items.Components partial void UpdateProjSpecific(float deltaTime) { + FakeBrokenTimer -= deltaTime; + item.FakeBroken = FakeBrokenTimer > 0.0f; + if (!GameMain.IsMultiplayer) { switch (requestStartFixAction) @@ -141,10 +155,10 @@ namespace Barotrauma.Items.Components break; } } - + for (int i = 0; i < particleEmitters.Count; i++) { - if (item.ConditionPercentage >= particleEmitterConditionRanges[i].X && item.ConditionPercentage <= particleEmitterConditionRanges[i].Y) + if ((item.ConditionPercentage >= particleEmitterConditionRanges[i].X && item.ConditionPercentage <= particleEmitterConditionRanges[i].Y) || FakeBrokenTimer > 0.0f) { particleEmitters[i].Emit(deltaTime, item.WorldPosition, item.CurrentHull); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Rope.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Rope.cs index 8bd5decf7..f72793dd5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Rope.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Rope.cs @@ -66,6 +66,15 @@ namespace Barotrauma.Items.Components if (target == null) { return; } Vector2 startPos = new Vector2(source.DrawPosition.X, -source.DrawPosition.Y); + var turret = source?.GetComponent(); + if (turret != null) + { + startPos = new Vector2(source.WorldRect.X + turret.TransformedBarrelPos.X, -(source.WorldRect.Y - turret.TransformedBarrelPos.Y)); + if (turret.BarrelSprite != null) + { + startPos += new Vector2((float)Math.Cos(turret.Rotation), (float)Math.Sin(turret.Rotation)) * turret.BarrelSprite.size.Y * turret.BarrelSprite.RelativeOrigin.Y * item.Scale * 0.9f; + } + } Vector2 endPos = new Vector2(target.DrawPosition.X, -target.DrawPosition.Y); if (Snapped) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Connection.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Connection.cs index 01cbec3df..4184e554e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Connection.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Connection.cs @@ -379,7 +379,7 @@ namespace Barotrauma.Items.Components ConnectionPanel.HighlightedWire = wire; bool allowRewiring = GameMain.NetworkMember?.ServerSettings == null || GameMain.NetworkMember.ServerSettings.AllowRewiring; - if (allowRewiring && !wire.Locked && (!panel.Locked || Screen.Selected == GameMain.SubEditorScreen)) + if (allowRewiring && (!wire.Locked && !panel.Locked || Screen.Selected == GameMain.SubEditorScreen)) { //start dragging the wire if (PlayerInput.PrimaryMouseButtonHeld()) { DraggingConnected = wire; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs index 16e806bb2..0cfef7f33 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs @@ -56,15 +56,6 @@ namespace Barotrauma.Items.Components }; } - public override void OnItemLoaded() - { - base.OnItemLoaded(); - if (!string.IsNullOrEmpty(DisplayedWelcomeMessage)) - { - ShowOnDisplay(DisplayedWelcomeMessage); - } - } - private void SendOutput(string input) { if (input.Length > MaxMessageLength) @@ -123,6 +114,11 @@ namespace Barotrauma.Items.Components public override void AddToGUIUpdateList() { base.AddToGUIUpdateList(); + if (!string.IsNullOrEmpty(DisplayedWelcomeMessage)) + { + ShowOnDisplay(DisplayedWelcomeMessage); + DisplayedWelcomeMessage = ""; + } if (shouldSelectInputBox) { inputBox.Select(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Wire.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Wire.cs index bf7dd68a1..fc67bfeac 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Wire.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Wire.cs @@ -17,14 +17,60 @@ namespace Barotrauma.Items.Components partial class WireSection { + public VertexPositionColorTexture[] vertices; + public VertexPositionColorTexture[] shiftedVertices; + + private float cachedWidth = 0f; + + private void RecalculateVertices(Wire wire, float width) + { + if (MathUtils.NearlyEqual(cachedWidth, width)) { return; } + cachedWidth = width; + + vertices = new VertexPositionColorTexture[4]; + + Vector2 expandDir = start-end; + expandDir.Normalize(); + float temp = expandDir.X; + expandDir.X = -expandDir.Y; + expandDir.Y = -temp; + + Rectangle srcRect = wire.wireSprite.SourceRect; + + expandDir *= width * srcRect.Height * 0.5f; + + Vector2 rectLocation = srcRect.Location.ToVector2(); + Vector2 rectSize = srcRect.Size.ToVector2(); + Vector2 textureSize = new Vector2(wire.wireSprite.Texture.Width, wire.wireSprite.Texture.Height); + + Vector2 topLeftUv = rectLocation / textureSize; + Vector2 bottomRightUv = (rectLocation + rectSize) / textureSize; + + Vector2 invStart = new Vector2(start.X, -start.Y); + Vector2 invEnd = new Vector2(end.X, -end.Y); + + vertices[0] = new VertexPositionColorTexture(new Vector3(invStart + expandDir, 0f), Color.White, topLeftUv); + vertices[2] = new VertexPositionColorTexture(new Vector3(invEnd + expandDir, 0f), Color.White, new Vector2(bottomRightUv.X, topLeftUv.Y)); + vertices[1] = new VertexPositionColorTexture(new Vector3(invStart - expandDir, 0f), Color.White, new Vector2(topLeftUv.X, bottomRightUv.Y)); + vertices[3] = new VertexPositionColorTexture(new Vector3(invEnd - expandDir, 0f), Color.White, bottomRightUv); + + shiftedVertices = (VertexPositionColorTexture[])vertices.Clone(); + } + public void Draw(SpriteBatch spriteBatch, Wire wire, Color color, Vector2 offset, float depth, float width = 0.3f) { + if (width <= 0f) { return; } + RecalculateVertices(wire, width); + + for (int i=0;i wires) { + var doubleClicked = PlayerInput.DoubleClicked(); + Wire equippedWire = Character.Controlled?.SelectedItems[0]?.GetComponent() ?? Character.Controlled?.SelectedItems[1]?.GetComponent(); - if (equippedWire != null) + if (equippedWire != null && GUI.MouseOn == null) { if (PlayerInput.PrimaryMouseButtonClicked() && Character.Controlled.SelectedConstruction == null) { @@ -252,7 +300,7 @@ namespace Barotrauma.Items.Components } //dragging a node of some wire - if (draggingWire != null) + if (draggingWire != null && !doubleClicked) { if (Character.Controlled != null) { @@ -283,15 +331,18 @@ namespace Barotrauma.Items.Components if (selectedNodeIndex.HasValue) { - nodeWorldPos.X = MathUtils.Round(nodeWorldPos.X, Submarine.GridSize.X / 2.0f); - nodeWorldPos.Y = MathUtils.Round(nodeWorldPos.Y, Submarine.GridSize.Y / 2.0f); + if (!PlayerInput.IsShiftDown()) + { + nodeWorldPos.X = MathUtils.Round(nodeWorldPos.X, Submarine.GridSize.X / 2.0f); + nodeWorldPos.Y = MathUtils.Round(nodeWorldPos.Y, Submarine.GridSize.Y / 2.0f); + } draggingWire.nodes[(int)selectedNodeIndex] = nodeWorldPos; draggingWire.UpdateSections(); } else { - if (Vector2.DistanceSquared(nodeWorldPos, draggingWire.nodes[(int)highlightedNodeIndex]) > Submarine.GridSize.X * Submarine.GridSize.X) + if (Vector2.DistanceSquared(nodeWorldPos, draggingWire.nodes[(int)highlightedNodeIndex]) > Submarine.GridSize.X * Submarine.GridSize.X || PlayerInput.IsShiftDown()) { selectedNodeIndex = highlightedNodeIndex; } @@ -304,6 +355,8 @@ namespace Barotrauma.Items.Components return; } + bool updateHighlight = true; + //a wire has been selected -> check if we should start dragging one of the nodes float nodeSelectDist = 10, sectionSelectDist = 5; highlightedNodeIndex = null; @@ -359,6 +412,37 @@ namespace Barotrauma.Items.Components { selectedWire.nodes.RemoveAt(closestIndex); selectedWire.UpdateSections(); + } + // if only one end of the wire is disconnect pick it back up with double click + else if (doubleClicked && equippedWire == null && Character.Controlled != null && selectedWire.connections.Any(conn => conn != null)) + { + if (selectedWire.connections[0] == null && closestIndex == 0 || selectedWire.connections[1] == null && closestIndex == selectedWire.nodes.Count - 1) + { + selectedWire.IsActive = true; + selectedWire.nodes.RemoveAt(closestIndex); + selectedWire.UpdateSections(); + + // flip the wire + if (closestIndex == 0) + { + selectedWire.nodes.Reverse(); + selectedWire.connections[0] = selectedWire.connections[1]; + selectedWire.connections[1] = null; + } + + selectedWire.shouldClearConnections = false; + Character.Controlled.Inventory.TryPutItem(selectedWire.item, Character.Controlled, new List { InvSlotType.LeftHand, InvSlotType.RightHand }); + foreach (var entity in MapEntity.mapEntityList) + { + if (entity is Item item) + { + item.GetComponent()?.DisconnectedWires.Remove(selectedWire); + } + } + MapEntity.SelectedList.Clear(); + selectedWire.shouldClearConnections = true; + updateHighlight = false; + } } } } @@ -400,7 +484,7 @@ namespace Barotrauma.Items.Components } } - if (highlighted != null) + if (highlighted != null && updateHighlight) { highlighted.item.IsHighlighted = true; if (PlayerInput.PrimaryMouseButtonClicked()) @@ -411,6 +495,20 @@ namespace Barotrauma.Items.Components } } + public bool IsMouseOn() + { + if (GUI.MouseOn == null) + { + Vector2 mousePos = GameMain.SubEditorScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); + if (item.Submarine != null) { mousePos -= (item.Submarine.Position + item.Submarine.HiddenSubPosition); } + + if (GetClosestNodeIndex(mousePos, 10, out _) > -1) { return true; } + if (GetClosestSectionIndex(mousePos, 10, out _) > -1) { return true; } + } + + return false; + } + public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) { int eventIndex = msg.ReadRangedInteger(0, (int)Math.Ceiling(MaxNodeCount / (float)MaxNodesPerNetworkEvent)); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs index 4b35cf0e6..bbf51b8e4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs @@ -5,7 +5,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -19,6 +19,8 @@ namespace Barotrauma.Items.Components private float recoilTimer; + private float RetractionTime => Math.Max(Reload * RetractionDurationMultiplier, RecoilTime); + private RoundSound startMoveSound, endMoveSound, moveSound; private SoundChannel moveSoundChannel; @@ -83,6 +85,11 @@ namespace Barotrauma.Items.Components } } + public Sprite BarrelSprite + { + get { return barrelSprite; } + } + partial void InitProjSpecific(XElement element) { foreach (XElement subElement in element.Elements()) @@ -126,7 +133,7 @@ namespace Barotrauma.Items.Components partial void LaunchProjSpecific() { - recoilTimer = Math.Max(Reload, 0.1f); + recoilTimer = RetractionTime; PlaySound(ActionType.OnUse); Vector2 particlePos = new Vector2(item.WorldRect.X + transformedBarrelPos.X, item.WorldRect.Y - transformedBarrelPos.Y); foreach (ParticleEmitter emitter in particleEmitters) @@ -135,6 +142,12 @@ namespace Barotrauma.Items.Components } } + public override void UpdateBroken(float deltaTime, Camera cam) + { + base.UpdateBroken(deltaTime, cam); + recoilTimer -= deltaTime; + } + partial void UpdateProjSpecific(float deltaTime) { recoilTimer -= deltaTime; @@ -232,15 +245,21 @@ namespace Barotrauma.Items.Components float recoilOffset = 0.0f; if (Math.Abs(RecoilDistance) > 0.0f && recoilTimer > 0.0f) { - //move the barrel backwards 0.1 seconds after launching - if (recoilTimer >= Math.Max(Reload, 0.1f) - 0.1f) + float diff = RetractionTime - RecoilTime; + if (recoilTimer >= diff) { - recoilOffset = RecoilDistance * (1.0f - (recoilTimer - (Math.Max(Reload, 0.1f) - 0.1f)) / 0.1f); + //move the barrel backwards 0.1 seconds (defined by RecoilTime) after launching + recoilOffset = RecoilDistance * (1.0f - (recoilTimer - diff) / RecoilTime); + } + else if (recoilTimer <= diff - RetractionDelay) + { + //move back to normal position while reloading + float t = diff - RetractionDelay; + recoilOffset = RecoilDistance * recoilTimer / t; } - //move back to normal position while reloading else { - recoilOffset = RecoilDistance * recoilTimer / (Math.Max(Reload, 0.1f) - 0.1f); + recoilOffset = RecoilDistance; } } @@ -504,7 +523,7 @@ namespace Barotrauma.Items.Components public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) { UInt16 projectileID = msg.ReadUInt16(); - float newTargetRotation = msg.ReadRangedSingle(minRotation, maxRotation, 8); + float newTargetRotation = msg.ReadRangedSingle(minRotation, maxRotation, 16); if (Character.Controlled == null || user != Character.Controlled) { @@ -514,13 +533,21 @@ namespace Barotrauma.Items.Components //projectile removed, do nothing if (projectileID == 0) { return; } - if (!(Entity.FindEntityByID(projectileID) is Item projectile)) + //ID ushort.MaxValue = launched without a projectile + if (projectileID == ushort.MaxValue) { - DebugConsole.ThrowError("Failed to launch a projectile - item with the ID \"" + projectileID + " not found"); - return; + Launch(null); + } + else + { + if (!(Entity.FindEntityByID(projectileID) is Item projectile)) + { + DebugConsole.ThrowError("Failed to launch a projectile - item with the ID \"" + projectileID + " not found"); + return; + } + Launch(projectile, launchRotation: newTargetRotation); } - Launch(projectile); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs index 370dde2e6..11b3c45b6 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs @@ -31,7 +31,7 @@ namespace Barotrauma public Sprite SlotSprite; - public Keys QuickUseKey; + public int InventoryKeyIndex = -1; public int SubInventoryDir = -1; @@ -191,7 +191,7 @@ namespace Barotrauma public Item Item; public bool IsSubSlot; public string Tooltip; - public List TooltipColorData; + public List TooltipRichTextData; public SlotReference(Inventory parentInventory, InventorySlot slot, int slotIndex, bool isSubSlot, Inventory subInventory = null) { @@ -201,7 +201,7 @@ namespace Barotrauma Inventory = subInventory; IsSubSlot = isSubSlot; Item = ParentInventory.Items[slotIndex]; - TooltipColorData = ColorData.GetColorData(GetTooltip(Item), out Tooltip); + TooltipRichTextData = RichTextData.GetRichTextData(GetTooltip(Item), out Tooltip); } private string GetTooltip(Item item) @@ -450,12 +450,33 @@ namespace Barotrauma } }*/ - bool mouseOn = interactRect.Contains(PlayerInput.MousePosition) && !Locked && !mouseOnGUI; + bool mouseOn = interactRect.Contains(PlayerInput.MousePosition) && !Locked && !mouseOnGUI && !slot.Disabled; + + // Delete item from container in sub editor + if (SubEditorScreen.IsSubEditor() && PlayerInput.IsCtrlDown()) + { + draggingItem = null; + var mouseDrag = SubEditorScreen.MouseDragStart != Vector2.Zero && Vector2.Distance(PlayerInput.MousePosition, SubEditorScreen.MouseDragStart) >= GUI.Scale * 20; + if (mouseOn && (PlayerInput.PrimaryMouseButtonClicked() || mouseDrag)) + { + if (item != null) + { + if (mouseDrag) { item.OwnInventory?.DeleteAllItems(); } + slot.ShowBorderHighlight(GUI.Style.Red, 0.1f, 0.4f); + if (!mouseDrag) + { + GUI.PlayUISound(GUISoundType.PickItem); + } + item.Remove(); + } + } + } + if (PlayerInput.LeftButtonHeld() && PlayerInput.RightButtonHeld()) { mouseOn = false; } - + if (selectedSlot != null && selectedSlot.Slot != slot) { //subinventory slot highlighted -> don't allow highlighting this one @@ -476,11 +497,14 @@ namespace Barotrauma // && //(highlightedSubInventories.Count == 0 || highlightedSubInventories.Contains(this) || highlightedSubInventorySlot?.Slot == slot || highlightedSubInventory.Owner == item)) { + slot.State = GUIComponent.ComponentState.Hover; if (selectedSlot == null || (!selectedSlot.IsSubSlot && isSubSlot)) { - selectedSlot = new SlotReference(this, slot, slotIndex, isSubSlot, Items[slotIndex]?.GetComponent()?.Inventory); + var slotRef = new SlotReference(this, slot, slotIndex, isSubSlot, Items[slotIndex]?.GetComponent()?.Inventory); + if (Screen.Selected is SubEditorScreen editor && !editor.WiringMode && slotRef.ParentInventory is CharacterInventory) { return; } + selectedSlot = slotRef; } if (draggingItem == null) @@ -668,18 +692,34 @@ namespace Barotrauma DrawSlot(spriteBatch, this, slots[i], Items[i], i, drawItem); } } + + /// + /// Check if the mouse is hovering on top of the slot + /// + /// The desired slot we want to check + /// True if our mouse is hover on the slot, false otherwise + public static bool IsMouseOnSlot(InventorySlot slot) + { + var rect = new Rectangle(slot.InteractRect.X, slot.InteractRect.Y, slot.InteractRect.Width, slot.InteractRect.Height); + rect.Offset(slot.DrawOffset); + return rect.Contains(PlayerInput.MousePosition); + } /// /// Is the mouse on any inventory element (slot, equip button, subinventory...) /// /// - public static bool IsMouseOnInventory() + public static bool IsMouseOnInventory(bool ignoreDraggedItem = false) { - if (Character.Controlled == null) return false; + var isSubEditor = Screen.Selected is SubEditorScreen editor && !editor.WiringMode; + if (Character.Controlled == null) { return false; } - if (draggingItem != null || DraggingInventory != null) return true; + if (!ignoreDraggedItem) + { + if (draggingItem != null || DraggingInventory != null) { return true; } + } - if (Character.Controlled.Inventory != null) + if (Character.Controlled.Inventory != null && !isSubEditor) { var inv = Character.Controlled.Inventory; for (var i = 0; i < inv.slots.Length; i++) @@ -699,7 +739,8 @@ namespace Barotrauma } } } - if (Character.Controlled.SelectedCharacter?.Inventory != null) + + if (Character.Controlled.SelectedCharacter?.Inventory != null && !isSubEditor) { var inv = Character.Controlled.SelectedCharacter.Inventory; for (var i = 0; i < inv.slots.Length; i++) @@ -830,9 +871,9 @@ namespace Barotrauma return CursorState.Default; } - protected static void DrawToolTip(SpriteBatch spriteBatch, string toolTip, Rectangle highlightedSlot, List colorData = null) + protected static void DrawToolTip(SpriteBatch spriteBatch, string toolTip, Rectangle highlightedSlot, List richTextData = null) { - GUIComponent.DrawToolTip(spriteBatch, toolTip, highlightedSlot, colorData); + GUIComponent.DrawToolTip(spriteBatch, toolTip, highlightedSlot, richTextData); } public void DrawSubInventory(SpriteBatch spriteBatch, int slotIndex) @@ -928,7 +969,8 @@ namespace Barotrauma { Character.Controlled.ClearInputs(); - if (CharacterHealth.OpenHealthWindow != null && + if (!IsMouseOnInventory(ignoreDraggedItem: true) && + CharacterHealth.OpenHealthWindow != null && CharacterHealth.OpenHealthWindow.OnItemDropped(draggingItem, false)) { draggingItem = null; @@ -946,8 +988,33 @@ namespace Barotrauma } else { - GUI.PlayUISound(GUISoundType.DropItem); - draggingItem.Drop(Character.Controlled); + bool removed = false; + if (Screen.Selected is SubEditorScreen editor) + { + if (editor.EntityMenu.Rect.Contains(PlayerInput.MousePosition)) + { + draggingItem.Remove(); + removed = true; + } + else + { + if (editor.WiringMode) + { + draggingItem.Remove(); + removed = true; + } + else + { + draggingItem.Drop(Character.Controlled); + } + } + } + else + { + draggingItem.Drop(Character.Controlled); + } + + GUI.PlayUISound(removed ? GUISoundType.PickItem : GUISoundType.DropItem); } } else if (selectedSlot.ParentInventory.Items[selectedSlot.SlotIndex] != draggingItem) @@ -1015,7 +1082,7 @@ namespace Barotrauma protected static Rectangle GetSubInventoryHoverArea(SlotReference subSlot) { Rectangle hoverArea; - if (!subSlot.Inventory.Movable()) + if (!subSlot.Inventory.Movable() || Character.Controlled?.Inventory == subSlot.ParentInventory && !Character.Controlled.HasEquippedItem(subSlot.Item)) { hoverArea = subSlot.Slot.Rect; hoverArea.Location += subSlot.Slot.DrawOffset.ToPoint(); @@ -1038,7 +1105,9 @@ namespace Barotrauma } if (subSlot.Slot.SubInventoryDir < 0) { - hoverArea.Height -= hoverArea.Bottom - subSlot.Slot.Rect.Bottom; + // 24/2/2020 - the below statement makes the sub inventory extend all the way to the bottom of the screen because of a double negative + // Not sure if it's intentional or not but it was causing hover issues and disabling it seems to have no detrimental effects. + // hoverArea.Height -= hoverArea.Bottom - subSlot.Slot.Rect.Bottom; } else { @@ -1088,7 +1157,7 @@ namespace Barotrauma string toolTip = mouseOnHealthInterface ? TextManager.Get("QuickUseAction.UseTreatment") : Character.Controlled.FocusedItem != null ? TextManager.GetWithVariable("PutItemIn", "[itemname]", Character.Controlled.FocusedItem.Name, true) : - TextManager.Get("DropItem"); + TextManager.Get(Screen.Selected is SubEditorScreen editor && editor.EntityMenu.Rect.Contains(PlayerInput.MousePosition) ? "Delete" : "DropItem"); int textWidth = (int)Math.Max(GUI.Font.MeasureString(draggingItem.Name).X, GUI.SmallFont.MeasureString(toolTip).X); int textSpacing = (int)(15 * GUI.Scale); Point shadowBorders = (new Point(40, 10)).Multiply(GUI.Scale); @@ -1111,7 +1180,7 @@ namespace Barotrauma { Rectangle slotRect = selectedSlot.Slot.Rect; slotRect.Location += selectedSlot.Slot.DrawOffset.ToPoint(); - DrawToolTip(spriteBatch, selectedSlot.Tooltip, slotRect, selectedSlot.TooltipColorData); + DrawToolTip(spriteBatch, selectedSlot.Tooltip, slotRect, selectedSlot.TooltipRichTextData); } } @@ -1154,6 +1223,11 @@ namespace Barotrauma if (inventory != null && inventory.Locked) { slotColor = Color.Gray * 0.5f; } spriteBatch.Draw(slotSprite.Texture, rect, slotSprite.SourceRect, slotColor); + + if (SubEditorScreen.IsSubEditor() && PlayerInput.IsCtrlDown() && selectedSlot?.Slot == slot) + { + GUI.DrawRectangle(spriteBatch, rect, GUI.Style.Red * 0.3f, isFilled: true); + } bool canBePut = false; @@ -1181,7 +1255,7 @@ namespace Barotrauma if (item != null && drawItem) { - if (!item.IsFullCondition && (itemContainer == null || !itemContainer.ShowConditionInContainedStateIndicator)) + if (!item.IsFullCondition && !item.Prefab.HideConditionBar && (itemContainer == null || !itemContainer.ShowConditionInContainedStateIndicator)) { GUI.DrawRectangle(spriteBatch, new Rectangle(rect.X, rect.Bottom - 8, rect.Width, 8), Color.Black * 0.8f, true); GUI.DrawRectangle(spriteBatch, @@ -1308,10 +1382,10 @@ namespace Barotrauma if (inventory != null && !inventory.Locked && Character.Controlled?.Inventory == inventory && - slot.QuickUseKey != Keys.None) + slot.InventoryKeyIndex != -1) { spriteBatch.Draw(slotHotkeySprite.Texture, rect.ScaleSize(1.15f), slotHotkeySprite.SourceRect, slotColor); - GUI.DrawString(spriteBatch, rect.Location.ToVector2() + new Vector2((int)(4.25f * UIScale), (int)Math.Ceiling(-1.5f * UIScale)), slot.QuickUseKey.ToString().Substring(1, 1), Color.Black, font: GUI.HotkeyFont); + GUI.DrawString(spriteBatch, rect.Location.ToVector2() + new Vector2((int)(4.25f * UIScale), (int)Math.Ceiling(-1.5f * UIScale)), GameMain.Config.InventoryKeyBind(slot.InventoryKeyIndex).Name, Color.Black, font: GUI.HotkeyFont); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs index 4f5d60369..afb63312a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs @@ -32,17 +32,28 @@ namespace Barotrauma private readonly Dictionary spriteAnimState = new Dictionary(); + public bool FakeBroken; + private Sprite activeSprite; public override Sprite Sprite { get { return activeSprite; } } - public override bool DrawOverWater + public override Rectangle Rect { - get { return base.DrawOverWater || (GetComponent() != null && IsSelected); } + get { return base.Rect; } + set + { + cachedVisibleSize = null; + base.Rect = value; + } } + public override bool DrawBelowWater => (!(Screen.Selected is SubEditorScreen editor) || !editor.WiringMode || !isWire) && base.DrawBelowWater; + + public override bool DrawOverWater => base.DrawOverWater || (IsSelected || Screen.Selected is SubEditorScreen editor && editor.WiringMode) && isWire; + private GUITextBlock itemInUseWarning; private GUITextBlock ItemInUseWarning { @@ -62,6 +73,10 @@ namespace Barotrauma { get { + if (!GameMain.SubEditorScreen.ShowThalamus && prefab.Category.HasFlag(MapEntityCategory.Thalamus)) + { + return false; + } return parentInventory == null && (body == null || body.Enabled) && ShowItems; } } @@ -156,6 +171,14 @@ namespace Barotrauma decorativeSprite.Sprite.EnsureLazyLoaded(); spriteAnimState.Add(decorativeSprite, new DecorativeSprite.State()); } + UpdateSpriteStates(0.0f); + } + + private Vector2? cachedVisibleSize; + + public void ResetCachedVisibleSize() + { + cachedVisibleSize = null; } public override bool IsVisible(Rectangle worldView) @@ -167,19 +190,28 @@ namespace Barotrauma } //no drawable components and the body has been disabled = nothing to draw - if (drawableComponents.Count == 0 && body != null && !body.Enabled) + if (!hasComponentsToDraw && body != null && !body.Enabled) { return false; } - float padding = 100.0f; - Vector2 size = new Vector2(rect.Width + padding, rect.Height + padding); - foreach (IDrawableComponent drawable in drawableComponents) + Vector2 size; + if (cachedVisibleSize.HasValue) { - size.X = Math.Max(drawable.DrawSize.X, size.X); - size.Y = Math.Max(drawable.DrawSize.Y, size.Y); + size = cachedVisibleSize.Value; + } + else + { + float padding = 100.0f; + size = new Vector2(rect.Width + padding, rect.Height + padding); + foreach (IDrawableComponent drawable in drawableComponents) + { + size.X = Math.Max(drawable.DrawSize.X, size.X); + size.Y = Math.Max(drawable.DrawSize.Y, size.Y); + } + size *= 0.5f; + cachedVisibleSize = size; } - size *= 0.5f; //cache world position so we don't need to calculate it 4 times Vector2 worldPosition = WorldPosition; @@ -199,7 +231,8 @@ namespace Barotrauma BrokenItemSprite fadeInBrokenSprite = null; float fadeInBrokenSpriteAlpha = 0.0f; - if (condition < Prefab.Health) + float displayCondition = FakeBroken ? 0.0f : condition; + if (displayCondition < Prefab.Health) { for (int i = 0; i < Prefab.BrokenSprites.Count; i++) { @@ -207,14 +240,14 @@ namespace Barotrauma { float min = i > 0 ? Prefab.BrokenSprites[i - i].MaxCondition : 0.0f; float max = Prefab.BrokenSprites[i].MaxCondition; - fadeInBrokenSpriteAlpha = 1.0f - ((condition - min) / (max - min)); + fadeInBrokenSpriteAlpha = 1.0f - ((displayCondition - min) / (max - min)); if (fadeInBrokenSpriteAlpha > 0.0f && fadeInBrokenSpriteAlpha < 1.0f) { fadeInBrokenSprite = Prefab.BrokenSprites[i]; } continue; } - if (condition <= Prefab.BrokenSprites[i].MaxCondition) + if (displayCondition <= Prefab.BrokenSprites[i].MaxCondition) { activeSprite = Prefab.BrokenSprites[i].Sprite; break; @@ -262,7 +295,7 @@ namespace Barotrauma float rotation = decorativeSprite.GetRotation(ref spriteAnimState[decorativeSprite].RotationState); Vector2 offset = decorativeSprite.GetOffset(ref spriteAnimState[decorativeSprite].OffsetState) * Scale; decorativeSprite.Sprite.Draw(spriteBatch, new Vector2(DrawPosition.X + offset.X, -(DrawPosition.Y + offset.Y)), color, - SpriteRotation + rotation, Scale, activeSprite.effects, + SpriteRotation + rotation, decorativeSprite.Scale * Scale, activeSprite.effects, depth: Math.Min(depth + (decorativeSprite.Sprite.Depth - activeSprite.Depth), 0.999f)); } } @@ -306,7 +339,7 @@ namespace Barotrauma Vector2 transformedOffset = new Vector2(ca * offset.X + sa * offset.Y, -sa * offset.X + ca * offset.Y); decorativeSprite.Sprite.Draw(spriteBatch, new Vector2(DrawPosition.X + transformedOffset.X, -(DrawPosition.Y + transformedOffset.Y)), color, - -body.Rotation + rotation, Scale, activeSprite.effects, + -body.Rotation + rotation, decorativeSprite.Scale * Scale, activeSprite.effects, depth: depth + (decorativeSprite.Sprite.Depth - activeSprite.Depth)); } } @@ -671,6 +704,13 @@ namespace Barotrauma HUDLayoutSettings.ChatBoxArea.Width + disallowedPadding, HUDLayoutSettings.ChatBoxArea.Height)); } + if (Screen.Selected is SubEditorScreen editor) + { + disallowedAreas.Add(editor.EntityMenu.Rect); + disallowedAreas.Add(editor.TopPanel.Rect); + disallowedAreas.Add(editor.ToggleEntityMenuButton.Rect); + } + GUI.PreventElementOverlap(elementsToMove, disallowedAreas, new Rectangle( 0, 20, @@ -826,19 +866,21 @@ namespace Barotrauma } readonly List texts = new List(); - public List GetHUDTexts(Character character) + public List GetHUDTexts(Character character, bool recreateHudTexts = true) { + // Always create the texts if they have not yet been created + if (texts.Any() && !recreateHudTexts) { return texts; } texts.Clear(); foreach (ItemComponent ic in components) { - if (string.IsNullOrEmpty(ic.DisplayMsg)) continue; - if (!ic.CanBePicked && !ic.CanBeSelected) continue; - if (ic is Holdable holdable && !holdable.CanBeDeattached()) continue; + if (string.IsNullOrEmpty(ic.DisplayMsg)) { continue; } + if (!ic.CanBePicked && !ic.CanBeSelected) { continue; } + if (ic is Holdable holdable && !holdable.CanBeDeattached()) { continue; } Color color = Color.Gray; if (ic.HasRequiredItems(character, false)) { - if (ic is Repairable repairable) + if (ic is Repairable) { if (!IsFullCondition) { color = Color.Cyan; } } @@ -847,9 +889,12 @@ namespace Barotrauma color = Color.Cyan; } } - texts.Add(new ColoredText(ic.DisplayMsg, color, false)); } + if ((PlayerInput.KeyDown(Keys.LeftShift) || PlayerInput.KeyDown(Keys.RightShift)) && CrewManager.DoesItemHaveContextualOrders(this)) + { + texts.Add(new ColoredText(TextManager.ParseInputTypes(TextManager.Get("itemmsgcontextualorders")), Color.Cyan, false)); + } return texts; } @@ -857,17 +902,17 @@ namespace Barotrauma { if (Screen.Selected is SubEditorScreen) { - if (editingHUD != null && editingHUD.UserData == this) editingHUD.AddToGUIUpdateList(); + if (editingHUD != null && editingHUD.UserData == this) { editingHUD.AddToGUIUpdateList(); } } else { if (HasInGameEditableProperties) { - if (editingHUD != null && editingHUD.UserData == this) editingHUD.AddToGUIUpdateList(); + if (editingHUD != null && editingHUD.UserData == this) { editingHUD.AddToGUIUpdateList(); } } } - if (Character.Controlled != null && Character.Controlled?.SelectedConstruction != this) return; + if (Character.Controlled != null && Character.Controlled?.SelectedConstruction != this) { return; } bool needsLayoutUpdate = false; foreach (ItemComponent ic in activeHUDs) @@ -1213,8 +1258,8 @@ namespace Barotrauma { if (itemContainerIndex < 0 || itemContainerIndex >= parentItem.components.Count) { - string errorMsg = "Failed to spawn item \"" + (itemIdentifier ?? "null") + - "\" in the inventory of \"" + parentItem.prefab.Identifier + "\" (component index out of range). Index: " + itemContainerIndex + ", components: " + parentItem.components.Count + "."; + string errorMsg = + $"Failed to spawn item \"{(itemIdentifier ?? "null")}\" in the inventory of \"{parentItem.prefab.Identifier} ({parentItem.ID})\" (component index out of range). Index: {itemContainerIndex}, components: {parentItem.components.Count}."; GameAnalyticsManager.AddErrorEventOnce("Item.ReadSpawnData:ContainerIndexOutOfRange" + (itemName ?? "null") + (itemIdentifier ?? "null"), GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs index 04bd09373..1b11c5ead 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs @@ -66,16 +66,17 @@ namespace Barotrauma [Serialize("", false)] public string ImpactSoundTag { get; private set; } - public override void UpdatePlacing(Camera cam) { Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); - + if (PlayerInput.SecondaryMouseButtonClicked()) { selected = null; return; } + + var potentialContainer = MapEntity.GetPotentialContainer(position); if (!ResizeHorizontal && !ResizeVertical) { @@ -88,6 +89,14 @@ namespace Barotrauma item.SetTransform(ConvertUnits.ToSimUnits(Submarine.MainSub == null ? item.Position : item.Position - Submarine.MainSub.Position), 0.0f); item.FindHull(); + if (PlayerInput.IsShiftDown()) + { + if (potentialContainer?.OwnInventory?.TryPutItem(item, Character.Controlled) ?? false) + { + GUI.PlayUISound(GUISoundType.PickItem); + } + } + placePosition = Vector2.Zero; return; } @@ -124,6 +133,12 @@ namespace Barotrauma } } + if (potentialContainer != null) + { + potentialContainer.IsHighlighted = true; + } + + //if (PlayerInput.GetMouseState.RightButton == ButtonState.Pressed) selected = null; } @@ -141,26 +156,10 @@ namespace Barotrauma if (!ResizeHorizontal && !ResizeVertical) { sprite.Draw(spriteBatch, new Vector2(position.X, -position.Y) + sprite.size / 2.0f * Scale, SpriteColor, scale: Scale); - } else { - Vector2 placeSize = size; - if (placePosition == Vector2.Zero) - { - if (PlayerInput.PrimaryMouseButtonHeld()) placePosition = position; - } - else - { - if (ResizeHorizontal) - placeSize.X = Math.Max(position.X - placePosition.X, size.X); - if (ResizeVertical) - placeSize.Y = Math.Max(placePosition.Y - position.Y, size.Y); - - position = placePosition; - } - - if (sprite != null) sprite.DrawTiled(spriteBatch, new Vector2(position.X, -position.Y), placeSize, color: SpriteColor); + sprite?.DrawTiled(spriteBatch, new Vector2(position.X, -position.Y), size, color: SpriteColor); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/FireSource.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/FireSource.cs index 03751e45e..c007fc16f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/FireSource.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/FireSource.cs @@ -60,10 +60,10 @@ namespace Barotrauma var particle = GameMain.ParticleManager.CreateParticle("flame", particlePos, particleVel, 0.0f, hull); - if (particle == null) continue; + if (particle == null) { continue; } //make some of the particles create another firesource when they enter another hull - if (Rand.Int(20) == 1) particle.OnChangeHull = onChangeHull; + if (Rand.Int(20) == 1) { particle.OnChangeHull = onChangeHull; } particle.Size *= MathHelper.Clamp(size.X / 60.0f * Math.Max(hull.Oxygen / hull.Volume, 0.4f), 0.5f, 1.0f); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Gap.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Gap.cs index ac8c01edf..c9101a9fc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Gap.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Gap.cs @@ -2,6 +2,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; +using System.Linq; namespace Barotrauma { @@ -24,7 +25,7 @@ namespace Barotrauma public override void Draw(SpriteBatch sb, bool editing, bool back = true) { - if (!GameMain.DebugDraw && Screen.Selected.Cam.Zoom > 0.1f) + if (GameMain.DebugDraw && Screen.Selected.Cam.Zoom > 0.1f) { Vector2 center = new Vector2(WorldRect.X + rect.Width / 2.0f, -(WorldRect.Y - rect.Height / 2.0f)); GUI.DrawLine(sb, center, center + new Vector2(flowForce.X, -flowForce.Y) / 10.0f, GUI.Style.Red); @@ -121,24 +122,36 @@ namespace Barotrauma partial void EmitParticles(float deltaTime) { - if (flowTargetHull == null) return; - + if (flowTargetHull == null) { return; } + + if (linkedTo.Count == 2 && linkedTo[0] is Hull hull1 && linkedTo[1] is Hull hull2) + { + //no flow particles between linked hulls (= rooms consisting of multiple hulls) + if (hull1.linkedTo.Contains(hull2)) { return; } + if (hull1.linkedTo.Any(h => h.linkedTo.Contains(hull1) && h.linkedTo.Contains(hull2))) { return; } + if (hull2.linkedTo.Any(h => h.linkedTo.Contains(hull1) && h.linkedTo.Contains(hull2))) { return; } + } + Vector2 pos = Position; if (IsHorizontal) { pos.X += Math.Sign(flowForce.X); - pos.Y = MathHelper.Clamp((higherSurface + lowerSurface) / 2.0f, rect.Y - rect.Height, rect.Y) + 10; + pos.Y = MathHelper.Clamp(Rand.Range(higherSurface, lowerSurface), rect.Y - rect.Height, rect.Y); } else { pos.Y += Math.Sign(flowForce.Y) * rect.Height / 2.0f; } + //spawn less particles when there's already a large number of them + float particleAmountMultiplier = 1.0f - GameMain.ParticleManager.ParticleCount / (float)GameMain.ParticleManager.MaxParticles; + particleAmountMultiplier *= particleAmountMultiplier; + //light dripping if (open < 0.2f && LerpedFlowForce.LengthSquared() > 100.0f) { particleTimer += deltaTime; - float particlesPerSec = open * 100.0f; + float particlesPerSec = open * 100.0f * particleAmountMultiplier; float emitInterval = 1.0f / particlesPerSec; while (particleTimer > emitInterval) { @@ -174,12 +187,13 @@ namespace Barotrauma particleTimer += deltaTime; if (IsHorizontal) { - float particlesPerSec = open * rect.Height * 0.1f; + float particlesPerSec = open * rect.Height * 0.1f * particleAmountMultiplier; + if (openedTimer > 0.0f) { particlesPerSec *= 1.0f + openedTimer * 10.0f; } float emitInterval = 1.0f / particlesPerSec; while (particleTimer > emitInterval) { Vector2 velocity = new Vector2( - MathHelper.Clamp(flowForce.X, -5000.0f, 5000.0f) * Rand.Range(0.5f, 0.7f), + MathHelper.Clamp(flowForce.X, -5000.0f, 5000.0f) * Rand.Range(0.5f, 0.7f), flowForce.Y * Rand.Range(0.5f, 0.7f)); if (flowTargetHull.WaterVolume < flowTargetHull.Volume * 0.95f) @@ -191,11 +205,11 @@ namespace Barotrauma if (particle != null) { - particle.Size = particle.Size * Math.Min(Math.Abs(flowForce.X / 1000.0f), 5.0f); + particle.Size *= Math.Min(Math.Abs(flowForce.X / 500.0f), 5.0f); } } - if (Math.Abs(flowForce.X) > 300.0f) + if (Math.Abs(flowForce.X) > 300.0f && flowTargetHull.WaterVolume > flowTargetHull.Volume * 0.1f) { pos.X += Math.Sign(flowForce.X) * 10.0f; if (rect.Height < 32) @@ -211,7 +225,7 @@ namespace Barotrauma GameMain.ParticleManager.CreateParticle( "bubbles", Submarine == null ? pos : pos + Submarine.Position, - flowForce / 10.0f, 0, flowTargetHull); + velocity, 0, flowTargetHull); } particleTimer -= emitInterval; } @@ -220,7 +234,7 @@ namespace Barotrauma { if (Math.Sign(flowTargetHull.Rect.Y - rect.Y) != Math.Sign(lerpedFlowForce.Y)) return; - float particlesPerSec = open * rect.Width * 0.3f; + float particlesPerSec = open * rect.Width * 0.3f * particleAmountMultiplier; float emitInterval = 1.0f / particlesPerSec; while (particleTimer > emitInterval) { @@ -237,7 +251,7 @@ namespace Barotrauma velocity, 0, FlowTargetHull); if (splash != null) splash.Size = splash.Size * MathHelper.Clamp(rect.Width / 50.0f, 0.8f, 4.0f); } - if (Math.Abs(flowForce.Y) > 190.0f && Rand.Range(0.0f, 1.0f) < 0.3f) + if (Math.Abs(flowForce.Y) > 190.0f && Rand.Range(0.0f, 1.0f) < 0.3f && flowTargetHull.WaterVolume > flowTargetHull.Volume * 0.1f) { GameMain.ParticleManager.CreateParticle( "bubbles", diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Hull.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Hull.cs index 219996222..69debe79f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Hull.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Hull.cs @@ -14,7 +14,7 @@ namespace Barotrauma { public const int MaxDecalsPerHull = 10; - private List decals = new List(); + private readonly List decals = new List(); private float serverUpdateDelay; private float remoteWaterVolume, remoteOxygenPercentage; @@ -23,6 +23,8 @@ namespace Barotrauma private bool networkUpdatePending; private float networkUpdateTimer; + private double lastAmbientLightEditTime; + public override bool SelectableInEditor { get @@ -232,33 +234,36 @@ namespace Barotrauma return; } - /*if (!Visible) + if (!ShowHulls && !GameMain.DebugDraw) { return; } + + if (!editing && (!GameMain.DebugDraw || Screen.Selected.Cam.Zoom < 0.1f)) { return; } + + float alpha = 1.0f; + float hideTimeAfterEdit = 3.0f; + if (lastAmbientLightEditTime > Timing.TotalTime - hideTimeAfterEdit * 2.0f) { - drawRect = - Submarine == null ? rect : new Rectangle((int)(Submarine.DrawPosition.X + rect.X), (int)(Submarine.DrawPosition.Y + rect.Y), rect.Width, rect.Height); - - GUI.DrawRectangle(spriteBatch, - new Vector2(drawRect.X, -drawRect.Y), - new Vector2(rect.Width, rect.Height), - Color.Black, true, - 0, (int)Math.Max((1.5f / GameScreen.Selected.Cam.Zoom), 1.0f)); - }*/ - - if (!ShowHulls && !GameMain.DebugDraw) return; - - if (!editing && (!GameMain.DebugDraw || Screen.Selected.Cam.Zoom < 0.1f)) return; + alpha = Math.Min((float)(Timing.TotalTime - lastAmbientLightEditTime) / hideTimeAfterEdit - 1.0f, 1.0f); + } Rectangle drawRect = Submarine == null ? rect : new Rectangle((int)(Submarine.DrawPosition.X + rect.X), (int)(Submarine.DrawPosition.Y + rect.Y), rect.Width, rect.Height); + if ((IsSelected || IsHighlighted) && editing) + { + GUI.DrawRectangle(spriteBatch, + new Vector2(drawRect.X, -drawRect.Y), + new Vector2(rect.Width, rect.Height), + (IsHighlighted ? Color.LightBlue * 0.8f : GUI.Style.Red * 0.5f) * alpha, false, 0, (int)Math.Max(5.0f / Screen.Selected.Cam.Zoom, 1.0f)); + } + GUI.DrawRectangle(spriteBatch, new Vector2(drawRect.X, -drawRect.Y), new Vector2(rect.Width, rect.Height), - Color.Blue, false, (ID % 255) * 0.000001f, (int)Math.Max((1.5f / Screen.Selected.Cam.Zoom), 1.0f)); + Color.Blue * alpha, false, (ID % 255) * 0.000001f, (int)Math.Max(1.5f / Screen.Selected.Cam.Zoom, 1.0f)); GUI.DrawRectangle(spriteBatch, new Rectangle(drawRect.X, -drawRect.Y, rect.Width, rect.Height), - GUI.Style.Red * ((100.0f - OxygenPercentage) / 400.0f), true, 0, (int)Math.Max((1.5f / GameScreen.Selected.Cam.Zoom), 1.0f)); + GUI.Style.Red * ((100.0f - OxygenPercentage) / 400.0f) * alpha, true, 0, (int)Math.Max(1.5f / Screen.Selected.Cam.Zoom, 1.0f)); if (GameMain.DebugDraw) { @@ -277,10 +282,12 @@ namespace Barotrauma foreach (FireSource fs in FireSources) { Rectangle fireSourceRect = new Rectangle((int)fs.WorldPosition.X, -(int)fs.WorldPosition.Y, (int)fs.Size.X, (int)fs.Size.Y); - GUI.DrawRectangle(spriteBatch, fireSourceRect, GUI.Style.Orange, false, 0, 5); + GUI.DrawRectangle(spriteBatch, fireSourceRect, GUI.Style.Red, false, 0, 5); + GUI.DrawRectangle(spriteBatch, new Rectangle(fireSourceRect.X - (int)fs.DamageRange, fireSourceRect.Y, fireSourceRect.Width + (int)fs.DamageRange * 2, fireSourceRect.Height), GUI.Style.Orange, false, 0, 5); //GUI.DrawRectangle(spriteBatch, new Rectangle((int)fs.LastExtinguishPos.X, (int)-fs.LastExtinguishPos.Y, 5,5), Color.Yellow, true); } + /*GUI.DrawLine(spriteBatch, new Vector2(drawRect.X, -WorldSurface), new Vector2(drawRect.Right, -WorldSurface), Color.Cyan * 0.5f); for (int i = 0; i < waveY.Length - 1; i++) { @@ -290,24 +297,15 @@ namespace Barotrauma }*/ } - if ((IsSelected || IsHighlighted) && editing) - { - GUI.DrawRectangle(spriteBatch, - new Vector2(drawRect.X + 5, -drawRect.Y + 5), - new Vector2(rect.Width - 10, rect.Height - 10), - IsHighlighted ? Color.LightBlue * 0.5f : GUI.Style.Red * 0.5f, true, 0, (int)Math.Max((1.5f / GameScreen.Selected.Cam.Zoom), 1.0f)); - } - foreach (MapEntity e in linkedTo) { - if (e is Hull) + if (e is Hull linkedHull) { - Hull linkedHull = (Hull)e; - Rectangle connectedHullRect = e.Submarine == null ? - linkedHull.rect : + Rectangle connectedHullRect = e.Submarine == null ? + linkedHull.rect : new Rectangle( (int)(Submarine.DrawPosition.X + linkedHull.WorldPosition.X), - (int)(Submarine.DrawPosition.Y + linkedHull.WorldPosition.Y), + (int)(Submarine.DrawPosition.Y + linkedHull.WorldPosition.Y), linkedHull.WorldRect.Width, linkedHull.WorldRect.Height); //center of the hull @@ -315,7 +313,7 @@ namespace Barotrauma WorldRect : new Rectangle( (int)(Submarine.DrawPosition.X + WorldPosition.X), - (int)(Submarine.DrawPosition.Y + WorldPosition.Y), + (int)(Submarine.DrawPosition.Y + WorldPosition.Y), WorldRect.Width, WorldRect.Height); GUI.DrawLine(spriteBatch, @@ -326,22 +324,22 @@ namespace Barotrauma } } - public static void UpdateVertices(GraphicsDevice graphicsDevice, Camera cam, WaterRenderer renderer) + public static void UpdateVertices(Camera cam, WaterRenderer renderer) { foreach (EntityGrid entityGrid in EntityGrids) { - if (entityGrid.WorldRect.X > cam.WorldView.Right || entityGrid.WorldRect.Right < cam.WorldView.X) continue; - if (entityGrid.WorldRect.Y - entityGrid.WorldRect.Height > cam.WorldView.Y || entityGrid.WorldRect.Y < cam.WorldView.Y - cam.WorldView.Height) continue; + if (entityGrid.WorldRect.X > cam.WorldView.Right || entityGrid.WorldRect.Right < cam.WorldView.X) { continue; } + if (entityGrid.WorldRect.Y - entityGrid.WorldRect.Height > cam.WorldView.Y || entityGrid.WorldRect.Y < cam.WorldView.Y - cam.WorldView.Height) { continue; } var allEntities = entityGrid.GetAllEntities(); foreach (Hull hull in allEntities) { - hull.UpdateVertices(graphicsDevice, cam, entityGrid, renderer); + hull.UpdateVertices(cam, entityGrid, renderer); } } } - private void UpdateVertices(GraphicsDevice graphicsDevice, Camera cam, EntityGrid entityGrid, WaterRenderer renderer) + private void UpdateVertices(Camera cam, EntityGrid entityGrid, WaterRenderer renderer) { Vector2 submarinePos = Submarine == null ? Vector2.Zero : Submarine.DrawPosition; @@ -451,7 +449,7 @@ namespace Barotrauma } //we only create a new quad if this is the first or the last one, of if there's a wave large enough that we need more geometry - if (i == end - 1 || i == start || Math.Abs(prevCorners[1].Y - corners[3].Y) > 1.0f) + if (i == end - 1 || i == start || Math.Abs(prevCorners[1].Y - corners[2].Y) > 0.01f) { renderer.vertices[renderer.PositionInBuffer] = new VertexPositionTexture(prevCorners[0], prevUVs[0]); renderer.vertices[renderer.PositionInBuffer + 1] = new VertexPositionTexture(corners[1], uvCoords[1]); @@ -554,11 +552,10 @@ namespace Barotrauma remoteOxygenPercentage = message.ReadRangedSingle(0.0f, 100.0f, 8); bool hasFireSources = message.ReadBoolean(); - int fireSourceCount = 0; remoteFireSources = new List(); if (hasFireSources) { - fireSourceCount = message.ReadRangedInteger(0, 16); + int fireSourceCount = message.ReadRangedInteger(0, 16); for (int i = 0; i < fireSourceCount; i++) { remoteFireSources.Add(new Vector3( diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/ItemAssemblyPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/ItemAssemblyPrefab.cs index 0fcff3a6d..f20bd6797 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/ItemAssemblyPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/ItemAssemblyPrefab.cs @@ -18,6 +18,7 @@ namespace Barotrauma foreach (Pair entity in DisplayEntities) { + if (entity.First is CoreEntityPrefab) { continue; } Rectangle drawRect = entity.Second; drawRect = new Rectangle( (int)(drawRect.X * scale) + drawArea.Center.X, (int)((drawRect.Y) * scale) - drawArea.Center.Y, @@ -33,7 +34,9 @@ namespace Barotrauma foreach (Pair entity in DisplayEntities) { Rectangle drawRect = entity.Second; - drawRect.Location += Submarine.MouseToWorldGrid(cam, Submarine.MainSub).ToPoint(); + + drawRect.Location += placePosition != Vector2.Zero ? placePosition.ToPoint() : Submarine.MouseToWorldGrid(cam, Submarine.MainSub).ToPoint(); + entity.First.DrawPlacing(spriteBatch, drawRect, entity.First.Scale); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/WaterRenderer.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/WaterRenderer.cs index 7913a822c..f837b4bad 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/WaterRenderer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/WaterRenderer.cs @@ -91,11 +91,11 @@ namespace Barotrauma public void RenderWater(SpriteBatch spriteBatch, RenderTarget2D texture, Camera cam) { spriteBatch.GraphicsDevice.BlendState = BlendState.NonPremultiplied; - + WaterEffect.Parameters["xTexture"].SetValue(texture); Vector2 distortionStrength = cam == null ? DistortionStrength : DistortionStrength * cam.Zoom; - WaterEffect.Parameters["xWaveWidth"].SetValue(DistortionStrength.X); - WaterEffect.Parameters["xWaveHeight"].SetValue(DistortionStrength.Y); + WaterEffect.Parameters["xWaveWidth"].SetValue(distortionStrength.X); + WaterEffect.Parameters["xWaveHeight"].SetValue(distortionStrength.Y); if (BlurAmount > 0.0f) { WaterEffect.CurrentTechnique = WaterEffect.Techniques["WaterShaderBlurred"]; @@ -111,6 +111,9 @@ namespace Barotrauma offset += (cam.Position - new Vector2(cam.WorldView.Width / 2.0f, -cam.WorldView.Height / 2.0f)); offset.Y += cam.WorldView.Height; offset.X += cam.WorldView.Width; +#if LINUX || OSX + offset.X += cam.WorldView.Width; +#endif offset *= DistortionScale; } offset.Y = -offset.Y; @@ -176,6 +179,9 @@ namespace Barotrauma spriteBatch.GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, subVerts.Value, 0, PositionInIndoorsBuffer[subVerts.Key] / 3); } + + WaterEffect.Parameters["xTexture"].SetValue((Texture2D)null); + WaterEffect.CurrentTechnique.Passes[0].Apply(); } public void ScrollWater(Vector2 vel, float deltaTime) @@ -195,7 +201,10 @@ namespace Barotrauma basicEffect.CurrentTechnique.Passes[0].Apply(); graphicsDevice.SamplerStates[0] = SamplerState.PointWrap; - graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, PositionInBuffer / 3); + graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, PositionInBuffer / 3); + + basicEffect.Texture = null; + basicEffect.CurrentTechnique.Passes[0].Apply(); } public void ResetBuffers() diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/ConvexHull.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/ConvexHull.cs index 1cbf20833..c099e6c39 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/ConvexHull.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/ConvexHull.cs @@ -93,9 +93,9 @@ namespace Barotrauma.Lights public static BasicEffect shadowEffect; public static BasicEffect penumbraEffect; - private Segment[] segments = new Segment[4]; - private SegmentPoint[] vertices = new SegmentPoint[4]; - private SegmentPoint[] losVertices = new SegmentPoint[4]; + private readonly Segment[] segments = new Segment[4]; + private readonly SegmentPoint[] vertices = new SegmentPoint[4]; + private readonly SegmentPoint[] losVertices = new SegmentPoint[4]; private readonly bool[] backFacing; private readonly bool[] ignoreEdge; @@ -106,6 +106,8 @@ namespace Barotrauma.Lights public VertexPositionTexture[] PenumbraVertices { get; private set; } public int ShadowVertexCount { get; private set; } + private readonly HashSet overlappingHulls = new HashSet(); + public MapEntity ParentEntity { get; private set; } private bool enabled; @@ -176,7 +178,7 @@ namespace Barotrauma.Lights if (door != null) { isHorizontal = door.IsHorizontal; } } - var chList = HullLists.Find(x => x.Submarine == parent.Submarine); + var chList = HullLists.Find(h => h.Submarine == parent.Submarine); if (chList == null) { chList = new ConvexHullList(parent.Submarine); @@ -194,10 +196,12 @@ namespace Barotrauma.Lights private void MergeOverlappingSegments(ConvexHull ch) { - if (ch == this) return; - + if (ch == this) { return; } + if (isHorizontal == ch.isHorizontal) { + if (BoundingBox == ch.BoundingBox) { return; } + //hide segments that are roughly at the some position as some other segment (e.g. the ends of two adjacent wall pieces) float mergeDist = 32; float mergeDistSqr = mergeDist * mergeDist; @@ -206,6 +210,7 @@ namespace Barotrauma.Lights for (int j = 0; j < ch.segments.Length; j++) { if (segments[i].IsHorizontal != ch.segments[j].IsHorizontal) { continue; } + if (ignoreEdge[i] || ch.ignoreEdge[j]) { continue; } //the segments must be at different sides of the convex hulls to be merged //(e.g. the right edge of a wall piece and the left edge of another one) @@ -247,6 +252,7 @@ namespace Barotrauma.Lights p.Y >= ch.BoundingBox.Y && p.Y <= ch.BoundingBox.Bottom) { ignoreEdge[i] = true; + overlappingHulls.Add(ch); } } } @@ -283,11 +289,25 @@ namespace Barotrauma.Lights } else { - losVertices[startPointIndex].Pos = segment2.ConvexHull.losVertices[startPoint2Index].Pos = - (segment1.Start.Pos + segment2.End.Pos) / 2.0f; - losVertices[endPointIndex].Pos = segment2.ConvexHull.losVertices[endPoint2Index].Pos = - (segment1.End.Pos + segment2.Start.Pos) / 2.0f; + if (Vector2.DistanceSquared(losVertices[startPointIndex].Pos, segment1.Start.Pos) < + Vector2.DistanceSquared(losVertices[startPointIndex].Pos, segment1.End.Pos)) + { + losVertices[startPointIndex].Pos = segment2.ConvexHull.losVertices[startPoint2Index].Pos = + (segment1.Start.Pos + segment2.End.Pos) / 2.0f; + losVertices[endPointIndex].Pos = segment2.ConvexHull.losVertices[endPoint2Index].Pos = + (segment1.End.Pos + segment2.Start.Pos) / 2.0f; + } + else + { + losVertices[startPointIndex].Pos = segment2.ConvexHull.losVertices[startPoint2Index].Pos = + (segment1.End.Pos + segment2.Start.Pos) / 2.0f; + losVertices[endPointIndex].Pos = segment2.ConvexHull.losVertices[endPoint2Index].Pos = + (segment1.Start.Pos + segment2.End.Pos) / 2.0f; + } } + + overlappingHulls.Add(segment2.ConvexHull); + segment2.ConvexHull.overlappingHulls.Add(this); } public void Rotate(Vector2 origin, float amount) @@ -328,7 +348,26 @@ namespace Barotrauma.Lights LastVertexChangeTime = (float)Timing.TotalTime; + overlappingHulls.Clear(); + for (int i = 0; i < 4; i++) + { + ignoreEdge[i] = false; + } + CalculateDimensions(); + + if (ParentEntity == null) { return; } + + var chList = HullLists.Find(h => h.Submarine == ParentEntity.Submarine); + if (chList != null) + { + overlappingHulls.Clear(); + foreach (ConvexHull ch in chList.List) + { + MergeOverlappingSegments(ch); + ch.MergeOverlappingSegments(this); + } + } } public void SetVertices(Vector2[] points, Matrix? rotationMatrix = null) @@ -348,6 +387,8 @@ namespace Barotrauma.Lights ignoreEdge[i] = false; } + overlappingHulls.Clear(); + int margin = 0; if (Math.Abs(points[0].X - points[2].X) < Math.Abs(points[0].Y - points[2].Y)) { @@ -381,9 +422,10 @@ namespace Barotrauma.Lights if (ParentEntity == null) return; - var chList = HullLists.Find(x => x.Submarine == ParentEntity.Submarine); + var chList = HullLists.Find(h => h.Submarine == ParentEntity.Submarine); if (chList != null) { + overlappingHulls.Clear(); foreach (ConvexHull ch in chList.List) { MergeOverlappingSegments(ch); @@ -484,8 +526,8 @@ namespace Barotrauma.Lights //find beginning and ending vertices which //belong to the shadow - int startingIndex = 0; - int endingIndex = 0; + int startingIndex = -1; + int endingIndex = -1; for (int i = 0; i < 4; i++) { int currentEdge = i; @@ -498,6 +540,8 @@ namespace Barotrauma.Lights startingIndex = nextEdge; } + if (startingIndex == -1 || endingIndex == -1) { return; } + //nr of vertices that are in the shadow if (endingIndex > startingIndex) ShadowVertexCount = endingIndex - startingIndex + 1; @@ -663,7 +707,7 @@ namespace Barotrauma.Lights public void Remove() { - var chList = HullLists.Find(x => x.Submarine == ParentEntity.Submarine); + var chList = HullLists.Find(h => h.Submarine == ParentEntity.Submarine); if (chList != null) { @@ -672,8 +716,19 @@ namespace Barotrauma.Lights { HullLists.Remove(chList); } + foreach (ConvexHull ch2 in overlappingHulls) + { + for (int i = 0; i < 4; i++) + { + ch2.ignoreEdge[i] = false; + } + ch2.overlappingHulls.Remove(this); + foreach (ConvexHull ch in chList.List) + { + ch.MergeOverlappingSegments(ch2); + } + } } } } - } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightManager.cs index 803b28f82..dd25fa123 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightManager.cs @@ -11,18 +11,6 @@ namespace Barotrauma.Lights { class LightManager { - private const float AmbientLightUpdateInterval = 0.2f; - private const float AmbientLightFalloff = 0.8f; - - /// - /// Enables a feature that makes lights inside the hull increase the brightness of the entire hull - /// and adjacent ones to some extent, if there are gaps for the lights to pass through. - /// Prevents unnaturally dark looking shadows in otherwise well-lit submarines, but disabled at least for - /// the time being because it makes the lighting behave unpredictably and may cause rooms to appear - /// excessively bright if different lighting conditions aren't tested and accounted for. - /// - private static readonly bool UseHullSpecificAmbientLight = false; - public static Entity ViewTarget { get; set; } private float currLightMapScale; @@ -57,7 +45,7 @@ namespace Barotrauma.Lights public Effect LosEffect { get; private set; } public Effect SolidColorEffect { get; private set; } - private List lights; + private readonly List lights; public bool LosEnabled = true; public LosMode LosMode = LosMode.Transparent; @@ -66,13 +54,8 @@ namespace Barotrauma.Lights public bool ObstructVision; - private Texture2D visionCircle; + private readonly Texture2D visionCircle; - private Dictionary hullAmbientLights; - private Dictionary smoothedHullAmbientLights; - - private float ambientLightUpdateTimer; - public IEnumerable Lights { get { return lights; } @@ -80,7 +63,7 @@ namespace Barotrauma.Lights public LightManager(GraphicsDevice graphics, ContentManager content) { - lights = new List(); + lights = new List(100); AmbientLight = new Color(20, 20, 20, 255); @@ -114,9 +97,6 @@ namespace Barotrauma.Lights }; } }); - - hullAmbientLights = new Dictionary(); - smoothedHullAmbientLights = new Dictionary(); } private void CreateRenderTargets(GraphicsDevice graphics) @@ -167,43 +147,12 @@ namespace Barotrauma.Lights } } - public void Update(float deltaTime) - { - if (UseHullSpecificAmbientLight) - { - if (ambientLightUpdateTimer > 0.0f) - { - ambientLightUpdateTimer -= deltaTime; - } - else - { - CalculateAmbientLights(); - ambientLightUpdateTimer = AmbientLightUpdateInterval; - } - - foreach (Hull hull in hullAmbientLights.Keys) - { - if (!smoothedHullAmbientLights.ContainsKey(hull)) - { - smoothedHullAmbientLights.Add(hull, Color.TransparentBlack); - } - } - - foreach (Hull hull in smoothedHullAmbientLights.Keys.ToList()) - { - Color targetColor = Color.TransparentBlack; - hullAmbientLights.TryGetValue(hull, out targetColor); - smoothedHullAmbientLights[hull] = Color.Lerp(smoothedHullAmbientLights[hull], targetColor, deltaTime); - } - } - } - - private List activeLights = new List(capacity: 100); + private readonly List activeLights = new List(capacity: 100); public void UpdateLightMap(GraphicsDevice graphics, SpriteBatch spriteBatch, Camera cam, RenderTarget2D backgroundObstructor = null) { - if (!LightingEnabled) return; - + if (!LightingEnabled) { return; } + if (Math.Abs(currLightMapScale - GameMain.Config.LightMapScale) > 0.01f) { //lightmap scale has changed -> recreate render targets @@ -229,7 +178,16 @@ namespace Barotrauma.Lights light.Position = light.ParentBody.DrawPosition; if (light.ParentSub != null) { light.Position -= light.ParentSub.DrawPosition; } } - if (!MathUtils.CircleIntersectsRectangle(light.WorldPosition, light.LightSourceParams.TextureRange, viewRect)) { continue; } + + float range = light.LightSourceParams.TextureRange; + if (light.LightSprite != null) + { + float spriteRange = Math.Max( + light.LightSprite.size.X * light.SpriteScale.X * (0.5f + Math.Abs(light.LightSprite.RelativeOrigin.X - 0.5f)), + light.LightSprite.size.Y * light.SpriteScale.Y * (0.5f + Math.Abs(light.LightSprite.RelativeOrigin.Y - 0.5f))); + range = Math.Max(spriteRange, range); + } + if (!MathUtils.CircleIntersectsRectangle(light.WorldPosition, range, viewRect)) { continue; } activeLights.Add(light); } @@ -252,16 +210,14 @@ namespace Barotrauma.Lights //draw background lights //--------------------------------------------------------------------------------------------------- graphics.SetRenderTarget(LightMap); - graphics.Clear(Color.Black); + graphics.Clear(AmbientLight); graphics.BlendState = BlendState.Additive; - bool backgroundSpritesDrawn = false; spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, transformMatrix: spriteBatchTransform); foreach (LightSource light in activeLights) { if (!light.IsBackground) { continue; } light.DrawSprite(spriteBatch, cam); if (light.Color.A > 0 && light.Range > 0.0f) { light.DrawLightVolume(spriteBatch, lightEffect, transform); } - backgroundSpritesDrawn = true; } GameMain.ParticleManager.Draw(spriteBatch, true, null, Particles.ParticleBlendState.Additive); spriteBatch.End(); @@ -269,33 +225,34 @@ namespace Barotrauma.Lights //draw a black rectangle on hulls to hide background lights behind subs //--------------------------------------------------------------------------------------------------- - Dictionary visibleHulls = null; - if (backgroundSpritesDrawn) + if (backgroundObstructor != null) { - if (backgroundObstructor != null) - { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied); - spriteBatch.Draw(backgroundObstructor, new Rectangle(0, 0, - (int)(GameMain.GraphicsWidth * currLightMapScale), (int)(GameMain.GraphicsHeight * currLightMapScale)), Color.Black); - spriteBatch.End(); - } - - visibleHulls = GetVisibleHulls(cam); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque, transformMatrix: spriteBatchTransform); - foreach (Rectangle drawRect in visibleHulls.Values) - { - //TODO: draw some sort of smoothed rectangle - GUI.DrawRectangle(spriteBatch, - new Vector2(drawRect.X, -drawRect.Y), - new Vector2(drawRect.Width, drawRect.Height), - Color.Black, true); - } + spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied); + spriteBatch.Draw(backgroundObstructor, new Rectangle(0, 0, + (int)(GameMain.GraphicsWidth * currLightMapScale), (int)(GameMain.GraphicsHeight * currLightMapScale)), Color.Black); spriteBatch.End(); - - - graphics.BlendState = BlendState.Additive; } + spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque, transformMatrix: spriteBatchTransform); + Dictionary visibleHulls = GetVisibleHulls(cam); + foreach (KeyValuePair hull in visibleHulls) + { + GUI.DrawRectangle(spriteBatch, + new Vector2(hull.Value.X, -hull.Value.Y), + new Vector2(hull.Value.Width, hull.Value.Height), + hull.Key.AmbientLight == Color.TransparentBlack ? Color.Black : hull.Key.AmbientLight.Multiply(hull.Key.AmbientLight.A / 255.0f), true); + } + spriteBatch.End(); + + SolidColorEffect.CurrentTechnique = SolidColorEffect.Techniques["SolidColor"]; + SolidColorEffect.Parameters["color"].SetValue(AmbientLight.ToVector4()); + spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, transformMatrix: spriteBatchTransform, effect: SolidColorEffect); + Submarine.DrawDamageable(spriteBatch, null); + spriteBatch.End(); + + graphics.BlendState = BlendState.Additive; + + //draw the focused item and character to highlight them, //and light sprites (done before drawing the actual light volumes so we can make characters obstruct the highlights and sprites) //--------------------------------------------------------------------------------------------------- @@ -318,33 +275,37 @@ namespace Barotrauma.Lights //draw characters to obstruct the highlighted items/characters and light sprites //--------------------------------------------------------------------------------------------------- - SolidColorEffect.CurrentTechnique = SolidColorEffect.Techniques["SolidColor"]; - SolidColorEffect.Parameters["color"].SetValue(Color.Black.ToVector4()); + SolidColorEffect.CurrentTechnique = SolidColorEffect.Techniques["SolidVertexColor"]; spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, effect: SolidColorEffect, transformMatrix: spriteBatchTransform); foreach (Character character in Character.CharacterList) { - if (character.CurrentHull == null || !character.Enabled) continue; - if (Character.Controlled?.FocusedCharacter == character) continue; + if (character.CurrentHull == null || !character.Enabled) { continue; } + if (Character.Controlled?.FocusedCharacter == character) { continue; } + Color lightColor = character.CurrentHull.AmbientLight == Color.TransparentBlack ? + Color.Black : + character.CurrentHull.AmbientLight.Multiply(character.CurrentHull.AmbientLight.A / 255.0f).Opaque(); foreach (Limb limb in character.AnimController.Limbs) { - if (limb.DeformSprite != null) continue; - limb.Draw(spriteBatch, cam, Color.Black); + if (limb.DeformSprite != null) { continue; } + limb.Draw(spriteBatch, cam, lightColor); } } spriteBatch.End(); - DeformableSprite.Effect.CurrentTechnique = DeformableSprite.Effect.Techniques["DeformShaderSolidColor"]; - DeformableSprite.Effect.Parameters["solidColor"].SetValue(Color.Black.ToVector4()); + DeformableSprite.Effect.CurrentTechnique = DeformableSprite.Effect.Techniques["DeformShaderSolidVertexColor"]; DeformableSprite.Effect.CurrentTechnique.Passes[0].Apply(); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, transformMatrix: spriteBatchTransform); foreach (Character character in Character.CharacterList) { - if (character.CurrentHull == null || !character.Enabled) continue; - if (Character.Controlled?.FocusedCharacter == character) continue; + if (character.CurrentHull == null || !character.Enabled) { continue; } + if (Character.Controlled?.FocusedCharacter == character) { continue; } + Color lightColor = character.CurrentHull.AmbientLight == Color.TransparentBlack ? + Color.Black : + character.CurrentHull.AmbientLight.Multiply(character.CurrentHull.AmbientLight.A / 255.0f).Opaque(); foreach (Limb limb in character.AnimController.Limbs) { - if (limb.DeformSprite == null) continue; - limb.Draw(spriteBatch, cam, Color.Black); + if (limb.DeformSprite == null) { continue; } + limb.Draw(spriteBatch, cam, lightColor); } } spriteBatch.End(); @@ -355,8 +316,6 @@ namespace Barotrauma.Lights //--------------------------------------------------------------------------------------------------- spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, transformMatrix: spriteBatchTransform); - GUI.DrawRectangle(spriteBatch, new Rectangle(cam.WorldView.X, -cam.WorldView.Y, cam.WorldView.Width, cam.WorldView.Height), AmbientLight, isFilled: true); - spriteBatch.Draw(LimbLightMap, new Rectangle(cam.WorldView.X, -cam.WorldView.Y, cam.WorldView.Width, cam.WorldView.Height), Color.White); foreach (ElectricalDischarger discharger in ElectricalDischarger.List) @@ -373,24 +332,7 @@ namespace Barotrauma.Lights lightEffect.World = transform; GameMain.ParticleManager.Draw(spriteBatch, false, null, Particles.ParticleBlendState.Additive); - - if (UseHullSpecificAmbientLight) - { - if (visibleHulls == null) - { - visibleHulls = GetVisibleHulls(cam); - } - foreach (Hull hull in smoothedHullAmbientLights.Keys) - { - if (smoothedHullAmbientLights[hull].A < 0.01f) continue; - if (!visibleHulls.TryGetValue(hull, out Rectangle drawRect)) continue; - GUI.DrawRectangle(spriteBatch, - new Vector2(drawRect.X, -drawRect.Y), - new Vector2(hull.Rect.Width, hull.Rect.Height), - smoothedHullAmbientLights[hull], true); - } - } - + if (Character.Controlled != null) { Vector2 haloDrawPos = Character.Controlled.DrawPosition; @@ -592,7 +534,10 @@ namespace Barotrauma.Lights } } - penumbraVerts.AddRange(convexHull.PenumbraVertices); + if (convexHull.ShadowVertexCount > 0) + { + penumbraVerts.AddRange(convexHull.PenumbraVertices); + } } if (shadowVerts.Count > 0) @@ -613,86 +558,6 @@ namespace Barotrauma.Lights graphics.SetRenderTarget(null); } - - private void CalculateAmbientLights() - { - hullAmbientLights.Clear(); - - foreach (LightSource light in lights) - { - if (light.Color.A < 1f || light.Range < 1.0f || light.IsBackground) continue; - - var newAmbientLights = AmbientLightHulls(light); - foreach (Hull hull in newAmbientLights.Keys) - { - if (hullAmbientLights.ContainsKey(hull)) - { - //hull already lit by some other light source -> add the ambient lights up - hullAmbientLights[hull] = new Color( - hullAmbientLights[hull].R + newAmbientLights[hull].R, - hullAmbientLights[hull].G + newAmbientLights[hull].G, - hullAmbientLights[hull].B + newAmbientLights[hull].B, - hullAmbientLights[hull].A + newAmbientLights[hull].A); - } - else - { - hullAmbientLights.Add(hull, newAmbientLights[hull]); - } - } - } - } - - /// - /// Add ambient light to the hull the lightsource is inside + all adjacent hulls connected by a gap - /// - private Dictionary AmbientLightHulls(LightSource light) - { - Dictionary hullAmbientLight = new Dictionary(); - - var hull = Hull.FindHull(light.WorldPosition); - if (hull == null) return hullAmbientLight; - - return AmbientLightHulls(hull, hullAmbientLight, light.Color * Math.Min(light.Range / 1000.0f, 1.0f)); - } - - /// - /// A flood fill algorithm that adds ambient light to all hulls the starting hull is connected to - /// - private Dictionary AmbientLightHulls(Hull hull, Dictionary hullAmbientLight, Color currColor) - { - if (hullAmbientLight.ContainsKey(hull)) - { - if (hullAmbientLight[hull].A > currColor.A) - return hullAmbientLight; - else - hullAmbientLight[hull] = currColor; - } - else - { - hullAmbientLight.Add(hull, currColor); - } - - Color nextHullLight = currColor * AmbientLightFalloff; - //light getting too dark to notice -> no need to spread further - if (nextHullLight.A < 20) return hullAmbientLight; - - //use hashset to make sure that each hull is only included once - HashSet hulls = new HashSet(); - foreach (Gap g in hull.ConnectedGaps) - { - if (!g.IsRoomToRoom || !g.PassAmbientLight || g.Open < 0.5f) continue; - - hulls.Add((g.linkedTo[0] == hull ? g.linkedTo[1] : g.linkedTo[0]) as Hull); - } - - foreach (Hull h in hulls) - { - hullAmbientLight = AmbientLightHulls(h, hullAmbientLight, nextHullLight); - } - - return hullAmbientLight; - } - public void ClearLights() { lights.Clear(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightSource.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightSource.cs index 8a9114105..76bcc63ae 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightSource.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Lights/LightSource.cs @@ -16,7 +16,7 @@ namespace Barotrauma.Lights public Dictionary SerializableProperties { get; private set; } = new Dictionary(); - [Serialize("1.0,1.0,1.0,1.0", true), Editable] + [Serialize("1.0,1.0,1.0,1.0", true, alwaysUseInstanceValues: true), Editable] public Color Color { get; @@ -25,7 +25,7 @@ namespace Barotrauma.Lights private float range; - [Serialize(100.0f, true), Editable(MinValueFloat = 0.0f, MaxValueFloat = 2048.0f)] + [Serialize(100.0f, true, alwaysUseInstanceValues: true), Editable(MinValueFloat = 0.0f, MaxValueFloat = 2048.0f)] public float Range { get { return range; } @@ -331,7 +331,7 @@ namespace Barotrauma.Lights if (lightSourceParams.DeformableLightSpriteElement != null) { - DeformableLightSprite = new DeformableSprite(lightSourceParams.DeformableLightSpriteElement); + DeformableLightSprite = new DeformableSprite(lightSourceParams.DeformableLightSpriteElement, invert: true); } } @@ -342,7 +342,7 @@ namespace Barotrauma.Lights lightSourceParams.Persistent = true; if (lightSourceParams.DeformableLightSpriteElement != null) { - DeformableLightSprite = new DeformableSprite(lightSourceParams.DeformableLightSpriteElement); + DeformableLightSprite = new DeformableSprite(lightSourceParams.DeformableLightSpriteElement, invert: true); } } @@ -952,23 +952,44 @@ namespace Barotrauma.Lights { Vector2 origin = DeformableLightSprite.Origin; Vector2 drawPos = position; - if (ParentSub != null) drawPos += ParentSub.DrawPosition; + if (ParentSub != null) + { + drawPos += ParentSub.DrawPosition; + } + + if (LightSpriteEffect == SpriteEffects.FlipHorizontally) + { + origin.X = DeformableLightSprite.Sprite.SourceRect.Width - origin.X; + } + if (LightSpriteEffect == SpriteEffects.FlipVertically) + { + origin.Y = DeformableLightSprite.Sprite.SourceRect.Height - origin.Y; + } DeformableLightSprite.Draw( cam, new Vector3(drawPos, 0.0f), origin, -Rotation, SpriteScale, new Color(Color, lightSourceParams.OverrideLightSpriteAlpha ?? Color.A / 255.0f), - LightSpriteEffect == SpriteEffects.FlipHorizontally); + LightSpriteEffect == SpriteEffects.FlipVertically); } if (LightSprite != null) { Vector2 origin = LightSprite.Origin; - if (LightSpriteEffect == SpriteEffects.FlipHorizontally) origin.X = LightSprite.SourceRect.Width - origin.X; - if (LightSpriteEffect == SpriteEffects.FlipVertically) origin.Y = LightSprite.SourceRect.Height - origin.Y; + if (LightSpriteEffect == SpriteEffects.FlipHorizontally) + { + origin.X = LightSprite.SourceRect.Width - origin.X; + } + if (LightSpriteEffect == SpriteEffects.FlipVertically) + { + origin.Y = LightSprite.SourceRect.Height - origin.Y; + } Vector2 drawPos = position; - if (ParentSub != null) drawPos += ParentSub.DrawPosition; + if (ParentSub != null) + { + drawPos += ParentSub.DrawPosition; + } drawPos.Y = -drawPos.Y; LightSprite.Draw( diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/LinkedSubmarine.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/LinkedSubmarine.cs index 22c2b7627..d3e649c98 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/LinkedSubmarine.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/LinkedSubmarine.cs @@ -2,7 +2,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -13,11 +13,28 @@ namespace Barotrauma public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true) { if (!editing || wallVertices == null) { return; } + + Draw(spriteBatch, Position); - Color color = IsHighlighted ? GUI.Style.Orange : GUI.Style.Green; + if (!Item.ShowLinks) { return; } + + foreach (MapEntity e in linkedTo) + { + bool isLinkAllowed = e is Item item && item.HasTag("dock"); + + GUI.DrawLine(spriteBatch, + new Vector2(WorldPosition.X, -WorldPosition.Y), + new Vector2(e.WorldPosition.X, -e.WorldPosition.Y), + isLinkAllowed ? GUI.Style.Green * 0.5f : GUI.Style.Red * 0.5f, width: 3); + } + } + + public void Draw(SpriteBatch spriteBatch, Vector2 drawPos, float alpha = 1.0f) + { + Color color = (IsHighlighted) ? GUI.Style.Orange : GUI.Style.Green; if (IsSelected) { color = GUI.Style.Red; } - Vector2 pos = Position; + Vector2 pos = drawPos; for (int i = 0; i < wallVertices.Count; i++) { @@ -28,26 +45,14 @@ namespace Barotrauma endPos.Y = -endPos.Y; GUI.DrawLine(spriteBatch, - startPos, - endPos, - color, 0.0f, 5); + startPos, + endPos, + color * alpha, 0.0f, 5); } pos.Y = -pos.Y; - GUI.DrawLine(spriteBatch, pos + Vector2.UnitY * 50.0f, pos - Vector2.UnitY * 50.0f, color, 0.0f, 5); - GUI.DrawLine(spriteBatch, pos + Vector2.UnitX * 50.0f, pos - Vector2.UnitX * 50.0f, color, 0.0f, 5); - - if (!Item.ShowLinks) { return; } - - foreach (MapEntity e in linkedTo) - { - bool isLinkAllowed = e is Item item && item.HasTag("dock"); - - GUI.DrawLine(spriteBatch, - new Vector2(WorldPosition.X, -WorldPosition.Y), - new Vector2(e.WorldPosition.X, -e.WorldPosition.Y), - isLinkAllowed ? GUI.Style.Green * 0.5f : GUI.Style.Red * 0.5f, width: 3); - } + GUI.DrawLine(spriteBatch, pos + Vector2.UnitY * 50.0f, pos - Vector2.UnitY * 50.0f, color * alpha, 0.0f, 5); + GUI.DrawLine(spriteBatch, pos + Vector2.UnitX * 50.0f, pos - Vector2.UnitX * 50.0f, color * alpha, 0.0f, 5); } public override void UpdateEditing(Camera cam) @@ -100,10 +105,9 @@ namespace Barotrauma } var pathContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.2f), paddedFrame.RectTransform), isHorizontal: true); - var pathBox = new GUITextBox(new RectTransform(new Vector2(0.75f, 1.0f), pathContainer.RectTransform), filePath, font: GUI.SmallFont); var reloadButton = new GUIButton(new RectTransform(new Vector2(0.25f / pathBox.RectTransform.RelativeSize.X, 1.0f), pathBox.RectTransform, Anchor.CenterRight, Pivot.CenterLeft), - TextManager.Get("ReloadLinkedSub"), style: "GUIButtonSmall") + TextManager.Get("ReloadLinkedSub"), style: "GUIButtonSmall") { OnClicked = Reload, UserData = pathBox, @@ -133,6 +137,7 @@ namespace Barotrauma XDocument doc = SubmarineInfo.OpenFile(pathBox.Text); if (doc == null || doc.Root == null) return false; + doc.Root.SetAttributeValue("filepath", pathBox.Text); pathBox.Flash(GUI.Style.Green); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntity.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntity.cs index a71ea1459..5bb384020 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntity.cs @@ -16,6 +16,8 @@ namespace Barotrauma private static Vector2 startMovingPos = Vector2.Zero; + private static float keyDelay; + public static Vector2 StartMovingPos => startMovingPos; // Quick undo/redo for size and movement only. TODO: Remove if we do a more general implementation. @@ -132,7 +134,7 @@ namespace Barotrauma if (highlightedListBox == null || (GUI.MouseOn != highlightedListBox && !highlightedListBox.IsParentOf(GUI.MouseOn))) { - UpdateHighlightedListBox(null); + UpdateHighlightedListBox(null, false); return; } } @@ -147,11 +149,15 @@ namespace Barotrauma { if (PlayerInput.KeyDown(Keys.Delete)) { - selectedList.ForEach(e => e.Remove()); + selectedList.ForEach(e => + { + //orphaned wires may already have been removed + if (!e.Removed) { e.Remove(); } + }); selectedList.Clear(); } - if (PlayerInput.KeyDown(Keys.LeftControl) || PlayerInput.KeyDown(Keys.RightControl)) + if (PlayerInput.IsCtrlDown()) { if (PlayerInput.KeyHit(Keys.C)) { @@ -244,32 +250,7 @@ namespace Barotrauma } } - if (PlayerInput.MouseSpeed.LengthSquared() > 10) - { - highlightTimer = 0.0f; - } - else - { - bool mouseNearHighlightBox = false; - - if (highlightedListBox != null) - { - Rectangle expandedRect = highlightedListBox.Rect; - expandedRect.Inflate(20, 20); - mouseNearHighlightBox = expandedRect.Contains(PlayerInput.MousePosition); - if (!mouseNearHighlightBox) highlightedListBox = null; - } - - highlightTimer += (float)Timing.Step; - if (highlightTimer > 1.0f) - { - if (!mouseNearHighlightBox) - { - UpdateHighlightedListBox(highlightedEntities); - highlightTimer = 0.0f; - } - } - } + UpdateHighlighting(highlightedEntities); } if (highLightedEntity != null) highLightedEntity.isHighlighted = true; @@ -277,35 +258,65 @@ namespace Barotrauma if (GUI.KeyboardDispatcher.Subscriber == null) { + int up = PlayerInput.KeyDown(Keys.Up) ? 1 : 0, + down = PlayerInput.KeyDown(Keys.Down) ? -1 : 0, + left = PlayerInput.KeyDown(Keys.Left) ? -1 : 0, + right = PlayerInput.KeyDown(Keys.Right) ? 1 : 0; + + int xKeysDown = (left + right); + int yKeysDown = (up + down); + + if (xKeysDown != 0 || yKeysDown != 0) { keyDelay += (float) Timing.Step; } else { keyDelay = 0; } + Vector2 nudgeAmount = Vector2.Zero; - if (PlayerInput.KeyHit(Keys.Up)) nudgeAmount.Y = 1f; + + if (keyDelay >= 0.5f) + { + nudgeAmount.Y = yKeysDown; + nudgeAmount.X = xKeysDown; + } + + if (PlayerInput.KeyHit(Keys.Up)) nudgeAmount.Y = 1f; if (PlayerInput.KeyHit(Keys.Down)) nudgeAmount.Y = -1f; if (PlayerInput.KeyHit(Keys.Left)) nudgeAmount.X = -1f; - if (PlayerInput.KeyHit(Keys.Right)) nudgeAmount.X = 1f; + if (PlayerInput.KeyHit(Keys.Right)) nudgeAmount.X = 1f; if (nudgeAmount != Vector2.Zero) { - foreach (MapEntity entityToNudge in selectedList) - { - entityToNudge.Move(nudgeAmount); - } + foreach (MapEntity entityToNudge in selectedList) { entityToNudge.Move(nudgeAmount); } } } + else + { + keyDelay = 0; + } + + bool isShiftDown = PlayerInput.IsShiftDown(); //started moving selected entities if (startMovingPos != Vector2.Zero) { + Item targetContainer = GetPotentialContainer(position, selectedList); + + if (targetContainer != null) { targetContainer.IsHighlighted = true; } + if (PlayerInput.PrimaryMouseButtonReleased()) { //mouse released -> move the entities to the new position of the mouse Vector2 moveAmount = position - startMovingPos; - moveAmount.X = (float)(moveAmount.X > 0.0f ? Math.Floor(moveAmount.X / Submarine.GridSize.X) : Math.Ceiling(moveAmount.X / Submarine.GridSize.X)) * Submarine.GridSize.X; - moveAmount.Y = (float)(moveAmount.Y > 0.0f ? Math.Floor(moveAmount.Y / Submarine.GridSize.Y) : Math.Ceiling(moveAmount.Y / Submarine.GridSize.Y)) * Submarine.GridSize.Y; - if (Math.Abs(moveAmount.X) >= Submarine.GridSize.X || Math.Abs(moveAmount.Y) >= Submarine.GridSize.Y) + + if (!isShiftDown) { - moveAmount = Submarine.VectorToWorldGrid(moveAmount); + moveAmount.X = (float)(moveAmount.X > 0.0f ? Math.Floor(moveAmount.X / Submarine.GridSize.X) : Math.Ceiling(moveAmount.X / Submarine.GridSize.X)) * Submarine.GridSize.X; + moveAmount.Y = (float)(moveAmount.Y > 0.0f ? Math.Floor(moveAmount.Y / Submarine.GridSize.Y) : Math.Ceiling(moveAmount.Y / Submarine.GridSize.Y)) * Submarine.GridSize.Y; + } + + if (Math.Abs(moveAmount.X) >= Submarine.GridSize.X || Math.Abs(moveAmount.Y) >= Submarine.GridSize.Y || isShiftDown) + { + if (!isShiftDown) { moveAmount = Submarine.VectorToWorldGrid(moveAmount); } + //clone - if (PlayerInput.KeyDown(Keys.LeftControl) || PlayerInput.KeyDown(Keys.RightControl)) + if (PlayerInput.IsCtrlDown()) { var clones = Clone(selectedList); selectedList = clones; @@ -313,6 +324,7 @@ namespace Barotrauma } else // move { + List deposited = new List(); foreach (MapEntity e in selectedList) { if (e.rectMemento == null) @@ -321,8 +333,23 @@ namespace Barotrauma e.rectMemento.Store(e.Rect); } e.Move(moveAmount); + + if (isShiftDown && e is Item item && targetContainer != null) + { + if (targetContainer.OwnInventory.TryPutItem(item, Character.Controlled)) + { + GUI.PlayUISound(GUISoundType.DropItem); + deposited.Add(item); + } + else + { + GUI.PlayUISound(GUISoundType.PickItemFail); + } + } e.rectMemento.Store(e.Rect); } + + deposited.ForEach(entity => { selectedList.Remove(entity); }); } } startMovingPos = Vector2.Zero; @@ -357,8 +384,7 @@ namespace Barotrauma if (PlayerInput.PrimaryMouseButtonReleased()) { - if (PlayerInput.KeyDown(Keys.LeftControl) || - PlayerInput.KeyDown(Keys.RightControl)) + if (PlayerInput.IsCtrlDown()) { foreach (MapEntity e in newSelection) { @@ -441,7 +467,84 @@ namespace Barotrauma } } - private static void UpdateHighlightedListBox(List highlightedEntities) + public static Item GetPotentialContainer(Vector2 position, List entities = null) + { + Item targetContainer = null; + bool isShiftDown = PlayerInput.IsShiftDown(); + + if (!isShiftDown) return null; + + foreach (MapEntity e in mapEntityList) + { + if (!e.SelectableInEditor ||!(e is Item potentialContainer)) { continue; } + + if (e.IsMouseOn(position)) + { + if (entities == null) + { + if (potentialContainer.OwnInventory != null && potentialContainer.ParentInventory == null && !potentialContainer.OwnInventory.IsFull()) + { + targetContainer = potentialContainer; + break; + } + } + else + { + foreach (MapEntity selectedEntity in entities) + { + if (!(selectedEntity is Item selectedItem)) { continue; } + if (potentialContainer.OwnInventory != null && potentialContainer.ParentInventory == null && potentialContainer != selectedItem && + potentialContainer.OwnInventory.CanBePut(selectedItem)) + { + targetContainer = potentialContainer; + break; + } + } + } + } + if (targetContainer != null) { break; } + } + + return targetContainer; + } + + /// + /// Updates the logic that runs the highlight box when the mouse is sitting still. + /// + /// + /// + /// true to give items tooltip showing their connection + public static void UpdateHighlighting(List highlightedEntities, bool wiringMode = false) + { + if (PlayerInput.MouseSpeed.LengthSquared() > 10) + { + highlightTimer = 0.0f; + } + else + { + bool mouseNearHighlightBox = false; + + if (highlightedListBox != null) + { + Rectangle expandedRect = highlightedListBox.Rect; + expandedRect.Inflate(20, 20); + mouseNearHighlightBox = expandedRect.Contains(PlayerInput.MousePosition); + if (!mouseNearHighlightBox) highlightedListBox = null; + } + + highlightTimer += (float)Timing.Step; + if (highlightTimer > 1.0f) + { + if (!mouseNearHighlightBox) + { + UpdateHighlightedListBox(highlightedEntities, wiringMode); + highlightTimer = 0.0f; + } + } + } + } + + private static void UpdateHighlightedListBox(List highlightedEntities, bool wiringMode) { if (highlightedEntities == null || highlightedEntities.Count < 2) { @@ -458,14 +561,37 @@ namespace Barotrauma highlightedListBox = new GUIListBox(new RectTransform(new Point(180, highlightedEntities.Count * 18 + 5), GUI.Canvas) { + MaxSize = new Point(int.MaxValue, 256), ScreenSpaceOffset = PlayerInput.MousePosition.ToPoint() + new Point(15) }, style: "GUIToolTip"); foreach (MapEntity entity in highlightedEntities) { - var textBlock = new GUITextBlock(new RectTransform(new Point(highlightedListBox.Content.Rect.Width, 15), highlightedListBox.Content.RectTransform), - ToolBox.LimitString(entity.Name, GUI.SmallFont, 140), font: GUI.SmallFont) + var tooltip = string.Empty; + + if (wiringMode && entity is Item item) { + var wire = item.GetComponent(); + if (wire?.Connections != null) + { + for (var i = 0; i < wire.Connections.Length; i++) + { + var conn = wire.Connections[i]; + if (conn != null) + { + string[] tags = { "[item]", "[pin]" }; + string[] values = { conn.Item?.Name, conn.Name }; + tooltip += TextManager.GetWithVariables("wirelistformat",tags , values); + } + if (i != wire.Connections.Length - 1) { tooltip += '\n'; } + } + } + } + + var textBlock = new GUITextBlock(new RectTransform(new Point(highlightedListBox.Content.Rect.Width, 15), highlightedListBox.Content.RectTransform), + ToolBox.LimitString(entity.Name, GUI.SmallFont, 140), font: GUI.SmallFont) + { + ToolTip = tooltip, UserData = entity }; } @@ -474,8 +600,7 @@ namespace Barotrauma { MapEntity entity = obj as MapEntity; - if (PlayerInput.KeyDown(Keys.LeftControl) || - PlayerInput.KeyDown(Keys.RightControl)) + if (PlayerInput.IsCtrlDown() && !wiringMode) { if (selectedList.Contains(entity)) { @@ -485,11 +610,10 @@ namespace Barotrauma { AddSelection(entity); } + + return true; } - else - { - SelectEntity(entity); - } + SelectEntity(entity); return true; }; @@ -558,6 +682,10 @@ namespace Barotrauma { item.UpdateSpriteStates(deltaTime); } + else if (me is Structure structure) + { + structure.UpdateSpriteStates(deltaTime); + } } } @@ -575,32 +703,52 @@ namespace Barotrauma { Vector2 moveAmount = position - startMovingPos; moveAmount.Y = -moveAmount.Y; - moveAmount.X = (float)(moveAmount.X > 0.0f ? Math.Floor(moveAmount.X / Submarine.GridSize.X) : Math.Ceiling(moveAmount.X / Submarine.GridSize.X)) * Submarine.GridSize.X; - moveAmount.Y = (float)(moveAmount.Y > 0.0f ? Math.Floor(moveAmount.Y / Submarine.GridSize.Y) : Math.Ceiling(moveAmount.Y / Submarine.GridSize.Y)) * Submarine.GridSize.Y; + + bool isShiftDown = PlayerInput.IsShiftDown(); + + if (!isShiftDown) + { + moveAmount.X = (float)(moveAmount.X > 0.0f ? Math.Floor(moveAmount.X / Submarine.GridSize.X) : Math.Ceiling(moveAmount.X / Submarine.GridSize.X)) * Submarine.GridSize.X; + moveAmount.Y = (float)(moveAmount.Y > 0.0f ? Math.Floor(moveAmount.Y / Submarine.GridSize.Y) : Math.Ceiling(moveAmount.Y / Submarine.GridSize.Y)) * Submarine.GridSize.Y; + } //started moving the selected entities - if (Math.Abs(moveAmount.X) >= Submarine.GridSize.X || Math.Abs(moveAmount.Y) >= Submarine.GridSize.Y) + if (Math.Abs(moveAmount.X) >= Submarine.GridSize.X || Math.Abs(moveAmount.Y) >= Submarine.GridSize.Y || isShiftDown) { foreach (MapEntity e in selectedList) { SpriteEffects spriteEffects = SpriteEffects.None; - if (e is Item item) + switch (e) { - if (item.FlippedX && item.Prefab.CanSpriteFlipX) spriteEffects ^= SpriteEffects.FlipHorizontally; - if (item.flippedY && item.Prefab.CanSpriteFlipY) spriteEffects ^= SpriteEffects.FlipVertically; - } - else if (e is Structure structure) - { - if (structure.FlippedX && structure.Prefab.CanSpriteFlipX) spriteEffects ^= SpriteEffects.FlipHorizontally; - if (structure.flippedY && structure.Prefab.CanSpriteFlipY) spriteEffects ^= SpriteEffects.FlipVertically; - } - else if (e is WayPoint wayPoint) - { - Vector2 drawPos = e.WorldPosition; - drawPos.Y = -drawPos.Y; - drawPos += moveAmount; - wayPoint.Draw(spriteBatch, drawPos); - continue; + case Item item: + { + if (item.FlippedX && item.Prefab.CanSpriteFlipX) spriteEffects ^= SpriteEffects.FlipHorizontally; + if (item.flippedY && item.Prefab.CanSpriteFlipY) spriteEffects ^= SpriteEffects.FlipVertically; + break; + } + case Structure structure: + { + if (structure.FlippedX && structure.Prefab.CanSpriteFlipX) spriteEffects ^= SpriteEffects.FlipHorizontally; + if (structure.flippedY && structure.Prefab.CanSpriteFlipY) spriteEffects ^= SpriteEffects.FlipVertically; + break; + } + case WayPoint wayPoint: + { + Vector2 drawPos = e.WorldPosition; + drawPos.Y = -drawPos.Y; + drawPos += moveAmount; + wayPoint.Draw(spriteBatch, drawPos); + continue; + } + case LinkedSubmarine linkedSub: + { + var ma = moveAmount; + ma.Y = -ma.Y; + Vector2 lPos = linkedSub.Position; + lPos += ma; + linkedSub.Draw(spriteBatch, lPos, alpha: 0.5f); + break; + } } e.prefab?.DrawPlacing(spriteBatch, new Rectangle(e.WorldRect.Location + new Point((int)moveAmount.X, (int)-moveAmount.Y), e.WorldRect.Size), e.Scale, spriteEffects); @@ -656,7 +804,7 @@ namespace Barotrauma } } - if ((PlayerInput.KeyDown(Keys.LeftControl) || PlayerInput.KeyDown(Keys.RightControl))) + if (PlayerInput.IsCtrlDown()) { if (PlayerInput.KeyHit(Keys.N)) { @@ -734,7 +882,10 @@ namespace Barotrauma CopyEntities(entities); - entities.ForEach(e => e.Remove()); + entities.ForEach(e => + { + e.Remove(); + }); entities.Clear(); } @@ -847,6 +998,7 @@ namespace Barotrauma resizeDirX = x; resizeDirY = y; resizing = true; + startMovingPos = Vector2.Zero; } } } @@ -864,6 +1016,11 @@ namespace Barotrauma Vector2 mousePos = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); + if (PlayerInput.IsShiftDown()) + { + mousePos = cam.ScreenToWorld(PlayerInput.MousePosition); + } + if (resizeDirX > 0) { mousePos.X = Math.Max(mousePos.X, rect.X + Submarine.GridSize.X); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntityPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntityPrefab.cs index 676a56d2d..640cd4a95 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntityPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/MapEntityPrefab.cs @@ -8,6 +8,12 @@ namespace Barotrauma { public virtual void UpdatePlacing(Camera cam) { + if (PlayerInput.SecondaryMouseButtonClicked()) + { + selected = null; + return; + } + Vector2 placeSize = Submarine.GridSize; if (placePosition == Vector2.Zero) @@ -41,12 +47,6 @@ namespace Barotrauma newRect.Y = -newRect.Y; } - - if (PlayerInput.SecondaryMouseButtonHeld()) - { - placePosition = Vector2.Zero; - selected = null; - } } public virtual void DrawPlacing(SpriteBatch spriteBatch, Camera cam) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs index e60fb34c9..a8b74b8b5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs @@ -24,6 +24,10 @@ namespace Barotrauma { get { + if (!GameMain.SubEditorScreen.ShowThalamus && prefab.Category.HasFlag(MapEntityCategory.Thalamus)) + { + return false; + } return HasBody ? ShowWalls : ShowStructures; } } @@ -46,6 +50,8 @@ namespace Barotrauma decorativeSprite.Sprite.EnsureLazyLoaded(); spriteAnimState.Add(decorativeSprite, new DecorativeSprite.State()); } + + UpdateSpriteStates(0.0f); } partial void CreateConvexHull(Vector2 position, Vector2 size, float rotation) @@ -334,7 +340,7 @@ namespace Barotrauma float rotation = decorativeSprite.GetRotation(ref spriteAnimState[decorativeSprite].RotationState); Vector2 offset = decorativeSprite.GetOffset(ref spriteAnimState[decorativeSprite].OffsetState) * Scale; decorativeSprite.Sprite.Draw(spriteBatch, new Vector2(DrawPosition.X + offset.X, -(DrawPosition.Y + offset.Y)), color, - rotation, Scale, prefab.sprite.effects, + rotation, decorativeSprite.Scale * Scale, prefab.sprite.effects, depth: Math.Min(depth + (decorativeSprite.Sprite.Depth - prefab.sprite.Depth), 0.999f)); } prefab.sprite.effects = oldEffects; @@ -435,7 +441,7 @@ namespace Barotrauma byte sectionCount = msg.ReadByte(); if (sectionCount != Sections.Length) { - string errorMsg = $"Error while reading a network event for the structure \"{Name}\". Section count does not match (server: {sectionCount} client: {Sections.Length})"; + string errorMsg = $"Error while reading a network event for the structure \"{Name} ({ID})\". Section count does not match (server: {sectionCount} client: {Sections.Length})"; DebugConsole.NewMessage(errorMsg, Color.Red); GameAnalyticsManager.AddErrorEventOnce("Structure.ClientRead:SectionCountMismatch", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/StructurePrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/StructurePrefab.cs index dec803786..52961c361 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/StructurePrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/StructurePrefab.cs @@ -18,6 +18,12 @@ namespace Barotrauma public override void UpdatePlacing(Camera cam) { + if (PlayerInput.SecondaryMouseButtonClicked()) + { + selected = null; + return; + } + Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); Vector2 size = ScaledSize; Rectangle newRect = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y); @@ -59,8 +65,6 @@ namespace Barotrauma return; } } - - if (PlayerInput.SecondaryMouseButtonHeld()) selected = null; } public override void DrawPlacing(SpriteBatch spriteBatch, Camera cam) @@ -70,9 +74,6 @@ namespace Barotrauma if (placePosition == Vector2.Zero) { - if (PlayerInput.PrimaryMouseButtonHeld()) - placePosition = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); - newRect.X = (int)position.X; newRect.Y = (int)position.Y; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs index aa88465d9..43a5d1494 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs @@ -6,9 +6,10 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; +using Barotrauma.Items.Components; namespace Barotrauma { @@ -86,7 +87,7 @@ namespace Barotrauma existingSound = GameMain.SoundManager.LoadSound(filename, stream); if (existingSound == null) { return null; } } - catch (FileNotFoundException e) + catch (System.IO.FileNotFoundException e) { string errorMsg = "Failed to load sound file \"" + filename + "\"."; DebugConsole.ThrowError(errorMsg, e); @@ -223,7 +224,7 @@ namespace Barotrauma GUI.DrawRectangle(spriteBatch, worldBorders, Color.White, false, 0, 5); - if (sub.subBody == null || sub.subBody.PositionBuffer.Count < 2) continue; + if (sub.SubBody == null || sub.subBody.PositionBuffer.Count < 2) continue; Vector2 prevPos = ConvertUnits.ToDisplayUnits(sub.subBody.PositionBuffer[0].Position); prevPos.Y = -prevPos.Y; @@ -246,7 +247,7 @@ namespace Barotrauma public static Color DamageEffectColor; private static readonly List depthSortedDamageable = new List(); - public static void DrawDamageable(SpriteBatch spriteBatch, Effect damageEffect, bool editing = false) + public static void DrawDamageable(SpriteBatch spriteBatch, Effect damageEffect, bool editing = false, Predicate predicate = null) { var entitiesToRender = !editing && visibleEntities != null ? visibleEntities : MapEntity.mapEntityList; @@ -257,6 +258,10 @@ namespace Barotrauma { if (e is Structure structure && structure.DrawDamageEffect) { + if (predicate != null) + { + if (!predicate(e)) continue; + } float drawDepth = structure.GetDrawDepth(); int i = 0; while (i < depthSortedDamageable.Count) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs index b638ec40f..a168a3952 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using System.Xml.Linq; @@ -19,9 +19,9 @@ namespace Barotrauma { try { - using (MemoryStream mem = new MemoryStream(Convert.FromBase64String(previewImageData))) + using (System.IO.MemoryStream mem = new System.IO.MemoryStream(Convert.FromBase64String(previewImageData))) { - var texture = TextureLoader.FromStream(mem, path: FilePath); + var texture = TextureLoader.FromStream(mem, path: FilePath, compress: false); if (texture == null) { throw new Exception("PreviewImage texture returned null"); } PreviewImage = new Sprite(texture, null, null); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/WayPoint.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/WayPoint.cs index b4bf3c3e8..8baa8eb61 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/WayPoint.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/WayPoint.cs @@ -1,6 +1,7 @@ using Barotrauma.Items.Components; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; using System; using System.Collections.Generic; @@ -8,7 +9,7 @@ namespace Barotrauma { partial class WayPoint : MapEntity { - private static Dictionary iconSprites; + private static Dictionary iconSprites; private const int WaypointSize = 12, SpawnPointSize = 32; public override bool IsVisible(Rectangle worldView) @@ -55,10 +56,18 @@ namespace Barotrauma Color.White); } - Sprite sprite = iconSprites[SpawnType]; + Sprite sprite = iconSprites[SpawnType.ToString()]; if (spawnType == SpawnType.Human && AssignedJob?.Icon != null) { - sprite = iconSprites[SpawnType.Path]; + sprite = iconSprites["Path"]; + } + else if (ConnectedDoor != null) + { + sprite = iconSprites["Door"]; + } + else if (Ladders != null) + { + sprite = iconSprites["Ladder"]; } sprite.Draw(spriteBatch, drawPos, clr, scale: iconSize / (float)sprite.SourceRect.Width, depth: 0.001f); sprite.RelativeOrigin = Vector2.One * 0.5f; @@ -107,59 +116,72 @@ namespace Barotrauma { editingHUD = CreateEditingHUD(); } - + if (IsSelected && PlayerInput.PrimaryMouseButtonClicked()) { Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition); - // Update gaps, ladders, and stairs - UpdateLinkedEntity(position, Gap.GapList, gap => ConnectedGap = gap, gap => + if (PlayerInput.KeyDown(Keys.Space)) { - if (ConnectedGap == gap) + foreach (MapEntity e in mapEntityList) { - ConnectedGap = null; - } - }); - UpdateLinkedEntity(position, Item.ItemList, i => - { - var ladder = i?.GetComponent(); - if (ladder != null) - { - Ladders = ladder; - } - }, i => - { - var ladder = i?.GetComponent(); - if (ladder != null) - { - if (Ladders == ladder) + if (e.GetType() != typeof(WayPoint)) continue; + if (e == this) continue; + + if (!Submarine.RectContains(e.Rect, position)) continue; + + if (linkedTo.Contains(e)) { - Ladders = null; + linkedTo.Remove(e); + e.linkedTo.Remove(this); + } + else + { + linkedTo.Add(e); + e.linkedTo.Add(this); } } - }, inflate: 5); - // TODO: Cannot check the rectangle, since the rectangle is not rotated -> Need to use the collider. - //var stairList = mapEntityList.Where(me => me is Structure s && s.StairDirection != Direction.None).Select(me => me as Structure); - //UpdateLinkedEntity(position, stairList, s => - //{ - // Stairs = s; - //}, s => - //{ - // if (Stairs == s) - // { - // Stairs = null; - // } - //}); - - foreach (MapEntity e in mapEntityList) + } + else { - if (e.GetType() != typeof(WayPoint)) continue; - if (e == this) continue; - - if (!Submarine.RectContains(e.Rect, position)) continue; - - linkedTo.Add(e); - e.linkedTo.Add(this); + // Update gaps, ladders, and stairs + UpdateLinkedEntity(position, Gap.GapList, gap => ConnectedGap = gap, gap => + { + if (ConnectedGap == gap) + { + ConnectedGap = null; + } + }); + UpdateLinkedEntity(position, Item.ItemList, i => + { + var ladder = i?.GetComponent(); + if (ladder != null) + { + Ladders = ladder; + } + }, i => + { + var ladder = i?.GetComponent(); + if (ladder != null) + { + if (Ladders == ladder) + { + Ladders = null; + } + } + }, inflate: 5); + // TODO: Cannot check the rectangle, since the rectangle is not rotated -> Need to use the collider. + //var stairList = mapEntityList.Where(me => me is Structure s && s.StairDirection != Direction.None).Select(me => me as Structure); + //UpdateLinkedEntity(position, stairList, s => + //{ + // Stairs = s; + //}, s => + //{ + // if (Stairs == s) + // { + // Stairs = null; + // } + //}); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Media/Video.cs b/Barotrauma/BarotraumaClient/ClientSource/Media/Video.cs index 953104e5f..eaf0966b8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Media/Video.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Media/Video.cs @@ -1,5 +1,5 @@ using System; -using System.IO; +using Barotrauma.IO; using System.Collections.Generic; using System.Text; using System.Threading; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ChatMessage.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ChatMessage.cs index c0b8257c6..10541b14b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ChatMessage.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ChatMessage.cs @@ -17,10 +17,12 @@ namespace Barotrauma.Networking { UInt16 ID = msg.ReadUInt16(); ChatMessageType type = (ChatMessageType)msg.ReadByte(); + PlayerConnectionChangeType changeType = PlayerConnectionChangeType.None; string txt = ""; if (type != ChatMessageType.Order) { + changeType = (PlayerConnectionChangeType)msg.ReadByte(); txt = msg.ReadString(); } @@ -114,7 +116,7 @@ namespace Barotrauma.Networking GameMain.Client.ServerSettings.ServerLog?.WriteLine(txt, messageType); break; default: - GameMain.Client.AddChatMessage(txt, type, senderName, senderCharacter); + GameMain.Client.AddChatMessage(txt, type, senderName, senderCharacter, changeType); break; } LastID = ID; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ChildServerRelay.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ChildServerRelay.cs index e0915a5af..4c754132a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ChildServerRelay.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ChildServerRelay.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.IO.Pipes; using System.Text; using System.Threading; @@ -18,8 +18,8 @@ namespace Barotrauma.Networking public static void Start(ProcessStartInfo processInfo) { - writePipe = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.Inheritable); - readPipe = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable); + writePipe = new AnonymousPipeServerStream(PipeDirection.Out, System.IO.HandleInheritability.Inheritable); + readPipe = new AnonymousPipeServerStream(PipeDirection.In, System.IO.HandleInheritability.Inheritable); writeStream = writePipe; readStream = readPipe; @@ -38,6 +38,13 @@ namespace Barotrauma.Networking localHandlesDisposed = true; } + public static void ClosePipes() + { + writePipe?.Close(); + readPipe?.Close(); + shutDown = true; + } + public static void ShutDown() { Process?.Kill(); Process = null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Client.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Client.cs index 51fc9d4fa..7a254152f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Client.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Client.cs @@ -14,8 +14,10 @@ namespace Barotrauma.Networking public UInt64 SteamID; public byte ID; public UInt16 CharacterID; + public float Karma; public bool Muted; public bool InGame; + public bool HasPermissions; public bool AllowKicking; } @@ -44,6 +46,8 @@ namespace Barotrauma.Networking public bool AllowKicking; + public float Karma; + public void UpdateSoundPosition() { if (VoipSound == null) { return; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs index 76d3e90a0..22a91415b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Threading; using System.Xml; @@ -100,7 +100,7 @@ namespace Barotrauma.Networking WriteStream = null; } - WriteStream = new FileStream(FilePath, FileMode.Create, FileAccess.Write, FileShare.None); + WriteStream = File.Open(FilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write); TimeStarted = Environment.TickCount; } @@ -259,7 +259,7 @@ namespace Barotrauma.Networking { newTransfer.OpenStream(); } - catch (IOException e) + catch (System.IO.IOException e) { if (i < maxRetries) { @@ -422,7 +422,7 @@ namespace Barotrauma.Networking } if (string.IsNullOrEmpty(fileName) || - fileName.IndexOfAny(Path.GetInvalidFileNameChars()) > -1) + fileName.IndexOfAny(Path.GetInvalidFileNameChars().ToArray()) > -1) { errorMessage = "Illegal characters in file name ''" + fileName + "''"; return false; @@ -455,7 +455,7 @@ namespace Barotrauma.Networking switch (fileTransfer.FileType) { case FileTransferType.Submarine: - Stream stream; + System.IO.Stream stream; try { stream = SaveUtil.DecompressFiletoStream(fileTransfer.FilePath); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs index 821661faa..87983a95b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs @@ -3,7 +3,7 @@ using Barotrauma.Steam; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.IO.Compression; using System.Linq; using System.Text; @@ -28,6 +28,8 @@ namespace Barotrauma.Networking get { return name; } } + public string PendingName = string.Empty; + public void SetName(string value) { value = value.Replace(":", "").Replace(";", ""); @@ -50,7 +52,7 @@ namespace Barotrauma.Networking public GUITickBox EndVoteTickBox; private GUIComponent buttonContainer; - private NetStats netStats; + public readonly NetStats NetStats; protected GUITickBox cameraFollowsSub; @@ -112,6 +114,7 @@ namespace Barotrauma.Networking public bool SpawnAsTraitor; public string TraitorFirstObjective; + public TraitorMissionPrefab TraitorMission = null; public byte ID { @@ -166,9 +169,9 @@ namespace Barotrauma.Networking allowReconnect = true; - netStats = new NetStats(); + NetStats = new NetStats(); - inGameHUD = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: null) + inGameHUD = new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, GUI.Canvas), style: null) { CanBeFocused = false }; @@ -482,12 +485,13 @@ namespace Barotrauma.Networking if (requiresPw && !canStart && !connectCancelled) { + GUI.ClearCursorWait(); reconnectBox?.Close(); reconnectBox = null; string pwMsg = TextManager.Get("PasswordRequired"); var msgBox = new GUIMessageBox(pwMsg, "", new string[] { TextManager.Get("OK"), TextManager.Get("Cancel") }, - relativeSize: new Vector2(0.25f, 0.1f), minSize: new Point(400, 170)); + relativeSize: new Vector2(0.25f, 0.1f), minSize: new Point(400, (int)(170 * Math.Max(1.0f, GUI.Scale)))); var passwordHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.5f), msgBox.Content.RectTransform), childAnchor: Anchor.TopCenter); var passwordBox = new GUITextBox(new RectTransform(new Vector2(0.8f, 1f), passwordHolder.RectTransform) { MinSize = new Point(0, 20) }) { @@ -513,6 +517,7 @@ namespace Barotrauma.Networking { requiresPw = false; connectCancelled = true; + GameMain.ServerListScreen.Select(); return true; }; @@ -564,14 +569,7 @@ namespace Barotrauma.Networking } } - /*TODO: reimplement - if (ShowNetStats && client?.ServerConnection != null) - { - netStats.AddValue(NetStats.NetStatType.ReceivedBytes, client.ServerConnection.Statistics.ReceivedBytes); - netStats.AddValue(NetStats.NetStatType.SentBytes, client.ServerConnection.Statistics.SentBytes); - netStats.AddValue(NetStats.NetStatType.ResentMessages, client.ServerConnection.Statistics.ResentMessages); - netStats.Update(deltaTime); - }*/ + NetStats.Update(deltaTime); UpdateHUD(deltaTime); @@ -669,6 +667,7 @@ namespace Barotrauma.Networking if (header != ServerPacketHeader.STARTGAMEFINALIZE && header != ServerPacketHeader.ENDGAME && + header != ServerPacketHeader.PING_REQUEST && roundInitStatus == RoundInitStatus.WaitingForStartGameFinalize) { //rewind the header byte we just read @@ -679,6 +678,31 @@ namespace Barotrauma.Networking switch (header) { + case ServerPacketHeader.PING_REQUEST: + IWriteMessage response = new WriteOnlyMessage(); + response.Write((byte)ClientPacketHeader.PING_RESPONSE); + byte requestLen = inc.ReadByte(); + response.Write(requestLen); + for (int i=0;i c.ID == clientId); + if (client != null) + { + client.Ping = clientPing; + } + } + break; case ServerPacketHeader.UPDATE_LOBBY: ReadLobbyUpdate(inc); break; @@ -750,7 +774,7 @@ namespace Barotrauma.Networking if (readyToStart && !CoroutineManager.IsCoroutineRunning("WaitForStartRound")) { - CoroutineManager.StartCoroutine(GameMain.NetLobbyScreen.WaitForStartRound(startButton: null, allowCancel: false), "WaitForStartRound"); + CoroutineManager.StartCoroutine(GameMain.NetLobbyScreen.WaitForStartRound(startButton: null), "WaitForStartRound"); } break; case ServerPacketHeader.STARTGAME: @@ -1056,11 +1080,13 @@ namespace Barotrauma.Networking var missionPrefab = TraitorMissionPrefab.List.Find(t => t.Identifier == missionIdentifier); Sprite icon = missionPrefab?.Icon; - switch(messageType) { + switch(messageType) + { case TraitorMessageType.Objective: var isTraitor = !string.IsNullOrEmpty(message); SpawnAsTraitor = isTraitor; TraitorFirstObjective = message; + TraitorMission = missionPrefab; if (Character != null) { Character.IsTraitor = isTraitor; @@ -1422,6 +1448,15 @@ namespace Barotrauma.Networking var teamID = i == 0 ? Character.TeamType.Team1 : Character.TeamType.Team2; Submarine.MainSubs[i].TeamID = teamID; + foreach (Item item in Item.ItemList) + { + if (item.Submarine == null) { continue; } + if (item.Submarine != Submarine.MainSubs[i] && !Submarine.MainSubs[i].DockedTo.Contains(item.Submarine)) { continue; } + foreach (WifiComponent wifiComponent in item.GetComponents()) + { + wifiComponent.TeamID = Submarine.MainSubs[i].TeamID; + } + } foreach (Submarine sub in Submarine.MainSubs[i].DockedTo) { sub.TeamID = teamID; @@ -1503,7 +1538,7 @@ namespace Barotrauma.Networking var matchingSub = SubmarineInfo.SavedSubmarines.FirstOrDefault(s => s.Name == subName && s.MD5Hash.Hash == subHash) ?? - new SubmarineInfo(Path.Combine(SubmarineInfo.SavePath, subName) + ".sub", subHash); + new SubmarineInfo(Path.Combine(SubmarineInfo.SavePath, subName) + ".sub", subHash, tryLoad: false); matchingSub.RequiredContentPackagesInstalled = requiredContentPackagesInstalled; serverSubmarines.Add(matchingSub); @@ -1537,9 +1572,11 @@ namespace Barotrauma.Networking string name = inc.ReadString(); string preferredJob = inc.ReadString(); UInt16 characterID = inc.ReadUInt16(); + float karma = inc.ReadSingle(); bool muted = inc.ReadBoolean(); bool inGame = inc.ReadBoolean(); - bool allowKicking = inc.ReadBoolean(); + bool hasPermissions = inc.ReadBoolean(); + bool allowKicking = inc.ReadBoolean() || IsServerOwner; inc.ReadPadBits(); tempClients.Add(new TempClient @@ -1550,8 +1587,10 @@ namespace Barotrauma.Networking Name = name, PreferredJob = preferredJob, CharacterID = characterID, + Karma = karma, Muted = muted, InGame = inGame, + HasPermissions = hasPermissions, AllowKicking = allowKicking }); } @@ -1579,7 +1618,9 @@ namespace Barotrauma.Networking existingClient.NameID = tc.NameID; existingClient.PreferredJob = tc.PreferredJob; existingClient.Character = null; + existingClient.Karma = tc.Karma; existingClient.Muted = tc.Muted; + existingClient.HasPermissions = tc.HasPermissions; existingClient.InGame = tc.InGame; existingClient.AllowKicking = tc.AllowKicking; GameMain.NetLobbyScreen.SetPlayerNameAndJobPreference(existingClient); @@ -1852,8 +1893,8 @@ namespace Barotrauma.Networking DebugConsole.ThrowError("Writing object data to \"crashreport_object.bin\", please send this file to us at http://github.com/Regalis11/Barotrauma/issues"); - using (FileStream fl = File.Open("crashreport_object.bin", FileMode.Create)) - using (BinaryWriter sw = new BinaryWriter(fl)) + using (FileStream fl = File.Open("crashreport_object.bin", System.IO.FileMode.Create)) + using (System.IO.BinaryWriter sw = new System.IO.BinaryWriter(fl)) { sw.Write(inc.Buffer, (int)(prevBytePos - prevByteLength), (int)(prevByteLength)); } @@ -2085,7 +2126,8 @@ namespace Barotrauma.Networking GameMain.GameSession.SubmarineInfo = new SubmarineInfo(subPath, ""); } SaveUtil.LoadGame(GameMain.GameSession.SavePath, GameMain.GameSession); - GameMain.GameSession?.Submarine?.CheckSubsLeftBehind(); + GameMain.GameSession?.SubmarineInfo?.Reload(); + GameMain.GameSession?.SubmarineInfo?.CheckSubsLeftBehind(); if (GameMain.GameSession?.SubmarineInfo?.Name != null) { GameMain.NetLobbyScreen.TryDisplayCampaignSubmarine(GameMain.GameSession.SubmarineInfo); @@ -2540,6 +2582,11 @@ namespace Barotrauma.Networking inGameHUD.AddToGUIUpdateList(); GameMain.NetLobbyScreen.FileTransferFrame?.AddToGUIUpdateList(); } + + serverSettings.AddToGUIUpdateList(); + if (serverSettings.ServerLog.LogFrame != null) serverSettings.ServerLog.LogFrame.AddToGUIUpdateList(); + + GameMain.NetLobbyScreen?.PlayerFrame?.AddToGUIUpdateList(); } public void UpdateHUD(float deltaTime) @@ -2583,7 +2630,7 @@ namespace Barotrauma.Networking if (GUI.KeyboardDispatcher.Subscriber == null) { bool chatKeyHit = PlayerInput.KeyHit(InputType.Chat); - bool radioKeyHit = PlayerInput.KeyHit(InputType.RadioChat) && (Character.Controlled == null || Character.Controlled.SpeechImpediment < 0); + bool radioKeyHit = PlayerInput.KeyHit(InputType.RadioChat) && (Character.Controlled == null || Character.Controlled.SpeechImpediment < 100); if (chatKeyHit || radioKeyHit) { @@ -2629,8 +2676,6 @@ namespace Barotrauma.Networking } } } - serverSettings.AddToGUIUpdateList(); - if (serverSettings.ServerLog.LogFrame != null) serverSettings.ServerLog.LogFrame.AddToGUIUpdateList(); } public virtual void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch) @@ -2716,15 +2761,15 @@ namespace Barotrauma.Networking if (!ShowNetStats) return; - netStats.Draw(spriteBatch, new Rectangle(300, 10, 300, 150)); + NetStats.Draw(spriteBatch, new Rectangle(300, 10, 300, 150)); + /* TODO: reimplement int width = 200, height = 300; int x = GameMain.GraphicsWidth - width, y = (int)(GameMain.GraphicsHeight * 0.3f); GUI.DrawRectangle(spriteBatch, new Rectangle(x, y, width, height), Color.Black * 0.7f, true); GUI.Font.DrawString(spriteBatch, "Network statistics:", new Vector2(x + 10, y + 10), Color.White); - /* TODO: reimplement if (client.ServerConnection != null) { GUI.Font.DrawString(spriteBatch, "Ping: " + (int)(client.ServerConnection.AverageRoundtripTime * 1000.0f) + " ms", new Vector2(x + 10, y + 25), Color.White); @@ -2743,73 +2788,106 @@ namespace Barotrauma.Networking }*/ } - public virtual bool SelectCrewCharacter(Character character, GUIComponent characterFrame) + public virtual bool SelectCrewCharacter(Character character, GUIComponent frame) { - if (character == null) { return false; } + if (character == null) return false; if (character != myCharacter) { var client = GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == character); - if (client == null) { return false; } + if (client == null) return false; - var content = new GUIFrame(new RectTransform(new Vector2(0.9f, 1.0f - characterFrame.RectTransform.RelativeSize.Y), characterFrame.RectTransform, Anchor.BottomCenter, Pivot.TopCenter), - style: null); - - var mute = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.5f), content.RectTransform, Anchor.TopCenter), - TextManager.Get("Mute")) - { - Selected = client.MutedLocally, - OnSelected = (tickBox) => { client.MutedLocally = tickBox.Selected; return true; } - }; - - var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.5f), content.RectTransform, Anchor.BottomCenter), isHorizontal: true) - { - RelativeSpacing = 0.05f, - ChildAnchor = Anchor.CenterLeft, - Stretch = true - }; - - if (HasPermission(ClientPermissions.Ban)) - { - var banButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), - TextManager.Get("Ban"), style: "GUIButtonSmall") - { - UserData = client, - OnClicked = (btn, userdata) => { GameMain.NetLobbyScreen.BanPlayer(client); return false; } - }; - } - if (HasPermission(ClientPermissions.Kick)) - { - var kickButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), - TextManager.Get("Kick"), style: "GUIButtonSmall") - { - UserData = client, - OnClicked = (btn, userdata) => { GameMain.NetLobbyScreen.KickPlayer(client); return false; } - }; - } - else if (serverSettings.Voting.AllowVoteKick) - { - var kickVoteButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), - TextManager.Get("VoteToKick"), style: "GUIButtonSmall") - { - UserData = client, - OnClicked = (btn, userdata) => { VoteForKick(client); btn.Enabled = false; return true; } - }; - if (GameMain.NetworkMember.ConnectedClients != null) - { - kickVoteButton.Enabled = !client.HasKickVoteFromID(myID); - } - } + CreateSelectionRelatedButtons(client, frame); } return true; } + public virtual bool SelectCrewClient(Client client, GUIComponent frame) + { + if (client == null || client.ID == ID) return false; + CreateSelectionRelatedButtons(client, frame); + return true; + } + + private void CreateSelectionRelatedButtons(Client client, GUIComponent frame) + { + var content = new GUIFrame(new RectTransform(new Vector2(1f, 1.0f - frame.RectTransform.RelativeSize.Y), frame.RectTransform, Anchor.BottomCenter, Pivot.TopCenter), + style: null); + + var mute = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.5f), content.RectTransform, Anchor.TopCenter), + TextManager.Get("Mute")) + { + Selected = client.MutedLocally, + OnSelected = (tickBox) => { client.MutedLocally = tickBox.Selected; return true; } + }; + + var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.35f), content.RectTransform, Anchor.BottomCenter), isHorizontal: true, childAnchor: Anchor.BottomLeft) + { + RelativeSpacing = 0.05f, + Stretch = true + }; + + if (!GameMain.Client.GameStarted || (GameMain.Client.Character == null || GameMain.Client.Character.IsDead) && (client.Character == null || client.Character.IsDead)) + { + var messageButton = new GUIButton(new RectTransform(new Vector2(1f, 0.2f), content.RectTransform, Anchor.BottomCenter) { RelativeOffset = new Vector2(0f, buttonContainer.RectTransform.RelativeSize.Y) }, + TextManager.Get("message"), style: "GUIButtonSmall") + { + UserData = client, + OnClicked = (btn, userdata) => + { + chatBox.InputBox.Text = $"{client.Name}; "; + CoroutineManager.StartCoroutine(selectCoroutine()); + return false; + } + }; + } + + // Need a delayed selection due to the inputbox being deselected when a left click occurs outside of it + IEnumerable selectCoroutine() + { + yield return new WaitForSeconds(0.01f, true); + chatBox.InputBox.Select(chatBox.InputBox.Text.Length); + } + + if (HasPermission(ClientPermissions.Ban) && client.AllowKicking) + { + var banButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), + TextManager.Get("Ban"), style: "GUIButtonSmall") + { + UserData = client, + OnClicked = (btn, userdata) => { GameMain.NetLobbyScreen.BanPlayer(client); return false; } + }; + } + if (HasPermission(ClientPermissions.Kick) && client.AllowKicking) + { + var kickButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), + TextManager.Get("Kick"), style: "GUIButtonSmall") + { + UserData = client, + OnClicked = (btn, userdata) => { GameMain.NetLobbyScreen.KickPlayer(client); return false; } + }; + } + else if (serverSettings.Voting.AllowVoteKick && client.AllowKicking) + { + var kickVoteButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), + TextManager.Get("VoteToKick"), style: "GUIButtonSmall") + { + UserData = client, + OnClicked = (btn, userdata) => { VoteForKick(client); btn.Enabled = false; return true; } + }; + if (GameMain.NetworkMember.ConnectedClients != null) + { + kickVoteButton.Enabled = !client.HasKickVoteFromID(myID); + } + } + } + public void CreateKickReasonPrompt(string clientName, bool ban, bool rangeBan = false) { var banReasonPrompt = new GUIMessageBox( TextManager.Get(ban ? "BanReasonPrompt" : "KickReasonPrompt"), - "", new string[] { TextManager.Get("OK"), TextManager.Get("Cancel") }, new Vector2(0.25f, 0.2f), new Point(400, 200)); + "", new string[] { TextManager.Get("OK"), TextManager.Get("Cancel") }, new Vector2(0.25f, 0.22f), new Point(400, 220)); var content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.6f), banReasonPrompt.InnerFrame.RectTransform, Anchor.Center)); var banReasonBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.3f), content.RectTransform)) @@ -2823,14 +2901,16 @@ namespace Barotrauma.Networking if (ban) { - new GUITextBlock(new RectTransform(new Vector2(0.8f, 0.15f), content.RectTransform), TextManager.Get("BanDuration")); - permaBanTickBox = new GUITickBox(new RectTransform(new Vector2(0.8f, 0.15f), content.RectTransform) { RelativeOffset = new Vector2(0.05f, 0.0f) }, - TextManager.Get("BanPermanent")) + + var labelContainer = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.25f), content.RectTransform), isHorizontal: false); + new GUITextBlock(new RectTransform(new Vector2(1f, 0.5f), labelContainer.RectTransform), TextManager.Get("BanDuration")) { Padding = Vector4.Zero }; + var buttonContent = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.5f), labelContainer.RectTransform), isHorizontal: true); + permaBanTickBox = new GUITickBox(new RectTransform(new Vector2(0.4f, 0.15f), buttonContent.RectTransform), TextManager.Get("BanPermanent")) { Selected = true }; - var durationContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 0.15f), content.RectTransform), isHorizontal: true) + var durationContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 1f), buttonContent.RectTransform), isHorizontal: true) { Visible = false }; @@ -2930,6 +3010,11 @@ namespace Barotrauma.Networking if (GameMain.GameSession?.GameMode != null) { errorLines.Add("Game mode: " + GameMain.GameSession.GameMode.Name); + if (GameMain.GameSession?.GameMode is MultiPlayerCampaign campaign) + { + errorLines.Add("Campaign ID: " + campaign.CampaignID); + errorLines.Add("Campaign save ID: " + campaign.LastSaveID + "(pending: " + campaign.PendingSaveID + ")"); + } } if (GameMain.GameSession?.Submarine != null) { @@ -2938,6 +3023,13 @@ namespace Barotrauma.Networking if (Level.Loaded != null) { errorLines.Add("Level: " + Level.Loaded.Seed + ", " + Level.Loaded.EqualityCheckVal); + errorLines.Add("Entity count before generating level: " + Level.Loaded.EntityCountBeforeGenerate); + errorLines.Add("Entities:"); + foreach (Entity e in Level.Loaded.EntitiesBeforeGenerate) + { + errorLines.Add(" " + e.ID + ": " + e.ToString()); + } + errorLines.Add("Entity count after generating level: " + Level.Loaded.EntityCountAfterGenerate); } errorLines.Add("Entity IDs:"); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs index 4f1bc98e0..b279d2775 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs @@ -47,11 +47,30 @@ namespace Barotrauma CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(StructureDamageKarmaDecrease)); CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(DamageFriendlyKarmaDecrease)); + //hide these for now if a localized text is not available + if (TextManager.ContainsTag("Karma." + nameof(StunFriendlyKarmaDecrease))) + { + CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(StunFriendlyKarmaDecrease)); + } + if (TextManager.ContainsTag("Karma." + nameof(StunFriendlyKarmaDecreaseThreshold))) + { + CreateLabeledSlider(parent, 0.0f, 10.0f, 1.0f, nameof(StunFriendlyKarmaDecreaseThreshold)); + } CreateLabeledSlider(parent, 0.0f, 100.0f, 1.0f, nameof(ReactorMeltdownKarmaDecrease)); CreateLabeledSlider(parent, 0.0f, 10.0f, 0.05f, nameof(ReactorOverheatKarmaDecrease)); CreateLabeledNumberInput(parent, 0, 20, nameof(AllowedWireDisconnectionsPerMinute)); CreateLabeledSlider(parent, 0.0f, 20.0f, 0.5f, nameof(WireDisconnectionKarmaDecrease)); CreateLabeledSlider(parent, 0.0f, 30.0f, 1.0f, nameof(SpamFilterKarmaDecrease)); + + //hide these for now if a localized text is not available + if (TextManager.ContainsTag("Karma." + nameof(DangerousItemStealKarmaDecrease))) + { + CreateLabeledSlider(parent, 0.0f, 30.0f, 1.0f, nameof(DangerousItemStealKarmaDecrease)); + } + if (TextManager.ContainsTag("Karma." + nameof(DangerousItemStealBots))) + { + CreateLabeledTickBox(parent, nameof(DangerousItemStealBots)); + } } private void CreateLabeledSlider(GUIComponent parent, float min, float max, float step, string propertyName) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs index 90cd0a00e..eb34d3cdd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs @@ -14,10 +14,10 @@ namespace Barotrauma.Networking ResentMessages = 2 } - private Graph[] graphs; + private readonly Graph[] graphs; - private float[] totalValue; - private float[] lastValue; + private readonly float[] totalValue; + private readonly float[] lastValue; const float UpdateInterval = 0.1f; float updateTimer; @@ -37,9 +37,7 @@ namespace Barotrauma.Networking public void AddValue(NetStatType statType, float value) { float valueChange = value - lastValue[(int)statType]; - totalValue[(int)statType] += valueChange; - lastValue[(int)statType] = value; } @@ -51,7 +49,6 @@ namespace Barotrauma.Networking for (int i = 0; i < 3; i++) { - graphs[i].Update(totalValue[i] / UpdateInterval); totalValue[i] = 0.0f; } @@ -64,23 +61,22 @@ namespace Barotrauma.Networking GUI.DrawRectangle(spriteBatch, rect, Color.Black * 0.4f, true); graphs[(int)NetStatType.ReceivedBytes].Draw(spriteBatch, rect, null, 0.0f, Color.Cyan); - graphs[(int)NetStatType.SentBytes].Draw(spriteBatch, rect, null, 0.0f, GUI.Style.Orange); - - graphs[(int)NetStatType.ResentMessages].Draw(spriteBatch, rect, null, 0.0f, GUI.Style.Red); + if (graphs[(int)NetStatType.ResentMessages].Average() > 0) + { + graphs[(int)NetStatType.ResentMessages].Draw(spriteBatch, rect, null, 0.0f, GUI.Style.Red); + GUI.SmallFont.DrawString(spriteBatch, "Peak resent: " + graphs[(int)NetStatType.ResentMessages].LargestValue() + " messages/s", + new Vector2(rect.Right + 10, rect.Y + 50), GUI.Style.Red); + } GUI.SmallFont.DrawString(spriteBatch, "Peak received: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.ReceivedBytes].LargestValue()) + "/s " + "Avg received: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.ReceivedBytes].Average()) + "/s", new Vector2(rect.Right + 10, rect.Y + 10), Color.Cyan); - GUI.SmallFont.DrawString(spriteBatch, "Peak sent: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.SentBytes].LargestValue()) + "/s " + "Avg sent: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.SentBytes].Average()) + "/s", new Vector2(rect.Right + 10, rect.Y + 30), GUI.Style.Orange); - - GUI.SmallFont.DrawString(spriteBatch, "Peak resent: " + graphs[(int)NetStatType.ResentMessages].LargestValue() + " messages/s", - new Vector2(rect.Right + 10, rect.Y + 50), GUI.Style.Red); #if DEBUG /*int y = 10; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/LidgrenClientPeer.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/LidgrenClientPeer.cs index 41f8f65af..58cf2f388 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/LidgrenClientPeer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/LidgrenClientPeer.cs @@ -39,7 +39,10 @@ namespace Barotrauma.Networking contentPackageOrderReceived = false; - netPeerConfiguration = new NetPeerConfiguration("barotrauma"); + netPeerConfiguration = new NetPeerConfiguration("barotrauma") + { + UseDualModeSockets = GameMain.Config.UseDualModeSockets + }; netPeerConfiguration.DisableMessageType(NetIncomingMessageType.DebugMessage | NetIncomingMessageType.WarningMessage | NetIncomingMessageType.Receipt | NetIncomingMessageType.ErrorMessage | NetIncomingMessageType.Error); @@ -94,6 +97,9 @@ namespace Barotrauma.Networking incomingLidgrenMessages.Clear(); netClient.ReadMessages(incomingLidgrenMessages); + GameMain.Client?.NetStats?.AddValue(NetStats.NetStatType.ReceivedBytes, netClient.Statistics.ReceivedBytes); + GameMain.Client?.NetStats?.AddValue(NetStats.NetStatType.SentBytes, netClient.Statistics.SentBytes); + foreach (NetIncomingMessage inc in incomingLidgrenMessages) { if (inc.SenderConnection != (ServerConnection as LidgrenConnection).NetConnection) { continue; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2PClientPeer.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2PClientPeer.cs index d8a94ef28..ff72730d9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2PClientPeer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2PClientPeer.cs @@ -18,6 +18,8 @@ namespace Barotrauma.Networking private double timeout; private double heartbeatTimer; + private long sentBytes, receivedBytes; + private List incomingInitializationMessages; private List incomingDataMessages; @@ -63,6 +65,7 @@ namespace Barotrauma.Networking outMsg.Write((byte)ConnectionInitialization.ConnectionStarted); Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Reliable); + sentBytes += outMsg.LengthBytes; initializationStep = ConnectionInitialization.SteamTicketAndVersion; @@ -99,11 +102,11 @@ namespace Barotrauma.Networking if (isConnectionInitializationStep) { ulong low = Lidgren.Network.NetBitWriter.ReadUInt32(data, 32, 8); - ulong high = Lidgren.Network.NetBitWriter.ReadUInt32(data, 32, 8+32); + ulong high = Lidgren.Network.NetBitWriter.ReadUInt32(data, 32, 8 + 32); ulong lobbyId = low + (high << 32); Steam.SteamManager.JoinLobby(lobbyId, false); - IReadMessage inc = new ReadOnlyMessage(data, false, 1+8, dataLength - 9, ServerConnection); + IReadMessage inc = new ReadOnlyMessage(data, false, 1 + 8, dataLength - 9, ServerConnection); if (initializationStep != ConnectionInitialization.Success) { incomingInitializationMessages.Add(inc); @@ -137,15 +140,20 @@ namespace Barotrauma.Networking timeout -= deltaTime; heartbeatTimer -= deltaTime; - while (Steamworks.SteamNetworking.IsP2PPacketAvailable()) + for (int i = 0; i < 100; i++) { + if (!Steamworks.SteamNetworking.IsP2PPacketAvailable()) { break; } var packet = Steamworks.SteamNetworking.ReadP2PPacket(); if (packet.HasValue) { OnP2PData(packet?.SteamId ?? 0, packet?.Data, packet?.Data.Length ?? 0, 0); + receivedBytes += packet?.Data.Length ?? 0; } } + GameMain.Client?.NetStats?.AddValue(NetStats.NetStatType.ReceivedBytes, receivedBytes); + GameMain.Client?.NetStats?.AddValue(NetStats.NetStatType.SentBytes, sentBytes); + if (heartbeatTimer < 0.0) { IWriteMessage outMsg = new WriteOnlyMessage(); @@ -153,6 +161,7 @@ namespace Barotrauma.Networking outMsg.Write((byte)PacketHeader.IsHeartbeatMessage); Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Unreliable); + sentBytes += outMsg.LengthBytes; heartbeatTimer = 5.0; } @@ -226,6 +235,7 @@ namespace Barotrauma.Networking heartbeatTimer = 5.0; Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Reliable); + sentBytes += outMsg.LengthBytes; break; case ConnectionInitialization.ContentPackageOrder: if (initializationStep == ConnectionInitialization.SteamTicketAndVersion || @@ -253,7 +263,7 @@ namespace Barotrauma.Networking } Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Reliable); - + sentBytes += outMsg.LengthBytes; break; case ConnectionInitialization.Password: if (initializationStep == ConnectionInitialization.SteamTicketAndVersion) { initializationStep = ConnectionInitialization.Password; } @@ -333,6 +343,7 @@ namespace Barotrauma.Networking private void Send(byte[] buf, int length, Steamworks.P2PSend sendType) { bool successSend = Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, buf, length + 4, 0, sendType); + sentBytes += length + 4; if (!successSend) { if (sendType != Steamworks.P2PSend.Reliable) @@ -340,6 +351,7 @@ namespace Barotrauma.Networking DebugConsole.Log("WARNING: message couldn't be sent unreliably, forcing reliable send (" + length.ToString() + " bytes)"); sendType = Steamworks.P2PSend.Reliable; successSend = Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, buf, length + 4, 0, sendType); + sentBytes += length + 4; } if (!successSend) { @@ -363,6 +375,7 @@ namespace Barotrauma.Networking heartbeatTimer = 5.0; Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Reliable); + sentBytes += outMsg.LengthBytes; } public override void Close(string msg = null) @@ -379,6 +392,7 @@ namespace Barotrauma.Networking outMsg.Write(msg ?? "Disconnected"); Steamworks.SteamNetworking.SendP2PPacket(hostSteamId, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Reliable); + sentBytes += outMsg.LengthBytes; Thread.Sleep(100); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2POwnerPeer.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2POwnerPeer.cs index cf5534b9e..5bc6e9ec2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2POwnerPeer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Primitives/Peers/SteamP2POwnerPeer.cs @@ -13,7 +13,9 @@ namespace Barotrauma.Networking private bool isActive; private ConnectionInitialization initializationStep; - private UInt64 selfSteamID; + private readonly UInt64 selfSteamID; + + private long sentBytes, receivedBytes; class RemotePeer { @@ -204,22 +206,24 @@ namespace Barotrauma.Networking } } - for (int i=0;i<100;i++) + for (int i = 0; i < 100; i++) { if (!Steamworks.SteamNetworking.IsP2PPacketAvailable()) { break; } var packet = Steamworks.SteamNetworking.ReadP2PPacket(); if (packet.HasValue) { OnP2PData(packet?.SteamId ?? 0, packet?.Data, packet?.Data.Length ?? 0, 0); + receivedBytes += packet?.Data.Length ?? 0; } } + GameMain.Client?.NetStats?.AddValue(NetStats.NetStatType.ReceivedBytes, receivedBytes); + GameMain.Client?.NetStats?.AddValue(NetStats.NetStatType.SentBytes, sentBytes); + while (ChildServerRelay.Read(out byte[] incBuf)) { ChildServerRelay.DisposeLocalHandles(); - IReadMessage inc = new ReadOnlyMessage(incBuf, false, 0, incBuf.Length, ServerConnection); - HandleDataMessage(inc); } } @@ -295,6 +299,7 @@ namespace Barotrauma.Networking } bool successSend = Steamworks.SteamNetworking.SendP2PPacket(recipientSteamId, p2pData, p2pData.Length, 0, sendType); + sentBytes += p2pData.Length; if (!successSend) { @@ -303,6 +308,7 @@ namespace Barotrauma.Networking DebugConsole.Log("WARNING: message couldn't be sent unreliably, forcing reliable send (" + p2pData.Length.ToString() + " bytes)"); sendType = Steamworks.P2PSend.Reliable; successSend = Steamworks.SteamNetworking.SendP2PPacket(recipientSteamId, p2pData, p2pData.Length, 0, sendType); + sentBytes += p2pData.Length; } if (!successSend) { @@ -336,7 +342,6 @@ namespace Barotrauma.Networking byte[] msgToSend = (byte[])outMsg.Buffer.Clone(); Array.Resize(ref msgToSend, outMsg.LengthBytes); ChildServerRelay.Write(msgToSend); - return; } else @@ -369,6 +374,7 @@ namespace Barotrauma.Networking outMsg.Write(msg); Steamworks.SteamNetworking.SendP2PPacket(peer.SteamID, outMsg.Buffer, outMsg.LengthBytes, 0, Steamworks.P2PSend.Reliable); + sentBytes += outMsg.LengthBytes; } else { @@ -405,7 +411,7 @@ namespace Barotrauma.Networking ClosePeerSession(remotePeers[i]); } - ChildServerRelay.ShutDown(); + ChildServerRelay.ClosePipes(); OnDisconnect?.Invoke(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerLog.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerLog.cs index 229e0c7b1..0e1f02597 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerLog.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerLog.cs @@ -2,6 +2,8 @@ using System; using System.Collections.Generic; using System.Linq; +using Microsoft.Xna.Framework.Graphics; +using Barotrauma.Extensions; namespace Barotrauma.Networking { @@ -9,15 +11,28 @@ namespace Barotrauma.Networking { public GUIButton LogFrame; private GUIListBox listBox; + private GUIButton reverseButton; private string msgFilter; + private bool reverseOrder = false; + + private bool OnReverseClicked(GUIButton btn, object obj) + { + SetMessageReversal(!reverseOrder); + + return false; + } + public void CreateLogFrame() { - LogFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker") + LogFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null) { OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) LogFrame = null; return true; } }; + + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, LogFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + new GUIButton(new RectTransform(Vector2.One, LogFrame.RectTransform), "", style: null).OnClicked += (btn, userData) => { LogFrame = null; @@ -80,7 +95,17 @@ namespace Barotrauma.Networking GUI.KeyboardDispatcher.Subscriber = searchBox; filterArea.RectTransform.MinSize = new Point(0, filterArea.RectTransform.Children.Max(c => c.MinSize.Y)); - listBox = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.95f), rightColumn.RectTransform)); + GUILayoutGroup listBoxLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.95f), rightColumn.RectTransform)) + { + Stretch = true, + RelativeSpacing = 0.0f + }; + + reverseButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.05f), listBoxLayout.RectTransform), style: "UIToggleButtonVertical"); + reverseButton.Children.ForEach(c => c.SpriteEffects = reverseOrder ? SpriteEffects.FlipVertically : SpriteEffects.None); + reverseButton.OnClicked = OnReverseClicked; + + listBox = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.95f), listBoxLayout.RectTransform)); GUIButton closeButton = new GUIButton(new RectTransform(new Vector2(0.25f, 0.05f), rightColumn.RectTransform), TextManager.Get("Close")) { @@ -107,7 +132,7 @@ namespace Barotrauma.Networking msgFilter = ""; } - public void AssignLogFrame(GUIListBox inListBox, GUIComponent tickBoxContainer, GUITextBox searchBox) + public void AssignLogFrame(GUIButton inReverseButton, GUIListBox inListBox, GUIComponent tickBoxContainer, GUITextBox searchBox) { searchBox.OnTextChanged += (textBox, text) => { @@ -144,6 +169,10 @@ namespace Barotrauma.Networking inListBox.ClearChildren(); listBox = inListBox; + reverseButton = inReverseButton; + reverseButton.Children.ForEach(c => c.SpriteEffects = reverseOrder ? SpriteEffects.FlipVertically : SpriteEffects.None); + reverseButton.OnClicked = OnReverseClicked; + var currLines = lines.ToList(); foreach (LogMessage line in currLines) { @@ -158,8 +187,34 @@ namespace Barotrauma.Networking { float prevSize = listBox.BarSize; - var textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), listBox.Content.RectTransform), - line.Text, wrap: true, font: GUI.SmallFont) + GUIFrame textContainer = null; + + Anchor anchor = Anchor.TopLeft; + Pivot pivot = Pivot.TopLeft; + if (line.RichData != null) + { + foreach (var data in line.RichData) + { + UInt64 id = 0; + if (!UInt64.TryParse(data.Metadata, out id)) { return; } + Client client = GameMain.Client.ConnectedClients.Find(c => c.SteamID == id); + client ??= GameMain.Client.ConnectedClients.Find(c => c.ID == id); + if (client != null && client.Karma < 40.0f) + { + textContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.0f), listBox.Content.RectTransform), + style: null, color: new Color(0xff111155)) + { + CanBeFocused = false + }; + anchor = Anchor.CenterLeft; + pivot = Pivot.CenterLeft; + break; + } + } + } + + var textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), (textContainer ?? listBox.Content).RectTransform, anchor, pivot), + line.RichData, line.SanitizedText, wrap: true, font: GUI.SmallFont) { TextColor = messageColor[line.Type], Visible = !msgTypeHidden[(int)line.Type], @@ -167,6 +222,38 @@ namespace Barotrauma.Networking UserData = line }; + if (textContainer != null) + { + textContainer.RectTransform.NonScaledSize = new Point(textContainer.RectTransform.NonScaledSize.X, textBlock.RectTransform.NonScaledSize.Y + 5); + textBlock.SetTextPos(); + textBlock.RectTransform.Resize(textContainer.RectTransform.NonScaledSize); + } + + if (reverseOrder) + { + textBlock.RectTransform.SetAsFirstChild(); + } + + if (line.RichData != null) + { + foreach (var data in line.RichData) + { + textBlock.ClickableAreas.Add(new GUITextBlock.ClickableArea() + { + Data = data, + OnClick = (component, area) => + { + UInt64 id = 0; + if (!UInt64.TryParse(area.Data.Metadata, out id)) { return; } + Client client = GameMain.Client.ConnectedClients.Find(c => c.SteamID == id); + client ??= GameMain.Client.ConnectedClients.Find(c => c.ID == id); + if (client == null) { return; } + GameMain.NetLobbyScreen.SelectPlayer(client); + } + }); + } + } + if ((prevSize == 1.0f && listBox.BarScroll == 0.0f) || (prevSize < 1.0f && listBox.BarScroll == 1.0f)) listBox.BarScroll = 1.0f; } @@ -195,6 +282,16 @@ namespace Barotrauma.Networking return true; } + private void SetMessageReversal(bool reverse) + { + if (reverseOrder == reverse) { return; } + + reverseOrder = reverse; + reverseButton.Children.ForEach(c => c.SpriteEffects = reverseOrder ? SpriteEffects.FlipVertically : SpriteEffects.None); + + listBox.Content.RectTransform.ReverseChildren(); + } + public bool ClearFilter(GUIComponent button, object obj) { var searchBox = button.UserData as GUITextBox; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs index c299c8380..22f0dc0a1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs @@ -266,7 +266,9 @@ namespace Barotrauma.Networking } //background frame - settingsFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: null, color: Color.Black * 0.5f); + settingsFrame = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, settingsFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + new GUIButton(new RectTransform(Vector2.One, settingsFrame.RectTransform), "", style: null).OnClicked += (btn, userData) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) { ToggleSettingsFrame(btn, userData); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs index 886e62140..299cb6d00 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs @@ -2,14 +2,14 @@ using RestSharp; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using RestSharp.Contrib; using System.Xml.Linq; -using System.Xml; using Color = Microsoft.Xna.Framework.Color; +using System.Runtime.InteropServices; namespace Barotrauma.Steam { @@ -37,6 +37,11 @@ namespace Barotrauma.Steam popularTags.Insert(i, commonness.Key); i++; } + + LogSteamworksNetworkingDelegate = LogSteamworksNetworking; + + IntPtr logSteamworksNetworkingPtr = Marshal.GetFunctionPointerForDelegate(LogSteamworksNetworkingDelegate); + Steamworks.SteamNetworkingUtils.SetDebugOutputFunction(Steamworks.Data.DebugOutputType.Everything, logSteamworksNetworkingPtr); } } catch (DllNotFoundException) @@ -63,6 +68,15 @@ namespace Barotrauma.Steam } } + public static bool NetworkingDebugLog = false; + + private static Steamworks.Data.FSteamNetworkingSocketsDebugOutput LogSteamworksNetworkingDelegate; + + private static void LogSteamworksNetworking(Steamworks.Data.DebugOutputType nType, string pszMsg) + { + if (NetworkingDebugLog) { DebugConsole.NewMessage($"({nType}) {pszMsg}", Color.Orange); } + } + private static void UpdateProjectSpecific(float deltaTime) { if (ugcSubscriptionTasks != null) @@ -235,7 +249,8 @@ namespace Barotrauma.Steam } }; - Steamworks.Data.LobbyQuery lobbyQuery = Steamworks.SteamMatchmaking.CreateLobbyQuery().FilterDistanceWorldwide(); + //TODO: find a better strategy to fetch all lobbies, this is gonna take forever if we actually have 10000 lobbies + Steamworks.Data.LobbyQuery lobbyQuery = Steamworks.SteamMatchmaking.CreateLobbyQuery().FilterDistanceWorldwide().WithMaxResults(10000); TaskPool.Add(Task.Run(async () => { @@ -355,7 +370,7 @@ namespace Barotrauma.Steam if (Enum.TryParse(lobby.GetData("traitors"), out YesNoMaybe traitorsEnabled)) { serverInfo.TraitorsEnabled = traitorsEnabled; } serverInfo.GameStarted = lobby.GetData("gamestarted") == "True"; - serverInfo.GameMode = lobby.GetData("gamemode"); + serverInfo.GameMode = lobby.GetData("gamemode") ?? ""; if (Enum.TryParse(lobby.GetData("playstyle"), out PlayStyle playStyle)) serverInfo.PlayStyle = playStyle; if (serverInfo.ContentPackageNames.Count != serverInfo.ContentPackageHashes.Count || @@ -739,7 +754,7 @@ namespace Barotrauma.Steam if (!CheckWorkshopItemEnabled(existingItem)) { - if (!EnableWorkShopItem(existingItem, false, out string errorMsg)) + if (!EnableWorkShopItem(existingItem, out string errorMsg)) { DebugConsole.NewMessage(errorMsg, Color.Red); new GUIMessageBox( @@ -866,6 +881,10 @@ namespace Barotrauma.Steam DebugConsole.NewMessage("Published workshop item " + item?.Title + " successfully.", Microsoft.Xna.Framework.Color.LightGreen); contentPackage.SteamWorkshopUrl = $"http://steamcommunity.com/sharedfiles/filedetails/?source=Facepunch.Steamworks&id={task.Result.FileId.Value}"; + //NOTE: This sets InstallTime one hour into the future to guarantee + //that the published content package won't be autoupdated incorrectly. + //Change if it causes issues. + contentPackage.InstallTime = DateTime.UtcNow + TimeSpan.FromHours(1); contentPackage.Save(contentPackage.Path); SubscribeToWorkshopItem(task.Result.FileId); @@ -877,7 +896,7 @@ namespace Barotrauma.Steam /// /// Enables a workshop item by moving it to the game folder. /// - public static bool EnableWorkShopItem(Steamworks.Ugc.Item? item, bool allowFileOverwrite, out string errorMsg, bool selectContentPackage = false, bool suppressInstallNotif = false) + public static bool EnableWorkShopItem(Steamworks.Ugc.Item? item, out string errorMsg, bool selectContentPackage = false, bool suppressInstallNotif = false) { if (!(item?.IsInstalled ?? false)) { @@ -901,12 +920,21 @@ namespace Barotrauma.Steam }; string newContentPackagePath = GetWorkshopItemContentPackagePath(contentPackage); - if (ContentPackage.List.Any(cp => cp.Path.CleanUpPath() == newContentPackagePath.CleanUpPath())) + List existingPackages = ContentPackage.List.Where(cp => cp.Path.CleanUpPath() == newContentPackagePath.CleanUpPath()).ToList(); + if (existingPackages.Any()) { - errorMsg = TextManager.GetWithVariables("WorkshopErrorSamePathInstalled", - new string[] { "[itemname]", "[itempath]" }, - new string[] { item?.Title, Path.GetDirectoryName(newContentPackagePath) }); - return false; + if (item?.Owner.Id != Steamworks.SteamClient.SteamId) + { + errorMsg = TextManager.GetWithVariables("WorkshopErrorSamePathInstalled", + new string[] { "[itemname]", "[itempath]" }, + new string[] { item?.Title, Path.GetDirectoryName(newContentPackagePath) }); + return false; + } + else + { + RemoveMods(cp => !string.IsNullOrWhiteSpace(cp.SteamWorkshopUrl) && cp.SteamWorkshopUrl == contentPackage.SteamWorkshopUrl, + false); + } } if (!contentPackage.IsCompatible()) @@ -929,15 +957,9 @@ namespace Barotrauma.Steam { if (modCopiesInProgress.ContainsKey(item.Value.Id)) { - if (!modCopiesInProgress[item.Value.Id].IsCompleted && - !modCopiesInProgress[item.Value.Id].IsFaulted && - !modCopiesInProgress[item.Value.Id].IsCanceled) - { - errorMsg = ""; return true; - } - modCopiesInProgress.Remove(item.Value.Id); + errorMsg = ""; return true; } - newTask = CopyWorkShopItemAsync(item, contentPackage, newContentPackagePath, metaDataFilePath, allowFileOverwrite); + newTask = CopyWorkShopItemAsync(item, contentPackage, newContentPackagePath, metaDataFilePath); modCopiesInProgress.Add(item.Value.Id, newTask); } @@ -945,67 +967,85 @@ namespace Barotrauma.Steam contentPackage, (task, cp) => { - if (task.IsFaulted || task.IsCanceled) + try { - DebugConsole.ThrowError($"Failed to copy \"{item?.Title}\"", task.Exception); - GameMain.SteamWorkshopScreen?.SetReinstallButtonStatus(item, true, GUI.Style.Red); - return; - } - if (!string.IsNullOrWhiteSpace(task.Result)) - { - DebugConsole.ThrowError($"Failed to copy \"{item?.Title}\": {task.Result}"); - GameMain.SteamWorkshopScreen?.SetReinstallButtonStatus(item, true, GUI.Style.Red); - return; - } - - GameMain.Config.SuppressModFolderWatcher = true; - - var newPackage = new ContentPackage(cp.Path, newContentPackagePath) - { - SteamWorkshopUrl = item?.Url, - InstallTime = item?.Updated > item?.Created ? item?.Updated : item?.Created - }; - - foreach (ContentFile contentFile in newPackage.Files) - { - contentFile.Path = CorrectContentFilePath(contentFile.Path, cp, true); - } - - if (!Directory.Exists(Path.GetDirectoryName(newContentPackagePath))) - { - Directory.CreateDirectory(Path.GetDirectoryName(newContentPackagePath)); - } - newPackage.Save(newContentPackagePath); - ContentPackage.List.Add(newPackage); - - if (selectContentPackage) - { - if (newPackage.CorePackage) + if (task.IsFaulted || task.IsCanceled) { - GameMain.Config.SelectCorePackage(newPackage); + DebugConsole.ThrowError($"Failed to copy \"{item?.Title}\"", task.Exception); + GameMain.SteamWorkshopScreen?.SetReinstallButtonStatus(item, true, GUI.Style.Red); + return; } - else + if (!string.IsNullOrWhiteSpace(task.Result)) { - GameMain.Config.SelectContentPackage(newPackage); + DebugConsole.ThrowError($"Failed to copy \"{item?.Title}\": {task.Result}"); + GameMain.SteamWorkshopScreen?.SetReinstallButtonStatus(item, true, GUI.Style.Red); + return; } - GameMain.Config.SaveNewPlayerConfig(); - GameMain.Config.WarnIfContentPackageSelectionDirty(); + GameMain.Config.SuppressModFolderWatcher = true; - if (newPackage.Files.Any(f => f.Type == ContentType.Submarine)) + var newPackage = new ContentPackage(cp.Path, newContentPackagePath) { - SubmarineInfo.RefreshSavedSubs(); + SteamWorkshopUrl = item?.Url, + InstallTime = item?.Updated > item?.Created ? item?.Updated : item?.Created + }; + + foreach (ContentFile contentFile in newPackage.Files) + { + contentFile.Path = CorrectContentFilePath(contentFile.Path, contentFile.Type, cp, true); } + + foreach (ContentFile file in existingPackages.SelectMany(p => p.Files)) + { + string path = CorrectContentFilePath(file.Path, file.Type, cp, true).CleanUpPath(); + if (newPackage.Files.Any(f => f.Path.CleanUpPath() == path)) { continue; } + newPackage.AddFile(path, file.Type); + } + + if (!Directory.Exists(Path.GetDirectoryName(newContentPackagePath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(newContentPackagePath)); + } + newPackage.Save(newContentPackagePath); + ContentPackage.List.Add(newPackage); + + if (selectContentPackage) + { + if (newPackage.CorePackage) + { + GameMain.Config.SelectCorePackage(newPackage); + } + else + { + GameMain.Config.SelectContentPackage(newPackage); + } + GameMain.Config.SaveNewPlayerConfig(); + + GameMain.Config.WarnIfContentPackageSelectionDirty(); + + if (newPackage.Files.Any(f => f.Type == ContentType.Submarine)) + { + SubmarineInfo.RefreshSavedSubs(); + } + } + else if (!suppressInstallNotif) + { + GameMain.MainMenuScreen?.SetEnableModsNotification(true); + } + + GameMain.Config.SuppressModFolderWatcher = false; + + GameMain.SteamWorkshopScreen?.SetReinstallButtonStatus(item, true, GUI.Style.Green); + } - else if (!suppressInstallNotif) + catch { - GameMain.MainMenuScreen?.SetEnableModsNotification(true); + throw; + } + finally + { + modCopiesInProgress.Remove(item.Value.Id); } - - GameMain.Config.SuppressModFolderWatcher = false; - - GameMain.SteamWorkshopScreen?.SetReinstallButtonStatus(item, true, GUI.Style.Green); - }); errorMsg = ""; @@ -1016,7 +1056,7 @@ namespace Barotrauma.Steam /// Asynchronously copies a Workshop item into the Mods folder. /// /// Returns an empty string on success, otherwise returns an error message. - private async static Task CopyWorkShopItemAsync(Steamworks.Ugc.Item? item, ContentPackage contentPackage, string newContentPackagePath, string metaDataFilePath, bool allowFileOverwrite) + private async static Task CopyWorkShopItemAsync(Steamworks.Ugc.Item? item, ContentPackage contentPackage, string newContentPackagePath, string metaDataFilePath) { await Task.Yield(); @@ -1029,13 +1069,13 @@ namespace Barotrauma.Steam Directory.CreateDirectory(targetPath); File.WriteAllText(copyingPath, "TEMPORARY FILE"); - SaveUtil.CopyFolder(item?.Directory, targetPath, copySubDirs: true, overwriteExisting: true); + SaveUtil.CopyFolder(item?.Directory, targetPath, copySubDirs: true, overwriteExisting: false); File.Delete(copyingPath); return ""; } - var allPackageFiles = Directory.GetFiles(item?.Directory, "*", SearchOption.AllDirectories); + var allPackageFiles = Directory.GetFiles(item?.Directory, "*", System.IO.SearchOption.AllDirectories); List nonContentFiles = new List(); foreach (string file in allPackageFiles) { @@ -1046,27 +1086,24 @@ namespace Barotrauma.Steam nonContentFiles.Add(relativePath); } - if (!allowFileOverwrite) + /*if (File.Exists(newContentPackagePath) && !CheckFileEquality(newContentPackagePath, metaDataFilePath)) { - if (File.Exists(newContentPackagePath) && !CheckFileEquality(newContentPackagePath, metaDataFilePath)) + errorMsg = TextManager.GetWithVariables("WorkshopErrorOverwriteOnEnable", new string[2] { "[itemname]", "[filename]" }, new string[2] { item?.Title, newContentPackagePath }); + DebugConsole.NewMessage(errorMsg, Color.Red); + return errorMsg; + } + + foreach (ContentFile contentFile in contentPackage.Files) + { + string sourceFile = Path.Combine(item?.Directory, contentFile.Path); + + if (File.Exists(sourceFile) && File.Exists(contentFile.Path) && !CheckFileEquality(sourceFile, contentFile.Path)) { - errorMsg = TextManager.GetWithVariables("WorkshopErrorOverwriteOnEnable", new string[2] { "[itemname]", "[filename]" }, new string[2] { item?.Title, newContentPackagePath }); + errorMsg = TextManager.GetWithVariables("WorkshopErrorOverwriteOnEnable", new string[2] { "[itemname]", "[filename]" }, new string[2] { item?.Title, contentFile.Path }); DebugConsole.NewMessage(errorMsg, Color.Red); return errorMsg; } - - foreach (ContentFile contentFile in contentPackage.Files) - { - string sourceFile = Path.Combine(item?.Directory, contentFile.Path); - - if (File.Exists(sourceFile) && File.Exists(contentFile.Path) && !CheckFileEquality(sourceFile, contentFile.Path)) - { - errorMsg = TextManager.GetWithVariables("WorkshopErrorOverwriteOnEnable", new string[2] { "[itemname]", "[filename]" }, new string[2] { item?.Title, contentFile.Path }); - DebugConsole.NewMessage(errorMsg, Color.Red); - return errorMsg; - } - } - } + }*/ Directory.CreateDirectory(targetPath); File.WriteAllText(copyingPath, "TEMPORARY FILE"); @@ -1084,7 +1121,7 @@ namespace Barotrauma.Steam } } - contentFile.Path = CorrectContentFilePath(contentFile.Path, contentPackage, + contentFile.Path = CorrectContentFilePath(contentFile.Path, contentFile.Type, contentPackage, contentFile.Type != ContentType.Submarine); //path not allowed -> the content file must be a reference to an external file (such as some vanilla file outside the Mods folder) @@ -1122,16 +1159,16 @@ namespace Barotrauma.Steam //make sure the destination directory exists Directory.CreateDirectory(Path.GetDirectoryName(contentFile.Path)); - CorrectContentFileCopy(contentPackage, sourceFile, contentFile.Path, overwrite: true); + CorrectContentFileCopy(contentPackage, sourceFile, contentFile.Path, overwrite: false); } foreach (string nonContentFile in nonContentFiles) { string sourceFile = Path.Combine(item?.Directory, nonContentFile); if (!File.Exists(sourceFile)) { continue; } - string destinationPath = CorrectContentFilePath(nonContentFile, contentPackage, false); + string destinationPath = CorrectContentFilePath(nonContentFile, ContentType.None, contentPackage, false); Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)); - CorrectContentFileCopy(contentPackage, sourceFile, destinationPath, overwrite: true); + CorrectContentFileCopy(contentPackage, sourceFile, destinationPath, overwrite: false); } File.Delete(copyingPath); @@ -1154,7 +1191,7 @@ namespace Barotrauma.Steam } } - private static void RemoveMods(Func predicate) + private static void RemoveMods(Func predicate, bool delete = true) { var toRemove = ContentPackage.List.Where(predicate).ToList(); var packagesToDeselect = GameMain.Config.SelectedContentPackages.Where(p => toRemove.Contains(p)).ToList(); @@ -1170,16 +1207,19 @@ namespace Barotrauma.Steam } } - foreach (var cp in toRemove) + if (delete) { - try + foreach (var cp in toRemove) { - string path = Path.GetDirectoryName(cp.Path); - if (Directory.Exists(path)) { Directory.Delete(path, true); } - } - catch (Exception e) - { - DebugConsole.ThrowError($"An error occurred while attempting to delete {Path.GetDirectoryName(cp.Path)}", e); + try + { + string path = Path.GetDirectoryName(cp.Path); + if (Directory.Exists(path)) { Directory.Delete(path, true); } + } + catch (Exception e) + { + DebugConsole.ThrowError($"An error occurred while attempting to delete {Path.GetDirectoryName(cp.Path)}", e); + } } } @@ -1245,7 +1285,7 @@ namespace Barotrauma.Steam string metaDataPath = Path.Combine(item?.Directory, MetadataFileName); if (!File.Exists(metaDataPath)) { - throw new FileNotFoundException("Metadata file for the Workshop item \"" + item?.Title + "\" not found. The file may be corrupted."); + throw new System.IO.FileNotFoundException("Metadata file for the Workshop item \"" + item?.Title + "\" not found. The file may be corrupted."); } ContentPackage contentPackage = new ContentPackage(metaDataPath); @@ -1268,7 +1308,7 @@ namespace Barotrauma.Steam { metaDataPath = Path.Combine(item?.Directory, MetadataFileName); } - catch (ArgumentException e) + catch (ArgumentException) { string errorMessage = "Metadata file for the Workshop item \"" + item?.Title + "\" not found. Could not combine path (" + (item?.Directory ?? "directory name empty") + ")."; @@ -1328,6 +1368,8 @@ namespace Barotrauma.Steam public static async Task AutoUpdateWorkshopItemsAsync() { + await Task.Yield(); + if (!isInitialized) { return false; } var query = new Steamworks.Ugc.Query(Steamworks.UgcType.All) @@ -1343,6 +1385,8 @@ namespace Barotrauma.Steam GameMain.Config.SuppressModFolderWatcher = false; + + List updateNotifications = new List(); foreach (var item in items) { try @@ -1353,7 +1397,7 @@ namespace Barotrauma.Steam string errorMsg; if (!CheckWorkshopItemEnabled(item)) { - installedSuccessfully = EnableWorkShopItem(item, true, out errorMsg); + installedSuccessfully = EnableWorkShopItem(item, out errorMsg); } else if (!CheckWorkshopItemUpToDate(item)) { @@ -1366,29 +1410,65 @@ namespace Barotrauma.Steam if (!installedSuccessfully) { - DebugConsole.ThrowError(errorMsg); - new GUIMessageBox( - TextManager.Get("Error"), - TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { item.Title, errorMsg })); + CrossThread.RequestExecutionOnMainThread(() => + { + DebugConsole.NewMessage(errorMsg, Color.Red); + string errorId = errorMsg; + if (!GUIMessageBox.MessageBoxes.Any(m => m.UserData as string == errorId)) + { + new GUIMessageBox( + TextManager.Get("Error"), + TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { item.Title, errorMsg })) + { + UserData = errorId + }; + } + }); } else { - //TODO: potential race condition - new GUIMessageBox("", TextManager.GetWithVariable("WorkshopItemUpdated", "[itemname]", item.Title)); + updateNotifications.Add(TextManager.GetWithVariable("WorkshopItemUpdated", "[itemname]", item.Title)); } } catch (Exception e) { - new GUIMessageBox( - TextManager.Get("Error"), - TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { item.Title, e.Message + ", " + e.TargetSite })); - GameAnalyticsManager.AddErrorEventOnce( - "SteamManager.AutoUpdateWorkshopItems:" + e.Message, - GameAnalyticsSDK.Net.EGAErrorSeverity.Error, - "Failed to autoupdate workshop item \"" + item.Title + "\". " + e.Message + "\n" + e.StackTrace); + CrossThread.RequestExecutionOnMainThread(() => + { + string errorId = e.Message; + if (!GUIMessageBox.MessageBoxes.Any(m => m.UserData as string == errorId)) + { + new GUIMessageBox( + TextManager.Get("Error"), + TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { item.Title, e.Message + ", " + e.TargetSite })) + { + UserData = errorId + }; + } + GameAnalyticsManager.AddErrorEventOnce( + "SteamManager.AutoUpdateWorkshopItems:" + e.Message, + GameAnalyticsSDK.Net.EGAErrorSeverity.Error, + "Failed to autoupdate workshop item \"" + item.Title + "\". " + e.Message + "\n" + e.StackTrace); + }); } } + if (updateNotifications.Count > 0) + { + CrossThread.RequestExecutionOnMainThread(() => + { + while (updateNotifications.Count > 0) + { + float width = updateNotifications.Max(notif => GUI.Font.MeasureString(notif).X) * 1.25f; + + int notificationsPerMsgBox = 20; + new GUIMessageBox("", string.Join('\n', updateNotifications.Take(notificationsPerMsgBox)), + relativeSize: new Microsoft.Xna.Framework.Vector2(0.25f, 0.0f), + minSize: new Microsoft.Xna.Framework.Point((int)width, 0)); + updateNotifications.RemoveRange(0, Math.Min(notificationsPerMsgBox, updateNotifications.Count)); + } + }); + } + List tasks; lock (modCopiesInProgress) { @@ -1403,16 +1483,20 @@ namespace Barotrauma.Steam { errorMsg = ""; if (!(item?.IsInstalled ?? false)) { return false; } - if (!DisableWorkShopItem(item, false, out errorMsg)) { return false; } - if (!EnableWorkShopItem(item, allowFileOverwrite: false, errorMsg: out errorMsg)) { return false; } - + bool reenable = GameMain.Config.SelectedContentPackages.Any(p => !string.IsNullOrEmpty(p.SteamWorkshopUrl) && GetWorkshopItemIDFromUrl(p.SteamWorkshopUrl) == item?.Id); + if (item?.Owner.Id != Steamworks.SteamClient.SteamId) + { + if (!DisableWorkShopItem(item, false, out errorMsg)) { return false; } + } + if (!EnableWorkShopItem(item, errorMsg: out errorMsg, selectContentPackage: reenable)) { return false; } return true; } private static string GetWorkshopItemContentPackagePath(ContentPackage contentPackage) { - string packageName = contentPackage.Name; + string packageName = contentPackage.Name.Trim(); packageName = ToolBox.RemoveInvalidFileNameChars(packageName); + while (packageName.Last() == '.') { packageName = packageName.Substring(0, packageName.Length-1); } //packageName = packageName + "_" + GetWorkshopItemIDFromUrl(contentPackage.SteamWorkshopUrl); return Path.Combine("Mods", packageName, MetadataFileName); @@ -1429,7 +1513,9 @@ namespace Barotrauma.Steam attr.Name.ToString() == "characterfile") && attr.Value.CleanUpPath().Contains("/")) { - attr.Value = CorrectContentFilePath(attr.Value, package, true); + ContentType type = ContentType.None; + Enum.TryParse(attr.Name.LocalName, true, out type); + attr.Value = CorrectContentFilePath(attr.Value, type, package, true); } } @@ -1441,18 +1527,20 @@ namespace Barotrauma.Steam private static void CorrectContentFileCopy(ContentPackage package, string src, string dest, bool overwrite) { + if (!overwrite && File.Exists(dest)) { return; } + if (Path.GetExtension(src).Equals(".xml", StringComparison.OrdinalIgnoreCase)) { XDocument doc = XMLExtensions.TryLoadXml(src); if (doc != null) { CorrectXMLFilePaths(package, doc.Root); - using (MemoryStream stream = new MemoryStream()) + using (System.IO.MemoryStream stream = new System.IO.MemoryStream()) { - XmlWriterSettings settings = new XmlWriterSettings(); + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings(); settings.Indent = true; settings.Encoding = new System.Text.UTF8Encoding(false); - using (var xmlWriter = XmlWriter.Create(stream, settings)) + using (var xmlWriter = System.Xml.XmlWriter.Create(stream, settings)) { doc.WriteTo(xmlWriter); xmlWriter.Flush(); @@ -1463,23 +1551,29 @@ namespace Barotrauma.Steam } else { - File.Copy(src, dest, overwrite: overwrite); + File.Copy(src, dest, overwrite: true); } } else { - File.Copy(src, dest, overwrite: overwrite); + File.Copy(src, dest, overwrite: true); } } - private static string CorrectContentFilePath(string contentFilePath, ContentPackage package, bool checkIfFileExists = false) + private static string CorrectContentFilePath(string contentFilePath, ContentType type, ContentPackage package, bool checkIfFileExists = false) { string packageName = Path.GetDirectoryName(GetWorkshopItemContentPackagePath(package)); contentFilePath = contentFilePath.CleanUpPathCrossPlatform(); - if (checkIfFileExists && File.Exists(contentFilePath)) + if (checkIfFileExists) { + bool exists = File.Exists(contentFilePath); + if (type == ContentType.Executable || + type == ContentType.ServerExecutable) + { + exists |= File.Exists(contentFilePath + ".dll"); + } return contentFilePath; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipCapture.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipCapture.cs index bf506cd08..c73bde30c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipCapture.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipCapture.cs @@ -149,9 +149,15 @@ namespace Barotrauma.Networking } } + short[] uncompressedBuffer = new short[VoipConfig.BUFFER_SIZE]; + short[] prevUncompressedBuffer = new short[VoipConfig.BUFFER_SIZE]; + bool prevCaptured = true; + int captureTimer; + void UpdateCapture() { - short[] uncompressedBuffer = new short[VoipConfig.BUFFER_SIZE]; + Array.Copy(uncompressedBuffer, 0, prevUncompressedBuffer, 0, VoipConfig.BUFFER_SIZE); + Array.Clear(uncompressedBuffer, 0, VoipConfig.BUFFER_SIZE); while (capturing) { int alcError; @@ -202,6 +208,21 @@ namespace Barotrauma.Networking bool allowEnqueue = false; if (GameMain.WindowActive) { + ForceLocal = captureTimer > 0 ? ForceLocal : false; + bool pttDown = false; + if ((PlayerInput.KeyDown(InputType.Voice) || PlayerInput.KeyDown(InputType.LocalVoice)) && + GUI.KeyboardDispatcher.Subscriber == null) + { + pttDown = true; + if (PlayerInput.KeyDown(InputType.LocalVoice)) + { + ForceLocal = true; + } + else + { + ForceLocal = false; + } + } if (GameMain.Config.VoiceSetting == GameSettings.VoiceMode.Activity) { if (dB > GameMain.Config.NoiseGateThreshold) @@ -211,25 +232,38 @@ namespace Barotrauma.Networking } else if (GameMain.Config.VoiceSetting == GameSettings.VoiceMode.PushToTalk) { - if (PlayerInput.KeyDown(InputType.Voice) && GUI.KeyboardDispatcher.Subscriber == null) + if (pttDown) { allowEnqueue = true; } } } - if (allowEnqueue) + if (allowEnqueue || captureTimer > 0) { LastEnqueueAudio = DateTime.Now; //encode audio and enqueue it lock (buffers) { + if (!prevCaptured) //enqueue the previous buffer if not sent to avoid cutoff + { + int compressedCountPrev = VoipConfig.Encoder.Encode(prevUncompressedBuffer, 0, VoipConfig.BUFFER_SIZE, BufferToQueue, 0, VoipConfig.MAX_COMPRESSED_SIZE); + EnqueueBuffer(compressedCountPrev); + } int compressedCount = VoipConfig.Encoder.Encode(uncompressedBuffer, 0, VoipConfig.BUFFER_SIZE, BufferToQueue, 0, VoipConfig.MAX_COMPRESSED_SIZE); EnqueueBuffer(compressedCount); } + captureTimer -= (VoipConfig.BUFFER_SIZE * 1000) / VoipConfig.FREQUENCY; + if (allowEnqueue) + { + captureTimer = GameMain.Config.VoiceChatCutoffPrevention; + } + prevCaptured = true; } else { + captureTimer = 0; + prevCaptured = false; //enqueue silence lock (buffers) { @@ -241,14 +275,6 @@ namespace Barotrauma.Networking } } - public override void Write(IWriteMessage msg) - { - lock (buffers) - { - base.Write(msg); - } - } - public override void Dispose() { Instance = null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipClient.cs index 574dffcb2..b648cde9c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voip/VoipClient.cs @@ -85,11 +85,10 @@ namespace Barotrauma.Networking return; } - if (queue.Read(msg)) + Client client = gameClient.ConnectedClients.Find(c => c.VoipQueue == queue); + if (queue.Read(msg, discardData: client.Muted || client.MutedLocally)) { - Client client = gameClient.ConnectedClients.Find(c => c.VoipQueue == queue); if (client.Muted || client.MutedLocally) { return; } - if (client.VoipSound == null) { DebugConsole.Log("Recreating voipsound " + queueId); @@ -98,7 +97,8 @@ namespace Barotrauma.Networking if (client.Character != null && !client.Character.IsDead && !client.Character.Removed && client.Character.SpeechImpediment <= 100.0f) { - var messageType = ChatMessage.CanUseRadio(client.Character, out WifiComponent radio) ? ChatMessageType.Radio : ChatMessageType.Default; + WifiComponent radio = null; + var messageType = !client.VoipQueue.ForceLocal && ChatMessage.CanUseRadio(client.Character, out radio) ? ChatMessageType.Radio : ChatMessageType.Default; client.Character.ShowSpeechBubble(1.25f, ChatMessage.MessageColor[(int)messageType]); client.VoipSound.UseRadioFilter = messageType == ChatMessageType.Radio; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs index 49650e599..026f4f287 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs @@ -61,10 +61,10 @@ namespace Barotrauma foreach (GUIComponent comp in listBox.Content.Children) { - if (comp.FindChild("votes") is GUITextBlock voteText) comp.RemoveChild(voteText); + if (comp.FindChild("votes") is GUITextBlock voteText) { comp.RemoveChild(voteText); } } - if (clients == null) return; + if (clients == null) { return; } List> voteList = GetVoteList(voteType, clients); foreach (Pair votable in voteList) @@ -73,7 +73,7 @@ namespace Barotrauma } break; case VoteType.StartRound: - if (clients == null) return; + if (clients == null) { return; } foreach (Client client in clients) { var clientReady = GameMain.NetLobbyScreen.PlayerList.Content.FindChild(client)?.FindChild("clientready"); @@ -113,18 +113,18 @@ namespace Barotrauma switch (voteType) { case VoteType.Sub: - Submarine sub = data as Submarine; - if (sub == null) return; + SubmarineInfo sub = data as SubmarineInfo; + if (sub == null) { return; } - msg.Write(sub.Info.Name); + msg.Write(sub.Name); break; case VoteType.Mode: GameModePreset gameMode = data as GameModePreset; - if (gameMode == null) return; + if (gameMode == null) { return; } msg.Write(gameMode.Identifier); break; case VoteType.EndRound: - if (!(data is bool)) return; + if (!(data is bool)) { return; } msg.Write((bool)data); break; case VoteType.Kick: @@ -153,12 +153,12 @@ namespace Barotrauma { int votes = inc.ReadByte(); string subName = inc.ReadString(); - List serversubs = new List(); + List serversubs = new List(); foreach (GUIComponent item in GameMain.NetLobbyScreen?.SubList?.Content?.Children) { - if (item.UserData != null && item.UserData is Submarine) serversubs.Add(item.UserData as Submarine); + if (item.UserData != null && item.UserData is SubmarineInfo) { serversubs.Add(item.UserData as SubmarineInfo); } } - Submarine sub = serversubs.FirstOrDefault(sm => sm.Info.Name == subName); + SubmarineInfo sub = serversubs.FirstOrDefault(s => s.Name == subName); SetVoteText(GameMain.NetLobbyScreen.SubList, sub, votes); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs b/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs index f2ee5ffa5..c1f64c6cd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs @@ -10,6 +10,8 @@ namespace Barotrauma.Particles { private ParticlePrefab prefab; + private string debugName = "Particle (uninitialized)"; + public delegate void OnChangeHullHandler(Vector2 position, Hull currentHull); public OnChangeHullHandler OnChangeHull; @@ -92,10 +94,16 @@ namespace Barotrauma.Particles { get { return prefab; } } - + + public override string ToString() + { + return debugName; + } + public void Init(ParticlePrefab prefab, Vector2 position, Vector2 speed, float rotation, Hull hullGuess = null, bool drawOnTop = false) { this.prefab = prefab; + debugName = $"Particle ({prefab.Name})"; spriteIndex = Rand.Int(prefab.Sprites.Count); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs index 6a140118c..ab81a8534 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs @@ -89,7 +89,21 @@ namespace Barotrauma.Particles { public readonly string Name; - public readonly ParticlePrefab ParticlePrefab; + private string particlePrefabName; + + private ParticlePrefab particlePrefab; + public ParticlePrefab ParticlePrefab + { + get + { + if (particlePrefab == null && particlePrefabName != null) + { + particlePrefab = GameMain.ParticleManager?.FindPrefab(particlePrefabName); + if (particlePrefab == null) { particlePrefabName = null; } + } + return particlePrefab; + } + } public readonly float AngleMin, AngleMax; @@ -114,8 +128,7 @@ namespace Barotrauma.Particles public ParticleEmitterPrefab(XElement element) { Name = element.Name.ToString(); - - ParticlePrefab = GameMain.ParticleManager.FindPrefab(element.GetAttributeString("particle", "")); + particlePrefabName = element.GetAttributeString("particle", ""); if (element.Attribute("startrotation") == null) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaClient/ClientSource/Physics/PhysicsBody.cs index c362ef365..9d444cd03 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Physics/PhysicsBody.cs @@ -17,7 +17,7 @@ namespace Barotrauma get { return bodyShapeTexture; } } - public void Draw(DeformableSprite deformSprite, Camera cam, Vector2 scale, Color color, bool mirror = false) + public void Draw(DeformableSprite deformSprite, Camera cam, Vector2 scale, Color color, bool invert = false) { if (!Enabled) return; UpdateDrawPosition(); @@ -25,7 +25,7 @@ namespace Barotrauma new Vector3(DrawPosition, MathHelper.Clamp(deformSprite.Sprite.Depth, 0, 1)), deformSprite.Origin, -DrawRotation, - scale, color, Dir < 0, mirror); + scale, color, Dir < 0, invert); } public void Draw(SpriteBatch spriteBatch, Sprite sprite, Color color, float? depth = null, float scale = 1.0f, bool mirrorX = false, bool mirrorY = false) diff --git a/Barotrauma/BarotraumaClient/ClientSource/PlayerInput.cs b/Barotrauma/BarotraumaClient/ClientSource/PlayerInput.cs index 5e2f6e3bb..3b9293bef 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/PlayerInput.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/PlayerInput.cs @@ -25,6 +25,18 @@ namespace Barotrauma public class KeyOrMouse { public Keys Key { get; private set; } + + private string name; + + public string Name + { + get + { + if (name == null) { name = GetName(); } + return name; + } + } + public MouseButton MouseButton { get; private set; } public KeyOrMouse(Keys keyBinding) @@ -133,6 +145,30 @@ namespace Barotrauma hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode((int)MouseButton); return hashCode; } + + public string GetName() + { + if (PlayerInput.NumberKeys.Contains(Key)) + { + return Key.ToString().Substring(1, 1); + } + if (MouseButton != MouseButton.None) + { + switch (MouseButton) + { + case MouseButton.PrimaryMouse: + return PlayerInput.MouseButtonsSwapped() ? TextManager.Get("input.rightmouse") : TextManager.Get("input.leftmouse"); + case MouseButton.SecondaryMouse: + return PlayerInput.MouseButtonsSwapped() ? TextManager.Get("input.leftmouse") : TextManager.Get("input.rightmouse"); + default: + return TextManager.Get("input." + MouseButton.ToString().ToLowerInvariant()); + } + } + else + { + return Key.ToString(); + } + } } public static class PlayerInput @@ -155,6 +191,8 @@ namespace Barotrauma static bool allowInput; static bool wasWindowActive; + public static readonly List NumberKeys = new List { Keys.D0, Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9 }; + #if WINDOWS [DllImport("user32.dll")] static extern int GetSystemMetrics(int smIndex); @@ -408,6 +446,12 @@ namespace Barotrauma return (AllowInput && oldKeyboardState.IsKeyDown(button) && keyboardState.IsKeyUp(button)); } + public static bool InventoryKeyHit(int index) + { + if (index == -1) return false; + return AllowInput && GameMain.Config.InventoryKeyBind(index).IsHit(); + } + public static bool KeyDown(Keys button) { return (AllowInput && keyboardState.IsKeyDown(button)); @@ -418,6 +462,16 @@ namespace Barotrauma return AllowInput && keyboardState.IsKeyUp(button); } + public static bool IsShiftDown() + { + return KeyDown(Keys.LeftShift) || KeyDown(Keys.RightShift); + } + + public static bool IsCtrlDown() + { + return KeyDown(Keys.LeftControl) || KeyDown(Keys.RightControl); + } + public static void Update(double deltaTime) { timeSinceClick += deltaTime; @@ -448,16 +502,30 @@ namespace Barotrauma MouseSpeedPerSecond = MouseSpeed / (float)deltaTime; + // Split into two to not accept drag & drop releasing as part of a double-click doubleClicked = false; if (PrimaryMouseButtonClicked()) { - if (timeSinceClick < DoubleClickDelay && - (mouseState.Position - lastClickPosition).ToVector2().Length() < MaxDoubleClickDistance) + float dist = (mouseState.Position - lastClickPosition).ToVector2().Length(); + + if (timeSinceClick < DoubleClickDelay && dist < MaxDoubleClickDistance) { doubleClicked = true; + timeSinceClick = DoubleClickDelay; } - lastClickPosition = mouseState.Position; - timeSinceClick = 0.0; + else if (timeSinceClick < DoubleClickDelay) + { + lastClickPosition = mouseState.Position; + } + if (!doubleClicked && dist < MaxDoubleClickDistance) + { + timeSinceClick = 0.0; + } + } + + if (PrimaryMouseButtonDown()) + { + lastClickPosition = mouseState.Position; } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Program.cs b/Barotrauma/BarotraumaClient/ClientSource/Program.cs index 6ecf9226b..e928d9dc1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Program.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Program.cs @@ -1,7 +1,7 @@ #region Using Statements using System; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using GameAnalyticsSDK.Net; @@ -104,8 +104,6 @@ namespace Barotrauma exeHash = new Md5Hash(stream); } - StreamWriter sw = new StreamWriter(filePath); - StringBuilder sb = new StringBuilder(); sb.AppendLine("Barotrauma Client crash report (generated on " + DateTime.Now + ")"); sb.AppendLine("\n"); @@ -148,7 +146,8 @@ namespace Barotrauma if (GameMain.Config != null) { sb.AppendLine("Graphics mode: " + GameMain.Config.GraphicsWidth + "x" + GameMain.Config.GraphicsHeight + " (" + GameMain.Config.WindowMode.ToString() + ")"); - sb.AppendLine("VSync "+ (GameMain.Config.VSyncEnabled ? "ON" : "OFF")); + sb.AppendLine("VSync " + (GameMain.Config.VSyncEnabled ? "ON" : "OFF")); + sb.AppendLine("Language: " + (GameMain.Config.Language ?? "none")); } if (GameMain.SelectedPackages != null) { @@ -234,8 +233,7 @@ namespace Barotrauma string crashReport = sb.ToString(); - sw.WriteLine(crashReport); - sw.Close(); + File.WriteAllText(filePath, crashReport); if (GameSettings.SaveDebugConsoleLogs) DebugConsole.SaveLogs(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs index bd4ae4c0c..776304554 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs @@ -2,7 +2,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -81,6 +81,7 @@ namespace Barotrauma var searchTitle = new GUITextBlock(new RectTransform(new Vector2(0.001f, 1.0f), filterContainer.RectTransform), TextManager.Get("serverlog.filter"), textAlignment: Alignment.CenterLeft, font: GUI.Font); var searchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 1.0f), filterContainer.RectTransform, Anchor.CenterRight), font: GUI.Font, createClearButton: true); + filterContainer.RectTransform.MinSize = searchBox.RectTransform.MinSize; searchBox.OnSelected += (sender, userdata) => { searchTitle.Visible = false; }; searchBox.OnDeselected += (sender, userdata) => { searchTitle.Visible = true; }; searchBox.OnTextChanged += (textBox, text) => { FilterSubs(subList, text); return true; }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs index e05f157a0..ab4b6ac92 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs @@ -435,8 +435,8 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { - if (GameMain.GameSession?.Submarine != null && - GameMain.GameSession.Submarine.LeftBehindSubDockingPortOccupied) + if (GameMain.GameSession?.SubmarineInfo != null && + GameMain.GameSession.SubmarineInfo.LeftBehindSubDockingPortOccupied) { new GUIMessageBox("", TextManager.Get("ReplaceShuttleDockingPortOccupied")); return true; @@ -917,7 +917,7 @@ namespace Barotrauma GUINumberInput.NumberType.Int) { MinValueInt = 0, - MaxValueInt = 100, + MaxValueInt = CargoManager.MaxQuantity, UserData = pi, IntValue = pi.Quantity }; @@ -927,7 +927,11 @@ namespace Barotrauma { if (suppressBuySell) { return; } PurchasedItem purchasedItem = numberInput.UserData as PurchasedItem; - + if (GameMain.Client != null && !GameMain.Client.HasPermission(Networking.ClientPermissions.ManageCampaign)) + { + numberInput.IntValue = purchasedItem.Quantity; + return; + } //Attempting to buy if (numberInput.IntValue > purchasedItem.Quantity) { @@ -965,15 +969,18 @@ namespace Barotrauma private bool BuyItem(GUIComponent component, object obj) { - if (!(obj is PurchasedItem pi) || pi.ItemPrefab == null) return false; + if (!(obj is PurchasedItem pi) || pi.ItemPrefab == null) { return false; } if (GameMain.Client != null && !GameMain.Client.HasPermission(Networking.ClientPermissions.ManageCampaign)) { return false; } - + + var purchasedItem = Campaign.CargoManager.PurchasedItems.Find(pi2 => pi2.ItemPrefab == pi.ItemPrefab); + if (purchasedItem != null && purchasedItem.Quantity >= CargoManager.MaxQuantity) { return false; } + PriceInfo priceInfo = pi.ItemPrefab.GetPrice(Campaign.Map.CurrentLocation); - if (priceInfo == null || priceInfo.BuyPrice > Campaign.Money) return false; + if (priceInfo == null || priceInfo.BuyPrice > Campaign.Money) { return false; } Campaign.CargoManager.PurchaseItem(pi.ItemPrefab, 1); GameMain.Client?.SendCampaignState(); @@ -983,7 +990,7 @@ namespace Barotrauma private bool SellItem(GUIComponent component, object obj) { - if (!(obj is PurchasedItem pi) || pi.ItemPrefab == null) return false; + if (!(obj is PurchasedItem pi) || pi.ItemPrefab == null) { return false; } if (GameMain.Client != null && !GameMain.Client.HasPermission(Networking.ClientPermissions.ManageCampaign)) { @@ -1068,7 +1075,7 @@ namespace Barotrauma (GameMain.Client == null || GameMain.Client.HasPermission(Networking.ClientPermissions.ManageCampaign)); repairItemsButton.GetChild().Selected = Campaign.PurchasedItemRepairs; - if (GameMain.GameSession?.Submarine == null || !GameMain.GameSession.Submarine.SubsLeftBehind) + if (GameMain.GameSession?.SubmarineInfo == null || !GameMain.GameSession.SubmarineInfo.SubsLeftBehind) { replaceShuttlesButton.Enabled = false; replaceShuttlesButton.GetChild().Selected = false; @@ -1166,7 +1173,7 @@ namespace Barotrauma }; var characterPreviewContent = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.8f), characterPreviewFrame.RectTransform, Anchor.TopCenter) { RelativeOffset = new Vector2(0.0f, 0.02f) }, style: null); - characterInfo.CreateInfoFrame(characterPreviewContent); + characterInfo.CreateInfoFrame(characterPreviewContent, true); } var currentCrew = GameMain.GameSession.CrewManager.GetCharacterInfos(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs index e7ef26c18..b2af0381d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs @@ -2,13 +2,17 @@ using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Graphics; using System; -using System.IO; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using Barotrauma.Extensions; using FarseerPhysics; using FarseerPhysics.Dynamics; +#if DEBUG +using System.IO; +#else +using Barotrauma.IO; +#endif namespace Barotrauma.CharacterEditor { @@ -121,7 +125,10 @@ namespace Barotrauma.CharacterEditor ResetVariables(); var subInfo = new SubmarineInfo("Content/AnimEditor.sub"); Submarine.MainSub = new Submarine(subInfo); - Submarine.MainSub.PhysicsBody.Enabled = false; + if (Submarine.MainSub.PhysicsBody != null) + { + Submarine.MainSub.PhysicsBody.Enabled = false; + } originalWall = new WallGroup(new List(Structure.WallList)); CloneWalls(); CalculateMovementLimits(); @@ -275,7 +282,7 @@ namespace Barotrauma.CharacterEditor return TextManager.Get(screenTextTag + tag); } - #region Main methods +#region Main methods public override void AddToGUIUpdateList() { rightArea.AddToGUIUpdateList(); @@ -476,9 +483,16 @@ namespace Barotrauma.CharacterEditor if (character.IsHumanoid) { animTestPoseToggle.Enabled = CurrentAnimation.IsGroundedAnimation; - if (animTestPoseToggle.Enabled && PlayerInput.KeyHit(Keys.X)) + if (animTestPoseToggle.Enabled) { - SetToggle(animTestPoseToggle, !animTestPoseToggle.Selected); + if (PlayerInput.KeyHit(Keys.X)) + { + SetToggle(animTestPoseToggle, !animTestPoseToggle.Selected); + } + } + else + { + animTestPoseToggle.Selected = false; } } if (PlayerInput.KeyHit(InputType.Run)) @@ -652,9 +666,6 @@ namespace Barotrauma.CharacterEditor } if (!isFrozen) { - Submarine.MainSub.SetPrevTransform(Submarine.MainSub.Position); - Submarine.MainSub.Update((float)deltaTime); - foreach (PhysicsBody body in PhysicsBody.List) { body.SetPrevTransform(body.SimPosition, body.Rotation); @@ -981,9 +992,9 @@ namespace Barotrauma.CharacterEditor } spriteBatch.End(); } - #endregion +#endregion - #region Ragdoll Manipulation +#region Ragdoll Manipulation private void UpdateJointCreation() { if (jointCreationMode == JointCreationMode.None) @@ -1310,9 +1321,9 @@ namespace Barotrauma.CharacterEditor } RecreateRagdoll(); } - #endregion +#endregion - #region Endless runner +#region Endless runner private int min; private int max; private void CalculateMovementLimits() @@ -1415,9 +1426,9 @@ namespace Barotrauma.CharacterEditor AllWalls.ForEach(w => w.SetCollisionCategory(collisionCategory)); GameMain.World.ProcessChanges(); } - #endregion +#endregion - #region Character spawning +#region Character spawning private int characterIndex = -1; private string currentCharacterConfig; private string selectedJob = null; @@ -1739,7 +1750,11 @@ namespace Barotrauma.CharacterEditor { Directory.CreateDirectory(mainFolder); } +#if DEBUG doc.Save(configFilePath); +#else + doc.SaveSafe(configFilePath); +#endif // Add to the selected content package contentPackage.AddFile(configFilePath, ContentType.Character); contentPackage.Save(contentPackage.Path); @@ -1820,9 +1835,9 @@ namespace Barotrauma.CharacterEditor { character.Inventory?.Items.ForEachMod(i => i?.Unequip(character)); } - #endregion +#endregion - #region GUI +#region GUI private static Vector2 innerScale = new Vector2(0.95f, 0.95f); private GUILayoutGroup rightArea, leftArea; @@ -2117,7 +2132,7 @@ namespace Barotrauma.CharacterEditor CreateTextures(); return true; }; - new GUIButton(new RectTransform(buttonSize, parent.RectTransform, Anchor.BottomCenter), GetCharacterEditorTranslation("RecreateRagdoll")) + var recreateButton = new GUIButton(new RectTransform(buttonSize, parent.RectTransform, Anchor.BottomCenter), GetCharacterEditorTranslation("RecreateRagdoll")) { ToolTip = GetCharacterEditorTranslation("RecreateRagdollTooltip"), OnClicked = (button, data) => @@ -2127,6 +2142,7 @@ namespace Barotrauma.CharacterEditor return true; } }; + GUITextBlock.AutoScaleAndNormalize(reloadTexturesButton.TextBlock, recreateButton.TextBlock); buttonsPanelToggle = new ToggleButton(new RectTransform(new Vector2(0.08f, 1), buttonsPanel.RectTransform, Anchor.CenterRight, Pivot.CenterLeft), Direction.Left); buttonsPanel.RectTransform.MinSize = new Point(0, (int)(parent.RectTransform.Children.Sum(c => c.MinSize.Y) * 1.5f)); } @@ -3117,6 +3133,8 @@ namespace Barotrauma.CharacterEditor } }; + GUITextBlock.AutoScaleAndNormalize(layoutGroup.Children.Where(c => c is GUIButton).Select(c => ((GUIButton)c).TextBlock)); + fileEditToggle = new ToggleButton(new RectTransform(new Vector2(0.08f, 1), fileEditPanel.RectTransform, Anchor.CenterLeft, Pivot.CenterRight), Direction.Right); void ResetView() @@ -3134,9 +3152,9 @@ namespace Barotrauma.CharacterEditor fileEditPanel.RectTransform.MinSize = new Point(0, (int)(layoutGroup.RectTransform.Children.Sum(c => c.MinSize.Y + layoutGroup.AbsoluteSpacing) * 1.2f)); } - #endregion +#endregion - #region ToggleButtons +#region ToggleButtons private enum Direction { Left, @@ -3198,9 +3216,9 @@ namespace Barotrauma.CharacterEditor } } - #endregion +#endregion - #region Params +#region Params private CharacterParams CharacterParams => character.Params; private List AnimParams => character.AnimController.AllAnimParams; private AnimationParams CurrentAnimation => character.AnimController.CurrentAnimationParams; @@ -3451,9 +3469,9 @@ namespace Barotrauma.CharacterEditor } } } - #endregion +#endregion - #region Helpers +#region Helpers private Vector2 ScreenToSim(float x, float y) => ScreenToSim(new Vector2(x, y)); private Vector2 ScreenToSim(Vector2 p) => ConvertUnits.ToSimUnits(Cam.ScreenToWorld(p)) + Submarine.MainSub.SimPosition; private Vector2 SimToScreen(float x, float y) => SimToScreen(new Vector2(x, y)); @@ -3694,9 +3712,9 @@ namespace Barotrauma.CharacterEditor SetToggle(spritesheetToggle, true); } } - #endregion +#endregion - #region Animation Controls +#region Animation Controls private void DrawAnimationControls(SpriteBatch spriteBatch, float deltaTime) { var collider = character.AnimController.Collider; @@ -4289,9 +4307,9 @@ namespace Barotrauma.CharacterEditor } } } - #endregion +#endregion - #region Ragdoll +#region Ragdoll private Vector2[] corners = new Vector2[4]; private Vector2[] GetLimbPhysicRect(Limb limb) { @@ -4613,9 +4631,9 @@ namespace Barotrauma.CharacterEditor } return otherLimbs; } - #endregion +#endregion - #region Spritesheet +#region Spritesheet private List textures; private List Textures { @@ -5210,9 +5228,9 @@ namespace Barotrauma.CharacterEditor CalculateSpritesheetZoom(); spriteSheetZoomBar.BarScroll = MathHelper.Lerp(0, 1, MathUtils.InverseLerp(spriteSheetMinZoom, spriteSheetMaxZoom, spriteSheetZoom)); } - #endregion +#endregion - #region Widgets as methods +#region Widgets as methods private void DrawRadialWidget(SpriteBatch spriteBatch, Vector2 drawPos, float value, string toolTip, Color color, Action onClick, float circleRadius = 30, int widgetSize = 10, float rotationOffset = 0, bool clockWise = true, bool displayAngle = true, bool? autoFreeze = null, bool wrapAnglePi = false, bool holdPosition = false, int rounding = 1) { @@ -5321,9 +5339,9 @@ namespace Barotrauma.CharacterEditor } } } - #endregion +#endregion - #region Widgets as classes +#region Widgets as classes private Dictionary animationWidgets = new Dictionary(); private Dictionary jointSelectionWidgets = new Dictionary(); private Dictionary limbEditWidgets = new Dictionary(); @@ -5477,6 +5495,6 @@ namespace Barotrauma.CharacterEditor return w; } } - #endregion +#endregion } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs index 8f6eb15ce..cdb039970 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs @@ -1,6 +1,6 @@ using Microsoft.Xna.Framework; using System; -using System.IO; +using Barotrauma.IO; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/GameScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/GameScreen.cs index 8278e964c..d3c8f91f5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/GameScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/GameScreen.cs @@ -17,7 +17,7 @@ namespace Barotrauma private RenderTarget2D renderTargetFinal; private Effect damageEffect; - private Texture2D damageStencil; + private Texture2D damageStencil; private Texture2D distortTexture; public Effect PostProcessEffect { get; private set; } @@ -151,7 +151,10 @@ namespace Barotrauma GameMain.ParticleManager.UpdateTransforms(); - GameMain.LightManager.ObstructVision = Character.Controlled != null && Character.Controlled.ObstructVision; + GameMain.LightManager.ObstructVision = + Character.Controlled != null && + Character.Controlled.ObstructVision && + (Character.Controlled.ViewTarget == Character.Controlled || Character.Controlled.ViewTarget == null); if (Character.Controlled != null) { @@ -204,9 +207,12 @@ namespace Barotrauma //Start drawing to the normal render target (stuff that can't be seen through the LOS effect) graphics.SetRenderTarget(renderTarget); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, null, DepthStencilState.None, null, null, null); - spriteBatch.Draw(renderTargetBackground, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); - spriteBatch.End(); + + graphics.BlendState = BlendState.NonPremultiplied; + graphics.SamplerStates[0] = SamplerState.LinearWrap; + Quad.UseBasicEffect(renderTargetBackground); + Quad.Render(); + //Draw the rest of the structures, characters and front structures spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, null, DepthStencilState.None, null, null, cam.Transform); Submarine.DrawBack(spriteBatch, false, e => !(e is Structure) || e.SpriteDepth < 0.9f); @@ -232,11 +238,12 @@ namespace Barotrauma //draw the rendertarget and particles that are only supposed to be drawn in water into renderTargetWater graphics.SetRenderTarget(renderTargetWater); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque); - spriteBatch.Draw(renderTarget, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White);// waterColor); - spriteBatch.End(); + graphics.BlendState = BlendState.Opaque; + graphics.SamplerStates[0] = SamplerState.LinearWrap; + Quad.UseBasicEffect(renderTarget); + Quad.Render(); - //draw alpha blended particles that are inside a sub + //draw alpha blended particles that are inside a sub spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, null, DepthStencilState.DepthRead, null, null, cam.Transform); GameMain.ParticleManager.Draw(spriteBatch, true, true, Particles.ParticleBlendState.AlphaBlend); spriteBatch.End(); @@ -257,7 +264,7 @@ namespace Barotrauma graphics.SetRenderTarget(renderTargetFinal); WaterRenderer.Instance.ResetBuffers(); - Hull.UpdateVertices(graphics, cam, WaterRenderer.Instance); + Hull.UpdateVertices(cam, WaterRenderer.Instance); WaterRenderer.Instance.RenderWater(spriteBatch, renderTargetWater, cam); WaterRenderer.Instance.RenderAir(graphics, cam, renderTarget, Cam.ShaderTransform); graphics.DepthStencilState = DepthStencilState.None; @@ -284,10 +291,12 @@ namespace Barotrauma spriteBatch.End(); if (GameMain.LightManager.LightingEnabled) { - spriteBatch.Begin(SpriteSortMode.Deferred, Lights.CustomBlendStates.Multiplicative, null, DepthStencilState.None, null, null, null); - spriteBatch.Draw(GameMain.LightManager.LightMap, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); - spriteBatch.End(); - } + graphics.DepthStencilState = DepthStencilState.None; + graphics.SamplerStates[0] = SamplerState.LinearWrap; + graphics.BlendState = Lights.CustomBlendStates.Multiplicative; + Quad.UseBasicEffect(GameMain.LightManager.LightMap); + Quad.Render(); + } spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.LinearWrap, DepthStencilState.None, null, null, cam.Transform); foreach (Character c in Character.CharacterList) @@ -333,9 +342,12 @@ namespace Barotrauma losColor = Color.Black; } - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, GameMain.LightManager.LosEffect, null); - spriteBatch.Draw(renderTargetBackground, new Rectangle(0, 0, spriteBatch.GraphicsDevice.Viewport.Width, spriteBatch.GraphicsDevice.Viewport.Height), losColor); - spriteBatch.End(); + GameMain.LightManager.LosEffect.Parameters["xColor"].SetValue(losColor.ToVector4()); + + graphics.BlendState = BlendState.NonPremultiplied; + graphics.SamplerStates[0] = SamplerState.PointClamp; + GameMain.LightManager.LosEffect.CurrentTechnique.Passes[0].Apply(); + Quad.Render(); } graphics.SetRenderTarget(null); @@ -373,29 +385,23 @@ namespace Barotrauma postProcessTechnique += "Distort"; PostProcessEffect.Parameters["distortScale"].SetValue(Vector2.One * DistortStrength); PostProcessEffect.Parameters["distortUvOffset"].SetValue(WaterRenderer.Instance.WavePos * 0.001f); -#if LINUX || OSX - PostProcessEffect.Parameters["xTexture"].SetValue(distortTexture); -#else - PostProcessEffect.Parameters["xTexture"].SetValue(renderTargetFinal); -#endif } + graphics.BlendState = BlendState.Opaque; + graphics.SamplerStates[0] = SamplerState.LinearClamp; + graphics.DepthStencilState = DepthStencilState.None; if (string.IsNullOrEmpty(postProcessTechnique)) { - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque, SamplerState.PointClamp, DepthStencilState.None); + Quad.UseBasicEffect(renderTargetFinal); } else { + PostProcessEffect.Parameters["MatrixTransform"].SetValue(Matrix.Identity); + PostProcessEffect.Parameters["xTexture"].SetValue(renderTargetFinal); PostProcessEffect.CurrentTechnique = PostProcessEffect.Techniques[postProcessTechnique]; PostProcessEffect.CurrentTechnique.Passes[0].Apply(); - spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque, SamplerState.PointClamp, DepthStencilState.None, effect: PostProcessEffect); } -#if LINUX || OSX - spriteBatch.Draw(renderTargetFinal, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); -#else - spriteBatch.Draw(DistortStrength > 0.0f ? distortTexture : renderTargetFinal, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); -#endif - spriteBatch.End(); + Quad.Render(); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs index 842c28657..8dcd69bc0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs @@ -3,10 +3,14 @@ using Barotrauma.RuinGeneration; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; -using System.IO; using System.Linq; -using System.Xml; using System.Xml.Linq; +#if DEBUG +using System.IO; +using System.Xml; +#else +using Barotrauma.IO; +#endif namespace Barotrauma { @@ -170,14 +174,6 @@ namespace Barotrauma { base.Select(); - foreach (LevelObjectPrefab levelObjPrefab in LevelObjectPrefab.List) - { - foreach (Sprite sprite in levelObjPrefab.Sprites) - { - sprite?.EnsureLazyLoaded(); - } - } - pointerLightSource = new LightSource(Vector2.Zero, 1000.0f, Color.White, submarine: null); GameMain.LightManager.AddLight(pointerLightSource); topPanel.ClearChildren(); @@ -253,9 +249,10 @@ namespace Barotrauma }; Sprite sprite = levelObjPrefab.Sprites.FirstOrDefault() ?? levelObjPrefab.DeformableSprite?.Sprite; - GUIImage img = new GUIImage(new RectTransform(new Point(paddedFrame.Rect.Height, paddedFrame.Rect.Height - textBlock.Rect.Height), + new GUIImage(new RectTransform(new Point(paddedFrame.Rect.Height, paddedFrame.Rect.Height - textBlock.Rect.Height), paddedFrame.RectTransform, Anchor.TopCenter), sprite, scaleToFit: true) { + LoadAsynchronously = true, CanBeFocused = false }; } @@ -466,7 +463,7 @@ namespace Barotrauma Submarine.Draw(spriteBatch, false); Submarine.DrawFront(spriteBatch); Submarine.DrawDamageable(spriteBatch, null); - GUI.DrawRectangle(spriteBatch, new Rectangle(new Point(0, -Level.Loaded.Size.Y), Level.Loaded.Size), Color.White, thickness: (int)(1.0f / cam.Zoom)); + GUI.DrawRectangle(spriteBatch, new Rectangle(new Point(0, -Level.Loaded.Size.Y), Level.Loaded.Size), Color.Gray, thickness: (int)(1.0f / cam.Zoom)); spriteBatch.End(); if (lightingEnabled.Selected) @@ -504,7 +501,7 @@ namespace Barotrauma private void SerializeAll() { - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, NewLineOnAttributes = true @@ -585,7 +582,7 @@ namespace Barotrauma if (elementFound) { - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, NewLineOnAttributes = true @@ -602,7 +599,7 @@ namespace Barotrauma } - #region LevelObject Wizard +#region LevelObject Wizard private class Wizard { private LevelObjectPrefab newPrefab; @@ -683,8 +680,8 @@ namespace Barotrauma } newPrefab.Name = nameBox.Text; - - XmlWriterSettings settings = new XmlWriterSettings { Indent = true }; + + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true }; foreach (ContentFile configFile in GameMain.Instance.GetFilesOfType(ContentType.LevelObjectPrefabs)) { XDocument doc = XMLExtensions.TryLoadXml(configFile.Path); @@ -717,6 +714,6 @@ namespace Barotrauma } } - #endregion +#endregion } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs index fdea888d7..bccff1f52 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs @@ -10,7 +10,7 @@ using RestSharp; using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Net; using System.Threading; @@ -409,10 +409,9 @@ namespace Barotrauma this.game = game; - menuTabs[(int)Tab.Credits] = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas), style: null, color: Color.Black * 0.5f) - { - CanBeFocused = false - }; + menuTabs[(int)Tab.Credits] = new GUIFrame(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, menuTabs[(int)Tab.Credits].RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + var creditsContainer = new GUIFrame(new RectTransform(new Vector2(0.75f, 1.5f), menuTabs[(int)Tab.Credits].RectTransform, Anchor.CenterRight), style: "OuterGlow", color: Color.Black * 0.8f); creditsPlayer = new CreditsPlayer(new RectTransform(Vector2.One, creditsContainer.RectTransform), "Content/Texts/Credits.xml"); @@ -1010,11 +1009,12 @@ namespace Barotrauma GUI.Draw(Cam, spriteBatch); #if !UNSTABLE - GUI.Font.DrawString(spriteBatch, "Barotrauma v" + GameMain.Version + " (" + AssemblyInfo.GetBuildString() + ", branch " + AssemblyInfo.GetGitBranch() + ", revision " + AssemblyInfo.GetGitRevision() + ")", new Vector2(10, GameMain.GraphicsHeight - 20), Color.White * 0.7f); + string versionString = "Barotrauma v" + GameMain.Version + " (" + AssemblyInfo.GetBuildString() + ", branch " + AssemblyInfo.GetGitBranch() + ", revision " + AssemblyInfo.GetGitRevision() + ")"; + GUI.SmallFont.DrawString(spriteBatch, versionString, new Vector2(HUDLayoutSettings.Padding, GameMain.GraphicsHeight - GUI.SmallFont.MeasureString(versionString).Y - HUDLayoutSettings.Padding * 0.75f), Color.White * 0.7f); #endif if (selectedTab != Tab.Credits) { - Vector2 textPos = new Vector2(GameMain.GraphicsWidth - 10, GameMain.GraphicsHeight - 10); + Vector2 textPos = new Vector2(GameMain.GraphicsWidth - HUDLayoutSettings.Padding, GameMain.GraphicsHeight - HUDLayoutSettings.Padding * 0.75f); for (int i = legalCrap.Length - 1; i >= 0; i--) { Vector2 textSize = GUI.SmallFont.MeasureString(legalCrap[i]); @@ -1069,7 +1069,7 @@ namespace Barotrauma { File.Copy(selectedSub.FilePath, Path.Combine(SaveUtil.TempPath, selectedSub.Name + ".sub"), true); } - catch (IOException e) + catch (System.IO.IOException e) { DebugConsole.ThrowError("Copying the file \"" + selectedSub.FilePath + "\" failed. The file may have been deleted or in use by another process. Try again or select another submarine.", e); GameAnalyticsManager.AddErrorEventOnce( diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs index 3c29fae89..ce44807a4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -22,6 +22,7 @@ namespace Barotrauma private GUIListBox subList, modeList; private GUIListBox chatBox, playerList; + private GUIButton serverLogReverseButton; private GUIListBox serverLogBox, serverLogFilterTicks; private GUIComponent jobVariantTooltip; @@ -64,12 +65,15 @@ namespace Barotrauma private readonly GUIButton gameModeViewButton, campaignViewButton, spectateButton; private readonly GUILayoutGroup roundControlsHolder; public GUIButton SettingsButton { get; private set; } + public static GUIButton JobInfoFrame; private readonly GUITickBox spectateBox; private readonly GUIFrame playerInfoContainer; - private GUIButton jobInfoFrame; - private GUIButton playerFrame; + + private GUILayoutGroup infoContainer; + private GUITextBlock changesPendingText; + public GUIButton PlayerFrame; private readonly GUIComponent subPreviewContainer; @@ -525,7 +529,7 @@ namespace Barotrauma if (!(serverLogHolder?.Visible ?? true)) { serverLogHolder.Visible = true; - GameMain.Client.ServerSettings.ServerLog.AssignLogFrame(serverLogBox, serverLogFilterTicks.Content, serverLogFilter); + GameMain.Client.ServerSettings.ServerLog.AssignLogFrame(serverLogReverseButton, serverLogBox, serverLogFilterTicks.Content, serverLogFilter); } showChatButton.Selected = false; showLogButton.Selected = true; @@ -609,7 +613,13 @@ namespace Barotrauma //server log ---------------------------------------------------------------------- - serverLogBox = new GUIListBox(new RectTransform(new Vector2(0.5f, 1.0f), serverLogHolderHorizontal.RectTransform)); + GUILayoutGroup serverLogListboxLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.5f, 1.0f), serverLogHolderHorizontal.RectTransform)) + { + Stretch = true + }; + + serverLogReverseButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.05f), serverLogListboxLayout.RectTransform), style: "UIToggleButtonVertical"); + serverLogBox = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.95f), serverLogListboxLayout.RectTransform)); //filter tickbox list ------------------------------------------------------------------ @@ -658,7 +668,7 @@ namespace Barotrauma OnClicked = (btn, obj) => { GameMain.Client.RequestStartRound(); - CoroutineManager.StartCoroutine(WaitForStartRound(StartButton, allowCancel: false), "WaitForStartRound"); + CoroutineManager.StartCoroutine(WaitForStartRound(StartButton), "WaitForStartRound"); return true; } }; @@ -776,6 +786,26 @@ namespace Barotrauma }; var subLabel = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.055f), subHolder.RectTransform) { MinSize = new Point(0, 25) }, TextManager.Get("Submarine"), font: GUI.SubHeadingFont); + + var filterContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.05f), subHolder.RectTransform), isHorizontal: true) + { + Stretch = true + }; + var searchTitle = new GUITextBlock(new RectTransform(new Vector2(0.001f, 1.0f), filterContainer.RectTransform), TextManager.Get("serverlog.filter"), textAlignment: Alignment.CenterLeft, font: GUI.Font); + var searchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 1.0f), filterContainer.RectTransform, Anchor.CenterRight), font: GUI.Font, createClearButton: true); + filterContainer.RectTransform.MinSize = searchBox.RectTransform.MinSize; + searchBox.OnSelected += (sender, userdata) => { searchTitle.Visible = false; }; + searchBox.OnDeselected += (sender, userdata) => { searchTitle.Visible = true; }; + searchBox.OnTextChanged += (textBox, text) => + { + foreach (GUIComponent child in subList.Content.Children) + { + if (!(child.UserData is SubmarineInfo sub)) { continue; } + child.Visible = string.IsNullOrEmpty(text) ? true : sub.DisplayName.ToLower().Contains(text.ToLower()); + } + return true; + }; + subList = new GUIListBox(new RectTransform(Vector2.One, subHolder.RectTransform)) { OnSelected = VotableClicked @@ -1163,25 +1193,11 @@ namespace Barotrauma GUI.ClearCursorWait(); } - public IEnumerable WaitForStartRound(GUIButton startButton, bool allowCancel) + public IEnumerable WaitForStartRound(GUIButton startButton) { GUI.SetCursorWaiting(); string headerText = TextManager.Get("RoundStartingPleaseWait"); - var msgBox = new GUIMessageBox(headerText, TextManager.Get("RoundStarting"), - allowCancel ? new string[] { TextManager.Get("Cancel") } : new string[0]); - - if (allowCancel) - { - msgBox.Buttons[0].OnClicked = (btn, userdata) => - { - startButton.Enabled = true; - GameMain.Client.RequestRoundEnd(); - CoroutineManager.StopCoroutines("WaitForStartRound"); - GUI.ClearCursorWait(); - return true; - }; - msgBox.Buttons[0].OnClicked += msgBox.Close; - } + var msgBox = new GUIMessageBox(headerText, TextManager.Get("RoundStarting"), new string[0]); if (startButton != null) { @@ -1393,18 +1409,34 @@ namespace Barotrauma parent.ClearChildren(); - GUILayoutGroup infoContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.9f), parent.RectTransform, Anchor.BottomCenter), childAnchor: Anchor.TopCenter) + bool isGameRunning = GameMain.GameSession?.GameMode?.IsRunning ?? false; + + infoContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, isGameRunning ? 0.95f : 0.9f), parent.RectTransform, Anchor.BottomCenter), childAnchor: Anchor.TopCenter) { - RelativeSpacing = 0.015f, + RelativeSpacing = 0.025f, Stretch = true, - UserData = characterInfo + UserData = characterInfo }; - CharacterNameBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.065f), infoContainer.RectTransform), characterInfo.Name, textAlignment: Alignment.Center) + bool nameChangePending = isGameRunning && GameMain.Client.PendingName != string.Empty && GameMain.Client?.Character?.Name != GameMain.Client.PendingName; + changesPendingText = null; + + if (isGameRunning) + { + infoContainer.RectTransform.AbsoluteOffset = new Point(0, (int)(parent.Rect.Height * 0.025f)); + } + + if (TabMenu.PendingChanges) + { + CreateChangesPendingText(); + } + + CharacterNameBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.065f), infoContainer.RectTransform), !nameChangePending ? characterInfo.Name : GameMain.Client.PendingName, textAlignment: Alignment.Center) { MaxTextLength = Client.MaxNameLength, OverflowClip = true }; + CharacterNameBox.OnEnterPressed += (tb, text) => { CharacterNameBox.Deselect(); return true; }; CharacterNameBox.OnDeselected += (tb, key) => { @@ -1417,7 +1449,15 @@ namespace Barotrauma } else { - ReadyToStartBox.Selected = false; + if (isGameRunning) + { + GameMain.Client.PendingName = tb.Text; + } + else + { + ReadyToStartBox.Selected = false; + } + GameMain.Client.SetName(tb.Text); }; }; @@ -1538,6 +1578,13 @@ namespace Barotrauma } } + private void CreateChangesPendingText() + { + if (changesPendingText != null || infoContainer == null) return; + changesPendingText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.065f), infoContainer.Parent.RectTransform, Anchor.BottomCenter, Pivot.TopCenter) { RelativeOffset = new Vector2(0f, -0.065f) }, + TextManager.Get("tabmenu.characterchangespending"), textColor: GUI.Style.Orange, textAlignment: Alignment.Center, style: null) { IgnoreLayoutGroups = true }; + } + private void CreateJobVariantTooltip(JobPrefab jobPrefab, int variant, GUIComponent parentSlot) { jobVariantTooltip = new GUIFrame(new RectTransform(new Point((int)(500 * GUI.Scale), (int)(200 * GUI.Scale)), GUI.Canvas, pivot: Pivot.BottomRight), @@ -1845,28 +1892,28 @@ namespace Barotrauma public void SetPlayerNameAndJobPreference(Client client) { - var playerFrame = (GUITextBlock)PlayerList.Content.FindChild(client); - if (playerFrame == null) { return; } - playerFrame.Text = client.Name; + var PlayerFrame = (GUITextBlock)PlayerList.Content.FindChild(client); + if (PlayerFrame == null) { return; } + PlayerFrame.Text = client.Name; Color color = Color.White; if (JobPrefab.Prefabs.ContainsKey(client.PreferredJob)) { color = JobPrefab.Prefabs[client.PreferredJob].UIColor; } - playerFrame.Color = color * 0.4f; - playerFrame.HoverColor = color * 0.6f; - playerFrame.SelectedColor = color * 0.8f; - playerFrame.OutlineColor = color * 0.5f; - playerFrame.TextColor = color; + PlayerFrame.Color = color * 0.4f; + PlayerFrame.HoverColor = color * 0.6f; + PlayerFrame.SelectedColor = color * 0.8f; + PlayerFrame.OutlineColor = color * 0.5f; + PlayerFrame.TextColor = color; } public void SetPlayerVoiceIconState(Client client, bool muted, bool mutedLocally) { - var playerFrame = PlayerList.Content.FindChild(client); - if (playerFrame == null) { return; } - var soundIcon = playerFrame.FindChild(c => c.UserData is Pair pair && pair.First == "soundicon"); - var soundIconDisabled = playerFrame.FindChild("soundicondisabled"); + var PlayerFrame = PlayerList.Content.FindChild(client); + if (PlayerFrame == null) { return; } + var soundIcon = PlayerFrame.FindChild(c => c.UserData is Pair pair && pair.First == "soundicon"); + var soundIconDisabled = PlayerFrame.FindChild("soundicondisabled"); Pair userdata = soundIcon.UserData as Pair; @@ -1881,9 +1928,9 @@ namespace Barotrauma public void SetPlayerSpeaking(Client client) { - var playerFrame = PlayerList.Content.FindChild(client); - if (playerFrame == null) { return; } - var soundIcon = playerFrame.FindChild(c => c.UserData is Pair pair && pair.First == "soundicon"); + var PlayerFrame = PlayerList.Content.FindChild(client); + if (PlayerFrame == null) { return; } + var soundIcon = PlayerFrame.FindChild(c => c.UserData is Pair pair && pair.First == "soundicon"); Pair userdata = soundIcon.UserData as Pair; userdata.Second = Math.Max(userdata.Second, 0.18f); soundIcon.Visible = true; @@ -1895,51 +1942,38 @@ namespace Barotrauma if (child != null) { playerList.RemoveChild(child); } } - private bool SelectPlayer(Client selectedClient) + public bool SelectPlayer(Client selectedClient) { bool myClient = selectedClient.ID == GameMain.Client.ID; + bool hasManagePermissions = GameMain.Client.HasPermission(ClientPermissions.ManagePermissions); - playerFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker") + PlayerFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null) { OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) ClosePlayerFrame(btn, userdata); return true; } }; - Vector2 frameSize = GameMain.Client.HasPermission(ClientPermissions.ManagePermissions) ? new Vector2(.28f, .5f) : new Vector2(.28f, .24f); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, PlayerFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + Vector2 frameSize = hasManagePermissions ? new Vector2(.28f, .5f) : new Vector2(.28f, .15f); - var playerFrameInner = new GUIFrame(new RectTransform(frameSize, playerFrame.RectTransform, Anchor.Center) { MinSize = new Point(550, 0) }); + var playerFrameInner = new GUIFrame(new RectTransform(frameSize, PlayerFrame.RectTransform, Anchor.Center) { MinSize = new Point(550, 0) }); var paddedPlayerFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.88f), playerFrameInner.RectTransform, Anchor.Center)) { Stretch = true, RelativeSpacing = 0.03f }; - var headerContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), paddedPlayerFrame.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft) + var headerContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, hasManagePermissions ? 0.1f : 0.25f), paddedPlayerFrame.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft) { Stretch = true }; - var nameText = new GUITextBlock(new RectTransform(new Vector2(0.6f, 1.0f), headerContainer.RectTransform), + var nameText = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), headerContainer.RectTransform), text: selectedClient.Name, font: GUI.LargeFont); - nameText.Text = ToolBox.LimitString(nameText.Text, nameText.Font, nameText.Rect.Width); + nameText.Text = ToolBox.LimitString(nameText.Text, nameText.Font, (int)(nameText.Rect.Width * 0.95f)); - if (selectedClient.SteamID != 0 && Steam.SteamManager.IsInitialized) + if (hasManagePermissions) { - var viewSteamProfileButton = new GUIButton(new RectTransform(new Vector2(0.4f, 1.0f), headerContainer.RectTransform, Anchor.TopCenter) { MaxSize = new Point(int.MaxValue, (int)(40 * GUI.Scale)) }, - TextManager.Get("ViewSteamProfile")) - { - UserData = selectedClient - }; - viewSteamProfileButton.TextBlock.AutoScaleHorizontal = true; - viewSteamProfileButton.OnClicked = (bt, userdata) => - { - Steamworks.SteamFriends.OpenWebOverlay("https://steamcommunity.com/profiles/" + selectedClient.SteamID.ToString()); - return true; - }; - } - - if (GameMain.Client.HasPermission(ClientPermissions.ManagePermissions)) - { - playerFrame.UserData = selectedClient; + PlayerFrame.UserData = selectedClient; new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), paddedPlayerFrame.RectTransform), TextManager.Get("Rank"), font: GUI.SubHeadingFont); @@ -1965,11 +1999,11 @@ namespace Barotrauma PermissionPreset selectedPreset = (PermissionPreset)userdata; if (selectedPreset != null) { - var client = playerFrame.UserData as Client; + var client = PlayerFrame.UserData as Client; client.SetPermissions(selectedPreset.Permissions, selectedPreset.PermittedCommands); GameMain.Client.UpdateClientPermissions(client); - playerFrame = null; + PlayerFrame = null; SelectPlayer(client); } return true; @@ -2005,7 +2039,7 @@ namespace Barotrauma //reset rank to custom rankDropDown.SelectItem(null); - if (!(playerFrame.UserData is Client client)) { return false; } + if (!(PlayerFrame.UserData is Client client)) { return false; } foreach (GUIComponent child in tickbox.Parent.GetChild().Content.Children) { @@ -2038,7 +2072,7 @@ namespace Barotrauma //reset rank to custom rankDropDown.SelectItem(null); - if (!(playerFrame.UserData is Client client)) { return false; } + if (!(PlayerFrame.UserData is Client client)) { return false; } var thisPermission = (ClientPermissions)tickBox.UserData; if (tickBox.Selected) @@ -2072,7 +2106,7 @@ namespace Barotrauma //reset rank to custom rankDropDown.SelectItem(null); - if (!(playerFrame.UserData is Client client)) { return false; } + if (!(PlayerFrame.UserData is Client client)) { return false; } foreach (GUIComponent child in tickbox.Parent.GetChild().Content.Children) { @@ -2105,7 +2139,7 @@ namespace Barotrauma rankDropDown.SelectItem(null); DebugConsole.Command selectedCommand = tickBox.UserData as DebugConsole.Command; - if (!(playerFrame.UserData is Client client)) { return false; } + if (!(PlayerFrame.UserData is Client client)) { return false; } if (!tickBox.Selected) { @@ -2125,7 +2159,7 @@ namespace Barotrauma } var buttonAreaTop = myClient ? null : new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.08f), paddedPlayerFrame.RectTransform), isHorizontal: true); - var buttonAreaLower = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.08f), paddedPlayerFrame.RectTransform), isHorizontal: true); + var buttonAreaLower = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.08f), paddedPlayerFrame.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft); if (!myClient) { @@ -2173,32 +2207,66 @@ namespace Barotrauma kickButton.OnClicked += ClosePlayerFrame; } - GUITextBlock.AutoScaleAndNormalize( - buttonAreaTop.Children.Select(c => ((GUIButton)c).TextBlock).Concat(buttonAreaLower.Children.Select(c => ((GUIButton)c).TextBlock))); + if (buttonAreaTop.CountChildren > 0) + { + GUITextBlock.AutoScaleAndNormalize(buttonAreaTop.Children.Select(c => ((GUIButton)c).TextBlock).Concat(buttonAreaLower.Children.Select(c => ((GUIButton)c).TextBlock))); + } - new GUITickBox(new RectTransform(new Vector2(0.25f, 1.0f), buttonAreaTop.RectTransform, Anchor.TopRight), + new GUITickBox(new RectTransform(new Vector2(0.175f, 1.0f), headerContainer.RectTransform, Anchor.TopRight), TextManager.Get("Mute")) { - IgnoreLayoutGroups = true, Selected = selectedClient.MutedLocally, OnSelected = (tickBox) => { selectedClient.MutedLocally = tickBox.Selected; return true; } }; } - var closeButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), buttonAreaLower.RectTransform, Anchor.TopRight), + if (selectedClient.SteamID != 0 && Steam.SteamManager.IsInitialized) + { + var viewSteamProfileButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), headerContainer.RectTransform, Anchor.TopCenter) { MaxSize = new Point(int.MaxValue, (int)(40 * GUI.Scale)) }, + TextManager.Get("ViewSteamProfile")) + { + UserData = selectedClient + }; + viewSteamProfileButton.TextBlock.AutoScaleHorizontal = true; + viewSteamProfileButton.OnClicked = (bt, userdata) => + { + Steamworks.SteamFriends.OpenWebOverlay("https://steamcommunity.com/profiles/" + selectedClient.SteamID.ToString()); + return true; + }; + } + + var closeButton = new GUIButton(new RectTransform(new Vector2(0f, 1.0f), buttonAreaLower.RectTransform, Anchor.CenterRight), TextManager.Get("Close")) { IgnoreLayoutGroups = true, OnClicked = ClosePlayerFrame }; + float xSize = 1f / buttonAreaLower.CountChildren; + for (int i = 0; i < buttonAreaLower.CountChildren; i++) + { + buttonAreaLower.GetChild(i).RectTransform.RelativeSize = new Vector2(xSize, 1f); + } + buttonAreaLower.RectTransform.NonScaledSize = new Point(buttonAreaLower.Rect.Width, buttonAreaLower.RectTransform.Children.Max(c => c.NonScaledSize.Y)); if (buttonAreaTop != null) { - buttonAreaTop.RectTransform.NonScaledSize = - buttonAreaLower.RectTransform.NonScaledSize = - new Point(buttonAreaLower.Rect.Width, Math.Max(buttonAreaLower.RectTransform.NonScaledSize.Y, buttonAreaTop.RectTransform.Children.Max(c => c.NonScaledSize.Y))); + if (buttonAreaTop.CountChildren == 0) + { + paddedPlayerFrame.RemoveChild(buttonAreaTop); + } + else + { + for (int i = 0; i < buttonAreaTop.CountChildren; i++) + { + buttonAreaTop.GetChild(i).RectTransform.RelativeSize = new Vector2(1f / 3f, 1f); + } + + buttonAreaTop.RectTransform.NonScaledSize = + buttonAreaLower.RectTransform.NonScaledSize = + new Point(buttonAreaLower.Rect.Width, Math.Max(buttonAreaLower.RectTransform.NonScaledSize.Y, buttonAreaTop.RectTransform.Children.Max(c => c.NonScaledSize.Y))); + } } return false; @@ -2206,7 +2274,7 @@ namespace Barotrauma private bool ClosePlayerFrame(GUIButton button, object userData) { - playerFrame = null; + PlayerFrame = null; playerList.Deselect(); return true; } @@ -2233,9 +2301,8 @@ namespace Barotrauma { base.AddToGUIUpdateList(); - playerFrame?.AddToGUIUpdateList(); //CampaignSetupUI?.AddToGUIUpdateList(); - jobInfoFrame?.AddToGUIUpdateList(); + JobInfoFrame?.AddToGUIUpdateList(); HeadSelectionList?.AddToGUIUpdateList(); JobSelectionFrame?.AddToGUIUpdateList(); @@ -2532,6 +2599,7 @@ namespace Barotrauma StepValue = 1, BarScrollValue = info.HairIndex, OnMoved = SwitchHair, + OnReleased = SaveHead, BarSize = 1.0f / (float)(hairCount + 1) }; } @@ -2546,6 +2614,7 @@ namespace Barotrauma StepValue = 1, BarScrollValue = info.BeardIndex, OnMoved = SwitchBeard, + OnReleased = SaveHead, BarSize = 1.0f / (float)(beardCount + 1) }; } @@ -2560,6 +2629,7 @@ namespace Barotrauma StepValue = 1, BarScrollValue = info.MoustacheIndex, OnMoved = SwitchMoustache, + OnReleased = SaveHead, BarSize = 1.0f / (float)(moustacheCount + 1) }; } @@ -2574,6 +2644,7 @@ namespace Barotrauma StepValue = 1, BarScrollValue = info.FaceAttachmentIndex, OnMoved = SwitchFaceAttachment, + OnReleased = SaveHead, BarSize = 1.0f / (float)(faceAttachmentCount + 1) }; } @@ -2881,7 +2952,7 @@ namespace Barotrauma var textBlock = new GUITextBlock( innerFrame.CountChildren == 0 ? new RectTransform(Vector2.One, parent.RectTransform, Anchor.Center) : - new RectTransform(new Vector2(selectedByPlayer ? 0.65f : 0.95f, 0.3f), parent.RectTransform, Anchor.BottomCenter), + new RectTransform(new Vector2(selectedByPlayer ? 0.55f : 0.95f, 0.3f), parent.RectTransform, Anchor.BottomCenter), jobPrefab.Name, wrap: true, textAlignment: Alignment.BottomCenter) { Padding = Vector4.Zero, @@ -2910,7 +2981,7 @@ namespace Barotrauma info.Head = new CharacterInfo.HeadInfo(id, gender, race); info.ReloadHeadAttachments(); } - StoreHead(); + StoreHead(true); UpdateJobPreferences(JobList); @@ -2918,7 +2989,8 @@ namespace Barotrauma return true; } - + + private bool SaveHead(GUIScrollBar scrollBar, float barScroll) => StoreHead(true); private bool SwitchHair(GUIScrollBar scrollBar, float barScroll) => SwitchAttachment(scrollBar, WearableType.Hair); private bool SwitchBeard(GUIScrollBar scrollBar, float barScroll) => SwitchAttachment(scrollBar, WearableType.Beard); private bool SwitchMoustache(GUIScrollBar scrollBar, float barScroll) => SwitchAttachment(scrollBar, WearableType.Moustache); @@ -2946,14 +3018,15 @@ namespace Barotrauma return false; } info.ReloadHeadAttachments(); - StoreHead(); + StoreHead(false); return true; } - private void StoreHead() + private bool StoreHead(bool save) { var info = GameMain.Client.CharacterInfo; var config = GameMain.Config; + config.CharacterRace = info.Race; config.CharacterGender = info.Gender; config.CharacterHeadIndex = info.HeadSpriteId; @@ -2961,8 +3034,22 @@ namespace Barotrauma config.CharacterBeardIndex = info.BeardIndex; config.CharacterMoustacheIndex = info.MoustacheIndex; config.CharacterFaceAttachmentIndex = info.FaceAttachmentIndex; + + if (save) + { + if (GameMain.GameSession?.GameMode?.IsRunning ?? false) + { + TabMenu.PendingChanges = true; + CreateChangesPendingText(); + } + + GameMain.Config.SaveNewPlayerConfig(); + } + + return true; } + public void SelectMode(int modeIndex) { if (modeIndex < 0 || modeIndex >= modeList.Content.CountChildren) { return; } @@ -3026,7 +3113,7 @@ namespace Barotrauma StartRound = () => { GameMain.Client.RequestStartRound(); - CoroutineManager.StartCoroutine(WaitForStartRound(campaignUI.StartButton, allowCancel: true), "WaitForStartRound"); + CoroutineManager.StartCoroutine(WaitForStartRound(campaignUI.StartButton), "WaitForStartRound"); } }; @@ -3085,20 +3172,20 @@ namespace Barotrauma { if (!(button.UserData is Pair jobPrefab)) { return false; } - jobInfoFrame = jobPrefab.First.CreateInfoFrame(jobPrefab.Second); - GUIButton closeButton = new GUIButton(new RectTransform(new Vector2(0.25f, 0.05f), jobInfoFrame.GetChild(2).GetChild(0).RectTransform, Anchor.BottomRight), + JobInfoFrame = jobPrefab.First.CreateInfoFrame(jobPrefab.Second); + GUIButton closeButton = new GUIButton(new RectTransform(new Vector2(0.25f, 0.05f), JobInfoFrame.GetChild(2).GetChild(0).RectTransform, Anchor.BottomRight), TextManager.Get("Close")) { OnClicked = CloseJobInfo }; - jobInfoFrame.OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) CloseJobInfo(btn, userdata); return true; }; + JobInfoFrame.OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) CloseJobInfo(btn, userdata); return true; }; return true; } private bool CloseJobInfo(GUIButton button, object obj) { - jobInfoFrame = null; + JobInfoFrame = null; return true; } @@ -3192,8 +3279,14 @@ namespace Barotrauma } GameMain.Client.ForceNameAndJobUpdate(); - if (!GameMain.Config.JobPreferences.SequenceEqual(jobNamePreferences)) + if (!GameMain.Config.AreJobPreferencesEqual(jobNamePreferences)) { + if (GameMain.GameSession?.GameMode?.IsRunning ?? false) + { + TabMenu.PendingChanges = true; + CreateChangesPendingText(); + } + GameMain.Config.JobPreferences = jobNamePreferences; GameMain.Config.SaveNewPlayerConfig(); } @@ -3238,7 +3331,8 @@ namespace Barotrauma { CreateSubPreview(sub); } - if (subList.SelectedData is SubmarineInfo selectedSub && selectedSub.MD5Hash?.Hash == md5Hash && System.IO.File.Exists(sub.FilePath)) + + if (subList.SelectedData is SubmarineInfo selectedSub && selectedSub.MD5Hash?.Hash == md5Hash && Barotrauma.IO.File.Exists(sub.FilePath)) { return true; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/ParticleEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/ParticleEditorScreen.cs index d37df90f9..5d7eba886 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/ParticleEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/ParticleEditorScreen.cs @@ -4,9 +4,14 @@ using Barotrauma.Particles; using System; using System.Collections.Generic; using System.Xml.Linq; -using System.Xml; using System.Text; using Barotrauma.Extensions; +#if DEBUG +using System.IO; +using System.Xml; +#else +using Barotrauma.IO; +#endif namespace Barotrauma { @@ -242,7 +247,7 @@ namespace Barotrauma } } - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, @@ -260,27 +265,49 @@ namespace Barotrauma private void SerializeToClipboard(ParticlePrefab prefab) { #if WINDOWS - if (prefab == null) return; + if (prefab == null) { return; } - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, NewLineOnAttributes = true }; - XElement element = new XElement(prefab.Name); - SerializableProperty.SerializeProperties(prefab, element, true); + XElement originalElement = null; + foreach (ContentFile configFile in GameMain.Instance.GetFilesOfType(ContentType.Particles)) + { + XDocument doc = XMLExtensions.TryLoadXml(configFile.Path); + if (doc == null) { continue; } + + var prefabList = GameMain.ParticleManager.GetPrefabList(); + foreach (ParticlePrefab otherPrefab in prefabList) + { + foreach (XElement subElement in doc.Root.Elements()) + { + if (!subElement.Name.ToString().Equals(prefab.Name, StringComparison.OrdinalIgnoreCase)) { continue; } + SerializableProperty.SerializeProperties(prefab, subElement, true); + originalElement = subElement; + break; + } + } + } + + if (originalElement == null) + { + originalElement = new XElement(prefab.Name); + SerializableProperty.SerializeProperties(prefab, originalElement, true); + } StringBuilder sb = new StringBuilder(); - using (var writer = XmlWriter.Create(sb, settings)) + using (var writer = System.Xml.XmlWriter.Create(sb, settings)) { - element.WriteTo(writer); + originalElement.WriteTo(writer); writer.Flush(); } Clipboard.SetText(sb.ToString()); -#endif +#endif } public override void Update(double deltaTime) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs index 4b0fcf608..08266e537 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs @@ -14,10 +14,11 @@ namespace Barotrauma { if (frame == null) { - frame = new GUIFrame(new RectTransform(Vector2.One, GUICanvas.Instance), style: null) + frame = new GUIFrame(new RectTransform(GUICanvas.Instance.RelativeSize, GUICanvas.Instance), style: null) { CanBeFocused = false }; + } return frame; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs index d3df520ff..4f0ab96eb 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs @@ -6,7 +6,7 @@ using Microsoft.Xna.Framework.Graphics; using RestSharp; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Net; using System.Net.NetworkInformation; @@ -422,7 +422,7 @@ namespace Barotrauma } // Game mode Selection - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), filters.Content.RectTransform), TextManager.Get("gamemode")) { CanBeFocused = false }; + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), filters.Content.RectTransform), TextManager.Get("gamemode"), font: GUI.SubHeadingFont) { CanBeFocused = false }; gameModeTickBoxes = new List(); foreach (GameModePreset mode in GameModePreset.List) @@ -474,7 +474,7 @@ namespace Barotrauma }; btn.Color *= 0.5f; labelTexts.Add(btn.TextBlock); - + new GUIImage(new RectTransform(new Vector2(0.5f, 0.3f), btn.RectTransform, Anchor.BottomCenter, scaleBasis: ScaleBasis.BothHeight), style: "GUIButtonVerticalArrow", scaleToFit: true) { CanBeFocused = false, @@ -567,7 +567,18 @@ namespace Barotrauma var directJoinButton = new GUIButton(new RectTransform(new Vector2(0.25f, 0.9f), buttonContainer.RectTransform), TextManager.Get("serverlistdirectjoin")) { - OnClicked = (btn, userdata) => { ShowDirectJoinPrompt(); return true; } + OnClicked = (btn, userdata) => + { + if (string.IsNullOrWhiteSpace(ClientNameBox.Text)) + { + ClientNameBox.Flash(); + ClientNameBox.Select(); + GUI.PlayUISound(GUISoundType.PickItemFail); + return false; + } + ShowDirectJoinPrompt(); + return true; + } }; joinButton = new GUIButton(new RectTransform(new Vector2(0.25f, 0.9f), buttonContainer.RectTransform), @@ -672,7 +683,21 @@ namespace Barotrauma if (!File.Exists(file)) { return; } XDocument doc = XMLExtensions.TryLoadXml(file); - if (doc == null) { return; } + if (doc == null) + { + DebugConsole.NewMessage("Failed to load file \"" + file + "\". Attempting to recreate the file..."); + try + { + doc = new XDocument(new XElement("servers")); + doc.Save(file); + DebugConsole.NewMessage("Recreated \"" + file + "\"."); + } + catch (Exception e) + { + DebugConsole.ThrowError("Failed to recreate the file \"" + file + "\".", e); + } + return; + } foreach (XElement element in doc.Root.Elements()) { @@ -694,7 +719,7 @@ namespace Barotrauma rootElement.Add(info.ToXElement()); } - doc.Save(file); + doc.SaveSafe(file); } public ServerInfo UpdateServerInfoWithServerSettings(object endpoint, ServerSettings serverSettings) @@ -909,6 +934,12 @@ namespace Barotrauma Steamworks.SteamMatchmaking.ResetActions(); + if (GameMain.Client != null) + { + GameMain.Client.Disconnect(); + GameMain.Client = null; + } + RefreshServers(); } @@ -996,7 +1027,7 @@ namespace Barotrauma foreach (GUITickBox tickBox in gameModeTickBoxes) { var gameMode = (string)tickBox.UserData; - if (!tickBox.Selected && serverInfo.GameMode.Equals(gameMode, StringComparison.OrdinalIgnoreCase)) + if (!tickBox.Selected && serverInfo.GameMode != null && serverInfo.GameMode.Equals(gameMode, StringComparison.OrdinalIgnoreCase)) { child.Visible = false; break; @@ -1653,7 +1684,7 @@ namespace Barotrauma { CanBeFocused = false, Selected = - serverInfo.GameVersion == GameMain.Version.ToString() && + (NetworkMember.IsCompatible(GameMain.Version.ToString(), serverInfo.GameVersion) ?? true) && serverInfo.ContentPackagesMatch(GameMain.SelectedPackages), UserData = "compatible" }; @@ -1679,6 +1710,14 @@ namespace Barotrauma serverName.Text = ToolBox.LimitString(serverName.Text, serverName.Font, serverName.Rect.Width); }; + if (serverInfo.ContentPackageNames.Any()) + { + if (serverInfo.ContentPackageNames.Any(cp => !cp.Equals(GameMain.VanillaContent.Name, StringComparison.OrdinalIgnoreCase))) + { + serverName.TextColor = new Color(219, 125, 217); + } + } + new GUITickBox(new RectTransform(new Vector2(columnRelativeWidth[3], 0.9f), serverContent.RectTransform, Anchor.Center), label: "") { ToolTip = TextManager.Get((serverInfo.GameStarted) ? "ServerListRoundStarted" : "ServerListRoundNotStarted"), @@ -1897,6 +1936,8 @@ namespace Barotrauma if (string.IsNullOrWhiteSpace(ClientNameBox.Text)) { ClientNameBox.Flash(); + ClientNameBox.Select(); + GUI.PlayUISound(GUISoundType.PickItemFail); return false; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs index 3fc91dcf5..932d9a409 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs @@ -3,10 +3,14 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Xml.Linq; using Barotrauma.Extensions; +#if DEBUG +using System.IO; +#else +using Barotrauma.IO; +#endif namespace Barotrauma { @@ -196,8 +200,9 @@ namespace Barotrauma Stretch = true, UserData = "filterarea" }; - filterTexturesLabel = new GUITextBlock(new RectTransform(Vector2.One, filterArea.RectTransform), TextManager.Get("serverlog.filter"), font: GUI.Font) { IgnoreLayoutGroups = true }; ; + filterTexturesLabel = new GUITextBlock(new RectTransform(Vector2.One, filterArea.RectTransform), TextManager.Get("serverlog.filter"), font: GUI.Font, textAlignment: Alignment.CenterLeft) { IgnoreLayoutGroups = true }; ; filterTexturesBox = new GUITextBox(new RectTransform(new Vector2(0.8f, 1.0f), filterArea.RectTransform), font: GUI.Font, createClearButton: true); + filterArea.RectTransform.MinSize = filterTexturesBox.RectTransform.MinSize; filterTexturesBox.OnTextChanged += (textBox, text) => { FilterTextures(text); return true; }; textureList = new GUIListBox(new RectTransform(new Vector2(1.0f, 1.0f), paddedLeftPanel.RectTransform)) @@ -240,8 +245,9 @@ namespace Barotrauma Stretch = true, UserData = "filterarea" }; - filterSpritesLabel = new GUITextBlock(new RectTransform(Vector2.One, filterArea.RectTransform), TextManager.Get("serverlog.filter"), font: GUI.Font) { IgnoreLayoutGroups = true }; + filterSpritesLabel = new GUITextBlock(new RectTransform(Vector2.One, filterArea.RectTransform), TextManager.Get("serverlog.filter"), font: GUI.Font, textAlignment: Alignment.CenterLeft) { IgnoreLayoutGroups = true }; filterSpritesBox = new GUITextBox(new RectTransform(new Vector2(0.8f, 1.0f), filterArea.RectTransform), font: GUI.Font, createClearButton: true); + filterArea.RectTransform.MinSize = filterSpritesBox.RectTransform.MinSize; filterSpritesBox.OnTextChanged += (textBox, text) => { FilterSprites(text); return true; }; spriteList = new GUIListBox(new RectTransform(new Vector2(1.0f, 1.0f), paddedRightPanel.RectTransform)) @@ -413,7 +419,11 @@ namespace Barotrauma { string xmlPath = doc.ParseContentPathFromUri(); xmlPathText.Text += "\n" + xmlPath; +#if DEBUG doc.Save(xmlPath); +#else + doc.SaveSafe(xmlPath); +#endif } xmlPathText.TextColor = GUI.Style.Green; return true; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs index 5d66494e0..1833713a8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Graphics; using RestSharp; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -26,7 +26,7 @@ namespace Barotrauma //listbox that shows the files included in the item being created private GUIListBox createItemFileList; - private FileSystemWatcher createItemWatcher; + private System.IO.FileSystemWatcher createItemWatcher; private readonly List tabButtons = new List(); @@ -135,6 +135,8 @@ namespace Barotrauma } }; + CreateFilterBox(modsContainer, subscribedItemList); + modsPreviewFrame = new GUIFrame(new RectTransform(new Vector2(0.6f, 1.0f), tabs[(int)Tab.Mods].RectTransform, Anchor.TopRight), style: null); //------------------------------------------------------------------------------- @@ -163,6 +165,8 @@ namespace Barotrauma } }; + CreateFilterBox(listContainer, topItemList); + new GUIButton(new RectTransform(new Vector2(1.0f, 0.02f), listContainer.RectTransform), TextManager.Get("FindModsButton"), style: "GUIButtonSmall") { OnClicked = (btn, userdata) => @@ -235,6 +239,29 @@ namespace Barotrauma subscribedCoroutine = CoroutineManager.StartCoroutine(PollSubscribedItems()); } + private void CreateFilterBox(GUIComponent parent, GUIListBox listbox) + { + var filterContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.05f), parent.RectTransform), isHorizontal: true) + { + Stretch = true + }; + filterContainer.RectTransform.SetAsFirstChild(); + var searchTitle = new GUITextBlock(new RectTransform(new Vector2(0.001f, 1.0f), filterContainer.RectTransform), TextManager.Get("serverlog.filter"), textAlignment: Alignment.CenterLeft, font: GUI.Font); + var searchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 1.0f), filterContainer.RectTransform, Anchor.CenterRight), font: GUI.Font, createClearButton: true); + filterContainer.RectTransform.MinSize = searchBox.RectTransform.MinSize; + searchBox.OnSelected += (sender, userdata) => { searchTitle.Visible = false; }; + searchBox.OnDeselected += (sender, userdata) => { searchTitle.Visible = true; }; + searchBox.OnTextChanged += (textBox, text) => + { + foreach (GUIComponent child in listbox.Content.Children) + { + if (!(child.UserData is Steamworks.Ugc.Item item)) { continue; } + child.Visible = string.IsNullOrEmpty(text) ? true : (item.Title?.ToLower().Contains(text.ToLower()) ?? false); + } + return true; + }; + } + public override void Select() { base.Select(); @@ -414,6 +441,7 @@ namespace Barotrauma foreach (ContentPackage contentPackage in ContentPackage.List) { if (!string.IsNullOrEmpty(contentPackage.SteamWorkshopUrl) || contentPackage.HideInWorkshopMenu) { continue; } + if (contentPackage == GameMain.VanillaContent) { continue; } //don't list content packages that only define one sub (they're visible in the "Submarines" section) if (contentPackage.Files.Count == 1 && contentPackage.Files[0].Type == ContentType.Submarine) { continue; } CreateMyItemFrame(contentPackage, myItemList); @@ -582,14 +610,12 @@ namespace Barotrauma } else { - installed = SteamManager.EnableWorkShopItem(item, true, out string errorMsg, Screen.Selected == this); - + installed = SteamManager.EnableWorkShopItem(item, out string errorMsg, Selected == this); if (!installed) { - DebugConsole.ThrowError(errorMsg); - new GUIMessageBox( - TextManager.Get("Error"), - TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { TextManager.EnsureUTF8(item?.Title), errorMsg })); + DebugConsole.NewMessage(errorMsg, Color.Red); + titleText.TextColor = Color.Red; + titleText.ToolTip = itemFrame.ToolTip = TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { TextManager.EnsureUTF8(item?.Title), errorMsg }); } } } @@ -602,10 +628,9 @@ namespace Barotrauma { if (!SteamManager.UpdateWorkshopItem(item, out string errorMsg)) { - DebugConsole.ThrowError(errorMsg); - new GUIMessageBox( - TextManager.Get("Error"), - TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { TextManager.EnsureUTF8(item?.Title), errorMsg })); + DebugConsole.NewMessage(errorMsg, Color.Red); + titleText.TextColor = Color.Red; + titleText.ToolTip = itemFrame.ToolTip = TextManager.GetWithVariables("WorkshopItemUpdateFailed", new string[2] { "[itemname]", "[errormessage]" }, new string[2] { TextManager.EnsureUTF8(item?.Title), errorMsg }); } } } @@ -645,7 +670,7 @@ namespace Barotrauma { bool reselect = GameMain.Config.SelectedContentPackages.Any(cp => !string.IsNullOrWhiteSpace(cp.SteamWorkshopUrl) && cp.SteamWorkshopUrl == item?.Url); if (!SteamManager.DisableWorkShopItem(item, false, out string errorMsg) || - !SteamManager.EnableWorkShopItem(item, true, out errorMsg, reselect, true)) + !SteamManager.EnableWorkShopItem(item, out errorMsg, reselect, true)) { DebugConsole.ThrowError($"Failed to reinstall \"{item?.Title}\": {errorMsg}", null, true); elem.Flash(GUI.Style.Red); @@ -839,7 +864,7 @@ namespace Barotrauma item?.Download(onInstalled: () => { - if (SteamManager.EnableWorkShopItem(item, false, out _)) + if (SteamManager.EnableWorkShopItem(item, out _)) { textBlock.Text = TextManager.Get("workshopiteminstalled"); frame.Flash(GUI.Style.Green); @@ -1012,7 +1037,7 @@ namespace Barotrauma private void CreateWorkshopItem(SubmarineInfo sub) { - string destinationFolder = Path.Combine("Mods", sub.Name); + string destinationFolder = Path.Combine("Mods", sub.Name.Trim()); itemContentPackage = ContentPackage.CreatePackage(sub.Name, Path.Combine(destinationFolder, SteamManager.MetadataFileName), corePackage: false); SteamManager.CreateWorkshopItemStaging(itemContentPackage, out itemEditor); @@ -1040,7 +1065,7 @@ namespace Barotrauma string previewImagePath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(itemContentPackage.Path), SteamManager.PreviewImageName)); try { - using (Stream s = File.Create(previewImagePath)) + using (System.IO.Stream s = File.Create(previewImagePath)) { sub.PreviewImage.Texture.SaveAsPng(s, (int)sub.PreviewImage.size.X, (int)sub.PreviewImage.size.Y); itemEditor = itemEditor?.WithPreviewFile(previewImagePath); @@ -1292,10 +1317,10 @@ namespace Barotrauma }; createItemFileList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.35f), createItemContent.RectTransform)); createItemWatcher?.Dispose(); - createItemWatcher = new FileSystemWatcher(Path.GetDirectoryName(itemContentPackage.Path)) + createItemWatcher = new System.IO.FileSystemWatcher(Path.GetDirectoryName(itemContentPackage.Path)) { Filter = "*", - NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName + NotifyFilter = System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName }; createItemWatcher.Created += OnFileSystemChanges; createItemWatcher.Deleted += OnFileSystemChanges; @@ -1553,7 +1578,7 @@ namespace Barotrauma volatile bool refreshFileList = false; - private void OnFileSystemChanges(object sender, FileSystemEventArgs e) + private void OnFileSystemChanges(object sender, System.IO.FileSystemEventArgs e) { refreshFileList = true; } @@ -1566,14 +1591,26 @@ namespace Barotrauma List files = itemContentPackage.Files.ToList(); - foreach (ContentFile contentFile in files) + for (int i = files.Count - 1; i >= 0; i--) { + ContentFile contentFile = files[i]; + bool fileExists = File.Exists(contentFile.Path); - if (!fileExists) { itemContentPackage.Files.Remove(contentFile); continue; } + if (contentFile.Type == ContentType.Executable || + contentFile.Type == ContentType.ServerExecutable) + { + fileExists |= File.Exists(contentFile.Path + ".dll"); + } + + if (!fileExists) + { + itemContentPackage.Files.Remove(contentFile); + files.RemoveAt(i); + } } - List allFiles = Directory.GetFiles(Path.GetDirectoryName(itemContentPackage.Path), "*", SearchOption.AllDirectories) + List allFiles = Directory.GetFiles(Path.GetDirectoryName(itemContentPackage.Path), "*", System.IO.SearchOption.AllDirectories) .Select(f => new ContentFile(f, ContentType.None)) .Where(file => Path.GetFileName(file.Path) != SteamManager.MetadataFileName && Path.GetFileName(file.Path) != SteamManager.PreviewImageName) @@ -1581,22 +1618,31 @@ namespace Barotrauma for (int i=0;i string.Equals(Path.GetFullPath(f.Path).CleanUpPath(), - Path.GetFullPath(file.Path).CleanUpPath(), - StringComparison.InvariantCultureIgnoreCase)); + ContentFile otherFile = files.Find(f => string.Equals(Path.GetFullPath(f.Path).CleanUpPath(), + Path.GetFullPath(file.Path).CleanUpPath(), + StringComparison.InvariantCultureIgnoreCase)); if (otherFile != null) { //replace the generated ContentFile object with the one that's present in the //content package to determine which tickboxes should already be checked allFiles[i] = otherFile; + files.Remove(otherFile); } } + allFiles.AddRange(files); + foreach (ContentFile contentFile in allFiles) { bool illegalPath = !ContentPackage.IsModFilePathAllowed(contentFile); bool fileExists = File.Exists(contentFile.Path); + if (contentFile.Type == ContentType.Executable || + contentFile.Type == ContentType.ServerExecutable) + { + fileExists |= File.Exists(contentFile.Path + ".dll"); + } + var fileFrame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.12f), createItemFileList.Content.RectTransform) { MinSize = new Point(0, 20) }, style: "ListBoxElement") { @@ -1664,36 +1710,39 @@ namespace Barotrauma return true; }; - new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), content.RectTransform), TextManager.Get("Delete"), style: "GUIButtonSmall") + if (!files.Contains(contentFile)) //this prevents deletion of files not contained in the mod's path (i.e. vanilla content) { - OnClicked = (btn, userdata) => + new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), content.RectTransform), TextManager.Get("Delete"), style: "GUIButtonSmall") { - var msgBox = new GUIMessageBox(TextManager.Get("ConfirmFileDeletionHeader"), - TextManager.GetWithVariable("ConfirmFileDeletion", "[file]", contentFile.Path), - new string[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }) + OnClicked = (btn, userdata) => { - UserData = "verificationprompt" - }; - msgBox.Buttons[0].OnClicked = (applyButton, obj) => - { - try + var msgBox = new GUIMessageBox(TextManager.Get("ConfirmFileDeletionHeader"), + TextManager.GetWithVariable("ConfirmFileDeletion", "[file]", contentFile.Path), + new string[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }) { - File.Delete(contentFile.Path); - if (contentFile.Type == ContentType.Submarine) { SubmarineInfo.RefreshSavedSub(contentFile.Path); } - } - catch (Exception e) + UserData = "verificationprompt" + }; + msgBox.Buttons[0].OnClicked = (applyButton, obj) => { - DebugConsole.ThrowError($"Failed to delete \"${contentFile.Path}\".", e); - } - //RefreshCreateItemFileList(); - RefreshMyItemList(); + try + { + File.Delete(contentFile.Path); + if (contentFile.Type == ContentType.Submarine) { SubmarineInfo.RefreshSavedSub(contentFile.Path); } + } + catch (Exception e) + { + DebugConsole.ThrowError($"Failed to delete \"${contentFile.Path}\".", e); + } + //RefreshCreateItemFileList(); + RefreshMyItemList(); + return true; + }; + msgBox.Buttons[0].OnClicked += msgBox.Close; + msgBox.Buttons[1].OnClicked = msgBox.Close; return true; - }; - msgBox.Buttons[0].OnClicked += msgBox.Close; - msgBox.Buttons[1].OnClicked = msgBox.Close; - return true; - } - }; + } + }; + } content.Recalculate(); fileFrame.RectTransform.MinSize = diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs index 7de1726b2..38bc27a7a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs @@ -4,17 +4,23 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; -using System.IO; using System.Linq; +using System.Threading; using System.Xml.Linq; -using EventInput; using Microsoft.Xna.Framework.Input; +#if DEBUG +using System.IO; +#else +using Barotrauma.IO; +#endif + +// ReSharper disable AccessToModifiedClosure, PossibleLossOfFraction, RedundantLambdaParameterType, UnusedVariable namespace Barotrauma { class SubEditorScreen : Screen { - private static readonly string[] crewExperienceLevels = new string[] + private static readonly string[] crewExperienceLevels = { "CrewExperienceLow", "CrewExperienceMid", @@ -24,13 +30,15 @@ namespace Barotrauma public enum Mode { Default, - Character, Wiring } + + public static Vector2 MouseDragStart = Vector2.Zero; private readonly Point defaultPreviewImageSize = new Point(640, 368); private readonly Camera cam; + private Vector2 camTargetFocus = Vector2.Zero; private SubmarineInfo backedUpSubInfo; @@ -38,12 +46,16 @@ namespace Barotrauma private bool lightingEnabled; + private bool wasSelectedBefore; + public GUIComponent TopPanel; private GUIComponent showEntitiesPanel, entityCountPanel; - private List showEntitiesTickBoxes = new List(); + private readonly List showEntitiesTickBoxes = new List(); private GUITextBlock subNameLabel; + public bool ShowThalamus { get; private set; } = true; + private bool entityMenuOpen = true; private float entityMenuOpenState = 1.0f; public GUIComponent EntityMenu; @@ -51,7 +63,9 @@ namespace Barotrauma private GUIListBox entityList; private GUIButton toggleEntityMenuButton; - private GUITickBox defaultModeTickBox, wiringModeTickBox, characterModeTickBox; + public GUIButton ToggleEntityMenuButton => toggleEntityMenuButton; + + private GUITickBox defaultModeTickBox, wiringModeTickBox; private GUIComponent loadFrame, saveFrame; @@ -74,12 +88,28 @@ namespace Barotrauma //a Character used for picking up and manipulating items private Character dummyCharacter; + + /// + /// Prefab used for dragging from the item catalog into inventories + /// + /// + public static MapEntityPrefab DraggedItemPrefab; + + /// + /// Currently opened hand-held item container like crates + /// + private Item OpenedItem; + + /// + /// When opening an item we save the location of it so we can teleport the dummy character there + /// + private Vector2 oldItemPosition; private GUIFrame wiringToolPanel; private DateTime editorSelectedTime; - private readonly string containerDeleteTag = "containerdelete"; + private const string containerDeleteTag = "containerdelete"; private GUIImage previewImage; @@ -92,28 +122,29 @@ namespace Barotrauma private GUITextBlock submarineDescriptionCharacterCount; private Mode mode; + + private Color backgroundColor = GameSettings.SubEditorBackgroundColor; // Prevent the mode from changing private bool lockMode; - public override Camera Cam - { - get { return cam; } - } + private static bool isAutoSaving; - public string GetSubDescription() + public override Camera Cam => cam; + + private static string GetSubDescription() { string localizedDescription = TextManager.Get("submarine.description." + (Submarine.MainSub?.Info.Name ?? ""), true); if (localizedDescription != null) { return localizedDescription; } return (Submarine.MainSub == null) ? "" : Submarine.MainSub.Info.Description; } - private string GetTotalHullVolume() + private static string GetTotalHullVolume() { return TextManager.Get("TotalHullVolume") + ":\n" + Hull.hullList.Sum(h => h.Volume); } - private string GetSelectedHullVolume() + private static string GetSelectedHullVolume() { float buoyancyVol = 0.0f; float selectedVol = 0.0f; @@ -142,9 +173,7 @@ namespace Barotrauma return retVal; } - public bool CharacterMode { get { return mode == Mode.Character; } } - - public bool WiringMode { get { return mode == Mode.Wiring; } } + public bool WiringMode => mode == Mode.Wiring; public SubEditorScreen() { @@ -158,7 +187,7 @@ namespace Barotrauma private void CreateUI() { - TopPanel = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.01f), GUI.Canvas) { MinSize = new Point(0, 35) }, "GUIFrameTop"); + TopPanel = new GUIFrame(new RectTransform(new Vector2(GUI.Canvas.RelativeSize.X, 0.01f), GUI.Canvas) { MinSize = new Point(0, 35) }, "GUIFrameTop"); GUILayoutGroup paddedTopPanel = new GUILayoutGroup(new RectTransform(new Vector2(0.98f, 0.8f), TopPanel.RectTransform, Anchor.Center), isHorizontal: true, childAnchor: Anchor.CenterLeft) @@ -171,7 +200,7 @@ namespace Barotrauma ToolTip = TextManager.Get("back"), OnClicked = (b, d) => { - var msgBox = new GUIMessageBox("", TextManager.Get("PauseMenuQuitVerificationEditor"), new string[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }) + var msgBox = new GUIMessageBox("", TextManager.Get("PauseMenuQuitVerificationEditor"), new[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }) { UserData = "verificationprompt" }; @@ -196,7 +225,7 @@ namespace Barotrauma new GUIButton(new RectTransform(new Vector2(0.9f, 0.9f), paddedTopPanel.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "OpenButton") { ToolTip = TextManager.Get("OpenSubButton"), - OnClicked = (GUIButton btn, object data) => + OnClicked = (btn, data) => { saveFrame = null; CreateLoadScreen(); @@ -209,8 +238,8 @@ namespace Barotrauma new GUIButton(new RectTransform(new Vector2(0.9f, 0.9f), paddedTopPanel.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "SaveButton") { - ToolTip = TextManager.Get("SaveSubButton"), - OnClicked = (GUIButton btn, object data) => + ToolTip = TextManager.Get("SaveSubButton") + "‖color:125,125,125‖\nCtrl + S‖color:end‖", + OnClicked = (btn, data) => { loadFrame = null; CreateSaveScreen(); @@ -279,8 +308,8 @@ namespace Barotrauma defaultModeTickBox = new GUITickBox(new RectTransform(new Vector2(0.9f, 0.9f), paddedTopPanel.RectTransform, scaleBasis: ScaleBasis.BothHeight), "", style: "EditSubButton") { - ToolTip = TextManager.Get("SubEditorEditingMode"), - OnSelected = (GUITickBox tBox) => + ToolTip = TextManager.Get("SubEditorEditingMode") + "‖color:125,125,125‖\nCtrl + 1‖color:end‖", + OnSelected = tBox => { if (!lockMode) { @@ -288,35 +317,23 @@ namespace Barotrauma return true; } - else { return false; } - } - }; - characterModeTickBox = new GUITickBox(new RectTransform(new Vector2(0.9f, 0.9f), paddedTopPanel.RectTransform, scaleBasis: ScaleBasis.BothHeight), "", style: "CharacterModeButton") - { - ToolTip = TextManager.Get("CharacterModeButton") + '\n' + TextManager.Get("CharacterModeToolTip"), - OnSelected = (GUITickBox tBox) => - { - if (!lockMode) - { - SetMode(tBox.Selected ? Mode.Character : Mode.Default); - return true; - } - else { return false; } + return false; } }; wiringModeTickBox = new GUITickBox(new RectTransform(new Vector2(0.9f, 0.9f), paddedTopPanel.RectTransform, scaleBasis: ScaleBasis.BothHeight), "", style: "WiringModeButton") { - ToolTip = TextManager.Get("WiringModeButton") + '\n' + TextManager.Get("WiringModeToolTip"), - OnSelected = (GUITickBox tBox) => + ToolTip = TextManager.Get("WiringModeButton") + '\n' + TextManager.Get("WiringModeToolTip") + "‖color:125,125,125‖\nCtrl + 2‖color:end‖", + OnSelected = tBox => { if (!lockMode) { SetMode(tBox.Selected ? Mode.Wiring : Mode.Default); return true; } - else { return false; } + + return false; } }; @@ -330,8 +347,8 @@ namespace Barotrauma { if (WayPoint.WayPointList.Any()) { - var generateWaypointsVerification = new GUIMessageBox("", TextManager.Get("generatewaypointsverification"), new string[] { TextManager.Get("ok"), TextManager.Get("cancel") }); - generateWaypointsVerification.Buttons[0].OnClicked = (btn, userdata) => + var generateWaypointsVerification = new GUIMessageBox("", TextManager.Get("generatewaypointsverification"), new[] { TextManager.Get("ok"), TextManager.Get("cancel") }); + generateWaypointsVerification.Buttons[0].OnClicked = delegate { if (GenerateWaypoints()) { @@ -368,7 +385,7 @@ namespace Barotrauma //----------------------------------------------- - previouslyUsedPanel = new GUIFrame(new RectTransform(new Vector2(0.1f, 0.2f), GUI.Canvas, Anchor.TopLeft) { MinSize = new Point(200, 200) }) + previouslyUsedPanel = new GUIFrame(new RectTransform(new Vector2(0.1f, 0.2f), GUI.Canvas) { MinSize = new Point(200, 200) }) { Visible = false }; @@ -464,6 +481,12 @@ namespace Barotrauma Selected = Gap.ShowGaps, OnSelected = (GUITickBox obj) => { Gap.ShowGaps = obj.Selected; return true; }, }; + new GUITickBox(new RectTransform(new Vector2(1.0f, 0.1f), paddedShowEntitiesPanel.RectTransform), TextManager.Get("mapentitycategory.thalamus")) + { + UserData = "thalamus", + Selected = ShowThalamus, + OnSelected = (GUITickBox obj) => { ShowThalamus = obj.Selected; return true; }, + }; showEntitiesTickBoxes.AddRange(paddedShowEntitiesPanel.Children.Select(c => c as GUITickBox)); @@ -548,7 +571,7 @@ namespace Barotrauma }; entityCountPanel.RectTransform.NonScaledSize = new Point( - (int)(paddedEntityCountPanel.RectTransform.Children.Max(c => (int)(c.GUIComponent as GUITextBlock).TextSize.X / 0.75f) / paddedEntityCountPanel.RectTransform.RelativeSize.X), + (int)(paddedEntityCountPanel.RectTransform.Children.Max(c => (int)((GUITextBlock) c.GUIComponent).TextSize.X / 0.75f) / paddedEntityCountPanel.RectTransform.RelativeSize.X), (int)(paddedEntityCountPanel.RectTransform.Children.Sum(c => (int)(c.NonScaledSize.Y * 1.5f) + paddedEntityCountPanel.AbsoluteSpacing) / paddedEntityCountPanel.RectTransform.RelativeSize.Y)); //GUITextBlock.AutoScaleAndNormalize(paddedEntityCountPanel.Children.Where(c => c is GUITextBlock).Cast()); @@ -590,6 +613,7 @@ namespace Barotrauma toggleEntityMenuButton = new GUIButton(new RectTransform(new Vector2(0.15f, 0.08f), EntityMenu.RectTransform, Anchor.TopCenter, Pivot.BottomCenter) { MinSize = new Point(0, 15) }, style: "UIToggleButtonVertical") { + ToolTip = TextManager.Get("EntityMenuToggleTooltip") + "‖color:125,125,125‖\nQ‖color:end‖", OnClicked = (btn, userdata) => { entityMenuOpen = !entityMenuOpen; @@ -633,7 +657,6 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { - if (!string.IsNullOrEmpty(entityFilterBox.Text)) { ClearFilter(); } OpenEntityMenu(null); return true; } @@ -648,7 +671,6 @@ namespace Barotrauma ToolTip = TextManager.Get("MapEntityCategory." + category.ToString()), OnClicked = (btn, userdata) => { - if (!string.IsNullOrEmpty(entityFilterBox.Text)) { ClearFilter(); } MapEntityCategory newCategory = (MapEntityCategory)userdata; OpenEntityMenu(newCategory); return true; @@ -659,7 +681,7 @@ namespace Barotrauma new GUIFrame(new RectTransform(new Vector2(0.8f, 0.01f), paddedTab.RectTransform), style: "HorizontalLine"); - entityList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.9f), paddedTab.RectTransform)) + entityList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.9f), paddedTab.RectTransform), useMouseDownToSelect: true) { OnSelected = SelectPrefab, UseGridLayout = true, @@ -729,10 +751,15 @@ namespace Barotrauma frame.RectTransform.MinSize = new Point(0, frame.Rect.Width); frame.RectTransform.MaxSize = new Point(int.MaxValue, frame.Rect.Width); - - string name = legacy ? ep.Name + " (legacy)" : ep.Name; + string name = legacy ? TextManager.GetWithVariable("legacyitemformat", "[name]", ep.Name) : ep.Name; frame.ToolTip = string.IsNullOrEmpty(ep.Description) ? name : name + '\n' + ep.Description; + if (ep.HideInMenus) + { + frame.Color = Color.Red; + name = "[HIDDEN] " + name; + } + GUILayoutGroup paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 0.8f), frame.RectTransform, Anchor.Center), childAnchor: Anchor.TopCenter) { Stretch = true, @@ -760,7 +787,8 @@ namespace Barotrauma img = new GUIImage(new RectTransform(new Vector2(1.0f, 0.8f), paddedFrame.RectTransform, Anchor.TopCenter), icon) { - CanBeFocused = false, + CanBeFocused = false, + LoadAsynchronously = true, Color = legacy ? iconColor * 0.6f : iconColor }; } @@ -768,7 +796,11 @@ namespace Barotrauma if (ep is ItemAssemblyPrefab itemAssemblyPrefab) { new GUICustomComponent(new RectTransform(new Vector2(1.0f, 0.75f), - paddedFrame.RectTransform, Anchor.TopCenter), onDraw: itemAssemblyPrefab.DrawIcon, onUpdate: null) + paddedFrame.RectTransform, Anchor.TopCenter), onDraw: (sb, customComponent) => + { + if (GUIImage.LoadingTextures) { return; } + itemAssemblyPrefab.DrawIcon(sb, customComponent); + }) { HideElementsOutsideFrame = true, ToolTip = frame.RawToolTip @@ -776,7 +808,7 @@ namespace Barotrauma } GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), paddedFrame.RectTransform, Anchor.BottomCenter), - text: ep.Name, textAlignment: Alignment.Center, font: GUI.SmallFont) + text: name, textAlignment: Alignment.Center, font: GUI.SmallFont) { CanBeFocused = false }; @@ -791,27 +823,30 @@ namespace Barotrauma UserData = ep, OnClicked = (btn, userData) => { - ItemAssemblyPrefab assemblyPrefab = userData as ItemAssemblyPrefab; - var msgBox = new GUIMessageBox( - TextManager.Get("DeleteDialogLabel"), - TextManager.GetWithVariable("DeleteDialogQuestion", "[file]", assemblyPrefab.Name), - new string[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }); - msgBox.Buttons[0].OnClicked += (deleteBtn, userData2) => - { - try + ItemAssemblyPrefab assemblyPrefab = (ItemAssemblyPrefab) userData; + if (assemblyPrefab != null) { + var msgBox = new GUIMessageBox( + TextManager.Get("DeleteDialogLabel"), + TextManager.GetWithVariable("DeleteDialogQuestion", "[file]", assemblyPrefab.Name), + new[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }); + msgBox.Buttons[0].OnClicked += (deleteBtn, userData2) => { - assemblyPrefab.Delete(); - UpdateEntityList(); - OpenEntityMenu(MapEntityCategory.ItemAssembly); - } - catch (Exception e) - { - DebugConsole.ThrowError(TextManager.GetWithVariable("DeleteFileError", "[file]", assemblyPrefab.Name), e); - } - return true; - }; - msgBox.Buttons[0].OnClicked += msgBox.Close; - msgBox.Buttons[1].OnClicked += msgBox.Close; + try + { + assemblyPrefab.Delete(); + UpdateEntityList(); + OpenEntityMenu(MapEntityCategory.ItemAssembly); + } + catch (Exception e) + { + DebugConsole.ThrowError(TextManager.GetWithVariable("DeleteFileError", "[file]", assemblyPrefab.Name), e); + } + return true; + }; + msgBox.Buttons[0].OnClicked += msgBox.Close; + msgBox.Buttons[1].OnClicked += msgBox.Close; + } + return true; } }; @@ -824,8 +859,8 @@ namespace Barotrauma } } - entityList.Content.RectTransform.SortChildren((i1, i2) => - (i1.GUIComponent.UserData as MapEntityPrefab).Name.CompareTo((i2.GUIComponent.UserData as MapEntityPrefab).Name)); + entityList.Content.RectTransform.SortChildren((i1, i2) => + string.Compare(((MapEntityPrefab) i1.GUIComponent.UserData). Name, (i2.GUIComponent.UserData as MapEntityPrefab)?.Name, StringComparison.Ordinal)); } public override void Select() @@ -835,10 +870,17 @@ namespace Barotrauma GameMain.LightManager.AmbientLight = Level.Loaded?.GenerationParams?.AmbientLightColor ?? LevelGenerationParams.LevelParams?.FirstOrDefault()?.AmbientLightColor ?? - new Color(20, 20, 20, 255); + new Color(20, 20, 20, 255); UpdateEntityList(); + isAutoSaving = false; + if (!wasSelectedBefore) + { + OpenEntityMenu(null); + wasSelectedBefore = true; + } + if (backedUpSubInfo != null) { Submarine.Unload(); @@ -848,15 +890,6 @@ namespace Barotrauma if (backedUpSubInfo != null) { name = backedUpSubInfo.Name; } subNameLabel.Text = ToolBox.LimitString(name, subNameLabel.Font, subNameLabel.Rect.Width); - foreach (MapEntityPrefab prefab in MapEntityPrefab.List) - { - prefab.sprite?.EnsureLazyLoaded(); - if (prefab is ItemPrefab itemPrefab) - { - itemPrefab.InventoryIcon?.EnsureLazyLoaded(); - } - } - editorSelectedTime = DateTime.Now; GUI.ForceMouseOn(null); @@ -877,8 +910,8 @@ namespace Barotrauma Submarine.MainSub.UpdateTransform(interpolate: false); cam.Position = Submarine.MainSub.Position + Submarine.MainSub.HiddenSubPosition; - GameMain.SoundManager.SetCategoryGainMultiplier("default", 0.0f, 0); - GameMain.SoundManager.SetCategoryGainMultiplier("waterambience", 0.0f, 0); + GameMain.SoundManager.SetCategoryGainMultiplier("default", 0.0f); + GameMain.SoundManager.SetCategoryGainMultiplier("waterambience", 0.0f); linkedSubBox.ClearChildren(); foreach (SubmarineInfo sub in SubmarineInfo.SavedSubmarines) @@ -888,6 +921,13 @@ namespace Barotrauma cam.UpdateTransform(); + CreateDummyCharacter(); + + if (GameSettings.EnableSubmarineAutoSave) + { + CoroutineManager.StartCoroutine(AutoSaveCoroutine(), "SubEditorAutoSave"); + } + GameAnalyticsManager.SetCustomDimension01("editor"); if (!GameMain.Config.EditorDisclaimerShown) { @@ -895,6 +935,43 @@ namespace Barotrauma } } + /// + /// Coroutine that waits 5 minutes and then runs itself recursively again to save the submarine into a temporary file + /// + /// + /// + private static IEnumerable AutoSaveCoroutine() + { + DateTime target = DateTime.Now.AddMinutes(5); + DateTime tempTarget = DateTime.Now; + + bool wasPaused = false; + + while (DateTime.Now < target && Selected is SubEditorScreen || GameMain.Instance.Paused || wasPaused) + { + if (GameMain.Instance.Paused && !wasPaused) + { + AutoSave(); + tempTarget = DateTime.Now; + wasPaused = true; + } + + if (!GameMain.Instance.Paused && wasPaused) + { + wasPaused = false; + target = target.AddSeconds((DateTime.Now - tempTarget).TotalSeconds); + } + yield return CoroutineStatus.Running; + } + + if (Selected is SubEditorScreen) + { + AutoSave(); + CoroutineManager.StartCoroutine(AutoSaveCoroutine(), "SubEditorAutoSave"); + } + yield return CoroutineStatus.Success; + } + public override void Deselect() { base.Deselect(); @@ -917,8 +994,13 @@ namespace Barotrauma SetMode(Mode.Default); SoundPlayer.OverrideMusicType = null; - GameMain.SoundManager.SetCategoryGainMultiplier("default", GameMain.Config.SoundVolume, 0); - GameMain.SoundManager.SetCategoryGainMultiplier("waterambience", GameMain.Config.SoundVolume, 0); + GameMain.SoundManager.SetCategoryGainMultiplier("default", GameMain.Config.SoundVolume); + GameMain.SoundManager.SetCategoryGainMultiplier("waterambience", GameMain.Config.SoundVolume); + + if (CoroutineManager.IsCoroutineRunning("SubEditorAutoSave")) + { + CoroutineManager.StopCoroutines("SubEditorAutoSave"); + } if (dummyCharacter != null) { @@ -927,13 +1009,13 @@ namespace Barotrauma GameMain.World.ProcessChanges(); } - if (GUIMessageBox.MessageBoxes.Any(mbox => (mbox as GUIMessageBox).Tag == containerDeleteTag)) + if (GUIMessageBox.MessageBoxes.Any(mbox => (mbox as GUIMessageBox)?.Tag == containerDeleteTag)) { for (int i = 0; i < GUIMessageBox.MessageBoxes.Count; i++) { GUIMessageBox box = GUIMessageBox.MessageBoxes[i] as GUIMessageBox; - if (box.Tag != containerDeleteTag) continue; - box.Close(); + if (box != null && box.Tag != containerDeleteTag) continue; + box?.Close(); i--; // Take into account the message boxes removing themselves from the list when closed } } @@ -953,9 +1035,9 @@ namespace Barotrauma if (itemNames.Length > 0) { // Multiple prompts open - if (GUIMessageBox.MessageBoxes.Any(mbox => (mbox as GUIMessageBox).Tag == containerDeleteTag)) + if (GUIMessageBox.MessageBoxes.Any(mbox => (mbox as GUIMessageBox)?.Tag == containerDeleteTag)) { - var msgBox = new GUIMessageBox(itemToDelete.Name, TextManager.Get("DeletingContainerWithItems") + itemNames, new string[] { TextManager.Get("Yes"), TextManager.Get("No"), TextManager.Get("YesToAll"), TextManager.Get("NoToAll") }, tag: containerDeleteTag); + var msgBox = new GUIMessageBox(itemToDelete.Name, TextManager.Get("DeletingContainerWithItems") + itemNames, new[] { TextManager.Get("Yes"), TextManager.Get("No"), TextManager.Get("YesToAll"), TextManager.Get("NoToAll") }, tag: containerDeleteTag); // Yes msgBox.Buttons[0].OnClicked = (btn, userdata) => @@ -990,9 +1072,9 @@ namespace Barotrauma for (int i = 0; i < GUIMessageBox.MessageBoxes.Count; i++) { GUIMessageBox box = GUIMessageBox.MessageBoxes[i] as GUIMessageBox; - if (box.Tag != msgBox.Tag || box == msgBox) continue; - GUIButton button = box.Buttons[0]; - button.OnClicked(button, button.UserData); + if (box?.Tag != msgBox.Tag || box == msgBox) continue; + GUIButton button = box?.Buttons[0]; + button?.OnClicked(button, button.UserData); i--; // Take into account the message boxes removing themselves from the list when closed } @@ -1007,9 +1089,9 @@ namespace Barotrauma for (int i = 0; i < GUIMessageBox.MessageBoxes.Count; i++) { GUIMessageBox box = GUIMessageBox.MessageBoxes[i] as GUIMessageBox; - if (box.Tag != msgBox.Tag || box == msgBox) continue; - GUIButton button = box.Buttons[1]; - button.OnClicked(button, button.UserData); + if (box?.Tag != msgBox.Tag || box == msgBox) continue; + GUIButton button = box?.Buttons[1]; + button?.OnClicked(button, button.UserData); i--; // Take into account the message boxes removing themselves from the list when closed } @@ -1031,7 +1113,7 @@ namespace Barotrauma } else // Single prompt { - var msgBox = new GUIMessageBox(itemToDelete.Name, TextManager.Get("DeletingContainerWithItems") + itemNames, new string[] { TextManager.Get("Yes"), TextManager.Get("No") }, tag: containerDeleteTag); + var msgBox = new GUIMessageBox(itemToDelete.Name, TextManager.Get("DeletingContainerWithItems") + itemNames, new[] { TextManager.Get("Yes"), TextManager.Get("No") }, tag: containerDeleteTag); // Yes msgBox.Buttons[0].OnClicked = (btn, userdata) => @@ -1084,6 +1166,46 @@ namespace Barotrauma GameMain.World.ProcessChanges(); } + /// + /// Saves the current main sub into a temporary file outside of the Submarines/ folder + /// + /// + /// The saving is ran in another thread to avoid lag spikes + private static void AutoSave() + { + if (MapEntity.mapEntityList.Any() && GameSettings.EnableSubmarineAutoSave && !isAutoSaving) + { + if (Submarine.MainSub != null) + { + isAutoSaving = true; + string filePath = Path.Combine(SubmarineInfo.SavePath, ".AutoSaves"); + if (!Directory.Exists(filePath)) + { + var e = Directory.CreateDirectory(filePath); + e.Attributes = System.IO.FileAttributes.Directory | System.IO.FileAttributes.Hidden; + if (!e.Exists) { return; } + } + + XDocument doc = new XDocument(new XElement("Submarine")); + Submarine.MainSub.SaveToXElement(doc.Root); + Thread saveThread = new Thread(start => + { + try + { + SaveUtil.CompressStringToFile(Path.Combine(filePath, "AutoSave.sub"), doc.ToString()); + CrossThread.RequestExecutionOnMainThread(() => GUI.AddMessage(TextManager.Get("AutoSaved"), GUI.Style.Green, playSound: false)); + } + catch (Exception e) + { + CrossThread.RequestExecutionOnMainThread(() => DebugConsole.ThrowError("Saving submarine \"" + filePath + "\" failed!", e)); + } + isAutoSaving = false; + }) { Name = "Auto Save Thread" }; + saveThread.Start(); + } + } + } + private bool SaveSub(GUIButton button, object obj) { if (string.IsNullOrWhiteSpace(nameBox.Text)) @@ -1111,14 +1233,35 @@ namespace Barotrauma GUI.AddMessage(TextManager.GetWithVariable("SubNameIllegalCharsWarning", "[illegalchar]", illegalChar.ToString()), GUI.Style.Red); return false; } - + + Submarine.MainSub.Info.Name = name; + string savePath = name + ".sub"; string prevSavePath = null; if (!string.IsNullOrEmpty(Submarine.MainSub?.Info.FilePath) && Submarine.MainSub.Info.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)) { prevSavePath = Submarine.MainSub.Info.FilePath.CleanUpPath(); - savePath = Path.Combine(Path.GetDirectoryName(Submarine.MainSub.Info.FilePath), savePath).CleanUpPath(); + string prevDir = Path.GetDirectoryName(Submarine.MainSub.Info.FilePath).CleanUpPath(); + string[] subDirs = prevDir.Split('/'); + bool forceToSubFolder = Steam.SteamManager.IsInitialized; + if (forceToSubFolder && subDirs.Length>1 && subDirs[0].Equals("Mods", StringComparison.InvariantCultureIgnoreCase)) + { + string modName = subDirs[1]; + ContentPackage contentPackage = ContentPackage.List.Find(p => p.Name.Equals(modName, StringComparison.InvariantCultureIgnoreCase)); + if (contentPackage != null) + { + Steamworks.Data.PublishedFileId packageId = Steam.SteamManager.GetWorkshopItemIDFromUrl(contentPackage.SteamWorkshopUrl); + Steamworks.Ugc.Item? item = Steamworks.Ugc.Item.GetAsync(packageId).Result; + if (item?.Owner.Id == Steam.SteamManager.GetSteamID()) + { + forceToSubFolder = false; + contentPackage.Files.Add(new ContentFile(Path.Combine(prevDir, savePath).CleanUpPath(), ContentType.Submarine)); + contentPackage.Save(contentPackage.Path); + } + } + } + savePath = Path.Combine(forceToSubFolder ? SubmarineInfo.SavePath : prevDir, savePath).CleanUpPath(); } else { @@ -1139,47 +1282,61 @@ namespace Barotrauma } #endif - if (previewImage?.Sprite?.Texture != null) + if (Submarine.MainSub != null) { - using (MemoryStream imgStream = new MemoryStream()) + if (previewImage?.Sprite?.Texture != null) { - previewImage.Sprite.Texture.SaveAsPng(imgStream, previewImage.Sprite.Texture.Width, previewImage.Sprite.Texture.Height); - Submarine.MainSub.SaveAs(savePath, imgStream); + bool savePreviewImage = true; + using System.IO.MemoryStream imgStream = new System.IO.MemoryStream(); + try + { + previewImage.Sprite.Texture.SaveAsPng(imgStream, previewImage.Sprite.Texture.Width, previewImage.Sprite.Texture.Height); + } + catch (Exception e) + { + DebugConsole.ThrowError($"Saving the preview image of the submarine \"{Submarine.MainSub.Info.Name}\" failed.", e); + savePreviewImage = false; + } + Submarine.MainSub.SaveAs(savePath, savePreviewImage ? imgStream : null); } - } - else - { - Submarine.MainSub.SaveAs(savePath); - } - Submarine.MainSub?.CheckForErrors(); - - GUI.AddMessage(TextManager.GetWithVariable("SubSavedNotification", "[filepath]", savePath), GUI.Style.Green); - SubmarineInfo.RefreshSavedSub(savePath); - if (prevSavePath != null && prevSavePath != savePath) - { - SubmarineInfo.RefreshSavedSub(prevSavePath); - } + else + { + Submarine.MainSub.SaveAs(savePath); + } + + Submarine.MainSub.CheckForErrors(); + + GUI.AddMessage(TextManager.GetWithVariable("SubSavedNotification", "[filepath]", savePath), GUI.Style.Green); - linkedSubBox.ClearChildren(); - foreach (SubmarineInfo sub in SubmarineInfo.SavedSubmarines) - { - linkedSubBox.AddItem(sub.Name, sub); - } + SubmarineInfo.RefreshSavedSub(savePath); + if (prevSavePath != null && prevSavePath != savePath) { SubmarineInfo.RefreshSavedSub(prevSavePath); } - subNameLabel.Text = ToolBox.LimitString(Submarine.MainSub.Info.Name, subNameLabel.Font, subNameLabel.Rect.Width); + linkedSubBox.ClearChildren(); + foreach (SubmarineInfo sub in SubmarineInfo.SavedSubmarines) { linkedSubBox.AddItem(sub.Name, sub); } + + subNameLabel.Text = ToolBox.LimitString(Submarine.MainSub.Info.Name, subNameLabel.Font, subNameLabel.Rect.Width); + } return false; } - private void CreateSaveScreen() + private void CreateSaveScreen(bool quickSave = false) { - SetMode(Mode.Default); + if (saveFrame != null) { return; } + + if (!quickSave) + { + CloseItem(); + SetMode(Mode.Default); + } - saveFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker") + saveFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null) { OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) saveFrame = null; return true; } }; + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, saveFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.4f, 0.5f), saveFrame.RectTransform, Anchor.Center) { MinSize = new Point(750, 400) }); var paddedSaveFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.9f), innerFrame.RectTransform, Anchor.Center)) { Stretch = true, RelativeSpacing = 0.02f }; @@ -1342,10 +1499,10 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { - using (MemoryStream imgStream = new MemoryStream()) + using (System.IO.MemoryStream imgStream = new System.IO.MemoryStream()) { CreateImage(defaultPreviewImageSize.X, defaultPreviewImageSize.Y, imgStream); - previewImage.Sprite = new Sprite(TextureLoader.FromStream(imgStream), null, null); + previewImage.Sprite = new Sprite(TextureLoader.FromStream(imgStream, compress: false), null, null); if (Submarine.MainSub != null) { Submarine.MainSub.Info.PreviewImage = previewImage.Sprite; @@ -1400,7 +1557,7 @@ namespace Barotrauma var tagTickBox = new GUITickBox(new RectTransform(new Vector2(0.2f, 0.2f), tagContainer.Content.RectTransform), tagStr, font: GUI.SmallFont) { - Selected = Submarine.MainSub == null ? false : Submarine.MainSub.Info.HasTag(tag), + Selected = Submarine.MainSub != null && Submarine.MainSub.Info.HasTag(tag), UserData = tag, OnSelected = (GUITickBox tickBox) => @@ -1425,34 +1582,36 @@ namespace Barotrauma var contentPackList = new GUIListBox(new RectTransform(new Vector2(0.5f, 1.0f - contentPackagesLabel.RectTransform.RelativeSize.Y), horizontalArea.RectTransform, Anchor.BottomRight)); - List contentPacks = Submarine.MainSub.Info.RequiredContentPackages.ToList(); - foreach (ContentPackage contentPack in ContentPackage.List) - { - //don't show content packages that only define submarine files - //(it doesn't make sense to require another sub to be installed to install this one) - if (contentPack.Files.All(cp => cp.Type == ContentType.Submarine)) { continue; } - if (!contentPacks.Contains(contentPack.Name)) { contentPacks.Add(contentPack.Name); } - } + if (Submarine.MainSub != null) { + List contentPacks = Submarine.MainSub.Info.RequiredContentPackages.ToList(); + foreach (ContentPackage contentPack in ContentPackage.List) + { + //don't show content packages that only define submarine files + //(it doesn't make sense to require another sub to be installed to install this one) + if (contentPack.Files.All(cp => cp.Type == ContentType.Submarine)) { continue; } + if (!contentPacks.Contains(contentPack.Name)) { contentPacks.Add(contentPack.Name); } + } - foreach (string contentPackageName in contentPacks) - { - var cpTickBox = new GUITickBox(new RectTransform(new Vector2(0.2f, 0.2f), contentPackList.Content.RectTransform), contentPackageName, font: GUI.SmallFont) + foreach (string contentPackageName in contentPacks) { - Selected = Submarine.MainSub.Info.RequiredContentPackages.Contains(contentPackageName), - UserData = contentPackageName - }; - cpTickBox.OnSelected += (GUITickBox tickBox) => - { - if (tickBox.Selected) + var cpTickBox = new GUITickBox(new RectTransform(new Vector2(0.2f, 0.2f), contentPackList.Content.RectTransform), contentPackageName, font: GUI.SmallFont) { - Submarine.MainSub.Info.RequiredContentPackages.Add((string)tickBox.UserData); - } - else + Selected = Submarine.MainSub.Info.RequiredContentPackages.Contains(contentPackageName), + UserData = contentPackageName + }; + cpTickBox.OnSelected += tickBox => { - Submarine.MainSub.Info.RequiredContentPackages.Remove((string)tickBox.UserData); - } - return true; - }; + if (tickBox.Selected) + { + Submarine.MainSub.Info.RequiredContentPackages.Add((string)tickBox.UserData); + } + else + { + Submarine.MainSub.Info.RequiredContentPackages.Remove((string)tickBox.UserData); + } + return true; + }; + } } @@ -1477,6 +1636,8 @@ namespace Barotrauma leftColumn.Recalculate(); descriptionBox.Text = Submarine.MainSub == null ? "" : Submarine.MainSub.Info.Description; submarineDescriptionCharacterCount.Text = descriptionBox.Text.Length + " / " + submarineDescriptionLimit; + + if (quickSave) { SaveSub(saveButton, saveButton.UserData); } } @@ -1484,11 +1645,13 @@ namespace Barotrauma { SetMode(Mode.Default); - saveFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker") + saveFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null) { OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) saveFrame = null; return true; } }; + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, saveFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.25f, 0.3f), saveFrame.RectTransform, Anchor.Center) { MinSize = new Point(400, 300) }); GUILayoutGroup paddedSaveFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.9f), innerFrame.RectTransform, Anchor.Center)) { @@ -1535,6 +1698,27 @@ namespace Barotrauma }; } + /// + /// Loads an item assembly and only returns items which are not inside other inventories. + /// This is to prevent us from trying to place for example Oxygen Tanks inside an inventory + /// when it's already inside a diving suit. + /// + /// + /// + private List LoadItemAssemblyInventorySafe(ItemAssemblyPrefab assemblyPrefab) + { + var realItems = assemblyPrefab.CreateInstance(Vector2.Zero, Submarine.MainSub); + var itemInstance = new List(); + realItems.ForEach(entity => + { + if (entity is Item it && it.ParentInventory == null) + { + itemInstance.Add(it); + } + }); + return itemInstance; + } + private bool SaveAssembly(GUIButton button, object obj) { if (string.IsNullOrWhiteSpace(nameBox.Text)) @@ -1563,7 +1747,7 @@ namespace Barotrauma if (File.Exists(filePath)) { - var msgBox = new GUIMessageBox(TextManager.Get("Warning"), TextManager.Get("ItemAssemblyFileExistsWarning"), new string[] { TextManager.Get("Yes"), TextManager.Get("No") }); + var msgBox = new GUIMessageBox(TextManager.Get("Warning"), TextManager.Get("ItemAssemblyFileExistsWarning"), new[] { TextManager.Get("Yes"), TextManager.Get("No") }); msgBox.Buttons[0].OnClicked = (btn, userdata) => { msgBox.Close(); @@ -1581,7 +1765,11 @@ namespace Barotrauma void Save() { XDocument doc = new XDocument(ItemAssemblyPrefab.Save(MapEntity.SelectedList, nameBox.Text, descriptionBox.Text, hideInMenus)); +#if DEBUG doc.Save(filePath); +#else + doc.SaveSafe(filePath); +#endif new ItemAssemblyPrefab(filePath); UpdateEntityList(); @@ -1591,20 +1779,27 @@ namespace Barotrauma return false; } - private bool CreateLoadScreen() + private void CreateLoadScreen() { + CloseItem(); SetMode(Mode.Default); - loadFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas), style: "GUIBackgroundBlocker") + loadFrame = new GUIButton(new RectTransform(Vector2.One, GUI.Canvas, Anchor.Center), style: null) { OnClicked = (btn, userdata) => { if (GUI.MouseOn == btn || GUI.MouseOn == btn.TextBlock) loadFrame = null; return true; }, }; - var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.2f, 0.36f), loadFrame.RectTransform, Anchor.Center) { MinSize = new Point(350, 500) }); + new GUIFrame(new RectTransform(GUI.Canvas.RelativeSize, loadFrame.RectTransform, Anchor.Center), style: "GUIBackgroundBlocker"); + + var innerFrame = new GUIFrame(new RectTransform(new Vector2(0.3f, 0.5f), loadFrame.RectTransform, Anchor.Center) { MinSize = new Point(350, 500) }); var paddedLoadFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.9f), innerFrame.RectTransform, Anchor.Center)) { Stretch = true, RelativeSpacing = 0.02f }; - var deleteButtonHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), paddedLoadFrame.RectTransform, Anchor.Center)); + var deleteButtonHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.2f), paddedLoadFrame.RectTransform, Anchor.Center)) + { + RelativeSpacing = 0.1f, + Stretch = true + }; var searchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.1f), paddedLoadFrame.RectTransform), font: GUI.Font, createClearButton: true); var searchTitle = new GUITextBlock(new RectTransform(Vector2.One, searchBox.RectTransform), TextManager.Get("serverlog.filter"), @@ -1615,7 +1810,7 @@ namespace Barotrauma }; searchTitle.TextColor *= 0.5f; - var subList = new GUIListBox(new RectTransform(new Vector2(1.0f, 1.0f), paddedLoadFrame.RectTransform)) + var subList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.7f), paddedLoadFrame.RectTransform)) { ScrollBarVisible = true, OnSelected = (GUIComponent selected, object userData) => @@ -1625,7 +1820,7 @@ namespace Barotrauma #if DEBUG deleteBtn.Enabled = true; #else - deleteBtn.Enabled = userData is Submarine sub && !sub.Info.IsVanillaSubmarine(); + deleteBtn.Enabled = userData is SubmarineInfo subInfo && !subInfo.IsVanillaSubmarine(); #endif } return true; @@ -1656,7 +1851,7 @@ namespace Barotrauma } } - var deleteButton = new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), deleteButtonHolder.RectTransform, Anchor.TopCenter), + var deleteButton = new GUIButton(new RectTransform(Vector2.One, deleteButtonHolder.RectTransform, Anchor.TopCenter), TextManager.Get("Delete")) { Enabled = false, @@ -1671,6 +1866,18 @@ namespace Barotrauma deleteButton.Enabled = false; return true; }; + + var loadAutoSave = new GUIButton(new RectTransform(Vector2.One, deleteButtonHolder.RectTransform, Anchor.BottomCenter), TextManager.Get("LoadAutoSave")) + { + Enabled = File.Exists(Path.Combine(SubmarineInfo.SavePath, ".AutoSaves", "AutoSave.sub")), + ToolTip = TextManager.Get("LoadAutoSaveTooltip"), + UserData = "loadautosave", + OnClicked = (button, o) => + { + LoadAutoSave(); + return true; + } + }; var controlBtnHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), paddedLoadFrame.RectTransform), isHorizontal: true) { RelativeSpacing = 0.2f, Stretch = true }; @@ -1689,16 +1896,58 @@ namespace Barotrauma { OnClicked = LoadSub }; - - return true; } private void FilterSubs(GUIListBox subList, string filter) { foreach (GUIComponent child in subList.Content.Children) { - if (!(child.UserData is Submarine sub)) { return; } - child.Visible = string.IsNullOrEmpty(filter) ? true : sub.Info.Name.ToLower().Contains(filter.ToLower()); + if (!(child.UserData is SubmarineInfo sub)) { return; } + child.Visible = string.IsNullOrEmpty(filter) || sub.Name.ToLower().Contains(filter.ToLower()); + } + } + + /// + /// Recovers the auto saved submarine + /// + /// + private void LoadAutoSave() + { + string filePath = Path.Combine(SubmarineInfo.SavePath, ".AutoSaves", "AutoSave.sub"); + + var loadedSub = Submarine.Load(new SubmarineInfo(filePath), true); + + // set the submarine file path to the "default" value + loadedSub.Info.FilePath = Path.Combine(SubmarineInfo.SavePath, $"{TextManager.Get("UnspecifiedSubFileName")}.sub"); + loadedSub.Info.Name = TextManager.Get("UnspecifiedSubFileName"); + try + { + loadedSub.Info.Name = loadedSub.Info.SubmarineElement.GetAttributeString("name", loadedSub.Info.Name); + } + catch (Exception e) + { + DebugConsole.ThrowError("Failed to find a name for the submarine.", e); + } + Submarine.MainSub = loadedSub; + Submarine.MainSub.SetPrevTransform(Submarine.MainSub.Position); + Submarine.MainSub.UpdateTransform(); + Submarine.MainSub.Info.Name = loadedSub.Info.Name; + subNameLabel.Text = ToolBox.LimitString(loadedSub.Info.Name, subNameLabel.Font, subNameLabel.Rect.Width); + + CreateDummyCharacter(); + + cam.Position = Submarine.MainSub.Position + Submarine.MainSub.HiddenSubPosition; + + loadFrame = null; + + //turn off lights that are inside an inventory (cabinet for example) + foreach (Item item in Item.ItemList) + { + var lightComponent = item.GetComponent(); + if (lightComponent != null) + { + lightComponent.Light.Enabled = item.ParentInventory == null; + } } } @@ -1724,6 +1973,8 @@ namespace Barotrauma var selectedSub = new Submarine(selectedSubInfo); Submarine.MainSub = selectedSub; Submarine.MainSub.UpdateTransform(interpolate: false); + + CreateDummyCharacter(); string name = Submarine.MainSub.Info.Name; subNameLabel.Text = ToolBox.LimitString(name, subNameLabel.Font, subNameLabel.Rect.Width); @@ -1745,7 +1996,7 @@ namespace Barotrauma if (selectedSub.Info.GameVersion < new Version("0.8.9.0")) { var adjustLightsPrompt = new GUIMessageBox(TextManager.Get("Warning"), TextManager.Get("AdjustLightsPrompt"), - new string[] { TextManager.Get("Yes"), TextManager.Get("No") }); + new[] { TextManager.Get("Yes"), TextManager.Get("No") }); adjustLightsPrompt.Buttons[0].OnClicked += adjustLightsPrompt.Close; adjustLightsPrompt.Buttons[0].OnClicked += (btn, userdata) => { @@ -1804,19 +2055,19 @@ namespace Barotrauma msgBox.Buttons[1].OnClicked += msgBox.Close; } - private bool OpenEntityMenu(MapEntityCategory? selectedCategory) + private void OpenEntityMenu(MapEntityCategory? entityCategory) { foreach (GUIButton categoryButton in entityCategoryButtons) { - categoryButton.Selected = selectedCategory.HasValue ? - categoryButton.UserData is MapEntityCategory category && selectedCategory.Value == category : + categoryButton.Selected = entityCategory.HasValue ? + categoryButton.UserData is MapEntityCategory category && entityCategory.Value == category : categoryButton.UserData == null; - string categoryName = selectedCategory.HasValue ? selectedCategory.Value.ToString() : "All"; + string categoryName = entityCategory.HasValue ? entityCategory.Value.ToString() : "All"; selectedCategoryText.Text = TextManager.Get("MapEntityCategory." + categoryName); selectedCategoryButton.ApplyStyle(GUI.Style.GetComponentStyle("CategoryButton." + categoryName)); } - this.selectedCategory = selectedCategory; + selectedCategory = entityCategory; SetMode(Mode.Default); @@ -1830,43 +2081,60 @@ namespace Barotrauma foreach (GUIComponent child in entityList.Content.Children) { - child.Visible = !selectedCategory.HasValue || ((MapEntityPrefab)child.UserData).Category == selectedCategory; + child.Visible = !entityCategory.HasValue || ((MapEntityPrefab) child.UserData).Category == entityCategory; + if (child.Visible && dummyCharacter?.SelectedConstruction?.OwnInventory != null) + { + child.Visible = child.UserData is MapEntityPrefab item && IsItemPrefab(item); + } } + + if (!string.IsNullOrEmpty(entityFilterBox.Text)) { FilterEntities(entityFilterBox.Text); } + entityList.UpdateScrollBarSize(); entityList.BarScroll = 0.0f; - - return true; } - private bool FilterEntities(string filter) + private void FilterEntities(string filter) { if (string.IsNullOrWhiteSpace(filter)) { - entityList.Content.Children.ForEach(c => c.Visible = !selectedCategory.HasValue || selectedCategory == ((MapEntityPrefab)c.UserData).Category); - return true; + entityList.Content.Children.ForEach(c => + { + c.Visible = !selectedCategory.HasValue || selectedCategory == ((MapEntityPrefab) c.UserData).Category; + if (c.Visible && dummyCharacter?.SelectedConstruction?.OwnInventory != null) + { + c.Visible = c.UserData is MapEntityPrefab item && IsItemPrefab(item); + } + }); + entityList.UpdateScrollBarSize(); + entityList.BarScroll = 0.0f; + + return; } filter = filter.ToLower(); foreach (GUIComponent child in entityList.Content.Children) { var textBlock = child.GetChild(); - child.Visible = - (!selectedCategory.HasValue || selectedCategory == ((MapEntityPrefab)child.UserData).Category) && - ((MapEntityPrefab)child.UserData).Name.ToLower().Contains(filter); + child.Visible = + (!selectedCategory.HasValue || selectedCategory == ((MapEntityPrefab) child.UserData).Category) && + ((MapEntityPrefab) child.UserData).Name.ToLower().Contains(filter); + + if (child.Visible && dummyCharacter?.SelectedConstruction?.OwnInventory != null) + { + child.Visible = child.UserData is MapEntityPrefab item && IsItemPrefab(item); + } } entityList.UpdateScrollBarSize(); entityList.BarScroll = 0.0f; - - return true; } - public bool ClearFilter() + private void ClearFilter() { FilterEntities(""); entityList.UpdateScrollBarSize(); entityList.BarScroll = 0.0f; entityFilterBox.Text = ""; - return true; } public void SetMode(Mode newMode) @@ -1876,30 +2144,8 @@ namespace Barotrauma lockMode = true; defaultModeTickBox.Selected = newMode == Mode.Default; - defaultModeTickBox.CanBeFocused = !defaultModeTickBox.Selected; - - characterModeTickBox.Selected = newMode == Mode.Character; wiringModeTickBox.Selected = newMode == Mode.Wiring; lockMode = false; - - switch (newMode) - { - case Mode.Character: - CreateDummyCharacter(); - break; - case Mode.Wiring: - CreateDummyCharacter(); - var item = new Item(MapEntityPrefab.Find(null, "screwdriver") as ItemPrefab, Vector2.Zero, null); - dummyCharacter.Inventory.TryPutItem(item, null, new List() { InvSlotType.RightHand }); - wiringToolPanel = CreateWiringPanel(); - break; - default: - if (dummyCharacter != null) - { - RemoveDummyCharacter(); - } - break; - } foreach (MapEntity me in MapEntity.mapEntityList) { @@ -1908,17 +2154,23 @@ namespace Barotrauma MapEntity.DeselectAll(); MapEntity.FilteredSelectedList.Clear(); + + CreateDummyCharacter(); + if (newMode == Mode.Wiring) + { + var item = new Item(MapEntityPrefab.Find(null, "screwdriver") as ItemPrefab, Vector2.Zero, null); + dummyCharacter.Inventory.TryPutItem(item, null, new List() { InvSlotType.RightHand }); + wiringToolPanel = CreateWiringPanel(); + } } private void RemoveDummyCharacter() { - if (dummyCharacter == null) { return; } + if (dummyCharacter == null || dummyCharacter.Removed) { return; } foreach (Item item in dummyCharacter.Inventory.Items) { - if (item == null) { continue; } - - item.Remove(); + item?.Remove(); } dummyCharacter.Remove(); @@ -1930,53 +2182,102 @@ namespace Barotrauma List targets = MapEntity.mapEntityList.Any(me => me.IsHighlighted && !MapEntity.SelectedList.Contains(me)) ? MapEntity.mapEntityList.Where(me => me.IsHighlighted).ToList() : new List(MapEntity.SelectedList); - + contextMenu = new GUIListBox(new RectTransform(new Vector2(0.1f, 0.1f), GUI.Canvas) { - MinSize = new Point(180,0), ScreenSpaceOffset = PlayerInput.MousePosition.ToPoint() - }, style: "GUIToolTip"); - - new GUITextBlock(new RectTransform(new Point(contextMenu.Rect.Width, (int)(18 * GUI.Scale)), contextMenu.Content.RectTransform), - TextManager.Get("editor.cut"), font: GUI.SmallFont) + }, style: "GUIToolTip") { - UserData = "cut", - Enabled = targets.Count > 0 - }; - new GUITextBlock(new RectTransform(new Point(contextMenu.Rect.Width, (int)(18 * GUI.Scale)), contextMenu.Content.RectTransform), - TextManager.Get("editor.copytoclipboard"), font: GUI.SmallFont) - { - UserData = "copy", - Enabled = targets.Count > 0 - }; - new GUITextBlock(new RectTransform(new Point(contextMenu.Rect.Width, (int)(18 * GUI.Scale)), contextMenu.Content.RectTransform), - TextManager.Get("editor.paste"), font: GUI.SmallFont) - { - UserData = "paste", - Enabled = MapEntity.CopiedList.Any() - }; - new GUITextBlock(new RectTransform(new Point(contextMenu.Rect.Width, (int)(18 * GUI.Scale)), contextMenu.Content.RectTransform), - TextManager.Get("delete"), font: GUI.SmallFont) - { - UserData = "delete", - Enabled = targets.Count > 0 + Padding = new Vector4(5) }; - foreach (GUITextBlock child in contextMenu.Content.Children) + Item target = null; + + var single = targets.Count == 1 ? targets.Single() : null; + if (single is Item item && item.Components.Any(ic => !(ic is ConnectionPanel) && !(ic is Repairable) && ic.GuiFrame != null)) { - if (!child.Enabled) { child.TextColor *= 0.5f; } + // Do not offer the ability to open the inventory if the inventory should never be drawn + var container = item.GetComponent(); + if (container == null || container.DrawInventory) { target = item; } + } + + // Holding shift brings up special context menu options + if (PlayerInput.IsShiftDown()) + { + new GUITextBlock(new RectTransform(Point.Zero, contextMenu.Content.RectTransform), + TextManager.Get("CharacterEditor.EditBackgroundColor"), font: GUI.SmallFont) + { + UserData = "bgcolor" + }; + } + else + { + new GUITextBlock(new RectTransform(Point.Zero, contextMenu.Content.RectTransform), + TextManager.Get("label.openlabel"), font: GUI.SmallFont) + { + UserData = "open", + Enabled = target != null + }; + + new GUITextBlock(new RectTransform(Point.Zero, contextMenu.Content.RectTransform), + TextManager.Get("editor.cut"), font: GUI.SmallFont) + { + UserData = "cut", + Enabled = targets.Count > 0 + }; + + new GUITextBlock(new RectTransform(Point.Zero, contextMenu.Content.RectTransform), + TextManager.Get("editor.copytoclipboard"), font: GUI.SmallFont) + { + UserData = "copy", + Enabled = targets.Count > 0 + }; + + new GUITextBlock(new RectTransform(Point.Zero, contextMenu.Content.RectTransform), + TextManager.Get("editor.paste"), font: GUI.SmallFont) + { + UserData = "paste", + Enabled = MapEntity.CopiedList.Any(), + }; + + new GUITextBlock(new RectTransform(Point.Zero, contextMenu.Content.RectTransform), + TextManager.Get("delete"), font: GUI.SmallFont) + { + UserData = "delete", + Enabled = targets.Count > 0 + }; } - contextMenu.Content.Children.ForEach(c => c.RectTransform.MinSize = new Point(0, c.Rect.Height)); - contextMenu.RectTransform.NonScaledSize = new Point( - contextMenu.Rect.Width, - (int)((contextMenu.Content.CountChildren * 20) * GUI.Scale)); + foreach (var guiComponent in contextMenu.Content.Children) + { + if (guiComponent is GUITextBlock child) + { + if (!child.Enabled) + { + child.TextColor *= 0.5f; + } + } + } + + contextMenu.Content.Children.ForEach(c => + { + if (c is GUITextBlock block) + { + block.RectTransform.NonScaledSize = new Point((int) (block.TextSize.X + block.Padding.X * 2), (int)(18 * GUI.Scale)); + } + }); + int biggestSize = contextMenu.Content.Children.Max(c => c.Rect.Width + (int)contextMenu.Padding.X * 2); + contextMenu.Content.Children.ForEach(c => c.RectTransform.MinSize = new Point(biggestSize, c.Rect.Height)); + contextMenu.RectTransform.NonScaledSize = new Point(biggestSize, (int)(contextMenu.Content.Children.Sum(c => c.Rect.Height) + (contextMenu.Padding.X * 2))); - contextMenu.OnSelected = (GUIComponent component, object obj) => + contextMenu.OnSelected = (component, obj) => { if (!component.Enabled) { return false; } switch (obj as string) { + case "bgcolor": + CreateBackgroundColorPicker(); + break; case "copy": MapEntity.Copy(targets); break; @@ -1987,7 +2288,10 @@ namespace Barotrauma MapEntity.Paste(cam.ScreenToWorld(contextMenu.Rect.Location.ToVector2())); break; case "delete": - targets.ForEach(me => me.Remove()); + targets.ForEach(me => { me.Remove(); }); + break; + case "open" when target != null: + OpenItem(target); break; } contextMenu = null; @@ -1995,6 +2299,57 @@ namespace Barotrauma }; } + /// + /// Creates a color picker that can be used to change the submarine editor's background color + /// + private void CreateBackgroundColorPicker() + { + var msgBox = new GUIMessageBox(TextManager.Get("CharacterEditor.EditBackgroundColor"), "", new[] { TextManager.Get("Reset"), TextManager.Get("OK")}, new Vector2(0.2f, 0.175f), minSize: new Point(300, 175)); + + var rgbLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.25f), msgBox.Content.RectTransform), isHorizontal: true); + + // Generate R,G,B labels and parent elements + var layoutParents = new GUILayoutGroup[3]; + for (int i = 0; i < 3; i++) + { + var colorContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.33f, 1), rgbLayout.RectTransform), isHorizontal: true) { Stretch = true }; + new GUITextBlock(new RectTransform(new Vector2(0.2f, 1), colorContainer.RectTransform, Anchor.CenterLeft) { MinSize = new Point(15, 0) }, GUI.colorComponentLabels[i], font: GUI.SmallFont, textAlignment: Alignment.Center); + layoutParents[i] = colorContainer; + } + + // attach number inputs to our generated parent elements + var rInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1f), layoutParents[0].RectTransform), GUINumberInput.NumberType.Int) { IntValue = backgroundColor.R }; + var gInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1f), layoutParents[1].RectTransform), GUINumberInput.NumberType.Int) { IntValue = backgroundColor.G }; + var bInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1f), layoutParents[2].RectTransform), GUINumberInput.NumberType.Int) { IntValue = backgroundColor.B }; + + rInput.MinValueInt = gInput.MinValueInt = bInput.MinValueInt = 0; + rInput.MaxValueInt = gInput.MaxValueInt = bInput.MaxValueInt = 255; + + rInput.OnValueChanged = gInput.OnValueChanged = bInput.OnValueChanged = delegate + { + var color = new Color(rInput.IntValue, gInput.IntValue, bInput.IntValue); + backgroundColor = color; + GameSettings.SubEditorBackgroundColor = color; + }; + + // Reset button + msgBox.Buttons[0].OnClicked = (button, o) => + { + rInput.IntValue = 13; + gInput.IntValue = 37; + bInput.IntValue = 69; + return true; + }; + + // Ok button + msgBox.Buttons[1].OnClicked = (button, o) => + { + msgBox.Close(); + GameMain.Config.SaveNewPlayerConfig(); + return true; + }; + } + private GUIFrame CreateWiringPanel() { GUIFrame frame = new GUIFrame(new RectTransform(new Vector2(0.03f, 0.35f), GUI.Canvas) @@ -2027,7 +2382,7 @@ namespace Barotrauma private bool SelectLinkedSub(GUIComponent selected, object userData) { - if (!(selected.UserData is Submarine submarine)) return false; + if (!(selected.UserData is SubmarineInfo submarine)) return false; var prefab = new LinkedSubmarinePrefab(submarine); MapEntityPrefab.SelectPrefab(prefab); return true; @@ -2064,6 +2419,73 @@ namespace Barotrauma } + /// + /// Tries to open an item container in the submarine editor using the dummy character + /// + /// The item we want to open + private void OpenItem(Item itemContainer) + { + if (dummyCharacter == null || itemContainer == null) { return; } + + if ((itemContainer.GetComponent() != null || itemContainer.GetComponent() != null) && itemContainer.GetComponent() != null) + { + // We teleport our dummy character to the item so it appears as the entity stays still when in reality the dummy is holding it + oldItemPosition = itemContainer.SimPosition; + TeleportDummyCharacter(oldItemPosition); + + // Override this so we can be sure the container opens + var container = itemContainer.GetComponent(); + if (container != null) { container.KeepOpenWhenEquipped = true; } + + // We accept any slots except "Any" since that would take priority + List allowedSlots = new List(); + itemContainer.AllowedSlots.ForEach(type => + { + if (type != InvSlotType.Any) { allowedSlots.Add(type); } + }); + + // Try to place the item in the dummy character's inventory + bool success = dummyCharacter.Inventory.TryPutItem(itemContainer, dummyCharacter, allowedSlots); + if (success) { OpenedItem = itemContainer; } + else { return; } + } + MapEntity.SelectedList.Clear(); + MapEntity.FilteredSelectedList.Clear(); + MapEntity.SelectEntity(itemContainer); + dummyCharacter.SelectedConstruction = itemContainer; + FilterEntities(entityFilterBox.Text); + } + + /// + /// Close the currently opened item + /// + private void CloseItem() + { + if (dummyCharacter == null) { return; } + DraggedItemPrefab = null; + dummyCharacter.SelectedConstruction = null; + OpenedItem?.Drop(dummyCharacter); + OpenedItem?.SetTransform(oldItemPosition, 0f); + OpenedItem = null; + FilterEntities(entityFilterBox.Text); + } + + /// + /// Teleports the dummy character to the specified position + /// + /// The desired position + private void TeleportDummyCharacter(Vector2 pos) + { + if (dummyCharacter != null) + { + foreach (Limb limb in dummyCharacter.AnimController.Limbs) + { + limb.body.SetTransform(pos, 0.0f); + } + dummyCharacter.AnimController.Collider.SetTransform(pos, 0); + } + } + private bool ChangeSubName(GUITextBox textBox, string text) { if (string.IsNullOrWhiteSpace(text)) @@ -2082,7 +2504,7 @@ namespace Barotrauma return true; } - private bool ChangeSubDescription(GUITextBox textBox, string text) + private void ChangeSubDescription(GUITextBox textBox, string text) { if (Submarine.MainSub != null) { @@ -2094,8 +2516,26 @@ namespace Barotrauma } submarineDescriptionCharacterCount.Text = text.Length + " / " + submarineDescriptionLimit; + } - return true; + /// + /// Checks if the prefab is an item or if it only consists of items + /// + /// The prefab to check + /// True if the the prefab is an item or it contains only items + private bool IsItemPrefab(MapEntityPrefab mapPrefab) + { + if (dummyCharacter?.SelectedConstruction == null) + { + return false; + } + + return mapPrefab switch + { + ItemPrefab iPrefab => true, + ItemAssemblyPrefab aPrefab => aPrefab.DisplayEntities.All(pair => pair.First is ItemPrefab), + _ => false + }; } private bool SelectPrefab(GUIComponent component, object obj) @@ -2103,7 +2543,7 @@ namespace Barotrauma if (GUI.MouseOn is GUIButton || GUI.MouseOn?.Parent is GUIButton) { return false; } AddPreviouslyUsed(obj as MapEntityPrefab); - + //if selecting a gap/hull/waypoint/spawnpoint, make sure the visibility is toggled on if (obj is CoreEntityPrefab prefab) { @@ -2118,8 +2558,68 @@ namespace Barotrauma } } - MapEntityPrefab.SelectPrefab(obj); - GUI.ForceMouseOn(null); + if (dummyCharacter?.SelectedConstruction != null) + { + var inv = dummyCharacter?.SelectedConstruction?.OwnInventory; + if (inv != null) + { + switch (obj) + { + case ItemAssemblyPrefab assemblyPrefab when PlayerInput.IsShiftDown(): + { + var itemInstance = LoadItemAssemblyInventorySafe(assemblyPrefab); + var spawnedItem = false; + + itemInstance.ForEach(newItem => + { + if (newItem != null) + { + var placedItem = inv.TryPutItem(newItem, dummyCharacter); + spawnedItem |= placedItem; + + if (!placedItem) + { + // Remove everything inside of the item so we don't get the popup asking if we want to keep the contained items + newItem.OwnInventory?.DeleteAllItems(); + newItem.Remove(); + } + } + }); + GUI.PlayUISound(spawnedItem ? GUISoundType.PickItem : GUISoundType.PickItemFail); + break; + } + case ItemPrefab itemPrefab when PlayerInput.IsShiftDown(): + { + var item = new Item(itemPrefab, Vector2.Zero, Submarine.MainSub); + if (!inv.TryPutItem(item, dummyCharacter)) + { + // We failed, remove the item so it doesn't stay at x:0,y:0 + GUI.PlayUISound(GUISoundType.PickItemFail); + item.Remove(); + } + else + { + GUI.PlayUISound(GUISoundType.PickItem); + } + break; + } + case ItemAssemblyPrefab _: + case ItemPrefab _: + { + // Place the item into our hands + DraggedItemPrefab = (MapEntityPrefab) obj; + GUI.PlayUISound(GUISoundType.PickItem); + break; + } + } + } + } + else + { + GUI.PlayUISound(GUISoundType.PickItem); + MapEntityPrefab.SelectPrefab(obj); + } + return false; } @@ -2164,21 +2664,19 @@ namespace Barotrauma } List wallPoints = new List(); - Vector2 min = Vector2.Zero; - Vector2 max = Vector2.Zero; + Vector2 max; List mapEntityList = new List(); foreach (MapEntity e in MapEntity.mapEntityList) { - if (e is Item) + if (e is Item it) { - Item it = e as Item; Door door = it.GetComponent(); if (door != null) { - int halfW = e.WorldRect.Width / 2; - wallPoints.Add(new Vector2(e.WorldRect.X + halfW, -e.WorldRect.Y + e.WorldRect.Height)); + int halfW = it.WorldRect.Width / 2; + wallPoints.Add(new Vector2(it.WorldRect.X + halfW, -it.WorldRect.Y + it.WorldRect.Height)); mapEntityList.Add(it); } continue; @@ -2209,7 +2707,7 @@ namespace Barotrauma return; } - min = wallPoints[0]; + var min = wallPoints[0]; max = wallPoints[0]; for (int i = 0; i < wallPoints.Count; i++) { @@ -2452,8 +2950,7 @@ namespace Barotrauma Rectangle gapRect = e.WorldRect; gapRect.Y -= 8; gapRect.Height = 16; - Gap newGap = new Gap(MapEntityPrefab.Find(null, "gap"), - gapRect); + Gap newGap = new Gap(MapEntityPrefab.Find(null, "gap"), gapRect); } } @@ -2480,29 +2977,42 @@ namespace Barotrauma MapEntity.HighlightedListBox.AddToGUIUpdateList(); } - if ((CharacterMode || WiringMode) && dummyCharacter != null) + if (dummyCharacter != null) { CharacterHUD.AddToGUIUpdateList(dummyCharacter); if (dummyCharacter.SelectedConstruction != null) { dummyCharacter.SelectedConstruction.AddToGUIUpdateList(); } - else if (WiringMode && MapEntity.SelectedList.Count == 1 && MapEntity.SelectedList[0] is Item item && item.GetComponent() != null) + else if (WiringMode && MapEntity.SelectedList.FirstOrDefault() is Item item && item.GetComponent() != null) { - MapEntity.SelectedList[0].AddToGUIUpdateList(); + MapEntity.SelectedList.FirstOrDefault()?.AddToGUIUpdateList(); } } - else + if (loadFrame != null) { - if (loadFrame != null) - { - loadFrame.AddToGUIUpdateList(); - } - else if (saveFrame != null) - { - saveFrame.AddToGUIUpdateList(); - } + loadFrame.AddToGUIUpdateList(); } + else if (saveFrame != null) + { + saveFrame.AddToGUIUpdateList(); + } + } + + /// + /// GUI.MouseOn doesn't get updated while holding primary mouse and we need it to + /// + private bool IsMouseOnEditorGUI() + { + if (GUI.MouseOn == null) + { + return false; + } + + return (EntityMenu?.MouseRect.Contains(PlayerInput.MousePosition) ?? false) + || (entityCountPanel?.MouseRect.Contains(PlayerInput.MousePosition) ?? false) + || (MapEntity.EditingHUD?.MouseRect.Contains(PlayerInput.MousePosition) ?? false) + || (TopPanel?.MouseRect.Contains(PlayerInput.MousePosition) ?? false); } /// @@ -2520,61 +3030,193 @@ namespace Barotrauma UpdateEntityList(); } + if (WiringMode && dummyCharacter != null) + { + Wire equippedWire = + Character.Controlled?.SelectedItems[0]?.GetComponent() ?? + Character.Controlled?.SelectedItems[1]?.GetComponent() ?? + Wire.DraggingWire; + + if (equippedWire == null) + { + // Highlight wires when hovering over the entity selection box + if (MapEntity.HighlightedListBox != null) + { + var lBox = MapEntity.HighlightedListBox; + foreach (var child in lBox.Content.Children) + { + if (child.UserData is Item item) + { + item.ExternalHighlight = GUI.IsMouseOn(child); + } + } + } + + var highlightedEntities = new List(); + + // ReSharper disable once LoopCanBeConvertedToQuery + foreach (Item item in MapEntity.mapEntityList.Where(entity => entity is Item).Cast()) + { + var wire = item.GetComponent(); + if (wire == null || !wire.IsMouseOn()) { continue; } + highlightedEntities.Add(item); + } + + MapEntity.UpdateHighlighting(highlightedEntities, true); + } + } + hullVolumeFrame.Visible = MapEntity.SelectedList.Any(s => s is Hull); + hullVolumeFrame.RectTransform.AbsoluteOffset = new Point(Math.Max(showEntitiesPanel.Rect.Right, previouslyUsedPanel.Rect.Right), 0); saveAssemblyFrame.Visible = MapEntity.SelectedList.Count > 0; + var offset = cam.WorldView.Top - cam.ScreenToWorld(new Vector2(0, GameMain.GraphicsHeight - EntityMenu.Rect.Top)).Y; + + // Move the camera towards to the focus point + if (camTargetFocus != Vector2.Zero) + { + if (GameMain.Config.KeyBind(InputType.Up).IsDown() || GameMain.Config.KeyBind(InputType.Down).IsDown() || + GameMain.Config.KeyBind(InputType.Left).IsDown() || GameMain.Config.KeyBind(InputType.Right).IsDown()) + { + camTargetFocus = Vector2.Zero; + } + else + { + var targetWithOffset = new Vector2(camTargetFocus.X, camTargetFocus.Y - offset / 2); + if (Math.Abs(cam.Position.X - targetWithOffset.X) < 1.0f && + Math.Abs(cam.Position.Y - targetWithOffset.Y) < 1.0f) + { + camTargetFocus = Vector2.Zero; + } + else + { + cam.Position += (targetWithOffset - cam.Position) / cam.MoveSmoothness; + } + } + } + + if (GUI.KeyboardDispatcher.Subscriber == null) { - // TODO adjust when the new inventory stuff rolls in - if (PlayerInput.KeyHit(Keys.Q) && mode == Mode.Default) + if (PlayerInput.KeyHit(Keys.E) && mode == Mode.Default) + { + if (dummyCharacter != null) + { + if (dummyCharacter.SelectedConstruction == null) + { + foreach (var entity in MapEntity.mapEntityList) + { + if (entity is Item item && entity.IsHighlighted && item.Components.Any(ic => !(ic is ConnectionPanel) && !(ic is Repairable) && ic.GuiFrame != null)) + { + var container = item.GetComponents().ToList(); + if (!container.Any() || container.Any(ic => ic?.DrawInventory ?? false)) + { + OpenItem(item); + break; + } + } + } + } + else + { + CloseItem(); + } + } + } + + // Focus to selection + if (PlayerInput.KeyHit(Keys.F) && mode == Mode.Default) + { + // content warning: contains coordinate system workarounds + var selected = MapEntity.SelectedList; + if (selected.Count > 0) + { + var dRect = selected.First().Rect; + var rect = new Rectangle(dRect.Left, dRect.Top, dRect.Width, dRect.Height * -1); + if (selected.Count > 1) + { + // Create one big rect out of our selection + selected.Skip(1).ForEach(me => + { + var wRect = me.Rect; + rect = Rectangle.Union(rect, new Rectangle(wRect.Left, wRect.Top, wRect.Width, wRect.Height * -1)); + }); + } + camTargetFocus = rect.Center.ToVector2(); + } + } + + if (GameMain.Config.KeyBind(InputType.ToggleInventory).IsHit() && mode == Mode.Default) { toggleEntityMenuButton.OnClicked?.Invoke(toggleEntityMenuButton, toggleEntityMenuButton.UserData); } - + if (PlayerInput.KeyHit(Keys.Tab)) { entityFilterBox.Select(); } - if (PlayerInput.KeyDown(Keys.LeftControl)) + if (PlayerInput.IsCtrlDown() && MapEntity.StartMovingPos == Vector2.Zero) { + cam.MoveCamera((float) deltaTime, allowMove: false); // Save menu if (PlayerInput.KeyHit(Keys.S)) { - if (PlayerInput.KeyDown(Keys.LeftShift)) + if (PlayerInput.IsShiftDown()) { - // Save the sub without a menu - if (subNameLabel != null) - { - SaveSubToFile(subNameLabel.Text); - } + // Quick-save, but only when we've set a custom name for our sub + CreateSaveScreen(subNameLabel != null && subNameLabel.Text != TextManager.Get("unspecifiedsubfilename")); } else { // Save menu - if (saveFrame == null) + CreateSaveScreen(); + } + } + + // Select or deselect everything + if (PlayerInput.KeyHit(Keys.A) && mode == Mode.Default) + { + if (MapEntity.SelectedList.Any()) + { + MapEntity.DeselectAll(); + } + else + { + var selectables = MapEntity.mapEntityList.Where(entity => entity.SelectableInEditor).ToList(); + lock (selectables) { - CreateSaveScreen(); + selectables.ForEach(MapEntity.AddSelection); } } } - // 1-3 keys on the keyboard for switching modes + // 1-2 keys on the keyboard for switching modes if (PlayerInput.KeyHit(Keys.D1)) { SetMode(Mode.Default); } - if (PlayerInput.KeyHit(Keys.D2)) { SetMode(Mode.Character); } - if (PlayerInput.KeyHit(Keys.D3)) { SetMode(Mode.Wiring); } + if (PlayerInput.KeyHit(Keys.D2)) { SetMode(Mode.Wiring); } } else { - cam.MoveCamera((float) deltaTime, true); + cam.MoveCamera((float) deltaTime, allowMove: true); } } + else + { + cam.MoveCamera((float) deltaTime, allowMove: false); + } if (PlayerInput.MidButtonHeld()) { - Vector2 moveSpeed = PlayerInput.MouseSpeed * (float)deltaTime * 100.0f / cam.Zoom; + Vector2 moveSpeed = PlayerInput.MouseSpeed * (float)deltaTime * 60.0f / cam.Zoom; moveSpeed.X = -moveSpeed.X; cam.Position += moveSpeed; + // break out of trying to focus + camTargetFocus = Vector2.Zero; + } + + if (PlayerInput.KeyHit(Keys.Escape) && dummyCharacter != null) + { + CloseItem(); } if (contextMenu != null) @@ -2587,20 +3229,16 @@ namespace Barotrauma } } - if (CharacterMode || WiringMode) + if (dummyCharacter != null && Entity.FindEntityByID(dummyCharacter.ID) == dummyCharacter) { - if (dummyCharacter == null || Entity.FindEntityByID(dummyCharacter.ID) != dummyCharacter) - { - SetMode(Mode.Default); - } - else + if (WiringMode) { foreach (MapEntity me in MapEntity.mapEntityList) { me.IsHighlighted = false; } - if (WiringMode && dummyCharacter.SelectedConstruction == null) + if (dummyCharacter.SelectedConstruction == null) { List wires = new List(); foreach (Item item in Item.ItemList) @@ -2610,68 +3248,251 @@ namespace Barotrauma } Wire.UpdateEditing(wires); } + } - if (dummyCharacter.SelectedConstruction == null || - dummyCharacter.SelectedConstruction.GetComponent() != null) + if (!WiringMode) + { + // Move all of our slots on top center of the entity list + // We use the slots to open item inventories and we want the position of them to be consisent + dummyCharacter.Inventory.slots.ForEach(slot => { - if (WiringMode && (PlayerInput.KeyDown(Microsoft.Xna.Framework.Input.Keys.LeftShift) || PlayerInput.KeyDown(Microsoft.Xna.Framework.Input.Keys.Right))) + slot.Rect.Y = EntityMenu.Rect.Top; + slot.Rect.X = EntityMenu.Rect.X + (EntityMenu.Rect.Width / 2) - (slot.Rect.Width /2); + }); + } + + if (dummyCharacter.SelectedConstruction == null || + dummyCharacter.SelectedConstruction.GetComponent() != null) + { + if (WiringMode && PlayerInput.IsShiftDown()) + { + Wire equippedWire = + Character.Controlled?.SelectedItems[0]?.GetComponent() ?? + Character.Controlled?.SelectedItems[1]?.GetComponent(); + if (equippedWire != null && equippedWire.GetNodes().Count > 0) { - Wire equippedWire = - Character.Controlled?.SelectedItems[0]?.GetComponent() ?? - Character.Controlled?.SelectedItems[1]?.GetComponent(); - if (equippedWire != null && equippedWire.GetNodes().Count > 0) + Vector2 lastNode = equippedWire.GetNodes().Last(); + if (equippedWire.Item.Submarine != null) { - Vector2 lastNode = equippedWire.GetNodes().Last(); - if (equippedWire.Item.Submarine != null) - { - lastNode += equippedWire.Item.Submarine.HiddenSubPosition + equippedWire.Item.Submarine.Position; - } - - dummyCharacter.CursorPosition = - Math.Abs(dummyCharacter.CursorPosition.X - lastNode.X) < Math.Abs(dummyCharacter.CursorPosition.Y - lastNode.Y) ? - new Vector2(lastNode.X, dummyCharacter.CursorPosition.Y) : - dummyCharacter.CursorPosition = new Vector2(dummyCharacter.CursorPosition.X, lastNode.Y); + lastNode += equippedWire.Item.Submarine.HiddenSubPosition + equippedWire.Item.Submarine.Position; } - } - Vector2 mouseSimPos = FarseerPhysics.ConvertUnits.ToSimUnits(dummyCharacter.CursorPosition); - foreach (Limb limb in dummyCharacter.AnimController.Limbs) - { - limb.body.SetTransform(mouseSimPos, 0.0f); + var (cursorX, cursorY) = dummyCharacter.CursorPosition; + + bool isHorizontal = Math.Abs(cursorX - lastNode.X) < Math.Abs(cursorY - lastNode.Y); + + float roundedY = MathUtils.Round(cursorY, Submarine.GridSize.Y / 2.0f); + float roundedX = MathUtils.Round(cursorX, Submarine.GridSize.X / 2.0f); + + dummyCharacter.CursorPosition = isHorizontal + ? new Vector2(lastNode.X, roundedY) + : new Vector2(roundedX, lastNode.Y); } - dummyCharacter.AnimController.Collider.SetTransform(mouseSimPos, 0.0f); } + // Keep teleporting the dummy character to the opened item to make it look like the container didn't go anywhere + if (OpenedItem != null) + { + TeleportDummyCharacter(oldItemPosition); + } + + if (WiringMode && dummyCharacter?.SelectedConstruction == null) + { + TeleportDummyCharacter(FarseerPhysics.ConvertUnits.ToSimUnits(dummyCharacter.CursorPosition)); + } + } + + if (WiringMode) + { dummyCharacter.ControlLocalPlayer((float)deltaTime, cam, false); dummyCharacter.Control((float)deltaTime, cam); + } - dummyCharacter.Submarine = Submarine.MainSub; + cam.TargetPos = Vector2.Zero; + dummyCharacter.Submarine = Submarine.MainSub; + } - cam.TargetPos = Vector2.Zero; + // Deposit item from our "infinite stack" into inventory slots + var inv = dummyCharacter?.SelectedConstruction?.OwnInventory; + if (inv?.slots != null) + { + var dragginMouse = MouseDragStart != Vector2.Zero && Vector2.Distance(PlayerInput.MousePosition, MouseDragStart) >= GUI.Scale * 20; + + // So we don't accidentally drag inventory items while doing this + if (DraggedItemPrefab != null) { Inventory.draggingItem = null; } + + switch (DraggedItemPrefab) + { + // regular item prefabs + case ItemPrefab itemPrefab when PlayerInput.PrimaryMouseButtonClicked() || dragginMouse: + { + bool spawnedItem = false; + for (var i = 0; i < inv.slots.Length; i++) + { + var slot = inv.slots[i]; + var itemContainer = inv?.Items[i]?.GetComponent(); + + // check if the slot is empty or if we can place the item into a container, for example an oxygen tank into a diving suit + if (Inventory.IsMouseOnSlot(slot)) + { + var newItem = new Item(itemPrefab, Vector2.Zero, Submarine.MainSub); + + if (inv.Items[i] == null) + { + bool placedItem = inv.TryPutItem(newItem, i, false, true, dummyCharacter); + spawnedItem |= placedItem; + + if (!placedItem) + { + newItem.Remove(); + } + } + else if (itemContainer != null && itemContainer.CanBeContained(itemPrefab) && + (itemContainer.Inventory?.Items.Any(item => item == null) ?? false)) + { + bool placedItem = itemContainer.Inventory.TryPutItem(newItem, dummyCharacter); + spawnedItem |= placedItem; + + // try to place the item into the inventory of the item we are hovering over + if (!placedItem) + { + newItem.Remove(); + } + else + { + slot.ShowBorderHighlight(GUI.Style.Green, 0.1f, 0.4f); + } + } + else + { + newItem.Remove(); + } + + if (!dragginMouse) + { + GUI.PlayUISound(spawnedItem ? GUISoundType.PickItem : GUISoundType.PickItemFail); + } + } + } + break; + } + // item assemblies + case ItemAssemblyPrefab assemblyPrefab when PlayerInput.PrimaryMouseButtonClicked(): + { + bool spawnedItems = false; + for (var i = 0; i < inv.slots.Length; i++) + { + var slot = inv.slots[i]; + var itemContainer = inv?.Items[i]?.GetComponent(); + if (inv.Items[i] == null && Inventory.IsMouseOnSlot(slot)) + { + // load the items + var itemInstance = LoadItemAssemblyInventorySafe(assemblyPrefab); + + // counter for items that failed so we so we known that slot remained empty + var failedCount = 0; + + for (var j = 0; j < itemInstance.Count(); j++) + { + var newItem = itemInstance[j]; + var newSpot = i + j - failedCount; + + // try to find a valid slot to put the items + while (inv.slots.Length > newSpot) + { + if (inv.Items[newSpot] == null) { break; } + newSpot++; + } + + // valid slot found + if (inv.slots.Length > newSpot) + { + var placedItem = inv.TryPutItem(newItem, newSpot, false, true, dummyCharacter); + spawnedItems |= placedItem; + + if (!placedItem) + { + failedCount++; + // delete the included items too so we don't get a popup asking if we want to keep them + newItem?.OwnInventory?.DeleteAllItems(); + newItem.Remove(); + } + } + else + { + var placedItem = inv.TryPutItem(newItem, dummyCharacter); + spawnedItems |= placedItem; + + // if our while loop didn't find a valid slot then let the inventory decide where to put it as a last resort + if (!placedItem) + { + // delete the included items too so we don't get a popup asking if we want to keep them + newItem?.OwnInventory?.DeleteAllItems(); + newItem.Remove(); + } + } + } + } + } + GUI.PlayUISound(spawnedItems ? GUISoundType.PickItem : GUISoundType.PickItemFail); + break; + } } } - else if (!saveAssemblyFrame.Rect.Contains(PlayerInput.MousePosition)) + + // Update our mouse dragging state so we can easily slide thru slots while holding the mouse button down to place lots of items + if (PlayerInput.PrimaryMouseButtonHeld()) + { + if (MouseDragStart == Vector2.Zero) + { + MouseDragStart = PlayerInput.MousePosition; + } + } + else + { + MouseDragStart = Vector2.Zero; + } + + if (!saveAssemblyFrame.Rect.Contains(PlayerInput.MousePosition) && dummyCharacter?.SelectedConstruction == null && !WiringMode && GUI.MouseOn == null) { MapEntity.UpdateSelecting(cam); } - - if (!CharacterMode && !WiringMode) + + if (!WiringMode) { + bool shouldCloseHud = dummyCharacter?.SelectedConstruction != null && HUD.CloseHUD(dummyCharacter.SelectedConstruction.Rect) && DraggedItemPrefab == null; + if (MapEntityPrefab.Selected != null && GUI.MouseOn == null) { MapEntityPrefab.Selected.UpdatePlacing(cam); } else { - if (PlayerInput.RightButtonClicked()) + if (PlayerInput.SecondaryMouseButtonClicked() && !shouldCloseHud) { - CreateContextMenu(); + if (GUI.IsMouseOn(entityFilterBox)) + { + ClearFilter(); + } + else + { + if (dummyCharacter?.SelectedConstruction == null) + { + CreateContextMenu(); + } + DraggedItemPrefab = null; + } + } + + if (shouldCloseHud) + { + CloseItem(); } } MapEntity.UpdateEditor(cam); } - entityMenuOpenState = entityMenuOpen && !CharacterMode & !WiringMode ? + entityMenuOpenState = entityMenuOpen && !WiringMode ? (float)Math.Min(entityMenuOpenState + deltaTime * 5.0f, 1.0f) : (float)Math.Max(entityMenuOpenState - deltaTime * 5.0f, 0.0f); @@ -2705,7 +3526,7 @@ namespace Barotrauma } } - if ((CharacterMode || WiringMode) && dummyCharacter != null) + if (dummyCharacter != null) { dummyCharacter.AnimController.FindHull(dummyCharacter.CursorWorldPosition, false); @@ -2719,34 +3540,29 @@ namespace Barotrauma //wires need to be updated for the last node to follow the player during rewiring Wire wire = item.GetComponent(); - if (wire != null) wire.Update((float)deltaTime, cam); + wire?.Update((float)deltaTime, cam); } if (dummyCharacter.SelectedConstruction != null) { - if (dummyCharacter.SelectedConstruction != null) + if (MapEntity.SelectedList.Contains(dummyCharacter.SelectedConstruction) || WiringMode) { - dummyCharacter.SelectedConstruction.UpdateHUD(cam, dummyCharacter, (float)deltaTime); + dummyCharacter.SelectedConstruction?.UpdateHUD(cam, dummyCharacter, (float)deltaTime); } - - //if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.FocusedItem != dummyCharacter.SelectedConstruction && GUI.KeyboardDispatcher.Subscriber == null) - //{ - // dummyCharacter.SelectedConstruction = null; - //} - /*if (PlayerInput.KeyHit(InputType.Deselect)) + else { - dummyCharacter.SelectedConstruction = null; - }*/ + // We somehow managed to unfocus the item, close it so our framerate doesn't go to 5 because the + // UpdateHUD() method keeps re-creating the editing HUD + CloseItem(); + } } - else if (MapEntity.SelectedList.Count == 1) + else if (MapEntity.SelectedList.Count == 1 && WiringMode) { (MapEntity.SelectedList[0] as Item)?.UpdateHUD(cam, dummyCharacter, (float)deltaTime); } CharacterHUD.Update((float)deltaTime, dummyCharacter, cam); } - - //GUI.Update((float)deltaTime); } /// @@ -2766,26 +3582,44 @@ namespace Barotrauma } spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, transformMatrix: cam.Transform); - graphics.Clear(new Color(0.051f, 0.149f, 0.271f, 1.0f)); + graphics.Clear(backgroundColor); if (GameMain.DebugDraw) { GUI.DrawLine(spriteBatch, new Vector2(Submarine.MainSub.HiddenSubPosition.X, -cam.WorldView.Y), new Vector2(Submarine.MainSub.HiddenSubPosition.X, -(cam.WorldView.Y - cam.WorldView.Height)), Color.White * 0.5f, 1.0f, (int)(2.0f / cam.Zoom)); GUI.DrawLine(spriteBatch, new Vector2(cam.WorldView.X, -Submarine.MainSub.HiddenSubPosition.Y), new Vector2(cam.WorldView.Right, -Submarine.MainSub.HiddenSubPosition.Y), Color.White * 0.5f, 1.0f, (int)(2.0f / cam.Zoom)); } - Submarine.DrawBack(spriteBatch, true, e => e is Structure s && (e.SpriteDepth >= 0.9f || s.Prefab.BackgroundSprite != null)); + Submarine.DrawBack(spriteBatch, true, e => + e is Structure s && + (ShowThalamus || !s.prefab.Category.HasFlag(MapEntityCategory.Thalamus)) && + (e.SpriteDepth >= 0.9f || s.Prefab.BackgroundSprite != null)); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, transformMatrix: cam.Transform); - Submarine.DrawBack(spriteBatch, true, e => !(e is Structure) || e.SpriteDepth < 0.9f); + + // When we "open" a wearable item with inventory it won't get rendered because the dummy character is invisible + // So we are drawing a clone of it on the same position + if (OpenedItem?.GetComponent() != null) + { + OpenedItem.Sprite.Draw(spriteBatch, new Vector2(OpenedItem.DrawPosition.X, -(OpenedItem.DrawPosition.Y)), + scale: OpenedItem.Scale, color: OpenedItem.SpriteColor, depth: OpenedItem.SpriteDepth); + GUI.DrawRectangle(spriteBatch, + new Vector2(OpenedItem.WorldRect.X, -OpenedItem.WorldRect.Y), + new Vector2(OpenedItem.Rect.Width, OpenedItem.Rect.Height), + Color.White, false, 0, (int)Math.Max(2.0f / cam.Zoom, 1.0f)); + } + + Submarine.DrawBack(spriteBatch, true, e => + (!(e is Structure) || e.SpriteDepth < 0.9f) && + (ShowThalamus || !e.prefab.Category.HasFlag(MapEntityCategory.Thalamus))); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, transformMatrix: cam.Transform); - Submarine.DrawDamageable(spriteBatch, null, editing: true); + Submarine.DrawDamageable(spriteBatch, null, editing: true, e => ShowThalamus || !(e.prefab?.Category.HasFlag(MapEntityCategory.Thalamus) ?? false)); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, transformMatrix: cam.Transform); - Submarine.DrawFront(spriteBatch, editing: true); - if (!CharacterMode && !WiringMode && GUI.MouseOn == null) + Submarine.DrawFront(spriteBatch, editing: true, e => ShowThalamus || !(e.prefab?.Category.HasFlag(MapEntityCategory.Thalamus) ?? false)); + if (!WiringMode && !IsMouseOnEditorGUI()) { MapEntityPrefab.Selected?.DrawPlacing(spriteBatch, cam); MapEntity.DrawSelecting(spriteBatch, cam); @@ -2794,7 +3628,7 @@ namespace Barotrauma if (GameMain.LightManager.LightingEnabled && lightingEnabled) { - spriteBatch.Begin(SpriteSortMode.Deferred, Lights.CustomBlendStates.Multiplicative, null, DepthStencilState.None, null, null, null); + spriteBatch.Begin(SpriteSortMode.Deferred, Lights.CustomBlendStates.Multiplicative, null, DepthStencilState.None); spriteBatch.Draw(GameMain.LightManager.LightMap, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); spriteBatch.End(); } @@ -2830,24 +3664,22 @@ namespace Barotrauma } } - if ((CharacterMode || WiringMode) && dummyCharacter != null) + if (dummyCharacter != null) { - dummyCharacter.DrawHUD(spriteBatch, cam, false); - if (WiringMode) wiringToolPanel.DrawManually(spriteBatch); - } - else - { - MapEntity.DrawEditor(spriteBatch, cam); + if (WiringMode) + { + dummyCharacter.DrawHUD(spriteBatch, cam, false); + wiringToolPanel.DrawManually(spriteBatch); + } } + MapEntity.DrawEditor(spriteBatch, cam); GUI.Draw(Cam, spriteBatch); - - if (!PlayerInput.PrimaryMouseButtonHeld()) Inventory.draggingItem = null; spriteBatch.End(); } - private void CreateImage(int width, int height, Stream stream) + private void CreateImage(int width, int height, System.IO.Stream stream) { MapEntity.SelectedList.Clear(); @@ -2882,7 +3714,7 @@ namespace Barotrauma }*/ spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, null, null, null, null, transform); - Submarine.Draw(spriteBatch, false); + Submarine.Draw(spriteBatch); Submarine.DrawFront(spriteBatch); Submarine.DrawDamageable(spriteBatch, null); spriteBatch.End(); @@ -2899,11 +3731,11 @@ namespace Barotrauma public void SaveScreenShot(int width, int height, string filePath) { - Stream stream = File.OpenWrite(filePath); + System.IO.Stream stream = File.OpenWrite(filePath); CreateImage(width, height, stream); stream.Dispose(); } - + public static bool IsSubEditor() { return Screen.Selected is SubEditorScreen && !Submarine.Unloading; } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs b/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs index 5cf2e0892..31c7fbd53 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs @@ -392,22 +392,40 @@ namespace Barotrauma public GUIComponent CreateBoolField(ISerializableEntity entity, SerializableProperty property, bool value, string displayName, string toolTip) { - GUITickBox propertyTickBox = new GUITickBox(new RectTransform(new Point(Rect.Width, elementHeight), layoutGroup.RectTransform, isFixedSize: true), displayName) + var editableAttribute = property.GetAttribute(); + if (editableAttribute.ReadOnly) { - Font = GUI.SmallFont, - Selected = value, - ToolTip = toolTip, - OnSelected = (tickBox) => + var frame = new GUIFrame(new RectTransform(new Point(Rect.Width, Math.Max(elementHeight, 26)), layoutGroup.RectTransform, isFixedSize: true), color: Color.Transparent); + var label = new GUITextBlock(new RectTransform(new Vector2(1.0f - inputFieldWidth, 1), frame.RectTransform), displayName, font: GUI.SmallFont) { - if (property.TrySetValue(entity, tickBox.Selected)) + ToolTip = toolTip + }; + var valueField = new GUITextBlock(new RectTransform(new Vector2(inputFieldWidth, 1), frame.RectTransform, Anchor.TopRight), value.ToString()) + { + ToolTip = toolTip, + Font = GUI.SmallFont + }; + return valueField; + } + else + { + GUITickBox propertyTickBox = new GUITickBox(new RectTransform(new Point(Rect.Width, elementHeight), layoutGroup.RectTransform, isFixedSize: true), displayName) + { + Font = GUI.SmallFont, + Selected = value, + ToolTip = toolTip, + OnSelected = (tickBox) => { - TrySendNetworkUpdate(entity, property); + if (SetPropertyValue(property, entity, tickBox.Selected)) + { + TrySendNetworkUpdate(entity, property); + } + return true; } - return true; - } - }; - if (!Fields.ContainsKey(property.Name)) { Fields.Add(property.Name, new GUIComponent[] { propertyTickBox }); } - return propertyTickBox; + }; + if (!Fields.ContainsKey(property.Name)) { Fields.Add(property.Name, new GUIComponent[] { propertyTickBox }); } + return propertyTickBox; + } } public GUIComponent CreateIntField(ISerializableEntity entity, SerializableProperty property, int value, string displayName, string toolTip) @@ -440,7 +458,7 @@ namespace Barotrauma numberInput.IntValue = value; numberInput.OnValueChanged += (numInput) => { - if (property.TrySetValue(entity, numInput.IntValue)) + if (SetPropertyValue(property, entity, numInput.IntValue)) { TrySendNetworkUpdate(entity, property); } @@ -453,8 +471,11 @@ namespace Barotrauma public GUIComponent CreateFloatField(ISerializableEntity entity, SerializableProperty property, float value, string displayName, string toolTip) { - var frame = new GUIFrame(new RectTransform(new Point(Rect.Width, Math.Max(elementHeight, 26)), layoutGroup.RectTransform, isFixedSize: true), color: Color.Transparent); - var label = new GUITextBlock(new RectTransform(new Vector2(1.0f - 1, 1), frame.RectTransform), displayName, font: GUI.SmallFont) + var frame = new GUIFrame(new RectTransform(new Point(Rect.Width, Math.Max(elementHeight, 26)), layoutGroup.RectTransform, isFixedSize: true), color: Color.Transparent) + { + CanBeFocused = false + }; + var label = new GUITextBlock(new RectTransform(new Vector2(1.0f - inputFieldWidth, 1), frame.RectTransform), displayName, font: GUI.SmallFont) { ToolTip = toolTip }; @@ -474,7 +495,7 @@ namespace Barotrauma numberInput.OnValueChanged += (numInput) => { - if (property.TrySetValue(entity, numInput.FloatValue)) + if (SetPropertyValue(property, entity, numInput.FloatValue)) { // This causes stack overflow. What's the purpose of it? //numInput.FloatValue = (float)property.GetValue(entity); @@ -504,7 +525,7 @@ namespace Barotrauma enumDropDown.SelectItem(value); enumDropDown.OnSelected += (selected, val) => { - if (property.TrySetValue(entity, val)) + if (SetPropertyValue(property, entity, val)) { TrySendNetworkUpdate(entity, property); } @@ -536,7 +557,7 @@ namespace Barotrauma } enumDropDown.OnSelected += (selected, val) => { - if (property.TrySetValue(entity, string.Join(", ", enumDropDown.SelectedDataMultiple.Select(d => d.ToString())))) + if (SetPropertyValue(property, entity, string.Join(", ", enumDropDown.SelectedDataMultiple.Select(d => d.ToString())))) { TrySendNetworkUpdate(entity, property); } @@ -568,16 +589,23 @@ namespace Barotrauma ToolTip = toolTip, Font = GUI.SmallFont, Text = value, - OverflowClip = true, + OverflowClip = true }; - propertyBox.OnDeselected += (textBox, keys) => + + propertyBox.OnDeselected += (textBox, keys) => OnApply(textBox); + propertyBox.OnEnterPressed += (box, text) => OnApply(box); + + bool OnApply(GUITextBox textBox) { - if (property.TrySetValue(entity, textBox.Text)) + if (SetPropertyValue(property, entity, textBox.Text)) { TrySendNetworkUpdate(entity, property); - textBox.Text = (string)property.GetValue(entity); + textBox.Text = (string) property.GetValue(entity); + textBox.Flash(GUI.Style.Green, flashDuration: 1f); } - }; + return true; + } + if (translationTextTag != null) { new GUIButton(new RectTransform(new Vector2(browseButtonWidth, 1), frame.RectTransform, Anchor.TopRight), "...", style: "GUIButtonSmall") @@ -623,7 +651,14 @@ namespace Barotrauma for (int i = 1; i >= 0; i--) { var element = new GUIFrame(new RectTransform(new Vector2(0.45f, 1), inputArea.RectTransform), style: null); - new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), GUI.vectorComponentLabels[i], font: GUI.SmallFont, textAlignment: Alignment.CenterLeft); + + string componentLabel = GUI.vectorComponentLabels[i]; + if (editableAttribute.VectorComponentLabels != null && i < editableAttribute.VectorComponentLabels.Length) + { + componentLabel = TextManager.Get(editableAttribute.VectorComponentLabels[i]); + } + + new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), componentLabel, font: GUI.SmallFont, textAlignment: Alignment.Center); GUINumberInput numberInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1), element.RectTransform, Anchor.CenterRight), GUINumberInput.NumberType.Int) { @@ -647,7 +682,7 @@ namespace Barotrauma else newVal.Y = numInput.IntValue; - if (property.TrySetValue(entity, newVal)) + if (SetPropertyValue(property, entity, newVal)) { TrySendNetworkUpdate(entity, property); } @@ -676,7 +711,13 @@ namespace Barotrauma for (int i = 1; i >= 0; i--) { var element = new GUIFrame(new RectTransform(new Vector2(0.45f, 1), inputArea.RectTransform), style: null); - new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), GUI.vectorComponentLabels[i], font: GUI.SmallFont, textAlignment: Alignment.CenterLeft); + + string componentLabel = GUI.vectorComponentLabels[i]; + if (editableAttribute.VectorComponentLabels != null && i < editableAttribute.VectorComponentLabels.Length) + { + componentLabel = TextManager.Get(editableAttribute.VectorComponentLabels[i]); + } + new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), componentLabel, font: GUI.SmallFont, textAlignment: Alignment.Center); GUINumberInput numberInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1), element.RectTransform, Anchor.CenterRight), GUINumberInput.NumberType.Float) { @@ -702,7 +743,7 @@ namespace Barotrauma else newVal.Y = numInput.FloatValue; - if (property.TrySetValue(entity, newVal)) + if (SetPropertyValue(property, entity, newVal)) { TrySendNetworkUpdate(entity, property); } @@ -731,7 +772,14 @@ namespace Barotrauma for (int i = 2; i >= 0; i--) { var element = new GUIFrame(new RectTransform(new Vector2(0.33f, 1), inputArea.RectTransform), style: null); - new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), GUI.vectorComponentLabels[i], font: GUI.SmallFont, textAlignment: Alignment.CenterLeft); + + string componentLabel = GUI.vectorComponentLabels[i]; + if (editableAttribute.VectorComponentLabels != null && i < editableAttribute.VectorComponentLabels.Length) + { + componentLabel = TextManager.Get(editableAttribute.VectorComponentLabels[i]); + } + + new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), componentLabel, font: GUI.SmallFont, textAlignment: Alignment.Center); GUINumberInput numberInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1), element.RectTransform, Anchor.CenterRight), GUINumberInput.NumberType.Float) { @@ -761,7 +809,7 @@ namespace Barotrauma else newVal.Z = numInput.FloatValue; - if (property.TrySetValue(entity, newVal)) + if (SetPropertyValue(property, entity, newVal)) { TrySendNetworkUpdate(entity, property); } @@ -790,7 +838,14 @@ namespace Barotrauma for (int i = 3; i >= 0; i--) { var element = new GUIFrame(new RectTransform(new Vector2(0.22f, 1), inputArea.RectTransform) { MinSize = new Point(50, 0), MaxSize = new Point(150, 50) }, style: null); - new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), GUI.vectorComponentLabels[i], font: GUI.SmallFont, textAlignment: Alignment.CenterLeft); + + string componentLabel = GUI.vectorComponentLabels[i]; + if (editableAttribute.VectorComponentLabels != null && i < editableAttribute.VectorComponentLabels.Length) + { + componentLabel = TextManager.Get(editableAttribute.VectorComponentLabels[i]); + } + + new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform, Anchor.CenterLeft), componentLabel, font: GUI.SmallFont, textAlignment: Alignment.Center); GUINumberInput numberInput = new GUINumberInput(new RectTransform(new Vector2(0.7f, 1), element.RectTransform, Anchor.CenterRight), GUINumberInput.NumberType.Float) { @@ -824,7 +879,7 @@ namespace Barotrauma else newVal.W = numInput.FloatValue; - if (property.TrySetValue(entity, newVal)) + if (SetPropertyValue(property, entity, newVal)) { TrySendNetworkUpdate(entity, property); } @@ -894,7 +949,7 @@ namespace Barotrauma else newVal.A = (byte)(numInput.IntValue); - if (property.TrySetValue(entity, newVal)) + if (SetPropertyValue(property, entity, newVal)) { TrySendNetworkUpdate(entity, property); colorBox.Color = newVal; @@ -958,7 +1013,7 @@ namespace Barotrauma else newVal.Height = numInput.IntValue; - if (property.TrySetValue(entity, newVal)) + if (SetPropertyValue(property, entity, newVal)) { TrySendNetworkUpdate(entity, property); } @@ -980,7 +1035,7 @@ namespace Barotrauma { string text = userData as string ?? ""; - if (property.TrySetValue(entity, text)) + if (SetPropertyValue(property, entity, text)) { TrySendNetworkUpdate(entity, property); textBox.Text = (string)property.GetValue(entity); @@ -1019,6 +1074,62 @@ namespace Barotrauma } } } - } + private bool SetPropertyValue(SerializableProperty property, object entity, object value) + { + MultiSetProperties(property, entity, value); + return property.TrySetValue(entity, value); + } + + /// + /// Sets common shared properties to all selected map entities in sub editor. + /// Only works client side while in the sub editor and when parentObject is ItemComponent, Item or Structure. + /// + /// + /// + /// + /// The function has the same parameters as + private void MultiSetProperties(SerializableProperty property, object parentObject, object value) + { + if (!(Screen.Selected is SubEditorScreen) || MapEntity.SelectedList.Count <= 1) { return; } + if (!(parentObject is ItemComponent || parentObject is Item || parentObject is Structure || parentObject is Hull)) { return; } + + foreach (var entity in MapEntity.SelectedList.Where(entity => entity != parentObject)) + { + switch (parentObject) + { + case Hull _: + case Structure _: + case Item _: + { + if (entity.GetType() == parentObject.GetType()) + { + property.PropertyInfo.SetValue(entity, value); + } + else if (entity is ISerializableEntity sEntity && sEntity.SerializableProperties != null) + { + var props = sEntity.SerializableProperties; + + if (props.TryGetValue(property.NameToLowerInvariant, out SerializableProperty foundProp)) + { + foundProp.PropertyInfo.SetValue(entity, value); + } + } + break; + } + case ItemComponent _ when entity is Item item: + { + foreach (var component in item.Components) + { + if (component.GetType() == parentObject.GetType() && component != parentObject) + { + property.PropertyInfo.SetValue(component, value); + } + } + break; + } + } + } + } + } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/Sound.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/Sound.cs index b6d19a664..700007424 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/Sound.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/Sound.cs @@ -1,7 +1,7 @@ using System; using OpenAL; using Microsoft.Xna.Framework; -using System.IO; +using Barotrauma.IO; using System.Xml.Linq; namespace Barotrauma.Sounds diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs index f1b73d220..9c64fa486 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs @@ -205,7 +205,7 @@ namespace Barotrauma.Sounds get { return gain; } set { - gain = Math.Max(Math.Min(value, 1.0f), 0.0f); + gain = Math.Clamp(value, 0.0f, 1.0f); if (ALSourceIndex < 0) { return; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundManager.cs index bca402c77..3c669361d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundManager.cs @@ -5,7 +5,7 @@ using System.Xml.Linq; using OpenAL; using Microsoft.Xna.Framework; using System.Linq; -using System.IO; +using Barotrauma.IO; namespace Barotrauma.Sounds { @@ -286,7 +286,7 @@ namespace Barotrauma.Sounds if (!File.Exists(filename)) { - throw new FileNotFoundException("Sound file \"" + filename + "\" doesn't exist!"); + throw new System.IO.FileNotFoundException("Sound file \"" + filename + "\" doesn't exist!"); } Sound newSound = new OggSound(this, filename, stream, null); @@ -297,14 +297,14 @@ namespace Barotrauma.Sounds return newSound; } - public Sound LoadSound(XElement element, bool stream = false) + public Sound LoadSound(XElement element, bool stream = false, string overrideFilePath = null) { if (Disabled) { return null; } - string filePath = element.GetAttributeString("file", ""); + string filePath = overrideFilePath ?? element.GetAttributeString("file", ""); if (!File.Exists(filePath)) { - throw new FileNotFoundException("Sound file \"" + filePath + "\" doesn't exist!"); + throw new System.IO.FileNotFoundException("Sound file \"" + filePath + "\" doesn't exist!"); } var newSound = new OggSound(this, filePath, stream, xElement: element); @@ -621,7 +621,10 @@ namespace Barotrauma.Sounds } if (streamingThread == null || streamingThread.ThreadState.HasFlag(ThreadState.Stopped) || isStreamThreadDying) { - streamingThread?.Join(); + if (streamingThread != null && !streamingThread.Join(1000)) + { + DebugConsole.ThrowError("Sound stream thread join timed out!"); + } areStreamsPlaying = true; streamingThread = new Thread(UpdateStreaming) { @@ -639,10 +642,7 @@ namespace Barotrauma.Sounds bool killThread = false; while (!killThread) { - lock (threadDeathMutex) - { - areStreamsPlaying = false; - } + killThread = true; for (int i = 0; i < playingChannels.Length; i++) { lock (playingChannels[i]) @@ -654,10 +654,7 @@ namespace Barotrauma.Sounds { if (playingChannels[i][j].IsPlaying) { - lock (threadDeathMutex) - { - areStreamsPlaying = true; - } + killThread = false; playingChannels[i][j].UpdateStream(); } else @@ -678,7 +675,7 @@ namespace Barotrauma.Sounds } lock (threadDeathMutex) { - killThread = !areStreamsPlaying; + areStreamsPlaying = !killThread; } Thread.Sleep(10); //TODO: use a separate thread for network audio? } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs index 9a8404fbf..53ae31dd9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs @@ -3,7 +3,7 @@ using Barotrauma.Sounds; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -73,8 +73,8 @@ namespace Barotrauma private static float updateMusicTimer; //ambience - private static List waterAmbiences = new List(); - private static SoundChannel[] waterAmbienceChannels = new SoundChannel[2]; + private static Sound waterAmbienceIn, waterAmbienceOut, waterAmbienceMoving; + private static SoundChannel[] waterAmbienceChannels = new SoundChannel[3]; private static float ambientSoundTimer; private static Vector2 ambientSoundInterval = new Vector2(20.0f, 40.0f); //x = min, y = max @@ -148,7 +148,7 @@ namespace Barotrauma } soundElements.AddRange(mainElement.Elements()); } - + SoundCount = 1 + soundElements.Count(); var startUpSoundElement = soundElements.Find(e => e.Name.ToString().Equals("startupsound", StringComparison.OrdinalIgnoreCase)); @@ -159,11 +159,13 @@ namespace Barotrauma } yield return CoroutineStatus.Running; - + List> miscSoundList = new List>(); - damageSounds = damageSounds ?? new List(); - musicClips = musicClips ?? new List(); - + damageSounds ??= new List(); + musicClips ??= new List(); + + bool firstWaterAmbienceLoaded = false; + foreach (XElement soundElement in soundElements) { yield return CoroutineStatus.Running; @@ -195,17 +197,57 @@ namespace Barotrauma FlowSounds.AddIfNotNull(GameMain.SoundManager.LoadSound(soundElement, false)); break; case "waterambience": - waterAmbiences.AddIfNotNull(GameMain.SoundManager.LoadSound(soundElement, false)); + //backwards compatibility (1st waterambience used to be played both inside and outside, 2nd when moving) + if (!firstWaterAmbienceLoaded) + { + waterAmbienceIn?.Dispose(); + waterAmbienceOut?.Dispose(); + if (File.Exists(soundElement.GetAttributeString("file", ""))) + { + waterAmbienceIn = GameMain.SoundManager.LoadSound(soundElement, false); + waterAmbienceOut = GameMain.SoundManager.LoadSound(soundElement, false); + } + else + { + waterAmbienceIn = GameMain.SoundManager.LoadSound(soundElement, false, "Content/Sounds/Water/WaterAmbienceIn.ogg"); + waterAmbienceOut = GameMain.SoundManager.LoadSound(soundElement, false, "Content/Sounds/Water/WaterAmbienceOut.ogg"); + } + firstWaterAmbienceLoaded = true; + } + else + { + waterAmbienceMoving?.Dispose(); + if (File.Exists(soundElement.GetAttributeString("file", ""))) + { + waterAmbienceMoving = GameMain.SoundManager.LoadSound(soundElement, false); + } + else + { + waterAmbienceMoving = GameMain.SoundManager.LoadSound(soundElement, false, "Content/Sounds/Water/WaterAmbienceMoving.ogg"); + } + } + break; + case "waterambiencein": + waterAmbienceIn?.Dispose(); + waterAmbienceIn = GameMain.SoundManager.LoadSound(soundElement, false); + break; + case "waterambienceout": + waterAmbienceOut?.Dispose(); + waterAmbienceOut = GameMain.SoundManager.LoadSound(soundElement, false); + break; + case "waterambiencemoving": + waterAmbienceMoving?.Dispose(); + waterAmbienceMoving = GameMain.SoundManager.LoadSound(soundElement, false); break; case "damagesound": Sound damageSound = GameMain.SoundManager.LoadSound(soundElement, false); if (damageSound == null) { continue; } - + string damageSoundType = soundElement.GetAttributeString("damagesoundtype", "None"); damageSounds.Add(new DamageSound( - damageSound, - soundElement.GetAttributeVector2("damagerange", Vector2.Zero), - damageSoundType, + damageSound, + soundElement.GetAttributeVector2("damagerange", Vector2.Zero), + damageSoundType, soundElement.GetAttributeString("requiredtag", ""))); break; @@ -218,15 +260,15 @@ namespace Barotrauma break; } } - catch (FileNotFoundException e) + catch (System.IO.FileNotFoundException e) { DebugConsole.ThrowError("Error while initializing SoundPlayer.", e); - } + } } musicClips.RemoveAll(mc => !soundElements.Any(e => SoundElementsEquivalent(mc.Element, e))); - for (int i=0;i mc.File == currentMusic[i].Filename)) { @@ -246,12 +288,6 @@ namespace Barotrauma }); FlowSounds.RemoveAll(s => s.Disposed); - waterAmbiences.ForEach(s => - { - if (!soundElements.Any(e => SoundElementsEquivalent(s.XElement, e))) { s.Dispose(); } - }); - waterAmbiences.RemoveAll(s => s.Disposed); - damageSounds.ForEach(s => { if (!soundElements.Any(e => SoundElementsEquivalent(s.sound.XElement, e))) { s.sound.Dispose(); } @@ -273,7 +309,7 @@ namespace Barotrauma fireVolumeLeft = new float[2]; fireVolumeRight = new float[2]; - miscSounds = miscSoundList.ToLookup(kvp => kvp.Key, kvp => kvp.Value); + miscSounds = miscSoundList.ToLookup(kvp => kvp.Key, kvp => kvp.Value); Initialized = true; @@ -282,7 +318,7 @@ namespace Barotrauma yield return CoroutineStatus.Success; } - + public static void Update(float deltaTime) { @@ -293,27 +329,27 @@ namespace Barotrauma if (startUpSound != null && !GameMain.SoundManager.IsPlaying(startUpSound)) { startUpSound.Dispose(); - startUpSound = null; + startUpSound = null; } //stop water sounds if no sub is loaded - if (Submarine.MainSub == null || Screen.Selected != GameMain.GameScreen) + if (Submarine.MainSub == null || Screen.Selected != GameMain.GameScreen) { for (int i = 0; i < waterAmbienceChannels.Length; i++) { - if (waterAmbienceChannels[i] == null) continue; + if (waterAmbienceChannels[i] == null) { continue; } waterAmbienceChannels[i].FadeOutAndDispose(); waterAmbienceChannels[i] = null; } for (int i = 0; i < FlowSounds.Count; i++) { - if (flowSoundChannels[i] == null) continue; + if (flowSoundChannels[i] == null) { continue; } flowSoundChannels[i].FadeOutAndDispose(); flowSoundChannels[i] = null; } for (int i = 0; i < fireSoundChannels.Length; i++) { - if (fireSoundChannels[i] == null) continue; + if (fireSoundChannels[i] == null) { continue; } fireSoundChannels[i].FadeOutAndDispose(); fireSoundChannels[i] = null; } @@ -333,17 +369,20 @@ namespace Barotrauma } } - UpdateWaterAmbience(ambienceVolume); + UpdateWaterAmbience(ambienceVolume, deltaTime); UpdateWaterFlowSounds(deltaTime); UpdateRandomAmbience(deltaTime); - UpdateFireSounds(deltaTime); + UpdateFireSounds(deltaTime); } - private static void UpdateWaterAmbience(float ambienceVolume) + private static void UpdateWaterAmbience(float ambienceVolume, float deltaTime) { + if (GameMain.SoundManager.Disabled) { return; } + //how fast the sub is moving, scaled to 0.0 -> 1.0 float movementSoundVolume = 0.0f; + float insideSubFactor = 0.0f; foreach (Submarine sub in Submarine.Loaded) { float movementFactor = (sub.Velocity == Vector2.Zero) ? 0.0f : sub.Velocity.Length() / 10.0f; @@ -352,7 +391,12 @@ namespace Barotrauma if (Character.Controlled == null || Character.Controlled.Submarine != sub) { float dist = Vector2.Distance(GameMain.GameScreen.Cam.WorldViewCenter, sub.WorldPosition); - movementFactor = movementFactor / Math.Max(dist / 1000.0f, 1.0f); + movementFactor /= Math.Max(dist / 1000.0f, 1.0f); + insideSubFactor = Math.Max(1.0f / Math.Max(dist / 1000.0f, 1.0f), insideSubFactor); + } + else + { + insideSubFactor = 1.0f; } movementSoundVolume = Math.Max(movementSoundVolume, movementFactor); @@ -365,28 +409,38 @@ namespace Barotrauma } } - if (waterAmbiences.Count > 1) + for (int i = 0; i < 3; i++) { - if (waterAmbienceChannels[0] == null || !waterAmbienceChannels[0].IsPlaying) + float volume = 0.0f; + Sound sound = null; + switch (i) { - waterAmbienceChannels[0] = waterAmbiences[0].Play(ambienceVolume * (1.0f - movementSoundVolume),"waterambience"); - //waterAmbiences[0].Loop(waterAmbienceIndexes[0], ambienceVolume * (1.0f - movementSoundVolume)); - waterAmbienceChannels[0].Looping = true; - } - else - { - waterAmbienceChannels[0].Gain = ambienceVolume * (1.0f - movementSoundVolume); + case 0: + volume = ambienceVolume * (1.0f - movementSoundVolume) * insideSubFactor; + sound = waterAmbienceIn; + break; + case 1: + volume = ambienceVolume * movementSoundVolume * insideSubFactor; + sound = waterAmbienceMoving; + break; + case 2: + volume = 1.0f - insideSubFactor; + sound = waterAmbienceOut; + break; } - if (waterAmbienceChannels[1] == null || !waterAmbienceChannels[1].IsPlaying) + if ((waterAmbienceChannels[i] == null || !waterAmbienceChannels[i].IsPlaying) && volume > 0.01f) { - waterAmbienceChannels[1] = waterAmbiences[1].Play(ambienceVolume * movementSoundVolume, "waterambience"); - //waterAmbienceIndexes[1] = waterAmbiences[1].Loop(waterAmbienceIndexes[1], ambienceVolume * movementSoundVolume); - waterAmbienceChannels[1].Looping = true; + waterAmbienceChannels[i] = sound.Play(volume, "waterambience"); + waterAmbienceChannels[i].Looping = true; } - else + else if (waterAmbienceChannels[i] != null) { - waterAmbienceChannels[1].Gain = ambienceVolume * movementSoundVolume; + waterAmbienceChannels[i].Gain += deltaTime * Math.Sign(volume - waterAmbienceChannels[i].Gain); + if (waterAmbienceChannels[i].Gain < 0.01f) + { + waterAmbienceChannels[i].FadeOutAndDispose(); + } } } } @@ -401,17 +455,25 @@ namespace Barotrauma Vector2 listenerPos = new Vector2(GameMain.SoundManager.ListenerPosition.X, GameMain.SoundManager.ListenerPosition.Y); foreach (Gap gap in Gap.GapList) { - if (gap.Open < 0.01f) continue; - float gapFlow = Math.Abs(gap.LerpedFlowForce.X) + Math.Abs(gap.LerpedFlowForce.Y) * 2.5f; - - if (gapFlow < 10.0f) continue; - - int flowSoundIndex = (int)Math.Floor(MathHelper.Clamp(gapFlow / MaxFlowStrength, 0, FlowSounds.Count)); - flowSoundIndex = Math.Min(flowSoundIndex, FlowSounds.Count - 1); - Vector2 diff = gap.WorldPosition - listenerPos; if (Math.Abs(diff.X) < FlowSoundRange && Math.Abs(diff.Y) < FlowSoundRange) { + if (gap.Open < 0.01f) { continue; } + float gapFlow = Math.Abs(gap.LerpedFlowForce.X) + Math.Abs(gap.LerpedFlowForce.Y) * 2.5f; + if (!gap.IsRoomToRoom) { gapFlow *= 2.0f; } + if (gapFlow < 10.0f) { continue; } + + if (gap.linkedTo.Count == 2 && gap.linkedTo[0] is Hull hull1 && gap.linkedTo[1] is Hull hull2) + { + //no flow sounds between linked hulls (= rooms consisting of multiple hulls) + if (hull1.linkedTo.Contains(hull2)) { continue; } + if (hull1.linkedTo.Any(h => h.linkedTo.Contains(hull1) && h.linkedTo.Contains(hull2))) { continue; } + if (hull2.linkedTo.Any(h => h.linkedTo.Contains(hull1) && h.linkedTo.Contains(hull2))) { continue; } + } + + int flowSoundIndex = (int)Math.Floor(MathHelper.Clamp(gapFlow / MaxFlowStrength, 0, FlowSounds.Count)); + flowSoundIndex = Math.Min(flowSoundIndex, FlowSounds.Count - 1); + float dist = diff.Length(); float distFallOff = dist / FlowSoundRange; if (distFallOff >= 0.99f) continue; @@ -419,11 +481,11 @@ namespace Barotrauma //flow at the left side if (diff.X < 0) { - targetFlowLeft[flowSoundIndex] = 1.0f - distFallOff; + targetFlowLeft[flowSoundIndex] += 1.0f - distFallOff; } else { - targetFlowRight[flowSoundIndex] = 1.0f - distFallOff; + targetFlowRight[flowSoundIndex] += 1.0f - distFallOff; } } } @@ -432,10 +494,10 @@ namespace Barotrauma { flowVolumeLeft[i] = (targetFlowLeft[i] < flowVolumeLeft[i]) ? Math.Max(targetFlowLeft[i], flowVolumeLeft[i] - deltaTime) : - Math.Min(targetFlowLeft[i], flowVolumeLeft[i] + deltaTime); + Math.Min(targetFlowLeft[i], flowVolumeLeft[i] + deltaTime * 10.0f); flowVolumeRight[i] = (targetFlowRight[i] < flowVolumeRight[i]) ? Math.Max(targetFlowRight[i], flowVolumeRight[i] - deltaTime) : - Math.Min(targetFlowRight[i], flowVolumeRight[i] + deltaTime); + Math.Min(targetFlowRight[i], flowVolumeRight[i] + deltaTime * 10.0f); if (flowVolumeLeft[i] < 0.05f && flowVolumeRight[i] < 0.05f) { @@ -869,20 +931,22 @@ namespace Barotrauma PlayDamageSound(damageType, damage, bodyPosition, 800.0f); } + private static readonly List tempList = new List(); public static void PlayDamageSound(string damageType, float damage, Vector2 position, float range = 2000.0f, IEnumerable tags = null) { damage = MathHelper.Clamp(damage + Rand.Range(-10.0f, 10.0f), 0.0f, 100.0f); - var sounds = damageSounds.FindAll(s => - (s.damageRange == Vector2.Zero || - (damage >= s.damageRange.X && damage <= s.damageRange.Y)) && - s.damageType == damageType && - (tags == null ? string.IsNullOrEmpty(s.requiredTag) : tags.Contains(s.requiredTag))); - - if (!sounds.Any()) return; - - int selectedSound = Rand.Int(sounds.Count); - sounds[selectedSound].sound.Play(1.0f, range, position, muffle: ShouldMuffleSound(Character.Controlled, position, range, null)); - } - + tempList.Clear(); + foreach (var s in damageSounds) + { + if ((s.damageRange == Vector2.Zero || + (damage >= s.damageRange.X && damage <= s.damageRange.Y)) && + string.Equals(s.damageType, damageType, StringComparison.OrdinalIgnoreCase) && + (tags == null ? string.IsNullOrEmpty(s.requiredTag) : tags.Contains(s.requiredTag))) + { + tempList.Add(s); + } + } + tempList.GetRandom().sound?.Play(1.0f, range, position, muffle: ShouldMuffleSound(Character.Controlled, position, range, null)); + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/VoipSound.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/VoipSound.cs index 974a67cdd..734925a07 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/VoipSound.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/VoipSound.cs @@ -44,13 +44,15 @@ namespace Barotrauma.Sounds new BandpassFilter(VoipConfig.FREQUENCY, 2000) }; + private float gain; public float Gain { - get { return soundChannel == null ? 0.0f : soundChannel.Gain; } + get { return soundChannel == null ? 0.0f : gain; } set { if (soundChannel == null) { return; } - soundChannel.Gain = value; + gain = value; + soundChannel.Gain = value * GameMain.Config.VoiceChatVolume; } } @@ -75,6 +77,7 @@ namespace Barotrauma.Sounds SoundChannel chn = new SoundChannel(this, 1.0f, null, 0.4f, 1.0f, "voip", false); soundChannel = chn; + Gain = 1.0f; } public override float GetAmplitudeAtPlaybackPos(int playbackPos) @@ -98,6 +101,12 @@ namespace Barotrauma.Sounds for (int i = 0; i < readSamples; i++) { float fVal = ShortToFloat(buffer[i]); + + if (gain * GameMain.Config.VoiceChatVolume > 1.0f) //TODO: take distance into account? + { + fVal = Math.Clamp(fVal * gain * GameMain.Config.VoiceChatVolume, -1.0f, 1.0f); + } + if (UseMuffleFilter) { foreach (var filter in muffleFilters) @@ -114,19 +123,6 @@ namespace Barotrauma.Sounds } buffer[i] = FloatToShort(fVal); } - if (UseMuffleFilter) - { - ApplyFilters(muffleFilters, buffer, readSamples); - } - - if (UseRadioFilter) - { - ApplyFilters(radioFilters, buffer, readSamples); - } - } - - private void ApplyFilters(IEnumerable filters, short[] buffer, int readSamples) - { } public override SoundChannel Play(float gain, float range, Vector2 position, bool muffle = false) @@ -152,13 +148,21 @@ namespace Barotrauma.Sounds public override int FillStreamBuffer(int samplePos, short[] buffer) { queue.RetrieveBuffer(bufferID, out int compressedSize, out byte[] compressedBuffer); - if (compressedSize > 0) + try { - VoipConfig.Decoder.Decode(compressedBuffer, 0, compressedSize, buffer, 0, VoipConfig.BUFFER_SIZE); - bufferID++; - return VoipConfig.BUFFER_SIZE * 2; + if (compressedSize > 0) + { + VoipConfig.Decoder.Decode(compressedBuffer, 0, compressedSize, buffer, 0, VoipConfig.BUFFER_SIZE); + bufferID++; + return VoipConfig.BUFFER_SIZE * 2; + } + if (bufferID < queue.LatestBufferID - (VoipQueue.BUFFER_COUNT - 1)) bufferID = queue.LatestBufferID - (VoipQueue.BUFFER_COUNT - 1); + } + catch (Exception e) + { + DebugConsole.ThrowError($"Failed to decode Opus buffer (buffer size {compressedBuffer.Length}, packet size {compressedSize})", e); + bufferID = queue.LatestBufferID - (VoipQueue.BUFFER_COUNT - 1); } - if (bufferID < queue.LatestBufferID - (VoipQueue.BUFFER_COUNT - 1)) bufferID = queue.LatestBufferID - (VoipQueue.BUFFER_COUNT - 1); return 0; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sprite/DecorativeSprite.cs b/Barotrauma/BarotraumaClient/ClientSource/Sprite/DecorativeSprite.cs index 8c9c45a86..64fc96a80 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sprite/DecorativeSprite.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sprite/DecorativeSprite.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using System.Xml.Linq; -using SpriteParams = Barotrauma.RagdollParams.SpriteParams; namespace Barotrauma { @@ -64,6 +63,14 @@ namespace Barotrauma } } + private float scale; + [Serialize(1.0f, true), Editable] + public float Scale + { + get { return scale; } + private set { scale = MathHelper.Clamp(value, 0.0f, 10.0f); } + } + [Serialize(AnimationType.None, false), Editable] public AnimationType RotationAnim { get; private set; } @@ -73,6 +80,9 @@ namespace Barotrauma [Serialize(0, false, description: "If > 0, only one sprite of the same group is used (chosen randomly)"), Editable(ReadOnly = true)] public int RandomGroupID { get; private set; } + [Serialize("1.0,1.0,1.0,1.0", true), Editable()] + public Color Color { get; set; } + /// /// The sprite is only drawn if these conditions are fulfilled /// @@ -158,7 +168,7 @@ namespace Barotrauma { foreach (int spriteGroup in spriteGroups.Keys) { - for (int i = 0; i < spriteGroups.Count; i++) + for (int i = 0; i < spriteGroups[spriteGroup].Count; i++) { var decorativeSprite = spriteGroups[spriteGroup][i]; if (decorativeSprite == null) { continue; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sprite/DeformableSprite.cs b/Barotrauma/BarotraumaClient/ClientSource/Sprite/DeformableSprite.cs index 6d54711f8..bde2b3cb8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sprite/DeformableSprite.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sprite/DeformableSprite.cs @@ -33,10 +33,12 @@ namespace Barotrauma get { return effect; } } + public bool Invert { get; set; } + private Point spritePos; private Point spriteSize; - partial void InitProjSpecific(XElement element, int? subdivisionsX, int? subdivisionsY, bool lazyLoad) + partial void InitProjSpecific(XElement element, int? subdivisionsX, int? subdivisionsY, bool lazyLoad, bool invert) { if (effect == null) { @@ -47,6 +49,8 @@ namespace Barotrauma effect = GameMain.Instance.Content.Load("Effects/deformshader_opengl"); #endif } + + Invert = invert; //use subdivisions configured in the xml if the arguments passed to the method are null Vector2 subdivisionsInXml = element.GetAttributeVector2("subdivisions", Vector2.One); @@ -121,6 +125,12 @@ namespace Barotrauma uvBottomRight = Vector2.Divide((pos + size).ToVector2(), textureSize); uvTopLeftFlipped = Vector2.Divide(new Vector2(pos.X + size.X, pos.Y), textureSize); uvBottomRightFlipped = Vector2.Divide(new Vector2(pos.X, pos.Y + size.Y), textureSize); + if (Invert) + { + var temp = uvBottomRightFlipped; + uvBottomRightFlipped = uvTopLeftFlipped; + uvTopLeftFlipped = temp; + } for (int i = 0; i < 2; i++) { @@ -267,7 +277,7 @@ namespace Barotrauma Matrix.CreateTranslation(pos); } - public void Draw(Camera cam, Vector3 pos, Vector2 origin, float rotate, Vector2 scale, Color color, bool flip = false, bool mirror = false) + public void Draw(Camera cam, Vector3 pos, Vector2 origin, float rotate, Vector2 scale, Color color, bool mirror = false, bool invert = false) { if (Sprite.Texture == null) { return; } if (!initialized) { Init(); } @@ -291,13 +301,13 @@ namespace Barotrauma effect.Parameters["deformArray"].SetValue(deformAmount); effect.Parameters["deformArrayWidth"].SetValue(deformArrayWidth); effect.Parameters["deformArrayHeight"].SetValue(deformArrayHeight); - if (mirror) + if (invert) { - flip = !flip; + mirror = !mirror; } - effect.Parameters["uvTopLeft"].SetValue(flip ? uvTopLeftFlipped : uvTopLeft); - effect.Parameters["uvBottomRight"].SetValue(flip ? uvBottomRightFlipped : uvBottomRight); - effect.GraphicsDevice.SetVertexBuffer(flip ? flippedVertexBuffer : vertexBuffer); + effect.Parameters["uvTopLeft"].SetValue(mirror ? uvTopLeftFlipped : uvTopLeft); + effect.Parameters["uvBottomRight"].SetValue(mirror ? uvBottomRightFlipped : uvBottomRight); + effect.GraphicsDevice.SetVertexBuffer(mirror ? flippedVertexBuffer : vertexBuffer); effect.GraphicsDevice.Indices = indexBuffer; effect.CurrentTechnique.Passes[0].Apply(); effect.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, triangleCount); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs b/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs index c7beda481..a64df8a01 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Collections.Generic; @@ -21,6 +21,11 @@ namespace Barotrauma } } + public bool Loaded + { + get { return texture != null && !cannotBeLoaded; } + } + public Sprite(Texture2D texture, Rectangle? sourceRectangle, Vector2? newOffset, float newRotation = 0.0f) { this.texture = texture; @@ -42,7 +47,12 @@ namespace Barotrauma partial void LoadTexture(ref Vector4 sourceVector, ref bool shouldReturn) { - texture = LoadTexture(this.FilePath); + texture = LoadTexture(this.FilePath, out Sprite reusedSprite, Compress); + if (reusedSprite != null) + { + FilePath = string.Intern(reusedSprite.FilePath); + FullPath = string.Intern(reusedSprite.FullPath); + } if (texture == null) { @@ -56,11 +66,25 @@ namespace Barotrauma public void EnsureLazyLoaded() { - if (!lazyLoad || texture != null || cannotBeLoaded) { return; } + if (!LazyLoad || texture != null || cannotBeLoaded) { return; } Vector4 sourceVector = Vector4.Zero; bool temp2 = false; - LoadTexture(ref sourceVector, ref temp2); + int maxLoadRetries = 3; + for (int i = 0; i <= maxLoadRetries; i++) + { + try + { + LoadTexture(ref sourceVector, ref temp2); + } + catch (System.IO.IOException) + { + if (i == maxLoadRetries || !File.Exists(FilePath)) { throw; } + DebugConsole.NewMessage("Loading sprite \"" + FilePath + "\" failed, retrying in 250 ms..."); + System.Threading.Thread.Sleep(500); + } + } + if (sourceRect.Width == 0 && sourceRect.Height == 0) { sourceRect = new Rectangle((int)sourceVector.X, (int)sourceVector.Y, (int)sourceVector.Z, (int)sourceVector.W); @@ -69,11 +93,6 @@ namespace Barotrauma size.Y *= sourceRect.Height; RelativeOrigin = SourceElement.GetAttributeVector2("origin", new Vector2(0.5f, 0.5f)); } - foreach (Sprite s in LoadedSprites) - { - if (s == this) { continue; } - if (s.FullPath == FullPath && s.texture != null) { s.texture = texture; } - } if (texture == null) { cannotBeLoaded = true; @@ -85,7 +104,7 @@ namespace Barotrauma public void ReloadTexture(IEnumerable spritesToUpdate) { texture.Dispose(); - texture = TextureLoader.FromFile(FilePath); + texture = TextureLoader.FromFile(FilePath, Compress); foreach (Sprite sprite in spritesToUpdate) { sprite.texture = texture; @@ -99,6 +118,12 @@ namespace Barotrauma public static Texture2D LoadTexture(string file) { + return LoadTexture(file, out _); + } + + public static Texture2D LoadTexture(string file, out Sprite reusedSprite, bool compress = true) + { + reusedSprite = null; if (string.IsNullOrWhiteSpace(file)) { Texture2D t = null; @@ -111,13 +136,17 @@ namespace Barotrauma file = Path.GetFullPath(file); foreach (Sprite s in LoadedSprites) { - if (s.FullPath == file && s.texture != null && !s.texture.IsDisposed) { return s.texture; } + if (s.FullPath == file && s.texture != null && !s.texture.IsDisposed) + { + reusedSprite = s; + return s.texture; + } } if (File.Exists(file)) { ToolBox.IsProperFilenameCase(file); - return TextureLoader.FromFile(file); + return TextureLoader.FromFile(file, compress); } else { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Traitors/TraitorMissionPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Traitors/TraitorMissionPrefab.cs index 42d8d7f84..deed55665 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Traitors/TraitorMissionPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Traitors/TraitorMissionPrefab.cs @@ -17,6 +17,7 @@ namespace Barotrauma public static void Init() { + List.Clear(); var files = GameMain.Instance.GetFilesOfType(ContentType.TraitorMissions); foreach (ContentFile file in files) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpEncoder.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpEncoder.cs index f6affb2cb..f6c015be6 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpEncoder.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpEncoder.cs @@ -34,7 +34,7 @@ using System; using System.Collections.Generic; using System.Configuration; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System.Text; #if NET_4_0 using System.Web.Configuration; @@ -225,7 +225,7 @@ namespace RestSharp.Contrib if (String.IsNullOrEmpty(value)) return value; - MemoryStream result = new MemoryStream(); + System.IO.MemoryStream result = new System.IO.MemoryStream(); int length = value.Length; for (int i = 0; i < length; i++) UrlPathEncodeChar(value[i], result); @@ -248,7 +248,7 @@ namespace RestSharp.Contrib if (count < 0 || count > blen - offset) throw new ArgumentOutOfRangeException("count"); - MemoryStream result = new MemoryStream(count); + System.IO.MemoryStream result = new System.IO.MemoryStream(count); int end = offset + count; for (int i = offset; i < end; i++) UrlEncodeChar((char)bytes[i], result, false); @@ -575,7 +575,7 @@ namespace RestSharp.Contrib ); } - internal static void UrlEncodeChar(char c, Stream result, bool isUnicode) + internal static void UrlEncodeChar(char c, System.IO.Stream result, bool isUnicode) { if (c > 255) { @@ -632,7 +632,7 @@ namespace RestSharp.Contrib result.WriteByte((byte)c); } - internal static void UrlPathEncodeChar(char c, Stream result) + internal static void UrlPathEncodeChar(char c, System.IO.Stream result) { if (c < 33 || c > 126) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpUtility.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpUtility.cs index 1ba481dc2..9f0ee6910 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpUtility.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/HttpUtility.cs @@ -34,7 +34,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System.Security.Permissions; using System.Text; @@ -76,6 +76,7 @@ namespace RestSharp.Contrib #region Methods + /* public static void HtmlAttributeEncode(string s, TextWriter output) { if (output == null) @@ -92,6 +93,7 @@ namespace RestSharp.Contrib output.Write(HttpEncoder.HtmlAttributeEncode(s)); #endif } + */ public static string HtmlAttributeEncode(string s) { @@ -113,7 +115,7 @@ namespace RestSharp.Contrib return UrlDecode(str, Encoding.UTF8); } - static char[] GetChars(MemoryStream b, Encoding e) + static char[] GetChars(System.IO.MemoryStream b, Encoding e) { return e.GetChars(b.GetBuffer(), 0, (int)b.Length); } @@ -260,7 +262,7 @@ namespace RestSharp.Contrib throw new ArgumentOutOfRangeException("count"); StringBuilder output = new StringBuilder(); - MemoryStream acc = new MemoryStream(); + System.IO.MemoryStream acc = new System.IO.MemoryStream(); int end = count + offset; int xchar; @@ -354,7 +356,7 @@ namespace RestSharp.Contrib if (count < 0 || offset > len - count) throw new ArgumentOutOfRangeException("count"); - MemoryStream result = new MemoryStream(); + System.IO.MemoryStream result = new System.IO.MemoryStream(); int end = offset + count; for (int i = offset; i < end; i++) { @@ -492,7 +494,7 @@ namespace RestSharp.Contrib if (str.Length == 0) return new byte[0]; - MemoryStream result = new MemoryStream(str.Length); + System.IO.MemoryStream result = new System.IO.MemoryStream(str.Length); foreach (char c in str) { HttpEncoder.UrlEncodeChar(c, result, true); @@ -525,6 +527,7 @@ namespace RestSharp.Contrib /// /// The HTML string to decode /// The TextWriter output stream containing the decoded string. + /* public static void HtmlDecode(string s, TextWriter output) { if (output == null) @@ -545,6 +548,7 @@ namespace RestSharp.Contrib #endif } } + */ public static string HtmlEncode(string s) { @@ -566,6 +570,7 @@ namespace RestSharp.Contrib /// /// The string to encode. /// The TextWriter output stream containing the encoded string. + /* public static void HtmlEncode(string s, TextWriter output) { if (output == null) @@ -586,6 +591,8 @@ namespace RestSharp.Contrib #endif } } + */ + #if NET_4_0 public static string HtmlEncode (object value) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/LocalizationCSVtoXML.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/LocalizationCSVtoXML.cs index d67ad68b2..f98cdc0dc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Utils/LocalizationCSVtoXML.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/LocalizationCSVtoXML.cs @@ -1,7 +1,7 @@ #if DEBUG using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Text; using System.Text.RegularExpressions; using System.Linq; @@ -41,7 +41,7 @@ namespace Barotrauma if (Directory.Exists(conversationsPath + $"/{languageNoWhitespace}")) { - string[] conversationFileArray = Directory.GetFiles(conversationsPath + $"/{languageNoWhitespace}", "*.csv", SearchOption.AllDirectories); + IEnumerable conversationFileArray = Directory.GetFiles(conversationsPath + $"/{languageNoWhitespace}", "*.csv", System.IO.SearchOption.AllDirectories); if (conversationFileArray != null) { @@ -58,7 +58,7 @@ namespace Barotrauma if (Directory.Exists(infoTextPath + $"/{languageNoWhitespace}")) { - string[] infoTextFileArray = Directory.GetFiles(infoTextPath + $"/{languageNoWhitespace}", "*.csv", SearchOption.AllDirectories); + IEnumerable infoTextFileArray = Directory.GetFiles(infoTextPath + $"/{languageNoWhitespace}", "*.csv", System.IO.SearchOption.AllDirectories); if (infoTextFileArray != null) { @@ -145,7 +145,7 @@ namespace Barotrauma } else if (split[0].Contains(".") && !split[0].Any(char.IsUpper)) // An empty field { - xmlContent.Add($"<{split[0]}>"); + xmlContent.Add($"<{split[0]}>"); } else // A header { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/Quad.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/Quad.cs new file mode 100644 index 000000000..b373c9e7e --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/Quad.cs @@ -0,0 +1,67 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Barotrauma +{ + static class Quad + { + private static VertexBuffer vertexBuffer = null; + private static IndexBuffer indexBuffer = null; + private static BasicEffect basicEffect = null; + private static GraphicsDevice graphicsDevice = null; + + public static void Init(GraphicsDevice graphics) + { + if (graphicsDevice != null) { return; } + + graphicsDevice = graphics; + + vertexBuffer = new VertexBuffer(graphics, VertexPositionTexture.VertexDeclaration, 4, BufferUsage.WriteOnly); + indexBuffer = new IndexBuffer(graphics, IndexElementSize.SixteenBits, 4, BufferUsage.WriteOnly); + + InitVertexData(); + indexBuffer.SetData(new ushort[] { 0, 1, 2, 3 }); + + basicEffect = new BasicEffect(graphics) { TextureEnabled = true }; + + GameMain.Instance.OnResolutionChanged += () => + { + InitVertexData(); + }; + } + + private static void InitVertexData() + { + Vector2 halfPixelOffset = Vector2.Zero; +#if LINUX || OSX + halfPixelOffset = new Vector2(0.5f / GameMain.GraphicsWidth, 0.5f / GameMain.GraphicsHeight); +#endif + + VertexPositionTexture[] vertices = + { + new VertexPositionTexture(new Vector3(-1f, -1f, 1f), new Vector2(0f, 1f) + halfPixelOffset), + new VertexPositionTexture(new Vector3(-1f, 1f, 1f), new Vector2(0f, 0f) + halfPixelOffset), + new VertexPositionTexture(new Vector3(1f, -1f, 1f), new Vector2(1f, 1f) + halfPixelOffset), + new VertexPositionTexture(new Vector3(1f, 1f, 1f), new Vector2(1f, 0f) + halfPixelOffset) + }; + + vertexBuffer.SetData(vertices); + } + + public static void UseBasicEffect(Texture2D texture) + { + basicEffect.Texture = texture; + basicEffect.CurrentTechnique.Passes[0].Apply(); + } + + public static void Render() + { + graphicsDevice.SetVertexBuffer(vertexBuffer); + graphicsDevice.Indices = indexBuffer; + graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleStrip, 0, 0, 2); + } + } +} diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/TextureLoader.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/TextureLoader.cs index 05e0e93dc..e729ecb33 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Utils/TextureLoader.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/TextureLoader.cs @@ -1,7 +1,9 @@ +using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; -using System.IO; +using Barotrauma.IO; using System.Threading.Tasks; +using Lidgren.Network; using Color = Microsoft.Xna.Framework.Color; namespace Barotrauma @@ -34,36 +36,186 @@ namespace Barotrauma }); } - public static Texture2D FromFile(string path, bool mipmap=false) + private static byte[] CompressDxt5(byte[] data, int width, int height) { - path = path.CleanUpPath(); - try + using (System.IO.MemoryStream mstream = new System.IO.MemoryStream()) { - using (Stream fileStream = File.OpenRead(path)) + for (int y = 0; y < height; y += 4) { - return FromStream(fileStream, path, mipmap); + for (int x = 0; x < width; x += 4) + { + int offset = x * 4 + y * 4 * width; + CompressDxt5Block(data, offset, width, mstream); + } } - - } - catch (Exception e) - { - DebugConsole.ThrowError("Loading texture \"" + path + "\" failed!", e); - return null; + return mstream.ToArray(); } } - public static Texture2D FromStream(Stream fileStream, string path=null, bool mipmap=false) + private static void CompressDxt5Block(byte[] data, int offset, int width, System.IO.Stream output) + { + int r1 = 255, g1 = 255, b1 = 255, a1 = 255; + int r2 = 0, g2 = 0, b2 = 0, a2 = 0; + + //determine the two colors to interpolate between: + //color 1 represents lowest luma, color 2 represents highest luma + for (int i = 0; i < 16; i++) + { + int pixelOffset = offset + (4 * ((i % 4) + (width * (i >> 2)))); + int r, g, b, a; + r = data[pixelOffset + 0]; + g = data[pixelOffset + 1]; + b = data[pixelOffset + 2]; + a = data[pixelOffset + 3]; + if (r * 299 + g * 587 + b * 114 < r1 * 299 + g1 * 587 + b1 * 114) + { + r1 = r; g1 = g; b1 = b; + } + if (r * 299 + g * 587 + b * 114 > r2 * 299 + g2 * 587 + b2 * 114) + { + r2 = r; g2 = g; b2 = b; + } + if (a < a1) { a1 = a; } + if (a > a2) { a2 = a; } + } + + //convert the colors to rgb565 (16-bit rgb) + int r1_565 = (r1 * 0x1f) / 0xff; if (r1_565 > 0x1f) { r1_565 = 0x1f; } + int g1_565 = (g1 * 0x3f) / 0xff; if (g1_565 > 0x3f) { g1_565 = 0x3f; } + int b1_565 = (b1 * 0x1f) / 0xff; if (b1_565 > 0x1f) { b1_565 = 0x1f; } + + int r2_565 = (r2 * 0x1f) / 0xff; if (r2_565 > 0x1f) { r2_565 = 0x1f; } + int g2_565 = (g2 * 0x3f) / 0xff; if (g2_565 > 0x3f) { g2_565 = 0x3f; } + int b2_565 = (b2 * 0x1f) / 0xff; if (b2_565 > 0x1f) { b2_565 = 0x1f; } + + //luma is also used to determine which color on the palette + //most closely resembles each pixel to compress, so we + //calculate this here + int y1 = r1 * 299 + g1 * 587 + b1 * 114; + int y2 = r2 * 299 + g2 * 587 + b2 * 114; + + byte[] newData = new byte[16]; + for (int i = 0; i < 16; i++) + { + int pixelOffset = offset + (4 * ((i % 4) + (width * (i >> 2)))); + int r, g, b, a; + r = data[pixelOffset + 0]; + g = data[pixelOffset + 1]; + b = data[pixelOffset + 2]; + a = data[pixelOffset + 3]; + + if (a1 < a2) + { + a -= a1; + a = (a * 0x7) / (a2 - a1); + if (a > 0x7) { a = 0x7; } + + switch (a) + { + case 0: + a = 1; + break; + case 1: + a = 7; + break; + case 2: + a = 6; + break; + case 3: + a = 5; + break; + case 4: + a = 4; + break; + case 5: + a = 3; + break; + case 6: + a = 2; + break; + case 7: + a = 0; + break; + } + } + else + { + a = 0; + } + + NetBitWriter.WriteUInt32((uint)a, 3, newData, 16 + (i * 3)); + + int y = r * 299 + g * 587 + b * 114; + + int max = y2 - y1; + int diffY = y - y1; + + int paletteIndex; + if (diffY < max / 4) + { + paletteIndex = 0; + } + else if (diffY < max / 2) + { + paletteIndex = 2; + } + else if (diffY < max * 3 / 4) + { + paletteIndex = 3; + } + else + { + paletteIndex = 1; + } + newData[12 + (i / 4)] |= (byte)(paletteIndex << (2 * (i % 4))); + } + + newData[0] = (byte)a2; + newData[1] = (byte)a1; + + newData[9] = (byte)((r1_565 << 3) | (g1_565 >> 3)); + newData[8] = (byte)((g1_565 << 5) | b1_565); + newData[11] = (byte)((r2_565 << 3) | (g2_565 >> 3)); + newData[10] = (byte)((g2_565 << 5) | b2_565); + + output.Write(newData, 0, 16); + } + + public static Texture2D FromFile(string path, bool compress = true, bool mipmap = false) + { + using (FileStream fileStream = File.OpenRead(path)) + { + return FromStream(fileStream, path, compress, mipmap); + } + } + + public static Texture2D FromStream(System.IO.Stream stream, string path = null, bool compress = true, bool mipmap = false) { try { - int width = 0; int height = 0; int channels = 0; + path = path.CleanUpPath(); byte[] textureData = null; - textureData = Texture2D.TextureDataFromStream(fileStream, out width, out height, out channels); + textureData = Texture2D.TextureDataFromStream(stream, out int width, out int height, out int channels); + + SurfaceFormat format = SurfaceFormat.Color; + if (GameMain.Config.TextureCompressionEnabled && compress) + { + if (((width & 0x03) == 0) && ((height & 0x03) == 0)) + { + textureData = CompressDxt5(textureData, width, height); + format = SurfaceFormat.Dxt5; + mipmap = false; + } + else + { + DebugConsole.NewMessage($"Could not compress a texture because the dimensions are a multiple of 4 (path: {path ?? "null"}, size: {width}x{height})", Color.Orange); + } + } Texture2D tex = null; CrossThread.RequestExecutionOnMainThread(() => { - tex = new Texture2D(_graphicsDevice, width, height, mipmap, SurfaceFormat.Color); + tex = new Texture2D(_graphicsDevice, width, height, mipmap, format); tex.SetData(textureData); }); return tex; @@ -74,7 +226,8 @@ namespace Barotrauma if (e is SharpDX.SharpDXException) { throw; } #endif - DebugConsole.ThrowError("Loading texture from stream failed!", e); + DebugConsole.ThrowError(string.IsNullOrEmpty(path) ? "Loading texture from stream failed!" : + "Loading texture \"" + path + "\" failed!", e); return null; } } diff --git a/Barotrauma/BarotraumaClient/Content/Effects/deformshader.xnb b/Barotrauma/BarotraumaClient/Content/Effects/deformshader.xnb index 35b0ae81bddd7029e438a6eb0d18c3f1c8f6496b..e40446c86289399c960ebfb2bdf7c878daa7697a 100644 GIT binary patch delta 353 zcmbQ^aMpz*!q2IkmBCkOB1a3~UPT55Uw5|%4#p#IU&~LNr69$^@Q0Cs!6m}U`Q+WJ zZ#-05oG)GUm>{f{(X;W&97gv1;>?oF{JhCt{5~cO42)a2AZjb$-Yd#GVsM4=wY8HO z1D6QU2nLWG3y?MdVjm#m0w)85!{+Zy%Q+b{CePK zGXoiu^O+#a7==UsyAE`Le552`qCKb^v8 zHpBAjpJQgfqZUoP(#QCJax&vw-f#Q@U<=*k1Q-}6Kj3qje4R%gZVk|Lo2T=;2rx2F yz9a9TE#s1!mS2<`oROH4S`?h0lbI5hT2zu+;hdk7U&O%38jx6AY{GRJ`fB1a2fk30i|ue)0W2jfm1&m|LQDM&Fh{9$BZaEWkoW^ecZ zbiLyFjgD4JjoVyHnF+l=P|(kaaR(Pf`69jGyG&(geyJw% zM>Ea~Isr6=0VKx)qz!=B2gta<2~@lJJJWK`$r4N=d_YkKW)J}c{QQ#*c*Q4c3(6xI zFFN^?faPQbeu>HPyzFrCTwXZ=ooTzX6@H%odn*5AL#syBs?D=`mmoXLhmmpfTtOEB KMyAP+6deGlPe-!= diff --git a/Barotrauma/BarotraumaClient/Content/Effects/deformshader_opengl.xnb b/Barotrauma/BarotraumaClient/Content/Effects/deformshader_opengl.xnb index 15bed2a787f63a1b04207b662afcb80eecabe786..507c1f1e38c66a1e07e0fa2baf77e564d6dbae58 100644 GIT binary patch delta 122 zcmbR0wA_^=!p|v%m0`KkM2;3daU})@Uw5|%4u*-%m)}mD<;cRq;LkYOkx6Rf&sF@) z3?WdqI^*Pe0q)6aOcI+H3m6J8GEcs$;GiwzlA4xZlpCCpn37r)oS&1K5|&z2l3L-M WpOat2z{nbqSX^w#z{t$NzyJW(MI=E0 delta 64 zcmZ4PI@O6I!p|v%l|fW-B1a2fs{#Xque)0W2SapwjLO7Wjx5X!{*03ynWQ!!5Kw2_ UtiaUFx0y@GP=JwXvW=1h02Yc5#{d8T diff --git a/Barotrauma/BarotraumaClient/Content/Effects/losshader.xnb b/Barotrauma/BarotraumaClient/Content/Effects/losshader.xnb index 3d0a76ecb88cfc96fb05cb55f406d258ae3484bd..b17c38ef3a9dbe6c9888f48bff8a4923c48f1162 100644 GIT binary patch literal 1397 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%0D(hi0#2aOPub#u!&KL1HR} zY1yiZvF2c7ldret{AU$Y*K4ZktBQhy8jfb9BXjh@Lb%X?^ZChTuaT6D$0QRNgJF{e zPU>{9gJ*CKALv{t2RO+Ie#pvMPZ-^(IpZPn#8}TX2T7>s0(1&ZD7hmSW(9)*eX&4D zL5c1mVvyne0ud~kdFaWXDWm01rx_m06puSaXjL7}BEx_r(I!|6W9hdP_*Tfxq2)Ss z(e`lb-T@rrzL|(mCq&Y0d_RmxW~&kB2k}Y%$VPx;lG)hQv8SV(?Q01(b#!z$Gk903 zhSPrAb~U4j*U1pIakb-uc5-Sw^zk>Nk3QF2NCv6YCU7A}4F?;6oMyT09_LMie(hcMO^tmJF5{w6u_d zFX0b%r&l@1HLiqq#+KqDMu#COh&W^j8AT|}u)ry!1S{#&hWm#UbvF3F*Ti#aD!fq6JcDcJF&0L;WG*$}21{^04Q;y3lF5p3-kC_f5Y+3}lZl9-TYM;)p4CTF zl4*lWAi?FoBvU%NizgFAGV}4UOhy;Vh`|g#r-<9>!a0YZjBdnckIl`nV3cBOqg#OR z9(lHgo1#1`Kl1B$j}-r5pMUd{%F-P<%S4oPNum}U?85m)*k-CUARCG$_7h;h)Urv= zsW79yHg#YCxmo>Ko^lwZ2i5g9muXl+2@hr!)zr6k4o4A%U(4sdG5I_UHK)P^H8iMm&UZWaf7550_7VapteSbMKse<05^KbV-a?abW>VZ95p`N(`z= z_8^=Qna+JmCQvJKD@sqE8*yC=!-%;6#`E^4(4xxRoKl~!7$oPZEeh+Ew0KzU)4z{x zd#I}R7tL3zy}J)wp|D7o3~L_i?JCw=Ck*F%b)-!+Z>TNu!O!{eT9ZMiSTHz6p>Ug( zjm9ldcS_dU+~*2{P~B(ePAN8j$>Ydu&GjmNl{;mCf;`Y?iV!sFVZbLry-I{9oEErQ zP_YHv?onjRx;Vy{>Kw1{I(K66Ep=VJJ@n%x0!6wc#swTy<9r5q(Z4aa;O67)>TFT` z-m3@EU9#S;?zsEr+T25`6oh7wisOC!fA*^+!XZ$56bGGe3tfiP?r|JQlvdzHEHT*W zq2AW#p+bGzBjdiijOIjv>Jzgy4|O$OT8za?cQ0BT_tKKdYhJHi`EKPQ^!b9m7roQV5pVxp2W$80VZs;Mx`Wki+|p@aEqe`S%d*uft#}kZD$B2m5*u~nz|)5r z*L3!cj`~@Yj#)=b%}s)qJ*cSaOzi#Zd9 KE=?3mkNpFcu=EuG diff --git a/Barotrauma/BarotraumaClient/Content/Effects/postprocess_opengl.xnb b/Barotrauma/BarotraumaClient/Content/Effects/postprocess_opengl.xnb index 8c8308fcc6b62f92e2d8c173c76d07d9185daeab..acc1f093050928e556afc1946894cbda8bae406a 100644 GIT binary patch delta 1010 zcmbVLJ#Q015S_hmOsrU#qyPsk!VdZ3INPB>$Pfi96d_R}Tm(gtF|p$u3SR5({DGw? z1qD(HgtMZdf?t5pN&JFTNK_P1((ngpY1pwt;`4P}bF=g2y_sFT`SkGck+HG5SXSY1 zx@)`~{WAry@?dGhfa>F4%SQLz<*}w)Y}D)><~(QW1ObVqlv@;h8Y9{ zSKQ2O1)14!Nmi7UJkPP8HasDZZG}wJ3if0ct?m`qm}`4BtA!W}QuqgBGA05hW-3(L z_Zf4_7B5{K!|9l1wrP%*nK#vwpX=XbTC_RWhhK!@^Z?um!soC5a-f7X90K3&1(qA@l_`wDpLCKgFy%ESFZ$BD|Mt~4W z?LCt)7WAUDgyBc@&?{e4Z%MLBB>%2nP)Xre~(N8;ziT+ zgvR1t!vUhMm0UNC3kYx?Q+eCb8^3G+IRe11)1< zampzzVqjzqNGvWkWcbfG`Mib%+kcP?#V5yUigP2Rm?!gVDlq+LnQW-3&h(#ka+Ibv J>wh+&LIC1>OalM_ diff --git a/Barotrauma/BarotraumaClient/Content/Effects/solidcolor.xnb b/Barotrauma/BarotraumaClient/Content/Effects/solidcolor.xnb index 8d2819b4480c5d0d440e63a2573e993ef5ed1d73..469f0e2c45ccd5ccf8023b6b9db2228c53d696a2 100644 GIT binary patch delta 328 zcmcb@_g9D`!q2Ikm7$h%B1enVTMh;WUw5|%4#wMt4i=0I3JgpP3=E6{49pvsi7?gw zVPs%%iEwhR;=KKI3ZvN!%d3Bmnf;Dh1Qccf$*}-w10dc3#34Zb2_SaN&$Da*@Hq%-Af*9fgGmregMpDj12=^PgY~pk=pbcK&2!q2Ikl_7+EB1enV5jF+}Uw5|%4o1<1A&iU+3JgpP3=E6{3``rBi7;(G o!jjA)&cqd*pOcy5oS&0l#K6cJkXT%7$nc+GaxA9|3nNf90A#=ui2wiq diff --git a/Barotrauma/BarotraumaClient/Content/Effects/solidcolor_opengl.xnb b/Barotrauma/BarotraumaClient/Content/Effects/solidcolor_opengl.xnb index efbff6947187ad3d37b01a307668f8126c0c1792..ab1d6c89721aafb3490a58e8b20294c58bef369a 100644 GIT binary patch delta 235 zcmcb^{fLhv!p|v%l_80JB1a3~B{l{IUw5|%4uo-rFWyHw5@oXg{W5~qwzT9Q0 z$tDT~#qmW3){_I7wba~-^7BfZ^Km{6R6fnRQ3-pu*&S5UEpu#YP;%6`A~oLtt`~xai~$tP*TM6~STglXW;HfX1>;-Y8%>dAhg+ q8xKNwJ13vOg&v=bo$=Eyif;JI;;VUk)#j_5ChQ=$Y*rBb$N>OL>O1HF diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 83a5aee27..c889cf39b 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.9.9.0 + 0.9.1000.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj index 7e1e8ffa1..80ac177e3 100644 --- a/Barotrauma/BarotraumaClient/MacClient.csproj +++ b/Barotrauma/BarotraumaClient/MacClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.9.9.0 + 0.9.1000.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma diff --git a/Barotrauma/BarotraumaClient/Shaders/Content_opengl.mgcb b/Barotrauma/BarotraumaClient/Shaders/Content_opengl.mgcb index 2d201daec..e18949d5d 100644 --- a/Barotrauma/BarotraumaClient/Shaders/Content_opengl.mgcb +++ b/Barotrauma/BarotraumaClient/Shaders/Content_opengl.mgcb @@ -19,11 +19,6 @@ /processorParam:DebugMode=Auto /build:blurshader_opengl.fx -#begin Content_opengl.mgcb -/importer: -/processor: -/build:Content_opengl.mgcb - #begin damageshader_opengl.fx /importer:EffectImporter /processor:EffectProcessor diff --git a/Barotrauma/BarotraumaClient/Shaders/blurshader.fx b/Barotrauma/BarotraumaClient/Shaders/blurshader.fx index 45c4cd015..54a5f1e81 100644 --- a/Barotrauma/BarotraumaClient/Shaders/blurshader.fx +++ b/Barotrauma/BarotraumaClient/Shaders/blurshader.fx @@ -10,7 +10,7 @@ float2 SampleOffsets[SAMPLE_COUNT]; float SampleWeights[SAMPLE_COUNT]; -float4 PixelShaderF(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 PixelShaderF(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 c = 0; diff --git a/Barotrauma/BarotraumaClient/Shaders/blurshader_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/blurshader_opengl.fx index 14aff9d67..4955b7d58 100644 --- a/Barotrauma/BarotraumaClient/Shaders/blurshader_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/blurshader_opengl.fx @@ -10,7 +10,7 @@ float2 SampleOffsets[SAMPLE_COUNT]; float SampleWeights[SAMPLE_COUNT]; -float4 PixelShaderF(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 PixelShaderF(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 c = 0; diff --git a/Barotrauma/BarotraumaClient/Shaders/damageshader.fx b/Barotrauma/BarotraumaClient/Shaders/damageshader.fx index 8444fd9c6..6f0781293 100644 --- a/Barotrauma/BarotraumaClient/Shaders/damageshader.fx +++ b/Barotrauma/BarotraumaClient/Shaders/damageshader.fx @@ -13,7 +13,7 @@ float aMultiplier; float cCutoff; float cMultiplier; -float4 main(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 main(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 c = xTexture.Sample(TextureSampler, texCoord) * inColor; diff --git a/Barotrauma/BarotraumaClient/Shaders/damageshader_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/damageshader_opengl.fx index c50fe7fb9..3a4242a3a 100644 --- a/Barotrauma/BarotraumaClient/Shaders/damageshader_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/damageshader_opengl.fx @@ -13,7 +13,7 @@ float aMultiplier; float cCutoff; float cMultiplier; -float4 main(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 main(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 c = tex2D(TextureSampler, texCoord) * inColor; diff --git a/Barotrauma/BarotraumaClient/Shaders/deformshader.fx b/Barotrauma/BarotraumaClient/Shaders/deformshader.fx index dcf54addd..d48e7cded 100644 --- a/Barotrauma/BarotraumaClient/Shaders/deformshader.fx +++ b/Barotrauma/BarotraumaClient/Shaders/deformshader.fx @@ -18,14 +18,14 @@ float4 solidColor; struct VertexShaderInput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; }; struct VertexShaderOutput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; }; @@ -75,6 +75,11 @@ float4 mainPS(VertexShaderOutput input) : COLOR return xTexture.Sample(TextureSampler, input.TexCoords) * input.Color; } +float4 solidVertexColorPS(VertexShaderOutput input) : COLOR +{ + return input.Color * xTexture.Sample(TextureSampler, input.TexCoords).a; +} + float4 solidColorPS(VertexShaderOutput input) : COLOR { return solidColor * xTexture.Sample(TextureSampler, input.TexCoords).a; @@ -96,4 +101,13 @@ technique DeformShaderSolidColor VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 solidColorPS(); } +} + +technique DeformShaderSolidVertexColor +{ + pass Pass1 + { + VertexShader = compile vs_4_0_level_9_1 mainVS(); + PixelShader = compile ps_4_0_level_9_1 solidVertexColorPS(); + } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/Shaders/deformshader_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/deformshader_opengl.fx index c77904ffe..1c151ad17 100644 --- a/Barotrauma/BarotraumaClient/Shaders/deformshader_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/deformshader_opengl.fx @@ -18,14 +18,14 @@ float4 solidColor; struct VertexShaderInput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; }; struct VertexShaderOutput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; }; @@ -75,6 +75,11 @@ float4 mainPS(VertexShaderOutput input) : COLOR return xTexture.Sample(TextureSampler, input.TexCoords) * input.Color; } +float4 solidVertexColorPS(VertexShaderOutput input) : COLOR +{ + return input.Color * xTexture.Sample(TextureSampler, input.TexCoords).a; +} + float4 solidColorPS(VertexShaderOutput input) : COLOR { return solidColor * xTexture.Sample(TextureSampler, input.TexCoords).a; @@ -96,4 +101,13 @@ technique DeformShaderSolidColor VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 solidColorPS(); } +} + +technique DeformShaderSolidVertexColor +{ + pass Pass1 + { + VertexShader = compile vs_3_0 mainVS(); + PixelShader = compile ps_3_0 solidVertexColorPS(); + } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/Shaders/gradientshader.fx b/Barotrauma/BarotraumaClient/Shaders/gradientshader.fx index 26e364323..54dad1b92 100644 --- a/Barotrauma/BarotraumaClient/Shaders/gradientshader.fx +++ b/Barotrauma/BarotraumaClient/Shaders/gradientshader.fx @@ -5,7 +5,7 @@ float4 color2; float midPoint; float fadeDist; -float4 PixelShaderF(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 PixelShaderF(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 t = tex2D(TextureSampler, texCoord); diff --git a/Barotrauma/BarotraumaClient/Shaders/gradientshader_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/gradientshader_opengl.fx index ab209fa73..cbb6bf945 100644 --- a/Barotrauma/BarotraumaClient/Shaders/gradientshader_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/gradientshader_opengl.fx @@ -5,7 +5,7 @@ float4 color2; float midPoint; float fadeDist; -float4 PixelShaderF(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 PixelShaderF(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 t = tex2D(TextureSampler, texCoord); diff --git a/Barotrauma/BarotraumaClient/Shaders/losshader.fx b/Barotrauma/BarotraumaClient/Shaders/losshader.fx index 357e2bad9..d40f91c49 100644 --- a/Barotrauma/BarotraumaClient/Shaders/losshader.fx +++ b/Barotrauma/BarotraumaClient/Shaders/losshader.fx @@ -1,3 +1,24 @@ +struct VertexShaderInput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +struct VertexShaderOutput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +VertexShaderOutput mainVS(in VertexShaderInput input) +{ + VertexShaderOutput output = (VertexShaderOutput)0; + + output.Position = input.Position; + output.TexCoords = input.TexCoords; + + return output; +} Texture2D xTexture; sampler TextureSampler : register (s0) = sampler_state { Texture = ; }; @@ -5,17 +26,19 @@ sampler TextureSampler : register (s0) = sampler_state { Texture = ; } Texture2D xLosTexture; sampler LosSampler = sampler_state { Texture = ; }; -float4 main(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 xColor; + +float4 mainPS(VertexShaderOutput input) : COLOR0 { - float4 sampleColor = xTexture.Sample(TextureSampler, texCoord); - float4 losColor = xLosTexture.Sample(LosSampler, texCoord); + float4 sampleColor = xTexture.Sample(TextureSampler, input.TexCoords); + float4 losColor = xLosTexture.Sample(LosSampler, input.TexCoords); float obscureAmount = 1.0f - losColor.r; float4 outColor = float4( - sampleColor.r * color.r, - sampleColor.g * color.g, - sampleColor.b * color.b, + sampleColor.r * xColor.r, + sampleColor.g * xColor.g, + sampleColor.b * xColor.b, obscureAmount); return outColor; @@ -25,6 +48,7 @@ technique LosShader { pass Pass1 { - PixelShader = compile ps_4_0_level_9_1 main(); + VertexShader = compile vs_4_0_level_9_1 mainVS(); + PixelShader = compile ps_4_0_level_9_1 mainPS(); } } diff --git a/Barotrauma/BarotraumaClient/Shaders/losshader_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/losshader_opengl.fx index 98805c7ca..23a48e4d2 100644 --- a/Barotrauma/BarotraumaClient/Shaders/losshader_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/losshader_opengl.fx @@ -1,3 +1,24 @@ +struct VertexShaderInput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +struct VertexShaderOutput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +VertexShaderOutput mainVS(in VertexShaderInput input) +{ + VertexShaderOutput output = (VertexShaderOutput)0; + + output.Position = input.Position; + output.TexCoords = input.TexCoords; + + return output; +} Texture xTexture; sampler TextureSampler : register (s0) = sampler_state { Texture = ; }; @@ -5,17 +26,19 @@ sampler TextureSampler : register (s0) = sampler_state { Texture = ; } Texture xLosTexture; sampler LosSampler = sampler_state { Texture = ; }; -float4 main(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 xColor; + +float4 mainPS(VertexShaderOutput input) : COLOR0 { - float4 sampleColor = tex2D(TextureSampler, texCoord); - float4 losColor = tex2D(LosSampler, texCoord); + float4 sampleColor = tex2D(TextureSampler, input.TexCoords); + float4 losColor = tex2D(LosSampler, input.TexCoords); float obscureAmount = 1.0f - losColor.r; float4 outColor = float4( - sampleColor.r * color.r, - sampleColor.g * color.g, - sampleColor.b * color.b, + sampleColor.r * xColor.r, + sampleColor.g * xColor.g, + sampleColor.b * xColor.b, obscureAmount); return outColor; @@ -25,6 +48,7 @@ technique LosShader { pass Pass1 { - PixelShader = compile ps_2_0 main(); + VertexShader = compile vs_2_0 mainVS(); + PixelShader = compile ps_2_0 mainPS(); } } diff --git a/Barotrauma/BarotraumaClient/Shaders/postprocess.fx b/Barotrauma/BarotraumaClient/Shaders/postprocess.fx index 214ba721d..e618bf0bd 100644 --- a/Barotrauma/BarotraumaClient/Shaders/postprocess.fx +++ b/Barotrauma/BarotraumaClient/Shaders/postprocess.fx @@ -1,3 +1,27 @@ +struct VertexShaderInput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +struct VertexShaderOutput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +float4x4 MatrixTransform; + +VertexShaderOutput mainVS(in VertexShaderInput input) +{ + VertexShaderOutput output = (VertexShaderOutput)0; + + output.Position = mul(input.Position, MatrixTransform); + output.TexCoords = input.TexCoords; + + return output; +} + Texture2D xTexture; sampler TextureSampler = sampler_state { Texture = ; }; @@ -32,84 +56,84 @@ float2 radialDistortion(float2 coord, float distortion) /*float4 sampleWithChromaticAberration(float2 samplePos) { return float4( - tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.r)).r, - tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.g)).g, - tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.b)).b, + xTexture.Sample(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.r)).r, + xTexture.Sample(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.g)).g, + xTexture.Sample(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.b)).b, 1); }*/ float3 sampleChannelsSeparately(float2 samplePosR, float2 samplePosG, float2 samplePosB) { return float3( - tex2D(TextureSampler, samplePosR).r, - tex2D(TextureSampler, samplePosG).g, - tex2D(TextureSampler, samplePosB).b); + xTexture.Sample(TextureSampler, samplePosR).r, + xTexture.Sample(TextureSampler, samplePosG).g, + xTexture.Sample(TextureSampler, samplePosB).b); } float3 sampleWithChromaticAberration(float2 samplePos) { return float3( - tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.r)).r, - tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.g)).g, - tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.b)).b); + xTexture.Sample(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.r)).r, + xTexture.Sample(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.g)).g, + xTexture.Sample(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.b)).b); } -float4 blur(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blur(VertexShaderOutput input) : COLOR0 { float4 sample; - sample = tex2D(TextureSampler, float2(texCoord.x + blurDistance, texCoord.y + blurDistance)); - sample += tex2D(TextureSampler, float2(texCoord.x - blurDistance, texCoord.y - blurDistance)); - sample += tex2D(TextureSampler, float2(texCoord.x + blurDistance, texCoord.y - blurDistance)); - sample += tex2D(TextureSampler, float2(texCoord.x - blurDistance, texCoord.y + blurDistance)); + sample = xTexture.Sample(TextureSampler, float2(input.TexCoords.x + blurDistance, input.TexCoords.y + blurDistance)); + sample += xTexture.Sample(TextureSampler, float2(input.TexCoords.x - blurDistance, input.TexCoords.y - blurDistance)); + sample += xTexture.Sample(TextureSampler, float2(input.TexCoords.x + blurDistance, input.TexCoords.y - blurDistance)); + sample += xTexture.Sample(TextureSampler, float2(input.TexCoords.x - blurDistance, input.TexCoords.y + blurDistance)); sample = sample * 0.25f; return sample; } -float4 distort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 distort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = xDistortTexture.Sample(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + xDistortTexture.Sample(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; - return tex2D(TextureSampler, samplePos); + return xTexture.Sample(TextureSampler, samplePos); } -float4 blurDistort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blurDistort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = xDistortTexture.Sample(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + xDistortTexture.Sample(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; float4 sample; - sample = tex2D(TextureSampler, float2(samplePos.x + blurDistance, samplePos.y + blurDistance)); - sample += tex2D(TextureSampler, float2(samplePos.x - blurDistance, samplePos.y - blurDistance)); - sample += tex2D(TextureSampler, float2(samplePos.x + blurDistance, samplePos.y - blurDistance)); - sample += tex2D(TextureSampler, float2(samplePos.x - blurDistance, samplePos.y + blurDistance)); + sample = xTexture.Sample(TextureSampler, float2(samplePos.x + blurDistance, samplePos.y + blurDistance)); + sample += xTexture.Sample(TextureSampler, float2(samplePos.x - blurDistance, samplePos.y - blurDistance)); + sample += xTexture.Sample(TextureSampler, float2(samplePos.x + blurDistance, samplePos.y - blurDistance)); + sample += xTexture.Sample(TextureSampler, float2(samplePos.x - blurDistance, samplePos.y + blurDistance)); sample = sample * 0.25f; return sample; } -float4 chromaticAberration(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 chromaticAberration(VertexShaderOutput input) : COLOR0 { - return float4(sampleWithChromaticAberration(texCoord), 1); + return float4(sampleWithChromaticAberration(input.TexCoords), 1); } -float4 chromaticAberrationDistort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 chromaticAberrationDistort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = xDistortTexture.Sample(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + xDistortTexture.Sample(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; @@ -117,11 +141,11 @@ float4 chromaticAberrationDistort(float4 position : SV_Position, float4 color : return float4(sampleWithChromaticAberration(samplePos), 1); } -float4 blurChromaticAberration(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blurChromaticAberration(VertexShaderOutput input) : COLOR0 { - float2 samplePosR = radialDistortion(texCoord, chromaticAberrationStrength.r); - float2 samplePosG = radialDistortion(texCoord, chromaticAberrationStrength.g); - float2 samplePosB = radialDistortion(texCoord, chromaticAberrationStrength.b); + float2 samplePosR = radialDistortion(input.TexCoords, chromaticAberrationStrength.r); + float2 samplePosG = radialDistortion(input.TexCoords, chromaticAberrationStrength.g); + float2 samplePosB = radialDistortion(input.TexCoords, chromaticAberrationStrength.b); float2 blurTopLeft = -blurDistance; float2 blurTopRight = float2(blurDistance, -blurDistance); @@ -139,12 +163,12 @@ float4 blurChromaticAberration(float4 position : SV_Position, float4 color : COL return float4(sample, 1); } -float4 blurChromaticAberrationDistort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blurChromaticAberrationDistort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = xDistortTexture.Sample(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + xDistortTexture.Sample(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; @@ -173,6 +197,7 @@ technique Distort { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 distort(); } } @@ -181,6 +206,7 @@ technique Blur { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 blur(); } } @@ -189,6 +215,7 @@ technique BlurDistort { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 blurDistort(); } } @@ -197,6 +224,7 @@ technique BlurChromaticAberration { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 blurChromaticAberration(); } } @@ -206,6 +234,7 @@ technique ChromaticAberration { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 chromaticAberration(); } } @@ -214,6 +243,7 @@ technique ChromaticAberrationDistort { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 chromaticAberrationDistort(); } } @@ -222,6 +252,7 @@ technique BlurChromaticAberrationDistort { pass Pass1 { + VertexShader = compile vs_4_0_level_9_1 mainVS(); PixelShader = compile ps_4_0_level_9_1 blurChromaticAberrationDistort(); } } diff --git a/Barotrauma/BarotraumaClient/Shaders/postprocess_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/postprocess_opengl.fx index 8941d42ef..063b2f107 100644 --- a/Barotrauma/BarotraumaClient/Shaders/postprocess_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/postprocess_opengl.fx @@ -1,7 +1,31 @@ -Texture2D xTexture; +struct VertexShaderInput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +struct VertexShaderOutput +{ + float4 Position : POSITION0; + float2 TexCoords: TEXCOORD0; +}; + +float4x4 MatrixTransform; + +VertexShaderOutput mainVS(in VertexShaderInput input) +{ + VertexShaderOutput output = (VertexShaderOutput)0; + + output.Position = mul(input.Position, MatrixTransform); + output.TexCoords = input.TexCoords; + + return output; +} + +Texture xTexture; sampler TextureSampler = sampler_state { Texture = ; }; -Texture2D xDistortTexture; +Texture xDistortTexture; sampler DistortSampler = sampler_state { @@ -53,24 +77,24 @@ float3 sampleWithChromaticAberration(float2 samplePos) tex2D(TextureSampler, radialDistortion(samplePos, chromaticAberrationStrength.b)).b); } -float4 blur(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blur(VertexShaderOutput input) : COLOR0 { float4 sample; - sample = tex2D(TextureSampler, float2(texCoord.x + blurDistance, texCoord.y + blurDistance)); - sample += tex2D(TextureSampler, float2(texCoord.x - blurDistance, texCoord.y - blurDistance)); - sample += tex2D(TextureSampler, float2(texCoord.x + blurDistance, texCoord.y - blurDistance)); - sample += tex2D(TextureSampler, float2(texCoord.x - blurDistance, texCoord.y + blurDistance)); + sample = tex2D(TextureSampler, float2(input.TexCoords.x + blurDistance, input.TexCoords.y + blurDistance)); + sample += tex2D(TextureSampler, float2(input.TexCoords.x - blurDistance, input.TexCoords.y - blurDistance)); + sample += tex2D(TextureSampler, float2(input.TexCoords.x + blurDistance, input.TexCoords.y - blurDistance)); + sample += tex2D(TextureSampler, float2(input.TexCoords.x - blurDistance, input.TexCoords.y + blurDistance)); sample = sample * 0.25f; return sample; } -float4 distort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 distort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = tex2D(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + tex2D(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; @@ -78,12 +102,12 @@ float4 distort(float4 position : SV_Position, float4 color : COLOR0, float2 texC return tex2D(TextureSampler, samplePos); } -float4 blurDistort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blurDistort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = tex2D(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + tex2D(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; @@ -99,17 +123,17 @@ float4 blurDistort(float4 position : SV_Position, float4 color : COLOR0, float2 return sample; } -float4 chromaticAberration(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 chromaticAberration(VertexShaderOutput input) : COLOR0 { - return float4(sampleWithChromaticAberration(texCoord), 1); + return float4(sampleWithChromaticAberration(input.TexCoords), 1); } -float4 chromaticAberrationDistort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 chromaticAberrationDistort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = tex2D(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + tex2D(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; @@ -117,11 +141,11 @@ float4 chromaticAberrationDistort(float4 position : SV_Position, float4 color : return float4(sampleWithChromaticAberration(samplePos), 1); } -float4 blurChromaticAberration(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blurChromaticAberration(VertexShaderOutput input) : COLOR0 { - float2 samplePosR = radialDistortion(texCoord, chromaticAberrationStrength.r); - float2 samplePosG = radialDistortion(texCoord, chromaticAberrationStrength.g); - float2 samplePosB = radialDistortion(texCoord, chromaticAberrationStrength.b); + float2 samplePosR = radialDistortion(input.TexCoords, chromaticAberrationStrength.r); + float2 samplePosG = radialDistortion(input.TexCoords, chromaticAberrationStrength.g); + float2 samplePosB = radialDistortion(input.TexCoords, chromaticAberrationStrength.b); float2 blurTopLeft = -blurDistance; float2 blurTopRight = float2(blurDistance, -blurDistance); @@ -139,12 +163,12 @@ float4 blurChromaticAberration(float4 position : SV_Position, float4 color : COL return float4(sample, 1); } -float4 blurChromaticAberrationDistort(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 blurChromaticAberrationDistort(VertexShaderOutput input) : COLOR0 { - float4 bumpColor = tex2D(DistortSampler, texCoord + distortUvOffset); - bumpColor = (bumpColor + tex2D(DistortSampler, texCoord - distortUvOffset * 2.0f)) * 0.5f; + float4 bumpColor = tex2D(DistortSampler, input.TexCoords + distortUvOffset); + bumpColor = (bumpColor + tex2D(DistortSampler, input.TexCoords - distortUvOffset * 2.0f)) * 0.5f; - float2 samplePos = texCoord; + float2 samplePos = input.TexCoords; samplePos.x += (bumpColor.r - 0.5f) * distortScale.x; samplePos.y += (bumpColor.g - 0.5f) * distortScale.y; @@ -173,6 +197,7 @@ technique Distort { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 distort(); } } @@ -181,6 +206,7 @@ technique Blur { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 blur(); } } @@ -189,6 +215,7 @@ technique BlurDistort { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 blurDistort(); } } @@ -197,6 +224,7 @@ technique BlurChromaticAberration { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 blurChromaticAberration(); } } @@ -206,6 +234,7 @@ technique ChromaticAberration { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 chromaticAberration(); } } @@ -214,6 +243,7 @@ technique ChromaticAberrationDistort { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 chromaticAberrationDistort(); } } @@ -222,6 +252,7 @@ technique BlurChromaticAberrationDistort { pass Pass1 { + VertexShader = compile vs_3_0 mainVS(); PixelShader = compile ps_3_0 blurChromaticAberrationDistort(); } } diff --git a/Barotrauma/BarotraumaClient/Shaders/solidcolor.fx b/Barotrauma/BarotraumaClient/Shaders/solidcolor.fx index 846f3d2fe..464851d70 100644 --- a/Barotrauma/BarotraumaClient/Shaders/solidcolor.fx +++ b/Barotrauma/BarotraumaClient/Shaders/solidcolor.fx @@ -4,13 +4,19 @@ sampler TextureSampler = sampler_state { Texture = ; }; float blurDistance; float4 color; -float4 solidColor(float4 position : SV_Position, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 solidColor(float4 position : POSITION0, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float a = tex2D(TextureSampler, texCoord).a; return color * a; } -float4 solidColorBlur(float4 position : SV_Position, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 solidVertexColor(float4 position : POSITION0, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +{ + float a = tex2D(TextureSampler, texCoord).a; + return clr * a; +} + +float4 solidColorBlur(float4 position : POSITION0, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float sample; sample = tex2D(TextureSampler, float2(texCoord.x + blurDistance, texCoord.y + blurDistance)).a; @@ -22,13 +28,20 @@ float4 solidColorBlur(float4 position : SV_Position, float4 clr : COLOR0, float2 return color * sample; } -technique SolidColor +technique SolidColor { pass Pass1 { PixelShader = compile ps_4_0_level_9_1 solidColor(); } } +technique SolidVertexColor +{ + pass Pass1 + { + PixelShader = compile ps_4_0_level_9_1 solidVertexColor(); + } +} technique SolidColorBlur { pass Pass1 diff --git a/Barotrauma/BarotraumaClient/Shaders/solidcolor_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/solidcolor_opengl.fx index 2c82b0bf3..40ad68196 100644 --- a/Barotrauma/BarotraumaClient/Shaders/solidcolor_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/solidcolor_opengl.fx @@ -1,16 +1,22 @@ -Texture xTexture; +Texture2D xTexture; sampler TextureSampler = sampler_state { Texture = ; }; float blurDistance; float4 color; -float4 solidColor(float4 position : SV_Position, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 solidColor(float4 position : POSITION0, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float a = tex2D(TextureSampler, texCoord).a; return color * a; } -float4 solidColorBlur(float4 position : SV_Position, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 solidVertexColor(float4 position : POSITION0, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +{ + float a = tex2D(TextureSampler, texCoord).a; + return clr * a; +} + +float4 solidColorBlur(float4 position : POSITION0, float4 clr : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float sample; sample = tex2D(TextureSampler, float2(texCoord.x + blurDistance, texCoord.y + blurDistance)).a; @@ -22,13 +28,20 @@ float4 solidColorBlur(float4 position : SV_Position, float4 clr : COLOR0, float2 return color * sample; } -technique SolidColor +technique SolidColor { pass Pass1 { PixelShader = compile ps_3_0 solidColor(); } } +technique SolidVertexColor +{ + pass Pass1 + { + PixelShader = compile ps_3_0 solidVertexColor(); + } +} technique SolidColorBlur { pass Pass1 diff --git a/Barotrauma/BarotraumaClient/Shaders/watershader.fx b/Barotrauma/BarotraumaClient/Shaders/watershader.fx index 331e860ec..a8f053ed2 100644 --- a/Barotrauma/BarotraumaClient/Shaders/watershader.fx +++ b/Barotrauma/BarotraumaClient/Shaders/watershader.fx @@ -20,14 +20,14 @@ float4x4 xUvTransform; struct VertexShaderInput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; // added }; struct VertexShaderOutput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; // added }; @@ -95,7 +95,7 @@ float4 mainPSBlurred(VertexShaderOutput input) : COLOR return sample; } -float4 mainPostProcess(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 mainPostProcess(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 bumpColor = tex2D(WaterBumpSampler, texCoord + xUvOffset + xBumpPos); bumpColor = (bumpColor + tex2D(WaterBumpSampler, texCoord - xUvOffset * 2.0f + xBumpPos)) * 0.5f; diff --git a/Barotrauma/BarotraumaClient/Shaders/watershader_opengl.fx b/Barotrauma/BarotraumaClient/Shaders/watershader_opengl.fx index ddef6b01e..842f5b201 100644 --- a/Barotrauma/BarotraumaClient/Shaders/watershader_opengl.fx +++ b/Barotrauma/BarotraumaClient/Shaders/watershader_opengl.fx @@ -20,14 +20,14 @@ float4x4 xUvTransform; struct VertexShaderInput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; // added }; struct VertexShaderOutput { - float4 Position : SV_POSITION; + float4 Position : POSITION0; float4 Color : COLOR0; float2 TexCoords: TEXCOORD0; // added }; @@ -102,7 +102,7 @@ float4 mainPSBlurred(VertexShaderOutput input) : COLOR return sample; } -float4 mainPostProcess(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 +float4 mainPostProcess(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 bumpColor = tex2D(WaterBumpSampler, texCoord + xUvOffset + xBumpPos); bumpColor = (bumpColor + tex2D(WaterBumpSampler, texCoord - xUvOffset * 2.0f + xBumpPos)) * 0.5f; diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj index 4642e0645..74b2aeb89 100644 --- a/Barotrauma/BarotraumaClient/WindowsClient.csproj +++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.9.9.0 + 0.9.1000.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma diff --git a/Barotrauma/BarotraumaServer/LinuxServer.csproj b/Barotrauma/BarotraumaServer/LinuxServer.csproj index e6e084590..b2396bd0f 100644 --- a/Barotrauma/BarotraumaServer/LinuxServer.csproj +++ b/Barotrauma/BarotraumaServer/LinuxServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.9.9.0 + 0.9.1000.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/MacServer.csproj b/Barotrauma/BarotraumaServer/MacServer.csproj index eda82c727..bf962cfdb 100644 --- a/Barotrauma/BarotraumaServer/MacServer.csproj +++ b/Barotrauma/BarotraumaServer/MacServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.9.9.0 + 0.9.1000.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs index 618535b40..fed973a06 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs @@ -9,9 +9,9 @@ namespace Barotrauma partial void InitProjSpecific(XElement mainElement) { } - partial void OnAttackedProjSpecific(Character attacker, AttackResult attackResult) + partial void OnAttackedProjSpecific(Character attacker, AttackResult attackResult, float stun) { - GameMain.Server.KarmaManager.OnCharacterHealthChanged(this, attacker, attackResult.Damage, attackResult.Afflictions); + GameMain.Server.KarmaManager.OnCharacterHealthChanged(this, attacker, attackResult.Damage, stun, attackResult.Afflictions); } partial void KillProjSpecific(CauseOfDeathType causeOfDeath, Affliction causeOfDeathAffliction, bool log) @@ -20,11 +20,11 @@ namespace Barotrauma { if (causeOfDeath == CauseOfDeathType.Affliction) { - GameServer.Log(LogName + " has died (Cause of death: " + causeOfDeathAffliction.Prefab.Name + ")", ServerLog.MessageType.Attack); + GameServer.Log(GameServer.CharacterLogName(this) + " has died (Cause of death: " + causeOfDeathAffliction.Prefab.Name + ")", ServerLog.MessageType.Attack); } else { - GameServer.Log(LogName + " has died (Cause of death: " + causeOfDeath + ")", ServerLog.MessageType.Attack); + GameServer.Log(GameServer.CharacterLogName(this) + " has died (Cause of death: " + causeOfDeath + ")", ServerLog.MessageType.Attack); } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs index 7e0bdcd8b..390b4cb98 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs @@ -264,21 +264,21 @@ namespace Barotrauma switch ((NetEntityEvent.Type)extraData[0]) { case NetEntityEvent.Type.InventoryState: - msg.WriteRangedInteger(0, 0, 3); + msg.WriteRangedInteger(0, 0, 4); msg.Write(GameMain.Server.EntityEventManager.Events.Last()?.ID ?? (ushort)0); Inventory.ServerWrite(msg, c); break; case NetEntityEvent.Type.Control: - msg.WriteRangedInteger(1, 0, 3); + msg.WriteRangedInteger(1, 0, 4); Client owner = (Client)extraData[1]; msg.Write(owner != null && owner.Character == this && GameMain.Server.ConnectedClients.Contains(owner) ? owner.ID : (byte)0); break; case NetEntityEvent.Type.Status: - msg.WriteRangedInteger(2, 0, 3); + msg.WriteRangedInteger(2, 0, 4); WriteStatus(msg); break; case NetEntityEvent.Type.UpdateSkills: - msg.WriteRangedInteger(3, 0, 3); + msg.WriteRangedInteger(3, 0, 4); if (Info?.Job == null) { msg.Write((byte)0); @@ -293,6 +293,15 @@ namespace Barotrauma } } break; + case NetEntityEvent.Type.ExecuteAttack: + Limb attackLimb = extraData[1] as Limb; + UInt16 targetEntityID = (UInt16)extraData[2]; + int targetLimbIndex = extraData.Length > 3 ? (int)extraData[3] : 0; + msg.WriteRangedInteger(4, 0, 4); + msg.Write((byte)(Removed ? 255 : Array.IndexOf(AnimController.Limbs, attackLimb))); + msg.Write(targetEntityID); + msg.Write((byte)targetLimbIndex); + break; default: DebugConsole.ThrowError("Invalid NetworkEvent type for entity " + ToString() + " (" + (NetEntityEvent.Type)extraData[0] + ")"); break; @@ -407,6 +416,7 @@ namespace Barotrauma } } + private List severedJointIndices = new List(); private void WriteStatus(IWriteMessage msg) { msg.Write(IsDead); @@ -417,33 +427,32 @@ namespace Barotrauma { msg.Write(CauseOfDeath.Affliction.Identifier); } - - if (AnimController?.LimbJoints == null) - { - //0 limbs severed - msg.Write((byte)0); - } - else - { - List severedJointIndices = new List(); - for (int i = 0; i < AnimController.LimbJoints.Length; i++) - { - if (AnimController.LimbJoints[i] != null && AnimController.LimbJoints[i].IsSevered) - { - severedJointIndices.Add(i); - } - } - msg.Write((byte)severedJointIndices.Count); - foreach (int jointIndex in severedJointIndices) - { - msg.Write((byte)jointIndex); - } - } } else { CharacterHealth.ServerWrite(msg); } + if (AnimController?.LimbJoints == null) + { + //0 limbs severed + msg.Write((byte)0); + } + else + { + severedJointIndices.Clear(); + for (int i = 0; i < AnimController.LimbJoints.Length; i++) + { + if (AnimController.LimbJoints[i] != null && AnimController.LimbJoints[i].IsSevered) + { + severedJointIndices.Add(i); + } + } + msg.Write((byte)severedJointIndices.Count); + foreach (int jointIndex in severedJointIndices) + { + msg.Write((byte)jointIndex); + } + } } public void WriteSpawnData(IWriteMessage msg, UInt16 entityId, bool restrictMessageSize) diff --git a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs index e08792a13..c16cff5b1 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs @@ -7,7 +7,7 @@ using System.ComponentModel; using FarseerPhysics; using Barotrauma.Items.Components; using System.Threading; -using System.IO; +using Barotrauma.IO; using System.Text; using System.Diagnostics; @@ -82,10 +82,6 @@ namespace Barotrauma { if (queuedMessages.Count > 0) { - int inputLines = Math.Max((int)Math.Ceiling(input.Length / (float)Console.WindowWidth), 1); - Console.CursorLeft = 0; - Console.Write(new string(' ', consoleWidth)); - Console.CursorTop = Math.Max(Console.CursorTop - inputLines, 0); Console.CursorLeft = 0; while (queuedMessages.Count > 0) { @@ -192,32 +188,64 @@ namespace Barotrauma sw.Stop(); } + private static void WriteAndResetLine(string txt) + { + int consoleWidth = Console.BufferWidth; + int linesWritten = 0; + while (true) + { + if (txt.Length > consoleWidth) + { + linesWritten++; + Console.Write(txt.Substring(0, consoleWidth)); + txt = txt.Substring(consoleWidth); + } + else + { + Console.Write(txt); + if (txt.Length == consoleWidth) + { + Console.Write(' '); Console.CursorLeft--; + linesWritten++; + } + break; + } + } + Console.CursorTop -= linesWritten; + } + private static void RewriteInputToCommandLine(string input) { if (Console.WindowWidth == 0 || Console.WindowHeight == 0) { return; } - int consoleWidth = Math.Max(Console.WindowWidth, 5); - int inputLines = Math.Max((int)Math.Ceiling(input.Length / (float)consoleWidth), 1); - int cursorLine = Math.Max((int)Math.Ceiling((input.Length + 1) / (float)consoleWidth), 1); + int consoleWidth = Math.Max(Console.BufferWidth, 5); + //int inputLines = Math.Max((int)Math.Ceiling(input.Length / (float)consoleWidth), 1); + //int cursorLine = Math.Max((int)Math.Ceiling((input.Length + 1) / (float)consoleWidth), 1); try { - Console.WriteLine(""); Console.CursorTop -= inputLines; - + string tmpInput = input; + while (tmpInput.Length >= consoleWidth) + { + tmpInput = tmpInput.Substring(consoleWidth); + } string ln = input.Length > 0 ? AutoComplete(input, 0) : ""; + while (ln.Length >= consoleWidth) + { + ln = ln.Substring(consoleWidth); + } ln += new string(' ', consoleWidth - (ln.Length % consoleWidth)); Console.ForegroundColor = ConsoleColor.DarkGray; Console.CursorLeft = 0; - Console.Write(ln); + WriteAndResetLine(ln); Console.ForegroundColor = ConsoleColor.White; Console.CursorLeft = 0; - Console.CursorTop -= cursorLine; - Console.Write(input); + WriteAndResetLine(tmpInput); Console.CursorLeft = input.Length % consoleWidth; } catch (Exception e) { - string errorMsg = "Failed to write input to command line (window width: " + Console.WindowWidth + ", window height: " + Console.WindowHeight + ", inputLines:" + inputLines + ")\n" + string errorMsg = "Failed to write input to command line (window width: " + Console.WindowWidth + ", window height: " + Console.WindowHeight + ")\n" + e.Message + "\n" + e.StackTrace; GameAnalyticsManager.AddErrorEventOnce("DebugConsole.RewriteInputToCommandLine", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); } @@ -948,7 +976,7 @@ namespace Barotrauma NewMessage("***************", Color.Cyan); foreach (Client c in GameMain.Server.ConnectedClients) { - NewMessage("- " + c.ID.ToString() + ": " + c.Name + (c.Character != null ? " playing " + c.Character.LogName : "") + ", " + c.Connection.EndPointString, Color.Cyan); + NewMessage("- " + c.ID.ToString() + ": " + c.Name + (c.Character != null ? " playing " + c.Character.LogName : "") + ", " + c.Connection.EndPointString + $", ping {c.Ping} ms", Color.Cyan); } NewMessage("***************", Color.Cyan); })); @@ -957,7 +985,7 @@ namespace Barotrauma GameMain.Server.SendConsoleMessage("***************", client); foreach (Client c in GameMain.Server.ConnectedClients) { - GameMain.Server.SendConsoleMessage("- " + c.ID.ToString() + ": " + c.Name + ", " + c.Connection.EndPointString, client); + GameMain.Server.SendConsoleMessage("- " + c.ID.ToString() + ": " + c.Name + ", " + c.Connection.EndPointString + $", ping {c.Ping} ms", client); } GameMain.Server.SendConsoleMessage("***************", client); }); @@ -1597,13 +1625,14 @@ namespace Barotrauma (Client client, Vector2 cursorWorldPos, string[] args) => { Vector2 explosionPos = cursorWorldPos; - float range = 500, force = 10, damage = 50, structureDamage = 10, empStrength = 0.0f; ; + float range = 500, force = 10, damage = 50, structureDamage = 10, itemDamage = 100, empStrength = 0.0f; ; if (args.Length > 0) float.TryParse(args[0], out range); if (args.Length > 1) float.TryParse(args[1], out force); if (args.Length > 2) float.TryParse(args[2], out damage); if (args.Length > 3) float.TryParse(args[3], out structureDamage); - if (args.Length > 4) float.TryParse(args[4], out empStrength); - new Explosion(range, force, damage, structureDamage, empStrength).Explode(explosionPos, null); + if (args.Length > 4) float.TryParse(args[4], out itemDamage); + if (args.Length > 5) float.TryParse(args[5], out empStrength); + new Explosion(range, force, damage, structureDamage, itemDamage, empStrength).Explode(explosionPos, null); } ); @@ -1912,6 +1941,27 @@ namespace Barotrauma } ); + AssignOnClientRequestExecute( + "money", + (Client senderClient, Vector2 cursorWorldPos, string[] args) => + { + if (args.Length == 0) { return; } + if (!(GameMain.GameSession?.GameMode is MultiPlayerCampaign campaign)) + { + GameMain.Server.SendConsoleMessage("No campaign active!", senderClient); + return; + } + if (int.TryParse(args[0], out int money)) + { + campaign.Money += money; + campaign.LastUpdateID++; + } + else + { + GameMain.Server.SendConsoleMessage($"\"{args[0]}\" is not a valid numeric value.", senderClient); + } + } + ); AssignOnClientRequestExecute( "campaigndestination|setcampaigndestination", (Client senderClient, Vector2 cursorWorldPos, string[] args) => @@ -1987,7 +2037,7 @@ namespace Barotrauma if (!client.HasPermission(ClientPermissions.ConsoleCommands) && client.Connection != GameMain.Server.OwnerConnection) { GameMain.Server.SendConsoleMessage("You are not permitted to use console commands!", client); - GameServer.Log(client.Name + " attempted to execute the console command \"" + command + "\" without a permission to use console commands.", ServerLog.MessageType.ConsoleUsage); + GameServer.Log(GameServer.ClientLogName(client) + " attempted to execute the console command \"" + command + "\" without a permission to use console commands.", ServerLog.MessageType.ConsoleUsage); return; } @@ -1996,7 +2046,7 @@ namespace Barotrauma if (matchingCommand != null && !client.PermittedConsoleCommands.Contains(matchingCommand) && client.Connection != GameMain.Server.OwnerConnection) { GameMain.Server.SendConsoleMessage("You are not permitted to use the command\"" + matchingCommand.names[0] + "\"!", client); - GameServer.Log(client.Name + " attempted to execute the console command \"" + command + "\" without a permission to use the command.", ServerLog.MessageType.ConsoleUsage); + GameServer.Log(GameServer.ClientLogName(client) + " attempted to execute the console command \"" + command + "\" without a permission to use the command.", ServerLog.MessageType.ConsoleUsage); return; } else if (matchingCommand == null) @@ -2008,18 +2058,18 @@ namespace Barotrauma if (!MathUtils.IsValid(cursorWorldPos)) { GameMain.Server.SendConsoleMessage("Could not execute command \"" + command + "\" - invalid cursor position.", client); - NewMessage(client.Name + " attempted to execute the console command \"" + command + "\" with invalid cursor position.", Color.White); + NewMessage(GameServer.ClientLogName(client) + " attempted to execute the console command \"" + command + "\" with invalid cursor position.", Color.White); return; } try { matchingCommand.ServerExecuteOnClientRequest(client, cursorWorldPos, splitCommand.Skip(1).ToArray()); - GameServer.Log("Console command \"" + command + "\" executed by " + client.Name + ".", ServerLog.MessageType.ConsoleUsage); + GameServer.Log("Console command \"" + command + "\" executed by " + GameServer.ClientLogName(client) + ".", ServerLog.MessageType.ConsoleUsage); } catch (Exception e) { - ThrowError("Executing the command \"" + matchingCommand.names[0] + "\" by request from \"" + client.Name + "\" failed.", e); + ThrowError("Executing the command \"" + matchingCommand.names[0] + "\" by request from \"" + GameServer.ClientLogName(client) + "\" failed.", e); } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CargoMission.cs b/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CargoMission.cs index 7c3cd5b32..9ee80f0f8 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CargoMission.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CargoMission.cs @@ -9,7 +9,7 @@ namespace Barotrauma msg.Write((ushort)items.Count); foreach (Item item in items) { - item.WriteSpawnData(msg, item.ID); + item.WriteSpawnData(msg, item.ID, item.ParentInventory?.Owner?.ID ?? 0); } } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/SalvageMission.cs b/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/SalvageMission.cs index 3ebe4b95b..1ceed8427 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/SalvageMission.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/SalvageMission.cs @@ -1,9 +1,14 @@ using Barotrauma.Networking; +using System.Collections.Generic; namespace Barotrauma { - partial class SalvageMission : Mission + partial class SalvageMission : Mission { + private bool usedExistingItem; + + private readonly List> executedEffectIndices = new List>(); + public override void ServerWriteInitial(IWriteMessage msg, Client c) { msg.Write(usedExistingItem); @@ -13,7 +18,14 @@ namespace Barotrauma } else { - item.WriteSpawnData(msg, item.ID); + item.WriteSpawnData(msg, item.ID, item.ParentInventory?.Owner?.ID ?? 0); + } + + msg.Write((byte)executedEffectIndices.Count); + foreach (Pair effectIndex in executedEffectIndices) + { + msg.Write((byte)effectIndex.First); + msg.Write((byte)effectIndex.Second); } } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs index 3ce575eb9..008a79402 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs @@ -6,7 +6,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Reflection; using System.Threading; @@ -105,6 +105,8 @@ namespace Barotrauma MapGenerationParams.Init(); LevelGenerationParams.LoadPresets(); ScriptedEventSet.LoadPrefabs(); + Order.Init(); + EventManagerSettings.Init(); AfflictionPrefab.LoadAll(GetFilesOfType(ContentType.Afflictions)); SkillSettings.Load(GetFilesOfType(ContentType.SkillSettings)); @@ -180,7 +182,7 @@ namespace Barotrauma bool enableUpnp = false; int maxPlayers = 10; - int ownerKey = 0; + int? ownerKey = null; UInt64 steamId = 0; XDocument doc = XMLExtensions.TryLoadXml(ServerSettings.SettingsFile); @@ -197,7 +199,7 @@ namespace Barotrauma password = doc.Root.GetAttributeString("password", ""); enableUpnp = doc.Root.GetAttributeBool("enableupnp", false); maxPlayers = doc.Root.GetAttributeInt("maxplayers", 10); - ownerKey = 0; + ownerKey = null; } #if DEBUG @@ -244,7 +246,10 @@ namespace Barotrauma i++; break; case "-ownerkey": - int.TryParse(CommandLineArgs[i + 1], out ownerKey); + if (int.TryParse(CommandLineArgs[i + 1], out int key)) + { + ownerKey = key; + } i++; break; case "-steamid": diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs index 2fc35dd0d..d731a30bd 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -1,4 +1,5 @@ -using Barotrauma.Networking; +using Barotrauma.IO; +using Barotrauma.Networking; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -189,7 +190,7 @@ namespace Barotrauma foreach (PurchasedItem pi in CargoManager.PurchasedItems) { msg.Write(pi.ItemPrefab.Identifier); - msg.Write((UInt16)pi.Quantity); + msg.WriteRangedInteger(pi.Quantity, 0, 100); } var characterData = GetClientCharacterData(c); @@ -217,7 +218,7 @@ namespace Barotrauma for (int i = 0; i < purchasedItemCount; i++) { string itemPrefabIdentifier = msg.ReadString(); - UInt16 itemQuantity = msg.ReadUInt16(); + int itemQuantity = msg.ReadRangedInteger(0, CargoManager.MaxQuantity); purchasedItems.Add(new PurchasedItem(ItemPrefab.Prefabs[itemPrefabIdentifier], itemQuantity)); } @@ -255,8 +256,8 @@ namespace Barotrauma } if (purchasedLostShuttles != this.PurchasedLostShuttles) { - if (GameMain.GameSession?.Submarine != null && - GameMain.GameSession.Submarine.LeftBehindSubDockingPortOccupied) + if (GameMain.GameSession?.SubmarineInfo != null && + GameMain.GameSession.SubmarineInfo.LeftBehindSubDockingPortOccupied) { GameMain.Server.SendDirectChatMessage(TextManager.FormatServerMessage("ReplaceShuttleDockingPortOccupied"), sender, ChatMessageType.MessageBox); } @@ -306,7 +307,7 @@ namespace Barotrauma } try { - characterDataDoc.Save(characterDataPath); + characterDataDoc.SaveSafe(characterDataPath); } catch (Exception e) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Door.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Door.cs index 08c4eed64..7072e5b2b 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Door.cs @@ -15,7 +15,7 @@ namespace Barotrauma.Items.Components isOpen = open; //opening a partially stuck door makes it less stuck - if (isOpen) stuck = MathHelper.Clamp(stuck - 30.0f, 0.0f, 100.0f); + if (isOpen) { stuck = MathHelper.Clamp(stuck - StuckReductionOnOpen, 0.0f, 100.0f); } if (sendNetworkMessage) { @@ -28,6 +28,7 @@ namespace Barotrauma.Items.Components base.ServerWrite(msg, c, extraData); msg.Write(isOpen); + msg.Write(isBroken); msg.Write(extraData.Length == 3 ? (bool)extraData[2] : false); //forced open msg.WriteRangedSingle(stuck, 0.0f, 100.0f, 8); msg.Write(lastUser == null ? (UInt16)0 : lastUser.ID); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Holdable/Holdable.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Holdable/Holdable.cs index 4ad1b84cd..8d1de81ae 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Holdable/Holdable.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Holdable/Holdable.cs @@ -13,6 +13,7 @@ namespace Barotrauma.Items.Components msg.Write(Attached); msg.Write(body.SimPosition.X); msg.Write(body.SimPosition.Y); + msg.Write(item.Submarine?.ID ?? Entity.NullEntityID); } public void ServerRead(ClientNetObject type, IReadMessage msg, Client c) @@ -30,7 +31,7 @@ namespace Barotrauma.Items.Components AttachToWall(); item.CreateServerEvent(this); - GameServer.Log(c.Character.LogName + " attached " + item.Name + " to a wall", ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " attached " + item.Name + " to a wall", ServerLog.MessageType.ItemInteraction); } } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Controller.cs index 7bdbac370..5de5d4360 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Controller.cs @@ -6,7 +6,7 @@ namespace Barotrauma.Items.Components { public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null) { - msg.Write(state); + msg.Write(State); msg.Write(user == null ? (ushort)0 : user.ID); } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Engine.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Engine.cs index af8583204..d39ad733f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Engine.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Engine.cs @@ -19,7 +19,7 @@ namespace Barotrauma.Items.Components { if (Math.Abs(newTargetForce - targetForce) > 0.01f) { - GameServer.Log(c.Character.LogName + " set the force of " + item.Name + " to " + (int)(newTargetForce) + " %", ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " set the force of " + item.Name + " to " + (int)(newTargetForce) + " %", ServerLog.MessageType.ItemInteraction); } targetForce = newTargetForce; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Pump.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Pump.cs index 4b8261204..903b05330 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Pump.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Pump.cs @@ -17,11 +17,11 @@ namespace Barotrauma.Items.Components { if (newFlowPercentage != FlowPercentage) { - GameServer.Log(c.Character.LogName + " set the pumping speed of " + item.Name + " to " + (int)(newFlowPercentage) + " %", ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " set the pumping speed of " + item.Name + " to " + (int)(newFlowPercentage) + " %", ServerLog.MessageType.ItemInteraction); } if (newIsActive != IsActive) { - GameServer.Log(c.Character.LogName + (newIsActive ? " turned on " : " turned off ") + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(c.Character) + (newIsActive ? " turned on " : " turned off ") + item.Name, ServerLog.MessageType.ItemInteraction); } FlowPercentage = newFlowPercentage; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Power/PowerContainer.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Power/PowerContainer.cs index 8b9acaaf8..20ae5b275 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Power/PowerContainer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Power/PowerContainer.cs @@ -14,7 +14,7 @@ namespace Barotrauma.Items.Components if (item.CanClientAccess(c)) { RechargeSpeed = newRechargeSpeed; - GameServer.Log(c.Character.LogName + " set the recharge speed of " + item.Name + " to " + (int)((rechargeSpeed / maxRechargeSpeed) * 100.0f) + " %", ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " set the recharge speed of " + item.Name + " to " + (int)((rechargeSpeed / maxRechargeSpeed) * 100.0f) + " %", ServerLog.MessageType.ItemInteraction); } item.CreateServerEvent(this); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Projectile.cs index 6c06d44d9..bc69285de 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Projectile.cs @@ -7,17 +7,21 @@ namespace Barotrauma.Items.Components { public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null) { - msg.Write(StickTarget != null); - if (StickTarget != null) + bool stuck = StickTarget != null && !item.Removed && !StickTargetRemoved(); + msg.Write(stuck); + if (stuck) { - msg.Write(item.body.SimPosition.X); - msg.Write(item.body.SimPosition.Y); + msg.Write(item.Submarine?.ID ?? Entity.NullEntityID); + msg.Write(item.CurrentHull?.ID ?? Entity.NullEntityID); + msg.Write(item.SimPosition.X); + msg.Write(item.SimPosition.Y); msg.Write(stickJoint.Axis.X); msg.Write(stickJoint.Axis.Y); if (StickTarget.UserData is Structure structure) { msg.Write(structure.ID); - msg.Write((byte)structure.Bodies.IndexOf(StickTarget)); + int bodyIndex = structure.Bodies.IndexOf(StickTarget); + msg.Write((byte)(bodyIndex == -1 ? 0 : bodyIndex)); } else if (StickTarget.UserData is Entity entity) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/ConnectionPanel.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/ConnectionPanel.cs index d4187a717..d29f38b98 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/ConnectionPanel.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/ConnectionPanel.cs @@ -88,7 +88,7 @@ namespace Barotrauma.Items.Components if (existingWire.Locked) { //this should not be possible unless the client is running a modified version of the game - GameServer.Log(c.Character.LogName + " attempted to disconnect a locked wire from " + + GameServer.Log(GameServer.CharacterLogName(c.Character) + " attempted to disconnect a locked wire from " + Connections[i].Item.Name + " (" + Connections[i].Name + ")", ServerLog.MessageType.Error); continue; } @@ -106,7 +106,7 @@ namespace Barotrauma.Items.Components if (existingWire.Connections[0] == null && existingWire.Connections[1] == null) { - GameServer.Log(c.Character.LogName + " disconnected a wire from " + + GameServer.Log(GameServer.CharacterLogName(c.Character) + " disconnected a wire from " + Connections[i].Item.Name + " (" + Connections[i].Name + ")", ServerLog.MessageType.Wiring); if (existingWire.Item.ParentInventory != null) @@ -122,7 +122,7 @@ namespace Barotrauma.Items.Components } else if (existingWire.Connections[0] != null) { - GameServer.Log(c.Character.LogName + " disconnected a wire from " + + GameServer.Log(GameServer.CharacterLogName(c.Character) + " disconnected a wire from " + Connections[i].Item.Name + " (" + Connections[i].Name + ") to " + existingWire.Connections[0].Item.Name + " (" + existingWire.Connections[0].Name + ")", ServerLog.MessageType.Wiring); //wires that are not in anyone's inventory (i.e. not currently being rewired) @@ -137,7 +137,7 @@ namespace Barotrauma.Items.Components } else if (existingWire.Connections[1] != null) { - GameServer.Log(c.Character.LogName + " disconnected a wire from " + + GameServer.Log(GameServer.CharacterLogName(c.Character) + " disconnected a wire from " + Connections[i].Item.Name + " (" + Connections[i].Name + ") to " + existingWire.Connections[1].Item.Name + " (" + existingWire.Connections[1].Name + ")", ServerLog.MessageType.Wiring); /*if (existingWire.Item.ParentInventory == null && !wires.Any(w => w.Contains(existingWire))) @@ -161,7 +161,7 @@ namespace Barotrauma.Items.Components disconnectedWire.Item.ParentInventory == null) { disconnectedWire.Item.Drop(c.Character); - GameServer.Log(c.Character.LogName + " dropped " + disconnectedWire.Name, ServerLog.MessageType.Inventory); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " dropped " + disconnectedWire.Name, ServerLog.MessageType.Inventory); } } @@ -180,13 +180,13 @@ namespace Barotrauma.Items.Components if (otherConnection == null) { - GameServer.Log(c.Character.LogName + " connected a wire to " + + GameServer.Log(GameServer.CharacterLogName(c.Character) + " connected a wire to " + Connections[i].Item.Name + " (" + Connections[i].Name + ")", ServerLog.MessageType.Wiring); } else { - GameServer.Log(c.Character.LogName + " connected a wire from " + + GameServer.Log(GameServer.CharacterLogName(c.Character) + " connected a wire from " + Connections[i].Item.Name + " (" + Connections[i].Name + ") to " + (otherConnection == null ? "none" : otherConnection.Item.Name + " (" + (otherConnection.Name) + ")"), ServerLog.MessageType.Wiring); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/CustomInterface.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/CustomInterface.cs index 58c896d2e..4d15cc9e2 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/CustomInterface.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/CustomInterface.cs @@ -24,7 +24,7 @@ namespace Barotrauma.Items.Components } CustomInterfaceElement clickedButton = null; - if (item.CanClientAccess(c)) + if ((c.Character != null && DrawHudWhenEquipped && item.ParentInventory?.Owner == c.Character) || item.CanClientAccess(c)) { for (int i = 0; i < customInterfaceElementList.Count; i++) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs index 7bd88be3d..1950c4adf 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs @@ -14,7 +14,7 @@ namespace Barotrauma.Items.Components { newOutputValue = newOutputValue.Substring(0, MaxMessageLength); } - GameServer.Log(c.Character.LogName + " entered \"" + newOutputValue + "\" on " + item.Name, + GameServer.Log(GameServer.CharacterLogName(c.Character) + " entered \"" + newOutputValue + "\" on " + item.Name, ServerLog.MessageType.ItemInteraction); OutputValue = newOutputValue; item.SendSignal(0, newOutputValue, "signal_out", null); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Inventory.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Inventory.cs index c1fe0a535..0574ec775 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Inventory.cs @@ -66,6 +66,19 @@ namespace Barotrauma Item droppedItem = Items[i]; Entity prevOwner = Owner; droppedItem.Drop(null); + + var previousInventory = prevOwner switch + { + Item itemInventory => (itemInventory.FindParentInventory(inventory => inventory is CharacterInventory) as CharacterInventory), + Character character => character.Inventory, + _ => null + }; + + if (previousInventory != null && previousInventory != c.Character?.Inventory) + { + GameMain.Server?.KarmaManager.OnItemTakenFromPlayer(previousInventory, c, droppedItem); + } + if (droppedItem.body != null && prevOwner != null) { droppedItem.body.SetTransform(prevOwner.SimPosition, 0.0f); @@ -120,11 +133,11 @@ namespace Barotrauma { if (Owner == c.Character) { - GameServer.Log(c.Character.LogName+ " picked up " + item.Name, ServerLog.MessageType.Inventory); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " picked up " + item.Name, ServerLog.MessageType.Inventory); } else { - GameServer.Log(c.Character.LogName + " placed " + item.Name + " in " + Owner, ServerLog.MessageType.Inventory); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " placed " + item.Name + " in " + Owner, ServerLog.MessageType.Inventory); } } } @@ -135,11 +148,11 @@ namespace Barotrauma { if (Owner == c.Character) { - GameServer.Log(c.Character.LogName + " dropped " + item.Name, ServerLog.MessageType.Inventory); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " dropped " + item.Name, ServerLog.MessageType.Inventory); } else { - GameServer.Log(c.Character.LogName + " removed " + item.Name + " from " + Owner, ServerLog.MessageType.Inventory); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " removed " + item.Name + " from " + Owner, ServerLog.MessageType.Inventory); } } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs index 826ff1260..db01d330e 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs @@ -186,12 +186,12 @@ namespace Barotrauma if (ContainedItems == null || ContainedItems.All(i => i == null)) { - GameServer.Log(c.Character.LogName + " used item " + Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(c.Character) + " used item " + Name, ServerLog.MessageType.ItemInteraction); } else { GameServer.Log( - c.Character.LogName + " used item " + Name + " (contained items: " + string.Join(", ", ContainedItems.Select(i => i.Name)) + ")", + GameServer.CharacterLogName(c.Character) + " used item " + Name + " (contained items: " + string.Join(", ", ContainedItems.Select(i => i.Name)) + ")", ServerLog.MessageType.ItemInteraction); } @@ -213,7 +213,7 @@ namespace Barotrauma } } - public void WriteSpawnData(IWriteMessage msg, UInt16 entityID) + public void WriteSpawnData(IWriteMessage msg, UInt16 entityID, UInt16 originalInventoryID) { if (GameMain.Server == null) return; @@ -227,7 +227,7 @@ namespace Barotrauma msg.Write(entityID); - if (ParentInventory == null || ParentInventory.Owner == null) + if (ParentInventory == null || ParentInventory.Owner == null || originalInventoryID == 0) { msg.Write((ushort)0); @@ -237,7 +237,7 @@ namespace Barotrauma } else { - msg.Write(ParentInventory.Owner.ID); + msg.Write(originalInventoryID); //find the index of the ItemContainer this item is inside to get the item to //spawn in the correct inventory in multi-inventory items like fabricators diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs index 0924c5e72..e02c6ba3f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Net; @@ -347,7 +347,7 @@ namespace Barotrauma.Networking BannedPlayer bannedPlayer = bannedPlayers.Find(p => p.UniqueIdentifier == id); if (bannedPlayer != null) { - GameServer.Log(c.Name + " unbanned " + bannedPlayer.Name + " (" + bannedPlayer.IP + ")", ServerLog.MessageType.ConsoleUsage); + GameServer.Log(GameServer.ClientLogName(c) + " unbanned " + bannedPlayer.Name + " (" + bannedPlayer.IP + ")", ServerLog.MessageType.ConsoleUsage); RemoveBan(bannedPlayer); } } @@ -358,7 +358,7 @@ namespace Barotrauma.Networking BannedPlayer bannedPlayer = bannedPlayers.Find(p => p.UniqueIdentifier == id); if (bannedPlayer != null) { - GameServer.Log(c.Name + " rangebanned " + bannedPlayer.Name + " (" + bannedPlayer.IP + ")", ServerLog.MessageType.ConsoleUsage); + GameServer.Log(GameServer.ClientLogName(c) + " rangebanned " + bannedPlayer.Name + " (" + bannedPlayer.IP + ")", ServerLog.MessageType.ConsoleUsage); RangeBan(bannedPlayer); } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs index 84044b2af..e2468f5cc 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs @@ -159,6 +159,7 @@ namespace Barotrauma.Networking msg.Write((byte)ServerNetObject.CHAT_MESSAGE); msg.Write(NetStateID); msg.Write((byte)Type); + msg.Write((byte)ChangeType); msg.Write(Text); msg.Write(SenderName); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/ChildServerRelay.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/ChildServerRelay.cs index 1a1bbb96b..6226d0b2c 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/ChildServerRelay.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/ChildServerRelay.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.IO.Pipes; using System.Text; using System.Threading; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs index 0c60acc5b..7d30c1db1 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs @@ -75,7 +75,8 @@ namespace Barotrauma.Networking public bool SpectateOnly; public int KarmaKickCount; - + + private float syncedKarma = 100.0f; private float karma = 100.0f; public float Karma { @@ -89,6 +90,11 @@ namespace Barotrauma.Networking { if (GameMain.Server == null || !GameMain.Server.ServerSettings.KarmaEnabled) { return; } karma = Math.Min(Math.Max(value, 0.0f), 100.0f); + if (!MathUtils.NearlyEqual(karma, syncedKarma, 10.0f)) + { + syncedKarma = karma; + GameMain.NetworkMember.LastClientListUpdateID++; + } } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/EntitySpawner.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/EntitySpawner.cs index ac4111dea..b43825dde 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/EntitySpawner.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/EntitySpawner.cs @@ -35,7 +35,7 @@ namespace Barotrauma { message.Write((byte)SpawnableType.Item); DebugConsole.Log("Writing item spawn data " + entities.Entity.ToString() + " (original ID: " + entities.OriginalID + ", current ID: " + entities.Entity.ID + ")"); - ((Item)entities.Entity).WriteSpawnData(message, entities.OriginalID); + ((Item)entities.Entity).WriteSpawnData(message, entities.OriginalID, entities.OriginalInventoryID); } else if (entities.Entity is Character) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs index 74704c129..c2746718e 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Threading; @@ -93,7 +93,7 @@ namespace Barotrauma.Networking { data = File.ReadAllBytes(filePath); } - catch (IOException e) + catch (System.IO.IOException e) { if (i >= maxRetries) { throw; } DebugConsole.NewMessage("Failed to initiate a file transfer {" + e.Message + "}, retrying in 250 ms...", Color.Red); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index 05e174ce6..ee5a57d39 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -8,7 +8,7 @@ using System.Diagnostics; using System.Linq; using System.Text; using System.IO.Compression; -using System.IO; +using Barotrauma.IO; using Barotrauma.Steam; using System.Xml.Linq; using System.Threading; @@ -279,7 +279,7 @@ namespace Barotrauma.Networking SendConsoleMessage("Granted all permissions to " + newClient.Name + ".", newClient); } - SendChatMessage($"ServerMessage.JoinedServer~[client]={clName}", ChatMessageType.Server, null); + SendChatMessage($"ServerMessage.JoinedServer~[client]={clName}", ChatMessageType.Server, null, changeType: PlayerConnectionChangeType.Joined); serverSettings.ServerDetailsChanged = true; if (previousPlayer != null && previousPlayer.Name != newClient.Name) @@ -338,6 +338,8 @@ namespace Barotrauma.Networking fileSender.Update(deltaTime); KarmaManager.UpdateClients(ConnectedClients, deltaTime); + UpdatePing(); + if (serverSettings.VoiceChatEnabled) { VoipServer.SendToClients(connectedClients); @@ -611,6 +613,41 @@ namespace Barotrauma.Networking } } + + private double lastPingTime; + private byte[] lastPingData; + private void UpdatePing() + { + if (Timing.TotalTime > lastPingTime + 1.0) + { + lastPingData ??= new byte[64]; + for (int i=0;i + { + IWriteMessage pingReq = new WriteOnlyMessage(); + pingReq.Write((byte)ServerPacketHeader.PING_REQUEST); + pingReq.Write((byte)lastPingData.Length); + pingReq.Write(lastPingData, 0, lastPingData.Length); + serverPeer.Send(pingReq, c.Connection, DeliveryMethod.Unreliable); + + IWriteMessage pingInf = new WriteOnlyMessage(); + pingInf.Write((byte)ServerPacketHeader.CLIENT_PINGS); + pingInf.Write((byte)ConnectedClients.Count); + ConnectedClients.ForEach(c2 => + { + pingInf.Write(c2.ID); + pingInf.Write(c2.Ping); + }); + serverPeer.Send(pingInf, c.Connection, DeliveryMethod.Unreliable); + }); + } + } + private void ReadDataMessage(NetworkConnection sender, IReadMessage inc) { var connectedClient = connectedClients.Find(c => c.Connection == sender); @@ -618,6 +655,16 @@ namespace Barotrauma.Networking ClientPacketHeader header = (ClientPacketHeader)inc.ReadByte(); switch (header) { + case ClientPacketHeader.PING_RESPONSE: + byte responseLen = inc.ReadByte(); + if (responseLen != lastPingData.Length) { return; } + for (int i=0;i cl != sender && cl.Name.Equals(kickedName, StringComparison.OrdinalIgnoreCase) && cl.Connection != OwnerConnection); if (kickedClient != null) { - Log("Client \"" + sender.Name + "\" kicked \"" + kickedClient.Name + "\".", ServerLog.MessageType.ServerMessage); + Log("Client \"" + GameServer.ClientLogName(sender) + "\" kicked \"" + GameServer.ClientLogName(kickedClient) + "\".", ServerLog.MessageType.ServerMessage); KickClient(kickedClient, string.IsNullOrEmpty(kickReason) ? $"ServerMessage.KickedBy~[initiator]={sender.Name}" : kickReason); } else @@ -1097,7 +1156,7 @@ namespace Barotrauma.Networking var bannedClient = connectedClients.Find(cl => cl != sender && cl.Name.Equals(bannedName, StringComparison.OrdinalIgnoreCase) && cl.Connection != OwnerConnection); if (bannedClient != null) { - Log("Client \"" + sender.Name + "\" banned \"" + bannedClient.Name + "\".", ServerLog.MessageType.ServerMessage); + Log("Client \"" + GameServer.ClientLogName(sender) + "\" banned \"" + GameServer.ClientLogName(bannedClient) + "\".", ServerLog.MessageType.ServerMessage); if (durationSeconds > 0) { BanClient(bannedClient, string.IsNullOrEmpty(banReason) ? $"ServerMessage.BannedBy~[initiator]={sender.Name}" : banReason, range, TimeSpan.FromSeconds(durationSeconds)); @@ -1121,12 +1180,12 @@ namespace Barotrauma.Networking bool end = inc.ReadBoolean(); if (gameStarted && end) { - Log("Client \"" + sender.Name + "\" ended the round.", ServerLog.MessageType.ServerMessage); + Log("Client \"" + GameServer.ClientLogName(sender) + "\" ended the round.", ServerLog.MessageType.ServerMessage); EndGame(); } else if (!gameStarted && !end && !initiatedStartGame) { - Log("Client \"" + sender.Name + "\" started the round.", ServerLog.MessageType.ServerMessage); + Log("Client \"" + GameServer.ClientLogName(sender) + "\" started the round.", ServerLog.MessageType.ServerMessage); StartGame(); } break; @@ -1137,7 +1196,7 @@ namespace Barotrauma.Networking var subList = GameMain.NetLobbyScreen.GetSubList(); if (subIndex >= subList.Count) { - DebugConsole.NewMessage("Client \"" + sender.Name + "\" attempted to select a sub, index out of bounds (" + subIndex + ")", Color.Red); + DebugConsole.NewMessage("Client \"" + GameServer.ClientLogName(sender) + "\" attempted to select a sub, index out of bounds (" + subIndex + ")", Color.Red); } else { @@ -1220,12 +1279,12 @@ namespace Barotrauma.Networking string logMsg; if (permissionNames.Any()) { - logMsg = "Client \"" + sender.Name + "\" set the permissions of the client \"" + targetClient.Name + "\" to " + logMsg = "Client \"" + GameServer.ClientLogName(sender) + "\" set the permissions of the client \"" + GameServer.ClientLogName(targetClient) + "\" to " + string.Join(", ", permissionNames); } else { - logMsg = "Client \"" + sender.Name + "\" removed all permissions from the client \"" + targetClient.Name + "."; + logMsg = "Client \"" + GameServer.ClientLogName(sender) + "\" removed all permissions from the client \"" + GameServer.ClientLogName(targetClient) + "."; } Log(logMsg, ServerLog.MessageType.ServerMessage); @@ -1484,9 +1543,21 @@ namespace Barotrauma.Networking outmsg.Write(client.Name); outmsg.Write(client.Character == null || !gameStarted ? (client.PreferredJob ?? "") : ""); outmsg.Write(client.Character == null || !gameStarted ? (ushort)0 : client.Character.ID); + if (c.HasPermission(ClientPermissions.ServerLog)) + { + outmsg.Write(client.Karma); + } + else + { + outmsg.Write(100.0f); + } outmsg.Write(client.Muted); outmsg.Write(client.InGame); - outmsg.Write(client.Connection != OwnerConnection); //is kicking the player allowed + outmsg.Write(client.Permissions != ClientPermissions.None); + outmsg.Write(client.Connection != OwnerConnection && + !client.HasPermission(ClientPermissions.Ban) && + !client.HasPermission(ClientPermissions.Kick) && + !client.HasPermission(ClientPermissions.Unban)); //is kicking the player allowed outmsg.WritePadBits(); } } @@ -1846,6 +1917,15 @@ namespace Barotrauma.Networking var teamID = n == 0 ? Character.TeamType.Team1 : Character.TeamType.Team2; Submarine.MainSubs[n].TeamID = teamID; + foreach (Item item in Item.ItemList) + { + if (item.Submarine == null) { continue; } + if (item.Submarine != Submarine.MainSubs[n] && !Submarine.MainSubs[n].DockedTo.Contains(item.Submarine)) { continue; } + foreach (WifiComponent wifiComponent in item.GetComponents()) + { + wifiComponent.TeamID = Submarine.MainSubs[n].TeamID; + } + } foreach (Submarine sub in Submarine.MainSubs[n].DockedTo) { sub.TeamID = teamID; @@ -2139,7 +2219,16 @@ namespace Barotrauma.Networking public override void AddChatMessage(ChatMessage message) { if (string.IsNullOrEmpty(message.Text)) { return; } - Log(message.TextWithSender, ServerLog.MessageType.Chat); + string logMsg; + if (message.SenderClient != null) + { + logMsg = GameServer.ClientLogName(message.SenderClient) + ": " + message.TranslatedText; + } + else + { + logMsg = message.TextWithSender; + } + Log(logMsg, ServerLog.MessageType.Chat); base.AddChatMessage(message); } @@ -2223,7 +2312,7 @@ namespace Barotrauma.Networking string msg = DisconnectReason.Kicked.ToString(); string logMsg = $"ServerMessage.KickedFromServer~[client]={client.Name}"; - DisconnectClient(client, logMsg, msg, reason); + DisconnectClient(client, logMsg, msg, reason, PlayerConnectionChangeType.Kicked); } public override void BanPlayer(string playerName, string reason, bool range = false, TimeSpan? duration = null) @@ -2254,7 +2343,7 @@ namespace Barotrauma.Networking client.Karma = Math.Max(client.Karma, 50.0f); string targetMsg = DisconnectReason.Banned.ToString(); - DisconnectClient(client, $"ServerMessage.BannedFromServer~[client]={client.Name}", targetMsg, reason); + DisconnectClient(client, $"ServerMessage.BannedFromServer~[client]={client.Name}", targetMsg, reason, PlayerConnectionChangeType.Banned); if (client.SteamID == 0 || range) { @@ -2298,10 +2387,10 @@ namespace Barotrauma.Networking Client client = connectedClients.Find(x => x.Connection == senderConnection); if (client == null) return; - DisconnectClient(client, msg, targetmsg, string.Empty); + DisconnectClient(client, msg, targetmsg, string.Empty, PlayerConnectionChangeType.Disconnected); } - public void DisconnectClient(Client client, string msg = "", string targetmsg = "", string reason = "") + public void DisconnectClient(Client client, string msg = "", string targetmsg = "", string reason = "", PlayerConnectionChangeType changeType = PlayerConnectionChangeType.Disconnected) { if (client == null) return; @@ -2348,7 +2437,7 @@ namespace Barotrauma.Networking UpdateVoteStatus(); - SendChatMessage(msg, ChatMessageType.Server); + SendChatMessage(msg, ChatMessageType.Server, changeType: changeType); UpdateCrewFrame(); @@ -2397,7 +2486,7 @@ namespace Barotrauma.Networking /// /// Add the message to the chatbox and pass it to all clients who can receive it /// - public void SendChatMessage(string message, ChatMessageType? type = null, Client senderClient = null, Character senderCharacter = null) + public void SendChatMessage(string message, ChatMessageType? type = null, Client senderClient = null, Character senderCharacter = null, PlayerConnectionChangeType changeType = PlayerConnectionChangeType.None) { string senderName = ""; @@ -2482,17 +2571,20 @@ namespace Barotrauma.Networking senderCharacter = senderClient.Character; senderName = senderCharacter == null ? senderClient.Name : senderCharacter.Name; + if (type == ChatMessageType.Private) + { + if (senderCharacter != null && !senderCharacter.IsDead || targetClient.Character != null && !targetClient.Character.IsDead) + { + //sender or target has an alive character, sending private messages not allowed + SendDirectChatMessage(ChatMessage.Create("", $"ServerMessage.PrivateMessagesNotAllowed", ChatMessageType.Error, null), senderClient); + return; + } + } //sender doesn't have a character or the character can't speak -> only ChatMessageType.Dead allowed - if (senderCharacter == null || senderCharacter.IsDead || senderCharacter.SpeechImpediment >= 100.0f) + else if (senderCharacter == null || senderCharacter.IsDead || senderCharacter.SpeechImpediment >= 100.0f) { type = ChatMessageType.Dead; } - else if (type == ChatMessageType.Private) - { - //sender has an alive character, sending private messages not allowed - return; - } - } } else @@ -2588,7 +2680,9 @@ namespace Barotrauma.Networking senderName, modifiedMessage, (ChatMessageType)type, - senderCharacter); + senderCharacter, + senderClient, + changeType); SendDirectChatMessage(chatMsg, client); } @@ -2659,6 +2753,9 @@ namespace Barotrauma.Networking var clientsToKick = connectedClients.FindAll(c => c.Connection != OwnerConnection && + !c.HasPermission(ClientPermissions.Kick) && + !c.HasPermission(ClientPermissions.Ban) && + !c.HasPermission(ClientPermissions.Unban) && c.KickVoteCount >= connectedClients.Count * serverSettings.KickVoteRequiredRatio); foreach (Client c in clientsToKick) { @@ -2669,7 +2766,7 @@ namespace Barotrauma.Networking previousPlayer.KickVoters.Clear(); } - SendChatMessage($"ServerMessage.KickedFromServer~[client]={c.Name}", ChatMessageType.Server, null); + SendChatMessage($"ServerMessage.KickedFromServer~[client]={c.Name}", ChatMessageType.Server, null, changeType: PlayerConnectionChangeType.Kicked); KickClient(c, "ServerMessage.KickedByVote"); BanClient(c, "ServerMessage.KickedByVoteAutoBan", duration: TimeSpan.FromSeconds(serverSettings.AutoBanTime)); } @@ -2853,6 +2950,11 @@ namespace Barotrauma.Networking { newCharacter.LastNetworkUpdateID = client.Character.LastNetworkUpdateID; } + + if (newCharacter.Info != null && newCharacter.Info.Character == null) + { + newCharacter.Info.Character = newCharacter; + } newCharacter.OwnerClientEndPoint = client.Connection.EndPointString; newCharacter.OwnerClientName = client.Name; @@ -3199,6 +3301,25 @@ namespace Barotrauma.Networking } } + public static string ClientLogName(Client client, string name = null) + { + if (client == null) { return name; } + string retVal = "‖"; + if (client.Karma < 40.0f) + { + retVal += "color:#ff9900;"; + } + retVal += "metadata:" + (client.SteamID!=0 ? client.SteamID.ToString() : client.ID.ToString()) + "‖" + (name ?? client.Name) + "‖end‖"; + return retVal; + } + + public static string CharacterLogName(Character character) + { + if (character == null) { return "[NULL]"; } + Client client = GameMain.Server.ConnectedClients.Find(c => c.Character == character); + return ClientLogName(client, character.LogName); + } + public static void Log(string line, ServerLog.MessageType messageType) { if (GameMain.Server == null || !GameMain.Server.ServerSettings.SaveServerLogs) return; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs index 8b5227fdb..1ecbbab59 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs @@ -3,6 +3,7 @@ using Barotrauma.Networking; using System; using System.Collections.Generic; using System.Linq; +using Barotrauma.Extensions; namespace Barotrauma { @@ -12,8 +13,18 @@ namespace Barotrauma { public List> WireDisconnectTime = new List>(); + public struct TimeAmount + { + public double Time; + public float Amount; + } + + public List KarmaDecreasesInPastMinute = new List(); + public float PreviousNotifiedKarma; + public double PreviousKarmaNotificationTime; + public float StructureDamageAccumulator; private float structureDamagePerSecond; @@ -23,6 +34,9 @@ namespace Barotrauma set { structureDamagePerSecond = value; } } + public List StunsInPastMinute = new List(); + public float StunKarmaDecreaseMultiplier; + //when did a given character last attack this one public Dictionary LastAttackTime { @@ -53,6 +67,13 @@ namespace Barotrauma clientMemory.StructureDamagePerSecond = clientMemory.StructureDamageAccumulator; clientMemory.StructureDamageAccumulator = 0.0f; + clientMemory.StunsInPastMinute.RemoveAll(s => s.Time + 60.0f < Timing.TotalTime); + + if (!clientMemory.StunsInPastMinute.Any()) + { + clientMemory.StunKarmaDecreaseMultiplier = 1.0f; + } + var toRemove = clientMemory.LastAttackTime.Where(pair => pair.Value < Timing.TotalTime - AllowedRetaliationTime).Select(pair => pair.Key).ToList(); foreach (var lastAttacker in toRemove) { @@ -89,28 +110,26 @@ namespace Barotrauma var clientMemory = GetClientMemory(client); float karmaChange = client.Karma - clientMemory.PreviousNotifiedKarma; - if (Math.Abs(karmaChange) > 1.0f && - (TestMode || Math.Abs(karmaChange) / clientMemory.PreviousNotifiedKarma > KarmaNotificationInterval / 100.0f)) + if (Math.Abs(karmaChange) > 1.0f && TestMode) { - if (TestMode) + string msg = + karmaChange < 0 ? $"Your karma has decreased to {client.Karma}" : $"Your karma has increased to {client.Karma}"; + if (!string.IsNullOrEmpty(debugKarmaChangeReason)) { - string msg = - karmaChange < 0 ? $"Your karma has decreased to {client.Karma}" : $"Your karma has increased to {client.Karma}"; - if (!string.IsNullOrEmpty(debugKarmaChangeReason)) - { - msg += $". Reason: {debugKarmaChangeReason}"; - } - GameMain.Server.SendDirectChatMessage(msg, client); + msg += $". Reason: {debugKarmaChangeReason}"; } - else if (Math.Abs(KickBanThreshold - client.Karma) < KarmaNotificationInterval) - { - GameMain.Server.SendDirectChatMessage(TextManager.Get("KarmaBanWarning"), client); - } - else - { - GameMain.Server.SendDirectChatMessage(TextManager.Get(karmaChange < 0 ? "KarmaDecreasedUnknownAmount" : "KarmaIncreasedUnknownAmount"), client); - } - clientMemory.PreviousNotifiedKarma = client.Karma; + GameMain.Server.SendDirectChatMessage(msg, client); + clientMemory.PreviousNotifiedKarma = client.Karma; + clientMemory.PreviousKarmaNotificationTime = Timing.TotalTime; + } + else if (Timing.TotalTime >= clientMemory.PreviousKarmaNotificationTime + 5.0f && + clientMemory.PreviousNotifiedKarma >= KickBanThreshold + KarmaNotificationInterval && + client.Karma < KickBanThreshold + KarmaNotificationInterval) + { + GameMain.Server.SendDirectChatMessage(TextManager.Get("KarmaBanWarning"), client); + GameServer.Log(GameServer.ClientLogName(client) + " has been warned for having dangerously low karma.", ServerLog.MessageType.Karma); + clientMemory.PreviousNotifiedKarma = client.Karma; + clientMemory.PreviousKarmaNotificationTime = Timing.TotalTime; } } @@ -130,10 +149,10 @@ namespace Barotrauma //increase the strength of the herpes affliction in steps instead of linearly //otherwise clients could determine their exact karma value from the strength float herpesStrength = 0.0f; - if (client.Karma < 20) - herpesStrength = 100.0f; - else if (client.Karma < 30) - herpesStrength = 60.0f; + if (client.Karma < 20) + herpesStrength = 100.0f; + else if (client.Karma < 30) + herpesStrength = 60.0f; else if (client.Karma < 40.0f) herpesStrength = 30.0f; @@ -141,6 +160,8 @@ namespace Barotrauma if (existingAffliction == null && herpesStrength > 0.0f) { client.Character.CharacterHealth.ApplyAffliction(null, new Affliction(herpesAffliction, herpesStrength)); + GameServer.Log($"{GameServer.ClientLogName(client)} has contracted space herpes due to low karma.", ServerLog.MessageType.Karma); + GameMain.NetworkMember.LastClientListUpdateID++; } else if (existingAffliction != null) { @@ -205,7 +226,84 @@ namespace Barotrauma clientMemories.Remove(client); } - public void OnCharacterHealthChanged(Character target, Character attacker, float damage, IEnumerable appliedAfflictions = null) + // ReSharper disable once UseNegatedPatternMatching, LoopCanBeConvertedToQuery + public void OnItemTakenFromPlayer(CharacterInventory inventory, Client yoinker, Item item) + { + Client targetClient = GameMain.Server.ConnectedClients.Find(c => c.Character == inventory.Owner); + + Character yoinkerCharacter = yoinker?.Character; + Character targetCharacter = inventory.Owner as Character; + + if (yoinker == null || item == null || yoinkerCharacter == null || targetCharacter == null || yoinkerCharacter == targetCharacter) { return; } + + if (targetClient == null && (!DangerousItemStealBots || targetCharacter.AIController == null)) { return; } + + // Only if the target is alive and they are stunned, unconscious or handcuffed + if (targetCharacter.IsDead || targetCharacter.Removed || !(targetCharacter.Stun > 0) && !targetCharacter.IsUnconscious && !targetCharacter.LockHands) { return; } + + if (GameMain.Server.TraitorManager?.Traitors != null) + { + if (GameMain.Server.TraitorManager.Traitors.Any(t => t.Character == targetCharacter || t.Character == yoinkerCharacter)) + { + // Don't penalize traitors + return; + } + } + + var foundItem = Inventory.FindItemRecursive(item, it => it.Prefab.Identifier == "idcard" || it.GetComponent() != null || it.GetComponent() != null); + + if (foundItem == null) { return; } + + bool isIdCard = foundItem.prefab.Identifier == "idcard"; + bool isWeapon = foundItem.GetComponent() != null || foundItem.GetComponent() != null; + + if (isIdCard) + { + string name = string.Empty; + + foreach (var tag in foundItem.Tags.Split(',')) + { + string[] split = tag.Split(':'); + string key = split.Length > 0 ? split[0] : string.Empty; + string value = split.Length > 1 ? split[1] : string.Empty; + if (key == "name") { name = value; } + } + + // Name tag doesn't belong to anyone in particular or we own the ID card + if (name == null || name == yoinkerCharacter.Name) { return; } + } + + if (MathUtils.NearlyEqual(DangerousItemStealKarmaDecrease, 0)) { return; } + + const float calcUpper = 1, calcLower = -1; + + float upper = DangerousItemStealKarmaDecrease + 10.0f; + float lower = DangerousItemStealKarmaDecrease - 10.0f; + + if (lower < 0) + { + upper += Math.Abs(lower); + lower = 0; + } + + // If we're stealing from a bot assume the bot has 50 karma + var targetKarma = targetClient?.Karma ?? 50; + + float karmaDifference = Math.Clamp((targetKarma - yoinker.Karma) / 50.0f, calcLower, calcUpper); + float karmaDecrease = lower + (karmaDifference - calcLower) * (upper - lower) / (calcUpper - calcLower); + + JobPrefab clientJob = yoinker.CharacterInfo?.Job?.Prefab; + + // security officers receive less karma penalty + if (clientJob != null && clientJob.Identifier == "securityofficer" && isWeapon) + { + karmaDecrease *= 0.5f; + } + + AdjustKarma(yoinkerCharacter, -karmaDecrease, "Stolen dangerous item"); + } + + public void OnCharacterHealthChanged(Character target, Character attacker, float damage, float stun, IEnumerable appliedAfflictions = null) { if (target == null || attacker == null) { return; } if (target == attacker) { return; } @@ -238,11 +336,11 @@ namespace Barotrauma if (appliedAfflictions != null) { - foreach (Affliction affliction in appliedAfflictions) - { - if (MathUtils.NearlyEqual(affliction.Prefab.KarmaChangeOnApplied, 0.0f)) { continue; } - damage -= affliction.Prefab.KarmaChangeOnApplied * affliction.Strength; - } + foreach (Affliction affliction in appliedAfflictions) + { + if (MathUtils.NearlyEqual(affliction.Prefab.KarmaChangeOnApplied, 0.0f)) { continue; } + damage -= affliction.Prefab.KarmaChangeOnApplied * affliction.Strength; + } } Client targetClient = GameMain.Server.ConnectedClients.Find(c => c.Character == target); @@ -253,15 +351,16 @@ namespace Barotrauma } Client attackerClient = GameMain.Server.ConnectedClients.Find(c => c.Character == attacker); - if (attackerClient != null) + ClientMemory attackerMemory = GetClientMemory(attackerClient); + if (attackerMemory != null) { //if the attacker has been attacked by the target within the last x seconds, ignore the damage //(= no karma penalty from retaliating against someone who attacked you) - var attackerMemory = GetClientMemory(attackerClient); if (attackerMemory.LastAttackTime.ContainsKey(target) && attackerMemory.LastAttackTime[target] > Timing.TotalTime - AllowedRetaliationTime) { damage = Math.Min(damage, 0); + stun = 0.0f; } } @@ -270,6 +369,7 @@ namespace Barotrauma target.HasEquippedItem("clowncostume")) { damage *= 0.5f; + stun *= 0.5f; } //smaller karma penalty for attacking someone who's aiming with a weapon @@ -278,6 +378,7 @@ namespace Barotrauma target.SelectedItems.Any(it => it != null && (it.GetComponent() != null || it.GetComponent() != null))) { damage *= 0.5f; + stun *= 0.5f; } //damage scales according to the karma of the target @@ -298,6 +399,30 @@ namespace Barotrauma } else { + if (stun > 0 && attackerMemory != null) + { + //GameServer.Log(GameServer.CharacterLogName(attacker) + " stunned " + GameServer.CharacterLogName(target) + $" ({stun})", ServerLog.MessageType.Karma); + attackerMemory.StunsInPastMinute.Add(new ClientMemory.TimeAmount() { Time = Timing.TotalTime, Amount = stun }); + + if (attackerMemory.StunsInPastMinute.Count > 1) + { + float avgStunsInflicted = attackerMemory.StunsInPastMinute[0].Amount / (float)(attackerMemory.StunsInPastMinute[1].Time - attackerMemory.StunsInPastMinute[0].Time); + for (int i = 1; i < attackerMemory.StunsInPastMinute.Count; i++) + { + avgStunsInflicted += attackerMemory.StunsInPastMinute[i].Amount / (float)(attackerMemory.StunsInPastMinute[i].Time - attackerMemory.StunsInPastMinute[i - 1].Time); + } + + //GameServer.Log(avgStunsInflicted.ToString(), ServerLog.MessageType.Karma); + + if (avgStunsInflicted > StunFriendlyKarmaDecreaseThreshold || + attackerMemory.StunKarmaDecreaseMultiplier > 1.0f) + { + AdjustKarma(attacker, -StunFriendlyKarmaDecrease * attackerMemory.StunKarmaDecreaseMultiplier, "Stunned friendly"); + attackerMemory.StunKarmaDecreaseMultiplier *= 2.0f; + } + } + } + if (damage > 0) { AdjustKarma(attacker, -damage * DamageFriendlyKarmaDecrease, "Damaged friendly"); @@ -395,6 +520,7 @@ namespace Barotrauma private ClientMemory GetClientMemory(Client client) { + if (client == null) { return null; } if (!clientMemories.ContainsKey(client)) { clientMemories[client] = new ClientMemory() @@ -429,6 +555,21 @@ namespace Barotrauma } client.Karma += amount; + + if (amount < 0.0f) + { + float? herpesStrength = client.Character?.CharacterHealth.GetAfflictionStrength("spaceherpes"); + var clientMemory = GetClientMemory(client); + clientMemory.KarmaDecreasesInPastMinute.RemoveAll(ta => ta.Time + 60.0f < Timing.TotalTime); + float aggregate = clientMemory.KarmaDecreasesInPastMinute.Select(ta => ta.Amount).DefaultIfEmpty().Aggregate((a, b) => a + b); + clientMemory.KarmaDecreasesInPastMinute.Add(new ClientMemory.TimeAmount() { Time = Timing.TotalTime, Amount = -amount }); + + if (herpesStrength.HasValue && herpesStrength <= 0.0f && aggregate - amount > 25.0f && aggregate <= 25.0f) + { + GameServer.Log($"{GameServer.ClientLogName(client)} has lost more than 25 karma in the past minute.", ServerLog.MessageType.Karma); + } + } + if (TestMode) { SendKarmaNotifications(client, debugKarmaChangeReason); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs index 81c37c14c..7dfb9041a 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs @@ -138,7 +138,12 @@ namespace Barotrauma.Networking //remove old events that have been sent to all clients, they are redundant now // keep at least one event in the list (lastSentToAll == e.ID) so we can use it to keep track of the latest ID // and events less than 15 seconds old to give disconnected clients a bit of time to reconnect without getting desynced - events.RemoveAll(e => (NetIdUtils.IdMoreRecent(lastSentToAll, e.ID) || !inGameClientsPresent) && e.CreateTime < Timing.TotalTime - 15.0f); + if (Timing.TotalTime > GameMain.GameSession.RoundStartTime + NetConfig.RoundStartSyncDuration) + { + events.RemoveAll(e => + (NetIdUtils.IdMoreRecent(lastSentToAll, e.ID) || !inGameClientsPresent) && + e.CreateTime < Timing.TotalTime - NetConfig.EventRemovalTime); + } for (int i = events.Count - 1; i >= 0; i--) { @@ -224,7 +229,9 @@ namespace Barotrauma.Networking }); lastSentToAnyoneTime = events.Find(e => e.ID == lastSentToAnyone)?.CreateTime ?? Timing.TotalTime; - if ((Timing.TotalTime - lastSentToAnyoneTime) > 10.0 && (Timing.TotalTime - lastWarningTime) > 5.0) + if (Timing.TotalTime - lastWarningTime > 5.0 && + Timing.TotalTime - lastSentToAnyoneTime > 10.0 && + Timing.TotalTime > GameMain.GameSession.RoundStartTime + NetConfig.RoundStartSyncDuration) { lastWarningTime = Timing.TotalTime; GameServer.Log("WARNING: ServerEntityEventManager is lagging behind! Last sent id: " + lastSentToAnyone.ToString() + ", latest create id: " + ID.ToString(), ServerLog.MessageType.ServerMessage); @@ -235,19 +242,21 @@ namespace Barotrauma.Networking clients.Where(c => c.NeedsMidRoundSync).ForEach(c => { if (NetIdUtils.IdMoreRecent(lastSentToAll, c.FirstNewEventID)) lastSentToAll = (ushort)(c.FirstNewEventID - 1); }); ServerEntityEvent firstEventToResend = events.Find(e => e.ID == (ushort)(lastSentToAll + 1)); - if (firstEventToResend != null && ((lastSentToAnyoneTime - firstEventToResend.CreateTime) > 10.0 || (Timing.TotalTime - firstEventToResend.CreateTime) > 30.0)) + if (firstEventToResend != null && + Timing.TotalTime > GameMain.GameSession.RoundStartTime + NetConfig.RoundStartSyncDuration && + ((lastSentToAnyoneTime - firstEventToResend.CreateTime) > NetConfig.OldReceivedEventKickTime || (Timing.TotalTime - firstEventToResend.CreateTime) > NetConfig.OldEventKickTime)) { // This event is 10 seconds older than the last one we've successfully sent, // kick everyone that hasn't received it yet, this is way too old // UNLESS the event was created when the client was still midround syncing, // in which case we'll wait until the timeout runs out before kicking the client List toKick = inGameClients.FindAll(c => - NetIdUtils.IdMoreRecent((UInt16)(lastSentToAll + 1), c.LastRecvEntityEventID) && + NetIdUtils.IdMoreRecent((UInt16)(lastSentToAll + 1), c.LastRecvEntityEventID) && (firstEventToResend.CreateTime > c.MidRoundSyncTimeOut || lastSentToAnyoneTime > c.MidRoundSyncTimeOut || Timing.TotalTime > c.MidRoundSyncTimeOut + 10.0)); toKick.ForEach(c => { DebugConsole.NewMessage(c.Name + " was kicked due to excessive desync (expected old event " + (c.LastRecvEntityEventID + 1).ToString() + ")", Color.Red); - GameServer.Log("Disconnecting client " + c.Name + " due to excessive desync (expected old event " + GameServer.Log("Disconnecting client " + GameServer.ClientLogName(c) + " due to excessive desync (expected old event " + (c.LastRecvEntityEventID + 1).ToString() + " (created " + (Timing.TotalTime - firstEventToResend.CreateTime).ToString("0.##") + " s ago, " + (lastSentToAnyoneTime - firstEventToResend.CreateTime).ToString("0.##") + " s older than last event sent to anyone)" + @@ -265,7 +274,7 @@ namespace Barotrauma.Networking toKick.ForEach(c => { DebugConsole.NewMessage(c.Name + " was kicked due to excessive desync (expected removed event " + (c.LastRecvEntityEventID + 1).ToString() + ", last available is " + events[0].ID.ToString() + ")", Color.Red); - GameServer.Log("Disconnecting client " + c.Name + " due to excessive desync (expected removed event " + (c.LastRecvEntityEventID + 1).ToString() + ", last available is " + events[0].ID.ToString() + ")", ServerLog.MessageType.Error); + GameServer.Log("Disconnecting client " + GameServer.ClientLogName(c) + " due to excessive desync (expected removed event " + (c.LastRecvEntityEventID + 1).ToString() + ", last available is " + events[0].ID.ToString() + ")", ServerLog.MessageType.Error); server.DisconnectClient(c, "", DisconnectReason.ExcessiveDesyncRemovedEvent + "/ServerMessage.ExcessiveDesyncRemovedEvent"); }); } @@ -274,7 +283,7 @@ namespace Barotrauma.Networking var timedOutClients = clients.FindAll(c => c.Connection != GameMain.Server.OwnerConnection && c.InGame && c.NeedsMidRoundSync && Timing.TotalTime > c.MidRoundSyncTimeOut); foreach (Client timedOutClient in timedOutClients) { - GameServer.Log("Disconnecting client " + timedOutClient.Name + ". Syncing the client with the server took too long.", ServerLog.MessageType.Error); + GameServer.Log("Disconnecting client " + GameServer.ClientLogName(timedOutClient) + ". Syncing the client with the server took too long.", ServerLog.MessageType.Error); GameMain.Server.DisconnectClient(timedOutClient, "", DisconnectReason.SyncTimeout + "/ServerMessage.SyncTimeout"); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/LidgrenServerPeer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/LidgrenServerPeer.cs index f64f8c05a..1f74943b3 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/LidgrenServerPeer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/LidgrenServerPeer.cs @@ -344,13 +344,21 @@ namespace Barotrauma.Networking if (!isCompatibleVersion) { RemovePendingClient(pendingClient, DisconnectReason.InvalidVersion, - $"DisconnectMessage.InvalidVersion~[version]={GameMain.Version.ToString()}~[clientversion]={version}"); + $"DisconnectMessage.InvalidVersion~[version]={GameMain.Version}~[clientversion]={version}"); GameServer.Log(name + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (incompatible game version)", ServerLog.MessageType.Error); DebugConsole.NewMessage(name + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (incompatible game version)", Microsoft.Xna.Framework.Color.Red); return; } + Client nameTaken = GameMain.Server.ConnectedClients.Find(c => Homoglyphs.Compare(c.Name.ToLower(), name.ToLower())); + if (nameTaken != null) + { + RemovePendingClient(pendingClient, DisconnectReason.NameTaken, ""); + GameServer.Log(name + " (" + inc.SenderConnection.RemoteEndPoint.Address + ") couldn't join the server (name too similar to the name of the client \"" + nameTaken.Name + "\").", ServerLog.MessageType.Error); + return; + } + int contentPackageCount = inc.ReadVariableInt32(); List clientContentPackages = new List(); for (int i = 0; i < contentPackageCount; i++) @@ -419,12 +427,12 @@ namespace Barotrauma.Networking //steam auth cannot be done (SteamManager not initialized or no ticket given), //but it's not required either -> let the client join without auth - if ((!Steam.SteamManager.IsInitialized || (ticket?.Length??0) == 0) && + if ((!Steam.SteamManager.IsInitialized || (ticket?.Length ?? 0) == 0) && !requireSteamAuth) { pendingClient.Name = name; pendingClient.OwnerKey = ownKey; - pendingClient.InitializationStep = ConnectionInitialization.ContentPackageOrder; + pendingClient.InitializationStep = serverSettings.HasPassword ? ConnectionInitialization.Password : ConnectionInitialization.ContentPackageOrder; } else { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/SteamP2PServerPeer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/SteamP2PServerPeer.cs index 41b828eff..62898a9c2 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/SteamP2PServerPeer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/SteamP2PServerPeer.cs @@ -306,13 +306,21 @@ namespace Barotrauma.Networking if (!isCompatibleVersion) { RemovePendingClient(pendingClient, DisconnectReason.InvalidVersion, - $"DisconnectMessage.InvalidVersion~[version]={GameMain.Version.ToString()}~[clientversion]={version}"); + $"DisconnectMessage.InvalidVersion~[version]={GameMain.Version}~[clientversion]={version}"); GameServer.Log(name + " (" + pendingClient.SteamID.ToString() + ") couldn't join the server (incompatible game version)", ServerLog.MessageType.Error); DebugConsole.NewMessage(name + " (" + pendingClient.SteamID.ToString() + ") couldn't join the server (incompatible game version)", Microsoft.Xna.Framework.Color.Red); return; } + Client nameTaken = GameMain.Server.ConnectedClients.Find(c => Homoglyphs.Compare(c.Name.ToLower(), name.ToLower())); + if (nameTaken != null) + { + RemovePendingClient(pendingClient, DisconnectReason.NameTaken, ""); + GameServer.Log(name + " (" + pendingClient.SteamID.ToString() + ") couldn't join the server (name too similar to the name of the client \"" + nameTaken.Name + "\").", ServerLog.MessageType.Error); + return; + } + int contentPackageCount = (int)inc.ReadVariableUInt32(); List clientContentPackages = new List(); for (int i = 0; i < contentPackageCount; i++) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs index 8a12853f7..f86579619 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs @@ -282,7 +282,7 @@ namespace Barotrauma.Networking clients[i].Character = character; character.OwnerClientEndPoint = clients[i].Connection.EndPointString; character.OwnerClientName = clients[i].Name; - GameServer.Log(string.Format("Respawning {0} ({1}) as {2}", clients[i].Name, clients[i].Connection?.EndPointString, characterInfos[i].Job.Name), ServerLog.MessageType.Spawning); + GameServer.Log(string.Format("Respawning {0} ({1}) as {2}", GameServer.ClientLogName(clients[i]), clients[i].Connection?.EndPointString, characterInfos[i].Job.Name), ServerLog.MessageType.Spawning); } if (divingSuitPrefab != null && oxyPrefab != null && RespawnShuttle != null) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs index b92cc8ea1..1493e987b 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs @@ -1,10 +1,9 @@ -using Microsoft.Xna.Framework; +using Barotrauma.IO; +using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; -using System.Xml; using System.Xml.Linq; namespace Barotrauma.Networking @@ -108,7 +107,7 @@ namespace Barotrauma.Networking netProperties[key].Read(incMsg); if (!netProperties[key].PropEquals(prevValue, netProperties[key])) { - GameServer.Log(c.Name + " changed " + netProperties[key].Name + " to " + netProperties[key].Value.ToString(), ServerLog.MessageType.ServerMessage); + GameServer.Log(GameServer.ClientLogName(c) + " changed " + netProperties[key].Name + " to " + netProperties[key].Value.ToString(), ServerLog.MessageType.ServerMessage); } changed = true; } @@ -204,7 +203,7 @@ namespace Barotrauma.Networking SerializableProperty.SerializeProperties(this, doc.Root, true); - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, NewLineOnAttributes = true @@ -212,7 +211,7 @@ namespace Barotrauma.Networking using (var writer = XmlWriter.Create(SettingsFile, settings)) { - doc.Save(writer); + doc.SaveSafe(writer); } if (KarmaPreset == "custom") @@ -521,13 +520,13 @@ namespace Barotrauma.Networking try { - XmlWriterSettings settings = new XmlWriterSettings(); + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings(); settings.Indent = true; settings.NewLineOnAttributes = true; using (var writer = XmlWriter.Create(ClientPermissionsFile, settings)) { - doc.Save(writer); + doc.SaveSafe(writer); } } catch (Exception e) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Voip/VoipServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Voip/VoipServer.cs index b923dc1d5..4fcdc6f73 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Voip/VoipServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Voip/VoipServer.cs @@ -89,7 +89,8 @@ namespace Barotrauma.Networking if (sender.Character != null && sender.Character.SpeechImpediment >= 100.0f) { return false; } //check if the message can be sent via radio - if (ChatMessage.CanUseRadio(sender.Character, out WifiComponent senderRadio) && + if (!sender.VoipQueue.ForceLocal && + ChatMessage.CanUseRadio(sender.Character, out WifiComponent senderRadio) && ChatMessage.CanUseRadio(recipient.Character, out WifiComponent recipientRadio)) { if (recipientRadio.CanReceive(senderRadio)) { return true; } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs index 9052887a6..b04f53d5d 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs @@ -74,7 +74,7 @@ namespace Barotrauma if (ready != sender.GetVote(VoteType.StartRound)) { sender.SetVote(VoteType.StartRound, ready); - GameServer.Log(sender.Name + (ready ? " is ready to start the game." : " is not ready to start the game."), ServerLog.MessageType.ServerMessage); + GameServer.Log(GameServer.ClientLogName(sender) + (ready ? " is ready to start the game." : " is not ready to start the game."), ServerLog.MessageType.ServerMessage); } break; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/WhiteList.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/WhiteList.cs index c50de1630..aaaa0894f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/WhiteList.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/WhiteList.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Net; @@ -181,7 +181,7 @@ namespace Barotrauma.Networking WhiteListedPlayer whitelistedPlayer = whitelistedPlayers.Find(p => p.UniqueIdentifier == id); if (whitelistedPlayer != null) { - GameServer.Log(c.Name + " removed " + whitelistedPlayer.Name + " from whitelist (" + whitelistedPlayer.IP + ")", ServerLog.MessageType.ConsoleUsage); + GameServer.Log(GameServer.ClientLogName(c) + " removed " + whitelistedPlayer.Name + " from whitelist (" + whitelistedPlayer.IP + ")", ServerLog.MessageType.ConsoleUsage); RemoveFromWhiteList(whitelistedPlayer); } } @@ -192,7 +192,7 @@ namespace Barotrauma.Networking string name = incMsg.ReadString(); string ip = incMsg.ReadString(); - GameServer.Log(c.Name + " added " + name + " to whitelist (" + ip + ")", ServerLog.MessageType.ConsoleUsage); + GameServer.Log(GameServer.ClientLogName(c) + " added " + name + " to whitelist (" + ip + ")", ServerLog.MessageType.ConsoleUsage); AddToWhiteList(name, ip); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Program.cs b/Barotrauma/BarotraumaServer/ServerSource/Program.cs index e355d1d3d..d2aa25c0e 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Program.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Program.cs @@ -3,7 +3,7 @@ using Barotrauma.Steam; using GameAnalyticsSDK.Net; using System; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using System.Threading; @@ -85,14 +85,16 @@ namespace Barotrauma filePath = Path.GetFileNameWithoutExtension(originalFilePath) + " (" + (existingFiles + 1) + ")" + Path.GetExtension(originalFilePath); } - StreamWriter sw = new StreamWriter(filePath); - StringBuilder sb = new StringBuilder(); sb.AppendLine("Barotrauma Dedicated Server crash report (generated on " + DateTime.Now + ")"); sb.AppendLine("\n"); sb.AppendLine("Barotrauma seems to have crashed. Sorry for the inconvenience! "); sb.AppendLine("\n"); sb.AppendLine("Game version " + GameMain.Version + " (" + AssemblyInfo.GetBuildString() + ", branch " + AssemblyInfo.GetGitBranch() + ", revision " + AssemblyInfo.GetGitRevision() + ")"); + if (GameMain.Config != null) + { + sb.AppendLine("Language: " + (GameMain.Config.Language ?? "none")); + } if (GameMain.SelectedPackages != null) { sb.AppendLine("Selected content packages: " + (!GameMain.SelectedPackages.Any() ? "None" : string.Join(", ", GameMain.SelectedPackages.Select(c => c.Name)))); @@ -138,8 +140,7 @@ namespace Barotrauma Console.ForegroundColor = ConsoleColor.Red; Console.Write(crashReport); - sw.WriteLine(sb.ToString()); - sw.Close(); + File.WriteAllText(filePath,sb.ToString()); if (GameSettings.SendUserStatistics) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Traitors/Goals/GoalDestroyItemsWithTag.cs b/Barotrauma/BarotraumaServer/ServerSource/Traitors/Goals/GoalDestroyItemsWithTag.cs index 551158b07..17e4ae552 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Traitors/Goals/GoalDestroyItemsWithTag.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Traitors/Goals/GoalDestroyItemsWithTag.cs @@ -38,7 +38,9 @@ namespace Barotrauma if (item.Submarine == null) { - if (!(item.ParentInventory?.Owner is Character)) { continue; } + //items outside the sub don't count as destroyed if they're still in the traitor's inventory + bool carriedByTraitor = Traitors.Any(traitor => item.IsOwnedBy(traitor.Character)); + if (!carriedByTraitor) { continue; } } else { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Traitors/TraitorMission.cs b/Barotrauma/BarotraumaServer/ServerSource/Traitors/TraitorMission.cs index 730cadcde..d51c0f9da 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Traitors/TraitorMission.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Traitors/TraitorMission.cs @@ -5,7 +5,7 @@ using System; using Barotrauma.Networking; using Lidgren.Network; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Security.Cryptography; using Barotrauma.Extensions; @@ -235,7 +235,7 @@ namespace Barotrauma #if SERVER foreach (var traitor in Traitors.Values) { - GameServer.Log($"{traitor.Character.Name} is a traitor and the current goals are:\n{(traitor.CurrentObjective?.GoalInfos != null ? TextManager.GetServerMessage(traitor.CurrentObjective?.GoalInfos) : "(empty)")}", ServerLog.MessageType.ServerMessage); + GameServer.Log($"{GameServer.CharacterLogName(traitor.Character)} is a traitor and the current goals are:\n{(traitor.CurrentObjective?.GoalInfos != null ? TextManager.GetServerMessage(traitor.CurrentObjective?.GoalInfos) : "(empty)")}", ServerLog.MessageType.ServerMessage); } #endif return true; @@ -287,10 +287,7 @@ namespace Barotrauma { pendingObjectives.Remove(objective); completedObjectives.Add(objective); - if (pendingObjectives.Count > 0) - { - objective.EndMessage(); - } + objective.EndMessage(); continue; } if (objective.IsStarted && !objective.CanBeCompleted) diff --git a/Barotrauma/BarotraumaServer/WindowsServer.csproj b/Barotrauma/BarotraumaServer/WindowsServer.csproj index 978f3cde6..38d0a73c6 100644 --- a/Barotrauma/BarotraumaServer/WindowsServer.csproj +++ b/Barotrauma/BarotraumaServer/WindowsServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.9.9.0 + 0.9.1000.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml b/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml index 62415487a..454583cdf 100644 --- a/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml +++ b/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml @@ -53,6 +53,7 @@ + @@ -75,6 +76,8 @@ + + diff --git a/Barotrauma/BarotraumaShared/Data/karmasettings.xml b/Barotrauma/BarotraumaShared/Data/karmasettings.xml index a29ef9dd9..f358b0b39 100644 --- a/Barotrauma/BarotraumaShared/Data/karmasettings.xml +++ b/Barotrauma/BarotraumaShared/Data/karmasettings.xml @@ -22,7 +22,9 @@ kickbanthreshold="1" kicksbeforeban="3" karmanotificationinterval="15" - resetkarmabetweenrounds="true" /> + resetkarmabetweenrounds="true" + dangerousitemstealkarmadecrease="15" + dangerousitemstealbots="false" /> + resetkarmabetweenrounds="true" + dangerousitemstealkarmadecrease="15" + dangerousitemstealbots="true" /> + resetkarmabetweenrounds="true" + dangerousitemstealkarmadecrease="15" + dangerousitemstealbots="false" /> \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AIController.cs index c60855d1a..b0bdc41e9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AIController.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace Barotrauma { - public enum AIState { Idle, Attack, Escape, Eat, Flee, Avoid, Aggressive, PassiveAggressive } + public enum AIState { Idle, Attack, Escape, Eat, Flee, Avoid, Aggressive, PassiveAggressive, Protect } abstract partial class AIController : ISteerable { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs index 11e3fdebe..0940a9091 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs @@ -36,14 +36,17 @@ namespace Barotrauma private readonly float updateTargetsInterval = 1; private readonly float updateMemoriesInverval = 1; + private readonly float attackLimbResetInterval = 2; - private float avoidLookAheadDistance; + private readonly float avoidLookAheadDistance; + private IndoorsSteeringManager PathSteering => insideSteering as IndoorsSteeringManager; private SteeringManager outsideSteering, insideSteering; private float updateTargetsTimer; private float updateMemoriesTimer; - + private float attackLimbResetTimer; + private bool IsCoolDownRunning => AttackingLimb != null && AttackingLimb.attack.CoolDownTimer > 0; public float CombatStrength => Character.Params.AI.CombatStrength; private float Sight => Character.Params.AI.Sight; @@ -63,6 +66,7 @@ namespace Barotrauma get { return _attackingLimb; } private set { + attackLimbResetTimer = 0; _attackingLimb = value; attackVector = null; Reverse = _attackingLimb != null && _attackingLimb.attack.Reverse; @@ -82,8 +86,9 @@ namespace Barotrauma private readonly float colliderWidth; private readonly float colliderLength; private readonly int requiredHoleCount; - private readonly bool canAttackSub; - private readonly bool canAttackCharacters; + private bool canAttackWalls; + private bool canAttackDoors; + private bool canAttackCharacters; private readonly float priorityFearIncreasement = 2; private readonly float memoryFadeTime = 0.5f; @@ -183,24 +188,9 @@ namespace Barotrauma } } - bool canBreakDoors = false; - if (GetTarget("room")?.Priority > 0.0f) - { - var currentContexts = Character.GetAttackContexts(); - foreach (Limb limb in Character.AnimController.Limbs) - { - if (limb.attack == null) { continue; } - if (!limb.attack.IsValidTarget(AttackTarget.Structure)) { continue; } - if (limb.attack.IsValidContext(currentContexts) && limb.attack.StructureDamage > 0.0f) - { - canBreakDoors = true; - break; - } - } - } - + ReevaluateAttacks(); outsideSteering = new SteeringManager(this); - insideSteering = new IndoorsSteeringManager(this, false, canBreakDoors); + insideSteering = new IndoorsSteeringManager(this, false, canAttackDoors); steeringManager = outsideSteering; State = AIState.Idle; @@ -210,9 +200,6 @@ namespace Barotrauma requiredHoleCount = (int)Math.Ceiling(ConvertUnits.ToDisplayUnits(colliderWidth) / Structure.WallSectionSize); avoidLookAheadDistance = Math.Max(colliderWidth * 3, 1.5f); - - canAttackSub = Character.AnimController.CanAttackSubmarine; - canAttackCharacters = Character.AnimController.CanAttackCharacters; } private CharacterParams.AIParams AIParams => Character.Params.AI; @@ -227,27 +214,28 @@ namespace Barotrauma selectedTargetMemory.Priority = priority; } - private float escapeMargin; + private float movementMargin; public override void Update(float deltaTime) { if (DisableEnemyAI) { return; } - base.Update(deltaTime); - bool ignorePlatforms = (-Character.AnimController.TargetMovement.Y > Math.Abs(Character.AnimController.TargetMovement.X)); - if (steeringManager is IndoorsSteeringManager) + bool ignorePlatforms = Character.AnimController.TargetMovement.Y < -0.5f && (-Character.AnimController.TargetMovement.Y > Math.Abs(Character.AnimController.TargetMovement.X)); + if (steeringManager == insideSteering) { - var currPath = ((IndoorsSteeringManager)steeringManager).CurrentPath; + var currPath = PathSteering.CurrentPath; if (currPath != null && currPath.CurrentNode != null) { if (currPath.CurrentNode.SimPosition.Y < Character.AnimController.GetColliderBottom().Y) { - ignorePlatforms = true; + // Don't allow to jump from too high. + float allowedJumpHeight = Character.AnimController.ImpactTolerance / 2; + float height = Math.Abs(currPath.CurrentNode.SimPosition.Y - Character.SimPosition.Y); + ignorePlatforms = height < allowedJumpHeight; } } } - Character.AnimController.IgnorePlatforms = ignorePlatforms; //clients get the facing direction from the server @@ -376,7 +364,7 @@ namespace Barotrauma return; } float squaredDistance = Vector2.DistanceSquared(WorldPosition, SelectedAiTarget.WorldPosition); - var attackLimb = GetAttackLimb(SelectedAiTarget.WorldPosition); + var attackLimb = AttackingLimb ?? GetAttackLimb(SelectedAiTarget.WorldPosition); if (attackLimb != null && squaredDistance <= Math.Pow(attackLimb.attack.Range, 2)) { run = true; @@ -393,7 +381,7 @@ namespace Barotrauma { bool isBeingChased = IsBeingChased; float reactDistance = !isBeingChased && selectedTargetingParams != null && selectedTargetingParams.ReactDistance > 0 ? selectedTargetingParams.ReactDistance : GetPerceivingRange(SelectedAiTarget); - if (squaredDistance <= Math.Pow(reactDistance + escapeMargin, 2)) + if (squaredDistance <= Math.Pow(reactDistance + movementMargin, 2)) { float halfReactDistance = reactDistance / 2; float attackDistance = selectedTargetingParams != null && selectedTargetingParams.AttackDistance > 0 ? selectedTargetingParams.AttackDistance : halfReactDistance; @@ -405,21 +393,48 @@ namespace Barotrauma else { run = isBeingChased ? true : squaredDistance < Math.Pow(halfReactDistance, 2); - if (escapeMargin <= 0) + if (movementMargin <= 0) { - escapeMargin = halfReactDistance; + movementMargin = halfReactDistance; } - escapeMargin = MathHelper.Clamp(escapeMargin += deltaTime, halfReactDistance, reactDistance); + movementMargin = MathHelper.Clamp(movementMargin += deltaTime, halfReactDistance, reactDistance); UpdateEscape(deltaTime); } } else { - escapeMargin = 0; + movementMargin = 0; UpdateIdle(deltaTime); } } break; + case AIState.Protect: + if (SelectedAiTarget == null || SelectedAiTarget.Entity == null || SelectedAiTarget.Entity.Removed) + { + State = AIState.Idle; + return; + } + if (SelectedAiTarget.Entity is Character targetCharacter && targetCharacter.LastAttacker is Character attacker) + { + // Attack the character that attacked the target we are protecting + ChangeTargetState(attacker, AIState.Attack, selectedTargetingParams.Priority * 2); + SelectTarget(attacker.AiTarget); + return; + } + float sqrDist = Vector2.DistanceSquared(WorldPosition, SelectedAiTarget.WorldPosition); + float reactDist = selectedTargetingParams != null && selectedTargetingParams.ReactDistance > 0 ? selectedTargetingParams.ReactDistance : GetPerceivingRange(SelectedAiTarget); + if (sqrDist > Math.Pow(reactDist + movementMargin, 2)) + { + movementMargin = reactDist; + run = true; + UpdateFollow(deltaTime); + } + else + { + movementMargin = MathHelper.Clamp(movementMargin -= deltaTime, 0, reactDist); + UpdateIdle(deltaTime); + } + break; default: throw new NotImplementedException(); } @@ -432,6 +447,8 @@ namespace Barotrauma SwarmBehavior.Refresh(); SwarmBehavior.UpdateSteering(deltaTime); } + // Ensure that the creature keeps inside the level + SteerInsideLevel(deltaTime); float speed = Character.AnimController.GetCurrentSpeed(run && Character.CanRun); steeringManager.Update(speed); Character.AnimController.TargetMovement = Character.ApplyMovementLimits(Steering, State == AIState.Idle && Character.AnimController.InWater ? Steering.Length() : speed); @@ -456,7 +473,6 @@ namespace Barotrauma SteeringManager.SteeringAvoid(deltaTime, lookAheadDistance: avoidLookAheadDistance, weight: 5); return; } - SteerInsideLevel(deltaTime); } var target = SelectedAiTarget ?? _lastAiTarget; if (target?.Entity != null && !target.Entity.Removed && PreviousState == AIState.Attack && Character.CurrentHull == null) @@ -576,10 +592,10 @@ namespace Barotrauma } else if (pathSteering != null) { - if (canAttackSub && hasValidPath) + if (canAttackDoors && hasValidPath) { var door = pathSteering.CurrentPath.CurrentNode?.ConnectedDoor ?? pathSteering.CurrentPath.NextNode?.ConnectedDoor; - if (door != null && !door.IsOpen) + if (door != null && !door.IsOpen && !door.IsBroken) { if (SelectedAiTarget != door.Item.AiTarget) { @@ -615,7 +631,6 @@ namespace Barotrauma { SteeringManager.SteeringWander(); SteeringManager.SteeringAvoid(deltaTime, lookAheadDistance: avoidLookAheadDistance, weight: 5); - SteerInsideLevel(deltaTime); } } } @@ -641,13 +656,18 @@ namespace Barotrauma if (SelectedAiTarget.Entity is Item item) { // If the item is held by a character, attack the character instead. - var pickable = item.GetComponent(); - if (pickable != null) + Character owner = GetOwner(item); + if (owner != null) { - var target = pickable.Picker?.AiTarget; - if (target?.Entity != null && !target.Entity.Removed) + if (IsFriendly(Character, owner)) { - SelectedAiTarget = target; + ResetAITarget(); + State = AIState.Idle; + return; + } + else + { + SelectedAiTarget = owner.AiTarget; } } } @@ -659,7 +679,8 @@ namespace Barotrauma { attackWorldPos += wallTarget.Structure.Submarine.Position; } - attackSimPos = ConvertUnits.ToSimUnits(attackWorldPos); + attackSimPos = Character.Submarine == wallTarget.Structure.Submarine ? wallTarget.Position : attackWorldPos; + attackSimPos = ConvertUnits.ToSimUnits(attackSimPos); } else { @@ -685,7 +706,7 @@ namespace Barotrauma WallSection section = wall.Sections[i]; if (CanPassThroughHole(wall, i) && section?.gap != null) { - if (SteerThroughGap(wall, section, section.gap.WorldPosition, deltaTime)) + if (SteerThroughGap(wall, section, wall.SectionPosition(i, true), deltaTime)) { return; } @@ -697,7 +718,7 @@ namespace Barotrauma var door = i.GetComponent(); // Steer through the door manually if it's open or broken // Don't try to enter dry hulls if cannot walk or if the gap is too narrow - if (door?.LinkedGap?.FlowTargetHull != null && !door.LinkedGap.IsRoomToRoom && door.IsOpen) + if (door?.LinkedGap?.FlowTargetHull != null && !door.LinkedGap.IsRoomToRoom && (door.IsOpen || door.IsBroken)) { if (Character.AnimController.CanWalk || door.LinkedGap.FlowTargetHull.WaterPercentage > 25) { @@ -715,7 +736,6 @@ namespace Barotrauma } else if (SelectedAiTarget.Entity is Structure w && wallTarget == null) { - // Targeting only the outer walls bool isBroken = true; for (int i = 0; i < w.Sections.Length; i++) { @@ -886,24 +906,11 @@ namespace Barotrauma } canAttack = AttackingLimb != null && AttackingLimb.attack.CoolDownTimer <= 0; } - if (!canAttack && SelectedAiTarget.Entity.Submarine != null && !canAttackSub) + if (!Character.AnimController.SimplePhysicsEnabled && SelectedAiTarget.Entity.Submarine != null && Character.Submarine == null && (!canAttackDoors || !canAttackWalls || !AIParams.TargetOuterWalls)) { - float dist = Vector2.Distance(Character.AnimController.MainLimb.WorldPosition, attackWorldPos); - if (wallTarget != null) + if (Vector2.Distance(Character.WorldPosition, attackWorldPos) < 2000 * 2000) { - // Steer towards the target, but turn away if a wall is blocking the way - if (dist < ConvertUnits.ToDisplayUnits(colliderLength) * 3) - { - State = AIState.Idle; - IgnoreTarget(SelectedAiTarget); - // Resetting the ai target prevents the character from chasing it - ResetAITarget(); - return; - } - } - else if (dist < 1000) - { - // Check that we are not bumping into a door + // Check that we are not bumping into a door or a wall Vector2 rayStart = SimPosition; if (Character.Submarine == null) { @@ -912,9 +919,10 @@ namespace Barotrauma Vector2 toTarget = SelectedAiTarget.WorldPosition - WorldPosition; Vector2 rayEnd = rayStart + toTarget.ClampLength(Character.AnimController.Collider.GetLocalFront().Length() * 2); Body closestBody = Submarine.CheckVisibility(rayStart, rayEnd, ignoreSubs: true); - if (Submarine.LastPickedFraction != 1.0f && closestBody != null && closestBody.UserData is Item i && i.Submarine != null && i.GetComponent() != null) + if (Submarine.LastPickedFraction != 1.0f && closestBody != null && + (!AIParams.TargetOuterWalls || !canAttackWalls && closestBody.UserData is Structure s && s.Submarine != null || !canAttackDoors && closestBody.UserData is Item i && i.Submarine != null && i.GetComponent() != null)) { - // Target is unreachable, there's a door ahead + // Target is unreachable, there's a door or wall ahead State = AIState.Idle; IgnoreTarget(SelectedAiTarget); ResetAITarget(); @@ -925,7 +933,7 @@ namespace Barotrauma float distance = 0; Limb attackTargetLimb = null; Character targetCharacter = SelectedAiTarget.Entity as Character; - if (canAttack) + if (canAttack && !Character.AnimController.SimplePhysicsEnabled) { // Target a specific limb instead of the target center position if (wallTarget == null && targetCharacter != null) @@ -943,7 +951,7 @@ namespace Barotrauma attackSimPos = Character.GetRelativeSimPosition(attackTargetLimb); } // Check that we can reach the target - Vector2 toTarget = attackWorldPos - AttackingLimb.WorldPosition; + Vector2 toTarget = attackWorldPos - (Character.AnimController.SimplePhysicsEnabled ? Character.WorldPosition : AttackingLimb.WorldPosition); if (wallTarget != null) { if (wallTarget.Structure.Submarine != null) @@ -980,7 +988,15 @@ namespace Barotrauma { // If not, reset the attacking limb, if the cooldown is not running // Don't use the property, because we don't want cancel reversing, if we are reversing. - _attackingLimb = null; + if (attackLimbResetTimer > attackLimbResetInterval) + { + _attackingLimb = null; + attackLimbResetTimer = 0; + } + else + { + attackLimbResetTimer += deltaTime; + } } } Limb steeringLimb = canAttack ? AttackingLimb : null; @@ -1020,21 +1036,25 @@ namespace Barotrauma } else { - Vector2 offset = Character.SimPosition - steeringLimb.SimPosition; - // Offset so that we don't overshoot the movement - Vector2 steerPos = attackSimPos + offset; + Vector2 steerPos = attackSimPos; + if (!Character.AnimController.SimplePhysicsEnabled) + { + // Offset so that we don't overshoot the movement + Vector2 offset = Character.SimPosition - steeringLimb.SimPosition; + steerPos += offset; + } if (SteeringManager is IndoorsSteeringManager pathSteering) { if (pathSteering.CurrentPath != null) { // Attack doors - if (canAttackSub) + if (canAttackDoors) { // If the target is in the same hull, there shouldn't be any doors blocking the path if (targetCharacter == null || targetCharacter.CurrentHull != Character.CurrentHull) { var door = pathSteering.CurrentPath.CurrentNode?.ConnectedDoor ?? pathSteering.CurrentPath.NextNode?.ConnectedDoor; - if (door != null && !door.IsOpen) + if (door != null && !door.IsOpen && !door.IsBroken) { if (door.Item.AiTarget != null && SelectedAiTarget != door.Item.AiTarget) { @@ -1045,15 +1065,17 @@ namespace Barotrauma } } // Steer towards the target if in the same room and swimming - if ((Character.AnimController.InWater || pursue) && targetCharacter != null && VisibleHulls.Contains(targetCharacter.CurrentHull)) + if ((Character.AnimController.InWater || pursue || !Character.AnimController.CanWalk) && + (targetCharacter != null && VisibleHulls.Contains(targetCharacter.CurrentHull) || Character.CanSeeTarget(SelectedAiTarget.Entity))) { - SteeringManager.SteeringManual(deltaTime, Vector2.Normalize(attackSimPos - steeringLimb.SimPosition)); + Vector2 myPos = Character.AnimController.SimplePhysicsEnabled ? Character.SimPosition : steeringLimb.SimPosition; + SteeringManager.SteeringManual(deltaTime, Vector2.Normalize(steerPos - myPos)); } else { SteeringManager.SteeringSeek(steerPos, 2); // Switch to Idle when cannot reach the target and if cannot damage the walls - if ((!canAttackSub || wallTarget == null) && !pathSteering.IsPathDirty && pathSteering.CurrentPath.Unreachable) + if ((!canAttackWalls || wallTarget == null) && !pathSteering.IsPathDirty && pathSteering.CurrentPath.Unreachable) { State = AIState.Idle; return; @@ -1112,6 +1134,8 @@ namespace Barotrauma return false; } + private readonly List attackLimbs = new List(); + private readonly List weights = new List(); private Limb GetAttackLimb(Vector2 attackWorldPos, Limb ignoredLimb = null) { var currentContexts = Character.GetAttackContexts(); @@ -1127,23 +1151,38 @@ namespace Barotrauma if (attack == null) { continue; } if (attack.CoolDownTimer > 0) { continue; } if (!attack.IsValidContext(currentContexts)) { continue; } - if (!attack.IsValidTarget(target)) { continue; } + if (!attack.IsValidTarget(target as IDamageable)) { continue; } if (target is ISerializableEntity se && target is Character) { if (attack.Conditionals.Any(c => !c.Matches(se))) { continue; } } if (attack.Conditionals.Any(c => c.TargetSelf && !c.Matches(Character))) { continue; } - float priority = CalculatePriority(limb, attackWorldPos); - if (priority > currentPriority) + if (AIParams.RandomAttack) { - currentPriority = priority; - selectedLimb = limb; + attackLimbs.Add(limb); + weights.Add(limb.attack.Priority); } + else + { + float priority = CalculatePriority(limb, attackWorldPos); + if (priority > currentPriority) + { + currentPriority = priority; + selectedLimb = limb; + } + } + } + if (AIParams.RandomAttack) + { + selectedLimb = ToolBox.SelectWeightedRandom(attackLimbs, weights, Rand.RandSync.Server); + attackLimbs.Clear(); + weights.Clear(); } return selectedLimb; float CalculatePriority(Limb limb, Vector2 attackPos) { + if (Character.AnimController.SimplePhysicsEnabled) { return 1 + limb.attack.Priority; } float dist = Vector2.Distance(limb.WorldPosition, attackPos); // The limb is ignored if the target is not close. Prevents character going in reverse if very far away from it. // We also need a max value that is more than the actual range. @@ -1171,7 +1210,7 @@ namespace Barotrauma Body closestBody = Submarine.CheckVisibility(rayStart, rayEnd, ignoreSubs: true, ignoreSensors: CanEnterSubmarine, ignoreDisabledWalls: CanEnterSubmarine); if (Submarine.LastPickedFraction != 1.0f && closestBody != null) { - if (closestBody.UserData is Structure wall && wall.Submarine != null) + if (closestBody.UserData is Structure wall && wall.Submarine != null && (wall.Submarine.Info.IsPlayer || wall.Submarine.Info.IsOutpost && TargetOutposts)) { int sectionIndex = wall.FindSectionIndex(ConvertUnits.ToDisplayUnits(Submarine.LastPickedPosition)); float sectionDamage = wall.SectionDamage(sectionIndex); @@ -1210,7 +1249,10 @@ namespace Barotrauma LatchOntoAI?.SetAttachTarget(wall.Submarine.PhysicsBody.FarseerBody, wall.Submarine, ConvertUnits.ToSimUnits(sectionPos), attachTargetNormal); if (Character.AnimController.CanEnterSubmarine || !wall.SectionBodyDisabled(sectionIndex) && !IsWallDisabled(wall)) { - wallTarget = new WallTarget(sectionPos, wall, sectionIndex); + if (AIParams.TargetOuterWalls || wall.prefab.Tags.Contains("inner")) + { + wallTarget = new WallTarget(sectionPos, wall, sectionIndex); + } } } if (!Character.AnimController.CanEnterSubmarine && wallTarget == null) @@ -1239,7 +1281,7 @@ namespace Barotrauma } return isDisabled; } - + public override void OnAttacked(Character attacker, AttackResult attackResult) { float reactionTime = Rand.Range(0.1f, 0.3f); @@ -1249,22 +1291,28 @@ namespace Barotrauma Character.AnimController.ReleaseStuckLimbs(); LatchOntoAI?.DeattachFromBody(); if (attacker == null || attacker.AiTarget == null) { return; } + bool isFriendly = IsFriendly(Character, attacker); if (wasLatched) { avoidTimer = avoidTime * Rand.Range(0.75f, 1.25f); - SelectTarget(attacker.AiTarget); + if (!isFriendly) + { + SelectTarget(attacker.AiTarget); + } return; } if (State == AIState.Flee) { - SelectTarget(attacker.AiTarget); + if (!isFriendly) + { + SelectTarget(attacker.AiTarget); + } return; } - - if (attackResult.Damage > 0.0f) + if (!isFriendly && attackResult.Damage > 0.0f) { - bool canAttack = attacker.Submarine == Character.Submarine && canAttackCharacters || attacker.Submarine != null && canAttackSub; + bool canAttack = attacker.Submarine == Character.Submarine && canAttackCharacters || attacker.Submarine != null && canAttackWalls; if (Character.Params.AI.AttackWhenProvoked && canAttack) { if (attacker.IsHusk) @@ -1322,7 +1370,7 @@ namespace Barotrauma targetMemory.Priority += GetRelativeDamage(attackResult.Damage, Character.Vitality) * AggressionHurt; // Only allow to react once. Otherwise would attack the target with only a fraction of a cooldown - bool retaliate = SelectedAiTarget != attacker.AiTarget && attacker.Submarine == Character.Submarine; + bool retaliate = !isFriendly && SelectedAiTarget != attacker.AiTarget && attacker.Submarine == Character.Submarine; bool avoidGunFire = Character.Params.AI.AvoidGunfire && attacker.Submarine != Character.Submarine; if (State == AIState.Attack && !IsCoolDownRunning) @@ -1367,6 +1415,8 @@ namespace Barotrauma IDamageable damageTarget = wallTarget != null ? wallTarget.Structure : SelectedAiTarget.Entity as IDamageable; if (damageTarget != null) { + //simulate attack input to get the character to attack client-side + Character.SetInput(InputType.Attack, true, true); if (attackingLimb.UpdateAttack(deltaTime, attackSimPos, damageTarget, out AttackResult attackResult, distance, targetLimb)) { if (damageTarget.Health > 0) @@ -1424,7 +1474,7 @@ namespace Barotrauma State = AIState.Idle; return; } - Vector2 mouthPos = Character.AnimController.GetMouthPosition().Value; + Vector2 mouthPos = Character.AnimController.SimplePhysicsEnabled ? SimPosition : Character.AnimController.GetMouthPosition().Value; Vector2 attackSimPosition = Character.GetRelativeSimPosition(target); Vector2 limbDiff = attackSimPosition - mouthPos; float extent = Math.Max(mouthLimb.body.GetMaxExtent(), 2); @@ -1453,6 +1503,25 @@ namespace Barotrauma #endregion + private void UpdateFollow(float deltaTime) + { + if (SelectedAiTarget == null || SelectedAiTarget.Entity == null || SelectedAiTarget.Entity.Removed) + { + State = AIState.Idle; + return; + } + Vector2 dir = Vector2.Normalize(SelectedAiTarget.Entity.WorldPosition - Character.WorldPosition); + if (!MathUtils.IsValid(dir)) + { + return; + } + steeringManager.SteeringManual(deltaTime, dir); + if (Character.AnimController.InWater) + { + SteeringManager.SteeringAvoid(deltaTime, lookAheadDistance: avoidLookAheadDistance, weight: 15); + } + } + #region Targeting private bool IsLatchedOnSub => LatchOntoAI != null && LatchOntoAI.IsAttachedToSub; @@ -1579,13 +1648,16 @@ namespace Barotrauma Door door = null; if (aiTarget.Entity is Item item) { - //item inside and we're outside -> attack the hull - if (item.CurrentHull != null && character.CurrentHull == null) - { - targetingTag = "room"; - } - door = item.GetComponent(); + bool targetingFromOutsideToInside = item.CurrentHull != null && character.CurrentHull == null; + if (targetingFromOutsideToInside) + { + if (door != null && !canAttackDoors || !canAttackWalls) + { + // Can't reach + continue; + } + } foreach (var prio in AIParams.Targets) { if (item.HasTag(prio.Tag)) @@ -1594,7 +1666,25 @@ namespace Barotrauma break; } } - + if (door == null && targetingTag == null) + { + if (item.GetComponent() != null) + { + targetingTag = "sonar"; + } + else if (targetingFromOutsideToInside) + { + targetingTag = "room"; + } + } + else if (targetingTag == "nasonov") + { + if ((item.Submarine == null || !item.Submarine.Info.IsPlayer) && item.ParentInventory == null) + { + // Only target nasonovartifacts when they are held be a player or inside the playersub + continue; + } + } // Ignore the target if it's a decoy and the character is already inside a sub if (character.CurrentHull != null && targetingTag == "decoy") { @@ -1609,15 +1699,13 @@ namespace Barotrauma // Ignore structures that doesn't have a body (not walls) continue; } - if (s.IsPlatform) + if (s.IsPlatform) { continue; } + if (s.Submarine == null) { continue; } + bool isCharacterInside = character.CurrentHull != null; + bool isInnerWall = s.prefab.Tags.Contains("inner"); + if (isInnerWall && !isCharacterInside) { - continue; - } - bool isCharacterOutside = s.Submarine == null || character.CurrentHull == null; - bool targetInnerWalls = AIParams.TargetInnerWalls; - if (!isCharacterOutside && !targetInnerWalls) - { - // Ignore walls when inside (walltargets still work) + // Ignore inner walls when outside (walltargets still work) continue; } valueModifier = 1; @@ -1630,39 +1718,70 @@ namespace Barotrauma var section = s.Sections[i]; if (section.gap == null) { continue; } bool leadsInside = !section.gap.IsRoomToRoom && section.gap.FlowTargetHull != null; + isInnerWall = isInnerWall || !leadsInside; if (Character.AnimController.CanEnterSubmarine) { - if (isCharacterOutside) + if (!isCharacterInside) { if (CanPassThroughHole(s, i)) { - valueModifier *= leadsInside ? (AggressiveBoarding ? 5 : 1) : (targetInnerWalls ? 1 : 0); + valueModifier *= leadsInside ? (AggressiveBoarding ? 5 : 1) : 0; + } + else if (AggressiveBoarding && leadsInside && canAttackWalls && AIParams.TargetOuterWalls) + { + // Up to 100% priority increase for every gap in the wall when an aggressive boarder is outside + valueModifier *= 1 + section.gap.Open; + } + } + else + { + // Inside + if (AggressiveBoarding) + { + if (!isInnerWall) + { + // Only interested in getting inside (aggressive boarder) -> don't target outer walls when already inside + valueModifier = 0; + break; + } + else if (CanPassThroughHole(s, i)) + { + valueModifier *= isInnerWall ? 1 : 0; + } + else if (!canAttackWalls) + { + valueModifier = 0; + break; + } } else { - // Ignore holes that cannot be passed through if cannot attack items/structures. Holes that are big enough should be targeted, so that we can get in - if (!canAttackSub) + if (!canAttackWalls) { - continue; - } - if (AggressiveBoarding && leadsInside) - { - // Up to 100% priority increase for every gap in the wall when an aggressive boarder is outside - valueModifier *= 1 + section.gap.Open; + valueModifier = 0; + break; } + // We are actually interested in breaking things -> reduce the priority when the wall is already broken + // (Terminalcells) + valueModifier *= 1 - section.gap.Open * 0.25f; } } - else if (!canAttackSub || CanPassThroughHole(s, i)) - { - // Already inside -> ignore holes in the walls and ignore walls if cannot attack the sub. - continue; - } } - else if (!leadsInside || !canAttackSub) + else { - // Can't get in, ignore inner walls - // Also ignore all walls if cannot attack the sub - continue; + // Cannot enter + if (isInnerWall || !canAttackWalls) + { + // Ignore inner walls and all walls if cannot do damage on walls. + valueModifier = 0; + break; + } + else if (AggressiveBoarding) + { + // Up to 100% priority increase for every gap in the wall when an aggressive boarder is outside + // (Bonethreshers) + valueModifier *= 1 + section.gap.Open; + } } } } @@ -1679,31 +1798,34 @@ namespace Barotrauma } if (door.Item.Submarine == null) { continue;} bool isOutdoor = door.LinkedGap?.FlowTargetHull != null && !door.LinkedGap.IsRoomToRoom; - bool isOpen = door.IsOpen; - if (!isOpen && (!canAttackSub)) + bool isOpen = door.IsOpen || door.IsBroken; + if (!isOpen && !canAttackDoors || (isOutdoor && !AIParams.TargetOuterWalls)) { - // Ignore doors that are not open if cannot attack items/structures. Open doors should be targeted, so that we can get in if we are aggressive boarders - valueModifier = 0; + // Ignore doors that are not open if cannot attack doors or shouldn't target outer doors. + continue; } - if (character.CurrentHull == null) + if (isOpen && (!Character.AnimController.CanEnterSubmarine || !AggressiveBoarding)) { - valueModifier = isOutdoor ? 1 : 0; + // Ignore broken and open doors + // Aggressive boarders don't ignore open doors, because they use them for get in. + continue; } - else if (AggressiveBoarding) + if (AggressiveBoarding) { - // Increase priority if the character is outside and an aggressive boarder, and the door is from outside to inside - if (character.CurrentHull == null) + // Increase the priority if the character is outside and the door is from outside to inside + if (character.CurrentHull == null && isOutdoor) { valueModifier *= isOpen ? 5 : 1; } else { - valueModifier *= isOpen ? 0 : 1; + // Inside + valueModifier *= isOpen || isOutdoor ? 0 : 1; } } - else if (!Character.AnimController.CanEnterSubmarine && isOpen) //ignore broken and open doors + else if (character.CurrentHull == null) { - continue; + valueModifier = isOutdoor ? 1 : 0; } } else if (aiTarget.Entity is IDamageable targetDamageable && targetDamageable.Health <= 0.0f) @@ -1745,9 +1867,18 @@ namespace Barotrauma if (valueModifier > targetValue) { - // Don't target items that we own. - // This is a rare case, and almost entirely related to Humanhusks, so let's check it last to reduce unnecessary checks (although the check shouldn't be expensive) - if (aiTarget.Entity is Item i && i.IsOwnedBy(character)) { continue; } + if (aiTarget.Entity is Item i) + { + Character owner = GetOwner(i); + // Don't target items that we own. + // This is a rare case, and almost entirely related to Humanhusks, so let's check it last to reduce unnecessary checks (although the check shouldn't be expensive) + if (owner == character) { continue; } + if (owner != null && IsFriendly(Character, owner)) + { + // If the item is held by a friendly character, ignore it. + continue; + } + } if (targetCharacter != null) { if (targetCharacter.Submarine != Character.Submarine) @@ -1772,7 +1903,7 @@ namespace Barotrauma foreach (var gap in Character.CurrentHull.ConnectedGaps) { var door = gap.ConnectedDoor; - if (door == null || !door.IsOpen) + if (door == null || !door.IsOpen && !door.IsBroken) { var wall = gap.ConnectedWall; if (wall != null) @@ -1966,11 +2097,17 @@ namespace Barotrauma { // If the target is shooting from the submarine, we might not perceive it because it doesn't move. // --> Target the submarine too. - if (target.Submarine != null && canAttackSub) + if (target.Submarine != null && (canAttackDoors || canAttackWalls)) { ChangeParams("room", state, priority); - ChangeParams("wall", state, priority); - ChangeParams("door", state, priority); + if (canAttackWalls) + { + ChangeParams("wall", state, priority); + } + if (canAttackDoors) + { + ChangeParams("door", state, priority); + } } ChangeParams("provocative", state, priority, onlyExisting: true); ChangeParams("light", state, priority, onlyExisting: true); @@ -1991,7 +2128,7 @@ namespace Barotrauma Character.AnimController.ReleaseStuckLimbs(); escapeTarget = null; AttackingLimb = null; - escapeMargin = 0; + movementMargin = 0; allGapsSearched = false; unreachableGaps.Clear(); if (isStateChanged && to == AIState.Idle && from != to) @@ -2016,28 +2153,66 @@ namespace Barotrauma } } + public void ReevaluateAttacks() + { + canAttackWalls = LatchOntoAI != null && LatchOntoAI.AttachToSub; + canAttackDoors = false; + canAttackCharacters = false; + foreach (var limb in Character.AnimController.Limbs) + { + if (limb.IsSevered) { continue; } + if (limb.attack == null) { continue; } + if (!canAttackWalls) + { + canAttackWalls = limb.attack.IsValidTarget(AttackTarget.Structure) && limb.attack.StructureDamage > 0; + } + if (!canAttackDoors) + { + canAttackDoors = limb.attack.IsValidTarget(AttackTarget.Structure) && limb.attack.ItemDamage > 0; + } + if (!canAttackCharacters) + { + canAttackCharacters = limb.attack.IsValidTarget(AttackTarget.Character); + } + } + if (PathSteering != null) + { + PathSteering.CanBreakDoors = canAttackDoors; + } + } + + private Vector2 returnDir; + private float returnTimer; private void SteerInsideLevel(float deltaTime) { - if (Level.Loaded == null) { return; } - - Vector2 levelSimSize = new Vector2( - ConvertUnits.ToSimUnits(Level.Loaded.Size.X), - ConvertUnits.ToSimUnits(Level.Loaded.Size.Y)); - - float margin = 10.0f; - - if (SimPosition.Y < 0.0) + if (SteeringManager is IndoorsSteeringManager) { return; } + if (Level.Loaded == null) { return; } + Vector2 levelSimSize = ConvertUnits.ToSimUnits(Level.Loaded.Size.X, Level.Loaded.Size.Y); + float returnTime = 3; + if (SimPosition.Y < 0) { - steeringManager.SteeringManual(deltaTime, Vector2.UnitY * MathUtils.InverseLerp(0.0f, -margin, SimPosition.Y)); + // Too far down + returnTimer = returnTime * Rand.Range(0.75f, 1.25f); + returnDir = Vector2.UnitY; } - if (SimPosition.X < 0.0f) + if (SimPosition.X < 0) { - steeringManager.SteeringManual(deltaTime, Vector2.UnitX * MathUtils.InverseLerp(0.0f, -margin, SimPosition.X)); + // Too far left + returnTimer = returnTime * Rand.Range(0.75f, 1.25f); + returnDir = Vector2.UnitX; } if (SimPosition.X > levelSimSize.X) { - steeringManager.SteeringManual(deltaTime, Vector2.UnitX * MathUtils.InverseLerp(levelSimSize.X, levelSimSize.X + margin, SimPosition.X)); - } + // Too far right + returnTimer = returnTime * Rand.Range(0.75f, 1.25f); + returnDir = -Vector2.UnitX; + } + if (returnTimer > 0) + { + returnTimer -= deltaTime; + SteeringManager.Reset(); + SteeringManager.SteeringManual(deltaTime, returnDir); + } } private bool CanPassThroughHole(Structure wall, int sectionIndex) @@ -2068,7 +2243,6 @@ namespace Barotrauma targetLimbs.Clear(); foreach (var limb in target.AnimController.Limbs) { - if (limb.IsSevered) { continue; } if (limb.type == targetLimbType || targetLimbType == LimbType.None) { targetLimbs.Add(limb); @@ -2083,6 +2257,7 @@ namespace Barotrauma Limb targetLimb = null; foreach (Limb limb in targetLimbs) { + if (limb.IsSevered) { continue; } float dist = Vector2.DistanceSquared(limb.WorldPosition, attackLimb.WorldPosition) / Math.Max(limb.AttackPriority, 0.1f); if (dist < closestDist) { @@ -2092,6 +2267,27 @@ namespace Barotrauma } return targetLimb; } + + private Character GetOwner(Item item) + { + // If the item is held by a character, attack the character instead. + var pickable = item.GetComponent(); + if (pickable != null) + { + Character owner = pickable.Picker ?? item.FindParentInventory(i => i.Owner is Character)?.Owner as Character; + if (owner != null) + { + var target = owner.AiTarget; + if (target?.Entity != null && !target.Entity.Removed) + { + return owner; + } + } + } + return null; + } + + public static bool IsFriendly(Character me, Character other) => other.SpeciesName == me.SpeciesName || other.Params.CompareGroup(me.Params.Group); } //the "memory" of the Character diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs index 6e6a5fbc9..08a666469 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs @@ -30,8 +30,9 @@ namespace Barotrauma public static float HULL_SAFETY_THRESHOLD = 50; - public HashSet UnreachableHulls { get; private set; } = new HashSet(); - public HashSet UnsafeHulls { get; private set; } = new HashSet(); + public readonly HashSet UnreachableHulls = new HashSet(); + public readonly HashSet UnsafeHulls = new HashSet(); + public readonly List IgnoredItems = new List(); private SteeringManager outsideSteering, insideSteering; @@ -55,13 +56,13 @@ namespace Barotrauma private set; } - public float CurrentHullSafety { get; private set; } + public float CurrentHullSafety { get; private set; } = 100; public HumanAIController(Character c) : base(c) { if (!c.IsHuman) { - throw new System.Exception($"Tried to create a human ai controller for a non-human: {c.SpeciesName}!"); + throw new Exception($"Tried to create a human ai controller for a non-human: {c.SpeciesName}!"); } insideSteering = new IndoorsSteeringManager(this, true, false); outsideSteering = new SteeringManager(this); @@ -85,7 +86,7 @@ namespace Barotrauma { unreachableClearTimer = clearUnreachableInterval; UnreachableHulls.Clear(); - ignoredContainers.Clear(); + IgnoredItems.Clear(); } // Use the pathfinding also outside of the sub, but not farther than the extents of the sub + 500 units. @@ -175,9 +176,7 @@ namespace Barotrauma } steeringManager.Update(Character.AnimController.GetCurrentSpeed(run && Character.CanRun)); - bool ignorePlatforms = Character.AnimController.TargetMovement.Y < -0.5f && - (-Character.AnimController.TargetMovement.Y > Math.Abs(Character.AnimController.TargetMovement.X)); - + bool ignorePlatforms = Character.AnimController.TargetMovement.Y < -0.5f && (-Character.AnimController.TargetMovement.Y > Math.Abs(Character.AnimController.TargetMovement.X)); if (steeringManager == insideSteering) { var currPath = PathSteering.CurrentPath; @@ -185,51 +184,24 @@ namespace Barotrauma { if (currPath.CurrentNode.SimPosition.Y < Character.AnimController.GetColliderBottom().Y) { - // Don't allow to jump from too high. The formula might require tweaking. + // Don't allow to jump from too high. float allowedJumpHeight = Character.AnimController.ImpactTolerance / 2; float height = Math.Abs(currPath.CurrentNode.SimPosition.Y - Character.SimPosition.Y); ignorePlatforms = height < allowedJumpHeight; } } - if (Character.IsClimbing && PathSteering.IsNextLadderSameAsCurrent) { Character.AnimController.TargetMovement = new Vector2(0.0f, Math.Sign(Character.AnimController.TargetMovement.Y)); } } - Character.AnimController.IgnorePlatforms = ignorePlatforms; Vector2 targetMovement = AnimController.TargetMovement; - if (!Character.AnimController.InWater) { targetMovement = new Vector2(Character.AnimController.TargetMovement.X, MathHelper.Clamp(Character.AnimController.TargetMovement.Y, -1.0f, 1.0f)); } - - if (Character.AnimController.InWater && targetMovement.LengthSquared() < 0.000001f) - { - bool isAiming = false; - var holdable = Character.SelectedConstruction?.GetComponent(); - if (holdable != null) - { - isAiming = holdable.ControlPose; - } - bool swimInPlace = !isAiming; - if (swimInPlace && ObjectiveManager.GetActiveObjective() is AIObjectiveGoTo goToObjective) - { - if (goToObjective.Target != Character) - { - swimInPlace = false; - } - } - if (swimInPlace) - { - // Swim in place so that we don't fall motionless and look dead. - targetMovement = new Vector2(targetMovement.X, Rand.Range(-0.001f, 0.001f)); - } - } - Character.AnimController.TargetMovement = Character.ApplyMovementLimits(targetMovement, AnimController.GetCurrentSpeed(run)); flipTimer -= deltaTime; @@ -280,14 +252,14 @@ namespace Barotrauma else { findItemState = FindItemState.Extinguisher; - if (FindSuitableContainer(Character, extinguisher, out Item targetContainer)) + if (FindSuitableContainer(extinguisher, out Item targetContainer)) { findItemState = FindItemState.None; itemIndex = 0; if (targetContainer != null) { var decontainObjective = new AIObjectiveDecontainItem(Character, extinguisher, ObjectiveManager, targetContainer: targetContainer.GetComponent()); - decontainObjective.Abandoned += () => ignoredContainers.Add(targetContainer); + decontainObjective.Abandoned += () => IgnoredItems.Add(targetContainer); ObjectiveManager.CurrentObjective.AddSubObjective(decontainObjective, addFirst: true); return; } @@ -310,42 +282,47 @@ namespace Barotrauma || ObjectiveManager.IsCurrentObjective() || ObjectiveManager.CurrentObjective.GetSubObjectivesRecursive(true).Any(o => o.KeepDivingGearOn); bool removeDivingSuit = !Character.AnimController.HeadInWater && oxygenLow; - AIObjectiveGoTo gotoObjective = ObjectiveManager.GetActiveObjective(); + bool takeMaskOff = !Character.AnimController.HeadInWater && oxygenLow; if (!removeDivingSuit) { - bool targetHasNoSuit = gotoObjective != null && gotoObjective.mimic && !HasDivingSuit(gotoObjective.Target as Character); - removeDivingSuit = !shouldKeepTheGearOn && (gotoObjective == null || targetHasNoSuit); - } - bool takeMaskOff = !Character.AnimController.HeadInWater && oxygenLow; - if (!takeMaskOff && Character.CurrentHull.WaterPercentage < 40) - { - bool targetHasNoMask = gotoObjective != null && gotoObjective.mimic && !HasDivingMask(gotoObjective.Target as Character); - takeMaskOff = !shouldKeepTheGearOn && (gotoObjective == null || targetHasNoMask); - } - if (gotoObjective != null) - { - if (gotoObjective.Target is Hull h) + if (shouldKeepTheGearOn) { - if (NeedsDivingGear(Character, h, out _)) - { - removeDivingSuit = false; - takeMaskOff = false; - } + removeDivingSuit = false; } - else if (gotoObjective.Target is Character c) + } + if (!takeMaskOff) + { + if (shouldKeepTheGearOn) { - if (NeedsDivingGear(Character, c.CurrentHull, out _)) - { - removeDivingSuit = false; - takeMaskOff = false; - } + takeMaskOff = false; } - else if (gotoObjective.Target is Item i) + } + if (!shouldKeepTheGearOn && (!takeMaskOff || !removeDivingSuit)) + { + foreach (var objective in ObjectiveManager.CurrentObjective.GetSubObjectivesRecursive(includingSelf: true)) { - if (NeedsDivingGear(Character, i.CurrentHull, out _)) + if (objective is AIObjectiveGoTo gotoObjective) { - removeDivingSuit = false; - takeMaskOff = false; + bool insideSteering = SteeringManager == PathSteering && PathSteering.CurrentPath != null && !PathSteering.IsPathDirty; + Hull targetHull = gotoObjective.GetTargetHull(); + bool targetIsOutside = (gotoObjective.Target != null && targetHull == null) || (insideSteering && PathSteering.CurrentPath.HasOutdoorsNodes); + if (targetIsOutside || NeedsDivingGear(Character, targetHull, out _)) + { + removeDivingSuit = false; + takeMaskOff = false; + break; + } + else if (gotoObjective.mimic) + { + if (!removeDivingSuit) + { + removeDivingSuit = !HasDivingSuit(gotoObjective.Target as Character); + } + if (!takeMaskOff) + { + takeMaskOff = !HasDivingMask(gotoObjective.Target as Character); + } + } } } } @@ -363,7 +340,7 @@ namespace Barotrauma else { findItemState = FindItemState.DivingSuit; - if (FindSuitableContainer(Character, divingSuit, out Item targetContainer)) + if (FindSuitableContainer(divingSuit, out Item targetContainer)) { findItemState = FindItemState.None; itemIndex = 0; @@ -375,7 +352,7 @@ namespace Barotrauma }; decontainObjective.Abandoned += () => { - ignoredContainers.Add(targetContainer); + IgnoredItems.Add(targetContainer); }; ObjectiveManager.CurrentObjective.AddSubObjective(decontainObjective, addFirst: true); return; @@ -405,14 +382,14 @@ namespace Barotrauma else { findItemState = FindItemState.DivingMask; - if (FindSuitableContainer(Character, mask, out Item targetContainer)) + if (FindSuitableContainer(mask, out Item targetContainer)) { findItemState = FindItemState.None; itemIndex = 0; if (targetContainer != null) { var decontainObjective = new AIObjectiveDecontainItem(Character, mask, ObjectiveManager, targetContainer: targetContainer.GetComponent()); - decontainObjective.Abandoned += () => ignoredContainers.Add(targetContainer); + decontainObjective.Abandoned += () => IgnoredItems.Add(targetContainer); ObjectiveManager.CurrentObjective.AddSubObjective(decontainObjective, addFirst: true); return; } @@ -442,14 +419,14 @@ namespace Barotrauma { if (!item.AllowedSlots.Contains(InvSlotType.Any) || !Character.Inventory.TryPutItem(item, Character, new List() { InvSlotType.Any })) { - if (FindSuitableContainer(Character, item, out Item targetContainer)) + if (FindSuitableContainer(item, out Item targetContainer)) { findItemState = FindItemState.None; itemIndex = 0; if (targetContainer != null) { var decontainObjective = new AIObjectiveDecontainItem(Character, item, ObjectiveManager, targetContainer: targetContainer.GetComponent()); - decontainObjective.Abandoned += () => ignoredContainers.Add(targetContainer); + decontainObjective.Abandoned += () => IgnoredItems.Add(targetContainer); ObjectiveManager.CurrentObjective.AddSubObjective(decontainObjective, addFirst: true); return; } @@ -478,11 +455,10 @@ namespace Barotrauma } private FindItemState findItemState; private int itemIndex; - private List ignoredContainers = new List(); - public bool FindSuitableContainer(Character character, Item containableItem, out Item suitableContainer) + public bool FindSuitableContainer(Item containableItem, out Item suitableContainer) { suitableContainer = null; - if (character.FindItem(ref itemIndex, out Item targetContainer, ignoredItems: ignoredContainers, customPriorityFunction: i => + if (Character.FindItem(ref itemIndex, out Item targetContainer, ignoredItems: IgnoredItems, customPriorityFunction: i => { var container = i.GetComponent(); if (container == null) { return 0; } @@ -645,7 +621,7 @@ namespace Barotrauma // Should not cancel any existing ai objectives (so that if the character attacked you and then helped, we still would want to retaliate). return; } - if (!attacker.IsPlayer && attacker.AIController != null && attacker.AIController.Enabled) + if (attacker.IsBot) { // Don't retaliate on damage done by friendly ai, because we know that it's accidental AddCombatObjective(AIObjectiveCombat.CombatMode.Retreat, Rand.Range(0.5f, 1f, Rand.RandSync.Unsynced)); @@ -784,7 +760,6 @@ namespace Barotrauma return false; } - public static bool HasDivingGear(Character character, float conditionPercentage = 0) => HasDivingSuit(character, conditionPercentage) || HasDivingMask(character, conditionPercentage); /// @@ -1055,13 +1030,11 @@ namespace Barotrauma public static bool IsItemOperatedByAnother(Character character, ItemComponent target, out Character operatingCharacter) { operatingCharacter = null; + if (target?.Item == null) { return false; } foreach (var c in Character.CharacterList) { - if (character != null) - { - if (c == character) { continue; } - if (!IsFriendly(character, c)) { continue; } - } + if (character != null && c == character) { continue; } + if (character?.AIController is HumanAIController humanAi && !humanAi.IsFriendly(c)) { continue; } if (c.SelectedConstruction != target.Item) { continue; } operatingCharacter = c; // If the other character is player, don't try to operate diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs index 6628d279f..ad515afa2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs @@ -12,7 +12,8 @@ namespace Barotrauma private PathFinder pathFinder; private SteeringPath currentPath; - private bool canOpenDoors, canBreakDoors; + private bool canOpenDoors; + public bool CanBreakDoors { get; set; } private Character character; @@ -50,8 +51,8 @@ namespace Barotrauma /// public bool InLadders => currentPath != null && - currentPath.CurrentNode != null && (currentPath.CurrentNode.Ladders != null || - (currentPath.NextNode != null && currentPath.NextNode.Ladders != null)); + currentPath.CurrentNode != null && (currentPath.CurrentNode.Ladders != null && !currentPath.CurrentNode.Ladders.Item.NonInteractable || + (currentPath.NextNode != null && currentPath.NextNode.Ladders != null && !currentPath.NextNode.Ladders.Item.NonInteractable)); /// /// Returns true if any node in the path is in stairs @@ -69,6 +70,7 @@ namespace Barotrauma if (currentPath.NextNode == null) { return false; } var currentLadder = currentPath.CurrentNode.Ladders; if (currentLadder == null) { return false; } + if (currentLadder.Item.NonInteractable) { return false; } var nextLadder = GetNextLadder(); return nextLadder != null && nextLadder == currentLadder; } @@ -80,7 +82,7 @@ namespace Barotrauma pathFinder.GetNodePenalty = GetNodePenalty; this.canOpenDoors = canOpenDoors; - this.canBreakDoors = canBreakDoors; + this.CanBreakDoors = canBreakDoors; character = (host as AIController).Character; @@ -103,6 +105,12 @@ namespace Barotrauma IsPathDirty = false; } + public void ResetPath() + { + currentPath = null; + IsPathDirty = true; + } + public void SteeringSeek(Vector2 target, float weight, Func startNodeFilter = null, Func endNodeFilter = null, Func nodeFilter = null) { steering += CalculateSteeringSeek(target, weight, startNodeFilter, endNodeFilter, nodeFilter); @@ -115,7 +123,7 @@ namespace Barotrauma { if (currentPath == null) { return null; } if (currentPath.NextNode == null) { return null; } - if (currentPath.NextNode.Ladders != null) + if (currentPath.NextNode.Ladders != null && !currentPath.NextNode.Ladders.Item.NonInteractable) { return currentPath.NextNode.Ladders; } @@ -126,7 +134,10 @@ namespace Barotrauma { var node = currentPath.Nodes[index]; if (node == null) { return null; } - return node.Ladders; + if (node.Ladders != null && !node.Ladders.Item.NonInteractable) + { + return node.Ladders; + } } return null; } @@ -134,7 +145,19 @@ namespace Barotrauma private Vector2 CalculateSteeringSeek(Vector2 target, float weight, Func startNodeFilter = null, Func endNodeFilter = null, Func nodeFilter = null) { - bool needsNewPath = character.Params.PathFinderPriority > 0.5f && (currentPath == null || currentPath.Unreachable || currentPath.Finished || Vector2.DistanceSquared(target, currentTarget) > 1); + Vector2 targetDiff = target - currentTarget; + if (currentPath != null && currentPath.Nodes.Any()) + { + //current path calculated relative to a different sub than where the character is now + //take that into account when calculating if the target has moved + Submarine currentPathSub = currentPath?.Nodes.First().Submarine; + if (currentPathSub != character.Submarine && character.Submarine != null) + { + Vector2 subDiff = character.Submarine.SimPosition - currentPathSub.SimPosition; + targetDiff += subDiff; + } + } + bool needsNewPath = character.Params.PathFinderPriority > 0.5f && (currentPath == null || currentPath.Unreachable || currentPath.Finished || targetDiff.LengthSquared() > 1); //find a new path if one hasn't been found yet or the target is different from the current target if (needsNewPath || findPathTimer < -1.0f) { @@ -172,12 +195,13 @@ namespace Barotrauma Vector2 diff = DiffToCurrentNode(); var collider = character.AnimController.Collider; + // Only humanoids can climb ladders + bool canClimb = character.AnimController is HumanoidAnimController; //if not in water and the waypoint is between the top and bottom of the collider, no need to move vertically - if (!character.AnimController.InWater && !character.IsClimbing && diff.Y < collider.height / 2 + collider.radius) + if (canClimb && !character.AnimController.InWater && !character.IsClimbing && diff.Y < collider.height / 2 + collider.radius) { diff.Y = 0.0f; } - //if (diff.LengthSquared() < 0.001f) { return -host.Steering; } if (diff == Vector2.Zero) { return Vector2.Zero; } return Vector2.Normalize(diff) * weight; } @@ -186,8 +210,10 @@ namespace Barotrauma private Vector2 DiffToCurrentNode() { - if (currentPath == null || currentPath.Unreachable) return Vector2.Zero; - + if (currentPath == null || currentPath.Unreachable) + { + return Vector2.Zero; + } if (currentPath.Finished) { Vector2 pos2 = host.SimPosition; @@ -197,15 +223,12 @@ namespace Barotrauma pos2 -= CurrentPath.Nodes.Last().Submarine.SimPosition; } return currentTarget - pos2; - } - + } if (canOpenDoors && !character.LockHands && buttonPressCooldown <= 0.0f) { CheckDoorsInPath(); - } - + } Vector2 pos = host.SimPosition; - if (character != null && currentPath.CurrentNode != null) { if (CurrentPath.CurrentNode.Submarine != null) @@ -220,19 +243,17 @@ namespace Barotrauma } } } - bool isDiving = character.AnimController.InWater && character.AnimController.HeadInWater; - - //only humanoids can climb ladders - if (!isDiving && character.AnimController is HumanoidAnimController && IsNextLadderSameAsCurrent) + // Only humanoids can climb ladders + bool canClimb = character.AnimController is HumanoidAnimController; + if (canClimb && !isDiving && IsNextLadderSameAsCurrent) { - if (character.SelectedConstruction != currentPath.CurrentNode.Ladders.Item && - currentPath.CurrentNode.Ladders.Item.IsInsideTrigger(character.WorldPosition)) + var ladders = currentPath.CurrentNode.Ladders; + if (character.SelectedConstruction != ladders.Item && ladders.Item.IsInsideTrigger(character.WorldPosition)) { currentPath.CurrentNode.Ladders.Item.TryInteract(character, false, true); } - } - + } var collider = character.AnimController.Collider; if (character.IsClimbing && !isDiving) { @@ -252,13 +273,16 @@ namespace Barotrauma { diff.Y = Math.Max(diff.Y, 1.0f); } + // We need some margin, because if a hatch has closed, it's possible that the height from floor is slightly negative. + float margin = 0.1f; + bool isAboveFloor = heightFromFloor > -margin && heightFromFloor < collider.height * 1.5f; // If the next waypoint is horizontally far, we don't want to keep holding the ladders - if (nextLadder == null || Math.Abs(currentPath.CurrentNode.WorldPosition.X - currentPath.NextNode.WorldPosition.X) > 50) + if (isAboveFloor && (nextLadder == null || Math.Abs(currentPath.CurrentNode.WorldPosition.X - currentPath.NextNode.WorldPosition.X) > 50)) { character.AnimController.Anim = AnimController.Animation.None; character.SelectedConstruction = null; } - else if (!nextLadderSameAsCurrent) + else if (nextLadder != null && !nextLadderSameAsCurrent) { // Try to change the ladder (hatches between two submarines) if (character.SelectedConstruction != nextLadder.Item && nextLadder.Item.IsInsideTrigger(character.WorldPosition)) @@ -266,9 +290,6 @@ namespace Barotrauma nextLadder.Item.TryInteract(character, false, true); } } - // We need some margin, because if a hatch has closed, it's possible that the height from floor is slightly negative. - float margin = 0.1f; - bool isAboveFloor = heightFromFloor > -margin && heightFromFloor < collider.height * 1.5f; if (nextLadder != null || isAboveFloor) { currentPath.SkipToNextNode(); @@ -286,7 +307,7 @@ namespace Barotrauma } return diff; } - else if (character.AnimController.InWater) + else if (!canClimb || character.AnimController.InWater) { // If the character is underwater, we don't need the ladders anymore if (character.IsClimbing && isDiving) @@ -294,49 +315,59 @@ namespace Barotrauma character.AnimController.Anim = AnimController.Animation.None; character.SelectedConstruction = null; } - float multiplier = MathHelper.Lerp(1, 10, MathHelper.Clamp(collider.LinearVelocity.Length() / 10, 0, 1)); - float targetDistance = collider.GetSize().X * multiplier; - float horizontalDistance = Math.Abs(character.WorldPosition.X - currentPath.CurrentNode.WorldPosition.X); - float verticalDistance = Math.Abs(character.WorldPosition.Y - currentPath.CurrentNode.WorldPosition.Y); - if (character.CurrentHull != currentPath.CurrentNode.CurrentHull) + var door = currentPath.CurrentNode.ConnectedDoor; + bool blockedByDoor = door != null && !door.IsOpen && !door.IsBroken; + if (!blockedByDoor) { - verticalDistance *= 2; - } - float distance = horizontalDistance + verticalDistance; - if (ConvertUnits.ToSimUnits(distance) < targetDistance) - { - currentPath.SkipToNextNode(); + float multiplier = MathHelper.Lerp(1, 10, MathHelper.Clamp(collider.LinearVelocity.Length() / 10, 0, 1)); + float targetDistance = collider.GetSize().X * multiplier; + float horizontalDistance = Math.Abs(character.WorldPosition.X - currentPath.CurrentNode.WorldPosition.X); + float verticalDistance = Math.Abs(character.WorldPosition.Y - currentPath.CurrentNode.WorldPosition.Y); + if (character.CurrentHull != currentPath.CurrentNode.CurrentHull) + { + verticalDistance *= 2; + } + float distance = horizontalDistance + verticalDistance; + if (ConvertUnits.ToSimUnits(distance) < targetDistance) + { + currentPath.SkipToNextNode(); + } } } else if (!IsNextLadderSameAsCurrent) { + // Walking horizontally Vector2 colliderBottom = character.AnimController.GetColliderBottom(); Vector2 colliderSize = collider.GetSize(); Vector2 velocity = collider.LinearVelocity; - // If the character is smaller than this, it fails to use the waypoint nodes, because they are always too high. + // If the character is smaller than this, it would fail to use the waypoint nodes because they are always too high. float minHeight = 1; // Cannot use the head position, because not all characters have head or it can be below the total height of the character float characterHeight = Math.Max(colliderSize.Y + character.AnimController.ColliderHeightFromFloor, minHeight); float horizontalDistance = Math.Abs(collider.SimPosition.X - currentPath.CurrentNode.SimPosition.X); bool isAboveFeet = currentPath.CurrentNode.SimPosition.Y > colliderBottom.Y; bool isNotTooHigh = currentPath.CurrentNode.SimPosition.Y < colliderBottom.Y + characterHeight; + var door = currentPath.CurrentNode.ConnectedDoor; + bool blockedByDoor = door != null && !door.IsOpen && !door.IsBroken; float margin = MathHelper.Lerp(1, 10, MathHelper.Clamp(Math.Abs(velocity.X) / 10, 0, 1)); float targetDistance = collider.radius * margin; - if (horizontalDistance < targetDistance && isAboveFeet && isNotTooHigh) + if (horizontalDistance < targetDistance && isAboveFeet && isNotTooHigh && !blockedByDoor) { currentPath.SkipToNextNode(); } } - - if (currentPath.CurrentNode == null) return Vector2.Zero; - + if (currentPath.CurrentNode == null) + { + return Vector2.Zero; + } return currentPath.CurrentNode.SimPosition - pos; } private bool CanAccessDoor(Door door, Func buttonFilter = null) { if (door.IsOpen) { return true; } - if (canBreakDoors) { return true; } + if (door.Item.NonInteractable) { return false; } + if (CanBreakDoors) { return true; } if (door.IsStuck) { return false; } if (!canOpenDoors || character.LockHands) { return false; } if (door.HasIntegratedButtons) @@ -345,7 +376,7 @@ namespace Barotrauma } else { - return door.Item.GetConnectedComponents(true).Any(b => b.HasAccess(character) && (buttonFilter == null || buttonFilter(b))); + return door.Item.GetConnectedComponents(true).Any(b => !b.Item.NonInteractable && b.HasAccess(character) && (buttonFilter == null || buttonFilter(b))); } } @@ -519,9 +550,9 @@ namespace Barotrauma //non-humanoids can't climb up ladders if (!(character.AnimController is HumanoidAnimController)) { - if (node.Waypoint.Ladders != null && nextNode.Waypoint.Ladders != null && - nextNode.Position.Y - node.Position.Y > 1.0f && //more than one sim unit to climb up - nextNode.Waypoint.CurrentHull != null && nextNode.Waypoint.CurrentHull.Surface < nextNode.Waypoint.Position.Y) //upper node not underwater + if (node.Waypoint.Ladders != null && nextNode.Waypoint.Ladders != null && nextNode.Waypoint.Ladders.Item.NonInteractable || + (nextNode.Position.Y - node.Position.Y > 1.0f && //more than one sim unit to climb up + nextNode.Waypoint.CurrentHull != null && nextNode.Waypoint.CurrentHull.Surface < nextNode.Waypoint.Position.Y)) //upper node not underwater { return null; } @@ -539,7 +570,10 @@ namespace Barotrauma } if (character.NeedsAir && hull.WaterVolume / hull.Rect.Width > 100.0f) { - penalty += 500.0f; + if (!HumanAIController.HasDivingSuit(character)) + { + penalty += 500.0f; + } } if (character.PressureProtection < 10.0f && hull.WaterVolume > hull.Volume) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs index 68746f340..11fb2d14d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs @@ -1,11 +1,11 @@ using FarseerPhysics; -using FarseerPhysics.Common; using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics.Joints; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Xml.Linq; +using System.Linq; namespace Barotrauma { @@ -19,8 +19,8 @@ namespace Barotrauma private Vector2 attachSurfaceNormal; private Submarine attachTargetSubmarine; - private bool attachToSub; - private bool attachToWalls; + public bool AttachToSub { get; private set; } + public bool AttachToWalls { get; private set; } private float minDeattachSpeed = 3.0f, maxDeattachSpeed = 10.0f; private float damageOnDetach = 0.0f, detachStun = 0.0f; @@ -58,8 +58,8 @@ namespace Barotrauma public LatchOntoAI(XElement element, EnemyAIController enemyAI) { - attachToWalls = element.GetAttributeBool("attachtowalls", false); - attachToSub = element.GetAttributeBool("attachtosub", false); + AttachToWalls = element.GetAttributeBool("attachtowalls", false); + AttachToSub = element.GetAttributeBool("attachtosub", false); minDeattachSpeed = element.GetAttributeFloat("mindeattachspeed", 3.0f); maxDeattachSpeed = Math.Max(minDeattachSpeed, element.GetAttributeFloat("maxdeattachspeed", 10.0f)); damageOnDetach = element.GetAttributeFloat("damageondetach", 0.0f); @@ -67,11 +67,19 @@ namespace Barotrauma localAttachPos = ConvertUnits.ToSimUnits(element.GetAttributeVector2("localattachpos", Vector2.Zero)); attachLimbRotation = MathHelper.ToRadians(element.GetAttributeFloat("attachlimbrotation", 0.0f)); - if (Enum.TryParse(element.GetAttributeString("attachlimb", "Head"), out LimbType attachLimbType)) + string limbString = element.GetAttributeString("attachlimb", null); + attachLimb = enemyAI.Character.AnimController.Limbs.FirstOrDefault(l => string.Equals(l.Name, limbString, StringComparison.OrdinalIgnoreCase)); + if (attachLimb == null) { - attachLimb = enemyAI.Character.AnimController.GetLimb(attachLimbType); + if (Enum.TryParse(limbString, out LimbType attachLimbType)) + { + attachLimb = enemyAI.Character.AnimController.GetLimb(attachLimbType); + } + } + if (attachLimb == null) + { + attachLimb = enemyAI.Character.AnimController.MainLimb; } - if (attachLimb == null) attachLimb = enemyAI.Character.AnimController.MainLimb; enemyAI.Character.OnDeath += OnCharacterDeath; } @@ -108,7 +116,9 @@ namespace Barotrauma //something went wrong, limb body is very far from the joint anchor -> deattach if (Vector2.DistanceSquared(attachJoints[i].WorldAnchorB, attachJoints[i].BodyA.Position) > 10.0f * 10.0f) { +#if DEBUG DebugConsole.ThrowError("Limb body of the character \"" + character.Name + "\" is very far from the attach joint anchor -> deattach"); +#endif DeattachFromBody(); return; } @@ -131,7 +141,7 @@ namespace Barotrauma switch (enemyAI.State) { case AIState.Idle: - if (attachToWalls && character.Submarine == null && Level.Loaded != null) + if (AttachToWalls && character.Submarine == null && Level.Loaded != null) { if (!IsAttached) { @@ -180,8 +190,9 @@ namespace Barotrauma } else { - float dist = Vector2.Distance(character.SimPosition, wallAttachPos); - if (dist < Math.Max(Math.Max(character.AnimController.Collider.radius, character.AnimController.Collider.width), character.AnimController.Collider.height) * 1.2f) + float squaredDistance = Vector2.DistanceSquared(character.SimPosition, wallAttachPos); + float targetDistance = Math.Max(Math.Max(character.AnimController.Collider.radius, character.AnimController.Collider.width), character.AnimController.Collider.height) * 1.2f; + if (squaredDistance < targetDistance * targetDistance) { //close enough to a wall -> attach AttachToBody(character.AnimController.Collider, attachLimb, attachTargetBody, wallAttachPos); @@ -197,12 +208,13 @@ namespace Barotrauma } break; case AIState.Attack: + case AIState.Aggressive: if (enemyAI.AttackingLimb != null) { - if (attachToSub && !enemyAI.IsSteeringThroughGap && wallAttachPos != Vector2.Zero && attachTargetBody != null) + if (AttachToSub && !enemyAI.IsSteeringThroughGap && wallAttachPos != Vector2.Zero && attachTargetBody != null) { // is not attached or is attached to something else - if (!IsAttached || IsAttached && attachJoints[0].BodyB == attachTargetBody) + if (!IsAttached || IsAttached && attachJoints[0].BodyB != attachTargetBody) { if (Vector2.DistanceSquared(ConvertUnits.ToDisplayUnits(transformedAttachPos), enemyAI.AttackingLimb.WorldPosition) < enemyAI.AttackingLimb.attack.DamageRange * enemyAI.AttackingLimb.attack.DamageRange) { @@ -247,16 +259,17 @@ namespace Barotrauma if (attachJoints.Count > 0) { //already attached to the target body, no need to do anything - if (attachJoints[0].BodyB == targetBody) return; + if (attachJoints[0].BodyB == targetBody) { return; } DeattachFromBody(); } jointDir = attachLimb.Dir; Vector2 transformedLocalAttachPos = localAttachPos * attachLimb.Scale * attachLimb.Params.Ragdoll.LimbScale; - if (jointDir < 0.0f) transformedLocalAttachPos.X = -transformedLocalAttachPos.X; - - //transformedLocalAttachPos = Vector2.Transform(transformedLocalAttachPos, Matrix.CreateRotationZ(attachLimb.Rotation)); + if (jointDir < 0.0f) + { + transformedLocalAttachPos.X = -transformedLocalAttachPos.X; + } float angle = MathUtils.VectorToAngle(-attachSurfaceNormal) - MathHelper.PiOver2 + attachLimbRotation * attachLimb.Dir; attachLimb.body.SetTransform(attachPos + attachSurfaceNormal * transformedLocalAttachPos.Length(), angle); @@ -274,7 +287,10 @@ namespace Barotrauma // Limb scale is already taken into account when creating the collider. Vector2 colliderFront = collider.GetLocalFront(); - if (jointDir < 0.0f) colliderFront.X = -colliderFront.X; + if (jointDir < 0.0f) + { + colliderFront.X = -colliderFront.X; + } collider.SetTransform(attachPos + attachSurfaceNormal * colliderFront.Length(), MathUtils.VectorToAngle(-attachSurfaceNormal) - MathHelper.PiOver2); var colliderJoint = new WeldJoint(collider.FarseerBody, targetBody, colliderFront, targetBody.GetLocalPoint(attachPos), false) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/NPCConversation.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/NPCConversation.cs index c5ab0ea33..b1fcd4848 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/NPCConversation.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/NPCConversation.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -375,9 +375,7 @@ namespace Barotrauma } } - StreamWriter file = new StreamWriter(@"NPCConversations.csv"); - file.WriteLine(sb.ToString()); - file.Close(); + File.WriteAllText("NPCConversations.csv", sb.ToString()); } private static void WriteConversation(System.Text.StringBuilder sb, NPCConversation conv, int depthIndex) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs index 581ef4f49..42112ccfd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs @@ -30,6 +30,7 @@ namespace Barotrauma public virtual bool KeepDivingGearOn => false; public virtual bool UnequipItems => false; + public virtual bool AllowOutsideSubmarine => false; protected readonly List subObjectives = new List(); private float _cumulatedDevotion; @@ -117,7 +118,6 @@ namespace Barotrauma public void TryComplete(float deltaTime) { if (isCompleted) { return; } - //if (Abandon && !IsLoop && subObjectives.None()) { return; } if (CheckState()) { return; } // Not ready -> act (can't do foreach because it's possible that the collection is modified in event callbacks. for (int i = 0; i < subObjectives.Count; i++) @@ -182,12 +182,26 @@ namespace Barotrauma } } + protected bool IsAllowed => AllowOutsideSubmarine || character.Submarine != null && character.Submarine.TeamID == character.TeamID && character.Submarine.Info.IsPlayer; + /// /// Call this only when the priority needs to be recalculated. Use the cached Priority property when you don't need to recalculate. /// public virtual float GetPriority() { - Priority = CumulatedDevotion * PriorityModifier; + if (!IsAllowed) + { + Priority = 0; + return Priority; + } + if (objectiveManager.CurrentOrder == this) + { + Priority = AIObjectiveManager.OrderPriority; + } + else + { + Priority = CumulatedDevotion; + } return Priority; } @@ -196,7 +210,7 @@ namespace Barotrauma var currentObjective = objectiveManager.CurrentObjective; if (currentObjective != null && (currentObjective == this || currentObjective.subObjectives.Any(so => so == this))) { - CumulatedDevotion += Devotion * PriorityModifier * deltaTime; + CumulatedDevotion += Devotion * deltaTime; } } @@ -204,11 +218,7 @@ namespace Barotrauma public virtual void Update(float deltaTime) { - if (objectiveManager.CurrentOrder == this) - { - Priority = AIObjectiveManager.OrderPriority; - } - else if (objectiveManager.WaitTimer <= 0) + if (objectiveManager.CurrentOrder != this && objectiveManager.WaitTimer <= 0) { UpdateDevotion(deltaTime); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveChargeBatteries.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveChargeBatteries.cs index 5defc9589..74e1ffd5e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveChargeBatteries.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveChargeBatteries.cs @@ -20,11 +20,16 @@ namespace Barotrauma { if (battery == null) { return false; } var item = battery.Item; + if (item.NonInteractable) { return false; } if (item.Submarine == null) { return false; } if (item.CurrentHull == null) { return false; } if (item.Submarine.TeamID != character.TeamID) { return false; } + if (character.Submarine != null) + { + if (item.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (!character.Submarine.IsEntityFoundOnThisSub(item, true)) { return false; } + } if (item.ConditionPercentage <= 0) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(item, true)) { return false; } if (Character.CharacterList.Any(c => c.CurrentHull == item.CurrentHull && !HumanAIController.IsFriendly(c) && HumanAIController.IsActive(c))) { return false; } if (IsReady(battery)) { return false; } return true; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs index 123530a7e..c68b18bdc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs @@ -13,6 +13,7 @@ namespace Barotrauma public override bool KeepDivingGearOn => true; public override bool IgnoreUnsafeHulls => true; + public override bool AllowOutsideSubmarine => true; private readonly CombatMode initialMode; @@ -120,6 +121,12 @@ namespace Barotrauma protected override bool Check() { + if (initialMode == CombatMode.Offensive && Mode != CombatMode.Offensive) + { + Abandon = true; + SteeringManager.Reset(); + return false; + } bool completed = (Enemy != null && (Enemy.Removed || Enemy.IsDead)) || (initialMode != CombatMode.Offensive && coolDownTimer <= 0); if (completed) { @@ -464,7 +471,6 @@ namespace Barotrauma SteeringManager.Reset(); return; } - retreatTarget = null; RemoveSubObjective(ref retreatObjective); RemoveSubObjective(ref seekAmmunition); @@ -481,9 +487,8 @@ namespace Barotrauma }, onAbandon: () => { - Mode = CombatMode.Defensive; + Abandon = true; SteeringManager.Reset(); - RemoveSubObjective(ref followTargetObjective); }); if (followTargetObjective != null) { @@ -592,10 +597,7 @@ namespace Barotrauma private void Attack(float deltaTime) { - float squaredDistance = Vector2.DistanceSquared(character.Position, Enemy.Position); character.CursorPosition = Enemy.Position; - float engageDistance = 500; - if (character.CurrentHull != Enemy.CurrentHull && squaredDistance > engageDistance * engageDistance) { return; } if (!character.CanSeeCharacter(Enemy)) { return; } if (Weapon.RequireAimToUse) { @@ -603,7 +605,7 @@ namespace Barotrauma if (SteeringManager == PathSteering) { var door = PathSteering.CurrentPath?.CurrentNode?.ConnectedDoor; - if (door != null && !door.IsOpen) + if (door != null && !door.IsOpen && !door.IsBroken) { isOperatingButtons = door.HasIntegratedButtons || door.Item.GetConnectedComponents(true).Any(); } @@ -625,7 +627,7 @@ namespace Barotrauma } if (WeaponComponent is MeleeWeapon meleeWeapon) { - if (squaredDistance <= meleeWeapon.Range * meleeWeapon.Range) + if (Vector2.DistanceSquared(character.Position, Enemy.Position) <= meleeWeapon.Range * meleeWeapon.Range) { character.SetInput(InputType.Shoot, false, true); Weapon.Use(deltaTime, character); @@ -635,7 +637,7 @@ namespace Barotrauma { if (WeaponComponent is RepairTool repairTool) { - if (squaredDistance > repairTool.Range * repairTool.Range) { return; } + if (Vector2.DistanceSquared(character.Position, Enemy.Position) > repairTool.Range * repairTool.Range) { return; } } if (VectorExtensions.Angle(VectorExtensions.Forward(Weapon.body.TransformedRotation), Enemy.Position - Weapon.Position) < MathHelper.PiOver4) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs index a77455b67..42f48b0da 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs @@ -158,7 +158,7 @@ namespace Barotrauma Abandon = true; }, onCompleted: () => { - if (getItemObjective.TargetItem != null) + if (getItemObjective?.TargetItem != null) { containedItems.Add(getItemObjective.TargetItem); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs index 8ccdf33c8..b6fb5ebce 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs @@ -27,6 +27,11 @@ namespace Barotrauma public override float GetPriority() { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } if (!objectiveManager.IsCurrentOrder() && Character.CharacterList.Any(c => c.CurrentHull == targetHull && !HumanAIController.IsFriendly(c) && HumanAIController.IsActive(c))) { @@ -101,7 +106,7 @@ namespace Barotrauma if (SteeringManager == PathSteering) { var door = PathSteering.CurrentPath?.CurrentNode?.ConnectedDoor; - if (door != null && !door.IsOpen) + if (door != null && !door.IsOpen && !door.IsBroken) { isOperatingButtons = door.HasIntegratedButtons || door.Item.GetConnectedComponents(true).Any(); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFires.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFires.cs index fd6bc49ce..e41f6675f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFires.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveExtinguishFires.cs @@ -32,7 +32,11 @@ namespace Barotrauma if (hull.FireSources.None()) { return false; } if (hull.Submarine == null) { return false; } if (hull.Submarine.TeamID != character.TeamID) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(hull, true)) { return false; } + if (character.Submarine != null) + { + if (hull.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (!character.Submarine.IsEntityFoundOnThisSub(hull, true)) { return false; } + } return true; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFightIntruders.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFightIntruders.cs index a21460a6d..9d9f74c13 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFightIntruders.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFightIntruders.cs @@ -1,9 +1,4 @@ -using Barotrauma.Items.Components; -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.Xna.Framework; -using Barotrauma.Extensions; +using System.Collections.Generic; namespace Barotrauma { @@ -40,7 +35,11 @@ namespace Barotrauma if (target.Submarine == null) { return false; } if (target.Submarine.TeamID != character.TeamID) { return false; } if (target.CurrentHull == null) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(target.CurrentHull, true)) { return false; } + if (character.Submarine != null) + { + if (target.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (!character.Submarine.IsEntityFoundOnThisSub(target.CurrentHull, true)) { return false; } + } return true; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs index 63eb1372b..0cc79ce1c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs @@ -12,6 +12,7 @@ namespace Barotrauma public override bool KeepDivingGearOn => true; public override bool IgnoreUnsafeHulls => true; public override bool ConcurrentObjectives => true; + public override bool AllowOutsideSubmarine => true; public override bool IsLoop { get => true; set => throw new System.Exception("Trying to set the value for IsLoop from: " + System.Environment.StackTrace); } // TODO: expose? @@ -26,14 +27,39 @@ namespace Barotrauma private AIObjectiveGoTo goToObjective; private AIObjectiveFindDivingGear divingGearObjective; - public AIObjectiveFindSafety(Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) { } + public AIObjectiveFindSafety(Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) { } protected override bool Check() => false; public override bool CanBeCompleted => true; private bool resetPriority; - public override float GetPriority() => Priority; + public override float GetPriority() + { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } + if (character.CurrentHull == null) + { + Priority = objectiveManager.CurrentOrder is AIObjectiveGoTo && HumanAIController.HasDivingSuit(character) ? 0 : 100; + } + else + { + if (HumanAIController.NeedsDivingGear(character, character.CurrentHull, out _) && !HumanAIController.HasDivingGear(character)) + { + Priority = 100; + } + Priority = MathHelper.Clamp(Priority, 0, 100); + if (divingGearObjective != null && !divingGearObjective.IsCompleted && divingGearObjective.CanBeCompleted) + { + // Boost the priority while seeking the diving gear + Priority = Math.Max(Priority, Math.Min(AIObjectiveManager.OrderPriority + 20, 100)); + } + } + return Priority; + } public override void Update(float deltaTime) { @@ -46,28 +72,20 @@ namespace Barotrauma if (character.CurrentHull == null) { currenthullSafety = 0; - Priority = objectiveManager.CurrentOrder is AIObjectiveGoTo ? 0 : 100; - return; - } - if (HumanAIController.NeedsDivingGear(character, character.CurrentHull, out _) && !HumanAIController.HasDivingGear(character)) - { - Priority = 100; - } - currenthullSafety = HumanAIController.CurrentHullSafety; - if (currenthullSafety > HumanAIController.HULL_SAFETY_THRESHOLD) - { - Priority -= priorityDecrease * deltaTime; } else { - float dangerFactor = (100 - currenthullSafety) / 100; - Priority += dangerFactor * priorityIncrease * deltaTime; - } - Priority = MathHelper.Clamp(Priority, 0, 100); - if (divingGearObjective != null && !divingGearObjective.IsCompleted && divingGearObjective.CanBeCompleted) - { - // Boost the priority while seeking the diving gear - Priority = Math.Max(Priority, Math.Min(AIObjectiveManager.OrderPriority + 20, 100)); + currenthullSafety = HumanAIController.CurrentHullSafety; + if (currenthullSafety > HumanAIController.HULL_SAFETY_THRESHOLD) + { + Priority -= priorityDecrease * deltaTime; + } + else + { + float dangerFactor = (100 - currenthullSafety) / 100; + Priority += dangerFactor * priorityIncrease * deltaTime; + } + Priority = MathHelper.Clamp(Priority, 0, 100); } } @@ -76,34 +94,39 @@ namespace Barotrauma protected override void Act(float deltaTime) { var currentHull = character.CurrentHull; - bool needsDivingGear = HumanAIController.NeedsDivingGear(character, currentHull, out bool needsDivingSuit); - bool needsEquipment = false; - if (needsDivingSuit) + bool dangerousPressure = currentHull == null || currentHull.LethalPressure > 0; + if (!dangerousPressure) { - needsEquipment = !HumanAIController.HasDivingSuit(character, AIObjectiveFindDivingGear.lowOxygenThreshold); - } - else if (needsDivingGear) - { - needsEquipment = !HumanAIController.HasDivingGear(character, AIObjectiveFindDivingGear.lowOxygenThreshold); - } - if (needsEquipment && divingGearObjective == null && !character.LockHands) - { - RemoveSubObjective(ref goToObjective); - TryAddSubObjective(ref divingGearObjective, - constructor: () => new AIObjectiveFindDivingGear(character, needsDivingSuit, objectiveManager), - onAbandon: () => - { - searchHullTimer = Math.Min(1, searchHullTimer); + // Don't try to seek diving gear if the pressure is dangerous. Just get out. + bool needsDivingGear = HumanAIController.NeedsDivingGear(character, currentHull, out bool needsDivingSuit); + bool needsEquipment = false; + if (needsDivingSuit) + { + needsEquipment = !HumanAIController.HasDivingSuit(character, AIObjectiveFindDivingGear.lowOxygenThreshold); + } + else if (needsDivingGear) + { + needsEquipment = !HumanAIController.HasDivingGear(character, AIObjectiveFindDivingGear.lowOxygenThreshold); + } + if (needsEquipment && divingGearObjective == null && !character.LockHands) + { + RemoveSubObjective(ref goToObjective); + TryAddSubObjective(ref divingGearObjective, + constructor: () => new AIObjectiveFindDivingGear(character, needsDivingSuit, objectiveManager), + onAbandon: () => + { + searchHullTimer = Math.Min(1, searchHullTimer); // Don't reset the diving gear objective, because it's possible that there is no diving gear -> seek a safe hull and then reset so that we can check again. }, - onCompleted: () => - { - resetPriority = true; - searchHullTimer = Math.Min(1, searchHullTimer); - RemoveSubObjective(ref divingGearObjective); - }); + onCompleted: () => + { + resetPriority = true; + searchHullTimer = Math.Min(1, searchHullTimer); + RemoveSubObjective(ref divingGearObjective); + }); + } } - else if (divingGearObjective == null || !divingGearObjective.CanBeCompleted) + if (divingGearObjective == null || !divingGearObjective.CanBeCompleted) { if (currenthullSafety < HumanAIController.HULL_SAFETY_THRESHOLD) { @@ -128,14 +151,14 @@ namespace Barotrauma { RemoveSubObjective(ref goToObjective); } - TryAddSubObjective(ref goToObjective, + TryAddSubObjective(ref goToObjective, constructor: () => new AIObjectiveGoTo(currentSafeHull, character, objectiveManager, getDivingGearIfNeeded: true) { AllowGoingOutside = HumanAIController.HasDivingSuit(character, conditionPercentage: 50) }, onCompleted: () => { - if (currenthullSafety > HumanAIController.HULL_SAFETY_THRESHOLD || + if (currenthullSafety > HumanAIController.HULL_SAFETY_THRESHOLD || HumanAIController.NeedsDivingGear(character, currentHull, out bool needsSuit) && (needsSuit ? HumanAIController.HasDivingSuit(character) : HumanAIController.HasDivingMask(character))) { resetPriority = true; @@ -233,10 +256,8 @@ namespace Barotrauma //(no need to do the expensive pathfinding if we already know we're not going to choose this hull) if (hullSafety < bestValue) { continue; } // Don't allow to go outside if not already outside. - var path = character.CurrentHull != null ? - PathSteering.PathFinder.FindPath(character.SimPosition, hull.SimPosition, nodeFilter: node => node.Waypoint.CurrentHull != null) : - PathSteering.PathFinder.FindPath(character.SimPosition, hull.SimPosition); - if (path.Unreachable && character.CurrentHull != null) + var path = PathSteering.PathFinder.FindPath(character.SimPosition, hull.SimPosition, nodeFilter: node => node.Waypoint.CurrentHull != null); + if (path.Unreachable) { HumanAIController.UnreachableHulls.Add(hull); continue; @@ -276,6 +297,7 @@ namespace Barotrauma float distanceFactor = MathHelper.Lerp(1, 0.2f, MathUtils.InverseLerp(0, MathUtils.Pow(100000, 2), distance)); hullSafety *= distanceFactor; // If the target is not inside a friendly submarine, considerably reduce the hull safety. + // Intentionally exclude wrecks from this check if (hull.Submarine.TeamID != character.TeamID && hull.Submarine.TeamID != Character.TeamType.FriendlyNPC) { hullSafety /= 10; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeak.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeak.cs index 4121ccdce..0ba7d3323 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeak.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeak.cs @@ -1,9 +1,9 @@ -using Barotrauma.Items.Components; +using Barotrauma.Extensions; +using Barotrauma.Items.Components; using FarseerPhysics; using Microsoft.Xna.Framework; using System; using System.Linq; -using Barotrauma.Extensions; namespace Barotrauma { @@ -20,15 +20,23 @@ namespace Barotrauma private AIObjectiveGoTo gotoObjective; private AIObjectiveOperateItem operateObjective; - public AIObjectiveFixLeak(Gap leak, Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base (character, objectiveManager, priorityModifier) + public bool IgnoreSeverityAndDistance { get; private set; } + + public AIObjectiveFixLeak(Gap leak, Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1, bool ignoreSeverityAndDistance = false) : base (character, objectiveManager, priorityModifier) { Leak = leak; + IgnoreSeverityAndDistance = ignoreSeverityAndDistance; } protected override bool Check() => Leak.Open <= 0 || Leak.Removed; public override float GetPriority() { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } if (Leak.Removed || Leak.Open <= 0) { Priority = 0; @@ -39,8 +47,8 @@ namespace Barotrauma float yDist = Math.Abs(character.WorldPosition.Y - Leak.WorldPosition.Y); // Vertical distance matters more than horizontal (climbing up/down is harder than moving horizontally). // If the target is close, ignore the distance factor alltogether so that we keep fixing the leaks that are nearby. - float distanceFactor = xDist < 200 && yDist < 100 ? 1 : MathHelper.Lerp(1, 0.1f, MathUtils.InverseLerp(0, 5000, xDist + yDist * 3.0f)); - float severity = AIObjectiveFixLeaks.GetLeakSeverity(Leak) / 100; + float distanceFactor = IgnoreSeverityAndDistance || xDist < 200 && yDist < 100 ? 1 : MathHelper.Lerp(1, 0.1f, MathUtils.InverseLerp(0, 5000, xDist + yDist * 3.0f)); + float severity = IgnoreSeverityAndDistance ? 1 : AIObjectiveFixLeaks.GetLeakSeverity(Leak) / 100; float max = Math.Min((AIObjectiveManager.OrderPriority - 1), 90); float devotion = CumulatedDevotion / 100; Priority = MathHelper.Lerp(0, max, MathHelper.Clamp(devotion + (severity * distanceFactor * PriorityModifier), 0, 1)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeaks.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeaks.cs index 659958632..995d71611 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeaks.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFixLeaks.cs @@ -1,7 +1,5 @@ using Microsoft.Xna.Framework; -using System; using System.Linq; -using Barotrauma.Extensions; using System.Collections.Generic; namespace Barotrauma @@ -11,8 +9,12 @@ namespace Barotrauma public override string DebugTag => "fix leaks"; public override bool ForceRun => true; public override bool KeepDivingGearOn => true; + private Hull PrioritizedHull { get; set; } - public AIObjectiveFixLeaks(Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) { } + public AIObjectiveFixLeaks(Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1, Hull prioritizedHull = null) : base(character, objectiveManager, priorityModifier) + { + PrioritizedHull = prioritizedHull; + } protected override bool Filter(Gap gap) => IsValidTarget(gap, character); @@ -35,7 +37,7 @@ namespace Barotrauma protected override float TargetEvaluation() { - int otherFixers = HumanAIController.CountCrew(c => c != HumanAIController && c.ObjectiveManager.IsCurrentObjective(), onlyBots: true); + int otherFixers = HumanAIController.CountCrew(c => c != HumanAIController && c.ObjectiveManager.IsCurrentObjective() && !c.Character.IsIncapacitated, onlyBots: true); int totalLeaks = Targets.Count(); if (totalLeaks == 0) { return 0; } int secondaryLeaks = Targets.Count(l => l.IsRoomToRoom); @@ -60,7 +62,7 @@ namespace Barotrauma protected override IEnumerable GetList() => Gap.GapList; protected override AIObjective ObjectiveConstructor(Gap gap) - => new AIObjectiveFixLeak(gap, character, objectiveManager, PriorityModifier); + => new AIObjectiveFixLeak(gap, character, objectiveManager, priorityModifier: PriorityModifier, ignoreSeverityAndDistance: gap.FlowTargetHull == PrioritizedHull); protected override void OnObjectiveCompleted(AIObjective objective, Gap target) => HumanAIController.RemoveTargets(character, target); @@ -71,7 +73,11 @@ namespace Barotrauma if (gap.ConnectedWall == null || gap.ConnectedDoor != null || gap.Open <= 0 || gap.linkedTo.All(l => l == null)) { return false; } if (gap.Submarine == null) { return false; } if (gap.Submarine.TeamID != character.TeamID) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(gap, true)) { return false; } + if (character.Submarine != null) + { + if (gap.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (!character.Submarine.IsEntityFoundOnThisSub(gap, true)) { return false; } + } return true; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs index 626c49064..3999a332d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs @@ -3,6 +3,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; +using Barotrauma.Extensions; namespace Barotrauma { @@ -20,7 +21,9 @@ namespace Barotrauma //can be either tags or identifiers private string[] itemIdentifiers; public IEnumerable Identifiers => itemIdentifiers; - private Item targetItem, moveToTarget, rootContainer; + + private Item targetItem; + private ISpatialEntity moveToTarget; private bool isDoneSeeking; public Item TargetItem => targetItem; private int currSearchIndex; @@ -29,6 +32,8 @@ namespace Barotrauma private float currItemPriority; private bool checkInventory; + public static float DefaultReach = 100; + public bool AllowToFindDivingGear { get; set; } = true; public AIObjectiveGetItem(Character character, Item targetItem, AIObjectiveManager objectiveManager, bool equip = true, float priorityModifier = 1) @@ -62,8 +67,7 @@ namespace Barotrauma if (item != null) { targetItem = item; - rootContainer = item.GetRootContainer(); - moveToTarget = rootContainer ?? item; + moveToTarget = item.GetRootInventoryOwner(); } return item != null; } @@ -86,6 +90,15 @@ namespace Barotrauma } if (!isDoneSeeking) { + bool dangerousPressure = character.CurrentHull == null || character.CurrentHull.LethalPressure > 0; + if (dangerousPressure) + { +#if DEBUG + DebugConsole.NewMessage($"{character.Name}: Seeking item aborted, because the pressure is dangerous.", Color.Yellow); +#endif + Abandon = true; + return; + } FindTargetItem(); objectiveManager.GetObjective().Wander(deltaTime); return; @@ -108,7 +121,26 @@ namespace Barotrauma Reset(); return; } - if (character.CanInteractWith(targetItem, out _, checkLinked: false)) + bool canInteract = false; + if (moveToTarget is Character c) + { + if (character == c) + { + canInteract = true; + moveToTarget = null; + } + else + { + character.SelectCharacter(c); + canInteract = character.CanInteractWith(c, maxDist: DefaultReach); + character.DeselectCharacter(); + } + } + else if (moveToTarget is Item parentItem) + { + canInteract = character.CanInteractWith(parentItem, out _, checkLinked: false); + } + if (canInteract) { var pickable = targetItem.GetComponent(); if (pickable == null) @@ -173,17 +205,17 @@ namespace Barotrauma } } } - else + else if (moveToTarget != null) { TryAddSubObjective(ref goToObjective, constructor: () => { - return new AIObjectiveGoTo(moveToTarget, character, objectiveManager, repeat: false, getDivingGearIfNeeded: AllowToFindDivingGear) + return new AIObjectiveGoTo(moveToTarget, character, objectiveManager, repeat: false, getDivingGearIfNeeded: AllowToFindDivingGear, closeEnough: DefaultReach) { // If the root container changes, the item is no longer where it was (taken by someone -> need to find another item) - abortCondition = () => targetItem == null || targetItem.GetRootContainer() != rootContainer, + abortCondition = () => targetItem == null || targetItem.GetRootInventoryOwner() != moveToTarget, DialogueIdentifier = "dialogcannotreachtarget", - TargetName = moveToTarget.Name + TargetName = (moveToTarget as MapEntity)?.Name ?? (moveToTarget as Character)?.Name ?? moveToTarget.ToString() }; }, onAbandon: () => @@ -212,23 +244,27 @@ namespace Barotrauma { currSearchIndex++; var item = Item.ItemList[currSearchIndex]; - if (item.Submarine == null) { continue; } - if (item.CurrentHull == null) { continue; } - if (item.Submarine.TeamID != character.TeamID) { continue; } + Submarine itemSub = item.Submarine ?? item.ParentInventory?.Owner?.Submarine; + if (itemSub == null) { continue; } + if (itemSub.TeamID != character.TeamID) { continue; } if (!CheckItem(item)) { continue; } if (ignoredContainerIdentifiers != null && item.Container != null) { if (ignoredContainerIdentifiers.Contains(item.ContainerIdentifier)) { continue; } } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(item, true)) { continue; } + if (character.Submarine != null) + { + if (itemSub.Info.Type != character.Submarine.Info.Type) { continue; } + if (character.Submarine.GetConnectedSubs().None(s => s == itemSub && itemSub.TeamID == character.TeamID && itemSub.Info.Type == character.Submarine.Info.Type)) { continue; } + } if (character.IsItemTakenBySomeoneElse(item)) { continue; } float itemPriority = 1; if (GetItemPriority != null) { itemPriority = GetItemPriority(item); } - Item rootContainer = item.GetRootContainer(); - Vector2 itemPos = (rootContainer ?? item).WorldPosition; + Entity rootInventoryOwner = item.GetRootInventoryOwner(); + Vector2 itemPos = (rootInventoryOwner ?? item).WorldPosition; float yDist = Math.Abs(character.WorldPosition.Y - itemPos.Y); yDist = yDist > 100 ? yDist * 5 : 0; float dist = Math.Abs(character.WorldPosition.X - itemPos.X) + yDist; @@ -239,8 +275,7 @@ namespace Barotrauma if (itemPriority < currItemPriority) { continue; } currItemPriority = itemPriority; targetItem = item; - moveToTarget = rootContainer ?? item; - this.rootContainer = rootContainer; + moveToTarget = rootInventoryOwner ?? item; } if (currSearchIndex >= Item.ItemList.Count - 1) { @@ -276,6 +311,7 @@ namespace Barotrauma private bool CheckItem(Item item) { + if (item.NonInteractable) { return false; } if (ignoredItems.Contains(item)) { return false; }; if (item.Condition < TargetCondition) { return false; } if (ItemFilter != null && !ItemFilter(item)) { return false; } @@ -288,7 +324,6 @@ namespace Barotrauma RemoveSubObjective(ref goToObjective); targetItem = null; moveToTarget = null; - rootContainer = null; isDoneSeeking = false; currSearchIndex = 0; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs index 844343053..43319c633 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -44,6 +44,9 @@ namespace Barotrauma public bool AllowGoingOutside { get; set; } public override bool AbandonWhenCannotCompleteSubjectives => !repeat; + + public override bool AllowOutsideSubmarine => AllowGoingOutside; + public string DialogueIdentifier { get; set; } public string TargetName { get; set; } @@ -63,31 +66,42 @@ namespace Barotrauma { Priority = 0; } - return objectiveManager.CurrentOrder == this ? AIObjectiveManager.OrderPriority : Priority; + else + { + Priority = objectiveManager.CurrentOrder == this ? AIObjectiveManager.OrderPriority : 10; + } + return Priority; } - public AIObjectiveGoTo(ISpatialEntity target, Character character, AIObjectiveManager objectiveManager, bool repeat = false, bool getDivingGearIfNeeded = true, float priorityModifier = 1, float closeEnough = 0) - : base (character, objectiveManager, priorityModifier) + public AIObjectiveGoTo(ISpatialEntity target, Character character, AIObjectiveManager objectiveManager, bool repeat = false, bool getDivingGearIfNeeded = true, float priorityModifier = 1, float closeEnough = 0) + : base(character, objectiveManager, priorityModifier) { this.Target = target; this.repeat = repeat; waitUntilPathUnreachable = 3.0f; this.getDivingGearIfNeeded = getDivingGearIfNeeded; - CloseEnough = closeEnough; if (Target is Item i) { CloseEnough = Math.Max(CloseEnough, i.InteractDistance + Math.Max(i.Rect.Width, i.Rect.Height) / 2); } + else if (Target is Character) + { + CloseEnough = Math.Max(closeEnough, AIObjectiveGetItem.DefaultReach); + } + else + { + CloseEnough = closeEnough; + } } private void SpeakCannotReach() { #if DEBUG - DebugConsole.NewMessage($"{character.Name}: Cannot reach the target: {Target.ToString()}", Color.Yellow); + DebugConsole.NewMessage($"{character.Name}: Cannot reach the target: {Target}", Color.Yellow); #endif if (objectiveManager.CurrentOrder != null && DialogueIdentifier != null) { - string msg = TargetName == null ? TextManager.Get(DialogueIdentifier, true) : TextManager.GetWithVariable(DialogueIdentifier, "[name]", TargetName, true); + string msg = TargetName == null ? TextManager.Get(DialogueIdentifier, true) : TextManager.GetWithVariable(DialogueIdentifier, "[name]", TargetName, formatCapitals: !(Target is Character)); if (msg != null) { character.Speak(msg, identifier: DialogueIdentifier, minDurationBetweenSimilar: 20.0f); @@ -200,16 +214,25 @@ namespace Barotrauma } if (needsEquipment) { - TryAddSubObjective(ref findDivingGear, () => new AIObjectiveFindDivingGear(character, needsDivingSuit, objectiveManager), + TryAddSubObjective(ref findDivingGear, () => new AIObjectiveFindDivingGear(character, needsDivingSuit, objectiveManager), onAbandon: () => Abandon = true, onCompleted: () => RemoveSubObjective(ref findDivingGear)); return; } } - if (repeat && IsCloseEnough) + if (repeat) { - OnCompleted(); - return; + if (IsCloseEnough) + { + if (requiredCondition == null || requiredCondition()) + { + if (character.CanSeeTarget(Target)) + { + OnCompleted(); + return; + } + } + } } if (SteeringManager == PathSteering) { @@ -237,7 +260,7 @@ namespace Barotrauma } } - private Hull GetTargetHull() + public Hull GetTargetHull() { if (Target is Hull h) { @@ -277,13 +300,7 @@ namespace Barotrauma //otherwise characters can let go of the ladders too soon once they're close enough to the target if (PathSteering.CurrentPath.NextNode != null) { return false; } } - - bool closeEnough = Vector2.DistanceSquared(Target.WorldPosition, character.WorldPosition) < CloseEnough * CloseEnough; - if (closeEnough) - { - closeEnough = !(Target is Character) || Target is Character c && c.CurrentHull == character.CurrentHull; - } - return closeEnough; + return Vector2.DistanceSquared(Target.WorldPosition, character.WorldPosition) < CloseEnough * CloseEnough; } } @@ -319,7 +336,9 @@ namespace Barotrauma } else if (Target is Character targetCharacter) { - if (character.CanInteractWith(targetCharacter, CloseEnough)) { IsCompleted = true; } + character.SelectCharacter(targetCharacter); + if (character.CanInteractWith(targetCharacter, skipDistanceCheck: true)) { IsCompleted = true; } + character.DeselectCharacter(); } else { @@ -331,6 +350,16 @@ namespace Barotrauma return IsCompleted; } + protected override void OnAbandon() + { + StopMovement(); + if (SteeringManager == PathSteering) + { + PathSteering.ResetPath(); + } + base.OnAbandon(); + } + private void StopMovement() { character.AIController.SteeringManager.Reset(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveIdle.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveIdle.cs index 0d9a61f81..ba35ef7a1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveIdle.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveIdle.cs @@ -3,7 +3,6 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; -using Barotrauma.Extensions; namespace Barotrauma { @@ -11,6 +10,7 @@ namespace Barotrauma { public override string DebugTag => "idle"; public override bool UnequipItems => true; + public override bool AllowOutsideSubmarine => true; private readonly float newTargetIntervalMin = 10; private readonly float newTargetIntervalMax = 20; @@ -34,41 +34,43 @@ namespace Barotrauma { standStillTimer = Rand.Range(-10.0f, 10.0f); walkDuration = Rand.Range(0.0f, 10.0f); + CalculatePriority(); } protected override bool Check() => false; public override bool CanBeCompleted => true; - public override bool IsLoop { get => true; set => throw new System.Exception("Trying to set the value for IsLoop from: " + System.Environment.StackTrace); } + public override bool IsLoop { get => true; set => throw new Exception("Trying to set the value for IsLoop from: " + Environment.StackTrace); } private float randomTimer; private float randomUpdateInterval = 5; public float Random { get; private set; } - public void CalculatePriority() + public void CalculatePriority(float max = 0) { - Random = Rand.Range(0.5f, 1.5f); - randomTimer = randomUpdateInterval; - float max = Math.Min(Math.Min(AIObjectiveManager.RunPriority, AIObjectiveManager.OrderPriority) - 1, 100); - float initiative = character.GetSkillLevel("initiative"); - Priority = MathHelper.Lerp(1, max, MathUtils.InverseLerp(100, 0, initiative * Random)); + //Random = Rand.Range(0.5f, 1.5f); + //randomTimer = randomUpdateInterval; + //max = max > 0 ? max : Math.Min(Math.Min(AIObjectiveManager.RunPriority, AIObjectiveManager.OrderPriority) - 1, 100); + //float initiative = character.GetSkillLevel("initiative"); + //Priority = MathHelper.Lerp(1, max, MathUtils.InverseLerp(100, 0, initiative * Random)); + Priority = 1; } public override float GetPriority() => Priority; public override void Update(float deltaTime) { - if (objectiveManager.CurrentObjective == this) - { - if (randomTimer > 0) - { - randomTimer -= deltaTime; - } - else - { - CalculatePriority(); - } - } + //if (objectiveManager.CurrentObjective == this) + //{ + // if (randomTimer > 0) + // { + // randomTimer -= deltaTime; + // } + // else + // { + // CalculatePriority(); + // } + //} } protected override void Act(float deltaTime) @@ -128,7 +130,7 @@ namespace Barotrauma //choose a random available hull currentTarget = ToolBox.SelectWeightedRandom(targetHulls, hullWeights, Rand.RandSync.Unsynced); bool isCurrentHullAllowed = !IsForbidden(character.CurrentHull); - var path = PathSteering.PathFinder.FindPath(character.SimPosition, currentTarget.SimPosition, nodeFilter: node => + var path = PathSteering.PathFinder.FindPath(character.SimPosition, currentTarget.SimPosition, errorMsgStr: $"AIObjectiveIdle {character.DisplayName}", nodeFilter: node => { if (node.Waypoint.CurrentHull == null) { return false; } // Check that there is no unsafe or forbidden hulls on the way to the target @@ -231,9 +233,11 @@ namespace Barotrauma { if (HumanAIController.UnsafeHulls.Contains(hull)) { continue; } if (hull.Submarine == null) { continue; } - if (hull.Submarine.TeamID != character.TeamID) { continue; } - // If the character is inside, only take connected hulls into account. - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(hull, true)) { continue; } + if (character.Submarine == null) { break; } + if (hull.Submarine.TeamID != character.Submarine.TeamID) { continue; } + if (hull.Submarine.Info.Type != character.Submarine.Info.Type) { continue; } + // If the character is inside, only take connected subs into account. + if (!character.Submarine.IsEntityFoundOnThisSub(hull, true)) { continue; } if (IsForbidden(hull)) { continue; } // Ignore hulls that are too low to stand inside if (character.AnimController is HumanoidAnimController animController) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveLoop.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveLoop.cs index 8c2a4b340..7d51adb9f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveLoop.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveLoop.cs @@ -47,7 +47,7 @@ namespace Barotrauma public override bool AllowSubObjectiveSorting => true; public virtual bool InverseTargetEvaluation => false; - public override bool IsLoop { get => true; set => throw new System.Exception("Trying to set the value for IsLoop from: " + System.Environment.StackTrace); } + public override bool IsLoop { get => true; set => throw new Exception("Trying to set the value for IsLoop from: " + System.Environment.StackTrace); } public override void Update(float deltaTime) { @@ -108,6 +108,11 @@ namespace Barotrauma public override float GetPriority() { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } if (character.LockHands || character.Submarine == null || Targets.None()) { Priority = 0; @@ -199,7 +204,7 @@ namespace Barotrauma { Objectives.Remove(target); ignoreList.Add(target); - targetUpdateTimer = 0; + targetUpdateTimer = Math.Min(0.1f, targetUpdateTimer); }; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs index abe0f4052..698b777d7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs @@ -1,9 +1,10 @@ -using Barotrauma.Items.Components; +using Barotrauma.Extensions; +using Barotrauma.Items.Components; +using Barotrauma.Networking; +using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; -using Barotrauma.Extensions; -using Microsoft.Xna.Framework; namespace Barotrauma { @@ -13,8 +14,11 @@ namespace Barotrauma public const float OrderPriority = 70; public const float RunPriority = 50; // Constantly increases the priority of the selected objective, unless overridden - public const float baseDevotion = 3; + public const float baseDevotion = 5; + /// + /// Excluding the current order. + /// public List Objectives { get; private set; } = new List(); private readonly Character character; @@ -87,8 +91,25 @@ namespace Barotrauma public Dictionary DelayedObjectives { get; private set; } = new Dictionary(); + private void ClearIgnored() + { + if (character.AIController is HumanAIController humanAi) + { + humanAi.UnreachableHulls.Clear(); + humanAi.IgnoredItems.Clear(); + } + } + public void CreateAutonomousObjectives() { + if (character.IsDead) + { +#if DEBUG + DebugConsole.ThrowError("Attempted to create autonomous orders for a dead character"); +#else + return; +#endif + } foreach (var delayedObjective in DelayedObjectives) { CoroutineManager.StopCoroutines(delayedObjective.Value); @@ -98,24 +119,16 @@ namespace Barotrauma AddObjective(new AIObjectiveFindSafety(character, this)); AddObjective(new AIObjectiveIdle(character, this)); int objectiveCount = Objectives.Count; - foreach (var automaticOrder in character.Info.Job.Prefab.AutomaticOrders) + foreach (var autonomousObjective in character.Info.Job.Prefab.AutonomousObjective) { - var orderPrefab = Order.GetPrefab(automaticOrder.identifier); - if (orderPrefab == null) { throw new Exception($"Could not find a matching prefab by the identifier: '{automaticOrder.identifier}'"); } - // TODO: Similar code is used in CrewManager:815-> DRY - var matchingItems = orderPrefab.ItemIdentifiers.Any() ? - Item.ItemList.FindAll(it => orderPrefab.ItemIdentifiers.Contains(it.Prefab.Identifier) || it.HasTag(orderPrefab.ItemIdentifiers)) : - Item.ItemList.FindAll(it => it.Components.Any(ic => ic.GetType() == orderPrefab.ItemComponentType)); - matchingItems.RemoveAll(it => it.Submarine != character.Submarine); - var item = matchingItems.GetRandom(); - var order = new Order( - orderPrefab, - item ?? character.CurrentHull as Entity, - item?.Components.FirstOrDefault(ic => ic.GetType() == orderPrefab.ItemComponentType), - orderGiver: character); + var orderPrefab = Order.GetPrefab(autonomousObjective.identifier); + if (orderPrefab == null) { throw new Exception($"Could not find a matching prefab by the identifier: '{autonomousObjective.identifier}'"); } + var item = orderPrefab.MustSetTarget ? orderPrefab.GetMatchingItems(character.Submarine, false)?.GetRandom() : null; + var order = new Order(orderPrefab, item ?? character.CurrentHull as Entity, + item?.Components.FirstOrDefault(ic => ic.GetType() == orderPrefab.ItemComponentType), orderGiver: character); if (order == null) { continue; } - var objective = CreateObjective(order, automaticOrder.option, character, automaticOrder.priorityModifier); - if (objective != null) + var objective = CreateObjective(order, autonomousObjective.option, character, isAutonomous: true, autonomousObjective.priorityModifier); + if (objective != null && objective.CanBeCompleted) { AddObjective(objective, delay: Rand.Value() / 2); objectiveCount++; @@ -167,7 +180,7 @@ namespace Barotrauma { previousObjective?.OnDeselected(); CurrentObjective?.OnSelected(); - GetObjective().CalculatePriority(); + GetObjective().CalculatePriority(Math.Max(CurrentObjective.Priority - 10, 0)); } return CurrentObjective; } @@ -179,7 +192,27 @@ namespace Barotrauma public void UpdateObjectives(float deltaTime) { - CurrentOrder?.Update(deltaTime); + if (CurrentOrder != null) + { + if (CurrentOrder.IsCompleted) + { +#if DEBUG + DebugConsole.NewMessage($"{character.Name}: Removing order {CurrentOrder.DebugTag}, because it is completed.", Color.LightGreen); +#endif + CurrentOrder = null; + } + else if (!CurrentOrder.CanBeCompleted) + { +#if DEBUG + DebugConsole.NewMessage($"{character.Name}: Removing order {CurrentOrder.DebugTag}, because it cannot be completed.", Color.Red); +#endif + CurrentOrder = null; + } + else + { + CurrentOrder.Update(deltaTime); + } + } if (WaitTimer > 0) { WaitTimer -= deltaTime; @@ -202,7 +235,7 @@ namespace Barotrauma #endif Objectives.Remove(objective); } - else if (objective != CurrentOrder) + else { objective.Update(deltaTime); } @@ -212,14 +245,15 @@ namespace Barotrauma public void SortObjectives() { + CurrentOrder?.GetPriority(); + Objectives.ForEach(o => o.GetPriority()); if (Objectives.Any()) { - Objectives.ForEach(o => o.GetPriority()); Objectives.Sort((x, y) => y.Priority.CompareTo(x.Priority)); } GetCurrentObjective()?.SortSubObjectives(); } - + public void DoCurrentObjective(float deltaTime) { if (WaitTimer <= 0) @@ -231,7 +265,7 @@ namespace Barotrauma character.AIController.SteeringManager.Reset(); } } - + public void SetOrder(AIObjective objective) { CurrentOrder = objective; @@ -239,7 +273,16 @@ namespace Barotrauma public void SetOrder(Order order, string option, Character orderGiver) { - CurrentOrder = CreateObjective(order, option, orderGiver); + if (character.IsDead) + { +#if DEBUG + DebugConsole.ThrowError("Attempted to set an order for a dead character"); +#else + return; +#endif + } + ClearIgnored(); + CurrentOrder = CreateObjective(order, option, orderGiver, isAutonomous: false); if (CurrentOrder == null) { // Recreate objectives, because some of them may be removed, if impossible to complete (e.g. due to path finding) @@ -251,7 +294,7 @@ namespace Barotrauma } } - public AIObjective CreateObjective(Order order, string option, Character orderGiver, float priorityModifier = 1) + public AIObjective CreateObjective(Order order, string option, Character orderGiver, bool isAutonomous, float priorityModifier = 1) { if (order == null) { return null; } AIObjective newObjective; @@ -270,13 +313,13 @@ namespace Barotrauma }; break; case "wait": - newObjective = new AIObjectiveGoTo(character, character, this, repeat: true, priorityModifier: priorityModifier) + newObjective = new AIObjectiveGoTo(order.TargetEntity ?? character, character, this, repeat: true, priorityModifier: priorityModifier) { AllowGoingOutside = character.CurrentHull == null }; break; case "fixleaks": - newObjective = new AIObjectiveFixLeaks(character, this, priorityModifier); + newObjective = new AIObjectiveFixLeaks(character, this, priorityModifier: priorityModifier, prioritizedHull: order.TargetEntity as Hull); break; case "chargebatteries": newObjective = new AIObjectiveChargeBatteries(character, this, option, priorityModifier); @@ -285,13 +328,31 @@ namespace Barotrauma newObjective = new AIObjectiveRescueAll(character, this, priorityModifier); break; case "repairsystems": - newObjective = new AIObjectiveRepairItems(character, this, priorityModifier) + case "repairmechanical": + case "repairelectrical": + newObjective = new AIObjectiveRepairItems(character, this, priorityModifier: priorityModifier, prioritizedItem: order.TargetEntity as Item) { - RequireAdequateSkills = option == "jobspecific" + RelevantSkill = order.AppropriateSkill, + RequireAdequateSkills = isAutonomous }; break; case "pumpwater": - newObjective = new AIObjectivePumpWater(character, this, option, priorityModifier: priorityModifier); + if (order.TargetItemComponent is Pump targetPump) + { + if (order.TargetItemComponent.Item.NonInteractable) { return null; } + newObjective = new AIObjectiveOperateItem(targetPump, character, this, option, false, priorityModifier: priorityModifier) + { + IsLoop = true, + Override = orderGiver != null && orderGiver.IsPlayer + }; + // ItemComponent.AIOperate() returns false by default -> We'd have to set IsLoop = false and implement a custom override of AIOperate for the Pump.cs, + // if we want that the bot just switches the pump on/off and continues doing something else. + // If we want that the bot does the objective and then forgets about it, I think we could do the same plus dismiss when the bot is done. + } + else + { + newObjective = new AIObjectivePumpWater(character, this, option, priorityModifier: priorityModifier); + } break; case "extinguishfires": newObjective = new AIObjectiveExtinguishFires(character, this, priorityModifier); @@ -301,9 +362,11 @@ namespace Barotrauma break; case "steer": var steering = (order?.TargetEntity as Item)?.GetComponent(); - if (steering != null) steering.PosToMaintain = steering.Item.Submarine?.WorldPosition; + if (steering != null) { steering.PosToMaintain = steering.Item.Submarine?.WorldPosition; } if (order.TargetItemComponent == null) { return null; } - newObjective = new AIObjectiveOperateItem(order.TargetItemComponent, character, this, option, requireEquip: false, useController: order.UseController, priorityModifier: priorityModifier) + if (order.TargetItemComponent.Item.NonInteractable) { return null; } + newObjective = new AIObjectiveOperateItem(order.TargetItemComponent, character, this, option, + requireEquip: false, useController: order.UseController, controller: order.ConnectedController, priorityModifier: priorityModifier) { IsLoop = true, // Don't override unless it's an order by a player @@ -312,17 +375,32 @@ namespace Barotrauma break; default: if (order.TargetItemComponent == null) { return null; } - newObjective = new AIObjectiveOperateItem(order.TargetItemComponent, character, this, option, requireEquip: false, useController: order.UseController, priorityModifier: priorityModifier) + if (order.TargetItemComponent.Item.NonInteractable) { return null; } + newObjective = new AIObjectiveOperateItem(order.TargetItemComponent, character, this, option, + requireEquip: false, useController: order.UseController, controller: order.ConnectedController, priorityModifier: priorityModifier) { - IsLoop = true, + IsLoop = option != "shutdown", // Don't override unless it's an order by a player Override = orderGiver != null && orderGiver.IsPlayer }; + if (newObjective.Abandon) { return null; } break; } return newObjective; } + private void DismissSelf() + { +#if CLIENT + if (GameMain.GameSession?.CrewManager != null && GameMain.GameSession.CrewManager.IsSinglePlayer) + { + GameMain.GameSession?.CrewManager?.SetCharacterOrder(character, Order.GetPrefab("dismissed"), null, character); + } +#else + GameMain.Server?.SendOrderChatMessage(new OrderChatMessage(Order.GetPrefab("dismissed"), null, null, character, character)); +#endif + } + private bool IsAllowedToWait() { if (CurrentOrder != null) { return false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs index 62dae935b..bd00d7734 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs @@ -3,7 +3,6 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; -using Barotrauma.Extensions; namespace Barotrauma { @@ -32,6 +31,11 @@ namespace Barotrauma public override float GetPriority() { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } if (component.Item.ConditionPercentage <= 0) { Priority = 0; @@ -42,38 +46,74 @@ namespace Barotrauma { Priority = AIObjectiveManager.OrderPriority; } - - if (component.Item.CurrentHull == null || component.Item.CurrentHull.FireSources.Any() || HumanAIController.IsItemOperatedByAnother(GetTarget(), out _)) + ItemComponent target = GetTarget(); + Item targetItem = target?.Item; + if (targetItem == null) + { +#if DEBUG + DebugConsole.ThrowError("Item or component of AI Objective Operate item wass null. This shouldn't happen."); +#endif + Abandon = true; + Priority = 0; + return Priority; + } + switch (Option) + { + case "shutdown": + var powered = component?.Item.GetComponent(); + if (powered != null && powered.IsActive) + { + Priority = 0; + return Priority; + } + break; + case "powerup": + // Check that we don't already have another order that is targeting the same item. + if (objectiveManager.CurrentOrder is AIObjectiveOperateItem operateOrder && operateOrder != this && operateOrder.GetTarget() == target) + { + Priority = 0; + return Priority; + } + break; + } + if (targetItem.CurrentHull == null || targetItem.CurrentHull.FireSources.Any() || HumanAIController.IsItemOperatedByAnother(target, out _)) { Priority = 0; } - else if (Character.CharacterList.Any(c => c.CurrentHull == component.Item.CurrentHull && !HumanAIController.IsFriendly(c) && HumanAIController.IsActive(c))) + else if (Character.CharacterList.Any(c => c.CurrentHull == targetItem.CurrentHull && !HumanAIController.IsFriendly(c) && HumanAIController.IsActive(c))) { Priority = 0; } else { float value = CumulatedDevotion + (AIObjectiveManager.OrderPriority * PriorityModifier); - float max = MathHelper.Min((AIObjectiveManager.OrderPriority - 1), 90); + float max = objectiveManager.CurrentOrder == this ? MathHelper.Min(AIObjectiveManager.OrderPriority - 1, 90) : AIObjectiveManager.RunPriority - 1; Priority = MathHelper.Clamp(value, 0, max); } } return Priority; } - public AIObjectiveOperateItem(ItemComponent item, Character character, AIObjectiveManager objectiveManager, string option, bool requireEquip, Entity operateTarget = null, bool useController = false, float priorityModifier = 1) - : base (character, objectiveManager, priorityModifier, option) + public AIObjectiveOperateItem(ItemComponent item, Character character, AIObjectiveManager objectiveManager, string option, bool requireEquip, + Entity operateTarget = null, bool useController = false, ItemComponent controller = null, float priorityModifier = 1) + : base(character, objectiveManager, priorityModifier, option) { - this.component = item ?? throw new System.ArgumentNullException("item", "Attempted to create an AIObjectiveOperateItem with a null target."); + component = item ?? throw new ArgumentNullException("item", "Attempted to create an AIObjectiveOperateItem with a null target."); this.requireEquip = requireEquip; this.operateTarget = operateTarget; this.useController = useController; - if (useController) + if (useController) { this.controller = controller ?? component?.Item?.FindController(); } + var target = GetTarget(); + if (target == null) { - //try finding the controller with the simpler non-recursive method first - controller = - component.Item.GetConnectedComponents().FirstOrDefault() ?? - component.Item.GetConnectedComponents(recursive: true).FirstOrDefault(); +#if DEBUG + throw new Exception("target null"); +#endif + Abandon = true; + } + else if (target.Item.NonInteractable) + { + Abandon = true; } } @@ -117,7 +157,7 @@ namespace Barotrauma { DialogueIdentifier = "dialogcannotreachtarget", TargetName = target.Item.Name - }, + }, onAbandon: () => Abandon = true, onCompleted: () => RemoveSubObjective(ref goToObjective)); } @@ -132,7 +172,7 @@ namespace Barotrauma } else if (!character.Inventory.Items.Contains(component.Item)) { - TryAddSubObjective(ref getItemObjective, () => new AIObjectiveGetItem(character, component.Item, objectiveManager, equip: true), + TryAddSubObjective(ref getItemObjective, () => new AIObjectiveGetItem(character, component.Item, objectiveManager, equip: true), onAbandon: () => Abandon = true, onCompleted: () => RemoveSubObjective(ref getItemObjective)); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePumpWater.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePumpWater.cs index 0921dc1ff..a7fe83d4b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePumpWater.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePumpWater.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; -using Barotrauma.Extensions; namespace Barotrauma { @@ -27,13 +26,18 @@ namespace Barotrauma protected override bool Filter(Pump pump) { if (pump == null) { return false; } + if (pump.Item.NonInteractable) { return false; } if (pump.Item.HasTag("ballast")) { return false; } if (pump.Item.Submarine == null) { return false; } if (pump.Item.CurrentHull == null) { return false; } if (pump.Item.Submarine.TeamID != character.TeamID) { return false; } if (pump.Item.ConditionPercentage <= 0) { return false; } if (pump.Item.CurrentHull.FireSources.Count > 0) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(pump.Item, true)) { return false; } + if (character.Submarine != null) + { + if (pump.Item.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (!character.Submarine.IsEntityFoundOnThisSub(pump.Item, true)) { return false; } + } if (Character.CharacterList.Any(c => c.CurrentHull == pump.Item.CurrentHull && !HumanAIController.IsFriendly(c) && HumanAIController.IsActive(c))) { return false; } if (IsReady(pump)) { return false; } return true; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs index 1e5971576..3011e173e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs @@ -3,7 +3,6 @@ using Microsoft.Xna.Framework; using System; using System.Linq; using Barotrauma.Extensions; -using FarseerPhysics; namespace Barotrauma { @@ -20,14 +19,22 @@ namespace Barotrauma private RepairTool repairTool; private bool IsRepairing => character.SelectedConstruction == Item && Item.GetComponent()?.CurrentFixer == character; + private readonly bool isPriority; - public AIObjectiveRepairItem(Character character, Item item, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) + public AIObjectiveRepairItem(Character character, Item item, AIObjectiveManager objectiveManager, float priorityModifier = 1, bool isPriority = false) + : base(character, objectiveManager, priorityModifier) { Item = item; + this.isPriority = isPriority; } public override float GetPriority() { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } // TODO: priority list? // Ignore items that are being repaired by someone else. if (Item.Repairables.Any(r => r.CurrentFixer != null && r.CurrentFixer != character)) @@ -36,20 +43,19 @@ namespace Barotrauma } else { - float yDist = Math.Abs(character.WorldPosition.Y - Item.WorldPosition.Y); - yDist = yDist > 100 ? yDist * 5 : 0; - float dist = Math.Abs(character.WorldPosition.X - Item.WorldPosition.X) + yDist; - float distanceFactor = MathHelper.Lerp(1, 0.25f, MathUtils.InverseLerp(0, 5000, dist)); - if (Item.CurrentHull == character.CurrentHull) + float distanceFactor = 1; + if (!isPriority && Item.CurrentHull != character.CurrentHull) { - distanceFactor = 1; + float yDist = Math.Abs(character.WorldPosition.Y - Item.WorldPosition.Y); + yDist = yDist > 100 ? yDist * 5 : 0; + float dist = Math.Abs(character.WorldPosition.X - Item.WorldPosition.X) + yDist; + distanceFactor = MathHelper.Lerp(1, 0.25f, MathUtils.InverseLerp(0, 5000, dist)); } - float damagePriority = MathHelper.Lerp(1, 0, Item.Condition / Item.MaxCondition); - float successFactor = MathHelper.Lerp(0, 1, Item.Repairables.Average(r => r.DegreeOfSuccess(character))); + float severity = isPriority ? 1 : AIObjectiveRepairItems.GetTargetPriority(Item, character); float isSelected = IsRepairing ? 50 : 0; float devotion = (CumulatedDevotion + isSelected) / 100; float max = MathHelper.Min(AIObjectiveManager.OrderPriority - 1, 90); - Priority = MathHelper.Lerp(0, max, MathHelper.Clamp(devotion + (damagePriority * distanceFactor * successFactor * PriorityModifier), 0, 1)); + Priority = MathHelper.Lerp(0, max, MathHelper.Clamp(devotion + (severity * distanceFactor * PriorityModifier), 0, 1)); } return Priority; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs index f6df24810..e9287f01f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Barotrauma.Items.Components; using Barotrauma.Extensions; +using Microsoft.Xna.Framework; namespace Barotrauma { @@ -15,12 +16,23 @@ namespace Barotrauma /// public bool RequireAdequateSkills; + /// + /// If set, only fix items where required skill matches this. + /// + public string RelevantSkill; + + private readonly Item prioritizedItem; + public override bool AllowMultipleInstances => true; public override bool IsDuplicate(T otherObjective) => (otherObjective as AIObjective) is AIObjectiveRepairItems repairObjective && repairObjective.RequireAdequateSkills == RequireAdequateSkills; - public AIObjectiveRepairItems(Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) { } + public AIObjectiveRepairItems(Character character, AIObjectiveManager objectiveManager, float priorityModifier = 1, Item prioritizedItem = null) + : base(character, objectiveManager, priorityModifier) + { + this.prioritizedItem = prioritizedItem; + } protected override void CreateObjectives() { @@ -45,7 +57,7 @@ namespace Barotrauma { Objectives.Remove(item); ignoreList.Add(item); - targetUpdateTimer = 0; + targetUpdateTimer = Math.Min(0.1f, targetUpdateTimer); }; } break; @@ -67,9 +79,9 @@ namespace Barotrauma if (item.Repairables.All(r => condition >= r.AIRepairThreshold)) { return false; } } } - if (RequireAdequateSkills) + if (!string.IsNullOrWhiteSpace(RelevantSkill)) { - if (item.Repairables.Any(r => !r.HasRequiredSkills(character))) { return false; } + if (item.Repairables.None(r => r.requiredSkills.Any(s => s.Identifier.Equals(RelevantSkill, StringComparison.OrdinalIgnoreCase)))) { return false; } } return true; } @@ -81,7 +93,7 @@ namespace Barotrauma // Don't stop fixing until done return 100; } - int otherFixers = HumanAIController.CountCrew(c => c != HumanAIController && c.ObjectiveManager.IsCurrentObjective(), onlyBots: true); + int otherFixers = HumanAIController.CountCrew(c => c != HumanAIController && c.ObjectiveManager.IsCurrentObjective() && !c.Character.IsIncapacitated, onlyBots: true); int items = Targets.Count; bool anyFixers = otherFixers > 0; float ratio = anyFixers ? items / (float)otherFixers : 1; @@ -96,14 +108,28 @@ namespace Barotrauma // Enough fixers return 0; } - return Targets.Sum(t => 100 - t.ConditionPercentage) * ratio; + if (RequireAdequateSkills) + { + return Targets.Sum(t => GetTargetPriority(t, character)) * ratio; + } + else + { + return Targets.Sum(t => 100 - t.ConditionPercentage) * ratio; + } } } + public static float GetTargetPriority(Item item, Character character) + { + float damagePriority = MathHelper.Lerp(1, 0, item.Condition / item.MaxCondition); + float successFactor = MathHelper.Lerp(0, 1, item.Repairables.Average(r => r.DegreeOfSuccess(character))); + return MathHelper.Lerp(0, 100, MathHelper.Clamp(damagePriority * successFactor, 0, 1)); + } + protected override IEnumerable GetList() => Item.ItemList; protected override AIObjective ObjectiveConstructor(Item item) - => new AIObjectiveRepairItem(character, item, objectiveManager, PriorityModifier); + => new AIObjectiveRepairItem(character, item, objectiveManager, priorityModifier: PriorityModifier, isPriority: item == prioritizedItem); protected override void OnObjectiveCompleted(AIObjective objective, Item target) => HumanAIController.RemoveTargets(character, target); @@ -111,12 +137,17 @@ namespace Barotrauma public static bool IsValidTarget(Item item, Character character) { if (item == null) { return false; } + if (item.NonInteractable) { return false; } if (item.IsFullCondition) { return false; } if (item.CurrentHull == null) { return false; } if (item.Submarine == null) { return false; } if (item.Submarine.TeamID != character.TeamID) { return false; } if (item.Repairables.None()) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(item, true)) { return false; } + if (character.Submarine != null) + { + if (item.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (!character.Submarine.IsEntityFoundOnThisSub(item, true)) { return false; } + } return true; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs index a44ce0ed8..87f72d5ce 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs @@ -38,7 +38,19 @@ namespace Barotrauma } this.targetCharacter = targetCharacter; } - + + protected override void OnAbandon() + { + character.SelectedCharacter = null; + base.OnAbandon(); + } + + protected override void OnCompleted() + { + character.SelectedCharacter = null; + base.OnCompleted(); + } + protected override void Act(float deltaTime) { if (character.LockHands || targetCharacter == null || targetCharacter.CurrentHull == null || targetCharacter.Removed || targetCharacter.IsDead) @@ -46,16 +58,13 @@ namespace Barotrauma Abandon = true; return; } - if (targetCharacter.SelectedBy != null && targetCharacter.SelectedBy != character) + var otherRescuer = targetCharacter.SelectedBy; + if (otherRescuer != null && otherRescuer != character) { - var otherCharacter = character.SelectedBy; - if (otherCharacter != null) - { - // Someone else is rescuing/holding the target. - Abandon = otherCharacter.IsPlayer || character.GetSkillLevel("medical") < otherCharacter.GetSkillLevel("medical"); - } + // Someone else is rescuing/holding the target. + Abandon = otherRescuer.IsPlayer || character.GetSkillLevel("medical") < otherRescuer.GetSkillLevel("medical"); + return; } - if (targetCharacter != character) { // Incapacitated target is not in a safe place -> Move to a safe place first @@ -63,9 +72,12 @@ namespace Barotrauma { if (character.SelectedCharacter != targetCharacter) { - character.Speak(TextManager.GetWithVariables("DialogFoundUnconsciousTarget", new string[2] { "[targetname]", "[roomname]" }, - new string[2] { targetCharacter.Name, targetCharacter.CurrentHull.DisplayName }, new bool[2] { false, true }), - null, 1.0f, "foundunconscioustarget" + targetCharacter.Name, 60.0f); + if (targetCharacter.CurrentHull.DisplayName != null) + { + character.Speak(TextManager.GetWithVariables("DialogFoundUnconsciousTarget", new string[2] { "[targetname]", "[roomname]" }, + new string[2] { targetCharacter.Name, targetCharacter.CurrentHull.DisplayName }, new bool[2] { false, true }), + null, 1.0f, "foundunconscioustarget" + targetCharacter.Name, 60.0f); + } // Go to the target and select it if (!character.CanInteractWith(targetCharacter)) @@ -142,10 +154,13 @@ namespace Barotrauma { // We can start applying treatment if (character != targetCharacter && character.SelectedCharacter != targetCharacter) - { - character.Speak(TextManager.GetWithVariables("DialogFoundWoundedTarget", new string[2] { "[targetname]", "[roomname]" }, - new string[2] { targetCharacter.Name, targetCharacter.CurrentHull.DisplayName }, new bool[2] { false, true }), - null, 1.0f, "foundwoundedtarget" + targetCharacter.Name, 60.0f); + { + if (targetCharacter.CurrentHull.DisplayName != null) + { + character.Speak(TextManager.GetWithVariables("DialogFoundWoundedTarget", new string[2] { "[targetname]", "[roomname]" }, + new string[2] { targetCharacter.Name, targetCharacter.CurrentHull.DisplayName }, new bool[2] { false, true }), + null, 1.0f, "foundwoundedtarget" + targetCharacter.Name, 60.0f); + } character.SelectCharacter(targetCharacter); } @@ -155,13 +170,23 @@ namespace Barotrauma private readonly List suitableItemIdentifiers = new List(); private readonly List itemNameList = new List(); - private Dictionary currentTreatmentSuitabilities = new Dictionary(); + private readonly Dictionary currentTreatmentSuitabilities = new Dictionary(); private void GiveTreatment(float deltaTime) { + if (targetCharacter == null) + { + string errorMsg = $"{character.Name}: Attempted to update a Rescue objective with no target!"; + DebugConsole.ThrowError(errorMsg); + Abandon = true; + return; + } + + SteeringManager?.Reset(); + if (!targetCharacter.IsPlayer) { // If the target is a bot, don't let it move - targetCharacter.AIController?.SteeringManager.Reset(); + targetCharacter.AIController?.SteeringManager?.Reset(); } if (treatmentTimer > 0.0f) { @@ -176,6 +201,8 @@ namespace Barotrauma //check if we already have a suitable treatment for any of the afflictions foreach (Affliction affliction in GetSortedAfflictions(targetCharacter)) { + if (affliction == null) { throw new Exception("Affliction was null"); } + if (affliction.Prefab == null) { throw new Exception("Affliction prefab was null"); } foreach (KeyValuePair treatmentSuitability in affliction.Prefab.TreatmentSuitability) { if (currentTreatmentSuitabilities.ContainsKey(treatmentSuitability.Key) && currentTreatmentSuitabilities[treatmentSuitability.Key] > 0.0f) @@ -288,6 +315,11 @@ namespace Barotrauma public override float GetPriority() { + if (!IsAllowed) + { + Priority = 0; + return Priority; + } if (targetCharacter == null || targetCharacter.CurrentHull == null || targetCharacter.Removed || targetCharacter.IsDead) { Priority = 0; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs index d3d9adfed..e01280b2f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs @@ -33,46 +33,32 @@ namespace Barotrauma protected override float TargetEvaluation() { - int otherRescuers = HumanAIController.CountCrew(c => c != HumanAIController && c.ObjectiveManager.IsCurrentObjective(), onlyBots: true); - int targetCount = Targets.Count; - bool anyRescuers = otherRescuers > 0; - float ratio = anyRescuers ? targetCount / (float)otherRescuers : 1; - if (objectiveManager.CurrentOrder == this) + if (objectiveManager.CurrentOrder != this) { - return Targets.Min(t => GetVitalityFactor(t)) / ratio; - } - else - { - float multiplier = 1; - if (anyRescuers) + if (!character.IsMedic && HumanAIController.IsTrueForAnyCrewMember(c => c != HumanAIController && c.Character.IsMedic && !c.Character.IsUnconscious)) { - float mySkill = character.GetSkillLevel("medical"); - int betterRescuers = HumanAIController.CountCrew(c => c != HumanAIController && c.Character.Info.Job.GetSkillLevel("medical") >= mySkill, onlyBots: true); - if (targetCount / (float)betterRescuers <= 1) - { - // Enough rescuers - return 100; - } - else - { - bool foundOtherMedics = HumanAIController.IsTrueForAnyCrewMember(c => c != HumanAIController && c.Character.Info.Job.Prefab.Identifier == "medicaldoctor"); - if (foundOtherMedics) - { - if (character.Info.Job.Prefab.Identifier != "medicaldoctor") - { - // Double the vitality factor -> less likely to take action - multiplier = 2; - } - } - } + // Don't do anything if there's a medic on board and we are not a medic + return 100; } - return Targets.Min(t => GetVitalityFactor(t)) / ratio * multiplier; } + float worstCondition = Targets.Min(t => GetVitalityFactor(t)); + if (Targets.Contains(character)) + { + if (character.Bleeding > 10) + { + // Enforce the highest priority when bleeding out. + worstCondition = 0; + } + // Boost the priority when wounded. + worstCondition /= 2; + } + return worstCondition; } public static float GetVitalityFactor(Character character) { - float vitality = character.HealthPercentage - character.Bleeding - character.Bloodloss + Math.Min(character.Oxygen, 0); + float vitality = character.HealthPercentage - (character.Bleeding * 2) - character.Bloodloss + Math.Min(character.Oxygen, 0); + vitality -= character.CharacterHealth.GetAfflictionStrength("paralysis"); return Math.Clamp(vitality, 0, 100); } @@ -91,6 +77,11 @@ namespace Barotrauma if (GetVitalityFactor(target) >= GetVitalityThreshold(humanAI.ObjectiveManager, character, target)) { return false; } if (!humanAI.ObjectiveManager.IsCurrentOrder()) { + if (!character.IsMedic && target != character) + { + // Don't allow to treat others autonomously + return false; + } // Ignore unsafe hulls, unless ordered if (humanAI.UnsafeHulls.Contains(target.CurrentHull)) { @@ -105,11 +96,15 @@ namespace Barotrauma if (target.Submarine == null || character.Submarine == null) { return false; } if (target.Submarine.TeamID != character.Submarine.TeamID) { return false; } if (target.CurrentHull == null) { return false; } - if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(target.CurrentHull, true)) { return false; } - if (!target.IsPlayer && HumanAIController.IsActive(target) && target.AIController is HumanAIController targetAI) + if (character.Submarine != null) + { + if (target.Submarine.Info.Type != character.Submarine.Info.Type) { return false; } + if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(target.CurrentHull, true)) { return false; } + } + if (target != character &&!target.IsPlayer && HumanAIController.IsActive(target) && target.AIController is HumanAIController targetAI) { // Ignore all concious targets that are currently fighting, fleeing or treating characters - if (targetAI.ObjectiveManager.HasActiveObjective() || + if (targetAI.ObjectiveManager.HasActiveObjective() || targetAI.ObjectiveManager.HasActiveObjective() || targetAI.ObjectiveManager.HasActiveObjective()) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs index 53e1b4ac6..d278433e8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs @@ -1,4 +1,5 @@ -using Barotrauma.Items.Components; +using Barotrauma.Extensions; +using Barotrauma.Items.Components; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -13,8 +14,7 @@ namespace Barotrauma Movement, Power, Maintenance, - Operate, - Undefined + Operate } class Order @@ -31,11 +31,7 @@ namespace Barotrauma return order; } - public Order Prefab - { - get; - private set; - } + public Order Prefab { get; private set; } public readonly string Name; @@ -55,7 +51,7 @@ namespace Barotrauma { return color.Value; } - else if (OrderCategoryIcons.TryGetValue(Category, out Tuple sprite)) + else if (Category.HasValue && OrderCategoryIcons.TryGetValue((OrderCategory)Category, out Tuple sprite)) { return sprite.Item2; } @@ -83,18 +79,28 @@ namespace Barotrauma public Character OrderGiver; - public readonly OrderCategory Category; + private readonly OrderCategory? category; + public OrderCategory? Category => category; //legacy support public readonly string[] AppropriateJobs; public readonly string[] Options; - public readonly string[] OptionNames; + private readonly Dictionary OptionNames; public readonly Dictionary OptionSprites; - public readonly float Weight; + private readonly Dictionary minimapIcons; + public Dictionary MinimapIcons => IsPrefab ? minimapIcons : Prefab.minimapIcons; - static Order() + public readonly float Weight; + public readonly bool MustSetTarget; + public readonly string AppropriateSkill; + + public bool HasOptions => (IsPrefab ? Options : Prefab.Options).Length > 1; + public bool IsPrefab { get; private set; } + public readonly bool MustManuallyAssign; + + public static void Init() { Prefabs = new Dictionary(); OrderCategoryIcons = new Dictionary>(); @@ -197,28 +203,24 @@ namespace Barotrauma TargetAllCharacters = orderElement.GetAttributeBool("targetallcharacters", false); AppropriateJobs = orderElement.GetAttributeStringArray("appropriatejobs", new string[0]); Options = orderElement.GetAttributeStringArray("options", new string[0]); - Category = (OrderCategory)Enum.Parse(typeof(OrderCategory), orderElement.GetAttributeString("category", "undefined"), true); + var category = orderElement.GetAttributeString("category", null); + if (!string.IsNullOrWhiteSpace(category)) { this.category = (OrderCategory)Enum.Parse(typeof(OrderCategory), category, true); } Weight = orderElement.GetAttributeFloat(0.0f, "weight"); + MustSetTarget = orderElement.GetAttributeBool("mustsettarget", false); + AppropriateSkill = orderElement.GetAttributeString("appropriateskill", null); - string translatedOptionNames = TextManager.Get("OrderOptions." + Identifier, true); - if (translatedOptionNames == null) + var optionNames = TextManager.Get("OrderOptions." + Identifier, true)?.Split(',', ',') ?? + orderElement.GetAttributeStringArray("optionnames", new string[0]); + OptionNames = new Dictionary(); + for (int i = 0; i < Options.Length && i < optionNames.Length; i++) { - OptionNames = orderElement.GetAttributeStringArray("optionnames", new string[0]); + OptionNames.Add(Options[i], optionNames[i].Trim()); } - else - { - string[] splitOptionNames = translatedOptionNames.Split(',', ','); - OptionNames = new string[Options.Length]; - for (int i = 0; i < Options.Length && i < splitOptionNames.Length; i++) - { - OptionNames[i] = splitOptionNames[i].Trim(); - } - } - - if (OptionNames.Length != Options.Length) + if (OptionNames.Count != Options.Length) { DebugConsole.ThrowError("Error in Order " + Name + " - the number of option names doesn't match the number of options."); - OptionNames = Options; + OptionNames.Clear(); + Options.ForEach(o => OptionNames.Add(o, o)); } var spriteElement = orderElement.GetChildElement("sprite"); @@ -241,18 +243,31 @@ namespace Barotrauma } } } + + minimapIcons = new Dictionary(); + var minimapIconElements = orderElement.GetChildElements("minimapicon"); + foreach (XElement minimapIconElement in minimapIconElements) + { + var id = minimapIconElement.GetAttributeString("id", null); + if (string.IsNullOrWhiteSpace(id)) { continue; } + minimapIcons.Add(id, new Sprite(minimapIconElement.GetChildElement("sprite"), lazyLoad: true)); + } + + IsPrefab = true; + MustManuallyAssign = orderElement.GetAttributeBool("mustmanuallyassign", false); } /// /// Constructor for order instances /// - public Order(Order prefab, Entity targetEntity, ItemComponent targetItem, Character orderGiver = null) + public Order(Order prefab, Entity targetEntity, ItemComponent targetItem, Character orderGiver = null, bool isAutonomous = false) { Prefab = prefab; Name = prefab.Name; Identifier = prefab.Identifier; ItemComponentType = prefab.ItemComponentType; + ItemIdentifiers = prefab.ItemIdentifiers; Options = prefab.Options; SymbolSprite = prefab.SymbolSprite; Color = prefab.Color; @@ -261,22 +276,31 @@ namespace Barotrauma AppropriateJobs = prefab.AppropriateJobs; FadeOutTime = prefab.FadeOutTime; Weight = prefab.Weight; - Category = prefab.Category; - OrderGiver = orderGiver; + MustSetTarget = prefab.MustSetTarget; + AppropriateSkill = prefab.AppropriateSkill; + category = prefab.Category; + MustManuallyAssign = prefab.MustManuallyAssign; + OrderGiver = orderGiver; TargetEntity = targetEntity; if (targetItem != null) { if (UseController) { - //try finding the controller with the simpler non-recursive method first - ConnectedController = - targetItem.Item.GetConnectedComponents().FirstOrDefault() ?? - targetItem.Item.GetConnectedComponents(recursive: true).FirstOrDefault(); + ConnectedController = targetItem.Item?.FindController(); + if (ConnectedController == null) + { +#if DEBUG + throw new Exception("Tried to use controller, but couldn't find one"); +#endif + UseController = false; + } } TargetEntity = targetItem.Item; TargetItemComponent = targetItem; } + + IsPrefab = false; } public bool HasAppropriateJob(Character character) @@ -310,5 +334,51 @@ namespace Barotrauma return msg; } + + public List GetMatchingItems(Submarine submarine, bool mustBelongToPlayerSub) + { + List matchingItems = new List(); + if (submarine == null) { return matchingItems; } + if (ItemComponentType != null || ItemIdentifiers.Length > 0) + { + matchingItems = ItemIdentifiers.Length > 0 ? + Item.ItemList.FindAll(it => ItemIdentifiers.Contains(it.Prefab.Identifier) || it.HasTag(ItemIdentifiers)) : + Item.ItemList.FindAll(it => it.Components.Any(ic => ic.GetType() == ItemComponentType)); + if (mustBelongToPlayerSub) + { + matchingItems.RemoveAll(it => it.Submarine?.Info != null && it.Submarine.Info.Type != SubmarineInfo.SubmarineType.Player); + matchingItems.RemoveAll(it => it.Submarine != submarine && !submarine.DockedTo.Contains(it.Submarine)); + } + else + { + matchingItems.RemoveAll(it => it.Submarine != submarine); + } + matchingItems.RemoveAll(it => it.NonInteractable); + if (UseController) + { + matchingItems.RemoveAll(i => i.Components.None(c => c.GetType() == ItemComponentType) && !i.TryFindController(out _)); + } + } + return matchingItems; + } + + public List GetMatchingItems(bool mustBelongToPlayerSub) + { + Submarine submarine = Character.Controlled != null && Character.Controlled.TeamID == Character.TeamType.Team2 && Submarine.MainSubs.Length > 1 ? + Submarine.MainSubs[1] : + Submarine.MainSub; + return GetMatchingItems(submarine, mustBelongToPlayerSub); + } + + public string GetOptionName(string id) + { + return Prefab == null ? OptionNames[id] : Prefab.OptionNames[id]; + } + + public string GetOptionName(int index) + { + if (index < 0 || index >= Options.Length) { return null; } + return GetOptionName(Options[index]); + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PathFinder.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PathFinder.cs index 405a12b9c..8ae8ce48a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PathFinder.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PathFinder.cs @@ -46,7 +46,7 @@ namespace Barotrauma var nodes = new Dictionary(); foreach (WayPoint wayPoint in wayPoints) { - if (wayPoint == null) continue; + if (wayPoint == null) { continue; } if (nodes.ContainsKey(wayPoint.ID)) { #if DEBUG @@ -63,7 +63,7 @@ namespace Barotrauma { PathNode connectedNode = null; nodes.TryGetValue(linked.ID, out connectedNode); - if (connectedNode == null) continue; + if (connectedNode == null) { continue; } node.Value.connections.Add(connectedNode); } @@ -107,17 +107,17 @@ namespace Barotrauma void WaypointLinksChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { - if (Submarine.Unloading) return; + if (Submarine.Unloading) { return; } var waypoints = sender as IEnumerable; foreach (MapEntity me in waypoints) { WayPoint wp = me as WayPoint; - if (me == null) continue; + if (me == null) { continue; } var node = nodes.Find(n => n.Waypoint == wp); - if (node == null) return; + if (node == null) { return; } if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { @@ -136,10 +136,10 @@ namespace Barotrauma for (int i = 0; i < wp.linkedTo.Count; i++) { WayPoint connected = wp.linkedTo[i] as WayPoint; - if (connected == null) continue; + if (connected == null) { continue; } //already connected, continue - if (node.connections.Any(n => n.Waypoint == connected)) continue; + if (node.connections.Any(n => n.Waypoint == connected)) { continue; } var matchingNode = nodes.Find(n => n.Waypoint == connected); if (matchingNode == null) @@ -201,8 +201,8 @@ namespace Barotrauma if (body != null) { //if (body.UserData is Submarine) continue; - if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) continue; - if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) continue; + if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) { continue; } + if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) { continue; } } } @@ -236,9 +236,9 @@ namespace Barotrauma if (InsideSubmarine) { //much higher cost to waypoints that are outside - if (node.Waypoint.CurrentHull == null) dist *= 10.0f; + if (node.Waypoint.CurrentHull == null) { dist *= 10.0f; } //avoid stopping at a doorway - if (node.Waypoint.ConnectedDoor != null) dist *= 10.0f; + if (node.Waypoint.ConnectedDoor != null) { dist *= 10.0f; } } if (dist < closestDist || endNode == null) { @@ -251,8 +251,8 @@ namespace Barotrauma if (body != null) { //if (body.UserData is Submarine) continue; - if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) continue; - if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) continue; + if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) { continue; } + if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) { continue; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/SteeringPath.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/SteeringPath.cs index 86fbdfc8d..79c8dbefa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/SteeringPath.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/SteeringPath.cs @@ -9,12 +9,31 @@ namespace Barotrauma int currentIndex; + private float? totalLength; + public bool Unreachable { get; set; } + public float TotalLength + { + get + { + if (Unreachable) { return float.PositiveInfinity; } + if (!totalLength.HasValue) + { + totalLength = 0.0f; + for (int i = 0; i < nodes.Count - 1; i++) + { + totalLength += Vector2.Distance(nodes[i].WorldPosition, nodes[i + 1].WorldPosition); + } + } + return totalLength.Value; + } + } + public SteeringPath(bool unreachable = false) { nodes = new List(); @@ -23,10 +42,10 @@ namespace Barotrauma public void AddNode(WayPoint node) { - if (node == null) return; + if (node == null) { return; } nodes.Add(node); - if (node.CurrentHull == null) HasOutdoorsNodes = true; + if (node.CurrentHull == null) { HasOutdoorsNodes = true; } } public bool HasOutdoorsNodes @@ -48,10 +67,10 @@ namespace Barotrauma public WayPoint PrevNode { - get + get { - if (currentIndex-1 < 0 || currentIndex-1 > nodes.Count - 1) return null; - return nodes[currentIndex-1]; + if (currentIndex - 1 < 0 || currentIndex - 1 > nodes.Count - 1) { return null; } + return nodes[currentIndex - 1]; } } @@ -59,7 +78,7 @@ namespace Barotrauma { get { - if (currentIndex < 0 || currentIndex > nodes.Count - 1) return null; + if (currentIndex < 0 || currentIndex > nodes.Count - 1) { return null; } return nodes[currentIndex]; } } @@ -73,7 +92,7 @@ namespace Barotrauma { get { - if (currentIndex+1 < 0 || currentIndex+1 > nodes.Count - 1) return null; + if (currentIndex + 1 < 0 || currentIndex + 1 > nodes.Count - 1) { return null; } return nodes[currentIndex+1]; } } @@ -90,8 +109,8 @@ namespace Barotrauma public WayPoint CheckProgress(Vector2 simPosition, float minSimDistance = 0.1f) { - if (nodes.Count == 0 || currentIndex>nodes.Count-1) return null; - if (Vector2.Distance(simPosition, nodes[currentIndex].SimPosition) < minSimDistance) currentIndex++; + if (nodes.Count == 0 || currentIndex > nodes.Count - 1) { return null; } + if (Vector2.Distance(simPosition, nodes[currentIndex].SimPosition) < minSimDistance) { currentIndex++; } return CurrentNode; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAI.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAI.cs index 3bd42daaf..c2c82c00d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAI.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAI.cs @@ -8,7 +8,7 @@ using System; namespace Barotrauma { - class WreckAI : IServerSerializable + partial class WreckAI : IServerSerializable { public Submarine Wreck { get; private set; } @@ -16,6 +16,7 @@ namespace Barotrauma private readonly List allItems; private readonly List thalamusItems; + private readonly List thalamusStructures; private readonly List turrets = new List(); private readonly List wayPoints = new List(); private readonly List hulls = new List(); @@ -28,17 +29,89 @@ namespace Barotrauma private bool IsClient => GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient; - public WreckAI(Submarine wreck, Item brain, List items = null) + private bool IsThalamus(MapEntityPrefab entityPrefab) => IsThalamus(entityPrefab, Config.Entity); + + private static IEnumerable GetThalamusEntities(Submarine wreck, string tag) where T : MapEntity => GetThalamusEntities(wreck, tag).Where(e => e is T).Select(e => e as T); + + private static IEnumerable GetThalamusEntities(Submarine wreck, string tag) => MapEntity.mapEntityList.Where(e => e.Submarine == wreck && e.prefab != null && IsThalamus(e.prefab, tag)); + + private static bool IsThalamus(MapEntityPrefab entityPrefab, string tag) => entityPrefab.Category == MapEntityCategory.Thalamus || entityPrefab.Tags.Contains(tag); + + public WreckAI(Submarine wreck) { + Wreck = wreck; Config = WreckAIConfig.GetRandom(); if (Config == null) { DebugConsole.ThrowError("WreckAI: No wreck AI config found!"); - Kill(); return; } - allItems = items ?? wreck.GetItems(false); - thalamusItems = allItems.FindAll(i => i.Prefab.Category == MapEntityCategory.Thalamus || i.HasTag("thalamus")); + var thalamusPrefabs = ItemPrefab.Prefabs.Where(p => IsThalamus(p)); + var brainPrefab = thalamusPrefabs.GetRandom(i => i.Tags.Contains(Config.Brain), Rand.RandSync.Server); + if (brainPrefab == null) + { + DebugConsole.ThrowError($"WreckAI: Could not find any brain prefab with the tag {Config.Brain}! Cannot continue. Failed to create wreck AI."); + return; + } + allItems = Wreck.GetItems(false); + thalamusItems = allItems.FindAll(i => IsThalamus(i.prefab)); + var hulls = Wreck.GetHulls(false); + brain = new Item(brainPrefab, Vector2.Zero, Wreck); + thalamusItems.Add(brain); + Vector2 negativeMargin = new Vector2(40, 20); + Vector2 minSize = brain.Rect.Size.ToVector2() - negativeMargin; + Vector2 maxSize = new Vector2(brain.Rect.Width * 3, brain.Rect.Height * 3); + // First try to get a room that is not too big and not in the edges of the sub. + // Also try not to create the brain in a room that already have carrier items inside. + // Ignore hulls that have any linked hulls to keep the calculations simple. + // Shrink the horizontal axis so that the brain is not placed in the left or right side, where we often have curved walls. + // Also ignore hulls that have open gaps, because we'll want the room to be full of water. The room will be filled with water when the brain is inserted in the room. + Rectangle shrinkedBounds = ToolBox.GetWorldBounds(Wreck.WorldPosition.ToPoint(), new Point(Wreck.Borders.Width - 500, Wreck.Borders.Height)); + bool BaseCondition(Hull h) => h.RectWidth > minSize.X && h.RectHeight > minSize.Y && h.GetLinkedEntities().None() && h.ConnectedGaps.None(g => g.Open > 0); + bool IsNotTooBig(Hull h) => h.RectWidth < maxSize.X && h.RectHeight < maxSize.Y; + bool IsNotInFringes(Hull h) => shrinkedBounds.ContainsWorld(h.WorldRect); + bool DoesNotContainOtherItems(Hull h) => thalamusItems.None(i => i.CurrentHull == h); + Hull brainHull = hulls.GetRandom(h => BaseCondition(h) && IsNotTooBig(h) && IsNotInFringes(h) && DoesNotContainOtherItems(h), Rand.RandSync.Server); + if (brainHull == null) + { + brainHull = hulls.GetRandom(h => BaseCondition(h) && IsNotInFringes(h) && DoesNotContainOtherItems(h), Rand.RandSync.Server); + } + if (brainHull == null) + { + brainHull = hulls.GetRandom(h => BaseCondition(h) && (IsNotInFringes(h) || DoesNotContainOtherItems(h)), Rand.RandSync.Server); + } + if (brainHull == null) + { + brainHull = hulls.GetRandom(BaseCondition, Rand.RandSync.Server); + } + var thalamusStructurePrefabs = StructurePrefab.Prefabs.Where(p => IsThalamus(p)); + if (brainHull == null) { return; } + brainHull.WaterVolume = brainHull.Volume; + brain.SetTransform(brainHull.SimPosition, rotation: 0, findNewHull: false); + brain.CurrentHull = brainHull; + var backgroundPrefab = thalamusStructurePrefabs.GetRandom(i => i.Tags.Contains(Config.BrainRoomBackground), Rand.RandSync.Server); + if (backgroundPrefab != null) + { + new Structure(brainHull.Rect, backgroundPrefab, Wreck); + } + var horizontalWallPrefab = thalamusStructurePrefabs.GetRandom(p => p.Tags.Contains(Config.BrainRoomHorizontalWall), Rand.RandSync.Server); + if (horizontalWallPrefab != null) + { + int height = (int)horizontalWallPrefab.Size.Y; + int halfHeight = height / 2; + int quarterHeight = halfHeight / 2; + new Structure(new Rectangle(brainHull.Rect.Left, brainHull.Rect.Top + quarterHeight, brainHull.Rect.Width, height), horizontalWallPrefab, Wreck); + new Structure(new Rectangle(brainHull.Rect.Left, brainHull.Rect.Top - brainHull.Rect.Height + halfHeight + quarterHeight, brainHull.Rect.Width, height), horizontalWallPrefab, Wreck); + } + var verticalWallPrefab = thalamusStructurePrefabs.GetRandom(p => p.Tags.Contains(Config.BrainRoomVerticalWall), Rand.RandSync.Server); + if (verticalWallPrefab != null) + { + int width = (int)verticalWallPrefab.Size.X; + int halfWidth = width / 2; + int quarterWidth = halfWidth / 2; + new Structure(new Rectangle(brainHull.Rect.Left - quarterWidth, brainHull.Rect.Top, width, brainHull.Rect.Height), verticalWallPrefab, Wreck); + new Structure(new Rectangle(brainHull.Rect.Right - halfWidth - quarterWidth, brainHull.Rect.Top, width, brainHull.Rect.Height), verticalWallPrefab, Wreck); + } foreach (Item item in allItems) { if (thalamusItems.Contains(item)) @@ -62,7 +135,7 @@ namespace Barotrauma if (MapEntityPrefab.List.GetRandom(e => e is ItemPrefab i && container.CanBeContained(i) && Config.ForbiddenAmmunition.None(id => id.Equals(i.Identifier, StringComparison.OrdinalIgnoreCase)), Rand.RandSync.Server) is ItemPrefab ammoPrefab) { - Item ammo = new Item(ammoPrefab, container.Item.WorldPosition, wreck); + Item ammo = new Item(ammoPrefab, container.Item.WorldPosition, Wreck); if (!container.Inventory.TryPutItem(ammo, i, allowSwapping: false, allowCombine: false, user: null, createNetworkEvent: false)) { item.Remove(); @@ -73,16 +146,14 @@ namespace Barotrauma } } } - this.brain = brain; - Wreck = wreck; - foreach (var item in Wreck.GetItems(false)) + foreach (var item in allItems) { var turret = item.GetComponent(); if (turret != null) { turrets.Add(turret); } - if (item.HasTag("cellspawnorgan")) + if (item.HasTag(Config.Spawner)) { if (!spawnOrgans.Contains(item)) { @@ -93,19 +164,22 @@ namespace Barotrauma wayPoints.AddRange(Wreck.GetWaypoints(false)); hulls.AddRange(Wreck.GetHulls(false)); IsAlive = true; + thalamusStructures = GetThalamusEntities(Wreck, Config.Entity).ToList(); } private readonly List destroyedOrgans = new List(); public void Update(float deltaTime) { - if (!IsAlive || Wreck == null || Wreck.Removed) + if (!IsAlive) { return; } + if (Wreck == null || Wreck.Removed) { - cells.ForEach(c => c.OnDeath -= OnCellDeath); + Remove(); return; } if (brain == null || brain.Removed || brain.Condition <= 0) { Kill(); + return; } destroyedOrgans.Clear(); foreach (var organ in spawnOrgans) @@ -116,7 +190,6 @@ namespace Barotrauma } } destroyedOrgans.ForEach(o => spawnOrgans.Remove(o)); - bool someoneNearby = false; float minDist = Sonar.DefaultSonarRange * 2.0f; foreach (Submarine submarine in Submarine.Loaded) @@ -138,7 +211,6 @@ namespace Barotrauma } } if (!someoneNearby) { return; } - OperateTurrets(deltaTime); if (!IsClient) { @@ -164,7 +236,7 @@ namespace Barotrauma } int cellsOutside = Rand.Range(MinCellsOutside, MaxCellsOutside); // If we failed to spawn some of the cells in the brainroom/inside, spawn some extra cells outside. - cellsOutside = Math.Clamp(cellsOutside + brainRoomCells + cellsInside - cells.Count, cellsOutside, MaxCellsOutside); + cellsOutside = Math.Clamp(cellsOutside + brainRoomCells + cellsInside - protectiveCells.Count, cellsOutside, MaxCellsOutside); for (int i = 0; i < cellsOutside; i++) { ISpatialEntity targetEntity = wayPoints.GetRandom(wp => wp.CurrentHull == null); @@ -174,35 +246,93 @@ namespace Barotrauma initialCellsSpawned = true; } - public void Kill() + private void Kill() { + thalamusItems.ForEach(i => i.Condition = 0); + foreach (var turret in turrets) + { + // Snap all tendons + foreach (Item item in turret.ActiveProjectiles) + { + if (item.GetComponent()?.IsStuckToTarget ?? false) + { + item.Condition = 0; + } + } + } + FadeOutColors(); + protectiveCells.ForEach(c => c.OnDeath -= OnCellDeath); if (!IsClient) { - brain.Condition = 0; + if (Config != null) + { + if (Config.KillAgentsWhenEntityDies) + { + protectiveCells.ForEach(c => c.Kill(CauseOfDeathType.Unknown, null)); + if (!string.IsNullOrWhiteSpace(Config.OffensiveAgent)) + { + foreach (var character in Character.CharacterList) + { + // Kills ALL offensive agents that are near the thalamus. Not the ideal solution, + // but as long as spawning is handled via status effects, I don't know if there is any better way. + // In practice there shouldn't be terminal cells from different thalamus organisms at the same time. + // And if there was, the distance check should prevent killing the agents of a different organism. + if (character.SpeciesName.Equals(Config.OffensiveAgent, StringComparison.OrdinalIgnoreCase)) + { + // Sonar distance is used also for wreck positioning. No wreck should be closer to each other than this. + float maxDistance = Sonar.DefaultSonarRange; + if (Vector2.DistanceSquared(character.WorldPosition, Wreck.WorldPosition) < maxDistance * maxDistance) + { + character.Kill(CauseOfDeathType.Unknown, null); + } + } + } + } + } + } } + protectiveCells.Clear(); IsAlive = false; } + partial void FadeOutColors(); + + public void Remove() + { + Kill(); + RemoveThalamusItems(Wreck); + thalamusItems?.Clear(); + thalamusStructures?.Clear(); + } + + public static void RemoveThalamusItems(Submarine wreck) + { + foreach (var wreckAiConfig in WreckAIConfig.List) + { + GetThalamusEntities(wreck, wreckAiConfig.Entity).ForEachMod(e => e.Remove()); + } + } + // The client doesn't use these, so we don't have to sync them. - private readonly List cells = new List(); + private readonly List protectiveCells = new List(); // Intentionally contains duplicates. private readonly List populatedHulls = new List(); private float cellSpawnTimer; - private float CellSpawnTime => Config.CellSpawnTime; - private float CellSpawnRandomFactor => Config.CellSpawnRandomFactor; - private int MinCellsPerBrainRoom => Config.MinCellsPerBrainRoom; - private int MaxCellsPerRoom => Config.MaxCellsPerRoom; - private int MinCellsOutside => Config.MinCellsOutside; - private int MaxCellsOutside => Config.MaxCellsOutside; - private int MinCellsInside => Config.MinCellsInside; - private int MaxCellsInside => Config.MaxCellsInside; - private int MaxCellCount => Config.MaxCellCount; + private float CellSpawnTime => Config.AgentSpawnDelay; + private float CellSpawnRandomFactor => Config.AgentSpawnDelayRandomFactor; + private int MinCellsPerBrainRoom => Config.MinAgentsPerBrainRoom; + private int MaxCellsPerRoom => Config.MaxAgentsPerRoom; + private int MinCellsOutside => Config.MinAgentsOutside; + private int MaxCellsOutside => Config.MaxAgentsOutside; + private int MinCellsInside => Config.MinAgentsInside; + private int MaxCellsInside => Config.MaxAgentsInside; + private int MaxCellCount => Config.MaxAgentCount; private float MinWaterLevel => Config.MinWaterLevel; void UpdateReinforcements(float deltaTime) { - if (cells.Count >= MaxCellCount) { return; } + if (protectiveCells.Count >= MaxCellCount || spawnOrgans.Count == 0) { return; } cellSpawnTimer -= deltaTime; if (cellSpawnTimer < 0) { @@ -214,7 +344,7 @@ namespace Barotrauma bool TrySpawnCell(out Character cell, ISpatialEntity targetEntity = null) { cell = null; - if (cells.Count >= MaxCellCount) { return false; } + if (protectiveCells.Count >= MaxCellCount) { return false; } if (targetEntity == null) { targetEntity = @@ -231,8 +361,8 @@ namespace Barotrauma populatedHulls.Add(wp.CurrentHull); } // Don't add items in the list, because we want to be able to ignore the restrictions for spawner organs. - cell = Character.Create("Leucocyte", targetEntity.WorldPosition, ToolBox.RandomSeed(8), hasAi: true, createNetworkEvent: true); - cells.Add(cell); + cell = Character.Create(Config.DefensiveAgent, targetEntity.WorldPosition, ToolBox.RandomSeed(8), hasAi: true, createNetworkEvent: true); + protectiveCells.Add(cell); cell.OnDeath += OnCellDeath; cellSpawnTimer = CellSpawnTime * Rand.Range(CellSpawnRandomFactor, 1 + CellSpawnRandomFactor); return true; @@ -243,7 +373,7 @@ namespace Barotrauma foreach (var turret in turrets) { // Never target other creatures than humans with the turrets. - turret.ThalamusOperate(deltaTime, + turret.ThalamusOperate(this, deltaTime, !turret.Item.HasTag("ignorecharacters"), targetOtherCreatures: false, !turret.Item.HasTag("ignoresubmarines"), @@ -253,7 +383,7 @@ namespace Barotrauma void OnCellDeath(Character character, CauseOfDeath causeOfDeath) { - cells.Remove(character); + protectiveCells.Remove(character); } #if SERVER @@ -261,12 +391,6 @@ namespace Barotrauma { msg.Write(IsAlive); } -#endif -#if CLIENT - public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) - { - IsAlive = msg.ReadBoolean(); - } #endif } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAIConfig.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAIConfig.cs index 76a6f2758..9830a8d4d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAIConfig.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Wreck/WreckAIConfig.cs @@ -12,35 +12,68 @@ namespace Barotrauma public Dictionary SerializableProperties { get; private set; } + [Serialize("", false)] + public string Entity { get; private set; } + + [Serialize("", false)] + public string DefensiveAgent { get; private set; } + + [Serialize("", false)] + public string OffensiveAgent { get; private set; } + + [Serialize("", false)] + public string Brain { get; private set; } + + [Serialize("", false)] + public string Spawner { get; private set; } + + [Serialize("", false)] + public string BrainRoomBackground { get; private set; } + + [Serialize("", false)] + public string BrainRoomVerticalWall { get; private set; } + + [Serialize("", false)] + public string BrainRoomHorizontalWall { get; private set; } + [Serialize(60f, false)] - public float CellSpawnTime { get; set; } + public float AgentSpawnDelay { get; private set; } [Serialize(0.5f, false)] - public float CellSpawnRandomFactor { get; set; } + public float AgentSpawnDelayRandomFactor { get; private set; } [Serialize(0, false)] - public int MinCellsPerBrainRoom { get; set; } + public int MinAgentsPerBrainRoom { get; private set; } [Serialize(3, false)] - public int MaxCellsPerRoom { get; set; } + public int MaxAgentsPerRoom { get; private set; } [Serialize(2, false)] - public int MinCellsOutside { get; set; } + public int MinAgentsOutside { get; private set; } [Serialize(5, false)] - public int MaxCellsOutside { get; set; } + public int MaxAgentsOutside { get; private set; } [Serialize(3, false)] - public int MinCellsInside { get; set; } + public int MinAgentsInside { get; private set; } [Serialize(10, false)] - public int MaxCellsInside { get; set; } + public int MaxAgentsInside { get; private set; } [Serialize(15, false)] - public int MaxCellCount { get; set; } + public int MaxAgentCount { get; private set; } [Serialize(100f, false)] - public float MinWaterLevel { get; set; } + public float MinWaterLevel { get; private set; } + + [Serialize(true, false)] + public bool KillAgentsWhenEntityDies { get; private set; } + + [Serialize(1f, false)] + public float DeadEntityColorMultiplier { get; private set; } + + [Serialize(1f, false)] + public float DeadEntityColorFadeOutTime { get; private set; } public readonly string[] ForbiddenAmmunition; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AICharacter.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AICharacter.cs index 8ffcb47bb..f6001bd17 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AICharacter.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AICharacter.cs @@ -46,9 +46,13 @@ namespace Barotrauma { base.Update(deltaTime, cam); - if (!Enabled) return; + if (!Enabled) { return; } + if (IsDead || Vitality <= 0.0f || Stun > 0.0f || IsIncapacitated) { return; } - if (!IsRemotePlayer) + //don't enable simple physics on dead/incapacitated characters + //the ragdoll controls the movement of incapacitated characters instead of the collider, + //but in simple physics mode the ragdoll would get disabled, causing the character to not move at all + if (!IsRemotePlayer && !(AIController is HumanAIController)) { float characterDist = float.MaxValue; #if CLIENT @@ -70,10 +74,9 @@ namespace Barotrauma } } - if (IsDead || Vitality <= 0.0f|| Stun > 0.0f || IsIncapacitated) return; - if (!aiController.Enabled) return; - if (GameMain.NetworkMember != null && !GameMain.NetworkMember.IsServer) return; - if (Controlled == this) return; + if (!aiController.Enabled) { return; } + if (GameMain.NetworkMember != null && !GameMain.NetworkMember.IsServer) { return; } + if (Controlled == this) { return; } if (!IsRemotePlayer) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs index 79fea4873..859b76516 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs @@ -76,7 +76,8 @@ namespace Barotrauma { if (InWater || !CanWalk) { - return TargetMovement.Length() > (SwimSlowParams.MovementSpeed + SwimFastParams.MovementSpeed) / 2.0f; + float avg = (SwimSlowParams.MovementSpeed + SwimFastParams.MovementSpeed) / 2.0f; + return TargetMovement.LengthSquared() > avg * avg; } else { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/FishAnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/FishAnimController.cs index bcb29ad85..12f9c5bf5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/FishAnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/FishAnimController.cs @@ -213,7 +213,12 @@ namespace Barotrauma UpdateWalkAnim(deltaTime); } - //don't flip or drag when simply physics is enabled + if (character.SelectedCharacter != null) + { + DragCharacter(character.SelectedCharacter, deltaTime); + } + + //don't flip when simply physics is enabled if (SimplePhysicsEnabled) { return; } if (!character.IsRemotePlayer && (character.AIController == null || character.AIController.CanFlip)) @@ -248,29 +253,33 @@ namespace Barotrauma } } - if (character.SelectedCharacter != null) - { - DragCharacter(character.SelectedCharacter, deltaTime); - } - if (!CurrentFishAnimation.Flip) { return; } if (IsStuck) { return; } if (character.AIController != null && !character.AIController.CanFlip) { return; } flipCooldown -= deltaTime; - - if (TargetDir != Direction.None && TargetDir != dir) + if (TargetDir != Direction.None && TargetDir != dir) { flipTimer += deltaTime; - if ((flipTimer > 0.5f && flipCooldown <= 0.0f) || character.IsRemotePlayer) + // Speed reductions are not taken into account here. It's intentional: an ai character cannot flip if it's heavily paralyzed (for example). + float requiredSpeed = CurrentAnimationParams.MovementSpeed / 2; + if (CurrentHull != null) + { + // Enemy movement speeds are halved inside submarines + requiredSpeed /= 2; + } + bool isMovingFastEnough = Math.Abs(MainLimb.LinearVelocity.X) > requiredSpeed; + bool isTryingToMoveHorizontally = Math.Abs(TargetMovement.X) > Math.Abs(TargetMovement.Y); + if ((flipTimer > CurrentFishAnimation.FlipDelay && flipCooldown <= 0.0f && ((isMovingFastEnough && isTryingToMoveHorizontally) || IsMovingBackwards)) + || character.IsRemotePlayer) { Flip(); if (!inWater || (CurrentSwimParams != null && CurrentSwimParams.Mirror)) { - Mirror(); + Mirror(CurrentSwimParams != null ? CurrentSwimParams.MirrorLerp : true); } flipTimer = 0.0f; - flipCooldown = 1.0f; + flipCooldown = CurrentFishAnimation.FlipCooldown; } } else @@ -295,7 +304,7 @@ namespace Barotrauma if (GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) { //stop dragging if there's something between the pull limb and the target - Vector2 sourceSimPos = mouthLimb.SimPosition; + Vector2 sourceSimPos = SimplePhysicsEnabled ? character.SimPosition : mouthLimb.SimPosition; Vector2 targetSimPos = target.SimPosition; if (character.Submarine != null && character.SelectedCharacter.Submarine == null) { @@ -317,7 +326,7 @@ namespace Barotrauma float eatSpeed = dmg / ((float)Math.Sqrt(Math.Max(target.Mass, 1)) * 10); eatTimer += deltaTime * eatSpeed; - Vector2 mouthPos = GetMouthPosition().Value; + Vector2 mouthPos = SimplePhysicsEnabled ? character.SimPosition : GetMouthPosition().Value; Vector2 attackSimPosition = character.Submarine == null ? ConvertUnits.ToSimUnits(target.WorldPosition) : target.SimPosition; Vector2 limbDiff = attackSimPosition - mouthPos; @@ -525,6 +534,7 @@ namespace Barotrauma foreach (var limb in Limbs) { + if (limb.IsSevered) { continue; } if (Math.Abs(limb.Params.ConstantTorque) > 0) { limb.body.SmoothRotate(movementAngle + MathHelper.ToRadians(limb.Params.ConstantAngle) * Dir, limb.Params.ConstantTorque, wrapAngle: true); @@ -550,10 +560,12 @@ namespace Barotrauma for (int i = 0; i < Limbs.Length; i++) { - if (Limbs[i].SteerForce <= 0.0f) { continue; } + var limb = Limbs[i]; + if (limb.IsSevered) { continue; } + if (limb.SteerForce <= 0.0f) { continue; } if (!Collider.PhysEnabled) { continue; } - Vector2 pullPos = Limbs[i].PullJointWorldAnchorA; - Limbs[i].body.ApplyForce(movement * Limbs[i].SteerForce * Limbs[i].Mass * Math.Max(character.SpeedMultiplier, 1), pullPos); + Vector2 pullPos = limb.PullJointWorldAnchorA; + limb.body.ApplyForce(movement * limb.SteerForce * limb.Mass * Math.Max(character.SpeedMultiplier, 1), pullPos); } Vector2 mainLimbDiff = mainLimb.PullJointWorldAnchorB - mainLimb.SimPosition; @@ -604,6 +616,14 @@ namespace Barotrauma float stepLift = TargetMovement.X == 0.0f ? 0 : (float)Math.Sin(WalkPos * CurrentGroundedParams.StepLiftFrequency + MathHelper.Pi * CurrentGroundedParams.StepLiftOffset) * (CurrentGroundedParams.StepLiftAmount / 100); + float limpAmount = character.GetLegPenalty(); + if (limpAmount > 0) + { + float walkPosX = (float)Math.Cos(WalkPos); + //make the footpos oscillate when limping + limpAmount = Math.Max(Math.Abs(walkPosX) * limpAmount, 0.0f) * Math.Min(Math.Abs(TargetMovement.X), 0.3f) * Dir; + } + Limb torso = GetLimb(LimbType.Torso); if (torso != null) { @@ -613,7 +633,7 @@ namespace Barotrauma } if (TorsoPosition.HasValue) { - Vector2 pos = colliderBottom + new Vector2(0, TorsoPosition.Value + stepLift); + Vector2 pos = colliderBottom + new Vector2(limpAmount, TorsoPosition.Value + stepLift); if (torso != mainLimb) { @@ -635,7 +655,7 @@ namespace Barotrauma } if (HeadPosition.HasValue) { - Vector2 pos = colliderBottom + new Vector2(0, HeadPosition.Value + stepLift * CurrentGroundedParams.StepLiftHeadMultiplier); + Vector2 pos = colliderBottom + new Vector2(limpAmount, HeadPosition.Value + stepLift * CurrentGroundedParams.StepLiftHeadMultiplier); if (head != mainLimb) { @@ -670,6 +690,7 @@ namespace Barotrauma foreach (Limb limb in Limbs) { + if (limb.IsSevered) { continue; } if (Math.Abs(limb.Params.ConstantTorque) > 0) { limb.body.SmoothRotate(movementAngle + MathHelper.ToRadians(limb.Params.ConstantAngle) * Dir, limb.Params.ConstantTorque, wrapAngle: true); @@ -766,6 +787,7 @@ namespace Barotrauma foreach (Limb limb in Limbs) { + if (limb.IsSevered) { continue; } #if CLIENT if (limb.LightSource != null) { @@ -821,6 +843,7 @@ namespace Barotrauma base.Flip(); foreach (Limb l in Limbs) { + if (l.IsSevered) { continue; } if (!l.DoesFlip) { continue; } if (RagdollParams.IsSpritesheetOrientationHorizontal) { @@ -838,10 +861,13 @@ namespace Barotrauma foreach (Limb l in Limbs) { + if (l.IsSevered) { continue; } + TrySetLimbPosition(l, centerOfMass, new Vector2(centerOfMass.X - (l.SimPosition.X - centerOfMass.X), l.SimPosition.Y), lerp); + l.body.PositionSmoothingFactor = 0.8f; if (!l.DoesFlip) { continue; } @@ -862,7 +888,7 @@ namespace Barotrauma if (diff < 100.0f) { character.SelectedCharacter.AnimController.SetPosition( - new Vector2(centerOfMass.X - diff, character.SelectedCharacter.SimPosition.Y), lerp: true); + new Vector2(centerOfMass.X - diff, character.SelectedCharacter.SimPosition.Y), lerp); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs index 059d0fb65..f20290277 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs @@ -323,7 +323,14 @@ namespace Barotrauma levitatingCollider = true; ColliderIndex = Crouching ? 1 : 0; - if (!Crouching && ColliderIndex == 1) Crouching = true; + if (character.SelectedConstruction?.GetComponent()?.ControlCharacterPose ?? false) + { + Crouching = false; + } + else if (!Crouching && ColliderIndex == 1) + { + Crouching = true; + } //stun (= disable the animations) if the ragdoll receives a large enough impact if (strongestImpact > 0.0f) @@ -441,7 +448,7 @@ namespace Barotrauma for (int i = -1; i < 2; i += 2) { Vector2 footPos = GetColliderBottom(); - footPos = new Vector2(waist.SimPosition.X + Math.Sign(StepSize.Value.X * i) * Dir * 0.3f, footPos.Y - 0.1f * RagdollParams.JointScale); + footPos = new Vector2(waist.SimPosition.X + Math.Sign(WalkParams.StepSize.X * i) * Dir * 0.3f, footPos.Y - 0.1f * RagdollParams.JointScale); var foot = i == -1 ? rightFoot : leftFoot; MoveLimb(foot, footPos, Math.Abs(foot.SimPosition.X - footPos.X) * 100.0f, true); } @@ -481,7 +488,7 @@ namespace Barotrauma swimmingStateLockTimer -= deltaTime; - if (forceStanding) + if (forceStanding || character.AnimController.AnimationTestPose) { swimming = false; } @@ -542,12 +549,6 @@ namespace Barotrauma Limb leftLeg = GetLimb(LimbType.LeftLeg); Limb rightLeg = GetLimb(LimbType.RightLeg); - float limpAmount = - character.CharacterHealth.GetAfflictionStrength("damage", leftFoot, true) + - character.CharacterHealth.GetAfflictionStrength("damage", rightFoot, true) + - character.CharacterHealth.GetAfflictionStrength("spaceherpes"); - limpAmount = MathHelper.Clamp(limpAmount / 100.0f, 0.0f, 1.0f); - float walkCycleMultiplier = 1.0f; if (Stairs != null) { @@ -582,6 +583,11 @@ namespace Barotrauma stepSize.Y *= walkPosY; float footMid = colliderPos.X; + + var herpes = character.CharacterHealth.GetAffliction("spaceherpes", false); + float herpesAmount = herpes == null ? 0 : herpes.Strength / herpes.Prefab.MaxStrength; + float legDamage = character.GetLegPenalty(startSum: -0.1f) * 1.1f; + float limpAmount = MathHelper.Lerp(0, 1, legDamage + herpesAmount); if (limpAmount > 0.0f) { //make the footpos oscillate when limping @@ -652,6 +658,7 @@ namespace Barotrauma (float)Math.Sin(WalkPos * CurrentGroundedParams.StepLiftFrequency + MathHelper.Pi * CurrentGroundedParams.StepLiftOffset) * (CurrentGroundedParams.StepLiftAmount / 100); float y = colliderPos.Y + stepLift; + if (TorsoPosition.HasValue) { y += TorsoPosition.Value; @@ -690,6 +697,7 @@ namespace Barotrauma foreach (Limb limb in Limbs) { + if (limb.IsSevered) { continue; } MoveLimb(limb, limb.SimPosition + move, 15.0f, true); } @@ -947,8 +955,6 @@ namespace Barotrauma torso.body.MoveToPos(Collider.SimPosition + new Vector2((float)Math.Sin(-Collider.Rotation), (float)Math.Cos(-Collider.Rotation)) * 0.4f, 5.0f); - if (TargetMovement == Vector2.Zero) { return; } - movement = MathUtils.SmoothStep(movement, TargetMovement, 0.3f); if (TorsoAngle.HasValue) @@ -1001,29 +1007,31 @@ namespace Barotrauma } WalkPos += movement.Length(); - legCyclePos += Vector2.Normalize(movement).Length(); + legCyclePos += Math.Min(movement.LengthSquared() + Collider.AngularVelocity, 1.0f); handCyclePos += MathHelper.ToRadians(CurrentSwimParams.HandCycleSpeed) * Math.Sign(movement.X); var waist = GetLimb(LimbType.Waist); footPos = waist == null ? Vector2.Zero : waist.SimPosition - new Vector2((float)Math.Sin(-Collider.Rotation), (float)Math.Cos(-Collider.Rotation)) * (upperLegLength + lowerLegLength); - Vector2 transformedFootPos = new Vector2((float)Math.Sin(legCyclePos / CurrentSwimParams.LegCycleLength / character.SpeedMultiplier) * CurrentSwimParams.LegMoveAmount, 0.0f); + Vector2 transformedFootPos = new Vector2((float)Math.Sin(legCyclePos / CurrentSwimParams.LegCycleLength) * CurrentSwimParams.LegMoveAmount, 0.0f); transformedFootPos = Vector2.Transform(transformedFootPos, Matrix.CreateRotationZ(Collider.Rotation)); + float torque = CurrentSwimParams.FootRotateStrength * character.SpeedMultiplier * (1.2f - character.GetLegPenalty()); if (rightFoot != null && !rightFoot.Disabled) { - FootIK(rightFoot, footPos - transformedFootPos, CurrentSwimParams.FootRotateStrength, CurrentSwimParams.FootRotateStrength, CurrentSwimParams.FootAngleInRadians); + FootIK(rightFoot, footPos - transformedFootPos, torque, torque, CurrentSwimParams.FootAngleInRadians); } if (leftFoot != null && !leftFoot.Disabled) { - FootIK(leftFoot, footPos + transformedFootPos, CurrentSwimParams.FootRotateStrength, CurrentSwimParams.FootRotateStrength, CurrentSwimParams.FootAngleInRadians); + FootIK(leftFoot, footPos + transformedFootPos, torque, torque, CurrentSwimParams.FootAngleInRadians); } handPos = (torso.SimPosition + head.SimPosition) / 2.0f; - //at the surface, not moving sideways -> hands just float around - if (!headInWater && TargetMovement.X == 0.0f && TargetMovement.Y > 0) + //at the surface, not moving sideways OR not moving at all + // -> hands just float around + if ((!headInWater && TargetMovement.X == 0.0f && TargetMovement.Y > 0) || TargetMovement.LengthSquared() < 0.001f) { - handPos.X = handPos.X + Dir * 0.6f; + handPos += MathUtils.RotatePoint(Vector2.UnitX * Dir * 0.6f, torso.Rotation); float wobbleAmount = 0.1f; @@ -1060,7 +1068,7 @@ namespace Barotrauma rightHandPos.X = (Dir == 1.0f) ? Math.Max(0.3f, rightHandPos.X) : Math.Min(-0.3f, rightHandPos.X); rightHandPos = Vector2.Transform(rightHandPos, rotationMatrix); - HandIK(rightHand, handPos + rightHandPos, CurrentSwimParams.HandMoveStrength * character.SpeedMultiplier); + HandIK(rightHand, handPos + rightHandPos, CurrentSwimParams.HandMoveStrength * character.SpeedMultiplier * (1 - Character.GetRightHandPenalty())); } if (leftHand != null && !leftHand.Disabled) @@ -1069,7 +1077,7 @@ namespace Barotrauma leftHandPos.X = (Dir == 1.0f) ? Math.Max(0.3f, leftHandPos.X) : Math.Min(-0.3f, leftHandPos.X); leftHandPos = Vector2.Transform(leftHandPos, rotationMatrix); - HandIK(leftHand, handPos + leftHandPos, CurrentSwimParams.HandMoveStrength * character.SpeedMultiplier); + HandIK(leftHand, handPos + leftHandPos, CurrentSwimParams.HandMoveStrength * character.SpeedMultiplier * (1 - Character.GetLeftHandPenalty())); } } @@ -1251,31 +1259,39 @@ namespace Barotrauma Limb head = GetLimb(LimbType.Head); Limb torso = GetLimb(LimbType.Torso); - - //if the head is moving, try to protect it with the hands - if (head.LinearVelocity.LengthSquared() > 1.0f && !head.IsSevered) + + if (head != null && head.LinearVelocity.LengthSquared() > 1.0f && !head.IsSevered) { + //if the head is moving, try to protect it with the hands Limb leftHand = GetLimb(LimbType.LeftHand); Limb rightHand = GetLimb(LimbType.RightHand); //move hands in front of the head in the direction of the movement Vector2 protectPos = head.SimPosition + Vector2.Normalize(head.LinearVelocity); - if (!rightHand.IsSevered) HandIK(rightHand, protectPos, strength * 0.1f); - if (!leftHand.IsSevered) HandIK(leftHand, protectPos, strength * 0.1f); + if (rightHand != null && !rightHand.IsSevered) + { + HandIK(rightHand, protectPos, strength * 0.1f); + } + if (leftHand != null && !leftHand.IsSevered) + { + HandIK(leftHand, protectPos, strength * 0.1f); + } } + if (torso == null) { return; } //attempt to make legs stay in a straight line with the torso to prevent the character from doing a split for (int i = 0; i < 2; i++) { var thigh = i == 0 ? GetLimb(LimbType.LeftThigh) : GetLimb(LimbType.RightThigh); - if (thigh.IsSevered) continue; + if (thigh == null) { continue; } + if (thigh.IsSevered) { continue; } float thighDiff = Math.Abs(MathUtils.GetShortestAngle(torso.Rotation, thigh.Rotation)); float thighTorque = thighDiff * thigh.Mass * Math.Sign(torso.Rotation - thigh.Rotation) * 5.0f; thigh.body.ApplyTorque(thighTorque * strength); var leg = i == 0 ? GetLimb(LimbType.LeftLeg) : GetLimb(LimbType.RightLeg); - if (leg.IsSevered) continue; + if (leg == null || leg.IsSevered) { continue; } float legDiff = Math.Abs(MathUtils.GetShortestAngle(torso.Rotation, leg.Rotation)); float legTorque = legDiff * leg.Mass * Math.Sign(torso.Rotation - leg.Rotation) * 5.0f; leg.body.ApplyTorque(legTorque * strength); @@ -1410,7 +1426,7 @@ namespace Barotrauma SteamAchievementManager.OnCharacterRevived(target, character); lastReviveTime = (float)Timing.TotalTime; #if SERVER - GameMain.Server?.KarmaManager?.OnCharacterHealthChanged(target, character, damage: Math.Min(prevVitality - target.Vitality, 0.0f)); + GameMain.Server?.KarmaManager?.OnCharacterHealthChanged(target, character, damage: Math.Min(prevVitality - target.Vitality, 0.0f), stun: 0.0f); #endif //reset attacker, we don't want the character to start attacking us //because we caused a bit of damage to them during CPR @@ -1540,6 +1556,11 @@ namespace Barotrauma { sourceSimPos -= character.SelectedCharacter.Submarine.SimPosition; } + else if (character.Submarine != null && character.SelectedCharacter.Submarine != null && character.Submarine != character.SelectedCharacter.Submarine) + { + targetSimPos += character.SelectedCharacter.Submarine.SimPosition; + targetSimPos -= character.Submarine.SimPosition; + } var body = Submarine.CheckVisibility(sourceSimPos, targetSimPos, ignoreSubs: true); if (body != null) { @@ -1553,8 +1574,8 @@ namespace Barotrauma Vector2 diff = ConvertUnits.ToSimUnits(targetLimb.WorldPosition - pullLimb.WorldPosition); - Vector2 targetAnchor = targetLimb.SimPosition; - float targetForce = 0.0f; + Vector2 targetAnchor; + float targetForce; pullLimb.PullJointEnabled = true; if (targetLimb.type == LimbType.Torso || targetLimb == target.AnimController.MainLimb) { @@ -1624,6 +1645,7 @@ namespace Barotrauma if (!target.AllowInput) { + target.AnimController.Stairs = Stairs; target.AnimController.IgnorePlatforms = IgnorePlatforms; target.AnimController.TargetMovement = TargetMovement; } @@ -1981,6 +2003,8 @@ namespace Barotrauma foreach (Limb limb in Limbs) { + if (limb.IsSevered) { continue; } + bool mirror = false; bool flipAngle = false; bool wrapAngle = false; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs index 20f981e2e..14de676c3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs @@ -55,7 +55,11 @@ namespace Barotrauma { if (limbs == null) { - DebugConsole.ThrowError("Attempted to access a potentially removed ragdoll. Character: " + character.Name + ", id: " + character.ID + ", removed: " + character.Removed + ", ragdoll removed: " + !list.Contains(this)); + string errorMsg = "Attempted to access a potentially removed ragdoll. Character: " + character.Name + ", id: " + character.ID + ", removed: " + character.Removed + ", ragdoll removed: " + !list.Contains(this); +#if DEBUG || UNSTABLE + errorMsg += '\n' + Environment.StackTrace; +#endif + DebugConsole.ThrowError(errorMsg); GameAnalyticsManager.AddErrorEventOnce( "Ragdoll.Limbs:AccessRemoved", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, @@ -80,7 +84,7 @@ namespace Barotrauma frozen = value; Collider.FarseerBody.LinearDamping = frozen ? (1.5f / (float)Timing.Step) : 0.0f; - Collider.FarseerBody.AngularDamping = frozen ? (1.5f / (float)Timing.Step) : 0.0f; + Collider.FarseerBody.AngularDamping = frozen ? (1.5f / (float)Timing.Step) : PhysicsBody.DefaultAngularDamping; Collider.FarseerBody.IgnoreGravity = frozen; //Collider.PhysEnabled = !frozen; @@ -93,12 +97,17 @@ namespace Barotrauma private bool simplePhysicsEnabled; + public Character Character => character; protected Character character; protected float strongestImpact; private float splashSoundTimer; + //the ragdoll builds a "tolerance" to the flow force when being pushed by water. + //Allows sudden forces (breach, letting water through a door) to heavily push the character around while ensuring flowing water won't make the characters permanently stuck. + private float flowForceTolerance, flowStunTolerance; + //the movement speed of the ragdoll public Vector2 movement; //the target speed towards which movement is interpolated @@ -152,8 +161,8 @@ namespace Barotrauma } set { - if (value == colliderIndex || collider == null) return; - if (value >= collider.Count || value < 0) return; + if (value == colliderIndex || collider == null) { return; } + if (value >= collider.Count || value < 0) { return; } if (collider[colliderIndex].height < collider[value].height) { @@ -161,10 +170,9 @@ namespace Barotrauma pos1.Y -= collider[colliderIndex].height * ColliderHeightFromFloor; Vector2 pos2 = pos1; pos2.Y += collider[value].height * 1.1f; - if (GameMain.World.RayCast(pos1, pos2).Any(f => f.CollisionCategories.HasFlag(Physics.CollisionWall))) return; + if (GameMain.World.RayCast(pos1, pos2).Any(f => f.CollisionCategories.HasFlag(Physics.CollisionWall))) { return; } } - Vector2 pos = collider[colliderIndex].SimPosition; pos.Y -= collider[colliderIndex].height * 0.5f; pos.Y += collider[value].height * 0.5f; @@ -212,7 +220,7 @@ namespace Barotrauma mainLimb = torso ?? head; if (mainLimb == null) { - mainLimb = Limbs.FirstOrDefault(); + mainLimb = Limbs.FirstOrDefault(l => !l.IsSevered && !l.ignoreCollisions); } } return mainLimb; @@ -234,13 +242,13 @@ namespace Barotrauma get { return simplePhysicsEnabled; } set { - if (value == simplePhysicsEnabled) return; + if (value == simplePhysicsEnabled) { return; } simplePhysicsEnabled = value; foreach (Limb limb in Limbs) { - if (limb.IsSevered) continue; + if (limb.IsSevered) { continue; } if (limb.body == null) { DebugConsole.ThrowError("Limb has no body! (" + (character != null ? character.Name : "Unknown character") + ", " + limb.type.ToString()); @@ -292,8 +300,6 @@ namespace Barotrauma public float ImpactTolerance => RagdollParams.ImpactTolerance; public bool Draggable => RagdollParams.Draggable; public bool CanEnterSubmarine => RagdollParams.CanEnterSubmarine; - public bool CanAttackSubmarine => Limbs.Any(l => l.attack != null && l.attack.IsValidTarget(AttackTarget.Structure)); - public bool CanAttackCharacters => Limbs.Any(l => l.attack != null && l.attack.IsValidTarget(AttackTarget.Character)); public float Dir => dir == Direction.Left ? -1.0f : 1.0f; @@ -320,6 +326,7 @@ namespace Barotrauma Submarine currSubmarine = currentHull?.Submarine; foreach (Limb limb in Limbs) { + if (limb.IsSevered) { continue; } limb.body.Submarine = currSubmarine; } Collider.Submarine = currSubmarine; @@ -373,7 +380,7 @@ namespace Barotrauma foreach (var kvp in items) { int id = kvp.Key.ID; - // This can be the case if we manipulate the ragdoll in runtime (husk appendage, limb severance) + // This can be the case if we manipulate the ragdoll at runtime (husk appendage, limb removal in the character editor) if (id > limbs.Length - 1) { continue; } var limb = limbs[id]; var itemList = kvp.Value; @@ -633,10 +640,7 @@ namespace Barotrauma Vector2 colliderBottom = GetColliderBottom(); if (structure.IsPlatform) { - if (IgnorePlatforms) { return false; } - - //the collision is ignored if the lowest limb is under the platform - //if (lowestLimb==null || lowestLimb.Position.Y < structure.Rect.Y) return false; + if (IgnorePlatforms || currentHull == null) { return false; } if (colliderBottom.Y < ConvertUnits.ToSimUnits(structure.Rect.Y - 5)) { return false; } if (f1.Body.Position.Y < ConvertUnits.ToSimUnits(structure.Rect.Y - 5)) { return false; } @@ -719,12 +723,14 @@ namespace Barotrauma ImpactProjSpecific(impact, f1.Body); } - - public void SeverLimbJoint(LimbJoint limbJoint, bool playSound = true) + + private readonly List connectedLimbs = new List(); + private readonly List checkedJoints = new List(); + public bool SeverLimbJoint(LimbJoint limbJoint, bool playSound = true) { if (!limbJoint.CanBeSevered || limbJoint.IsSevered) { - return; + return false; } limbJoint.IsSevered = true; @@ -737,9 +743,8 @@ namespace Barotrauma limbJoint.LimbA.body.ApplyLinearImpulse(limbDiff * mass, (limbJoint.LimbA.SimPosition + limbJoint.LimbB.SimPosition) / 2.0f); limbJoint.LimbB.body.ApplyLinearImpulse(-limbDiff * mass, (limbJoint.LimbA.SimPosition + limbJoint.LimbB.SimPosition) / 2.0f); - List connectedLimbs = new List(); - List checkedJoints = new List(); - + connectedLimbs.Clear(); + checkedJoints.Clear(); GetConnectedLimbs(connectedLimbs, checkedJoints, MainLimb); foreach (Limb limb in Limbs) { @@ -748,11 +753,11 @@ namespace Barotrauma } SeverLimbJointProjSpecific(limbJoint, playSound: true); - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) { GameMain.NetworkMember.CreateEntityEvent(character, new object[] { NetEntityEvent.Type.Status }); } + return true; } partial void SeverLimbJointProjSpecific(LimbJoint limbJoint, bool playSound); @@ -763,7 +768,7 @@ namespace Barotrauma foreach (LimbJoint joint in LimbJoints) { - if (joint.IsSevered || checkedJoints.Contains(joint)) continue; + if (joint.IsSevered || checkedJoints.Contains(joint)) { continue; } if (joint.LimbA == limb) { if (!connectedLimbs.Contains(joint.LimbB)) @@ -860,7 +865,7 @@ namespace Barotrauma { for (int i = 0; i < Limbs.Length; i++) { - if (Limbs[i] == null) continue; + if (Limbs[i] == null) { continue; } Limbs[i].PullJointEnabled = false; } } @@ -966,8 +971,8 @@ namespace Barotrauma else { if (character.Position.X < gap.Rect.X || character.Position.X > gap.Rect.Right) continue; - if (Math.Sign((gap.Rect.Y - gap.Rect.Height / 2) - (currentHull.Rect.Center.Y - currentHull.Rect.Height / 2)) != - Math.Sign(character.Position.Y - (currentHull.Rect.Center.Y - currentHull.Rect.Height / 2))) + if (Math.Sign((gap.Rect.Y - gap.Rect.Height / 2) - (currentHull.Rect.Y - currentHull.Rect.Height / 2)) != + Math.Sign(character.Position.Y - (currentHull.Rect.Y - currentHull.Rect.Height / 2))) { continue; } @@ -981,8 +986,8 @@ namespace Barotrauma { foreach (Limb limb in Limbs) { - if (limb.IsSevered) continue; - if (limb.body.FarseerBody.ContactList == null) continue; + if (limb.IsSevered) { continue; } + if (limb.body.FarseerBody.ContactList == null) { continue; } ContactEdge ce = limb.body.FarseerBody.ContactList; while (ce != null && ce.Contact != null) @@ -994,7 +999,7 @@ namespace Barotrauma foreach (Limb limb in Limbs) { - if (limb.IsSevered) continue; + if (limb.IsSevered) { continue; } limb.body.LinearVelocity += velocityChange; } @@ -1019,15 +1024,15 @@ namespace Barotrauma Category collisionCategory = (IgnorePlatforms) ? wall | Physics.CollisionProjectile | Physics.CollisionStairs : wall | Physics.CollisionProjectile | Physics.CollisionPlatform | Physics.CollisionStairs; - - if (collisionCategory == prevCollisionCategory) return; + + if (collisionCategory == prevCollisionCategory) { return; } prevCollisionCategory = collisionCategory; Collider.CollidesWith = collisionCategory | Physics.CollisionItemBlocking; foreach (Limb limb in Limbs) { - if (limb.ignoreCollisions || limb.IsSevered) continue; + if (limb.ignoreCollisions || limb.IsSevered) { continue; } try { @@ -1080,8 +1085,6 @@ namespace Barotrauma CheckDistFromCollider(); UpdateCollisionCategories(); - Vector2 flowForce = Vector2.Zero; - FindHull(); PreventOutsideCollision(); @@ -1103,10 +1106,7 @@ namespace Barotrauma } else { - flowForce = GetFlowForce(); - headInWater = false; - inWater = false; if (currentHull.WaterVolume > currentHull.Volume * 0.95f) { @@ -1128,7 +1128,7 @@ namespace Barotrauma if (lowerHull != null) floorY = ConvertUnits.ToSimUnits(lowerHull.Rect.Y - lowerHull.Rect.Height); } } - float standHeight = + float standHeight = HeadPosition.HasValue ? HeadPosition.Value : TorsoPosition.HasValue ? TorsoPosition.Value : Collider.GetMaxExtent() * 0.5f; @@ -1139,10 +1139,7 @@ namespace Barotrauma } } - if (flowForce.LengthSquared() > 0.001f) - { - Collider.ApplyForce(flowForce, maxVelocity: NetConfig.MaxPhysicsBodyVelocity); - } + UpdateHullFlowForces(deltaTime); if (currentHull == null || currentHull.WaterVolume > currentHull.Volume * 0.95f || @@ -1151,7 +1148,6 @@ namespace Barotrauma Collider.ApplyWaterForces(); } - foreach (Limb limb in Limbs) { //find the room which the limb is in @@ -1176,14 +1172,7 @@ namespace Barotrauma if (limb.Position.Y < limbHull.Surface) { limb.inWater = true; - - if (flowForce.LengthSquared() > 0.001f) - { - limb.body.ApplyForce(flowForce, maxVelocity: NetConfig.MaxPhysicsBodyVelocity); - } - surfaceY = limbHull.Surface; - if (limb.type == LimbType.Head) { headInWater = true; @@ -1228,6 +1217,8 @@ namespace Barotrauma private void CheckBodyInRest(float deltaTime) { + if (SimplePhysicsEnabled) { return; } + if (InWater || Collider.LinearVelocity.LengthSquared() > 0.01f || character.SelectedBy != null || !character.IsDead) { bodyInRestTimer = 0.0f; @@ -1253,6 +1244,12 @@ namespace Barotrauma private int validityResets; private bool CheckValidity() { + if (limbs == null) + { + DebugConsole.ThrowError("Attempted to check the validity of a potentially removed ragdoll. Character: " + character.Name + ", id: " + character.ID + ", removed: " + character.Removed + ", ragdoll removed: " + !list.Contains(this)); + Invalid = true; + return false; + } bool isColliderValid = CheckValidity(Collider); bool limbsValid = true; foreach (Limb limb in limbs) @@ -1275,8 +1272,8 @@ namespace Barotrauma Collider.SetTransform(Vector2.Zero, 0.0f); foreach (Limb limb in Limbs) { - limb.body.SetTransform(Collider.SimPosition, 0.0f); - limb.body.ResetDynamics(); + limb.body?.SetTransform(Collider.SimPosition, 0.0f); + limb.body?.ResetDynamics(); } Frozen = true; } @@ -1350,6 +1347,74 @@ namespace Barotrauma partial void Splash(Limb limb, Hull limbHull); + private void UpdateHullFlowForces(float deltaTime) + { + if (currentHull == null) { return; } + + const float StunForceThreshold = 5.0f; + const float StunDuration = 0.5f; + const float ToleranceIncreaseSpeed = 5.0f; + const float ToleranceDecreaseSpeed = 1.0f; + + //how much distance to a gap affects the force it exerts on the character + const float DistanceFactor = 0.5f; + const float ForceMultiplier = 0.035f; + + Vector2 flowForce = Vector2.Zero; + foreach (Gap gap in Gap.GapList) + { + if (gap.Open <= 0.0f || !gap.linkedTo.Contains(currentHull) || gap.LerpedFlowForce.LengthSquared() < 0.01f) { continue; } + float dist = Vector2.Distance(MainLimb.WorldPosition, gap.WorldPosition) * DistanceFactor; + flowForce += Vector2.Normalize(gap.LerpedFlowForce) * (Math.Max(gap.LerpedFlowForce.Length() - dist, 0.0f) * ForceMultiplier); + } + + //throwing conscious/moving characters around takes more force -> double the flow force + if (character.CanMove) { flowForce *= 2.0f; } + + float flowForceMagnitude = flowForce.Length(); + float limbMultipier = limbs.Count(l => l.inWater) / (float)limbs.Length; + //if the force strong enough, stun the character to let it get thrown around by the water + if ((flowForceMagnitude * limbMultipier) - flowStunTolerance > StunForceThreshold) + { + character.Stun = Math.Max(character.Stun, StunDuration); + flowStunTolerance = Math.Max(flowStunTolerance, flowForceMagnitude); + } + + if (character == Character.Controlled && inWater && Screen.Selected?.Cam != null) + { + float shakeStrength = Math.Min(flowForceMagnitude / 10.0f, 5.0f) * limbMultipier; + Screen.Selected.Cam.Shake = Math.Max(Screen.Selected.Cam.Shake, shakeStrength); + } + + if (flowForceMagnitude > 0.0001f) + { + flowForce = Vector2.Normalize(flowForce) * Math.Max(flowForceMagnitude - flowForceTolerance, 0.0f); + } + + if (flowForceTolerance <= flowForceMagnitude * 1.5f && inWater) + { + //build up "tolerance" to the flow force + //ensures the character won't get permanently stuck by forces, while allowing sudden changes in flow to push the character hard + flowForceTolerance += deltaTime * ToleranceIncreaseSpeed; + flowStunTolerance = Math.Max(flowStunTolerance, flowForceTolerance); + } + else + { + flowForceTolerance = Math.Max(flowForceTolerance - deltaTime * ToleranceDecreaseSpeed, 0.0f); + flowStunTolerance = Math.Max(flowStunTolerance - deltaTime * ToleranceDecreaseSpeed, 0.0f); + } + + if (flowForce.LengthSquared() > 0.001f) + { + Collider.ApplyForce(flowForce, maxVelocity: NetConfig.MaxPhysicsBodyVelocity); + foreach (Limb limb in limbs) + { + if (!limb.inWater) { continue; } + limb.body.ApplyForce(flowForce, maxVelocity: NetConfig.MaxPhysicsBodyVelocity); + } + } + } + private void RefreshFloorY(Limb refLimb = null, bool ignoreStairs = false) { PhysicsBody refBody = refLimb == null ? Collider : refLimb.body; @@ -1487,7 +1552,7 @@ namespace Barotrauma foreach (Limb limb in Limbs) { - if (limb.IsSevered) continue; + if (limb.IsSevered) { continue; } //check visibility from the new position of the collider to the new position of this limb Vector2 movePos = limb.SimPosition + limbMoveAmount; @@ -1551,7 +1616,7 @@ namespace Barotrauma Vector2 forceDir = diff / (float)Math.Sqrt(distSqrd); foreach (Limb limb in Limbs) { - if (limb.IsSevered) continue; + if (limb.IsSevered) { continue; } limb.body.CollidesWith = Physics.CollisionNone; limb.body.ApplyForce(forceDir * limb.Mass * 10.0f, maxVelocity: 10.0f); } @@ -1597,28 +1662,37 @@ namespace Barotrauma UpdateNetPlayerPositionProjSpecific(deltaTime, lowestSubPos); } - private Vector2 GetFlowForce() - { - Vector2 limbPos = Limbs[0].Position; - - Vector2 force = Vector2.Zero; - foreach (Gap gap in Gap.GapList) - { - if (gap.Open <= 0.0f || gap.FlowTargetHull != currentHull || gap.LerpedFlowForce.LengthSquared() < 0.01f) continue; - - Vector2 gapPos = gap.SimPosition; - float dist = Vector2.Distance(limbPos, gapPos); - force += Vector2.Normalize(gap.LerpedFlowForce) * (Math.Max(gap.LerpedFlowForce.Length() - dist, 0.0f) / 500.0f); - } - return force; - } - /// /// Note that if there are multiple limbs of the same type, only the first of them is found in the dictionary. /// - public Limb GetLimb(LimbType limbType) + public Limb GetLimb(LimbType limbType, bool excludeSevered = true) { - limbDictionary.TryGetValue(limbType, out Limb limb); + Limb limb = null; + if (HasMultipleLimbsOfSameType) + { + for (int i = 0; i < 10; i++) + { + limbDictionary.TryGetValue(limbType, out limb); + if (limb == null) + { + // No limbs found + break; + } + if (!excludeSevered || !limb.IsSevered) + { + // Found a valid limb + break; + } + } + } + else + { + limbDictionary.TryGetValue(limbType, out limb); + } + if (excludeSevered && limb != null && limb.IsSevered) + { + limb = null; + } return limb; } @@ -1661,10 +1735,15 @@ namespace Barotrauma Limb lowestLimb = null; foreach (Limb limb in Limbs) { + if (limb.IsSevered) { continue; } if (lowestLimb == null) + { lowestLimb = limb; + } else if (limb.SimPosition.Y < lowestLimb.SimPosition.Y) + { lowestLimb = limb; + } } return lowestLimb; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs index c722ecb4b..4729ea027 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs @@ -260,7 +260,7 @@ namespace Barotrauma return totalDamage; } - public Attack(float damage, float bleedingDamage, float burnDamage, float structureDamage, float range = 0.0f) + public Attack(float damage, float bleedingDamage, float burnDamage, float structureDamage, float itemDamage, float range = 0.0f) { if (damage > 0.0f) Afflictions.Add(AfflictionPrefab.InternalDamage.Instantiate(damage), null); if (bleedingDamage > 0.0f) Afflictions.Add(AfflictionPrefab.Bleeding.Instantiate(bleedingDamage), null); @@ -269,6 +269,7 @@ namespace Barotrauma Range = range; DamageRange = range; StructureDamage = structureDamage; + ItemDamage = itemDamage; } public Attack(XElement element, string parentDebugName) @@ -315,11 +316,6 @@ namespace Barotrauma continue; } } - - //float afflictionStrength = subElement.GetAttributeFloat(1.0f, "amount", "strength"); - //var affliction = afflictionPrefab.Instantiate(afflictionStrength); - //Afflictions.Add(affliction, subElement); - break; case "conditional": foreach (XAttribute attribute in subElement.Attributes()) @@ -346,14 +342,18 @@ namespace Barotrauma afflictionPrefab = AfflictionPrefab.List.FirstOrDefault(ap => ap.Identifier.Equals(afflictionIdentifier, System.StringComparison.OrdinalIgnoreCase)); if (afflictionPrefab != null) { - float afflictionStrength = subElement.GetAttributeFloat(1.0f, "amount", "strength"); - affliction = afflictionPrefab.Instantiate(afflictionStrength); + affliction = afflictionPrefab.Instantiate(0.0f); } else { affliction = new Affliction(null, 0); } affliction.Deserialize(subElement); + //backwards compatibility + if (subElement.Attribute("amount") != null && subElement.Attribute("strength") == null) + { + affliction.Strength = subElement.GetAttributeFloat("amount", 0.0f); + } // add the affliction anyway, so that it can be shown in the editor. Afflictions.Add(affliction, subElement); } @@ -515,10 +515,10 @@ namespace Barotrauma public void SetCoolDown() { float randomFraction = CoolDown * CoolDownRandomFactor; - CurrentRandomCoolDown = MathHelper.Lerp(-randomFraction, randomFraction, Rand.Value(Rand.RandSync.Server)); + CurrentRandomCoolDown = MathHelper.Lerp(-randomFraction, randomFraction, Rand.Value()); CoolDownTimer = CoolDown + CurrentRandomCoolDown; randomFraction = SecondaryCoolDown * CoolDownRandomFactor; - SecondaryCoolDownTimer = SecondaryCoolDown + MathHelper.Lerp(-randomFraction, randomFraction, Rand.Value(Rand.RandSync.Server)); + SecondaryCoolDownTimer = SecondaryCoolDown + MathHelper.Lerp(-randomFraction, randomFraction, Rand.Value()); } public void ResetCoolDown() @@ -571,18 +571,14 @@ namespace Barotrauma public bool IsValidTarget(AttackTarget targetType) => TargetType == AttackTarget.Any || TargetType == targetType; - public bool IsValidTarget(Entity target) + public bool IsValidTarget(IDamageable target) { - switch (TargetType) + return TargetType switch { - case AttackTarget.Character: - return target is Character; - case AttackTarget.Structure: - return !(target is Character); - case AttackTarget.Any: - default: - return true; - } + AttackTarget.Character => target is Character, + AttackTarget.Structure => !(target is Character), + _ => true, + }; } public Vector2 CalculateAttackPhase(TransitionMode easing = TransitionMode.Linear) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index fc0f34d0c..53cd51fdf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -3,7 +3,7 @@ using FarseerPhysics; using FarseerPhysics.Dynamics.Joints; using Microsoft.Xna.Framework; using System; -using System.IO; +using Barotrauma.IO; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; @@ -43,6 +43,7 @@ namespace Barotrauma foreach (Limb limb in AnimController.Limbs) { + if (limb.IsSevered) { continue; } if (limb.body != null) { limb.body.Enabled = enabled; @@ -59,6 +60,7 @@ namespace Barotrauma public bool IsRemotePlayer; public bool IsPlayer => Controlled == this || IsRemotePlayer; + public bool IsBot => !IsPlayer && AIController is HumanAIController humanAI && humanAI.Enabled; public readonly Dictionary Properties; public Dictionary SerializableProperties @@ -234,6 +236,7 @@ namespace Barotrauma { get { + if (info != null && !string.IsNullOrWhiteSpace(info.Name)) { return info.Name; } var displayName = Params.DisplayName; if (string.IsNullOrWhiteSpace(displayName)) { @@ -601,7 +604,9 @@ namespace Barotrauma { errorMsg += " AnimController.Collider == null"; } - +#if DEBUG || UNSTABLE + errorMsg += '\n' + Environment.StackTrace; +#endif DebugConsole.NewMessage(errorMsg, Color.Red); GameAnalyticsManager.AddErrorEventOnce( "Character.SimPosition:AccessRemoved", @@ -1137,22 +1142,76 @@ namespace Barotrauma greatestNegativeSpeedMultiplier = 1f; } + /// + /// Speed reduction from the current limb specific damage. Min 0, max 1. + /// + public float GetTemporarySpeedReduction() + { + float reduction = 0; + reduction = CalculateMovementPenalty(AnimController.GetLimb(LimbType.RightFoot, excludeSevered: false), reduction); + reduction = CalculateMovementPenalty(AnimController.GetLimb(LimbType.LeftFoot, excludeSevered: false), reduction); + reduction = CalculateMovementPenalty(AnimController.GetLimb(LimbType.RightHand, excludeSevered: false), reduction); + reduction = CalculateMovementPenalty(AnimController.GetLimb(LimbType.LeftHand, excludeSevered: false), reduction); + int totalTailLimbs = 0; + int destroyedTailLimbs = 0; + foreach (var limb in AnimController.Limbs) + { + if (limb.type == LimbType.Tail) + { + totalTailLimbs++; + if (limb.IsSevered) + { + destroyedTailLimbs++; + } + } + } + if (destroyedTailLimbs > 0) + { + reduction += MathHelper.Lerp(0, AnimController.InWater ? 1f : 0.5f, (float)destroyedTailLimbs / totalTailLimbs); + } + return Math.Clamp(reduction, 0, 1f); + } + + private float CalculateMovementPenalty(Limb limb, float sum, float max = 0.4f) + { + if (limb != null) + { + sum += MathHelper.Lerp(0, max, CharacterHealth.GetLimbDamage(limb)); + } + return Math.Clamp(sum, 0, 1f); + } + + public float GetRightHandPenalty() => CalculateMovementPenalty(AnimController.GetLimb(LimbType.RightHand, excludeSevered: false), 0, max: 1); + public float GetLeftHandPenalty() => CalculateMovementPenalty(AnimController.GetLimb(LimbType.LeftHand, excludeSevered: false), 0, max: 1); + + public float GetLegPenalty(float startSum = 0) + { + float sum = startSum; + foreach (var limb in AnimController.Limbs) + { + switch (limb.type) + { + case LimbType.RightFoot: + case LimbType.LeftFoot: + sum += CalculateMovementPenalty(limb, sum, max: 0.5f); + break; + } + } + return Math.Clamp(sum, 0, 1f); + } + public float ApplyTemporarySpeedLimits(float speed) { - var leftFoot = AnimController.GetLimb(LimbType.LeftFoot); - if (leftFoot != null) + float max; + if (AnimController is HumanoidAnimController) { - float footAfflictionStrength = CharacterHealth.GetAfflictionStrength("damage", leftFoot, true); - speed *= MathHelper.Lerp(1.0f, 0.4f, MathHelper.Clamp(footAfflictionStrength / 80.0f, 0.0f, 1.0f)); + max = AnimController.InWater ? 0.5f : 0.7f; } - - var rightFoot = AnimController.GetLimb(LimbType.RightFoot); - if (rightFoot != null) + else { - float footAfflictionStrength = CharacterHealth.GetAfflictionStrength("damage", rightFoot, true); - speed *= MathHelper.Lerp(1.0f, 0.4f, MathHelper.Clamp(footAfflictionStrength / 80.0f, 0.0f, 1.0f)); + max = AnimController.InWater ? 0.9f : 0.5f; } - + speed *= 1f - MathHelper.Lerp(0, max, GetTemporarySpeedReduction()); return speed; } @@ -1251,60 +1310,74 @@ namespace Barotrauma { attackCoolDown -= deltaTime; } - else if (IsKeyDown(InputType.Attack)) + else if (IsKeyDown(InputType.Attack) && (IsRemotePlayer || Controlled == this || (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient))) { + Vector2 attackPos = SimPosition + ConvertUnits.ToSimUnits(cursorPosition - Position); + List ignoredBodies = AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(); + ignoredBodies.Add(AnimController.Collider.FarseerBody); + + var body = Submarine.PickBody( + SimPosition, + attackPos, + ignoredBodies, + Physics.CollisionCharacter | Physics.CollisionWall); + + IDamageable attackTarget = null; + if (body != null) + { + attackPos = Submarine.LastPickedPosition; + + if (body.UserData is Submarine sub) + { + body = Submarine.PickBody( + SimPosition - ((Submarine)body.UserData).SimPosition, + attackPos - ((Submarine)body.UserData).SimPosition, + ignoredBodies, + Physics.CollisionWall); + + if (body != null) + { + attackPos = Submarine.LastPickedPosition + sub.SimPosition; + attackTarget = body.UserData as IDamageable; + } + } + else + { + if (body.UserData is IDamageable) + { + attackTarget = (IDamageable)body.UserData; + } + else if (body.UserData is Limb) + { + attackTarget = ((Limb)body.UserData).character; + } + } + } var currentContexts = GetAttackContexts(); - var validLimbs = AnimController.Limbs.Where(l => !l.IsSevered && !l.IsStuck && l.attack != null && l.attack.IsValidContext(currentContexts)); + var validLimbs = AnimController.Limbs.Where(l => + { + if (l.IsSevered || l.IsStuck) { return false; } + var attack = l.attack; + if (attack == null) { return false; } + if (attack.CoolDownTimer > 0) { return false; } + if (!attack.IsValidContext(currentContexts)) { return false; } + if (attackTarget != null) + { + if (!attack.IsValidTarget(attackTarget)) { return false; } + if (attackTarget is ISerializableEntity se && attackTarget is Character) + { + if (attack.Conditionals.Any(c => !c.Matches(se))) { return false; } + } + } + if (attack.Conditionals.Any(c => c.TargetSelf && !c.Matches(this))) { return false; } + return true; + }); var sortedLimbs = validLimbs.OrderBy(l => Vector2.DistanceSquared(ConvertUnits.ToDisplayUnits(l.SimPosition), cursorPosition)); // Select closest var attackLimb = sortedLimbs.FirstOrDefault(); if (attackLimb != null) { - Vector2 attackPos = attackLimb.SimPosition + Vector2.Normalize(cursorPosition - attackLimb.Position) * ConvertUnits.ToSimUnits(attackLimb.attack.Range); - - List ignoredBodies = AnimController.Limbs.Select(l => l.body.FarseerBody).ToList(); - ignoredBodies.Add(AnimController.Collider.FarseerBody); - - var body = Submarine.PickBody( - attackLimb.SimPosition, - attackPos, - ignoredBodies, - Physics.CollisionCharacter | Physics.CollisionWall); - - IDamageable attackTarget = null; - if (body != null) - { - attackPos = Submarine.LastPickedPosition; - - if (body.UserData is Submarine sub) - { - body = Submarine.PickBody( - attackLimb.SimPosition - ((Submarine)body.UserData).SimPosition, - attackPos - ((Submarine)body.UserData).SimPosition, - ignoredBodies, - Physics.CollisionWall); - - if (body != null) - { - attackPos = Submarine.LastPickedPosition + sub.SimPosition; - attackTarget = body.UserData as IDamageable; - } - } - else - { - if (body.UserData is IDamageable) - { - attackTarget = (IDamageable)body.UserData; - } - else if (body.UserData is Limb) - { - attackTarget = ((Limb)body.UserData).character; - } - } - } - attackLimb.UpdateAttack(deltaTime, attackPos, attackTarget, out AttackResult attackResult); - if (!attackLimb.attack.IsRunning) { attackCoolDown = 1.0f; @@ -1391,22 +1464,23 @@ namespace Barotrauma { Limb selfLimb = AnimController.GetLimb(LimbType.Head); if (selfLimb == null) { selfLimb = AnimController.GetLimb(LimbType.Torso); } - if (selfLimb == null) { selfLimb = AnimController.Limbs.FirstOrDefault(); } + if (selfLimb == null) { selfLimb = AnimController.MainLimb; } return selfLimb; } public bool CanSeeTarget(ISpatialEntity target, Limb seeingLimb = null) { - seeingLimb = seeingLimb ?? GetSeeingLimb(); + seeingLimb ??= GetSeeingLimb(); if (seeingLimb == null) { return false; } + ISpatialEntity seeingEntity = AnimController.SimplePhysicsEnabled ? this : seeingLimb as ISpatialEntity; // TODO: Could we just use the method below? If not, let's refactor it so that we can. - Vector2 diff = ConvertUnits.ToSimUnits(target.WorldPosition - seeingLimb.WorldPosition); + Vector2 diff = ConvertUnits.ToSimUnits(target.WorldPosition - seeingEntity.WorldPosition); Body closestBody; //both inside the same sub (or both outside) //OR the we're inside, the other character outside if (target.Submarine == Submarine || target.Submarine == null) { - closestBody = Submarine.CheckVisibility(seeingLimb.SimPosition, seeingLimb.SimPosition + diff); + closestBody = Submarine.CheckVisibility(seeingEntity.SimPosition, seeingEntity.SimPosition + diff); } //we're outside, the other character inside else if (Submarine == null) @@ -1416,7 +1490,7 @@ namespace Barotrauma //both inside different subs else { - closestBody = Submarine.CheckVisibility(seeingLimb.SimPosition, seeingLimb.SimPosition + diff); + closestBody = Submarine.CheckVisibility(seeingEntity.SimPosition, seeingEntity.SimPosition + diff); if (!IsBlocking(closestBody)) { closestBody = Submarine.CheckVisibility(target.SimPosition, target.SimPosition - diff); @@ -1433,10 +1507,11 @@ namespace Barotrauma } else if (body.UserData is Item item && item != target) { + // TODO: The door collider should be disabled, so this check is probably unnecessary. var door = item.GetComponent(); if (door != null) { - return !door.IsOpen; + return !door.IsOpen && !door.IsBroken; } } return false; @@ -1463,7 +1538,7 @@ namespace Barotrauma Structure wall = closestBody.UserData as Structure; Item item = closestBody.UserData as Item; Door door = item?.GetComponent(); - return (wall == null || !wall.CastShadow) && (door == null || door.IsOpen); + return (wall == null || !wall.CastShadow) && (door == null || door.IsOpen || door.IsBroken); } public bool HasItem(Item item, bool requireEquipped = false) => requireEquipped ? HasEquippedItem(item) : item.IsOwnedBy(this); @@ -1561,7 +1636,7 @@ namespace Barotrauma /// /// Finds the closest item seeking by identifiers or tags from the world. /// Ignores items that are outside or in another team's submarine or in a submarine that is not connected to this submarine. - /// Also ignores items that are taken by someone else. + /// Also ignores non-interactable items and items that are taken by someone else. /// The method is run in steps for performance reasons. So you'll have to provide the reference to the itemIndex. /// Returns false while running and true when done. /// @@ -1578,12 +1653,17 @@ namespace Barotrauma { itemIndex++; var item = Item.ItemList[itemIndex]; + if (item.NonInteractable) { continue; } if (ignoredItems != null && ignoredItems.Contains(item)) { continue; } if (item.Submarine == null) { continue; } if (item.Submarine.TeamID != TeamID) { continue; } - if (Submarine != null && !Submarine.IsEntityFoundOnThisSub(item, true)) { continue; } if (item.CurrentHull == null) { continue; } if (ignoreBroken && item.Condition <= 0) { continue; } + if (Submarine != null) + { + if (item.Submarine.Info.Type != Submarine.Info.Type) { continue; } + if (!Submarine.IsEntityFoundOnThisSub(item, true)) { continue; } + } if (customPredicate != null && !customPredicate(item)) { continue; } if (identifiers != null && identifiers.None(id => item.Prefab.Identifier == id || item.HasTag(id))) { continue; } if (ignoredContainerIdentifiers != null && item.Container != null) @@ -1593,8 +1673,8 @@ namespace Barotrauma if (IsItemTakenBySomeoneElse(item)) { continue; } float itemPriority = customPriorityFunction != null ? customPriorityFunction(item) : 1; if (itemPriority <= 0) { continue; } - Item rootContainer = item.GetRootContainer(); - Vector2 itemPos = (rootContainer ?? item).WorldPosition; + Entity rootInventoryOwner = item.GetRootInventoryOwner(); + Vector2 itemPos = (rootInventoryOwner ?? item).WorldPosition; float yDist = Math.Abs(WorldPosition.Y - itemPos.Y); yDist = yDist > 100 ? yDist * 5 : 0; float dist = Math.Abs(WorldPosition.X - itemPos.X) + yDist; @@ -1612,13 +1692,16 @@ namespace Barotrauma public bool IsItemTakenBySomeoneElse(Item item) => item.FindParentInventory(i => i.Owner != this && i.Owner is Character owner && !owner.IsDead && !owner.Removed) != null; - public bool CanInteractWith(Character c, float maxDist = 200.0f, bool checkVisibility = true) + public bool CanInteractWith(Character c, float maxDist = 200.0f, bool checkVisibility = true, bool skipDistanceCheck = false) { - if (c == this || Removed || !c.Enabled || !c.CanBeSelected) return false; - if (!c.CharacterHealth.UseHealthWindow && !c.CanBeDragged && c.onCustomInteract == null) return false; + if (c == this || Removed || !c.Enabled || !c.CanBeSelected) { return false; } + if (!c.CharacterHealth.UseHealthWindow && !c.CanBeDragged && c.onCustomInteract == null) { return false; } - maxDist = ConvertUnits.ToSimUnits(maxDist); - if (Vector2.DistanceSquared(SimPosition, c.SimPosition) > maxDist * maxDist) return false; + if (!skipDistanceCheck) + { + maxDist = ConvertUnits.ToSimUnits(maxDist); + if (Vector2.DistanceSquared(SimPosition, c.SimPosition) > maxDist * maxDist) { return false; } + } return checkVisibility ? CanSeeCharacter(c) : true; } @@ -1824,13 +1907,17 @@ namespace Barotrauma if (findFocusedTimer <= 0.0f || Screen.Selected == GameMain.SubEditorScreen) { FocusedCharacter = CanInteract ? FindCharacterAtPosition(mouseSimPos) : null; + if (FocusedCharacter != null && !CanSeeCharacter(FocusedCharacter)) { FocusedCharacter = null; } float aimAssist = GameMain.Config.AimAssistAmount * (AnimController.InWater ? 1.5f : 1.0f); if (SelectedItems.Any(it => it?.GetComponent()?.IsActive ?? false)) { //disable aim assist when rewiring to make it harder to accidentally select items when adding wire nodes aimAssist = 0.0f; } - focusedItem = CanInteract ? FindItemAtPosition(mouseSimPos, aimAssist) : null; + + var item = FindItemAtPosition(mouseSimPos, aimAssist); + + focusedItem = CanInteract ? item : null; findFocusedTimer = 0.05f; } } @@ -1964,7 +2051,7 @@ namespace Barotrauma if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) { //disable AI characters that are far away from all clients and the host's character and not controlled by anyone - if (c == Controlled || c.IsRemotePlayer) + if (c.IsPlayer || (c.IsBot && !c.IsDead)) { c.Enabled = true; } @@ -2182,11 +2269,12 @@ namespace Barotrauma lowPassMultiplier = MathHelper.Lerp(lowPassMultiplier, 1.0f, 0.1f); //ragdoll button - if (IsRagdolled) + if (IsRagdolled || !CanMove) { - if (AnimController is HumanoidAnimController) ((HumanoidAnimController)AnimController).Crouching = false; - /*if(GameMain.Server != null) - GameMain.Server.CreateEntityEvent(this, new object[] { NetEntityEvent.Type.Status });*/ + if (AnimController is HumanoidAnimController) + { + ((HumanoidAnimController)AnimController).Crouching = false; + } AnimController.ResetPullJoints(); SelectedConstruction = null; return; @@ -2209,7 +2297,7 @@ namespace Barotrauma SelectedConstruction = null; } - if (!IsDead) LockHands = false; + if (!IsDead) { LockHands = false; } } partial void UpdateControlled(float deltaTime, Camera cam); @@ -2295,9 +2383,12 @@ namespace Barotrauma if (!IsDead) { return; } - if (Submarine != null && CharacterList.Count(c => c.IsDead && c.Submarine == Submarine) < GameMain.Config.CorpsesPerSubDespawnThreshold) + int subCorpseCount = 0; + + if (Submarine != null) { - return; + subCorpseCount = CharacterList.Count(c => c.IsDead && c.Submarine == Submarine); + if (subCorpseCount < GameMain.Config.CorpsesPerSubDespawnThreshold) { return; } } float distToClosestPlayer = GetDistanceToClosestPlayer(); @@ -2306,8 +2397,20 @@ namespace Barotrauma //despawn in 1 minute if very far from all human players despawnTimer = Math.Max(despawnTimer, GameMain.Config.CorpseDespawnDelay - 60.0f); } + + float despawnPriority = 1.0f; + if (subCorpseCount > GameMain.Config.CorpsesPerSubDespawnThreshold) + { + //despawn faster if there are lots of corpses in the sub (twice as many as the threshold -> despawn twice as fast) + despawnPriority += (subCorpseCount - GameMain.Config.CorpsesPerSubDespawnThreshold) / (float)GameMain.Config.CorpsesPerSubDespawnThreshold; + } + if (AIController is EnemyAIController) + { + //enemies despawn faster + despawnPriority *= 2.0f; + } - despawnTimer += deltaTime; + despawnTimer += deltaTime * despawnPriority; if (despawnTimer < GameMain.Config.CorpseDespawnDelay) { return; } if (IsHuman) @@ -2416,6 +2519,14 @@ namespace Barotrauma //set the character order only if the character is close enough to hear the message if (orderGiver != null && !CanHearCharacter(orderGiver)) { return; } + // If there's another character operating the same device, make them dismiss themself + if (order != null && order.Category == OrderCategory.Operate) + { + CharacterList.FindAll(c => c != this && c.TeamID == TeamID && c.CurrentOrder is Order characterOrder && characterOrder.Category == OrderCategory.Operate && + characterOrder.Identifier.Equals(order.Identifier) && characterOrder.TargetEntity == order.TargetEntity)? + .ForEach(c => c.SetOrder(Order.GetPrefab("dismissed"), null, c, speak: true)); + } + if (AIController is HumanAIController humanAI) { humanAI.SetOrder(order, orderOption, orderGiver, speak); @@ -2426,6 +2537,11 @@ namespace Barotrauma CurrentOrderOption = orderOption; } + /// + /// Reset order data so it doesn't carry into further rounds, as the AI is "recreated" always in between rounds anyway. + /// + public void ResetCurrentOrder() => Info?.ResetCurrentOrder(); + private readonly List aiChatMessageQueue = new List(); //key = identifier, value = time the message was sent @@ -2575,7 +2691,7 @@ namespace Barotrauma if (attacker is Character attackingCharacter && attackingCharacter.AIController == null) { StringBuilder sb = new StringBuilder(); - sb.Append(LogName + " attacked by " + attackingCharacter.LogName + "."); + sb.Append(GameServer.CharacterLogName(this) + " attacked by " + GameServer.CharacterLogName(attackingCharacter) + "."); if (attackResult.Afflictions != null) { foreach (Affliction affliction in attackResult.Afflictions) @@ -2588,40 +2704,62 @@ namespace Barotrauma } #endif - bool isNotClient = GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient; - - TrySeverLimbJoints(limbHit, attack.SeverLimbsProbability); + TrySeverLimbJoints(limbHit, attack.SeverLimbsProbability, attackResult.Damage); return attackResult; } - public void TrySeverLimbJoints(Limb targetLimb, float severLimbsProbability) + public void TrySeverLimbJoints(Limb targetLimb, float severLimbsProbability, float damage) { - bool isNotClient = GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient; - - if (isNotClient && - IsDead && Rand.Range(0.0f, 1.0f) < severLimbsProbability) + if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } +#if DEBUG + if (targetLimb.character != this) { - foreach (LimbJoint joint in AnimController.LimbJoints) - { - if (joint.CanBeSevered && (joint.LimbA == targetLimb || joint.LimbB == targetLimb)) - { -#if CLIENT - CurrentHull?.AddDecal("blood", WorldPosition, Rand.Range(0.5f, 1.5f)); + DebugConsole.ThrowError($"{Name} is attempting to sever joints of {targetLimb.character.Name}!"); + return; + } #endif - AnimController.SeverLimbJoint(joint); - - if (joint.LimbA == targetLimb) - { - joint.LimbB.body.LinearVelocity += targetLimb.LinearVelocity * 0.5f; - } - else - { - joint.LimbA.body.LinearVelocity += targetLimb.LinearVelocity * 0.5f; - } + if (!IsDead && !targetLimb.CanBeSeveredAlive) { return; } + if (damage < targetLimb.Params.MinSeveranceDamage) { return; } + bool wasSevered = false; + float random = Rand.Value(); + foreach (LimbJoint joint in AnimController.LimbJoints) + { + if (!joint.CanBeSevered) { continue; } + if (joint.LimbA != targetLimb && joint.LimbB != targetLimb) { continue; } + float probability = severLimbsProbability; + if (!IsDead) + { + probability *= joint.Params.SeveranceProbabilityModifier; + } + if (probability <= 0) { continue; } + if (random > probability) { continue; } + bool severed = AnimController.SeverLimbJoint(joint); + if (!wasSevered) + { + wasSevered = severed; + } + if (severed) + { + if (joint.LimbA == targetLimb) + { + joint.LimbB.body.LinearVelocity += targetLimb.LinearVelocity * 0.5f; + } + else + { + joint.LimbA.body.LinearVelocity += targetLimb.LinearVelocity * 0.5f; } } } + if (wasSevered) + { + if (targetLimb.character.AIController is EnemyAIController enemyAI) + { + enemyAI.ReevaluateAttacks(); + } + ApplyStatusEffects(ActionType.OnSevered, 1.0f); + targetLimb.ApplyStatusEffects(ActionType.OnSevered, 1.0f); + } } public AttackResult AddDamage(Vector2 worldPosition, IEnumerable afflictions, float stun, bool playSound, float attackImpulse = 0.0f, Character attacker = null) @@ -2700,10 +2838,15 @@ namespace Barotrauma Vector2 simPos = hitLimb.SimPosition + ConvertUnits.ToSimUnits(dir); AttackResult attackResult = hitLimb.AddDamage(simPos, afflictions, playSound); CharacterHealth.ApplyDamage(hitLimb, attackResult); + ApplyStatusEffects(ActionType.OnDamaged, 1.0f); + if (attackResult.Damage > 0) + { + hitLimb.ApplyStatusEffects(ActionType.OnDamaged, 1.0f); + } if (attacker != this) { OnAttacked?.Invoke(attacker, attackResult); - OnAttackedProjSpecific(attacker, attackResult); + OnAttackedProjSpecific(attacker, attackResult, stun); if (!wasDead) { TryAdjustAttackerSkill(attacker, -attackResult.Damage); @@ -2718,7 +2861,7 @@ namespace Barotrauma return attackResult; } - partial void OnAttackedProjSpecific(Character attacker, AttackResult attackResult); + partial void OnAttackedProjSpecific(Character attacker, AttackResult attackResult, float stun); public void TryAdjustAttackerSkill(Character attacker, float healthChange) { @@ -2760,6 +2903,7 @@ namespace Barotrauma } } + private readonly List targets = new List(); public void ApplyStatusEffects(ActionType actionType, float deltaTime) { foreach (StatusEffect statusEffect in statusEffects) @@ -2768,30 +2912,60 @@ namespace Barotrauma if (statusEffect.HasTargetType(StatusEffect.TargetType.NearbyItems) || statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { - var targets = new List(); + targets.Clear(); statusEffect.GetNearbyTargets(WorldPosition, targets); statusEffect.Apply(ActionType.OnActive, deltaTime, this, targets); } else { statusEffect.Apply(actionType, deltaTime, this, this); + if (statusEffect.targetLimbs != null) + { + foreach (var limbType in statusEffect.targetLimbs) + { + if (statusEffect.HasTargetType(StatusEffect.TargetType.AllLimbs)) + { + // Target all matching limbs + foreach (var limb in AnimController.Limbs) + { + if (limb.IsSevered) { continue; } + if (limb.type == limbType) + { + statusEffect.Apply(actionType, deltaTime, this, limb); + } + } + } + else if (statusEffect.HasTargetType(StatusEffect.TargetType.Limb)) + { + // Target just the first matching limb + Limb limb = AnimController.GetLimb(limbType); + statusEffect.Apply(actionType, deltaTime, this, limb); + } + } + } } } + if (actionType != ActionType.OnDamaged && actionType != ActionType.OnSevered) + { + // OnDamaged is called only for the limb that is hit. + AnimController.Limbs.ForEach(l => l.ApplyStatusEffects(actionType, deltaTime)); + } } private void Implode(bool isNetworkMessage = false) { - if (CharacterHealth.Unkillable) { return; } + if (CharacterHealth.Unkillable || IsDead) { return; } if (!isNetworkMessage) { - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) return; + if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } } - Kill(CauseOfDeathType.Pressure, null, isNetworkMessage); - CharacterHealth.PressureAffliction.Strength = CharacterHealth.PressureAffliction.Prefab.MaxStrength; - CharacterHealth.SetAllDamage(200.0f, 0.0f, 0.0f); - BreakJoints(); + CharacterHealth.ApplyAffliction(null, new Affliction(AfflictionPrefab.Pressure, AfflictionPrefab.Pressure.MaxStrength)); + if (IsDead) + { + BreakJoints(); + } } public void BreakJoints() @@ -2799,6 +2973,7 @@ namespace Barotrauma Vector2 centerOfMass = AnimController.GetCenterOfMass(); foreach (Limb limb in AnimController.Limbs) { + if (limb.IsSevered) { continue; } limb.AddDamage(limb.SimPosition, 500.0f, 0.0f, 0.0f, false); Vector2 diff = centerOfMass - limb.SimPosition; @@ -2866,7 +3041,10 @@ namespace Barotrauma causeOfDeathAffliction?.Source ?? LastAttacker, LastDamageSource); OnDeath?.Invoke(this, CauseOfDeath); - SteamAchievementManager.OnCharacterKilled(this, CauseOfDeath); + if (GameMain.GameSession != null && Screen.Selected == GameMain.GameScreen) + { + SteamAchievementManager.OnCharacterKilled(this, CauseOfDeath); + } KillProjSpecific(causeOfDeath, causeOfDeathAffliction, log); @@ -3023,13 +3201,13 @@ namespace Barotrauma public IEnumerable GetAttackContexts() { currentContexts.Clear(); - if (AnimController.CurrentAnimationParams.IsGroundedAnimation) + if (AnimController.InWater) { - currentContexts.Add(AttackContext.Ground); + currentContexts.Add(AttackContext.Water); } else { - currentContexts.Add(AttackContext.Water); + currentContexts.Add(AttackContext.Ground); } if (CurrentHull == null) { @@ -3131,5 +3309,15 @@ namespace Barotrauma } return targetPos; } + + public bool IsCaptain => HasJob("captain"); + public bool IsEngineer => HasJob("engineer"); + public bool IsMechanic => HasJob("mechanic"); + public bool IsMedic => HasJob("medicaldoctor"); + public bool IsOfficer => HasJob("securityofficer"); + public bool IsAsssitant => HasJob("assistant"); + public bool IsWatchman => HasJob("watchman"); + + public bool HasJob(string identifier) => Info?.Job?.Prefab.Identifier == identifier; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs index e1b4fe019..1876804b7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs @@ -4,7 +4,7 @@ using Barotrauma.Networking; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -997,6 +997,15 @@ namespace Barotrauma faceAttachments = null; } + /// + /// Reset order data so it doesn't carry into further rounds, as the AI is "recreated" always in between rounds anyway. + /// + public void ResetCurrentOrder() + { + CurrentOrder = null; + CurrentOrderOption = ""; + } + public void Remove() { Character = null; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterPrefab.cs index 93728e6a7..afbee5aaa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterPrefab.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs index d8f268ea5..9652a54ad 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs @@ -19,7 +19,7 @@ namespace Barotrauma public virtual float Strength { get { return _strength; } - set { _strength = value; } + set { _strength = MathHelper.Clamp(value, 0.0f, Prefab.MaxStrength); } } [Serialize("", true), Editable] @@ -184,6 +184,8 @@ namespace Barotrauma { _strength += currentEffect.StrengthChange * deltaTime * (1f - characterHealth.GetResistance(Prefab.Identifier)); } + // Don't use the property, because its virtual and some afflictions like husk overload it for external use. + _strength = MathHelper.Clamp(_strength, 0.0f, Prefab.MaxStrength); foreach (StatusEffect statusEffect in currentEffect.StatusEffects) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs index cc0509492..80cdaa08d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs @@ -97,13 +97,15 @@ namespace Barotrauma private void ApplyDamage(float deltaTime, bool applyForce) { + int limbCount = character.AnimController.Limbs.Count(l => !l.ignoreCollisions && !l.IsSevered); foreach (Limb limb in character.AnimController.Limbs) { + if (limb.IsSevered) { continue; } float random = Rand.Value(Rand.RandSync.Server); huskInfection.Clear(); - huskInfection.Add(AfflictionPrefab.InternalDamage.Instantiate(random * deltaTime / character.AnimController.Limbs.Length)); + huskInfection.Add(AfflictionPrefab.InternalDamage.Instantiate(random * 10 * deltaTime / limbCount)); character.LastDamageSource = null; - float force = applyForce ? random * 0.1f * limb.Mass : 0; + float force = applyForce ? random * 0.5f * limb.Mass : 0; character.DamageLimb(limb.WorldPosition, limb, huskInfection, 0, false, force); } } @@ -186,18 +188,20 @@ namespace Barotrauma } } - if (character.Inventory.Items.Length != husk.Inventory.Items.Length) + if (character.Inventory != null && husk.Inventory != null) { - string errorMsg = "Failed to move items from the source character's inventory into a husk's inventory (inventory sizes don't match)"; - DebugConsole.ThrowError(errorMsg); - GameAnalyticsManager.AddErrorEventOnce("AfflictionHusk.CreateAIHusk:InventoryMismatch", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); - yield return CoroutineStatus.Success; - } - - for (int i = 0; i < character.Inventory.Items.Length && i < husk.Inventory.Items.Length; i++) - { - if (character.Inventory.Items[i] == null) continue; - husk.Inventory.TryPutItem(character.Inventory.Items[i], i, true, false, null); + if (character.Inventory.Items.Length != husk.Inventory.Items.Length) + { + string errorMsg = "Failed to move items from the source character's inventory into a husk's inventory (inventory sizes don't match)"; + DebugConsole.ThrowError(errorMsg); + GameAnalyticsManager.AddErrorEventOnce("AfflictionHusk.CreateAIHusk:InventoryMismatch", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); + yield return CoroutineStatus.Success; + } + for (int i = 0; i < character.Inventory.Items.Length && i < husk.Inventory.Items.Length; i++) + { + if (character.Inventory.Items[i] == null) continue; + husk.Inventory.TryPutItem(character.Inventory.Items[i], i, true, false, null); + } } husk.SetStun(5); @@ -255,20 +259,19 @@ namespace Barotrauma Limb attachLimb = null; if (matchingAffliction.AttachLimbId > -1) { - attachLimb = ragdoll.Limbs.FirstOrDefault(l => l.Params.ID == matchingAffliction.AttachLimbId); + attachLimb = ragdoll.Limbs.FirstOrDefault(l => !l.IsSevered && l.Params.ID == matchingAffliction.AttachLimbId); } else if (matchingAffliction.AttachLimbName != null) { - attachLimb = ragdoll.Limbs.FirstOrDefault(l => l.Name == matchingAffliction.AttachLimbName); + attachLimb = ragdoll.Limbs.FirstOrDefault(l => !l.IsSevered && l.Name == matchingAffliction.AttachLimbName); } else if (matchingAffliction.AttachLimbType != LimbType.None) { - attachLimb = ragdoll.Limbs.FirstOrDefault(l => l.type == matchingAffliction.AttachLimbType); + attachLimb = ragdoll.Limbs.FirstOrDefault(l => !l.IsSevered && l.type == matchingAffliction.AttachLimbType); } if (attachLimb == null) { - DebugConsole.Log("Attachment limb not defined in the affliction prefab or no matching limb could be found. Using the appendage definition as it is."); - attachLimb = ragdoll.Limbs.FirstOrDefault(l => l.Params.ID == jointParams.Limb1); + attachLimb = ragdoll.Limbs.FirstOrDefault(l => !l.IsSevered && l.Params.ID == jointParams.Limb1); } if (attachLimb != null) { @@ -286,10 +289,6 @@ namespace Barotrauma ragdoll.AddJoint(jointParams); appendage.Add(huskAppendage); } - else - { - DebugConsole.ThrowError("Attachment limb not found!"); - } } } return appendage; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs index 5785866d5..7c90aa161 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs @@ -265,7 +265,8 @@ namespace Barotrauma public readonly Sprite Icon; public readonly Color[] IconColors; - private List effects = new List(); + private readonly List effects = new List(); + public IEnumerable Effects => effects; private readonly string typeName; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPsychosis.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPsychosis.cs index 7b3b9066f..a65e14cc8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPsychosis.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPsychosis.cs @@ -1,6 +1,6 @@ using Microsoft.Xna.Framework; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using Barotrauma.Extensions; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Buffs/BuffDurationIncrease.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Buffs/BuffDurationIncrease.cs index 0b6fa2970..3b36e03a9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Buffs/BuffDurationIncrease.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Buffs/BuffDurationIncrease.cs @@ -1,4 +1,5 @@ using Microsoft.Xna.Framework; +using System; namespace Barotrauma { @@ -19,7 +20,7 @@ namespace Barotrauma { foreach (Affliction affliction in afflictions) { - if (!affliction.Prefab.IsBuff || affliction == this || affliction.MultiplierSource != this) continue; + if (!affliction.Prefab.IsBuff || affliction == this || affliction.MultiplierSource != this) { continue; } affliction.MultiplierSource = null; affliction.StrengthDiminishMultiplier = 1f; } @@ -28,9 +29,9 @@ namespace Barotrauma { foreach (Affliction affliction in afflictions) { - if (!affliction.Prefab.IsBuff || affliction == this || affliction.MultiplierSource == this) continue; + if (!affliction.Prefab.IsBuff || affliction == this) { continue; } float multiplier = GetDiminishMultiplier(); - if (affliction.StrengthDiminishMultiplier < multiplier) continue; + if (affliction.StrengthDiminishMultiplier < multiplier && affliction.MultiplierSource != this) { continue; } affliction.MultiplierSource = this; affliction.StrengthDiminishMultiplier = multiplier; @@ -40,14 +41,15 @@ namespace Barotrauma private float GetDiminishMultiplier() { - if (Strength < Prefab.ActivationThreshold) return 1.0f; + if (Strength < Prefab.ActivationThreshold) { return 1.0f; } AfflictionPrefab.Effect currentEffect = Prefab.GetActiveEffect(Strength); - if (currentEffect == null) return 1.0f; + if (currentEffect == null) { return 1.0f; } - return MathHelper.Lerp( + float multiplier = MathHelper.Lerp( currentEffect.MinBuffMultiplier, currentEffect.MaxBuffMultiplier, (Strength - currentEffect.MinStrength) / (currentEffect.MaxStrength - currentEffect.MinStrength)); + return 1.0f / Math.Max(multiplier, 0.001f); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs index c411e2abb..b5e866b60 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs @@ -349,13 +349,16 @@ namespace Barotrauma /// Most monsters for example don't have separate healths for different limbs, essentially meaning that every affliction is applied to every limb. public float GetAfflictionStrength(string afflictionType, Limb limb, bool requireLimbSpecific) { - if (requireLimbSpecific && limbHealths.Count == 1) return 0.0f; + if (requireLimbSpecific && limbHealths.Count == 1) { return 0.0f; } float strength = 0.0f; foreach (Affliction affliction in limbHealths[limb.HealthIndex].Afflictions) { - if (affliction.Strength < affliction.Prefab.ActivationThreshold) continue; - if (affliction.Prefab.AfflictionType == afflictionType) strength += affliction.Strength; + if (affliction.Strength < affliction.Prefab.ActivationThreshold) { continue; } + if (affliction.Prefab.AfflictionType == afflictionType) + { + strength += affliction.Strength; + } } return strength; } @@ -365,17 +368,23 @@ namespace Barotrauma float strength = 0.0f; foreach (Affliction affliction in afflictions) { - if (affliction.Strength < affliction.Prefab.ActivationThreshold) continue; - if (affliction.Prefab.AfflictionType == afflictionType) strength += affliction.Strength; + if (affliction.Strength < affliction.Prefab.ActivationThreshold) { continue; } + if (affliction.Prefab.AfflictionType == afflictionType) + { + strength += affliction.Strength; + } } - if (!allowLimbAfflictions) return strength; + if (!allowLimbAfflictions) { return strength; } foreach (LimbHealth limbHealth in limbHealths) { foreach (Affliction affliction in limbHealth.Afflictions) { - if (affliction.Strength < affliction.Prefab.ActivationThreshold) continue; - if (affliction.Prefab.AfflictionType == afflictionType) strength += affliction.Strength; + if (affliction.Strength < affliction.Prefab.ActivationThreshold) { continue; } + if (affliction.Prefab.AfflictionType == afflictionType) + { + strength += affliction.Strength; + } } } @@ -419,11 +428,11 @@ namespace Barotrauma return resistance; } - private List matchingAfflictions = new List(); + private readonly List matchingAfflictions = new List(); public void ReduceAffliction(Limb targetLimb, string affliction, float amount) { matchingAfflictions.Clear(); - + matchingAfflictions.AddRange(afflictions); if (targetLimb != null) { matchingAfflictions.AddRange(limbHealths[targetLimb.HealthIndex].Afflictions); @@ -506,6 +515,27 @@ namespace Barotrauma if (Vitality <= MinVitality) { Kill(); } } + public float GetLimbDamage(Limb limb) + { + float damageStrength; + if (limb.IsSevered) + { + return 1; + } + else + { + // Instead of using the limbhealth count here, I think it's best to define the max vitality per limb roughly with a constant value. + // Therefore with e.g. 80 health, the max damage per limb would be 20. + // Having at least 20 damage on both legs would cause maximum limping. + float max = MaxVitality / 4; + float damage = GetAfflictionStrength("damage", limb, true); + float bleeding = GetAfflictionStrength("bleeding", limb, true); + float burn = GetAfflictionStrength("burn", limb, true); + damageStrength = Math.Min(damage + bleeding + burn, max); + return damageStrength / max; + } + } + public void RemoveAllAfflictions() { foreach (LimbHealth limbHealth in limbHealths) @@ -523,7 +553,7 @@ namespace Barotrauma private void AddLimbAffliction(Limb limb, Affliction newAffliction) { - if (!newAffliction.Prefab.LimbSpecific || limb == null) return; + if (!newAffliction.Prefab.LimbSpecific || limb == null) { return; } if (limb.HealthIndex < 0 || limb.HealthIndex >= limbHealths.Count) { DebugConsole.ThrowError("Limb health index out of bounds. Character\"" + Character.Name + @@ -535,8 +565,8 @@ namespace Barotrauma private void AddLimbAffliction(LimbHealth limbHealth, Affliction newAffliction) { - if (!DoesBleed && newAffliction is AfflictionBleeding) return; - if (!Character.NeedsOxygen && newAffliction.Prefab == AfflictionPrefab.OxygenLow) return; + if (!DoesBleed && newAffliction is AfflictionBleeding) { return; } + if (!Character.NeedsOxygen && newAffliction.Prefab == AfflictionPrefab.OxygenLow) { return; } foreach (Affliction affliction in limbHealth.Afflictions) { @@ -545,7 +575,10 @@ namespace Barotrauma affliction.Strength = Math.Min(affliction.Prefab.MaxStrength, affliction.Strength + (newAffliction.Strength * (100.0f / MaxVitality) * (1f - GetResistance(affliction.Prefab.Identifier)))); affliction.Source = newAffliction.Source; CalculateVitality(); - if (Vitality <= MinVitality) Kill(); + if (Vitality <= MinVitality) + { + Kill(); + } return; } } @@ -560,7 +593,10 @@ namespace Barotrauma Character.HealthUpdateInterval = 0.0f; CalculateVitality(); - if (Vitality <= MinVitality) Kill(); + if (Vitality <= MinVitality) + { + Kill(); + } #if CLIENT selectedLimbIndex = -1; #endif @@ -894,10 +930,7 @@ namespace Barotrauma partial void RemoveProjSpecific(); - /// - /// Automatically filters out buffs. - /// - public static IEnumerable SortAfflictionsBySeverity(IEnumerable afflictions) => - afflictions.Where(a => !a.Prefab.IsBuff).OrderByDescending(a => a.DamagePerSecond).ThenByDescending(a => a.Strength); + public static IEnumerable SortAfflictionsBySeverity(IEnumerable afflictions, bool excludeBuffs = true) => + afflictions.Where(a => !excludeBuffs || !a.Prefab.IsBuff).OrderByDescending(a => a.DamagePerSecond).ThenByDescending(a => a.Strength); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs index 7439a6f30..bffa27eca 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs @@ -19,6 +19,13 @@ namespace Barotrauma private set; } + [Serialize(1.0f, false), Editable(DecimalCount = 2, MinValueFloat = 0, MaxValueFloat = 1)] + public float ProbabilityMultiplier + { + get; + private set; + } + [Serialize("0.0,360", false), Editable] public Vector2 ArmorSector { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs index 68a0cf326..a257c66d3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs @@ -80,8 +80,8 @@ namespace Barotrauma public float GetSkillLevel(string skillIdentifier) { + if (string.IsNullOrWhiteSpace(skillIdentifier)) { return 0.0f; } skills.TryGetValue(skillIdentifier, out Skill skill); - return (skill == null) ? 0.0f : skill.Level; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs index 3b738e1b9..fbd323fc8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs @@ -64,7 +64,7 @@ namespace Barotrauma public readonly Dictionary> ItemIdentifiers = new Dictionary>(); public readonly Dictionary> ShowItemPreview = new Dictionary>(); public readonly List Skills = new List(); - public readonly List AutomaticOrders = new List(); + public readonly List AutonomousObjective = new List(); public readonly List AppropriateOrders = new List(); [Serialize("1,1,1,1", false)] @@ -198,7 +198,7 @@ namespace Barotrauma } break; case "autonomousobjectives": - subElement.Elements().ForEach(order => AutomaticOrders.Add(new AutonomousObjective(order))); + subElement.Elements().ForEach(order => AutonomousObjective.Add(new AutonomousObjective(order))); break; case "appropriateobjectives": case "appropriateorders": diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs index b990d25d7..910a38ecb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs @@ -166,10 +166,20 @@ namespace Barotrauma if (isSevered) { ragdoll.SubtractMass(this); + if (type == LimbType.Head) + { + character.Kill(CauseOfDeathType.Unknown, null); + } + } + else + { + severedFadeOutTimer = 0.0f; } - if (!isSevered) severedFadeOutTimer = 0.0f; #if CLIENT - if (isSevered) damageOverlayStrength = 100.0f; + if (isSevered) + { + damageOverlayStrength = 100.0f; + } #endif } } @@ -366,12 +376,42 @@ namespace Barotrauma public string Name => Params.Name; + // Exposed for status effects + public bool IsDead => character.IsDead; + + public bool CanBeSeveredAlive + { + get + { + if (character.IsHumanoid) { return false; } + if (this == character.AnimController.MainLimb) { return false; } + if (character.AnimController.CanWalk) + { + switch (type) + { + case LimbType.LeftFoot: + case LimbType.RightFoot: + case LimbType.LeftLeg: + case LimbType.RightLeg: + case LimbType.LeftThigh: + case LimbType.RightThigh: + case LimbType.Legs: + case LimbType.Waist: + return false; + } + } + return true; + } + } + public Dictionary SerializableProperties { get; private set; } + private readonly List statusEffects = new List(); + public Limb(Ragdoll ragdoll, Character character, LimbParams limbParams) { this.ragdoll = ragdoll; @@ -434,6 +474,9 @@ namespace Barotrauma case "damagemodifier": DamageModifiers.Add(new DamageModifier(subElement, character.Name)); break; + case "statuseffect": + statusEffects.Add(StatusEffect.Load(subElement, Name)); + break; } } @@ -471,43 +514,60 @@ namespace Barotrauma return AddDamage(simPosition, afflictions, playSound); } + private readonly List appliedDamageModifiers = new List(); + private readonly List afflictionsCopy = new List(); public AttackResult AddDamage(Vector2 simPosition, IEnumerable afflictions, bool playSound) { - List appliedDamageModifiers = new List(); - //create a copy of the original affliction list to prevent modifying the afflictions of an Attack/StatusEffect etc - var afflictionsCopy = afflictions.Where(a => Rand.Range(0.0f, 1.0f) <= a.Probability).ToList(); - for (int i = 0; i < afflictionsCopy.Count; i++) + appliedDamageModifiers.Clear(); + afflictionsCopy.Clear(); + foreach (var affliction in afflictions) { + var newAffliction = affliction; + float random = Rand.Value(Rand.RandSync.Unsynced); + if (random > affliction.Probability) { continue; } + bool applyAffliction = true; foreach (DamageModifier damageModifier in DamageModifiers) { - if (!damageModifier.MatchesAffliction(afflictionsCopy[i])) continue; + if (!damageModifier.MatchesAffliction(affliction)) { continue; } + if (random > affliction.Probability * damageModifier.ProbabilityMultiplier) + { + applyAffliction = false; + continue; + } if (SectorHit(damageModifier.ArmorSectorInRadians, simPosition)) { - afflictionsCopy[i] = afflictionsCopy[i].CreateMultiplied(damageModifier.DamageMultiplier); + newAffliction = affliction.CreateMultiplied(damageModifier.DamageMultiplier); appliedDamageModifiers.Add(damageModifier); } } - foreach (WearableSprite wearable in wearingItems) { foreach (DamageModifier damageModifier in wearable.WearableComponent.DamageModifiers) { - if (!damageModifier.MatchesAffliction(afflictionsCopy[i])) continue; + if (!damageModifier.MatchesAffliction(affliction)) { continue; } + if (random > affliction.Probability * damageModifier.ProbabilityMultiplier) + { + applyAffliction = false; + continue; + } if (SectorHit(damageModifier.ArmorSectorInRadians, simPosition)) { - afflictionsCopy[i] = afflictionsCopy[i].CreateMultiplied(damageModifier.DamageMultiplier); + newAffliction = affliction.CreateMultiplied(damageModifier.DamageMultiplier); appliedDamageModifiers.Add(damageModifier); } } } + if (applyAffliction) + { + afflictionsCopy.Add(newAffliction); + } } - - AddDamageProjSpecific(simPosition, afflictionsCopy, playSound, appliedDamageModifiers); - - return new AttackResult(afflictionsCopy, this, appliedDamageModifiers); + var result = new AttackResult(afflictionsCopy, this, appliedDamageModifiers); + AddDamageProjSpecific(playSound, result); + return result; } - partial void AddDamageProjSpecific(Vector2 simPosition, List afflictions, bool playSound, List appliedDamageModifiers); + partial void AddDamageProjSpecific(bool playSound, AttackResult result); public bool SectorHit(Vector2 armorSector, Vector2 simPosition) { @@ -564,7 +624,8 @@ namespace Barotrauma public bool UpdateAttack(float deltaTime, Vector2 attackSimPos, IDamageable damageTarget, out AttackResult attackResult, float distance = -1, Limb targetLimb = null) { attackResult = default(AttackResult); - float dist = distance > -1 ? distance : ConvertUnits.ToDisplayUnits(Vector2.Distance(SimPosition, attackSimPos)); + Vector2 simPos = ragdoll.SimplePhysicsEnabled ? character.SimPosition : SimPosition; + float dist = distance > -1 ? distance : ConvertUnits.ToDisplayUnits(Vector2.Distance(simPos, attackSimPos)); bool wasRunning = attack.IsRunning; attack.UpdateAttackTimer(deltaTime); @@ -577,7 +638,7 @@ namespace Barotrauma case HitDetection.Distance: if (dist < attack.DamageRange) { - structureBody = Submarine.PickBody(SimPosition, attackSimPos, collisionCategory: Physics.CollisionWall | Physics.CollisionLevel, allowInsideFixture: true); + structureBody = Submarine.PickBody(simPos, attackSimPos, collisionCategory: Physics.CollisionWall | Physics.CollisionLevel, allowInsideFixture: true); if (damageTarget is Item i && i.GetComponent() != null) { // If the attack is aimed to an item and hits an item, it's successful. @@ -646,33 +707,19 @@ namespace Barotrauma if (wasHit) { - bool playSound = false; -#if CLIENT - playSound = LastAttackSoundTime < Timing.TotalTime - SoundInterval; - if (playSound) + if (character == Character.Controlled || GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) { - LastAttackSoundTime = SoundInterval; + ExecuteAttack(damageTarget, targetLimb, out attackResult); } +#if SERVER + GameMain.NetworkMember.CreateEntityEvent(character, new object[] + { + NetEntityEvent.Type.ExecuteAttack, + this, + (damageTarget as Entity)?.ID ?? Entity.NullEntityID, + damageTarget is Character && targetLimb != null ? Array.IndexOf(((Character)damageTarget).AnimController.Limbs, targetLimb) : 0 + }); #endif - if (damageTarget is Character targetCharacter && targetLimb != null) - { - attackResult = attack.DoDamageToLimb(character, targetLimb, WorldPosition, 1.0f, playSound); - } - else - { - attackResult = attack.DoDamage(character, damageTarget, WorldPosition, 1.0f, playSound); - } - if (structureBody != null && attack.StickChance > Rand.Range(0.0f, 1.0f, Rand.RandSync.Server)) - { - // TODO: use the hit pos? - var localFront = body.GetLocalFront(Params.GetSpriteOrientation()); - var from = body.FarseerBody.GetWorldPoint(localFront); - var to = from; - var drawPos = body.DrawPosition; - StickTo(structureBody, from, to); - } - attack.ResetAttackTimer(); - attack.SetCoolDown(); } Vector2 diff = attackSimPos - SimPosition; @@ -685,6 +732,7 @@ namespace Barotrauma { if (limbIndex < 0 || limbIndex >= character.AnimController.Limbs.Length) { continue; } Limb limb = character.AnimController.Limbs[limbIndex]; + if (limb.IsSevered) { continue; } diff = attackSimPos - limb.SimPosition; if (diff == Vector2.Zero) { continue; } limb.body.ApplyTorque(limb.Mass * character.AnimController.Dir * attack.Torque * limb.Params.AttackForceMultiplier); @@ -705,11 +753,49 @@ namespace Barotrauma if (!attack.IsRunning) { // Set the main collider where the body lands after the attack - character.AnimController.Collider.SetTransform(character.AnimController.MainLimb.body.SimPosition, rotation: 0); + character.AnimController.Collider.SetTransform(character.AnimController.MainLimb.body.SimPosition, rotation: character.AnimController.Collider.Rotation); } return wasHit; } + public void ExecuteAttack(IDamageable damageTarget, Limb targetLimb, out AttackResult attackResult) + { + bool playSound = false; +#if CLIENT + playSound = LastAttackSoundTime < Timing.TotalTime - SoundInterval; + if (playSound) + { + LastAttackSoundTime = SoundInterval; + } +#endif + if (damageTarget is Character targetCharacter && targetLimb != null) + { + attackResult = attack.DoDamageToLimb(character, targetLimb, WorldPosition, 1.0f, playSound); + } + else + { + if (damageTarget is Item targetItem && !targetItem.Prefab.DamagedByMonsters) + { + attackResult = new AttackResult(); + } + else + { + attackResult = attack.DoDamage(character, damageTarget, WorldPosition, 1.0f, playSound); + } + } + /*if (structureBody != null && attack.StickChance > Rand.Range(0.0f, 1.0f, Rand.RandSync.Server)) + { + // TODO: use the hit pos? + var localFront = body.GetLocalFront(Params.GetSpriteOrientation()); + var from = body.FarseerBody.GetWorldPoint(localFront); + var to = from; + var drawPos = body.DrawPosition; + StickTo(structureBody, from, to); + }*/ + attack.ResetAttackTimer(); + attack.SetCoolDown(); + } + private WeldJoint attachJoint; private WeldJoint colliderJoint; public bool IsStuck => attachJoint != null; @@ -769,6 +855,30 @@ namespace Barotrauma } } + private readonly List targets = new List(); + public void ApplyStatusEffects(ActionType actionType, float deltaTime) + { + foreach (StatusEffect statusEffect in statusEffects) + { + if (statusEffect.type != actionType) { continue; } + if (statusEffect.HasTargetType(StatusEffect.TargetType.NearbyItems) || + statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) + { + targets.Clear(); + statusEffect.GetNearbyTargets(WorldPosition, targets); + statusEffect.Apply(ActionType.OnActive, deltaTime, character, targets); + } + else + { + if (statusEffect.HasTargetType(StatusEffect.TargetType.Character)) + { + statusEffect.Apply(actionType, deltaTime, character, character, WorldPosition); + } + statusEffect.Apply(actionType, deltaTime, character, this, WorldPosition); + } + } + } + public void Remove() { body?.Remove(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/AnimationParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/AnimationParams.cs index 9f97ec0be..52d3ba651 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/AnimationParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/AnimationParams.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System.Collections.Generic; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System; using System.Linq; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/FishAnimations.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/FishAnimations.cs index 0d9f8a24e..275336876 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/FishAnimations.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Animation/FishAnimations.cs @@ -72,6 +72,12 @@ namespace Barotrauma [Editable, Serialize(true, true, description: "Should the character be flipped depending on which direction it faces. Should usually be enabled on all characters that have distinctive upper and lower sides.")] public bool Flip { get; set; } + [Serialize(1f, true, description: "Reduces continuous flipping when the character abruptly changes direction."), Editable] + public float FlipCooldown { get; set; } + + [Serialize(0.5f, true, description: "How much it takes before the character flips. The timer starts when the character starts to move in the different direction."), Editable] + public float FlipDelay { get; set; } + [Serialize(10.0f, true, description: "How much force is used to move the head to the correct position."), Editable(MinValueFloat = 0, MaxValueFloat = 100)] public float HeadMoveForce { get; set; } @@ -146,9 +152,18 @@ namespace Barotrauma [Editable, Serialize(true, true, description: "Should the character be flipped depending on which direction it faces. Should usually be enabled on all characters that have distinctive upper and lower sides.")] public bool Flip { get; set; } + [Serialize(1f, true, description: "Reduces continuous flipping when the character abruptly changes direction."), Editable] + public float FlipCooldown { get; set; } + + [Serialize(0.5f, true, description: "How much it takes before the character flips. The timer starts when the character starts to move in the different direction."), Editable] + public float FlipDelay { get; set; } + [Editable, Serialize(true, true, description: "If enabled, the character will simply be mirrored horizontally when it wants to turn around. If disabled, it will rotate itself to face the other direction.")] public bool Mirror { get; set; } + [Editable, Serialize(true, true, description: "Disabling this will make mirroring instantaneous.")] + public bool MirrorLerp { get; set; } + [Serialize(5f, true), Editable] public float WaveAmplitude { get; set; } @@ -205,7 +220,6 @@ namespace Barotrauma interface IFishAnimation { - bool Flip { get; set; } string FootAngles { get; set; } Dictionary FootAnglesInRadians { get; set; } float TailAngle { get; set; } @@ -214,5 +228,8 @@ namespace Barotrauma float TorsoTorque { get; set; } float TailTorque { get; set; } float FootTorque { get; set; } + bool Flip { get; set; } + float FlipCooldown { get; set; } + float FlipDelay { get; set; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs index 52d131b72..98d2eff2e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs @@ -25,10 +25,10 @@ namespace Barotrauma [Serialize("", true, description: "If defined, different species of the same group are considered like the characters of the same species by the AI."), Editable] public string Group { get; private set; } - [Serialize(false, true), Editable] + [Serialize(false, true), Editable(ReadOnly = true)] public bool Humanoid { get; private set; } - [Serialize(false, true), Editable] + [Serialize(false, true), Editable(ReadOnly = true)] public bool HasInfo { get; private set; } [Serialize(false, true), Editable] @@ -43,24 +43,36 @@ namespace Barotrauma [Serialize(false, true, description: "Can the creature live without water or does it die on dry land?"), Editable] public bool NeedsWater { get; set; } - [Serialize(false, true), Editable] + [Serialize(false, false), Editable] public bool CanSpeak { get; set; } - [Serialize(100f, true, description: "How much noise the character makes when moving?"), Editable(minValue: 0f, maxValue: 1000f)] + [Serialize(100f, true, description: "How much noise the character makes when moving?"), Editable(minValue: 0f, maxValue: 10000f)] public float Noise { get; set; } - [Serialize(100f, true, description: "How visible the character is?"), Editable(minValue: 0f, maxValue: 1000f)] + [Serialize(100f, true, description: "How visible the character is?"), Editable(minValue: 0f, maxValue: 10000f)] public float Visibility { get; set; } [Serialize("blood", true), Editable] public string BloodDecal { get; private set; } + [Serialize("blooddrop", true), Editable] + public string BleedParticleAir { get; private set; } + + [Serialize("waterblood", true), Editable] + public string BleedParticleWater { get; private set; } + [Serialize(10f, true, description: "How effectively/easily the character eats other characters. Affects the forces, the amount of particles, and the time required before the target is eaten away"), Editable(MinValueFloat = 1, MaxValueFloat = 1000, ValueStep = 1)] public float EatingSpeed { get; set; } [Serialize(1f, true, "Decreases the intensive path finding call frequency. Set to a lower value for insignificant creatures to improve performance."), Editable(minValue: 0f, maxValue: 1f)] public float PathFinderPriority { get; set; } + [Serialize(false, true), Editable] + public bool HideInSonar { get; set; } + + [Serialize(0f, true), Editable] + public float SonarDisruption { get; set; } + public readonly string File; public readonly List SubParams = new List(); @@ -465,8 +477,11 @@ namespace Barotrauma [Serialize(true, true, description: "Enforce aggressive behavior if the creature is spawned as a target of a monster mission."), Editable()] public bool EnforceAggressiveBehaviorForMissions { get; private set; } - [Serialize(false, true, description: "Should the character target or ignore walls when it's inside the submarine. Doesn't have any effect if no target priority for walls is defined."), Editable()] - public bool TargetInnerWalls { get; private set; } + [Serialize(true, true, description: "Should the character target or ignore walls when it's outside the submarine. Doesn't have any effect if no target priority for walls is defined."), Editable()] + public bool TargetOuterWalls { get; private set; } + + [Serialize(false, true, description: "If enabled, the character chooses randomly from the available attacks. The priority is used as a weight for weighted random."), Editable()] + public bool RandomAttack { get; private set; } // TODO: latchonto, swarming diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/EditableParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/EditableParams.cs index 66bf5f3c3..1a7fa97f7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/EditableParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/EditableParams.cs @@ -1,8 +1,12 @@ -using System.IO; -using System.Collections.Generic; -using System.Xml; +using System.Collections.Generic; using System.Xml.Linq; using Microsoft.Xna.Framework; +#if DEBUG +using System.IO; +using System.Xml; +#else +using Barotrauma.IO; +#endif namespace Barotrauma { @@ -75,7 +79,7 @@ namespace Barotrauma Folder = Path.GetDirectoryName(FullPath); } - public virtual bool Save(string fileNameWithoutExtension = null, XmlWriterSettings settings = null) + public virtual bool Save(string fileNameWithoutExtension = null, System.Xml.XmlWriterSettings settings = null) { if (!Directory.Exists(Folder)) { @@ -85,7 +89,7 @@ namespace Barotrauma Serialize(); if (settings == null) { - settings = new XmlWriterSettings + settings = new System.Xml.XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Ragdoll/RagdollParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Ragdoll/RagdollParams.cs index 0101cff43..c45cb5faa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Ragdoll/RagdollParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/Ragdoll/RagdollParams.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Xml.Linq; using System.Linq; -using System.IO; +using Barotrauma.IO; using System.Xml; using Barotrauma.Extensions; #if CLIENT @@ -470,6 +470,12 @@ namespace Barotrauma [Serialize(true, true), Editable] public bool CanBeSevered { get; set; } + [Serialize(1f, true, description:"Modifies the severance probability (defined per item/attack) when the character is alive. Currently only affects limbs of type None, Shield, or Tail on non-humanoid ragdolls. Also note that if CanBeSevered is false, this property doesn't have any effect."), Editable(MinValueFloat = 0, MaxValueFloat = 10, ValueStep = 0.1f, DecimalCount = 2)] + public float SeveranceProbabilityModifier { get; set; } + + [Serialize("gore", true), Editable] + public string BreakSound { get; set; } + [Serialize(true, true), Editable] public bool LimitEnabled { get; set; } @@ -605,7 +611,11 @@ namespace Barotrauma [Serialize(1f, true), Editable(DecimalCount = 2, MinValueFloat = 0, MaxValueFloat = 10)] public float AttackForceMultiplier { get; set; } + [Serialize(1f, true, description:"How much damage must be done by the attack in order to be able to cut off the limb. Note that it's evaluated after the damage modifiers."), Editable(DecimalCount = 0, MinValueFloat = 0, MaxValueFloat = 1000)] + public float MinSeveranceDamage { get; set; } + // Non-editable -> + // TODO: make read-only [Serialize(0, true)] public int HealthIndex { get; set; } @@ -813,6 +823,15 @@ namespace Barotrauma [Serialize("", true), Editable()] public string Texture { get; set; } + [Serialize("1.0,1.0,1.0,1.0", true), Editable()] + public Color Color { get; set; } + + [Serialize("1.0,1.0,1.0,1.0", true, description: "Target color when the character is dead."), Editable()] + public Color DeadColor { get; set; } + + [Serialize(0f, true, "How long it takes to fade into the dead color? 0 = Not applied."), Editable(DecimalCount = 1, MinValueFloat = 0, MaxValueFloat = 10)] + public float DeadColorTime { get; set; } + public override string Name => "Sprite"; public SpriteParams(XElement element, RagdollParams ragdoll) : base(element, ragdoll) { } @@ -927,7 +946,7 @@ namespace Barotrauma { public override string Name => "Light Texture"; - [Serialize("", true), Editable] + [Serialize("Content/Lights/pointlight_bright.png", true), Editable] public string Texture { get; private set; } [Serialize("0.5, 0.5", true), Editable(DecimalCount = 2)] diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/SkillSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/SkillSettings.cs index abe6aab58..433da2d10 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/SkillSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/SkillSettings.cs @@ -128,7 +128,7 @@ namespace Barotrauma if (Current == null) { - DebugConsole.NewMessage("Now skill settings found in the selected content packages. Using default values."); + DebugConsole.NewMessage("No skill settings found in the selected content packages. Using default values."); Current = new SkillSettings(null); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/ContentPackage.cs b/Barotrauma/BarotraumaShared/SharedSource/ContentPackage.cs index a9fe770d2..4be3f7eed 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ContentPackage.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ContentPackage.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Security.Cryptography; using System.Xml.Linq; @@ -53,7 +53,7 @@ namespace Barotrauma //these types of files are included in the MD5 hash calculation, //meaning that the players must have the exact same files to play together - private static HashSet multiplayerIncompatibleContent = new HashSet + public static HashSet MultiplayerIncompatibleContent { get; private set; } = new HashSet { ContentType.Jobs, ContentType.Item, @@ -67,6 +67,7 @@ namespace Barotrauma ContentType.RuinConfig, ContentType.Outpost, ContentType.Wreck, + ContentType.WreckAIConfig, ContentType.Afflictions, ContentType.Orders, ContentType.Corpses @@ -81,6 +82,7 @@ namespace Barotrauma ContentType.Structure, ContentType.Outpost, ContentType.Wreck, + ContentType.WreckAIConfig, ContentType.Text, ContentType.Executable, ContentType.ServerExecutable, @@ -159,7 +161,7 @@ namespace Barotrauma public bool HasMultiplayerIncompatibleContent { - get { return Files.Any(f => multiplayerIncompatibleContent.Contains(f.Type)); } + get { return Files.Any(f => MultiplayerIncompatibleContent.Contains(f.Type)); } } private ContentPackage() @@ -412,7 +414,42 @@ namespace Barotrauma doc.Root.Add(new XElement(file.Type.ToString(), new XAttribute("file", file.Path.CleanUpPathCrossPlatform()))); } - doc.Save(filePath); + doc.SaveSafe(filePath); + + var packagesToDeselect = List.Where(p => p.Path.CleanUpPath() == Path.CleanUpPath()).ToList(); + bool reselectPackage = false; + + if (packagesToDeselect.Any()) + { + foreach (var p in packagesToDeselect) + { + if (GameMain.Config.SelectedContentPackages.Contains(p)) + { + reselectPackage = true; + if (p.CorePackage) + { + GameMain.Config.SelectCorePackage(List.Find(cpp => cpp.CorePackage && !packagesToDeselect.Contains(cpp))); + } + else + { + GameMain.Config.DeselectContentPackage(p); + } + } + List.Remove(p); + } + List.Add(this); + if (reselectPackage) + { + if (CorePackage) + { + GameMain.Config.SelectCorePackage(this); + } + else + { + GameMain.Config.SelectContentPackage(this); + } + } + } } public void CalculateHash(bool logging = false) @@ -426,7 +463,7 @@ namespace Barotrauma foreach (ContentFile file in Files) { - if (!multiplayerIncompatibleContent.Contains(file.Type)) { continue; } + if (!MultiplayerIncompatibleContent.Contains(file.Type)) { continue; } try { @@ -537,7 +574,7 @@ namespace Barotrauma while (true) { - string temp = System.IO.Path.GetDirectoryName(path); + string temp = Barotrauma.IO.Path.GetDirectoryName(path); if (string.IsNullOrEmpty(temp)) { break; } path = temp; } @@ -578,7 +615,7 @@ namespace Barotrauma } } - string[] files = Directory.GetFiles(folder, "*.xml"); + IEnumerable files = Directory.GetFiles(folder, "*.xml"); List.Clear(); @@ -587,12 +624,12 @@ namespace Barotrauma List.Add(new ContentPackage(filePath)); } - string[] modDirectories = Directory.GetDirectories("Mods"); + IEnumerable modDirectories = Directory.GetDirectories("Mods"); foreach (string modDirectory in modDirectories) { - if (System.IO.Path.GetFileName(modDirectory.TrimEnd(System.IO.Path.DirectorySeparatorChar)) == "ExampleMod") { continue; } - string modFilePath = System.IO.Path.Combine(modDirectory, Steam.SteamManager.MetadataFileName); - string copyingFilePath = System.IO.Path.Combine(modDirectory, Steam.SteamManager.CopyIndicatorFileName); + if (Barotrauma.IO.Path.GetFileName(modDirectory.TrimEnd(Barotrauma.IO.Path.DirectorySeparatorChar)) == "ExampleMod") { continue; } + string modFilePath = Barotrauma.IO.Path.Combine(modDirectory, Steam.SteamManager.MetadataFileName); + string copyingFilePath = Barotrauma.IO.Path.Combine(modDirectory, Steam.SteamManager.CopyIndicatorFileName); if (File.Exists(copyingFilePath)) { //this mod didn't clean up its copying file; assume it's corrupted and delete it diff --git a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs index 88728b6fc..ac85be2a8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs @@ -8,7 +8,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; @@ -678,7 +678,7 @@ namespace Barotrauma NewMessage(Hull.EditFire ? "Fire spawning on" : "Fire spawning off", Color.White); }, isCheat: true)); - commands.Add(new Command("explosion", "explosion [range] [force] [damage] [structuredamage] [emp strength]: Creates an explosion at the position of the cursor.", null, isCheat: true)); + commands.Add(new Command("explosion", "explosion [range] [force] [damage] [structuredamage] [item damage] [emp strength]: Creates an explosion at the position of the cursor.", null, isCheat: true)); commands.Add(new Command("showseed|showlevelseed", "showseed: Show the seed of the current level.", (string[] args) => { @@ -692,7 +692,7 @@ namespace Barotrauma } },null)); - commands.Add(new Command("teleportsub", "teleportsub [start/end]: Teleport the submarine to the start or end of the level. WARNING: does not take outposts into account, so often leads to physics glitches. Only use for debugging.", (string[] args) => + commands.Add(new Command("teleportsub", "teleportsub [start/end/cursor]: Teleport the submarine to the position of the cursor, or the start or end of the level. WARNING: does not take outposts into account, so often leads to physics glitches. Only use for debugging.", (string[] args) => { if (Submarine.MainSub == null || Level.Loaded == null) return; @@ -975,6 +975,22 @@ namespace Barotrauma } })); + commands.Add(new Command("money", "", args => + { + if (args.Length == 0) { return; } + if (GameMain.GameSession.GameMode is CampaignMode campaign) + { + if (int.TryParse(args[0], out int money)) + { + campaign.Money += money; + } + else + { + ThrowError($"\"{args[0]}\" is not a valid numeric value."); + } + } + }, isCheat: true)); + commands.Add(new Command("difficulty|leveldifficulty", "difficulty [0-100]: Change the level difficulty setting in the server lobby.", null)); commands.Add(new Command("autoitemplacerdebug|outfitdebug", "autoitemplacerdebug: Toggle automatic item placer debug info on/off. The automatically placed items are listed in the debug console at the start of a round.", (string[] args) => diff --git a/Barotrauma/BarotraumaShared/SharedSource/Enums.cs b/Barotrauma/BarotraumaShared/SharedSource/Enums.cs index cdcb77796..3d70417af 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Enums.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Enums.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Barotrauma +namespace Barotrauma { public enum TransitionMode { @@ -13,4 +9,17 @@ namespace Barotrauma EaseOut, Exponential } + + public enum ActionType + { + Always, OnPicked, OnUse, OnSecondaryUse, + OnWearing, OnContaining, OnContained, OnNotContained, + OnActive, OnFailure, OnBroken, + OnFire, InWater, NotInWater, + OnImpact, + OnEating, + OnDeath = OnBroken, + OnDamaged, + OnSevered + } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs index f8e552ad9..28b55c962 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs @@ -1,4 +1,5 @@ -using Microsoft.Xna.Framework; +using FarseerPhysics; +using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; @@ -9,6 +10,8 @@ namespace Barotrauma { const float IntensityUpdateInterval = 5.0f; + const float CalculateDistanceTraveledInterval = 5.0f; + private Level level; private readonly List preloadedSprites = new List(); @@ -30,6 +33,11 @@ namespace Barotrauma private float intensityUpdateTimer; + private PathFinder pathFinder; + private float totalPathLength; + private float calculateDistanceTraveledTimer; + private float distanceTraveled; + private float avgCrewHealth, avgHullIntegrity, floodingAmount, fireAmount, enemyDanger; private float roundDuration; @@ -72,6 +80,10 @@ namespace Barotrauma pendingEventSets.Clear(); selectedEvents.Clear(); + pathFinder = new PathFinder(WayPoint.WayPointList, indoorsSteering: false); + var steeringPath = pathFinder.FindPath(ConvertUnits.ToSimUnits(Level.Loaded.StartPosition), ConvertUnits.ToSimUnits(Level.Loaded.EndPosition)); + totalPathLength = steeringPath.TotalLength; + this.level = level; SelectSettings(); @@ -137,7 +149,44 @@ namespace Barotrauma public void PreloadContent(IEnumerable contentFiles) { - foreach (ContentFile file in contentFiles) + var filesToPreload = new List(contentFiles); + foreach (Submarine sub in Submarine.Loaded) + { + if (sub.WreckAI == null) { continue; } + + if (!string.IsNullOrEmpty(sub.WreckAI.Config.DefensiveAgent)) + { + var prefab = CharacterPrefab.FindBySpeciesName(sub.WreckAI.Config.DefensiveAgent); + if (prefab != null && !filesToPreload.Any(f => f.Path == prefab.FilePath)) + { + filesToPreload.Add(new ContentFile(prefab.FilePath, ContentType.Character)); + } + } + foreach (Item item in Item.ItemList) + { + if (item.Submarine != sub) { continue; } + foreach (Items.Components.ItemComponent component in item.Components) + { + if (component.statusEffectLists == null) { continue; } + foreach (var statusEffectList in component.statusEffectLists.Values) + { + foreach (StatusEffect statusEffect in statusEffectList) + { + foreach (var spawnInfo in statusEffect.SpawnCharacters) + { + var prefab = CharacterPrefab.FindBySpeciesName(spawnInfo.SpeciesName); + if (prefab != null && !filesToPreload.Any(f => f.Path == prefab.FilePath)) + { + filesToPreload.Add(new ContentFile(prefab.FilePath, ContentType.Character)); + } + } + } + } + } + } + } + + foreach (ContentFile file in filesToPreload) { switch (file.Type) { @@ -225,7 +274,7 @@ namespace Barotrauma } else if (eventSet.PerWreck) { - applyCount = Submarine.Loaded.Count(s => s.Info.IsWreck && (s.ThalamusAI == null || !s.ThalamusAI.IsAlive)); + applyCount = Submarine.Loaded.Count(s => s.Info.IsWreck && (s.WreckAI == null || !s.WreckAI.IsAlive)); } for (int i = 0; i < applyCount; i++) { @@ -299,12 +348,9 @@ namespace Barotrauma private bool CanStartEventSet(ScriptedEventSet eventSet) { - float distFromStart = Vector2.Distance(Submarine.MainSub.WorldPosition, level.StartPosition); - float distFromEnd = Vector2.Distance(Submarine.MainSub.WorldPosition, level.EndPosition); - - float distanceTraveled = MathHelper.Clamp( - (Submarine.MainSub.WorldPosition.X - level.StartPosition.X) / (level.EndPosition.X - level.StartPosition.X), - 0.0f, 1.0f); + ISpatialEntity refEntity = GetRefEntity(); + float distFromStart = Vector2.Distance(refEntity.WorldPosition, level.StartPosition); + float distFromEnd = Vector2.Distance(refEntity.WorldPosition, level.EndPosition); //don't create new events if within 50 meters of the start/end of the level if (!eventSet.AllowAtStart) @@ -367,6 +413,13 @@ namespace Barotrauma } } + calculateDistanceTraveledTimer -= deltaTime; + if (calculateDistanceTraveledTimer <= 0.0f) + { + distanceTraveled = CalculateDistanceTraveled(); + calculateDistanceTraveledTimer = CalculateDistanceTraveledInterval; + } + eventThreshold += settings.EventThresholdIncrease * deltaTime; if (eventCoolDown > 0.0f) { @@ -514,5 +567,62 @@ namespace Barotrauma currentIntensity = MathHelper.Max(0.0025f * IntensityUpdateInterval, targetIntensity); } } + + private float CalculateDistanceTraveled() + { + var refEntity = GetRefEntity(); + Vector2 target = ConvertUnits.ToSimUnits(Level.Loaded.EndPosition); + var steeringPath = pathFinder.FindPath(ConvertUnits.ToSimUnits(refEntity.WorldPosition), target); + if (steeringPath.Unreachable || float.IsPositiveInfinity(totalPathLength)) + { + //use horizontal position in the level as a fallback if a path can't be found + return MathHelper.Clamp((refEntity.WorldPosition.X - level.StartPosition.X) / (level.EndPosition.X - level.StartPosition.X), 0.0f, 1.0f); + } + else + { + return MathHelper.Clamp(1.0f - steeringPath.TotalLength / totalPathLength, 0.0f, 1.0f); + } + } + + + /// + /// Get the entity that should be used in determining how far the player has progressed in the level. + /// = The submarine or player character that has progressed the furthest. + /// + private ISpatialEntity GetRefEntity() + { + ISpatialEntity refEntity = Submarine.MainSub; +#if CLIENT + if (Character.Controlled != null) + { + if (Character.Controlled.Submarine != null && + Character.Controlled.Submarine.Info.Type == SubmarineInfo.SubmarineType.Player) + { + refEntity = Character.Controlled.Submarine; + } + else + { + refEntity = Character.Controlled; + } + } +#else + foreach (Barotrauma.Networking.Client client in GameMain.Server.ConnectedClients) + { + if (client.Character == null) { continue; } + //only take the players inside a player sub into account. + //Otherwise the system could be abused by for example making a respawned player wait + //close to the destination outpost + if (client.Character.Submarine != null && + client.Character.Submarine.Info.Type == SubmarineInfo.SubmarineType.Player) + { + if (client.Character.Submarine.WorldPosition.X > refEntity.WorldPosition.X) + { + refEntity = client.Character.Submarine; + } + } + } +#endif + return refEntity; + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManagerSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManagerSettings.cs index d6923a024..1f425f4ff 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManagerSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManagerSettings.cs @@ -24,8 +24,9 @@ namespace Barotrauma public readonly float MinLevelDifficulty = 0.0f; public readonly float MaxLevelDifficulty = 100.0f; - static EventManagerSettings() + public static void Init() { + List.Clear(); foreach (ContentFile file in GameMain.Instance.GetFilesOfType(ContentType.EventManagerSettings)) { Load(file); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs index 20c2dafd9..222cad5c0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs @@ -108,23 +108,6 @@ namespace Barotrauma subs[1].SetPosition(subs[1].FindSpawnPos(Level.Loaded.EndPosition)); subs[1].FlipX(); - //prevent wifi components from communicating between subs - List wifiComponents = new List(); - foreach (Item item in Item.ItemList) - { - wifiComponents.AddRange(item.GetComponents()); - } - foreach (WifiComponent wifiComponent in wifiComponents) - { - for (int i = 0; i < 2; i++) - { - if (wifiComponent.Item.Submarine == subs[i] || subs[i].ConnectedDockingPorts.ContainsKey(wifiComponent.Item.Submarine)) - { - wifiComponent.TeamID = subs[i].TeamID; - } - } - } - crews = new List[] { new List(), new List() }; foreach (Submarine submarine in Submarine.Loaded) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/MonsterMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/MonsterMission.cs index 88c43fabb..7bc3c98f3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/MonsterMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/MonsterMission.cs @@ -70,7 +70,7 @@ namespace Barotrauma monsterFiles.Add(new Tuple(monster, new Point(min, max))); } description = description.Replace("[monster]", - TextManager.Get("character." + System.IO.Path.GetFileNameWithoutExtension(monsterFileName))); + TextManager.Get("character." + Barotrauma.IO.Path.GetFileNameWithoutExtension(monsterFileName))); } public override void Start(Level level) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/SalvageMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/SalvageMission.cs index 70c347779..2c3333212 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/SalvageMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/SalvageMission.cs @@ -1,8 +1,10 @@ -using FarseerPhysics; +using Barotrauma.Extensions; +using FarseerPhysics; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; +using System.Xml.Linq; namespace Barotrauma { @@ -17,11 +19,14 @@ namespace Barotrauma private readonly string containerTag; private readonly string existingItemTag; - - private bool usedExistingItem; - + private readonly bool showMessageWhenPickedUp; + /// + /// Status effects executed on the target item when the mission starts. A random effect is chosen from each child list. + /// + private readonly List> statusEffects = new List>(); + public override IEnumerable SonarPositions { get @@ -71,6 +76,29 @@ namespace Barotrauma { spawnPositionType = Level.PositionType.Cave | Level.PositionType.Ruin; } + + foreach (XElement element in prefab.ConfigElement.Elements()) + { + switch (element.Name.ToString().ToLowerInvariant()) + { + case "statuseffect": + { + var newEffect = StatusEffect.Load(element, parentDebugName: prefab.Name); + if (newEffect == null) { continue; } + statusEffects.Add(new List { newEffect }); + break; + } + case "chooserandom": + statusEffects.Add(new List()); + foreach (XElement subElement in element.Elements()) + { + var newEffect = StatusEffect.Load(subElement, parentDebugName: prefab.Name); + if (newEffect == null) { continue; } + statusEffects.Last().Add(newEffect); + } + break; + } + } } public override void Start(Level level) @@ -103,7 +131,9 @@ namespace Barotrauma if (Submarine.RectContains(worldBorders, it.WorldPosition)) { item = it; +#if SERVER usedExistingItem = true; +#endif break; } } @@ -118,6 +148,18 @@ namespace Barotrauma item.FindHull(); } + for (int i = 0; i < statusEffects.Count; i++) + { + List effectList = statusEffects[i]; + if (effectList.Count == 0) { continue; } + int effectIndex = Rand.Int(effectList.Count); + var selectedEffect = effectList[effectIndex]; + item.ApplyStatusEffect(selectedEffect, selectedEffect.type, deltaTime: 1.0f, worldPosition: item.Position); +#if SERVER + executedEffectIndices.Add(new Pair(i, effectIndex)); +#endif + } + //try to find a container and place the item inside it if (!string.IsNullOrEmpty(containerTag) && item.ParentInventory == null) { @@ -147,15 +189,23 @@ namespace Barotrauma public override void Update(float deltaTime) { + if (item == null) + { +#if DEBUG + DebugConsole.ThrowError("Error in salvage mission " + Prefab.Identifier + " (item was null)"); +#endif + return; + } + if (IsClient) { - if (item.ParentInventory != null) { item.body.FarseerBody.BodyType = BodyType.Dynamic; } + if (item.ParentInventory != null && item.body != null) { item.body.FarseerBody.BodyType = BodyType.Dynamic; } return; } switch (State) { case 0: - if (item.ParentInventory != null) { item.body.FarseerBody.BodyType = BodyType.Dynamic; } + if (item.ParentInventory != null && item.body != null) { item.body.FarseerBody.BodyType = BodyType.Dynamic; } if (showMessageWhenPickedUp) { if (!(item.ParentInventory?.Owner is Character)) { return; } @@ -175,7 +225,10 @@ namespace Barotrauma public override void End() { - if (item.CurrentHull?.Submarine == null || !item.CurrentHull.Submarine.AtEndPosition || item.Removed) { return; } + if (item.CurrentHull?.Submarine == null || (!item.CurrentHull.Submarine.AtEndPosition && !item.CurrentHull.Submarine.AtStartPosition) || item.Removed) + { + return; + } item?.Remove(); item = null; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs index 8be908783..ff9a21312 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs @@ -118,13 +118,13 @@ namespace Barotrauma private List GetAvailableSpawnPositions() { - var availablePositions = Level.Loaded.PositionsOfInterest.FindAll(p => spawnPosType.HasFlag(p.PositionType) && !Level.Loaded.UsedPositions.Contains(p)); + var availablePositions = Level.Loaded.PositionsOfInterest.FindAll(p => spawnPosType.HasFlag(p.PositionType)); var removals = new List(); foreach (var position in availablePositions) { if (position.Submarine != null) { - if (position.Submarine.ThalamusAI != null && position.Submarine.ThalamusAI.IsAlive) + if (position.Submarine.WreckAI != null && position.Submarine.WreckAI.IsAlive) { removals.Add(position); } @@ -169,10 +169,6 @@ namespace Barotrauma if (Rand.Value(Rand.RandSync.Server) > prefab.SpawnProbability) { removedPositions.Add(position); - if (prefab.AllowOnlyOnce) - { - Level.Loaded.UsedPositions.Add(position); - } } } removedPositions.ForEach(p => availablePositions.Remove(p)); @@ -237,17 +233,15 @@ namespace Barotrauma spawnPos = chosenPosition.Position.ToVector2(); if (chosenPosition.Submarine != null || chosenPosition.Ruin != null) { - var spawnPoint = WayPoint.GetRandom(SpawnType.Enemy, sub: chosenPosition.Submarine, useSyncedRand: false); - if (spawnPoint != null) + var spawnPoint = WayPoint.GetRandom(SpawnType.Enemy, sub: chosenPosition.Submarine, ruin: chosenPosition.Ruin, useSyncedRand: false); + if (spawnPoint != null) { - spawnPos = spawnPoint.WorldPosition; + System.Diagnostics.Debug.Assert(spawnPoint.Submarine == chosenPosition.Submarine); + System.Diagnostics.Debug.Assert(spawnPoint.ParentRuin == chosenPosition.Ruin); + spawnPos = spawnPoint.WorldPosition; } } spawnPending = true; - if (prefab.AllowOnlyOnce) - { - Level.Loaded.UsedPositions.Add(chosenPosition); - } } } @@ -276,11 +270,14 @@ namespace Barotrauma if (spawnPending) { //wait until there are no submarines at the spawnpos - foreach (Submarine submarine in Submarine.Loaded) + if (spawnPosType == Level.PositionType.MainPath) { - if (submarine.Info.Type != SubmarineInfo.SubmarineType.Player) { continue; } - float minDist = GetMinDistanceToSub(submarine); - if (Vector2.DistanceSquared(submarine.WorldPosition, spawnPos.Value) < minDist * minDist) { return; } + foreach (Submarine submarine in Submarine.Loaded) + { + if (submarine.Info.Type != SubmarineInfo.SubmarineType.Player) { continue; } + float minDist = GetMinDistanceToSub(submarine); + if (Vector2.DistanceSquared(submarine.WorldPosition, spawnPos.Value) < minDist * minDist) { return; } + } } //if spawning in a ruin/cave, wait for someone to be close to it to spawning diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/ScriptedEventPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/ScriptedEventPrefab.cs index a6dc76b1e..877988d39 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/ScriptedEventPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/ScriptedEventPrefab.cs @@ -11,7 +11,6 @@ namespace Barotrauma public readonly Type EventType; public readonly string MusicType; public readonly float SpawnProbability; - public readonly bool AllowOnlyOnce; public float Commonness; public ScriptedEventPrefab(XElement element) @@ -34,7 +33,6 @@ namespace Barotrauma } Commonness = element.GetAttributeFloat("commonness", 1.0f); SpawnProbability = Math.Clamp(element.GetAttributeFloat("spawnprobability", 1.0f), 0, 1); - AllowOnlyOnce = element.GetAttributeBool("allowonlyonce", false); } public ScriptedEvent CreateInstance() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs b/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs index b2dfb78c1..ecc1c2d72 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs @@ -32,13 +32,22 @@ namespace Barotrauma.Extensions public static T GetRandom(this IEnumerable source, Func predicate, Rand.RandSync randSync = Rand.RandSync.Unsynced) { + if (predicate == null) { return GetRandom(source, randSync); } return source.Where(predicate).GetRandom(randSync); } public static T GetRandom(this IEnumerable source, Rand.RandSync randSync = Rand.RandSync.Unsynced) { - int count = source.Count(); - return count == 0 ? default(T) : source.ElementAt(Rand.Range(0, count, randSync)); + if (source is IList list) + { + int count = list.Count; + return count == 0 ? default : list[Rand.Range(0, count, randSync)]; + } + else + { + int count = source.Count(); + return count == 0 ? default : source.ElementAt(Rand.Range(0, count, randSync)); + } } /// diff --git a/Barotrauma/BarotraumaShared/SharedSource/FrameCounter.cs b/Barotrauma/BarotraumaShared/SharedSource/FrameCounter.cs index 647d4c6d8..0b4d5c016 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/FrameCounter.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/FrameCounter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; namespace Barotrauma @@ -42,7 +43,7 @@ namespace Barotrauma public float GetAverageElapsedMillisecs(string identifier) { if (!avgTicksPerFrame.ContainsKey(identifier)) return 0.0f; - return avgTicksPerFrame[identifier] / (float)TimeSpan.TicksPerMillisecond; + return avgTicksPerFrame[identifier] * 1000.0f / (float)Stopwatch.Frequency; } public bool Update(double deltaTime) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameAnalyticsManager.cs b/Barotrauma/BarotraumaShared/SharedSource/GameAnalyticsManager.cs index b634bf35a..3975c1cd3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameAnalyticsManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameAnalyticsManager.cs @@ -2,7 +2,7 @@ using System; using System.Text; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Reflection; using System.Security.Cryptography; diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs index d60200a7a..2cf23ecdb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs @@ -160,7 +160,7 @@ namespace Barotrauma bool success = false; if (Rand.Value() > validContainer.Value.SpawnProbability) { return false; } // Don't add dangerously reactive materials in thalamus wrecks - if (validContainer.Key.Item.Submarine.ThalamusAI != null && itemPrefab.Tags.Contains("explodesinwater")) + if (validContainer.Key.Item.Submarine.WreckAI != null && itemPrefab.Tags.Contains("explodesinwater")) { return false; } @@ -174,6 +174,10 @@ namespace Barotrauma } var item = new Item(itemPrefab, validContainer.Key.Item.Position, validContainer.Key.Item.Submarine); + foreach (WifiComponent wifiComponent in item.GetComponents()) + { + wifiComponent.TeamID = validContainer.Key.Item.Submarine.TeamID; + } spawnedItems.Add(item); #if SERVER Entity.Spawner.CreateNetworkEvent(item, remove: false); diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs index ad7a1b428..02d14dbb9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs @@ -1,4 +1,5 @@ using Barotrauma.Items.Components; +using FarseerPhysics; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -20,8 +21,9 @@ namespace Barotrauma class CargoManager { - private readonly List purchasedItems; + public const int MaxQuantity = 100; + private readonly List purchasedItems; private readonly CampaignMode campaign; public Action OnItemsChanged; @@ -115,9 +117,25 @@ namespace Barotrauma ItemPrefab containerPrefab = null; foreach (PurchasedItem pi in itemsToSpawn) { + float floorPos = cargoRoom.Rect.Y - cargoRoom.Rect.Height; + Vector2 position = new Vector2( Rand.Range(cargoRoom.Rect.X + 20, cargoRoom.Rect.Right - 20), - cargoRoom.Rect.Y - cargoRoom.Rect.Height + pi.ItemPrefab.Size.Y / 2); + floorPos); + + //check where the actual floor structure is in case the bottom of the hull extends below it + if (Submarine.PickBody( + ConvertUnits.ToSimUnits(new Vector2(position.X, cargoRoom.Rect.Y - cargoRoom.Rect.Height / 2)), + ConvertUnits.ToSimUnits(position), + collisionCategory: Physics.CollisionWall) != null) + { + float floorStructurePos = ConvertUnits.ToDisplayUnits(Submarine.LastPickedPosition.Y); + if (floorStructurePos > floorPos) + { + floorPos = floorStructurePos; + } + } + position.Y = floorPos + pi.ItemPrefab.Size.Y / 2; ItemContainer itemContainer = null; if (!string.IsNullOrEmpty(pi.ItemPrefab.CargoContainerIdentifier)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs index 39fd4452c..3561f8ce9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -4,7 +4,7 @@ using System; using System.Linq; using System.Xml.Linq; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; namespace Barotrauma { @@ -113,6 +113,7 @@ namespace Barotrauma { if (c.Character?.Info != null && !c.Character.IsDead) { + c.Character.ResetCurrentOrder(); c.CharacterInfo = c.Character.Info; characterData.Add(new CharacterCampaignData(c)); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs index 47490a8d7..c90e1ed40 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs @@ -1,4 +1,5 @@ -using Barotrauma.Items.Components; +using Barotrauma.IO; +using Barotrauma.Items.Components; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -9,7 +10,7 @@ namespace Barotrauma { partial class GameSession { - public enum InfoFrameTab { Crew, Mission, MyCharacter, ManagePlayers }; + public enum InfoFrameTab { Crew, Mission, MyCharacter, Traitor }; public readonly EventManager EventManager; @@ -231,7 +232,7 @@ namespace Barotrauma if (port.Item.WorldPosition.Y < Submarine.WorldPosition.Y) { continue; } float dist = Vector2.DistanceSquared(port.Item.WorldPosition, level.StartOutpost.WorldPosition); - if (myPort == null || dist < closestDistance || (port.MainDockingPort && !myPort.MainDockingPort)) + if ((myPort == null || dist < closestDistance || port.MainDockingPort) && !(myPort?.MainDockingPort ?? false)) { myPort = port; closestDistance = dist; @@ -351,6 +352,8 @@ namespace Barotrauma OnClicked = (GUIButton button, object obj) => { GUIMessageBox.MessageBoxes.Remove(summaryFrame); return true; } }; } + + TabMenu.OnRoundEnded(); #endif EventManager?.EndRound(); @@ -461,7 +464,7 @@ namespace Barotrauma try { - doc.Save(filePath); + doc.SaveSafe(filePath); } catch (Exception e) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSettings.cs index cf1ddf4a9..58d0c9bc0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSettings.cs @@ -2,8 +2,7 @@ using System.Xml.Linq; using System.Collections.Generic; using Microsoft.Xna.Framework; -using System.Xml; -using System.IO; +using Barotrauma.IO; using Barotrauma.Extensions; #if CLIENT using Microsoft.Xna.Framework.Input; @@ -37,6 +36,8 @@ namespace Barotrauma public bool VSyncEnabled { get; set; } + public bool TextureCompressionEnabled { get; set; } + public bool EnableSplashScreen { get; set; } public int ParticleLimit { get; set; } @@ -66,6 +67,7 @@ namespace Barotrauma #if CLIENT private KeyOrMouse[] keyMapping; + private KeyOrMouse[] inventoryKeyMapping; #endif private WindowMode windowMode; @@ -91,6 +93,7 @@ namespace Barotrauma set { /*do nothing*/ } } #endif + public bool UseDualModeSockets { get; set; } = true; public bool AutoUpdateWorkshopItems; @@ -117,6 +120,19 @@ namespace Barotrauma set { jobPreferences = value; } } + public bool AreJobPreferencesEqual(List> compareTo) + { + if (jobPreferences == null || compareTo == null) return false; + if (jobPreferences.Count != compareTo.Count) return false; + + for (int i = 0; i < jobPreferences.Count; i++) + { + if (jobPreferences[i].First != compareTo[i].First || jobPreferences[i].Second != compareTo[i].Second) return false; + } + + return true; + } + public int CharacterHeadIndex { get; set; } public int CharacterHairIndex { get; set; } public int CharacterBeardIndex { get; set; } @@ -193,7 +209,7 @@ namespace Barotrauma { musicVolume = MathHelper.Clamp(value, 0.0f, 1.0f); #if CLIENT - GameMain.SoundManager?.SetCategoryGainMultiplier("music", musicVolume, 0); + GameMain.SoundManager?.SetCategoryGainMultiplier("music", musicVolume * 0.7f, 0); #endif } } @@ -203,13 +219,20 @@ namespace Barotrauma get { return voiceChatVolume; } set { - voiceChatVolume = MathHelper.Clamp(value, 0.0f, 1.0f); + voiceChatVolume = MathHelper.Clamp(value, 0.0f, 2.0f); #if CLIENT - GameMain.SoundManager?.SetCategoryGainMultiplier("voip", voiceChatVolume, 0); + GameMain.SoundManager?.SetCategoryGainMultiplier("voip", Math.Min(voiceChatVolume, 1.0f), 0); #endif } } + + public int VoiceChatCutoffPrevention + { + get; + set; + } + public const float MaxMicrophoneVolume = 10.0f; public float MicrophoneVolume { @@ -246,7 +269,7 @@ namespace Barotrauma public bool TextManagerDebugModeEnabled { get; set; } #endif - private FileSystemWatcher modsFolderWatcher; + private System.IO.FileSystemWatcher modsFolderWatcher; private int ContentFileLoadOrder(ContentFile a) { @@ -280,58 +303,11 @@ namespace Barotrauma !otherCorePackage.Files.Any(f2 => Path.GetFullPath(f1.Path).CleanUpPath() == Path.GetFullPath(f2.Path).CleanUpPath())).ToList(); - bool shouldRefreshSubs = false; - bool shouldRefreshFabricationRecipes = false; - bool shouldRefreshSoundPlayer = false; - bool shouldRefreshRuinGenerationParams = false; - bool shouldRefreshScriptedEventSets = false; - bool shouldRefreshMissionPrefabs = false; - bool shouldRefreshLevelObjectPrefabs = false; - bool shouldRefreshLocationTypes = false; - bool shouldRefreshMapGenerationParams = false; - bool shouldRefreshLevelGenerationParams = false; - bool shouldRefreshAfflictions = false; + DisableContentPackageItems(filesToRemove.OrderBy(ContentFileLoadOrder)); - DisableContentPackageItems(filesToRemove.OrderBy(ContentFileLoadOrder), - ref shouldRefreshSubs, - ref shouldRefreshFabricationRecipes, - ref shouldRefreshSoundPlayer, - ref shouldRefreshRuinGenerationParams, - ref shouldRefreshScriptedEventSets, - ref shouldRefreshMissionPrefabs, - ref shouldRefreshLevelObjectPrefabs, - ref shouldRefreshLocationTypes, - ref shouldRefreshMapGenerationParams, - ref shouldRefreshLevelGenerationParams, - ref shouldRefreshAfflictions); + EnableContentPackageItems(filesToAdd.OrderBy(ContentFileLoadOrder)); - EnableContentPackageItems(filesToAdd.OrderBy(ContentFileLoadOrder), - ref shouldRefreshSubs, - ref shouldRefreshFabricationRecipes, - ref shouldRefreshSoundPlayer, - ref shouldRefreshRuinGenerationParams, - ref shouldRefreshScriptedEventSets, - ref shouldRefreshMissionPrefabs, - ref shouldRefreshLevelObjectPrefabs, - ref shouldRefreshLocationTypes, - ref shouldRefreshMapGenerationParams, - ref shouldRefreshLevelGenerationParams, - ref shouldRefreshAfflictions); - - if (shouldRefreshAfflictions) { AfflictionPrefab.LoadAll(GameMain.Instance.GetFilesOfType(ContentType.Afflictions)); } - if (shouldRefreshSubs) { SubmarineInfo.RefreshSavedSubs(); } - if (shouldRefreshFabricationRecipes) { ItemPrefab.InitFabricationRecipes(); } - if (shouldRefreshRuinGenerationParams) { RuinGeneration.RuinGenerationParams.ClearAll(); } - if (shouldRefreshScriptedEventSets) { ScriptedEventSet.LoadPrefabs(); } - if (shouldRefreshMissionPrefabs) { MissionPrefab.Init(); } - if (shouldRefreshLevelObjectPrefabs) { LevelObjectPrefab.LoadAll(); } - if (shouldRefreshLocationTypes) { LocationType.Init(); } - if (shouldRefreshMapGenerationParams) { MapGenerationParams.Init(); } - if (shouldRefreshLevelGenerationParams) { LevelGenerationParams.LoadPresets(); } - -#if CLIENT - if (shouldRefreshSoundPlayer) { SoundPlayer.Init().ForEach(_ => { return; }); } -#endif + RefreshContentPackageItems(filesToAdd.Concat(filesToRemove)); } public void SelectContentPackage(ContentPackage contentPackage) @@ -341,45 +317,9 @@ namespace Barotrauma SelectedContentPackages.Add(contentPackage); ContentPackage.SortContentPackages(); - bool shouldRefreshSubs = false; - bool shouldRefreshFabricationRecipes = false; - bool shouldRefreshSoundPlayer = false; - bool shouldRefreshRuinGenerationParams = false; - bool shouldRefreshScriptedEventSets = false; - bool shouldRefreshMissionPrefabs = false; - bool shouldRefreshLevelObjectPrefabs = false; - bool shouldRefreshLocationTypes = false; - bool shouldRefreshMapGenerationParams = false; - bool shouldRefreshLevelGenerationParams = false; - bool shouldRefreshAfflictions = false; + EnableContentPackageItems(contentPackage.Files.OrderBy(ContentFileLoadOrder)); - EnableContentPackageItems(contentPackage.Files.OrderBy(ContentFileLoadOrder), - ref shouldRefreshSubs, - ref shouldRefreshFabricationRecipes, - ref shouldRefreshSoundPlayer, - ref shouldRefreshRuinGenerationParams, - ref shouldRefreshScriptedEventSets, - ref shouldRefreshMissionPrefabs, - ref shouldRefreshLevelObjectPrefabs, - ref shouldRefreshLocationTypes, - ref shouldRefreshMapGenerationParams, - ref shouldRefreshLevelGenerationParams, - ref shouldRefreshAfflictions); - - if (shouldRefreshAfflictions) { AfflictionPrefab.LoadAll(GameMain.Instance.GetFilesOfType(ContentType.Afflictions)); } - if (shouldRefreshSubs) { SubmarineInfo.RefreshSavedSubs(); } - if (shouldRefreshFabricationRecipes) { ItemPrefab.InitFabricationRecipes(); } - if (shouldRefreshRuinGenerationParams) { RuinGeneration.RuinGenerationParams.ClearAll(); } - if (shouldRefreshScriptedEventSets) { ScriptedEventSet.LoadPrefabs(); } - if (shouldRefreshMissionPrefabs) { MissionPrefab.Init(); } - if (shouldRefreshLevelObjectPrefabs) { LevelObjectPrefab.LoadAll(); } - if (shouldRefreshLocationTypes) { LocationType.Init(); } - if (shouldRefreshMapGenerationParams) { MapGenerationParams.Init(); } - if (shouldRefreshLevelGenerationParams) { LevelGenerationParams.LoadPresets(); } - -#if CLIENT - if (shouldRefreshSoundPlayer) { SoundPlayer.Init().ForEach(_ => { return; }); } -#endif + RefreshContentPackageItems(contentPackage.Files); } } @@ -390,61 +330,14 @@ namespace Barotrauma SelectedContentPackages.Remove(contentPackage); ContentPackage.SortContentPackages(); - bool shouldRefreshSubs = false; - bool shouldRefreshFabricationRecipes = false; - bool shouldRefreshSoundPlayer = false; - bool shouldRefreshRuinGenerationParams = false; - bool shouldRefreshScriptedEventSets = false; - bool shouldRefreshMissionPrefabs = false; - bool shouldRefreshLevelObjectPrefabs = false; - bool shouldRefreshLocationTypes = false; - bool shouldRefreshMapGenerationParams = false; - bool shouldRefreshLevelGenerationParams = false; - bool shouldRefreshAfflictions = false; + DisableContentPackageItems(contentPackage.Files.OrderBy(ContentFileLoadOrder)); - DisableContentPackageItems(contentPackage.Files.OrderBy(ContentFileLoadOrder), - ref shouldRefreshSubs, - ref shouldRefreshFabricationRecipes, - ref shouldRefreshSoundPlayer, - ref shouldRefreshRuinGenerationParams, - ref shouldRefreshScriptedEventSets, - ref shouldRefreshMissionPrefabs, - ref shouldRefreshLevelObjectPrefabs, - ref shouldRefreshLocationTypes, - ref shouldRefreshMapGenerationParams, - ref shouldRefreshLevelGenerationParams, - ref shouldRefreshAfflictions); - - if (shouldRefreshAfflictions) { AfflictionPrefab.LoadAll(GameMain.Instance.GetFilesOfType(ContentType.Afflictions)); } - if (shouldRefreshSubs) { SubmarineInfo.RefreshSavedSubs(); } - if (shouldRefreshFabricationRecipes) { ItemPrefab.InitFabricationRecipes(); } - if (shouldRefreshRuinGenerationParams) { RuinGeneration.RuinGenerationParams.ClearAll(); } - if (shouldRefreshScriptedEventSets) { ScriptedEventSet.LoadPrefabs(); } - if (shouldRefreshMissionPrefabs) { MissionPrefab.Init(); } - if (shouldRefreshLevelObjectPrefabs) { LevelObjectPrefab.LoadAll(); } - if (shouldRefreshLocationTypes) { LocationType.Init(); } - if (shouldRefreshMapGenerationParams) { MapGenerationParams.Init(); } - if (shouldRefreshLevelGenerationParams) { LevelGenerationParams.LoadPresets(); } - -#if CLIENT - if (shouldRefreshSoundPlayer) { SoundPlayer.Init().ForEach(_ => { return; }); } -#endif + RefreshContentPackageItems(contentPackage.Files); } } - private void EnableContentPackageItems(IOrderedEnumerable files, - ref bool shouldRefreshSubs, - ref bool shouldRefreshFabricationRecipes, - ref bool shouldRefreshSoundPlayer, - ref bool shouldRefreshRuinGenerationParams, - ref bool shouldRefreshScriptedEventSets, - ref bool shouldRefreshMissionPrefabs, - ref bool shouldRefreshLevelObjectPrefabs, - ref bool shouldRefreshLocationTypes, - ref bool shouldRefreshMapGenerationParams, - ref bool shouldRefreshLevelGenerationParams, - ref bool shouldRefreshAfflictions) + private void EnableContentPackageItems(IOrderedEnumerable files) { foreach (ContentFile file in files) { @@ -453,6 +346,9 @@ namespace Barotrauma case ContentType.Character: CharacterPrefab.LoadFromFile(file); break; + case ContentType.Corpses: + CorpsePrefab.LoadFromFile(file); + break; case ContentType.NPCConversations: NPCConversation.LoadFromFile(file); break; @@ -461,7 +357,6 @@ namespace Barotrauma break; case ContentType.Item: ItemPrefab.LoadFromFile(file); - shouldRefreshFabricationRecipes = true; break; case ContentType.ItemAssembly: new ItemAssemblyPrefab(file.Path); @@ -469,40 +364,10 @@ namespace Barotrauma case ContentType.Structure: StructurePrefab.LoadFromFile(file); break; - case ContentType.Submarine: - shouldRefreshSubs = true; - break; case ContentType.Text: TextManager.LoadTextPack(file.Path); break; - case ContentType.Afflictions: - shouldRefreshAfflictions = true; - break; - case ContentType.RuinConfig: - shouldRefreshRuinGenerationParams = true; - break; - case ContentType.RandomEvents: - shouldRefreshScriptedEventSets = true; - break; - case ContentType.Missions: - shouldRefreshMissionPrefabs = true; - break; - case ContentType.LevelObjectPrefabs: - shouldRefreshLevelObjectPrefabs = true; - break; - case ContentType.LocationTypes: - shouldRefreshLocationTypes = true; - break; - case ContentType.MapGenerationParameters: - shouldRefreshMapGenerationParams = true; - break; - case ContentType.LevelGenerationParameters: - shouldRefreshLevelGenerationParams = true; - break; #if CLIENT - case ContentType.Sounds: - shouldRefreshSoundPlayer = true; - break; case ContentType.Particles: GameMain.ParticleManager?.LoadPrefabsFromFile(file); break; @@ -516,18 +381,7 @@ namespace Barotrauma } } - private void DisableContentPackageItems(IOrderedEnumerable files, - ref bool shouldRefreshSubs, - ref bool shouldRefreshFabricationRecipes, - ref bool shouldRefreshSoundPlayer, - ref bool shouldRefreshRuinGenerationParams, - ref bool shouldRefreshScriptedEventSets, - ref bool shouldRefreshMissionPrefabs, - ref bool shouldRefreshLevelObjectPrefabs, - ref bool shouldRefreshLocationTypes, - ref bool shouldRefreshMapGenerationParams, - ref bool shouldRefreshLevelGenerationParams, - ref bool shouldRefreshAfflictions) + private void DisableContentPackageItems(IOrderedEnumerable files) { foreach (ContentFile file in files) { @@ -536,6 +390,9 @@ namespace Barotrauma case ContentType.Character: CharacterPrefab.RemoveByFile(file.Path); break; + case ContentType.Corpses: + CorpsePrefab.RemoveByFile(file.Path); + break; case ContentType.NPCConversations: NPCConversation.RemoveByFile(file.Path); break; @@ -544,7 +401,6 @@ namespace Barotrauma break; case ContentType.Item: ItemPrefab.RemoveByFile(file.Path); - shouldRefreshFabricationRecipes = true; break; case ContentType.ItemAssembly: ItemAssemblyPrefab.Remove(file.Path); @@ -552,40 +408,10 @@ namespace Barotrauma case ContentType.Structure: StructurePrefab.RemoveByFile(file.Path); break; - case ContentType.Submarine: - shouldRefreshSubs = true; - break; case ContentType.Text: TextManager.RemoveTextPack(file.Path); break; - case ContentType.Afflictions: - shouldRefreshAfflictions = true; - break; - case ContentType.RuinConfig: - shouldRefreshRuinGenerationParams = true; - break; - case ContentType.RandomEvents: - shouldRefreshScriptedEventSets = true; - break; - case ContentType.Missions: - shouldRefreshMissionPrefabs = true; - break; - case ContentType.LevelObjectPrefabs: - shouldRefreshLevelObjectPrefabs = true; - break; - case ContentType.LocationTypes: - shouldRefreshLocationTypes = true; - break; - case ContentType.MapGenerationParameters: - shouldRefreshMapGenerationParams = true; - break; - case ContentType.LevelGenerationParameters: - shouldRefreshLevelGenerationParams = true; - break; #if CLIENT - case ContentType.Sounds: - shouldRefreshSoundPlayer = true; - break; case ContentType.Particles: GameMain.ParticleManager?.RemovePrefabsByFile(file.Path); break; @@ -599,39 +425,74 @@ namespace Barotrauma } } + private void RefreshContentPackageItems(IEnumerable files) + { + if (files.Any(f => f.Type == ContentType.Afflictions)) { AfflictionPrefab.LoadAll(GameMain.Instance.GetFilesOfType(ContentType.Afflictions)); } + if (files.Any(f => f.Type == ContentType.Submarine)) { SubmarineInfo.RefreshSavedSubs(); } + if (files.Any(f => f.Type == ContentType.Item)) { ItemPrefab.InitFabricationRecipes(); } + if (files.Any(f => f.Type == ContentType.RuinConfig)) { RuinGeneration.RuinGenerationParams.ClearAll(); } + if (files.Any(f => f.Type == ContentType.RandomEvents)) { ScriptedEventSet.LoadPrefabs(); } + if (files.Any(f => f.Type == ContentType.Missions)) { MissionPrefab.Init(); } + if (files.Any(f => f.Type == ContentType.LevelObjectPrefabs)) { LevelObjectPrefab.LoadAll(); } + if (files.Any(f => f.Type == ContentType.LocationTypes)) { LocationType.Init(); } + if (files.Any(f => f.Type == ContentType.MapGenerationParameters)) { MapGenerationParams.Init(); } + if (files.Any(f => f.Type == ContentType.LevelGenerationParameters)) { LevelGenerationParams.LoadPresets(); } + if (files.Any(f => f.Type == ContentType.TraitorMissions)) { TraitorMissionPrefab.Init(); } + if (files.Any(f => f.Type == ContentType.Orders)) { Order.Init(); } + if (files.Any(f => f.Type == ContentType.EventManagerSettings)) { EventManagerSettings.Init(); } + if (files.Any(f => f.Type == ContentType.WreckAIConfig)) { WreckAIConfig.LoadAll(); } + if (files.Any(f => f.Type == ContentType.SkillSettings)) { SkillSettings.Load(GameMain.Instance.GetFilesOfType(ContentType.SkillSettings)); } + +#if CLIENT + if (files.Any(f => f.Type == ContentType.Tutorials)) { Tutorial.Init(); } + if (files.Any(f => f.Type == ContentType.Sounds)) { SoundPlayer.Init().ForEach(_ => { return; }); } +#endif + } + + private readonly static ContentType[] hotswappableContentTypes = new ContentType[] + { + ContentType.Character, + ContentType.Corpses, + ContentType.NPCConversations, + ContentType.Jobs, + ContentType.Orders, + ContentType.EventManagerSettings, + ContentType.Item, + ContentType.ItemAssembly, + ContentType.Structure, + ContentType.Submarine, + ContentType.Text, + ContentType.Afflictions, + ContentType.RuinConfig, + ContentType.RandomEvents, + ContentType.Missions, + ContentType.LevelObjectPrefabs, + ContentType.LocationTypes, + ContentType.MapGenerationParameters, + ContentType.LevelGenerationParameters, + ContentType.Sounds, + ContentType.Particles, + ContentType.Decals, + ContentType.Outpost, + ContentType.Wreck, + ContentType.WreckAIConfig, + ContentType.BackgroundCreaturePrefabs, + ContentType.ServerExecutable, + ContentType.TraitorMissions, + ContentType.Tutorials, + ContentType.SkillSettings, + ContentType.None + }; + private void UpdateContentPackageDirtyFlag(ContentFile file) { - switch (file.Type) + if (!hotswappableContentTypes.Contains(file.Type)) { - case ContentType.Character: - case ContentType.NPCConversations: - case ContentType.Jobs: - case ContentType.Item: - case ContentType.ItemAssembly: - case ContentType.Structure: - case ContentType.Submarine: - case ContentType.Text: - case ContentType.Afflictions: - case ContentType.RuinConfig: - case ContentType.RandomEvents: - case ContentType.Missions: - case ContentType.LevelObjectPrefabs: - case ContentType.LocationTypes: - case ContentType.MapGenerationParameters: - case ContentType.LevelGenerationParameters: - case ContentType.Sounds: - case ContentType.Particles: - case ContentType.Decals: - case ContentType.Outpost: - case ContentType.Wreck: - case ContentType.BackgroundCreaturePrefabs: - case ContentType.ServerExecutable: - case ContentType.None: - break; //do nothing here if the content type is supported - default: + if (ContentPackage.MultiplayerIncompatibleContent.Contains(file.Type)) + { ContentPackageSelectionDirty = true; - ContentPackageSelectionDirtyNotification = true; - break; + } + ContentPackageSelectionDirtyNotification = true; } } @@ -661,6 +522,11 @@ namespace Barotrauma LocationType.Init(); MapGenerationParams.Init(); LevelGenerationParams.LoadPresets(); + TraitorMissionPrefab.Init(); + Order.Init(); + EventManagerSettings.Init(); + WreckAIConfig.LoadAll(); + SkillSettings.Load(GameMain.Instance.GetFilesOfType(ContentType.SkillSettings)); #if CLIENT GameMain.DecalManager.Prefabs.SortAll(); @@ -733,6 +599,10 @@ namespace Barotrauma public bool ShowLanguageSelectionPrompt { get; set; } private bool showTutorialSkipWarning = true; + + public static bool EnableSubmarineAutoSave { get; set; } + public static Color SubEditorBackgroundColor { get; set; } + public bool ShowTutorialSkipWarning { get { return showTutorialSkipWarning && CompletedTutorialNames.Count == 0; } @@ -755,21 +625,21 @@ namespace Barotrauma LoadPlayerConfig(); - modsFolderWatcher = new FileSystemWatcher("Mods"); + modsFolderWatcher = new System.IO.FileSystemWatcher("Mods"); modsFolderWatcher.Filter = "*"; - modsFolderWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; + modsFolderWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName; modsFolderWatcher.Created += OnModFolderUpdate; modsFolderWatcher.Deleted += OnModFolderUpdate; modsFolderWatcher.Renamed += OnModFolderUpdate; modsFolderWatcher.EnableRaisingEvents = true; } - private void OnModFolderUpdate(object sender, FileSystemEventArgs e) + private void OnModFolderUpdate(object sender, System.IO.FileSystemEventArgs e) { if (SuppressModFolderWatcher || (GameMain.NetworkMember?.IsClient ?? false)) { return; } switch (e.ChangeType) { - case WatcherChangeTypes.Created: + case System.IO.WatcherChangeTypes.Created: { string cpPath = Path.GetFullPath(Path.Combine(e.FullPath, Steam.SteamManager.MetadataFileName)).CleanUpPath(); if (File.Exists(cpPath) && !ContentPackage.List.Any(cp => Path.GetFullPath(cp.Path).CleanUpPath() == cpPath)) @@ -779,7 +649,7 @@ namespace Barotrauma } } break; - case WatcherChangeTypes.Deleted: + case System.IO.WatcherChangeTypes.Deleted: { string cpPath = Path.GetFullPath(Path.Combine(e.FullPath, Steam.SteamManager.MetadataFileName)).CleanUpPath(); var toRemove = ContentPackage.List.Where(cp => Path.GetFullPath(cp.Path).CleanUpPath() == cpPath).ToList(); @@ -802,9 +672,9 @@ namespace Barotrauma } } break; - case WatcherChangeTypes.Renamed: + case System.IO.WatcherChangeTypes.Renamed: { - RenamedEventArgs renameArgs = e as RenamedEventArgs; + System.IO.RenamedEventArgs renameArgs = e as System.IO.RenamedEventArgs; string cpPath = Path.GetFullPath(Path.Combine(renameArgs.OldFullPath, Steam.SteamManager.MetadataFileName)).CleanUpPath(); var toRemove = ContentPackage.List.Where(cp => Path.GetFullPath(cp.Path).CleanUpPath() == cpPath).ToList(); @@ -884,8 +754,11 @@ namespace Barotrauma new XAttribute("soundvolume", soundVolume), new XAttribute("microphonevolume", microphoneVolume), new XAttribute("voicechatvolume", voiceChatVolume), + new XAttribute("voicechatcutoffprevention", VoiceChatCutoffPrevention), new XAttribute("verboselogging", VerboseLogging), new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs), + new XAttribute("submarineautosave", EnableSubmarineAutoSave), + new XAttribute("subeditorbackground", XMLExtensions.ColorToString(SubEditorBackgroundColor)), new XAttribute("enablesplashscreen", EnableSplashScreen), new XAttribute("usesteammatchmaking", UseSteamMatchmaking), new XAttribute("quickstartsub", QuickStartSubmarineName), @@ -952,13 +825,29 @@ namespace Barotrauma doc.Root.Add(keyMappingElement); for (int i = 0; i < keyMapping.Length; i++) { - if (keyMapping[i].MouseButton == MouseButton.None) + KeyOrMouse bind = keyMapping[i]; + if (bind.MouseButton == MouseButton.None) { - keyMappingElement.Add(new XAttribute(((InputType)i).ToString(), keyMapping[i].Key)); + keyMappingElement.Add(new XAttribute(((InputType)i).ToString(), bind.Key)); } else { - keyMappingElement.Add(new XAttribute(((InputType)i).ToString(), keyMapping[i].MouseButton)); + keyMappingElement.Add(new XAttribute(((InputType)i).ToString(), bind.MouseButton)); + } + } + + var inventoryKeyMappingElement = new XElement("inventorykeymapping"); + doc.Root.Add(inventoryKeyMappingElement); + for (int i = 0; i < inventoryKeyMapping.Length; i++) + { + KeyOrMouse bind = inventoryKeyMapping[i]; + if (bind.MouseButton == MouseButton.None) + { + inventoryKeyMappingElement.Add(new XAttribute($"slot{i}", bind.Key)); + } + else + { + inventoryKeyMappingElement.Add(new XAttribute($"slot{i}", bind.MouseButton)); } } #endif @@ -986,7 +875,7 @@ namespace Barotrauma new XAttribute("faceattachmentindex", CharacterFaceAttachmentIndex)); doc.Root.Add(playerElement); - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, @@ -1082,7 +971,7 @@ namespace Barotrauma SelectedContentPackages.Clear(); foreach (string path in contentPackagePaths) { - var matchingContentPackage = ContentPackage.List.Find(cp => System.IO.Path.GetFullPath(cp.Path).CleanUpPath() == path.CleanUpPath()); + var matchingContentPackage = ContentPackage.List.Find(cp => Barotrauma.IO.Path.GetFullPath(cp.Path).CleanUpPath() == path.CleanUpPath()); if (matchingContentPackage == null) { @@ -1196,6 +1085,8 @@ namespace Barotrauma new XAttribute("soundvolume", soundVolume), new XAttribute("verboselogging", VerboseLogging), new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs), + new XAttribute("submarineautosave", EnableSubmarineAutoSave), + new XAttribute("subeditorbackground", XMLExtensions.ColorToString(SubEditorBackgroundColor)), new XAttribute("enablesplashscreen", EnableSplashScreen), new XAttribute("usesteammatchmaking", UseSteamMatchmaking), new XAttribute("quickstartsub", QuickStartSubmarineName), @@ -1210,7 +1101,8 @@ namespace Barotrauma new XAttribute("editordisclaimershown", EditorDisclaimerShown), new XAttribute("tutorialskipwarning", ShowTutorialSkipWarning), new XAttribute("corpsedespawndelay", CorpseDespawnDelay), - new XAttribute("corpsespersubdespawnthreshold", CorpsesPerSubDespawnThreshold) + new XAttribute("corpsespersubdespawnthreshold", CorpsesPerSubDespawnThreshold), + new XAttribute("usedualmodesockets", UseDualModeSockets) #if DEBUG , new XAttribute("automaticquickstartenabled", AutomaticQuickStartEnabled) , new XAttribute("textmanagerdebugmodeenabled", TextManagerDebugModeEnabled) @@ -1248,6 +1140,7 @@ namespace Barotrauma new XAttribute("width", GraphicsWidth), new XAttribute("height", GraphicsHeight), new XAttribute("vsync", VSyncEnabled), + new XAttribute("compresstextures", TextureCompressionEnabled), new XAttribute("framelimit", Timing.FrameLimit), new XAttribute("displaymode", windowMode)); } @@ -1262,13 +1155,14 @@ namespace Barotrauma new XAttribute("musicvolume", musicVolume), new XAttribute("soundvolume", soundVolume), new XAttribute("voicechatvolume", voiceChatVolume), + new XAttribute("voicechatcutoffprevention", VoiceChatCutoffPrevention), new XAttribute("microphonevolume", microphoneVolume), new XAttribute("muteonfocuslost", MuteOnFocusLost), new XAttribute("dynamicrangecompressionenabled", DynamicRangeCompressionEnabled), new XAttribute("voipattenuationenabled", VoipAttenuationEnabled), new XAttribute("usedirectionalvoicechat", UseDirectionalVoiceChat), new XAttribute("voicesetting", VoiceSetting), - new XAttribute("voicecapturedevice", VoiceCaptureDevice ?? ""), + new XAttribute("voicecapturedevice", System.Xml.XmlConvert.EncodeName(VoiceCaptureDevice ?? "")), new XAttribute("noisegatethreshold", NoiseGateThreshold)); XElement gSettings = doc.Root.Element("graphicssettings"); @@ -1308,6 +1202,21 @@ namespace Barotrauma keyMappingElement.Add(new XAttribute(((InputType)i).ToString(), keyMapping[i].MouseButton)); } } + + var inventoryKeyMappingElement = new XElement("inventorykeymapping"); + doc.Root.Add(inventoryKeyMappingElement); + for (int i = 0; i < inventoryKeyMapping.Length; i++) + { + KeyOrMouse bind = inventoryKeyMapping[i]; + if (bind.MouseButton == MouseButton.None) + { + inventoryKeyMappingElement.Add(new XAttribute($"slot{i}", bind.Key)); + } + else + { + inventoryKeyMappingElement.Add(new XAttribute($"slot{i}", bind.MouseButton)); + } + } #endif var gameplay = new XElement("gameplay"); @@ -1352,7 +1261,7 @@ namespace Barotrauma } doc.Root.Add(tutorialElement); - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, @@ -1386,6 +1295,8 @@ namespace Barotrauma AutoCheckUpdates = doc.Root.GetAttributeBool("autocheckupdates", AutoCheckUpdates); sendUserStatistics = doc.Root.GetAttributeBool("senduserstatistics", sendUserStatistics); QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", QuickStartSubmarineName); + EnableSubmarineAutoSave = doc.Root.GetAttributeBool("submarineautosave", true); + SubEditorBackgroundColor = doc.Root.GetAttributeColor("subeditorbackground", new Color(0.051f, 0.149f, 0.271f, 1.0f)); UseSteamMatchmaking = doc.Root.GetAttributeBool("usesteammatchmaking", UseSteamMatchmaking); RequireSteamAuthentication = doc.Root.GetAttributeBool("requiresteamauthentication", RequireSteamAuthentication); EnableSplashScreen = doc.Root.GetAttributeBool("enablesplashscreen", EnableSplashScreen); @@ -1399,6 +1310,7 @@ namespace Barotrauma CampaignDisclaimerShown = doc.Root.GetAttributeBool("campaigndisclaimershown", CampaignDisclaimerShown); EditorDisclaimerShown = doc.Root.GetAttributeBool("editordisclaimershown", EditorDisclaimerShown); ShowTutorialSkipWarning = doc.Root.GetAttributeBool("tutorialskipwarning", true); + UseDualModeSockets = doc.Root.GetAttributeBool("usedualmodesockets", true); #if DEBUG AutomaticQuickStartEnabled = doc.Root.GetAttributeBool("automaticquickstartenabled", AutomaticQuickStartEnabled); TextManagerDebugModeEnabled = doc.Root.GetAttributeBool("textmanagerdebugmodeenabled", TextManagerDebugModeEnabled); @@ -1450,6 +1362,7 @@ namespace Barotrauma GraphicsWidth = graphicsMode.GetAttributeInt("width", GraphicsWidth); GraphicsHeight = graphicsMode.GetAttributeInt("height", GraphicsHeight); VSyncEnabled = graphicsMode.GetAttributeBool("vsync", VSyncEnabled); + TextureCompressionEnabled = graphicsMode.GetAttributeBool("compresstextures", TextureCompressionEnabled); Timing.FrameLimit = graphicsMode.GetAttributeInt("framelimit", 200); XElement graphicsSettings = doc.Root.Element("graphicssettings"); @@ -1487,10 +1400,11 @@ namespace Barotrauma DynamicRangeCompressionEnabled = audioSettings.GetAttributeBool("dynamicrangecompressionenabled", DynamicRangeCompressionEnabled); VoipAttenuationEnabled = audioSettings.GetAttributeBool("voipattenuationenabled", VoipAttenuationEnabled); VoiceChatVolume = audioSettings.GetAttributeFloat("voicechatvolume", VoiceChatVolume); + VoiceChatCutoffPrevention = audioSettings.GetAttributeInt("voicechatcutoffprevention", VoiceChatCutoffPrevention); MuteOnFocusLost = audioSettings.GetAttributeBool("muteonfocuslost", MuteOnFocusLost); UseDirectionalVoiceChat = audioSettings.GetAttributeBool("usedirectionalvoicechat", UseDirectionalVoiceChat); - VoiceCaptureDevice = audioSettings.GetAttributeString("voicecapturedevice", VoiceCaptureDevice); + VoiceCaptureDevice = System.Xml.XmlConvert.DecodeName(audioSettings.GetAttributeString("voicecapturedevice", VoiceCaptureDevice)); NoiseGateThreshold = audioSettings.GetAttributeFloat("noisegatethreshold", NoiseGateThreshold); MicrophoneVolume = audioSettings.GetAttributeFloat("microphonevolume", MicrophoneVolume); string voiceSettingStr = audioSettings.GetAttributeString("voicesetting", ""); @@ -1532,6 +1446,7 @@ namespace Barotrauma GraphicsWidth = 0; GraphicsHeight = 0; VSyncEnabled = true; + TextureCompressionEnabled = true; Timing.FrameLimit = 200; #if DEBUG EnableSplashScreen = false; diff --git a/Barotrauma/BarotraumaShared/SharedSource/InputType.cs b/Barotrauma/BarotraumaShared/SharedSource/InputType.cs index addbfee1c..b3ae7c280 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/InputType.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/InputType.cs @@ -13,6 +13,7 @@ namespace Barotrauma SelectNextCharacter, SelectPreviousCharacter, Voice, + LocalVoice, Deselect, Shoot, Command, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs index e962781f8..9d70d1f58 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs @@ -150,7 +150,15 @@ namespace Barotrauma /// public override bool TryPutItem(Item item, Character user, List allowedSlots = null, bool createNetworkEvent = true) { - if (allowedSlots == null || !allowedSlots.Any()) return false; + if (allowedSlots == null || !allowedSlots.Any()) { return false; } + if (item == null) + { +#if DEBUG + throw new Exception("item null"); +#else + return false; +#endif + } bool inSuitableSlot = false; bool inWrongSlot = false; @@ -167,7 +175,7 @@ namespace Barotrauma } } //all good - if (inSuitableSlot && !inWrongSlot) return true; + if (inSuitableSlot && !inWrongSlot) { return true; } //try to place the item in a LimbSlot.Any slot if that's allowed if (allowedSlots.Contains(InvSlotType.Any) && item.AllowedSlots.Contains(InvSlotType.Any)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs index b320d792d..5764c311c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs @@ -5,7 +5,7 @@ using FarseerPhysics.Dynamics.Joints; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -29,6 +29,7 @@ namespace Barotrauma.Items.Components private Door door; private Body[] bodies; + private Fixture outsideBlocker; private Body doorBody; private bool docked; @@ -58,7 +59,7 @@ namespace Barotrauma.Items.Components set; } - [Serialize(false, false, description: "If set to true, this docking port is used when spawning the submarine docked to an outpost (if possible).")] + [Editable, Serialize(false, true, description: "If set to true, this docking port is used when spawning the submarine docked to an outpost (if possible).")] public bool MainDockingPort { get; @@ -113,6 +114,12 @@ namespace Barotrauma.Items.Components { if (DockingTarget != null) { + if (IsHorizontal) + { + DockingDir = 0; + DockingDir = GetDir(DockingTarget); + DockingTarget.DockingDir = -DockingDir; + } if (joint != null) { CreateJoint(joint is WeldJoint); @@ -259,6 +266,12 @@ namespace Barotrauma.Items.Components { item.CreateServerEvent(this); } +#else + if (GameMain.Client != null && GameMain.Client.MidRoundSyncing && + (item.Submarine == Submarine.MainSub || DockingTarget.item.Submarine == Submarine.MainSub)) + { + Screen.Selected.Cam.Position = Submarine.MainSub.WorldPosition; + } #endif } @@ -461,6 +474,12 @@ namespace Barotrauma.Items.Components } } + if (leftSubRightSide == int.MinValue || rightSubLeftSide == int.MaxValue) + { + DebugConsole.NewMessage("Creating hulls between docking ports failed. Could not find a hull next to the docking port."); + return; + } + //expand left hull to the rightmost hull of the sub at the left side //(unless the difference is more than 100 units - if the distance is very large //there's something wrong with the positioning of the docking ports or submarine hulls) @@ -469,7 +488,8 @@ namespace Barotrauma.Items.Components { if (leftHullDiff > 100) { - DebugConsole.ThrowError("Creating hulls between docking ports failed. The leftmost docking port seems to be very far from any hulls in the left-side submarine."); + DebugConsole.NewMessage("Creating hulls between docking ports failed. The leftmost docking port seems to be very far from any hulls in the left-side submarine."); + return; } else { @@ -483,7 +503,8 @@ namespace Barotrauma.Items.Components { if (rightHullDiff > 100) { - DebugConsole.ThrowError("Creating hulls between docking ports failed. The rightmost docking port seems to be very far from any hulls in the right-side submarine."); + DebugConsole.NewMessage("Creating hulls between docking ports failed. The rightmost docking port seems to be very far from any hulls in the right-side submarine."); + return; } else { @@ -506,6 +527,16 @@ namespace Barotrauma.Items.Components } } + if (rightHullDiff <= 100 && hulls[0].Submarine != null) + { + outsideBlocker = hulls[0].Submarine.PhysicsBody.FarseerBody.CreateRectangle( + ConvertUnits.ToSimUnits(hullRects[0].Width + hullRects[1].Width), + ConvertUnits.ToSimUnits(hullRects[0].Height), + density: 0.0f, + offset: ConvertUnits.ToSimUnits(new Vector2(hullRects[0].Right, hullRects[0].Y - hullRects[0].Height / 2) - hulls[0].Submarine.HiddenSubPosition)); + outsideBlocker.UserData = this; + } + gap = new Gap(new Rectangle(hullRects[0].Right - 2, hullRects[0].Y, 4, hullRects[0].Height), true, subs[0]); } else @@ -540,6 +571,12 @@ namespace Barotrauma.Items.Components } } + if (upperSubBottom == int.MaxValue || lowerSubTop == int.MinValue) + { + DebugConsole.NewMessage("Creating hulls between docking ports failed. Could not find a hull next to the docking port."); + return; + } + //expand lower hull to the topmost hull of the lower sub //(unless the difference is more than 100 units - if the distance is very large //there's something wrong with the positioning of the docking ports or submarine hulls) @@ -548,7 +585,8 @@ namespace Barotrauma.Items.Components { if (lowerHullDiff > 100) { - DebugConsole.ThrowError("Creating hulls between docking ports failed. The lower docking port seems to be very far from any hulls in the lower submarine."); + DebugConsole.NewMessage("Creating hulls between docking ports failed. The lower docking port seems to be very far from any hulls in the lower submarine."); + return; } else { @@ -561,7 +599,8 @@ namespace Barotrauma.Items.Components { if (upperHullDiff > 100) { - DebugConsole.ThrowError("Creating hulls between docking ports failed. The upper docking port seems to be very far from any hulls in the upper submarine."); + DebugConsole.NewMessage("Creating hulls between docking ports failed. The upper docking port seems to be very far from any hulls in the upper submarine."); + return; } else { @@ -575,7 +614,8 @@ namespace Barotrauma.Items.Components int midHullDiff = ((hullRects[1].Y - hullRects[1].Height) - hullRects[0].Y) + 2; if (midHullDiff > 100) { - DebugConsole.ThrowError("Creating hulls between docking ports failed. The upper hull seems to be very far from the lower hull."); + DebugConsole.NewMessage("Creating hulls between docking ports failed. The upper hull seems to be very far from the lower hull."); + return; } else if (midHullDiff > 0) { @@ -584,15 +624,33 @@ namespace Barotrauma.Items.Components hullRects[1].Height += midHullDiff / 2 + 1; } + for (int i = 0; i < 2; i++) { hullRects[i].Location -= MathUtils.ToPoint((subs[i].WorldPosition - subs[i].HiddenSubPosition)); hulls[i] = new Hull(MapEntityPrefab.Find(null, "hull"), hullRects[i], subs[i]); hulls[i].AddToGrid(subs[i]); hulls[i].FreeID(); + + for (int j = 0; j < 2; j++) + { + bodies[i + j * 2] = GameMain.World.CreateEdge( + ConvertUnits.ToSimUnits(new Vector2(hullRects[i].X + hullRects[i].Width * j, hullRects[i].Y)), + ConvertUnits.ToSimUnits(new Vector2(hullRects[i].X + hullRects[i].Width * j, hullRects[i].Y - hullRects[i].Height))); + } } - gap = new Gap(new Rectangle(hullRects[0].X, hullRects[0].Y+2, hullRects[0].Width, 4), false, subs[0]); + if (midHullDiff <= 100 && hulls[0].Submarine != null) + { + outsideBlocker = hulls[0].Submarine.PhysicsBody.FarseerBody.CreateRectangle( + ConvertUnits.ToSimUnits(hullRects[0].Width), + ConvertUnits.ToSimUnits(hullRects[0].Height + hullRects[1].Height), + density: 0.0f, + offset: ConvertUnits.ToSimUnits(new Vector2(hullRects[0].Center.X, hullRects[0].Y) - hulls[0].Submarine.HiddenSubPosition)); + outsideBlocker.UserData = this; + } + + gap = new Gap(new Rectangle(hullRects[0].X, hullRects[0].Y + 2, hullRects[0].Width, 4), false, subs[0]); } LinkHullsToGaps(); @@ -609,7 +667,7 @@ namespace Barotrauma.Items.Components foreach (Body body in bodies) { - if (body == null) continue; + if (body == null) { continue; } body.BodyType = BodyType.Static; body.Friction = 0.5f; @@ -769,6 +827,9 @@ namespace Barotrauma.Items.Components bodies = null; } + outsideBlocker?.Body.Remove(outsideBlocker); + outsideBlocker = null; + Item.Submarine.EnableObstructedWaypoints(); obstructedWayPointsDisabled = false; @@ -880,12 +941,12 @@ namespace Barotrauma.Items.Components float closestDist = 30.0f * 30.0f; foreach (Item it in Item.ItemList) { - if (it.Submarine != item.Submarine) continue; + if (it.Submarine != item.Submarine) { continue; } var doorComponent = it.GetComponent(); - if (doorComponent == null) continue; + if (doorComponent == null || doorComponent.IsHorizontal == IsHorizontal) { continue; } - float distSqr = Vector2.Distance(item.Position, it.Position); + float distSqr = Vector2.DistanceSquared(item.Position, it.Position); if (distSqr < closestDist) { door = doorComponent; @@ -958,12 +1019,12 @@ namespace Barotrauma.Items.Components if (docked) { if (item.Submarine != null && DockingTarget?.item?.Submarine != null) - GameServer.Log(sender.LogName + " docked " + item.Submarine.Info.Name + " to " + DockingTarget.item.Submarine.Info.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(sender) + " docked " + item.Submarine.Info.Name + " to " + DockingTarget.item.Submarine.Info.Name, ServerLog.MessageType.ItemInteraction); } else { if (item.Submarine != null && prevDockingTarget?.item?.Submarine != null) - GameServer.Log(sender.LogName + " undocked " + item.Submarine.Info.Name + " from " + prevDockingTarget.item.Submarine.Info.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(sender) + " undocked " + item.Submarine.Info.Name + " from " + prevDockingTarget.item.Submarine.Info.Name, ServerLog.MessageType.ItemInteraction); } } #endif diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Door.cs index 45d565f4c..0d766b44c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Door.cs @@ -4,7 +4,7 @@ using FarseerPhysics.Dynamics; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; #if CLIENT @@ -38,12 +38,17 @@ namespace Barotrauma.Items.Components } } + //how much "less stuck" partially doors get when opened + const float StuckReductionOnOpen = 30.0f; + private float resetPredictionTimer; private float toggleCooldownTimer; private Character lastUser; private float damageSoundCooldown; + private double lastBrokenTime; + private Rectangle doorRect; private bool isBroken; @@ -53,7 +58,7 @@ namespace Barotrauma.Items.Components get { return isBroken; } set { - if (isBroken == value) return; + if (isBroken == value) { return; } isBroken = value; if (isBroken) { @@ -63,6 +68,9 @@ namespace Barotrauma.Items.Components { EnableBody(); } +#if SERVER + item.CreateServerEvent(this); +#endif } } @@ -85,7 +93,7 @@ namespace Barotrauma.Items.Components if (isOpen || isBroken || !CanBeWelded) return; stuck = MathHelper.Clamp(value, 0.0f, 100.0f); if (stuck <= 0.0f) { IsStuck = false; } - if (stuck >= 100.0f) { IsStuck = true; } + if (stuck >= 99.0f) { IsStuck = true; } } } @@ -203,10 +211,16 @@ namespace Barotrauma.Items.Components break; } } + + IsActive = true; + } + public override void OnItemLoaded() + { + //do this here because the scale of the item might not be set to the final value yet in the constructor doorRect = new Rectangle( item.Rect.Center.X - (int)(doorSprite.size.X / 2 * item.Scale), - item.Rect.Y - item.Rect.Height/2 + (int)(doorSprite.size.Y / 2.0f * item.Scale), + item.Rect.Y - item.Rect.Height / 2 + (int)(doorSprite.size.Y / 2.0f * item.Scale), (int)(doorSprite.size.X * item.Scale), (int)(doorSprite.size.Y * item.Scale)); @@ -224,8 +238,6 @@ namespace Barotrauma.Items.Components Body.SetTransformIgnoreContacts( ConvertUnits.ToSimUnits(new Vector2(doorRect.Center.X, doorRect.Y - doorRect.Height / 2)), 0.0f); - - IsActive = true; } public override void Move(Vector2 amount) @@ -295,6 +307,7 @@ namespace Barotrauma.Items.Components PickingTime = 0; ToggleState(ActionType.OnUse, character); PickingTime = originalPickingTime; + StopPicking(picker); } #if CLIENT else if (hasRequiredItems && character != null && character == Character.Controlled) @@ -313,8 +326,9 @@ namespace Barotrauma.Items.Components if (isBroken) { + lastBrokenTime = Timing.TotalTime; //the door has to be restored to 50% health before collision detection on the body is re-enabled - if (item.ConditionPercentage > 50.0f) + if (item.ConditionPercentage > 50.0f && (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer)) { IsBroken = false; } @@ -363,7 +377,10 @@ namespace Barotrauma.Items.Components public override void UpdateBroken(float deltaTime, Camera cam) { base.UpdateBroken(deltaTime, cam); - IsBroken = true; + if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) + { + IsBroken = true; + } } private void EnableBody() @@ -502,6 +519,7 @@ namespace Barotrauma.Items.Components foreach (Limb limb in c.AnimController.Limbs) { + if (limb.IsSevered) { continue; } if (PushBodyOutOfDoorway(c, limb.body, dir, simPos, simSize) && damageSoundCooldown <= 0.0f) { #if CLIENT @@ -564,7 +582,12 @@ namespace Barotrauma.Items.Components body.ApplyLinearImpulse(new Vector2(dir * 2.0f, isOpen ? 0.0f : -1.0f), maxVelocity: NetConfig.MaxPhysicsBodyVelocity); } - c.SetStun(0.2f); + //don't stun if the door was broken a moment ago + //otherwise enabling the door's collider and pushing the character away will interrupt repairing + if (lastBrokenTime < Timing.TotalTime - 1.0f) + { + c.SetStun(0.2f); + } return true; } @@ -594,7 +617,7 @@ namespace Barotrauma.Items.Components #if SERVER if (sender != null && wasOpen != isOpen) { - GameServer.Log(sender.LogName + (isOpen ? " opened " : " closed ") + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(sender) + (isOpen ? " opened " : " closed ") + item.Name, ServerLog.MessageType.ItemInteraction); } #endif } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs index e08385827..582282b04 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs @@ -1,13 +1,13 @@ -using Microsoft.Xna.Framework; +using Barotrauma.Networking; +using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Xml.Linq; namespace Barotrauma.Items.Components { - partial class ElectricalDischarger : Powered + partial class ElectricalDischarger : Powered, IServerSerializable { private static readonly List list = new List(); public static IEnumerable List @@ -48,14 +48,14 @@ namespace Barotrauma.Items.Components } } - [Serialize(500.0f, true, description: "How far the discharge can travel from the item."), Editable(MinValueFloat = 0.0f, MaxValueFloat = 5000.0f)] + [Serialize(500.0f, true, description: "How far the discharge can travel from the item.", alwaysUseInstanceValues: true), Editable(MinValueFloat = 0.0f, MaxValueFloat = 5000.0f)] public float Range { get; set; } - [Serialize(25.0f, true, description: "How much further can the discharge be carried when moving across walls."), Editable(MinValueFloat = 0.0f, MaxValueFloat = 1000.0f)] + [Serialize(25.0f, true, description: "How much further can the discharge be carried when moving across walls.", alwaysUseInstanceValues: true), Editable(MinValueFloat = 0.0f, MaxValueFloat = 1000.0f)] public float RangeMultiplierInWalls { get; @@ -115,10 +115,15 @@ namespace Barotrauma.Items.Components //already active, do nothing if (IsActive) { return false; } + if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return false; } + CurrPowerConsumption = powerConsumption; charging = true; timer = Duration; IsActive = true; +#if SERVER + if (GameMain.Server != null) { item.CreateServerEvent(this); } +#endif return false; } @@ -150,14 +155,12 @@ namespace Barotrauma.Items.Components neededPower -= takePower; battery.Charge -= takePower / 3600.0f; #if SERVER - if (GameMain.Server != null) - { - battery.Item.CreateServerEvent(battery); - } + if (GameMain.Server != null) { battery.Item.CreateServerEvent(battery); } #endif } } Discharge(); + } else if (Voltage > MinVoltage) { @@ -478,5 +481,10 @@ namespace Barotrauma.Items.Components base.RemoveComponentSpecific(); list.Remove(this); } + + public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null) + { + //no further data needed, the event just triggers the discharge + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs index 6e9d8981d..3ea347165 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs @@ -3,6 +3,7 @@ using FarseerPhysics; using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics.Contacts; using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; using System.Xml.Linq; @@ -309,8 +310,13 @@ namespace Barotrauma.Items.Components { picker = character; - if (character != null) item.Submarine = character.Submarine; + if (item.Removed) + { + DebugConsole.ThrowError($"Attempted to equip a removed item ({item.Name})\n" + Environment.StackTrace); + return; + } + if (character != null) { item.Submarine = character.Submarine; } if (item.body == null) { if (body != null) @@ -344,7 +350,7 @@ namespace Barotrauma.Items.Components IsActive = true; #if SERVER - if (!alreadyEquipped) GameServer.Log(character.LogName + " equipped " + item.Name, ServerLog.MessageType.ItemInteraction); + if (!alreadyEquipped) GameServer.Log(GameServer.CharacterLogName(character) + " equipped " + item.Name, ServerLog.MessageType.ItemInteraction); #endif } } @@ -355,7 +361,7 @@ namespace Barotrauma.Items.Components picker.DeselectItem(item); #if SERVER - GameServer.Log(character.LogName + " unequipped " + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(character) + " unequipped " + item.Name, ServerLog.MessageType.ItemInteraction); #endif item.body.PhysEnabled = true; @@ -365,23 +371,30 @@ namespace Barotrauma.Items.Components public bool CanBeAttached() { - if (!attachable || !Reattachable) return false; + if (!attachable || !Reattachable) { return false; } //can be attached anywhere in sub editor - if (Screen.Selected == GameMain.SubEditorScreen) return true; + if (Screen.Selected == GameMain.SubEditorScreen) { return true; } //can be attached anywhere inside hulls - if (item.CurrentHull != null) return true; + if (item.CurrentHull != null) { return true; } return Structure.GetAttachTarget(item.WorldPosition) != null; } public bool CanBeDeattached() { - if (!attachable || !attached) return true; + if (!attachable || !attached) { return true; } //allow deattaching everywhere in sub editor - if (Screen.Selected == GameMain.SubEditorScreen) return true; + if (Screen.Selected == GameMain.SubEditorScreen) { return true; } + + //if the item has a connection panel and rewiring is disabled, don't allow deattaching + var connectionPanel = item.GetComponent(); + if (connectionPanel != null && (connectionPanel.Locked || !(GameMain.NetworkMember?.ServerSettings?.AllowRewiring ?? true))) + { + return false; + } //don't allow deattaching if part of a sub and outside hulls return item.Submarine == null || item.CurrentHull != null; @@ -389,12 +402,18 @@ namespace Barotrauma.Items.Components public override bool Pick(Character picker) { + if (item.Removed) + { + DebugConsole.ThrowError($"Attempted to pick up a removed item ({item.Name})\n" + Environment.StackTrace); + return false; + } + if (!attachable) { return base.Pick(picker); } - if (!CanBeDeattached()) return false; + if (!CanBeDeattached()) { return false; } if (Attached) { @@ -419,7 +438,7 @@ namespace Barotrauma.Items.Components item.CreateServerEvent(this); if (picker != null) { - GameServer.Log(picker.LogName + " detached " + item.Name + " from a wall", ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(picker) + " detached " + item.Name + " from a wall", ServerLog.MessageType.ItemInteraction); } } #endif diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs index 0f575f5d1..8f44ebff5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs @@ -1,4 +1,5 @@ -using FarseerPhysics; +using Barotrauma.Networking; +using FarseerPhysics; using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics.Contacts; using Microsoft.Xna.Framework; @@ -94,6 +95,7 @@ namespace Barotrauma.Items.Components { foreach (Limb l in character.AnimController.Limbs) { + if (l.IsSevered) { continue; } if (l.type == LimbType.LeftFoot || l.type == LimbType.LeftThigh || l.type == LimbType.LeftLeg) { continue; } if (l.type == LimbType.Head || l.type == LimbType.Torso) { @@ -310,70 +312,7 @@ namespace Barotrauma.Items.Components return false; } - if (attack != null) - { - if (targetLimb == null && targetCharacter == null && targetStructure == null && (targetItem == null || ! targetItem.Prefab.DamagedByMeleeWeapons)) - { - return false; - } - - if (targetLimb != null) - { - targetLimb.character.LastDamageSource = item; - attack.DoDamageToLimb(User, targetLimb, item.WorldPosition, 1.0f); - } - else if (targetCharacter != null) - { - targetCharacter.LastDamageSource = item; - attack.DoDamage(User, targetCharacter, item.WorldPosition, 1.0f); - } - else if (targetStructure != null) - { - attack.DoDamage(User, targetStructure, item.WorldPosition, 1.0f); - } - else if (targetItem != null && targetItem.Prefab.DamagedByMeleeWeapons) - { - attack.DoDamage(User, targetItem, item.WorldPosition, 1.0f); - } - else - { - return false; - } - } - - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return true; } - -#if SERVER - if (GameMain.Server != null && targetCharacter != null) //TODO: Log structure hits - { - - GameMain.Server.CreateEntityEvent(item, new object[] - { - Networking.NetEntityEvent.Type.ApplyStatusEffect, - ActionType.OnUse, - null, //itemcomponent - targetCharacter.ID, targetLimb - }); - - string logStr = picker?.LogName + " used " + item.Name; - if (item.ContainedItems != null && item.ContainedItems.Any()) - { - logStr += " (" + string.Join(", ", item.ContainedItems.Select(i => i?.Name)) + ")"; - } - logStr += " on " + targetCharacter.LogName + "."; - Networking.GameServer.Log(logStr, Networking.ServerLog.MessageType.Attack); - } -#endif - - if (targetCharacter != null) //TODO: Allow OnUse to happen on structures too maybe?? - { - ApplyStatusEffects(ActionType.OnUse, 1.0f, targetCharacter, targetLimb, user: User); - } - - if (DeleteOnUse) - { - Entity.Spawner.AddToRemoveQueue(item); - } + impactQueue.Enqueue(f2); return true; } @@ -414,7 +353,7 @@ namespace Barotrauma.Items.Components if (targetStructure.Removed) { return; } attack.DoDamage(User, targetStructure, item.WorldPosition, 1.0f); } - else if (targetItem != null && targetItem.Prefab.DamagedByMeleeWeapons) + else if (targetItem != null && targetItem.Prefab.DamagedByMeleeWeapons && targetItem.Condition > 0) { if (targetItem.Removed) { return; } attack.DoDamage(User, targetItem, item.WorldPosition, 1.0f); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs index f9a0c0199..72012a444 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs @@ -65,7 +65,7 @@ namespace Barotrauma.Items.Components if (PickingTime > 0.0f) { - if (picker.PickingItem == null && PickingTime <= float.MaxValue) + if ((picker.PickingItem == null || picker.PickingItem == item) && PickingTime <= float.MaxValue) { #if SERVER item.CreateServerEvent(this); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs index e8060e3ba..606dc01c2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs @@ -65,7 +65,7 @@ namespace Barotrauma.Items.Components foreach (Limb limb in character.AnimController.Limbs) { - if (limb.WearingItems.Find(w => w.WearableComponent.Item == this.item) == null) continue; + if (limb.WearingItems.Find(w => w.WearableComponent.Item == item) == null) { continue; } limb.body.ApplyForce(propulsion, maxVelocity: NetConfig.MaxPhysicsBodyVelocity); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs index aa299a0a0..b7f3a36b9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs @@ -90,6 +90,7 @@ namespace Barotrauma.Items.Components return MathHelper.ToRadians(MathHelper.Lerp(Spread, UnskilledSpread, degreeOfFailure)); } + private readonly List limbBodies = new List(); public override bool Use(float deltaTime, Character character = null) { if (character == null || character.Removed) { return false; } @@ -104,9 +105,10 @@ namespace Barotrauma.Items.Components item.AiTarget.SightRange = item.AiTarget.MaxSightRange; } - List limbBodies = new List(); + limbBodies.Clear(); foreach (Limb l in character.AnimController.Limbs) { + if (l.IsSevered) { continue; } limbBodies.Add(l.body.FarseerBody); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs index 7d7638c33..8312209bf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs @@ -22,6 +22,8 @@ namespace Barotrauma.Items.Components private Vector2 debugRayStartPos, debugRayEndPos; + private readonly List ignoredBodies = new List(); + [Serialize("Both", false, description: "Can the item be used in air, water or both.")] public UseEnvironment UsableIn { @@ -114,8 +116,7 @@ namespace Barotrauma.Items.Components } } item.IsShootable = true; - // TODO: should define this in xml if we have repair tools that don't require aim to use - item.RequireAimToUse = true; + item.RequireAimToUse = element.Parent.GetAttributeBool("requireaimtouse", true); InitProjSpecific(element); } @@ -124,16 +125,17 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { activeTimer -= deltaTime; - if (activeTimer <= 0.0f) IsActive = false; + if (activeTimer <= 0.0f) { IsActive = false; } } - private List ignoredBodies = new List(); public override bool Use(float deltaTime, Character character = null) { - if (character == null || character.Removed) return false; - if (item.RequireAimToUse && !character.IsKeyDown(InputType.Aim)) return false; + if (character != null) + { + if (item.RequireAimToUse && !character.IsKeyDown(InputType.Aim)) { return false; } + } - float degreeOfSuccess = DegreeOfSuccess(character); + float degreeOfSuccess = character == null ? 0.5f : DegreeOfSuccess(character); if (Rand.Range(0.0f, 0.5f) > degreeOfSuccess) { @@ -187,12 +189,15 @@ namespace Barotrauma.Items.Components (float)Math.Sin(angle)) * Range * item.body.Dir); ignoredBodies.Clear(); - foreach (Limb limb in character.AnimController.Limbs) + if (character != null) { - if (Rand.Range(0.0f, 0.5f) > degreeOfSuccess) continue; - ignoredBodies.Add(limb.body.FarseerBody); + foreach (Limb limb in character.AnimController.Limbs) + { + if (Rand.Range(0.0f, 0.5f) > degreeOfSuccess) continue; + ignoredBodies.Add(limb.body.FarseerBody); + } + ignoredBodies.Add(character.AnimController.Collider.FarseerBody); } - ignoredBodies.Add(character.AnimController.Collider.FarseerBody); IsActive = true; activeTimer = 0.1f; @@ -200,7 +205,8 @@ namespace Barotrauma.Items.Components debugRayStartPos = ConvertUnits.ToDisplayUnits(rayStart); debugRayEndPos = ConvertUnits.ToDisplayUnits(rayEnd); - if (character.Submarine == null) + Submarine parentSub = character?.Submarine ?? item.Submarine; + if (parentSub == null) { foreach (Submarine sub in Submarine.Loaded) { @@ -216,7 +222,7 @@ namespace Barotrauma.Items.Components } else { - Repair(rayStart - character.Submarine.SimPosition, rayEnd - character.Submarine.SimPosition, deltaTime, character, degreeOfSuccess, ignoredBodies); + Repair(rayStart - parentSub.SimPosition, rayEnd - parentSub.SimPosition, deltaTime, character, degreeOfSuccess, ignoredBodies); } UseProjSpecific(deltaTime, rayStart); @@ -439,18 +445,7 @@ namespace Barotrauma.Items.Components return true; } else if (targetBody.UserData is Item targetItem) - { - targetItem.IsHighlighted = true; - - ApplyStatusEffectsOnTarget(user, deltaTime, ActionType.OnUse, targetItem.AllPropertyObjects); - - if (targetItem.body != null && !MathUtils.NearlyEqual(TargetForce, 0.0f)) - { - Vector2 dir = targetItem.WorldPosition - item.WorldPosition; - dir = dir.LengthSquared() < 0.0001f ? Vector2.UnitY : Vector2.Normalize(dir); - targetItem.body.ApplyForce(dir * TargetForce, maxVelocity: 10.0f); - } - + { var levelResource = targetItem.GetComponent(); if (levelResource != null && levelResource.Attached && levelResource.requiredItems.Any() && @@ -464,7 +459,23 @@ namespace Barotrauma.Items.Components levelResource.DeattachTimer / levelResource.DeattachDuration, GUI.Style.Red, GUI.Style.Green); #endif + return true; } + + if (!targetItem.Prefab.DamagedByRepairTools) { return false; } + if (item.GetComponent() == null && item.Condition <= 0) { return false; } + + targetItem.IsHighlighted = true; + + ApplyStatusEffectsOnTarget(user, deltaTime, ActionType.OnUse, targetItem.AllPropertyObjects); + + if (targetItem.body != null && !MathUtils.NearlyEqual(TargetForce, 0.0f)) + { + Vector2 dir = targetItem.WorldPosition - item.WorldPosition; + dir = dir.LengthSquared() < 0.0001f ? Vector2.UnitY : Vector2.Normalize(dir); + targetItem.body.ApplyForce(dir * TargetForce, maxVelocity: 10.0f); + } + FixItemProjSpecific(user, deltaTime, targetItem); return true; } @@ -642,26 +653,26 @@ namespace Barotrauma.Items.Components } #if CLIENT + if (user == null) { return; } // Hard-coded progress bars for welding doors stuck. // A general purpose system could be better, but it would most likely require changes in the way we define the status effects in xml. foreach (ISerializableEntity target in targets) { - if (target is Door door) + if (!(target is Door door)) { continue; } + + if (!door.CanBeWelded) { continue; } + for (int i = 0; i < effect.propertyNames.Length; i++) { - if (!door.CanBeWelded) continue; - for (int i = 0; i < effect.propertyNames.Length; i++) + string propertyName = effect.propertyNames[i]; + if (propertyName != "stuck") { continue; } + if (door.SerializableProperties == null || !door.SerializableProperties.TryGetValue(propertyName, out SerializableProperty property)) { continue; } + object value = property.GetValue(target); + if (door.Stuck > 0) { - string propertyName = effect.propertyNames[i]; - if (propertyName != "stuck") { continue; } - if (door.SerializableProperties == null || !door.SerializableProperties.TryGetValue(propertyName, out SerializableProperty property)) { continue; } - object value = property.GetValue(target); - if (door.Stuck > 0) - { - var progressBar = user.UpdateHUDProgressBar(door, door.Item.WorldPosition, door.Stuck / 100, Color.DarkGray * 0.5f, Color.White); - if (progressBar != null) { progressBar.Size = new Vector2(60.0f, 20.0f); } - } + var progressBar = user.UpdateHUDProgressBar(door, door.Item.WorldPosition, door.Stuck / 100, Color.DarkGray * 0.5f, Color.White); + if (progressBar != null) { progressBar.Size = new Vector2(60.0f, 20.0f); } } - } + } } #endif } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs index 317b5c9d0..b50e7c525 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs @@ -115,7 +115,7 @@ namespace Barotrauma.Items.Components if (!MathUtils.IsValid(throwVector)) { throwVector = Vector2.UnitY; } #if SERVER - GameServer.Log(picker.LogName + " threw " + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(picker) + " threw " + item.Name, ServerLog.MessageType.ItemInteraction); #endif Character thrower = picker; item.Drop(thrower, createNetworkEvent: GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs index 8faa8e1b4..e907e3610 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs @@ -421,7 +421,10 @@ namespace Barotrauma.Items.Components case "activate": case "use": case "trigger_in": - item.Use(1.0f, sender); + if (signal != "0") + { + item.Use(1.0f, sender); + } break; case "toggle": if (signal != "0") @@ -734,12 +737,15 @@ namespace Barotrauma.Items.Components public virtual void Load(XElement componentElement, bool usePrefabValues) { - if (componentElement != null && !usePrefabValues) + if (componentElement != null) { foreach (XAttribute attribute in componentElement.Attributes()) { if (!SerializableProperties.TryGetValue(attribute.Name.ToString().ToLowerInvariant(), out SerializableProperty property)) { continue; } - property.TrySetValue(this, attribute.Value); + if (property.OverridePrefabValues || !usePrefabValues) + { + property.TrySetValue(this, attribute.Value); + } } ParseMsg(); OverrideRequiredItems(componentElement); @@ -908,49 +914,56 @@ namespace Barotrauma.Items.Components #region AI related protected const float AIUpdateInterval = 0.2f; protected float aiUpdateTimer; - private int itemIndex; - private List ignoredContainers = new List(); private Character previousUser; protected bool FindSuitableContainer(Character character, Func priority, out Item suitableContainer) { - if (previousUser != character) - { - ignoredContainers.Clear(); - previousUser = character; - } suitableContainer = null; - if (character.FindItem(ref itemIndex, out Item targetContainer, ignoredItems: ignoredContainers, customPriorityFunction: priority)) + if (character.AIController is HumanAIController aiController) { - suitableContainer = targetContainer; - return true; + if (previousUser != character) + { + previousUser = character; + itemIndex = 0; + } + if (character.FindItem(ref itemIndex, out Item targetContainer, ignoredItems: aiController.IgnoredItems, customPriorityFunction: priority)) + { + suitableContainer = targetContainer; + return true; + } } return false; } protected AIObjectiveContainItem AIContainItems(ItemContainer container, Character character, AIObjective objective, int itemCount, bool equip, bool removeEmpty) where T : ItemComponent { - var containObjective = new AIObjectiveContainItem(character, container.GetContainableItemIdentifiers.ToArray(), container, objective.objectiveManager) + AIObjectiveContainItem containObjective = null; + if (character.AIController is HumanAIController aiController) { - targetItemCount = itemCount, - Equip = equip, - RemoveEmpty = removeEmpty, - GetItemPriority = i => + containObjective = new AIObjectiveContainItem(character, container.GetContainableItemIdentifiers.ToArray(), container, objective.objectiveManager) { - if (i.ParentInventory?.Owner is Item) + targetItemCount = itemCount, + Equip = equip, + RemoveEmpty = removeEmpty, + GetItemPriority = i => { - //don't take items from other items of the same type - if (((Item)i.ParentInventory.Owner).GetComponent() != null) + if (i.ParentInventory?.Owner is Item) { - return 0.0f; + //don't take items from other items of the same type + if (((Item)i.ParentInventory.Owner).GetComponent() != null) + { + return 0.0f; + } } + return 1.0f; } - return 1.0f; - } - }; - // TODO: are we sure that we want to abandon the objective here? - containObjective.Abandoned += () => objective.Abandon = true; - objective.AddSubObjective(containObjective); + }; + containObjective.Abandoned += () => + { + aiController.IgnoredItems.Add(container.Item); + }; + objective.AddSubObjective(containObjective); + } return containObjective; } @@ -959,68 +972,71 @@ namespace Barotrauma.Items.Components /// protected bool AIDecontainEmptyItems(Character character, AIObjective objective, bool equip, ItemContainer sourceContainer = null) { - ItemContainer sourceC = sourceContainer ?? (item.OwnInventory?.Owner is Item it ? it.GetComponent() : null); - var containedItems = sourceContainer != null ? sourceContainer.Inventory.Items : item.OwnInventory.Items; - foreach (Item containedItem in containedItems) + if (character.AIController is HumanAIController aiController) { - if (containedItem != null && containedItem.Condition <= 0.0f) + ItemContainer sourceC = sourceContainer ?? (item.OwnInventory?.Owner is Item it ? it.GetComponent() : null); + var containedItems = sourceContainer != null ? sourceContainer.Inventory.Items : item.OwnInventory.Items; + foreach (Item containedItem in containedItems) { - if (FindSuitableContainer(character, - i => - { - var container = i.GetComponent(); - if (container == null) { return 0; } - if (container.Inventory.IsFull()) { return 0; } + if (containedItem != null && containedItem.Condition <= 0.0f) + { + if (FindSuitableContainer(character, + i => + { + var container = i.GetComponent(); + if (container == null) { return 0; } + if (container.Inventory.IsFull()) { return 0; } // Ignore containers that are identical to the source container if (sourceC != null && container.Item.Prefab == sourceC.Item.Prefab) { return 0; } - if (container.ShouldBeContained(containedItem, out bool isRestrictionsDefined)) - { - if (isRestrictionsDefined) + if (container.ShouldBeContained(containedItem, out bool isRestrictionsDefined)) { - return 4; - } - else - { - if (containedItem.Prefab.IsContainerPreferred(container, out bool isPreferencesDefined, out bool isSecondary)) + if (isRestrictionsDefined) { - return isPreferencesDefined ? isSecondary ? 2 : 3 : 1; + return 4; } else { - return isPreferencesDefined ? 0 : 1; + if (containedItem.Prefab.IsContainerPreferred(container, out bool isPreferencesDefined, out bool isSecondary)) + { + return isPreferencesDefined ? isSecondary ? 2 : 3 : 1; + } + else + { + return isPreferencesDefined ? 0 : 1; + } } } - } - else + else + { + return 0; + } + }, out Item targetContainer)) + { + var decontainObjective = new AIObjectiveDecontainItem(character, containedItem, objective.objectiveManager, sourceC, targetContainer?.GetComponent()) { - return 0; - } - }, out Item targetContainer)) - { - var decontainObjective = new AIObjectiveDecontainItem(character, containedItem, objective.objectiveManager, sourceC, targetContainer?.GetComponent()) - { - Equip = equip - }; - decontainObjective.Abandoned += () => - { - itemIndex = 0; - if (targetContainer != null) - { - ignoredContainers.Add(targetContainer); - } - }; - decontainObjective.Completed += () => - { - if (targetContainer == null) + Equip = equip + }; + decontainObjective.Abandoned += () => { itemIndex = 0; - } - }; - objective.AddSubObjectiveInQueue(decontainObjective); - } - else - { - return false; + if (targetContainer != null) + { + aiController.IgnoredItems.Add(targetContainer); + } + }; + decontainObjective.Completed += () => + { + if (targetContainer == null) + { + itemIndex = 0; + } + }; + objective.AddSubObjectiveInQueue(decontainObjective); + } + else + { + return false; + } } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs index 4bea6fd32..78210b5d1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs @@ -80,6 +80,13 @@ namespace Barotrauma.Items.Components set { itemRotation = MathHelper.ToRadians(value); } } + [Serialize("", false, description: "Specify an item for the container to spawn with.")] + public string SpawnWithId + { + get; + set; + } + public bool ShouldBeContained(string[] identifiersOrTags, out bool isRestrictionsDefined) { isRestrictionsDefined = containableRestrictions.Any(); @@ -143,7 +150,7 @@ namespace Barotrauma.Items.Components } //no need to Update() if this item has no statuseffects and no physics body - IsActive = itemsWithStatusEffects.Count > 0 || containedItem.body != null; + IsActive = itemsWithStatusEffects.Count > 0 || Inventory.Items.Any(it => it?.body != null); } public void OnItemRemoved(Item containedItem) @@ -151,7 +158,7 @@ namespace Barotrauma.Items.Components itemsWithStatusEffects.RemoveAll(i => i.First == containedItem); //deactivate if the inventory is empty - IsActive = itemsWithStatusEffects.Count > 0 || containedItem.body != null; + IsActive = itemsWithStatusEffects.Count > 0 || Inventory.Items.Any(it => it?.body != null); } public bool CanBeContained(Item item) @@ -200,6 +207,22 @@ namespace Barotrauma.Items.Components } } + public override void OnItemLoaded() + { + base.OnItemLoaded(); + if (SpawnWithId.Length > 0) + { + ItemPrefab prefab = ItemPrefab.Prefabs.Find(m => m.Identifier == SpawnWithId); + if (prefab != null) + { + if (Inventory != null && Inventory.Items.Any(it => it == null)) + { + Entity.Spawner?.AddToSpawnQueue(prefab, Inventory); + } + } + } + } + public override bool HasRequiredItems(Character character, bool addMessage, string msg = null) { return (!AccessOnlyWhenBroken || Item.Condition <= 0) && base.HasRequiredItems(character, addMessage, msg); @@ -295,7 +318,7 @@ namespace Barotrauma.Items.Components foreach (Item contained in Inventory.Items) { - if (contained == null) continue; + if (contained == null) { continue; } if (contained.body != null) { try @@ -311,6 +334,7 @@ namespace Barotrauma.Items.Components GameAnalyticsSDK.Net.EGAErrorSeverity.Error, "SetTransformIgnoreContacts threw an exception in SetContainedItemPositions (" + e.Message + ")\n" + e.StackTrace); } + contained.body.Submarine = item.Submarine; } contained.Rect = diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Controller.cs index ab5aa5c90..4a69f5499 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Controller.cs @@ -39,8 +39,6 @@ namespace Barotrauma.Items.Components private Item focusTarget; private float targetRotation; - private bool state; - public Vector2 UserPos { get { return userPos; } @@ -61,6 +59,18 @@ namespace Barotrauma.Items.Components set; } + [Editable, Serialize(false, false, description: "Whether the item is toggled on/off. Only valid if IsToggle is set to true.")] + public bool State + { + get; + set; + } + + public bool ControlCharacterPose + { + get { return limbPositions.Count > 0; } + } + public Controller(Item item, XElement element) : base(item, element) { @@ -99,7 +109,7 @@ namespace Barotrauma.Items.Components if (IsToggle) { - item.SendSignal(0, state ? "1" : "0", "signal_out", sender: null); + item.SendSignal(0, State ? "1" : "0", "signal_out", sender: null); } if (user == null @@ -272,7 +282,7 @@ namespace Barotrauma.Items.Components return true; } - private Item GetFocusTarget() + public Item GetFocusTarget() { item.SendSignal(0, MathHelper.ToDegrees(targetRotation).ToString("G", CultureInfo.InvariantCulture), "position_out", user); @@ -294,7 +304,7 @@ namespace Barotrauma.Items.Components { if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { - state = !state; + State = !State; #if SERVER item.CreateServerEvent(this); #endif diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs index 424665d8a..64c1233eb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs @@ -113,7 +113,7 @@ namespace Barotrauma.Items.Components if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { - if (targetItem.Prefab.DeconstructItems.Any()) + if (targetItem.Prefab.AllowDeconstruct) { //drop all items that are inside the deconstructed item foreach (ItemContainer ic in targetItem.GetComponents()) @@ -200,7 +200,7 @@ namespace Barotrauma.Items.Components #if SERVER if (user != null) { - GameServer.Log(user.LogName + (IsActive ? " activated " : " deactivated ") + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(user) + (IsActive ? " activated " : " deactivated ") + item.Name, ServerLog.MessageType.ItemInteraction); } #endif diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs index df57597b1..540c6ec98 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs @@ -23,7 +23,7 @@ namespace Barotrauma.Items.Components private float prevVoltage; private float controlLockTimer; - + [Editable(0.0f, 10000000.0f), Serialize(2000.0f, true, description: "The amount of force exerted on the submarine when the engine is operating at full power.")] public float MaxForce @@ -119,12 +119,15 @@ namespace Barotrauma.Items.Components float max = 1 + maxChangeSpeed; UpdateAITargets(Math.Clamp(noise, min, max), deltaTime); #if CLIENT - for (int i = 0; i < 5; i++) + particleTimer -= deltaTime; + if (particleTimer <= 0.0f) { + Vector2 particleVel = -currForce.ClampLength(5000.0f) / 5.0f; GameMain.ParticleManager.CreateParticle("bubbles", item.WorldPosition + PropellerPos, - -currForce / 5.0f + new Vector2(Rand.Range(-100.0f, 100.0f), Rand.Range(-50f, 50f)), + particleVel * Rand.Range(0.9f, 1.1f), 0.0f, item.CurrentHull); - } + particleTimer = 1.0f / particlesPerSec; + } #endif } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs index 89cb750fc..746bca34a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs @@ -180,7 +180,7 @@ namespace Barotrauma.Items.Components #if SERVER if (user != null) { - GameServer.Log(user.LogName + " started fabricating " + selectedItem.DisplayName + " in " + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(user) + " started fabricating " + selectedItem.DisplayName + " in " + item.Name, ServerLog.MessageType.ItemInteraction); } #endif } @@ -216,7 +216,7 @@ namespace Barotrauma.Items.Components #if SERVER if (user != null) { - GameServer.Log(user.LogName + " cancelled the fabrication of " + fabricatedItem.DisplayName + " in " + item.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log(GameServer.CharacterLogName(user) + " cancelled the fabrication of " + fabricatedItem.DisplayName + " in " + item.Name, ServerLog.MessageType.ItemInteraction); } #endif } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/OxygenGenerator.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/OxygenGenerator.cs index 49c294f4a..b9f61f395 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/OxygenGenerator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/OxygenGenerator.cs @@ -22,7 +22,7 @@ namespace Barotrauma.Items.Components private set; } - [Editable, Serialize(400.0f, true, description: "How much oxygen the machine generates when operating at full power.")] + [Editable, Serialize(400.0f, true, description: "How much oxygen the machine generates when operating at full power.", alwaysUseInstanceValues: true)] public float GeneratedAmount { get { return generatedAmount; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs index fa2c78107..de6db2cef 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs @@ -27,7 +27,7 @@ namespace Barotrauma.Items.Components } } - [Editable, Serialize(80.0f, false, description: "How fast the item pumps water in/out when operating at 100%.")] + [Editable, Serialize(80.0f, false, description: "How fast the item pumps water in/out when operating at 100%.", alwaysUseInstanceValues: true)] public float MaxFlow { get { return maxFlow; } @@ -45,6 +45,7 @@ namespace Barotrauma.Items.Components } public bool HasPower => IsActive && Voltage >= MinVoltage; + public bool IsAutoControlled => pumpSpeedLockTimer > 0.0f || isActiveLockTimer > 0.0f; public Pump(Item item, XElement element) : base(item, element) @@ -130,7 +131,7 @@ namespace Barotrauma.Items.Components if (objective.Option.Equals("stoppumping", StringComparison.OrdinalIgnoreCase)) { #if SERVER - if (FlowPercentage > 0.0f) + if (objective.Override || FlowPercentage > 0.0f) { item.CreateServerEvent(this); } @@ -141,7 +142,7 @@ namespace Barotrauma.Items.Components else { #if SERVER - if (!IsActive || FlowPercentage > -100.0f) + if (objective.Override || !IsActive || FlowPercentage > -100.0f) { item.CreateServerEvent(this); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs index 82f3f24f6..725058ca2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs @@ -78,7 +78,7 @@ namespace Barotrauma.Items.Components } } - [Editable(0.0f, float.MaxValue), Serialize(10000.0f, true, description: "How much power (kW) the reactor generates when operating at full capacity.")] + [Editable(0.0f, float.MaxValue), Serialize(10000.0f, true, description: "How much power (kW) the reactor generates when operating at full capacity.", alwaysUseInstanceValues: true)] public float MaxPowerOutput { get { return maxPowerOutput; } @@ -190,7 +190,7 @@ namespace Barotrauma.Items.Components { if (Timing.TotalTime >= (float)nextServerLogWriteTime) { - GameServer.Log(lastUser.LogName + " adjusted reactor settings: " + + GameServer.Log(GameServer.CharacterLogName(lastUser) + " adjusted reactor settings: " + "Temperature: " + (int)(temperature * 100.0f) + ", Fission rate: " + (int)targetFissionRate + ", Turbine output: " + (int)targetTurbineOutput + @@ -330,6 +330,8 @@ namespace Barotrauma.Items.Components } item.SendSignal(0, ((int)(temperature * 100.0f)).ToString(), "temperature_out", null); + item.SendSignal(0, ((int)-CurrPowerConsumption).ToString(), "power_value_out", null); + item.SendSignal(0, ((int)load).ToString(), "load_value_out", null); UpdateFailures(deltaTime); #if CLIENT @@ -622,7 +624,8 @@ namespace Barotrauma.Items.Components AutoTemp = false; targetFissionRate = 0.0f; targetTurbineOutput = 0.0f; - break; + unsentChanges = true; + return true; } if (autoTemp != prevAutoTemp || @@ -653,17 +656,23 @@ namespace Barotrauma.Items.Components } break; case "set_fissionrate": - if (float.TryParse(signal, NumberStyles.Float, CultureInfo.InvariantCulture, out float newFissionRate)) + if (PowerOn && float.TryParse(signal, NumberStyles.Float, CultureInfo.InvariantCulture, out float newFissionRate)) { - FissionRate = newFissionRate; + targetFissionRate = newFissionRate; unsentChanges = true; +#if CLIENT + FissionRateScrollBar.BarScroll = targetFissionRate / 100.0f; +#endif } break; case "set_turbineoutput": - if (float.TryParse(signal, NumberStyles.Float, CultureInfo.InvariantCulture, out float newTurbineOutput)) + if (PowerOn && float.TryParse(signal, NumberStyles.Float, CultureInfo.InvariantCulture, out float newTurbineOutput)) { - TurbineOutput = newTurbineOutput; + targetTurbineOutput = newTurbineOutput; unsentChanges = true; +#if CLIENT + TurbineOutputScrollBar.BarScroll = targetTurbineOutput / 100.0f; +#endif } break; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs index 2fb664778..0f382768f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs @@ -108,10 +108,17 @@ namespace Barotrauma.Items.Components public Vector2 TargetVelocity { - get { return targetVelocity;} - set + get { return targetVelocity; } + set { - if (!MathUtils.IsValid(value)) return; + if (!MathUtils.IsValid(value)) + { + if (!MathUtils.IsValid(targetVelocity)) + { + targetVelocity = Vector2.Zero; + } + return; + } targetVelocity.X = MathHelper.Clamp(value.X, -100.0f, 100.0f); targetVelocity.Y = MathHelper.Clamp(value.Y, -100.0f, 100.0f); } @@ -285,7 +292,7 @@ namespace Barotrauma.Items.Components if (AutoPilot) { UpdateAutoPilot(deltaTime); - targetVelocity = targetVelocity.ClampLength(MathHelper.Lerp(AutoPilotMaxSpeed, AIPilotMaxSpeed, userSkill) * 100.0f); + TargetVelocity = TargetVelocity.ClampLength(MathHelper.Lerp(AutoPilotMaxSpeed, AIPilotMaxSpeed, userSkill) * 100.0f); } else { @@ -443,41 +450,46 @@ namespace Barotrauma.Items.Components //steer away from other subs foreach (Submarine sub in Submarine.Loaded) { - if (sub == controlledSub) continue; - if (controlledSub.DockedTo.Contains(sub)) continue; - - float thisSize = Math.Max(controlledSub.Borders.Width, controlledSub.Borders.Height); - float otherSize = Math.Max(sub.Borders.Width, sub.Borders.Height); - + if (sub == controlledSub) { continue; } + if (controlledSub.DockedTo.Contains(sub)) { continue; } + Point sizeSum = controlledSub.Borders.Size + sub.Borders.Size; + Vector2 minDist = sizeSum.ToVector2() / 2; Vector2 diff = controlledSub.WorldPosition - sub.WorldPosition; - float dist = diff == Vector2.Zero ? 0.0f : diff.Length(); - - //far enough -> ignore - if (dist > thisSize + otherSize) continue; - - Vector2 dir = dist <= 0.0001f ? Vector2.UnitY : diff / dist; - float dot = controlledSub.Velocity == Vector2.Zero ? - 0.0f : Vector2.Dot(Vector2.Normalize(controlledSub.Velocity), -dir); - - //heading away -> ignore - if (dot < 0.0f) continue; - - targetVelocity += diff * 200.0f; + float xDist = Math.Abs(diff.X); + float yDist = Math.Abs(diff.Y); + Vector2 maxAvoidDistance = minDist * 2; + if (xDist > maxAvoidDistance.X || yDist > maxAvoidDistance.Y) + { + //far enough -> ignore + continue; + } + float dot = controlledSub.Velocity == Vector2.Zero ? 0.0f : Vector2.Dot(Vector2.Normalize(controlledSub.Velocity), -diff); + if (dot < 0.0f) + { + //heading away -> ignore + continue; + } + float distanceFactor = MathHelper.Lerp(0, 1, MathUtils.InverseLerp(maxAvoidDistance.X + maxAvoidDistance.Y, minDist.X + minDist.Y, xDist + yDist)); + float velocityFactor = MathHelper.Lerp(0, 1, MathUtils.InverseLerp(0, 3, controlledSub.Velocity.Length())); + TargetVelocity += 100 * Vector2.Normalize(diff) * distanceFactor * velocityFactor; } - //clamp velocity magnitude to 100.0f - float velMagnitude = targetVelocity.Length(); + //clamp velocity magnitude to 100.0f (Is this required? The X and Y components are clamped in the property setter) + float velMagnitude = TargetVelocity.Length(); if (velMagnitude > 100.0f) { - targetVelocity *= 100.0f / velMagnitude; + TargetVelocity *= 100.0f / velMagnitude; } } private void UpdatePath() { if (Level.Loaded == null) { return; } - - if (pathFinder == null) pathFinder = new PathFinder(WayPoint.WayPointList, false); + + if (pathFinder == null) + { + pathFinder = new PathFinder(WayPoint.WayPointList, false); + } Vector2 target; if (LevelEndSelected) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerTransfer.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerTransfer.cs index e136155a2..a01f75343 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerTransfer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerTransfer.cs @@ -316,6 +316,8 @@ namespace Barotrauma.Items.Components { if (recipient.Item == item || recipient.Item == source) { continue; } + source?.LastSentSignalRecipients.Add(recipient.Item); + foreach (ItemComponent ic in recipient.Item.Components) { //other junction boxes don't need to receive the signal in the pass-through signal connections diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/Powered.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/Powered.cs index 1049831b0..319a44aa6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/Powered.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/Powered.cs @@ -140,6 +140,7 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { + currPowerConsumption = powerConsumption; UpdateOnActiveEffects(deltaTime); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs index cdfde4231..81b272c2c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs @@ -241,7 +241,6 @@ namespace Barotrauma.Items.Components private void Launch(Vector2 impulse) { hits.Clear(); - MaxTargetsToHit = 2; if (item.AiTarget != null) { @@ -294,6 +293,12 @@ namespace Barotrauma.Items.Components { //shooting indoors, do a hitscan outside as well hits.AddRange(DoRayCast(rayStart + item.Submarine.SimPosition, rayEnd + item.Submarine.SimPosition)); + //also in the coordinate space of docked subs + foreach (Submarine dockedSub in item.Submarine.DockedTo) + { + if (dockedSub == item.Submarine) { continue; } + hits.AddRange(DoRayCast(rayStart + item.Submarine.SimPosition - dockedSub.SimPosition, rayEnd + item.Submarine.SimPosition - dockedSub.SimPosition)); + } } else { @@ -354,7 +359,7 @@ namespace Barotrauma.Items.Components { //ignore sensors and items if (fixture?.Body == null || fixture.IsSensor) { return true; } - if (fixture.Body.UserData is Item item && item.GetComponent() == null && !item.Prefab.DamagedByProjectiles) { return true; } + if (fixture.Body.UserData is Item item && (item.GetComponent() == null && !item.Prefab.DamagedByProjectiles || item.Condition <= 0)) { return true; } if (fixture.Body?.UserData as string == "ruinroom") { return true; } //ignore everything else than characters, sub walls and level walls @@ -374,7 +379,7 @@ namespace Barotrauma.Items.Components //ignore sensors and items if (fixture?.Body == null || fixture.IsSensor) { return -1; } - if (fixture.Body.UserData is Item item && item.GetComponent() == null && !item.Prefab.DamagedByProjectiles) { return -1; } + if (fixture.Body.UserData is Item item && (item.GetComponent() == null && !item.Prefab.DamagedByProjectiles || item.Condition <= 0)) { return -1; } if (fixture.Body?.UserData as string == "ruinroom") { return -1; } //ignore everything else than characters, sub walls and level walls @@ -410,9 +415,9 @@ namespace Barotrauma.Items.Components } } - if (stickJoint == null || StickPermanently) { return; } + if (stickJoint == null) { return; } - if (persistentStickJointTimer > 0.0f) + if (persistentStickJointTimer > 0.0f && !StickPermanently) { persistentStickJointTimer -= deltaTime; return; @@ -420,20 +425,25 @@ namespace Barotrauma.Items.Components if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { - if (stickJoint.JointTranslation < stickJoint.LowerLimit * 0.9f || - stickJoint.JointTranslation > stickJoint.UpperLimit * 0.9f) + if (StickTargetRemoved() || + (!StickPermanently && (stickJoint.JointTranslation < stickJoint.LowerLimit * 0.9f || stickJoint.JointTranslation > stickJoint.UpperLimit * 0.9f))) { Unstick(); - } #if SERVER - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) - { - item.CreateServerEvent(this); - } + item.CreateServerEvent(this); #endif + } } } + private bool StickTargetRemoved() + { + if (StickTarget == null) { return true; } + if (StickTarget.UserData is Limb limb) { return limb.character.Removed; } + if (StickTarget.UserData is Entity entity) { return entity.Removed; } + return false; + } + private bool OnProjectileCollision(Fixture f1, Fixture target, Contact contact) { @@ -529,7 +539,7 @@ namespace Barotrauma.Items.Components } else if (target.Body.UserData is Item targetItem) { - if (attack != null && targetItem.Prefab.DamagedByProjectiles) + if (attack != null && targetItem.Prefab.DamagedByProjectiles && targetItem.Condition > 0) { attackResult = attack.DoDamage(User, targetItem, item.WorldPosition, 1.0f); } @@ -604,7 +614,7 @@ namespace Barotrauma.Items.Components if (hits.Count() >= MaxTargetsToHit) { item.body.FarseerBody.OnCollision -= OnProjectileCollision; - if (item.Prefab.DamagedByProjectiles || item.Prefab.DamagedByMeleeWeapons) + if ((item.Prefab.DamagedByProjectiles || item.Prefab.DamagedByMeleeWeapons) && item.Condition > 0) { item.body.CollisionCategories = Physics.CollisionCharacter; item.body.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel | Physics.CollisionPlatform | Physics.CollisionProjectile; @@ -623,6 +633,7 @@ namespace Barotrauma.Items.Components item.body.LinearVelocity *= 0.1f; } else if (Vector2.Dot(velocity, collisionNormal) < 0.0f && hits.Count() >= MaxTargetsToHit && + target.Body.Mass > item.body.Mass * 0.5f && (DoesStick || (StickToCharacters && target.Body.UserData is Limb) || (StickToStructures && target.Body.UserData is Structure) || @@ -692,6 +703,7 @@ namespace Barotrauma.Items.Components if (StickPermanently) { stickJoint.LowerLimit = stickJoint.UpperLimit = 0.0f; + item.body.ResetDynamics(); } else if (item.Sprite != null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs index 1b8e07500..674cd8874 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs @@ -273,7 +273,7 @@ namespace Barotrauma.Items.Components float successFactor = requiredSkills.Count == 0 ? 1.0f : DegreeOfSuccess(CurrentFixer, requiredSkills); //item must have been below the repair threshold for the player to get an achievement or XP for repairing it - if (!item.IsFullCondition) + if (item.ConditionPercentage < AIRepairThreshold) { wasBroken = true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs index 72b995824..87db1cef9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs @@ -120,6 +120,10 @@ namespace Barotrauma.Items.Components return; } +#if CLIENT + item.ResetCachedVisibleSize(); +#endif + if (SnapOnCollision) { raycastTimer += deltaTime; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs index 550fce815..4cfe3b515 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs @@ -13,7 +13,7 @@ namespace Barotrauma.Items.Components //the output is sent if both inputs have received a signal within the timeframe protected float timeFrame; - [InGameEditable(DecimalCount = 2), Serialize(0.0f, true, description: "The item sends the output if both inputs have received a non-zero signal within the timeframe. If set to 0, the inputs must receive a signal at the same time.")] + [InGameEditable(DecimalCount = 2), Serialize(0.0f, true, description: "The item sends the output if both inputs have received a non-zero signal within the timeframe. If set to 0, the inputs must receive a signal at the same time.", alwaysUseInstanceValues: true)] public float TimeFrame { get { return timeFrame; } @@ -23,14 +23,14 @@ namespace Barotrauma.Items.Components } } - [InGameEditable, Serialize("1", true, description: "The signal sent when both inputs have received a non-zero signal.")] + [InGameEditable, Serialize("1", true, description: "The signal sent when the condition is met.", alwaysUseInstanceValues: true)] public string Output { get { return output; } set { output = value; } } - [InGameEditable, Serialize("", true, description: "The signal sent when both inputs have not received a non-zero signal (if empty, no signal is sent).")] + [InGameEditable, Serialize("", true, description: "The signal sent when the condition is met (if empty, no signal is sent).", alwaysUseInstanceValues: true)] public string FalseOutput { get { return falseOutput; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs index f0f042a40..b1c4a63b2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs @@ -15,7 +15,7 @@ namespace Barotrauma.Items.Components //the output is sent if both inputs have received a signal within the timeframe protected float timeFrame; - [Serialize(999999.0f, true, description: "The output of the item is restricted below this value."), + [Serialize(999999.0f, true, description: "The output of the item is restricted below this value.", alwaysUseInstanceValues: true), InGameEditable(MinValueFloat = -999999.0f, MaxValueFloat = 999999.0f)] public float ClampMax { @@ -23,7 +23,7 @@ namespace Barotrauma.Items.Components set; } - [Serialize(-999999.0f, true, description: "The output of the item is restricted above this value."), + [Serialize(-999999.0f, true, description: "The output of the item is restricted above this value.", alwaysUseInstanceValues: true), InGameEditable(MinValueFloat = -999999.0f, MaxValueFloat = 999999.0f)] public float ClampMin { @@ -32,8 +32,8 @@ namespace Barotrauma.Items.Components } [InGameEditable(DecimalCount = 2), - Serialize(0.0f, true, description: "The item must have received signals to both inputs within this timeframe to output the sum of the signals." + - " If set to 0, the inputs must be received at the same time.")] + Serialize(0.0f, true, description: "The item must have received signals to both inputs within this timeframe to output the result." + + " If set to 0, the inputs must be received at the same time.", alwaysUseInstanceValues: true)] public float TimeFrame { get { return timeFrame; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ConnectionPanel.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ConnectionPanel.cs index e73698405..5881d2a13 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ConnectionPanel.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ConnectionPanel.cs @@ -21,7 +21,7 @@ namespace Barotrauma.Items.Components private List disconnectedWireIds; - [Editable, Serialize(false, true, description: "Locked connection panels cannot be rewired in-game.")] + [Editable, Serialize(false, true, description: "Locked connection panels cannot be rewired in-game.", alwaysUseInstanceValues: true)] public bool Locked { get; @@ -192,6 +192,8 @@ namespace Barotrauma.Items.Components public bool CheckCharacterSuccess(Character character) { if (character == null) { return false; } + //no electrocution in sub editor + if (Screen.Selected == GameMain.SubEditorScreen) { return true; } var powered = item.GetComponent(); if (powered != null) @@ -262,7 +264,18 @@ namespace Barotrauma.Items.Components { if (wire.OtherConnection(null) == null) //wire not connected to anything else { +#if CLIENT + if (SubEditorScreen.IsSubEditor()) + { + wire.Item.Remove(); + } + else + { + wire.Item.Drop(null); + } +#else wire.Item.Drop(null); +#endif } } @@ -275,7 +288,18 @@ namespace Barotrauma.Items.Components if (wire.OtherConnection(c) == null) //wire not connected to anything else { +#if CLIENT + if (SubEditorScreen.IsSubEditor()) + { + wire.Item.Remove(); + } + else + { + wire.Item.Drop(null); + } +#else wire.Item.Drop(null); +#endif } else { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs index 1078353f8..63842df7d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs @@ -30,7 +30,7 @@ namespace Barotrauma.Items.Components private DelayedSignal prevQueuedSignal; private float delay; - [InGameEditable(MinValueFloat = 0.0f, MaxValueFloat = 60.0f, DecimalCount = 2), Serialize(1.0f, true, description: "How long the item delays the signals (in seconds).")] + [InGameEditable(MinValueFloat = 0.0f, MaxValueFloat = 60.0f, DecimalCount = 2), Serialize(1.0f, true, description: "How long the item delays the signals (in seconds).", alwaysUseInstanceValues: true)] public float Delay { get { return delay; } @@ -43,14 +43,14 @@ namespace Barotrauma.Items.Components } } - [InGameEditable, Serialize(false, true, description: "Should the component discard previously received signals when a new one is received.")] + [InGameEditable, Serialize(false, true, description: "Should the component discard previously received signals when a new one is received.", alwaysUseInstanceValues: true)] public bool ResetWhenSignalReceived { get; set; } - [InGameEditable, Serialize(false, true, description: "Should the component discard previously received signals when the incoming signal changes.")] + [InGameEditable, Serialize(false, true, description: "Should the component discard previously received signals when the incoming signal changes.", alwaysUseInstanceValues: true)] public bool ResetWhenDifferentSignalReceived { get; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs index 467418095..6ba37f496 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs @@ -15,21 +15,21 @@ namespace Barotrauma.Items.Components //the output is sent if both inputs have received a signal within the timeframe protected float timeFrame; - [InGameEditable, Serialize("1", true, description: "The signal this item outputs when the received signals are equal.")] + [InGameEditable, Serialize("1", true, description: "The signal this item outputs when the condition is met.", alwaysUseInstanceValues: true)] public string Output { get { return output; } set { output = value; } } - [InGameEditable, Serialize("", true, description: "The signal this item outputs when the received signals are not equal.")] + [InGameEditable, Serialize("", true, description: "The signal this item outputs when the condition is not met.", alwaysUseInstanceValues: true)] public string FalseOutput { get { return falseOutput; } set { falseOutput = value; } } - [InGameEditable(DecimalCount = 2), Serialize(0.0f, true, description: "The maximum amount of time between the received signals. If set to 0, the signals must be received at the same time.")] + [InGameEditable(DecimalCount = 2), Serialize(0.0f, true, description: "The maximum amount of time between the received signals. If set to 0, the signals must be received at the same time.", alwaysUseInstanceValues: true)] public float TimeFrame { get { return timeFrame; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ExponentiationComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ExponentiationComponent.cs index 59b81abce..4d8fba217 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ExponentiationComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ExponentiationComponent.cs @@ -6,7 +6,7 @@ namespace Barotrauma.Items.Components class ExponentiationComponent : ItemComponent { private float exponent; - [InGameEditable, Serialize(1.0f, false, description: "The exponent of the operation.")] + [InGameEditable, Serialize(1.0f, false, description: "The exponent of the operation.", alwaysUseInstanceValues: true)] public float Exponent { get diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/FunctionComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/FunctionComponent.cs index a34a96c7b..2c529781e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/FunctionComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/FunctionComponent.cs @@ -16,7 +16,7 @@ namespace Barotrauma.Items.Components SquareRoot } - [Serialize(FunctionType.Round, false, description: "Which kind of function to run the input through.")] + [Serialize(FunctionType.Round, false, description: "Which kind of function to run the input through.", alwaysUseInstanceValues: true)] public FunctionType Function { get; set; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs index 593b7113f..4f92e27b1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs @@ -15,7 +15,7 @@ namespace Barotrauma.Items.Components private float lightBrightness; private float blinkFrequency; private float range; - private float flicker; + private float flicker, flickerState; private bool castShadows; private bool drawBehindSubs; @@ -25,7 +25,7 @@ namespace Barotrauma.Items.Components public PhysicsBody ParentBody; - [Serialize(100.0f, true, description: "The range of the emitted light. Higher values are more performance-intensive."), + [Serialize(100.0f, true, description: "The range of the emitted light. Higher values are more performance-intensive.", alwaysUseInstanceValues: true), Editable(MinValueFloat = 0.0f, MaxValueFloat = 2048.0f)] public float Range { @@ -34,6 +34,7 @@ namespace Barotrauma.Items.Components { range = MathHelper.Clamp(value, 0.0f, 4096.0f); #if CLIENT + item.ResetCachedVisibleSize(); if (light != null) { light.Range = range; } #endif } @@ -42,7 +43,7 @@ namespace Barotrauma.Items.Components public float Rotation; [Editable, Serialize(true, true, description: "Should structures cast shadows when light from this light source hits them. " + - "Disabling shadows increases the performance of the game, and is recommended for lights with a short range.")] + "Disabling shadows increases the performance of the game, and is recommended for lights with a short range.", alwaysUseInstanceValues: true)] public bool CastShadows { get { return castShadows; } @@ -56,7 +57,7 @@ namespace Barotrauma.Items.Components } [Editable, Serialize(false, true, description: "Lights drawn behind submarines don't cast any shadows and are much faster to draw than shadow-casting lights. " + - "It's recommended to enable this on decorative lights outside the submarine's hull.")] + "It's recommended to enable this on decorative lights outside the submarine's hull.", alwaysUseInstanceValues: true)] public bool DrawBehindSubs { get { return drawBehindSubs; } @@ -69,7 +70,7 @@ namespace Barotrauma.Items.Components } } - [Editable, Serialize(false, true, description: "Is the light currently on.")] + [Editable, Serialize(false, true, description: "Is the light currently on.", alwaysUseInstanceValues: true)] public bool IsOn { get { return IsActive; } @@ -82,7 +83,7 @@ namespace Barotrauma.Items.Components } } - [Serialize(0.0f, false, description: "How heavily the light flickers. 0 = no flickering, 1 = the light will alternate between completely dark and full brightness.")] + [Editable, Serialize(0.0f, false, description: "How heavily the light flickers. 0 = no flickering, 1 = the light will alternate between completely dark and full brightness.")] public float Flicker { get { return flicker; } @@ -92,6 +93,13 @@ namespace Barotrauma.Items.Components } } + [Editable, Serialize(1.0f, false, description: "How fast the light flickers.")] + public float FlickerSpeed + { + get; + set; + } + [Editable, Serialize(0.0f, true, description: "How rapidly the light blinks on and off (in Hz). 0 = no blinking.")] public float BlinkFrequency { @@ -102,7 +110,7 @@ namespace Barotrauma.Items.Components } } - [InGameEditable, Serialize("255,255,255,255", true, description: "The color of the emitted light (R,G,B,A).")] + [InGameEditable, Serialize("255,255,255,255", true, description: "The color of the emitted light (R,G,B,A).", alwaysUseInstanceValues: true)] public Color LightColor { get { return lightColor; } @@ -217,7 +225,7 @@ namespace Barotrauma.Items.Components } else { - lightBrightness = MathHelper.Lerp(lightBrightness, Math.Min(Voltage, 1.0f), 0.1f); + lightBrightness = MathHelper.Lerp(lightBrightness, powerConsumption <= 0.0f ? 1.0f : Math.Min(Voltage, 1.0f), 0.1f); } if (blinkFrequency > 0.0f) @@ -231,7 +239,10 @@ namespace Barotrauma.Items.Components } else { - SetLightSourceState(true, lightBrightness * (1.0f - Rand.Range(0.0f, flicker))); + flickerState += deltaTime * FlickerSpeed; + flickerState %= 255; + float noise = PerlinNoise.GetPerlin(flickerState, flickerState * 0.5f) * flicker; + SetLightSourceState(true, lightBrightness * (1.0f - noise)); } if (powerIn == null && powerConsumption > 0.0f) { Voltage -= deltaTime; } @@ -254,7 +265,7 @@ namespace Barotrauma.Items.Components switch (connection.Name) { case "toggle": - if (IgnoreContinuousToggle && lastToggleSignalTime < Timing.TotalTime - 0.1) + if (!IgnoreContinuousToggle || lastToggleSignalTime < Timing.TotalTime - 0.1) { IsOn = !IsOn; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs index ebfd0b2c4..0fd1c5a51 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs @@ -4,7 +4,7 @@ namespace Barotrauma.Items.Components { class MemoryComponent : ItemComponent { - [InGameEditable, Serialize("", true, description: "The currently stored signal the item outputs.")] + [InGameEditable, Serialize("", true, description: "The currently stored signal the item outputs.", alwaysUseInstanceValues: true)] public string Value { get; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ModuloComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ModuloComponent.cs index d4e926de0..a66276988 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ModuloComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ModuloComponent.cs @@ -6,7 +6,7 @@ namespace Barotrauma.Items.Components class ModuloComponent : ItemComponent { private float modulus; - [InGameEditable, Serialize(1.0f, false, description: "The modulus of the operation. Must be non-zero.")] + [InGameEditable, Serialize(1.0f, false, description: "The modulus of the operation. Must be non-zero.", alwaysUseInstanceValues: true)] public float Modulus { get { return modulus; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs index a672b8e63..9f10c0973 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs @@ -18,14 +18,14 @@ namespace Barotrauma.Items.Components [Serialize(false, false, description: "Has the item currently detected movement. Intended to be used by StatusEffect conditionals (setting this value in XML has no effect).")] public bool MotionDetected { get; set; } - [Editable, Serialize(false, true, description: "Should the sensor only detect the movement of humans?")] + [Editable, Serialize(false, true, description: "Should the sensor only detect the movement of humans?", alwaysUseInstanceValues: true)] public bool OnlyHumans { get; set; } - [Editable, Serialize(false, true, description: "Should the sensor ignore the bodies of dead characters?")] + [Editable, Serialize(false, true, description: "Should the sensor ignore the bodies of dead characters?", alwaysUseInstanceValues: true)] public bool IgnoreDead { get; @@ -33,16 +33,19 @@ namespace Barotrauma.Items.Components } - [InGameEditable, Serialize(0.0f, true, description: "Horizontal detection range.")] + [InGameEditable, Serialize(0.0f, true, description: "Horizontal detection range.", alwaysUseInstanceValues: true)] public float RangeX { get { return rangeX; } set { rangeX = MathHelper.Clamp(value, 0.0f, 1000.0f); +#if CLIENT + item.ResetCachedVisibleSize(); +#endif } } - [InGameEditable, Serialize(0.0f, true, description: "Vertical movement detection range.")] + [InGameEditable, Serialize(0.0f, true, description: "Vertical movement detection range.", alwaysUseInstanceValues: true)] public float RangeY { get { return rangeY; } @@ -64,13 +67,13 @@ namespace Barotrauma.Items.Components } } - [InGameEditable, Serialize("1", true, description: "The signal the item outputs when it has detected movement.")] + [InGameEditable, Serialize("1", true, description: "The signal the item outputs when it has detected movement.", alwaysUseInstanceValues: true)] public string Output { get; set; } - [InGameEditable, Serialize("", true, description: "The signal the item outputs when it has not detected movement.")] + [InGameEditable, Serialize("", true, description: "The signal the item outputs when it has not detected movement.", alwaysUseInstanceValues: true)] public string FalseOutput { get; set; } - [Editable(DecimalCount = 3), Serialize(0.01f, true, description: "How fast the objects within the detector's range have to be moving (in m/s).")] + [Editable(DecimalCount = 3), Serialize(0.01f, true, description: "How fast the objects within the detector's range have to be moving (in m/s).", alwaysUseInstanceValues: true)] public float MinimumVelocity { get; @@ -129,7 +132,8 @@ namespace Barotrauma.Items.Components foreach (Limb limb in c.AnimController.Limbs) { - if (limb.LinearVelocity.LengthSquared() <= MinimumVelocity * MinimumVelocity) continue; + if (limb.IsSevered) { continue; } + if (limb.LinearVelocity.LengthSquared() <= MinimumVelocity * MinimumVelocity) { continue; } if (MathUtils.CircleIntersectsRectangle(limb.WorldPosition, ConvertUnits.ToDisplayUnits(limb.body.GetMaxExtent()), detectRect)) { MotionDetected = true; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/OscillatorComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/OscillatorComponent.cs index 3b2b7ece7..caacada54 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/OscillatorComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/OscillatorComponent.cs @@ -23,14 +23,14 @@ namespace Barotrauma.Items.Components [InGameEditable, Serialize(WaveType.Pulse, true, description: "What kind of a signal the item outputs." + " Pulse: periodically sends out a signal of 1." + " Sine: sends out a sine wave oscillating between -1 and 1." + - " Square: sends out a signal that alternates between 0 and 1.")] + " Square: sends out a signal that alternates between 0 and 1.", alwaysUseInstanceValues: true)] public WaveType OutputType { get; set; } - [InGameEditable(DecimalCount = 2), Serialize(1.0f, true, description: "How fast the signal oscillates, or how fast the pulses are sent (in Hz).")] + [InGameEditable(DecimalCount = 2), Serialize(1.0f, true, description: "How fast the signal oscillates, or how fast the pulses are sent (in Hz).", alwaysUseInstanceValues: true)] public float Frequency { get { return frequency; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs index e40ca77ed..a541bc98f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs @@ -16,16 +16,16 @@ namespace Barotrauma.Items.Components private bool nonContinuousOutputSent; - [InGameEditable, Serialize("1", true, description: "The signal this item outputs when the received signal matches the regular expression.")] + [InGameEditable, Serialize("1", true, description: "The signal this item outputs when the received signal matches the regular expression.", alwaysUseInstanceValues: true)] public string Output { get; set; } - [Serialize("0", true, description: "The signal this item outputs when the received signal does not match the regular expression.")] + [Serialize("0", true, description: "The signal this item outputs when the received signal does not match the regular expression.", alwaysUseInstanceValues: true)] public string FalseOutput { get; set; } - [InGameEditable, Serialize(true, true, description: "Should the component keep sending the output even after it stops receiving a signal, or only send an output when it receives a signal.")] + [InGameEditable, Serialize(true, true, description: "Should the component keep sending the output even after it stops receiving a signal, or only send an output when it receives a signal.", alwaysUseInstanceValues: true)] public bool ContinuousOutput { get; set; } - [InGameEditable, Serialize("", true, description: "The regular expression used to check the incoming signals.")] + [InGameEditable, Serialize("", true, description: "The regular expression used to check the incoming signals.", alwaysUseInstanceValues: true)] public string Expression { get { return expression; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RelayComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RelayComponent.cs index 8061c0789..7f5019107 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RelayComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RelayComponent.cs @@ -37,7 +37,7 @@ namespace Barotrauma.Items.Components } } - [Editable, Serialize(false, true, description: "Can the relay currently pass power and signals through it.")] + [Editable, Serialize(false, true, description: "Can the relay currently pass power and signals through it.", alwaysUseInstanceValues: true)] public bool IsOn { get diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SignalCheckComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SignalCheckComponent.cs index 13e2acc3c..eb725383d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SignalCheckComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SignalCheckComponent.cs @@ -4,12 +4,12 @@ namespace Barotrauma.Items.Components { class SignalCheckComponent : ItemComponent { - [InGameEditable, Serialize("1", true, description: "The signal this item outputs when the received signal matches the target signal.")] + [InGameEditable, Serialize("1", true, description: "The signal this item outputs when the received signal matches the target signal.", alwaysUseInstanceValues: true)] public string Output { get; set; } - [InGameEditable, Serialize("0", true, description: "The signal this item outputs when the received signal does not match the target signal.")] + [InGameEditable, Serialize("0", true, description: "The signal this item outputs when the received signal does not match the target signal.", alwaysUseInstanceValues: true)] public string FalseOutput { get; set; } - [InGameEditable, Serialize("", true, description: "The value to compare the received signals against.")] + [InGameEditable, Serialize("", true, description: "The value to compare the received signals against.", alwaysUseInstanceValues: true)] public string TargetSignal { get; set; } public SignalCheckComponent(Item item, XElement element) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SmokeDetector.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SmokeDetector.cs index feed5a033..7a85ef85f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SmokeDetector.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/SmokeDetector.cs @@ -1,25 +1,51 @@ -using System.Linq; -using System.Xml.Linq; +using System.Xml.Linq; namespace Barotrauma.Items.Components { class SmokeDetector : ItemComponent { - [Serialize(50.0f, false, description: "How large the fire has to be for the detector to react to it.")] - public float FireSizeThreshold - { - get; set; - } + const float FireCheckInterval = 1.0f; + private float fireCheckTimer; + + private bool fireInRange; + + [InGameEditable, Serialize("1", true, description: "The signal the item outputs when it has detected movement.", alwaysUseInstanceValues: true)] + public string Output { get; set; } + + [InGameEditable, Serialize("0", true, description: "The signal the item outputs when it has not detected movement.", alwaysUseInstanceValues: true)] + public string FalseOutput { get; set; } public SmokeDetector(Item item, XElement element) - : base (item, element) + : base(item, element) { IsActive = true; } + private bool IsFireInRange() + { + if (item.CurrentHull == null || item.InWater) { return false; } + + var connectedHulls = item.CurrentHull.GetConnectedHulls(includingThis: true, searchDepth: 10, ignoreClosedGaps: true); + foreach (Hull hull in connectedHulls) + { + foreach (FireSource fireSource in hull.FireSources) + { + if (fireSource.IsInDamageRange(item.WorldPosition, fireSource.DamageRange * 2.0f)) { return true; } + } + } + + return false; + } + public override void Update(float deltaTime, Camera cam) { - item.SendSignal(0, item.CurrentHull != null && item.CurrentHull.FireSources.Any(fs => fs.Size.X > FireSizeThreshold) ? "1" : "0", "signal_out", null); + fireCheckTimer -= deltaTime; + if (fireCheckTimer <= 0.0f) + { + fireInRange = IsFireInRange(); + fireCheckTimer = FireCheckInterval; + } + item.SendSignal(0, fireInRange ? "1" : "0", "signal_out", null); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs index dcad68832..dad4b40fa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs @@ -13,7 +13,7 @@ namespace Barotrauma.Items.Components } private string welcomeMessage; - [InGameEditable, Serialize("", true, "Message to be displayed on the terminal display when it is first opened.", translationTextTag = "terminalwelcomemsg.")] + [InGameEditable, Serialize("", true, "Message to be displayed on the terminal display when it is first opened.", translationTextTag = "terminalwelcomemsg.", AlwaysUseInstanceValues = true)] public string WelcomeMessage { get { return welcomeMessage; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs index 14d183268..640a7f624 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs @@ -19,14 +19,14 @@ namespace Barotrauma.Items.Components protected float[] receivedSignal = new float[2]; - [Serialize(FunctionType.Sin, false, description: "Which kind of function to run the input through.")] + [Serialize(FunctionType.Sin, false, description: "Which kind of function to run the input through.", alwaysUseInstanceValues: true)] public FunctionType Function { get; set; } - [InGameEditable, Serialize(false, true, description: "If set to true, the trigonometric function uses radians instead of degrees.")] + [InGameEditable, Serialize(false, true, description: "If set to true, the trigonometric function uses radians instead of degrees.", alwaysUseInstanceValues: true)] public bool UseRadians { get; set; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WaterDetector.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WaterDetector.cs index d5ad89235..830441855 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WaterDetector.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WaterDetector.cs @@ -10,10 +10,10 @@ namespace Barotrauma.Items.Components private bool isInWater; private float stateSwitchDelay; - [InGameEditable, Serialize("1", true, description: "The signal the item sends out when it's underwater.")] + [InGameEditable, Serialize("1", true, description: "The signal the item sends out when it's underwater.", alwaysUseInstanceValues: true)] public string Output { get; set; } - [InGameEditable, Serialize("0", true, description: "The signal the item sends out when it's not underwater.")] + [InGameEditable, Serialize("0", true, description: "The signal the item sends out when it's not underwater.", alwaysUseInstanceValues: true)] public string FalseOutput { get; set; } public WaterDetector(Item item, XElement element) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs index 5513e315e..93b88b2f3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs @@ -9,7 +9,7 @@ namespace Barotrauma.Items.Components { partial class WifiComponent : ItemComponent { - private static List list = new List(); + private static readonly List list = new List(); private float range; @@ -19,17 +19,23 @@ namespace Barotrauma.Items.Components private string prevSignal; - [Serialize(Character.TeamType.None, true, description: "WiFi components can only communicate with components that have the same Team ID.")] + [Serialize(Character.TeamType.None, true, description: "WiFi components can only communicate with components that have the same Team ID.", alwaysUseInstanceValues: true)] public Character.TeamType TeamID { get; set; } - [Editable, Serialize(20000.0f, false, description: "How close the recipient has to be to receive a signal from this WiFi component.")] + [Editable, Serialize(20000.0f, false, description: "How close the recipient has to be to receive a signal from this WiFi component.", alwaysUseInstanceValues: true)] public float Range { get { return range; } - set { range = Math.Max(value, 0.0f); } + set + { + range = Math.Max(value, 0.0f); +#if CLIENT + item.ResetCachedVisibleSize(); +#endif + } } - [InGameEditable, Serialize(1, true, description: "WiFi components can only communicate with components that use the same channel.")] + [InGameEditable, Serialize(1, true, description: "WiFi components can only communicate with components that use the same channel.", alwaysUseInstanceValues: true)] public int Channel { get { return channel; } @@ -40,7 +46,7 @@ namespace Barotrauma.Items.Components } - [Serialize(false, false, description: "Can the component communicate with wifi components in another team's submarine (e.g. enemy sub in Combat missions, respawn shuttle). Needs to be enabled on both the component transmitting the signal and the component receiving it.")] + [Serialize(false, false, description: "Can the component communicate with wifi components in another team's submarine (e.g. enemy sub in Combat missions, respawn shuttle). Needs to be enabled on both the component transmitting the signal and the component receiving it.", alwaysUseInstanceValues: true)] public bool AllowCrossTeamCommunication { get; @@ -48,7 +54,7 @@ namespace Barotrauma.Items.Components } [Editable, Serialize(false, false, description: "If enabled, any signals received from another chat-linked wifi component are displayed " + - "as chat messages in the chatbox of the player holding the item.")] + "as chat messages in the chatbox of the player holding the item.", alwaysUseInstanceValues: true)] public bool LinkToChat { get; @@ -105,12 +111,16 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { chatMsgCooldown -= deltaTime; + if (chatMsgCooldown <= 0.0f) + { + IsActive = false; + } } public void TransmitSignal(int stepsTaken, string signal, Item source, Character sender, bool sendToChat, float signalStrength = 1.0f) { var senderComponent = source?.GetComponent(); - if (senderComponent != null && !CanReceive(senderComponent)) return; + if (senderComponent != null && !CanReceive(senderComponent)) { return; } bool chatMsgSent = false; @@ -138,33 +148,32 @@ namespace Barotrauma.Items.Components if (LinkToChat && wifiComp.LinkToChat && chatMsgCooldown <= 0.0f && sendToChat) { if (wifiComp.item.ParentInventory != null && - wifiComp.item.ParentInventory.Owner != null && - GameMain.NetworkMember != null) + wifiComp.item.ParentInventory.Owner != null) { string chatMsg = signal; if (senderComponent != null) { chatMsg = ChatMessage.ApplyDistanceEffect(chatMsg, 1.0f - sentSignalStrength); } - if (chatMsg.Length > ChatMessage.MaxLength) chatMsg = chatMsg.Substring(0, ChatMessage.MaxLength); - if (string.IsNullOrEmpty(chatMsg)) continue; + if (chatMsg.Length > ChatMessage.MaxLength) { chatMsg = chatMsg.Substring(0, ChatMessage.MaxLength); } + if (string.IsNullOrEmpty(chatMsg)) { continue; } #if CLIENT if (wifiComp.item.ParentInventory.Owner == Character.Controlled) { if (GameMain.Client == null) - GameMain.NetworkMember.AddChatMessage(signal, ChatMessageType.Radio, source == null ? "" : source.Name); + { + GameMain.GameSession?.CrewManager?.AddSinglePlayerChatMessage(source?.Name ?? "", signal, ChatMessageType.Radio, sender: null); + } } -#endif - -#if SERVER +#elif SERVER if (GameMain.Server != null) { Client recipientClient = GameMain.Server.ConnectedClients.Find(c => c.Character == wifiComp.item.ParentInventory.Owner); if (recipientClient != null) { GameMain.Server.SendDirectChatMessage( - ChatMessage.Create(source == null ? "" : source.Name, chatMsg, ChatMessageType.Radio, null), recipientClient); + ChatMessage.Create(source?.Name ?? "", chatMsg, ChatMessageType.Radio, null), recipientClient); } } #endif @@ -172,15 +181,31 @@ namespace Barotrauma.Items.Components } } } - if (chatMsgSent) chatMsgCooldown = MinChatMessageInterval; + if (chatMsgSent) + { + chatMsgCooldown = MinChatMessageInterval; + IsActive = true; + } prevSignal = signal; } public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f, float signalStrength = 1.0f) { - if (connection == null || connection.Name != "signal_in") return; - TransmitSignal(stepsTaken, signal, source, sender, true, signalStrength); + if (connection == null) { return; } + + switch (connection.Name) + { + case "signal_in": + TransmitSignal(stepsTaken, signal, source, sender, true, signalStrength); + break; + case "set_channel": + if (int.TryParse(signal, out int newChannel)) + { + Channel = newChannel; + } + break; + } } protected override void RemoveComponentSpecific() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Wire.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Wire.cs index 94663b33e..fc0e86bb6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Wire.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Wire.cs @@ -5,6 +5,9 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Xml.Linq; +#if CLIENT +using Microsoft.Xna.Framework.Input; +#endif namespace Barotrauma.Items.Components { @@ -37,9 +40,11 @@ namespace Barotrauma.Items.Components } } + private bool shouldClearConnections = true; + const float MaxAttachDistance = 150.0f; - const float MinNodeDistance = 15.0f; + const float MinNodeDistance = 7.0f; const int MaxNodeCount = 255; const int MaxNodesPerNetworkEvent = 30; @@ -177,6 +182,8 @@ namespace Barotrauma.Items.Components newConnection.Item.Position : newConnection.Item.Position - refSub.HiddenSubPosition; + nodePos = RoundNode(nodePos); + if (nodes.Count > 0 && nodes[0] == nodePos) { break; } if (nodes.Count > 1 && nodes[nodes.Count - 1] == nodePos) { break; } @@ -241,7 +248,7 @@ namespace Barotrauma.Items.Components public override void Equip(Character character) { - ClearConnections(character); + if (shouldClearConnections) { ClearConnections(character); } IsActive = true; } @@ -253,7 +260,7 @@ namespace Barotrauma.Items.Components public override void Drop(Character dropper) { - ClearConnections(dropper); + if (shouldClearConnections) { ClearConnections(dropper); } IsActive = false; } @@ -334,7 +341,12 @@ namespace Barotrauma.Items.Components } else { +#if CLIENT + bool disableGrid = SubEditorScreen.IsSubEditor() && PlayerInput.IsShiftDown(); + newNodePos = disableGrid ? item.Position : RoundNode(item.Position); +#else newNodePos = RoundNode(item.Position); +#endif if (sub != null) { newNodePos -= sub.HiddenSubPosition; } canPlaceNode = true; } @@ -497,6 +509,9 @@ namespace Barotrauma.Items.Components sectionExtents.Y = Math.Max(Math.Abs(nodes[i].Y - item.Position.Y), sectionExtents.Y); } } +#if CLIENT + item.ResetCachedVisibleSize(); +#endif } public void ClearConnections(Character user = null) @@ -507,7 +522,7 @@ namespace Barotrauma.Items.Components foreach (Item item in Item.ItemList) { var connectionPanel = item.GetComponent(); - if (connectionPanel != null && connectionPanel.DisconnectedWires.Contains(this)) + if (connectionPanel != null && connectionPanel.DisconnectedWires.Contains(this) && !item.Removed) { #if SERVER item.CreateServerEvent(connectionPanel); @@ -526,18 +541,18 @@ namespace Barotrauma.Items.Components if (connections[0] != null && connections[1] != null) { - GameServer.Log(user.LogName + " disconnected a wire from " + + GameServer.Log(GameServer.CharacterLogName(user) + " disconnected a wire from " + connections[0].Item.Name + " (" + connections[0].Name + ") to "+ connections[1].Item.Name + " (" + connections[1].Name + ")", ServerLog.MessageType.ItemInteraction); } else if (connections[0] != null) { - GameServer.Log(user.LogName + " disconnected a wire from " + + GameServer.Log(GameServer.CharacterLogName(user) + " disconnected a wire from " + connections[0].Item.Name + " (" + connections[0].Name + ")", ServerLog.MessageType.ItemInteraction); } else if (connections[1] != null) { - GameServer.Log(user.LogName + " disconnected a wire from " + + GameServer.Log(GameServer.CharacterLogName(user) + " disconnected a wire from " + connections[1].Item.Name + " (" + connections[1].Name + ")", ServerLog.MessageType.ItemInteraction); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs index 2262d3de7..ee6c8a0d0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs @@ -4,10 +4,11 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; using Barotrauma.Extensions; +using FarseerPhysics.Dynamics; namespace Barotrauma.Items.Components { @@ -35,8 +36,16 @@ namespace Barotrauma.Items.Components private int failedLaunchAttempts; private readonly List activeProjectiles = new List(); + public IEnumerable ActiveProjectiles => activeProjectiles; private Character user; + + private float resetUserTimer; + + public float Rotation + { + get { return rotation; } + } [Serialize("0,0", false, description: "The position of the barrel relative to the upper left corner of the base sprite (in pixels).")] public Vector2 BarrelPos @@ -74,7 +83,28 @@ namespace Barotrauma.Items.Components set { reloadTime = value; } } - [Serialize(1, false, description: "How projectiles the weapon launches when fired once.")] + [Editable(0.1f, 10f), Serialize(1.0f, false, description: "Modifies the duration of retraction of the barrell after recoil to get back to the original position after shooting. Reload time affects this too.")] + public float RetractionDurationMultiplier + { + get; + set; + } + + [Editable(0.1f, 10f), Serialize(0.1f, false, description: "How quickly the recoil moves the barrel after launching.")] + public float RecoilTime + { + get; + set; + } + + [Editable(0f, 1000f), Serialize(0f, false, description: "How long the barrell stays in place after the recoil and before retracting back to the original position.")] + public float RetractionDelay + { + get; + set; + } + + [Serialize(1, false, description: "How many projectiles the weapon launches when fired once.")] public int ProjectileCount { get; @@ -88,7 +118,8 @@ namespace Barotrauma.Items.Components set; } - [Editable, Serialize("0.0,0.0", true, description: "The range at which the barrel can rotate. TODO")] + [Editable(VectorComponentLabels = new string[] { "editable.minvalue", "editable.maxvalue" }), + Serialize("0.0,0.0", true, description: "The range at which the barrel can rotate.", alwaysUseInstanceValues: true)] public Vector2 RotationLimits { get @@ -168,7 +199,7 @@ namespace Barotrauma.Items.Components } private float baseRotationRad; - [Editable(0.0f, 360.0f), Serialize(0.0f, true, description: "The angle of the turret's base in degrees.")] + [Editable(0.0f, 360.0f), Serialize(0.0f, true, description: "The angle of the turret's base in degrees.", alwaysUseInstanceValues: true)] public float BaseRotation { get { return MathHelper.ToDegrees(baseRotationRad); } @@ -224,6 +255,7 @@ namespace Barotrauma.Items.Components //if (item.FlippedY) flippedRotation = 180.0f - flippedRotation; transformedBarrelPos = MathUtils.RotatePointAroundTarget(barrelPos * item.Scale, new Vector2(item.Rect.Width / 2, item.Rect.Height / 2), flippedRotation); #if CLIENT + item.ResetCachedVisibleSize(); item.SpriteRotation = MathHelper.ToRadians(flippedRotation); #endif } @@ -252,6 +284,16 @@ namespace Barotrauma.Items.Components if (reload > 0.0f) { reload -= deltaTime; } + if (user != null && user.Removed) + { + user = null; + } + else + { + resetUserTimer -= deltaTime; + if (resetUserTimer <= 0.0f) { user = null; } + } + ApplyStatusEffects(ActionType.OnActive, deltaTime, null); UpdateProjSpecific(deltaTime); @@ -356,7 +398,7 @@ namespace Barotrauma.Items.Components { linkedItem.Use(deltaTime, null); var repairable = linkedItem.GetComponent(); - if (repairable != null) + if (repairable != null && failedLaunchAttempts < 2) { repairable.LastActiveTime = (float)Timing.TotalTime + 1.0f; } @@ -411,7 +453,7 @@ namespace Barotrauma.Items.Components #if SERVER if (character != null && launchedProjectile != null) { - string msg = character.LogName + " launched " + item.Name + " (projectile: " + launchedProjectile.Item.Name; + string msg = GameServer.CharacterLogName(character) + " launched " + item.Name + " (projectile: " + launchedProjectile.Item.Name; var containedItems = launchedProjectile.Item.ContainedItems; if (containedItems == null || !containedItems.Any()) { @@ -428,7 +470,7 @@ namespace Barotrauma.Items.Components return true; } - private void Launch(Item projectile, Character user = null) + private void Launch(Item projectile, Character user = null, float? launchRotation = null) { reload = reloadTime; @@ -444,7 +486,9 @@ namespace Barotrauma.Items.Components } float spread = MathHelper.ToRadians(Spread) * Rand.Range(-0.5f, 0.5f); - projectile.SetTransform(ConvertUnits.ToSimUnits(new Vector2(item.WorldRect.X + transformedBarrelPos.X, item.WorldRect.Y - transformedBarrelPos.Y)), -rotation + spread); + projectile.SetTransform( + ConvertUnits.ToSimUnits(new Vector2(item.WorldRect.X + transformedBarrelPos.X, item.WorldRect.Y - transformedBarrelPos.Y)), + -(launchRotation ?? rotation) + spread); projectile.UpdateTransform(); projectile.Submarine = projectile.body?.Submarine; @@ -456,12 +500,11 @@ namespace Barotrauma.Items.Components projectileComponent.User = user; } - if (projectile.Container != null) { projectile.Container.RemoveContained(projectile); } - - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) - { - GameMain.NetworkMember.CreateEntityEvent(item, new object[] { NetEntityEvent.Type.ComponentState, item.GetComponentIndex(this), projectile }); - } + if (projectile.Container != null) { projectile.Container.RemoveContained(projectile); } + } + if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) + { + GameMain.NetworkMember.CreateEntityEvent(item, new object[] { NetEntityEvent.Type.ComponentState, item.GetComponentIndex(this), projectile }); } ApplyStatusEffects(ActionType.OnUse, 1.0f, user: user); @@ -476,8 +519,10 @@ namespace Barotrauma.Items.Components private float prevTargetRotation; private float updateTimer; private bool updatePending; - public void ThalamusOperate(float deltaTime, bool targetHumans, bool targetOtherCreatures, bool targetSubmarines, bool ignoreDelay) + public void ThalamusOperate(WreckAI ai, float deltaTime, bool targetHumans, bool targetOtherCreatures, bool targetSubmarines, bool ignoreDelay) { + if (ai == null) { return; } + IsActive = true; if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) @@ -513,8 +558,8 @@ namespace Barotrauma.Items.Components foreach (var character in Character.CharacterList) { if (character == null || character.Removed || character.IsDead) { continue; } - if (character.Params.Group.Equals("thalamus", StringComparison.OrdinalIgnoreCase)) { continue; } - bool isHuman = character.IsHuman || character.Params.Group.Equals("human", StringComparison.OrdinalIgnoreCase); + if (character.Params.Group.Equals(ai.Config.Entity, StringComparison.OrdinalIgnoreCase)) { continue; } + bool isHuman = character.IsHuman || character.Params.Group.Equals(CharacterPrefab.HumanSpeciesName, StringComparison.OrdinalIgnoreCase); if (isHuman) { if (!targetHumans) @@ -619,7 +664,8 @@ namespace Barotrauma.Items.Components end -= target.Submarine.SimPosition; } var collisionCategories = Physics.CollisionWall | Physics.CollisionCharacter | Physics.CollisionItem | Physics.CollisionLevel; - var pickedBody = Submarine.PickBody(start, end, null, collisionCategories); + var pickedBody = Submarine.PickBody(start, end, null, collisionCategories, allowInsideFixture: true, + customPredicate: (Fixture f) => { return !item.StaticFixtures.Contains(f); }); if (pickedBody == null) { return; } Character targetCharacter = null; if (pickedBody.UserData is Character c) @@ -632,16 +678,28 @@ namespace Barotrauma.Items.Components } if (targetCharacter != null) { - if (targetCharacter.Params.Group.Equals("thalamus", StringComparison.OrdinalIgnoreCase)) + if (targetCharacter.Params.Group.Equals(ai.Config.Entity, StringComparison.OrdinalIgnoreCase)) { // Don't shoot friendly characters return; } } - else if (!(pickedBody.UserData is Structure) && !(pickedBody.UserData is Item)) + else { - // Hit something else than a wall or an item (probably a level wall) - return; + if (pickedBody.UserData is ISpatialEntity e) + { + Submarine sub = e.Submarine; + if (sub == null) { return; } + if (!targetSubmarines) { return; } + if (sub == Item.Submarine) { return; } + // Don't shoot non-player submarines, i.e. wrecks or outposts. + if (!sub.Info.IsPlayer) { return; } + } + else + { + // Hit something else, probably a level wall + return; + } } TryLaunch(deltaTime, ignorePower: true); } @@ -663,6 +721,7 @@ namespace Barotrauma.Items.Components PowerContainer batteryToLoad = null; foreach (PowerContainer battery in batteries) { + if (battery.Item.NonInteractable) { continue; } if (batteryToLoad == null || battery.Charge < lowestCharge) { batteryToLoad = battery; @@ -683,20 +742,22 @@ namespace Barotrauma.Items.Components int maxProjectileCount = 0; foreach (MapEntity e in item.linkedTo) { - if (!(e is Item projectileContainer)) continue; - - var containedItems = projectileContainer.ContainedItems; - if (containedItems != null) + if (item.NonInteractable) { continue; } + if (e is Item projectileContainer) { - var container = projectileContainer.GetComponent(); - maxProjectileCount += container.Capacity; + var containedItems = projectileContainer.ContainedItems; + if (containedItems != null) + { + var container = projectileContainer.GetComponent(); + maxProjectileCount += container.Capacity; - int projectiles = containedItems.Count(it => it.Condition > 0.0f); - usableProjectileCount += projectiles; + int projectiles = containedItems.Count(it => it.Condition > 0.0f); + usableProjectileCount += projectiles; + } } } - if (usableProjectileCount == 0 || (usableProjectileCount < maxProjectileCount && objective.Option.Equals("fireatwill", StringComparison.OrdinalIgnoreCase))) + if (usableProjectileCount == 0) { ItemContainer container = null; Item containerItem = null; @@ -704,11 +765,16 @@ namespace Barotrauma.Items.Components { containerItem = e as Item; if (containerItem == null) { continue; } + if (containerItem.NonInteractable) { continue; } + if (character.AIController is HumanAIController aiController && aiController.IgnoredItems.Contains(containerItem)) { continue; } container = containerItem.GetComponent(); if (container != null) { break; } } - if (container == null || container.ContainableItems.Count == 0) { return true; } - + if (container == null || container.ContainableItems.Count == 0) + { + character.Speak(TextManager.GetWithVariable("DialogCannotLoadTurret", "[itemname]", item.Name, true), null, 0.0f, "cannotloadturret", 30.0f); + return true; + } if (objective.SubObjectives.None()) { if (!AIDecontainEmptyItems(character, objective, equip: true, sourceContainer: container)) @@ -719,10 +785,25 @@ namespace Barotrauma.Items.Components if (objective.SubObjectives.None()) { var loadItemsObjective = AIContainItems(container, character, objective, usableProjectileCount + 1, equip: true, removeEmpty: true); - loadItemsObjective.ignoredContainerIdentifiers = new string[] { containerItem.prefab.Identifier }; - character.Speak(TextManager.GetWithVariable("DialogLoadTurret", "[itemname]", item.Name, true), null, 0.0f, "loadturret", 30.0f); + if (loadItemsObjective == null) + { + if (usableProjectileCount == 0) + { + character.Speak(TextManager.GetWithVariable("DialogCannotLoadTurret", "[itemname]", item.Name, true), null, 0.0f, "cannotloadturret", 30.0f); + return true; + } + } + else + { + loadItemsObjective.ignoredContainerIdentifiers = new string[] { containerItem.prefab.Identifier }; + character.Speak(TextManager.GetWithVariable("DialogLoadTurret", "[itemname]", item.Name, true), null, 0.0f, "loadturret", 30.0f); + return false; + } + } + if (objective.SubObjectives.Any()) + { + return false; } - return false; } //enough shells and power @@ -753,7 +834,10 @@ namespace Barotrauma.Items.Components character.AIController.SelectTarget(closestEnemy.AiTarget); character.CursorPosition = closestEnemy.WorldPosition; - if (item.Submarine != null) { character.CursorPosition -= item.Submarine.Position; } + if (character.Submarine != null) + { + character.CursorPosition -= character.Submarine.Position; + } float enemyAngle = MathUtils.VectorToAngle(closestEnemy.WorldPosition - item.WorldPosition); float turretAngle = -rotation; @@ -769,7 +853,8 @@ namespace Barotrauma.Items.Components end -= closestEnemy.Submarine.SimPosition; } var collisionCategories = Physics.CollisionWall | Physics.CollisionCharacter | Physics.CollisionItem | Physics.CollisionLevel; - var pickedBody = Submarine.PickBody(start, end, null, collisionCategories); + var pickedBody = Submarine.PickBody(start, end, null, collisionCategories, allowInsideFixture: true, + customPredicate: (Fixture f) => { return !item.StaticFixtures.Contains(f); }); if (pickedBody == null) { return false; } Character targetCharacter = null; if (pickedBody.UserData is Character c) @@ -780,23 +865,34 @@ namespace Barotrauma.Items.Components { targetCharacter = limb.character; } - if (targetCharacter != null && HumanAIController.IsFriendly(character, targetCharacter)) + if (targetCharacter != null) { - // Don't shoot friendly characters - return false; + if (HumanAIController.IsFriendly(character, targetCharacter)) + { + // Don't shoot friendly characters + return false; + } } - else if (targetCharacter == null && !(pickedBody.UserData is Structure) && !(pickedBody.UserData is Item)) + else { - // Hit something else than a wall or an item (probably a level wall) - return false; + if (pickedBody.UserData is ISpatialEntity e) + { + Submarine sub = e.Submarine; + if (sub == null) { return false; } + if (sub == Item.Submarine) { return false; } + // Don't shoot non-player submarines, i.e. wrecks or outposts. + if (!sub.Info.IsPlayer) { return false; } + // Don't shoot friendly submarines. + if (sub.TeamID == Item.Submarine.TeamID) { return false; } + } + else + { + // Hit something else, probably a level wall + return false; + } } - - if (objective.Option.Equals("fireatwill", StringComparison.OrdinalIgnoreCase)) - { - character?.Speak(TextManager.GetWithVariable("DialogFireTurret", "[itemname]", item.Name, true), null, 0.0f, "fireturret", 5.0f); - character.SetInput(InputType.Shoot, true, true); - } - + character?.Speak(TextManager.GetWithVariable("DialogFireTurret", "[itemname]", item.Name, true), null, 0.0f, "fireturret", 5.0f); + character.SetInput(InputType.Shoot, true, true); return false; } @@ -914,10 +1010,12 @@ namespace Barotrauma.Items.Components IsActive = true; } user = sender; + resetUserTimer = 10.0f; break; case "trigger_in": item.Use((float)Timing.Step, sender); user = sender; + resetUserTimer = 10.0f; //triggering the Use method through item.Use will fail if the item is not characterusable and the signal was sent by a character //so lets do it manually if (!characterUsable && sender != null) @@ -936,9 +1034,25 @@ namespace Barotrauma.Items.Components public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null) { - Item item = extraData.Length > 2 ? (Item)extraData[2] : null; - msg.Write(item == null || item.Removed ? (ushort)0 : item.ID); - msg.WriteRangedSingle(MathHelper.Clamp(targetRotation, minRotation, maxRotation), minRotation, maxRotation, 8); + if (extraData.Length > 2) + { + msg.Write(!(extraData[2] is Item item) || item.Removed ? ushort.MaxValue : item.ID); + msg.WriteRangedSingle(MathHelper.Clamp(rotation, minRotation, maxRotation), minRotation, maxRotation, 16); + } + else + { + msg.Write((ushort)0); + float wrappedTargetRotation = targetRotation; + while (wrappedTargetRotation < minRotation && MathUtils.IsValid(wrappedTargetRotation)) + { + wrappedTargetRotation += MathHelper.TwoPi; + } + while (wrappedTargetRotation > maxRotation && MathUtils.IsValid(wrappedTargetRotation)) + { + wrappedTargetRotation -= MathHelper.TwoPi; + } + msg.WriteRangedSingle(MathHelper.Clamp(wrappedTargetRotation, minRotation, maxRotation), minRotation, maxRotation, 16); + } } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs index c95adedb1..fd717b1c2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; using Barotrauma.Items.Components; @@ -221,11 +221,11 @@ namespace Barotrauma.Items.Components get { return variant; } set { -#if SERVER + if (variant == value) { return; } +#if SERVER variant = value; item.CreateServerEvent(this); #elif CLIENT - if (variant == value) { return; } Character character = picker; if (character != null) @@ -370,11 +370,12 @@ namespace Barotrauma.Items.Components public override void Unequip(Character character) { - if (picker == null) return; + if (character == null || character.Removed) { return; } + if (picker == null) { return; } for (int i = 0; i < wearableSprites.Length; i++) { Limb equipLimb = character.AnimController.GetLimb(limbType[i]); - if (equipLimb == null) continue; + if (equipLimb == null) { continue; } if (wearableSprites[i].LightComponent != null) { @@ -385,7 +386,6 @@ namespace Barotrauma.Items.Components #if CLIENT equipLimb.UpdateWearableTypesToHide(); #endif - limb[i] = null; } @@ -419,9 +419,14 @@ namespace Barotrauma.Items.Components { base.RemoveComponentSpecific(); + Unequip(picker); + foreach (WearableSprite wearableSprite in wearableSprites) { - if (wearableSprite != null && wearableSprite.Sprite != null) wearableSprite.Sprite.Remove(); + if (wearableSprite != null && wearableSprite.Sprite != null) + { + wearableSprite.Sprite.Remove(); + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs index 98eb99010..c54233341 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs @@ -54,6 +54,33 @@ namespace Barotrauma #endif } + public static Item FindItemRecursive(Item item, Predicate condition) + { + if (condition.Invoke(item)) + { + return item; + } + + var containers = item.GetComponents(); + + if (containers != null) + { + foreach (var container in containers) + { + foreach (var inventoryItem in container.Inventory.Items) + { + var findItem = FindItemRecursive(inventoryItem, condition); + if (findItem != null) + { + return findItem; + } + } + } + } + + return null; + } + public int FindIndex(Item item) { for (int i = 0; i < capacity; i++) @@ -173,6 +200,7 @@ namespace Barotrauma if (Owner == null) return; Inventory prevInventory = item.ParentInventory; + Inventory prevOwnerInventory = item.FindParentInventory(inv => inv is CharacterInventory); if (createNetworkEvent) { @@ -199,6 +227,14 @@ namespace Barotrauma item.body.Enabled = false; item.body.BodyType = FarseerPhysics.BodyType.Dynamic; } + +#if SERVER + if (prevOwnerInventory is CharacterInventory characterInventory && characterInventory != this && Owner == user) + { + var client = GameMain.Server?.ConnectedClients?.Find(cl => cl.Character == user); + GameMain.Server?.KarmaManager.OnItemTakenFromPlayer(characterInventory, client, item); + } +#endif } public bool IsEmpty() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs index 81e482f8f..2e24432e5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs @@ -17,17 +17,6 @@ using Microsoft.Xna.Framework.Graphics; namespace Barotrauma { - public enum ActionType - { - Always, OnPicked, OnUse, OnSecondaryUse, - OnWearing, OnContaining, OnContained, OnNotContained, - OnActive, OnFailure, OnBroken, - OnFire, InWater, NotInWater, - OnImpact, - OnEating, - OnDeath = OnBroken, - OnDamaged - } partial class Item : MapEntity, IDamageable, ISerializableEntity, IServerSerializable, IClientSerializable { @@ -38,6 +27,8 @@ namespace Barotrauma private HashSet tags; + private bool isWire; + private Hull currentHull; public Hull CurrentHull { @@ -63,11 +54,14 @@ namespace Barotrauma /// private readonly List updateableComponents = new List(); private List drawableComponents; + private bool hasComponentsToDraw; public PhysicsBody body; public readonly XElement StaticBodyConfig; + public List StaticFixtures = new List(); + private bool transformDirty = true; private float lastSentCondition; @@ -166,7 +160,7 @@ namespace Barotrauma set { description = value; } } - [Editable, Serialize(false, true)] + [Editable, Serialize(false, true, alwaysUseInstanceValues: true)] public bool NonInteractable { get; @@ -598,7 +592,7 @@ namespace Barotrauma spriteColor = prefab.SpriteColor; components = new List(); - drawableComponents = new List(); + drawableComponents = new List(); hasComponentsToDraw = false; tags = new HashSet(); repairables = new List(); @@ -626,7 +620,7 @@ namespace Barotrauma case "body": body = new PhysicsBody(subElement, ConvertUnits.ToSimUnits(Position), Scale); string collisionCategory = subElement.GetAttributeString("collisioncategory", null); - if (Prefab.DamagedByProjectiles || Prefab.DamagedByMeleeWeapons) + if ((Prefab.DamagedByProjectiles || Prefab.DamagedByMeleeWeapons) && Condition > 0) { //force collision category to Character to allow projectiles and weapons to hit //(we could also do this by making the projectiles and weapons hit CollisionItem @@ -683,7 +677,11 @@ namespace Barotrauma AddComponent(ic); - if (ic is IDrawableComponent && ic.Drawable) drawableComponents.Add(ic as IDrawableComponent); + if (ic is IDrawableComponent && ic.Drawable) + { + drawableComponents.Add(ic as IDrawableComponent); + hasComponentsToDraw = true; + } if (ic is Repairable) repairables.Add((Repairable)ic); break; } @@ -762,6 +760,8 @@ namespace Barotrauma ItemList.Add(this); DebugConsole.Log("Created " + Name + " (" + ID + ")"); + + if (Components.All(ic => ic is Wire || ic is Holdable)) { isWire = true; } } partial void InitProjSpecific(); @@ -888,12 +888,23 @@ namespace Barotrauma if (!drawableComponents.Contains(drawable)) { drawableComponents.Add(drawable); + hasComponentsToDraw = true; +#if CLIENT + cachedVisibleSize = null; +#endif } } public void DisableDrawableComponent(IDrawableComponent drawable) { - drawableComponents.Remove(drawable); + if (drawableComponents.Contains(drawable)) + { + drawableComponents.Remove(drawable); + hasComponentsToDraw = drawableComponents.Count > 0; +#if CLIENT + cachedVisibleSize = null; +#endif + } } public int GetComponentIndex(ItemComponent component) @@ -1065,7 +1076,7 @@ namespace Barotrauma public Item GetRootContainer() { - if (Container == null) return null; + if (Container == null) { return null; } Item rootContainer = Container; while (rootContainer.Container != null) @@ -1076,7 +1087,16 @@ namespace Barotrauma return rootContainer; } - public bool IsOwnedBy(Character character) => FindParentInventory(i => i.Owner == character) != null; + public bool IsOwnedBy(Entity entity) => FindParentInventory(i => i.Owner == entity) != null; + + public Entity GetRootInventoryOwner() + { + if (ParentInventory == null) { return this; } + if (ParentInventory.Owner is Character) { return ParentInventory.Owner; } + var rootContainer = GetRootContainer(); + if (rootContainer?.ParentInventory?.Owner is Character) { return rootContainer.ParentInventory.Owner; } + return rootContainer ?? this; + } public Inventory FindParentInventory(Func predicate) { @@ -1104,16 +1124,28 @@ namespace Barotrauma public void AddTag(string tag) { - if (tags.Contains(tag)) return; + if (tags.Contains(tag)) { return; } tags.Add(tag); } public bool HasTag(string tag) { - if (tag == null) return true; + if (tag == null) { return true; } return tags.Contains(tag) || prefab.Tags.Contains(tag); } + public void ReplaceTag(string tag, string newTag) + { + if (!tags.Contains(tag)) { return; } + tags.Remove(tag); + tags.Add(newTag); + } + + public IEnumerable GetTags() + { + return tags; + } + public bool HasTag(IEnumerable allowedTags) { if (allowedTags == null) return true; @@ -1391,7 +1423,7 @@ namespace Barotrauma } else { - if (updateableComponents.Count == 0 && aiTarget == null && !hasStatusEffectsOfType[(int)ActionType.Always] && body == null) + if (updateableComponents.Count == 0 && aiTarget == null && !hasStatusEffectsOfType[(int)ActionType.Always] && (body == null || !body.Enabled)) { #if CLIENT positionBuffer.Clear(); @@ -1423,6 +1455,14 @@ namespace Barotrauma body.SetTransform(body.SimPosition + prevSub.SimPosition - Submarine.SimPosition, body.Rotation); } + if (Submarine != prevSub && ContainedItems != null) + { + foreach (Item containedItem in ContainedItems) + { + containedItem.Submarine = Submarine; + } + } + Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition); rect.X = (int)(displayPos.X - rect.Width / 2.0f); rect.Y = (int)(displayPos.Y + rect.Height / 2.0f); @@ -1671,7 +1711,22 @@ namespace Barotrauma } } } - + + public Controller FindController() + { + //try finding the controller with the simpler non-recursive method first + var controllers = GetConnectedComponents(); + if (controllers.None()) { controllers = GetConnectedComponents(recursive: true); } + return controllers.Count < 2 ? controllers.FirstOrDefault() : + (controllers.FirstOrDefault(c => c.GetFocusTarget() == this) ?? controllers.FirstOrDefault()); + } + + public bool TryFindController(out Controller controller) + { + controller = FindController(); + return controller != null; + } + public void SendSignal(int stepsTaken, string signal, string connectionName, Character sender, float power = 0.0f, Item source = null, float signalStrength = 1.0f) { if (connections == null) { return; } @@ -1745,7 +1800,8 @@ namespace Barotrauma #if CLIENT bool hasRequiredSkills = true; Skill requiredSkill = null; -#endif +#endif + if (NonInteractable) { return false; } foreach (ItemComponent ic in components) { bool pickHit = false, selectHit = false; @@ -2003,6 +2059,8 @@ namespace Barotrauma public void Drop(Character dropper, bool createNetworkEvent = true) { + Inventory prevInventory = parentInventory; + if (createNetworkEvent) { if (parentInventory != null && !parentInventory.Owner.Removed && !Removed && @@ -2016,6 +2074,7 @@ namespace Barotrauma if (body != null) { + isActive = true; body.Enabled = true; body.PhysEnabled = true; body.ResetDynamics(); @@ -2477,7 +2536,7 @@ namespace Barotrauma return; } DebugConsole.Log("Removing item " + Name + " (ID: " + ID + ")"); - + base.Remove(); foreach (Character character in Character.CharacterList) @@ -2507,6 +2566,18 @@ namespace Barotrauma body = null; } + if (StaticFixtures != null) + { + foreach (Fixture fixture in StaticFixtures) + { + //if the world is null, the body has already been removed + //happens if the sub the fixture is attached to is removed before the item + if (fixture.Body?.World == null) { continue; } + fixture.Body.Remove(fixture); + } + StaticFixtures.Clear(); + } + foreach (Item it in ItemList) { if (it.linkedTo.Contains(this)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs index b29a31ad5..737acecc0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs @@ -2,7 +2,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Xml.Linq; using System.Linq; using Barotrauma.Items.Components; @@ -223,6 +223,12 @@ namespace Barotrauma private set; } + public bool AllowDeconstruct + { + get; + private set; + } + //how close the Character has to be to the item to pick it up [Serialize(120.0f, false)] public float InteractDistance @@ -246,6 +252,9 @@ namespace Barotrauma private set; } + [Serialize(false, false, description: "Hides the condition bar displayed at the bottom of the inventory slot the item is in.")] + public bool HideConditionBar { get; set; } + //if true and the item has trigger areas defined, characters need to be within the trigger to interact with the item //if false, trigger areas define areas that can be used to highlight the item [Serialize(true, false)] @@ -300,6 +309,13 @@ namespace Barotrauma private set; } + [Serialize(1f, false)] + public float ExplosionDamageMultiplier + { + get; + private set; + } + [Serialize(false, false)] public bool DamagedByProjectiles { @@ -314,6 +330,20 @@ namespace Barotrauma private set; } + [Serialize(false, false)] + public bool DamagedByRepairTools + { + get; + private set; + } + + [Serialize(false, false)] + public bool DamagedByMonsters + { + get; + private set; + } + [Serialize(false, false)] public bool FireProof { @@ -727,7 +757,7 @@ namespace Barotrauma #endif case "deconstruct": DeconstructTime = subElement.GetAttributeFloat("time", 1.0f); - + AllowDeconstruct = true; foreach (XElement deconstructItem in subElement.Elements()) { if (deconstructItem.Attribute("name") != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/CorpsePrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/CorpsePrefab.cs index 07011e517..1e0d220d2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/CorpsePrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/CorpsePrefab.cs @@ -155,16 +155,16 @@ namespace Barotrauma Prefabs.RemoveByFile(filePath); } - public void GiveItems(Character character) + public void GiveItems(Character character, Submarine submarine) { var spawnItems = ToolBox.SelectWeightedRandom(ItemSets.Keys.ToList(), ItemSets.Values.ToList(), Rand.RandSync.Unsynced); foreach (XElement itemElement in spawnItems.GetChildElements("item")) { - InitializeItems(character, itemElement); + InitializeItems(character, itemElement, submarine); } } - private void InitializeItems(Character character, XElement itemElement, Item parentItem = null) + private void InitializeItems(Character character, XElement itemElement, Submarine submarine, Item parentItem = null) { ItemPrefab itemPrefab; string itemIdentifier = itemElement.GetAttributeString("identifier", ""); @@ -201,9 +201,10 @@ namespace Barotrauma { character.Inventory.TryPutItem(item, null, item.AllowedSlots); } - if (item.Prefab.Identifier == "idcard") + if (item.Prefab.Identifier == "idcard" || item.Prefab.Identifier == "idcardwreck") { item.AddTag("name:" + character.Name); + item.ReplaceTag("wreck_id", Level.Loaded.GetWreckIDTag("wreck_id", submarine)); var job = character.Info?.Job; if (job != null) { @@ -220,7 +221,7 @@ namespace Barotrauma } foreach (XElement childItemElement in itemElement.Elements()) { - InitializeItems(character, childItemElement, item); + InitializeItems(character, childItemElement, submarine, item); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs index 1ab304ba9..affe3215e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; @@ -146,7 +146,7 @@ namespace Barotrauma { id += 1; IDfound = dictionary.ContainsKey(id); - } while (IDfound); + } while (IDfound || id == NullEntityID || id == EntitySpawnerID); return id; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs index b69253f6f..bd475290f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs @@ -30,9 +30,9 @@ namespace Barotrauma public float EmpStrength { get; set; } - public Explosion(float range, float force, float damage, float structureDamage, float empStrength = 0.0f) + public Explosion(float range, float force, float damage, float structureDamage, float itemDamage, float empStrength = 0.0f) { - attack = new Attack(damage, 0.0f, 0.0f, structureDamage, range) + attack = new Attack(damage, 0.0f, 0.0f, structureDamage, itemDamage, range) { SeverLimbsProbability = 1.0f }; @@ -157,42 +157,47 @@ namespace Barotrauma if (GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) { - if (flames) + foreach (Item item in Item.ItemList) { - foreach (Item item in Item.ItemList) + if (item.Condition <= 0.0f) { continue; } + if (Vector2.Distance(item.WorldPosition, worldPosition) > attack.Range * 0.5f) { continue; } + if (flames && !item.FireProof) { - if (item.CurrentHull != hull || item.FireProof || item.Condition <= 0.0f) { continue; } - //don't apply OnFire effects if the item is inside a fireproof container //(or if it's inside a container that's inside a fireproof container, etc) Item container = item.Container; bool fireProof = false; while (container != null) { - if (container.FireProof) { fireProof = true; break; } + if (container.FireProof) + { + fireProof = true; + break; + } container = container.Container; } - - if (fireProof || Vector2.Distance(item.WorldPosition, worldPosition) > attack.Range * 0.5f) { continue; } - - item.ApplyStatusEffects(ActionType.OnFire, 1.0f); - if (item.Condition <= 0.0f && GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) + if (!fireProof) { - GameMain.NetworkMember.CreateEntityEvent(item, new object[] { NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnFire }); + item.ApplyStatusEffects(ActionType.OnFire, 1.0f); + if (item.Condition <= 0.0f && GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer) + { + GameMain.NetworkMember.CreateEntityEvent(item, new object[] { NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnFire }); + } } + } - if (item.Prefab.DamagedByExplosions && !item.Indestructible) + if (item.Prefab.DamagedByExplosions && !item.Indestructible) + { + float limbRadius = item.body == null ? 0.0f : item.body.GetMaxExtent(); + float dist = Vector2.Distance(item.WorldPosition, worldPosition); + dist = Math.Max(0.0f, dist - ConvertUnits.ToDisplayUnits(limbRadius)); + if (dist > attack.Range) { - float limbRadius = item.body == null ? 0.0f : item.body.GetMaxExtent(); - float dist = Vector2.Distance(item.WorldPosition, worldPosition); - dist = Math.Max(0.0f, dist - ConvertUnits.ToDisplayUnits(limbRadius)); - - if (dist > attack.Range) { continue; } - - float distFactor = 1.0f - dist / attack.Range; - float damageAmount = attack.GetItemDamage(1.0f); - item.Condition -= damageAmount * distFactor; + continue; } + float distFactor = 1.0f - dist / attack.Range; + float damageAmount = attack.GetItemDamage(1.0f) * item.Prefab.ExplosionDamageMultiplier; + item.Condition -= damageAmount * distFactor; } } } @@ -200,10 +205,9 @@ namespace Barotrauma partial void ExplodeProjSpecific(Vector2 worldPosition, Hull hull); - public static void DamageCharacters(Vector2 worldPosition, Attack attack, float force, Entity damageSource, Character attacker) { - if (attack.Range <= 0.0f) return; + if (attack.Range <= 0.0f) { return; } //long range for the broad distance check, because large characters may still be in range even if their collider isn't float broadRange = Math.Max(attack.Range * 10.0f, 10000.0f); @@ -220,19 +224,20 @@ namespace Barotrauma Vector2 explosionPos = worldPosition; if (c.Submarine != null) { explosionPos -= c.Submarine.Position; } - Hull hull = Hull.FindHull(ConvertUnits.ToDisplayUnits(explosionPos), null, false); + Hull hull = Hull.FindHull(explosionPos, null, false); bool underWater = hull == null || explosionPos.Y < hull.Surface; explosionPos = ConvertUnits.ToSimUnits(explosionPos); Dictionary distFactors = new Dictionary(); + Dictionary damages = new Dictionary(); foreach (Limb limb in c.AnimController.Limbs) { float dist = Vector2.Distance(limb.WorldPosition, worldPosition); //calculate distance from the "outer surface" of the physics body //doesn't take the rotation of the limb into account, but should be accurate enough for this purpose - float limbRadius = Math.Max(Math.Max(limb.body.width * 0.5f, limb.body.height * 0.5f), limb.body.radius); + float limbRadius = limb.body.GetMaxExtent(); dist = Math.Max(0.0f, dist - ConvertUnits.ToDisplayUnits(limbRadius)); if (dist > attack.Range) { continue; } @@ -240,14 +245,18 @@ namespace Barotrauma float distFactor = 1.0f - dist / attack.Range; //solid obstacles between the explosion and the limb reduce the effect of the explosion by 90% - if (Submarine.CheckVisibility(limb.SimPosition, explosionPos) != null) distFactor *= 0.1f; + if (Submarine.CheckVisibility(limb.SimPosition, explosionPos) != null) + { + distFactor *= 0.1f; + } distFactors.Add(limb, distFactor); List modifiedAfflictions = new List(); + int limbCount = c.AnimController.Limbs.Count(l => !l.IsSevered && !l.ignoreCollisions); foreach (Affliction affliction in attack.Afflictions.Keys) { - modifiedAfflictions.Add(affliction.CreateMultiplied(distFactor / c.AnimController.Limbs.Length)); + modifiedAfflictions.Add(affliction.CreateMultiplied(distFactor / limbCount)); } c.LastDamageSource = damageSource; if (attacker == null) @@ -255,14 +264,18 @@ namespace Barotrauma if (damageSource is Item item) { attacker = item.GetComponent()?.User; - if (attacker == null) attacker = item.GetComponent()?.User; + if (attacker == null) + { + attacker = item.GetComponent()?.User; + } } } //use a position slightly from the limb's position towards the explosion //ensures that the attack hits the correct limb and that the direction of the hit can be determined correctly in the AddDamage methods Vector2 hitPos = limb.WorldPosition + (worldPosition - limb.WorldPosition) / dist * 0.01f; - c.AddDamage(hitPos, modifiedAfflictions, attack.Stun * distFactor, false, attacker: attacker); + AttackResult attackResult = c.AddDamage(hitPos, modifiedAfflictions, attack.Stun * distFactor, false, attacker: attacker); + damages.Add(limb, attackResult.Damage); if (attack.StatusEffects != null && attack.StatusEffects.Any()) { @@ -287,14 +300,19 @@ namespace Barotrauma } //sever joints - if (c.IsDead && attack.SeverLimbsProbability > 0.0f) + if (attack.SeverLimbsProbability > 0.0f) { foreach (Limb limb in c.AnimController.Limbs) { - if (!distFactors.ContainsKey(limb)) { continue; } - if (Rand.Range(0.0f, 1.0f) < attack.SeverLimbsProbability * distFactors[limb]) + if (limb.character.Removed || limb.Removed) { continue; } + if (limb.IsSevered) { continue; } + if (!c.IsDead && !limb.CanBeSeveredAlive) { continue; } + if (distFactors.TryGetValue(limb, out float distFactor)) { - c.TrySeverLimbJoints(limb, 1.0f); + if (damages.TryGetValue(limb, out float damage)) + { + c.TrySeverLimbJoints(limb, attack.SeverLimbsProbability * distFactor, damage); + } } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/FireSource.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/FireSource.cs index 08feb0f1c..0e0b69192 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/FireSource.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/FireSource.cs @@ -2,12 +2,14 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; +using Barotrauma.Extensions; #if CLIENT using Barotrauma.Sounds; using Barotrauma.Lights; using Barotrauma.Particles; #endif using FarseerPhysics; +using System.Linq; namespace Barotrauma { @@ -15,6 +17,7 @@ namespace Barotrauma { const float OxygenConsumption = 50.0f; const float GrowSpeed = 20.0f; + const float MaxDamageRange = 250.0f; protected Hull hull; @@ -65,7 +68,7 @@ namespace Barotrauma public virtual float DamageRange { - get { return (float)Math.Sqrt(size.X) * 20.0f; } + get { return Math.Min((float)Math.Sqrt(size.X) * 10.0f, MaxDamageRange); } } public Hull Hull @@ -123,8 +126,8 @@ namespace Barotrauma { i = Math.Min(i, fireSources.Count - 1); j = Math.Min(j, i - 1); - - if (!fireSources[i].CheckOverLap(fireSources[j])) continue; + + if (!fireSources[i].CheckOverLap(fireSources[j])) { continue; } float leftEdge = Math.Min(fireSources[i].position.X, fireSources[j].position.X); @@ -133,12 +136,10 @@ namespace Barotrauma - leftEdge; fireSources[j].position.X = leftEdge; - #if CLIENT fireSources[j].burnDecals.AddRange(fireSources[i].burnDecals); fireSources[j].burnDecals.Sort((d1, d2) => { return Math.Sign(d1.WorldPosition.X - d2.WorldPosition.X); }); #endif - fireSources[i].Remove(); } } @@ -210,21 +211,32 @@ namespace Barotrauma private void DamageCharacters(float deltaTime) { - if (size.X <= 0.0f) return; + if (size.X <= 0.0f) { return; } for (int i = 0; i < Character.CharacterList.Count; i++) { Character c = Character.CharacterList[i]; - if (c.AnimController.CurrentHull == null || c.IsDead) continue; + if (c.CurrentHull == null || c.IsDead) { continue; } - if (!IsInDamageRange(c, DamageRange)) continue; + if (!IsInDamageRange(c, DamageRange)) { continue; } - float dmg = (float)Math.Sqrt(size.X) * deltaTime / c.AnimController.Limbs.Length; + //GetApproximateDistance returns float.MaxValue if there's no path through open gaps between the hulls (e.g. if there's a door/wall in between) + if (hull.GetApproximateDistance(Position, c.Position, c.CurrentHull, 10000.0f) > size.X + DamageRange) + { + return; + } + + float dmg = (float)Math.Sqrt(Math.Min(500, size.X)) * deltaTime / c.AnimController.Limbs.Count(l => !l.IsSevered); foreach (Limb limb in c.AnimController.Limbs) { + if (limb.IsSevered) { continue; } c.LastDamageSource = null; - c.DamageLimb(WorldPosition, limb, new List() { AfflictionPrefab.Burn.Instantiate(dmg) }, 0.0f, false, 0.0f); + c.DamageLimb(WorldPosition, limb, AfflictionPrefab.Burn.Instantiate(dmg).ToEnumerable(), 0.0f, false, 0.0f); } +#if CLIENT + //let clients display the client-side damage immediately, otherwise they may not be able to react to the damage fast enough + c.CharacterHealth.DisplayedVitality = c.Vitality; +#endif c.ApplyStatusEffects(ActionType.OnFire, deltaTime); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs index 73f7a993a..c0581a19a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs @@ -33,6 +33,8 @@ namespace Barotrauma //the force of the water flow which is exerted on physics bodies private Vector2 flowForce; private Hull flowTargetHull; + + private float openedTimer = 1.0f; private float higherSurface; private float lowerSurface; @@ -54,7 +56,11 @@ namespace Barotrauma public float Open { get { return open; } - set { open = MathHelper.Clamp(value, 0.0f, 1.0f); } + set + { + if (value > open) { openedTimer = 1.0f; } + open = MathHelper.Clamp(value, 0.0f, 1.0f); + } } public float Size => IsHorizontal ? Rect.Height : Rect.Width; @@ -124,6 +130,7 @@ namespace Barotrauma InsertToList(); outsideCollisionBlocker = GameMain.World.CreateEdge(-Vector2.UnitX * 2.0f, Vector2.UnitX * 2.0f); + outsideCollisionBlocker.UserData = $"CollisionBlocker (Gap {ID})"; outsideCollisionBlocker.BodyType = BodyType.Static; outsideCollisionBlocker.CollisionCategories = Physics.CollisionWall; outsideCollisionBlocker.CollidesWith = Physics.CollisionCharacter; @@ -277,57 +284,18 @@ namespace Barotrauma flowForce.X = MathHelper.Clamp(flowForce.X, -MaxFlowForce, MaxFlowForce); flowForce.Y = MathHelper.Clamp(flowForce.Y, -MaxFlowForce, MaxFlowForce); - lerpedFlowForce = Vector2.Lerp(lerpedFlowForce, flowForce, deltaTime * 5.0f); + if (openedTimer > 0.0f && flowForce.Length() > lerpedFlowForce.Length()) + { + //if the gap has just been opened/created, allow it to exert a large force instantly without any smoothing + lerpedFlowForce = flowForce; + } + else + { + lerpedFlowForce = Vector2.Lerp(lerpedFlowForce, flowForce, deltaTime * 5.0f); + } + openedTimer -= deltaTime; EmitParticles(deltaTime); - - if (flowTargetHull != null && lerpedFlowForce.LengthSquared() > 0.0001f) - { - foreach (Character character in Character.CharacterList) - { - if (character.CurrentHull == null) continue; - if (character.CurrentHull != linkedTo[0] as Hull && - (linkedTo.Count < 2 || character.CurrentHull != linkedTo[1] as Hull)) - { - continue; - } - - foreach (Limb limb in character.AnimController.Limbs) - { - if (!limb.inWater) continue; - - float dist = Vector2.Distance(limb.WorldPosition, WorldPosition); - if (dist > lerpedFlowForce.Length()) continue; - - Vector2 force = lerpedFlowForce / (float)Math.Max(Math.Sqrt(dist), 20.0f) * 0.025f; - - //vertical gaps only apply forces if the character is roughly above/below the gap - if (!IsHorizontal) - { - float xDist = Math.Abs(limb.WorldPosition.X - WorldPosition.X); - if (xDist > rect.Width || rect.Width == 0) break; - - force *= 1.0f - xDist / rect.Width; - } - - if (!MathUtils.IsValid(force)) - { - string errorMsg = "Attempted to apply invalid flow force to the character \"" + character.Name + - "\", gap pos: " + WorldPosition + - ", limb pos: " + limb.WorldPosition + - ", flowforce: " + flowForce + ", lerpedFlowForce:" + lerpedFlowForce + - ", dist: " + dist; - - DebugConsole.Log(errorMsg); - GameAnalyticsManager.AddErrorEventOnce("Gap.Update:InvalidFlowForce:" + character.Name, - GameAnalyticsSDK.Net.EGAErrorSeverity.Error, - errorMsg); - continue; - } - character.AnimController.Collider.ApplyForce(force * limb.body.Mass, maxVelocity: NetConfig.MaxPhysicsBodyVelocity); - } - } - } } partial void EmitParticles(float deltaTime); @@ -510,7 +478,7 @@ namespace Barotrauma //the larger the gap is, the faster the water flows float sizeModifier = size * open * open; - float delta = hull1.Volume * Hull.MaxCompress * sizeModifier * deltaTime; + float delta = 500.0f * sizeModifier * deltaTime; //make sure not to place more water to the target room than it can hold delta = Math.Min(delta, hull1.Volume * Hull.MaxCompress - hull1.WaterVolume); @@ -595,7 +563,7 @@ namespace Barotrauma private void UpdateOutsideColliderPos(Hull hull) { - if (Submarine == null || IsRoomToRoom) { return; } + if (Submarine == null || IsRoomToRoom || Level.Loaded == null) { return; } Vector2 rayDir; if (IsHorizontal) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs index 3de38ad57..d840a1b80 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs @@ -22,9 +22,9 @@ namespace Barotrauma public const float OxygenConsumptionSpeed = 700.0f; public const int WaveWidth = 32; - public static float WaveStiffness = 0.02f; - public static float WaveSpread = 0.05f; - public static float WaveDampening = 0.05f; + public static float WaveStiffness = 0.01f; + public static float WaveSpread = 0.02f; + public static float WaveDampening = 0.02f; //how much excess water the room can contain, relative to the volume of the room. //needed to make it possible for pressure to "push" water up through U-shaped hull configurations @@ -83,6 +83,21 @@ namespace Barotrauma } } + private Color ambientLight; + + [Editable, Serialize("0,0,0,0", true)] + public Color AmbientLight + { + get { return ambientLight; } + set + { + ambientLight = value; +#if CLIENT + lastAmbientLightEditTime = Timing.TotalTime; +#endif + } + } + public override Rectangle Rect { get @@ -501,54 +516,34 @@ namespace Barotrauma rightDelta[i] = WaveSpread * (waveY[i] - waveY[i + 1]); waveVel[i + 1] += rightDelta[i]; } - - for (int i = 1; i < waveY.Length - 1; i++) - { - waveY[i - 1] += leftDelta[i]; - waveY[i + 1] += rightDelta[i]; - } } //make waves propagate through horizontal gaps foreach (Gap gap in ConnectedGaps) { - if (!gap.IsRoomToRoom || !gap.IsHorizontal || gap.Open <= 0.0f) continue; - if (surface > gap.Rect.Y || surface < gap.Rect.Y - gap.Rect.Height) continue; - - Hull hull2 = this == gap.linkedTo[0] as Hull ? (Hull)gap.linkedTo[1] : (Hull)gap.linkedTo[0]; - float otherSurfaceY = hull2.surface; - if (otherSurfaceY > gap.Rect.Y || otherSurfaceY < gap.Rect.Y - gap.Rect.Height) continue; - - float surfaceDiff = (surface - otherSurfaceY) * gap.Open; if (this != gap.linkedTo[0] as Hull) { - //the first hull linked to the gap handles the wave propagation, - //the second just updates the surfaces to the same level - if (surfaceDiff < 32.0f) - { - hull2.waveY[hull2.waveY.Length - 1] = surfaceDiff * 0.5f; - waveY[0] = -surfaceDiff * 0.5f; - } + //let the first linked hull handle the water propagation continue; } + if (!gap.IsRoomToRoom || !gap.IsHorizontal || gap.Open <= 0.0f) { continue; } + if (surface > gap.Rect.Y || surface < gap.Rect.Y - gap.Rect.Height) { continue; } + + Hull hull2 = this == gap.linkedTo[0] as Hull ? (Hull)gap.linkedTo[1] : (Hull)gap.linkedTo[0]; + float otherSurfaceY = hull2.surface; + if (otherSurfaceY > gap.Rect.Y || otherSurfaceY < gap.Rect.Y - gap.Rect.Height) { continue; } + + float surfaceDiff = (surface - otherSurfaceY) * gap.Open; for (int j = 0; j < 2; j++) { - int i = waveY.Length - 1; + rightDelta[waveY.Length - 1] = WaveSpread * (hull2.waveY[0] - waveY[waveY.Length - 1] - surfaceDiff) * 0.5f; + waveVel[waveY.Length - 1] += rightDelta[waveY.Length - 1]; + waveY[waveY.Length - 1] += rightDelta[waveY.Length - 1]; - leftDelta[i] = WaveSpread * (waveY[i] - waveY[i - 1]); - waveVel[i - 1] += leftDelta[i]; - - rightDelta[i] = WaveSpread * (waveY[i] - hull2.waveY[0] + surfaceDiff); - hull2.waveVel[0] += rightDelta[i]; - - i = 0; - - hull2.leftDelta[i] = WaveSpread * (hull2.waveY[i] - waveY[waveY.Length - 1] - surfaceDiff); - waveVel[waveVel.Length - 1] += hull2.leftDelta[i]; - - hull2.rightDelta[i] = WaveSpread * (hull2.waveY[i] - hull2.waveY[i + 1]); - hull2.waveVel[i + 1] += hull2.rightDelta[i]; + hull2.leftDelta[0] = WaveSpread * (waveY[waveY.Length - 1] - hull2.waveY[0] + surfaceDiff) * 0.5f; + hull2.waveVel[0] += hull2.leftDelta[0]; + hull2.waveY[0] += hull2.leftDelta[0]; } if (surfaceDiff < 32.0f) @@ -557,13 +552,19 @@ namespace Barotrauma hull2.waveY[0] = surfaceDiff * 0.5f; waveY[waveY.Length - 1] = -surfaceDiff * 0.5f; } - else + } + + + //apply spread (two iterations) + for (int j = 0; j < 2; j++) + { + for (int i = 1; i < waveY.Length - 1; i++) { - hull2.waveY[0] += rightDelta[waveY.Length - 1]; - waveY[waveY.Length - 1] += hull2.leftDelta[0]; + waveY[i - 1] += leftDelta[i]; + waveY[i + 1] += rightDelta[i]; } } - + if (waterVolume < Volume) { LethalPressure -= 10.0f * deltaTime; @@ -609,37 +610,33 @@ namespace Barotrauma FireSources.Remove(fire); } - private HashSet adjacentHulls = new HashSet(); - public IEnumerable GetConnectedHulls(bool includingThis, int? searchDepth = null) + private readonly HashSet adjacentHulls = new HashSet(); + public IEnumerable GetConnectedHulls(bool includingThis, int? searchDepth = null, bool ignoreClosedGaps = false) { adjacentHulls.Clear(); int startStep = 0; - searchDepth = searchDepth ?? 100; - return GetAdjacentHulls(includingThis, adjacentHulls, ref startStep, searchDepth.Value); + searchDepth ??= 100; + GetAdjacentHulls(adjacentHulls, ref startStep, searchDepth.Value, ignoreClosedGaps); + if (!includingThis) { adjacentHulls.Remove(this); } + return adjacentHulls; } - private HashSet GetAdjacentHulls(bool includingThis, HashSet connectedHulls, ref int step, int searchDepth) + private void GetAdjacentHulls(HashSet connectedHulls, ref int step, int searchDepth, bool ignoreClosedGaps = false) { - if (includingThis) - { - connectedHulls.Add(this); - } - if (step > searchDepth) - { - return connectedHulls; - } + connectedHulls.Add(this); + if (step > searchDepth) { return; } foreach (Gap g in ConnectedGaps) { + if (ignoreClosedGaps && g.Open <= 0.0f) { continue; } for (int i = 0; i < 2 && i < g.linkedTo.Count; i++) { if (g.linkedTo[i] is Hull hull && !connectedHulls.Contains(hull)) { step++; - hull.GetAdjacentHulls(true, connectedHulls, ref step, searchDepth); + hull.GetAdjacentHulls(connectedHulls, ref step, searchDepth, ignoreClosedGaps); } } } - return connectedHulls; } /// @@ -666,7 +663,7 @@ namespace Barotrauma if (g.ConnectedDoor != null && !g.ConnectedDoor.IsBroken) { //gap blocked if the door is not open or the predicted state is not open - if (!g.ConnectedDoor.IsOpen || (g.ConnectedDoor.PredictedState.HasValue && !g.ConnectedDoor.PredictedState.Value)) + if ((!g.ConnectedDoor.IsOpen && !g.ConnectedDoor.IsBroken) || (g.ConnectedDoor.PredictedState.HasValue && !g.ConnectedDoor.PredictedState.Value)) { if (g.ConnectedDoor.OpenState < 0.1f) continue; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs index 50ca02659..bdefa47e8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs @@ -2,7 +2,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; @@ -55,7 +55,7 @@ namespace Barotrauma DisplayEntities = new List>(); foreach (XElement entityElement in doc.Root.Elements()) { - string identifier = entityElement.GetAttributeString("identifier", ""); + string identifier = entityElement.GetAttributeString("identifier", entityElement.Name.ToString().ToLowerInvariant()); MapEntityPrefab mapEntity = List.FirstOrDefault(p => p.Identifier == identifier); if (mapEntity == null) { @@ -64,9 +64,9 @@ namespace Barotrauma } Rectangle rect = entityElement.GetAttributeRect("rect", Rectangle.Empty); - if (mapEntity != null && !entityElement.GetAttributeBool("hideinassemblypreview", false)) + if (mapEntity != null && !entityElement.Elements().Any(e => e.Name.LocalName.Equals("wire", StringComparison.OrdinalIgnoreCase))) { - DisplayEntities.Add(new Pair(mapEntity, rect)); + if (!entityElement.GetAttributeBool("hideinassemblypreview", false)) { DisplayEntities.Add(new Pair(mapEntity, rect)); } minX = Math.Min(minX, rect.X); minY = Math.Min(minY, rect.Y - rect.Height); maxX = Math.Max(maxX, rect.Right); @@ -74,7 +74,9 @@ namespace Barotrauma } } - Bounds = new Rectangle(minX, minY, maxX - minX, maxY - minY); + Bounds = minX == int.MaxValue ? + new Rectangle(0, 0, 1, 1) : + new Rectangle(minX, minY, maxX - minX, maxY - minY); Prefabs.Add(this, false); } @@ -89,7 +91,7 @@ namespace Barotrauma CreateInstance(rect.Location.ToVector2(), Submarine.MainSub); } - public List CreateInstance(Vector2 position, Submarine sub) + public List CreateInstance(Vector2 position, Submarine sub, bool selectPrefabs = false) { List entities = MapEntity.LoadAll(sub, configElement, FilePath); if (entities.Count == 0) return entities; @@ -107,10 +109,10 @@ namespace Barotrauma MapEntity.MapLoaded(entities, true); #if CLIENT - if (Screen.Selected == GameMain.SubEditorScreen) + if (Screen.Selected == GameMain.SubEditorScreen && selectPrefabs) { MapEntity.SelectedList.Clear(); - entities.ForEach(e => MapEntity.AddSelection(e)); + entities.ForEach(MapEntity.AddSelection); } #endif return entities; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/CaveGenerator.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/CaveGenerator.cs index 0870154a1..577b7f3fd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/CaveGenerator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/CaveGenerator.cs @@ -27,19 +27,19 @@ namespace Barotrauma foreach (GraphEdge ge in graphEdges) { - if (Vector2.DistanceSquared(ge.Point1, ge.Point2) < 0.001f) continue; + if (Vector2.DistanceSquared(ge.Point1, ge.Point2) < 0.001f) { continue; } for (int i = 0; i < 2; i++) { Site site = (i == 0) ? ge.Site1 : ge.Site2; - int x = (int)(Math.Floor((site.Coord.X-borders.X) / gridCellSize)); - int y = (int)(Math.Floor((site.Coord.Y-borders.Y) / gridCellSize)); + int x = (int)(Math.Floor((site.Coord.X - borders.X) / gridCellSize)); + int y = (int)(Math.Floor((site.Coord.Y - borders.Y) / gridCellSize)); - x = MathHelper.Clamp(x, 0, cellGrid.GetLength(0)-1); - y = MathHelper.Clamp(y, 0, cellGrid.GetLength(1)-1); - - VoronoiCell cell = cellGrid[x,y].Find(c => c.Site == site); + x = MathHelper.Clamp(x, 0, cellGrid.GetLength(0) - 1); + y = MathHelper.Clamp(y, 0, cellGrid.GetLength(1) - 1); + + VoronoiCell cell = cellGrid[x, y].Find(c => c.Site == site); if (cell == null) { @@ -60,14 +60,62 @@ namespace Barotrauma } } + //add edges to the borders of the graph + foreach (var cell in cells) + { + Vector2? point1 = null, point2 = null; + foreach (GraphEdge ge in cell.Edges) + { + if (MathUtils.NearlyEqual(ge.Point1.X, borders.X) || MathUtils.NearlyEqual(ge.Point1.X, borders.Right) || + MathUtils.NearlyEqual(ge.Point1.Y, borders.Y) || MathUtils.NearlyEqual(ge.Point1.Y, borders.Bottom)) + { + if (point1 == null) + { + point1 = ge.Point1; + } + else if (point2 == null) + { + if (MathUtils.NearlyEqual(point1.Value, ge.Point1)) { continue; } + point2 = ge.Point1; + } + } + if (MathUtils.NearlyEqual(ge.Point2.X, borders.X) || MathUtils.NearlyEqual(ge.Point2.X, borders.Right) || + MathUtils.NearlyEqual(ge.Point2.Y, borders.Y) || MathUtils.NearlyEqual(ge.Point2.Y, borders.Bottom)) + { + if (point1 == null) + { + point1 = ge.Point2; + } + else + { + if (MathUtils.NearlyEqual(point1.Value, ge.Point2)) { continue; } + point2 = ge.Point2; + } + } + if (point1.HasValue && point2.HasValue) + { + Debug.Assert(point1 != point2); + var newEdge = new GraphEdge(point1.Value, point2.Value) + { + Cell1 = cell, + IsSolid = true, + Site1 = cell.Site, + OutsideLevel = true + }; + cell.Edges.Add(newEdge); + break; + } + } + } + return cells; } private static Vector2 GetEdgeNormal(GraphEdge edge, VoronoiCell cell = null) { - if (cell == null) cell = edge.AdjacentCell(null); - if (cell == null) return Vector2.UnitX; + if (cell == null) { cell = edge.AdjacentCell(null); } + if (cell == null) { return Vector2.UnitX; } CompareCCW compare = new CompareCCW(cell.Center); if (compare.Compare(edge.Point1, edge.Point2) == -1) @@ -77,9 +125,7 @@ namespace Barotrauma edge.Point2 = temp; } - Vector2 normal = Vector2.Zero; - - normal = Vector2.Normalize(edge.Point2 - edge.Point1); + Vector2 normal = Vector2.Normalize(edge.Point2 - edge.Point1); Vector2 diffToCell = Vector2.Normalize(cell.Center - edge.Point2); normal = new Vector2(-normal.Y, normal.X); @@ -148,7 +194,7 @@ namespace Barotrauma foreach (GraphEdge edge in currentCell.Edges) { var adjacentCell = edge.AdjacentCell(currentCell); - if (limits.Contains(adjacentCell.Site.Coord.X, adjacentCell.Site.Coord.Y)) + if (adjacentCell != null && limits.Contains(adjacentCell.Site.Coord.X, adjacentCell.Site.Coord.Y)) { allowedEdges.Add(edge); } @@ -161,6 +207,7 @@ namespace Barotrauma for (int i = 0; i < currentCell.Edges.Count; i++) { var adjacentCell = currentCell.Edges[i].AdjacentCell(currentCell); + if (adjacentCell == null) { continue; } double dist = MathUtils.Distance( adjacentCell.Site.Coord.X, adjacentCell.Site.Coord.Y, targetCells[currentTargetIndex].Site.Coord.X, targetCells[currentTargetIndex].Site.Coord.Y); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs index 6b556debe..05648b653 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs @@ -18,6 +18,10 @@ namespace Barotrauma //all entities are disabled after they reach this depth public const int MaxEntityDepth = -300000; public const float ShaftHeight = 1000.0f; + /// + /// The level generator won't try to adjust the width of the main path above this limit. + /// + public const int MaxSubmarineWidth = 16000; public static Level Loaded { @@ -141,8 +145,6 @@ namespace Barotrauma get { return positionsOfInterest; } } - public readonly List UsedPositions = new List(); - public Submarine StartOutpost { get; private set; } public Submarine EndOutpost { get; private set; } @@ -166,6 +168,11 @@ namespace Barotrauma private set; } + public List EntitiesBeforeGenerate { get; private set; } = new List(); + public int EntityCountBeforeGenerate { get; private set; } + public int EntityCountAfterGenerate { get; private set; } + + public float Difficulty { get; @@ -281,8 +288,11 @@ namespace Barotrauma public void Generate(bool mirror) { - if (loaded != null) loaded.Remove(); + if (loaded != null) { loaded.Remove(); } loaded = this; + + EntitiesBeforeGenerate = GetEntityList(); + EntityCountBeforeGenerate = EntitiesBeforeGenerate.Count(); levelObjectManager = new LevelObjectManager(); @@ -316,26 +326,25 @@ namespace Barotrauma SeaFloorTopPos = generationParams.SeaFloorDepth + generationParams.MountainHeightMax + generationParams.SeaFloorVariance; int minWidth = 6500; - int maxWidth = 50000; if (Submarine.MainSub != null) { Rectangle dockedSubBorders = Submarine.MainSub.GetDockedBorders(); - dockedSubBorders.Inflate(dockedSubBorders.Size.ToVector2() * 0.05f); + dockedSubBorders.Inflate(dockedSubBorders.Size.ToVector2() * 0.15f); minWidth = Math.Max(minWidth, Math.Max(dockedSubBorders.Width, dockedSubBorders.Height)); - minWidth = Math.Min(minWidth, maxWidth); + minWidth = Math.Min(minWidth, MaxSubmarineWidth); } Rectangle pathBorders = borders; - pathBorders.Inflate(-minWidth * 2, -minWidth); + pathBorders.Inflate(-Math.Min(minWidth * 2, MaxSubmarineWidth), -minWidth); Debug.Assert(pathBorders.Width > 0 && pathBorders.Height > 0, "The size of the level's path area was negative."); startPosition = new Point( - Rand.Range(minWidth, minWidth * 2, Rand.RandSync.Server), + minWidth, Rand.Range(borders.Height / 2, borders.Height - minWidth * 2, Rand.RandSync.Server)); endPosition = new Point( - borders.Width - Rand.Range(minWidth, minWidth * 2, Rand.RandSync.Server), + borders.Width - minWidth, Rand.Range(borders.Height / 2, borders.Height - minWidth * 2, Rand.RandSync.Server)); //---------------------------------------------------------------------------------- @@ -348,19 +357,25 @@ namespace Barotrauma Point nodeInterval = generationParams.MainPathNodeIntervalRange; for (int x = startPosition.X + nodeInterval.X; - x < endPosition.X - nodeInterval.X; + x < endPosition.X - nodeInterval.X; x += Rand.Range(nodeInterval.X, nodeInterval.Y, Rand.RandSync.Server)) { pathNodes.Add(new Point(x, Rand.Range(pathBorders.Y, pathBorders.Bottom, Rand.RandSync.Server))); } - pathNodes.Add(new Point(endPosition.X, borders.Height)); - - if (pathNodes.Count <= 2) + if (pathNodes.Count == 1) { - pathNodes.Insert(1, borders.Center); + pathNodes.Add(new Point(pathBorders.Center.X, pathBorders.Y)); + } + //if all nodes ended up high up in the level, move one down to make sure we utilize the full height of the level + else if (pathNodes.GetRange(1, pathNodes.Count - 1).All(p => p.Y > pathBorders.Y + pathBorders.Height * 0.25f)) + { + int nodeIndex = Rand.Range(1, pathNodes.Count, Rand.RandSync.Server); + pathNodes[nodeIndex] = new Point(pathNodes[nodeIndex].X, pathBorders.Y); } + pathNodes.Add(new Point(endPosition.X, borders.Height)); + GenerateTunnels(pathNodes, minWidth); //---------------------------------------------------------------------------------- @@ -539,21 +554,21 @@ namespace Barotrauma { foreach (GraphEdge edge in cell.Edges) { - if (mirroredEdges.Contains(edge)) continue; + if (mirroredEdges.Contains(edge)) { continue; } edge.Point1.X = borders.Width - edge.Point1.X; edge.Point2.X = borders.Width - edge.Point2.X; - if (!mirroredSites.Contains(edge.Site1)) + if (edge.Site1 != null && !mirroredSites.Contains(edge.Site1)) { //make sure that sites right at the edge of a grid cell end up in the same cell as in the non-mirrored level if (edge.Site1.Coord.X % GridCellSize < 1.0f && - edge.Site1.Coord.X % GridCellSize >= 0.0f) edge.Site1.Coord.X += 1.0f; + edge.Site1.Coord.X % GridCellSize >= 0.0f) { edge.Site1.Coord.X += 1.0f; } edge.Site1.Coord.X = borders.Width - edge.Site1.Coord.X; mirroredSites.Add(edge.Site1); } - if (!mirroredSites.Contains(edge.Site2)) + if (edge.Site2 != null && !mirroredSites.Contains(edge.Site2)) { if (edge.Site2.Coord.X % GridCellSize < 1.0f && - edge.Site2.Coord.X % GridCellSize >= 0.0f) edge.Site2.Coord.X += 1.0f; + edge.Site2.Coord.X % GridCellSize >= 0.0f) { edge.Site2.Coord.X += 1.0f; } edge.Site2.Coord.X = borders.Width - edge.Site2.Coord.X; mirroredSites.Add(edge.Site2); } @@ -759,6 +774,8 @@ namespace Barotrauma DebugConsole.NewMessage("Generated level with the seed " + seed + " (type: " + generationParams.Name + ")", Color.White); } + EntityCountAfterGenerate = Entity.GetEntityList().Count(); + //assign an ID to make entity events work ID = FindFreeID(); } @@ -1531,6 +1548,13 @@ namespace Barotrauma return tempCells; } + public string GetWreckIDTag(string originalTag, Submarine wreck) + { + string shortSeed = ToolBox.StringToInt(seed + wreck.Info.Name).ToString(); + if (shortSeed.Length > 6) { shortSeed = shortSeed.Substring(0, 6); } + return originalTag + "_" + shortSeed; + } + // For debugging private readonly Dictionary> wreckPositions = new Dictionary>(); private readonly Dictionary> blockedRects = new Dictionary>(); @@ -1546,6 +1570,7 @@ namespace Barotrauma return; } wreckFiles.Shuffle(Rand.RandSync.Server); + int wreckCount = Math.Min(Loaded.GenerationParams.WreckCount, wreckFiles.Count); // Min distance between a wreck and the start/end/other wreck. float minDistance = Sonar.DefaultSonarRange; @@ -1610,7 +1635,6 @@ namespace Barotrauma Type = SubmarineInfo.SubmarineType.Wreck }; Submarine wreck = new Submarine(info); - //wreck.Load(unloadPrevious: false); wreck.MakeWreck(); tempSW.Stop(); Debug.WriteLine($"Wreck {wreck.Info.Name} loaded in { tempSW.ElapsedMilliseconds.ToString()} (ms)"); @@ -1626,17 +1650,18 @@ namespace Barotrauma hull.WaterVolume = hull.Volume * Rand.Range(Loaded.GenerationParams.WreckFloodingHullMinWaterPercentage, Loaded.GenerationParams.WreckFloodingHullMaxWaterPercentage, Rand.RandSync.Server); } } - if (Rand.Value(Rand.RandSync.Server) <= Loaded.GenerationParams.ThalamusProbability) + // Only spawn thalamus when the wreck has some thalamus items defined. + if (Rand.Value(Rand.RandSync.Server) <= Loaded.GenerationParams.ThalamusProbability && wreck.GetItems(false).Any(i => i.Prefab.Category == MapEntityCategory.Thalamus)) { - if (!wreck.CreateThalamus()) + if (!wreck.CreateWreckAI()) { - DebugConsole.NewMessage($"Failed to create thalamus inside {wreckName}.", Color.Red); - wreck.DisableThalamus(); + DebugConsole.NewMessage($"Failed to create wreck AI inside {wreckName}.", Color.Red); + wreck.DisableWreckAI(); } } else { - wreck.DisableThalamus(); + wreck.DisableWreckAI(); } } else @@ -1959,13 +1984,13 @@ namespace Barotrauma int corpseCount = Rand.Range(Loaded.GenerationParams.MinCorpseCount, Loaded.GenerationParams.MaxCorpseCount); var allSpawnPoints = WayPoint.WayPointList.FindAll(wp => wp.Submarine == wreck && wp.CurrentHull != null); var pathPoints = allSpawnPoints.FindAll(wp => wp.SpawnType == SpawnType.Path); + pathPoints.Shuffle(Rand.RandSync.Unsynced); var corpsePoints = allSpawnPoints.FindAll(wp => wp.SpawnType == SpawnType.Corpse); - var spawnPoints = corpsePoints.Union(pathPoints).ToList(); - spawnPoints.Shuffle(Rand.RandSync.Unsynced); + corpsePoints.Shuffle(Rand.RandSync.Unsynced); int spawnCounter = 0; for (int j = 0; j < corpseCount; j++) { - WayPoint sp = spawnPoints.FirstOrDefault(); + WayPoint sp = corpsePoints.FirstOrDefault() ?? pathPoints.FirstOrDefault(); JobPrefab job = sp?.AssignedJob; CorpsePrefab selectedPrefab; if (job == null) @@ -1979,18 +2004,19 @@ namespace Barotrauma selectedPrefab = GetCorpsePrefab(p => p.SpawnPosition == PositionType.Wreck && (p.Job == "any" || p.Job == job.Identifier)); if (selectedPrefab == null) { - spawnPoints.Remove(sp); - sp = spawnPoints.FirstOrDefault(sp => sp.AssignedJob == null); + corpsePoints.Remove(sp); + pathPoints.Remove(sp); + sp = corpsePoints.FirstOrDefault(sp => sp.AssignedJob == null) ?? pathPoints.FirstOrDefault(sp => sp.AssignedJob == null); // Deduce the job from the selected prefab selectedPrefab = GetCorpsePrefab(p => p.SpawnPosition == PositionType.Wreck); job = GetJobPrefab(); } } if (selectedPrefab == null) { continue; } - Vector2 pos; + Vector2 worldPos; if (sp == null) { - if (!TryGetExtraSpawnPoint(out pos)) + if (!TryGetExtraSpawnPoint(out worldPos)) { break; } @@ -1998,15 +2024,17 @@ namespace Barotrauma } else { - pos = sp.WorldPosition; - spawnPoints.Remove(sp); + worldPos = sp.WorldPosition; + corpsePoints.Remove(sp); + pathPoints.Remove(sp); } if (job == null) { continue; } var characterInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: job); - var corpse = Character.Create(CharacterPrefab.HumanConfigFile, pos, ToolBox.RandomSeed(8), characterInfo, hasAi: true, createNetworkEvent: true); + var corpse = Character.Create(CharacterPrefab.HumanConfigFile, worldPos, ToolBox.RandomSeed(8), characterInfo, hasAi: true, createNetworkEvent: true); + corpse.AnimController.FindHull(worldPos, true); corpse.TeamID = Character.TeamType.None; corpse.EnableDespawn = false; - selectedPrefab.GiveItems(corpse); + selectedPrefab.GiveItems(corpse, wreck); corpse.Kill(CauseOfDeathType.Unknown, causeOfDeathAffliction: null, log: false); spawnCounter++; @@ -2018,9 +2046,9 @@ namespace Barotrauma JobPrefab GetJobPrefab() => selectedPrefab.Job != null && selectedPrefab.Job != "any" ? JobPrefab.Get(selectedPrefab.Job) : JobPrefab.Random(); } - +#if DEBUG DebugConsole.NewMessage($"{spawnCounter}/{corpseCount} corpses spawned in {wreck.Info.Name}.", spawnCounter == corpseCount ? Color.Green : Color.Yellow); - +#endif bool TryGetExtraSpawnPoint(out Vector2 point) { point = Vector2.Zero; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelGenerationParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelGenerationParams.cs index 64fd8ffc9..bf7440d9f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelGenerationParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelGenerationParams.cs @@ -238,7 +238,8 @@ namespace Barotrauma } - [Editable, Serialize("5000, 10000", true, description: "The distance between the nodes that are used to generate the main path through the level (min, max). Larger values produce a straighter path.")] + [Editable(VectorComponentLabels = new string[] { "editable.minvalue", "editable.maxvalue" }), + Serialize("5000, 10000", true, description: "The distance between the nodes that are used to generate the main path through the level (min, max). Larger values produce a straighter path.")] public Point MainPathNodeIntervalRange { get { return mainPathNodeIntervalRange; } @@ -256,7 +257,8 @@ namespace Barotrauma set { smallTunnelCount = MathHelper.Clamp(value, 0, 100); } } - [Editable, Serialize("5000, 10000", true, description: "The minimum and maximum length of small tunnels placed along the main path.")] + [Editable(VectorComponentLabels = new string[] { "editable.minvalue", "editable.maxvalue" }), + Serialize("5000, 10000", true, description: "The minimum and maximum length of small tunnels placed along the main path.")] public Point SmallTunnelLengthRange { get { return smallTunnelLengthRange; } @@ -349,8 +351,7 @@ namespace Barotrauma [Serialize(5, true, description: "The maximum number of corpses per wreck."), Editable(MinValueInt = 0, MaxValueInt = 20)] public int MaxCorpseCount { get; set; } - // TODO: default to 0 - [Serialize(1f, true, description: "How likely is it that a Thalamus inhabits a wreck. Percentage from 0 to 1 per wreck."), Editable(MinValueFloat = 0, MaxValueFloat = 1)] + [Serialize(0.0f, true, description: "How likely is it that a Thalamus inhabits a wreck. Percentage from 0 to 1 per wreck."), Editable(MinValueFloat = 0, MaxValueFloat = 1)] public float ThalamusProbability { get; set; } [Serialize(0.5f, true, description: "How likely the water level of a hull inside a wreck is randomly set."), Editable(MinValueFloat = 0, MaxValueFloat = 1)] diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs index ceebafd2c..951521cbc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs @@ -358,19 +358,23 @@ namespace Barotrauma return; } - //check if there are any other contacts with the entity + //check if there are contacts with any other fixture of the trigger //(the OnSeparation callback happens when two fixtures separate, //e.g. if a body stops touching the circular fixture at the end of a capsule-shaped body) ContactEdge contactEdge = fixtureA.Body.ContactList; while (contactEdge != null) { if (contactEdge.Contact != null && + contactEdge.Contact.Enabled && contactEdge.Contact.IsTouching) { - var otherEntity = GetEntity(contactEdge.Contact.FixtureB == fixtureB ? - contactEdge.Contact.FixtureB : - contactEdge.Contact.FixtureA); - if (otherEntity == entity) return; + if (contactEdge.Contact.FixtureA != fixtureA && contactEdge.Contact.FixtureB != fixtureA) + { + var otherEntity = GetEntity(contactEdge.Contact.FixtureB == fixtureB ? + contactEdge.Contact.FixtureB : + contactEdge.Contact.FixtureA); + if (otherEntity == entity) { return; } + } } contactEdge = contactEdge.Next; } @@ -418,10 +422,20 @@ namespace Barotrauma public void Update(float deltaTime) { - if (ParentTrigger != null && !ParentTrigger.IsTriggered) return; + if (ParentTrigger != null && !ParentTrigger.IsTriggered) { return; } triggerers.RemoveWhere(t => t.Removed); + if (physicsBody != null) + { + //failsafe to ensure triggerers get removed when they're far from the trigger + float maxExtent = Math.Max(ConvertUnits.ToDisplayUnits(physicsBody.GetMaxExtent() * 5), 5000.0f); + triggerers.RemoveWhere(t => + { + return Vector2.Distance(t.WorldPosition, WorldPosition) > maxExtent; + }); + } + bool isNotClient = true; #if CLIENT isNotClient = GameMain.Client == null; @@ -511,6 +525,7 @@ namespace Barotrauma ApplyForce(character.AnimController.Collider, deltaTime); foreach (Limb limb in character.AnimController.Limbs) { + if (limb.IsSevered) { continue; } ApplyForce(limb.body, deltaTime); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs index 4eb5b637f..c5445756e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs @@ -1,8 +1,8 @@ -using Microsoft.Xna.Framework; +using Barotrauma.IO; +using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; -using System.Xml; using System.Xml.Linq; namespace Barotrauma.RuinGeneration @@ -174,7 +174,7 @@ namespace Barotrauma.RuinGeneration public static void SaveAll() { - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, NewLineOnAttributes = true diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs index 2a96202f1..4b6b241da 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs @@ -654,13 +654,14 @@ namespace Barotrauma.RuinGeneration { connectionPanel.Locked = true; connectionPanel.CanBeSelected = false; + connectionPanel.Item.ShouldBeSaved = false; } - - // Hide wires for now + // Hide wires if (ic is Wire wire) { wire.Hidden = true; wire.CanBeSelected = false; + wire.Item.ShouldBeSaved = false; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs index ac570b18d..422f731bb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs @@ -19,18 +19,17 @@ namespace Barotrauma //Prefabs.Remove(this); } - public readonly Submarine mainSub; + public readonly SubmarineInfo subInfo; - public LinkedSubmarinePrefab(Submarine submarine) + public LinkedSubmarinePrefab(SubmarineInfo subInfo) { - this.mainSub = submarine; + this.subInfo = subInfo; } protected override void CreateInstance(Rectangle rect) { System.Diagnostics.Debug.Assert(Submarine.MainSub != null); - - LinkedSubmarine.CreateDummy(Submarine.MainSub, mainSub.Info.FilePath, rect.Location.ToVector2()); + LinkedSubmarine.CreateDummy(Submarine.MainSub, subInfo.FilePath, rect.Location.ToVector2()); } } @@ -113,7 +112,9 @@ namespace Barotrauma (int)sl.wallVertices.Max(v => v.X + position.X), (int)sl.wallVertices.Min(v => v.Y + position.Y)); - sl.Rect = new Rectangle(sl.rect.X, sl.rect.Y, sl.rect.Width - sl.rect.X, sl.rect.Y - sl.rect.Height); + int width = sl.rect.Width - sl.rect.X; + int height = sl.rect.Y - sl.rect.Height; + sl.Rect = new Rectangle((int)(position.X - width / 2), (int)(position.Y + height / 2), width, height); } else { @@ -162,8 +163,7 @@ namespace Barotrauma public static LinkedSubmarine Load(XElement element, Submarine submarine) { Vector2 pos = element.GetAttributeVector2("pos", Vector2.Zero); - LinkedSubmarine linkedSub = null; - + LinkedSubmarine linkedSub; if (Screen.Selected == GameMain.SubEditorScreen) { linkedSub = CreateDummy(submarine, element, pos); @@ -198,21 +198,26 @@ namespace Barotrauma for (int i = 0; i < linkedToIds.Length; i++) { linkedSub.linkedToID.Add((ushort)linkedToIds[i]); - if (Screen.Selected == GameMain.SubEditorScreen) - { - if (FindEntityByID((ushort)linkedToIds[i]) is MapEntity linked) - { - linkedSub.linkedTo.Add(linked); - } - } } linkedSub.originalLinkedToID = (ushort)element.GetAttributeInt("originallinkedto", 0); linkedSub.originalMyPortID = (ushort)element.GetAttributeInt("originalmyport", 0); - return linkedSub.loadSub ? linkedSub : null; } + public void LinkDummyToMainSubmarine() + { + if (Screen.Selected != GameMain.SubEditorScreen) { return; } + for (int i = 0; i < linkedToID.Count; i++) + { + if (FindEntityByID(linkedToID[i]) is MapEntity linked) + { + linkedTo.Add(linked); + } + } + } + + public override void OnMapLoaded() { if (!loadSub) { return; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs index 458abde12..4463d9c06 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Md5Hash.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Md5Hash.cs index 1deaed05e..e5dc0990c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Md5Hash.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Md5Hash.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs index 6ea887a58..0964e41bc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs @@ -56,6 +56,15 @@ namespace Barotrauma Level.Loaded.TopBarrier.Enabled = false; + foreach (Character character in Character.CharacterList) + { + character.AnimController.Frozen = true; + foreach (Limb limb in character.AnimController.Limbs) + { + limb.body.PhysEnabled = false; + } + } + cam.TargetPos = Vector2.Zero; float timer = 0.0f; float initialZoom = cam.Zoom; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Structure.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Structure.cs index aa972af0e..05dd06837 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Structure.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Structure.cs @@ -283,6 +283,13 @@ namespace Barotrauma } } + [Serialize(false, true), Editable] + public bool NoAITarget + { + get; + private set; + } + public Dictionary SerializableProperties { get; @@ -354,6 +361,7 @@ namespace Barotrauma } StairDirection = Prefab.StairDirection; + NoAITarget = Prefab.NoAITarget; SerializableProperties = SerializableProperty.GetProperties(this); InitProjSpecific(); @@ -381,7 +389,7 @@ namespace Barotrauma } // Only add ai targets automatically to submarine/outpost walls - if (aiTarget == null && HasBody && Tags.Contains("wall") && submarine != null && !submarine.Info.IsWreck && !Prefab.NoAITarget) + if (aiTarget == null && HasBody && Tags.Contains("wall") && submarine != null && !submarine.Info.IsWreck && !NoAITarget) { aiTarget = new AITarget(this) { @@ -818,7 +826,10 @@ namespace Barotrauma Vector2 sectionPos = new Vector2( Sections[sectionIndex].rect.X + Sections[sectionIndex].rect.Width / 2.0f, Sections[sectionIndex].rect.Y - Sections[sectionIndex].rect.Height / 2.0f); - if (world && Submarine != null) sectionPos += Submarine.Position; + if (world && Submarine != null) + { + sectionPos += Submarine.Position; + } return sectionPos; } else @@ -839,7 +850,10 @@ namespace Barotrauma (float)Math.Cos(IsHorizontal ? -BodyRotation : MathHelper.PiOver2 - BodyRotation), (float)Math.Sin(IsHorizontal ? -BodyRotation : MathHelper.PiOver2 - BodyRotation)) * diffFromCenter; - if (world && Submarine != null) sectionPos += Submarine.Position; + if (world && Submarine != null) + { + sectionPos += Submarine.Position; + } return sectionPos; } @@ -913,7 +927,7 @@ namespace Barotrauma //the structure doesn't have any other gap, log the structure being fixed if (noGaps && attacker != null) { - GameServer.Log((Sections[sectionIndex].gap.IsRoomToRoom ? "Inner" : "Outer") + " wall repaired by " + attacker.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log((Sections[sectionIndex].gap.IsRoomToRoom ? "Inner" : "Outer") + " wall repaired by " + GameServer.CharacterLogName(attacker), ServerLog.MessageType.ItemInteraction); } #endif DebugConsole.Log("Removing gap (ID " + Sections[sectionIndex].gap.ID + ", section: " + sectionIndex + ") from wall " + ID); @@ -987,11 +1001,11 @@ namespace Barotrauma //the structure didn't have any other gaps yet, log the breach if (noGaps && attacker != null) { - GameServer.Log((Sections[sectionIndex].gap.IsRoomToRoom ? "Inner" : "Outer") + " wall breached by " + attacker.Name, ServerLog.MessageType.ItemInteraction); + GameServer.Log((Sections[sectionIndex].gap.IsRoomToRoom ? "Inner" : "Outer") + " wall breached by " + GameServer.CharacterLogName(attacker), ServerLog.MessageType.ItemInteraction); } #endif } - + float gapOpen = (damage / Prefab.Health - LeakThreshold) * (1.0f / (1.0f - LeakThreshold)); Sections[sectionIndex].gap.Open = gapOpen; } @@ -1255,6 +1269,11 @@ namespace Barotrauma s.UseDropShadow = prefab.Body; } + if (element.Attribute("noaitarget") == null) + { + s.NoAITarget = prefab.NoAITarget; + } + return s; } @@ -1327,6 +1346,7 @@ namespace Barotrauma SerializableProperties = SerializableProperty.DeserializeProperties(this, Prefab.ConfigElement); Sprite.ReloadXML(); SpriteDepth = Sprite.Depth; + NoAITarget = Prefab.NoAITarget; } public override void Update(float deltaTime, Camera cam) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/StructurePrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/StructurePrefab.cs index 51df613ad..7a828eaf5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/StructurePrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/StructurePrefab.cs @@ -4,7 +4,7 @@ using System; using System.Linq; using System.Collections.Generic; using System.Xml.Linq; -using System.IO; +using Barotrauma.IO; #if CLIENT using Microsoft.Xna.Framework.Graphics; #endif diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs index f05ef3413..7f89167bc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs @@ -7,7 +7,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.ComponentModel; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -128,7 +128,7 @@ namespace Barotrauma public PhysicsBody PhysicsBody { - get { return subBody.Body; } + get { return subBody?.Body; } } public Rectangle Borders @@ -178,23 +178,6 @@ namespace Barotrauma } } - private bool? subsLeftBehind; - public bool SubsLeftBehind - { - get - { - if (subsLeftBehind.HasValue) { return subsLeftBehind.Value; } - - CheckSubsLeftBehind(Info.SubmarineElement); - - return subsLeftBehind.Value; - } - //set { subsLeftBehind = value; } - } - public bool LeftBehindSubDockingPortOccupied - { - get; private set; - } public new Vector2 DrawPosition { @@ -222,7 +205,7 @@ namespace Barotrauma public List HullVertices { - get { return subBody.HullVertices; } + get { return subBody?.HullVertices; } } public bool AtDamageDepth @@ -232,7 +215,7 @@ namespace Barotrauma public override string ToString() { - return "Barotrauma.Submarine (" + Info?.Name ?? "[NULL INFO]" + ")"; + return "Barotrauma.Submarine (" + (Info?.Name ?? "[NULL INFO]") + ", " + IdOffset + ")"; } public override bool Removed @@ -249,87 +232,69 @@ namespace Barotrauma ShowSonarMarker = false; PhysicsBody.FarseerBody.BodyType = BodyType.Static; TeamID = Character.TeamType.None; + + string defaultTag = Level.Loaded.GetWreckIDTag("wreck_id", this); + ReplaceIDCardTagRequirements("wreck_id", defaultTag); + + foreach (Item item in Item.ItemList) + { + if (item.Submarine != this) { continue; } + if (item.prefab.Identifier == "idcardwreck" || item.prefab.Identifier == "idcard") + { + foreach (string tag in item.GetTags().ToList()) + { + if (tag == "smallitem") { continue; } + string newTag = Level.Loaded.GetWreckIDTag(tag, this); + item.ReplaceTag(tag, newTag); + ReplaceIDCardTagRequirements(tag, newTag); + } + } + } + + void ReplaceIDCardTagRequirements(string oldTag, string newTag) + { + foreach (Item item in Item.ItemList) + { + if (item.Submarine != this) { continue; } + foreach (ItemComponent ic in item.Components) + { + ReplaceIDCardTagRequirement(ic, RelatedItem.RelationType.Picked, oldTag, newTag); + ReplaceIDCardTagRequirement(ic, RelatedItem.RelationType.Equipped, oldTag, newTag); + } + } + } + + static void ReplaceIDCardTagRequirement(ItemComponent ic, RelatedItem.RelationType relationType, string oldTag, string newTag) + { + if (!ic.requiredItems.ContainsKey(relationType)) { return; } + foreach (RelatedItem requiredItem in ic.requiredItems[relationType]) + { + int index = Array.IndexOf(requiredItem.Identifiers, oldTag); + if (index == -1) { continue; } + requiredItem.Identifiers[index] = newTag; + } + } } - public WreckAI ThalamusAI { get; private set; } - public bool CreateThalamus() + public WreckAI WreckAI { get; private set; } + public bool CreateWreckAI() { MakeWreck(); - var thalamusPrefabs = ItemPrefab.Prefabs.Where(p => p.Category == MapEntityCategory.Thalamus || p.Tags.Contains("thalamus")); - var brainPrefab = thalamusPrefabs.GetRandom(i => i.Tags.Contains("thalamusbrain"), Rand.RandSync.Server); - if (brainPrefab == null) { return false; } - var allItems = GetItems(false); - var thalamusItems = allItems.FindAll(i => i.Prefab.Category == MapEntityCategory.Thalamus || i.HasTag("thalamus")); - var hulls = GetHulls(false); - Item brain = new Item(brainPrefab, Vector2.Zero, this); - Vector2 negativeMargin = new Vector2(40, 20); - Vector2 minSize = brain.Rect.Size.ToVector2() - negativeMargin; - Vector2 maxSize = new Vector2(brain.Rect.Width * 3, brain.Rect.Height * 3); - // First try to get a room that is not too big and not in the edges of the sub. - // Also try not to create the brain in a room that already have carrier items inside. - // Ignore hulls that have any linked hulls to keep the calculations simple. - // Shrink the horizontal axis so that the brain is not placed in the left or right side, where we often have curved walls. - // Also ignore hulls that have open gaps, because we'll want the room to be full of water. The room will be filled with water when the brain is inserted in the room. - Rectangle shrinkedBounds = ToolBox.GetWorldBounds(WorldPosition.ToPoint(), new Point(Borders.Width - 500, Borders.Height)); - bool BaseCondition(Hull h) => h.RectWidth > minSize.X && h.RectHeight > minSize.Y && h.GetLinkedEntities().None() && h.ConnectedGaps.None(g => g.Open > 0); - bool IsNotTooBig(Hull h) => h.RectWidth < maxSize.X && h.RectHeight < maxSize.Y; - bool IsNotInFringes(Hull h) => shrinkedBounds.ContainsWorld(h.WorldRect); - bool DoesNotContainOtherItems(Hull h) => thalamusItems.None(i => i.CurrentHull == h); - Hull brainHull = hulls.GetRandom(h => BaseCondition(h) && IsNotTooBig(h) && IsNotInFringes(h) && DoesNotContainOtherItems(h), Rand.RandSync.Server); - if (brainHull == null) - { - brainHull = hulls.GetRandom(h => BaseCondition(h) && IsNotInFringes(h) && DoesNotContainOtherItems(h), Rand.RandSync.Server); - } - if (brainHull == null) - { - brainHull = hulls.GetRandom(h => BaseCondition(h) && (IsNotInFringes(h) || DoesNotContainOtherItems(h)), Rand.RandSync.Server); - } - if (brainHull == null) - { - brainHull = hulls.GetRandom(BaseCondition, Rand.RandSync.Server); - } - var thalamusStructs = StructurePrefab.Prefabs.Where(p => p.Category == MapEntityCategory.Thalamus); - if (brainHull == null) { return false; } - brainHull.WaterVolume = brainHull.Volume; - brain.SetTransform(brainHull.SimPosition, rotation: 0, findNewHull: false); - brain.CurrentHull = brainHull; - var backgroundPrefab = thalamusStructs.GetRandom(i => i.Tags.Contains("brainroombackground"), Rand.RandSync.Server); - if (backgroundPrefab != null) - { - new Structure(brainHull.Rect, backgroundPrefab, this); - } - var horizontalWallPrefab = thalamusStructs.GetRandom(p => p.Tags.Contains("thalamuswall_horizontal_decorative"), Rand.RandSync.Server); - if (horizontalWallPrefab != null) - { - int height = (int)horizontalWallPrefab.Size.Y; - int halfHeight = height / 2; - int quarterHeight = halfHeight / 2; - new Structure(new Rectangle(brainHull.Rect.Left, brainHull.Rect.Top + quarterHeight, brainHull.Rect.Width, height), horizontalWallPrefab, this); - new Structure(new Rectangle(brainHull.Rect.Left, brainHull.Rect.Top - brainHull.Rect.Height + halfHeight + quarterHeight, brainHull.Rect.Width, height), horizontalWallPrefab, this); - } - var verticalWallPrefab = thalamusStructs.GetRandom(p => p.Tags.Contains("thalamuswall_vertical_decorative"), Rand.RandSync.Server); - if (verticalWallPrefab != null) - { - int width = (int)verticalWallPrefab.Size.X; - int halfWidth = width / 2; - int quarterWidth = halfWidth / 2; - new Structure(new Rectangle(brainHull.Rect.Left - quarterWidth, brainHull.Rect.Top, width, brainHull.Rect.Height), verticalWallPrefab, this); - new Structure(new Rectangle(brainHull.Rect.Right - halfWidth - quarterWidth, brainHull.Rect.Top, width, brainHull.Rect.Height), verticalWallPrefab, this); - } - ThalamusAI = new WreckAI(this, brain, allItems); - return true; + WreckAI = new WreckAI(this); + return WreckAI != null; } - public void DisableThalamus() + public void DisableWreckAI() { - var thalamusEntities = GetEntities(false, MapEntity.mapEntityList).FindAll(e => e.prefab.Category == MapEntityCategory.Thalamus || e.prefab.Tags.Contains("thalamus")).ToList(); - - foreach (var entity in thalamusEntities) + if (WreckAI == null) { - entity.Remove(); + WreckAI.RemoveThalamusItems(this); + } + else + { + WreckAI?.Remove(); + WreckAI = null; } - ThalamusAI?.Kill(); - ThalamusAI = null; } /// @@ -775,7 +740,7 @@ namespace Barotrauma public void FlipX(List parents = null) { - if (parents == null) parents = new List(); + if (parents == null) { parents = new List(); } parents.Add(this); flippedX = !flippedX; @@ -783,20 +748,25 @@ namespace Barotrauma Item.UpdateHulls(); List bodyItems = Item.ItemList.FindAll(it => it.Submarine == this && it.body != null); - List subEntities = MapEntity.mapEntityList.FindAll(me => me.Submarine == this); foreach (MapEntity e in subEntities) { if (e is Item) continue; - if (e is LinkedSubmarine) + if (e is LinkedSubmarine linkedSub) { - Submarine sub = ((LinkedSubmarine)e).Sub; - if (!parents.Contains(sub)) + Submarine sub = linkedSub.Sub; + if (sub == null) + { + Vector2 relative1 = linkedSub.Position - SubBody.Position; + relative1.X = -relative1.X; + linkedSub.Rect = new Rectangle((relative1 + SubBody.Position).ToPoint(), linkedSub.Rect.Size); + } + else if (!parents.Contains(sub)) { Vector2 relative1 = sub.SubBody.Position - SubBody.Position; relative1.X = -relative1.X; - sub.SetPosition(relative1 + SubBody.Position); + sub.SetPosition(relative1 + SubBody.Position, new List(parents)); sub.FlipX(parents); } } @@ -814,7 +784,7 @@ namespace Barotrauma Vector2 pos = new Vector2(subBody.Position.X, subBody.Position.Y); subBody.Body.Remove(); subBody = new SubmarineBody(this); - SetPosition(pos); + SetPosition(pos, new List(parents.Where(p => p != this))); if (entityGrid != null) { @@ -853,14 +823,15 @@ namespace Barotrauma { //if (PlayerInput.KeyHit(InputType.Crouch) && (this == MainSub)) FlipX(); - if (Level.Loaded == null || subBody == null) { return; } - - if (Info.Type == SubmarineInfo.SubmarineType.Wreck) + if (Info.IsWreck) { - ThalamusAI?.Update(deltaTime); + WreckAI?.Update(deltaTime); } - if (WorldPosition.Y < Level.MaxEntityDepth && + if (subBody?.Body == null) { return; } + + if (Level.Loaded != null && + WorldPosition.Y < Level.MaxEntityDepth && subBody.Body.Enabled && (GameMain.NetworkMember?.RespawnManager == null || this != GameMain.NetworkMember.RespawnManager.RespawnShuttle)) { @@ -887,17 +858,17 @@ namespace Barotrauma return; } + subBody.Body.LinearVelocity = new Vector2( LockX ? 0.0f : subBody.Body.LinearVelocity.X, LockY ? 0.0f : subBody.Body.LinearVelocity.Y); - subBody.Update(deltaTime); for (int i = 0; i < 2; i++) { - if (MainSubs[i] == null) continue; - if (this != MainSubs[i] && MainSubs[i].DockedTo.Contains(this)) return; + if (MainSubs[i] == null) { continue; } + if (this != MainSubs[i] && MainSubs[i].DockedTo.Contains(this)) { return; } } //send updates more frequently if moving fast @@ -919,9 +890,9 @@ namespace Barotrauma prevPosition = position; } - public void SetPosition(Vector2 position, List checkd=null) + public void SetPosition(Vector2 position, List checkd = null) { - if (!MathUtils.IsValid(position)) return; + if (!MathUtils.IsValid(position)) { return; } if (checkd == null) { checkd = new List(); } if (checkd.Contains(this)) { return; } @@ -933,9 +904,16 @@ namespace Barotrauma foreach (Submarine dockedSub in DockedTo) { + if (dockedSub.PhysicsBody.BodyType == BodyType.Static) + { + if (ConnectedDockingPorts.TryGetValue(dockedSub, out DockingPort port)) + { + port.Undock(); + continue; + } + } Vector2? expectedLocation = CalculateDockOffset(this, dockedSub); if (expectedLocation == null) { continue; } - dockedSub.SetPosition(position + expectedLocation.Value, checkd); dockedSub.UpdateTransform(interpolate: false); } @@ -992,6 +970,11 @@ namespace Barotrauma return list.FindAll(e => IsEntityFoundOnThisSub(e, includingConnectedSubs)); } + public IEnumerable GetEntities(bool includingConnectedSubs, IEnumerable list) where T : MapEntity + { + return list.Where(e => IsEntityFoundOnThisSub(e, includingConnectedSubs)); + } + public bool IsEntityFoundOnThisSub(MapEntity entity, bool includingConnectedSubs) { if (entity == null) { return false; } @@ -999,7 +982,7 @@ namespace Barotrauma if (entity.Submarine == null) { return false; } if (includingConnectedSubs) { - return GetConnectedSubs().Any(s => s == entity.Submarine && entity.Submarine.TeamID == TeamID); + return GetConnectedSubs().Any(s => s == entity.Submarine && entity.Submarine.TeamID == TeamID && entity.Submarine.Info.Type == Info.Type); } return false; } @@ -1182,6 +1165,13 @@ namespace Barotrauma Loading = false; MapEntity.MapLoaded(newEntities, true); + foreach (MapEntity me in MapEntity.mapEntityList) + { + if (me is LinkedSubmarine linkedSub && linkedSub.Submarine == this) + { + linkedSub.LinkDummyToMainSubmarine(); + } + } foreach (Hull hull in matchingHulls) { @@ -1221,28 +1211,6 @@ namespace Barotrauma return sub; } - public void CheckSubsLeftBehind(XElement element = null) - { - if (element == null) { element = Info.SubmarineElement; } - - subsLeftBehind = false; - LeftBehindSubDockingPortOccupied = false; - foreach (XElement subElement in element.Elements()) - { - if (!subElement.Name.ToString().Equals("linkedsubmarine")) { continue; } - if (subElement.Attribute("location") == null) { continue; } - - subsLeftBehind = true; - ushort targetDockingPortID = (ushort)subElement.GetAttributeInt("originallinkedto", 0); - XElement targetPortElement = targetDockingPortID == 0 ? null : - element.Elements().FirstOrDefault(e => e.GetAttributeInt("ID", 0) == targetDockingPortID); - if (targetPortElement != null && targetPortElement.GetAttributeIntArray("linked", new int[0]).Length > 0) - { - LeftBehindSubDockingPortOccupied = true; - } - } - } - public void SaveToXElement(XElement element) { element.Add(new XAttribute("name", Info.Name)); @@ -1264,14 +1232,17 @@ namespace Barotrauma e.Save(element); } - CheckSubsLeftBehind(element); + Info.CheckSubsLeftBehind(element); } - public bool SaveAs(string filePath, MemoryStream previewImage = null) + public bool SaveAs(string filePath, System.IO.MemoryStream previewImage = null) { - var newInfo = new SubmarineInfo(this); - newInfo.FilePath = filePath; - newInfo.Name = Path.GetFileNameWithoutExtension(filePath); + var newInfo = new SubmarineInfo(this) + { + GameVersion = GameMain.Version, + FilePath = filePath, + Name = Path.GetFileNameWithoutExtension(filePath) + }; Info.Dispose(); Info = newInfo; return newInfo.SaveAs(filePath, previewImage); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs index 1cdcdabb4..d36b529aa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs @@ -131,7 +131,7 @@ namespace Barotrauma farseerBody.UserData = this; foreach (Structure wall in Structure.WallList) { - if (wall.Submarine != submarine) continue; + if (wall.Submarine != submarine || wall.IsPlatform) { continue; } Rectangle rect = wall.Rect; @@ -150,7 +150,7 @@ namespace Barotrauma foreach (Hull hull in Hull.hullList) { - if (hull.Submarine != submarine) continue; + if (hull.Submarine != submarine) { continue; } Rectangle rect = hull.Rect; farseerBody.CreateRectangle( @@ -167,7 +167,7 @@ namespace Barotrauma foreach (Item item in Item.ItemList) { - if (item.StaticBodyConfig == null || item.Submarine != submarine) continue; + if (item.StaticBodyConfig == null || item.Submarine != submarine) { continue; } float radius = item.StaticBodyConfig.GetAttributeFloat("radius", 0.0f) * item.Scale; float width = item.StaticBodyConfig.GetAttributeFloat("width", 0.0f) * item.Scale; @@ -180,7 +180,7 @@ namespace Barotrauma if (width > 0.0f && height > 0.0f) { - farseerBody.CreateRectangle(simWidth, simHeight, 5.0f, simPos).UserData = item; + item.StaticFixtures.Add(farseerBody.CreateRectangle(simWidth, simHeight, 5.0f, simPos)); minExtents.X = Math.Min(item.Position.X - width / 2, minExtents.X); minExtents.Y = Math.Min(item.Position.Y - height / 2, minExtents.Y); @@ -189,9 +189,9 @@ namespace Barotrauma } else if (radius > 0.0f && width > 0.0f) { - farseerBody.CreateRectangle(simWidth, simRadius * 2, 5.0f, simPos).UserData = item; - farseerBody.CreateCircle(simRadius, 5.0f, simPos - Vector2.UnitX * simWidth / 2).UserData = item; - farseerBody.CreateCircle(simRadius, 5.0f, simPos + Vector2.UnitX * simWidth / 2).UserData = item; + item.StaticFixtures.Add(farseerBody.CreateRectangle(simWidth, simRadius * 2, 5.0f, simPos)); + item.StaticFixtures.Add(farseerBody.CreateCircle(simRadius, 5.0f, simPos - Vector2.UnitX * simWidth / 2)); + item.StaticFixtures.Add(farseerBody.CreateCircle(simRadius, 5.0f, simPos + Vector2.UnitX * simWidth / 2)); minExtents.X = Math.Min(item.Position.X - width / 2 - radius, minExtents.X); minExtents.Y = Math.Min(item.Position.Y - radius, minExtents.Y); maxExtents.X = Math.Max(item.Position.X + width / 2 + radius, maxExtents.X); @@ -199,9 +199,9 @@ namespace Barotrauma } else if (radius > 0.0f && height > 0.0f) { - farseerBody.CreateRectangle(simRadius * 2, height, 5.0f, simPos).UserData = item; - farseerBody.CreateCircle(simRadius, 5.0f, simPos - Vector2.UnitY * simHeight / 2).UserData = item; - farseerBody.CreateCircle(simRadius, 5.0f, simPos + Vector2.UnitX * simHeight / 2).UserData = item; + item.StaticFixtures.Add(farseerBody.CreateRectangle(simRadius * 2, height, 5.0f, simPos)); + item.StaticFixtures.Add(farseerBody.CreateCircle(simRadius, 5.0f, simPos - Vector2.UnitY * simHeight / 2)); + item.StaticFixtures.Add(farseerBody.CreateCircle(simRadius, 5.0f, simPos + Vector2.UnitX * simHeight / 2)); minExtents.X = Math.Min(item.Position.X - radius, minExtents.X); minExtents.Y = Math.Min(item.Position.Y - height / 2 - radius, minExtents.Y); maxExtents.X = Math.Max(item.Position.X + radius, maxExtents.X); @@ -209,12 +209,13 @@ namespace Barotrauma } else if (radius > 0.0f) { - farseerBody.CreateCircle(simRadius, 5.0f, simPos).UserData = item; + item.StaticFixtures.Add(farseerBody.CreateCircle(simRadius, 5.0f, simPos)); minExtents.X = Math.Min(item.Position.X - radius, minExtents.X); minExtents.Y = Math.Min(item.Position.Y - radius, minExtents.Y); maxExtents.X = Math.Max(item.Position.X + radius, maxExtents.X); maxExtents.Y = Math.Max(item.Position.Y + radius, maxExtents.Y); } + item.StaticFixtures.ForEach(f => f.UserData = item); } Borders = new Rectangle((int)minExtents.X, (int)maxExtents.Y, (int)(maxExtents.X - minExtents.X), (int)(maxExtents.Y - minExtents.Y)); @@ -301,7 +302,7 @@ namespace Barotrauma //------------------------- //if outside left or right edge of the level - if (Position.X < 0 || Position.X > Level.Loaded.Size.X) + if (Level.Loaded != null && (Position.X < 0 || Position.X > Level.Loaded.Size.X)) { Rectangle worldBorders = Borders; worldBorders.Location += MathUtils.ToPoint(Position); @@ -385,12 +386,13 @@ namespace Barotrauma foreach (Character c in Character.CharacterList) { - if (c.AnimController.CurrentHull != null && c.AnimController.CanEnterSubmarine) continue; + if (c.AnimController.CurrentHull != null && c.AnimController.CanEnterSubmarine) { continue; } foreach (Limb limb in c.AnimController.Limbs) { + if (limb.IsSevered) { continue; } //if the character isn't inside the bounding box, continue - if (!Submarine.RectContains(worldBorders, limb.WorldPosition)) continue; + if (!Submarine.RectContains(worldBorders, limb.WorldPosition)) { continue; } //cast a line from the position of the character to the same direction as the translation of the sub //and see where it intersects with the bounding box @@ -454,11 +456,11 @@ namespace Barotrauma depthDamageTimer -= deltaTime; - if (depthDamageTimer > 0.0f) return; + if (depthDamageTimer > 0.0f) { return; } foreach (Structure wall in Structure.WallList) { - if (wall.Submarine != submarine) continue; + if (wall.Submarine != submarine) { continue; } if (wall.Health < depth * 0.01f) { @@ -498,10 +500,14 @@ namespace Barotrauma } return collision; } - if (f2.Body.UserData is Character character) + else if (f2.Body.UserData is Character character) { return CheckCharacterCollision(contact, character); } + else if (f2.UserData is Items.Components.DockingPort) + { + return false; + } lock (impactQueue) { @@ -692,8 +698,8 @@ namespace Barotrauma //find all contacts between this sub and level walls List levelContacts = new List(); - ContactEdge contactEdge = Body.FarseerBody.ContactList; - while (contactEdge.Next != null) + ContactEdge contactEdge = Body?.FarseerBody?.ContactList; + while (contactEdge?.Next != null) { if (contactEdge.Contact.Enabled && contactEdge.Other.UserData is VoronoiCell && @@ -705,7 +711,7 @@ namespace Barotrauma contactEdge = contactEdge.Next; } - if (levelContacts.Count == 0) return; + if (levelContacts.Count == 0) { return; } //if this sub is in contact with the level, apply artifical impacts //to both subs to prevent the other sub from bouncing on top of this one @@ -794,6 +800,7 @@ namespace Barotrauma foreach (Limb limb in c.AnimController.Limbs) { + if (limb.IsSevered) { continue; } limb.body.ApplyLinearImpulse(limb.Mass * impulse, 10.0f); } c.AnimController.Collider.ApplyLinearImpulse(c.AnimController.Collider.Mass * impulse, 10.0f); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs index 5300465af..951c830a5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs @@ -2,7 +2,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.ComponentModel; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -68,6 +68,8 @@ namespace Barotrauma public bool IsOutpost => Type == SubmarineType.Outpost; public bool IsWreck => Type == SubmarineType.Wreck; + public bool IsPlayer => Type == SubmarineType.Player; + public enum SubmarineType { Player, Outpost, Wreck } public SubmarineType Type { get; set; } @@ -99,7 +101,11 @@ namespace Barotrauma set; } - public readonly XElement SubmarineElement; + public XElement SubmarineElement + { + get; + private set; + } public override string ToString() { @@ -126,6 +132,22 @@ namespace Barotrauma } } + private bool? subsLeftBehind; + public bool SubsLeftBehind + { + get + { + if (subsLeftBehind.HasValue) { return subsLeftBehind.Value; } + CheckSubsLeftBehind(SubmarineElement); + return subsLeftBehind.Value; + } + } + + public bool LeftBehindSubDockingPortOccupied + { + get; private set; + } + //constructors & generation ---------------------------------------------------- public SubmarineInfo() { @@ -135,7 +157,7 @@ namespace Barotrauma RequiredContentPackages = new HashSet(); } - public SubmarineInfo(string filePath, string hash = "", XElement element = null) + public SubmarineInfo(string filePath, string hash = "", XElement element = null, bool tryLoad = true) { FilePath = filePath; if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) @@ -160,41 +182,23 @@ namespace Barotrauma RequiredContentPackages = new HashSet(); - if (element == null) + if (element == null && tryLoad) { - XDocument doc = null; - int maxLoadRetries = 4; - for (int i = 0; i <= maxLoadRetries; i++) - { - doc = OpenFile(filePath, out Exception e); - if (e != null && !(e is IOException)) { break; } - if (doc != null || i == maxLoadRetries || !File.Exists(filePath)) { break; } - DebugConsole.NewMessage("Opening submarine file \"" + filePath + "\" failed, retrying in 250 ms..."); - Thread.Sleep(250); - } - if (doc == null || doc.Root == null) - { - IsFileCorrupted = true; - return; - } - - if (string.IsNullOrWhiteSpace(hash)) - { - StartHashDocTask(doc); - } - - SubmarineElement = doc.Root; + Reload(); } else { SubmarineElement = element; } + Name = SubmarineElement.GetAttributeString("name", null) ?? Name; + Init(); } public SubmarineInfo(Submarine sub) : this(sub.Info) { + GameVersion = GameMain.Version; SubmarineElement = new XElement("Submarine"); sub.SaveToXElement(SubmarineElement); Init(); @@ -222,6 +226,30 @@ namespace Barotrauma #endif } + public void Reload() + { + XDocument doc = null; + int maxLoadRetries = 4; + for (int i = 0; i <= maxLoadRetries; i++) + { + doc = OpenFile(FilePath, out Exception e); + if (e != null && !(e is System.IO.IOException)) { break; } + if (doc != null || i == maxLoadRetries || !File.Exists(FilePath)) { break; } + DebugConsole.NewMessage("Opening submarine file \"" + FilePath + "\" failed, retrying in 250 ms..."); + Thread.Sleep(250); + } + if (doc == null || doc.Root == null) + { + IsFileCorrupted = true; + return; + } + if (hash == null) + { + StartHashDocTask(doc); + } + SubmarineElement = doc.Root; + } + private void Init() { DisplayName = TextManager.Get("Submarine.Name." + Name, true); @@ -317,8 +345,31 @@ namespace Barotrauma Tags &= ~tag; } + public void CheckSubsLeftBehind(XElement element = null) + { + if (element == null) { element = SubmarineElement; } + + subsLeftBehind = false; + LeftBehindSubDockingPortOccupied = false; + foreach (XElement subElement in element.Elements()) + { + if (!subElement.Name.ToString().Equals("linkedsubmarine", StringComparison.OrdinalIgnoreCase)) { continue; } + if (subElement.Attribute("location") == null) { continue; } + + subsLeftBehind = true; + ushort targetDockingPortID = (ushort)subElement.GetAttributeInt("originallinkedto", 0); + XElement targetPortElement = targetDockingPortID == 0 ? null : + element.Elements().FirstOrDefault(e => e.GetAttributeInt("ID", 0) == targetDockingPortID); + if (targetPortElement != null && targetPortElement.GetAttributeIntArray("linked", new int[0]).Length > 0) + { + LeftBehindSubDockingPortOccupied = true; + } + } + } + + //saving/loading ---------------------------------------------------- - public bool SaveAs(string filePath, MemoryStream previewImage=null) + public bool SaveAs(string filePath, System.IO.MemoryStream previewImage=null) { var newElement = new XElement(SubmarineElement.Name, SubmarineElement.Attributes().Where(a => !string.Equals(a.Name.LocalName, "previewimage", StringComparison.InvariantCultureIgnoreCase)), @@ -405,7 +456,11 @@ namespace Barotrauma try { filePaths = Directory.GetFiles(SavePath).ToList(); - subDirectories = Directory.GetDirectories(SavePath); + subDirectories = Directory.GetDirectories(SavePath).Where(s => + { + DirectoryInfo dir = new DirectoryInfo(s); + return (dir.Attributes & System.IO.FileAttributes.Hidden) == 0; + }).ToArray(); } catch (Exception e) { @@ -504,12 +559,12 @@ namespace Barotrauma if (extension == ".sub") { - Stream stream = null; + System.IO.Stream stream = null; try { stream = SaveUtil.DecompressFiletoStream(file); } - catch (FileNotFoundException e) + catch (System.IO.FileNotFoundException e) { exception = e; DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (File not found) " + Environment.StackTrace, e); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs index c3fe670a4..7cf5bc934 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs @@ -124,13 +124,15 @@ namespace Barotrauma #if CLIENT if (iconSprites == null) { - iconSprites = new Dictionary() + iconSprites = new Dictionary() { - { SpawnType.Path, new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(0,0,128,128)) }, - { SpawnType.Human, new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(128,0,128,128)) }, - { SpawnType.Enemy, new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(256,0,128,128)) }, - { SpawnType.Cargo, new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(384,0,128,128)) }, - { SpawnType.Corpse, new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(512,0,128,128)) } + { "Path", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(0,0,128,128)) }, + { "Human", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(128,0,128,128)) }, + { "Enemy", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(256,0,128,128)) }, + { "Cargo", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(384,0,128,128)) }, + { "Corpse", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(512,0,128,128)) }, + { "Ladder", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(0,128,128,128)) }, + { "Door", new Sprite("Content/UI/MainIconsAtlas.png", new Rectangle(128,128,128,128)) } }; } #endif diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs index b2bc4db8f..53e2f4bee 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs @@ -11,6 +11,8 @@ namespace Barotrauma.Networking Default, Error, Dead, Server, Radio, Private, Console, MessageBox, Order, ServerLog, ServerMessageBox } + public enum PlayerConnectionChangeType { None = 0, Joined = 1, Kicked = 2, Disconnected = 3, Banned = 4 } + partial class ChatMessage { public const int MaxLength = 150; @@ -58,8 +60,10 @@ namespace Barotrauma.Networking } public ChatMessageType Type; + public PlayerConnectionChangeType ChangeType; public readonly Character Sender; + public readonly Client SenderClient; public readonly string SenderName; @@ -89,19 +93,21 @@ namespace Barotrauma.Networking set; } - protected ChatMessage(string senderName, string text, ChatMessageType type, Character sender) + protected ChatMessage(string senderName, string text, ChatMessageType type, Character sender, Client client, PlayerConnectionChangeType changeType = PlayerConnectionChangeType.None) { Text = text; Type = type; Sender = sender; + SenderClient = client; SenderName = senderName; + ChangeType = changeType; } - public static ChatMessage Create(string senderName, string text, ChatMessageType type, Character sender) + public static ChatMessage Create(string senderName, string text, ChatMessageType type, Character sender, Client client = null, PlayerConnectionChangeType changeType = PlayerConnectionChangeType.None) { - return new ChatMessage(senderName, text, type, sender); + return new ChatMessage(senderName, text, type, sender, client ?? GameMain.NetworkMember?.ConnectedClients?.Find(c => c.Character == sender), changeType); } public static string GetChatMessageCommand(string message, out string messageWithoutCommand) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs index 0ece35d95..7402c316d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.IO.Pipes; using System.Linq; using System.Text; @@ -12,8 +12,8 @@ namespace Barotrauma.Networking { static partial class ChildServerRelay { - private static Stream writeStream; - private static Stream readStream; + private static System.IO.Stream writeStream; + private static System.IO.Stream readStream; private static volatile bool shutDown; public static bool HasShutDown { @@ -233,7 +233,12 @@ namespace Barotrauma.Networking { writeStream?.Write(msg, 0, msg.Length); } - catch (IOException) + catch (ObjectDisposedException) + { + shutDown = true; + break; + } + catch (System.IO.IOException) { shutDown = true; break; @@ -263,7 +268,12 @@ namespace Barotrauma.Networking lengthBytes[1] = (byte)0; writeStream?.Write(lengthBytes, 0, 2); } - catch (IOException) + catch (ObjectDisposedException) + { + shutDown = true; + break; + } + catch (System.IO.IOException) { shutDown = true; break; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Client.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Client.cs index c46241964..16cc90dd4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Client.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Client.cs @@ -14,6 +14,8 @@ namespace Barotrauma.Networking public byte ID; public UInt64 SteamID; + public UInt16 Ping; + public string PreferredJob; public Character.TeamType TeamID; @@ -86,6 +88,14 @@ namespace Barotrauma.Networking } } + public bool Spectating + { + get + { + return inGame && character == null; + } + } + private bool muted; public bool Muted { @@ -105,6 +115,8 @@ namespace Barotrauma.Networking } } + public bool HasPermissions = false; + public VoipQueue VoipQueue { get; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs index f84dc043a..d77dc356a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Xml.Linq; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/EntitySpawner.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/EntitySpawner.cs index 363421c85..a99e369a1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/EntitySpawner.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/EntitySpawner.cs @@ -125,7 +125,7 @@ namespace Barotrauma { public readonly Entity Entity; - public readonly UInt16 OriginalID; + public readonly UInt16 OriginalID, OriginalInventoryID; public readonly bool Remove = false; @@ -133,6 +133,10 @@ namespace Barotrauma { Entity = entity; OriginalID = entity.ID; + if (entity is Item item && item.ParentInventory?.Owner != null) + { + OriginalInventoryID = item.ParentInventory.Owner.ID; + } Remove = remove; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs index bea21a9b3..b8688b981 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs @@ -1,9 +1,8 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; -using System.Xml; using System.Xml.Linq; namespace Barotrauma @@ -53,8 +52,20 @@ namespace Barotrauma [Serialize(0.25f, true)] public float DamageFriendlyKarmaDecrease { get; set; } + [Serialize(0.25f, true)] + public float StunFriendlyKarmaDecrease { get; set; } + + [Serialize(0.3f, true)] + public float StunFriendlyKarmaDecreaseThreshold { get; set; } + [Serialize(1.0f, true)] public float ExtinguishFireKarmaIncrease { get; set; } + + [Serialize(defaultValue: 15.0f, true)] + public float DangerousItemStealKarmaDecrease { get; set; } + + [Serialize(defaultValue: false, true)] + public bool DangerousItemStealBots { get; set; } private int allowedWireDisconnectionsPerMinute; @@ -104,7 +115,7 @@ namespace Barotrauma doc = XMLExtensions.TryLoadXml(ConfigFile); break; } - catch (IOException) + catch (System.IO.IOException) { if (i == maxLoadRetries) { break; } DebugConsole.NewMessage("Opening karma settings file \"" + ConfigFile + "\" failed, retrying in 250 ms..."); @@ -159,7 +170,7 @@ namespace Barotrauma doc.Root.Add(preset.Value); } - XmlWriterSettings settings = new XmlWriterSettings + System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings { Indent = true, NewLineOnAttributes = true @@ -172,11 +183,11 @@ namespace Barotrauma { using (var writer = XmlWriter.Create(ConfigFile, settings)) { - doc.Save(writer); + doc.SaveSafe(writer); } break; } - catch (IOException) + catch (System.IO.IOException) { if (i == maxLoadRetries) { throw; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetConfig.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetConfig.cs index 6fd92e83f..5fca74a45 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetConfig.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetConfig.cs @@ -49,6 +49,26 @@ namespace Barotrauma.Networking public const int MaxEventPacketsPerUpdate = 4; + /// + /// How long the server waits for the clients to get in sync after the round has started before kicking them + /// + public const float RoundStartSyncDuration = 60.0f; + + /// + /// How long the server keeps events that everyone currently synced has received + /// + public const float EventRemovalTime = 15.0f; + + /// + /// If a client hasn't received an event that has been succesfully sent to someone within this time, they get kicked + /// + public const float OldReceivedEventKickTime = 10.0f; + + /// + /// If a client hasn't received an event after this time, they get kicked + /// + public const float OldEventKickTime = 30.0f; + /// /// Interpolates the positional error of a physics body towards zero. /// diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs index 1cac0fe43..f4a9431ea 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs @@ -15,7 +15,8 @@ namespace Barotrauma.Networking ChangeProperty, Control, UpdateSkills, - Combine + Combine, + ExecuteAttack } public readonly Entity Entity; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetworkMember.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetworkMember.cs index 5858d7f55..217df7536 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetworkMember.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetworkMember.cs @@ -19,6 +19,8 @@ namespace Barotrauma.Networking VOICE, + PING_RESPONSE, + RESPONSE_STARTGAME, //tell the server whether you're ready to start SERVER_COMMAND, //tell the server to end a round or kick/ban someone (special permissions required) @@ -60,6 +62,9 @@ namespace Barotrauma.Networking VOICE, + PING_REQUEST, //ping the client + CLIENT_PINGS, //tell the client the pings of all other clients + QUERY_STARTGAME, //ask the clients whether they're ready to start STARTGAME, //start a new round STARTGAMEFINALIZE, //finalize round initialization @@ -212,9 +217,9 @@ namespace Barotrauma.Networking return radioComponent.HasRequiredContainedItems(sender, addMessage: false); } - public void AddChatMessage(string message, ChatMessageType type, string senderName = "", Character senderCharacter = null) + public void AddChatMessage(string message, ChatMessageType type, string senderName = "", Character senderCharacter = null, PlayerConnectionChangeType changeType = PlayerConnectionChangeType.None) { - AddChatMessage(ChatMessage.Create(senderName, message, type, senderCharacter)); + AddChatMessage(ChatMessage.Create(senderName, message, type, senderCharacter, changeType: changeType)); } public virtual void AddChatMessage(ChatMessage message) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/OrderChatMessage.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/OrderChatMessage.cs index 32e4d483b..76243edbc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/OrderChatMessage.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/OrderChatMessage.cs @@ -25,7 +25,7 @@ namespace Barotrauma.Networking } public OrderChatMessage(Order order, string orderOption, string text, Entity targetEntity, Character targetCharacter, Character sender) - : base(sender?.Name, text, ChatMessageType.Order, sender) + : base(sender?.Name, text, ChatMessageType.Order, sender, GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == sender)) { Order = order; OrderOption = orderOption; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs index 8372bc26f..40c7a1104 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs @@ -1,7 +1,7 @@ using Lidgren.Network; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.IO.Compression; using System.Runtime.InteropServices; using System.Text; @@ -519,7 +519,7 @@ namespace Barotrauma.Networking } else { - using (MemoryStream output = new MemoryStream()) + using (System.IO.MemoryStream output = new System.IO.MemoryStream()) { using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Fastest)) { @@ -613,9 +613,9 @@ namespace Barotrauma.Networking if (isCompressed) { byte[] decompressedData; - using (MemoryStream input = new MemoryStream(inBuf, startPos, inLength)) + using (System.IO.MemoryStream input = new System.IO.MemoryStream(inBuf, startPos, inLength)) { - using (MemoryStream output = new MemoryStream()) + using (System.IO.MemoryStream output = new System.IO.MemoryStream()) { using (DeflateStream dstream = new DeflateStream(input, CompressionMode.Decompress)) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs index d656a8baf..a8f02444a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs @@ -1,7 +1,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; namespace Barotrauma.Networking @@ -11,7 +11,9 @@ namespace Barotrauma.Networking private struct LogMessage { public readonly string Text; + public readonly string SanitizedText; public readonly MessageType Type; + public readonly List RichData; public LogMessage(string text, MessageType type) { @@ -23,6 +25,7 @@ namespace Barotrauma.Networking { Text = $"[{DateTime.Now.ToString()}]\n {TextManager.GetServerMessage(text)}"; } + RichData = RichTextData.GetRichTextData(Text, out SanitizedText); Type = type; } @@ -38,6 +41,7 @@ namespace Barotrauma.Networking Wiring, ServerMessage, ConsoleUsage, + Karma, Error, } @@ -51,6 +55,7 @@ namespace Barotrauma.Networking { MessageType.Wiring, new Color(255, 157, 85) }, { MessageType.ServerMessage, new Color(157, 225, 160) }, { MessageType.ConsoleUsage, new Color(0, 162, 232) }, + { MessageType.Karma, new Color(75, 88, 255) }, { MessageType.Error, Color.Red }, }; @@ -64,6 +69,7 @@ namespace Barotrauma.Networking { MessageType.Wiring, "Wiring" }, { MessageType.ServerMessage, "ServerMessage" }, { MessageType.ConsoleUsage, "ConsoleUsage" }, + { MessageType.Karma, "Karma" }, { MessageType.Error, "Error" } }; @@ -101,12 +107,12 @@ namespace Barotrauma.Networking { //string logLine = "[" + DateTime.Now.ToLongTimeString() + "] " + line; + var newText = new LogMessage(line, messageType); + #if SERVER - DebugConsole.NewMessage(line, messageColor[messageType]); //TODO: REMOVE + DebugConsole.NewMessage(newText.SanitizedText, messageColor[messageType]); //TODO: REMOVE #endif - var newText = new LogMessage(line, messageType); - lines.Enqueue(newText); #if CLIENT @@ -134,7 +140,7 @@ namespace Barotrauma.Networking #if CLIENT while (listBox != null && listBox.Content.CountChildren > LinesPerFile) { - listBox.RemoveChild(listBox.Content.Children.First()); + listBox.RemoveChild(reverseOrder ? listBox.Content.Children.First() : listBox.Content.Children.Last()); } #endif } @@ -167,7 +173,7 @@ namespace Barotrauma.Networking try { - File.WriteAllLines(filePath, lines.Select(l => l.Text)); + File.WriteAllLines(filePath, lines.Select(l => l.SanitizedText)); } catch (Exception e) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs index 49d1c1ecf..4062779b5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Net; using System.Security.Cryptography; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/SteamManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/SteamManager.cs index 956f8a3dc..8b45a594c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/SteamManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/SteamManager.cs @@ -1,6 +1,8 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.InteropServices; #if USE_STEAM namespace Barotrauma.Steam @@ -47,7 +49,7 @@ namespace Barotrauma.Steam private static bool isInitialized; public static bool IsInitialized => isInitialized; - + public static void Initialize() { InitializeProjectSpecific(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Voip/VoipQueue.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Voip/VoipQueue.cs index 5eddf719b..7c24c7f02 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Voip/VoipQueue.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Voip/VoipQueue.cs @@ -57,6 +57,12 @@ namespace Barotrauma.Networking protected set; } + public bool ForceLocal + { + get; + set; + } + public DateTime LastReadTime { get; @@ -76,7 +82,7 @@ namespace Barotrauma.Networking QueueID = id; CanSend = canSend; CanReceive = canReceive; - LatestBufferID = BUFFER_COUNT-1; + LatestBufferID = BUFFER_COUNT - 1; firstRead = true; LastReadTime = DateTime.Now; @@ -84,7 +90,7 @@ namespace Barotrauma.Networking public void EnqueueBuffer(int length) { - if (length > byte.MaxValue) return; + if (length > byte.MaxValue) { return; } newestBufferInd = (newestBufferInd + 1) % BUFFER_COUNT; @@ -92,17 +98,18 @@ namespace Barotrauma.Networking bufferLengths[newestBufferInd] = length; BufferToQueue.CopyTo(buffers[newestBufferInd], 0); - - if ((enqueuedTotalLength+length)>0) LatestBufferID++; + + if ((enqueuedTotalLength + length) > 0) { LatestBufferID++; } } - public void RetrieveBuffer(int id,out int outSize,out byte[] outBuf) + public void RetrieveBuffer(int id, out int outSize, out byte[] outBuf) { lock (buffers) { if (id >= LatestBufferID - (BUFFER_COUNT - 1) && id <= LatestBufferID) { - int index = (newestBufferInd - (LatestBufferID - id)); if (index < 0) index += BUFFER_COUNT; + int index = newestBufferInd - (LatestBufferID - id); + if (index < 0) { index += BUFFER_COUNT; } outSize = bufferLengths[index]; outBuf = buffers[index]; return; @@ -114,30 +121,39 @@ namespace Barotrauma.Networking public virtual void Write(IWriteMessage msg) { - if (!CanSend) throw new Exception("Called Write on a VoipQueue not set up for sending"); + if (!CanSend) { throw new Exception("Called Write on a VoipQueue not set up for sending"); } msg.Write((UInt16)LatestBufferID); - for (int i = 0; i < BUFFER_COUNT; i++) + msg.Write(ForceLocal); msg.WritePadBits(); + lock (buffers) { - int index = (newestBufferInd + i + 1) % BUFFER_COUNT; + for (int i = 0; i < BUFFER_COUNT; i++) + { + int index = (newestBufferInd + i + 1) % BUFFER_COUNT; - msg.Write((byte)bufferLengths[index]); - msg.Write(buffers[index], 0, bufferLengths[index]); + msg.Write((byte)bufferLengths[index]); + msg.Write(buffers[index], 0, bufferLengths[index]); + } } } - public virtual bool Read(IReadMessage msg) + public virtual bool Read(IReadMessage msg, bool discardData = false) { - if (!CanReceive) throw new Exception("Called Read on a VoipQueue not set up for receiving"); + if (!CanReceive) { throw new Exception("Called Read on a VoipQueue not set up for receiving"); } UInt16 incLatestBufferID = msg.ReadUInt16(); - if (firstRead || NetIdUtils.IdMoreRecent(incLatestBufferID,LatestBufferID)) + if ((firstRead || NetIdUtils.IdMoreRecent(incLatestBufferID, LatestBufferID)) && !discardData) { + ForceLocal = msg.ReadBoolean(); msg.ReadPadBits(); + firstRead = false; - for (int i = 0; i < BUFFER_COUNT; i++) + lock (buffers) { - bufferLengths[i] = msg.ReadByte(); - buffers[i] = msg.ReadBytes(bufferLengths[i]); + for (int i = 0; i < BUFFER_COUNT; i++) + { + bufferLengths[i] = msg.ReadByte(); + buffers[i] = msg.ReadBytes(bufferLengths[i]); + } } newestBufferInd = BUFFER_COUNT - 1; LatestBufferID = incLatestBufferID; @@ -146,6 +162,7 @@ namespace Barotrauma.Networking } else { + msg.ReadBoolean(); msg.ReadPadBits(); for (int i = 0; i < BUFFER_COUNT; i++) { byte len = msg.ReadByte(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/WhiteList.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/WhiteList.cs index d4a02a715..cb197f3b9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/WhiteList.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/WhiteList.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; namespace Barotrauma.Networking diff --git a/Barotrauma/BarotraumaShared/SharedSource/Physics/Physics.cs b/Barotrauma/BarotraumaShared/SharedSource/Physics/Physics.cs index b19aa5e29..2c32ebdff 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Physics/Physics.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Physics/Physics.cs @@ -16,7 +16,7 @@ namespace Barotrauma public const Category CollisionLevel = Category.Cat8; public const Category CollisionRepair = Category.Cat9; - public static float DisplayToRealWorldRatio = 1.0f / 80.0f; + public static float DisplayToRealWorldRatio = 1.0f / 100.0f; public const float DisplayToSimRation = 100.0f; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs index 974d8e9a1..bed982de1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs @@ -88,6 +88,8 @@ namespace Barotrauma Circle, Rectangle, Capsule, HorizontalCapsule }; + public const float DefaultAngularDamping = 5.0f; + private static readonly List list = new List(); public static List List { @@ -342,7 +344,7 @@ namespace Barotrauma FarseerBody.BodyType = BodyType.Dynamic; FarseerBody.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel; FarseerBody.CollisionCategories = Physics.CollisionCharacter; - FarseerBody.AngularDamping = 5.0f; + FarseerBody.AngularDamping = DefaultAngularDamping; FarseerBody.FixedRotation = true; FarseerBody.Friction = 0.05f; FarseerBody.Restitution = 0.05f; @@ -370,15 +372,15 @@ namespace Barotrauma list.Add(this); } - public PhysicsBody(XElement element, Vector2 position, float scale=1.0f) + public PhysicsBody(XElement element, Vector2 position, float scale = 1.0f) { float radius = ConvertUnits.ToSimUnits(element.GetAttributeFloat("radius", 0.0f)) * scale; float height = ConvertUnits.ToSimUnits(element.GetAttributeFloat("height", 0.0f)) * scale; float width = ConvertUnits.ToSimUnits(element.GetAttributeFloat("width", 0.0f)) * scale; density = element.GetAttributeFloat("density", 10.0f); CreateBody(width, height, radius, density); - //Enum.TryParse(element.GetAttributeString("bodytype", "Dynamic"), out BodyType bodyType); - FarseerBody.BodyType = BodyType.Dynamic; + Enum.TryParse(element.GetAttributeString("bodytype", "Dynamic"), out BodyType bodyType); + FarseerBody.BodyType = bodyType; FarseerBody.CollisionCategories = Physics.CollisionItem; FarseerBody.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel | Physics.CollisionPlatform; FarseerBody.Friction = element.GetAttributeFloat("friction", 0.3f); @@ -428,7 +430,7 @@ namespace Barotrauma /// For rectangles, the front is either at the top or at the right, depending on which one of the two is greater: width or height. /// The rotation is in radians. /// - public Vector2 GetLocalFront(float spritesheetRotation = 0) + public Vector2 GetLocalFront(float? spritesheetRotation = null) { Vector2 pos; switch (bodyShape) @@ -443,12 +445,12 @@ namespace Barotrauma pos = new Vector2(0.0f, radius); break; case Shape.Rectangle: - pos = new Vector2(0.0f, Math.Max(height, width) / 2.0f); + pos = height > width ? new Vector2(0, height / 2) : new Vector2(width / 2, 0); break; default: throw new NotImplementedException(); } - return spritesheetRotation == 0 ? pos : Vector2.Transform(pos, Matrix.CreateRotationZ(-spritesheetRotation)); + return spritesheetRotation.HasValue ? Vector2.Transform(pos, Matrix.CreateRotationZ(-spritesheetRotation.Value)) : pos; } public float GetMaxExtent() diff --git a/Barotrauma/BarotraumaShared/SharedSource/ProcGen/VoronoiElements.cs b/Barotrauma/BarotraumaShared/SharedSource/ProcGen/VoronoiElements.cs index e3714694e..ec801f1f3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ProcGen/VoronoiElements.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ProcGen/VoronoiElements.cs @@ -168,20 +168,13 @@ namespace Voronoi2 } midPoint /= vertices.Length; - - for (int i = 1; i < vertices.Length; i++ ) + for (int i = 0; i < vertices.Length; i++) { - GraphEdge ge = new GraphEdge(vertices[i-1], vertices[i]); - + GraphEdge ge = new GraphEdge(vertices[i], vertices[MathUtils.PositiveModulo(i + 1, vertices.Length)]); System.Diagnostics.Debug.Assert(ge.Point1 != ge.Point2); - Edges.Add(ge); } - GraphEdge lastEdge = new GraphEdge(vertices[0], vertices[vertices.Length-1]); - - Edges.Add(lastEdge); - Site = new Site(); Site.SetPoint(midPoint); } @@ -198,9 +191,8 @@ namespace Voronoi2 { foreach (GraphEdge edge in Edges) { - if (MathUtils.LinesIntersect(point, Center, edge.Point1 + Translation, edge.Point2 + Translation)) return false; + if (MathUtils.LinesIntersect(point, Center, edge.Point1 + Translation, edge.Point2 + Translation)) { return false; } } - return true; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Screens/GameScreen.cs b/Barotrauma/BarotraumaShared/SharedSource/Screens/GameScreen.cs index 1be30c7bb..9be5973f4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Screens/GameScreen.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Screens/GameScreen.cs @@ -135,12 +135,6 @@ namespace Barotrauma sw.Stop(); GameMain.PerformanceCounter.AddElapsedTicks("ParticleUpdate", sw.ElapsedTicks); sw.Restart(); - - GameMain.LightManager.Update((float)deltaTime); - - sw.Stop(); - GameMain.PerformanceCounter.AddElapsedTicks("LightUpdate", sw.ElapsedTicks); - sw.Restart(); if (Level.Loaded != null) Level.Loaded.Update((float)deltaTime, cam); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Serialization/SerializableProperty.cs b/Barotrauma/BarotraumaShared/SharedSource/Serialization/SerializableProperty.cs index 37b24658a..38d644e26 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Serialization/SerializableProperty.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Serialization/SerializableProperty.cs @@ -20,6 +20,11 @@ namespace Barotrauma public float MinValueFloat = float.MinValue, MaxValueFloat = float.MaxValue; public float ValueStep; + /// + /// Labels of the components of a vector property (defaults to x,y,z,w) + /// + public string[] VectorComponentLabels; + /// /// Currently implemented only for int fields. TODO: implement the remaining types (SerializableEntityEditor) /// @@ -57,6 +62,11 @@ namespace Barotrauma public bool isSaveable; public string translationTextTag; + /// + /// If set to true, the instance values saved in a submarine file will always override the prefab values, even if using a mod that normally overrides instance values. + /// + public bool AlwaysUseInstanceValues; + public string Description; /// @@ -65,13 +75,15 @@ namespace Barotrauma /// The property is set to this value during deserialization if the value is not defined in XML. /// Is the value saved to XML when serializing. /// If set to anything else than null, SerializableEntityEditors will show what the text gets translated to or warn if the text is not found in the language files. + /// If set to true, the instance values saved in a submarine file will always override the prefab values, even if using a mod that normally overrides instance values. /// Setting the value to a non-empty string will let the user select the text from one whose tag starts with the given string (e.g. RoomName. would show all texts with a RoomName.* tag) - public Serialize(object defaultValue, bool isSaveable, string description = "", string translationTextTag = null) + public Serialize(object defaultValue, bool isSaveable, string description = "", string translationTextTag = null, bool alwaysUseInstanceValues = false) { this.defaultValue = defaultValue; this.isSaveable = isSaveable; this.translationTextTag = translationTextTag; - this.Description = description; + Description = description; + AlwaysUseInstanceValues = alwaysUseInstanceValues; } } @@ -98,6 +110,8 @@ namespace Barotrauma public readonly AttributeCollection Attributes; public readonly Type PropertyType; + public readonly bool OverridePrefabValues; + public PropertyInfo PropertyInfo { get; private set; } public SerializableProperty(PropertyDescriptor property) @@ -107,6 +121,7 @@ namespace Barotrauma PropertyInfo = property.ComponentType.GetProperty(property.Name); PropertyType = property.PropertyType; Attributes = property.Attributes; + OverridePrefabValues = GetAttribute()?.AlwaysUseInstanceValues ?? false; } public T GetAttribute() where T : Attribute @@ -116,7 +131,7 @@ namespace Barotrauma if (a is T) return (T)a; } - return default(T); + return default; } public void SetValue(object parentObject, object val) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs b/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs index 3c3f636d2..4ed031b1f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs @@ -1,5 +1,5 @@ using System; -using System.IO; +using Barotrauma.IO; using System.Collections.Generic; using System.Globalization; using System.Linq; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Sprite/ConditionalSprite.cs b/Barotrauma/BarotraumaShared/SharedSource/Sprite/ConditionalSprite.cs index dbaceaa53..4b93e0dc1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Sprite/ConditionalSprite.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Sprite/ConditionalSprite.cs @@ -1,21 +1,38 @@ using System.Collections.Generic; using System.Xml.Linq; using System.Linq; +using System; namespace Barotrauma { partial class ConditionalSprite { public readonly List conditionals = new List(); - public bool IsActive => Target != null && conditionals.All(c => c.Matches(Target)); + public bool IsActive + { + get + { + if (Target == null) { return false; } + return Comparison == PropertyConditional.Comparison.And ? conditionals.All(c => c.Matches(Target)) : conditionals.Any(c => c.Matches(Target)); + } + } + + public readonly PropertyConditional.Comparison Comparison; + public readonly bool Exclusive; public ISerializableEntity Target { get; private set; } public Sprite Sprite { get; private set; } public DeformableSprite DeformableSprite { get; private set; } public Sprite ActiveSprite => Sprite ?? DeformableSprite.Sprite; - public ConditionalSprite(XElement element, ISerializableEntity target, string path = "", string file = "", bool lazyLoad = false) + public ConditionalSprite(XElement element, ISerializableEntity target, string file = "", bool lazyLoad = false) { Target = target; + Exclusive = element.GetAttributeBool("exclusive", Exclusive); + string comparison = element.GetAttributeString("comparison", null); + if (comparison != null) + { + Enum.TryParse(comparison, ignoreCase: true, out Comparison); + } foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) @@ -30,10 +47,10 @@ namespace Barotrauma } break; case "sprite": - Sprite = new Sprite(subElement, path, file, lazyLoad: lazyLoad); + Sprite = new Sprite(subElement, file: file, lazyLoad: lazyLoad); break; case "deformablesprite": - DeformableSprite = new DeformableSprite(subElement, filePath: path, lazyLoad: lazyLoad); + DeformableSprite = new DeformableSprite(subElement, filePath: file, lazyLoad: lazyLoad); break; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Sprite/DeformableSprite.cs b/Barotrauma/BarotraumaShared/SharedSource/Sprite/DeformableSprite.cs index 81ed6f9e8..7fcc37437 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Sprite/DeformableSprite.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Sprite/DeformableSprite.cs @@ -18,12 +18,12 @@ namespace Barotrauma public Sprite Sprite { get; private set; } - public DeformableSprite(XElement element, int? subdivisionsX = null, int? subdivisionsY = null, string filePath = "", bool lazyLoad = false) + public DeformableSprite(XElement element, int? subdivisionsX = null, int? subdivisionsY = null, string filePath = "", bool lazyLoad = false, bool invert = false) { Sprite = new Sprite(element, file: filePath, lazyLoad: lazyLoad); - InitProjSpecific(element, subdivisionsX, subdivisionsY, lazyLoad); + InitProjSpecific(element, subdivisionsX, subdivisionsY, lazyLoad, invert); } - partial void InitProjSpecific(XElement element, int? subdivisionsX, int? subdivisionsY, bool lazyLoad = false); + partial void InitProjSpecific(XElement element, int? subdivisionsX, int? subdivisionsY, bool lazyLoad, bool invert); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Sprite/Sprite.cs b/Barotrauma/BarotraumaShared/SharedSource/Sprite/Sprite.cs index e494349c4..fa7e514ca 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Sprite/Sprite.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Sprite/Sprite.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Xml.Linq; using System.Linq; using Barotrauma.Extensions; -using System.IO; +using Barotrauma.IO; using System; using SpriteParams = Barotrauma.RagdollParams.SpriteParams; #if CLIENT @@ -47,7 +47,11 @@ namespace Barotrauma //the offset used when drawing the sprite protected Vector2 offset; - private bool lazyLoad; + public bool LazyLoad + { + get; + private set; + } protected Vector2 origin; @@ -108,6 +112,8 @@ namespace Barotrauma public string FullPath { get; private set; } + public bool Compress { get; private set; } + public override string ToString() { return FilePath + ": " + sourceRect; @@ -135,7 +141,7 @@ namespace Barotrauma public Sprite(XElement element, string path = "", string file = "", bool lazyLoad = false) { if (element == null) { return; } - this.lazyLoad = lazyLoad; + this.LazyLoad = lazyLoad; SourceElement = element; if (!ParseTexturePath(path, file)) { return; } Name = SourceElement.GetAttributeString("name", null); @@ -145,6 +151,7 @@ namespace Barotrauma { sourceVector = overrideElement.GetAttributeVector4("sourcerect", Vector4.Zero); } + Compress = SourceElement.GetAttributeBool("compress", true); bool shouldReturn = false; if (!lazyLoad) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs index 7eb494f1f..d491eea29 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs @@ -242,7 +242,7 @@ namespace Barotrauma case ConditionType.SpeciesName: if (target == null) { return Operator == OperatorType.NotEquals; } if (!(target is Character targetCharacter)) { return false; } - return (Operator == OperatorType.Equals) == (targetCharacter.SpeciesName == valStr); + return (Operator == OperatorType.Equals) == targetCharacter.SpeciesName.Equals(valStr, StringComparison.OrdinalIgnoreCase); case ConditionType.EntityType: switch (valStr) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs index 82b3b0c3d..da6a3d0e8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs @@ -104,7 +104,7 @@ namespace Barotrauma } } - class CharacterSpawnInfo : ISerializableEntity + public class CharacterSpawnInfo : ISerializableEntity { public string Name => $"Character Spawn Info ({SpeciesName})"; public Dictionary SerializableProperties { get; set; } @@ -188,6 +188,11 @@ namespace Barotrauma private set; } + public IEnumerable SpawnCharacters + { + get { return spawnCharacters; } + } + private readonly List> reduceAffliction; //only applicable if targeting NearbyCharacters or NearbyItems @@ -197,6 +202,8 @@ namespace Barotrauma private set; } + public Vector2 Offset { get; private set; } + public string Tags { get { return string.Join(",", tags); } @@ -234,6 +241,7 @@ namespace Barotrauma tags = new HashSet(element.GetAttributeString("tags", "").Split(',')); Range = element.GetAttributeFloat("range", 0.0f); + Offset = element.GetAttributeVector2("offset", Vector2.Zero); string[] targetLimbNames = element.GetAttributeStringArray("targetlimb", null) ?? element.GetAttributeStringArray("targetlimbs", null); if (targetLimbNames != null) { @@ -514,34 +522,56 @@ namespace Barotrauma switch (conditionalComparison) { case PropertyConditional.Comparison.Or: - foreach (ISerializableEntity target in targets) + foreach (PropertyConditional pc in propertyConditionals) { - foreach (PropertyConditional pc in propertyConditionals) + if (pc.TargetContainer && !targetingContainer) { - if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) + var target = targets.FirstOrDefault(t => t is Item || t is ItemComponent); + var targetItem = target as Item ?? (target as ItemComponent)?.Item; + if (targetItem?.ParentInventory == null) { continue; } + if (targetItem.ParentInventory.Owner is Item container && HasRequiredConditions(container.AllPropertyObjects, targetingContainer: true)) { return true; } + if (targetItem.ParentInventory.Owner is Character character && HasRequiredConditions(character.ToEnumerable(), targetingContainer: true)) { return true; } + } + else + { + foreach (ISerializableEntity target in targets) { - if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) + if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) { - continue; + if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) + { + continue; + } } + if (pc.Matches(target)) { return true; } } - if (pc.Matches(target)) { return true; } } } return false; case PropertyConditional.Comparison.And: - foreach (ISerializableEntity target in targets) + foreach (PropertyConditional pc in propertyConditionals) { - foreach (PropertyConditional pc in propertyConditionals) + if (pc.TargetContainer && !targetingContainer) { - if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) + var target = targets.FirstOrDefault(t => t is Item || t is ItemComponent); + var targetItem = target as Item ?? (target as ItemComponent)?.Item; + if (targetItem?.ParentInventory == null) { return false; } + if (targetItem.ParentInventory.Owner is Item container && !HasRequiredConditions(container.AllPropertyObjects, targetingContainer: true)) { return false; } + if (targetItem.ParentInventory.Owner is Character character && !HasRequiredConditions(character.ToEnumerable(), targetingContainer: true)) { return false; } + } + else + { + foreach (ISerializableEntity target in targets) { - if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) + if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) { - continue; + if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) + { + continue; + } } + if (!pc.Matches(target)) { return false; } } - if (!pc.Matches(target)) { return false; } } } return true; @@ -599,8 +629,11 @@ namespace Barotrauma { //ignore if not stackable and there's already an identical statuseffect DurationListElement existingEffect = DurationList.Find(d => d.Parent == this && d.Targets.FirstOrDefault() == target); - existingEffect?.Reset(Math.Max(existingEffect.Timer, duration), user); - return; + if (existingEffect != null) + { + existingEffect.Reset(Math.Max(existingEffect.Timer, duration), user); + return; + } } if (!HasRequiredConditions(target.ToEnumerable())) { return; } @@ -659,8 +692,8 @@ namespace Barotrauma hull = ((Item)entity).CurrentHull; } - Vector2 position = worldPosition ?? entity.WorldPosition; - if (targetLimbs?.FirstOrDefault(l => l != LimbType.None) is LimbType l) + Vector2 position = worldPosition ?? (entity.Removed ? Vector2.Zero : entity.WorldPosition); + if (worldPosition == null && targetLimbs?.FirstOrDefault(l => l != LimbType.None) is LimbType l) { if (entity is Character c) { @@ -671,6 +704,7 @@ namespace Barotrauma } } } + position += Offset; foreach (ISerializableEntity serializableEntity in targets) { @@ -716,13 +750,20 @@ namespace Barotrauma { if (target is Entity targetEntity) { - if (targetEntity.Removed) continue; + if (targetEntity.Removed) { continue; } + } + + if (target is Limb limb) + { + position = limb.WorldPosition + Offset; } for (int i = 0; i < propertyNames.Length; i++) { - if (target == null || target.SerializableProperties == null || - !target.SerializableProperties.TryGetValue(propertyNames[i], out SerializableProperty property)) continue; + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(propertyNames[i], out SerializableProperty property)) + { + continue; + } ApplyToProperty(target, property, propertyEffects[i], deltaTime); } } @@ -738,7 +779,10 @@ namespace Barotrauma foreach (Affliction affliction in Afflictions) { Affliction multipliedAffliction = affliction; - if (!disableDeltaTime) multipliedAffliction = affliction.CreateMultiplied(deltaTime); + if (!disableDeltaTime) + { + multipliedAffliction = affliction.CreateMultiplied(deltaTime); + } if (target is Character character) { @@ -746,18 +790,21 @@ namespace Barotrauma character.LastDamageSource = entity; foreach (Limb limb in character.AnimController.Limbs) { + if (limb.Removed) { continue; } + if (limb.IsSevered) { continue; } if (targetLimbs != null && !targetLimbs.Contains(limb.type)) { continue; } - limb.character.DamageLimb(position, limb, multipliedAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attackImpulse: 0.0f, attacker: affliction.Source); - limb.character.TrySeverLimbJoints(limb, SeverLimbsProbability); + AttackResult result = limb.character.DamageLimb(position, limb, multipliedAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attackImpulse: 0.0f, attacker: affliction.Source); + limb.character.TrySeverLimbJoints(limb, SeverLimbsProbability, result.Damage); //only apply non-limb-specific afflictions to the first limb if (!affliction.Prefab.LimbSpecific) { break; } } } else if (target is Limb limb) { + if (limb.IsSevered) { continue; } if (limb.character.Removed || limb.Removed) { continue; } - limb.character.DamageLimb(position, limb, multipliedAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attackImpulse: 0.0f, attacker: affliction.Source); - limb.character.TrySeverLimbJoints(limb, SeverLimbsProbability); + AttackResult result = limb.character.DamageLimb(position, limb, multipliedAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attackImpulse: 0.0f, attacker: affliction.Source); + limb.character.TrySeverLimbJoints(limb, SeverLimbsProbability, result.Damage); } } @@ -779,8 +826,15 @@ namespace Barotrauma { float prevVitality = targetCharacter.Vitality; targetCharacter.CharacterHealth.ReduceAffliction(targetLimb, reduceAffliction.First, reduceAmount); + if (user != null && user != targetCharacter) + { + if (!targetCharacter.IsDead) + { + targetCharacter.TryAdjustAttackerSkill(user, targetCharacter.Vitality - prevVitality); + } + }; #if SERVER - GameMain.Server.KarmaManager.OnCharacterHealthChanged(targetCharacter, user, prevVitality - targetCharacter.Vitality); + GameMain.Server.KarmaManager.OnCharacterHealthChanged(targetCharacter, user, prevVitality - targetCharacter.Vitality, 0.0f); #endif } } @@ -872,21 +926,24 @@ namespace Barotrauma private void ApplyToProperty(ISerializableEntity target, SerializableProperty property, object value, float deltaTime) { - if (disableDeltaTime || setValue) deltaTime = 1.0f; - + if (disableDeltaTime || setValue) { deltaTime = 1.0f; } Type type = value.GetType(); - if (type == typeof(float) || - (type == typeof(int) && property.GetValue(target) is float)) + if (type == typeof(float) || (type == typeof(int) && property.GetValue(target) is float)) { float floatValue = Convert.ToSingle(value) * deltaTime; - - if (!setValue) floatValue += (float)property.GetValue(target); + if (!setValue) + { + floatValue += (float)property.GetValue(target); + } property.TrySetValue(target, floatValue); } else if (type == typeof(int) && value is int) { int intValue = (int)((int)value * deltaTime); - if (!setValue) intValue += (int)property.GetValue(target); + if (!setValue) + { + intValue += (int)property.GetValue(target); + } property.TrySetValue(target, intValue); } else if (type == typeof(bool) && value is bool) @@ -975,8 +1032,15 @@ namespace Barotrauma { float prevVitality = targetCharacter.Vitality; targetCharacter.CharacterHealth.ReduceAffliction(targetLimb, reduceAffliction.First, reduceAffliction.Second * deltaTime); + if (element.User != null && element.User != targetCharacter) + { + if (!targetCharacter.IsDead) + { + targetCharacter.TryAdjustAttackerSkill(element.User, targetCharacter.Vitality - prevVitality); + } + }; #if SERVER - GameMain.Server.KarmaManager.OnCharacterHealthChanged(targetCharacter, element.User, prevVitality - targetCharacter.Vitality); + GameMain.Server.KarmaManager.OnCharacterHealthChanged(targetCharacter, element.User, prevVitality - targetCharacter.Vitality, 0.0f); #endif } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/SteamAchievementManager.cs b/Barotrauma/BarotraumaShared/SharedSource/SteamAchievementManager.cs index 66b7a1473..0fc57d9d5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/SteamAchievementManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/SteamAchievementManager.cs @@ -67,16 +67,19 @@ namespace Barotrauma foreach (Character c in Character.CharacterList) { - if (c.IsDead) continue; + if (c.IsDead) { continue; } //achievement for descending below crush depth and coming back - if (c.WorldPosition.Y < SubmarineBody.DamageDepth || (c.Submarine != null && c.Submarine.WorldPosition.Y < SubmarineBody.DamageDepth)) + if (Timing.TotalTime > GameMain.GameSession.RoundStartTime + 30.0f) { - roundData.EnteredCrushDepth.Add(c); - } - else if (c.WorldPosition.Y > SubmarineBody.DamageDepth * 0.5f) - { - //all characters that have entered crush depth and are still alive get an achievement - if (roundData.EnteredCrushDepth.Contains(c)) UnlockAchievement(c, "survivecrushdepth"); + if (c.WorldPosition.Y < SubmarineBody.DamageDepth || (c.Submarine != null && c.Submarine.WorldPosition.Y < SubmarineBody.DamageDepth)) + { + roundData.EnteredCrushDepth.Add(c); + } + else if (c.WorldPosition.Y > SubmarineBody.DamageDepth * 0.5f) + { + //all characters that have entered crush depth and are still alive get an achievement + if (roundData.EnteredCrushDepth.Contains(c)) UnlockAchievement(c, "survivecrushdepth"); + } } } @@ -106,7 +109,7 @@ namespace Barotrauma //achievement for descending ridiculously deep float realWorldDepth = Math.Abs(sub.Position.Y - Level.Loaded.Size.Y) * Physics.DisplayToRealWorldRatio; - if (realWorldDepth > 5000.0f) + if (realWorldDepth > 5000.0f && Timing.TotalTime > GameMain.GameSession.RoundStartTime + 30.0f) { //all conscious characters inside the sub get an achievement UnlockAchievement("subdeep", true, c => c != null && c.Submarine == sub && !c.IsDead && !c.IsUnconscious); @@ -122,7 +125,10 @@ namespace Barotrauma if (GameMain.GameSession != null) { #if CLIENT - if (Character.Controlled != null) { CheckMidRoundAchievements(Character.Controlled); } + if (Character.Controlled != null && !(GameMain.GameSession.GameMode is SubTestMode)) + { + CheckMidRoundAchievements(Character.Controlled); + } #else foreach (Client client in GameMain.Server.ConnectedClients) { @@ -288,7 +294,7 @@ namespace Barotrauma public static void OnRoundEnded(GameSession gameSession) { //made it to the destination - if (gameSession.Submarine.AtEndPosition && Level.Loaded != null) + if (gameSession?.Submarine != null && Level.Loaded != null && gameSession.Submarine.AtEndPosition) { float levelLengthMeters = Physics.DisplayToRealWorldRatio * Level.Loaded.Size.X; float levelLengthKilometers = levelLengthMeters / 1000.0f; @@ -368,10 +374,16 @@ namespace Barotrauma if (charactersInSub.Count == 1) { //there must be some non-enemy casualties to get the last mant standing achievement - if (roundData.Casualties.Any(c => !(c.AIController is EnemyAIController))) + if (roundData.Casualties.Any(c => !(c.AIController is EnemyAIController) && c.TeamID == charactersInSub[0].TeamID)) { UnlockAchievement(charactersInSub[0], "lastmanstanding"); } +#if CLIENT + else if (GameMain.GameSession.CrewManager.GetCharacters().Count() == 1) + { + UnlockAchievement(charactersInSub[0], "lonesailor"); + } +#else //lone sailor achievement if alone in the sub and there are no other characters with the same team ID else if (!Character.CharacterList.Any(c => c != charactersInSub[0] && @@ -380,6 +392,8 @@ namespace Barotrauma { UnlockAchievement(charactersInSub[0], "lonesailor"); } +#endif + } foreach (Character character in charactersInSub) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/TextManager.cs b/Barotrauma/BarotraumaShared/SharedSource/TextManager.cs index 8f57a7858..d201dc125 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/TextManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/TextManager.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -304,6 +304,7 @@ namespace Barotrauma { for (int i = 0; i < variableTags.Length; i++) { + if (string.IsNullOrEmpty(variableValues[i])) { continue; } if (formatCapitals[i]) { variableValues[i] = HandleVariableCapitalization(text, variableTags[i], variableValues[i]); @@ -313,6 +314,13 @@ namespace Barotrauma for (int i = 0; i < variableTags.Length; i++) { + if (variableValues[i] == null) + { +#if DEBUG + DebugConsole.ThrowError("Error in TextManager.GetWithVariables (variable " + i + " was null).\n" + Environment.StackTrace); +#endif + continue; + } text = text.Replace(variableTags[i], variableValues[i]); } @@ -643,6 +651,37 @@ namespace Barotrauma } } + /// + /// Fetches a single variable from a servermessage + /// + public static string GetServerMessageVariable(string message, string variable) + { + int variableIndex = message.IndexOf(variable); + if (variableIndex == -1) + { +#if DEBUG + DebugConsole.ThrowError($"Server message variable: '{variable}' not found in message: '{message}'"); +#endif + return string.Empty; + } + + int startIndex = message.IndexOf('=', variableIndex) + 1; + int endIndex = startIndex; + + for (int i = startIndex; i < message.Length; i++) + { + if (message[i] == '/' || message[i] == '~') + { + endIndex = i; + break; + } + } + + if (endIndex == startIndex) endIndex = message.Length; + + return message.Substring(startIndex, endIndex - startIndex); + } + public static bool IsServerMessageWithVariables(string message) { for (int i = 0; i < serverMessageCharacters.Length; i++) diff --git a/Barotrauma/BarotraumaShared/SharedSource/TextPack.cs b/Barotrauma/BarotraumaShared/SharedSource/TextPack.cs index 26ad16718..06526e2ab 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/TextPack.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/TextPack.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Xml.Linq; +using Barotrauma.IO; namespace Barotrauma { @@ -34,7 +35,7 @@ namespace Barotrauma { //try fixing legacy EnglishVanilla path string newPath = "Content/Texts/English/EnglishVanilla.xml"; - if (System.IO.File.Exists(newPath)) + if (Barotrauma.IO.File.Exists(newPath)) { DebugConsole.NewMessage("Content package is using the obsolete text file path \"" + filePath + "\". Attempting to load from \"" + newPath + "\"..."); this.FilePath = filePath = newPath; @@ -172,9 +173,7 @@ namespace Barotrauma } } - System.IO.StreamWriter file = new System.IO.StreamWriter(@"duplicate_" + Language.ToLower() + "_" + index + ".txt"); - file.WriteLine(sb.ToString()); - file.Close(); + File.WriteAllText(@"duplicate_" + Language.ToLower() + "_" + index + ".txt", sb.ToString()); } public void WriteToCSV(int index) @@ -199,9 +198,7 @@ namespace Barotrauma } } - System.IO.StreamWriter file = new System.IO.StreamWriter(@"csv_" + Language.ToLower() + "_" + index + ".csv"); - file.WriteLine(sb.ToString()); - file.Close(); + File.WriteAllText(@"csv_" + Language.ToLower() + "_" + index + ".csv", sb.ToString()); } #endif } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/RichTextData.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/RichTextData.cs new file mode 100644 index 000000000..eb4fac829 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/RichTextData.cs @@ -0,0 +1,85 @@ +using Microsoft.Xna.Framework; +using System.Collections.Generic; + +namespace Barotrauma +{ + public class RichTextData + { + public int StartIndex, EndIndex; + public Color? Color; + public string Metadata; + + private const char definitionIndicator = '‖'; + private const char attributeSeparator = ';'; + private const char keyValueSeparator = ':'; + //private const char lineChangeIndicator = '\n'; + + private const string colorDefinition = "color"; + private const string metadataDefinition = "metadata"; + private const string endDefinition = "end"; + + public static List GetRichTextData(string text, out string sanitizedText) + { + List textColors = null; + sanitizedText = text; + if (!string.IsNullOrEmpty(text) && text.Contains(definitionIndicator)) + { + string[] segments = text.Split(definitionIndicator); + + sanitizedText = string.Empty; + + textColors = new List(); + RichTextData tempData = null; + + int prevIndex = 0; + int currIndex = 0; + for (int i=0;i GetInvalidFileNameChars() + { + return System.IO.Path.GetInvalidFileNameChars(); + } + + } + + public static class Directory + { + public static string GetCurrentDirectory() + { + return System.IO.Directory.GetCurrentDirectory(); + } + + public static void SetCurrentDirectory(string path) + { + System.IO.Directory.SetCurrentDirectory(path); + } + + public static IEnumerable GetFiles(string path) + { + return System.IO.Directory.GetFiles(path); + } + + public static IEnumerable GetFiles(string path, string pattern, System.IO.SearchOption option = System.IO.SearchOption.AllDirectories) + { + return System.IO.Directory.GetFiles(path, pattern, option); + } + + public static IEnumerable GetDirectories(string path) + { + return System.IO.Directory.GetDirectories(path); + } + + public static IEnumerable GetFileSystemEntries(string path) + { + return System.IO.Directory.GetFileSystemEntries(path); + } + + public static IEnumerable EnumerateDirectories(string path, string pattern) + { + return System.IO.Directory.EnumerateDirectories(path, pattern); + } + + public static IEnumerable EnumerateFiles(string path, string pattern) + { + return System.IO.Directory.EnumerateFiles(path, pattern); + } + + public static bool Exists(string path) + { + return System.IO.Directory.Exists(path); + } + + public static System.IO.DirectoryInfo CreateDirectory(string path) + { + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot create directory \"{path}\": failed validation"); + return null; + } + return System.IO.Directory.CreateDirectory(path); + } + + public static void Delete(string path, bool recursive=true) + { + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot delete directory \"{path}\": failed validation"); + return; + } + //TODO: validate recursion? + System.IO.Directory.Delete(path, recursive); + } + } + + public static class File + { + public static bool Exists(string path) + { + return System.IO.File.Exists(path); + } + + public static void Copy(string src, string dest, bool overwrite=false) + { + if (!Validation.CanWrite(dest)) + { + DebugConsole.ThrowError($"Cannot copy \"{src}\" to \"{dest}\": failed validation"); + return; + } + System.IO.File.Copy(src, dest, overwrite); + } + + public static void Move(string src, string dest) + { + if (!Validation.CanWrite(src)) + { + DebugConsole.ThrowError($"Cannot move \"{src}\" to \"{dest}\": src failed validation"); + return; + } + if (!Validation.CanWrite(dest)) + { + DebugConsole.ThrowError($"Cannot move \"{src}\" to \"{dest}\": dest failed validation"); + return; + } + System.IO.File.Move(src, dest); + } + + public static void Delete(string path) + { + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot delete file \"{path}\": failed validation"); + return; + } + System.IO.File.Delete(path); + } + + public static DateTime GetLastWriteTime(string path) + { + return System.IO.File.GetLastWriteTime(path); + } + + public static FileStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access = System.IO.FileAccess.ReadWrite) + { + switch (mode) + { + case System.IO.FileMode.Create: + case System.IO.FileMode.CreateNew: + case System.IO.FileMode.OpenOrCreate: + case System.IO.FileMode.Append: + case System.IO.FileMode.Truncate: + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot open \"{path}\" in {mode} mode: failed validation"); + return null; + } + break; + } + return new FileStream(path, System.IO.File.Open(path, mode, + !Validation.CanWrite(path, false) ? + System.IO.FileAccess.Read : + access)); + } + + public static FileStream OpenRead(string path) + { + return Open(path, System.IO.FileMode.Open, System.IO.FileAccess.Read); + } + + public static FileStream OpenWrite(string path) + { + return Open(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); + } + + public static FileStream Create(string path) + { + return Open(path, System.IO.FileMode.Create, System.IO.FileAccess.Write); + } + + public static void WriteAllBytes(string path, byte[] contents) + { + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot write all bytes to \"{path}\": failed validation"); + return; + } + System.IO.File.WriteAllBytes(path, contents); + } + + public static void WriteAllText(string path, string contents, System.Text.Encoding? encoding = null) + { + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot write all text to \"{path}\": failed validation"); + return; + } + System.IO.File.WriteAllText(path, contents, encoding ?? System.Text.Encoding.UTF8); + } + + public static void WriteAllLines(string path, IEnumerable contents, System.Text.Encoding? encoding = null) + { + if (!Validation.CanWrite(path)) + { + DebugConsole.ThrowError($"Cannot write all lines to \"{path}\": failed validation"); + return; + } + System.IO.File.WriteAllLines(path, contents, encoding ?? System.Text.Encoding.UTF8); + } + + public static byte[] ReadAllBytes(string path) + { + return System.IO.File.ReadAllBytes(path); + } + + public static string ReadAllText(string path, System.Text.Encoding? encoding = null) + { + return System.IO.File.ReadAllText(path, encoding ?? System.Text.Encoding.UTF8); + } + + public static string[] ReadAllLines(string path, System.Text.Encoding? encoding = null) + { + return System.IO.File.ReadAllLines(path, encoding ?? System.Text.Encoding.UTF8); + } + } + + public class FileStream : System.IO.Stream + { + private System.IO.FileStream innerStream; + private string fileName; + + public FileStream(string fn, System.IO.FileStream stream) + { + innerStream = stream; + fileName = fn; + } + + public override bool CanRead => innerStream.CanRead; + public override bool CanSeek => innerStream.CanSeek; + public override bool CanTimeout => innerStream.CanTimeout; + public override bool CanWrite + { + get + { + if (!Validation.CanWrite(fileName)) { return false; } + return innerStream.CanWrite; + } + } + + public override long Length => innerStream.Length; + + public override long Position + { + get + { + return innerStream.Position; + } + set + { + innerStream.Position = value; + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return innerStream.Read(buffer, offset, count); + } + + public override void Write(byte[] buffer, int offset, int count) + { + if (Validation.CanWrite(fileName)) + { + innerStream.Write(buffer, offset, count); + } + else + { + DebugConsole.ThrowError($"Cannot write to file \"{fileName}\": failed validation"); + } + } + + public override long Seek(long offset, System.IO.SeekOrigin origin) + { + return innerStream.Seek(offset, origin); + } + + public override void SetLength(long value) + { + innerStream.SetLength(value); + } + + public override void Flush() + { + innerStream.Flush(); + } + + protected override void Dispose(bool disposing) + { + innerStream.Dispose(); + } + } + + public class DirectoryInfo + { + private System.IO.DirectoryInfo innerInfo; + + public DirectoryInfo(string path) + { + innerInfo = new System.IO.DirectoryInfo(path); + } + + private DirectoryInfo(System.IO.DirectoryInfo info) + { + innerInfo = info; + } + + public bool Exists => innerInfo.Exists; + public string Name => innerInfo.Name; + public string FullName => innerInfo.FullName; + + public System.IO.FileAttributes Attributes => innerInfo.Attributes; + + public IEnumerable GetDirectories() + { + var dirs = innerInfo.GetDirectories(); + foreach (var dir in dirs) + { + yield return new DirectoryInfo(dir); + } + } + + public IEnumerable GetFiles() + { + var files = innerInfo.GetFiles(); + foreach (var file in files) + { + yield return new FileInfo(file); + } + } + + public void Delete() + { + if (!Validation.CanWrite(innerInfo.FullName)) + { + DebugConsole.ThrowError($"Cannot delete directory \"{Name}\": failed validation"); + return; + } + innerInfo.Delete(); + } + } + + public class FileInfo + { + private System.IO.FileInfo innerInfo; + + public FileInfo(string path) + { + innerInfo = new System.IO.FileInfo(path); + } + + public FileInfo(System.IO.FileInfo info) + { + innerInfo = info; + } + + public bool Exists => innerInfo.Exists; + public string Name => innerInfo.Name; + public string FullName => innerInfo.FullName; + public long Length => innerInfo.Length; + + public bool IsReadOnly + { + get + { + return innerInfo.IsReadOnly; + } + set + { + if (!Validation.CanWrite(innerInfo.FullName)) + { + DebugConsole.ThrowError($"Cannot set read-only to {value} for \"{Name}\": failed validation"); + return; + } + innerInfo.IsReadOnly = value; + } + } + + public void CopyTo(string dest, bool overwriteExisting = false) + { + if (!Validation.CanWrite(dest)) + { + DebugConsole.ThrowError($"Cannot copy \"{Name}\" to \"{dest}\": failed validation"); + return; + } + innerInfo.CopyTo(dest, overwriteExisting); + } + + public void Delete() + { + if (!Validation.CanWrite(innerInfo.FullName)) + { + DebugConsole.ThrowError($"Cannot delete file \"{Name}\": failed validation"); + return; + } + innerInfo.Delete(); + } + } +} diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs index 30ab6888d..5aa2a9611 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.IO.Compression; using System.Linq; using System.Text; @@ -245,7 +245,7 @@ namespace Barotrauma // B. // Read file into byte array buffer. byte[] b; - using (FileStream f = new FileStream(temp, FileMode.Open)) + using (FileStream f = File.Open(temp, System.IO.FileMode.Open)) { b = new byte[f.Length]; f.Read(b, 0, (int)f.Length); @@ -253,7 +253,7 @@ namespace Barotrauma // C. // Use GZipStream to write compressed bytes to target file. - using (FileStream f2 = new FileStream(fileName, FileMode.Create)) + using (FileStream f2 = File.Open(fileName, System.IO.FileMode.Create)) using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false)) { gz.Write(b, 0, b.Length); @@ -276,10 +276,10 @@ namespace Barotrauma public static void CompressDirectory(string sInDir, string sOutFile, ProgressDelegate progress) { - string[] sFiles = Directory.GetFiles(sInDir, "*.*", SearchOption.AllDirectories); + IEnumerable sFiles = Directory.GetFiles(sInDir, "*.*", System.IO.SearchOption.AllDirectories); int iDirLen = sInDir[sInDir.Length - 1] == Path.DirectorySeparatorChar ? sInDir.Length : sInDir.Length + 1; - using (FileStream outFile = new FileStream(sOutFile, FileMode.Create, FileAccess.Write, FileShare.None)) + using (FileStream outFile = File.Open(sOutFile, System.IO.FileMode.Create, System.IO.FileAccess.Write)) using (GZipStream str = new GZipStream(outFile, CompressionMode.Compress)) foreach (string sFilePath in sFiles) { @@ -290,11 +290,11 @@ namespace Barotrauma } - public static Stream DecompressFiletoStream(string fileName) + public static System.IO.Stream DecompressFiletoStream(string fileName) { - using (FileStream originalFileStream = new FileStream(fileName, FileMode.Open)) + using (FileStream originalFileStream = File.Open(fileName, System.IO.FileMode.Open)) { - MemoryStream decompressedFileStream = new MemoryStream(); + System.IO.MemoryStream decompressedFileStream = new System.IO.MemoryStream(); using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress)) { @@ -347,13 +347,13 @@ namespace Barotrauma { try { - using (FileStream outFile = new FileStream(sFilePath, FileMode.Create, FileAccess.Write, FileShare.None)) + using (FileStream outFile = File.Open(sFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write)) { outFile.Write(bytes, 0, iFileLen); } break; } - catch (IOException e) + catch (System.IO.IOException e) { if (i >= maxRetries || !File.Exists(sFilePath)) { throw; } DebugConsole.NewMessage("Failed decompress file \"" + sFilePath + "\" {" + e.Message + "}, retrying in 250 ms...", Color.Red); @@ -371,13 +371,13 @@ namespace Barotrauma { try { - using (FileStream inFile = new FileStream(sCompressedFile, FileMode.Open, FileAccess.Read, FileShare.None)) + using (FileStream inFile = File.Open(sCompressedFile, System.IO.FileMode.Open, System.IO.FileAccess.Read)) using (GZipStream zipStream = new GZipStream(inFile, CompressionMode.Decompress, true)) while (DecompressFile(sDir, zipStream, progress)) { }; break; } - catch (IOException e) + catch (System.IO.IOException e) { if (i >= maxRetries || !File.Exists(sCompressedFile)) { throw; } DebugConsole.NewMessage("Failed decompress file \"" + sCompressedFile + "\" {" + e.Message + "}, retrying in 250 ms...", Color.Red); @@ -393,12 +393,12 @@ namespace Barotrauma if (!dir.Exists) { - throw new DirectoryNotFoundException( + throw new System.IO.DirectoryNotFoundException( "Source directory does not exist or could not be found: " + sourceDirName); } - DirectoryInfo[] dirs = dir.GetDirectories(); + IEnumerable dirs = dir.GetDirectories(); // If the destination directory doesn't exist, create it. if (!Directory.Exists(destDirName)) { @@ -406,11 +406,12 @@ namespace Barotrauma } // Get the files in the directory and copy them to the new location. - FileInfo[] files = dir.GetFiles(); + IEnumerable files = dir.GetFiles(); foreach (FileInfo file in files) { string tempPath = Path.Combine(destDirName, file.Name); - file.CopyTo(tempPath, overwriteExisting); + if (!overwriteExisting && File.Exists(tempPath)) { continue; } + file.CopyTo(tempPath, true); } // If copying subdirectories, copy them and their contents to new location. @@ -472,7 +473,7 @@ namespace Barotrauma di.Delete(); break; } - catch (IOException) + catch (System.IO.IOException) { if (i >= maxRetries) { throw; } Thread.Sleep(250); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs index e8ff1a8e9..21251f8de 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Reflection; using System.Security.Cryptography; @@ -325,15 +325,12 @@ namespace Barotrauma { try { - using (StreamReader file = new StreamReader(filePath)) + lines = File.ReadAllLines(filePath).ToList(); + cachedLines.Add(filePath, lines); + if (lines.Count == 0) { - lines = File.ReadLines(filePath).ToList(); - cachedLines.Add(filePath, lines); - if (lines.Count == 0) - { - DebugConsole.ThrowError("File \"" + filePath + "\" is empty!"); - return ""; - } + DebugConsole.ThrowError("File \"" + filePath + "\" is empty!"); + return ""; } } catch (Exception e) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/UpdaterUtil.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/UpdaterUtil.cs index 721224dbb..dcd806d14 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/UpdaterUtil.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/UpdaterUtil.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using Barotrauma.IO; using System.Linq; using System.Security.Cryptography; using System.Xml.Linq; @@ -15,7 +15,7 @@ namespace Barotrauma { XDocument doc = new XDocument(CreateFileList()); - doc.Save(filePath); + doc.SaveSafe(filePath); } public static XElement CreateFileList() @@ -23,7 +23,7 @@ namespace Barotrauma XElement root = new XElement("filelist"); string currentDir = Directory.GetCurrentDirectory(); - string[] files = Directory.GetFiles(currentDir, "*", SearchOption.AllDirectories); + IEnumerable files = Directory.GetFiles(currentDir, "*", System.IO.SearchOption.AllDirectories); foreach (string file in files) { @@ -122,7 +122,7 @@ namespace Barotrauma /// public static void InstallUpdatedFiles(string updateFileFolder) { - string[] files = Directory.GetFiles(updateFileFolder, "*", SearchOption.AllDirectories); + IEnumerable files = Directory.GetFiles(updateFileFolder, "*", System.IO.SearchOption.AllDirectories); string currentDir = Directory.GetCurrentDirectory(); @@ -166,7 +166,7 @@ namespace Barotrauma { string currentDir = Directory.GetCurrentDirectory(); - string[] files = Directory.GetFiles(currentDir, "*", SearchOption.AllDirectories); + IEnumerable files = Directory.GetFiles(currentDir, "*", System.IO.SearchOption.AllDirectories); foreach (string file in files) { @@ -199,7 +199,7 @@ namespace Barotrauma { string currentDir = Directory.GetCurrentDirectory(); - string[] files = Directory.GetFiles(currentDir, "*", SearchOption.AllDirectories); + IEnumerable files = Directory.GetFiles(currentDir, "*", System.IO.SearchOption.AllDirectories); foreach (string file in files) { diff --git a/Barotrauma/BarotraumaShared/Submarines/Azimuth.sub b/Barotrauma/BarotraumaShared/Submarines/Azimuth.sub index 43935b6657303a7f5292e962805330a70a9771cc..e994927d544cb6593bd6561f98a4c813cb0e1acd 100644 GIT binary patch literal 217413 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 Y^x=<}+oyC1zRUmlUvCNz6n}~g03IE$djJ3c literal 216657 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

j2;p+h+_yzN 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

1h@I|0wC>SB>?h2t-HceCs(2*$XRu_|Z) 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

mB@lXa0m|L2vEHfuD#ykk5rZ`wm;tAO(=x# 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 diff --git a/Barotrauma/BarotraumaShared/Submarines/Berilia.sub b/Barotrauma/BarotraumaShared/Submarines/Berilia.sub index a0e39932e979570ae9b8c20b75a0b39845fa1a4b..f849543c7aaa2e1a0ee4388d4093bc81e32a56a8 100644 GIT binary patch literal 303685 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⁢8bTXZagFLQDP&BZsoG? z;v|l@cj$xHnqQ+d^a`d+{`V-PX7F1Gyb)y%h!CxVJ|NlvoWS2P_$04jM*7GL!ym0h{h@03+N`CvuTONI7|-#%o9tcD6t*(1G!%WsVs9 zK1!9iN!yC^w0F|hgTdSkQrJ9}>a_^p+9`$J7ITEN!PTy@p6qmk$lZE#CPOE#Uu^XS zLiK@fyDQnycjmE!5rX1>kuB9sj&_fRI8xj16l^_Bv(R?M)KzKt@TWCO1x%cq{?<;G z9_jkx-5GJrhuSc45huo0^+ruCxSIw9S#so6RvH>R`q!@{&lu5{jbT=;SSvaza)S&| z*lV)V-Zc7q1*s+v8Ei+qdkU|s<}$Zv&hyH2J2k!E`3BrRN6D|gl2ni$x)6=`rBL&$ z5Dn7+oS&{iF#v2h6@4L(Br&>yRxBJ8+g)$L5x+r+u$pplH{yw)F|F}xd zdhX4)R_n~a-T$a8kNwP*TLp|=@!5tw5ksAq`kT)7N~L^q8_+H%v&mUi|a=XfWnO~JwC=-&ilyjr z3~2;}Q7uIPOv}XlZj7F%afBf!L}N1Q`U^yMTM6Mid}GE_;m$jjmssQ4T4D-?byg870MYFDSW%AHRsHS>3t zhovql+7IgEn&ybA{B8_SS`M6&>=+!>2|T=yg;q5RG^Yg)f41;_6BGEpG6b)h^9K5^ zHbEiJ*Zl?*vNQo;^p9N*rD#9to^NQ$KR(@?Ms><&oP zo_TFR9xFgynuPoqQegQ7F_EP9UcuXdQ+uq4$Xk*G?33C+?i{Y8k*XAf7NL=geo1|P zbAdEB?Axsr($EMqDTGyw++&zv0ueSSEAB39ZQ#RTH67G$>{*Lwyq@ImZ*f%*RJFp0>A_1+(TALFE7g9t(8_!;D?oZ4^?fr}IL zn244b>?fJ?#Z`rm0vGc*CE!Z&?i{mCUntt`D@~+RTOm70ub~fpAE9Hg0E4Xe7f_K3 zz?PJ#kqEL-75?|osjZYU_u*rmz!~oG)A#9)qg8w>m6E{2u<7P>-2xj~9SjD?fg*(V zT{eN?+YRf}BcuhW-j4Kbc4-we@1ieD{d0ct<%)iH59?|Cs;EDKr9Ia$l=B3r>l2)ws8y1iQF7YkeNc5W? z?}@_r95=gt4=C@Oh&6Z$jsUBWss`)(kltMrhMvs(+;4?^OBgV!P0muXQ8GTLl%p-6cpcm0HHS>ea8teFU9PCMlUYVSQ~ECy?(XA z^CKoZ=>iTG48IZU!?3Ms%>1_G*!#)(K#MHq%0x|aP~}XDBF6>ywUu0JnfC#b zyr3ju9n&78jVLpsIc1RM3~$=Xk@>fp?4Bl0qk(28)$SAkgfG09zj@5@Xao9&58N7W zg>`Gz2Z=f4tVlmMN|40hn# zpBTO(XB8BO2fT;4X{jc8f>_5jTEO2IZbX4tN{D~TE4qc}MeB_vT>qbN zO+#1_UvCdQ7Ml~J9Sjx@<(ELCLZ?EiBMt{PV2o)Tk(t0%FBcC>hX>E+Egn5`rv0)E z)7Hu_C$4j8RGT%4)O};PpX}nP%!mf(35GH@^c7op7NKo@mqpK#GTbBcZ=QeOp_1~R z%2My$!;+-woAMSx+}BOh7ueuB$nHGaH#%xGax>bZm+wsm(AgeHOVBP_(=Ui)ZCjA8 zY9=%4ep#Ov3PEtfv=P4|^GPp!ly-<^b5bI?-Bm^3015A*3zQ+(i-cm)&L46)|+R-)IplOQcf`-#5$*RDlmGVq{{+;tBQUFgT@yt?;SC1()@ ziyqq_yPI#y_x?_R4Wfan{b&<3HEkYq?GsA6@8G`=u8sj4YZOA*@(NHGx`!e|R`fiU zA^15>4!}hj&Ols|S8=e&PdyS6dS}CXpKic~Dhzs#hHF`h#W8|hK%})2$T;34Ml^<@ z7@r>a)^YRHsQAXHhX`A(?*b6s(!~F#QT%euQ{mqzqj}{08nSR6K}J&y$8z#&4-j7x zqeb`cP#jEh_^7E7_kj4Kkq(wf=k1Cb4=qGut-4Bymym5kVLj#E#@nwAqkKCXjy%}f z+G3QJ;s=gRv(eI*4b;&HI`2vio|Kq_Zrdp^{SRW(b2qyDHveaCrOx)X+Bjk1xl0`+ zCx#6eh_WPL%hoSKu733eK{}7NW+_j= zl}}?dAuvRx#^08VCR7+IvDH8M0#^N%1{;r61K5~6&*S_1Mm|Bt!ap!jVhBw*K(6ll z2OsMJV!v?uEp@su0*5?Li&0vSL? zqW@s4TxEdr4B;~YJ3-{?+UXbPmV0gFJ(oZ=AnbWBQ3TR!9&!|-%9*c?a1 zWXlzgduLT&oTpZ`T$oL*CGx>Az8vfO9bXeS ze%@O2X5)JV=b7|zXx;C1Lf%SPc%b5Vu8ZDp?o9uj1y?G+ zeOcVQAVcl@^>Lsj^#%|d+x&K=Yg~{bQ8zwKHva1=tu1%j)*&#;h6c%2bVh$TVgdhuBiN+0&FA%w4L>memAHs z;Ro5RnBf`-+Atw`*&krnvcTs_n_AE;*4Jg>ebw?ak6DZb#t(D&0>weP(wPJ4Ws$8i zS^wU`^2AqW0Ds27Dmv;nu1m!ITK;QM+MC!Mox&LSXS5z7i-Iwa$rKP;J~4p;!q{&$ z`%ZOxbTHS~uvR`lu^||w$@V)}*$X^DuznUYk~q2WCQmY0(q^Dovd{g8BR*&Lsaf~F z5Ytt>QxVm*P3W+&hq8k1!7m*;RYqEn_tOO_@Q@KHp~V1p{Wav=54Z01 zdn;O)-Ov@z8ajQ=IeUN=r%h=S`X@e{lPa4NAI8R{B}PBcac4AyJkRuhcR&9=&ecgo zXjtHfJdLaAUem-TD$Eytm-C|jS-@7p(Zls)o#Mj@nE6PTUahPU6aED zJV8ZZaZa4sj4Mlm9(8N{@P=I{PfmxilpOZ8hk$1P6Ea%ygGd2TY&G2xX4kIzqau(E zLrougL@=7tHki)y+S-qn%P<8c$-ckhB-g>NWlp>A((E>9ag`v@BIP4G06N%0*t2~I z`l97fdr~@X6)PM$EVKyPf1M^!xJusm4yba~Bu2ljv8PT&wQ_v}Yxe$m$lCbKSijr7SOPSIO1xvf#QhA!hG*OH_uXv+-pprMs8bKP_adG#d_ptZnuQ` z5--t}U^$}l|L7!HimD#3Z(v7J`K&((BcRchUL4;JGT3{uEN4|%+zI_ENx;}NnJZza zEu%mtDuU)Yrp8#1d9cGEJ!@_IonUq{2l4Qwn<0?jzR(bxB8dpd*~+OpaI%;V&TgDm z^?IiGA8BZu6jmO>$-Wo7eNdO-J;(Fm5`O$hAPe$r-Rgx_WQw%<4#qgh^2<)$p|k?pbWXt7nl3eWIyHSyHIM8r!I>)hV=dhV6pCo>5w8C%RvH*)qUaq-i- zxPhw0Cl>AqVg&7y6u_3=)J zG)C5C(ki0GTmCb)#Yq2#ps5v%1ytqke`OdA>fHW*H`91=q{Zm?6;y(M%sE5yBmFJ> z@Q6wSZNV|VT)l|fnq$H`HWv$+JmlxPBfCL7zZb{L10qM6PZk64Ihfi~wVDLz(IcIg ziEp1Wy)%L;wEj#-Cj08!T+GmXu{c;b1UL*T1JI%5EUwYK^zW(T7zUVXxQJco73%<=|&WDE*|V5xv0%K8MeB?)+Zh*J4k zo%|Vf0(F2d;F~gk1NQw|`73SiCtJJcCO(Jhe~%(tLv{cET>36U#2TEUCstY#t8bs| zg{$A-HCR6jOTIjT>S;b8^|5{smmy@+uq&r1@x%b!G;xceHQ~>1#X|WPcUY+wpjqhO z&v(s$o`_9bXb>^?Ef3hxJlx1gqGCFV)RGwN{DsCBqW`7P_E>U`KlY3)fTMX@r}$!p zIP+T}Kj!3JAVEXJ?0=z0yKe{%O;}?g*CT}iIL7nD z*3j|LbVov0xlJ203QrVY=Vv<#aQJBV80?f@mPM-(`~!v`%45*-mv4mN9lOcB=yV5e z5|QvHQ#h)Be8m29ln#&~Fuur=0~)agDZo{o6kQ2Fm?aRfQH{J~HEF;JakYa``UB!7 z^79scqBT;8ev-(Ml-C$EfDMzzFXd{&ag!j5zOy>$)Tg_;H4jH`J>nSE$?~O5sQonh z4>3u7NBhUFYt{x{dB=wx+6^P8sr~$;9+%``L7-jD0ImGC_0a2Re>mqeh>qaq#-$HkT64X z29fynx9{v#y<3(j-M!CVOFcNZDI7Z*bh7s(^(sJ>k|VKj@~_MnEz61ZZF^6>MtY&n z4-foHEim8&*RrD?7ko=7dt~1oy*k_qS(w0Z(nL1x4UW3`K%LkcjA+aSb3pYt-Rjam zAz{szhJ?Y(cID8!ll7Z+9|cF$4r5?m2g~>Ju%oI&ZL#GgK|UeB2Iy0Z6~hm{m(${y zrKU!2{+ey(zXu$s<#FZZbnRR(K~KS2+yQGu`9YvgrL~>+UOXozjTTJ0Ph@WyExPE! zoEiV{NDO=znhX3B=)J3y{z z-an3u727}{xx2CyC&Gc|4Sj=>3u|+!co>>4qW$LPm-!`DFx0v@D((~^i$0w&#=g4ITG3=!$!nk9OkX^R|kLmErg5fPQGZzT$Zk-GIhji2mN% z^qMf)1y>zZ@}kM0LU{1R0Q$&FVw7Z(P1%tP1p{tNXriAGjlO7&?pI15Jpu*i3VYJq z6)W5LP*ci;d>~CklQVhzh727Ltxwi@wgyK`ml4$yw^kr6(HXVsuU^S@bBB(c)_dDt zDt(QGH1oQg#PF_j*1VxI@wA{lq|W_zUqKH=-LIvmS6}+6KUWGt$OQ4W4ZX}u2d=b~ z3DzirJ~Da@AJuB zQGmQb?~Eb8$qhT+mNMLEb-uq0?|fC|8Dvnys=kvwI^XYwqK&s326V9KH^rX6$;iQc zkJGtxOxq_IewWkhkI@!kmPhY}#>E@Lt-{2JO**zhL7=elNS=2L z4;pe=5(eUjn*d*a{J0ESK78k~xh~t4s^7aXMw*4Zh%oj1jkKF%dw~4tpYdFlcRQ=# z&m_PQjP()5#EcLc991j7j;w`_gaFt}-;Km=(rHHoo4DQI$d`z-uhwo;aVFIMf6pd) za;#`U?lV6UVsF5X%+ZAziT;%PMK#~ji}Y`am6Y16TR}};puFPb#KgX%2E$bxbD?_< z?kIFxQB^|^)D#$uZr1pCdKuK&UGU}AJG=NJxa z|GrF$P6mSlo#}DEj?6x6s)COMr>qqPt)oT4woyS93I#vtsNyKXJ76bP15;ejLl1Z* zUJ!6HW{m8n>jOW>F;Fnj%Gc_se{4NHF$4wE8}yn~Oysn=95oKl#K%8$>|kjb8}K3y zj2Mf$2FN?zX36c;RffyF6!xk2OmcuPT(+xyoChd6O|LSWvLTQPM>Qig7DO2RM0&IamKy#nQo)kECvk7DDdjmFXD0ta*Bvjg}ML%MLmN zhY6U z8u)K_VuH3D=m;q5w+NStVSF*qf71IE48BN2$Pp@=(lv$X3!mOo2YAx;uK+4tEXiRo zEn5l!5_aK?FIrKi;pQRWCf+_boZO4T3V~ibuui&cL%U@lBvJ*{y^~0&m0RS!u zhO(O!P;i1zpL*AqgoZv2l=1J#=J8ci-uUL+>!OQl_gbX7m%2h{A$rzRvku(r!*~B* z?5=>#Rz2r16>3X6nlxim(XH50WH?)uNed~rx{(up|20Cw#)hzZph-gP9{jZgthOh= zm4$_X3RNvZWxZ6w1l!yc)3ktte#cs0VK%Wu0n98?)VYr^cZTIg3?x3GQ`~m9xQr8_ zp9Ydc4DbUKG5Xg~-TIz_0WeTxlUr>+fWTx=3Z>i6(0HGo;C{&Fbm@U}-!mC?L8az) z3HAGD@JN1n&0i0AF6P&H7kB@3`Nh0GErW3?J8WbHeNlHDT;bw&eiLWtWWx5~lL79Z ziY2XD4PF}-x{GD2ffOf(be{yFe{o&UMosUoV~ffav~*g(Z$`=ZP!pQ>X%l6@ML`bKN zKaFLr2`kwS{VYb}G$++yF7I7_F20^7Q;N-Q$EZ+1JD@^P;$4`M$i==cKnulCN`cvG z|D3;FH+_l}nj+sWBNP=j&jcFOeoAvoP0}`raBXTq^+|EPvgk{z4El3hm)@1@!obe( zdjjr!)G_7%e`QX9tQR^!vc2OZr)b}&zez?)><``x$uNU#pFtpBA65rC$rt6nGa1OJ z&iJIr^0w}Z20(qwsAgnm8U5CV8R0egl$$KDu42XpvN>#@E(~EadS-2!)2{b)Tmymj zs!56|tJRgJrz#+Xd^7-}7K^)_Z>ykt;;Ug?>4x_uGsN1Siw3G8=5gSXKY& z{Irvx*YxfZnpgnELlFQw`Vdf0`YD#J0WZtj{x;iZ!=Wf5#DK!#_U3~P1pj4{t6pce zKWMg}br`2woJq)TuE$krNsi) z(z^2|xT>`?Tj_#GL4X~R(jC1Lk)sM*q)ED_60;}wv^Fh!2_si2eyF=@EG{UiuJ2>J z3mZrOoS#Ak`HSVC8p~whbZK!nQo&m_%ijeD{WmX;&Y<^alBA%CF-jn8F6%3qlEbq} z^cVD1zZ)=>@LPXI_1xr_RFv0Ba<9^xh*46Og#v4bK|D79HJ4~6D~_YLWm3c?PG6?{ zHgp9#QLXoDu^H4Y0&Uz^?2P;U(bp>Q69xm%{d#oMsa9lzkLpItcg4;;yzd26C>cI$ z_B(uh^#re-#}e;AZlVqhNu=EIQPiA*!pAI2DPC>NB(z9j7<#X1@#8_1ZBNW1eC9Ln zd3QKpIC(w0KYnV`Sc`xQEt^(0rokrUld1Q@ZcFNxvabZpvudN-$-8?O?xKOcNesZ= zSb95m14Fi=ePd>BHWNsh%$D^ep9 zZ$jEEDMPBW=T4_9uYiR1)`z>p&)HcM3N*Ny!~ z)CLhaS|%4nTpMz>z?}fuDZ{974l%3SP>pm4gTV^Zf!iSUwPCw@ugKpA`hetYx8k@{ zmL21H3U(+LTQ4A;(*1IgZ5e-$g{If{4ZR5R+AC27rDpeQXkzScd0g*<8m(@!SJ-!b73xB)mDr%)`Lu#Ju?>NBNvuBMFPYG5YUvf~@;P(bBq3Vcf!%_>O zNxNl0E1sR8lB*y1C0_GYGQ&@L;g zC6G3qeZi{0S-qCrAF@vjBj+&KRF0$G_6KO*A9+-BGQyN^Z}zt zL0NIlSVg@eW`swef`P|`X~5pFcf-mm!`& z{QsdkDBR<^18db)Gb%*%EQo*j>r=ob*l4jgIIv2f&K=~4`zca*XE#5aVSg>o9s|+4 zZFOrT1*LYE_(f~}&zV8JFW@_{6Av5W#1aNTZ+Ach1NV}}F>qy{izJLxZj!@6^UmjZ zmDB{+#uMN`bbH7!-SETJKHmv6-51QfnDap_r?~&6d3R zJ{x3e7WMh=QR@>m5`#4!s_jzUd`s8MuoSzf5$`++Gl?d51c-OmvN$m+D~V((@R|xn zPwWOLPO6Xosq{`A5 z%b}#pllTa_p{(K45Jv@?+nL>G|+u+7Htt`ILLrGUd3X z?0lM+pO;XlnNU^T!Ic&G7%*4N;4jpUrtm|aVjV#*p(ngCq0;T^tEO1=-IafH?9&{= zQksj_d^d0ZyjbE|f?7S;vU!2Nq;Ea1X>u0Tf0sXTW#7L(-^C$RP>%=SPf2m)w!?y~ z)AaxEgo)jB`AYa}D?6f#bcN%-tfXdH^mMiY^ z#LKKrz;}8Dljpnpsu%Bou7E$lh>txtvq$_A_s+mcW-@Rb*nAFYJXc%c-cX7^luQc% znnIG+>hz5uvVxlmNIUW+6WLw+{ar(liA?-lAz1k!c|UsluHPEK!n~pDD42az_!slw z)xz$+J{0!qv=U>KtId!!--Rb{q_=PZNH)wT*AC}%l+{GIL$jLJ-ViuzOt6B1&gje_Ab}fBEKH`w z4LlU7090Ag*_yIhb82|$^HU1YkGaZ@c>z=Qi@z-dvMOaS6#WHc^SZ_zv~>Q3ki;Ly z(9iZaqf101y=E0)21AygLHMZC}Qbh11h*`DNzCT*895xtEcg+FLo&E^uta7OP84%F613o z*W#x+&=@m7&R=jpPw!h|Qf71IAnZOLpw2ufs#rcIydOa7GmKf9pCw$p>|K~PTfA!q z*3WwKX#l+f*O~I<6^B1BY>rqQELc}^0Kb~iPwIfL`)auXnmiPG9wDzERL{tkEDs-S z4?H>z$NN_*pMt?`-14@{=`;e;rS$(xUz;aDnhT9oz^OqrPy59FXGEN#Ov!?uFiCnx3FXxh)iCTsdV>T6K$?M0(hXZ*K$>0A3#9Rk z3p0;Lt@>CEle?vP)>bg2EvwTmqRCWcYDE zGt>^kMEcl<`IzH8Eo1>MXhOb>39N+;%ms9i!^U*uC1`Si-?5C{?*{kN>-8)tCK&#; zc^?<)z%_FO*D}_bc%S;!;9S7}KyDKr=aDe2xkDqYdVwuz)(i<+TfmOdDOmp~yJfOi zLRh$a;}EFAF&C0BXnsT@0}1pC!5)GYgZ$Wx3^fB`z|>&TsNya8QC;g>FX9CLnpoC? zM*8;1Z5K+;4I>aogfxHaB*j_yH}i~$Kh_>J3&Kqlt9Uon!)d?cMP=2#d6meZ2il zYy!ZTYJ;5PF-W6nIcAz-BtxeMF_!HAQw_Oa#RQm-IfRt3Nl`}s`=E4~zh2jGYR8LU zQVd5d-0$)bBz<01z`<{C6R6J z_0745>U;yc+|JsG`3zKe@x$(WLdL$TOujihGWf5$_+M-A^cVj-K4$fPJIV~b6PrHC z&(5ehk(;X+KLn|V-$R+_%oO!{0yF>48}(Ue@S`xSaWaw^yh3>}JmgC}EO(-U$~_q8 zX$WM@FRmw&&h0NIxhrM}wOeBm;pHhC_L+VM06B1<@6f~y$?GVZnFIEw6zkvx9(l33q+m^q!ZQOmol_w zwH6(i8uo;3>yasnwd(6hUVOO?4Yfu@QtxvC<3z6qrYFZ$o22(~hDRAa@9?Im_pw;1<&y9%$z&Ri-+VK|uC1;CkzxQ^( zuyn9r8&y_=D#zMP+LHL%#!@hEw8^CJ`wkJzOhIkFd#;)NJpH*{ZKIZ-BPyZ(6`df} z_SbgQ0URdg+PF})zi3q@WYunV#|1PER7}3cliGCVavv1zhqlo}LVjVxMlXQ+3|w$J zx!9<>c-I<$pxCUbqj}mtvam-!7usKcZ@3CfLS#7NEFr{DFbXyl7oi~z@b~X|2Knwp ztsohruP43o!8|G9Gc){-2-Lm7rj{8lNCz1$Z&Z-rEJ-$BDP`3U_5UrnOHWtTg8Vqu zm3ip|O^gp%DnH{F&~Dio^o>4HrX zvB2Y3Urre|@k=2U6D)?BX8-vdpjiNNzRxT$;LLk{V_*t{2a0HNSj1Y`jEe+|W^V@q= zU`jOCE=a34zDZ%Y1tKwV>q6%*QQ9^Nj!c_icb&&6xp^AAIQ^_LW;kx>u${3)Qt=D3 z=J)6Z@D@_b93RUSZt9{<*CpHVx#`)8D`f|u2OLM$yp|oCli(tZv0DlUoscbovu&dp z-eb%L_`=l7uXk{^)pAno6Cs>=_cM)&eWYkSnFt(z+hV3RwgQMo8}wgQ?}|q!*(Gfs zGzK!@TmUtPx}m~jGEl?j?4!(u#6ECfQWTGk1S_ZF`vIfO&qAQDEe_tg zzW&@W&6JKIXi#9rZwZV5?NK)KPVrwG)Y#Z8N!&W8BT3;_gs1h{Y?f9AWz^&5W);~~ zfz8hL3fp6Va}2@(dRpC+O)ny)admv@FYP&kG;B{>vK5$mVWyQ-<}3%6h9W2#)-!{! zQ|oOUZKO02lx(~_2Vj$!g4KgL1k8q_{F^xnrl7Ca9w|}kiD8}!+@b=%%F61+g62G> z`aB3~!~(c+5yRK5@vhpE3^i{QXgbb^{@QO2=JU9$Aclj}1YqRn>FyV!Q~fWSJ!>X= z%d1+TrnbLaWp1VchaR+xDc$Ow!#Tn?x6}gW2$Qvh)^-Ctrpe9%U4v>~`dt(uh)}R3 z0xL5A|BMStI+}J%WB1NRBjX4FN;+zAhGZwhXbjw_1Un9GwUx4!D2gMB>p6==5-QpQ zx*gA(08OIA?>A{R$_dhBr;`4xhr~Imzt8HRpS(7aZcOZgA3czw%@Q`@2kNeVlgq)SOAB93AaK8X z87S7;=nUGg&2o0uj#tYXB&KOgIB{PnqS5z!3PLiw(v%8(;HH_ZU1GaV`hZZa8|F*|S; zrtMz(DAs=*K~D}G-30qG*k1%jn-ekl`8XlXmlFviN>DM@Naz_RC^uRlI($|Jxtsdq zCigcfZjqG&lI}DA0$ZT3<+Lr4&H)!MT+^uq)kD*2O|AL@H(k?PtNzeDn75$|-G(;Q z2lBnl8B@y(WgBnBxS2f9ZuxRC?Kk3Uv0gsv*oJm|Fa9VC{d=d5&~w*%ief*HLj@UsX#U&HwiZro7+Kj`oN|V*ZUgB-OuFGVO1E17_L9Uk-$iO0@F!D z!CT;^5EVf*VSgqKKFGWYTOLw_Zw|lj510$Oc*`B#I=Y5C5P zF3!#ij&)2(%|~ZpUA+b8gNsyy%zFk%gj`=JN_|lSc$C05_7S0pbGZ9G?*Nh|i6Gw; zlsZ!q2sBQsjuSGSqN27?;2JRP=#;&AIA}19vTpOWpFmzWXp^ESOrGCjr3VN<2cU1y zhE>X6=QosIdpLiD)k2ZZJz;K6icP|5S5k@rGboZO>etyS{~=oiJ0-4ub$UotVWb~Omr9BKG*TeKgRkbMNZR?dU$Cpj%0|EPxW|674z3y!k?C}UBWXs6>vOJp9j7r^_63) z42&RS*-TmQ5(QyRJmnFhWcMsaQ|~RhU@onU_9M8J-SQ<*{r_(H5BTF8BDe2tjPTe` znNQI{dQ#^91Wi6Lun+>Mt?z2{N(nt^T^zo+D+qxa>-S-Ug#h{}9(gdGbDcwLM-3I@ z0k(Y*Kc5{p9r38nLOyjF>E~1>R}Rp{ZT$iA5QcpAqbC0UfkUGBe(^B^_Nk1qt$7)2 z;J$Npb!N;tiw*?>*6@zO#wUIIPY+k!L>k=}%nhL}mOzuq9BnXth9wr75$VDh z`4QX-HzuKAzCW+`Hvy+s@LL=vmPE#!hl`KiHOa))y9(68-)(zlFvgkBT{+;h1+ny7 z&jZ?{F3>6H`t>ajR>m26D1DBrA^Od3u~RvP5Ms&id+MZU@|zh;Ed>olb1Wk-jDgO` zfS`pC4Bt99H%6t=uQ<>Q>f@KP!dy|W;?^$(0kNi$wldk_@EqL(@^Yun&aoS8xL*5s zDxF1L+>0Jl1nHiZ;e+wmkByR8`Z`>7Yk$TSbvFc<7Zoi^`tF-MNQ|)4i*wWJz!wE4 zeAGJv%oxH|Su99QzZ9dHd~F=F6N^CRb|Yf3N?`a2H|PK_K+wNEs>qLfPEzuXlkG)8 ziEuOm#DTM-XmM)=cC-yK6nE;I%y%GbPYMkeCNN#>Y*gHOJdb}0H08}wcj`}lx!|d| zQ9^zT&55_ni8wJMbbp$Sk74+|?~!YNrC@Y0^V3kpFI;_LE_GVN5rUESm03VYVW$C2yENBg%)9BMtdlmkV}U1~uHxyOv}9?$&L5f^X^k=iYWIL{ z6rwFH9Co&Rc&uxqXq^;EIj#{=Z<-e0zG4@0(q zF`!0l@d0R>*}wVcyF$|XPGnPx7PAG;ax?=al$9fSgKqc)Ns3gSub+Ud5@^V?&xC zVDdDjfCCyCsA8t9w_g0B#$a2#R~QJc41#%wIuJRghhTCB3aKBtN~DP{pD~rm8v5xA zb!q;ayc(+Lj<-fBjV<&fCe@Eqnh}JjA0_S6@~v{02N~0KK=E*KXDuK2fW+C|J_veT zVZ1biRwc}&TYCs8ln!AEC+CfE{i-X)>-1mA}5E)BrOJ`mmr4oE(&TMYqYiz>q zw7|2Im)WC)$;}7u$$h}MiRd$SjVbdyKj2eP@+ut-AdODg%F_a0mC)^*;Is*otsf)| zFk^8z^EQ_ZUkZ4%L}jEs^E)?d+VDoRF@l&Ha|PyKWYwcvR`>P&vEN_}*;1DbXH(({ z`4m@qMwo@86|ea{`A6Yd-M~R=084^(UX%{OVBVTl5sa(`OkY*5R!Aga;FL<6kFMA+ z{G&VHwoW=y1}}#^1Pf_QT~>KV43cV19ZS3gvor0(NN|pmza$%0pRKAUKr2DHOu5g4 zATm=Ylpy8(`Ds!L`)1B#5-JUpQ?n2Voe1cUc_!obT18E~hQ+bpLcIeGPv_(BjI-%; z$YSL6WdCa#*Y?rHZi}kzf2Uj~6n&`ix2GuQ$r0*PQ+IwLaPqlm<-70vtc54?W9al5 zn2e;T?<%5F@&L0+XE}SRkzSDm+TfOEZA4`NibLwU$#UNytSz*dV=FFC#Do~Yf7!xm z!eIH^gQBXCvQ-V16=cBpjKM&8f?f_NM}8~DGN?cfui2~ArNP}&1+TJx5a`&x$66)M z8{TD_)b0}2A;_^)l)BZuC}5EkbI_!h5RRrFXh?@{O=J*YFF zq3k$EVDJo?839lAlS7CPQ=Zeg7^+S&Ryw#i*4e2~&l^))*$qp3huHLVt500VC06Gj zP);^ZRwl^A-h1U@!0pr-C(rEuGdOtk!#mIYEZ-=*?Q1;A4v-l>%UFW#F_gpQC#Yaq zLw`n6o5e1B-bFU97jq;D!EFOGB$uVp^>tL6r0Kgj^HssN zRtiqf?2b7V5U6`8o?##l7`9wC2|p*=h+ zIA`f?kxGRxSX=lxFO32|7u=U0_6Mpipmck%l~HC?W5G*si>(mv?0_ZUwY{%JkY!WT zJb#~QMOHG!_)b;uL8y!35`%S|*sm&Qo@>zOc)$iz4!pzRmq7yl%-=8^)>NGm(0j{9x3FQ%Z6;0|$(LF>A`b1b<1_-Wn2{kBb&IqP132OCAt#?_7Wd)YPsHHh8976^e!v?Mdi;e4i)E zga4(Tb?rt}aMPZ1t%-kx{2R}g_*ovo{iUhS8}HFe>^$u^b@h_lkd$@;w+>tEqbRJt zt`8&f1x-PEcP{WGX!YGw(hJ-&Jtz-LUzTq9w)W3eG}DUB;rei__Bn>q)tjR$n^hSq zH|LY@0NEeEFJ`#*${0!3z2H7QFLm#V=5(73((5eu>a|-6wUxj__a}p@WsxCdVV&+` z1BuBP`8H-RfPv8LC1t27e8D?IOYj9!%vWhd29$yn*)S+__{!`D^0<_hd$@ETRRvMG zy@MQ1pMe}WIyW;8j&jeuvqB`C4eC28K$FJ4toGEJSAGCx+o082ljBM+#=4xVJ&6kU zb8SOCq%_?^F&#na#^s<8GhQ@czctpZLtTzdg*&n2nvlK{+M58!IgmN$|BoM=A31@l zi%_WZsD9HgIAko3$rQ_$mr%7(4hB7pOOIF{kFuK;2wwZ_=$>D>10BFd{md4^`$Iw# z2%VR5=KN5GPckanV|ZIZzaY~J=ZB>VE{`?o*i7TNwGvC2CweqZ_xi@>njw?J&d?jL z&FR4t3VRdWNVJ9Q&HM&%Ul%0stf8(;a!^80EIW*fe`WlI!3v5pETg`hCNq6c5__Ba zN4G^yB2@OJ*|L++$_#@tBQH`ujb+`_06V6?jVcWrzlm48lrIDcv?@v>Qn`;%aBFWUX#=?m zWNjI!Gm6jE8yK3t+8Z#uRqe|J50Q%Sxe35K>8jc@ZFmBftbSNrgFSJtcsHc-t}BzN zpSfi3;808jx3A2d+M4~Wp`}kVVO-X^-R&SX&}H{27c`*be=4YUD30eTP+)TZU1`NX z_d{g9$$pk&_vl|kS|(QdxFHVMt=t=ykmCMAE;fx!uZI9Nzb)S=ylYb0Qf-C=3Q%%f z)?7id!VbRBcR|y}a}ukE#ESqz?IQt>_YjIhLm&Gj?#vFrn_P80^$yR~RSBh`X##Fu zl|rrd3uY_^CRr!mRc`&rjP!e6kpp^7WlZ(ZDZkXP(eMc>Y!0IqYIFDTyHmwZj#Y4Y z018$#R5?KmOwmelT4K&l0HqE){+6)s06FmWnnb{Q$4S)P>2Q2zBp?wXPGO-l4m7t) z;;-M+FJO%jLUg7|Y6N$)pz|(}C+wV{Khj9a-wAU>?^$>MCB!i}PNBp~Sj%9N^t~8Y zIo28oks7H~9sul!GGf3|x%uat>;R{5Bbx+#=6|yQhn| zOd|OmFi0?Rm}ZYTE6D)NEEh1vuWaKhP(Y^(4cq6D0styz96O%2kJyg#72X<{W?xDs zd=s*Zga6;$Zua9}API=Q?2fuh&ckSw&4U1qOO_jHBx+{FU{L@;($G&CEho-=fS zurPDQ$zgz|1Ug+bZwzCY|F713^YSm)fJnJzSHUHgoJY`sAOebYnq@5tr^&L6gM_3G zEu#c`Q^^v0H0%Z4>Y16j{o~6qD@_~JGVHREnfHl9#it{8Lj)X^JO3n2+>bXB1S)B6 zhcugjNZwZ$HPR?YgIXrBe6}ab4ImoFfxE+94%p0h_|3-PzoUJJNRK!|vc3Rc;#dSs zYZD&?uK5zY7vJ!jSkv>)YKYo=EX1pW_Gpp_bUKVKYJtCXwAVbJ#K+~*7#iR6+TKRw zI$Y~ODpjO==dJxqH4*rdyuSOL?}?GqhK!zUXAV1(pH2QO^X}EyNgm}daSH&mJ%?Cz z6l_|rj5a4*%mh1ia5Pp;I7caPUqO%d3u+hp$QX|TJ&s-arnSM!+?rpNHM4_ zeS1bGCDvPay_(HCJ-1~Zsszspz%7F8uQ!Gkm-t@`2ydTOVSlmi=c@%<9Dl7w-X3R) z@ggcT?kq7(Gj$1J#gFTeKy>il7LMi{V$F>D4Y=q)7_gtz;HDJ?YE_JO_L+d6leZSB zja(9Jd-~TNS9|T5?+Ra6jGk*OHJ6V@QjXz=;Fc3WG!q5_Y0FpY4?CF|T3h-zw{iYg zWBIyK-zxAAZ5%6r3g8%@UP&)`L72&1l4#n;Ue#+2Ah#!hz?Keev3vV(BW;|#cb+1q z>(a4=utb3oyG%1?ja1RI{s3liBXmD}xxU}Zoa4zn$mIT{uYg0UQEb3DNA@5tpGTvu z{Cjx%ZF6&|MR5F5?2kFkTfqrhXq*UK(&Mryj`M7{`?O8Y*qq4-&sdT+8+f~HcWb}$ z{`BQ;#;LITL%%*R>=#cYw02r_9sxrb!3lQ5@0zbyy1&r6d1v;DdZxd#KKKXkbI5qg z^%*UadTY*CFdPuFHV=f|Yfc937E&3$eu&^|%#pVpap`07^hW-AAEGkvyUn&*^oAgJ z>N#+FVlra;QT6K1J$@DVd%A_50VNuUl%}4J=Ic|(3WYuI^XEm4vn!3ju|)48vhN##*;)C@jh@2Eed(m^P>$qGB!;k=GC1cpj?xKizEf21TV|` z&0qN%dj;>7UGK;>B*wMPQTK^yR}x8)IG_Z>Jur!Y^Kn+wie8`j=x><8iUg+cL#3E` z(!FX`g$c|^WiKc;_6VBkm=b+hlZ!MKf(ipW)0zd^IIDdRly$x9WF`eBBxY|J1zsbZ z=faQcDH0xn0EV^(7lr>f=)h2pek-1QSF-!fQfSfi;nLrXE(=B@e2ag1)z8$`%f*D&*v-0m$qc7}qVp6?6-q z8t?NC9Hh5ZMwngydbIQ#W>@iA1}M6?T)cF*?QGx_lD z4b~|fR}lP(U&#!kB=mExgG+=p|K)`P;LwHWyc0Jg`*zGD_kgi%^+#+E9m6Q-;3Ui0 zW~Eeba{B^w*H59@V4M8a)Nt_nS(WG)*0)etaXb6hlg{L{oLOHYK4V&jQ#!L z)93@#n7Eyg%xk+#S1he*8@~FTMY1aviOCrb_E}zU3639Te>%KlpQiQyV>O9wY@wFN z0KtJ;>X5{IR*wc(d-Ntfk0@I$;nP>o0VNHP{e2%mVL{DGodQz#219` znmb?EU-}T+IopfDb1inNjlvoZo3V!>uzjt29*7YQyn+@R0G;G3+Wbcez?pK65|{xJ zyLZFo&BZ>{-usVlI`BMsUeI0%7PbWsHwJBt^EaSlT?Tp|MhUH9Bw?yuesF;X-5@wv zp66K^5=>bwq0>oe?SfA#Cvs(8U}eEpmrfxn{PZLgt+$~*)1%!6@DNBd$SdOHG4T*c z5Nt1G4S802ACK*6AuQNCha{hW zrm?QsD89*rbzN8g2IMs!c}-4 ziRCD7$&yP38UPHX=walQJbgk@tX;Mn>T&1d_nE~HT5^ihKsJ_ z!iRF17Wuk*pp9+^tt%OKEmGtzA{})HW>YX+e->4EzQSUz?U$>noN0fSW1}O`7JhN{ zS``I;rNS>MYYx4vf3EVBs^T0+7X8Ffg*S^d}mWoZ5) zylzRffmS;DiEe!ff2oerg|9WrM%=!4hnWZUp2DjNef29t#1HRT)lfax@LzBM*yV@q zDs2>^PeCgN4y4tM3_flb=(Hv<7&vF+AK*1x%2=rNE_j?OQqfsCeoe0iv zbW5C{rvzs8PobCvB$)NoSgRF6fcT&k;rqJXNe2V(>|9-BO9RX0N0pb=q3A&a}jtdVt-+W1WOi@A*+P{*FTpg=qD(+fdwv8N zR(ag8&sGhbH~5YxgZk~O!uKtM3?+)_70IE2X2IZFwowawi{z5(S#QqC3(|e8U!C$} z@Co!wG@0~YZmG*O4$sq5DmYxRJ<{LxOG+;LdcE$4w3*$D=Dh*OrqET8kzP;lJB!I9 zPV_^xesOr!t1JafAu3fBG-roW`RSO?f@Iuw;`#o5<4v9)@T;1zN`2gSf@sMrFW=ZI zL=u523In0+1AdhftTli!;a(@RGpxvNV31E0lLjKu7O4QK;7qgYPQc#rat3X1XCN0? zw~PppYSMvAcQ&8^f+90vKw|#(Tj7$9`h5lj@b9^_C*dI^so252^EELDtdJV}>Kxf7 zWx#qI2qHdYKA=lL(exDCj0xxU!Q1 zUR_oP_P+NNGN6~j>O6@ligJ|dY*MyT`&oUzinyGUT8|Tm&snfffqY4|)d4a+xARlM z;Y8Fl=z4n|n|0MDk)^}u6nWS^AGd(H1FAn`wwe~b#HK;Twq0vmGiUM9Q`C1|F?uPh zW`5R%b~o|l=0OFz-v1|@I(CbTg zU^HvMll6a7kQChd&GpP-K1znb<^{Llpz|j5zZ9kEm zH^{f{Ajlrib19yvP4S>!oZYn!OlWLg4w+VU$#G zRm_Q3FFtsglzizsGaJ{fz~r?DQk>tfGwkm=`jP*0&>M&K+#qM$dTT4Oae&FK@iPyz zT=9WdTwrz6G`Rh359iyv)cOn1Z|C2Pxlxq$V`Jlr1QIz=M6;LBdI3L}Qve4mt()Pq zuwc3eNn)WF=H=SoUP=wy+Up)5E?t^Sjv=17t=TM=Y8K*!UB2d2H9J& z(xJq~-2#%P%zR^h-@ZW(J?r&G&(X&@DWDivFN`Dz22(!-PE#R}8j}!osoT-&a}0K) zkUNlXjSuaRSwH{*P1olXY2^wB4QC|muBo|P^?|bWZ%zYp9i-lAa@+K2JEuh^$$4LX zs=j(n+Z&%U3)}$;Ozp(fPm@GGtl4j>l#i9TwpM340JuZO@h10+PiN;XUzKB+)OfSKU(Fr``5 zd0q7%Z6Tf61VWk?`vuyQ25;{n09!@(p^phapyR;}zy4Tf=r|SpYe3`}YqCdRA3`*8 zcY9}O-x{`x@|}0jp9qmWt$}*?rHrYy@r`+eH~fK2!LQOn)Y=D3eqaNP?ExUO2uw{dVF&?IT4n~x|UKQ|=4DI;x7FvHzZ`Zi^h_{?9Go`%&NnwtIXHc#Ma zHjp2eKSsx7u8=h&h^DSEMCxSFN4EPy*6XFjh5aqU8VTo-@V*yLYj=bJC1%~K`IAS^ z*C#!&W+53E4`(PJ36gFUg#zI%LohjIoE->s{9YdN-36vAGe+vWovZ@tKg&<%O=P6u42m`xZeRPr2tV)opwwN%xT?YJ4= z7Zg4NjLAd4WS?&6LzH6c=u7DrZ*`gH{S!+ z#Xyh6m1>{>ow8Lw^tb;ev7;X!YwjH+i@yEaDiKlYzHS5V-h$njhA$*OW6Nats*%*L z0E0!h>t;%QM($b{=dTH5S!k;NZ|GJCn$zB&%H+LUw&HTSpMTT#{EmsVX804cG?!g(mFVR{8`8jA#U{$cLfghE|0G`we z4BUBu#=$w?CBadN9{5dKPDDSk_rFn|UAN~S)?)`XI!7T|wkwTQ>@O0eo=f1Lq~i`a zg!?;T;3*>lO+NMIL+;?^P58jzTeCgIzCfd#?lqXt1o zrKeg22lnjOnJlFt`i9$xqOz%pfwn zI(&YUzYU@Jk2DZ`L4qsO(0&($GY10F_i38X-NJ)KzHtdv*Mx`n`_-}B>-&Vc;TAvr zO?XM?j_S`m6u_aXy(C)F_s*=hH@yaaQiK^SV7<`*7^m+8DjHXBpT-W0r68XC9S}?O z#H%Q^GXV_CKks@iZia#xxYCAxiptV_&cjxSd*sa7|9I^)$wX^ctwj#&PdBfzFmsB! z>;X8@gKioq$uKkhiAnU8;vk40^`>mz0DOFQOl?#Q$%@LMHn2!p5Fo1#<|aLvhDud_ z7O0QLZqsGsJ{`^+OpH{q6#9U=I7$TNiVj7FHR!eXw{kpqzvN~m;u1`<8~pViYQ;hR znM$2UM+??RPqpb`HV1ttT1%Q3QRx3Mb!nNEWDxw$;pcj@brSp&*ug8 zpb0oXlA?=JEo}!!2@6s!4&yNbATpC@73g)!kQ-aOd0i0Xlob7ZkUmg0&k4*5FnG|E zKbtpY^3RH@5A^Q3=^oErn<)D2t{h~-h*X5`y}PAZ{8s z56KcNva|ez+i2xpfxZz8(gv@kt)|(fAJ|Xsm3yN~w#herIj~~gN(cVSEO$TN3X~47 z2Dyv5jey@)FJxqlJW4Pz4K-pr&-4)A`R07pH-kXgnNoL4U3+Lv`&s6ww_(&Gur(wP!VA(j(FJaKW6ADIOifQZVWoQI5T4NfT)aju zqEi5i10x0(r-oLu#_~bJ`dj6^Zw@>z9srRMPB>pcJvFPIZog~zbe)6_1>J_mRr@bJ z-TadR!FlOr;85WNwLlOcMCB&J;|j|6^TE{}y*qJGD0U!+Dy?^8l%6S)6tJ1Oom^U> z|EU{T)RxyieS*Qfuwko&kKxm+&%gmC1z$7jPE)f+LDd5*_*O7SBTzlK_k*)8)&5L$QWCK|x37J<1c9d6j8tI0T?)f$LCxUVgSgLrz zAtqzp$)b8E{|*Wp1iE4ma2gI{$?^Unc}MFj6B#jmcK;krE=AN!}$KK+kRMt4i5*hhZ ztDcx@)flUUzs`(3ISr_7AUrXIEN+poN4U<{#udlmu;5VxBn{^v5?=QF4XW1rBPG6~ z(|9Kg3UcWyEbm zq6w(k0`!$UUpR3~O&$67{{~qV=;@uOXp6d{+06jA*lJRlP244r^=R;Y9F}3@<$50& zY9zp>*Auo(8`P^dOYpO{jqBVk>nWqqslNATd49mAqD-fAhl|~Ex)D$YNUoMD(s8~O2r#M9Rt6DL#rnOIWgj(RafX>%QGpezi z&3j52HhFIjtKu+sp7An#hpCi%+xs9bb@#O|!3jjLyhQEA^-@p%RRevy!|dh8nfT2k z@(a86J|$T^ur<%{2>hiOv;CrBkZ(NzFn@g64YMS4^rZ13)RIhkb#yZ%S$8ye1!KR~%gm)`-cjFBalqX^T zw0@QFF}rgOj!hVU;qaY(Bx1#KLI6_wWey3G$ulNYeGz_v6sO7$M+n0DlfLz&$trXK zSFt~X$45ZUu@1@TdgC4?HLWR_^omH`Xpm$yUKN>T@g`Trk?sP!OsmGfWdN0Mj7-iJ z7rKi3NMhZU#;>g3z@=WdRA`6XgUPr9F_UZ1Au^s|LEx^_Pdt8;KEHsS#**T&!EMsG z($Q`4RMIR;!PGdODxbYpQ5MTP9sEvE)?m{FH9p|T7aZTdsG;^E$_;aK?(=q;@{8Dx z=7GvpehnVvS*>^Nq%!|3@bu=bH||lXL7B$*ySZEXP+e6l8x@XMeWbg4|YHE^~&{rVK2U0mz5or)-~ z6^2q!OMB}eEzs_Q#1kE1Wn32LV9|8{2}_XZG3?m^ZyE?CVMA8OSAjl4zD4z2oJp$G zpCea_Ur^UzE$xv zgV-u{0HzpQKN_qq3zwUIEVq|6!2`NMyO*DKv=Kl~(N1S+3}1jln}MU6+wYf`ej||< z_V=&{-Et4kMQJpqhQcI~79*1<5M%s)b9Pz$Vfw9hAt#9saR;l@a}S(~qwfFgj=N#% zvq`FTn|l-kbLgzj-J4fPb_RkFint#z8$Z|fc)sfEhCSaidcILr#99XGkYV}P<9vAg zX~9i6e?7CmYj@@7YPWmB*UJv29wp3xFBsy!%JklB$=-e^)Xf3*%0|Ocwo5NQ6@9GL z7g~C0{A_sg$_g)=g_}N%&QZB;yLO7&I_G^;;Y%(nAnc|kLKgUc1vx7;~@&JC08Dl&jYHqs(hR`j-ULS@;$+HovwXqP*-M1l3LhCa%+~L7;*tU~i%auIG27 zcEO!;vJEUKu@3`q6nAkCS}%e$5BEZ6SB!%|RTZITEXO(fLLAge&4BS`37|Y;LEcpIT%#o9jXii2*4YNdgy6ID7P$PhTL`q-(G{)i~0`M5`* zD*fBQFWig8l%iP_F`&sbgCu+=yF+eS2F0nGbuY~nxT5<(dG%xbc`}&a*zKN#ww@z{ zc7mLQTRD3Rf}K_M1vCICZ>B-#Kaw&K$PQpRnD9jfN^miXUvIx3q_D-CMQpNlmsV&3 z9^;afiYk<&9IH?MwZ8qqG{T1#J%j;{#nD`h?}HBh`@t4*^Qv68kpGoNe0w5#j6q0a z3gpItA=U3hx3e7DWPt5h%4keN(0z0S15!Pn6>h+!e;in{U#B)7Xf`4b6ho(#X-60R zUcRp(WD*%4;MS2(0HL0;U=Zu! zB1roK_A>qDe6CPJ3LCl!iheNg?OyvEhUzRe;IqQc8h?e~#$p6sWzABSWn}?i0-ZI0dhu3;r+X(5kSW=rC?073{}@a^>MZ=+ z>%9W>uI7OtW&^yJHE+`eu9a{SU%dmQ>C-$Y^?|qVl&l=sA##nNsy>mLj(w0Xs@+@e z5&Wa8f&=_t5Su?gpx{8yW1vFwoqF-;wzF2bD9#i4J;1x}y20jnD@SelT1}6Y)^zIQ zS@(dQ@R`l~Tb{ES+nQf&voFnqCD=ocR=fZkFlqPW;553~NFe|NnbrXX5tSj!g9YOt zFZ`s^tiHfcH{zbey%W&v3cQR7;!l|yQh?p_qAwb}*?0wnsjE{4AnT9aE}R>dCEt=^ zda2VP?00Bcv};Wa!IkGY5K#T{ML+{vuDgPZ5WzRZ2!D0l=GQ+s20^e2TIR#;`ysw4 z>mj%=e2mPq4EEUyLcW91Q+A3^I{Q_()c0LjYp(n8` z^igMTgSP!3cqx5IWbN@IIQt+A(rP;9sZd*Du;4hE`HoE>l8W=EDy9QGT+5Uf2K3C) zLADv>3$ZCrBLlM5k9pY1LNJGqsE^-*{@EQzjG|CuvXU@-t7+-J@7Z(oKC;7_mOVAV ze{Vq9yx_T@4Z0YLW?B!fazMZkhG8FybG8W^hNu8LWX%6WqWR`r_N4Uq;e~?t~vYYD+&#^fd(FtXg+68yL*TnUu^5wUm;WFqLnj`c=HF^8cg>Ei6hcSM1Q^#OnIaD?6Vd%k=VnbpV;3^ zKRHUz%ru_)vT{1Ds1NDa&DbCpWC{-qN08~{x(yvLO;TkB)V9{1Ytpwe^Q-O71zF}B zr|IKRS2I25-JWPEpPn8FF1nRE#O?d;4AWJI19UevTKCM~YWGZ_pohb%cpoq_zbARH z#i^{y6-XeT!vFae1VnU9smtcpxVxm|*Al}(U&EcE0t}U5+q0%vx=X+@iwH4%wfoTB z`PBk%PJ(Mp(Ywh@s^`2Qdgq<#rYA72D0e$ox%=K8AS5vLM{!vdLO=fK!}pRVTN|c8K!+|yRCHtCl>$dna5HF78bBeUuxX(8P1Tdu6;yv zazU#`QL~)TJ2At6w&gShl6ek1yLOM6EjJDBYf zB}>PIV-6#bYRgNsXuvFg~GlsM}@ZIrl@ZFkOgN6`LjmmLLBtIi0y z>ry=u_98+Q*jYm{+=Kzt?J%^)?+)kntA>g82&+kiqDtGULz=2z-@Ny<6(1bk5v&|j zmbeRA)*O4d*fnu5ptl@kGCzWpABPWIHa+93^Cxi=E0$S|@gS_w@8)e?1Lyrd@cMAa zPi}afpKypRdR&6}Nd0i8%(7M)%tCd@W7nxN3HTq+(Yh>LML-ABvwO?D=fKeQRp!C! zv$4pRTS@C`e^!RZ8BX^|GiYxW!lqCE~lDTQjtFjIU&opAuD~W$ktUP_+EBRA>u&5@$`oP~b zKDc*28DJvHurIHi7V?9*>b+eQw_W%rc`-ft|2aK)fxH2RKHqowDwsD?Ilw$cufdIpi58cfB%WXl)SU9aU2*B(?_<{iY6)V!P2SE?5a;TTdYhme zb7|FVaRsq@(T!B9HR%hqMoi`}JIxtjnM6C5ukZ0mk6|ht^59N9RM(9WKG23$$9ud7 ziZnH_a-v(8rW66%ey_Z&&!?u>aZ1cRHj4h8Q&w}56;7L`ljaaDA1l>U+JRA$fDAT- zL)hg%{TrHAu(q;f#$;>%K2H3*9_{j(Z!+2N9Rpry!2I@dqel8UymtK^U}OMpCE5lQ zPJC`k#&nAEtQcFVcmmOXmqrX7ZOUgn$=5SWoq=^=JyGzCiMk6j)lTxs-=za@2I~O# z)o7pw;7{ohQOdG+bnC$^0%6T0)jf)y#3eJ+`l5!KA}=D5AO2T#VE6*g=xNw5W1~Ll zSfz4@*l(jKX|A%*%prVRKH<;OAem~!+2r*u`xuLJwUXvr4UWN0{HZ~f#*mjOV&j!; zF9PssswxlD0xxcteAvWeum+%Oi@SJTj)6H;2yg4237oOt&sw!1QTU0tDgG~s@H=x( zxWNQUec(x0_RMo`nI~Vbs7ro6RmEoydiZe#quOgXMB<^{gCho}muzY=I1S7{8aj{;)&&S4tm;fyq>LL3g26hp z;7Z+7V}ZosaL&NNML#|SGpN3lIXZ!I+M@y0_X;`=^rc`96UJISDx7 zu?ldb-1tublZ?H>PCJqI3KrDi7Hz-~LB``_l-b96IV==gz^zydM&t)L#-uqcxDcBsC;8OS- zt~0t7{z-bSq;FRc1={raEJRV$#*Q@KEnd7>$J!L|*>ar7^r8lZ789jVk9oHF^P`B%}SVw!8 zX(#aC-bRdW8P5+hH4ah`1B%luU`X4VVVAQsz#q8Hc-R)-{ZtD4A%G^P_Osh=u1^T! zSI5Kd4r+G>3%KDsV^(T|8wAm85)2zsOT zwQV^0zWm?}fzM~E*b$~H*U_Y|A>ja3wF(sU|M!BN)dc~0&fV?Q3$NSYdMYGzO+jfS zu|WzIbVH{&*Yeq*cI*O8)>Jtpz?f*H;LLWE>oXvC34{=sjn->9U&Qli#r<<(Z9+fE zx`(DFSEI<=hX>$}{wSL*7)2-R%!E0+zX!e6%7@9WaeImTaA9D&n$#N*1tOqh>$j#i zk%UQU%ly!2su>dr!O8c;_gj5jK);kR4*fnzD{96Prvk{A^A}&YZm;Ew$fK<2)miEgRbv1mif*E+v^ zThjbB8k&%8bsg9;lguY6p960!BPq{#$~V}WJ~G#S*<-m${XC+}BjzTSu-xaBLn$>X zEw6az=%teJ1}aPxD-31Q!ac_GVOeOoA&6I1!6Yui4f&~Kbei(L(#Nn+3Rh@ep4n?Z zQfzSMmgyfUu*ndR7I`=+2OwjVtk1uD{n472f`Kjq#x^toyRA@37yd3GL8wHF*pQ5C zJ;%_#MGyNq9VkTX^_fibU}p0(ko?xC2^E1s)L^&#{eUQ~yw}iCs7nH!uc5Ab@mBG9nhmvy1rMcAxYcm2B{Y#5pPyvJ{`yM8vV9+*OV5pxl2Mz2~V zg;gD3a(CpmHUKpbE^*SVD3Hx9T15F8Jp?#}GO2apnz%E>*US(Dp?J-C@zJ#)x^rbb zrX4KTCc9J17b+&fkIfQo+LXdy!5{jdUy}!h%Clw`>}E%F_)H>kcT43c(1FM{g#(7t zKXyOx&%Ac(?H}4*GFh!ph>^TK^&MyAmx+HVHqDgxaDvT4wg%{W(cGItXpLL$7j`Aq zJ9Pu#1~IncIG><m{Sk7-YY^#28h+HolX zGysO8gFub~Xjyx8FH*fsfe<0H;8{pCRvK946h#~rgQR5);gtmC?1tl!jF!UW7w6o7 z8*+jcyZQuNGBFnA8dOUQgF z%?Wpl3z-}J%OhRMq0f=~Y2SxU0Tn1#GzQa4rb-3lC8*h%Va?F4Dv*7RlZCG+DCNyc zOQszxj)<%j)`8N_F(FQ|OpEN2zqY4uH?h6GR@AdWDa(iP$Cfeg=YB`t#i&dWVIvJGt8SP zOrc~2^#drI`@o;kVpEut6YsQ-$rOG1c<8(YUY4gT6Gyjw?hVuktxN>m?_046<+dWT zbZB%4tC(+G-w~YGI)JYA{|0!F&FYpII*+$IR#v}M>JkVJZ``UF01HX|3I}G1ecjPm zSmqQJ>33yK2(Ou2qQ8@wqE6XKXE|*IAmdIsAJxtHTzX(q5 z$Qq7hN4PNoAM$SvGZnkHISZw(Z~S4LUN*7k4xYdDbnb}OEP#m7L4!{>olspx_&l)9 zi9aLYwI8^vM@Qp6^hbB~Y3oxn76g!u6}+{d36ILoS9;IwOY+bSs1m34ZV|CN0h#?l zJ}|yNJ{p&;2MTJvYXKoY5wU5PI=`>2&dvb#Ig9DctBP@>`9WUGiXALH=5AbvpnfK-|BdA0+jvesEOt za)I|{pQvWs)hn0+&4cJ}5!S?L#`8IukEUkqss@%gult?#E0EOYZ&UD&bz9$Nrusu~ zJI=o69sxZZh>zB`B%m!Cm-I6(VT^5$W0#Li1PQ=DiDnO8sRg`CxoQVXgz$r|o9#O6 z_5R@Rp>qV@LUj$FX;cIa;Zta4yM*+j+Ntp2j>)YTZIH2vn%xzL^3iUd(hRd=59P;3(JFI!98{!~6DLkFd7!A&$;L zi8$6#)2BKioPj{&ardWrisCp4#I^_ZEcA-|4jGKz=;syltmGI@%fEeZD+F%6``Hh> zW?B}wN`I<;<6}JPow*r)uf?9RGH@&-YWLlvr8sW9*F(v6yJ%XdtKUv)H*T}N^1Tk0 z=*RFFU5k{G82{gxRY(@K{B{J~MKD z%{qe_X7;O>tLG`rtQV8&gJdSw%wb-w9nidwHW;)ziZzM*nEce~cLodyfJ@`@b}~-x zn2v-YMWZGO@RILuatabnOFHk3K;L72Ep6b$mqa@qJb;vBTqj}fVO|dcm)Y@CjFiDs z>iJpG$t=KSFDWAK<(N)B$giC6w%^-VZfa?UtQFiDE$;253!sJ~&G}C7)ri|Wm~BO^ z$T{-?k`7+HTp2RdDnOZVMiqb_UTY$MoDb~ZPi@llt8*RXg()Whn<@+vjG2$yJ;m~c z>BVOWLP?(T%W2i(^Bs_xr@p*DR|(KTqwi|Ey?`gv1*Go>EWNQ_D{&jRKKSPsI=Vbn)>{Hk;hu?#nCYtW)&d*73*# zTlr+I4GNz{qA)cCJi0#AlfEC$59IpKXY4hvQa(Dc1=)~?)DLYPZ+K7eEm*nS>NeH@RXN+;BXtvdGYi2}Kn%u_sZ6N3fVySkqOpRZ3xVCW`o zk1i2C9cdeo9~`FES23zLqJzljrc)#~te;dM0K@{X=NBk>qUGPh`d4!&n^w4DycZ1`ipEgia+Zt$!)|GY0LA@#UD}9>lg!dhWK88!kMIrF zpXqYcsw#?_M4)G8R}8V>14|`+h?-OLOCv0k-PTU$Xmb zR1XN`LJD+UuEMeK<&d-|)fa5NOeQ>P{Fu`&?P#1<#lHTA0S3tT%rFh(RByZt-&6m2 zLc%#E6Q_Yzl#kjkUc@0*oQ|;rS@?dtUsh28Xr0ltyWlSA-`e+QW_D^}@}8D11?Z2~ZB7F267fLVnrn<@H?lGBHR8Vb!Sc0~s_x zeX>^cz6M?F9?2?*ozC=6=Zt&udV}%jB+zmxHBvQZorjqyZmn0$hD*`g=E&dltbL&n z*WSPp{GkEms2Wxk9h){^)Wg(+>Amzu(#$}S4J+IZAKe$IBSj`-M~_W|RWL9p1l;R` znF`i}ZTMwRjLt}&7x%Zm;fFljEpu>H5Dz4htK&-eUdDoJ${&m~gCl^Dcf;g7 zN2(hknq%1U&s7MzlS~u8pXIIWr~VA!=3gc11GLZeNK<1G3jBF1$OFtHhx)c2$dU+% z1j(oukPp3HrC)gw2N1PLaG*$fo`u6xU4pbQVOnrvH8+fa5O&?i1qb4lk5}c0?IJNk zc8iz)Zoc01`z`hq-9*~Jcw(vTMq~(92Q-9p_RF5YnqrQ$>Cj47n3=j5tV{ju?bFPU zW}uUJpuu@Hhs|nLcCLJtB43qsn$<7L^W`|lcTB+Av|`Fi+(WkY$=3;hE_snIwjnv^ z3+@MK<8BR<-Qe1_uS}cc+=E-FR5_X#)^tewZ8yx|%cx+QJ7jk)(h+ZO@&%S$2vVq` zc+t%69Q$<1+gv@te`*+m{=3(en>+ju#dVho=Gk(?PAqc`A&7_e-Xf6NMNA~Jua-NN zmF5d|+b#;xk>{R(ff_|rm|-h?DVi#w+1g;UYkggoOaa7?Q;>%usSh`}seG7YK(z0| z%R1U%FXLGb{%z<~)W?&SJZLXq1Fk@EC2jWr;hIiL{9`?@IwV=rwMKsXJ7a1m@C{*mor-$b-7 z*?hDMoFDW`Ald;-+TZ*)ekRh;l2yzkurSONj>R@!^)yi(QP?0~%;39xX-H&h1?P$< z;|=D9>IB_;2|t*JF`3?Mp>P_EwEBDrv)IQz@a|f(EC-KQpDMUTCoXixSc}&Ay)r4a zstpTnY2{0Ld(y$C=WgbgacL&orQc7&fhebGVG8nuj=gLjf#~Z26N!n&G_YdW2pmJS zQ#&`gz}O_Aa$TLSWmWH|&|=0+pW8jIXo*qmIqf4Ps2No`s&DVic zfHpemAE^4hQi(rz+%r&4EgeBN=q1HIG$uU3*~8N7VelY@MWqhWJ;H;#+yD`~dCmLs zTKobbL8m!g%3i6TxI+#h=bn5$BgMh3ba$)yM3St#kHEN_I`sKB6+rV9D~#cJYhq^2 zYGmzBPCIxrV_rMY3c$|S{M2L4*-n2nGt_Bhbh8>0>Zf&P50MgQd!ztkjwY8bv;}s6 zw!;4x|DjlU;Gy0Z#RrJ=TGrbeQ!2F|UsI!H0TSvAb7qxfFT%}{sSLx0X<*tggrRqY z;q_&L&CGxDyo7dS;PP5}^cR<(*Os=>J9$4bceLZPFUT)czTemBw1&HXtxyZTdvcog zEWA=}pjn?4X#nl3pV@K#tT0Q21h2}^$=>9w?L^Il;^^>DjO_-_2IAl);HM=qJIqyB z*Ij(~Cd^wfWIQXw5@t{EcIeB1!ny~3oR+}SbSIICbB>}$XX-GI)a^nwT}cOJwdY1O z)ln(HCBd0j&`W$ereKrQerP_*_0;rb7$^=BuG(h&9BAlWJqD;ztLH`SRQY z03e8~obAujI#~_r;9DT!#J1)d)uU5}SH68nzIsVe0v6LkfnB8=YUIpB=I(1R%OO-a zfl_{Az&VdAs}c&^T0BI2FCzS&fsnCCrUX~rK>ty69y^X|Q55|k2IMrf$vK-aBj;c+ z@$2iB)Y5A`Rd-_>PS|T1?2=)Ngm)~#!-S8LiR6uqoG5DL8A~LSSL~A9E8uGYHLe(_ z%|5K|$Ky_crN^eLXr~a1&d;9ZgmU4{aw8dk$3jAZlZEKq*}%N>H2=TU36xP0!d50CI(Wwz#5R>!y@9b6=4+TGa2uae-H6VNclxT>442Nw2DGq2NX#~O(n zw2!3yck=@0MW;8SmD(Kpt7JqK-i?^hL#D`&J#yYC+#MwZLaqe7Eog5)%z*WQ64hBl z3};(PfH0SCG~{oy+kz^&g)iz&3-#$KHPjSLscSv-A8^6Bb~TVRjo~p6M7`CAXC4<( zj_H*o%q)perBClEj6NY8xc+|fwUlWTqPx8dJD?R~>^Mbn+K60s;XB%uawXn|3s`}& z&AZ{e2)s8dS_ts7Q!exDHQoHFeZAn>9traM4K{%5Xo~BLNWX#F-dwZYMcpoSpx>C~ z(Yo`h`~UAkL*Dk=Ve)s|2pq7MIqP_ts=rG7U6vhMwKG5BgTeU5|zb85Mebe~; z@}`b&$30{Sf$Zw^6Lz=RYSnZHVqKf}P}EJ0oqk?FC2o70z%NHkZiW!Ij*eGjoS;bOh#^*Dh>R#mjqCnKdY%ra_dHW{=Qli z=ajb{|KBaV_ndgJu~K+*QEPczMaqn_-B9kVr9fOFZb1(;kvI5v_ZRpD zt4Uc!^rioQ+oRlL)*w{hblc;;YhSoQHu9{A_{zUYcQ`Zt-0<^DM^#IOXLJixZ|X7G zPRaDzG|%-aOeW+pXzOI~OyW`?Wap`!b1u(rXlR4qY zNW_?u#cZBxV7D|N51T2p{Vy=W$zkq%=hW|f6uJJki zE(3OqPpgo3FiBU}3{4M5&p9z+Jw&nGktZ%XuMRS`SeLzqE%oP?eY+UvKGe$&=kGHL zYWhTPT$&~cw?pP7kuKJvZ+>%{y{CEI%ms0?@A1eamn4q|u~pnSpL*FpSJ-Zq0PGmI z3(a9vf^bwaM5q+2Ek2(Z8iG6is2fu?`S&t}5T1x~6C;(-*k6gJ`y zZZh-aQHyd3DTzT>AOlzC8}Gk}JH5vpg^6)Uhx8NgTK#?7s7 zFdaMsas>QF4Oho8E0bc5fL zC)u2SZfaH@NNJ%~oxnb}iZ(gSSdm$J>WaR{jZENeDYG{P+w9U@-fJnh3)h|$;SUi8u38k!O8zPB&QHnd<`u77G^NFO~vAfGi z_7wA649L+4MJ~Q8zsoNS14BlWiftbZKmdZ|U|vPa+yt*A2VlZcL!@Zb@Cu`OhZS)i zzs9Q>LBTi+0p|ntJT85WuVi~efJ|zf)~UD0C~;iBOpdLGA|^o3id@A@w`Ls(>6xu zTn*42vgr%JZDoN>64Bxz9=S3btjQwXC$Mty(iBVa~oVE7f{`PqxMLS$0^>{ zQPi7=UGx<>h+i81vFzJ>P3-4c`xw8zRrCJ)=U94cXTQL z5Y8Tm<&kH3#;P?+*7^ClJMR3`Q(^&_Sa=7ke&^ba@g?F%`%O}uvPJYPSPVmo80uF) z4`aC(DC)VICjE(}mNO0cjFP_%c-_HZG*2PLtDPCn{Taz%b1(&A$)#skM^dG3dGP)S z{Xvz)%XT-&8kk^=EjUTc7OCw5n?VIPZo&*wAt}=~>4c9xmi-cR7(%lSY7&%=09^c7 zpd<#+>vd6zbcLCVb`W>X5Js@SW!*ws=7CxXG6;ShFdCG%Z8v4xf*6K2Z&JX4P6t$h z1X#UUN|s-Xpj-yo*zh2?aEOyv4AF*%CAVv;!rU}Lwm2?FeMNbaNs+Xk)sn=J+T zB@@IJ^9_4RM(PhF1vHnAAJuC=e8I5oM~FE)sdRH~z*N%uoX@h!^$4mKG_GwpBdJ&) zT%qd2+b@7;8eqO_m$}C(s)y%rQFw8@R3b5 zFnoYFlR#d*Yc~i$z{@za9!z*}eY+tcIdQ2lY*QO?y9+Q_MN^zDd-}XG$w8E_R-CHl zsB|GITJ&;P*}zQe4$Y@6yFD`^gz=E5`{h9Eus@+?*%5Rxm9}5D1Gb>7d)`!5zi)6( zH&pi%LN#mpeKqeooYVYS-7d~R*Jry@A5Nn*_L>4ah;5QhXZEei8SWedd{!}aA@nR~ zM*@Et2`nSo?*%N~F=xUdVR_6WxGYBS7IYwYO}z7c0Oh3M;0|X>VzH_RfAvfw{Gef$ z!BHB7lHjEWgEU(W!{OeE1=>UwcUf(~{1AP=a`hXKXJ@Ei;j`2ty9l;)MSL7dKzs(e z1o*66_w_YHtmO%bXAFx-a7@k(nn<3m;||Z*gOnb?nMEX^;)#v1?oyTiC$f@n1IW^_ z8oEg8#MQs1ujFsvI-x0*a4z6q5@gEs^V=m4cxEROZAO%NyLEiWJk;%8Nea z@R0^1-*YfIWtWpMTbs? zd@i-v=a_}Wxo~!k;`6;3=mJ+vXd;vI(_X}rx~Pe8918(I8#Dw2X_O@#$`-kg`#5Ln z;SAtzQ}#6O{3o7-x|cU^Tynhz2`;>C?xv@PXwt#05$lLwGW~Hw-nU<yA`630cOFG8 zowyV~Z6SAXEC9ON>V??D6^w<9Ae*rnFM{Nvq;aE}N=`xHWDB?-0wj%NtS>#Pq05z+ zM+Ox)WkE9}UY9Y(fo$c9{{Q?;OiNX%?~@W-q{%fr7Hr;I|G|I~#My|)FD+;oDhUIi zz}bed^oJC&P|kPQn|qy7XVvY#^XNVP2(&9rt6;XZFpN~FM4vFP%12+TSH8_p-Ka>@Pm?-2K`%X_(yx*=d~dqwposu&_N{ENL%*WoCqIlxLvoZ zY-$+(NyTn~Sq)N-3hynQrcNGV7}!nAawmcKok2<^124n^h1AZEtRs0GT;b`r05d{o zgQWM$ov6#YPG!pu{=MIZ?{Md*M?hTCW!fxP2@w{uS2~g%y?n>~71`E)00Ay1zA)`m({sJ%XKi+{-V7+%A;UZ(17iS5i zK3T(rMb$qu99djs;0DQq7j(hh1%zxflI#VSt&p(pM?0in2Enfk2c5d4C!iKcnxG94wii@^_Vl{sEeK#O^#t#|MCMSxdi%$ORVCv|a13DcVd0#svj4 zkIE3&mgPBC{;KYaem3{{ASumfq$xV)oS~>FC+kmdDdW;R)l9h_nQ|ja`%52sj@aNY zxUNV|BSymEE%1B7>Z&g=0w%5f_Rf2M4q#a_1=eKjM3!MUXFGzh9t}M;IXF?+?gDn(<3dn9g^f zD4G@UgHL*and8hx^n2!|DM48|9{tb)>$zA174;otT(DTVx;6Oximq4v1v?gM5JL}H z+CsNz`UQW`<>i@(ewzJH&ue(a@>q>W+q4ffiz2E>$QXO>`1 zX+qSL@V?atM;irmbUV1gVItu%;gy)cc_3J9+tJn$%qc zT)Qi0gn46j4n`nuAw1Hd{vWzp(H{y;U67DY(5vjT1Z07h00PCTV0Yt$d{TH5Pou%qz zU=V>Zqc$O*pF@=#%Ffa_Zy^NuD2f}=%cd<}C6_KVwg&1b=?l<8U9I$c;XoK3QGh#@ zujMzzHi%(GZ#Wj^^?}Iz8`VErTH4Di|8JYyz12M-25FvqsH|Je0oLNoiW-grEu$I0 z2;by3$Z*ddE%GZ*fShz^F3#g-qSLoakw*@Oy%lQqrT|Vd4&0+@jRq>&^A}dPaOOBq z1%Zl6377v>k6e99!~?SO`x_%gfII%%o;8p0^pu+lv0vW8aT|@|V5%l;bEqS#@7(w| zr8XgfXyI-2BgtGrNI6O1P}wB_@CLLB%?@Zd->R;Q`br01jLXD)C%lbTivIL*EX`BbU-AXkkauG+UeRC%uGFtaw zl1Gz+i~jdT(<=b`76J}`3|Xe6rWaVfHeURHz$n>@+O!XXKg1Nxr}|}*cZ4NY)lc>f zJV<#mN}X7}fEL*cPc}?f+=aX_t_QWYj`Yt>^Wb3g-2NsDX0Oy|zl!3wST<%Lq-f9( zSKinWuDLV@Ptsm=Pv_eYQVj3|8HX9BPXI`XD|a`?^~ViWxy0l?PB4lh%(vE&uGlk)czbnmtx!%0*yw( z>GC+#5?LybmehV!AUdnYyGQr3fzLq&vhrtSi<-bQbF?p}1;X)2Ecp_L^U4XLW(yLp zP+-)_g1NTROOk@F0IZexVIU~X^*8&%ll<50tB*oDTWok-MB~S6%5e5LrdEQF8+QXs zq5pUG%J^oI5Q2n}JKynqDuxTS*QDIu*6QDpr~E2{B~3_EQOD7Qff#h3>l_1vc=dnMI!Z5?|T3EvUc;LY=sP z85~+F7dik*<#mXp1-)VjF-9i70lM_gmsa$t!a9)*`Gc|$DALgiq;u?qRKpo)wLJU} zADa8s!%XIS{t*E_Iluxk?hJ+u#p^{^ufJJ?f8d+UilU(EBhK&}{o zILPk@H2&Fyx0~06bcMU3tOF{L-qQ5-o|CvV4t`s1B-9g+9 zvCy|+kkAX(VShS!6+hlKyR=1TxW8~;i2<9$5nCW&Wcj+ZQBRUb2{;tjH+z5;FrN^s zuv=rUxmDqNJ1*2Qc#gq;#vF_Ua85r|O{3ncm0i&ZBBP3cRv>z>pK`kS`Z;rBdh?mJ zTly`NrhszPBq!v{leBnJ$Qfj2+L^s{iR_;9v&phy1ND~W+G~X+&@)ijzycf4G^mOd zo*30O?dext!NLXE>pnprB-ahR+CPqbFI zAK5Pf_B@62$kvzO@Moa-%bB7&beKHe!2r=4RSnr~20xWjfFw#X>=z9^b%>vIledxu zHCrX)@bG^Z;p!~yn!H<(3}qvA$NOS{8Vn250ozOi!2{5Gj)n+`~*k_1P9(r6B zAS*k7;V1)1iSc!+%=7kSs^L7$;QzJB1Wq?B5g~`m%fjFurm^7BlrzM%F$ziHA41=aCbS-3PW^+Mt<3^Ocyz`k2Abda8^r zNDrWIvTt~F@~5jr28iVZBUO!M+&tud%N!@53CisU591E-kvGnSbVP(aLIdeE0I)k` zr$qle94Z({-^gv=6`o)xL&q6PcHMPP!=VREREgNjE6T*10b5eD=!;D-a*4Sj@Fy}0 zd4%aLi+L8Z@<^*v>LTQ=^6vW`rO4hho6Li?SJKATl--2V0;ZY!Lyh?%*9!GKr9x@6 zmP)FlP=s@|t22Z8H|gW!_~PHvdO4S0yfs7!QzLc&eVn^(azRNY!;oLp+TGS~DKOD* z#H(f%NFCs0hjtN`k~_#g5blL-OE1qL7k9!8l#DHRk+x5}DX0|>K&eCkK1xogmM6Li@=#S^f4+ zP8tw-joc-LZ>-nkiPAF? zxH3;a2-2sF0Z0|SfXqIdCJxXY-J!ph)g(HCeqT%RD5OtvpmUAp(HkK$tmMkr%Hu;4 zV`o2r?FzU~_Z>(i0u7LTb`X4+o6;k7hRbvPYR%-eAsmC;wk`uM^cxWl)auVBO6@os zT6FmeW_S?;aw~(s>eYF1i`pSRaRVnpejy}_9IB~h#`U~p=Dp%bGX|33Bc$#Jy1>+$ z34($z(!O#-=CIj;;zot!yNH2Q#BkcMEK+Ox!kUW%I7ClbPe1sEVGovtqLbd`fQGlF zXfd&xKKZ(SBdk(2Y9E06`Z*c<%~*!Sw!FfoZUH0va`b4}yu2Yhz0s<8#F8((kB2N{ zt4bU9Sw&U%u_I-c1oNs`J1RaA-LJqz{s%0l3)`O`BLLQx(G!sIw{IJEP|F zUhZv5T z)R(YEtiG>f!Qx}I?rZ1ekq8@-zm^GFN0W@AxPF}~9jT)(t3q^@fL@PpSPGl+!7UD?aI45UijUnqJ?AWp}hR(yX zWcHovB^X3yA58FsNV+Tkt6N_H2>_anec59}SnWy(|~j3qO~_9Mv)CyS?5w zDtb{XU8$;`PE;^(oE!u>uQtL+9}0BYAo^NPcK$%{Tkku}zQSHL0(~Nd;(e`vD54Qz z(lmX^wggNx;O@xqhhzx!s4nm~npI^JaX-n3n3i3ZO4xoe$T~`4%mf3Z)0vPMCNIEi z*ok8WmQw@RPyzfqqi*M*>=jZ|$SfGpiLC$R&^_8}7-$__qup)HKX-pN32&dz3~BAE zlkyLh>Pvn?KYabnm!_Wcd29y3X+5gV=C^JtdFwvH8oblz-aXoz8AJ28<$V&6DkD9V z(f{5t>gY|cCxthOw;B*<54^Ecf?-Qyq=d=^^N9Bx#9FWs2McQX zT$3nombT+CIB=`@cooHk^P=r#DvBr*zT=n@DbYu9ez6?SSkG zq=aWNsXyPvElalOd3u|V*D?J{JQ;D_Zap2uq5@3k1#i%5UpjfxS#XBR>ABBh=FHBt zzysWd>*{^|{q9;kgG}Q76d>yi#mk8l{cfDNZx%XkS|7hbXp0|~%$a)zEXi~4F0P78 z68eP1cO-|ekQxN}#ZztSa>!_X<^m?z+I{&%OEjH3Y=uJH@d>;y{Y@EdMx}1{8F2Z@ z8X5qXDPLe# zOC-3r#A<0hj|~iFesOJ0e6X4=`fc*S&}+)}-HB}2{)~72y?Zjc zYY2wk?S_-vN>9^7aj!9@!{$pFh7T~0gV7)ari$Y&M)Ho!a+ZPe__B_9t$RLTm?C+_ z#S4I;Z*h`k&>J%5m)4g|rn*>^HXS^|e|c(b+$hCw`hc(2MFTnsrcvc}Gsn{k9Q&2N zvlA?LB@wi(>N%)^@P%Ey3j#>J?=GPxzUmLhdh=_x&5`5wxPg2z}%r%+3fh%o_j)&Tbz41N{p$ni{|yQbg^LLN4ax&CQgR)=m~!MC(;6`K_@^8 z?)q?@m}7(H@ua6#_v=c{bOWXk{cP285WaX9AY3}q%J*sxQPum4g})r{_#9pan0t9Z zBvS9LW2op;hwaX5cbl!lad`R24%zS57r;&4P($;ejRdYNt)Ov#GIW1$_`YYD|Cvqu z)W{x-qkuO$(wSymZ{)6lw*mYKCk300GcD2giL8PDasAKd*eWpk{%%LNDjDeaS_{D0 zA^lNHdhNZUe7Pfg0qd>dh3h;g<6VEkY1mjJ?I+?( zZj`&Fjc0jzqHe8P=oI%~=?KcNo~Mf&Pp6l43-sa)fdTfS)`Ot$xs}1T>MFKwf zgD$KTQC#Iu@qQMbIi&>5Z$~m84FYdf)X{rho#(b6@$U!&T3&IWo{uaHOX-eHN-P-7 z3ejb5Yc{qzIDK)oqkPD_`10muL^WSc5h6!d!vw&Eec417Y@es!4yOjo1aLQ*ICuSh z1|bH=*-WCuU4Zg}75WR9(bNLe(?5FR!pW>ZuL=t|MCb8Lm zuks3G8YBrDb2i%-van#Yt<0M@AWafne4UP5Vi>V-*cSM=FbE9;XaQ|srSnbWl;Zit zrVL-1rCBLXi64VHfg1xlx$qg4djh4qvjM^dEy!%f2k>Khs5AS_RvOq|56NMrq6O2* zw6ZAnk360a57G-uSbt`7xd1Taz-+(lPQZBv`hPYH?=}w;M186d%Ht$F*Rl_dfuBk= z;(Ff3?`=E(5A2?RZv<$Q`uf~F2*$`Y@ALR%5!~!eh4PJsat3Y%*^8@+zUe``l`JGH z76V}cQ&L;_&AUkafwSw0pDbIrO}cOoJ|MOTK1qg+J+$FE=xFDRMt~n4 zgFfY@^x#q1e z4`P1}yPC@_o9Y&57p;{C-wWb;jTpsZK2sd&cqmKls3icEmYvTD5&IBcNAVW`}hp<=`MU?jcn z_jfW@V2=)A2{FKbWOl$o7%0Usn5aJ>-?Zt+uL3j?E?{&xZI)U5_g-$HXi}e8ddX6# zh>#V`>tT3@g0Lm)#VI0);RVl}FzjhQMW;5m?TUX0*^oW^ApQc=!p7fIbTLa(>{ zw*^k|O!m}{QYzwrWum!0uLYc74qGfF7z6}(mVsof0wslx)mO}MyQr_4wu&lPgnrpO zuHPG!S@nQnNAS3q%!lqrk$qsXbYto^~~zN(JkCM}O7JZmKiT}O9-;!scvhmYv$ zZxOOE_#obI`trlIo!&L*cinm%M+2G#9<}BP!QE=x(HyJF&P7oNf(o1@^ohP0vbrXZ zJzNyWHLia-c=v@Iiy%J71cGMzSJv5N1WuT|sgY8XH;+h|{FM;?06Dz%f799V=hbFV zh~V%^;x$Jk6}k!Zku!Xbke}qL5L9xLc)@G7;~n7-7xD{TqoiDW7_ON4eK-PnibIMq zmnB1IoM};{0&CS?uPIN#OU!vVmoG1MmTE;sZG&nM<+HvuyC)eXBfSu!FM@WGztIO@ zsFE>04*eb<_shU#x)MXwpO;Xm$?(;cCLxsi1kNW`;2(8*mC^My?#IIm`<+-bt98U< z-OEFWaK~@$QV0gf`SsspDz~5HZ{lMU-$^s6qP3~_F+-o^Y$jhxb+h+@|MdLGN=^faUm-bA^+q8XB#9T^po)hWuY4HnWnlv7L*&GsNP`O*>LIsYr zpG_(Cs%3L7J1qPji}(P)Av}Q<7 z5o#d4X5*O?KWUptP|xgI#bly~o@oO*_}Q6DpqIl{AJiL4IUkf)*sldQ5?_B*PyK!`@F52x^rSVI%!wBbGz^2n#uOtM);?|r zp``K<-s6ND;frE)mej$yZgLQuJ5|#0VD8GNlu(I7WB36|ga1cMaozuJNCN-5N2lfY z3MOR(qa5qfZvuBy(5O?7*yWu5tauqEvK2Xt~Ut32=n_W z&SXCJ)i>g|cf*jdiFNE~zjMjk5@nxzkX-$Uw?;JI!VM3QwQ7M6e{I(;T(g~GjhvhP zf|GnJTZJ_Bw=-v4MPyo=@wnZFN=wSL!RN&Zx^d;qAta)xn z7>k{02@gKMln5!2&P|kQbW$w5ur>wuDcNZx<%?J$gDD6Dmw5+Z$y2jCb_mXn&RGv; zUl!`L>ruYf!s8@{(O?7*rx&ZeDn1K-o&afA`3Ss0^eGj7zrd%UzuVXpfD^(+G}GhI z5e+^{oaNY|Y95aH1he{Xn4dl(LZa_heBSxdzNPEV1R&5>W8Co#1zPoEy|z_lwr?{w znRqfEZP&0A9lJMxb2=uytsZxYZV6E%_;!)EWckljK6QJY{((<5(7}Q&YvZpy0G+S$ zd-7_lsBTwPO4x(ZVjPNNau7vl=v zzR}rwh*d<91TWHS*I1XZgmzPXNzIE=c?lO`T3BXbP(c-dB$BD_ZVWzB7-0||o$VX9 zZj{k3uhDB49tASn4E>7jdtmGDxqyVG0R(AVSbr`>!m`_A5EXCooO9f!NpQ3mW~?1u zN?4$Uy39#aUg!fL3t2ONIb?nR96V1%S-du&BRn5*cwy|$5#6Qp_3P`p#r)gYvsBW+ zO;=ObL!cLh`*Z7OX)t(iYagN!t0D(uT^D4v^MA*Ps2nPfNDU0aUKT^_Y}FEwe{|jJ zFp{rFlk(tcVhM)cQezroxn`^+e?S`gf2K^{R-@FehNL`1L9}!V1x2o^?)zIfW#V`Z z>^5{sWA1NhySKg~`-(eBw!Dxqpd4U3L=@m%H&+5IK0+RwgQ8ECTfp{GkVQhzEITAY z3ZY8YO9l!=QoMZmk_M~s_u;rc!r5}^Yti52=87OnWe+fLvOpC`qG7a?xzmgZyb1>R$7el`CG*Fp<*U3vj8tSV(xLL;^Btw#eNzn454A{>$}n5bg$L}ZBEUNp zn5J*{?kw+C8gjP9)QEDH11rlryRJ!eO00NH_ZGgCM0iu+eY6kHMOO%f%$L!#-`&NB z?4gDTf7ugjv~C0S1%tHCOO0c|RKTybIt^CIw)taI#Po{rRP_*hB5dtp8#QP)VZ;bc z3%}dD4@`U_@R=>XObqNi=l4Nn%rqqXjFLM-Au*!%45$T3PV!;>me755?bD878MZ;E z|J9GJ;hC1rz^h$0CSxW*0Z|ip1FURxIM|5-Kl~=SF`6CWs@)uXHx>-_xoZC3(*n>6 zU5f#ZG>C1er)4aA3OL5~n9Mt4vRTNj&qx6k`)mgSklUFX?pZrMhhe|KdM1-}dg$u^ zc}dH zA)xfy0JU+sNuH>0)d6k;)nBK33zUl^B)9KV9UW6=X3KR^otBqyGDb507Ki&TubFwxWUMM0G{F zZ6At!ej0b~>M2oSAl^T}I(QHX`Ubga+WXjclZXtRe zN*9O08*(eT92U8FZm!S+oR_$bc))=a%3n)ev577>EEOROzb>n;h0f5C0uR*^8vyue z=NMqPN^}!x0xJ4jq?;D`5Ae=f1MDCO=U#N<4ox9y)$R4knxv$jBf2u8*Vx*3U0Y%Sw!0!t# zk$M&{0D4u*%~I>kE2c%?@&q)W)RVlaYl8#Q-lEgie24LxI-(X^LpRS6sZQqf8grt1 zz8mmAbqZB$jO`u^?CPB9+f$#l38N-=DFa*#(C+^Slt&tal$_IDzy}J|&DGCjT=^IO z+K?x@J9YbH+!i`{Tl7L}_O)BRAz()68qw`~+lpMChPzMylA`#&U0I#l3X^k%jQb13 z?Vlg@YMKb0a{(wc9X|lE6Y(zWp*BM{N((gQ6y%25M`HTZn$s$S9uRObQ~x@R^Xp9S z62`34mu|Qyxd00!K<9+?ijVq?=wIJ4pE8Qzz??VsTE&}|!Yvf3xpdyh4(Ch3f$+cI z^zE`g73_mZv1*zJ!uN-TxKnc0t+Sp@*2(w)MC%u$#F5d{rY!ekUaKJSzL`RiCu?_&Y74Nu!2fB+Y8 zwrV%X`wV*TzBFReuD+0-4$v-=0Iqnf!FLoI<_zB=;hA4vl9cQNP{RHDe17kHP?XAw zpHF*bN)Y=8dBD|i9u=u$AgTtk0rhdtWc`lnj7U)asQ}GqU~mw4MsUjD1f~YvAbQ_B z1zg3Fb9+utbT+1Pu^^OOiOl&cz|9Us5Q^KQN1O?_W=M z?N_UVxkE$EzzCA1>EZLr8x(*!;P0iQ8^vaFxPr=o+(2?Mq2KclOAv)BdHnx3;_VP9 zSzw6+kpyL?I4|=MEhsq5$R7&)dn8ywm?f?DA=|t2;@fbF`Z4{{FsF@b)+tuFzGuqS zxY+waYy|{w`*5*KKYpWbdcZn8zZBTph&Kh4%?%dyY^Q^<^N}C;OQY7+_>NWyU3^QSv|Le z{0rzkWG=Kgqt2XzFq#|D__!L|K9u<5(b{FU(hC4TK)}Bv$$eNGOS?vBl^)uPCqq^u zWqF;8Vc~uQ@rt(j1paD`+&iqd->hy~DG#n{4z+`^0s#!w z?-5{nR8dr=DFg%p3LXU!dFu_Zfkc1v#i_ZM;0*&XBF~E+7|HorSO>&c3yqeuvq0+w zc@bGNQ5Mo*f}cK+VCi{gM6CRZ9*8Qdi_+jjl;984L;|o;4kbK*zz9PWN5=D|J7^)S z=MfDq5WYVU4VkIBAZz}?4*u!DNuUL1^9TgVU07F}leZ>M<~=t6(75_TU<5tyWGPh1h><*Q6o-LQ77t5@Oi zXPWxE8dg5OA*Ca{z6pRNV0eZTyRTI&7iTUG-n!ju=;9~RB;3o|DYrms`FYmGbQO~t z2{k)gu^p9{1fZD(ZXe(+sW$XJ8%n8N+95SYe)_ju!;V(n+DpKbG8ay_E7i}Zw$Mo6 zdjIp%IY1masCh**cGcOWy3@%?ThUJrJOg$6(mYUi7d(hWWogwZn)*&O@7^l)@8Jcy znK#G3RcN86Y-1Qk05UbW6ls&${tre-I44kK1d(IsI zB+vDm|NnSC_a#vpn@XY!D17)1S#>8Al!7&w*pU!@jeB$n?$neho;GN)-V+7&JjMXZo*_VT?mSBI86ANc$qkp+ zrlhN(KE{M4WYFC}Oh{rDmjy=tc*Qsud9iJfEGx{}fjJXJkq(`Tpd1WizD6Ya9<7&0 z?a)T3YRGLpBs1rY>W|S9H7K;N3?0|$?#HQhS<5tFvb$YE%0LB8;BZ_sf`YQ@RY&Z& zXw5>k*FyvO?c&+C+mLwNk6uZbZGP?#^@269ZzyUrVQ1dg-Z0_q1SrC?9K$Vv)mp9} zuFYZUy{I=rJ8fAGpBK_Li2gGNGH6ewfSC(Lwr|ED$WvA`8+mWjb(+ zGAJd1C)X~=uWgrYzhJa7K{E(Pa~19%&%eL`^6NHta3KEp>rpJ!ZjbK-(lZUramVB>rB-VO<$;m|{Yj<6Rp`w~lqEY`Y3<92nuF9^Q+f%hE;f z<482Kj-@)y_~cf=6CUW2Wb>Pddok=K5l77K)<2H87@UC+Cz9*-ij7OP!<7mBe;U?E z){d5v*;I*BNn8TN7#Zvh*PH_OfNY6Lf!ymA!S)r|3F?V6szgI3aB$cHja>i~_2N_N z_G(Qs!MBYR#fSJsRWQ$d0=W9y#kPUFfh}R%6ot_vv)JCv!Q~f&@$kKDi11p{eF`x% zw`ofpG`w-%KpmaAMjfXkbe&Zy#812yXn_{X!hZ2E&rD(Ry!-m$p%m|FE0)xTsC@e1-sEtcTTw6-;`JUgrRDyv1%`22j zHcL@(m8j>a{iX8H4_ZJYCH;+MnXbPkUPC^Tcx6R1f59D0+QO=-x7DsttF^c#cg!9= znmBYAq#Y%EiZERCHlnn+l8%z~PynLdYg4woY$;wUx@0ai z@SimdQplP=-zdo7Zbo9={8n?@>SYYT`v*Qf)Cmcmz0YX|iQ4N-)~VFsizuF(eq&A` zkq`8LEy&+`&R?U^d|V#6{DV9V3t%3<+u+CR^~jeIo~7S|LTO%BV`p5v0)O-R_^@5y zO)Wx*b4*jNbgnRipoi*t3cQ*xbMq>{{J`nq`nsnp{+)M8WLwgMp~G`nhh z_bd#0aersC#(z8k)>Bojx4SBn5X|cmJ-VO9_ZsgIQDbDFUv7Xi!zC#Xv+6nxJKm$N z7JE`M7U9{oku8;=qMUZea{%Yk8104TV`8!|H*GqS8nCnpnVJYTds=4YeF$?-Z%15~ zSNVE8e0uX5ag(J?HX6zN-Y2gERtI*E?Fz7nGCts;x)`g^<&wxX8=Pc>drXQK;jmS} z)wy9&5QS(sik!O4Ll8`}4KfXoVAkJh%vmT^mAzk|UOzAeMu8l>c)Sf!NH~%A#3=(v zgy5>B<<(~g0fW=2=bS*CNPXr@;DT!R`9C;i(64wstNN%_{joJ3n%AxV*<@?tP8AihU;?=6mkmzO}&H0eC)m8mRoN9AT38F$D6 z^+sPLa?!`GT{oDV_j=TTt~9_i%$$~K(l!WWfNu4d+oX`@be&JDt}~P}rt|=ma{x>M zh(j*`?}PuoC6~17-wCQau!^+B=zH>JUI!P-NgwZD*HXuNa<+exrr6|SBdG-PAKW>3=*YzkdnzlWi-v@`eZ<2QnS5i;}uxwvg!j)~nI8<7c zW^Uk7JXUdbbpirDpit5)A3xV~C&YWT51PjWXgSP_4ua^$OB;wy9H{OqTOi=^xG4yJ za>%|uBU#$7(g)h}$V?j&#Tg_Om@s4Ac0p+v-M)=dCMo<#hz>`4iDYCvk&D?z>@C1Q>f;SllY8j5p7=y+yHXA|pUFSG z*!K_=K4i|0*M@kFO2rwjk`={JNwTD|y+h?Uc}UZ|DVwM%0p{_0Fd5i<<=>q7P&Dc# z!FG2zKsMF3$J~0#Y!fRxJDBIkQ!UYBCzoZbp{_ZN7bq-_)t^}q=C*(Ka4`w$eIHx8 zM7{Z#2-G&#ki9PY^?F{h!$&Et7 zZ>%x-<;nZ_X~AS(x%>~Be*AF2949U*;C2hRKqPw=z9IroxY7LtXHORz{+s1)GSXc6BBxwwlEbD>#U8`xf`Ec4 zo7_L7oY7Llr0u`O`vHoLAX%di!Z`WmZt!GLAv*oYgYPFA7FiNX#&<&rZa8XXJwIZc zv5-J9ZJ%?dx`}ED(iyO@+5|_*Kq8P@Nu1#&K_B2so{XJTpB*=%_lycjyhU;Q(XXVw zvgu{C84N=gqnO}PD}Bu=TG?Wm{v)Dd3z$$nSeAqi(V?BZ>{O2C>*1cJ0eefO^hU&%V*f+=Za9)Vi!G zlOmNxQ<*C+?LdqZ4v0&T^f5u&0>agEsvnpaY6aHSUpT)y<}4>D!0=+vXUKe6hw>P$ z--9YvUkzkDqQ?dv;891WA7-EsQuIupWNdLQyI3y8w~>l8E74@YO}ov0^ZS%gD?l*B zPw1CHmCgqJAa685QBG1Bd#}2LOO%3h);TRdFupOe;T~O40&uXtdIn0(46PSm~oF@@E=2ZkH$6UaF>^ z&%rx5BG5NXjmJec+xu4@`@$htQ?J&G75b6c8j#XeG2cBy1P9>*ENOIKR0I_JD5-K_ z6kI{o)O+oriXsYHb3$_W|C{)c^#9v{Gp8RA4s}0W;QX}Nzk@dP!?Wj~0*`K>|3Z9G z>V3NPaakFR( z&)m&c?A1)Zf}QuZkHg6SR_Vf*3HN1*UnHTATB@ulj8ubkK2jE7S=u%kdis2|`>lcL z%CUT)ebAB??JNHdUmg?@2PpVp1IC!2eZXuz-kkZ}c1n>~p|9FR~`fY{*+D`V!J5>3CB<~F+3^tSKu$;d|e#C-%!Tpa0|cf!lPLWIoc`iM1nUB#Ifph;4c?G49%%;<=AQN z$&35~HL}k@&_|A39RQOhoaFP7x@CB}FxyTE2v#r2k#E)Q;V=50&M~vmT=OSj`cURv zr$EYkbu*i3lZ;I7DER?AEfc zo{~QyT1I`Nm;yiDBM10dG0pq5bOSbHU!9cebvSvdlXw&yvuHfD2lABzEQ2)g!Y`)G z9@-)rAE{H|zNLB;v4gbohldrhAKs+xUJp}43D#vPh}Qz{dN)U3&VBOF%{uW-Qu9I zR9l|}KOdjEaqq4t2qJ)S2#|ua6n!_-PeYlFp?OLMj$VyIs_oQy8VL!73v05O`mo|T zz8<)`dYjEJVxmxm<@yJBD?VH44Jg#ezgO-J`1u;*7xW_eHIb^d7(EXg=)t+puhK=; zgMd3ql(;ief=?UO_Yp3d4c{yBD)B{o^$-`J?r7Y}AXIon44Qh$Aq2rw*zx9Kc8*gm ze6?Cl7^t%~61r|*OVe%raz{)58;xVOj3s!Psfb2k8IczSj8wfzE%p)BYVl|0Y?i8{ z6wGs6r~KuNqP<}1DB$a6V35LB^l-q1uYr$^E!WCG!#;rPF?8-8jJnT%>D+s7Z$LvE3OA=d&3iaVLr;% zZ84GqLI$Ihp{Z2bp1L5+2HE>a%l`K&Yx>3zyZ(-<{{qDm1<2fSJw>M3E?+Rh-wUVUnfCy#Fc zhG@1s?lPkfD%D<9Pw$_hn9bfdu>oO`R|B^NkK_5QH~>(1+O7XTH1QqdhL5B`al(_F z61jZW!W&#&;P>QOi~g8kkE|}kh(cS5&xV?7(t;bPJr__%i_saP{dueHkT8!c)hXt9 zajOnfb}SViAZ%ctrzo(W93EBf_L|?&8P7Ok;(_CP2JfJXtjHI9!ig;bSc9+zP8#8T z46I1iOOt%ajpd~|xr~pC0Nn_rMh69EhVunm!LX>bsaEPRyO8P`C_gsYA-8h|0EG{= zK8@%BonfH4fIdSz5pp5N`B~f#s`$9EA=#)@%X8^yHpaGDoTPi2g_A&yW2<{iD$P3j zodnU9(5N>!CsMjl@#g7wT(J*~YQE>Kbe7z=ufu*S=L5kW{62OK9``WP48!x3qX`AxJfvna>;=H z-Nhti{VM7PIX#^v^dKzXaWN%aecvxxfAOo(9$2q+j;IsN>qMNYG|`A#!nRmhX<+-s z1bmTR!u%qi7Z%&tW+VKHdUY;;tNvBK`x{e$9Gj^$=p@mv?Y=g^KCp5eBfy2S6C7J` zVcUbzqB08C-IJ{CK^_qOg|KvU)j6JQq304JkvQU@`^rW7UJTw^hvQ@XQu2r&WU@WV z!&#RPmnu4D>dSjX_!2c7-f@v#(zBKt6p7{h$El{oD(q`yGp`Q`A z;FF+UHbzrQhE1d$QJ^Ky(=EI~+3_iL``)5uc0nnE5Dv*5tkk!`2)4-_@={nOAmss< zxhEs8sj1zh2vDq_P+7t7kd^H1k3IDwB?D)Sp5o-`<1Yv2_{D(1%(7@F20C;YN~rEM zpBpQnW+(t)Y?tGe+y@TMkkNx^}?qib;< zC^gK{)~dj}2o!OE4@}oJXALhZ<9B>35=wsrPZa2dG&HO@Jh2`%9F}+z6Ynf4D=5)# zNFg$R0ToZD&hG(}nWAvV=hNR-)7nZWyci*$%@e9Q#To+9e){ItjB)tLKq-IP@qwgu zP6gQwPKM+6ALw(y=p-0aIR8KX*qXExzK|bOOY;{(Kl>NsE{0ZRU+{S!kSQfdy)+l1 zrW+3PeVlDqq7x4>Q6Op`*^6w>uA&wAD^3uQ^BEu*R##n`li>N}L(vs#M!of|1-Lxj zSf@KXVf9w`DCoqkqr9$_hN|LgBJm*v&MBRhr!6rM;nLx2Bwwio_IOjwId_%jokb$B zFCY)DaG-QFQhy}E+_EU=^g3TGKpq?}&v0kpMP|Jg;NXdo?#06ZePI{yQnk~>fTXsH z2jHb+O6}363u>+rzl9{(52ye-qahQGV;5xxS*9}>bXvkeh=x)I&KktU+1sy`DMd0E z{aTlt^k-xPzApv zn9~vB0o@Y#OQO!_WB(H~kJ#kAs}c#%%5A!d*S`cFVw=Ysi7m(Q8)#T{E`Tg3@>jlB zkFU+j;|^wHstG?)S=DxY^MYPHoevMkQxQ%?5q8Ve&?s1nep2=neIz&g%O(og0X*dM6)03q={;j{>HRGhYJO0Sr8h%LmvPL^cM& zE?Ts2Sh(ue0&x=D+HwoQ1heA#H_b+^mkIGP>J9r{Cl-BgpZeBHI*84Uor5Tn4?-;i zUt$2UXrMwe&|Hk6H~=>J!F_A^0Qadgf?2$mGs}EH zis5yXm}XyY9e^zvuyBOsjM%O=ld0ec-B=BhPKnz9j*I^q zK=rVC7vuq@hf!g3qe(0$Qy}`Ky#AY!H`Iw;+d*RV>0fa*IJ7_nn&bwcYkPg3=x2Gl z0JgCXEaDUFLyi}C?g-oAGRZOh9lJnRrG^}NxE9>u1`T9{gAfGIg}sLFb>$fIHVFP> zR=aK6-69C>irP(5vD}6mpt=ebcrxU=-{Vl+IQ4Q2v#^*#kKfL{>5`4G z1I02T7gdR~D}Hd^8oIsM;FIW1TOZ<`T8@j%{c_FpOK`pbP=9RQsh5aPuU2|xtwGmd zksP%4;*Rn~$viuQ<>uX_CvQF@Ippt8JM*5nQ~$retCBihTJwzr#z%w-TO1?Bqs3LZ z3d8?)ru>lqA3~FeFWyBVWmK)G0EWci=2^Jg>NHMf?}Bzc_>RZZ>$iR2vKDXcyqq&A z-c2GBS|bV%;|w5sEo`Ykyp$g z#ZhHZR(Tq}Hpi`EJnx-f*e_o(9Gkl{1h6-vd=8u&q+fcumKrJc2}xX=tzj9pR`28! zjIAt=Ed3l?i*BBC_XM&@d%iqw7)=mY*)1Rl1n*l{pye92FAeE+ph;Rv6dXJetrzYN z?5o)V&JPTSjDo0}2g#*&QIr%*8GAtQ9_jR20G*fpkQ)MnmVQ4pJUcyaG`jEgeuFH~(Te{c}MrOzjNSjypq-qAUlA|4k_D(=voaKN^k>#CcT^`0;C4WZ*!O zq)0iTE2Tx~(aKh+YlE_imx*SZnNe)-V4;_63&5eI+vwR1>n;Z`m!b&CzWooP0I=l+ zhC~01MQqHa3S0i3(eMjD`QtWM$w^e?wwdIuwaA_Ht=+V~{1 z@F^}(?SRWMITUr#rl-6`u4)gZz0qh|8=(>cI-ba+1iM5dfx>4iY$;Yy%3x{>1OUB# zc~J#4F*t%ejYxEGf5o}iFY|@>F4{??m*2vmdWfkx-m?U4 zJ@H>(6hrVL333?6StTZGYR%%eKi%+BW5IxM79unn!^YFcDGN7mY?HBs1OH+^KSb)* zuKUK_yiS$$gi zEizy0EWgL%318Vmfb3!eU#tk4m&$)98p?V2reUj|(f>5@tq|g+AZC<;WStPY6F(s8 z5v*Wx2_jlbGoytvIcdf4b<95l$X0Vk-y2$%j#xg4lr&6yDqkb$exd0Frs6zXjv)1o zO(JOckx{rnDSvW(4BR!K4%}HxtY2H1Mf!~!9x)oj170nNLZEJlg7&DVwc1%dX3sTS zvd4HtvuxPR*T7j1<-He*S2_wCDvl%&#ar}jfGopN>x|_Zj-(Blz7J+o7`NqtNro82 z!HWMM3)KSGklr@p0(d};9WXDSU#Bi9x=ks>UT7kRwu*6C{Wo z&H+`K!W;L9XU_$Do&t7AfPcsjN&(YOpTDl=a;KQVF72ug|0(Ol*}6MeA{R!gPoQfq zh)uZe8es>j^h3+=nw9wuE(IIv&|jrNz(RnN)3`}W6HA~j;&}(a;5ZI)4Gu8`lpSYh zfSCY)2ucE`E`fAzhEY7nCMp!@3!2=ygcBNAH#M&iRNHC_Pn7NF?rFFdlbI!wKxEjI z8HA2t3v&t%s;)y6FAIZar|Cl9BLzfX4TpUFBJ|t;UAd90!6Aje+q*)Gp_pF<4%ZJD z$+MCq2sUV)aO zdguhs!9(BLK8?!ZTf`M;fT%6;t;+p8et-^$cpdH$2zR-z0TdHOwt`eoAS3z`7Yv`f zNjg9oekkv~bW-fTfRFtdi>e#XVy z1|ss4E_>JIS&@dIW*}s_H^3|=QM3k_Z}D)Oh9w|jwa=k!I^zNmNC9*7>Jz+NRsQ4Z zKRo%Gg-*91e#631a)e@i74hy8EjJDl)U+VIcWxh zNAt3O=PbfX3ChxJ47WUK9OEJ$dWakSF@_c_Afg9AKZGvF_t*42_;|PU+U#d)h-nW%W#=i0b5p zdQfxG$0uMdE5eR)i8Z(V9m92#;|x^GLYwZ7;&-v)8=d>IXfaR46EP>ar|2*FlPaUD z%z87|Gs|ZKdcOpYn-E@Q45v3gvv(i)_v;izO;Dfso9lkXKvdl7-9G>db~R@U%j>*S z+b7}&IdT-K*5&4_JKJ_U4@iiozxadto|OdAXxIfA(GmlT(3HcIIO@J@JFh;POupIO3B7eQg+vdre-o++=_l1_3{`N&=35qbxUHg5~HJa^H z7AHMTZ2icR-5QS41n_xaaW5+U61_h+EI}}^vW>0La(l^=dUO5&=KKK8ga1>~hO|$C zBVBL!nUG%9!9o_pZ@Q4w{17LKX_f^JUqH^3!`1TZH;BSa&Z@>jj(el}?)J~BaVK7Y z^q`faPWB`e1LV><{k8Iw!g`CweSoTccu!9Ovct00?qt5KA-!bpN8><#mI)+fc&Bbt z7s|ds1Qtx3&v+40A-jG1p!e~nm#L`!Tdsc8=I)J_49WC!xniQtY;wZ@z#^+r8{0ul zwt)(0d#7mZsg!iIsFGP)H^+hwANVeV%JsHVI;m6vRQ+p*c?P@_P$DOz3RJ;SaVvcz zsN%9@SR`j|Oq~;bBjiuESN@o&Vh{3%vSFv!W4=Mx1ly9{94C7%H(D zX1{w)n%zjmV(bKbLY3UfX637&M2+ddHJP=EPo0D=k(6}%H@CEoGv%`gY~yMMKbIw! ze-Kz$H}9BiHU?~oWN~VKu#-G&-Mmynn5fz_WXcp5lz&+UW7zYGz-!n+rc1|A;ccBL#; zN!j=CGD1!Y)2Eo@=3#$aQ39*~+{WyCw%9A|cLk_Jq_jf0o=83Y|H+kf0cY?pU=5}A zV4MZMs%&8}e}3**CXhJ3GXw2F!4sp$voe; zkB@5d{bzAS1PzYw?O6?h@ekd&RiEe|uUe$m{E^(Q$oTnw_IG{Wq3zTRz;k*yPf|2} za!*x&%ZAB7>-}r$0}C1^SUuHXR$@G}r}lu4%)Yc{I)H`{sWc70 zS!CNY>-~L@ZpNW{r`}qK=D8}BD=4ac{3hZX*w*mn{|(MmZqye9`T~B* zwlqFxuoL>tfA1Bmfr|>?dHK{YGF~bJ7ClR5e%MC2Fdp+HF0fpCfE$y`lW&^ z>&Ayx+K2COc^;{F`4g8(pTN!~#ok;=n2BAhRtm$>!c3T5%7-Q=CO1DICJ=6Re~Ih~ z?q3iyFSb=YmY=YyfWJigIWrNuJ%)fg8Yrjv>HxIEdhZmhwpT{H#TO_7<6LRnykRmb zM^JIFG&E`^5jMPj?I@oe?b*;x4UB;gF*O?0g0bq=+%$*NZ^&QfNwyB60Cz_n1``o) zL(AY|wyk#g&8a1jKC;>M6e%Nlr12$Hyqn*kW(sj>20)D&!DcJ88D(-25$zmBTZqA} z#cqzM@=gVB=ZJq+1ieXCu1|A8`TfF)8Z5upF5gUb+$VV^(uJvXl?outRgz@#w#3mhqyBzexGy=iuuP<_WSi>D>@>;S}OcNBT5&} znWVN=#_`7X*LV-r*CEGQ6wU_%7M< zBj=^+9|E~W;3$G#Z2-<3mTUzWz}tBWE&~T~vwTjh#!;*$Eo_;-%6j6JK2mW}ahr%U$+lv)k!DntKa@AH~mD{%yMDG`*<*!E|f9Y>#FRfl}_|THCbi=(WP%`%$K^>}suetY$ z*1~Lv`_}kaa9W&of8*vvp_DRpdw}PqgNR)z;k56v-KF1%)V@zq9(Eh}O7gU%4Oodc zF!4NR2V0=aBeA+{jqeab6bz;$jOP(4;2!&>R;5JXLs>{ug zf7FfA(s^+QxCfmio;hIH)$clE$!hu1{%1mxv60AVe$W5E=iBue|6^U=mR;XsHJA~3 zD0nxZI%k9wkbKY`vC$ZPK-h9+^|FB&`>AR-VlnE%!Gbug&No8gZS6i&hR2oZA>o)H zd2SJ$z=1Bh(V33;W%V==mfzstn;|_7-b)&I39y?xYbmu&50Ah&*fDjGw%1h+C zE(OZQ^*EtnEy1v{rnK4|SkVkjc;%jS#8rwC1XQWH+t5E}Mn%j5w&3S3nW%E;SNj5e z>1i3#^V`r})V-dZfIMk+7*VdMx)0m_<%8SS`fYK+LBF7m6|(0L=2RpXKu12ut|fk~ z7l9UZ&>iGdQ5XvQ1JsJ}F>ctYvW2snvr}Tf${GYyr<2HZfi_)_)T$i*oBI~7<`X?^ z6<0kW-!DaTz?8sc!(kzct3gOBGq#S9 zcYXc7!dx)IcS1^S@DqAnRyK(HD*(RPXi+^}WyO`+7z|Edx}w{(JiDDk3tW0f3zz3I!^Eu zvD$nI(QPUptN>GR;RX^AdpraCubO1K6MmbGv#QC86ZWHjA(~poW2j*s9{Npl3>c$V z)#u1=O8QiREl2eT2~F7(WYUTFh)hZP9;ce2FpRcZ!~$Icx)m)ohyy>nj9IWY;33$* zdG7%vhN50lL*&P2X8+$kr9Wv%SGfzv5iF|s4tg8WI5J$g@Rv*HjCqWNYd8Gc-(=7# zv9SN(>sel;Y-6f_?zO|`;b#G7>aWd;B|u6r8>~5E&qO^eEKLu`He8t)dL#1Irjv(Gx4 ze1ax5P7-5~scWP_$zvovbCQjNM_LhxRbhuHI8iLS<*hTlB|DPms2C!`d?R{M4*@F@AkryarZ=z0lXlP9*0?I%VKvh^>Ecym`w*>uu0gLB!O+yHelHqg z<&^*#z!@kd<0Tb1Ex<0e71niej!+b^of z?8A%OH$B;tgG=b-N%T0b7e^PD|BvNf&#NivZ7$^cH;osZe-be9tk2dplL7U6HKCvW)vaXA3s}iu3ZxM*93*S00?JM(CA`kYP8C--3 zd}hmNW>HTi*0g8QLME6UYfe|3Xk)yUx<5TJwytbqvXJ2!EkL|=hG`5syJjw~Fg(MAM)e1m$ zKT5Z2Tsr4Hre6^3mE7YaHCS$R^cQAB2?^%#tO*W$FFw=_te*SNz&+zLpC--cLpw;Ls#jrl8$q(*(&mo@m;BW(al zYwk9*>PreEUhnAt-aZZ!3Ri{>_BEpUDC28O5j#S18nkL%y(dD~_o;w4n(v0fqzEU>sBi1LrN3 z;TBv3k-i;)JZ3uc2FnIQ@13JaKW@MGqF z_JG+0i*5<8%s>m(`_9YA$UX;Q8|PpHt3w~%sRp%CtAcixVi9Gk_Nzu z@VbMwwNCh2tDa@}ekJGqjT?;hzEWOl*a($DZ8wJhdA(3mdoiRzHbJS1I%r~Bq~|~e zL=8Q+olr6sZpMg?zGUsU4oNr-vD+g&%j-&6DN=cA!E3L*=;XULc}u8CBxRP zi(n|e&>~9W-Dot*7im$3EkP+L(CyxS1CX|x$pdAGw4+j}0gkv&C9d#$3k1TtK~dWWRXBA8m}?{p zG!vNb?rbB0Dg$It%b4S!oMOpCA^4Qq^C7n5n820lbsV$&!(>Qj&e`Qf()RI#T(#7I zl==$O;BDD)CL#Qv)ezj07%+@1J;B-QMXSN%;Zn|T z{8j7Yi*6anDdcLFak!omK&JdgG7MTGa)sJ&QHTZ=hFp2jar}?w4Mv%_BDJQbGf~w zxJ4k|elQGHTRR40)yg=4N;7a%$E<&H&kiOYyySr2+Lzpl%UeBpnB60@FLaaA$M+BG zw5U80A}t2|yBeR}Dn^0kPQqnQjH-vPx!lLbAGBh=q2~r;75a*9A)x-yioh>om;gIg ze?0^x&eA`Q&Rfe(D2k#VL_tPSl5@^<~keB-CA8s~dy=IF~GJ*@fI39@to8TOCD!;g558LKKJA-&S*0$>y*KfP8pILg(k z{{?y=urS*u9iHpO3mBMUwEoluFN|y}^sh6{uC?u>f;)&uJ8`^{K=wruFX3-P%B6K8tRUvo_+Aymmfr0w1h3 ziktfuP8eTQ{1Arikn^#c5?-S^_!#Hy4R*?CizYq>=E+{0XBUDGXDdBmso_}?0Asxy z6)_y9#e5$}B#%mkkK zq7wV7OY7nHLIYV~A!xo8+qge8pa>&a{l01q_#5ZHG^J7&@mXogO)uN}>8_}Ta08rV zYQnvoC@XIl2}s+#B_9`;yqaXre(V)huho`7;=RNNo83b1fXv2m>0ITQzk5M#u^vG< zT6~GHurTcHUE?%EBMSRF{EXI+{9YqPR0pQo)cE<3)_wJjvTVPv2xJ;d9R~$eJ4C=3 z2I8k4bbj+$DPD11HmdmvxDxjC{vBKQJCnFkK&~~bXa;OtrdVNN$`?I~9$k1F7l*Cs zce*RCUovc8l%LcZXz_gz9Il6v&dZ)4h|sj2tg;IjURA=NBi5k?4Ek)vrDOGNa=ea; ztXT7>$ljcbrzpul?Cd9Z!#$n<1;4+o9KYbZ;}aLX2O>^EcmiNn;edafti!-B5PKoX z`Lv{Y;q$Ym>g=wtM@%xv0&(NamF^RxL!XJt1MH{R0->sawUoOEvH_+a)S4dF_MoxU z-YPch5W=894Hk}2{-Ea%?3tAPrkn&HRgg%7m0>cmB?8UW%fU_f5()bOo!z z`4QTAMx&^1KlwWX`>*koF+dEv8Y->|OvX)kB4xiuJR=M*yD@ z1n=LfsxKeIac-mQ`)h%;WL;Z>ZSZ0%YFMesZ|z=f@B=Uq4#FV4^fR?&zM*FlzVO1t zVFCnPK4gl{vCg1r_g9h!v^a*E=`dMr0Y&#~k-Uu^pSJi!in9m)4yMii^sCv9h2CJ{X9Hz1$(;g#39U6~Hh$Oy zLo_HGnO!Y$#Jqm=rD;GuzcoQ~?ed~DHdmGiGr>uD7ovaH1qg!Bu{TeQXGk!Py$fMv zcw!R<`ni5Ivt3jw;l@Gu$nQPXQ0=N1o zOLGJ{V*<=^FMeA*eP`10t|AuN+gwWtQ=|Bcz~;GHzPVGVLHridv2P=KcoMX_fX9i= zGGDmQd@rCrbdaMQ{4BslFfSBzagW{-1&^p_x?U{IssVW>eh3?yEgi{>YQwFp)-tR8? zsNl-aA;f)xf!0Lm#;j~$7`^9VSJ9S_vK>CE~HQe>K{=8KU*Fcv1lt7z>j8ihlmz-``!18JV%y5o% ziEU(jQ^*3n<2;&|VxOerA2}dOX_R;I1F(?(_zCpUeVcqefA z*IKx?7VTfnSlzHHF!Q-+!J}wCF-~&0wpi#5Ujf>BdQQ>vUIj+YIF0%IU_gs!ex!SJ z%6KJsn+K4+uHGKZA6rpo`qn8*#ERY^71v5;xZ}gCG`X+!>v*n1EX6OjmGD$!<%hVH>M?)@z-_$~r1%(aDSPbUqu*NC5+WL?6+w~T z3yeW2X~b9mukpxP8cyY2gve;f4RB z-|?*8Yb~-5lKAOsb4@UBz}Xk31g^CB%Hlx<10k8J(R>rsFhXd`V3~|S8PBi-E4bNY z*k2eFKZiL&+ zr?rnNnpr;B?Lz#_wSV(!+hB;su`jd$WHHG>y7)zV71Ps^c3pkgM&+#rk#67F5A88h zAaB8}&*}tXpQMcEM~RFsU!Yh%yCu#o&}|3y?KO*Jtk|n*^yszY8~WPgp>wx~c?JMM zK)$~qLjn=4?=JY)B0jS!)y8jZ=;79BpAoQKFljo@Wuht)J9{2 zd;S+*M*9gG#>9|~D+?LC&@1UNY5w7wrYdi_IRHiPxxa`0Z{tS4$Os>^2CAtBf^&(4 zUlWj~8|cV^dHoVT6!Ui%h9gyFqF*8SJBlDjzbVMg?GVnF+fjmjM61vIkg2x7XIp1k zx8(Q9QSL`6RFNd3pT1py@-$>9Z6F>sJrol=(2(wOEjU5J7CwL=8X+_1OI_(%{^BAv zhv&g;SpQX_My6lkqt&zyBI3!*ffp?ZV($#9srW8&_<(2}8HB}ix4ch3ZLy7dN%zk9 zOA=kEUN#X*qJw{<=(mXa_-wEdmK#RwH9ep7GT^N!F-P@?uX!u$s;n60nKOm9UUAKn zuMN|HBMP}i2&PGuGbU(QKrWOhea6eNkzJAs`jFKj90CzkWz2{!bYRc6d}0tkdUmr} z_A!$fcx?bS`*v9vISpVK3kKm6uo3nhslVSa=RkcG0txzEFMZMLiMEn{qd z8&f7r-Wk{4?|QYPn$R;9yysGbxI#y+WZQ5c32;o}Iz5XH9(=8~Im@ zXzi8s^QD5p6}d4Qd{8smJsL`<&|urFn>TSZ(DcFR>B6VS)1hKoXz!z>I&X88o0_?s|8vY><;mAwdY(QraRRSeBt4mbBS`&G{FCBqqF5MEtqv2@%oZ#89bt%^-XM znfLIu8*E^!g3fg!DnK&7*3Rdh-IV*Q$A|t3KBfj&C4qe!^!9D!mbAb83-a6Cp=~f^ zY2A8&ox3LWY4X0<;|21&vO~e%9`UEBC@R$6o)6s2j5iHKQvzm*yvwcg1tg2qc{RX^ z1T*t6x7*Y=gWrR*|DJ6OP64$esBJm~=Dg8l(MX)Ux~AA;ZjylDd0_&1arbqfr@jUh zt0He?9?=7~zbqlZ6<>SJUMQ@vTJ4XhDo)Aeo3%h1(=T|cz}me zVW=PwtI3a^if$M^(vB#9go{3`OLJ}j#-H==OEo=uG;qR2_`fuyQhBID31JqVWwl#}5Q? zT5=hD79H}xF_y`XVh9IiQwi=*)#G)#3qAc)vq|n zCh7Z8&B}P0Co(+pOPno^!-YMnW$&%e1a=epDkf z&+Vm=mPj?WuV30Gl|lPn6p$SZPcYQF+p)jP?C*KdbqPB#krH69eeFOLiXxI{kraY{j%QSvf~!&%mQr)X zLsWr0*ViU-W((_8+F7TdBmq}vHa#nFIX*EEKoXlMS>Q3;`XNsNpqG%t-{X9S1~~~D zh@D&+ooC@z0fWxt=r()x_dYcE`ibyLb>LETQo;VVA|1?j!ZTN`!6<1OvQw{$>MWkj+A0vOu%)szC3>p4vpo?M{GK=r+6k>K&yE99HBD$*;5$ysmngY@o`=4TsjKB z1edH*!#n4x3hvm*WpgHY+@mO8_00j*?)Kw2uKm zU55bGxQAzLVslm};xSfr7SNzH6wllNd>R;uE4}SNaBk%!9==uh9{pR=qu@%mRzrbr zp&e*f8(*s^fKA6QCW6O6S-n*!XNCa)Kl0cH9<{%L__2^x9nu;BGk@d}jH_uIdLyEo zKZ_ARF`A#h=A*NbC1#3yrda?N)CIh?&myU_I+^1lXgYo=oC)#6DyxpCv4(h;3~vaZ zK3AOwF+5%bGeHH*VyqNW4Wt@IQ+NtEQJDfJ?Jq`{5s2{<+X;E*G{!C{FN=;p@Mt`8 zGls9*d|`feJ6-X4u|%IFml*7rK}5e|4qA*C|N%-LQEww6eq{+Wd_5`(JP-zuNf3mLouRc*vJO%8@x)rqq6^dRRR1DrdiR_QQqT z_UnD#V)yZpy&zgMw0p4O#TxNefZkBeQBW|7?n|#h?P|!1)j3cZ8yc#zmeu_m{CFa` z;M^PSUr_p^7m4?oj_K(PVGi0l4%nQAi7BtG7L7K22z1Lhdi6ULd?{|~q23?VWSwuO z$!lbmerGBW-0az0jhgh;6t=OyoxW|IH$)Gi83>R^XH#qfhNDjh*NaFk_8g&s83qT@ z)KoS(kOMJ4Wc_uL<3FIRO3?$MtUo_^yWNLaHE zXnPc;odSCj=FiPqD+L1dS6lg-^-6w+Lju^JT$?)FV#-h0W3TCv2ob0vROzTL*Im}} z+=m=hhfnZfM}DclTfkqwZ7sxc7IpWUggWSVyO8T%{*WLqjjN9?05?}fEp3;sOY=Z1 z4uKvGSZ2Ah-is_Q8OR#9owj@acNgGM0U1@>}_Y0iwUIDShm5 z^LjjCvMsRKn+SO3HGR#j7!K-M_qu0gCJwc6F|Km5O-&=|8zl^<1RsXHGrJz;WvzZ? zm_oKQ|GgEl{HlQ+gw!%0zB*oLz}+C}@@0YiZopmn35fsH`aYax;BDB~Ei*Yby}{00q6uypyjwd?DhBTp@eBM01rywi_(dh zQa$O$erBJ~7cagJ2HfJP_BC)(o)z#4dCJJB1FI5(qI%ZN$-g@uz6BOk@OyA~d+2D` z-L(C(KtP4L*=W-_Npn%~ zPcR%l6xTD=uj_!rTfh5v3{=CBw!jk3OQFYITMG7EH9|E0s|Wx;T6B3*l<5<%s8S`+ zt;r6cyHRF`3>(}R8S{pZ9oQy7-DAuyVh&mfIoie{-^f_9;L<@$IY#MG{Kn8P{D=DE zH>OHgN_-YaQ>cUlw?!9&;sfr5{;LT}MhLj!y zN3nKjHBbxDh zGCsigEZ%W$tVOEsK;m7fL$JUGGR(m*651Unxk#mByg<)qK|<@XszY7qF@Px&e4 z^qVkn$&;n#Ji7n=sn0M&tPbR&q>B!Z6irhKbOX>c2*ljK2Exj8J7f3`$R7l%FCu9! zR@plCgJ~sk1J`zIKRR6n4_|&7QaOPXJM6esT+BrFYGB|x5r9WhYpvUW%5G|mqBcwy z>6zLU4r9>UQUC5uAR`2mjFY}U3Y^v{t;OL=WLX%5Q#XuZrLm3>>P7+{N>BTs3F`}`PUS-O2xyW>;CphuyQL9^h&J{a}W7!c(j&$gsDk%N&*T7PP^6!wY&!i9w$)5~F^`Ri?9rS?LKCdZ#9!O1?tAmL%9A$k!Yy8VF~ zGXT$1aZVV#juO$t&qO5jGks7f!}6~VrWktnQVdv{GMqiKl2-gWI)!{8X>agnxxHQt zo4C+0->*>%N#LP`&>LqsZ4mNIcWF!>UcgW$`}UV3RlG^WosHRDY`y=!;$H{AYDbHg z#2Cw4qvk`9-eE)^$YTQvsOuqJ7=ACw`Zc~lP39HA{OkUQH4Z^e--9YE(~2OIxgULZ z2c?EUna@nGv=zT#Uk;S1fhYHQJBd=(i<#qpiQ!jda()l07uMyJ6D6(l->`+~(6l?aQp4RFB3)WAkKW(AY^l<87h@z=yp+QkhR#y|#{<1uA1uVrm!H&!Q&47Z|mDV58#afn?|-Gh60NU6=rZQX!Cm z-CN9(!<{QN%2DjLYm!m+dN#6vXb!fjkKAi^Gg_u0SB1dkMeh>9M7VF`V{L5gCz8P4 zPHw7H8Xhh#Ei!6I$C0?LAO`Nll5g=~J!{`-#{7N9r@_LTomx2Kt8%2s0b>WTG4Hy5 zgO&q!`g!Qmo7uNqdF^G_x}sy>p-J0)9r!6<`~sJf@%^WIYIg6OqX&xna^uNkgjI$z zSX(NCg*Y}v8;wDIjGg-i(dNrXoL|D*3=ri)Qes&-!EC@zA2bm%xg10k^|8hu34Y*S_~kW~9lwhHm3IgOL^#b_?EKw{uJO+b#j z_;!+QDY_4qj@-xCO>eJ%!~#4WtPN@gKFPa;Ef;@l4ud2^u*0)z*Y1zN!kI$(vP;R@ zR|Hin<^9%nM31bu-E_G&c&TbgAkm>W4J8ORbf|!8NK=bu(1<3AiWmUpZTaZJug+wy zPxuwNzLq>_5fB13$~x8Usv}Yw4H|!vPKz76QeSIss%g2q>+RV25vv3Cd*|B57yj3; z-QYk!_yauX{Y;%C<*SaS7tq!cxf_i);Vb(%Xw6^`=YB3&A+ibamUT5;?g<-Cv1L#c zqUmpSi==UVXT9!$Q*oIj7{`6s1|jV?C0T;3k-d^3b|M;B_;lsb!esMxPL%~_H02%| zGqGPq1l+LiewF~_RFRVmIS9eY@=mSE^Y|r_MTi<0s!mWt606@ue8|d*5 zlEzPCAq$&|!AZck% zVfVd*WPxAqE0Lc>Uf8aF^UjSbU1KC5G3$ynccIFxD-`UqYu65qJ}eLPM-q45>+0eVkaRalAS1T)l<)EYa+ z^C%zxE_7}h001z=tpf(HS+}N#w0P2Rd($-CT!Q6ES}FI%Ed7XyBb2pt=6+(M*u&s? z0RyiE)E!t_l%q*}`U^f*8+Xtz=$n?*?TaRPAH_DrTp)4sw{}(3w*lO<_d5*i5M*Nj z%Y2K3^^iQk1(~SBLHj5&c4T;gl(Gtc47xxXupa_xZ|A8z|TfuR(sK`B>`29mgm z!r5er-O_m4k0r@;>3Y^XaB5qYLA0-~lh&rTpH9leC!-WoX)se^XaWa9ztO`*X%CuBfM}hoNd3 zRJpe<%mEJ*Z>7~~|6_~uoN&K#eIB@eQ94;*C8%*)T;#0rXiv7kxEF&Fh-G<#-~s#OB;Aqc!|iUC#R zgQGSkZcTbxDXia?QA{;Ni=NZSAgw>p^wElYrV;qU_{u!my@w9zObv^C7m5oE6;JZd zjY9n=23W#2Aoqva1o*dw^27O#bN+&4HpYMe>&iG9vUk2lw6}v=!yXjQ2ix{0_>9X} zd7-cg_~6wo*l!h)dfYx65J9mCQ@UD<=`D!r*U}H|dsI$s*ai~BULR>@C(RVA_bDjp zz{nbraM%}9wk6Tcr(F30MWkyX3L(Y4;iJUi8;nMUghXE2Gx|t`(mf#Z;RRH{4KvFh z;SHPpNq-emqcNa+bVbY2G<&D?SL6aOHSG`f;((xDj?qJ2;)p|%u{A&|V99ic2K8sC zAmLT`M2h0JD6|xLlW-0D1HXKX^>9xKY|O^R-~i^n1v6~z^`hl+@kmE^tU!_?A7=_q z1hk69-*2C)_R)xO25fJ}VKFhLTC7BdchQd&`r=q_%7F9n%;>8fe~kL7TUg(Lq_{=W z<t^2+ZTG!l}D49r?}Wml%tL&vv!Nw5kT?G%#UY^UB4J zB!DV@P;=U!@|w8%>Z{VcYfWkiz0N21M?!}iu)Ay4(?FlpLU#-bVYNoP`38spU=r^9 z?RdilZpyWf`a|;lyYXcKWBcFZLSk8*j-;O(_Ey8PQ0#!i!b@L)yCKjY!1Ave`#^%; zds_Nv>J3~EAdL@OMuTvO^7plvx1s2v@-Pf;(&moo7H@O;^av1BG)4U34(fbgndR6@L%Dpgr ztcoWX2Bz3zaXnk~IzgFt*@qEi0Eg^m2bNPOmjQ4rTCMu%_Ohn1UH$4WB`h=QAB# zW8YZG#$i;=$2eqFOw9H}XR@k&bLB+2i8#2;oU=(#K4tL&SA+PK-e3%EvDPQh7^P~n2L<9d#dR(MvBQi-dSio>K-DLVvRGTicKbaeh>XOa)RFV< zkDBrZg9b1tAa;2(PUc4>!&^u&cw=S_1&DoCP4auylj*mw|X%Dm&U-NxqVUUP!lV={^)+j6DJ7#1YOA~j~njpn2;h)iAq5Dhu;Sp)Y^qhS%%*L@KRD|c4!9GrZ0#;XFDrj)=gSE zc5GC=jLS~Qc-}UP5(o?V0=XJQR$OE-&C6|-zc2h)azOxisbT}{C5-I@0LIN3hl>k9 z3<|J&W0&=>Tt4ut7=?Tgbs!Zust5 zp@JYT4(EPlQ!)Ki^+|tRK0Wc_iZ}6>_BWP7_qEy&g)q;mF=QV>Wb&fTH$lUgG_^QK zH>Jz~X`6Pbr6j?Tr4fNB6VQlLB2#WUfKniFV(e@CCD-IM@W)XXc!$cNZNBh>7kT@~ zX@|7eucE4;&X@QPeZG$$T(d>`tRu%#&Pl&+mh3&hlFPQ>U(eu7ReP`we!-1J{B9p& z^6E>JTp@^O!srkfVzj`HmAyc1L#;W7+z-P^4$`nLNB)vz zU#0uax^hUgVZ7Tc_3Q4pp~WZ^Pwc1NT=Xk`A>`x?;xK43ZU@fzrf*{I@WTq|o$zpb47ylNn=f7hBO zbqYn0cl&jA;9I|#LT8rccN0_4_ftt+=@F*`&PkKlX1o^X!q@*@`7G0k-bHafEHh)? znl&|;55g-cNPKO*U7DvZN0Jj$>{59eVBl)nl6{jy26`nW~j z!N3>5I;R4(f9hKqN?^?XL@!^Xkb{IQMH&V5vRNiq}I@ zFPWQuEzn$qyhi;F+(Hks?Ao6X{RWETc~iuzF+|#573iyWs zE~M$!hjc~n69MycbD-eBOrn1{AddmyXaP@0zWQK^K7=L9`hV6{g>A^wdcnI+1iT~M*0QMc=+C4Y5~Z&)!%U;RH>4wY3npS@G^J~x8k=d zGl@J#&}U;>rU--VtsW8VIl}h+0%>g@gR%koo?uS>=eURqtn*b`r09CD_*}_?yY|Vv z9+VL+MlLfAP{;-6r_0{F67!9VCjSum_eXfpVZQWr#CiR@jaY(|O7&5&^y_$X^zKPd zN>3?8`#A}MwDe;L1pqZ^2?cC2XpLk5ZP6g2if~U_VRwRdexL@_**>J4`#$m#WD`yf zC>Z0X3YpcGS$<~Gxn@;?w#U16F1%>At6D$q*-Ufcf=nv;LQb(+=?W1*^{5JxG-?rG z`BXxW(ZL=}*Xv&b#fF%|veI)_$*OAQiG zK$9K$h{0xGACa^u@@v1;TjCi&H&rli60_{Vnm?C0UA-fqR)N9{&e7+@8W?Bf6n$-t zj){H!zB!0t(r{rjZ&8ZTP-be-{j)2o6$i2vRb4UmCHQ4hIztEczVjnbmB?4BXl z2@o^&?F?m2MZKAuO}S<#Uhrupw8N0nA%M93wnTz}MfBy2mJf|rt8*p^D zeA(GcPGq%Af7)Qia9nBn@4EFE-y7-YiOCDeZnwL2p3d6(`yMaRCrK_WUa3)#rB4vO zW-3zI%c=yX$_Kp)Y5M@-;--{_AA6x1`_q}q)9xs@$*J<>VLj({p>u<_`7(G8L+eS^r{>`T={Aw>~dxw zpsnOC(?M2yoV20gpKDVyPqkCuQ1XlS7i&3z=9&e5U-sRTO>2k14!K};r1`1kemd{^ z@s$adE{7igo3bP99G=?qz-H(&-J5P*+Xn>S|`mMpw8dvRWh%4ad+vyb78Z}2vd zjeUz1R`gXA;LuTa~Nb^S5Az z!E23fmk5SahUK$nt|4!XmPv^j>l5DwG+8W4+8A3<|UR9qq+bk*T#X!oun`n`EhsZC1o>a>^}B{ zQ@q~7qYVTEzy$K*JW85jg{#C&6c9$elEEidAQ^te^2uZ*C1M-o5$|tW??wK_FsRRO zeO$S(;B~E)4Pc$S!01EE?fpClg0h6)p6F6Qe1f}S80H}u+d(4DjZP_HnRUWi-XlJ|`wtqz z7FcD54gw!|U;6G~8mH{gKfPMDNBoda`&}9*A`NVxXQr~TKuLs!Y1kckZ=cqE3V*hu zuU=yGzLgmAW_>gpl6;_IG!eZofzJbPp2d&2VCM+&HXg*U+(;*)B&3}Iah1C!K}O%& zOQVUbWR-<4Suh7 z)>h9hurrz3vbiN*Vu+}yHX@K@wH}+QcSg@8*>&t|EIXuDZY>>&sVZR5G=@!SQxCuW zM7NWHde+^v#6vS5h_YAUmpkIrLW7==&U{doDvv}!+&2FTKz8gP@^T~og7=_BI6^of zeKfo?%xm94uh%0I;183uz(b8BxIeeY1jnOJIpT|w@;)6YAAOni9Lf-!$?gPC_;WTI zLYD@_p!KJ5>+aix%LPg-DHX4}udwukByI_!AN&MA2_H^d1IdqRM2MoJ-b!7;I+t=2 zK+wwZ>%mbKV6_bLzPcJ5hm|*B?LN+_tVNK2m&AN9sF=oq8K|u|r1G|pq?pgj3rx47;aPy(y)cC0Ly2*Rxm; z7|5qAWrW)Uhj4j|8BBh;uay$C!dW2Dv21XG@|FeW>HVWAE?+p7z?n$^ih1OmH&5wh z6~ZMDK8+2&z^n~i@2g-#GON7zCo{L}hrhnvSCVCwG!>599T6luo#X9|b96e<_U@j^ zU95zy4!iqjFMcZv;wT>xsW91pzxLf{QMp`#)psD}l76X8x4Fm1E%y!BkFd6TigBB3 zN?_3c!ml&D)}o#|zAG&|+#WuA)MW!%4T!kjZV?2ZMfaL=r62t@iMrM3J$aVGI{y?I zx3`ZXa&JKJu>pr}#J0^|@q4YxHLT=@D2UL7sv++?xt@#1snB%ig-PAqp5jw7j|W!x zbzmRcgPX1S^0(>75r;UXEfWU&1dQ8kGSXO>LJFse`xrPK#y{hO*Y=4!lg_89!r|Ih za8C}?WNH#^HI|T02FJYW(&U4%n~)d@hCbS*4QgwEQjSx*HtfyrO>c$qq2+Znl;pxAK(#f&tnVh;tQ`%oP8DkhMBv&NI<2|@t?zyN|$Yt z{*R;c*l`mI!{`ICptmKM-kUM7qc_v5dHUSRCK@S`;&S=Rcg{d_dGFwI(&Is1d#>Y2 zyn*rRj5~|9V`xVPBXYSoB=4YM!B$LB0@YZf!`=C%Jj^-UWq)DJ-vgjshs7y0e1H)$ zpjHs?Kru%^ZO8=;f{AYsZXfi`9^<0C#X2j}plEHRP%p^{Ra(%&CNJzUo`NAy@4&15 zMfDC6&m*n!m07I(axE$tNI(A89vqIKEeWZU1i?ZI=qGw{y4JnIyZo=F3gO*k3+0%Y7eEATc54z(07j%+KEVL@f&DsSAW-l z2I#kut3z!FXRGr(Y?SQtW5(kf3~-j`hLSHOuZ&-FFC2*YN!-r7Wq>7s-1mJko-veP z{~+2DxTm^Td>$q(+SG|qbL{&jwwgt#C4BCxSN4%huBisJ%-Oy8yRVgmnjfL@)6cJv zS_iWfuM5D=OIsc^4nUc4NI(Y#*0U<7pceG`k@Y!{3+4fLdcn5z`biU0ez)c*!L`tq ztpUcD8(ee)b^;ukMX2!On@I21GL!&u=-79|CWxsI}3H{RLc_qFsTg6v7)|tolU7yYi0oV8*&|ONQ$%hHt*l zFs_k*Xvpv}&#gJlX0 zh!*X!au1IhZTJJ8nA}<|b4Yx$>|;7iXb=F!vY5Xt9cFWJQ`3EubEEAzd_hs)A?s^V zh)Mxl2l&iC%jsw;yzvGY;&e@tAPfX$mlK7r4{$evi1efN`}YK+OdnRMT?)F6TBlVH z`>oi<+3$D{gEF7LE*nMH{)Wa`joq%Qcm!c-wNPS)GgIItSQqUP2ga9J|3X< z2fPN5Nk~eZLU9IfZyNkNPyz%f^Ec>iomn^Rf7GO?<9-#OGP*MhU&P`c4xTiC+0n%GQ)b(7_T;K z&mYOq$_+>5U45DG75KtO=?*H^JWvpS8uE=hkr&-INo_NomfN{lTepEYDN1Qsb@2Cj z4e~|mFKliup#rJ}P^atI{F1Gq5u1~CU_ist8)#=iVGs%l=a;EnAe$+YpAKOVDSXPp z;r1W_^YThDMFqrBl^VILiR+|YjS>I)Tf@TzyPx7m|4pmiMWGRiw;gDoBQwcQVh?}^ zgXT?vO|3&Jcs@gdb~ej5apQ)DC{hIlhSi=2MaYOz72s&4Zi1?4h2uE9 zBuV3O$_^Mbx3cI&=X+Kiz5Vt#h%;m5-Os;NWkb{p)lK!=gZ<`i9YZK15K7Z z_-3ADTp6P@Xk5@$;PV8u!K8L2MlbKTuNQoSaQ>7)?PRoK@29h~*)Tite!oW`7s(&BH*h+1MxFvW zVO${X+84uUKQgIkxuEn-HkKVX|0O&q2VYz~W)L~YLwUGu5TJ-$VR;7r%XKZgjW%^M zhS#g|L7CHl=AGw9Ta7F20Q)An+VK^L8Zo=6EY*}-)515-rxUk4y5f2>#{UFPy{m^h<=89qF{c)QUX$9ygc;wB{ZAre9jsfIJ8RB z)Fpuk!9<#}AXX^D*7`FWc9;%>ig82AO6zZyS%^bfSKJ#Jg)grO~fY zsn#}qFSOI2xXNBp|DHW&vqQf&+oqBBkMj-S9+kj|v$0^j2D=S)L|sDf(=*Y-T#1~{ zjnyg@xlDHD?X~$Z|!w<+XUJd;DI4w!MFF0I)*ZW#3nq9cl0l4>-S_J&~(2SG7 z#f9a((*1E}EoQwvAhNv8xfVwS2L0SfKU9A1B#2ilP(aaC;nhec-y^cg#bVs#uTlfP zl2;_T``yuOZH2O)0-?+Fx!DK6b4H%9q{8`XmeDW_v=Mb$M46TMBo{D)|40hb0uUX# zP6!xEJO$vm*}ejblNYWX!mEf1*N@}W6VeHL8FnZ|77kpqklqeO`v$h2y?X3tA&2rp zw&!8iHR$?0&`bQRDzj)$>$gP>V+|yT($O7XJoWqtVMteR=g0)3LRY0j6|zbDeMF@) z8<>X;N{Fx_60Tk#JYN#vJ-DBA^KGI`5b0rkiaeiPF2P*ViwUx(>P-R@t>7nN1R{72 zUk5@`jvDI38?xJX0jF(w9u*IOL?rulNrwQ6ejkvXN$sh_5h84JZVUK&(ftm?WP#Xh zb}M(zNk7md;|EDD%&G^7kPtgRE#aKrSX8~2q%sbipZDpaAB5FEsyQwf%x|IN?4k?5Zz^gm zzfCA#<*D84J}n4X_A(s`ZZ$_ zDk|Fn4kLNVMc+vp8o$QuktCj!&azsO9(__Y<;$9W5n4cszY%J~t*?UR&+wbS)uHjw z15R}JU}uVr7ObZ=ZImN`?qZtJNfMKLgHy5j0t$9OjhJyKx-^14k_O{x+EBhmunLAn zV5@ndoZ|MMOu{c=<_0Uc)Pu04zuPF3``HY}ESjssUY9*ZPS0a~<0e&IOZN`joShTE zjX@&0vN;F5;o+lkL%Cd!@a~XH=MTFDLERLk;>~Sxo+(&k9fMkzj!~4#NhEL%Gd;@C+qJ8fWOa4shB+ z8k%B_hY`E4TYX^{tgo=ZsUI-90S9Br8ZfBOB>dz)zR(c$wMZDiQK2P>)g-H!PFm~~ zT(hj+UP{E^d?)q1KQCPQyD6jMsHKBl=P&)3S_2wmH5)YgQ7tP^h=U+hl&M%hCBVPC*x&SoxpAwVfR?LDY`ppe)63_ zv0Esh1A*9cc=Fv&vJ#joSJ>s}r=$TrUu@TQP>=esPvMm?)b3S<$G@ss0kp0<-JwqAsE6DPJ9XGMo^C`usiwoc2>*C%SkRS&BX)M)(45_Hy3J-}kanDfETuj#P%m^} zf7+)?m3#x1i~Ul~%)zQAx_hlJrO;vGZ+sZ-1*VnUQ+CI zx;cNrlNu-jXkoy4qW+s-tg`aFzTGcp%^5hYD3p;L2 zafQr!)LX0kn}%+&Sb$9&8p8)s20eeQ^bjCSLIKllB?lh0*}v+n5)fH~#F%v`Aqb#| z2fpEwdo`XlKP+RJ1A5{Sq;S=WHNX?#>b9GzH&xhD=GyqVJCSm=&Pm2=23CII0VR+v( zuY;nB{@KS5UQd)HMfa5(n{DVIh;ZMcr&>R_>ZCn=YX0*48-Qz2tiP^Bf-7kRuWje) zS7m{`+W2n#&X#(~(y%hh10a82SMz?oR3#ut(dh|kfss>+(}FHL-8wO9{6w!$+jxIq zLXLD`H{e3-yo&UGXG*+bc?5yxL4X*?LwDzU@!n47V7UUyArbuDE^Q;WyZN%8*GtNg z3owu03o4tjDxvOd#?$Z0vB;;!!H6l!yU_n8Vz znBqnJrGXJB$&WMb(y)18W#3t5lsiWu5l`}n9?J?o@3M6rCI^F%?n!bi<|DO$5tby* z@JecsW@C={S+!UYeACF$)38mj5v8es{>J_&)5nXKri4h3FKKKAA_4$k?XRvfVeBB> z*pn?a6X`mN7P^X!NlyM2AFuiR(tbA2D&97Y{km>&%$c!AA`Oivtre6)(lyuMN9gTv zF=s)8lVV+<7yoWlq6QnIn?m;0*NSSI1Kn8J^>U;aq0E*vc;h{ zTbB6#f<`;^j@Nr?^s5C>e)8219J_aD9osn*A0F#9hDq#~>0mAN<|NmcyZ)AC`c;}g z2C2+h;{lDC6FDJiw*K7LKJHV*O9$h>e#ruy-+<2MW&ENyq9!C5ar#-gNYIa~mkZ-V zEn}sE)BNYLb#c!!+~4A~xhAI&_Bz6;#;sYFlhFZSX4!SDW|JW|tAlA*0?bF^8@a!Hxkqs_HHKjLNV&%gXPtOFaxNSVu;Q z%zPx*e4lVek@IX6!`FG6$V%csA&FT_gsIrp`*tOdkKC4fmttzbtYbo+Al%?NVOy;o z>py0oD6-hRq7;9vklP6ExwMn>!yom@sn>XdNv1p5`tA0|dlD80|5D!&=ysV2!tJ2~ zrjq5)J{PkQ%K9Dx$i)dXfMvD_&`C_T!6w(1W5obW3*xd5s@93L(H|@vgu2kh5YSSwInq>nGbVllK52XWy?wUu10VH!C6N6toY`UsVMd1;jMe z`KMXwH}|~UV$+i8TD#VL`459Zj003MnJ87lxDj9pR5Mtwdu`b(+AA1^I6f&aUOL<; z(;LvwGQ9Z7{v7!grj6)YX)wdgHBHu?)+)$J9!Ph zz<;z2GA8#y4vOt63zayMWPW74X7eCQK)g;A^ch0-2AsV9O&$r4Yv`Bp#Znk5@yDz> zwcpg%KZqnm4FI=m+#(-Oyis-kq_8`!TIeL7WnCTBecqpy?fs$|;bi9s@Gcf%Z0n)0 z{39gWo!_vUpe#1?V5>!SWM502C2Z|dIKZu75XLrQe+s>F|G574J@?SF-;*yye6X)C z*yHQczX(Lc0N9O;fvV!piQlGx{1Wrk1AY&Hxy_|&h}*!q{)Kdjg{60;Nn1hd>xTg0 zT!ghcc-F_ycF-a6)HX0d9dd=Q&anh`%Qxy2u$e+{RCPGAcj@TUY}q?Y2YDdKCCM5q z7BoBXv`K5S4rY}~oqjhP1*IeE06{>$zh!E`6cHkF`)hWb%uxKspC*5XHs9=;=|IG= znU(Cf3QBmQW0sT6Mf;a8+)2;5g>M5fAzm6-7?Q`+CsEd4zmMv1{szn#iS54Kn`T?l z0ioIX$mSq2J~NwbuJg-oP)j#M;|tvw&iOeOjSsOVgj7mfw|A1eLfN(qwb3(l6kKYn+9gnD9!POUP-`ia1NTc;=B(`}gaH?W}O zVdueE6PA@r_78YpN$bjTD2J139q(}gX|K;(#xz=&sFOx6ErE;#pF8Y^^9nifh2aRh zH)3ehO(4aFdN>^)a%f+>^vrAkIJ%#r)pD^kUa`vecLNNUh6SpPb;l9#2^i>n$))(= zf#@KSFdSleQKcmCJr|i6n#AN?{^$lT$MNKlb(qM!Ye=F{nkl_S-``LWT2Ej=ZV8R0 z=_O*aF`z0ORNn`5s98euQ~LR}w&=HMI}6CVcGM z+$InFA>!kqAcVVH0(0JHr~PN3 z;2!CXaw=(jz?P>X1QGk+vUE%~&=4B<+Y(qjf;!}s@v~WKuqq;kfZTjGjGx+B-rssj zrVJ<~5asFh3!&=CXQIUoswg|0$<=zQ(7wxJrFMi5KTt2diS*I8Fr>!-^*%PZb5UbXKm`Tbwt;Iz%?s9iEH5W zZ>*;ldFH}uYkgl6X~umoOJ;B|xCW>Ni(#ri6_VvPr}Enu)k9ox)Wy2?L7HYKpHtj^ zxM|NBL8=Yoo_Dr)h?Rk*7X5oj`k);|;SRfDJs_I{325KwS{i!E?t%=$sl|PpqSpL& z;R8@vnHY%gyAb^*!d@(aL;Bj^M|d%M4a#U{>H{S=d+^>qFT%>-k?w#XuIhh{e7yAh zb7QRwa%2cI%tiv4MN=)`t0q8J*!T4W5{Z%fNxz(YM^&vI(fxRz%72C%GHMXcYU8N% zSkTS0o@FPdeoRA}1JAMf8eEsv|*13OmfeDD$1ik@WLM_S8~RAb#-A0ZkVNaxUFf+}yk_AbjDm9l%m^ z%lCNmgEm6Js(FB$ovZ3!Dh z0a8+;6Q&>1v1*_LzRul<~u!ag-jw4e+OX0(Zd zhM?qnrU0{vX=n}ywi~RCqy@v@_FHb40yt+x+$-cgkWxY84m`Gm+7~9!zlu)^5GxVI zL_Ri*lFW<)SUob&U~2gj`CU&JrxWbe{6GP+$~K`w{qKDG8c%vC@hi{wXG{}=I2L_g zT*0Osoe9co272Pa3VqR1@Ql!jZk$B2#M<$^m;;|q!h+qrznPovS;do;swUErJ+&HE z{!3t6qqF!arTIz)KLX_2tV81VvA;I$Cb@^PlSIs$jK=xDLIau;4_MH?ydQ~V4tQ|& z&i)>FiGGz_%bbYhwO3+hS`3}VjL9Sf2jKEg?^SOTOXMEUh+h<;*ZgfSrZ*T=eHb)k z^HRFIdO_?VpDSftMMuUKMcsTd&{2%@M2He5atxT7A47gV-*@m*ac(6oi_*RT1d=SN z$gxPP0FMmv<8Sc%eiy+5jl`tiJndUV9#-^9UzZ@7vrfGTJZFDk;lk1i3$+cs0=uGp;?RgUf#Sg5s#GS)W&NQj_g(0q))$eztO$1h${I=>;6|Riw*r zWAru``xJe|J9p_R1cvQITZ!a+sg`b9FJU1NDo_zD=#%}z=}o50Yu4x^`%1)ZT`#Iw75kB6Id$@oFi*rIpHJ;+itohyVvQ(wXQUqG z@ACqgN6}&hP|Tqc-?;>YNT3f!Ho$yTSykV)?V`FvwiBobFgTN+^OZsZyv85LQJ9w0 zx#=-WrSMZeHUpADqA4&5;D<*1*b1cX22q`NpXoxttH)=`TBCBSk#2QjChXxjMhC&7 zqeb`$-@{VI5m|4ox~q~NJRo@nkj42*n0mD6LoCzIc4W*BO=-#Zd?SFQjx0jSDg>yU z@v~a6w5;abmjMX9hA&f9uNEalVw5gvEz-RzUT`KJJLQ zL}hY22D;M-nejXo08d4Q%v(q)D)C0Pd*i$lusPqNidXeQKUbvft1byE)xY|1=9_3)kMhHsahIH&H}|C zH=ThWf|RZH3s^}?vraFZaSA99h@CT{{`LK2ui3iCnYqxrIlqvY$-ujdz2mqTxZ2$F zquxkq(b#dGQ~ClY+SL8Y1dAu}Kp~xzYzcP6FDGM8*PU+?NIec(SmDRhZy17O|rx( zmj${U0h2%H^0Vuv?hEtdAtlWMCia*@8`cjRqyb7V}_^jkt-JK>0_Wdq$H{JT?QDLWdT8v3#X^s7N|81k)yAO95jaXS{? zvwmvnI8M*5vg&#j=>34{U>jgVAr=N0J+EOWr6{`7IS3#5m-)3)r$0aO5Hyu#u z<|kzRg7$MA8=<8eZ$m@Q&ysLB@Q1rdPbg4Puz`anO_cvc#tp zt#9$WjA*P(JPjQWes1cgg+4lA`$w89gv11spoj~kdrJIVb!KWxkZjI*#T9_#7i?4Y zY!2v46lgLHTy0+X&I@6bD6r0&sD1ou_X#=8*;#p=o zyg*{=PQx8sNZnw*8*12J84vbD9R(VS78nA+GMS2edR!!pRu}3W*=^b9_;Bfv1V}~u zB7Acd%z)!aA%4mGvN3@nlzPzD`LMW_CPi>V99K_Z>oGTJy&NOU3$Ju*GVajf7lscDe4p z<=DjKA08ig?o5l;<(0kvX-tpZY!v0+?ECnX9JEW+m%9dXmRDQUxjn`4Ss-U2Ot~L% z6ESgf-gX9|Ugxz3%>?*608Ha3iZ!nPHj?IdU|wkfeOb=Bo>gv4;+Ky!Dj@*J@jxaP zbZ1UR6cz!=etOk^4@&!Dxo=Z30pcSEVPpd;CilV`pomZKZi7Q2xvDRM4X0JRi4{=1 zJAnHX`Br?!-2C|%Cg90-v6BfQb0cP-6^C%~eO4#viLjqw48J3+1J&ngzB98lA}c?U z?6ROy%DkgFyj3doUEr{KkiWYqR(UWMLBR?%U7u?{7tU`Hs1XSwduwhGv8Ot0Q61Qi zRk>l%WV1oyI&6)XODsH2xkoghuJfSqf|yK1&Pqu;I88c=sOZe{IA)Qx*Oesd&!!dU z0$%vM3)u2J6-0h3q8~-zl)}UnbkDevk70CR+#({N;Lh1@69RV9ss-URQc<|Bpk>k> zIc{}e{^`&3_XRD^tFkPxax}AUK#^_oAR}Whk9@zg6C7D!F`Fy^?#TM$8UX0jlA-(W z??=8$#0;32mx1_mwFZs<)gbu!xf ztAWnryz|q+9Rp+%#dlyJ*=3;8>-rw}KiTyEnKj&+xiy@MK%Sa&g6i9pivQyRz6 z7Mnb4={!%ISxiB-Q1Xe|ONT0SeecJ{@)8hzK4i3RW;k4D0Od!#)zy<8<`M2Wx46A@f)u zeIY*?BYZKsJJh{A%kS~jAxjfH3i3r9@deYq0c&@7{h0T36Lgkjy|VqgALgJAZwZ=D zd|HZG!DcMWImJ>XoZedj*}-LR_N%9W^)CWJNc;C|R9FNp2Xyu$#X_9W{doy@0!_4` z<~#o0ovX!OxLAobi14q`S;+$Wy=~g6IY4wU`L#iC9h_^_{B2(Zaf2z0iFAyj73zn7 zW$mc+Kvv zR%8`PF*|!FY>KgKKnZX96Fwwn>jeo&PL?&%#~7wh_}fsU?n6P#36sis3q^k#spRFw z+m5r`$<;`g3r>fjeoqv9nOx6)9O#e>10NOyot{BRUxRHEkCKcZrEw7x1x^ws2+ z;zI@FS;O?6KF4Zz$WN1rugQJ!F8!0ISKWSqJ}JHmb5sRmU6*p6L+fe*qX$Xj2JB1O z4oTK*@HFej_nns?^3X{-8;G^vKT$J#7gb_fYlU#)+?tVDkOa<;F~hy>w+8$7YJi7> zV9QZmj!Q=QnO2_<@0R1H_(8`A%PFa_fgR|7aBiP^nA@G*#M5Lp_repNy>H zU!Y!p@&I7s6veuV+~DZT44f-QFfiFPWu!7CEN8}YhEFJz^us?Gi;3%#U_}qa@30)x z%{i>eu0tzJs4la{ap_}f@(;qRnA@YM(f2hdV*wmW`?8`2uZ60NbwR9f z0C?>HrCw7cK8Pj(w^{J9jB}%V$Za0`r0!minfQi3_BgHkC2mXb{=TYlI))YaF2VGZ z(md8aBJ_9PT}kiw616gSv&0xzAo`(9`K3Fbn{wz*cT$DD$1|ABtT3ijW}Jw3@&w09 z-j2f;rT4Z`AnA{MV62|L7WIjRBX)Yo8GDv_qP4}IU1Ox#pm2yqqt$edLlN*ftIvHC zEm~-sFiQgve{8w;Y{=$Xz@YoIOQfFIw{{59#70J|s%Wy2U3WpKF;uXV(V=IwIXr&P zTgcx8(7>Es;}?=hihzaeSL~dWbz)`&ub_>!BLlO*GIKEqvb84(Uo{1HAyUW!Q4xCO z03-x8s~tZwQ=P>J^9j^}0FfEUh-)$Xj}x_(d! zHu+O6{*>y*cD~~mvPb0v)$!mp4JOPx4!=Z`-H>qU*YpR%`OA1Nq4I&U*S@)pWaM6WtV%A}()P00XfM&psqtV9Fz#(-;{cqG?P=7&7kE({|iy zCciuZ)j=-*eVvRr>J?@#-m;OBHOzW%;KA;R4Di^}n@%zk?1f;{SdFwdqH}#rkG`HP7 zid)3idN&+chTF5xM3Df`PT$EPA6^QPODNd%Bo~{WUTFpZhAqS|DLaP zea7Gg2C@4_P!T1u*jW(w9z!RlU$hGuD7GGKydb;5GF=p52Q6FMvDUjOj8HwR${xN&-z`{?5da#i<|i>g}!9 znuf35tnK$f@)gwWBh=22`{vT_t0>y~fKL?@tDKH`A86Gu>sHYz)>Q7Z#}+anQE8J5p4Vl zvHGR#w1`DHtF1PWgV!Qg?ytYzcgie$_{tQ(B0@8A+$_kNoRX7svF}b?+(td}Y0hTF#6B<}QWjPx`;N07q z!YMbFb!I?>s!OW1?>ta$G9G*;V{I6lz+C9!ce{{;qmHJ~&1;o$5iGs#7qob9S7PuM^ z_1x0~4%X?@4azv5%yykXJ&wPK1(_`lWSMzCHCH0Xm@mEG1@xcwu#Y#wYM$l2_xqKt zN`QD->?%6K>fZpqGx9Zz7eb#DeKNKJoTj*KY4Sk^P@e8E1Qg6~Z?G8#j5a4EVp;Gf zf=J-n5y$uiOS!rEMSc@Ms_17DWhVCejTGEaBr}Y^4vSep#XC3(&c@PMC|R$bpyUrl z890lLY5czSJd-?6#VkD_vju5?)aUt86xbI%*7}JXL-AQQQrVvDOEV={ywCR-)7xcgB0d9 zyZoMBSv}2bU-`G`~H7wG6W~k1ylwK5A6}vw;=CNt#R0@$1d^F_u5SgdRtn z?|@Shi1T#qRGc?mSL-sbux9RQq|VWF0luA=3B4^Ja|JTA9SzfuAtj{(1vV@?*Avql zd{=75a2#um@z{M7?r}yA?{H_hjPB;ijjV!it5egp-MnrA%W^c(Rz#qNRlZ2@_ls)z zZOmj^tS<8C8w;)w7buC_{qiwUqmB_W^00fqPbdBLi&)S?E-H;UZjn~2$@wH3AfiOR z4Z!wt-^AW%P&6b8jGy}nct7E3BV_hRs^m~6ZPqo#L|My3pI^R*};l8Rybfspnt)D#(PseyQ!j7?7u9--x!|+eK7@1 z;4OVs)v+#X1lgY#m_Qxx#fu2ANIkV{t+@<+wqf&K5Z9AV-DI zYff1R87K9JE%@(s3(-w^gFbcK*zuJ#QIr7+4`ZB>hV7U5UAyZf6C-CSi=3hm@mnp=u5rsKsc`2u6{z6q4vB9bO_f()Zwi7g4K{9hh=SY8vh3N@iDVLOf2>@oO1JSycw4&POXj;L->1?h zy!K&3U{54S$G^w(p;#N6db%2OI$OWB@*~Tg8)?572(4rTT;T^NB^LPmU@dkIVhDkk zm*tfuL6H*p$s7{yh<{Rl((>Ia;bz-zE(m-ICZ8PsS{;x4a{neS^X^9Aj1_DIQ)lI3 z4F@40x~-=n(CXSC=u!U>hcwpjV45c5^?O6|W}lFZ<@`H4BLuH1l}|P-^)f$cPazig z`Rp(s8_&Vep#UfYpe$!UU6~C5g{`qzouB#CNPSkOpP0j|gl^y)6@=C)=R(@6h5ww4 zEYDl6DkD!pVw%)2$P2h9pq!Pf^x}yCsIW8TL@mp{Xp)^B0cBPEz>0;1WXSl((RnO4 zszhPb^*LS%UQY0qNnPStgJZ0PRuhfknikSboM^@uWrmNlTx?xfZ) zmFq3wKFx0pc;9i7n6cj&NTru@xn$U3%xnef6K0;m#4=t;fxlrA+Cimg%&?EK^e+qy zIU&?mL9uQoyXBMvkyK6uX5>GiNkjw;+n#ztzwPipX(l=##c!odO49Rw1V-$f0_{|3 z=Pzy6Yg0||#1ceDYEm%<{Q3}p-WjKy32@-IAe^!YzPD>v>)|mVk404LE<$oHY^4;6 z_vt54d*Pa0w_vehiOMG-43&FrS55})py+R_zqf(wRQYSl!TVg6^`@m4nsi_~S$)4s zVTTk%EiL}_wF7H$eY(FGRK839vEI`tTQ|55ZFn)P7}YY;>%*-uZ<7Rxg40qT3rc{7 z?BjxayF+`sskuW)`NNwR%=olBB1tQ{{fS_OyCrXszbTvFaX>UsJv~{k&meu@@Gg1S z;Ms))?jB}Fl-LpV3H!jBm#(aKKyN@qGJMtEQf885#9`I|(lArE+rGy)#~gS+%;7R> zw)`&oMGur;$B;Ai?!v~tcYGuxw0wbYLV^tNCEyzc&N_L+Zi?4zfB-)bmY0x;9e^ki z0aLY5t&pJ`?Ke%jzJ!|>SsZ+U?rUAb0$T=#5yD9sh6`Vy6ShZExH!ag_Q_Sk~Zp5qhgdHCOn!JtV1Kll)bv z_83~`>+k)IpY4REF_ttdX^0glj2+-I3XbaYhhNhxs{mWmeH^!vkVi)`RikcS5@`<2jHhA zhNe#QNGh;A{;F8UXQ7MQEiv}edBI9EeV?nd`df=Qy_;Vj=5@4Zj<x-f!Z8zsM!J1LOAK zZUQ?_yL1EbtMVpOYJV-5)>WU<4A3)jvtJ5Mcj+oLaHgM3C?PvHwW$bVee|V0>5eCL zfUE;is$8uP7%)6?kS*B(T|YlIc&O7t7antjUHk@`Z#ilnb}?PoAGcohK6UziJly$> zdz_0j1cjJT<$%$H$1u6yyRH04Oah5A=X`ggPijB?)@~}i|3CY%1*d4T&Hxkr>@&bm zkY#Q;8|A6S(&J6?D*$=&IeXyRinskNd5&YfQORmgtg}t|ba3R&B=4Je_ys#8L9od5 zO6_?nKy4c56m%BP>U2?H_o9crx_5(19~B*K*{U@vkX~OfL83t3pZ;z=zi9DRE;T?L z=|L3#WR69{6URWtfe;v2!wiu`vAT{Xx6>8C$Q~F~jTb4F&Yhy9`69?&yo5GeArb2pwP(L@$JP?$a8T}=Zg+hx;Qwa@K!B!nX<8u=3B`!! z^RdVsbh*^HaI4*3F^GQ6mxIuaUV`5SIpyJ5V)TK8XMi0Mj5@$cecs3Dh9G3UNLL(Q zdN{N~5`n~eMwM!Z1zP%qfi55F0}8C|Bi-8_h7YCZG!4CHJ$D=xq0G<4^3UG~=~aRS zc`DG6rGr4A_&@saTl&6~DuqFkOk*HMGtj62@qO&zqn zGVhK-X@V-TYlhm7YzJU6urLN1f@xt);u-zBT@&Jka_k*v)VxP_xJ9^)WMa^l(!!_bR&T^RA69-U14WH&RE3IJb(#N_(woYszK zf%*Lj>hG5L4%TE8YGW5+q@Y97SB!ATxthNp#S zew1Wbs_Wa6LQ$uO1?Zmms?@;@K7YoUF$MLqZQ5)OrSNZ7S6Y)COGa9AcQg$q=82#_=7#j})G(C#E#4z9I0J9D zmOOQqx&~f3_ieeW`2F|cypbs~fY3SKThl?4ju-06j4%7u`|*l?I#Y^7tNYkUH5ymB z9Y=6@8v1-;i^><~^*l6~ZSVmxM$c`c&=b-XUB~;IQNyQ?IeXjbS|3v^oKu3Zl)NbG z?REa%fH4S~pzHil^{YCIs;b@dD~Q8@(WCJtr%{XP$be;U9nb=8>AXKOw$^V|K$Y;M z?P5LOR$6i>SRM-x7bc3BHj#bXf(5R+9MD>4SmO7JpiF;mc8|v7n_JRibc+|8%p1^O z@4uB7Fttl5_vRO@sZszvKFveRCI^&e>@81-EBv2pqC~sOg`cZ*WO=CwBFCWyQI;4X9vJQH&$*gd0Nn% zE3h~a1Z&`x0=qCFC9M`Daj6Wo`33IN^}br>LPyJAutLr_&Di?$Ag%pw4qFOc7Q|iQ zzKv1601bTt0cLgx-&*-1y~4A1AW+q54bug7Thq{5Pzq?udmd6i zS!uzC^kgtcD5A65*w`CMRh_Cf@EtVPZiZ}`u`j-KWzwEoBN1az1M0|)SRm&PU$EMC zpYnWA1V_Hf(*Y0?-5n5FFx4Er{+_{i;M4Ew%Je1Ab4JZ_4tUp2cw0WTyqlFC{Ld?T zS!x5aI6i1(2lOsMc1>ye!ViqLD!>Wv?#hF+B#uG9Uoxu~o$kXNt2{nG>@!U)-X4Df~R^DZxtg>JX~r^1`DKi&B%u=qOUW_2`m%kSqT_`&4g|AzVZcWZu$BXsqeA`LI2MtZhDg|7x`!m6MauczbVHA7v#(n2yYXu<40CWsm@FI-m2hOSa9=U7CKp9O>1Xt6`k<`zH ze}Q|kwuAT*F!+0o#{&*eqTA5@^T2h#0>Lg{#hIclUc^!IJ>P2et*#np$b0zkq;tKG z5L*+GqHA+1-VF0azp#58jiEg0=0~onV^{~IO8y+y9H@e(4YCO;Jt>s=dP%>83xBzT0Nvy9QN(-5 zWL{K7j#wMOd;zzFz4$7$x8MhWBiENTK-G5QEGYK}2LfPRzKm9$iC#+y(w5orLmv;Wex-HyJEtuga0*j$us{-;_!dh0E3ltL#r=wcKy+ zP||k?`%QYn2Z_6oT1Go$g<{ku{4CDhei-Lgz??5O4$H-<)pu&)5^*b4_Gi|BD@ykn zu$o*9wUcp{EopKew{O`mB9-48QOu`>K&e}m-wk?)c^CA>w8v-mn|U_d@$Xe17lC|! z<;E+@S)kk#1PxOJw{zc#9fSB{wme^MS8iU+akMwk*&r;PXeXpvac^(mL)D9<>6T=b z&6PS?R~Kf0s{k?8Ih&zBUt*U+p9)0&@%!`TO^VpjenbTi^5_Y;Drcn@&DT zoASJ>L<9Y#yc|5gWaHLoCpLf_ri#{`l=+0F!9oSS4V3zH5XijtFpp9^pin8hAo+e$ z#Yo5%7kzKjin!*lJ_;VsGi~jr8R-Q0rttRUOpRC)j$d!fu@X3dP$JL^r6bDj!pI4j z%##X*Y8_r_5R5-&cUBT6(B-%2Xd7TK?3f4UB9Q{w5#cS8rBw=#3yH!ZCQdk&J9!A| z2u#G#>e_)@od0HVMa!+~*W4=c_XBQLl^;n0X%Zk1_Ty~efi&)Yu_;=W?50GI4 z^xrf|;uGlnjv^YI zR7uJ4pyiEb@5kDG;I@JHD0~>!F19SVcu)YEc^JfIbmeAR?xN2nkL3pkb|&!U?^PAw zXidA%RbbSHuh3w88R8j+XcJPZ(D2a@|! zpwCZt>bHL`bAu#f;wXhvH8oX4ps7d`1`bR|AVAT{jewPvULd28KAN9^p4=yi&I}N9 zX3bG6nWB4IQnqCdS@v(KK~g_y90Mh<5jK^jXVY%0#g3ywLKi}SuUfPMs#h%V5_vWJ z{p{ky{otlJBI-bYMXeT z=N5ryq6GB87-l<}D2fSIH_i1elPJVZD9acDz&xFbXk|K%W2-b58k|8qDU&4pEuX%b z*-~>@INZykYR0l+rO)mfhJma3lGp9rZu|LzK$n3QI$Vth{B*@l^(ml%UNjUq1<2cn zA%;)YgFa#>7R#q<=vn^iM z_qL$72|Wed$k+z}33)A0hY=GP$RP7jA0VS4O(K7;98xlFee0ZvOAj8l!yN7Tx8C1- zAjWCR{5^D({}B(OuvmR|8NC3)Y_}%>>VAH_3<22j{*GFdkE;BQwE|n#dI~(GpTtDy zrUqn;Nhb=RdwSBCn>3phROinv&-q^Y>O3JW#h3|Klp0wsk=_JJu=-f#!8+ zlu)gA9gXqae?2g-h!1Ku)l0-z@xi5&q-DDA> zfg0&Eu_Wp(aSqK{1&U2C#J8D=0W7S!RG)?tk|$to;R*t7YEb3HFi51<*t^^fZoYg`VP8S1=%t;D*O={6 zvYfykgx@RWNudV8N#3yh@{G!6e0dB|yjS*`K75EuIV2E|kkC=@7>V>aLjrOkmfPVD z+bb|A(EWM2;#uvZ>?LpY(!(E>l)5BmngS>f!mQL_;0G7`Sa=zs@4qKVzB&L%4tFnR zQZWqI?|fs23yRTS)h*b7f5sQN=JsvCPnqW;@rRq}k~IKM2ZOY7g8>lMbUD`}qrn5* zJS7+c7JjGSUDPlF*5MuAzt_2Zgo1ek0YM;!e{%wX0#IWZLxlAR4KTWO?0_l%_g)Gi zs|a5OS<>O5HU$80h<@MRKBqwPH7>IPjbdG*Xe!`mG-nTIza!Uh>Jydn9)$GAlEv!^ zM@@`+xtb7S{HnN-di+`ryc)V7CD#Mm%^s~AGTOMK+lRs+nc|ey6cU#mqS2BeunIPL z5Dg9UgMGKwYy;EYA$1HiEbi20_(=Xpua&E6qivZZ{^J+*SM_K$8zk`KYOa#;Psc%N zL6|gR9&qD~>_LpO0m3lu6$9ijk#CcP0wdxPh3e}kPp`;&In$CyxqOK5k5*7V z-CpG>hp4E*!gJHr-F(9dv>yOZ`v@OIXHwGod)pnW%wOgMJ#9mdKu*R^sAo@Wj{yY& zD%{y1DB2`4VtFbtKA4Sr{R6}BCt)fVW(|S(c|gHxfPs2{Wfw%T_O>N^sDEz|ANow_ zA|&6ZU$yJMPb?}~SEO&?$GOEy>;}~uZF&G9j0Wl31C$?0#)*;;I+}q-TiB}Pm=aZzw}b494T&ivSe~qlmdQCvoGxzXkZmwXgQ1 z1z7>i%tT!Mho!7_)`n0D&-2$qVY{5K`)UC!nRBmCY<_sfMGWby$rz&k1lYoqbNnTx zzjrJsU}o8DCDly?wyO4YK3vtf&wJ!@d!Ucq|IC;OLJ~%>YnT?VB#33>Se6d>zb z1Pywk@N$0!$ak^Qa1>r2sFNrzL$v{mb54BdOoK9z)l2`h43K(dBl7%D8e&s#Qx|CN z^~vM@`nD$y*g>B`auWh9AOnk^+;6KP)9l6b@j6bPtogab{l12DAg`z~K=^@HTXiM& z^DqH@zelaZ0oGz`VB}-?1=uVaXC|&0o{~liYlnN|z^Q>CpuJcY6e{4vGTtt|74=@%%@2;-7%c&mh@LCs zTq|d8-7=5l31aRVBWQq+#_mWoLlA!KVEDe>79eDa6^r8ONt?slR^59Owbwe?vhM|L z?dI<@(5(7|HTjdjVD6+Qe*5In+a>E}*9*~N0HxSe-AT<3&y3d=s4lNn>36qQRt?$D zOJicM7rM8fPn!VTa;rfuL*w&XEi9vWm4~BH4ouWJ#PIs3MCasyKH0uFdsP%DV2m^L zEsoxq7@BTxO=Y zQ*0Z008aiKr;h@Fk#KVLrT?k2*IAkKDyO)#bG%d8=O4#0(Pv!HN zfF0EtUmaDqVd@n<10V_ush>{#5XEtmSmj+w(|_e1#BOm}U=w zDghoc)+Hp^QF4^Td%qP95XGpb{=+^cY}fCE>dxY)bm$kwR#K!#7}jwftQM>U4Iepv znQ35zH%3%4urA6$kq^-U`2kcc$BY%b3^RfbXK>y7jeF)1uLO>u4$ z9ncWfd5)wJO%r2-Bz|d+;*160Sx52*fDS5Xgh@?>N6q4=@-19iV1x}SA)si$STN^P zIq%mC7T1-54V(aZ(zgR%EIKL&5RX)VU?j*(zvDDbUn6{;t92g-f8xgUL6bewR#=ct zv3pkEGNj1W7yacZaHVYa(eq(Q=MmsX9slulL~tbnr15D#_ldL_=sH+d(0pY21=mo+ z<e|4`z2K~M)-^hWVL+dW1-CH z8&$Y(+HPbgI|3@UVxeH46F-jK`6|v)ofM7ZgZaSp)B_D_zUsCef!m~v%%3|g(QV^L z%5MPesU>{0B&#EAt6M#fsm5CnWtfbRAxA3)zy!5S&kR zRlb2T@R#zwp{c4c0aS`%ynF$5B2u7-1A8BwscrqU8!1-1LI^8(2Q6T%9!Pmiuc-?K zFV2C!c0kFblO+9_QpN7vT&D(V9@BSpIg;7sW2(ug1`gX;f!X7i8^-zdV)^An^J1WU z6%p8t4ZjGTLo-I_(fObgpkS&K(&~>i2V({DF2uiR>%2nX_L0m)?sx7AV}S!qj2xp+ za#WYWEs=xSL-hBQrY-|42%3)kcfOhXbpZ$QA+>KB&Sta6p7%LF-SM1|Eia`;goe2Vfsx#T(cffTa~e&+GOD zO(m%j&$m71jFD;y1?zTwc}Hkaqb;g@2rEkuB{C-4fTP&d$?9VK(r(=mr{f-*p(S5Y7Ybz!y&Cgz&952 z2shUFoYt^PjJ5>d85$mG?J~A_ME{LWV)gd%9B2`p5>lWsLD@yqyudG;^f0nq%QrrI zvCaPA{ykc!l7eKVa>4pV`63#;rVkTP|L~9>0GNUKor@{G+}p{FZUCz=Nr4R#W{ER~ zA0I_>V63U50@d~e9UZ_hRd2)uk;9N2jRS*-%9ZTtQu~Bu@0tOQr@nSotY5}RYZI*P ziriYG(N1%c$6slRoo}WLy{;T8Wu77dfx{Mb7s#UBGcO(qQ)89QkY*CSkS7nrXbUY+ znzH~shiW4}h>Lc?;N0DKd?TS)vVf_Cq?)o}299mKMl+_!K{OK>REDR8nl}aGk6YEGXoWpqen23{d zJbhWRPFsSZ@5rm-MU`r0uHHl4mjD~}$Yh(gECqRMsb5k+@oOY-H(OGrBrfq6Sf3#OC2d;a4m2|1XFtFgk z@26i#F*HEY7}UYNAL|NeiK}{cQ4NSBfy1w19Npb82%w0DQIuuNH$nY=OJPN?7XvPQ zb-eE|!g2h5V2julT8#?MpiIDClPJz$cnLQl!!mv`D@e;x`i0J{6?p(PK+3;K07539 zU_A*Hiaz{7g4<*tCkpRtC;4xsz6>bRmu5#9MKwVp!J5sFqjEHU6*=Moo{m&LD29c`t}LPaN?6Qn0dF{Zb@Sa>i=^+VU@Xo8xJojnbc2S0 zG6DiD^N$kQmu--;4EEQgd7*n}dKpnBXpr^SroK-Ea;;k!hFQoo7Y(Dw{ynntb3bRd zPeOtn4rff`TrQ8EsdD-++?-MMiA4gLe=o4K+3-f;H=dZ{%oJBx2;-c61&%7z zA~u7LB|iby_lob-R+#vOIUX-?`^5Z>3~3C8rv0nhncS2q$#Ub7X8VHe1{#&Vb&`f> zn0#ZvkjC$!vvcdvIVbAGonzNjFw*UzHZP4;TG!u3U z@O69Hr$!UX#|I*vK58{z8simIXK5W1Rtsjjxk>VqjOz8JwMV}j+uHFH3{w-ym&Zq!~$R*}8_vb+<`@7NJsj|Y&-z&^O%P%U@bT^scLTxPHZj1cw2VD55nZl%M6nA`zE`VQGsIbj?AY0Z>bc; z^fSkcDQ?>k&iO1YcHi}<|L#LJwJo1u$OR4Hnyo<@?uTI1W2MP+H335*F)O51)SKD7PRw^2KAh~;EPyN$qNQ17(YjAD{0oF%2StVevSovB`ev!sHtp{L z5Gx(x%Bc6CMIntcexZo7gv_4X74Mak3 z3*=7M*PH(G`kxrbD6>8+1eYKyNVUQE9j|*UA0Fe4i}RBJBqAl}q#4zKy$ongFufqru@3R9hN~ zzW_^?l*EM}1(SW2w{Z27M{n_t63(?lKzDV)h<2I&Q@tP-U*HZ z)Ee;;W(b5M1_Z=c{a}R7X8lJ&O_*o?XOk~{D5^765Yr1-x1WYOM*_gG&}B)$hIbXLxr zM1aEyTuur?PGZ8k7xsnIPvND7dGi%#R=N-*U_OBW83-S*{5=q#{5}0ZnqKcDRUq>g z0k{#`wl>n-haCI{Jq@WR4j~i7bqEyHLmNPngr8#Xx*7aPA`jO99~4xSdFcj+23ugE z##w_d*H70Yal!s4lYn_XPc4)v0T>(*_R-p)&754`pvO_m}KRys@tzz?@sD!t~cvZ6Awzhvo(e!x{zzliD_m3BIPR5MnP!J za3Ynwzke&%>6z*!q<;^NtV_ncA5~vI$@q*n5nieGn2}DLhJ{ybTB*?@H#mF!wW!KkhL^v3=X9c7wE;+6P1N61Q4Ct z^P)eCvSlTPv_FlsM@oDnqu&Av_f*d(rho1p9A^zqGLZq|$fgTRp@zk@!q z4WHWQ!TeBcV@*2QT}+C{gwztN0f}_s{rDzOK2vqy*{K!NjM*hVHoO9ML7D%&VFav} z8^&8N#=Is{pT)uZvIz>|QDCXh+3G+bE_-L9Vd)z4oS&dW2iKs(Nrlqgxw`sjiuF&- z00LkU0H9(SRzYz-&Y)9A}?-!d5BJatam^wV(bt>r68!N)D z`9y%60_HW`dQiM_iBlSknD8DqDhif>OWttU?q$}!p$0pI?H5?56 zloeryy8zsQL?Mf6!OEJ5u;~+*2#R8LENE2L2?*3$AY>^K4vp}^pskw2>DBJc2f&C- zb8le39HZrpx+w-Oi8m&pvLSRP0oofpZ#(uK5l-9%_6o=#nWBJPd+BkHya=fI{*sES zhE(AXSD&QaL+UKYO*BU8R17n;S@q^WENoM_D0eepzN>gj9x}j{#GaJpbBNydelCvG zumqqC z7ty;{I^k7^KY_)X*O{v~a=(7NHER-;_bcc@k)krrB;*b^K<1#4+QOLM?Ed6JA_3u_ zVQ87E-kW~(kLpgnkB|c7p?P*GJS;zH&waVh5`!-~5|s1X-oOPUFBXQ|;`f_<@@v}& zzi_Ar)>L<$>O$l8NOW2N!1m?CgEP*$8A<@ru+Q=Q8+7UQ@a2`ht368E=mVf#mH2aM zqE;UIwGbbqB${^(8C+WrzMm&fQuITE3@J!ll zZ_*$k{rfQSj~gdL_fyGa6AM=Bm^*0UctLUa>MhXe%KMcTjH$R0<^>3DS6pw*yc>>$ z?c{^VgF;O=`Yg6JqjlRApBliH<(kK}HW1}wtFo8+1jWFC#Z7|X;_j9y@vRFQ`KD|k zDmRT;y4i33MIuCPW!BfVnnyHV0VY=l$;W^RK@ufO3_`#7|>^VBiF#5FnO}Sk?`usU;?2J1Lrd zDOMy_j#v4Z7l_;of6+_hRe^-%>%0i9Jl-#~a&!4Y`4>)g5%!Zz(6fw*_!^0|aNXp0 zxHyLcCPKIQ^!-uN)Djy)=at{*9e+TGTSQ=?roezhhav_>cuhr{gdY&epo7hO?Op?D zkD zmHxzm!M~u8^FPV?F^=^kl|SkeRhmYw;D%&cI}#jRwG*QEJD>2i|3g@&`hbMG0p>xi z%M?~I41qgP|FgIC(HjD*laLpGw`xDg+IW)by_|<~SDm^#3 z$howgo&~tJK3#1f%!n}rO_iHUFdls`s~Q5ZzI( zDr35n@q9q9>rXGcO?VlYGZ`DausNN6aU!6VhV-FvRv3s9R8YGJ+z2V#o=m+CfOd91ebY+n z^}5~%S?2wL$ekMYm#T(YxqG$M;kFrVFPE~@F#Cgml0?e(1pm4uLt2$97m&Vvj(yhC z5od(xKOhO1!m>Wo3Mv+M%?`zHT`6;RyulU2ILOwwm#_Kuk8XQC6NED|>Mk#)RPb7- z>*a;xC`)Z_0xduT1})VK=5dh5bnXq9Na9z}>br3h7@GX^StU~9$+bSN;sv#f5r(Np6@X0sQPKo5Sv`7Y2Xo_7Y9 z$44c7*k%45zi%@W4NhAU+4lqo?dUGzd?C&B<%9#_yUZ+0r<#kK{)N5pl&l?3yPUIy#cXh(!>=&mBo?_yhri0N-T?` z@}~BHKm*7*Ufnf$k64w82z$-gLJ}Mw!7V!HdxeTAk)5--<~!Ee>pZ@)s1AMQ$O@*gU@N9D|u1a@~@Cqe)fs zN2TAod50^A@QQvO=lR8bbj1fDTma7>yn3YDO&o*jXoeOm__Z0T6w~cR1R7725gpnS zB=Hje6sjstWx?ymH1E|VY+&`1JqEKl2izWB*Y3J=CWru@+L#u+#mC zkV!yY>skmEam#`$7xD_$izN92%=kx&BakFhb)y1`vwI2Vjm+)e&5nd#&YK>9NPGys z7G9Qte0bp@E!-pVw|>%L(B3fLE^F^`h396)dY16GYD>W7YQx*%bQpKJv&;5l(8)y z%Y86Apk#Y$@Ci*(J71r%1<7doo`2U~eY5$9RdGp8E6G;0?-UzNH2`Ci7%WlvK^K1y zq(ImG4YHjUE<1u6NI>;ad`J_CQ2pN5awf$D7rva7TtcMWUy}sI` z-y}wWg1Jx!I`=e`b#`nSs@DD!A{mgf>X&jlT%1jTp?6;MEFTc+x*9#Ha?`4BD@@!V zA@VhZZ|ssRAPJ+lsY!%-f8?aMjj&t*5OsBYPYrYTGBEa&#;B9~R2+1?H1#AFtu-9i zIO4ro5)QmYUe6qqyK=)XzY0*H@hCQGFfZP5EAJy?(Jq`)s zuO=3p8I+96sQ7>4cNgD`cZGxJ}E5J3;h&+yz}2eev@GvX2;6>^%>dzDcKui9Xj#{`7 zUVry-Zb3FzQy9=Ufh67%|N5E0EpLiW6}}?>_?}Lnj)Is%fUn%UWGs9eGsdvnyacm8 zY0KCCdrWffrEue+C34e>O8(x=+o(>Wa_tpY>w{6TI3%kQuuexU@m8Z|c#P33fWOCR zd8P@6(yvFC0#Z2Tg2HsR-|*O(@YGgSCEbeEX1a^VIqj6?3|Fa^H3$bE=M*#YM8gO4 zPIg-unjuVw%;6=#B9irSO7?H9d%#&qK24UMX~+=jJ07 zJU`2&`6r%)btAob*97@SnUCvt^x8A29$z9|xORS4`D*o4XTkv5!W zDUrWehS4t?lVH~MP2xEE57D<)p1fZAsKxsMvYV(ivsj3^0fp+rCZta- zGljW=G{LP75Ep6M8oIG%Y&tCmtQgmqhT|#-PAylZSpmW3bAT3ARgXCSGh;uKCiLaCkT&f?l6r@|_a~ZW~VT zszlR1NJ5GFS$Z#<(kH-z8Ys|aTJJLE53mrRNkIf0FjOXRm%ieOw}sx1>T-X=uC5>* z%-0R)BGF-~0xTS_)*{A>LBy_Bgx(box;LFIty1m+KIHu}8++o0m0v;V{B6Zc-Vx0p zCw@%QS=Wan3rRWJF!DmX&WQ^%6d6$?9sSqRcv?pQoVNssc1fHkSb`%Ui%&{Kxc zz*5%e%iQO7-u>g~Jht3aqA2=742U8OMFx>G%*Z(kMEH7Fd-m3{t=EF$)(N|dYYq2k z(q0+tHcaHjHY9Hwo^1DvIc;<5T6KKV?{#>}C%cjCtTS|_-VOT036KgJM7o2GwZs($ zhe*(SqbNr_`gjxoN3z3{yb^mzB#nm);On<^dWW+hH_zjf^(KS)*gSEQD!y_79K~;+ z#nryjQh?{^G>`6=^$D4%{r#FZ#q3}T@UnF&4+f)4k87)yraajHUpukQ=wTBs8xdUt zJ(TuzlT+|G`jX9d8Oz6xUf_GFcRtB)!DroG0X$YKg}}PA)`M4R%SxWaYs2D5p~}Bi zNBp8JE7rn0Sr8}AWzF?iB}{d*k~)B^14Zd(dA&>;*cWf;D)QK+!% z4yq~3^dfYaERKhP)!E)86%!*qS8X3@_W8yvjSN5_4CqWlHx9&l@tD6D$b$$$@`yt zMB(7WvbbXOPt2cvRlTlT`+y)9EyeVFbIeY*y$?!~Pa*N<9wlacit*_gjT6n%H2}C- z8ZEC^r*&A)saD^=J7n4iJVJ)-xW6|T9O{vX%4zIYemy;FDhL=L5(ZPA`3FY zpWKT~<>H_F{tY`^l_l7s<_m1&+RKh^vKKuNB>cT5V*h)KP~81skW|mBmS@k;)F_e( znf%Km`kU|T&qM#F)5}O$k}def7Rh9PNP^tC?D&;H%vm#BUB-hK($Xg@UO_Vm4*R@oV$-2UV{M9 z1Hs_?z&O0_ObSD0bMWq6cvv3k3*zH_vZPm z_2IE6Xz$>fma{w2rzW5u&a_u~xn?K|VU7WTy#kU26fnw;{{)e4-wyb1R`#S#t#^ES z#GmKBAWz@lPLY~~iERgwJv&wj%{%?sUF9_p!*VIcUOyxh*FsQ02Oswb zgy|uH8GH$P>EwA~UJF9&U#l?;@#~J@OCBx=x@+$mqzOamn%@Ak#6Aij+vX9t+v4+3+^AOE-AMzKw;8s+er3P(o{)D`@5NN%^{^vIUe} z4JBA|EH?wCaUfv;s_RDJ%5w+kZ0(B8(>{8iCrH$TMP(kIlgEp5tB#S3UG1j%DTaCbO?zjJZKQ<1oF->KEXF(*qzGfY zi*26FhPIL40j#E*Ok3AtKVL<3yp#g!Ga!QqH!7g;cBTHJz$LM{LG*?C19!&l$@?a_ z_yX4oPcRE69U(V8Q>GN<|JyzM;PMxi_3W9KRDaE;U~h=+TJ%@lBIbo0{QD|xkSSLa z!AxLpXA~;<}+Y>Y;{?o&%>hwHy#FtGhhQNb{_>pY;QtZzeioq!=$`3 zDN_&u60{bvJ{lUJQF2hrwrOkxnXY-YgA`!TkP$tO&iU`%vxG55gCiL>9m&u|tz2M< zxxkKFyxPhyb%#$)Oji~yl7@We`@Q1J`XT0l7s8M8%AfD~rEzb(-m)(ER@0AZ4y%** zUF|_d4i~MRZJv29QFNoIf&HC#_0gWM2vwt{2onUcPnrArlV5V(7PBR|&s=6XaTu@u zAP4uJ|Bjrwi3t|r@KbsH2mxu6qrnQ9L@)jQ3L?lxNdndK5(Z1_-BF@`g>U8&OdW7N z--ZOB@87Fp<;|RGdaCue2(+0KyoS^MNIE$dB@ehavkds_rL%>F6wGtM+LcfARc$m5 zk}w9HBbmV*g(~2W@%cOpD=l0F@ZeBgXfoQw7)*BrlqBD46+K<5(dy5g9<1R^9szi6 zgpAMT4ZcM7Yncy`Yia@33_vlW2ndV_5K&X>6<3-a?|0WED^`Uks33L$R4ec-(vhz= zQ`im;b?4DMV}q?W!p4v`$3F90{xU{4s$?M~f3LgVv3OE%QPUB=CAgO>xu6qybh=aT zS={0tjMHeEEZ}B3Q~MC$IT2D7B`nQQvc4bacV0*DSS>%LOLLb;f-A>;1{kzeX;-qg z`*XH_ayt-ZB!Vb8$NVaDUWjr4z9<^=35OyOoj@?_O=+j{{oqa*^Q1&aF56gQzp>OPfGvbts-X4g^K~Ep$MfIVp6Gk2c4Vx-Nlm+s-xI_ zFJFk?a?>FOl`sRMKUlkgewK;wdru(>Thv1r(eJkePzl`nM)4kGnHa>_zuhcPMfE9z z!K-02TD+Mk9-Y{kdYfKpRP`sF0Y`apphZR;HfYJO`eCnL-M&KZRzB9iH~7~>t_Z=; zO7bkRBjVAT-inuzxV77L)ji%DJ)I(&_N0F@JgVsd^wsy zH=YPpe-DF3MX6cSaA1Ro#B2K9v?zR|)=gOV9{cd23#1HmN?Hg;!JsIL5im?q3!oDg z@@gg=4?W`rK@ff)P}Z$H1{8e$I=rbJKmS4sOjvif7TC&3ZX`5@8TCP3Z%QdmE;IC;_mOBu~)_hv6r z0PIlOj{q%#fY#6L52d+fh1l5^bsy){{ZAs`oLnXv_vJi7_ZX6G`=RZi(9Y3JCSErx zExucv8KbM;FQAQD;>Fu*=S?P{9%`Ggczf1dse{t-fpU-=4E>fT43?vJA` zwOB&3&z__nhn}oWc$7XZUoH6w0xv1juO-<;_XMn|3Spo(7AXK~2YnkD4AkTV!@0N> zKbKU7dIbcf(AG?~BtSi;J}nyWOG;WSzpsM5r0px}MRdOR8&to%>tA3~RL^#7!8(71 zh2nccHPVZ!-n62f;OZFGypmK5qHuCg9!f*2UhFuC9;4qPT}upmHh~O0e5_^Y4@s z#h2PfGpaBg{S!L!hjO~<#_9$y_>;mt^Y(AuqnlQ`u)o964XLmurKXlQSr{Mpl{MdS z5kj|5I0-Fpgw60|$=@U4x`KUmL>ie9_bcCFbxCD_r7gAgY9njfTG1t{B^cl_Z}<01 z>YPfh^-1jzWoq=^YF-m|Wly*624rZHL0@#zvkI5Q>sN96*p1>FB&Bf!gUG30plhEN zzk03;CENy*W^eMz*@RS9=Cym?oPtyLVE zc_5FJatT4N>exP*-)LE|2fk}2U@u)yD1+{TmC|wF1?lNeM5($9_#K5l#+SA7Lc0HXn0q0L-dNtyvs=nI#sPK(4ex7Ij)VR&?Pq)C(&f_`f4+#PILHuG9RjEWl1ac{We)S&%w6 zT=^W1b$}cJkd>LTZz{6tp73FJ-c{)Vci1V9QJ7tRm#X_-*wXOI@H1V9;b1B$4(DUL zfc?tY=kL@^k7(Bf2<75#*~C}9LefC4inV5_MjV_{2*`}+V5Ps8kIkD*JspJuwh-y! z0n6a?Ayz#h?p>heUJAlrwDlrd*a%otXlw7#lMqb)oSf}L4xl2P3EK4WMd^WCU*uMP z1Unw`j<5I)-&POT;+J9iLdhKk6fu8P*{@$7D>JOMzeMVl}ARO5&(*QVnL44mOKWtX` z>Jt)SrvJGCs=62n!i}Uj@I?DjFuhdA*_=H7ehYRqgPUqS^jXmk{;SGssxI>=|2!2@l%C~^e)+1u=lk~24;Ox5lcEf% z#_yB;fz+Z{7)vK5Q~FjocpmaPrEoEW7<$7rkO{s5G)`?Ol^@9X?jXGqCe@Za>WZ@3eV-w|Ma*}qE4m1^?G1Gx*L z1M^tA(mD~#%2jO|8bfo6Vi>-I1kvULW>mR!kx7C5r;+)2PWSv5F{Qzu)wJq#N%1E= zgNkaiE;mr{ABd)-rwoB#&Cn4DEEL)3XzL(qiGP9q4_kpG))QXz1`EmfWR~M;_zFL{H6URnzs@cNhh)S zZ*{R^aN@Sj5CbpjaE#c%n3!E3Cqd9GwqX0-9hYHjcSh$Xk)=WS3s4%nLEOI=49k@2 zx@C?7YQ~gA(xx3?b))4>%$amhHN&G$-RQJAsr;%Tbo)4osx6q3t3K!@dE3if%}dqy zwBC9hGu-k`#`lj?`Wb7^TnQ7UkkpSjBfX2CH1#@7wf#~8(+mF2ko1ENm^jFpXt%jG zRh9un|5BL%urU7kwXFUOUKXIPFllG?>ev^T^)65WWf=#zeG*?X$B-f5l?&NFwFmD<%)CLG-FrJD*17Mo+fv6zm2+ z!REHtszn@-Al1TB?RWZu$lCg9eN8PK3LkIeuaY-FnZQ=QFi}TOo)rQv~@al zZ7>6hdhQ3vR^$u!@4Ym;5nkl8pkIp|mCaffCQQGaJOaF`<$j~eQvME9&jZNBDH`G@ z@Y%s_Ra94axw>zuHL96qz6j0uK0_udd_TYSACd(ymBTH-*1S( z8A6^0+fv|T0#Kz`#=7$ZEGU&&vKX?XcH0u88w{KiQirbu6L_~k; zCSF1f8EM*WfJW-0vhmf@bQU4mI7_7A#doJati!%?ojD-Ca7PUlEMZh({@)SVXDrO7>@DZQ$&b^2~u}Clg5zx7}i9B(Kua%U<6jH7G2oZ)0P! z5`sGt{9i%PX8fj|1n82@D>Q7T)9;dDdqs9Ylo2nXN&(x(yWyu8IS0Z|IlLP4a5a0F zG)ZbRKlNwzDxn8{I_Cac=?t`Skd=HT-Hfn?@!-T$-ya*#KuH82yeh4wJ(@` zYd~=CD{>NpGq2{@brFI0IxK>qRzn9%RCD1OWDT&HIiu$v{Z(n6)5%IYvD0rWPD-~dLe4Npi=+R_E`RMG{91v?9^2I=FAxum@lsh-EJhT4h?V8lOe6jn z=JA}D)Y_u(lTG3n4!MTEATk70CmW&wm4nI$WalKpQGdKK0MM}Mga)F=jT3GtFhyx= z*nC)y5gdR9Iqd_pI=E5ukY@wIBr0VF!gya;cYU|TPJUdu{a6MB5y ztu4tNpdyCgB$1eY@YP;5vYHLtMdNT_BnoSU0`srEL8vaS4zD+wuz6?ui*9R4=0VM* z=1O{l*f(;^2~w65!e+X_2&O5`+W$>jkdF(#1H?KCzB@YQ7(uS3INZ>}hLILh;+`KA zX<+*yFE0rrskFhvovGS;4R&NL0IY$~{nlFA3Se&5K?M$nW8C<-V#0M!^m5!7-ORL$$c1lBRFs}m6m=UKb5ZYSTc!*FEo<8zuf9hR1r++r`X<0N@@Tk% z!?tYiT}v$t#f(>cO@?FRhJ9g1;Y{d{$fRH0Y$3TUymFk!CU7^jE!%4w=WSNZGJ36_ zezku`n{=L2WYg=&nmzY)%(viBTh|bXVu0Y$z@9rhhnWJt<(&)T=u{%jvDIk9r{31o}H-#JBrk5D5H*69E$hOI;bBhosT z?7s;Oa&-`+YNoGf>0E;~&)oxax!pmg{yWQXTF0nvNY?T3@;!dB}y5-#D z5Fpz?P?CJXpVF9IU*ECtqd8j4IAUR-216B_X(B zS^ny9vNM7paZP%irNgJFvow*f)_SkIRfrW46Rt|xD-^-DviOKh9KiN$>%G=+>Dl2B zG&|P zzoiT|s67QzL_SJDT?&%qsqZ78QXKeE5+|xTZTtd3y!NNcOXVK$Zvo=|^#Rn2I9jp* zYU-j_R~-bIKnBk)pgqOg<3X1H{wyvN0NQ{cZ;`W5fR58&0(e7CL-x!G=9f0_w++h< zD(GnC;T+NdN#_s9_6#@N1ut=Q{9P6M4H((Bt+Eg-k~he)b@m`eh7Wsq2St(POp!4F zV{GQ$RA$0rEd-#K2&EEn9-oI2gB+^Q+F$1 z2qOReN^{ntEnKGMp-z{qQzK+kG)-;+?m6R1xOpJ}MX1}$CgRh1uG#nD}^w6$Osez+6^pt1w8q(aud@?D(ez$QKm_nDg|n8E5A zPO-iV$Uxi|NBu2Aw#1oM}<#RWBKf@dDV z8K*i0><8>N;>r)`qW07Bk^0lLH_$Z#p#?5&eL-i7)#narZ(B8eSdaJ2{0t|q1I*3SENkoh8u68;Uu!I~gatFv z@Ml%2`7|O**sW84blZM*oVab25X1@1`&+tFpVPbWE8ctFk|rpTx8V2i@vL&dnE-7< z85Vh`E`Uc`AfU6)An~}@p%p%TdBC01hqoE25Se9eC5Dg8C+58&9gt9jDeYSjXCk?{)pIEVuai4Y8}$-vBqw)zAbc0OkjLLna;|92{5YZMr*8=)A}Ci{O9OXH@p@8y5wltS zVjJT#5HOR=*PwCvG^LKHk2OFrw9Efa1uL~y z2;mLG3TRw@hhN8TDI&(PEa=)@%5tG)BI*P>0Fu3NRfQJETOrbebloSZ%TaOf5cCkg zNizK6MeX%3J066Krr%_k+HTqc9SB+)#ndrSe=iJ;YmtqWe zN41r5>AmFw!o=S|8u1DavUPms;x9CyOck0DLI$|F<)Rc%oQ|@GuPD8FY%8&MYfjYh zglM}TQ9Z!t7yF)`RBn>S|k;s*FO*!Je4W8=8VlzKP0(rk#gyGiYSNl*6v@#SS@bEejs>{RB*N4-B?0 z?e?1#P9`sVT!%wp31C=+riSQT4^-blBOQ=~T0H!yA9rwt%W}Lw_?F&jc=vZ=fkj3X zOHgKJV~vB^uNQdyrQ+Yi_?qWw}|Iu<~VA> zXMBp^Fn1o@=#wApmHK!_wRzu$#-lF?0E(bI`YDC!G6@$hN*3;Jg!*oMd@}3bJ74qcIO^|CwWlAOcyi4V@kU@V;tD><=0&*<=$+T^-9K#f0uOS5Qv{a$zPgi?^!-h< zmj&qUk!q-*g`9q4_1q(&0-{+dFTW_~h%ss7T!+*^&nE~NBK*a}YYJ^cyXfjNYX*Z- z>CUjThm3MaJ|H^}SRjem00+K!0qLd}nVo~|tcIxaON7pn;xIh>HMy$S#V1$C{{BcW z7n1XJU070A88}69eIDO@Ot8sZNvP@oV3~$z*ZyaN|2yFo7 zkg8BYcq6vlxmQ%&G}o9<3Kq1;lwu{T)Ktq+ygc(uUfUlqT$8*gsT%0GxKQ?@aS5*%%m`9XQl>4_b7FYU*9pD1R|q@&_khm}P$3 z)R)rMA8JTT&m=H3F6}m<03&tTX@+>5>KD-K?>N;GDn8H`d-aLx|7+-KFYA z>*wm-{t}J%9B6D)wdovA9UY*^oMU_*FGeVx$OKyfB`s10E@Q2-&1qg(EBGo2yTH4hzzlXp_flS z2t;R`Jr7I8SPNsrd;TymQSh#`BQ8B2tODh9=TK3!Py->&!^HVT2a^90l^=w>hgQ9$oO~ z?&qG29NxbpBTV@BZ3(derACWj01|+Pvvq@6ZE9B-SjElU)l{#cclM+LWBMBhPlzDN z_WFa@r{7(~&)YTM%qHHeHred7jz|R_BhH4&N>~FQL25hNj^-p zPHvpLA%l_t%Kr2((Z064qT=r~-ZvXF(W|q*;HL0ogCke&hLz;=wXN9a*jowxB4w8_sf>cB6P>)kSRKMgnmnDb zSBq$m2gP;ST?8~Qjh+aU589_-pO52dk_KR679;d$Z-{fVOKVTvY!zWs{ADcHWcvet zJ+NupJGOM&V67S;q}x}kf??9Iv&MOwchJAijMf41KN|?`KQ0eClOktKxH*Y86XkLc zXtuZ}*Yu=JzDNR(YBON;c*>Tb>V7fOyD5Jx)36j#ZWTVmZvD~}I;FKvL|uQlxd1)Z zD<(^4deNKh4QiTsV;YjC4ABuZ45kFdbe4HvdIBZ8COzpTPWoL5kIGLS_5=I4%)Zw_ zmW>T&wq~VY)LYFhLHmSyiY_VFZyE;)V>Gtoo?ZA0BVWZYls-iG)7PeEZ8b{i&e9MT zt|(ebLI{RyEw_52%>epoKbXn9(6@u;TE{yI1jnVdmxFVM()S_R^%$!!_<4{F1h;FZ zpY5;pQid#iBpjRw3*q6dmq0OIGgDA%Q`Ic+1C5Tws;*}sd_!v@& zsA6DzQ$$}dsPk7JY$ya{gEn>$i~P+SQP}rqTof3%ixS5uHH0W@vP(}TYJfXwVL&%- zT$Pw_SCvzp93tw0oxy?DZINiximNC64$I)bj`17a5+wrA=beqnks;0;Py8qg4#vyl zm2Tzttu#N9eM8cahTEpcr;HIYT#ls2d@f5I%Af@tR1J?$^%H*5Bx2FR6&HOa*_T-% zTShk$13(4o7si`J_rmX2EAN`vlddI}MzbNc6WDn?JKF1~eeo}k5O_uq--%m>sH{M} z8bkV&;L-?>`PJwMvc$Tm-&x>L%i`h31>D1FL{X&le{bQr$Y@Fe>J%bv{BS|e5rKV1 zs$@{Gr9X{vaKnkbtt%FAwn-b2Cg!CZa6k~q8)`CxgSV=CaH5XPa%tDbwj={Ua6vv3 z)?}5`1)~mg`{rp-$c@I-EImS^NbDJ|ogni=h;LhY^PD@&_R0a4&Zo@IDpSI*yHu%O zy6RV%nty5gE3{mSlOZBIc4ZBE(vrT_ABFFIc;`gEUfMYTq)3G!MC#}^;V2>EH~hup z&ZjsKSiK9*TxR7wKi|6?6l3luvCoV*<3em6zNRnRa}tqeER1D4J%Zebcm-=LBHH=r z_&f3P?nrGZn6?P*O>YDR3BaBU7I2i8uj#z{0RE&w1tWaRsJE0|pjJP$L#}q>vv8T0 z05L$$zpJE(EJ{Vam*xV*Lp}205)@rCL-?@i9(@8x!Cx>B-~_RDd9r`?e2WXS-VaTe zV$3m2?D+^^lDQ6+Zxd}jh0!e!*$~ez5l+$X(9$KD9&xo(~t0y-4$3e>Bp1+NGJ1;1#rffQVhxFXOs? zkl;$(y#N^+c4Y1}O-(t0glUofsdK!(W?OT=T-@QKyg8z&u%S|7P4MH)q**do~QMh=l5=`MQVLF1`cb{DhW9 zGb(%bSb=t+=ejKe$y5;_b^5eHDN?HmjR(R(?~8!Z(=lQj;q_Y|l^Ce7eB{-E33YVt z`Wy5w9nE!h*iYrza3ms#E?a5IVtZm&OI((R2L2cj&83RdC~3!8)n01fcsgvjGi#YS z!k{pZ^%>8e%gq`AfGmxCPTcHwNGso&N4g{^;3@psW41EiNdjH+5Se~Ul=$?vMJ|fP zX>gHNFw7ZWcn7!#rflP%ay+`ch*Et2g*7NA@W(cb%FZLeF9}_?UnbB}VazT1-^)qk zegVWavuu%K=)aMX;@>ikrmw#PNL9R?ZgUl^)(DOlg3`9Z4_-o@&g~KItGR#UOxosb zTo-NJoG5Ur$=z-;{V}8|j*IolKrpmLVp-TFS)0@V_%K>MkGYHNP>kmn)mHA6qw$hq zflfYYV;O+=7R>}mExC1=Psl<$V^(1WUBCQ+fps(r5EbQHKF~nBbYO#f{MB~h&0G#~ zf&rITNVzWK7$PGy-i3&_bp;MU*ujrzQ;o2ovy1=}52Jl$cpr6P8zE;2G;7|`{ZT4V zI5TvHjPnRXTVhFdQ4V#LkO~zQ${vW~kAHb6F_0ujeUpR;uE|kW*zkubqcZO(Q!?0> zeBBK=Xj)L+`RZe-IVpSz&vWA3?9upKlmmjI1tE)J+FGgX1Ql6sjnVH!$5d7Vuu5w) zgVKI?AsvwH`b>>00j&H8+A1nqqMM2jAarLqyPt~@Gwk<`x5z$`^z)b5K7smoZV~5N z8#>T!i2`!)v7AO=);`Q_xNMc-r)W9O4jz@0!xt>Ahc$!~_aczgPS-kH^fO^&Lk|oG zsU{$kS8-Vm^e9SZNuIUVL*lEU9wwNXv9ob@6RS{x>o4=5Fz>KU>jj7cWbYeX5Q+d2 zBLC$1$vpELq)K)_*Xq)#Of6Dh{(y;{Rg5ApntW#k%CfCiMQ}x^-u4I7_a%_nqyFfg zD@F{3wxARKU?69>B*~g~PPY@Th_>5-_N3Y49?(`?kKx2DBzIto6YzQFhh-SOU-si0 zepqWIe7jWMoxbRTr3s**JZ|T!=k-W92i01qYFQu~S5%&n9#ICx4hm&!UKy)VJc0w1 z`3kx3cL=rgW}RjdMj#kP#*xOJ!w}vP=dWxsq|` z2!GA?6W9_7B^;I`q(z+gPUX6Rq7V-@BPjY%5nUf=eGe+9oDzsSR^4)lNe@QLQ9)kV zy-_2U-s7D2Sa<8)d~2V~WHwun`Cr89C1WGY*sH<-lA{C=fG=}0&1YOlkVtALq7F?P zQGtYml2p9;F4(b|tm_tVb|V2Q=b55^fGg3gkQC(Xu-4?$iURw%ck{gl(FMD_XmRTR z8YE~3&DZQOEJ4-e9;ZYrkbMR?SgEMWPHn^b1L}C`?T=|Hx^yWu)^hc$`zqE?WI2X5 za*EB3yitGmhjT+jx2yN25SU&(rL3k`3)SXPZ@W(!?l>nxohP}a#rlTaxf$T>(d6$Q zuuzID#@zv2tvRddO<;92y({-LU3&P~SzCk)=%}m?FocKE;NSWZpreO5*nDea$eE?k zu2e3uHM(C=65?%@N^)UWFa+4-aEJ(WG~`FThqf!$Hr1b~`RV}w=m*n%Kj!FP@%}&$ zSMTc2^_JZi5m1+{KR_UmoeRhna%Or>ZRHQLm5vQEeSTlCpDr|hZhPsz)0fZT6!mI| zD>IW3W5tmIE&>vy+2 z{CECRs(bfmx9xF=q$2p{C;;iK>*b@p&}p>u zG(Z82NW9A0NU+qLEjirP7|EFL+hxA~;5Pu#37# z!F=js8akSv6EzVow=E<%)0WjYlmZuJi`a_z9OQYs9s_$^Eh8}N>lq}@oDZ?%b|t7| zbwE+D(?(yywq*IHiaY&%sS}Pslw*AyOJ($7nTIYrPf-{ zcEG}na#nmBM!MdfsV*wL_t$ka1<9io35|ShaI40(-psz1m$q-M{uhRAiMmMbdXUL$s6Gw5;Ttf z=o0!dHz3oJX~tkGS-fd!^~>MWZ&RKRo1!W7de>N-21EwE4^kx0`PFg(toNIjst`g z8F2WP=BFa}5j>uuy#OG6+0-#UHJKqBd2Y-W`NBZ7P&>Dt7otjNM>b#_v4S`bY;`m7#ekI3YL=6ypI+$z zHNMDjRG7CGW1M}N3(8?X95vmfQoG&t?eAtX-R~Je`eKd7`}ty+FsL0(nFRi&WMD(< zjt9?J{rxnbb!tykO~bJcykY@D`3zY$)gfMCsM@LHUkIC885xmGrhsBXLhsI%7pGG4VKnt3e#t{&h$N=6c*EEqrjcNl;6vEB;k6h{Uq?HI<@XZ@nQhPSU2_Z$BcX8X)wEbRNl0gxbwbJSPR6S?IQ&Ksg&R`xfo z4!iyyKGtt--V#lcm`xD}ZBhb02PWVjZ@MmY(QUPykpQB$WtjPk=#i42CnW$vI(&y7 z`8}TWp3+3jw|^9!wSuc!6owy&0=E(iF2SKANP@dQ{p_i3bLV72Hf#OzO(32fbT}Ke zR4fxg)-%GVuC!XEv!(O32B8a>jp~%4%@{bqZ>I!|U~%d#tl<{pVnC3ldz3nP;+G=S zx`6rBPM8}CWECC+v55KgiCGETV|>I6#HjpXp$|^z%*bUNlR}NRlkD7kQTMN1DYW^U zcgSmmr@~<9NBVH{adH3V6#%&Yj)y$b#?jH&F*C@(i1Js_p)8VUv3_qIXtTZ)`<)#3 zhDwqquku`u)(gG_q(_7Z`~5;zXH5g|)t)3-U8P07Nz`!QjHQ><@aqh(k4iuwxZY*& zhFqFo@n0j(3L2UpBrVZkA&$nS1)c^+B|Zfg7ZU*9RK9Bir0H^>vC8vD%n+E`*H80q zW9N3?cLHvZ10w**R8{((z%r~MG(B9BAUER^EL*fXl9af2C#F$(QUFrTkUSlB!AND$ zNZx$Y4l%<^WDx_N9S-j6yX}Y$p$xfRiww|aoiz~=nKvVaN_$2k>hl5D5Hze^c|{g} zb||bERLr>26$TX)0x;pB?8!-0A58$I2ULsnvAdhdPg(HRBSj=8e?M6lLcgZfjCWKx z1D2>IC`%26wYA2(Stb)qAoFV8^g8kAR*<0UF>?DAb~_5=Kqt$RS3Z$pzyEwYEYL6x z(Pu+F9jmmqj}7k)uI1P4WkZMwLD@~y{qZ+xp3T91)uKyyAZ@tByqW~_2OUcR1R9v+ z>=oGdEImlYs*EH-KGTRlx{1xBg7cx$kLpJ8sbpy!wo8V5kb$#$;u`UepldDJF1ifj zW3=+5%Ru=YczR*K^_CLb%aY}?diBi-(sqNXxU=}U7(o{_O^6*Py4+yvp_fx@4;0w+y2ugPRxHm^?V(6z|1x)?eE5zTzaJG1W zW7!OD)0_>Umm8=xY*v`_(gp{er3Ahv)0Xbz6q+p!_K2BxuexZwA9Q?J(dsEBC9|5KnYe8u+BTaSBLYU&;Y| z8hm2`0D{sidBId8)>2?b!eBP5nr0y3E?{g;AviB#bb??SkKz4r)`e!?5LzF@)M*gf zOCn4GX*Pbqs``I6Q6s?&LNPnvKji$Oy|t(9Kchm0QES7YJU$ZkBQ&3Zi&ZjGYSP9Y~- z>I2BUfI%BbO=Oczw%7Dh+CrIfrHh_mw77HkzE&Pm`Vg(ersK=o5#xxGZ8CZMDG>d^j5z?jywmrm&5s`yPy^5c(13Zh_!N&0`* z!rTnO&wut?4L&a-=11onCs^k@^Io;0l>6P0`e7g=23db-$elj{_#p1DrE?mxc^NkM z45_yVm_`9n;&bt24NN-_Dbv-qUr|M#ac?k=%Hzo%5q7Nw=z~YylPPP$J{Kn82%Hwk z^x6jTC&$6_w4*Jg1l1_i>N7i*p->D}4^H}eK7 z)&Ubj@a=!GD2f+c*#M*%kNC%km1uNYx`w|E(e|HYyoS8KduSs;1XX7Jgzi8Cw4Pb3 zyzS5Nt5&9|y;CK;eOi1vWVQn1Pzc393wngX0qa2+J-XWrPqLmFymK!v zdVyjj`pwkK8@y20-be6V$UPY(?zU#4Jb-6!Q>sFpsUM?M_nlZIC+qG`j(3(;T;r@A}cEKgVg10vH+2kY|6JJA=^Q6HbTWoIPW%FPBa(G;|nqq0jx0} z$%x!`9`mKd{ap=+?LT8*HCA_%$vc1;uf$_ezF?o%FLnm1z#Mo12v}KJ{gO*%pWI+~ zrA~^k>Wvn~dqC)s%?D^RD*@DP!*b|9ubSASVH8tGCBR;@w@9L5e)`Mdq8s%BB~-a2 zyMF_;E5&+t2+n3KDc?}5+(#wa<5uFcPcj1COX(=D7c9FCeo71d+(M@=I6-{4UvW|n z=f>MAqw&viXj8!`xSWpF;)wV0DBBSI84fpcf)1* zyAB)MezOChR+G+i5ZplvS%P^T1F|swben)D5aizbQ6=*fJs+s_A52jIq5N}FaJ#S< znO87^W)2)4Ro&mj_W96gYKJetl2~+J9ovVAoeC!^&>#Aru>RaDY-=R_x@h{`o(929 zi(qs9iVZ+3vh-)KtYM86FOMWGZ(Zcu8N%$0((oFz$_5SzO`~Pgtnu-Th?k>H{Cv9dxb7H+x=IZX2yQAOLVGrC ze$KzIh`(d{48O8%Rnl#LZKPk25e&~27KB?H70OS6?$4bs(8KDjyBeGyQQjdtcuoEJHq8)XvK3Iaib8`^h zBpvs0+JWXVs(+p4M~!~YG-9|(DtaN&p3}$Dj6goWM^D`EoSh4|oi+KEEis?5CHIBY zk0ouiT#?V{kc@Dwd^}XUTT6K}BO0GBPx{0onWFP?b*OWRuDvo_FEFl^2ge_cm(Bp3 zMj!`ij9G$diiUXeOwFq=w#q7y&sr-AwO(nDrl*EA|hLCc? zdG1Xg;{lu_L~-Ip;Q_IMH2G~5RrmuWV=u}@$`g>KU$AD?Vwl;jB7dEm#e9sOE2 zpaGRE^OmjH(SEVB9pGu0Unpt$h6}oi5`clfP4}4A=EN<^v}7+U%Fi~V!8kAC+d;f* zhi(W@7)Nem@!1g=9Vmr2VEz%T)*94Rcfu;0O&_q_}^8v+f!~=-Lm=+gh|nx%!@KWLD^0E05s7DAaAWN zVSPbzVS^7Gv)1w@E|wmNvD#Qic+*E-IkFRwj#Slbx=RHrdeq!9%WWES-oIa<<*a`x z_+&L$TDyqrUCp_owVcq7EHGi38!1!g2DKJ2PaNzg{|Zo=_?F1u)fw$SBH(68R37OA z;`Pd(G)xj_)M2Ye@TB)pr?^?#^5jBaZW=<}r#f>X-8-E;qX%7f6Kxsj39FNwJ6!YK z-~}m|{pL>33&G7trGf59;^uejg~Y-v^i=$;WG#wQ>6?i>O{zWxot`P7p{Eh36-b#n zYXUt$G%&vQ8o`aqu1MSMO#N1XG^rgAbR8TSaFpu1))h_o)ODz<4tNZJ7uFyMBUcaH%@G^v05Ky+& zKY)TU&?~TbFw~f**TG=8T5E0QC(!l}?4#J%cRhf$T-y&&T|D)Kx1FP`zFH>v>~F7} zGDHnu{dgX4GG?ytNZA%JbvD3w-W=ZoU6B!cK1Lan7*k&vatDO95N49{%2ZOPf<_tF zi5}f1X5Ey0VSGve$nUV${59j#r-!#Q7GckGiZBgv4rDb6?TpF=I<3YM&zHV%lE*bE z#@Q5Hv=VqTKY#MWcUxqm#d|U9Z{4cqS@eS}G zbPexeg3xL8{OPR%*`c22!mI}$9LU7QzgAa zj@$4te&Yhmy$PY9*N}rWF_robZdn}EVmod(R>Jx}>#Ro;Bd|&QVUdlp5yzL%Fw@Sa zP95SS&~SHPdF-+NNsGDYC!*w@;ejiVe&^ZRZUxphN*rBhiSD!+lqA-E>)`|Dc7`U0 z(Ew@Xu4$d={8vTpnA@m*h+Yc)1)3T;U~79ZWxsSY89NMXioD4`eXTx_qg;y=7Qh3l zgP-DqjmscvnVhC&m;fp0|MWUTuNEYVwhSibG$<-7-Q9`}-_AI|nJ1~j6`Oh_aU;W~ zL}@c;lm@=K^^&kA5;dg&9i!2S50L6f;5Wu5<$pKSoBP~%-YBJ_jVWXZNr z9g6fvUD1rjynx<=hjU@0CcT;`PyO{cz&zg7TP_-}DEr{7CD2w_|H>{q0NdwW8-bQT za|JKxXv_ ztrWD|mq1&_mL>r0ur{Xk|37>@nZsoVh@gKC;4SYyS`aC8*aBOu{^jcGsg)DFKYKXh z3WrkNMll6m1bBm8sYP6<0XCRDFt+XzNTYuwu0+NVP&T&u0@<>k^P6dl@fxm{;vr1? z!YM$M|VXO zEJzL*S&(SN1^<L zW)9ZI8#vA97lx71``%xq543UW0OnT#Rr)Fwnjgq`N?gWoAOz#xy#^`i0Qx8B?Iv+d zo_1)|eL%=328Z}H9B0j>kEV7nfb0A+3;8YXXL6z!(kf}!$?r2g0Cb|k+30z=OzOZ+Bbm>fy+9k{DQ+_f??_p(M zucpQwEg}$%2F?PYki41!-siLC8qY!KUE9{!NwTVvK~IR`%!w9-GpTBb;Akf-1`-qr z7w$@>0#`cXTK1j?G{QpsjTmpvTb5x~5IK9(JKsFSvruFhuzW`)s4~4;J{d8(so(s& z%~d^8T`;NDOZOb*nu{PjpLzh|_O>_CZss1;q8ZI!WzT>J1ci+q!g10<<1Q{^wPdrL zsXoP3lGEdT1z6oh7R1DP_}WX21$BVw&pWsnQeuggr_B!KG0kfVKpH%lbCC0ir5p8xWEJfZpYoKl9>e!aJ_6Ay&UKabO3*W+Q7D%l zhi@&H?x_e{<@3Fe40OD}87!G=)`3+vb`T0KF@RXGW$a4uA)9t`0-Dr_tUywb+f@qihViM)}+IGPz`PS!7wB3(=DK z-QK=|g{vqe^)pcT6#}397?P6F48#G_1@+|;jDU%%S!ExnLtrMmRn>5O5?wsV>Y)v z!NzoC=T0L$J8*y{1upFayr+J>3>^o%P-}LYKg{9c7J%}dmF6!kwUizJDxR+ZIlF`4 zsFIfpqP|aO2m+c9Kw1$nTtKQ9`1#Sd-}76afPT;f+Ln&k7>^b&F>lZ-qMOfI7bEt2PNz55@93^;%AjL9y8c`A9 z*cOs~W&W?UpeX|+%w-7ONu|08$hCel5Z9QwQk=KV+wW!4vf|UM@{U{pUWce_M+Nk2 zuhczEIwbQ*87QxLPowL8?fVFj$x3NGm5?CGpOZJp!MR@RI7E$~iOAKUTP7%v-mjLF zd)F1*6!M+Sy#^JPvjF&GGkvH%(m-WDxc3e8C(!5L&FyY-YnJa%k? z-t7$#4?s?eDdRz#&2)!id`*tLK6HHPuR^Z5^fV?`K3^peuJQvg(&?i=p$!aI^Sc0M zgl>AKqsKQC6UxdsdP5*@$=7mCMHxU+Ya3W2M(KNZc3% z2kEkqj268zxuuU%AT{6FT28^QyA6~S%Wt7@9(`THLtsfYGw`?jAuo_UKoU^=Dp&(I zk-fD-jy_-giG8U&HsR_e*=+s1zy^{Z^40GW1_f>+I{4^V543oqgRi3fgfs zLIy0J0cDiQ6KI}G7_Kwx4PwVYc3up)9xO<6?CNEPU-?>IHrA_gKfhz_-mV7nFY?_P zL}y6jnN&qY>@}K^6xiNbX)gdj zt?dN)_~%}o%*P<{!Ye=pQX)o zG+X12=;?4{)LuUns`^hkis0f)c)R(Kzb_CK)q*{p9M*kY(@;E<8PvDEG~O6;t9+eW zoMJ2x*?l2iks0Qo*IK8Y@ODH@b*-O~6!p-zkXf$2Bh`^+w#o1;Z!>GOqY*OO}bevLDEcL&Q9W2lE2hUCRfB$ta#IBV(Y(0gsAL-cQ_om?naEnTDvN2J|OivU|IEI`k2kv2i<{$ z$77OVsMmx$cy(_-j7lToV;)9iv~}I)R<74m&2MGiL{b|UqP8? z4{f>tB_=;xwqw+s@1S3_jZQu{?z?wbB4VC70U%1R%=h+13c+i-um?FX3a-Y(gAp+q z1hM7w!yf|AS9sB{{zp>E9Qn})*j^x>D{SaTZC>|#x0BXC)&5%0o06fNXx?176lk&( z8bgSqm#zmq0VaVaZBwe4Bmo@u2s#Y3*CH#Ag)BzRU*$}j3x45~-CR)B@NmfaXZ%1d zfYWgMf+aYCA@0jC(BJ^^P0KPBZt~e_kry93w z%HY0dDkpcNm$Ks0%de{7?VeFCrk8ivc7y-L9G@hm8Nd#v;H;>V8KmRjh{7S4h;KqR zjkl>qx;-Ux1o=ze52*b0a&j<{)Oxrte3AjNV zT9o_9Mfq`Mjc25j#ba5OX2BVfV#|y4bU>30l;6ef0PHPinzIL=VWgt%hfhgmBed_* zl;pQ5bEcq~PlC#4^H-y zo;UcEVCV^)mm1ufB3@*?MlJzrtq5@ibTrj=%;2+Zg0C)D3c_l&JRwX@5oR~AygtHN zq?+2V!9TNA2^l{o{hSM(z{qOTBPwsN4DZq;;_TyFL*ND6>JyPfvgn6W=S5qR~vE zv=?T_&jDRQ*$x2}C{9ojyJP*@e0VKEFyLXS4+R+Eh9C3COM{E%C!$N3>eMj9FTeTx z)qdwdiMnyb645if|7{Cd24sxaWor`%=i7cY&$mY``msx?>4)zke5_P$D>e6?XgH`@ zh33M}w5JTi}ChnIzZDAgUrY>Bh4z>VL-veS4DYb(?(0003!FC%-u#QsWS zn{ZM<&UCnLfl+IC)_^g!pcpr{n$qW&Y7o*>Ke#9~xkkJOy+d$)7ynShhd5N!`48H;&*sSS0ycr5?d3@w|2|1mxV(x<-L8)OMpOJE*+_MgV(RGOx2)7<& z>zfS{5!Y;JQQpI{ty4GGM!)l8__vsXS-J&V3DCR@yZCd>3;6EHLpL(c0Mly&ob`q4KKl! zM$Z^-n1Iq7Nx0@N_|Z{p(={L}nn5r8fYEOUgm*OyTV|TrnK=OO zWb?PdV_Cm%yCL<`-cgChyl@z121xJrjK_cshpXnD~B<_dZJ<4 zBA78UV~~j=AooN8iu%KevtGR?h5ho`fbNS}2Exc7_!$?7djNUDu-^uQJ;4I7GARNx zJ3YIWz~m)oV;GLzdApk&>0oORXg&h8@5L>FbP)LYm8*o7qGCB?E#uW)AQ3+q?ezBB zZNO?^8g*=%!m$ats8nEaKY~vN=sFNT0;e)VDV!n`yIFzs?g{d3S^KL zaZ>~!Id8VYfpa#yITFaU?QyWX0)1yHHjc=90jl>FW<}LAwveh(WVE=8(0rOQaJ`6pRX_eKh}fB@f~k|bphYeK#MdD zVsO|xYLr>7m(({GE*OfCGkMFptcRUcYP#z=Px>}N_TR4GI^4*WHP)HNRnC!;%`>I+m7)rq>Rl}-vRE&ZR` z@buy)UJQU{CBda-gZD>ysHca2kAIXr0e!AkoV{nHW}EM>oxoy)g<9mp0wz=C zVhVT#gP{D5f@BBhLm2~`+K_^G7@)sVOntHyDMf&Qu(IMIFzGXqL#tF`Cx^Zvjnl9E zd$BYIpUqM-{rh9q;kTZk7kex0E4pkQvAqZZf3fvEge85 zpGk(~X)aW{L)l_QY_0Y&Q&Re#8v{K7^w&&-`}tnl@v;cJJU}%Oktnu>?wWjsdveim zQMrsqkvGULS2rWY;j{ax!F_$IW)#CB&jwoZ@zDkb5U3yFDjB?^O$ta@U$CT9eZIKF z@^5VffrFg_9Aan_Y4Q=z^`p&P8gx70M1;CyDpU{#NR1y!w)i;&q8RV5TX7p7;X4t& zF~)T|2~;RV)i!t-tRO8=2vVrlA6inV-KINZx}|EB5!dK(74k!k9q39DxKHhi%V6=c zekE;t146u)Ajc0up{~Ul`f6Q(hlr{tqv;&XsQcp8>;A=-+);j^Vp|D;g_HWoFOc5KxJx?K#rFJj%`Ax*|DZsEvf8iBw|M?_wSjbRu89qGPf{hyWt4DL za+``In>F_XI0P=cPo|qo-04@VZLNku-Wg~4g_L!G6&52ZM8*olglR7cb4cGV+i6!m zp6*9?c8|I3cRl5jn~Q5@6}oFVv#%m1L*H$i_Mqjn)L74IbMIG!uL1DadqBf}Ll^O9 z?mr%NNp$1A{xd z0#wo-l8PIS>SXVkI*e7jwAr}f$qMBo%t^3fyx|yrg5v*q%RfM;{4!RYhTd#m?zO+z z>+(n6C8*}uAozs?4#V`07B$#-4(!0|E2*2~^A&n;c>-GL^|Rt}Nw}ws$hrDuOGn`X zVZBfB$C6^Z$Ly>($2pD zL0p_KuC-X}x^HryS2_c*1MQkG%M0|{E{AX<9rh_phZRm}ideu|1)6c~jCTlJdP(53 zNZoh)nPsYe2OP|8fmx3D$6ODUqV%8P)-FvJ(phj>_j-gQx&Oa)hvHLvwlRlfO=-UR zPR3f$dOnmM7Ym9*@W$U`7YN4P=I1XCefj%SGj6AxYb+H#3o&;N`Lclzi`3XHP@D^=R z#&5f2E>_FO0E|%3>hE}uryO#!EPX8bop;uBc;7=`+x3;rb+^_u86yMgEp*?`ry>G$ z>x3jr^%1nG*OX3s6_iNQp^pToX@iSJv&r!~r*V@huH;8B7EEb+?s~mVj4rA#@dD@) zN2_Q9oefSzSzY3n!gVx!Tk+G)=>J)>#nq%`rUaD;Hh>L~L$DyJG2MUMZl7r=;^uMw<2qjrsC@2ttWf&)AFIAObj8KO_;|a*gA)2(Aqj=*Wk@50 ze4Kek!GipWU`Ym>QVaL}%vPnT1&LeJ;er)JK>q&+4J@a1Rz%<}zxuBzcZ>+wvgAM_ zf+tEm3~1_&994W#mFX5iv5#Nme@K9$ej~mb`;P$2#D>vzk1SE9?Se;l<3lTbdZW`@ zh4e2GjGA(}{N6&uDV?&2Nlb?nzQ?@Bl;kM=bEG}5*3VlC^$u)n$OhcDABDj1xLANV z-?9p+Obhw{FKkq?|0nD$FAC-NTz;?yA4cd7w5WTUem z%&6aw81OH-k;*GS&Q;_9pqqGOG%QB@;>XAZq|!U{Xg*$&8nHA%C9AOgmRg&(S}vbG zKCGnYnfdoQzTdR6TSthz5X(+vP+WVdQ{(N^Py3TxL12D_nt2ZGkI0CORB&uN12V&OQ;tG;!TwG}Ff_#i|7TXanj z@#0(C`HAu3dm57rl+8S0oa8qf9)MHH9P*CJ@Y}Yv@t{IfWQ|=@VJ4t&14nKJoK81x zEO-(J-C00Pk4rNZL8Ey^FCB3@K#aZ(lz8RpOwyrFU@+E9VuaPM4Ywa8QL0~W4F#5{ z=kEj~2=q~#?tR0tPUsIj9JjGVgqecU#sVQ6@hbgMGpS(OCQrhdYV3%*wsQKF$j!c2 zo`pFd#)rp5efv$^%6lNCbJ%dv1;yZ$G=&cYJ`yV@@lGm>0vrTAv*G)mUBz4ZjeG+z z00R*$j~2sQ|Ebehi|#ms6fU?fCa!fFyht$hT~Yjs?sHB(<%%r;&_`JLs+Z|wdwnP=LcLh!#^}NfxGyqT7p|(719v&1x`Kkcy7*>mDS!J8a?;Z%OzXKU6#C0OiV+q7dBFS zjR2h?&u2Z^QmlgD|G`<&T)f9p^&0bhURru90tJkhD_vHv|ekd<3Qd-F4u;_l*3P= zwLBL!GzzIui~yVsELW`H>|u7xLE2!wK|k)a6=YN#G!iEn7W_~1vsSn zrtI!aD1|c(iy5>P2*3@dai6T*dcS@iAv{w;cUbvhxV#!ZPr64lPB9Rz42TrJD?pat zu=v|?P#hU^_`<)V4mV86QgeCi1BhZp%|*6d!Rd5()*dgLgz37{K4_5Rf-J)IE;D9z zp@u(z?GCZ|?a{p%ELFGSpy0K7mZ6l`0Nzh{i*RjLgM%}J-n5OOJPgB|iQViPS$XBM zq4(=U(k#Ka%e;eR0_SelvE*$MdJC^I@YR@px@fIM^0yGk&;NSLEu4MX(bMoh3+4A|*g{Zi$7 zIQ!XVuOml@(wihNe6f|qh1f5ch`>RFz;aNMO0}|CDAp0lATep@)oh$ z1_9n(H3&Pph@4gGC*XR$`hhKiNMDjZN0C=j>Ag(GN z!LcCo>()VE5$C6XC8+`~&8X3yM)5HRcWKW!%CBc>D~o`gzOO8IK4z7tbZ_M=PQ1;7 zUJYl#*CK9a!n?+u0ECvALav+v079kAvs_R;lJUaCK6CKyoN&H`pOB%j_jE{t`B2cY zLI=8EJlm>^Cw}N{Fd2h1DxYvsIZAm5fLA7jxHIiZ!~3b{Sd(3H&K;`pI&(?VDAfw! zpt$1;O}rLtXZoJJ+ys#;$#?$S=Jof!WTJUUiO;?91y%qjwVayqcJHxip6RO=Q=><$ zK=KvLOrh@cleFX+D+MFzqLCZ5sWI$a1SP6jw#~>PL0Y2_!h6@Z@6;a{*kFZ$)>^)S zR-?%Z=uJ6#n|9|)a*o*?Lx}XYoC+}jum$+lcOfu; z62al=b^-|22e*0qBg_Ge-<7bwW*A9tX!hemSuck(YYw2xnm*Jmq$lfNErp=$IUz`(jw1z;+6CRY9LH(aT9rqR!Hf}Z3{ z2^cRs{YO!;IR`o7m<6FB6mOa7yVXHa_EsH_fxwR&)IFm0|2Hu9$Q1>i$1lQe2Y|P; zQu`^a!S9^%V>YQ{OanLb`qVEXPsjjL<`~rvaSecHfr?-o(y;S%!Zj+Q{mYmQY0xcn z98ZK*qQWTaOuc9@87RyN-JhD;HC&K@;rn!11Lx=SprZ0xJW~xm!<$Jn(3tEA6Id>3bUuy*!;pn~*?>LI`3n{a%)-U`z8n~q*i@$@*N2xHaQ zM-HF}ang6VhZDDQl}0kcK6bsg>H0T|pl>&qx_1tg@7wFxz&4gfT;We-RIV3!U$ysIBKkwuc`{~pRj zQ@Qy7v+CXWimm|-42NqNl!8_W;PZv68Lm^WWYvz%`>SvBsbnHQf9Z(&a~a^Ko?!m> z!w?6MXHr}qMgtO_nqV5vfl-`QQnrb6)`M7k+Ya>kGTq2qo9JE^4g1(kXRYynGPkkd|BO5U~u7`7;j=9?WQ>;`1e>o6~g z1?Otj>R6!@13wfMC|ZCI6YS>+I1S~xrY^oW3pxYIIQ4Cbh(_f0u3|Jx z-wtDLtoVI5g5CXWemNF#F14Fyl~@SL%<=7)=87x@&!PyXZ>2YJ)UxyaROcAXR+G({ zzf^6U80ezQl&+7G@;~kS+OAOwq=dW7qz!wZ6K~!dei>Ma8jzR({i)$Y62!Z3=9QO7 z9)Q^#!t(hj7^|`EGqF;F4rwaR*{vGyyF+8XS3#mEN8lY?6WFRVd=w)D@jjmClv!ab zb`2zp+xBmfAs}}eAw@<44ON_2*5N>7fGb}S;PY_2m&@T0v*%-d1iAhPTtkN=CSdtR6wi}?$y>M`~^IP zGd2_S>B7a9-!J@?f1S5@D8$a+$kfD>K^~K)G`CR5UNakjUUDi2MDB%rVpKLskbqxr z(36+WubszyIzKN#$qEA<>EvfDT!@g-cOV_UExxR{Ho#%)KP zErLU^IPHs&M%4834tiA24M3r}Ri*Q31G#NJ-&uLR!NMN>eRz0hAH_t`6D_?Gl<(;J zBDEVdG?yeIVv8o}y?bjC?B4#(`Zv<%2(Z(NJ3rKYrhAIC!ZsvI<4^$|!00+MC?J4d zzmJ^g)w7PwW*LlLPCluUE2iwC+5D6m+&Q((s9eoL3%eh#l1M@5dp$8ou5KGQ2Hkcj^^6tac0I9&Z zD`P06GMSe2(#9DQ`!Xc=v~vs^SfabIBak+ku7MA;NXL=VW%PyDDYP~}e1*lfWr+ri zhSGoeE4@HB*lZrev63e{;*1enn1KbHq)j0Av~B=6-~FNxAoo&WGl?^fhkB1Oe&8? z5pjT6em1J$dnyBm&ar}pbMY}ih!xiTAqJ^GBtcOxGk5i?>F-1HKmWRu>ERo6pu4eQ zgM&jp0}n{#?%ZeYc&7uL)0Nc$LnL@J_TJf$S`~8UI{9V!6m#0RlYyHxLFM+4AS#4& ztouHf!-ThXT>tnXlp%2F2=igzUqJ$+ElNPYgJ{Fs*{LSi3|~n@m|nEc&JJdbF zT)3E^bnQ9Gn_bH!{lt&)`H3aOchN39ZphKeIn7PWhq(qHa?e?t78HZ#w$4>ASR1JyH`Wl!5lw$uFJAysP}J7qApc zfxYVV@=!L=v(?Xq8hF{NSi`(~`uh1z>NRu&WB-KxlxfOr_O2j)h{(_;EmgYMP2T$S z^?VsOOTY}iKusiF9R$%{2>i|2pH^%xwgQZ7He$cy*TzE#N@69(5EXFgrR0mK^~o{j z%op^DMXCNnF$emX$-BbwgbDX+{M-<6*ggwO6nkfEBljz8C0=m4ZV3bdM!=azk1NLp zXEdrda>4exi#Si_=r>C1v&v|9RhLtFv%5&|WP4+EF_*oF+et}WGVcN!_$bvNbbQayE z-*SkC+!9LY!Ugnda+(j33Kz4`sd(d?`z+mynjxPlJLn; z(Y(cN0oI>PO5D`QDfDYu;KvOK!{9*W^p*phg`q@qG=bYz6bu1`8hV0JZ*1X;b3#)3 z`u#vh4u8Jlt2+sed_JGl)3tsLIv{{0R-6fVrp>zX!rrNJ_zo*IN&>XUmlfgy%=Q@=(yZp2j|m>NVRA}nEUAU zkl2+ZUX)^jepTH^mS8&qx$wR7&x%&+tT0X!4eI#3C!(fjDqXhE=D?lRw4OtJq$ha# zV%$8HunD|zyr&LM;c%%eW#4trYNw=nE8-R3p0|bu15}XA`CMYVA_x=Co$ZIA!zFXC zwd6iRw%&P7cS?>%jl15G^{p%F^BZL>Xr=Tm(~vYXb50tB`)h*c?+zW>duP7DB2fx; z_DZQje(;AsZgi`8NDqLTEws3fL|?Bz&zM`5aVT)mNMi4Gcn7?Mk9y->FJxBycMP(4 z^Hf7NgX;7uAb6@mIj``2tRb4t{0Bvt^bM`}g^O*iHz&xjHU9RYU;dtty#14#j$`(x zdPZMFNq$Qn$bExce&^4HP7S@@x-Kc}FG(8-&*2s61_A&Q-A^pHd<~}hxhYaY-arV}%CoVJ7B(5x>R%tAc%oez zacck;{HD;ldU;*+1Kx5et_hQ@e%1kI)d%pGREWNxVFNJXM&~Hg$xkXkUz%3=vxBpX z8SloDO8K&I-tw#yu5CQt2&gqOw!b@#_{{lpJb^oX2mao_@=WJRu-JNe>)?Su3DJduw(5&j3JEp0LW{}JdCpRkrzVxhG`IX5-*b+GI3n5aU4m+ zqYPwtfXqTj#$z$jfSkj*jF6H(yUlN@>Z(~dn-Ec_5#g#}Um{r~5CL%$A$)VC$TSY5 zZ%0Iu6mMlP6T=VkVi@j+tqpci<_1X~@X>gnZc8ejP{1JwmJa`WXa|41){U&K3^ISY zEJeGl7rEuaC64A2{b`pHZjf&n;y1A+bWr@t;{uj5pd1*}=MM^_(C5Gyt~wqD^;`tX zmcD>->NE-sGmdA9ZINzQhAAibsX@~ZncjCRnzgB8n%GCh8sNUJo zl2-6Sr-Fm8G?&P2qJ$OyrMjAPC0XX?8~xBgGpYLFe52mZ7oqV5Ew&@&jZ{l6#>jDR zQTju_mNudcrwA}hF2I6woHqdj4N)}vyd%g54DG+U`+X~zu%nfPIx$RZE7iaPGlxCr zZV^Am>8pA%ySDRe69`wn1s^c(Ad)hD~C4dW~($7W@h?K2RMzz%Z1Zk%#U~P z>v&q=`ZY&=<7@b5=##@91|O%!K@hW*;p&^S$;9*R|%{?9s0F=1r!&dILVNW zx8hiOU}0)7TpK?~4G(xkwerdo4)k-`EQx{Ju4i=ZBpMM>=^_1-mrt`@Z(iY0&38Pm zht+B#Kj)32lLD4Gi`9lh2%(6fv4PXLmIN_`%Mhe))m1AI&#I@By@IBNX%j7`iUwJ6 z#{63MXv?IbUvEzj;(nJku+it`;kX6{nDP4P*LS7i!%@&cN& zI@r<=bR%JA`|8g8fcLkVgVcYRkD%BfE^J*4mJOy%lMg%RQ3;Y_g|Fqk0s)5&j9QCM zAuBhz4u9DhDJs`$oqw7R`~zPXO24ld8qgeUz}pt{{W_#nCEGA3LmL>01h5+{Y%1$O zGbbVRffXL?LGtQ8O}6Wms=W#H?QyR9?SN9#IjTlv=ptgb_Nrn?-r&UtZvr{|KfaZ0 zf~Y4fSZAqi#kArk|85tMHliH-KFjKlvfVs|k`vfP?wLo%$Zx88=Qvh-P<33In`J=e zio%&6hT+Ku!zhrknfuADrg9z@iTp-o$Zww;z1w9AqJW?gXH{*~${}=Off}ZMc?h$c zdiJ9Y!$5Bf_*2LP&*XR)Boh|+)r|;Rrjv4MYMMwYiCRFdsIX={8WRd0|Ih&{yP%zG zu?~e^WCYy`1JlF>*L0K?>QO$1E|=%$ZK@Z~!+T?@7>}U*VD#Y`b>O+OPuS?GMq+fv3#UKn@&`0gP;qO`8&Q)@zY|;|=h}LcbWvZ?`la7( z8GtMu&a5UBU9$D(G%hkxL+jwph5G;pR^{~0tYsZ6?w`j6eJA-fM0==s&yER3>8SVU zp6>e140kP5n!d~^N};y_eQ$-{0|cUeZ}djpqU)w(^1|>JPoOK&1L?6(pi$i_C@ydr zotYnyIMy9W>jg0h#r3y*7uk+jLbKM4^pGRf<1Pe-;%@Ey*G$qN*YIWb18*e*q*64I zEVPm_MvdwB)s^_@z5B<)2y6q_<>?zk`aW`DJU@B|AOeLo{JEC51*wh%bBzj?@`?eu zySXXi8t}uH0n&F$490=JooI>{{C}yJc`uzOa4gk^z;tSL!Ls zd%1!j(3ZQgy06eET$|6i?|HOV5}$3~up9Ctt^~}L2>TtL`~J6<)M4zC$Tc&vLv!rv zix$+F`L%_YsO@bL`sFsnYCv#-SqG0Da+CA9zEjW%3XUBRimb4l%SsL+akeqKAuc}> zSEImzzU^^!;@tQj4Qp}N7-hD)M;6~{1y#3nx?9B@TKj$JW;Q+Pd}(+t4Z_5Xuoyu= z6<3b+X6s%>jT0?uyH0#XT<+6fhStS;=AoUISFr7uEzD=S$~&wQ1dVT=$nwJ(_`=ET z4HT*B%Sc!Ws^1j=r)hXVJzYR=55k?TsIjAu_K~8+93@bBzC>(5q{Cmyw9s%fI<2OV^4-S;A6SwT zRMCy_t}B#XhA{EmJ)4FjTefLJgi&V_=58bnNs+!1|{hj(O zNNHqQ{Ffd_fs|=!22$qUO<}t`bgv*~8!8~_51wAr-e+!#Y@6zDasVtRj>D0M2?j5; zySdEaykeZ^4X=|^4ovJFX}^fgB~+CL_AFdPVK|7rjx<`{@NL&6WyoR>WMypk{+KpY#0c%L@2ZK9`=-0 z!Bj8m)9%-ohh4yYe{ne7s+v=@fik|X>^R*`=<#`z^$v+&? zN&X?eM&3{Tn>%Ut&3|m>Gtfifbbd@Cv+5Xr_fWvl6qy{3?95Hifq@Xs_ac@K8D=`n zZkC^k%pZ^pBT?H9L>v~3YMDzBX?0_MEU@&j6y7o%2ZPi|N!y!}N71CniMH@dTSNcL z5W>fV?h!0nRu5DY;t4r0;pJc(XD;gfD~_2n@Ub(C-Zyw83gu^M_o*AhFYECd@pNLyPepJ&QAfsu*kKiGkNZy(}mln=79N;(|%H9FbDxPf0a!535P9bUcZbX z0eWIJ-(KAp0{gmSePAlvF%Q&QLNrzTP(P=}u1qE7J~dt`S(tbZme|XY3$Ws7KFNBj zdI{U0gQ`KB<<9zP`HapSDNW0T(?!uv@)=?$^DSxxD;Sbf#D_ZuKVIQ(cG?SZNWjg%@u3ug_=9ic6Vxk@o<2*L_X+B z*&Eou=FeKNWv7#BNyX*ruV^1r?1X(xAvTZpncBR0NtbaF182XD=bOhk`Z0d=w2K*Q+Or<$!SceFKtLApdM%fdOjYUWbAAD z0lBBz83`gAHBu1lH111^An+IJk{~}1^lD$Qv#h(rOf7o#7uLU-*OcrI3i96UjFn() zpNn0=%a&UO^f`c7wkZ3&#z#Wq%|RGRn{IP($_ zMbmN`3tCwImzS-5De~In)J?Bf!Ux5JDE4U7`qp?`P5*wGvpxa0dHME6oeTEQ;Ou&y zPte=qZkbYmYIbfO^qWi0C1GxA(cv`ETu^HtaM=vMRs8EPDTTDxn{-cWTgbgSfY0nM ze1ZVibwv!OSD_fiam4){KI(r#=j*Q1+g2(ds9{Dje^{^?)BrFkuLmHr25o)R4Bm3h^S3Z!Od$ixTsFtzM_T{5U~DsafIhb1hxXftIv&FQ;d=?@ zo)9S-^Fbi@P5}k-Bp(b|L|+8?TPKBj`nu-g4+}8G0FtdRF97rwe}&QY1ZG2tJ?@Nx za=bvDx_n&Qr_V&WeY`(Fm`m*TQ+o)De(+yrV7no>NU8yZ_voi9chNH8Z3TKzQr-=! z+M9RpAd#I!RSAJoM#&koE%H=65Fvp!{|3d*6`u2iTK?GRmo%BTQ)R&2lNKO=(Jcje z8AZy@;tuPTUS%r-{nur?*y&=?h{-0Gjdm11u~qj%L;hSmL6FXxqPZh?H{R^NUnH45 zgakCg!AgR;)3qZpRuBgaYCp7YKAMzF?c@T}+68X19$rl_E3)_vt#?HCN?6)0+YH%{y*XC|Y4iXzSxB?c>M<-Jghdekk=a_-fXGk4N zy*o>CzD$3NviL=|VTnmG!FmAc5#X+TP(1(4BG|Qmtz8jovO{crQkDK}FmypL&G~$v zbkt+w@0Q|$(zW+EFLJvA@2M$4Bf92I2I!vot4I3I4EDV@GFYS)D;Gv3x)q^R%YPkUv% zhxyCIA~bhy!=hVlai*eo7Wib;BvD!Qx<}H+TZH1D#ryd?&t)9gc&uorbTgeN8Q#rH z1}XX%B*_8Jp%=PJrSG{UE{VcXg3+Yh~t2R!niRlE~INyimP;5jF%Qa3-jd{LT&iv5K z+%MpkLo4vZi=eqJ)0=}A=wq7zS|AQMTpI9NPHSHMFx9TlDKr(~Dztl>A=qn6DBP^u zd>6FWEZ)AK$KMS%k zw{m;S9g#~&`M2#=GCl#u7g|x)zCgNt{amM9rjWao#K>y&tkd%)f`R^aO_xD|A2tS2 z)R9ySn$HU-(<&b13gurPHFw;=c_@C8zQwE)ZSB&? zFrw#q0==u|n1Ih_1wcQE8p})71>?ZAbCTfti+1O_-cta4$ZfPg=1EgM!hgWR~T@AH0Pd-D>ASz5nBzP^tr-&;^qm1iQHzt%BEeVlJ29Y-A7Ms5TSDJGxYw{Q>& z@sWXH@KhyG1E^Gzq4tuEbSc6LVAeT(AQUVwR|xhi5me8y{n-rK9Z@vKc~7qfp@*;0 zFiPg(PTqE#FH7FXKN4WQ{CFF6cl7(diR^fjFs#3is*vnr&6ZoIL&wO2b09F!W(+K)f`;)22GueIqAs|+SYe@^;F?!88v z5ARkW0U|SE!S4E7v7dLE=cq1ES+`RXuw}om*_zt|`u7P{6%1#+R;7G=^c-2UkMOLu=_ zeT}Lc^uJAb{y?IAC7}Df@bN406Jv9hC6Bb>qWO9rppXTq-?Gi&!lxNr$h|o1paKTs z29l%S8H{AA*T2@L6~)$*9Jw;G&7qebfm>?+dlZBDB;jc;9gOb`b#fq&JVDWA$uF~B zOBWu8ll{78-Fry^qMXO^em8Q76t;>TaGcOi@50@s*8cl5I1pSVCFknNI~D_fo&L8~^}K z3cU015$dAc5DqJ{x8!R(e$f|n=@plY9ZpOjxkR+F#)|!>?9&Z{MCZ#(i(SI=klJv< z8+oQg6Moe)d_f#AReC*GzTVTU9w82eH#^32A#HlbjxFVgJ_IejKQcIb*{p`+8!{;a z9~5QJ$UqoF>GS2I{rbV1`RIW3&dvvI4h-&0IHAACvW za;s;vIbC&Gj9;|K048Z|9bk|ON;CB1%VL{*ZXbiVt?QylBSOJ{(T{Uqqp4#1 zg)H)KT;tylD4V$YZehIzH5=o&OMe6cWaZQ}_cA$b9l<(q1Lvmkj+Nu~$@d4SQ{9Ob zsz}c!a055L_SLnHX1(}wCvbOxnmrlrW>YjO1i7pK?ouzeFg$=Cjq}Bkgj6C>b_q!~ z3j|Wv*I0JcRScX;BoM=pKF64|mf}mbofOU+J&~xHcm*BJGMZnEMNlZZ|FxGg=T^*{ z1|B!qQh!Q)S)NPFNnLi9ybZHYGON-GzPg7Qpx6hUP~;<$n9xz zU`Lq@Hn@Us0f}Wiqp~3Ea|Fww)o7OIrN4MxTU{MZy*LRvIYbnErAGZ%v<)zwb(YmW&Qh2lZc%LiICI6Z zqrt!T4fWnJdi~uUeNj`{yl{|vEI)_L_rik4Pn`<#7F!i zM0*9W_ZkC$UiCtYHA4mQkckb{=UtpKQ_sg6kKCZW?Hm$O=2l@JlZjO*eh-Y(VSW}6 z4RMj*3vb>gRoj#bG5z{}P{zW_1{4uJz~c2>+zq-G!N{iFJY%Rwl*>=mZ_kto6zg5D zuotPSk^%{Njbr0G{sLI8kq73_2ZjVs^?;~K0h_zj2{5Pe9WqQGD2BPvBWD5oy0yE5f86VnmH$kH>qWz`7 zqx3O=DXMQo9C97OgJ{Zsj&u|vRtl1Ojla&D?B(+ z7v}O7{C7tLIc7TiD&KEbBv=Zx-HQ7KZW%XFZ+YKtS$QECLZ$mT0#BzWZA+6K8CO7i zd@-AEa1SrmpMjO%3IrVRkW|K^j#s(7K1yULtl1)CEJ`QyK%nX2G|zt|H%@dKsOiz? zyI7DOm8yOogr4(O5%}hp(Vh-)^rLi8dar32@6)y zd*O%JJ@Lvv-DkUq6O73%|8>7;%>m1DHB5B*$|@FEf~{Msl|p;}u@y{RKn!p-)^vg5 z%ovEwe1oCjEj?X~;Okfn5xgf5XgqS;@mp5vvgaW%WFB|NpLjJ=*Kb~1L|tYtg#bA7+N*!!S2M# zs)k(Wtm;tRP8HpL2ZvEc0q!~H6=y+Sp&!qzG?IFqYgtWvy_INSO8y-wBv`mToZJ`+ zoZ2O0n>a+N0RyY7d~aO$&v70Zm;W5c`2&TE$JN^|oW(*238N6uPsJ7uH47 zPs+y*4P28jyvP=K9Heh~N0-s~)pvT0uaFr1#QgU0s>6n&iLq45fZEIXGhUV_G>o9L zL6v!%g7fFMjeb&sw3Y07(Gvd_Lp6vZtFY{&b@3K@!z@leZZwVEDZ4gcdz+lK0aI~> zzXr=QmSd#pwc_*sYUAn)P7H)uS{2Ls<;|#@0?XrCkcN#$M}JoD?7aN!Xy6eTOn_!J zT94O2{DaT@)yAUp@yjPQm{*u+Cn((BQaPOmluhsN$pWf40d2Fblvg>!2w*Y=*|Ah) zyd#r9fD>Z?i^?`=WKMiyLcREQ{Z~dxNG3Qmh*KLrc~u)r)fujya$7E4c}mqdXZ>O# z`!fs-`R1M^t?6D>EQ%&X3qM~5e5nSUgI9zZtXcUzHRUgm(n%sOtrP@WnO0UHxlkBz z^`dR?Ln+c?-C$GD{bS<-`f+;={yuR&kXmC|-ckYaT#iib%VExKwm5@*hs$WIwqwe`>ed#AcM5t&e427YkKHf%~##%0>J3Pv};86mbx8C!h5^JXlB`Fp$|zKuOvBXktmarFe) zeLH1Ywh^aX;5E7zJ4Y>%fHcMRw_0U;+YKZ@AU~N}QcL-yFFWh6Cvv`dk$=&JXO=B~ z6VRP;X9M*L#a2_9bs?tz!1Cn*-2(M$b0hq&1T!_93K|%je>8s9Zrg$>miWw(Ys7JS z8i2Ol0K^ytSlm7=sM<3fr(x%N_CN(WUnbOxpO^~nELU9O;M&_eh1Hv3+B#$+ zt-0SLbG>Id19yV@ltfqSm#rKy5u;ce^Fjhbwrk^3|7_0d%NdKaV`r}b9B>n9?vyR% zrctZK&5DD)#cOTP+?)feudKe(8z_qKb|HRHoS;j9xNY2xzyy2E3h`&iwD#{D#EKPa z=gBxUZF6<9>~>?ZrQ=U1Mn;!Fc8;7*2A~ zaA#mL4|oPT!V&nt+fc!&hLXts8)H))>G!Zi0o~ksHh|&Oe;bOysVy6D4g0n^J2boy zTwh!K{RRg5@Y=5K$p;(Wj6tJlc=0QrTKF9;L=y4lNQ2_g=`Pv$T}`ge7Glv>6) z60brkdBY4y2&q5;&5Pia3R{}ibUC(Av)$#yYc$GaV8W_;)hwmqQ~N~dx8XbSl3}N< z2j~=`gF%epddOx)#7_rU6|pc|&n7L`X`{+sGFtLbzZiNKcj$xHLWDbM2y5*btP~e( zMoq`Ry-fyI>4>$U<)vgonKMZ+>*v`V;fGj{+RB42k)F5cfG58)<9>?e_m2e^PqK<2 zJG&TIgCmZPm2b;^+uZ}rLY$i((S*DQ0wYiFf5F5cV8kxqRor49q!xu82m57e3GXxE#E z9XezNl@%!3X^Rf+ZXH2MDHw@&1*6Z=AigDUfvG5%at)jW4IE;Sfbas<&tr4Qz>d`t ztp?Fiu#h~@Ly9pBCKBp-;hh!H+X;NYL7iY(7*Du)8T*emucm?c*m}s13YLKYe)ckk zYZNXRj-w&Cs&g26HMx1j$BT!jsW@L1RGj5%!6#|K`B+(&byBcA%LK(c!_2@|t>r+C zLys!rn#(0Iby^s}~Cv6Pt&rwxSx89FOY&O#E{4{dj|gdJ7IZ<9PmTtua>L zKos3C6i?xvn#n4y3}b{poXnkiS<>sQ`Mn)#GF$e1umG!O4z|1VFsr%I+5%-v@Xl+aa$9^pa!kG#vr7 zq#rR@j&(<7?5=F&UP)J#G0}XUzK-zMVLh|c*u_st-~!=5am1|eY2qEEpFRqvOL=)l zW)2`o4rZO!3G5Yyfk;OL3>BR@`>?Wjj`!X|(jJx_>V{!Oe7v^#N!5+o!|b-x4SYCJ zp~sEtH1|;IDqHrmZlR3y6Fr27HtbQ>U43Rwx?3i{>FB4wtk?E*@`tn@S13LXg<=Hl@S|K zE`RMJV6Tnt9Bvs+qL-n1Eg5up zbV6tuv*}?-_hjcWx*9Alf-8Wu6%+KjI#Ud$aym6 zZ&+o(c6O(k*Gx!{Lxq(~r`ZqCz8nr|h3b+2DE!c_<6C&3_KOgshUtzr0W6y`w4n8p?eL-I*GI64f=HKN8B@xA7@m3Yq;Cp%;Eat4?hn-C}j3 zi7-r5#PmFC4MgZ$-w7wHpjNPh)?bL-wzAhBDQPO8QneREH1KVa)eqGmbnS144V~Z0 zJnvByEn{dl?zxorVX!Zt+aZ$P>F!dJ8cSe=CboGR_{)KndvVk}_z7V&)D8pv*{$&C z%pf~bu##Eb#LP4>M}Zyu_ej5Y`qY%XT*xgWv;`RaobAC(G+ z?3E)gJ@vrIz0S`C0f-B#ps(&DQ0_9NrR;n0grT=j7%v)LQ9;!X*9C;*!nj&{*zA^e z_n52_zoMe7AjHRUp-5+8Od06{(5vPO8W{WOalqZ6U_98p=QVsNQk_%UP?D4}h=8R| zovt3RD|=c96MevymM@2=_NlYi8ELi?y(nN?V$Lh-xsj)l&C46Cp_c^6DhB2#Vr7pFplf8y^e4Gr%1p^!I|Y1jr* z2Tb4)4Yqg*PQip&W4YGH>2~+^QIk?^(!lr(2V6*+richT@IlbYO8iF-f!cNlF9MSs zai^WqO54g^RqEPR8Wu&Z3mVzSrDNYx{6e~x_ucMQ0t(e!PNg{YoIaP+gH1KmLy(=` zbn3)f3Ttj82mYu#Rsq5mq5(VVZow4$1(qEQnV5Xp0tRCTDQS>T$+@0`%xl%QAzOBgf1H|v7V>TVPUTq zBU+|=h86?Eex)5?foTWu&fszb;U0i1XLYa0^xTsH$RcI;aC_U!X;WiD=tG5kKb5n; zS2lZgRmnKK;wu$Z3sV%H-~;R*emV3{?q;y^zOl=ffK5P}9nZw@$kApdG15vaN!kyo}m;{nF$PYMclaY~vpa_IaO1>v?MTn4V?Aa~N< zwPrl`vthG%8XI_F`nUs++>$hnxicFnu^|Hs$#>^3ZPkF1mXzwnK|qkmbNIKRnG(e< zpn+i8y`N+c8rXH>(E}R-&ESDJ1BGcF{&933+l>N26#XC;^*;NRt0o5hT?%tb@(LX$enbff~y^S3Rtd5l9|p* zFTz~L@alRw-&xt};x%P>E0;z^oj-xAcBJ?GcdNp`!??d`S0Gd!)|0VEzasDCGe=Kb zV)dj2qcjuM(AC61bd-}ZCdZshVQkg&>-W-W=ggx9pyIb+?zwRb^=DQCPUi0YMz_2R z8{fT3nFpRBUP^VR72wqjEgW;mUY9qopWAV4x$ft1|Dr?W#r%M!Ola)u)Bf8zDHX$YhtSo2&>~_ z_jRcQD_aZkSrU<@?K+TzLdma23uKD=gm9HuU8~3t-KZYu5z!uKV}w6}>#I`N*MeR| z&b{5kaamSuk^RjIoT@WGGJEbrWit=;M{o#F$mv?%cjtH@m646mwA-)#HWA#V4A-;r zPhv&2cz!h4nt%ufxu_{u>9|ttYSj1=GBF)=B5ERRg-|cDBgpJ?)x(1F(em+^pSM;g z!um$HxcmKzYIO2&Dse599W5jCsRQ*C`oPEhE|U-BO)dU&o)HKOk@{kHw39y~cAAzcCZ-Zt;2A2BNV(3FLAXV-1FB2`fLsbDr;30xMBGD1Ods zz31@PKF6FmUzTgoC$gM?$9_V?9& zvKB$@mZ$!cn!y`+Z6jQ*b9>qT+dnN9$n3j@99IF`-$f=BkG9^!asxTIs^F*_eyqbY z#~Xlgfjg{ghbwyqciAr#33PEW)~nzPYK`aE8Th9pREM8=z7`8|rmIFDi2XmiIYhou zEKEJgDdq0B1L$^v0yU%fh$4B=Xqh6wit?Slj}~|>A1>fVZEjV)_m7S*SNTCs8+&Z? zF+@vkEKPwExzk!F3?{%gJde|Tfjh0{eRyb{%Nw=xLhkE<$f3L^o}`299)7iNS}=v2 zAW#D+SYS>tnoma=cUpAL>f5FXnyUTn4&)V!0|_b!gP1i-^zvfbl;jsiVvO5_5iGpn zLaSmC1e3x@!Ni?1WC@NHA0`Mo+KG=2@$*x7^REo#{Dc+FenIb{PKfumBwU`Fs%Z#f zarenA3g86VB)Rjf^EYs{tNsW{fcMu-f}WJA-5bf}#I%>ud3FutXNhFGgDF;+;)bDL zUSKV%z%M{3HN2N$kBf0Tm%GP+wi?ygm$0FYc`XI2khtR=`UUis!fE>EWCj*l7)CWv zOlcBwjA#rUc|6~3B&$FEUY1ap=70gUsh8;Y4Hc=zKLTbsxK{9d13nZ> zW-F$5ck^Iu@sTjszv?$XJih+-P%|*&K&9T=#w)o+-d~Jhu7-yPN=FN*e8I~`7%5k+ z#I{{cL{lR-e&2*M!7`{a4RIAB_s!SdU3kO5YskE;%Gh#|`mZKts3gJu?>MFVEW(Ch;=_B4VQAGzwtnvB<^JF3+Hf0dWwwQSx#L?ka% z#uM1~(*2p0A{AE%meH^MDh~R2y3J{=g;bS0<<1rDW%u${>=HSeP}P&!_KTeO^P48I zLPF;GK;tx>#LEa`%oeT;6}WZyRVtxZIPocs!QY07zkr**pRPR8yb};`-;@f9nw&d9 z^g@(-k(nk<5>-o(NJIoVpe$fVB`@Cu4W#nzy!ixVUu`ccVMNsM8I@+7X6PEr_atx> z_UBjMr>gQ^9i`(SQc_yIOe@_ntxYaj=^*w09&qI7-SV;^bBr6U3&9As`<3>@r_7f$ zG(g#WNz4%&=iAprSQlrI<0Xe&N7F6JhW>n+w}PoK-oBm=O-P7O*(j3*HfvbRlve)s zy^!*rxOG0SmD9_}_VkI8??;eMyJwI@*M!OKGeh-KapZ1UumDLww!eGB>TAtXMI#t^ zpiYjsXvgWReRKv=fl_*gB>@a=82E&WS}+;(iGpP zv%BJF`~KcTfHSlcwNP=CRz-lVvz6L;X73_7U8Qo2-_{>X#n|QFWBU1zu2|%n4DdrT z&#neRdOlhC0U}4{eKl|TN#bOAH3tM;@5`DGbCi#WZ^sPwCO(cWFKAG};@f~g8f0ROjqEHuP4oWeLK!FANW_}}E4p~)mJ z^Jvqlec4LD!YLN930`To-l{`ca@SqO_hdB*{??=-rWras8Af6T_XKac@sRr4b5f{H zcGX`llANP5lp1Jjl#kdp3cS)%{_eDIN~Jo>Kr$s3&62dic+cmW&R=+9B-l~0-mOk> ztkO*905=V|K?iI~M%Htk7DhktCG)EP-ij5#^>q>t8txL-0W(nW{Q>&bl(GoW{JUo* z1*8j`fwUu)XD+2ggm&OP1=u$YHGNhjuf2Syw6h3F=0I9m!JV&T&t{!SLCA8*2Z3%M z8}yYsM$kU0ARVC~!_}KnPbxW@P0zFA#XKzsT)*+_9_&HZ1-7(Jy(FPmTv}j!9t5T( z+u{2<`N=$8&#%EfJ)6r8^<93zO=(rl`4w+~+%G>5eNbsc^PQC%m|eJ9@#dmybIMpy z-PS*szOC=(M(|*4CXTnP;5UjNTmuQ1LCAhZcANGA&Z!x76(I5ekZXEqzxp;DkZca7 zs7<2nLw7pY;1V{xSLRd3@C_R9oeT-@SDm=B1#6wz!2cQ{`jJ!&AUlAKG5bMG|BNb% z<%n4&wajmi2}gnSLb#D^36bJk{Cj$y-%k=;Sr~5XlAR!adNF%BCla# zqD$MQ3X`b&<(*q*gsjU19BHIQL>t7FaP{j|WCz_f@s3^FoC2Crd3d95*c1@c!PwZC zK}ype0{l@f9BCftgU_**moXx$Db7V6Tzygc73^kK^CH8{wMaZvIuSIS$qHOA&!a;U zR)vlD?8ymo2A&EG8oo9#zo{kcE;);aky#Yr4hQQo-~nu6fc>!xhQ!$3PB$_1C>$Ui z?1=4)_5caBCgAUNyrmi$~GgaW~sNCHa0SAQP@&%Rb6JV37CP%uk2P(gt^uUc`J&VA!pTkoU2Wz=S<3Vym^Npts_?TdXk< z_*LWeAMixgHas|C( ze-HhNe-r5f$>DtCo!#E13t8XV8w%-{KxLb^9oDESCFtx&h?p-PT@DN|7 zz=x*ivsCM?l>-RD=yy}k_o*T1>o>9EyZL59*rjWfq{-=D6t}toW~VK_%)myvGD{Xz z1qI2BbpB*d-hDTEsL(iEP*#|%`q3(2n$qr#cK5bS{r7olL*`d|N-We1Bm1=$rejo2 z(y*XI2Z5o{@-02>;P!fJU#IGlSs#-u*CEnQn+0RJ89oGDO5QR86@>~TKCP3o0%zi) zw#9B6){=K^L%`YxS-nA8I3gO%@1l5<_I$c(zZP(kPxJ%@-Geto*_A~H`jdN}zh@AH z6%4WdBhm}Yb0RE*6Y^LQR$+xitT^U z#HaS{?ONjw#Y4G77dO_J>De~xTpI!QtDTB~!Pt#I=;ah8d zuIc(<9+Aup`I(ysQnFl)b2EoL5wu53{yI2&Z;-16gf^>@8rjXck~ zve&%S0jSHV0R%e50^~L*@p+!_Cgu*I@NlOvaFpdzr(rz+r(pVjuUxE(4fM9OE6F0o zRWzyfjVR#h@~K%Pbbe-kyiDC`H6!sCi5q&H2WG9fT3_x78qQk2$|TOGm{Z$1m%*Jt z1&B}Z;ev!C-*JJ6P8m#Y9dB?iadkaQcPW6@^5+EJBJgSs-{FBwbIsY8)Z+_MxbfXq ziAUx5mzxaMZ5KlcdfN80%P#D6HFDnY4vrrlD`-k9;V8C~RKaL9ub{J-$ul z>MG0+e(+w+UOn&&7@g>A~#sU&(9pL9S|wU5(@UR?QH{w)@L>!6fz?g zPP&`|HKZrW1{??BfLR?%|NqR5q>6{SHEl9}f9~CAkxd)s$HkP~#e=@CVr(ddlh8lq z$|~D?&gxTw&<%GR+n@*K7w|>iEAPeVlNT@Xa9`S=T}46!1~WFp0H5H~g4xSQ(a*^= z_BN^y+x|USSt5O4er9%)jVWZB-T6|U>NqR4b1Gm@|3(0@=i&J#GYRx)^20{MmFm z-h>`REiRr32h1MQxtL$_QTXS+VTVJ@LU5*fL-45h*x--^R`tp3N4}K1ITQ!7+w_Xy zLKKIFzP*YazzZY4cAKJT($XAL*kOp_5602VkrqXqD5CF}Q0A{U$KwYdv|de1L25CG z;c2Gz%g@+&H7$2hQwIra-!Emx4OYtHWBXmSue5d8UKeA;G+_uRA$>8zj;C#uN^O&m z$4I4)S7tNofqzVHZkVye9Ffkjs5w zh)msM_V}!tM$HToStY1M;uq(dq`vX3baIl!+}~s!#!Ga65IT*i;`RPilyM8JX(_m( zy_!hMev!gJfARh|aoXdE+OP4@BDM4msAix?v{ad6Vca!;xG9SO^MMi-BT`c~jCuV^ z=(jPEcMHF)dUu|(plb1`)`;aFG?qVJ@;wHmKb z3kdk?7gowmlc7&0yoH^U4s@itw>#Pa;FN;MifAYS*95SxYX>oKiTg1kP|vXQ6EhPG z!_@4jWg_8VtDKN<>{LLE;DV%UIcngqG@qs(WWv&ee1umyn>w0A!kKoo1X$7tq5Xtc zuTYF^P;2V;U*6<(s&@AMnb)Ir%PJgCeH(m6uIw?A8olZc}l8me{wr-|sU; za48Lyx0+H86Cz(!0TgRzF=12uqZF3*#SvE4yf(Ym$?P{&Rx|)k-llVV z9lrcoZ^`P7W(qaC@`_TZGPl#ER#iTbArEXa%RYP5rS!7+ISFx_@tpy;^8+wk1&@Q5 z^SKC|W&QVRGU)+HGmx&Ao_uFrF-k9HJ^-_j^5nyVC002DlfGGbqn}T#8O+%+)=^`^`F`1Kw@n)T(ks_< zxCHXn#AP^H2-jo;bzHG|1Gp>X2-eI*)e#~u!JGK}eP}V-Vw)EMs|lo_KYLAm5kThR z)tO$uWM(iVq6x48Z6m*a-8uSmBjXpDry${Ioa|DxH>pN1(zbs+SwJ`0d&u-}5+H`( z?^kZeep$};R2NDHKh~&%(!N@ZOJB;l$x?AqIPx1Nu_b|Ed*bn+3;IaLX|8ET_4O|o zM*=z2&OFY^OA#MC(mWZYxZZ^XWDMbzti9~{a)Gfmly0XHGPgv1hr_D!z}5Wa*;nuZ zidBCJtb&Y;&Wjl>0LY*i8Her88$l0Y(4~%igBVt147c~`B9$mqWPi`ORWie%&v^jh zykMGq21(f9xnzw)PnT`k$pUs}T#qy777XeugNL(e4Jw=K86=xqvI2~5B>LBm|AMX* zW5bU5QdBjo#hZeG{OA87ZoHabdt%4)=F;WShctc*CFvU3JU3sN^rGbVHkM5Tsk!Gv zjzxI{X1%(5F0ZbS81z(h-xO;x-kt1Q!Yr+Lbv(I19C)kC;-6bdudi-o88ZdE+m{za zU$h);t>*B$(#t9_G9_tQGzHABZv-yaS-^gEM%5szH9!;)9Hg^8vw;?zQV48OZ*lT6 zg<&Yv)wjIMIxVH+aNuZWC_(EAtSy@Bx=Ct_BXS)tAd`!MP8rlX+>M&ZZD++VUW=^} zVvg`huLphXAM~0U6YFVhY9A_E`HjIrH2Bryh?fyWCv2D~82Xu#?@^H$huZ?lBCZK=5l#7Rgz)53o0*0d>55OKx=P? zPFGgXmv>3318=$@HebW!hUg}efk_-8op*wb-<4;WFsGTlHrXt6Z5MOskC)RvGR}wb z(_7x)F;F^z?b~Yp7G}(EEI18>p!h~3poMxf#LmYUd!R5wK(@1Kr$_(*#WFB;5cE;) z=fML*8v}!X`L1u9MU1V>`0L9vVwIz_qn>V+zPdti6G{1;(ovh>Uca6h!JrYWW;J>9 z3mQQ`Y3xJJq!KI%Mqke6DoO~~ZYyCG_4ZL-U^3>}cMl|9>mGog_cAH8=;oRZ&gD^1 z2l$lnHA&9vf+a z@TYTGzHz#392LgcC5y?MMG5Su7G?iZP$3zJX9A7bAWN5qdI>vnl9I+Rjm7875fvE} zq6SwEpLSeVQ>|{yeq;8zy}u6_T&1Tauu5JF5N4q?Z+)mQmT~@21Em^xK6#RX=>GFi zpWsIg1~b~roG*pO!{j#TJv@YBIjB%(%ETHj=BKpr2qZiDFdpk1+Q@z1HZ5+N+q!&m z14f`mMon_%1x^((@z2)_)TWnjw$|nyOVN=6xlrrjYxF; zHJL_8lwO`NTt;5vU#Iw~1})C>Fv9a2zKcQkV*Ng38N75_x5R6qSg{5@DcOB-+qk}6 zZwd3paUZJbBn;S9_+~(za(=K}a)M{XlOOgw@c2hlznNuJ>k|120U-;R2WJ6H5T^10 z+|oC~&h_^_0sm6N*-Kb+(3^Vd5h4AeHR-uliBKLs+l&Qw5s^69JAg18AuB}y*(U!O zFMSS%H-W-6ukb|WB2%q_G3m#?K*FY!BXHTkAh+zJ4%WIA)pgfbDJur(Y_K^Ez1Ssr zzr;6YyolOxyIR(2VwV7>fsLjtOUCc1uX-z@PNul5UvF$kUM$$%%Gd4!mAP6#%H!T> zat~J#kY8sCy34kXu*)SyJfPZa6b?kAj(S){bm6cr*8Jc%p>SEj{Df#+uS?J9DD6Mx zSm)3gsB;E%LH2dyTON3a{U}6$gYOjG(3ht59$rIr2uDn@-=Y_urcr*ql8kBJ)OyPA zxjXqNPi=vjq@<7#lcU)`RQoXU@WP~StwyNpN#y0Ba)cByR#UhuZIAUNL@j{e2Bi)k z%0Ba1{qlzRD8Cq*fH&QqRlwg-PEa28TIk-x`|ndu#0c6f24HyNgL!a#xaID;pB+vE zA`Q*#Ysj9k{Rz!0tA($`PbvhJi>Id*(sgklD>Ub^P~ zgma~}TmAj@8{t$M5qoz^Kud0+gy(}>nRCh;Q#MKa_4-5s;sF2#8RJLtC^~-+I5DmX zy@dBg>VA{M9&jmPbJ>Bk68)SBC_H6xeY1!}vZ&J)oD04de!WL=kYBvv1po|HWpAR$ zbm0LY+uaVa6h=2fN9qqm$}Fh38%~@tjuR_+R3T!#b|8kjJHfI9T@(yXH+)*KdwksD zK~q3{jNvW%=p)@1FwEsUw9i|yUimQrJhVQyRcp^tbr_1lB1)5(0WxV^8)*9I4RfXE z5X_dJjl1%n`}xQZrXTe0VqvADK`I45*wMhB7L*k7CKhZrH6DX;Tn$&Xv@mP@0*07< zZ(KE>Po>lN0IVG_EmhBaj4)8KtE#5Sf=tfK==(1~FiUi#<-eO>_q`vh4LDOB8YjiJzh_;? zOaf;2P8y^jnO=hnp&IwQP~{cbuw)6Qt#FNiXcgJ!msB?TPi}PK-RQ17y{d1g*In+h zv?!gWY)h5df`axEtk6l+bQJ4kR}8g+w?cH_uX^q5nSD)*@fR;L@9Xn%e5dVL0E%zw z2UOm>a_P-(Ty#^!Alf zpavSD^rR>*Zv3}zosp;6W zkHMm5VQ^JL$NdvFk)3`G^xGhZu|uTZvz;|Ec|{ORgkzo;TMd;YM!?t;s`1=_*@7m=@oVZ?Jk^e;MZ zX;)?}N|q?>`$gtIWAYn)t-Z3h_GCQx2{+v<8KWvQv{P|Pr?ORM>ZthoVolhy^^4n^V zyW7Hb$Z~vq6B{$xekhMwQ@+g>gpz6ain3t+ey5lBPN~;by@!uTWDyzy{QfFZ5)$K|#TTsuq^zuf ze!|)KGVK`xFVe4Gdgcd}XSah;#v{b(M?otAaD<|_%$i9H%&l?w_T>wiO=b|_L~AoS zd<@~TE@Bgzrq0Y=3G7P#e={W*8DwI=}L70eT5OhJg9*3!I(I*aDIC^x*|Qn zj#vFzskAn~kA7nN@{RP|tD*~Zm%mL4f4RTA48`Ve(8RLly&30c39?nl=oV9fp|&!M zx?36e{{*zMXiGtdg!S@S*9g75ygFx9N}50so6c;es(Iz=R{gCHhzF8c61-?)&DeWk6~0mzUOKZ2^;$_ z#&v%oY6li*71DEhG1L;t70`*p?PP%#l*s_>l-VMnfnZRCb4Pe zjQ5J^OYB|aUF@1_JJSFREJb zURaRpi_9L&PF8iBEI?0i&NuSqDuc#z>R*1};y(TL*v4Q7BygFwf2>ZbQ8MYm|zWdAq2Wo&BWJeKvJuZxg%2Ps-=YT0Pw23;V zo%zk}@#sD_&~}Y5hyp|Eker+~w*k{UDCL4GXN8~V5X#@l43u4Yxyb!6KJmQq&?Cd= zx`B>?b08;A!F#K}i4!M_sDfLaRx_}lLK+b12zVh_l>p5(*090$_&3ttsP%}ich9p9 z0_Wb&?cY;QrVCg!s%f8r#F{~?B=*<|ylYtInj`A0Z`k?!d!GI9PCOtIhA$V4kcG0- z9GtTxNEly8DO-{wEWrc1*;eC@;`bHEoz^Pf?zA0!m3Ybgs0GVv^2Da&N4EaKz@jYUFLJfQ*&mH~qt zqU*Kgtq%f?q(8{fy~>{wC-&$Dc`?{o0$y$TPa#P$SSal4ex_|3T}Wv^&V%qb+ogi` zo1(&95JkwZ5rKWCc0^PcHV~=d-<#1CbemEQC_S;-#^h_DRt*ysC=kHyTd+i}+twaV zNlvT1;bR_NXb<#7kWhHKB2SvcJ*ap|erH(iu4VR*95pvPKvK&Dr_WZOO}X9ed8fcX zZ07cUPQ4-bY;m!Qgiac%RG?}K$wc^X0-W1KxbAc@)uq}d?|Vy;&*ZnbV}Gr{y?GIW zmbHEPNN*(H?y@xIdVCnEEG+0_2M}-3DoUiRyl;ZdQ2sgCsfNo z@;qJBl^ODwO(CecGI;U8l zf2ro3&`+!xTLt+h2M}mi^g7rwBEN=m;A5}M=yX>-CgJs^nn(JKdd|#}C)U7GYP8## zLE6FB{ci*2nlE-yB2i&G{a7w(fdNbCe4xI3*$JddrS!2T1~lA=%tT&7mEDHesK!*2 zynln41vvmYe~T_@Ck~}FmBQgpa_knt*B@1PtM`cc;`I(BMrz#iNLCrD+5lk>FG?}J zpT9jAnL!4Vih-3--uULeI>il9{+SXJzdA=Pft!;5Fn0UC5Y<7|i>>NcZiCDLBaoSB zA?h_SBJfU8x=%j>@xp>mM`@N(ej(%hf;LViUli|T=WCa^K>O1tv1YHoaUN3FH)mec z$JhK*A#GZIM(0Erkq(>WKL>54+*!uLsn%x%=vSo%JYliZjPKnU44D5gA(LdT zm69M{NOtM1iM4#l#Ec5)H^6bdz21S-RcBTP;*X8+xZn9^)fn$j#cv74<2a(Acn=3- z93QSm-KT2{q85fXk23G0a;qoB77;}{A8o-c`~`Hj0m^RuwHuA(KHXY?P(usZvN>IG zB?@f?jyA*ZOD@2?C;1$G;ICpa7iX2P>4XcUZx}QcblIzpeTXP!__zWL{lOcwvmIDG zX;>r@FdY8GOxl4Bw>#?hiz&GNTOaH112($xmOQQ1oZK%kwn57I%R29u=Etcycv`T& zc)M9%{8;p)AK3~~)rN)XCxYFfR6SOr#4*_RRbltm+06j!Y4nFC`8HR|l}9dr1~Frw zPI<5^+B5Wp#K`q!5^t$hvkxF)5NCv{T|9cj1kiKkPe9YG?0>$U$VpF_ig>*Ijyo)r zlhc}dqK+nM>qU=QYx_6h6~hk_17Ibc zbc{QGPOn2#24@bU3_8bauR;UOqAurD&tFUsAq)>`W;z7D%^)&#V0BvZ}W`Fz_DTLukWIjVcXkG8-SaZfZ zJAkikb~~?3YAioRAXq7~==N29I(SmEvX{Z0agh&P!J5j&c(#vZF#LTFmkoOq1DKk< z^xN3giwp`Y+}l3&9&Oi1p5%gr_}lwH!KD#J?0*5IctB;>?!$H>{Kd!%V=K%1cZWGk zSs_6tC&>7_KmJnGvR#QHk3GpCdEf|(Mo`cnOEG|Da9XyfqKRgh@{LOT4+@jmXew}s z{5nxj%Mb{mjpScD&m@|!8vFQ5>-vMQAOVhEd55+qWRe7)|1tbmB;>S7^rgg1ClKy3kU zyz}>AxvW|_VJB2gDuRS^*27Pr5tGh&dfnqbm@nohiGj}3w`xd_%3y;2U z4~3HcquWO60}M>?u+=uCN%V^8UvDw|8de>--!A&z>3;QcxrSVHQ{<{L{#8cezLh{n?+&@*^EVB|!mWZ@-EFXtT@lr%pDA3oW=`Az zx1-g$r9jC!Wq&8s9n?>$aH|RsQ4uUx^|?3Z%R?kiLs#Lz0zqZe=9MfU)|WB%#tCngP-p zGa9}{>${ZGGGB3nrbS&P#+tOx%K~|G_u&u_bf0(QISRq(>q6TX&`>PrHNr)Wqx7BD z*Y_LN8F_(<%9_BesohuXV}ivkAdhc}x8=M^{-T8Hgh>!_?Zv_Sq&mF?f2V=J&~}U7 zNU5(n+XIB4=etVCtK&XiM8@ZA$FRAjpYCDP$;$DIuYgOMVEMY9e}4fm>99Zw55#9T z1xa${QMeUPGqjq=+)oGHbuc(TQOu%opb>1>d1s&NCf_l!T5&w{VoqbPZbDS#Q-!UP zQWYLd<^k5ETU{*#S1kq1+IF&`swQ{46TmN)Dw6Gr<|<8!b}N%d&}A4~fo?425u$;_syfkiiV)jNuA zAtr<>Q-t8wVy?*U9@mWpbNxnrZ^pX`d+R@}iM1u(l80njV-dCt5<+imd4PV*dVcuEI;2 zsI)_qt~Y#$v!NTop?IH5I(C2d!&|>f{s{w_`ZZ-3S&D_rTly3a7X*9nvX@r3WU;Ur z{T@C3tmmkCaqIip&M5mG?MT_uhc01Gg4oW_!P-W4ycfAjx(K*o-#<+HTp4(CNi3rU z75S^KJA(lH!9@^aQ>1``zWIE^D`o6-?CeShv_bszB@Wdyi@-{Wp+ zpd!F>2UBzn4|dn%M#n)d=+mw{RIl*E6>0+-0V)GS?RT1phmTlH`dW0r>+@vWeF|8( z?$wZ2F;2%2^~<+_&iu;8U`lEW7=ySMrVIqOkvrx4Xcm6#! z!HmC>rZrHVEsQ?f8^wd!G8CP4Y5?gQhJys}^*q@zO2v2r?eUeO&=U)N-eWUI`F8{Q|s{W6qa%Xd98G#|R_(zcwmjE(ma4IgeSs-OLEh#iUD&O%^qR2$bozQqm znMKG{@?1dAoMu`CS%Bc?;DAi`iWN2V-UMmv2n|T~`Y<4{{Ehe={{w~6{RYYHoTYvFVe_=JC}LLq zyZW944goM{n$Y6Gh~fs5B%3dnx6@&x=r_xL8y(|P?|gObHg=xz_aO2F1!~KR1L65< zrwsDQ&S(i0{9I^P{yw*h0>nig8k{ElinF}lYCmSn)q%|xoBbPKNV}qg3yZ+TQGjj3 z5ig13?DM0X_XC=rJBWXYmB>??!R|Mc`bMYTG?KT6oP@IN)y@+(KuYlobA z!OXSOoE2QX*n3u)JxRpD6fhiQAqVtZfO7zA^&z7=rd9&%U?vq?xpc>{tK0HaTH(jH zxNa#Vt3WSqW)Kfa?=j*8(<)*l6y$RSKESD_n71kHAbK@V1CLL5Ptr&=Mk70uJqITc zd(jPcYe{FOnn6A~*n-a_?CXG5jjgE-2X15=tJhVAW91yE5j2K8s{Z_QmMaHNQRZdb zYljPTCrcr|g?VeE3s2z#tv)iOC^7yAM zzWqDA(;qCp*$L?j>edi>PPBX&mg&#GPUOY9KdH)tSbg2_`%>F>`F4}f7m3=Vl9>0MC1+>y5Dlkb`^ir$eZ z-X?WHoDq52IuVP)vWNB7H87j+B$jWfI_Q8vg&SVx6oFXh{f*>e@Xo`Ii zWDgxlY3J9eR5I|HjcrbKo-T=SKv=kFZQc>6H|UHIzH)%jUF}cxiMVe@05{MhHwsDb zFBo@wM6sm0>FHh>otPVUj|YBcB7jD`u|l;b3pi*OFL8Rm1}?Q+go!6MbgFklH>8mn z9Ik+`q-RPEa094^j1+$&jw#0HXwh~LDh9v>^Z9WN=(Cew+5WMA4;$nFQW_R-)Kd;= zK+H@XYJQJAL0H+kh^4d?sGY8n;A(`GcHwtWh!0 zp*`Aj{k|Y%QRF~RV$g_g6hAiNf5bAC92nKW>ut2j4OR5g#&!<+oz6L!%wzr3{IFMffIg5XfX}m7+v4N~p zvDE6IZmHJ%KnX*2a&bpZ_B?9Z0TE+*R!2HPyy3FEda9H($ZCS90@W|)ek?tpsHkl4RRw&>?@ z(ZKpL6qK>(cP5-HwO$(B#sDZm;zH87TN%SZuYICD!Y*r3ni(`mdq9L{wkM2maI|2z z(lZbPfVbF%32FfL5Xyk+bKDjKAsbj8061V{w?JF_63^Ngu(#1VJrdZvstj9 zFGii-lE+^&U%@ZsibyiXX8A|aS!_9~Mq%`U7~nPx7F>ce!-Bhpr?0>6=&oL?(iP;$ zw|4`rs%!+=STlCNJ?OCCbiH@=y;IPYi4}2?b6JhgyHg77w&ATJvID`G zV7Ej~%=ElS!ER5G8-ZE<*}%?1)75yFKN;6(2<&yKf~EC)e91pgxCDp?tgo|~VcQ3D z&owvAiw@l>b1b>ve@FxjEGo$cT!dtxc4>W=-Zjt~V0k{iN(GJ<_|@n3ByJ|63PRxm zTcXdq13@|Z{VrIEG5ZLFPm@`j9DJ4S8f?V|gm0h`-@k!7=xUmAfiFI3Z%FPK7{b0H zcIqk&T(@b|e;8QwRynbj-6To0{l2bW$x4`Ups)HX1t7*YWii#o&9-2WY=a1UJ=`YZ z{Ukb^E?M}RBneu$oZ(;bvD{Z+Cb341R_^8bhDk9C~}_!ng`d(+|$SSn2GKqf`fSM+)~i5#xxJwqa@vx|hsuLdId&&L&iuaGO+Dp&#c(g!~BUT8sonD zVz@IzsS#C#-AFC$eU~d8R)bW-13e?!k>f3%10zn zAl+y{!|U%79ZLkXo5o;gx)rM|Ts%L1bGz(BF$mFf%uT6WiI^nm&$3ox-yaw2jZm`W zg@Kj{UV%hCmA6AYcZl#PYAiSfg~&x!KOG6z&S;byEM*j~;LHoSQyPd6$-ps$?pGb{ z;#ES1kE8#gY!NKb9G;DFTAc*gXo`&YK2L_dB7e3DMwqsrF@kHfz~vVu4+lxV#RKRd z7GZD*IrxBy3AOG)e)D>^gzHiQe}fDRO~Zj9&nh?fJADg<3{PJ!>Tween;mTFkfWj? zVdtbOB3<8exc(h2aW;TxvX|0Mabcm(Z}6L`KgyndIJh_#30d@gSf95ZrDIY3N|ou> zB3Cq58atlB)3gP_TD5~r#sVqFU8T`Ybci+4HhJ?Wqyxa|H|^oB;BMFH-;5Tz*bKlt zFx2&fvyB`izxPY-lKKU3`VQvzfzxdZg`yUmer`foo5es9q;`OOSwFw4cTTl`I}jLo z<=Y%JL|WPP6>5NjfcFZ4WdoGSh=jf?$jfK{d}e>=)1U)Q*;Jj-OFGNL8dLH^wQ6z_ z%6@5AsEa#pj(RIR3^*e*Jr9eMThl@e29~oAv|bVP3rE$(yx>B~hntyjxXfgTGU}sz z+cm_H75RpnX>uvsk7_9_)A5y>kBh(PAh5hPv=!mU*OR>_$5!YIqzmVdK{aPMw2m#U z>RTd;n6;LUECa!slxteeDFDr6skGEaE*SF%JllZv;jpZ&k(uuOKT&*!xdF(Cmt(z# zW^D=C3VOx{f^SS}NF9KD_NgSikm>$#Tbwm+{}@XEM@>Yp3V*GG0OVdN`&I;Q{(2Q? z0{)e16f$#Qck0tonJn86-d~P;u1$(H2q?2!>Z}#qYY3_*55qw0NOSnK0f!U`~FRK;6L8_BRi2 z6QxTaxD57}`C;E30$Bxnpqw9wfX{aMF97a0_rBxp%d*)!R8lzM~$cFsN+n)&!ha=U%s`cOY{&CXcAnP6Pu z%^jfeEav!>F0tr!bPx0pdB2Ef`;0M8 zH0qwq2Er0*a;YWD&#Q*>SX2OV5r|Li@(!yz-Z`$qBK^gAF$ywTx@aKI7p0{T=gH&h zax!vbN1f(KKpnaKp&|?6gFBU5@wBGp-vFb(&GrBOmj8d0xp|%~R0wwhkE2m&J2qYq zBC9+CQ0Gk{HlD7veuFUVOO^OKg-OEfX325JqOa((w7ySha?%pCsBfSm@-q4AzmX3ph!4izK1m$#YHhS=9>7}1CHZmq*Q}SYg z0$3TzRwZ)yD}~F_Ka}9SYd;+pnfsN^IF%AG)l9o=JMcZT!q+03`z3APm zjP~2K&E(NfpJ*#4V9xdv=i$}n#%2=jKDS>njk(F68S{lcTRSQ-V`=8c`!OJ0@FE6A zJUp~Yz7egSB6ym<@M-XxKvE4U+iht&%BSsCE0S_tkSw+eXk*`~o0N=78`cDAD57>e zQO`+`P*Cy3%;n26p4vtBtZYv0;^h+AllK$)^;~bkAsr^r z`}(l3L(A>LvF6UvtFIkNt03#(K?xn_0fQ5*j3-qO!iB}v3pc@3S2SWkKAtp{G7N)T zBbt^Og156rrSBo41p3y!9(p)f12W|99+Bih#iZjyk11GnfS9 zC?cQQr!Tz(@=AyuWpnU=&d%Z%M$`IM^&jaYzSK#Om|F<$mgvfZFuUt3=)`A?Qm+Ama9Qd&<_K852Pd6W} zeBuW0Q+pvdz~DWbjDjeFiSKU7CWcW2-9eK3fc?La)BeLzbDvu>5d-?-zgVs<%340Y z(C2;(*0?0eYheDE>31Fi+oJfP!#pQ-f%hr|vbDw+I_e9g@zWxxN`Z*041tCxgeGX6 z^Zw|s`LxBvnxa)mV9`2bnt|XD>}=#&7xvGD`#ALruyd4h4YC)ITao!Q^yyUp8XwO8 zA2mi1mhB395KGJn`dFb;o(rqj1l?XqNHjzj=PK_)1d)*)S&$iQaI-qqE8+5MyG^9i z)gVAIA%k(`+dID~M|upG+Y2e3Yc-*NKg-oZwwLgu;hf5_g#SP# z(@nX|%%&JTis2y7+QT>psnK3Vd20rd0+sEG{Pj#RZ0~gnNe7`#upV@g{ z(fpQsH3f-67I5WDl&xXC#}gcK3Wn&iycsBHSrrR7b1`Jw+D~|E&hvZuY>SeD8S8oY zFuA^~%7X$P0lG`l7jCqdw*%OYqucgVIe5D;*?BYDF1ubG#wrooZql~NoEvJC`hG2T zISceNS&S2MXG*wkIWkaHw9%hCZ;8tuKjL%QQ|(y|6O=*Vx!4*Vgh zzIsD746t9kmcs*?64|TLBY@Dd89o&zD0IsxV<9eQhw0Yd1#0Y)_)!`-cfOQS?tlR0Q`^(r_XK~TG&U5f_Twd$7)jQe642ZqYi)S4_~8Jf+WBGz0~j^=7eMrHdELie zNU!$Ma}Z)7!Z^opm@+lO5h4pS1AE_i4t+4rUUHKuM~#D8Wp+Q=r&P69wd#mrbx#8I zKTo=v(WSzW2b=UMrjqL&U`PwEL)_I+VuTmbz8r$D#8c;?c9nC%8eLYS)v?GHja>5Y z>|a~sa#fV;FL#!9Lz<(gxkYpnAW|0R+ z;paHFLKOP7*Ua%4-JsNjK=+SarVRE-%Q9>ih%V?mlN6hwDg!y(D9#uRWoXO%-gOBx z(wj7|lr5bAZH7>a*>|j~+g{iwHYVDuI0&1rx3ThH*4wRm#QLB;#?^5^xt`bF@sMC{ zp2Bmch*Fc!5|LZL#Hd;ce|-p|aE5|5DfNT3jDLas#y#Z}=N9xZMle`X0MgK4ng!YF z5rLpaVwWPG=$wcM8jtsAW%r_}i*b6}IDFYd5bqYCR8za2^uq&c_>*Z#>Lm0Rg=oM@ z$%uHiQ^$iRqIDW-;ti6SIzMdMuej>mYa9xdg1nRk^s0-={qJQ_(U+iD{h#)*X&ex+ z;i@r7L!cHIM^(HB?is!g5I`cPviyW#chJ6;cd#w=&`MKds;~N@fF8DNUycpm=-W@# z*b3j3&S=bAV#BbM0W(x%$jXQVhyXwazJQnM1a!p96u|6B$;uyyC5q|EVQ9yA0?O_a z{el@Xrj=k&!zj4mv+e=U@usYgqUHzOYe|A&<|;10Z-^p#+0v5R1heQIEQ3&|&{NT; z`dBY!!&b4ckJE~f5(2)gF6Dc$zUekZS(6cD>f~M;WJ{2< zJH%>XRt3s?3x=-}f?*$2I^ELy8-=|68m%mkvTwm{CeV}ECCu>eSC77UqcdRr8N*^M z6~C*_)Qtn@tLMhomOHn{iOr7IOB$akzOyuRlIuaiI)Zolb+c!pTl|AT0CHrm*2m6Q zEEA9TRpZ9^liqsadNy@qgiQkg=B#vss?Y*`D$zzgNXAq?1V<5W-bR-Ng~Ix;9;`WN z;b6cpO)Z_sy2NL+$;4F4_-y5JiEmSPfCP3IUZ?-RHfk8}s1dj~2e$QD6a8s@eU{O# zkn6{1;2?7ew|8F1#Ss}O?h_7$pl%=jQ9cGBwKp)(0uhj)FT}^XvXZBy{+b`c3{Ppr zSl4T#q?2XP53gRjgE@}veBbk9`{j~e?X#d$$qE(|g?dr;N`9g3j@Kl25(qf3@k=&- zMC-^k|4PjKet`i1P_yDu^|p1uRg&O+EfNL7zIDQFC6&C(q8KsM8gR||GZ(s*R@55Kii+AY?2#dYzV2v zlA7Cn7_zOIuzY3q;(_wlrur0>=4FomKZ+2epqfcn4im-`_&_J*v=D0;fNLN4_r<_4 zur+}b^NkvNm$?;WP%uj-rN%oVNqvsq=;lyYkEDOA!O(&=EdX#R17nrN;5Lw*PMIhO)^2;3qLSsqD;Ze@vy zU0sPoWgx<6u6UpU0Q^y&5>?$PRYG$U`V3rN$14#GDj!kT8&pRG>xx!(&c|t=lVS-H z@Op67o)e|(0I;kpUL$bps~8OqJp6kX&kqgZ7VvaP49_TfX&&N!szH&p(_tWe&x}Nv zMn|o7Tzu$@%|c%HcWrd2PbFfWkYpf9bH4R!`rxn*X;t7GPI4qqMMMg40!xnW{V^vH zFBYoO_?_Jk?YJ@B*}+EuF+k40RyxV<34j7iKlfttcZENnhDqP!8t_|q)q+Uyj0c>9Go?7aIm{6Ekg~93|O@FMN{3HMof^e4bb#meZ zyWQ&r7rf)zz|Rx;ZpvTp2qgUJmhK)4U zLCHAW#by@R&JXSjDC_|}Y~>snBg1R{$RJeLh2*Db1jSiB{cS~rDeonl%x{UJ*)tLZ zgl>W*By{vGmt*0t<*^k*+&=o9h#8k_13GIUm)n8wNSvQx!9G&it(p&fu~%{mO5tnz zJJZ2>YehK2!sn~CWPM5;_5Tf;&%F@j7Xu_t@qM%UVFXLb-)`WmrT2QX@qD4SUgxKU zj1CwF+_mw~m>>kA5O3xyq;KgZ$s&%*1}Bf1&_x<0&7OE0v7A7S|8mxw0iUSWTJ(JvPLe^M-tBAt zxz;T+D0O^S{+saKv+wPu6KW0e-W^XwA5X(WoBGUY8xSwe*uAw6Sy`d9O8umLZnX(`2elzBmdNDmbQ+y1Vy*c{*C&2`0CnyJ%Pf4W?B{4FN;>#1bodgeTVp1Z?5f zPb6&EOWtsNa}GFV8mTDfl^{=r@fAIz^6<`eCw~qmifik#1H!{qk;Odke<~Gg#hVA{NMkpN{yM(ED2)Qhu=A;`X78^_;qMIh8Qu z*TGNR)9iBW$MwTU+Y=f-3o%?iEvyn@?R6|Dnv~iDBXoG%S=6>v!^YH6YHGr+<~&|7-99szz5ZWyrdSXsoyE1 zoL@)3m90~wkKmIJC?bh5FkbNST5P2$Og4}XS6EwLO!NuE_~)Yarh{SAQ(*dpL6(S0 z3#@`mZKsPxi^e8=uDnT%xk>FGc0a;Aqze}nfRSA7WvOuLULB_`EX74{$6D`S@tH0_ z{h?E5Lg?@V>buyy17eVx|GGmOhX~3gFi>?zr5;$N?lQkwpQI@xBKu$jA8>YDWz$K`_~@ z#3m@Hn;%HXZl)NYGL7aV_PJ~lzL?~|wjW(>?0KGoXcMM8BbVYvBDJPwVFcR__?;a1s2tnyryNv>WJ1{MRY0i4t6*v?Jko+cpeJ6IdC4Wu1pF`ZLX{R4dLL zqPwe_Tu40NmfL*00Yb^W!jw5*VkKowUbwhv>Hf{R%`Q};yCYr3eXCqetAcV&izL}- ze?U2!R`)y(K$5CD59X`qZdML$A`ZSbu*Z_h6jEGf5dv;UsDef+IzyWSK4D_$4ccDt z%aPBuCunB^i8^}wSPao$dz#5tkP3c9^q&7zkQ}Q?PgwG9XC64A>eCQ@%pATUSW=OZ z&LeyZ!KVj3z>xWrUhioR-8kYW{uN$dMO!cL4RXVs=@prrb5E&$IrsKr1;|N$ED>K$ z96bOPqXLMu4yE65t(bg|nmUVIPQp-yG^Vy}U7f8tJN{A!#})m@dOF*#4ZRe*+xB{! zj&Y5}Qc#L_ma>NwoJ;#YQ$|TF1DvhTIOgR-{Q?_>GCEcTAXGbB$d5fxY3Y*YRu-Y| zdzIRn*|$9G&i>y#>8j4Rs6e%pM%`!pJSHXzT+32$l7LW-LacE+6fozUdjpKX zg*H2XcOn5OLTCtVp4p0sTt3`1aqog6+z#|aRs-8+u8B$zF!yu z`C<2^XCX^LzqlZ7RxJ?t06$V8%OPPB?nW%VyRFmhJLuUPs5H#C%9$U~dM43CPtTtA z0WE-Ah$S3HX0Ox_HP(K0w%+gkDM}uMAL8|LlyZTFIJY82kw0jGa)ric&pddYy9?RG z14fb-wDE{On7+6Ar2tJ3e44p&Fes_flGG&T=$fh{-69kp>?R3Tl=|mzf^-IdomT_^ zmItS!*e^_RvC-1wviI7F?RuD7%+~ajM|_zQuoVlpZotkCVkLnJZ_YSIn9`L0k__V0 z-}w9W{f|~8iBWV_a!u|d1J7JHdm)wE_0ov4>7fA3d7|x*`CA==ArHa$0w_}vHC;Wp z=R1?tpixw9N}G>3^~kB>=}+l100@@?FqNGAm9~dyR8~8>h?vlOwQtEIZM@G421NQ;x{*GHy;Z_-g0lQMEl^-{ zi;PcAKSyl&j1YDwsh(vFngo|7zXeVotGUDUj{ZwcN$n1Pi=gzbNSS)St?HR|vm$_Z0_PAG zWQ=S;2A+k^Sz#rL<8vCtOEc;ITkGyQ{$ZZ$>xg7mDh}wl$Meh)ha@Fd+cV!URnNQs zH?q@u;+pLsFYJ+G=nRI9VUE)DWKpf1NpNS*!!OhbC; z=PN#xN%!Iuv;BAYZ8f)>Z_=#qFy?bP0ZQ!Y-W7NzM|BWp6K`~tI-h?kNWfYjrP?N#FM zuhHaXsDLCUkLI604Xw8F0m8om2~{O%wk$J*h3(mKUpjsUIO0Bt0mM1=HX5Ydq3t9< zyhEZJND^QkC8PM&nZ(N}MzWU1;0H=8)fBHG1IpqPtICT}HP18c%rL_o1xvl!-=BV^ zhU4dZh7>+>2!g zCIQIvlCQdf>`91WPx&IgN^t!|6E{ZQ$oBy#(Y^>!tEN_vvJWtJ$HPj|*l#i)#BH`m z#AQS(nYQyUEd~`6)cACzx$j8J5EV41i6WLP{C2IDmYT}s#51*T_u;v6T!)}mNabS> z?{(?zx->(7<|VZnKK-+VP2lZ0A8PML%qM@0g>-zq2=kSct%2K36!LiPT}T70OnS3! zpn$~FI5ykos62oiKDZeSUo%gigIh}f0%@4y9}oXDH8>;hQpbsK%AaIxrk)`UctgTm z1Is@!?!G)4r-z=LprZSU`i6-2)LZ3xmaltRt|HkkKM*R2I-dQ)0Y6|v7R4SOincjP zhngkucGmfUP6J(Gu7t|=U=Wnw@d;QMpf(GUW>5>o&1~e_B)#wgbgR-2M5-5W1iGnp zKc#WBQ*;6!a}LnUnhZyT={Iv()^_P@E*@+mnSdpRDJ#;TXHzN0Bi8@F_c#P3$n{2_ z#1n)Q-tVfTOjf9iwjpY zPyPlDWxhU}%e|Ix=u^HIP;|8suNJ~>=1K0)IRp99^Xu+arCsh^w|XbLxiq$JX%%RC zBq}vmAZ^{{J1I(NQ?A$S>%<)hIep#S&UBQ#~OUg~U-9fTe!;@P`s zUj}=eY=Ob{i+_DK^X1m5V)gZyK*_zo1rF&H6&ROcw~`xosFz|!z=ob0+L-+B$iGnt z)GXrDcJCXTorS9xN!VV4^a& zrIW}I2XRxTi(5(C6v5Pk86T*5Ln+qa_X^u+lWLPiH|dSj1Gsrcij}+E@4r#jhUy-- zI6^Gpy2KbF{y&W#jO3=tCq$GiTCkP@m(jC{<(wjC%%eR7@2y^iH7K>k^QB1qujPu; z0fo0u0C_7vtNr^}p7mzecR^spCdJd(L% ze@}JPALh@Xc_oN6wq6705Da&cZW2yzRO{n=ESSh^HUF~fxEqobo1_W{8K^dE{3@U) z=d6`)nx2U`2Y%iG|1IaPOr?qy3P5P}mw~=v-`l5x)hMo(6(vHmPm;46VN!B38e*!U zxo#+@gPeql2n6I@^;`dJuD1Mw>nR261J3@XX5TeP_3&kpBWx_~*A)i$XdG=oF4@!~ zGnU!|{J%J|H~bboS#Bmz^af5HMRi3aYG9zxdLXX844HEd-=pM2`~@fub-fE@b|2z`|vV; zYJ_|CjsqPWZK^#SGqyrv@U6Hw9JoulOn^E0atQjyG;;8xuXd9@n6S(7`#fq5eO@~C z@m!EeZnBTQP@Q~uWX!Oucs;xk0jOndXEjQbq(qQBc_d`U9QFD}j`!bs7RV?+6#BEj z*d)ePHXF{p`=f_nBWPgJ`@k;t^>DULSWcadZi}>=hOzbCh2-(chJ{a~>+v+el%<9S z%MF)@+$5L_7pI@h!lVMIFbmw0%YAddCq$k7dS1xNg!Clt8rQ>bW{t*+!9k!_VorDB zX-Q`n!dxIPlb`LopCqcOAOAwzjK_>~%t}lKrgw-66E!7u_A)d(HLi8vv?s5KxvQ~{ zHm9OXoes5xSm#$L4nuRsAGojM2bWPuB*!L3$=T=>-RPUF-8End{KY%=lfS?~quxER zm-f{Ed|d{_Wm-TK-UjY9_JFB=k6lWF3P12VGwt=SwVlP8gwQ6^3MI>aG1Pze>82K=}#BNZLZ+c~OH2%xDdR@N;a)_h$kUyD# z(y2jUMG3`DG>!EJpvl!EHqBW2ijWNnlk+SB33{rBC3`ruL7}n*vV@D!KA`G4UnC)S zSM67*r1^EyJr1%dcO<&LDv;L7z>Akh7vCRr!|Q|-<`8S|C};9n_5arEE1+vtb) zLx2wD?_ji{+oDNb?K@_f`B7l9N;uP4hhGUMv`pN8i5lmCEeShxD?emS;GwPiWWE#N zPMzI*@DGt8>HD6yP%sT3X(=&3R9~FdHI)#r#%kxRSf|8*l-;*`|0&fXRcy*7N(C5@3-({(Pei z14|4+9Z9Cg$>&#?VzEcYTYPG?WEZVIZ}_9~o#J|yiwfx%MIt+_hU0|R{ZNxKN`qt2 zY8aA9!t3jq9(kB~>`J)=jl_Vfj9cZ1`S{D%p>c!H8TgowD}bVj_=*z>c&=_@S)z0z zvAM57=21`MxlC|CQ1AuA)c1sq>pW;0Oe?1tbR!S8-f;E_42&2$f@_(CRC77w22jl~ zS;lb?HOp*zj3xkPzqh z_SM!I5^*HLT;*{46fHl-urWu?pg;Fx)bLmM%CGZRmjf7i2p1q_=Yto?9m?|OBC7@4 zakpZi=VL%{(Nt`xd0|YW`ztNbzL#@qT@0Vpt1kpAU^_InC{ie(XQCQz8_|daQT#;E zb3-u+_C4#~gi_9E9b>T1MUja_iTb*?V9t9c529Zl%%C^hKIQ)z{1*#!HCb&K{ePtB z5@&I6G0iD3`b(Tl+zCZ&qOJZtd*wT2apuLsPZ#VDdx<3AKv_54;^(M=Z#<&}kylVJ zeJK!8{x~l|r8f|Wg_&WNBx6kN1Um`HFash5<=}*h5|`H%#pULb45Dl&t71FQw0)_3 zfjgq)d=;rGN|x=32ENOnR8{x_zS+laXo$c+iwp7|PU3pbvWiH?Q`?$t>b&;&kn)C!{P!VSb_66d7SAobt`QrhI`L3tzQW*wrKkQ~Z zu#SB=@Le$XCg}FIFMb%-bqm4PdbpFG1QD)ys*Iy4Zt2=Qahu}f{Yk7K&2^9Q1~Q33*gfg`IhdkFth({xn%ERnWoemRj`963Uz@0L-iVu*R^icjMW`Vi7Wa&34Ij+?eL&To*7MLHq$UM8Hf z_8!QLm=fH%ElF21G#QD{Ls7>vzhm%$;X-x(SQk3ySt#f_l64+qH@>tyPV)l#E*~{0 zbohaa++xeON}`ZYlMASXuSPNZ5dVJ|1aiMxh3j?Yry{gT5OG+D0~9`6RxxPMtAfS*K8*ylVOps3ajUIorHIP3)8192(ws_W*eW`HnYfd%@+ZGdvI2NINBvJlw;iaoClPEy+@7R6gJ{P z?3=uGMPM!}H)T1JRek%SPr-zI8@M@nTW&2tA}QW@Q5$K9F1{z*l#XQUK!(0RQA-bj zpbBt4tJmKHU|tTw$C^0{;QHYqB8=-06r=?+i@fO${chhamATM@{a~|X4M$;}gY(Tq zVe>%KPh%CccE)1ZnYK~WfV5pIc*A$Wc9vnBNtpuzvp$rffv`Lo$uFkMT-#eKO#uo9 zt#uxv&PDpJ6l9%uN6}tDpi`jJAWY#c9|N!6T4Z_r&l8XC;~*Np!B(=PYBA|=#6|9F zUu%%gQL-Pv!;N6ylN5cp4&qf#(l3H&a-fwIdyU(hWG2R=@NpbbEM(8`uRt-~KIiX! zo&{)vFae9-`G|i2iW9+s#}E`GcFRK4=!CC?{=)r%eoxjF1r|7Wv~{}ub!)s2zSJK%i4-GVW_4ET4|gLGOcR38fAOnHVGiu zG>VA%##~Tpi29n$%;%-!!gx|yjV~yVjHI@JT&0tf^M2&gjr}qBbqz;(12XC?=L4Ds z=%M1jw+*r(=Ltx9&D7H5@x_j2!o;iEX=o7i0_Qg z;pV^6DpT;D@h0--e|ro|~f?LpR@cb4PtC)Wkh#7n|JMBs2lYW0C? z@O7N-llY&P8_QHvflayDj(CYR#P3a9zb{UlNK4g!0J(tafd_2^19HOj1CCw94BsTu zBn4=fPKf2?stAItxjGb7WlWRD;U*y|^PUDt_BZ~A?7Dsl$g4%;u1Jo$}5u*<+TGJI9!?RQyvxhQ)X+5TQ! zQRl$@wQRtFR(cgwR{U|R+jsT{q3Sa;#C4^whD{o2RPhribnbf$?`#>Hb54|>t0@T7 zCF84GJLmPEzB3uBl5@6#z5_f>%(7wf8ESvw$*iZ}_VY8Sc$qg;S9&1k`XD}9FOe;` zZbF-x0TqXdfX&EHYd$Mh?=duAZ(gsT@+n#3h3{)8?Dh5?u`cq4AG0#chNM?8 zJiY8K4)|3{Ks{whGRPz-4`|a&LB}4-=eFOG`t>hi`c=K^Mkz(XVAf^W9X*j@r67#K zMXOavNki<0sC(nC`@zyu2lW!jid)bIeq@$?CEzjQ8k~B{utdCv1oLF?@9if|1aqMv zC`UNoQQ^L>UBocsScBAHPoo0pdOgS=R(G6x$K6NI8&>trbn7!aSL@d_`g|HKgH|e6isl3Ub%jay*0qFB4u3=%^Bp;Qx z`sf9-Vc8e6VEo(6HsDd<4B{Ew9Q%?;KmmO?mD`II9N3&x#p$-X{fTpxQ)iklduh^t zv7Ke-zJ4u;wwcKM;#{Z%tb;IH*w-&K9=t;qz2C!L48$M1Jy`HDt1uOY`s+>+*@;dAea?wk?_>}KLz{gN4 zp!(WV-(c1b4h-f&TJJ%YjMKkhFG=#4lWOzDi;CYulY0knT$RM5w0nsM)Xe;r}_BUY)VOE3e<9*AtS?oztD@f`ZWi=d|DRMr0bZ7#HyfkW6)2|t+3&W5a|gEMC|9z)WRIdmT3)gl4;0HUwYe!CDQ-@?FOt z2^_zp!L}LtCaZ+euoDEF+b#;1p3nESmfkx$Bo%;Z(>m!_ zWk31n8y`ohQMyE2^q{>Y`TbUE@4Zu$eqAQR>p%ktj0bgvNtqX7I7WWv@8^oK(NLp> zJYG?}S@hP7?Gv*R_2J10+8SS(ty1{ZX9dHTlN@m6)_|4ydovfh?*=|$_OyvO7(-Ym z#3T`1#t$~dWW7OvsH{C{DZ-(|IrHP7IU!r1-;{UK?GegTo;-iisX zxjuNvUZ=6vX8r3?`f*3eF@28V`!yo_M>%&=9fz9&h&9*7GgiJ5`k`wkP9?oStIqQp>(YtLML-3jBDm=$`@XHWV(7rW z#3E7tiuJ;ZhF7%(6Q`NG?M^ai3JHC0_M(Xr=kH?}I#P1!ntK;~^sgos=5He3O-#0M zaH@-}5^Xkm0EB7N`u5$0wEMY^f9HWVZC9>t@?*8Y^blQlHiEzHc;5lmOe#I!0~v!N zQDVL!0NPsobxC@+SF078Zv`M5dY`uZwXD*6+H-w-y`Jp_oj|dF$whOeg>0hrhz9v5 z)B+H6pbl&;bpiC>`ooj`3v4uGQLh{rrU*}woKrSyAk{x6+#`MzJ0H*6i?#%4v`JEQb5j;Kd$(}<<_W1R84xX; zFaRyDDBQT@o05t&)R44AxL3RSw_T}-6wMb-GRM&%67>C{b@<)6Ib9g)cI9asRoO- z1kDhsqc%IKIG@kw2bU0v%pRZK5cK+7asflvyMW&y--%#|9u*pAKcBl&1e@$F|JR`h z&0I()69xaPE)f0L1Z)U;44{|=>(TVSpvCHUfx~GzCEZ6IZOH8itLO8tL}XFL@r&O0 z)wOP5`s)@JOnGg`xeuCeiPu&!lhA$o2y*L2{&G9q?`s(8-v@_NjZL$@$S9!j*o)F~ znK%5cZF{sAWib=e)d)-w{;Ddy-!1E$PZ+|Ts6C|7y_ z$7@kjVS>|t8}4y~EdeyI_{GpX(457OsXmT$vm-VU+AJSiMUI`ew6rxe1Vv626ks%o z$mrEY=wy>6{^hsOLCGp6kRcZV2MY?}4th94>*PQNNukEMx}U3(gBIZ5|Gb`}XG;Fg z?;ffgexzH3%3jC>DD7`q90XvF{qA`8%@4|_10>f0tulHgeuTA@vZe&f|N097P^qZ0SVw6f_UprlvxAb8PVR>0dP~QYuxMc<|Gl19$LM zM=a5w&84yYVoQYw}){F!OvH%b$vkpU<+Df(; z{Oe5Lf9y=j!s-)-I)K>pHra$rP;zwRyKT<&Ck>XgubLQhWB^2Py}H|@Xg6Fc<)#jJ zj5olJ(%)_Z3QQJb%|v+#v_c!Pro4Ke#_|$=lX{?~~ z&LsH6`Z6DqOq;;LJ8}kb*sRCI!f@Y01&w6Ofc&!Vot_|tOC(f93m=$&q8#!a$LZhs~WyBj4g9d;Jue15RYbU>a z(JMM0V=Dgik*^}ep!9AUj({|fS{BcsRsujoTywWj?2|=gh=JsL{;u|0P)G2Ctc=KI z8`#Sw4rAVSSoq|7q@ueK07KkJy^M6d(6PEBC7;k^!VC=p%<(mT5}+|3O}wFTO}1ZF*$eHe{QLskqP z9Fc3VJg7L0@;%cx+|)=DBE+DlU` z&`R>hwYd>|2(KFevF+jh!01iMtiv;VTQAesUY{Pb-F#}W(UaGmFSIh8)9KAzLn-v> zP-<|X>7{Ray@Dn`+aZi(#gZIHK_UNHhV(-f&LdhTfYRK0Z%EIvH5&kFnB70b59O zKF5}zN+GK**iITb{HO_G=u*t-9btUi@7vhDzlQyOCh+2Xe@jgt_}65V(R!*mx}% z1!i)Db82vX5=wMcaL9%jO-)r3+z&WS&OuA=N#;cCgQd52CA*uS`{4?aCd~lJK=443 zHEjMC|Ls_7oS!}v1W3b@fm$t~kxKlB>&_sj5Ptmiq|g{T9W&dJKp>nw7B!{@6P*AD zL4Y}(^k?>PH^ttkbkp8*eUzr5kbTax4&bcz6qZw{*Q^`QAsiAwr;(P69Y%={2~%7Fd(PE;UQ~mO)7@ zDIj}&O)C7_8kC1^fSXVE!LX5003w(Lp)D<{ovJ39&+a-Xf8U6PW$#6zp%!xL8K=>dUDO&g#a;YUc2&>T|M(>R3tF|Eol0bJ*M}x2~@;G8`*&t zp1K~7{Jc^=Rc0GO3bE+1dW$cGU+5@`$Z1UGJO`DpNbUE%A^hU!sHzgo7 z`e~%r5Rqye84L{{4MSQ+v5p0H_I-~&W1S*fg3NZXaGrH(&g$$`t zVeVG?djb-mY12-)P0am0wl;SwG^iZ*Jd@xiL!HIT?k!PNy?F<1-U{hM8wW>yvs^Ua*brX(k?L;V4$@?7E zuS^2quX9^(dc~M@8Qk>iKnKgP%xjjRUzEOr9oydEbTUeX7UjKv{EB5zJ{ArtCin{Z zT5)p-q)jZ|QtY?|H?DWyv^W$@E&--6ep$ zPW;_FSgJj3iPSFQ-&JAMkwJTj-b1?yV|~R%ywTtlz%;k|)|jp@V|WkaI-b|?mZ}v5 z`mVV^9VXgf zBP`mAq$hqVZi6*_BqBj1)TW1SVn8v!OJdfRUiB!!L&|Kg8H?kE3EwT8Vj zB7JRWQb;MTe#~}4skcSH1ovp|ndRq2~JmznX{s&NA0+9I>Y$;>X_q zUJ2Fv@%lj9;F#eTeGOkKog*Ka{b2pglpFjeTou1_ctgx)%V)H$1z!}V z@{!Kn)mZ1bb1VG6iWeyiOBX{~v9eGwX&r~o$yl|J9lK8}qouYFjYW?Yp%=jV=8xMA*)+{>I z{QNx;(?W@r5`4~!?K1Lw(dK<=8xO2&Mk>lHO{ARz0O@xu);H|~QZv#RNk)pS zpxL%@y9bcvh&@;*!zbHLPckqKX!mOny!KvD6Q3bH0G@2yp+Z)^9-BR`owBDqKfQt| zs*hT|Cqy^vzdWL45ng5I>lcKfKXgh@2>iQ~i))bf!QW_X!+(JEjJwf-5>M!l-x|qy zvc=oi`j+0b`+$R3xib{D@2j`7FaATBr3pcrDPCte-`MM8n=kG4qPP8ggG}@jN_*hH z5Fa>Ah)}T0zClm7;6Bzu2lWkpxU&HlB=EhQy`@tjo)@DgeGcy!IvEK!?N5o01OgfU zMD(G@U*@c{si1Du3%7A%Le@5|`jF#8_`p=CL+~@HURTEb@~L=VpbB(AA@@6gNlW~n z96qvef{pI$yywhDaR&I^-AP7e+FNaTCDmn_r$WmI3vPF0k+f6MK&JJzr!0d5NFLnV z#P6b)00G&K?5bA?J*z=ybS0{BVOX1u_zaiPU2@Ajttg)MPfq%m8<@f}yfMIu7{D6s z%LUw=a~%)j3z~-9)#FGpK$H(z9DSXC$vQenh#LFqdzb=El9>Mb6s{@`w9s;qTt1^L zQhTIo z1T$>E(I^5g$R9-R=v6 z2oyATD{wtAaAI(EY;?(-uiCex+5Euom9r@vJzwBznHnr}O5Dy;rQMayBL^T&Y=}c3 z+X+HtL!?hJue?dTK#4&OCHgP9tpN|GyldqW{;;xoTg8v8Yr1o6Rb3+sd3ddpt5 zR>cjF^#kiZ#ZW9S_q#av9K3vsxtXe=Xb_rxc>KeAg+5A8HL^pR*h@#=$m^9&)9pHP zLmN~185TIBd{*!edz@d;1r3%!e3Zo5i&7vczZ+EIMyTTh?JJ;4H3hE5$(g)hdY!Xv z;7-0-WkR@ERdodjg3*!kqizi$;yi!IInZ5Wq$qN}Gzty~)L73)d+CX8hf_-+vlDRv zWHrU`ovA@|_r@|%;|i?cRc_ViVtEv;vQ~m)3%M#-!};2{>K7A<8jQSlhH*}<^bfs< zTx|3Qk~!;H{t|$ZF|s!>3@rA+{1;WNNR_2~kPe+L2EIJD{|AwxK6CD`C2`c85SjXYk;QJeLu8T6L6WU;&}8cSlI*& zh074NRxVx4fF9v(DP>#?Yf|rTwJ={Fb}k=T=C8rzTB{Oh5(LCCNUUv4R{<;Ib|*|t z6f=eKUk21%(%SDQSwMBF5r@W#-+GP=8}PvfO9W_il&Th>iEOMTSr#(x-kY1sh{ zo3xpU?jwvWa7kIiea;-$ZK=n1_}6G!diTl9=Z#QK&`ZU>DlVE>5vP>3W-}AmhF1tp zDg%sa$v^9N7zmJeT^>IVhg%ix1+oPRW+&r3e6cNG)VFM$vkH7eG`#ig0z@_9)?DI! z%r8fz3B|%V)bM$QZ4N?!P+sGqA%&o=JObA8gD}DSZbeB}gl!~(V5043?HDv6*R$W!^iWyQTFu~w= zX2+Cpz1uu-FqHd2U%smzBfDgwr$N8&Yk^JMs!4#jf;`lTfuMPPYE!uE4{PU1+7&!n zuz$~4l?abAETP*&Dj+CoziuIh#Pr2>&c)`*vF9vG(G@!5oXr-mt4v<};5a&WGdS60 zkdos!O>jiI>@*7<4T&`zMaF7q)XLytdBShQN|lz%vG*e|r;DRbwYvdS&T@c!hIx){ z`yf{n6HI_b;4xCx^XFIy1EYfiZ0Y`98|5LY{+%Becj%mMpk9A z+@@;>4PC94&pi&_wm`ptN7L8^BHo8CV>Xhk`PLgl>F^^Ew8SzbAcs_)NUjD{)gZ{s zbKU|V1CVXrGZPR8RLXRu%>lYPGDkj^Yv;H;tuDziyo_`NDgVmr1p@ARh4!4MbV%5- zkd4P;c@)?5ytdbt#CYzSZ<&YWmVEZbU>{2fI3%I%6+bL%{;TQtuH0?wUXUUh0Mn;;-p%sNkjxoN3&;XwwM&QY%Kvsb^(ef zvEW>Y%dhM|6PkkdA7-(RwuC|_<6Ah>-BX1e3v9bM7Ai!-?PY@Hm9=wCkoFFunh<3^ zd;?h?)Mp29kOuVL4BQW(@6LiICEnAV-0#A01}%)f8V)w}5_H8COxdrZnV7EJO9#eo z(B^O3h&5Jryd^U{IP=uQ$f-P$eX*Jy*8a><+_6@oMhpk~|2^QWY@gU_a$yHKI})pKbKtV)jy`=?2D zuGi zF!x33RDA3oh3AxSu3F_tB@ zaz&8=M#&!Z4UW&k7!AG8Z!>P6hH*v!@eD%5a?W-mVA+vrn4@-#xE(5m$?2r4qs4s%iCbK`|5dM-YR)c0NBnD{_<~JXEU!d zU;T#bAm(-Vm1)j2Pu}>w9BRXY_#{sJZsx=nu!!H@^{bqpL8dD9?guFR3j*ACWW1$H zm;Y3*g%}w#E|nM*b+q`L1`+_OMT&K$BQ2^66Q&IC7ofu5qdWxtB0$hplhX*VvMZx_ z)Mz#6Q}ZzXd(KoHJtJMjF#|lcN;K!{k)ZJdN4@aHSF?r1*8mzTPaZFidjoVb!gfh8 z0X8(OfZ=OUH645%47PWj$cK1+PxYmd@|NkW22wPNBYe^?^(m4EH35P#Dcp2&(pdb( z8GDb5WZ#tdv)qVM`R)J|z{)q_!Z+9XqdYNCj_?@;P zrnQeWO*-FMSu1|5cHV!I{K>SxFCb3S5hU@7ddXJC;wbkv$Pwp-3~!L7(7~Y9?x>CV zyo}$Qbzjz}h^D~Ns~2Lq-;N`5k+r5(Wm4S#hTmRW6=|(hoI9nV{8`(@mngzqt0-yy z0Qg!M5gVxRv!z#-_M1)<@PKY2#55_~m}PxBFMmVAfKn;MK#bv#ue>Y^8v3|M2Z$oe zPsXmd`QPLR+FRhyay6SAxG9UYI)tf1zV;gfprHO2+~XzZ8AvCNk|Hb)U-x`1_q{FX zU@<$(Vg)N&^7PNo2&Auh9r-njRT`LTaa(F#GEQkBhzB)OovG0Ti?_y^4;Xx>tJ&(c zL+15%W{qt;5C|G!Fa)7Bcg^#O;SsidLeWc1j@#qmXzThbj$YhSKZA~2n))EBcBZ$_ zQ=}V{sWDjcldL|GwTZjVZU->2{K?uqFTl>B1%F=$5bSX%dCPo$%Sd$z3Nld`PC=bZ zm5r7-3ZMiaj($tNH6VcbvGN_`=7Re<4lEiU=fD(5Ds&p^BKn)Gu?w7z%ij`>VMm^8FdwERo;kbSQ}p+6jamX^0#k z6Y8fV{kq*oE@V8AAd6E- z+uaDmdpUr4Rk{WV5>pCw?lB)`DTSAqPm{zqMu^jKP_4LPKvAmL26%=S*yCk*Ow3gf7khq zHf=}hy{#2?0jwah{(?HM`c7jRi}!(Dx%LOpssS1J70v5kw;}7@PbuY6BB=1MPI7xo zh1Q~`_iDn$8WF)IejZF2NmW$b^VG0ZoL8K^LzOR!_VMD()9F&h*zJC-%gxO4m3A02 z-?`LN-Au;m@}u(l;o4#OD%>uIC}My>q3A4fthyjZWn}{n0YGs=wND7eo;YabUC}g` z?AQ+l|KL?+U<3BI%X16uFiSpedB@oD>Mdq8%L7u%jB> zKBbz~Olxj_GPsvbMgdw^FO->jF|xfa7s5@_Z(VhUi%`7su82(dVJRwyBr+Y{?)OTf z%LW{s4=!%s-d28xQSi1#AcOgq%=8}!yfyr$GAjd&X&C^h^cg55ps!kAYOYuXG}oML z>?@~4I)JWx4_Vmk(jSwLj{)Lgf0F8^YSKiUJF_3s-at@QS|OHH&Lt}7abJS<`h>zK zQq%NvjON>a?W;`A&75<6a(U+GvdbLcy+Vem4|%tlDZp{JWIce}->5Caf^DzMl%C5$ z5f}tmF>ycR4#?L74A`xDCEp1*gYnA(j4cIy@#>8W#e$HIXA#SY+xlCLO?6QuxNA>2 z^k}m7m=}_Fhzj5EKrIKM9KrZhUv-jamuB9d*Gxf+XfJ_0q+qQWWL%C{Mj<7^C9laB zXoiO4*;rwg=|G;Z!}-_9P7XKA(gZys?7eJg&gEV5U$|a%J&r`6dZw9Lm5+1F(p&i| z3R6viPd`14sz=3)IARH9LlyNkZeyugzt^_f(BgbKIMM#HM2k#!#=9xZ6^ha&#QyiRivHL@c@T1Q=a4N z({hePSj;SNb|`_ozJf=s=@HSSZ)ev z@IbbL;Y@(HO$CswTsC%n5=l-G@Rm$N}z*$=m?V zNyNb;txppKb1BMd+)ackjzFy(=+D9U^)Y8O;Bh1!&3lANdt@|itj5F*`-K-9HK@4AbGLdS+2XxLQGnmz zw4FcT1QVn8E}0X>dKSG<9OR@{GxueFhaT#G+;T1Y8At$MJib73~+u_?s1Z5^;Q_N@RZH z>g%nhk3@aGAiGr}C-}J_kOwN!g<03Pem72ilnJ$lD78gpv0e#0|`R z-4~jjgkXORE&hrfB<9<_VSU^b5Lel;{2`#{&|7%{l;xmAcu>#FG_`;+(P-A?j&5!4 zll6N8Mu%e`;sgseHzn@K{SXOBkJ_ub0O9zsG;pQ<<$26#a`gj{<=RQ-jrG%Cg)?2v+JI+h zU#CzMJ+%WwGI&Sd$EgfBCEJC3N$0ENAjSS=pO;o&rxQRhfU5vg{Hb6ohG#1Od@y?* zK8}5eJPj0WurOuvnZghX`{ z?_WUEqytvcFP7hsl;!A!MR%ChFWg^YQ7>R}3SI}i!YG%aH8_dyPf5>YFrm^EjcuCye8#gf+F=xS7V6FUH7hXSQ+cl0Y}S&x0g{)>LKSx`SR zRA}C>63mGmJqNkQ8zAU+rUHNaN`P^xYe9RA9t}C=QqsZ$g;q8Eh(Z`+V;LP-Wpjo> zfBGx^VzXQ3fKx+z3?%Z-{s~l&?5K+>zSQIDYw4Ei6g8&NoMj1DGFNB6{lzyHX(J0e zJI?!Zyg4VuEdHTFj3iBBfjFINXn_WSWOaso40s7g(G05CzRZ}Xq5>t81qKdoM-jM3 zPBY!;$@}nKm>DzA9myl|k8_(keQY;xlR3;BHapat1iu`GKpwcfe#dMSddG-bvOAaU zY&i@=h6;aZqO9B%wENDFzRtRQ?^2oBzn#;L1>MySE%rAK{$GOB#}#;1X`}@!iiWq& zBs{0qdap)t9MM)+x+mu2u)@182M5f_y{J=GUc_;nBAGjnL_-Ggv@|Fdzf^g`68wRE z0>VFA|Aujn`*Y;UUYXJ9=(+Q5Rva<`m={)_PEs3)M8BK2AzUwVg0YL)xB5E22#Fgh zibLy+Eja_=;b{fNTO|vV3rE_lst=f($;P2T<4z_GF#2buRsT?5=3Bb`i#W60pp}LXIZ0$}5Aj7F+}p$k zXdOVM;wAH7%%>VQ_?|k$AzsXSg9ClW)(cgWB69!Me5aaCzwh7sy2`2(NSO!QKkp7= zDQsy?vX{SaCV`u#@03Qoz2w+@gAKt97UZ#FzcSsRTOcOcM~gMUL<5pW>>qfI$mWyI zgSgT_GvOj#Gx&geiGsmp%j7^QIp++VEa{N2v@d90WIiPzFSNk;=9f58u9swq92B00 z@kYEz)v&bT)YFNPddAfHf|rk^06}HrhJ!DkX`TPx3T_Ku9sr@Q>yuH0Kr%y*@IPiH za`T(_XC#T&PZC|w@_kIBYtiwwJOzG z08DFZy=49<)NjOfFZC%71%=`eL=tc?2>oR=0t0t6E!2!9@e~f|wYOi=MpNm0{dE~- zRyk{2)W-`r$aPcq`#d2>AWllsSYKPFB|yY%f`~~O3aayDsZr`}hNUbJ-uQ*3Ik0B9I@4jkiTHX^c=uW|^lesVzn;yzb#a}BB&%>B_d^~G>F zpC%$tPJkwL)i+8|m8d>E=;3QCFL()s=_2S5etO{e`Lx_qLNU@xb}-5bW81>yfk=<= zCUk&+p{tBQtG=fo9;Tbi>y%^p*_B>RMB_m7iWDpOD1Mdml}-qf#D^*))Vc!n;pQ6 zGlpkUnvq+->|j1E(nFsHHx-7oJN#iYvN>kSImF0__2@G); z)8P~k-Jb#!MlME^WtNk9r+h!7wM8wJw+NOqnEX0%C|8!pL=biQR%92#EfQDNb$-sX zu^fl`dNRnkfX9U_6y&bYoA?2Wjd@6fS{Rc1L1fB?p!*!I3d%?j%SIp!>Y4#Iibv9v zYVJ8z<6f!{x_2M30Ifyp3|-R^U?aimw-MeUR`bhxKp$Xfy82Dl|M-5NK%NFm zpeQ;2T4&DwobW7 z_AT!MxH9L$q-0WaLQxxyE9plx;jOkjJ{bw)@pM&DTDKv2zWohTG=D_hpXW@5j5W}8 zbh-CVG+An|@N-Q#HJBqAsF&Bzlc$}%>0(G2__j%ydgaAgfjMOehgvFbn!(jAx+aeI z+6X*bB2vgrIozK8hnc?_Ttm4uYvI|I@7aFV=nFJ|BGnY(e%-1r9z8(u} z2NPMe3r%J$0LxrhY=WlSRS_h}BEKzG=e=eJw}sv z4=+Z2i%Ngrx40{%2~ig0RuSJe%S`%%A0#r!Ek8b$ygfqGWa&7)^79$O-^d`9fL|i} ztv+Xn$kCaHKzYUq{WVVdeM%dT7|N_;|osNWg-gtRygfWySFZwb5Q(tTI? zcnGa4c&Js^K*%Ek8W*OeElR_>!2>#$ zIZ*3qxarKet6zzqujHkT&Ov^GO@4o^u0Yi5dAijgky)xVOKkwmNp@X-oNKhOY zo(V?{+M_7wloA|{L{)ei3FcfCWyH`T0%?xs3o+1=U9@ z3|bY3dtErrImB=KWxo-sPiqyxCtd%j`<5~oLp9bfc(`lx(3gXQ@eU&OPyEmoX83dk zOvAfIj!kB`hY$t1r=dp6ezki-hps~$NC9EbnM4l+O(Cb*wlON$i&t4bK0VtNc|yu# z)wq#Jp`kf+-rxK@X=9a}vj!|gyU?}q33YAJazczJ-gBJ5mfne`I!nRTceLX*!{IronTl}#4njTwM& zyV-#t_!UcDm@1ts(^Dq56Ud7E$a5wsWe0tl`D%aGt#05jI!vZ>CD#0oE$KIPZDT-}vpxPb)bs*nNCo}9APnq2X&k}cWzR+4mnmWa@q+L!n zS#Vm-bb*^4cW0+*WMJbIdu^raE0mbmVm{&d3BH_-?A0mv)eSlJsQ|sqWs_YjbUSGx z;WU`XRh@dH#cWD0hU9WX`^S;Sn<24})&j%1XR#qiJFdykCM&R^zku2*zTjA{aNWaX zzpN0^aB}&qvq*df4)v5}W{}w+?Udb!0DE+mz;`GqDN0dmI2Bo@ra;poG6ldG2`i;Y@Fn z!jR;-w=NE~q8UL8lM5WbBjBNRCgXC!EK^5?XN?5M21C-u^TWuLn|M0~3-9?&tt}R1K8X+epbeVo zvQpBixJ*!}rc3ZopB63?4}zh+Lvb-j{d}rvc)SaEX1VtcCN`wP#H);Wo7A`B44l$*J1K>Q@JwuFSqV*gIq;7x{@brllIt~PbhjD$+PI$D`+nQw?~ zKzHK`Urm|=MQVDS&$ME8 zLih{oyVP=QWbNX-T-$2m$mw#lv(Iz7b{GmGt>M91c|ipgz()01Zj=w$)xHJ%G_pj( zt`6eRFl%5y9EL%(o6i+yO3=sdP?(WBt}uDkZ4R{AN%iD%K?nT)40gdbb}c;=7F!In zMcNN{=0Zoav`u+yT&l|i$PVnl2m0ZzDg}u3hokj$QW@RR;Y$Iyij;q-3({4cRcTF= z!i#sF7?y>mdrrufk_KZy*oZSooRJRlw7w~Z|u|9~_u1(gJ zx3}_6zaZo42o6Dv!x=yx3s;mvb$MJW1#0cE9V!$|h#MswXqL%#%Wj2Vtzn^oY=R z6a6q=pH)PU5LWkhvt~^01~raMH{Cklb&N?DA!n;Qs{^8#!UxOoF+`Y}2o9v}2m9lZ z^P_`C5afBvl)0yjyJ%$yTV}LQ8Et*ev@8;8edg{npn4W7VV~fuGvIWyI!e+!+2->z zeyHdw2(Wxwk?a0rfBH+Mk|@AxRDftQd@@SPjqB<;K*K-3%;1@REMv ztL1zqoQ74Xjf&G*+H#E8&z|j8g1?=el-2%#1CwZ;?-hQ#L|4bd-Z@AIa-y`03%5~^ z*lOIe!IF^0Q@9*!wJZt49Tam^|EMj)UA=8CY+dXY23<9LYdTv_2KvhKU{CheL{W&q zZ>d$R>_(Q44wjQMae)F)I14V4ItQBV+(1|gpZnI5hUTnym!k3&lz<~dh9Ef&F%`efAF4jKJ z>h3^}mt_&34(fPN1Zq+YD%Q;xnCr6;4t5ehU*Idnr0P8j_$$XWhHFBkZgpoe0DA7~ z!lgMmn4iXl>;qIbr7X!}Af2l9rR8R4bHlJ*$y^-VOoGru1RR+(8qZkM@4LYvdFwkUFxbH~*pSWh^BC}ao^!?C@h z2LIL1}CIC0?B-`KFk+WAOzEk;dH`D`wrqX3hM2~ zVjgL=AR>v};GCdolZ~I2wi_g|&Q4=b7MJWfK-M@x5iEu~ehL*e9Etsa>lP~|E1PtD zUQRGj;h5b>)xnpK7b0S}$5Avt4|j}9x&D-zQr-?r5Pu*b<1u$I39>4c6xaP#5%`0N z=|c$#2;xNz0Puy~I;EuG6L?f$!{y5W*Hc<#1^O(mH_K&Ec83|d98XGopv*2SZoFDK z)~P#3xU0;~r8ZYj;e4ic{8~IRow=Aasb(Cza0P^e{K#`J+$ABS_(G=swc!`*U%IoH}=5KQE`lWr%jg9(M_t<>sZ z3CM-;>xG3*^nf|(!7Ex2Gg@pt!j>24n_f=>dQsCAg88wlFIqX_t*S!JW{o+6f`4l15Gm9)WsVD{!aPj@`R?d)oy+=#9(&_%u{4joXdjaRB`HOkE8=m~9A%nk zD%O$a0<*N@YB@T(?&6RQq&W@e@#WQpssx!*)L5t%DOW8bmgCVWVC#zog~+O}p_OaZ z)#zjt(Q2_%aTl|(lg`p&PGkd*hx9*2x#@DkZl?1N730lGqj{SoMp4wt%Dyp!CQ}=E zDs7RmCo<$=OG8a#+5{^0~f zAKD#STddn@;c0kerRAo`49nz!B*3ZuSaJM7R;_t$^Md2bWl=H0h4PQt;?hiGhe;`a z8`g`xHg`=SnyjN_g#rRGlM>sjSb0B$lV`yYNk$9dh?;Yj+?7a}YeRPql@!)cb#y!)k>%MP=#-^Jb7Tut zYTDf;;m)2?wm&ux-X+i}O`9fzfoCET*Fpwcv}?++PlqH;Ne^AjIwc6Q1)BzEWTIaV zSt~cBii>C8l8Sn?#R&(rYHli1tZggAWA{|QrbDitS)|@*TX|azgs44T9Kf5CvO-DD zpc&pZqg2}v=Q`qoV1s*e5(wEeA_D!Ukn{?}HdsJYOEXyKR1gjtgtK(A#SY7Qkc6?l zY4ie^yvHHMocD{W$bzO$z`rHdQ5O!{c^ziEsRnV}{2=bSsZaV)X)PqW0$?cIPv{b% z+9CMV<1ReUhxwsm)zxk>k{B`6TN7K@!ZK)=_P(Qs#CYr;tkaim>j$-~_O;JhxmjEUr=4}i_o=#_3eDzO=jvm#Sv zO0!1ZmVlb#WM}ToQygoDlF3G0mKWkMISqEz>^RrW*_0C(+dN568)Ub^fej2c!y53X zIur5KmG|Y!CZ)Ow7alq^z&S!iCVd`{jWiWga;YW_r{pglNci}{p%Tyhe2VUKs4@1`uS99P*3A}}jcqk03iP4>o_C8+50XH}g zjLm$Y?T^^ds2q>aVpAdaY)SwlZfv`Y4L2O_m7Tgqqp4X2?S`l=tXo72;7IDqZi#Uo zJ=>S3{ggisCb&@wWr{&nyGV3q)L|!J9tF;!*1h1oJnW*$9`OPXzet;Ce;kPp%9?7N zUzRC_GB`?-Tt_vsR79u!F>lB7E#@uQingfBN!vAO3*i1G+NCZluMZes7u7T^=hZPH zm}$B2Cpa|*MGc`I9%4e&hpM^Ztcfr{mML?Iv#=}5C0^&5y(cq8*Tzqka z)|o$vK>7M$L2f*vQ#8$t8~-V%MqUg|CFe#eZ8IX`(`?w(JDXD_mOni(fQU|Y&v-x zax%Y;{M=`u=ux8Vi4!tvWO2h#t%9Ag8JHJiue$3q>P6DpMCW^HTc+D>u?sJ!NzOJS zcMJ@jQ{yiQW9%fJVu83yl=rrOM-XJ2S!id(Xz8c57d=Cb+r;Lwcy;6ot6SoBg1UIop6gMg}trRvB zG`wi-QbUtnF=EE4U`mHoMK6)LG~Vr#4P+g=IyxF>W=;uvWZELu0YO3-GZ>Bc)N@pw z#t5PzD$4Dk4og=atIP+XoU>|EjlJp4pLqOf;6m7V8fH=E2EiJv(Fs+MR+R%3<&lGn z>Bk90+w0C<)+=wYU?X<0miYnSWs!lE$Ju0lNWIqCukq@%;xEgPU@qd+s)AEpZ%*Vv z>D*v?aZjnnAc(t~TZX~;im{8Q#bmwcgxztq#go+*8()%LB8IL!Sq~@7QCl0Z1N&GYmASkDSE9vLaIE7U_6E}F8ms+qS~ zszvO!8&tR`bFDElh=O=!X)I97x~wl~m(;?>IATI|aU!ZL3?s~)A=)dF~cKNfQhmAgGF~*M=~V^iw08Guz;XbaP4|RByB8SrI5r z?`Ky#fJ<$N)jm^ze3}eG*9(l@(x{TlzV4Pr01Tir00piXi;`Ot#_v~!}?s*g8#v)FJEEMde)bGqW(&i2wPFp4E zjuW16SL~o-%#@eY(N@Ej*l1&Bm*{vb@+nGHg}tWJX*-_Iw^}UDe8j-5<=OA(#10|z z+R}wc_En%2g4zkjQKB*6noa5u32&{2Qo55YL`=HFXgF8L`LwF)Xp!lg>2bR_6|=59 z^22hx9d6}OsG_Q6Y;f`9gyW{(Zqbo4oUvm)TZ;}h^mcP>yIrsHe2=nfE^FR?rQ~}o z&yHL)Fp_F?5IKj{a3aku7^9l&w`-R15@tlYt0lQQC6$SJgiioz6&c3|@TWVG@YuLL z&>gefP!2*5E2tvwnjmRY;y&3(|m#-_UyC@D`2xPmWQ#V=*cPGBttu#Do|-!0pLH|Y@-9~Uht@EjCI~v2S2vx z!K@1}^m2?8ZE=Z9O^FSS+Y2dkS`~$c0sy((&sHnd3ZX(V7Z-=gQBI=5Sfi6IAPdE4 zHI)f_GvSW|uE>M{;y1aRuX*+&P3z@Sl09(^h4*$X6T`KW41jU8(#nwrd8=YW@NXT5 zm?37P?U7y0qn0sf-RWdvVZ5tvMTSrOK)X>n(i{kHE|hLe3ElC}=OO z12H~P_(>jLCY=!uwF`_~Zzp6NSwiOTO?_-_K%TKAlBUbH=SZLI9L?U%Ic=x2yNycM z;gX6rs{(>yOwPB*!n2o{$gjpj#$JsUv=P}{?N!HZVyWC>3p5%HPjRna5Y=|YWPuAg zt}*5HQKv^*dE9Pxm4GU9X}8XpTsv>=33b$B+^eL_&%?ns;_>xam_bPeTVGb^eH1L# zEz<3O1N{uX5mKKB_nU2+olu(%Cc`YN?RKzqq%I7 z!rIu=5s_WS8)s|Hpu)pjnP5W>xl0rc)4Ew4rK4`VWk+~}wRVFRKp2So<+lgJ>`W`B zw15m}hUh@nD9)TWCd#4P*(1)fld~nAlU&+x7%^WS%Yz4*n0%;am$8OMa?IGS$VmKX zpB#h5YM6tio2+-J6xv#+t$cQ>r17$!Ed{}WH49b@35IXx`A{Vs+cVx0Gu~om3)zzR z1Lh5BWVoJh9xjwMXW?ji0s{TRc@h`je3$}Vx$ufo6E&e*Pk`AqLj|qg&P(^S7qYyZQBX_VsY7~xG*%~2 z383_r*r4?p1Bx<3JTwYaHoUD8Y7?7~Eoy_;lZ^<_{AlCR3bEg!Uf?W_?WpCu<#H#v z$K{$$ye>&h5=erTB+KjLBqw}HSht&OwITN_A=%o-akk!ux~P;;-khJMi2;Pi4QE{I zrc*2|Z7Jf{b`9q3G9rZ4jGfKnZ6?m6jj$QTe3^KTu;7K^VMtl!PCjpHWItAHf^ki} zw2^SVss`%PiV7+64&EU{`OSG5u|$M&Lutb7mhAX=9!dN~JcrxBmd@5lJ}jlIHs|Ox zk@E3$V~-B=Tol%{G~b-@SOHo?!owI(?kA%#dsOfE|fle{Dswgq$8ZC4{M=MI3*G=#Rv zj++xQPK0W927WybEC zp_xL7Z`X@CAGf9|W!h1)&t6R82#|V%RTl6IU){E%y6`JW&g{^D77(Kofd4uE)Nzx<-Lt} zI-Xc*=T5gk51du%nbNBO&guS7#CpBl*7f|;Su#>x$!|kvUU_0iQA$p^IWx# zFg^*shO!Ix00LBPd5%*L8Wsy)iaEaQ#ZWc(ZPpK|yVO!PlU1c}JLfjLoh+T+f zyE<7wB2Zjk=dpO#7KaT~&scR(3R`DgH+f*KO}%bXp|7IPD9pBSJb9>@=>8SJPD((9s^uccC*-y<->~4FNJ-0?#|`E?XvX`3B%6_o%ii#Zg$9&n7^3=ZM2onalC5^enOSlyjB6D0@QcrZ2@$Q4qK=% zr@Avc#qB&DbC{)^s#fY(#9O=ciW##$B33CGZEIX_YJlM)u`HyWTQ zh{h~ve5xywNzNsQF_enslT%I8i>M5lwutQm^#_ENY|SFy}mr&GS;pjJw*+t$*YJY9PQZW_3!0B+O_0=SF;(y{#3 zw!+0=V31;Ri5rR5LjO`v%gcr=qDmS=O5!;UBL>GsX<7py{nW>md?pxn2h?_i#=!l_ zMpq8d?y4h2lAnDnQ0V2<9}5PdB_oW8_jO26O-#tGg?B+pgesJnYr2^cRo^741LzMb zVHfHW#7!U~vPYKrfIJ?N7EL^21lKFi=Z?ITss8BbYVEI7M@+#YURw&J@`JkmRGoRfL_Id5+4Sr})$PNI|+mz($u; z#wN1_uhJSRa$ZD_E1fuY&ekZUwUt&I)dAuyd{H|zSLp;mrjX--Ez{bpY$zQRd@F8Z z0`|3p0f83#K^>peRbPZ&e*wIV4x|2*3;2nQsn zb71VlOP~?u5k++%ICHX1n38KALP8yPK-x1~!nDQJLBqL$yj1ZfB#<3lIxb+mXSyIq z<&Nt-j4U)2G!H+BPD;f%FO0Fa>^t+vAY^Rjp2@5p&A3W&=MlOd_#UliY?zuN@nz?GrML4V#-{X=tM#`!VHJ<| z=DSOwIvhU^R)T?1n>{A(_4#HSOM}uB$-J5j)mU;^z*Clm#QPA|aLzIHmeR^DjU$uH zNNGnHEBpw?0&@BD3A;E@L)&i5D9q+kA?BERsBs4K%UYLLja#7vm&YAOm>aP+7Er0K z0w$kQ%!XE1=}IJ-A~zNiRXR)CXGeBUgH<^R+hem4@*N?GBSItFMRE|^1AA_C8S`U( z)iB5=6)en+oy}mjPNZgOuL@7AJ3d?Fia8%xx(#Gqq&ZW0u(BNe#OBPwWtRqTLeQ!c zWJ9V3mgLIw5XM?1 z?9r8z{p7T7{J=%nxsNZ2v5t5?O1loav8LS4;xq|H6cu@k;;=1*Y@Z;)v0QafxePXQ z)jMtiTqw4c?<2Hh=((@)-i2(*>DZ}!BGd}z!XD~UkUY>rFWu|Q6-s6qJ`D&cP_@%@ zZk3*Sahk0#UM`|hjn|8Hz6H8CmKKGhK)G|68F*xIq#s{)+-0n52{n`0jL_G~MNEL& zGPI287@f_{214J-$VBF=4Uq)1L@UQglqz!}iLsEL6j)vs!f8qu&R)C}=_XufxNzxA zgOG4PbT)IG*_||Oea5hHsDX|+%Y1Aek7{nlNDMThYJ_DogLBZ*IT^YgYNdlskvu{Z znoYZkr`K81AcEf5jN=7B6+9gY{;&Yx0$~Q`y3GJAWli+Ii!l$aK1Z?!}WNklUqJz&I$+BsIp^lop4LOc2GBH*+IvV zdhP|a=7rj7kxvN|lW>GtsVo^x9n&m~aXca2z}uOzsd@5|^kjODjY)}@6y95U3vauW zwStmOP9HD>XJDN?+geToOJij;Jzus{6Zof0)lDwR3h=XW2Z=U-7S?!bV7oT=JjSZD z4l}J{-je!^8sq*Zi_de)0UG7ZD1%92RdSxvaki~JC~!4nqxPa5%F^(aZQUY*)3l<< z)1eFCZp;bbO;N6(w?Uw*BU@)gB3H!mO0e*e!2y@!JQc#tBHA~js4^~6DppRCtF?XX=AcBN;XCg;N#9pZ((EW*mR_*RN9 z=RI}7CUMdf>SU06tAs3D1e{6U_!(;mxTU91xv<1`45*joc^Rh!DH;SNtDTTCa^--K zX>%-)F>q4_bBQpZA4mABwFK44k6e+T9sn>xkhVg_#Npk)A74B6pi5 zf@$!KN6yk1RdX94r&lwrdzbNt}8JxxX}JUQWv*!2$f~2xsg2jkO5s#VlOcWpJ=A7BkLU5i^Ut zz0_;ZlbJdyZ2P>cl#muJ1GFN9O)mNoKKAx?##KN}qp{P?xLlD+l3j{SqaPzX( z@H){a>3e6>v1|wxpjD^7;Vl`oQR;fG-bTt zu-+3;EY&>pL}Ez6*G)hLP21F5(?Vp9fb~3aEqB=s;|>66K$gD@hd^S$H#*I93_MVa zb*VovXkc{cUg}~?ZcJucoGgp6-u)s)NJQrY2rk=U}il=EhNs!LXu| zRY22czhXyLfwxQW%8ef{SIq^UHdQ#V+htm`P$6ijrbZ3G7s#QHDbCcXQ@Po&rE_|o*kO62LurytKp1ChUjU0vSB>{{7MCEx3gJ}1!CE@ZDA2@8(E#qB*JCHRL(qSzy5>V`>5KXFU7WI9U(#>`` zH56ua5~2fI5m=3Avqc&>WY%#5qIMRFAFP$qkuLalYWv0kp9SOP$SYh%DZvV&c!Dk( zWHsQD0k#qu#n5>XD+BWq93nK%Ji6fzBV-$N1ja-9M8zdVP@{@w!&AIG@q28y>-N)w z-uOhr)1@aui7$$^rj{>wu8v(z)!e!pq9qA2i8kNW-pH(yQAXMT3U1++Q&bhQEYY_l zq1*AQz$8nTQUmJu857oOX-(ivz?80EOC);;@uA z!$OHh}6FiRT)+#~aL!3t7n$a8*l49d9$YF?;i^eaxrU{lJVJ;XSF;Su$ z6oWHEMl*vv#K2N(%Th7W

U}yN3GND1}10hmzfWOm#@DUO%Fg;ZS^GIzZ#`u7Lm|#?`$fo?0To^cDdO20V+;i%I7n+Pgau@UCrH5nnpQ8Iw@Lp8~=ENtHtMF}bk z!>`v1vlnzmsO2I_l9%(U$`a`4@B`ioGO0nf7C`Mqy2FowJ|qobh5=H;^*n4akgb0l zHZN2@1(7r!w>_S1`;W9$l3{**p0DGC?L-s}HD7+H1ei0jjIm#-Uq^5z^-p>|?+JYN zSi1EvgLN+Z*nl5aEBm6-K~p|LKd#+k+hD6Czj4JCnSRh``JCyr=&xOBWcPTnGX+6& zeRsfMDyw6fzBD!e{gf38p@IG*OO}$~?^Wx)top)v$nffkSDA&3#255r}9 zKY*N}rfsnW2AaY8!D$QbL;5x<^^47w-t@g^={rhBcQgKaC} z(~4PE^h?*`blPM-qmq|@>mo;$NZ})q{PhE;Xm0vD)IL0bzR-QRb_bguh0J@+HTw<5(FVB3B-$)0l0V6$~FX;us$ z$w!dgs&`&|GrEIccZ0*C2GElDff*+3HYbU{jqamlG8=rxoll&HhDZ|AXPthXYeXqT zW`=mK$|@rr@3r@}WPC<6i6}jM%P+~cUs`IKSfgrYhCg!jX~6I+bnSTB2|h5Ti~o#~ z>>B4EN9V2JCJ;r@527Hak|=T(sUv3)Ad$Y_vvy&-vb7S-d-vS4i}OMU8&|c_y;^_$ zmdSJ`W+_V$=&(m=pY#<26$Qx(61!JtcQ|!{fIN;^FI78P4NxP`Bp=s4t1q5es@&rp z8ECB{cVU3GQ+-XKzhnz*WC|^2ge}S!=s;`ou&$rT*ij?aA+*GIFis z>;PWqoNHC35c+PPc8qtrun(_qsPg@#qMsB9Mmss=W}rja)NOBz^?;q};#_80vICsM zmVOuDa!bTRTY1KW!uWhMebjwKusR@}%8i5IBnxQwx-!m;#daUSnLZ6uet7wLY=2!< zsME24!_1~r^4AiiCgk+kQu9;rFsM(MF>aTjvOo*v%VNMy+13Y~fP(R|qY$#Z2rcH? z&$E>2fG&q51CmkmDi#eaXEm2&rQZ~1?tR{1e_zHom?CwQIg#)Rtoa7J==cKf3%6{G z;LP$Des*l(KL=zSb!88<{bTpKM%crCoV@Z$!^%H~^=WJ07r5rA%RBTuuj@3K6+m6y ziB(5*oGNszb%wsr^`DOgtcoamjeuOo~Gz*00%vw;|tX|3&7nuna}aCcKz5@ z$zp)5kyizg`%~nvz^(AK8h>EV)T#(^q-RLi(EU|WJGp-Tn#flyx=vNPBjIogR1R8K z=gAwo?hWm@2{Go>dIeW<)h-pZn;5Y93pa?UQb?28S-IUm?UKv0lrW#Zry(2xvJ4vA zaPH9#RfMCdyYIo4LFJeO=(x#*IBmP0kL^imi}Tg%a#;&uP+_|YKi`nqa~xhmA0 z@_zH#5FW!k4^gHchki2s5H$ZMBy;~!eT32Z9j&WgkbPH4eL(^)(cuk0aF2gUquWbs z2&m|qmP76snxpfYd0Ax*dD!kazg@1o^@*xqC|P7`S2Z5crhJe z5UcrrPr*5p)Oav#`gJd7DuJ+aftBYhMLi*u5;T-y9AELzw+QFB`h__FhCHc~nRCXv zAcJK_ct;gwhG%(kg1?#amgy2F6+r51FkY<{_2Jy2VB4sn8ij%{bkxW1hxg+c)&pDV zhQWOBTDl-6o)(Pifj0s_$1&3Ie#2{hG+(ZnpBRFIIb`7v9g_uPevSr*7c%z`9XmMY zg^hR_2S$uVeak>Vy|rH545%!S3>5BZewpkX7FBhteVj)XuqN6M5B%6D^Qx;DNAb0f z&kCs_0D^0nB!Nx{YRaUK3>4#6j0te+k_x{0Zi=N6S&5|XfR$!%$?)cSu)~T3%Omh0@7ffonT>v(>^=0=rxJx;zWo<8yHlvO zUp?oO9qPcU*iGxnM4)Y*s$AsoQ8q1WK73P5ft^sZpD4XK5&JZ{6XD{s6t zRXU_*TAly*%#oZQfG`q}`G(q{F{^N+_}NjXGaAr^i;Z$NHZr{C)#<#Mc-n}M#!V|2 za$(6)T|Q;^jBA#*kuIEv5NR>&v)WmQ`gzjeW1uJA?|^UjWLehNagip?gSVCt>c|77 zwyaNrYtLDQaCvnTw-xHjDky#ZfwBh4fo4HFpP4Wp`2K-nyb&ulvumWVumlI)8~|2o z-m%Ri`rP>oyo&v)%u&fL?!s2-3e(WdV9~k zztQKN9BL$6osIKf^ORGc%aHo#_+5lagR2+#WcnK! zYnKY`Jmnn*6iN_%wo`yYI#|*%X}()2YJ2Y&C5p2R*60CcBdZFKYApT{$5sA)oERa> z4h!>k)ZZAvdgxiq`aa32-Y$m-KHNnW3^J5xjI)>T2h7XcGrUCSVc+D%;w`mNzhxii zU63S#SP$46+|U_~%uXkNNQduFYOKcFx#)MAy!7pT7_ERyz4DQEo#ENOtoQ2m@`oE7 zZZC3`Y~1-uhqd*y%6;hvJw^-g(#NiwJ0KQv0}17WUS8~5yfwc88AAYl*>~m$l~dmk zWuKtq<;T)2cDxF#!N?0se(~o@`reuE$#03UANF&!^Iu1tB>h8&inxt>}UV#!r7ZZC;m<%-1mIkNumF<3H@f8 znP5~0Q0ANk$qQ0C2x7iv0FTL2JSmk$_X)_%h667L#Mk~hzEk&{k@&y?UuRf(PNmch`j>!#JYUl2ptAtg0ru%0AExS0>*Uw-+PUX&(bE| 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%0AOwUu1L2 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�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
t! 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

}+P^9*j{gjw2x%sU{(6wg5CFY7fy zls}td)000L?cP!EphG9fb4)an;TmSEm)1wgK3Bd0?IF7JS2xTUl-q*AWnx%i&ry_a zr-eP_@Y*E}YW@ZC#txP^FnHR-B?Z#sdPl#_rPT=_NR8!f{e@u4XNa4~f8YVf_EYDm z*D5BXzNtykJ}>KZMv%uuE_k5yr+M+PgS_kN`1G-NSU8xA@tuR5clV}G@VUHr9e*~J zRwQUN?+z#C%i=vwhF>+mi97B8@)5)wYbr>>Z9UBXe2l$J9`}BctAfcqfd!qGQR!7n zDazTj!P3;QdwYW9lN#Z}@C03v>B(4Z%&l;K$|u`EPnGjJUp{Di(=cr=_jfk60T77g z4_L7DFKa`u%GWM>_z-)*XgpRB?RDJ3@*PBT2I^BnH-Ys03*9(Qx3k`&rF?u8S%KO7bDp@Qh*4wT28|G)%b|t07-$8Lv%k|DU1=w zX>NC-Tbcq9^O|15ZMd7+U4DPX7uxyA=SXV?e!-ABWi;7VMus8#4iYn{R5P3Xsr`@R z)8hiWlUBAkFcsg>ke)97$av{M%}v{|Nx|0`o8DG#CAW-H{KYEYAX2!;07N*_U+!!EvY%6VCdR~^w8hErt5UsA#`;`Z= z@jOS?Mi(wOS!pt2t`)diSZWA{Os)0M!QefQDgM1sd=a;zFi;mO+M36hdI9p2=L}By z7M-$UA=5G57A`G@1AH%1A3|G?bBQbVz03H^|oRV1h#fC6x6-x19807D3W)D0k%eRCi!fWet*YU(!0Z zJ9(=2`&WSBjrwlPiBon;n$U*@lTaZNe4P&<57-4TX&XcL%j;`*xo9GrkHC<}hY8X^ z&R&zk*R^}WCIBRG_sSd^rg;`B?Qi8dNp}pKP&>XuE7UXRlZE4O^{uT6Hq`iI3m?J3 zW5JUzvxgWOJ>kDo&#{|^YSxtbQ60;H+&l1=Xv|q-7l&f`ON$xBq<3%`F+5S&OGf_A z$)`)d!vHVhfqE)85S6vB5{6|8my1jV#7J?K5NG@8lP{5+6C?1ZC7{rKWrQnPqo^ua zqH=XNT9)H7YuN9y`-p&;^{pd4#tY0S(hioPtO-%u{+&n4k;M?S!){JsJ3{mT_nM&T zW{FM@k-$MCw*iI0a6Fx4+OWR_WF*jxh#gXNfUV$li*60fJK0TkZYY^hyF=Z3tSWc@ zvf9d3H7vPpaevxb+esWe2h$fv4KQg6ONiY(W3F5X1Bx6YuJzC zwKBW7%V{s>98QgSxW2#)HYm{y3=W(z4t(Hdm-SXB%B2P9Bpbdk4M3Zy;MIC-5yShx z{Q}NA|0~xqE=nQd|8Tw<5ScYV-oiX{#=WG$@PoGxE#iHu4Nxpf;P6`G0w^y=-4UCa z&$yrM?xD@^O#B&}u8NnH&%n4Vx%za3!nSriK>N`Q2|b1*zoG&CJkr-`HDe1FVgZh@ zkjkXyvVTX^Kn%fvq!=WdS*N+Zp%k?f{`g}37W=396-h!5=f>4(M!L;~mx|A%{nX0t z#LOxuKiDb0r5}JREKo$MwqX5kTa@nuygg!q5x4+8CJMCa?;~-`ys5Gg&H*IQx!(6s>Ih$!!Ei#-*S&6+E?A0z@fY2*L7t8#QWJ!bhu- zFsI$0oVIBlzhSRV!F^6z)In6F(~hk9fNF*75j!D-<^}G85V@-AEG$yuQE(Fle^*|Nd?8DpT56nj8z zD|;iZsCb_6a%kvle5$35EU!(l>Dj3Jx&euN5wv*`OMBJME=dQvjy#02ny-r9_%Wr} zGPLPeoE}6G_1E7~?~X@EP{AG(-X9I5S$v-Bk_U4j+oG>-6$Kp(eZ3&A)yORxK5{w{ z%wyRG<&oaF#Wpnkij!!8x`Z%7UeCsT)487u@Wj??o0QWrvTGqGE%bgb019iG%C{b1 zqVV4d_z*xcp+GeFvh=Kf*0*zO+Yyg&;T)~D5@?2{e$r(AICJ}qg3`vfl3nn zrU@lY;wnYd7i~T{fL^3Sq{Em^qJcz86+Gq>e=Xr&m|~>gOAoX$YR4I9D8*iB`^J1i zm(e08ZyyVIq&=9Zl%dIZfN~pMqFWaPZve?j3StR+n{xYjgV{_OX4ZE4#uo__SQ{Dh z6js0IiJul4#xqR>`Cy;_h3Wb&yM&R?41$GUCU#%5nLk#(r{RV(-w={{6mkGPOW>Sn zbufC0HBXS;JF^1qe(M2y1>DF)0S)|4t?tBbah#zK^(g)ce}{2#Sortu_WPBDeV?cw zd5XkA4?rOOqI2}es=>G(_;l7EM-U%&GJ%v@N>_p(bAsQ7?=^QgrkKF4Bi?H-XL`9H zOFBy6`VndWWgTVHLq&@kD;6Gr6tUJtpriq*!aI#Le^cc;tXl!=5Zlj@_6A!{Q5LSn zWX1q?ik+Ntn=5&k4)?Ho)pX}a2_={Fhi6!26qwfQ{2ztj-w1udzW#od8r$h`cNnrCM7`3y?) z`K2;mr_MD{J_3rwfqjc@A68=N^lqZ26y5L7>Hq|numr^4(CAeC47_sHeG$#q-&R=V zhS6>=BJUq*72=5ury!(N+v_*v!&>(%|_bm2B_^AIfMH#LM^tIR1GckQ9pC4xWC3L z>KRPue26} zw4{F*lA!?`ZOyilU9|#QSVl5f;eL;i4!Vn7As&Jmp36GZll=yw>ma)Wd0cpE`sxi_ z^zTs&g}A+jjM8r;+Vds23Z_)`2H|EoO^uMRF?5*ig^@|mW{W}J%QZo z4$7`kQ@_#8K?_KR&zJ{`IpCfW$PBV}5WPkKcjLPT1_M80EH9uf>a7YdIdfHh#QJ!+ z{8x5@lzk7qJm9KDO_3<{T-x>Z&G0;u9Q0fNuvrJ=a`Sm}w2Hu1W}cy5xaLo2 zQx8{L$7-g-lD}uR8`MMR06m?}lvzh& zZ5N`O`d;kmuDi=chAq5B;_YacWj;Hi*NV(Hv;76NnC3xFB+$SYgS&IIBtNP?YDO<# z_I@Ni-GD#~%mB%DJP>xjj!}pPN-Z~m&_JcmUb;obD%%1_42;hCnOvWTvsKT2$&@72 zpF&6iD?%?JX@kN#MM@%v^l45{U zrFi&D&XNH|QGk}n=L{W^bbb!OlfaU;Gthi+cE*7=TZ?$a$t9P!)tiGlw#9!#UgX%2 zYF{mo=~XquksY@ngKgJ!v?Pcc(;B*2=Jkp6Zwz!b8bDsKe18r&E&Y;k2p_Y7_3D7D zcVHnue|S@RW5G@4C6;1=YP~V(vfljJeHn;v>MR=j@2}LnFA5pUO%Sw#R)q*p;^|Yp zR9ddMq4+Y0qNXgw?nz@UTc+L(Inl+~e*Q`Os7zk{C;&;uf;lR;c`Q*vbb>p?AiH86_`^*4>!cq>0k%%R?IHV3dmTBRvZfu2A&P} z0+Wv$6&xSGYB0O<{k0V|bJ58&i}SKc&TDFbwNq(f5`Wo+@k;*?3ZoV!z)ArXKJ_RG0zKuWc!X(EbV|Pp; ze%VbM7y5PLEhz8)HGzlvU{y1CvLFtASAPzKyc!)DI)6ib$a5dIdu^~tUa_%W$4zVfL zv1;0gyOoR&fE%44PAtAOi}acHve?(dO2E-H{D($Rxb@!!=1o9ky;cR<4j6JaG9d!*(MJInh0-a7?J^*-y^N~eKBF*S%FJ@tSK@AT8z6(2c36cKqxW>=(4bGpIVu}P zBd|%)AU`F~(IXGH9P$`fNFGX1J4*9`ACQqYfr1S9NDGRMOQA}qz|TnchNk?kZ)hVMQ1&zSQhba-01*{+nOFQ@6(eh@k2vFTF7K zJy(D{U7IC;%F<=6lE%xU=J)039%WkG*QZBj$0ym<6q2r{)>0PAI)cNoV05&jsm8F* z2p)=as#P0a`8)r=NA%}f5>xJBNcsUKL)95#eSb_YJ#^OslQ(|8Z|OCaZ+AhH7I5-q zR>|)BHBnN&q@%_+k^OWwVQY|VW`~X#oZ5$%a6WAkFnR-qS|_7V-h`tiBQ;@rTsj>1 zFxF1sBqr}Xd+xFse*Ju#`C&JeZBcWC0)h{oG*8yUn{^Gc_&u##p5TsXdQXs*QI(qS z5CR74?O|z2>l?C2s0+zg#k=;4f79jzzQ{jzTui{}V^)^7>+G_vyeK&2#RNJu0X1QM zmDJ<$uWLdA6%_Cn2wH`*M5&?zZP2B&0{nAe@p(_@0`oA5J1_)jV~$eNn<|t|wLp)j zZ+E#@S2L>l$T4+sgWNzL19`tu$i`#1zF^2&<6S2yv8aliM}R3zbDiF-hzevOy4)Es zQ)IU38^UM&d`?*ai!0&5y};?0L^?Nb@@Ybl#nKVV^#m{jVJZXvout6qYA_InXDTF6 z@~rt)6I`>B7Gw$VS+^}&*Y8YoI8BQNwcc{z=w$pWDtxzWAWipFB}Ly?)ui9j4Of!w zRV4k6xl6GSqvY;IsfVL=H_E*X#Uz1tYs-lFd}lW58~MnYCu(AOcJViF$G9@>VN&X5 zf*Hz_n-UO|BDuwEV7z`oV55F2OIRS`Mkdlx%5qBIp4W9oZq2;p*X5)zNo`Ys{e?M? z{*cuicj3I8$4*cjKO@CW%`-HpZ-QGtJOq$Kx(C>PBU!4TRDvRpUSH_vQ|Yzyu3(m+ z@lpp}GJ3^$NWsVBlM=dJHViS8P3sZ*Kc7C~($Ov-G48=c&5p0R-u~ z&l4mG)aw<~iR_XiBSN5pKw6Yx#DUXy1N&_|PT#EF^|#uja=8GNC@|w@>Z@1FpZ5AUC+{ky_c7J}j=PnM3Kp}R zhWy841!iT2k7_5{f>~Pw=7E56YiYOyrsuyp!9_CY>5Z`81I}%;BR}e$I(q8dwqBRr zLqVh1*64aCH4LMa2=M3o(gkl20`J*+e}I^_nuxDlq6)}kUTNn^7`RsYGuqu91M{a| zW9S2n(q2nA5EArj&7Q=fX5K{3f_&8bk}J&*?1{f@8fi@rJz3K+gNO&V$erUs6Ti4b zoQpPD3wPl9}FBehj67%BwgK z@Q0w&X&C7Oxg4pwCJjQS$O^vZ^-?|1Bz8%4rgV#D0wy#gBb$9Fda?t#>`M4%J7;X3 zQ$@aJz*kjRzxCtx9H16-m){B7gn0p2Zi~}IRA7$z@-3@5l(a21SYp+dl`dXME`XVN z8OVr(+&-};s@l4e8v_>Ra0!MhXJw5b`+GT3IQ+exykg$@o2qY82;T}(VOWp8fpkP+ zN~^ZMgnVCBt1&%FHI`_g+9GDRkZ(H;x2wn~20IpP7fLnsoR>Kiu#LTNR-PWbE@QB7 zZXMnMvY zHock}W~qIdAn(|XjKPqn73fNXxcsr2XXG3s1rZv{8QsUyC+0Z_#vzfk3HhZ+j>jlR zEi{yV(7Kg?--`G8Os!V3y_9_%$>p{On43Xt;sCM5x7))H!Kci&wnarps^^oXjvqlhk9iZQ69@>a4&X+TIv88?92At>sCr?o>O z#fv=!63jHGEMQP;MKVc9i{IBL){ai_+f*2EAgsf%5~-G^?;v{q+GHy7bC0!U=0&#u z6I1n_y*ltW{h7V!7$6&>LQXt>o$$>-5Rq4Nng4(!5s5|j#v2njs6b0Bz97`r{2U=E~}UMkq4`6EF3&{xs;|+d7EDr}1Mz zgFYBP)@q42OIyf5zUk!-(ULtBZK%Aw(%vVlJHLd#LuihEY2)8QGn!Ab@G(1ku z(f4E)n&i9K>?ck`ak~O-D6b6 zMLoMj(IuJ21#8q3np`KZw;@UIjSd|I4 zrpaT7I~3r7K2tydaYq{AY+{3`M_h6jQxi|mQRC+|8c?Od%3ezv*X?% zME>^8f-Vuc;2RlvMz6J|y-3NWYJ|Y31isl4^i$J_q>*@v@kW-ZBPQlhtB;5%|6X<3 z{n~X=um?hXe^M=R;DAZiRO&s6-Vy+kj+|f!23yQ;=GnT((WC1mu~3wHd!49NYI{oO za(2#SrlUVye^E;Ta=<6mXPUP)#kD$c6>up1!1rm{Hr^K*g#_Q_Bnx^?C9D{xj@97sGn4csY zBAa>jVnqF-`ZQH=vA_Ukx;35%B*KEd79LvfhZyEZ-J@<*V-$F0aT`UrFMYLc|GI14 zIz%~~rH9`?P9UYon|bosv-z+hFHZpjSR zL2Cgj^RXj%0klGx56xZWKA3ucM-if$&SZc4jl+y!1ZY*b(aG4h ztmRv#?ucqZBGtHDuC(QrKY#t7NupmlxoxZX#_+2JBz1?{?+sDa3A4o;EBue<{xa9m z6?6M$2DFzy`=N#ZNvq9MeHIx|i4)w*eg$qTstjW(O5wxLK^Op8X?p8b2sT71e zHmO4&ZIYPEk%WfWGarZ|x}I%DBZ_0=e%h}d6u&;CUYj;OkNc{)By>A_Sv>&v5DwvZ zDH#yP4^VS<)eHPbXU3^POe1UeWcb6`%;CCw9hI1o5L7 zxGD+)T=Ce5Xa(14OFM3)`$Z!&GOlYaU)~LrZ=9y0(XUBbLGhFaFP)Vsq(&j{+o5s| zP?#>Vsx`7TJ_(e{8B|ZN^_F49*TCPa%6~W&E`LUoGV2fMmg4{ibJ)(CSks3FvUat$ zyEzD+e>9!NvZGoQh98IlZbRHP1j!8d-~@R3-se``o^^F~oycabU%mtO)$m_w++Mfy zjHEF+AeoNlR%3R9r(Ne)TA19XgSP$M1`~`Ln~w(7zbvEda0k!$Pb~%OPy73?Ts1!i%lY;YS;`*#)%H##(vS$xW{JHA3j5YzQ{zCtA)}4U&BM0fo+9rSLHv# z+vvh-pyt98O}MaMPN)5B6fHvG-RZ~<9I*iBklR`ZAd=$w{nl)=jHe=)sbts}Y+pU_ z0<*$(CS!gFHJv+-QjNcF@=>G)tp(;19>jUst7;>#5EIq;rak(`m%|!OlB%+GjlGun=OJ$Y7L^4s2h&54#p(Tk zUte}sePQi$H7Nv@Ll=QG0@egc(ijV%d7GWw68Kz#cPE1&6yy#`K>HSygQRR%K>^~0 z;kTh0$R{C9L{ZAbN|(-yW3OPQiW(PQ=we-QszNyR!X-!{K?n?_1ISvMhA^H?G_`qL zsuVz)1YhgRMZo*DEaj5|ZMH}l;w~w23%fn@)KBZL%#6dfjNW0c2+hWK?Z+*JgR3PD znGt*vuJwzE+O+7fiL7L2{EqCt*Ae*uno|9{DfF13wngM}CozYd&L{Fb#;j-wu2bIn z)5e7h^&e@!m|AaGpiUk67W6}!+Q#a%nC~d1kVtu2XDU^toUSvQ>AqBN7axPpm&Bq) zk9}G-;zbP&H2<^+UctTtKiMB*3(Q@o3wDlOnAjl)gEPJZUyKg^dX^YF5c;Q-KIs~! zuN+8w>1xhlIlL`kw(hR>5eA2%xQGjeK;1G8m`&R592`xpHu5L`mTYFH#kE#S#X5?X#SBw{NWul5QNH9EL6stxu zSX=AG?c0}Y%{GQ+>9bV378(Wo?eZf%-2n)d4G8r#$th$W7m@Jq2C0owO18XU)vA(T zL~U8?wq7Q$h2Tvby8p)wABB7?@`|;Q3B4Q6M=u}O&>F1I7dwDgj!d#~A+lruE6u_Q ze#0kVO3{nELX*!|B}oS_+`oWZ7ASJQ`k&6zly=ep4PvD+8n8^s2#PTBZjbeNqg>}`)3E5=Fy|og6k=-nJGV#0)21Iyjf=?jgG17P|~+lu+s5V&FTywYg_ zRal5-eGA~3APog%YJbqIIR~8tcOzh?i~xrz06>y4jL6mLWDTxT}b)mPaZm>LK z?_av{q=ipjvv2;&De{}DmmOb`IOr6D05Urj25RA4{Qyzcam&hYRdqkFIw3p;Kh@>-N4sA{nb*cSjbbTYe4#b+fh8o455!HvWu+E zc?@-h18RF11fg+O#afvkL-E!ghR~xR6!(1;fg>ViB^s5XpgibwEgc zq;o3=*R&7xoCOHl`#4~Mj2_CRpfBlszqck)rPBxTCUCFzU27cg+z#G364M6sAwoh8 z_%c?ng;qj8*#3Q)VwSx=`gq9S&w+CMqszjh4Q_A&K0^4IAdEm&c7`P!bYhg9ddYL3&aYcgx^B>ez9c7L?LN8EWRwtWSD)IeVD z#V^D-Z@}b+6yJ7+WNf!TN#I~*y&T*W7%&p)dHwai z(7dbV>J0)6zz|DW$`OOl;pX528W8lDi=5kOkt9c`caeqx$TJf>Cqn>3H179Jjw^zS zKt$NOtl{k_->8E*g9zfSBn!e3+X}D$%3)gc!q+_txJv0C&z_lGj8}q~GS0W}&P)63 z1H@S<`5p!g3t)7py|%->*}J}XB66#A@7?MyFl?a8CO8=1NC5D%M+P+*lO0F1Z?Wd6 zjed#^1dLkeBXryC2mCtUJ;2gC0m%JYm%j!J+}=P!h2Bb~x^S{l)L6F54}9rxmxK`G z)mhWvFQF_W!mWXq77qfh!?f}UkBe|ONj5hHjJDq^Q~Gs!Ttbiy#RCMQwhOehyq9px zv9+Iu>tB8InFo?63yo~r{?l#kpVC`D-2Rg$y#;gZV)l)zkCL2tEBnz*Mjhm* zDGyB|@0*ZHO*N2PJYDb1R0&2G9I(XCNWYAXI!*mOMHV0kGP&%m0-&PY<`E{L!~*5W z#QsLRv4I>J!Myu>$V!|p)#B^kkAyz<_gI&F3tQpZ(S*$R1qBCqV`7 zw7zw0q^b{^sGg0e2_YBp&MG`p$O(|_Y1Rq%x|Tk9ku+nny2aXc^bf(W8| z@72lJ7#YUrP=HS!RzIQvI$KZ;y57d1=Pzvj9AtgG5O}h9XK+C*sauN0Cbxd3P`!Zcc#v|jJD#i|X=fXkO5>qbnV_BW~mgpA`*EFe=P1R3kqEd(94B{a`MRX?I*)Lmr0*DStQ z88{aBz}XqD&UimF%pEk%0fNVXO2W_O#%Xsb2T&=3o^vW<6bXWU{dF=u2~kQ6Q+*D% z3JTLwOTn-_GYq;{P|K8LP#pg=>r;4GyHLs8T!-cw$LDT@EQrXDRbAWqt!CJyNV2%p zxPfW)ZtP3iztJIG&DVXn@C{GZug^dz?iNR^o&6okNQoke;Lbm?O3>GwfT#dzc#t1_ zUrr6GaJ)wn-0|}$=xRmBmig85LgS~5Y(~Q>$AG|%%y22*ro#WGCybKjnB54>+s!lg zaLxfQ!T}I19uD!EX7S4BJ88$^d)WRv0!#_@$rd!W>)mU#>-8S!K4^|@>j1^4Gq(D9 z$~vR97z}dJoTj+)-~2mH07XTZ;>4*eFMzcHkhXbfI`h^(Lh7bj?@>;jXRuG04U!x0}v$}A$o_UI$22!XtyV!uE4(x2rTvKY5$=G+WRoT_sID$j} zMqQmDtZ@OQpFiWUuNy!)6%ac|4?@&(%q}#K;jhVBOK8Apux2&^sz#*Z&kYE1DbhB) ztWzQkA_HvEO<0Trz@*qDZpdDEK4|w18Z*aMN->)axDW7<@70jIh?2trS9#}c6DYeY zlJQ_kacUsgzvAPI_o;lW4!vHEXgKThoE$#U)D+0DI~E=W%;I)F`c@y~pqb`0Lf+xNyDG>KWv z3WgsEFL}B$7WUkULbu`NFW_^S^xVljuPVklru)o3paC$OE5Ml%p!K(vut|tbxCi2I zDpefN9iO2lk?!}~DWci*a$Y*5!fhJJylV;^LYm~93GA3e`k zsc@w&e_(TgiW_vF73bQZ#CY2bE=chU97Wg}o7{09cskuUNrh8*O9FKjJ5C7Y(W1|yClt7+15>nqTk2bl99&+Ay`_fgmA-*aGiQ-3C8ehncppa}7r1Ty~BBSBxi zBTrr(BOu)Bpd5AcNtsn6hZADW%HA-Nh$Q)ZS19p<_PWwRKqp9V9>?gD1#MJEq@ZHy z34ww$tCD8nJtf6{F-h5JDCqejVJy=J`uwDhcFcZsNz4Fmz|Fj5No6zzF@tF>Uy!JA zxV^vIbSI0Y0!W@9(v@UwOkOW`AVnQguCkS9s3$zQCW5l0nOaB8AyxMUKqltIrZ0Oo z0-Qr#Rj`?VDo>`(J1;9V%U7}}3yvtu@Xw z2DpFV`!)!;7{0$e!mj?I&HF$HgC%2$PQxChmj3HM)vuY4*iBE}e7p*ggqQOZl+TgA zW9kcM-}4E7px~yug;A6ql3wWPqeMZdUrNON<;f5Z76H+Gd5TzfOC`MYXs8X$8jzq} zt~Y3=mXTx)!UPo5;76qokJ~$v$cX;c%Io88(Ge9C^ZxQ-d4sNhW(!L%-)RqW=v}-I z;@mq16^3nUsr;mdw6zz$1T9&)ylDIRf*$%sz53?bH zygL}jWfr6An4h&^Ni&T^5MeP@t8;J8jzG`f{f8vx6y~=y9-(1LJ2TBU=`m1c^1k`^+#-+y_2KJlM4zE3 zng|@}FX-J9(7Y~?p=Y}ugKQ~FS7RE)N{TR8-tEusxd10e&?HDJ?i+)c3d044Px0fQjwa^5BWsrz05kRMKhokZ@Cv&0 z@7{R}@orGG>q8^e-y~$6S_`@sT%phtlieX?{rc(Bo7Mx?6ux;k1~hZe53GW;_@&&Jkbs_+pihio z!5BQ#Vzdl?3;X;_(CwxC-hl6$pTBiz1P`Vbw{jjXn1y7O+C)+?v+D{O39FLutA30e_ukyz_6A7Fj+p+)(gua9UBotc+gh74*xB}G^CdHBh)H2Z0!97i0(wbu>NZ-1U zsqfp)P3{6MqTLf_cM>1~241zz_pkche{zd_!AW#}SD1!^j+tmD^{FVArqJO4W|GJc za`~PjlL6iG9Dv93w>iygCqhLlSkTXS7V#}3do&*z5hrw$!=CwKVvwMuNTH^>%@#p- z+Zd z+OB(UJhO%CG4*W30z5}oBpx?50f4L*QRdKO=Kv!mw ziyzcEfHZcqtM_09k#N9IX@yY&{sSO@UA6}!uhl&r?6DCxxBd38&>uGdeJ|~DDP3`i zS-mplC!d^3u5$3}OZ~!31Vjdn4ve440)I^{7&my4HUbI|fkxqW#?f-5%;!Iq*xt+G zZ(?ktjZar1pWv$C!zZCe1a)5T@>tV&J@B#E`HPEkbT9G_OMs1Mhdnny7h1o+0Fyap zrUF@6h~qn3PtV6M5fn^1Vg_f(gIhY?*=zv%?)ohW2$Mlhj{gd%MZNHSKJ&CluM6D* z06NXe@5g?WklxRO)z#K3?QW_Zs-4j!RX1$A!^7-HubAku*m zEQi?;=ID26|9;FF;>+(igl-FjPZqplR|q(&jIUqs0~D&F6C>y{F^PeqIlpoY7(-)P z(uE)4Wg1sDfN&gPv3UWo__x{TelE|9F!vL%T;wHpcZ@qZ^HCw#Odwzz7pTei!aw*6|IXO?D6&tdkTAgC@D%x&ri|m5AU#~$awyH$c?_x<^6fR<*&U7`2?>3*v&KE0j%I+ic?+gUy@QHTBMw;npwVsN(EJ znVx8S*l&_Tdt_H3t?v>-ZLsd6r0)8AH-iFH zcweMicH=9_1IfqUu3$=4{f1ArVoP9&a{c-0dAVe|bWviMkFuxt3!&<*GU&l8?PGq= z826Q93U?tUc`b3kp|AS|&~8SzM9Xh*v?R@-FNfs&c~J|fn4BQGM?cv77Tfx7m}(v0 zO%{_Xv-3X0-=<5PQAU%Q7Hr-exE`l$UH&?PO{9cv086b6dV=C1ue=1yY=zBEaWIZ6 zF|khGv;d;ED8b%MpyS}iDU}W|^IDJ}q~8b4xp;oLv~V34X_md&0!nlEstHjo8M>#n^y-yL!Ziw*^h$MGTOBV`np|69 z{2)ntMeFE{AsW*lsA>4M14N|I79)sc<&oV%>u!N=DXz=#_I_(z>?XINI*F@6S=?xl zwg-(E(X|(xw-KLAdhtJFdrADHu7&eg^yeSQoq3J}vKpjj5HfRa+8GWW3YKH~pkuX(}yN6oZQ74cT^}r~+ z)ipyF$Nm_v*a*Hcg4G@7)JHm54TJtFgB4>kdsVd3zqVP-r}PLT=<|s0{e5_IH9oA^v85#;}gGw`RyTZMPUE$j` zKby-H01UPgir*#evkL&US-?i1VxzXvQ3Pqw-yKKxAK`NR#oM{lGVAL!8xB4sT)$c0 zyr6>i!AtnA$xwVv5cBa!KLcI#qH+a1nT;x|jtVC=a|KvpzBD(ybtRbw! zaGf{E`8b`1aQNFxtZ1LpLq___eWT-J$sgL^1>752^R)>$G3Y5XE}^kdr=IG0s7#JQ z1hO8eu}Mm$d9ktMvsI1tRl`9$(af2)fQ8z`VG8|mV_-X6WB3A@ukoI_ zoZ#9F#YBgZEe7K{x*l-=^5(Z=kI$R=_{lIq%>1u z$U=?-*Z)F|n>f>aosRgfTTc12M9fJ#Vr7EV2GsgAKUg61bGc23jlAC*>&Njkol^~)Sqz> z9Rxc7YO+bAa|o#<&T#>(KpPX^ z5~d^QX&{Id9Zv%)tBs|WsO6i1!Fu%f^W=lQ04!3Sdd?om zFZI5xO9QCm_%83k6r@)~uMsB;gC#F)W@r)t2-ffZ9wtz9?Ar(oiG{U_g#O(fTJscp z+&0;&!m7P^3Dvd1@R9WmyOIdH5%Oh|)Ar&`PLkBqH{Dk)aI#-QU)p%f$BV*;QFkFr zQd5-I%Ruy3%pPox zK?z{RdR4E@0(O6~2HVL2p+aHiDA88c@rlZZMo+|9i7yKsXO)QnAY!%;01WgWr5avR$b)ywA8_`%`wAf$77P`ob@No5ueDs@=@YG zTv!F<(9QdDN_h;vGPu&ek&D*V_`I#_Rk@tG6Kb6F!K(x0=2r)8aL7<81B+96NhD0s zS`Ki`;es#g>}|cSrD5>Z2?|tK6at$yAzwpMLpGD%V!0Umh%LzF2ID4vhTbe+L%7JY zA;VAqxF_-W$QvZCNVKm6J-(7}q|^{t!^!0a$jmbMHA!SD0|(rx=9mq8CjW@MOdw^+TXyLV8Ob)WE zc5G7n%*Vx0_X&F}+!2D<92cqSG{{b(nNnt~_y!Hh%zn?uVDV^Qb_SSpy;lK79Ujh_ zmul@e>^7j}`dCeF@-Y8M_^$eGjMMD){eDDk{;EX&wVuz$%83ZNk}7BrO5|J6sH&C# zp>w9pFEB?Sch2v~F&eRprvsm<4`}r>X$_aV_REy}2%al0RI{%@50{Sc^Mp+oebqM}T+wfvc+C!yxgDDHXVWA#L4XjFbWkm09u-2+#DR<*HzX;*V-zQ1#v@ z6Pm%iM4kHgWS7SVmo&sA zexVi^VP5u+s&zY3K?t;f#agrk`*{!>E&*(gL0?5KL? zVJsIwUgvVX;0*M3jp|i&L4P_6j_IEpFx zUww}$<@{+AY(+7?sBSn~hec*V#A{{#!f6(JdNtbEV&-Z*ngU&H0B!)CPUlCgqg*r= z$}Yc87gGm4^OUr)|o^YN3~{0qDhF8g#uJ}5*fre%X83g=@>UV9B3ruNMzk2w6~*K zv~?O>7tZHe(*`g)raj*EdC>dQCS(6IemJ{|`{uN;^3HmN{5_3VGYSC7#>M6R6EGixSq-vGRKFb2m$$s_Ay zs6QJ4y+osbDl$?BP_$_6uOR}y|K!GnQT5?TDeEckr5lsXBy%Uw+}%@BuneKw6Gv_H z=UBHWof5H7u|)$_V`cSb6F^b}H&y%3F)0)`ztge4xE(|`vQS(m@TA z#Fpn>dr?V|(1gm#iDRWVzGMc6ZI->F*&?U!$qAKan_VGE_8?0i;s^S(#Qt=^S1c2QzS4FrpfU_*}6zy+W%^tp)|YaDtHO>C9gq&uL~Iy?9u1jlM^`emuTvqM? zGW?1LX8kj58POEN98A4zexEPv_`ssg0gGWeq0b^4ZSXV zVEnr$3$;Bw{4BD>vx%D^|{yA`qQTv24%5=?8AL^(fEOQ;tC!ru))aTjstD72aB zWq&sc6HZ`(TCs+4Z&9NJ131Xs0-2CTx$dcvyP$U_QaruxHdQCcDgeG1>wnYswSGC_ zFt5oG>$}}3ke`B#PQ?)i-m8Z>)ch}L;!V(#EwEIvG<7_1%HHs&A>ch9!*()R^Si0} zqi7a?t^-t_t3!CExn3{N(rB8Ze1tPb!jZf-P$;!doPdK6(121ClW(T+1KEMIQeQ3~ zG(@=%k#IN+nSQ~PPVe-G>>Rv*vZ@z%uP@LQDctZm9XQwHEoD(2U2z)x+n|3Z8lzN~ zwzZ+gNPKg;AJ(k+Z)0%}D*76viY=k*hFZ6rkm}}p*Ee(Qb#qtP%5z^>W`go-Nv zq*05qAh4d5g`TGB6kuR+^gs!R@c?S~9+Qh(043sN zVV^&^S-Tx(#p=zj51#7>-KzA>xW(ys zL$G{AnHW9rAy!O)A70-0#hk`9?E2h06%gk1%nfUiu;uH!v&>9|5pz0zMp;3vco|db)wB^8j`XQH-qsOM@0PpP2f4`UYhDqjXdFPj1 zae%N=1Dl$6=aLnd8cr$K&*+dZ01MH1LXMa>!C6zsvZ??cp0WLOvD95A`1{MmhlX%? z=NNa{`$9qsbd~8$sftzbT@KahPUkJs)XQr|O-8G2=z);NzO?{aoOr%e<8Gv+4HfDr zY3dBjZ^w>-cL|CooK`*YLJx}mAVmDy?Ac!AEJ@l7WF<#u!_KT^>T_)}&UrsETDU=* z8p3OzV3mx*BG-uAb!;3&9TYq#7!g)yqbc7>25RAB>t5gqLnJ{RvtOW}{(;gJ(ft~% zETQ<_NGh0`+9^?dfVq))q!%DslVns2oR1Dv$2+_~{Yd~ifD3h!yX=HX8vsDbAY>yR zD)oM1+iIIqzI3CfQ}n@HIm01G0`jMwVTLi`->pq5V}mFhS0*sUlaP(z(}V zw*HE-zfk4$du&0Rx0zp~Kx_AQh$z{w-mX=c?T=f?5v!V)I>^Ry(pIn4dl|4uryW6o ziR}f9wJtj?kH0J3aQgM>MprHsE+@MoPG-65^B1#~VgF%3N%1U;cIy2r1-&(f{l zn#}ime$@9Q0&k$0YWr7YBgPEbz&Gb%$vHg(2kC?YJBFen08~I10(i8E4*Kba zcLnx*;sY$uY+ijrS)DYpTFx=Fy|N}}9|9uP@SY&QYw35u0Au0~v494)M!+e>Ul!Fr zBwIA!F!Ja{A(-IlzL?v3-`hOYrvCJksDP!Rt&dKuE4UOvRH*9{J{89*GmI?V+zmK0 ziv)QLQfTldH9L;8IAFJ=fyB6z%S?>z62t~JRH__{V#k=mx#Rr1$>4C4MS~})O$h+%f-~?THy4`j34Hwhvd2S$hAzY7 zsvbXO2`49@au5wt?5;=(n0N21Diy)^>-uf2`w0Ab-)_fcS}R~w>15U@RO&U}D&g%_ zx}N{SZBHhE^E0~0f>YE1Z~r@ox^I+W@_|&T5Fk)232*a_#eG07)_1cD%v{kpo|JFZ zr6|zgLCyv-&V0G^v3MjOfV1b7?ck2={@7Zd$vdz$-CuRpHHI0P$V-|fI(P9dDOFvP zR!Wo(S+1mpRAXL=Z$DE-Yr@JSytn?y?_#CPXAiKHeV>-f19xx>TM&q37`3+cY{XJq znes)Z$Bv$g`Tjm|W$JYfWf|SlKfIoD~d|inD(cgYI zD?9#kjN0935W3sZ0T67e-5wz1`nL=(&9i-LI-!@Cz27^yT4D5;D+wUH5Bhp7hAmAz z`Ka^EIM-waC0{lWd>F^ba=4>W88B?3ei1kyLCh(elmTbl4B<({PU2{OTwGes1rmQB zYo#w`Erm-_(}q&_@7kef4m$GeAJ!P z6n*#;P}iEk00kPpJmA7CX*N=@DUvTrI3nqb_u$`Oq|miZdPB3^dM_V|w^MU4gG8*qW7 ze1!DO5+QkKr}t56Qv3ZneO`6#HNbSX0YujD9RmR&k_EVlDtR24JK+V0dU;p9^ z@yQ#E>jj`AEC3bWFLd=JAXjyj@fr~Mm0~`ZxjwLPVZ+1*5+*e&v~9^NbcsL`!^ITz z0|GVT`I28f?ePem$$j19G3e0cR(p4mS?tE+I~<_O2Be*>jL9Vc+*FWpOjx+3ddtVf z2LIf_G#Rk%(yALrHg8YYIeTstat2)EdM^wV_VGo5BQV_)w=?_^4l8i0PBPq;Hbe`z zV_Q(q?-kHnT51(uDNC6fk#a8?qtBlUbDhd|`fMqj7;&l-uwC%;DY|=@8ZGM4xSc!g zwq~(m0DL$SmBVwT>_+oVNy`@~N!D#>*qf*}isNfeL@R)IO zVpWF3NCHrZIM8EU@IaTJtj$d<`WGvWT~*#ZA)_Q3WNFW9kWxAQR zwBNBp0BO3p!TtNr1g#_Ed&|jK`eNOyts$THnHktvn*OM-SqP%{SKk7ewwM>3v*{az zxNNU3*&A*xaw|kK`L+K%>Jz(B4RBXLvcB;a0I=5`YDk+gmf}b0IW91>^j( znpr_h&rq5d4mO6s$IXturu3~?MAavOm~%#_d9OwEmfVI-8aXVvbUveeWo>^Y>s@#Y zln&I=z1yPb0J8cH=Fne15l26S(Da`X{XsIHb$3-;;ty@_oFg3CW&sw{Q{@Gs;~xZo z=j6$O7+An;8#9g5QWS)1pe0rtcLXOjr#=yA&d-X^Qvv(O-g`E=Z7o}%-(S`H4=R7f z*vP4T&#PiiAPJI4#I0MWkO2}o6Tkj7I8pM9!bq~m_E@Gw0w4%9dUsg8c5g?C0M3k( z{ir>614|7Oh4IX!-s`z!`IDsEdqd*nDL`u(HUi}UDaw>XJC-nsu*%qph)SsJ=KfL{xn4V z6B?g5FQO&|ayXs^lP~;w;&0@&Y#j_=nHy?W(B{UQtH3&0Z5Eq_0Q9x4FflYupnP$h zm-FG}s7%#qZ7?;b7w2@;j>P?1Vz;&(H3EwAA#i9@Ge3+Z)SHrYlpaZ~*z%wvLP}C|GFDXKcfFkl{$ZZUhN$~e?amhvPSfk+m=*C9Y4VM(s}0?{ zr^z_C<5MaZyy;|WRps{w=7$wrqh7j)XWDBp;|S}CW48H%DnQNg=re+&?MpCQtEAVvga zB%QcvISxa^*j&$yT_3><%Zk{czE24XO+kF^Nb?T$BW^X7OWin-Y7KQ2iDpoEyq4n$ znY>#z-3WLPd&&~HKnA2sI_PFHmW|FE7c&cMnoePXel|r$I=X|nb~qikGd^S``%F8O zWqbDATTHW3IVOxwP08{4sH~Tk>PFk;^pZ6`It=`SeNH@C-cHf!sX>l7v#m39xd|nR zZ}byKnN)bTGTuTZ9pPM0XxW4^fURv0S}3AY%8?a<6IzPxYLRS~r~SGM)`%?%*t9Es z+&JxLak^Yzj>NHx=rF-HigLn>MR?B6guzXN%>=Q7^b8EaQB?Vv5MC~T_s(cwGkSHL z9998vk)|8dD~@SsE;vQm*a4a|+fsr@w<^rxBAV{4U9cGh8_ue$Y}ZA8y~9E;)G{|} z0Y#xDf4XChFabz~2G+spJl+roche?|h)zU7n2f+&mwx*;+0x zx|(z+l}bGvs6!*!7wbvEwxZ6bYi5srghrrj?Q+^@O zhEN+MkDJ|b*pVjBh+eiVIE_B*h~=%iLV(~&0Usv?`$Z-;2zOF;ZffpDJ3P)JKh0!m zP0w2u2YZh*Q%6Z=<-!A=-(DI`0RLL*I6sUQ;}h)>Cbt?U zVKhGMSU#SyG=QKH#jOjCG9j1YjFZh%mB(&I>vVWxSLt*!%tzTM+a4zVn8y~U3$u(8 zOyxF#F+RomUYd?Ye5FqSF5~Fhym*6uzBgfmVfvS1)3q~M@pB)oYQ);d!YNUP0Onf)z(Jg*QSp2pH>*v)*2igOyOA@LGC(lh zY&=)VfH7xB$?(f)q2xJAuIh_K9f7X0XDs$W04qe7h9>ZuI6>3}aY)zNh}I5Xx+-RT z$rB>OviyL%=-a*9(HF$0i2{+rcEmd*SWe{Z%L8Dd$f0D8j>{#{8JIJ3@^MhuE>PM1 z6N8Yp#6eUvIx6f$J0Es<>=Z^YA92ini$y|6LxzlRrS)#e#cLFs+q=dmN378IwB_5@ zxs;H|5`jvbNDEi1UM2His0s}1ItP^I8hcKXl*LMU`^9DW9LxP=# z6G|AP_KHjqqB|02@wiD4h?UlA$OCvU9r9+m;D-N_GnhTpsEsdk`kOMl8YTVxwj%lRN%2km-)raiLTZV|v_4|clVOgn47 zKQ80U5`jx_(k?ZCTAs9O0$#jK2f?oWyCfmOHlVlXpHxk<~&) zxyrk^gM!FnHv%%sxTOS~+<|pDb(cEcnIu4N7pRMhs|Dna4b+>OAyKrpV>T0x_Zp)e zZ}*BaSjKDtQ3L0b^CQaY>$yuDbyuVUXN*sad2*qwbF!0lXXy&Uj2L=zI|_zn2JyH! z9!p~G#c4MjTxiq{M=~+-ll9_oi0F7)3zsFoZY>0^ApuU`ku2i*iZbU6H6O+eCII8d zca*dVbV8LeLj>o!zCg+qok>EM5LfW*%H7$B(p33szc+bY%_4|56d6AQf2KKe$r&*` zrzt9rVZ;dHWaT0RMyQPk6s3t0>z(qWHl!$W6E!k>=A)h3R4&m}LWgbl8+DZwbx5%r zIb;e;FO`8;E9ZlXjtgcr%}+vF48g>$nK@06rN?aZVW0nqdr<#jUaB4zji*!9aXipY zE>J8N0dB}9#zlG^DlT{?TWP~{=(jO&kC6FL@s|b;FvR6FZYWZT!{X8rYPU#C2s=7| zwmw5WCv|im5h6nxPZrZ$5GSK@R%_1rCw${afUu6;mmOXfsb(@P(&d4kno2U4R-$<7jJ}0< zqAzV_yVvlIh+wcGmOFPSZ#W=JoEG^>I-3(V8MI})qh-V%uv|1v%)tRjMwe<-=CZ_| zHe0XbvcXC2&(v<|@Q7piG72<0)i#Z)w~B@l=hYzd%qSlT=ZSe*30XDTklf({VN^m0 z*&viQ>SAy}&iK~ZtKbWihTiJ~29?HfNDT7zc_S|it6X9O^>Q4FJ8sj)l5+yfuTO!{ zX^x_yMlo6)$rUi}pmv@(I=wL4h}X@52F#Nj(mS>B5?Kn1wZ^S68VsbDImA%U3t(^x zSq4GyQ841&bZ$v!S@e^|np`x-X&vmNL9M01l7bQ`l2?qpA1x>-rJp!U2~p0RrW7@1 zL5Ew`a*LvDYBhwK^fH~#FQaCHm-|h0(kBDW+kwg*WuBQ%$2vM3)3qT*YS)|%FBHzZ zlHl11k!*lgevCX_osm0csdR|2m6%mF+(rC|ts4vIzxFN}phAeEnMow9e!=Zv2EKk5 zR~5=_>8&guXQ&C+Tq;p#gRjojGyl(+Rol4 zK8z>VR{#&1uN+(4Z8a@EZ#`=_5pwoyPhw~5R#s&!WNQn2#K?))I?d>L*u*M%tftK6 zBG?sqSqz-{t_VhlA$gc(d&ZzB#hD(`dbQcO2`yG*d&O2{AyVvaLt0vbu{nuODPKa3 z4yDEo4?2ngL#tctpF56`)gEwAl|G8GTXSc->WpOx3_nsY zL*9yGl3KGn*DO>a1cTVc(}-f%Nll4+spG)#@#v_iWRY4rBzdqyGKa{5r!9msfYk_7*DG|f%rKSTv<7qWF^Yo% z_(;kVZRM(~^abZ3DKr}{mPa>H;XM& zK5_I&7mtaAu9mYiEk`RMK30y%*9?^V`yTtPEeH)5AKgD1s?2xx!Jc5} zvZx;0B|AihN@frGHm2(_6vnrwGW9mnfYydSAZ%M_aGvmU8*jG5Cg6_Mh>}fPOAK+g zJyceGuBadk!x2EzWFV`dZ*oLeSY~X+lh_IeE?i$C?2yjE zr6{Q~*dxQU=EX}(UmlUk$+wIE8^#y}bcs&lmT|Tg`|RkP66U;|ntO15%eAvy5sSrX zAbIxq+)TY@X&q8_1wi+9FB)x62!0`(IKKbt@>AE-xLNjiBorZf7`WW2%g1R5#p<(wLn2@&;Q*`!y8}jCr%$@9pY5l4n)W-ZxpF|%XhHoIUgW)GWPo(DA~!<&II*!A4Rf#Q{$Q`b;K z63s^@S4mP7(GAPvl4VtEdn-C4>>_PX?HY^1Dq0-HfhaiLutks)%?bk;Ed=MZj=i26 zV{+%09Snu8P0}?ay)la8DXr_`gq7t*F{ zPnu&0Qka`!#HhHp*$~pAJv9xDv#X6>4JL$-uem)2v^puOa$%JW24DrO@miHOd*Jcv zY}RtIus<)H%w(cqpeEyy7cJLux1P7M0;qiKc;#|A)jitXC)tY0_vGfVNDH0Wj3qfS zXYKy9XCnlXt(-DWI}9HVy|SEgfZ{Ul2@x(^x zr^}<9^jSN8a)ItU8&)$t;+Kn-$;utB;rdcK>x7u`%jme)*2X$suPkddBKjT;XEV-Z z#g?1(CI-io8QF#vz?)+`1V3;t?rs|X+LP)DPj4a-i8Su&M&L-RbrCnIkcO%HQjXBWyYJ8u@) zYLuR~$!^VVn+Y?pm2yI8=}K5I=f<0?DT*H)nvpn|QZO7ZK#VDNI8fv^%hJQ--AdW* z`&C2&e3`_2aM{l|_q0MfCbHc&R9TV%YtIlOq;4~rC(7*D2%&PUi>+PJa~_$ERS`vI zRp%7Aia4Z1n<#jph7WLtDhZ*bNy~E4DQZPC`_l1rS&0PDoM&v+66IzS8#z?<#r`q6$iUMkDQ z?6^#P>N2^EcSooojuxY3i7LAlLhJ}zJrKg&(+Kmp*x46n;3ad%%LuC`p*(eV(!DR((os)V;CJe18U|vr#76t1@232+8#8=Oqa?IohM+`qZ#PV=Ruu z6*~*YE5L{rn~0mO(@C`9rrz$%)ItGC@HE_!iXzhLXzv6qHXr(Pjfu3SB-f3ghr3Za ztT2Yut5dh(MyNx3}JkK_x8ffj|*er)5da1~iwAhZZ=rHdb zWR6Fpxt49GO%!;$gA5q^TG*!Bp_?Ind+T^N2|OPgs{S|{PTJW~bYoC=c{c4hZ0I=$ z-OoJ0Mgm+Fro%B==J>%pn)`US0MVcA-jxjoj z#M@o8j~l`m`4nE+%E)G*{OQQ?nV$`d4OUz9Y)Gw+(E#(8%pMB2r%^E5E8dZ|FOvw! z7DIiwXX3rE-wj4{;6r((o9)wadYGL3ZIS4m=b6r8F|E8-FqX3-Yw3Y!t@3CwFGl4s z8xh(BvcpDgCwN8e2AIr8)-WiGW#Ue<@r=?J>{P*NlnSA?!S4Asy2#7Zs<;3q7mOCd zY}YN)$v)s2Z!^n6enk%gCpuP#DP@S!q7aEAL9~Qc?N z+Hy}Q!f>1JmD!*qEs2`fA@8^?x7d*X{)cP z2|DCQ+{B!oM)UEk6vk>ga`wqFoDBU-o2GT-@)d={v%S=nNaYL?n~YnF5=mYVw(ynm z*sOvi8+yGLT<61sl7)xtd`|bFYtv`>Fxo987FaXEAW3GMYLQI_2Wd71GBgqS-Z5Yn z#iF7{G)vMkKymt7LpNw#&43ZsO_arjwFJtImU&55j3efxZINuewa^Y_YxQ8z$D-mY zYR2feF|g&!MJZO0H`D93a;FQ0-W1d@Yg#g4xGiukre%t#6p)X`wMrv29jqWQ$PRqH zIk~p2FAzc?&2+yG-7HEox5a^bX`x6gToMJZc@Jzc?@^noY26w*2gvCt zhq`53Tfrx(i9L3jr8+d+n5_ok1$b97n;#Vj12Ss8!iG}H8V-Q~QEEPNOWoO(q~OZJ zN&5vo=ZH{WHnb#m)<1?ALA6_P!|+sw3d#A+gldC7RS76l`QV@85oc*tUVJ`OB9 zW%#;wF*b~AET*kEI-OEvy0mS(8DYp}=3b`d?lMir4C>p+c|P-(Q0Qt~s1k_+wLcf6 z!V2fo-X0K~X0-FPYzKm!^}v^MTG{PpZv|peS#f!gE8R?0|9~IrTJX)KR$DtLk5cy5 z#?AzL4(tj|r*7E^jqcb%VI1n=)}PIlc0O6cuPrkKug$Fq>2QuQ2)n7})=aCU&LO=c zMS;y5j$f0z3=>T3EToGVuJ3Hk+c;dZ1}pn9?@SOyjRL<5NR63ByV4%e#k9up2seQn zYad44)27#=;QTY<@ljM)x?AZF$tx zU0obRhVEN+t!W{bkhxx8unGZij)lr(a`a<&CaN7ztRtBn?o@lN*+3o0PL{si$_sBC zl&o|@b2+0~kJAxKa|#88{BcC3)s{G4{LsqTy@QNbyXnaT)=L+K1$UHPT5ghDab#g> zasi%du{FklgxT=PW;{|y7l$ttz)zB0RS3Jhk(sj1pk_H<^Buh*h;3Ewk1`;kYCZ+j zPGgu7cyW!zXu;e#nFxL97G#l1_6+FjQNY+7F|FE`J5PoV>DHKwFIE*5krqiTeB2Br zaVQB|T;ydrOvk%6v$I*5Rt_=Fy%JlyC}|m_0krZB)DqpTF&(Cen{#GJI|MBYt(k+V z0o5vV(@|!N4LLfgyNu0 zIotV0P%~+(*s&&?Yezp=8c*?3CLL8eiWX{dvKbBv8kg2ky1m35;3Sh&+|V&p?g4NI z${8(QTxsgM2ze4+eA981BC`8pnf45AJ13HmKB~$n)lkPF3>>M33yLka8GY7#Qr>QI zd6UP5E#jIyw|FzO2nCJBa+BLYg1b-}B0Av~MRk@u5{wJ_!Veg&`KXZXy zr7~H|o1Ho(a7@@a94$@>qEL(RGPLcoO8MnZ9n)IR zzRH6lQHYqDMKnUyXRjC%J636!m0Te3+_z}nB63EA3nT-pTG{%Z8*Ld(8Wr0Mo-W3y zJJwC4rspI+7oY@~xCR2Y0Ccs(CcGe$=G^9@7T%EQUM1a4#^{-0jL5xJS8yO};?rUdX+4~(^+1;(jD&gOi6E=jYJ z#FI3b6ZTMqRH+<=Senh7h~JX_AhsD|NKS~Eh3eewvX-*SX3-o1(xX=HB@)dvnI+O@ z2C=X_viO2RS&YoG3?G%59@Xj!MFwlss?3bwWJy!ivAkBeeO-w2a-4CwfVM6wiDsc_ zM47vr(kumo$)-zO6KB2uKULaDl?1=5YZE9>`!JumXho+S;d|tT4W+D!-DAeaMslGs zPOVy{p4%r$n46k;&;Wfo4I|1x*le|$7V<1-*=nhex`tO4CA~{Gw6?*AhPu8~%F+bC z8lLs}2Co(bvq~{wyo7o-+Xps=tj7Y9Lp|Qiw(~KO?Q=Zasp-C<0o7e&qZF_B?bx7I zQ=1i&)Q6aSnB~H>9+RS{apfSc5a!rS8?77WJOHAAjHs8PJ(jnM>4*ncv8CMb50xR& zM|8VN>5ZXDL8S@vYSe&#GTF+W)`!#K2%eO6j#lf0^uYww%(wvAD?&>mc8G!0vOuNM zrg@^z_7#b%)3tA&>Z3Yc4ModILH&$KZ&g?GM}*qWG_*F3d`>c6g*1)W1b9Mi9f!3D zsSxe`C3mcX6GEv{smT^0w*w&{PAD@e=Ivg`QNHUK7xlV9o9vb%mM7CV3=4$rWLuha zs{;|oTc=AK9w=g<{}Rtb%pc^|VLQi~L2{DFoNz0pCJ>$`2e{u^Xm(L|7_igi*>;cf zy3B-57>>Kc6m?Fj-9@MBGMH>m7?z6NrEs;%#a!VKFIU3|bv2nWcovf1wgjMXY90jY zl;osU90z8`xw$eJ&4wD$-ZmQJ)0i7O?RoF95 zc0RVIV~d=OHKseLqY*$ZCvfW#X|9uKG|D1|%k^%BJ9G4Sn#(|UwS^0SyU56t=u+iZ z7j7ELb$GyN9))Vho+mCH1XkJTvd7u6vMi^h%+_T!i5ehvZvu^!Q0Jg}yQzo;k-URE zYalV@xI&GzAhSF*RVNLzD$zb&as6s^~bBr$u`kiStdQj^v5$7*$1*HOCsUt8T_KRx>AF8oDGan)aY< zR+PLYj(F5AHYZ`2Q~6G~*b3wVNAsfbOKUz&*N6H@fUBnS8IOo2(@fah<(U#W4~^w; zky+l_9fry&QFkFxMl;qt=?0j-%>sfTQw66M11Y$)hiV78n}tlWxtmHCa^^DOB?<7b zIpAp_&EgJnB<$iq9GNi;m#wpDQ8WC>K{J=L|-nZRbTJFJEXgC9lIh8XnACX*WADn6O7G+>`q3ZmSqIT3sLgSTxkp?gOG_PrVl{9u za$60DyOQ5qI}q)wPt%Ic{J(#BuP1os;yA=SkF(NP^!vGAqis?4tlSpy(KP zBy~Y74HL{^Bl{(m5wc1y6qC){2(VWjVwX{H}cZ&qryC2FIyifDSxpvGJS zq(aJ^x|P{|h@&Z_*NCk)m#s1gOlOj_q1i#+fi3j|iQ+)dxs;@4oR2n|WpY8}>N(9) zQ_&D(DHkcPtPTgv7FS0qiy&+^iv?pgmFd?tc0_J8cc72Z}NI$$8^kW z!#L*M2_J88a?5u7*hOTk%3D@$HViUtk6S~9QOf15t;M^NN@#t(zN7$bK$E|5#-%KF zGzHg-WKXq6tNqHtyU;qX?Fs-CYBUjQZv#2sz=r6Y5i@a_X=`i^H1nvc!VFfFa z29#cLe!ocP+TKACZ%7;~Y0;dCl-!|EL>EXYwCs6+*)$; zz(9ADM^bD%7;t8aAzQ!I*gVvE{6cpsgUm3E$pt~oniGQRxvS!vSfxcoX@@$88^tVI z8`=^BQ$`W51pH=?YU-_$ul#{m`h?ah>aJStI4m9E>uw7KRGvr! zePdQ4gSQCD4s({5&h5tBND-o{2uck$49fwEx~|nVscldB8W;OT@;ZBCm;rKesLqhi zIKY_x>PQ|bwySp}a>fo*)=js>+`{$l*jBi8!CVIUT|-`&M6m% zU7}h-H7Ee?{E?Yg>&}ZQ+^w@ogQm$2YzGAIWG1m9Dz~Jok_vJ{5Qg3B2*OKwji9kv zirgsEsv#OQqs0c|ATuwAJFT@tl=O8oPwD}hC0^~Md%&%;eN-@^Wm=8qt?=~*o|Us02%YU}5Kq zGPSlVtBejBciBskEC;BC1v3khca0npS)L$_m!Kw7#c4j*c!pmdA;lN)4UU8}f&tQo z3&dNss(BRw1a+F{bvw#yZld5FMcFtj6B-ofG%aI*lZ^?kyJKuLTxnX}ZOpvot6I)Q z4X4iFe6#-C$8v*Tde8=8*7}JAN{ObqLTKhy3J3$i=5vG{KwL{es^b9bC7ov|=tZcD z22{cnhg7BtcisXaxO67_)WK-IT~_02KNxo{R*^b_p4k#9SGH4m0=(%?JWppeN)HAj zbdXQiK!4!6&KhemS0NUL%KWjksuQts{5X^YBHW!ACX-o6`${g(JZZjE4%C(lXHAM} zdU>H&t5iC!HfD{K4z*hu`rsl5j(2&yE&T|NXtUTamTt-Bo_4(5x!lY2BtI`b z&->4Re)<3Y-~Z>shyOX0d1aMV?tF-i$obDN2OpBv4}%XB@ymz6cH%N{11JB_FGauI zpdbzMe)+H%|K}Ij52K>z5Bz;n;bS7QSI8&3}HG8esuvc-)k@ZsEYMVmBC^ z$}&Q@X8e~Akl6J%alhf_anr|Nxc;{7q@@pAeuJa@z=pdFV()tQcRzxFni^-;Wdcq0-3>t2E5;@#pTY8~cs^ z(pU=O8m=PAFM*ZBFC7HCN+XD!{4)pGK^Y`5To?w|1&^kHkqtC)(y<#P_#zf88I;vmZgviSsH<5U0?ed6YzH62nb=$c@;8V+gvx1j{JO+eZvn zB3*5aog0nm_(5zJmHDt0u=@D^z1d%nn>$b-jjan@LN9Rmji>jGffn|!tMm$xd{8_0 z-;Y3?Nw1i_@PGM`CQUE1xTvD^Rywe;u0oJx|G3J;iPHP8rh#>ayDWqLHm}zon@+#+ ziFm-OB+acTpbA;SyN4exu44hcmyC23{Rh9Y;iy|}?f>+O6($Cp5&Mnk)hsEE{=&i_ z0@^~qmBeY9!ucDV1Jei8;M->sdj)8!8#_e-S5TaRx_Y(lpX~ENR(Ct;yU_tCy%DAG z&*S$VwDMu!lkef!<5j^pckIXS;h*ez@+}w`rcpTeyWv<4`{Zf#Kl;b#0oscF@iG1> zk7$&{F^qD!42Ywh@I#ndW4*Om7vA1!g4{V+xzpG{WOefU@dFppt2*q2FN0y~ z{{kf_o*en1yrl5^6F91O*S~y7u7Wc_=I-q^1YVrv4j2bGM?XgHHlvTf5yWX#-dVlt z6ZmfsKVAYH&=0x~V4QKfw{Yn5yJ-HSlcLwNzVsu-)fm0}J3RT-CoA*7^FDXYJoWYG zN<1%g{(EN-A2b2|L=|p*1=>HpFSw1=fl{NDq|UA5U>+R@PTUYIal^1TcyC4Dwxf8s zjho!K`oUf+(+Ga=Rc_-8UIV0E=1CYjISl;UNAeR!-QrH%2PcF_@^2jXNmV{GCSmJW z4$9l_zi__$VfmTUQJ*>8j~jFBA9I=8F^EI4?|lrukHNp!7{q_<7$knq7z8}mx)1wr zhavYc?1(;zhS&A~x9<6h2yA)(>~F%v3#?bUJMQ!D4hSxfDN^rN-28eJT*K|-xW2ur z&i&^f9qP`L(C&r*!6-|^^80h#9_Ygk(8{}Py8i?z-1V`*UEZEMsqXTZyDity|M7rc zJpK2szkV;D`yB?PHP3CYil>`Dx>x#>d%eBRFWl2K@9|Ef8pjsE|AVT?D|qrQK5 z{||aE*FP_`xQ!`3{O=Qs_J4n2I#IykMhLMv{;UBadMxQHWAleo5igvo52L^KTu#{= zMcDANF~0k~7j5T9>CV#&`N*U`-9i2wTk9KTudTh2+U-n1rNju!RJ2RaGP&f35?vN>96bxK*86ZAEiAU^6mEM zE&-S(x#eu(+@m~cOyf(jhjn+<4=_xozw`fV9E#E0ksH{{1L;s+95E~AMLRn zcr>?rjP|8HpM2-Z!|tIc_{HnbmOg;Ey?=lRq4#n@Yge~lc!FcmAMN-AjQSx)v%eH@ z56;z3eURYkf6+M&{r28kU!l}Hb4@^TiR()vP)1;xzo6U(R{!Q| z`9CS6{ECw|zY@=sQn*)EQa~Z$njE{g^Nm@RC0Lp}dEgK7AR#&E;V}>kh~&|I@f`k- z^{T?cxT)nxhC`th22oZ>(Cz>YW)PfAisIhlz)26cVj=dxA7XA zPJiB}KL9Up4`}%wztG!WIsHRrMeW1QAA(%PiS2-}aFSquqkktj9R7w6-0uVfZy$n? zSE%VD;pbgV-_`U-sVR=%s_E}fHTHYd^pSk^uBPv5`eUsr-~aunv(KriYFxww9QUm< zf+j<4mE-_{1Mr9H@x~%G`s712N{9q+ePo$nkigN8AMqaZVIMye{pW{duS`hzOh1G# zUp+J)NEYuy<9%rSoT2fmK;tvO2m7e9G;{N74}N?Cd;nqS&DTobk&k!e;~!KNct<|| z-pB{V@^1wCc;LRgM@B^!>?AzUiF?TWRDoXE95^AG5)y!N<2cEJW)k0pxe@qBD#>B* zD*4YWV*Ff{q_E$4f&m*zkl?@J?e{6=Ls{+JasQ($Yk!vG=6jX=9)%=7Qb>w@k0jp} z^7RV&S;zfS-wW)+*zt15DV}S8fjxG=cr2n34CpG40biPdFq8j20^a>(_P5aPLg^=! zjA7GA_$d_L{KMB<{rW(B9xzum=pp-F^IhLo*K(=`LT<6olt*ZvTHZ zMG^are084(;?*56L?bUh^oY$%ok9A2S1~=*nLuMW9w2)f)Tf^#`DQzVFrSyo%t&wV ztY^|EdC>J`fJf-=>C6I>xXvtiob&y14;uP@Fn$<5+l_{X@o3(O^Z_U%2%w$P7=A+% zK#F~$djGh7G=hKQ z0KPZCEj;)^?%yXi=7r$ly5C?PqX+UK^8)pvZy1_`-~qcGg8x)w^*Fa-2!9zx`C;@) zF3_0wDn&jK4+frsxVDF4Ki@fvh9j^4{{_9FxYsGn2)rit0o3C8VP+X=uQSG-R31W3 zoa$Rg5hQaBlgNM0z+<_ss>tjKY80h>+ZuBT4>=+53^qfAox!9tC}>y#`lg)KeZ#%vjuLh zpD6ZCosFJ7&BtZ(r&H(pZh7A@qx!ZK|3jwEec8P{wor_Pe6jbLa_=+c-uYthGv&T!rX1DxOa4>mia)^}0ktMx z1|9nl`D*$fsbmBP*zB+UgmLQ17skFTSI1ch_uxffe@S0nj{Z|nGx7m7`;`Z$*|&4P zvP!sr5Nh@qM2(2&`w#TnuMM0ZIX1u`yCE^^1}A$6gZn;t{77ASMdyLf46^ZOdwyfg zom?K#FqS57ex)HNz4muzzH^L0;CX$qe~U5pL~f%hubmIW&q|Lb@1*z0NMJeq=2zxA z(-*sq&HokBx|Wcb&sg(*-&ItPlTAsA1vseh075gj9YDSTL;RbG>KoEL>H#k!ZnK=L z9(}O^{~ONpJ~zse93ZFi1lw^4Ng>+BAluu2NyX)O!EUy%TS+_V^WR z5|Dos%acV3?yb)QE`YOm-(H!x_SE^3X#U~_8(uA&;pd~qyHYjv2pF&s@BGR_373N6 zDzJUN%_M_}uCG2wcxxK;?YJ}bB$y^~z@35r@s2xx7I*F=pm*Fk{I}!I^pC)u@t#oq z0`ScJxxn)uop7HLKJSG4Jy+}Tm`nDV6W3E>u8SwV;q`A`?}WcvEd4aj2lg2E)na+e zyr{2;O^DCNCU@a}-{9?DG|UyX2iDk^xQ2gmWb*Sud-{<-(XSoVD+wTQ{p+6<+K=JN zpABAZ*l{1W_Q~^|F#2efXCWB5VemHt!(d#e)UZqBd+xxlIB#gQJx2JBrxVYiHMm@<30psL>#@3skUPgZ#g`&STdzOqK z{Ll+-8`_^zw&3Rm|LqUBlh0#T*WdPie23p~EYPw+CT|&e`jQj> z22x5NtlUR1kPgv3MD&LqMm=l&os;s;NqL@=@?XOSvf+FG=Jzf}|I#i-FRw-OL%S1Q z7mWGDdOw*)4v5XKJ*V>1rDIs?A8WkdmyUVwy#L;R?!EK=t1b6)RSbrG8|~-%c{K0s z=iWQ-|LB$>efyeU35vOP#HES;{r5FB?@1c(iu$goKT}Z&jJ^HDevhI)BJuCt_y4gS zm;UUvOdeJ9zBw4slCBxm>lO9A7ykRAJ3paY*rRg(DA)g_1OEH!Q12G?$6Hhqzp829 zQx%|rTsf~gwB_M@rl zRoTt2N5M7RK9K9%tIFJe{vn$GWZXTZPDa@e`bSgo_EIVOJ5s54llGUJH2kX!(dYQ~ z_h%xWKhxJw4d~JH+X3~N!sizZDEo5^=yk!OPfRF_eG={UCDQk3?<(nWFRw=hGzJF9V-lHey1t^r!;!+n~vV|+<}|Q^eq+`uAhGOhWoy} zl9?MNw<|8fU4WgsyZ^^E8AuB6yN=>OI=<=WU;bUPzXC#tSCYHFkp8W&0y|vK{~?LP zi(f@X{G@s2)$rSn@g!>LXG6CjSNiTf1Uryc!`0o2{qC{;N?#xBebR`3l0?ET$i9N8 zifRXNm7u(B#`zxUyhl23JkoiAy7XnV>@zXYHwG^EYZdgQ)R)&PxaG3q{FfFhxNRr) zq>I?KtMmMmNt;33cM=ONBlYj5ZC(w)eLpe$hQZkz8o%kM4gGDpIrlSAe{5TgzIo9@ zdr};v^4`w*y`A%OsOP`3xbV5Q8q|+ys{uCe1(QqS^q<>S<7tb0{D- zoEQe-b@yGZqrZqSDIPcU3rAf?h?PL;BWe0eySBlHuRU*H`o(HrUDucX!x>ad2jCg-rV`$;yJ%-G6vZviH2FBZSP$Gx@F}J;21(E5IRSZzYn|_JJw;i3lHDK}ff!^baTz{eWz#{$( zut${3So9*Ik4{bf)UlQxPviyv)DHv)s^et_ept>53aHag*`kjyVJW-_gDfaJE z?0;-l_tWRtKVK=DKUADPyYx)^Wa%01k%Q2$g?gnAQb5J-n~=X%4np7N?OS@KiJ?)t zNgjQ;O6ikwQNJm@JK#~uVk*=S8lJ3Kwqld0yY99onQNvt$NjXENOhV&OI$ovhWiui(OZV_!}$T zyaFA&-W>bs&2f;EbGIEm8?b(GBYkF>B+;$#?%(}p24OF}q`i1OLe4PQtzG(KTgm%4 z^fl{sy~b=lmP78AkmmcgRR3b5$$vUVDDFB&{>BRYGRMGxFWn(e{9|`bhPhqU1;_g#VQp)BP>{gi4rjJ@t=7biN$-A&`wzxsLTxmApBd`*VnIPPQPYJ8T`|g%pVH%pIOTMRsp`SlKICs+hH1L7W6Sq;`@1LEcm^zB5yxu zM{syyKi`V{6a(_iH~|CR|G6J0SE>D$J0OrGhojSv2F~rl&kUKLUx5!(J@D~U@nO}thzU61TPqHp1!1^wCe~-#5|6~;}oF;Bac=hh@Ef*2+ zFRkG9q60it@l~j1(%#+vW5Ix?!1J;A4GmS4ukm>O^v1sqiTvnJemp%>?D0McP{_gs z5dAu)6BuVnm=(!>esrTLXO(a-#T zX&3+Eu72IXmv-Tw;isQSVpb)PIO2uHN}B zn4q{mn|==_-h+wvVB$TPcn>CC6HE}j?|Hsg1I4@)6hKt)iU5S}3&!uE#Cs_5*Mt&I zooD)R=kpimTM9&WUin-AE8|g{@da~4OxKafDX%c!5Lj8#JyeCKW z(|g|*knwL!MZa(H;O}7_{h_DV-O~0r_Q+-I3D`Y9g#s9r_zDz}{8x@u68o8B74KV1 z_J6+$N`sB>1NLVP*v~*m^ykQefBCroq~AT>PoKW$q|rcM=5KHcsE2R8QvS(^f4HkZ z+W`DXEWM{gJm;=&h51(f^*?=8liTG?KK$?P8cqNA4_>6{jWM#nt8@+d^EY)tybie^ zVr8Gtfu2nH#7H1#0mu722YT78(myq>de4FWwqyNAjL@QVoX~>8e(XGq&xaPz1jY69 z_IZfD;SJu;B!1hG(A5v*HxJ*wxx2F)JE+0J!>89pL)4e2X^ifF^Qt0`zP|r-l~~;? z#C6l%<@NG|th3C6>w~+_Au*~laj%uQpUsQ7my!K2rQ|h#zGDI0>pY@cJ!2rfrs(&k zfFH+@Z!cziRma$$xq>(Z5E%CRuN=It@3`N8h4AA3pI>R__h0+=fHd<>dg@kAm?!qV znzBzJTMU38z-)00NOgaoyzp**Sbt;hjV!-GXP;Yt0q=?QpK0U4;&&@BkO1uye{5NS zV^8}TaJ}h+Bm2G;B>Bar6>!}U2$n{C#vglE5DZE6ldOMS^NNT07DJ=xmmqyQIzFCi zf%i%OM;$nNmPFrPq_5e%RkA7DQ$)X}WeeV;KQBIP;%%AD>4T*0aCwdLUDG4vc58Z*ySe zqXQ#>71C2ee{}byht@4u%_g3iH(1{tVZs5h|MupXkERcReqUAlI)U!(s`l%;wDF&9 z({^2=q_|T`V{hRk``&3BN97g?zDe)o2Kaoyly8S+v==a=; z=gE|tzKtDsop}ib%btYvIe8Eu2jZ{Nnpe-cdAaK^jz5IA1o1-G->)j7zjyt8U(4lv z@+tP?3Hi6hyFaaV_dfab`zv^W!~e;1Pp3f);lUV8(1%_JKZ2k4h}`-Zrnr}x~yUhN05-x&V--)sHhYgdN+B(Lv%{^N=_JOusNds_dGOzZCq zYu_V5PX93F^v_uFh9L2~6>qNZ=)S88`l_yLIPm~S!B6y^n1TL8y^5Rs|FieE%Z=Mu z*D!np&pD{>zpvaOK!P9Td4F`elS!&FGpQt#R9#b3U9u$Gx*}VCBstxEAN{izKoTHD zP$Wgkl!T<+EsGLJf*TwAW9_v)j{*YtbJ?_O^xY?@!as{_g`@=YpOaCq)peq*Z$xSI zp=4b5O=qzfhX7s@6iy=Jdi3&!*_u*9BbM{oCdU9Hs-E$gQjA0Rl%yneo-}Y@f&n1{ zPX_@EkB3zuor3fmYy_Odfq;jF+OMl0hov}35U{!V>5yiO#(|XMrLatg%`dlMFMRX6 zBP{4Z_P!S7+{j9%8(c(z`5=fKHw>P-al^FbhVi(SIIvJ6%yc^LchIkJtCi#~aY6e(za7B=85cg@fG%pWxDxCXBnF{l@#6JlaJ-o;@LuY)gsr8WVRFxOK81Fpx&g> zW+Mi2VWl8X>@w%kDv7~3%oJB z1Ii`QRwDLPm(583(BLnt^;Q>`iMZ$5G6jwPgFZa^d9vP)00%4Mqam6vbP&hXJ!wd= z&(Xi0JRJdK9XjaMJu?bg${$rDbZP^kah)`(pX-X^;s44SQ9_o&jp@n94ssuxdx+qN z6ab8q-d*fr;uT>MW%HoxO(ms(AI2nJ^hZ}+#UL~twk4)+sDmA5ki&rmb;_!J@n?~r0w;&EL47=NKx|HNZdA$k02@aH8S zC0Gx6ipHgBwn)N8r9TS=2)jBiOVH)*pSP#^>~8YaSd>8&h+Y?^wobmQ1~t&z z@)i(i%v^c$tt9Oin#ZK#bs@&dw;JT(TRPyV@amfNj&$_xKRvGbNTCAvry z(DZWYdcTxak8}f`()l*C$DGt}IHH3-}SSqEZDnt?ZrTov%{e&s_ArhPh~x&5W);0RAw6 z=S6W4|9s;ews{G?y69(UMD`-h<^*^8CiEhe4&aBS7S3wgcHlZuO-??_W={Jca3Lru zg}yoS-+c(N@s^GYun>PW7_A4+NH#WPgWl2+hjZl;I|YcC>L^MC~j zq-LF5lo`$09k$f$=Cyyt5wjv79y&t6@XH-)q~iz9d93fM0|dtg@5{ExkE_+1Hh6hB z#iG)TOqZ)o;SII-FGJqk@5*$ zVeU?6lO5Z)Tj_A03^SVHz94Cu;;BrJ9h~E_wwIC*w4$`A)MF~rEd@N5wwOw2pB*yZ zJ?X8q3Yt0Z5{1B05GJm+%GFj~U2PQ)`>U<08_LyIonvj4-v45gejn8kNOy76&`a;V zzCqPui5)51`vL+J9G2I#Dtdw~6#Fit$3s@bf&PgS)PkskKWxeq-EA4SRQTl@`z;@{ zwQ`<+LNuW!|D=KtQK>Cuf4Mz8puFP;+Fi+VHVTgoIl0HWce{edfIp2ieKrLpIDjA0 zEm52=75VLtN+^ME{-YsF@yk>)Dp85Ai~3PIsb=6z6O+8(z1r#6_YU6?rJM>Iq-$1%aBU!_lyDQUd8ybO0cINeH%kslKF{ z-Mv&=)mXWc>2$u?7>MnN(Xf3+%e!KQz~+;&ks)fHVuc3H64Mxf2}8$pfK~D)w~rEa zyMAgPrQiNz^7ZEx*+%IQG!K;a39&9|PYY0oyLp+wDEN7@eas|ayYl}3{|Dvj*{@6r zPK96rY?M);$_XdI!UAs{b@Ia)Ao%{P%9^+PM)7f0OB#%0Nn@vOE4L;;TM_VGYT9~Yn0NRCaOM4wa^`Q z$Tz!%Be-!t$)Qih*7HGzixA(SbLP5$7ay4Xkot`I5%v5GCN`uRkZLDn!LSS5_Mrj` z`=s3KXrGMz2K%JkA)`5w_)SHraKr1t}HX}P-yE%Xjo61 z*cp`s?8CX=cEvfa>$z>vl_)NjedzP)}*d0Z1k6ak(&zOwhp>rk=7gOk7-Lm~yE0 zn_N}HFJ=^lpJk&1lGR~sM{DMa&W2fZ){WjQ0Bimb=*_GUuEz|*h0sb?dKIAX1idj2 z-UcrNvW3QdS+5{);41sz;EpWAv=P!sM;cDaWCNC%;Ko>tUgx`t4ty^WXn`|L@;^_}4E#{?B(GNAEv;`0m$VOPg_e!&he# zwW1h9rFbPv4o3}gs^%hM>_! zM2`APzWD~pGQnZfme!8AbsQFrHtB60+c1Ix4Bekp&(xi^>U-Xthd zB3!0?5qae2F#N4wh3IqF0#96%HTHGkH(}cmmDnW|^@q=A?9#?o+r*`f9arhZah0Al zI_;w>@T6(umRxHbNT5{jM`XB#XV0`|V>{$w9or!fbGAe78)W|Ed{B;5)^_=0-)Iqb z@tsk@$!hD2ieqZ3j9!;X5R4&0G9jFVz4}Xi90`$A%RDD>jQHKUAsXSRz zc?d_;ROvV;C=+AyA3+BS?_szT({5hAolO5!8L@BaFUpaRK9oGC&v(;oI*i~2MIXjD zQ5=l@kRljE4tXQ&*2!mloNT9$Ws^Iprnv-`Rzo#m;$NuEO)KK+Is6?`)3pc4jXl>M z;Bb>W3W5`x+-D!+(<*ZwdQc{bQGr478v0~9V z?@fJ7jFB4&K-qv^9_V>+DAnt*X2u9>d^_@L!awlc)x_k%L(2OHW8pFM%~46C+Mota z2Y%ipsF8HWt?gJdI#8H|GImIv*#ZT>5&ErR4-~_lNp)kDPjk1LeO<`III2WB4^omvAJOiC4yIVdZBqYl zN?4en2;f+mTcN`Q32NxkzBWnrsyRWxbopm^I<8uBKGKzs(0-sSGBY}W_tk9Vu>o=b z6S_g4{tQ~*i|&)*TPDNLCPRaX{8)_RFd4%yW&@rNTZv|aAW5cGc16TcD!H5(jY2~L zImmFqKCHu=DiLw2;sI2KqzWabz?y`|Fai?|xp-i&LE5ltJg`=cXMF`=!Di|@W*;?EvpL-adG^`;Yfl3^FG&R5{P4l~x?*-S zf8KNi4ehCz{R7kWF`cfFibcq$CPO0G?;uohBq=R|r>X{W^dD6P`QHmBNEtw^u1zKI zZaA(%@ouAHp(@BC!e<6ryb`h)B!gE(4zYMZy2BwB9b(ZT7W?FujQuxCsCacHF`iDR zz=KbHkT3ylVnnDAgnh!xt%vFE&!RdeFKr-bCu*uB)z{@P1#|$>pb=h95ddOpIBgVb z5G=+ zB4u=Bm=tw+B|Nel1E?$YaPY{*GlJsl#cDl)<1?F699b@fr^y%FkwE0uE3(##%r~_SA|0zGOGh}{;8IzakJ~JkGV#(R;NVNnUtn`Tz&41CPR79HR@w$+ z*gM<6l}Rl44xJlkk5dtDPaktplx!IHK1i9+qH7O0t@@Z z#J@2UD0c|yub72oanq}IJiir~K@{VmC^oNmQ&L&;^>Ti{)g2#vFD4tJpJo)1ffJVott9TC1Um&a%&W_T z4xt!V{8V0k+L%4N>?EPPKIE!vvgQ_O1>RS;sWUBtf+-Y9K~3*)U=^IvtoNA({omJT zDV=w#FXV3Hx5XXS%+8Qz<2sv+$qBEnDiGK_zOfuC zbPFpUvb80nfJvcDp?HYbSR)qGrWi@9`b4oTqUsaH(^h@L0OnfTpzVuC19)nQNHcEF zS4X@)V_luF7VQ((qF?#O1-+4c?_{qV&;!80sta_X$(ph-j22f3LyH83f!+s9WCYpE ze$FY-wVd3|v(P8l{Egmc0xjc%F;?^*>xz{oBZ|iA&(ZCwZpPG}e!ZBipD-_@m&r_p zq|mQjPCOn)I&1Id&kuCPv}~Ur)Pd~U83jhOA6z?*>8a|mB(WJaRQ=K970J zt_}$8qQk?0+S2mF!MN3>**{ntdOzl~qhsH+M9?3ElUg`5BQUJe?B8J>ex$cX- zYZrO_ohNpGQYxtAbRIfBHC|{yEJe4Vk($;>IlS$2UHz zG)@xb_qziojSpy1wot&_b?^0i(?*8A0xSVr>J{MrVlTDTS%L%gv~D|fV^EXL!VG&xQn8KY{4XT%567=?tKtsr znp@_G&lJ9L;s9V5g zbOqRbRuz6|L4xqcWbw)yXK}ZR1aV9U#szC^2z(#)y8Zbnij?92CW#NyLBLKmUmNrZ zMWrA=q&{PQM5zU%B`1`p>?{ub0LaI1@zY&fMPmT;#`-GBw6i(LQ7=67qA~LYSR{hM z$5iCqOdsJ^PM)4tV|io8&6*JMqc9N$(Bwv3E|(&2aS<(#jt6p*1582a~KCFiA z;5R9Kf5B~)Z>55QM?h<4yIx3DA#wGS*X`>7l*G3^UZc3m$0c(Ti4-+UETvppC3YD+&w z_SKHP27R?<8}96PMqdY`<2Q%aB>AY;%YsN~g-E6$0m&8N#N`wvwJcBc(Y-iR9>6wS zNO@vUP49h_J>}p@mdNl8;grBQdMQ0wEFDIzWo%#b1!a`6p>I8HL^3cN4Ir@9S6N%b zJ=pggpPR$7^-rSgB_MO-F+-Rdzuods@?&(i7JaCPjPz$r8zF^QI~C73)aCg`3yvvpQg9mbS9fhqvCZE9jH@v^vFr7lhmGdDx|Zw-QS@6bGyHb6ZI#l zB%49!o&R~YEmeB^pp?tKOXU4fa6#$lGpbrVTA}wpR|XisRcyP8?Te|{mVuPUtuFS^ zgcJz}`zvIeJkNHt6)VNUQf)Q(6#WUb)%)j})>hbX?$`2DbPWa*MS+>Z@lZG(iu2TJ zteGmRtHj8L;+CPJLpd$lDbeION>tW+?5I&*H2P!*Z)fz$ss4xw(~2~$mytObdd|?& z>QU1C%}K_!w$6{w7WelA%X!{fKIkk-XGxx;&b276HVswxDZ%JCO7Ll=O5aSv9v?2Q zR)P^q1;)s-v-7bfkH^>Z4>@DM%JE05=jGSO*Qd#|0dkijG@DNh{Rg!Cmy|VI{_-`w z>~!Mu{IKFk%ZyOAOP5B;o5j=X(_i!DYO1;$IIZa{)xle;mIjdx9Pm1Y+ENMrolqr8 zzmd)In8W-th=@kn_)_Ef66)U?h=FD!8J;O35U*ea*l{UtS1ouPFeLuguPk85#uE9SO+qYnb6QgL zTq4HKJIRG$zgRfQAqOn5|ci*qp z)A_$>=nw1F=ex;1OMjYvss}n4%*6#zs$upoi07)kli$ z-U>%rGG-Nv+U*W#N#YV zyU>cWaD)w4ozI`<ExzPgQgOCtZU6oLaaJdewSihQzhkc|C!=-#n$D+kzB;O=N|Sn;Nom3p_OVO5;M z4vdheGO&JoU9acc(c|lkKD9M^ZLbNp17HyQ?*AtX;Z|D}mRvk7wlph=H%6xyJPL|8 zkZj&R&o`T5(6V&U2wdu;v&qv7{iDBFK2oG1&n`noIP{m~EEbL#Uy}##CYyQo0mPKN zrp;DP+it~~z8!lGaM2v<{X#)9Jl_T_R~nhoE2&Zpa01tjs-qwxUECd4BWYy=Zw#bQ zojNu@;~I8dD0Kvjz<|fSTNe3*LeNp6K2ZqZB+5}?$;F@$?Do`lK3`5JcVxcg233wY zkhEuV24cE1G@u{0MJ3}S>v8_=ae8Cp+2Svn7y7MR=qji;u?Ee2YH49+(xED&r_29G zS%C&gB@-75c=_R#CPdz_ub~?;I$?oyQ2KF#7Mu)HrAD@rQ6}4Au2xTKdb3yWD3J{L zpG>D@ZIVy?DbDOAXrfd08sIi$i?;EF>a1iK2I+-HVfjM!wf#b`{)uaQuddCw zDnUrHL$0bRQWE@oj>f{Z4(*r3ig`THBv$yX1L2C1@Aq}snG+N}_7j9K3h92*g<|OY zuS0Ly!j}%c<z`i9M;scR{kAt`-HMN8U_YMUpw$L7xu zG=qeJe16b&4+Td8=*trrK8|PB@yzzl-Wf}xIib3t(J!|mNUF`AL+QqSv&4x~@E7U^ z7U}Q7UoYwJL(zc#Ub5wz^!I_C{=W6}n{7_S#ZLdB!3y69R=_8|&}nMA=^*p$ylv-g z_w8*5UPi>5`r1J&Py7CLzFeT=aXnmVa8z0ys9zbn{jd_5@EKz8i67zumwqNt@B&z;)V;yTW(~xqDP8u{Rj+g&hB=#uD zRZ@kdV|J$m&dk!bco<|GM3-2w0}hXCO&P$Rk0P3Wlf4=|s zZ$JD1xj;t0>z5z@=ev)i_a8od_v^2vn0tD|S6A!aib2wz7>V1L8ki==WV@YAAGHV# z&*V6$0Q=({w|8O!hir128ygZUf4_XCaW_+X`w5K&mA2H>H6FQ#f;1+%h+&f|e=e@F zJTy33d8i;{6a7eR@!k?qOA*7xAms<5MR(xv)mV6j71J<(eA0T;<>U_0I=R+S;gaPI zl7x+KkTOWR7J{>gfXd$S7kamqy(iR&`T7Y{GkTfK)K-$COOd-sC+?km}=xmSrPLu za+oZWh+aRW$TCHjBY)V;6dLM}TPpl=jbQ(`!u2;n6bMaL&jiWWg{I06o+cx`;{{hU zO}{?QX@=g9f@t({{;;0UH^sS<$0tEFn?Ga|rR%<9o-%#1kc=UboKahOc3gZ4iY#)z z^ytdiV}Hm~u(kZLUrhd3;I2}FCW79SZ1sL?@b@YMI2tlJ-Y<8SaxSy zF!}oOvRvSN1^X$F-Ncm2q4@kb^v2=f3nsP2l;74)?W8>N^(xJ&{k4-U@JZwXN^G>S zoVsf#RPyE658Cg@ZXXBduAy3lN`q`3G=z&{rHmGvbgRQA{MPj9LY%Ui4~wI}ZTIS(_JmofJwt0@^kKEeCIU=d z*{qq$LpY-JhYoinY$HdgB%BKNVv9+E%mKImApA93B3 ztOLxpoit5W!i@qB;o!~=IC=uOvrovp{DlSX+@mj-hvq~ONKY;dybJZ@%4=GaY>6>$ z+O=JDSnz`pwh7~?O%9W^G8s9|{R{Ya7&ss4t8LF9TP+>Rhz~_LOYFuX; z*J#W&8aq8zP23Q7Z5#<;5WO)~&7t|d$V@3vUhhH(PY+F;N36&~c_nGjV!aRweq_Cn zOpEWW7Yd5?LIh0HzjOLsucPvLe082UYI2%L6i=gZr^5|az8UWXfsXm3|nlZU% zOovAOO6y*zbszCY>)tPxBgVX-ULx?uWxxCQU8|dhrN5EEImHt4=3)v@xY}P=rG8*! zLgKVhr7OIE0Na5o`ORO*B4Aa!u3r(V`-ZaV9ItArO0Z{|WFx5soK=!hcrEneJiA#7 zm@{IRqYpIx?V1llabs5Bd8le>lmSnn&7*JQVP3z zSWJ(B@A~J;FwI@3#j~swzg8eY%6(vKW91dQL+`}XS~YF-z$S1&XU3wd0%rrRis%xe zU|v$;tF+lZGo7ewsJMV<5+Q3$e}=tnK9O|1K1sEBPvU0Y*!X3=`fD|v0PN$K3=ifl z`eptyS*(Afyi(6w!_Q<}zAiWPWJmX_^>i-F(~eeOojW(uQnD~9a>_m4u&^tSB0`}K zSmc03Jp+pZ&N5(8KyH8UJc9sxYTOt1daHC-qIU58ZbKK6x<+IF?HkN<(O{DNXtTKiKG95P6ly6P zna$~`t0R*ywj-tQ7;*%3JDpLUcKb-d8pM&1ETxFx;>+w+eWBP&+BjfzcE*G4(@n$` zo!BYXvwziYabtXaB?tv=85=vzT_7fnO%t69aIjuS@!S(}E?3TR?+pjI!$-BAWZW#c+rrqptThh z7W>;?Wf@eGwoQ`cX8W)|jBcq^pA@v$A}*5Zn&tJaL4J{T_0n~{bQ^3vKQAX+f{s0nzMX71w*nR&RJ_#) zUJ-bCbc=;aIKJ`0WRHN<&=JVz-=JD{rXGEFm0hXTk{ul_A*wudXDj?R zd6qjWB8h6RSiL^yu|>S2OHkym*wFDkxtnA=dUjy4c&dE=6{SOc)&-rb(#sQSEK0aj zdd|{wmR^;mSK!|;kML6CD5nn3S{-T@_gFZ`*QrCN4lC86wUPiBAEyq_**Ywy-C+#p zkw8KAVeGonlsuZ@c`%(En4`ip2_i|Dsu*mqJ~v-UYT?fHsxktXi>FWG86~c1k`vF? z;u&Q^8F`tY%2%z$(=;a0@+i$8dz3wP0Yw*3bOFT*V=}QClP=VFL7_&F6lcAqg$p%0 z-`e@smA-XsRfjI!eCFz~)Lc9~VC@JRxRiNQPbb1o3>txiC%N$Ea zeMzVn9VDW0$q0?P+vVLZ-*%TzlFSHA(9ci5I&_y$N=9fLIPrAi*;ZwG=o$&32WL;q8s%q+W&TL%=lHvv+ip*p) zVeys7W-Mh>bYh1JBipEn95o632BQX^b=0Q2p|82;T)yQ>yXYRTHB2CSYhon(emP0K zbdUG+lA5(GA~_`hBfTOUPWr(D&ScIPBnq}u>N^a)Q8{AI+w&XwLg#9YVAFZC3UmsteCeNFEG$lc^`NZJZrfANb z0>eyVlkm&e^s>`=&jZ^x^4-h^WhI-G4v}J6JiR{sH7A>9vHdFFbMCiOngcgfi>hur z+0N}gbJ72<)2A(U;NK@Nsd}Sy-{We%_`lFH%PhB*DLm#&h35xj4l2gBIT=@9a0S?| z6GysLRe^|+k>T9O>o7SeALE+#IVnA=loCEs1oV5m-aLzkN1cU9yi8h?T_i%@cubJh zd>epkKt3P329sHEmCtYqRpY>*|pcvYEovkOI@8*w-=h^1AlE_An*u15ljOMF_{~B5M)N=5<|1Q0)9k^+so=Rrto?5 z`Xr4C`Q~4*OPW|bz3poL^pbtmnYqr)J)_uwYC~cV9Z+0U8p5@okc+C+1Eki*Edr8& zF@oR8K=iX8=aiJ10c#V(stPAeBa;z}DX)chr3 z3T`>zPjWi%73;>{a>t4&rg*ktJ&(~YB z49WO^hNUSzrP8{)|Md0KXZg0895YnG$wT0XRm8x19W*)WK_6>w;BIs%2BZ&8Y{UOgr*Gll0f&>R;38udogA@-}g3-qMB+FamL;=`W5d)yb4H3SSnNdso zS9Ld|pDFq?LXosJG$gW_$)gLLqCvE}5nZ4cNjs|#SswWly~Xm5y4OTEsn-{VWz3@B zTEb@sPn$*+aNoOFnu9}wv&gID>1&!EH%*n(gy2m!O+s8v47(|W2dO+)Qtg0d{bt%C z9;51?2Pmw*5tMhM#V11z-`Me#A-Cfx39fbsoDzW=C*@AcdzJDiQ6$Z`F_Rn@2U3cM z+7WX!EDrM9kBlnOgq&v5dXR|b?ywV4C!)QJD1bKycV-A(_Yj9kKjKyo5e*Kd1VSmg zQlzmLQ$pF5hC4nWSH*qNd_YluRov2@JrNyHmUVJ zF?}3Wq?%rE068di8F_{v76ju!4qWC>)WulyBZ4wg;W!MtCr7+@h&Oc0kHmfDM}XFM zArBWhK4yL-3Ig@pLBYAm_I~6 zD9xOZ9#u$t+3+>?+hN5VR_quXejhN0*yt=Lvh1OMJ~hcl>m=g(9yzx9v(E}vr`Gz! zIp{XJN5?tDMjcF;L9!gs!2ul{(7^#6%6jMkpaX&+Cj>fZlEHp8XvrUmU6$N=&Ak(W zXB72{1{{1M-96^mWyhU_9yL22l91A?m|h84BtYrNgB@s{DUbYcOoKWf+WF9~}d-a>uSl{*wJ(KaP9TR(_nE zPFv-eLGJUhh@7r+F*+BcyX+VpM}2fpx{5P#x)@!K9OW#`b(M?Ixd@$$&|Q6mZbuOv z5TWx=3v>YjGk{bcy}~zUn=lvr5avt>DzgC z*(AqHbDl_QcJx7D=TqCUnLlri(_i)1C(Wo>Lv&$amGFmHi{66O;X}nvpJ^UZ4J&FIUsWmWJu4Z>Z7nGK;&9 zCfn^~`l#D|qqnJUeu>}cPST#nvWfWQY4!S?GdAI!toy3bWgOq@t1Y=Wpe^~wIqvQc z)%f&O-BGVLr%}{&+sSrrcbAK#ZZ9pACg=3`ZTTpX`id0O4gM`!(QaNpUENz+` zpiHZi4hA!oAYag-OkC2z1<+gotu8lf0rK{kbSU!~9MnkxEej9@kDGN;K!XIM zTo^b?tOLjCz$|Vya8#NHt2n5|cEi0+R~!r51T(eTZde!yHL#CMw+@U&`Auuotzeq5 ziFpLW;4uZ-U73{ByN+MZW&bX;M!@I&)d(OhcYJmv!5ll1i!&TM7*<2jUfP~hGmyz_ zLWAwOWMu;^UcK+9b|CYc@B5}f0rXJyz?mT!Fg0$79Jqa4t6`!nznds&Hcrv@6U?xz zI7~L1TYwMZJYn*8vc+zZ~k^pmV8&~;VJZOG>g>n7ja}&0Of)C<6qT%%y{YHVHceC@T z1<9j^_v72f5oLouL{mWfKqZ03S*r&Q%c^M4z+!h`VBI5#pueetKcm zCyq<1%g17~pV#KB;Xpxk?HQ-&s|mk&{c@Db^WcL8)wTb63+D-~=P6^WeqK(t_p9~O z=-bH#B-^I_^pYM+?I+*x^mq`bj2M(b$7860P3>SpPYavs2%1_>=u0VBO2FF9Zk;6r z9*7B1#>Nqd;r1YH*<0dlvzzFEt`)2vUi*_Ax=&1N6_7(9C}Ib4AlPsdP!0x&4(*Z{ zU$4V~1oRZux4pppwpAwPPxJKyVNAa+7Y~nF0L0J1AS__snD(PFEe=={LzWDKU0>Zx z{{ZZtFz|;gT%w8dEo0Pd?wx9~aNF&Fh^3wcFszmAKsDdhX!~;~_|S zlUHxtI;ns$ET6@OW}O`4T+(PVS5Qw%OkY-?F=Nl0*C**F%QydeUD7<_QEgZAriT-^?6eZrs3_B44A;{cv^fBDJ4X^8=SUe&ji+C zQx`-u8rHmeIjqeC!2y|2YBp@i0SRmdJPyc&QnO)8{zhQ)FK__BS5D$nKT*}7g0S-nt{#T()wXafh@#(tA|zV zFbbLtTUv+k^9zz|J&jtIai^;n_;B^GYTYrf;pLYWo;6>H0~nVzyk6_|r8{N>X`yif z{A(YkoX)gu#P}eF6-lFEOZ#PL_ke$zkWD}OA$Jl+KR(0!mGwrYVx#*{Up{@7Z>vkn zNj#!3b%%qHe&U1NVP(l3$s0!2z0MsjPtLcK>7T0d>RbAYtoG4|QjX>G-87w!P?zH; zK|u2%2pcCWQiIwF5#%(hs+si#mix9h=X^ z7-5%jNV#=!F23b->mG_JD}|KXZp^+Uw)+< zoaS^KcJBwWB|#*Olq2N0AelDH5(m=2aFbz6JD9HJsVPmQDR_ON>7bQ8pKZ4D`EokB zBazFZE69apN`-U@p{B+$MIFKQHtZ62>DRBv`M1Zj#b5NSALf&_eh)4;-EX((OHjW! zFy|k#Gf5|3FAw}C=k71K^zyCrqA-)BMz`yQbiL^dB(bmC)%{|*>@gscO8JlJ^ULHs zn;9%h8OpKzU$r6*+PZX|3=bndCUbv`#O^p5bZC3e?$v^jOoS%YD;Y5v)vKc%XmnF!+&Wj1Pr92{0owPPi73_JhNwKMFrVI`~A zlWmmXuF^dwEtv@O$QUKKyhvJ;j$9^-S~zkUM@!~t$&N%WQ|ew&r%yYQ%Lo)a)?kuQ z1?7vVF}cj+WIKKQeD}KDQoJQqpnyfH@t``T5lN%z{2S7}V(1~T*{UP6qs;Nt#kM}u z$h7&&!)Xwgf{)YXYEyVa!A_1v?~Q`~7M?o&Sr*{*cD->&=Qh z(r-5@6d&FG#ZfiDb zg(K2IQb#6VY)4ApF(e6TVLGEc?e>wPV~EWonf-r8_lqyHSM>#YHk&_Xa1!WW>! z!_p&ouzgyPxS|s?QtH{iYKyrskgRG0h`crib-v5Az@#-TMMDcl$IIk+nR+cn^Lg}6 z-1;1pH$lYdl{kn!OrX=8lTs(8N0U;YG4*tm8qTFNrbUs35J`qeuxt1qfhHFD^hJi3+y231tD$w>%!Gie~JBUh)&;-uO9W}_> zv*WYH{XOBGp0}0{x|SWTWyi%N6a^rIJtY)He6nVl0#tgr4n)l^dQ~`ZnwshN&oiw7 z;i28H<*XV_CcIL6BB$0|C!$LNr-?Z13!Jv2){cu!+p#u}*B)IUZ&I`*Q!VNbJwjk` z6|5dWQqn(Hfn#cPOpTXn^woC&Zl|uo6N1QMgKvm&-?b>~tG%UbQRbRkUL%m81&XZX zD%a`Lt|&5OX6z`kG^NwIN13!NUGml?Z+m9D!O>K|8BKNegBmACRekAH)h*RND4|ncNyb2*=(PS-P@XXsF=+j;N3EY1nnf%c zBjfLszEk?HKfzln{py9P(>0;*j|J*@To(~%p1DpU!!yrxk}8hKEBCpx&#uEh^TXUU z>%}uYl?&FR;x|h7 z{SYREhqfWEX`oa6PW8W?>Q~JuDwk^fan3_DNp5zcbWJABZpgd=c^=!E!~u*OH@klGdgZv*>rK~W*zkIb zYcfi#IxFI?Ko8zLZW%alzA0VedQIl~+X?iUk zP~`zRF7I-^A+yjR$^&v-ui5n$7i5Gww(4=!f}~X<8fa2p)_Ascjt^qkkT)3?7h%o< zw<%H_kV4kwYC~?D1RRihztPp=A_~LWWETe%b!DSrOS_*{ba4Q~W)ik%*wW^wdqkCo zO;;K{vj&YMLtd2J$Sw*Q^JWk=8n?94pq&gwTyvgmGxWP$f5>es4+qpv((L-9X1$W- zEaNfChTZ!fqy4d=Ujl}Syhi#QeYVWY1LCxL+_XEmynzPeTE|KEG2crsFj4lnZJeUG zM!xN_;Db^j#_6~~%+?KDT3)_wdEtN@ILrt3TU>GIYon^F+of!FDIK6qslwvnC4E<2 zhR!>Z-5881fsOjjF^5%uzm#s=myBC9{rzk9dyTt8uKGCp>CfHq-jVBo|Hj@sGRpDa zj{9@thlh4|mXj+VPLMwwBxvmqr${p#`nJ{R=lga(FqXT0;F9{V%W1xGHP+9m!jFYrQJKQ?cO*b z$8Dy#a2bVhZTbZVq+#D|*phY$Y`!ZFNV`587Aw#`Y-wEtHct=-WIOd{(u=DojH{PL z!_u-4{*Egzcje{%mX^f{O3FkmP*|2Q)IiDxczepqqyVRWS0ni^Z40pNs@GMjz0<{7 z7Y~xxU=C`;nGWcu9U`ohb!{gD<0gp7Dv*%YS_49OWA$fvy|jx{jA@cyov-HDtDWQ0 zHiiI2^{8sQ@zYUdV8}WuE}<~0ZL`6FFKHNxMva2nQA=Bmux&LsK%>U#s4*Ir*+(ty zG=}41SKYGNK_*YR#R?*@K=`toq&Oeq!t8GPXD$S?X1!VxScXzxDtFS1x~WZbv!7`_ zZPHxnVU5S?Q$q5b|NiIufB*Kwzkd1gf4=)TdjH|WcfbBx%Jrl-eB}gI^;~`2(;A^M zQ5C(PHRc^nw%f_{QA-Lq(=>1kzfpo#E;15XHFvAm=Ulzw9o-sE{@OS5+ClyLKF)D_ zZ`t*@Glqb&kGhsOiN-gy|6B`(fOWwTaB*}DfxOKtuH?M}5JAZRQc;~GHP)C1=hAKg zm7HSqq%uR#h{0yR`|0s&yGuC@6ftdf-g2@gDV#S9z0!GYK`g|^ab6EGLYx@^{r;)v0 zzO~S1uj2rs zUfjnP&!6cK;VNIg(h+q+OP0WX@S}vhMFcef@;_%4RAuW(p<|W(ocRH{?kI5oPnx6*M{a zfe@y^*OVyOz7G`bmdJ`j!?rH%609|3vf+$0un*7)IZZVw!ve{nX5Uo%BooM&DdbyF zb0=sZYG$Xc;nS?ss6Z?X;sn~&>-mVS$*qvcl;u>x7DwgKIHxKm3*4bl-^zfp{k}JS3$If zC>Tz@Wh}-3LF^57^0%!u!81S5y^p)N_cTW(_da{(hkEyvieM@oK@VY{gO6DAu8S`& z#>F2<5Y+VJ<#bnuKN-gc)UcD&Nvq8M_w`wR?QZoYUGZjTriA(98xX(*5qIlY>PZ*gzYvS&g`O9P>Wo?8;TIP9St1|DCfhN>PZE)TV*oAmu+vq{yMuj_TDx5=hhL-9ATUI$GQR^$Woq9PYeBikEx?-8tTrVei=cPpr<(viU$<|l^T z)tKXr1N2W`ZpZ2JIgSuL1?|QG9|MW8H(ckRJN|B90eajq1?Ul`-xuF=;rStj=LOQe zLk!Q`6LY$WUXV~uC;|bTOU${%oJ-8LTKODR?L%DoGnh{s8AL;{L#=s(sWrr2FKE>x zW&@nru#1mMx6}V#|Is`_qrKL9(|p?XF2qj@i-RgaRbpF<-7^h#UnjJ?I&6=tBYJaa z;2OPMs^MsE%~^TTWe@tyuH422TgozI{5~0T!VO~};jm{JO0fH+e}tXxDH_F>jj)^C z&9j@<%`edcO>lqAe6YH=FPH-o3_j-xHte_&2*! z^dHQAaHTk=XQoF4n|%=_WpWoOMLs6bxRcQSy56;njy9 z#CSm8`S;858b3 zlsYNxTbEK=j{c2r1J6@>wUw+sugLyQQ&^e2<}JC=_{;Z0@&d?*7!*H!PIXIfW5mhab-RG>59DWb`cne6wz%k-R1b2{xbI*m0`M0JS2Y$#qi zlnjWp01xg%4en8)(q}k^3YGb%9VO})3_kGFID=14^hZpWR-r?lb4!fUm~L=pv{&OS+sa&alxa%^ z`1i?6s@ss&$}3~@>rE{_Qgyxr`o&|TCzMrtK2EmN$Ipu5JMFO(0k)t=3j;-epR;cw zwGN`GVXM;Fs-yah_8shX9c2pRV;j4mwdjmG}lH<;(9pgk*O&yLvZgx8CQf!BN6 z3Z!cdxHiUfSE5yuI<%^Ni|GR!UQS=SMnVn>a-1Z4z_J{B+q7j_Mjc$q$>jSy0PCrz;lTOT2qIV zN6p$;_zi}Y*H9SN0)dwYjAnNGhAjf%Bfu4^hgAT0(Qw#O%V&^)Ru8M-?@_~HORVUc zYPLMA0>5V+LT(sC;K@F25&Rx$PM4kXpYIpXqxYjfNWikvA3)R!g+C~dTFt&LsSO;!xDC}2F2fwx*3UXZ#~4{XgtiVS zxoy^JK?+o%C4wBFxjYu-UUpchK2O@Ymd8*qIFYEUZi+yPU+BGHn^1fZ1N#h9AP2_Q zV4u;_9r%{E7xI7{SYTt6T_}Z@XkP)P%>Y|{^~y?>wjbasz@bpTvP#B`Z!jBHf-^ESPh z_BCT_s@(z?b#Rffz9VCXKD*5|o$s}bkEQ&3DF77I3QA)05-CzCcl5k@d>%4+Mo)Gb{D*J z1V+8I5${b@>(~Xt8Z>BZOXRf-&Qo%pQs15u?1x(}{E%LYwzfoBQgw?A=hHi%{s>lY z5PNtP)2lF$ubO1upoF2bInpRHd|0ouOHs4H7MH{UIWDqwGJ4o*FEGLqrEyivz^8$m z1P^f;g>h{$100a!B6_+nc8H5GM}_IxcIR^V5a$K=?ge`c`as0^n|=vzMUXVn0uW$R z3)F|Wu~rJ=Z_6Rz0J1#^mN(*twZn>X&ZEJqvUu#s=A@CeuUTX*_uv^vA5w56Iv3u# z@Xm#IoGsVv!dq4A{As>^K+r7>7AnQ69d5J_kGudZyB*kO&#pZT>k{~6{!x1x%h0F1 z&%p*hk6#R=s(?oSF&6QE&uSI74YP?9^AiB$q7WafY*tN3QrC2+%tTK}Bdh3W2@`2V z2o?bgt=g6orL+2I6w&morIfG;3ule(7G#PS3Xo03S?N{jtPhhHS#!!;+;*gU>y=L! zm2Q)@ncR}MDT;74VZw)ex^392)mIT0uL5|xrq@vPP31YO&yhlsm@G<$bsh@qS(u3% z!fC>iv2G%@fP}Il!0^SwY2{a&o)#Bv&M*L1rXZoK$v5pu5FuSDi@F~NW0Eo?lpGBr zw3DMjbTo*UNnqpeq4{dX;RUGCiD(efk1^9$VXU>);8_<=K-%hv5FNSel@lTEsG{yf zh!U)KLLx+DNsqz;Micw`L{FKV@cC@BozIuk3Hm+fD%FT<_?&bqMK#b62b@;J)~V8= zUXSx{k7tX&NQNKgleK;?z1i{n`GH<`)4Rd`{yT$hb7g6uSJnHf>i<@We}dA|>0cL{ z$NBn>&i1DkGK~RX+@~xAI_-2K#J%xNcpg#|MZL+2t^o;S z(nZ`!%7saa-%0n@xI) z_hen0_ceZ5ul`z1C&+lX)?Wv={!$cfzpYlwo|8X6uU9Xx%MCr*(LGoQWmCJOHCODS zJ98!}hQf}UAaTm`vXp0Xu=31-ddv?(y7Sm6PuDl`I+bU-B;e%aek|66NF))kvnX6M z(QCITB3&!WV#>=nlj7n+Jp5q&$qgA1q}coA}ym5@6eD4Zr{Ely+QGy^A@95zXZttiFIhxJVM9t;~7X}ttS zDRawwXm*nwIN$E(LHj3*=ezakya?3ef+*s{x^Nh;W zCR@_#%hw0`ZSwplZA!~~o{3UyiV}?qQ34;#xk!?}ul&7}=58bMfOy%k=lq=*qHRyl zmyMH9j3e}N=_Eaw+~}xbM7oDC#fB z|B$T;)XQWT?a=#9zjPBXh^H2>ge1&Kmy@n~=_(p;FuzjcO;y(TC{^1ntPu$I)|hdo z*#;vtw$Z-gK*3t9D>vC^Ek?0lEH^Ru#7n33OQ)?XH`zUHiS8n{mz$JM8P7RkR(1@0uyEQsOMmyYHcKD2xTGET(?N&hKFwO(vg996b1Y&>dN z?yLfkQKn;ruPJ9#MFCl~_a+LbONvh<2@927>7kD$O7mVOG{wLA9El7N0dwnv^^>lT=<-wb>ppz9>(c5k31TMr(M|l5?As>lBNn zbOPF|`XYGgA}kezK@v2d14&?3kv+_7)nUGPOyzBzi^G`xmlX{bDB z^*K_yV(z2PQ;HHSTg%!7=&EoU>(Y$#Va5KE)16^UiV1eIxlX{;Tz%T4bXuE`$Y)Y} zTgLfg_!3p;lLrd3$5A5M^e&5KpT3cUDV;^B93L0GZz|18r<24Wi8l2d#xiw06!kZa zEOm14@@C_)XJmUKveR!k;dwbDk5I37==z9&;64GunNP>*FZ>F>(T{!n#qk%zUlfP% zVeG(bS{bb3W22XI4uMrTJX!$*NDRKSo?fNDaG zIqkn>>|gQ}f6q=aN>4VQWzHpqe!LQ;0>V4HqzZK16|dIZ1BF?w}b#z`q923YeYh0RvTN)I!!*J)MPO*Lqo{7wpqrFk;r_V&q=%B!Y< za&`Y?(Y}AOxU}}kf3rF4a(9wDTU5JSOF{(u7FRT5W6$F8$pgmO>M}cfw$T{<;*D*T zcB6t#7Z^Q=>S^BYm#;LJn<>5hgp;TX&Ff@X$iguXqp?p&v?h^OK9pMMwqW5QMR3HkJKni@QeJyf z6?2kp{Ps?FF~k>_I&jLybmmFHz}J1dL)hO}U*<$=OY)xoQETJ-!iAE->} z8Rl3JThE(!3r3!A54q*;d5dO3T&C2tb^MkeES}aPSwiNao8EYA)SAv{ri))VNB|qFdjT7noI)y1KgZoPBeW2g_rm^ z6yZ1?x}3!AT)siZTRpmy`~J6xuZ^w#Lx(zGCiI->*2)$_w$HYJGZWNV7- zgRux`Jprs=KP8m*RDU|phXmN3Mr1z7%nHD*lzjVPwO;&RM2eSXv5_BBpVA-7=Si27 za_F6ilg}7Y9v6$QW}+A+^Rk~eP(EE-1y>hz#J(mx1q}a&R*oy_xHg8q*y#7&y`m%b z{h}-dsyxWmbX;gnN9;%A*e8okv!b>XpGp%-MU zJ27hb4?unGE2pi_WAh`zz9??P(N8s-$o83RBo9sk{rY1*QHa;xs(NL@ITP-`ChNsS zV#fEwu!rGzmz<@b;{q+lYx006=N^I0UA*QBJ1WFR+Wvre4LXpRvgG15m(9TuQ*b*D zeEQ*s8Ka2kWrBk#aPb;P!qKa@0|7M!%*AV*fb}b2I#uBW%+Uz-AFlz>(g~R3sXAJ` z1};EuyfYWCaq$`#ujw^j11IP3cnwg;*)k=Nk&D+{W4tB-_ID3$oP=YiSZ+ldC;Q_x z#Bu}NXX4aLbpclXG5Ns)g1m;-tP(+9J!)Fw5Q2NW8uTyG_sk@Jq7lPV-KYG1grQpUC&L7=Pag3@z9D2#K6QZa34t%U}i9L^DgZ^`~7f)a6H z2rz1)X4QHEwU9Xy#Wmxj0@}O*Sy|Pf%voebODOHIKZV3(lcezj^SMh=)rGzGt(367 zci2VKJrpIJY7dPFZFYl%7%<)j#Z!zX(*sXa>YM72m;{SJ-3Iw_wOWr>FY<88F+(#l zU9L8TH&n&sbVZQp6`mZE*+}|YH9>=aK<@5)F#i9GhW@Z#eZHIQD>t2{pX!141#{7q zhsVmnV`t#0=id?41Uzwj0v_aTd$3N_42=Gx$antxR_r?`p$1Vk&ZGYrRnGr?!!qZ_ z^~qJ0&~aE_2)%mU8be{2PxMxsQfI6F{Y-dO@wHM|opU4YH2UETf^%B9*)vo3O z+JI>NC@gn>V7@-4^EFZrM(S269@+2xc0Mt=-6z}aWcsKTbk6lIouMI6yNfOx3C$?o z*6B4@Hm_Huw~Fe7K0jGXebPuZsV^U{c6s#AZ?2kh|6-6935qW%6=7YZ+>Guc zNLvar2gn9=v1xP(iAS?5K)dg38fViS76x!O&7f@>^f>FurjgdhF^rlSWduIoy>7P@ z_|J5e?jk87o)Y9xNHf=jS>AQn?ilW@TZo~3LP;E+P(n^)Kp7=6E*h0~|2 zMu+LtVQiPI8f?3WYxQ6cN?IklBjKr&R+Hyh*&YQ?ZWd#sq*WGUJENS{(PC`xpJzJ8 z1_{1j%TLiY82PF~{>r7VoZWh!b}MTXL8~De&qw0bBL&SzBK4^jROjrQX1DHSB$p#9 zl5X=4FmV38#Gd&5_n+|oC%mupslk}&B_P@a%RX7p98CiULbvI6h@#|KAKZtT^-)G# z8q+|_K)O>TeWahTFG511ZbVXnKFpX(y_h@>5G{7hW^zGS;!~!wZZ9f)#N{$CG?q#k zO&;7vL2#SCLUNONq4`RHUbRIjLrHM+OeFziIRuvir%rHP65wFL^?4?^cqPR(OhV&T z7#$?II(Nkpixyt@{FT$VE_>DkImW|UU5pn$373}lj*>T$|_1DWjv zNg-8gzXiX1hGMUlz`%bM&j83jZh`QG`-+N+-1pM`1-WoZiQ@ zsEg7r9OLmgCNGX5O&iwxZ1%p?K9 z+6Cr>tc3aw0E8M)f8GEP(6af+Pk8*J_iM_9n0*qyEw`(oPi-dnl=gn_vN_U@Ym&rt z&xCm-*Oi{i{Za;MzGQxK&6E*fQvErgy97#Qj?*-udR2X-iyxuDue_pWbO7(G>Cx_y z&nQB0L-NDCWXzyh>VPE?g`(+)dvCF(MB6F(^>I!s>isD3XkH%H^ZBOKp#{e$i8q@+ zWD{eU-*F(uWD|`^-GoE#%wkE3S`>U*HcGLu+TvH)=gq8r#U5)G2*cj1K0~_EvM8+( z4pn3Aoib`!?P+ebShVITP(o={5$lJ!sT@*Z6;x+59c8g`Tp@FC>o*+rB1ljAi#!6s5m_N-& zY+4OC1p=QvY>BAIH@)T{#;Wzhi`f#t*Cx}?lQo%46*d#h=@&YPV`^4%LjjEh#W)d+ zM4i#U^`cJ8LjEY@X=v!drYK;T?KujVVv5}(*RBr7Ii%VlWl<6k`ZwYUxt~!KtJkfO zz~9Yi1A|{yg#(_`K^#+ptc^7udEuD0FoJ!-E*Y@@vv(QSOwEVY8jLxhr6^C%R35?+ zH8q+~EQn|`k7C$rl4T*a^S?H*^WS);_F1*1y*KS~EPZ?s?trwf!a*;(=Ml^vlQM%F z_S-=_Z>bq3r*-XF0wS_3=q?ZJ!I?2q} zlQ>i%Dh0qOtYhtH2IPMA(AOIieZig*=q=T z@0l4=f7#CgCVgj%J^?WCkh$S?bCc%m5>S$7a|3`CB2Gv_i-AuLKU#7m!Csd~N+>R% z`Y$3aA74;%L;;h2pRc#@>uX_2UkzAN!gL;u0hbiB6vcAJsHEz-F{WhnVe&Hiy|kbf z&zP3wbn@~wUrljwa-tx@li&pDXS0EkYZ83f zO@b3jFeGG}B?uNB&;c<)usRbQ!V$VA!LEmElMaXlh)%*)i=-RUz6yT}Aae@Q`Qi0x z@(dva5tDMV7qd_E=LZsG_*DP9x}z9E{_8ib1=#2jOGp6MgxCpiuRUT(%Q^u&i1nVZ zqLh_JRniR$)XU^D>p?pTn9(EFX)q^XeK#SNeJwKq3li6a*fk+;8=n7TK2h!2dQ+b= zh@J`eUz7D>0?lu*)DF9wY{?nxqX}_>fJH{kO=(rvg!np}5XT29dxPFxP)x%Iu*4su zd+M-3CF)Mb`i2fj!R|9sEjd{4csbY<=@e!YS(k{#bJ$JAvQy<^owBc2_Q`?fejcvo zUhKPwoAW38@+S)!0id=_Yrw0>sE{`tWwMW1-os$zVCt&>tRG|T#fH@6zYzs>#hEVq9EUb&Sun2SE zhx8L4sGoGghmqChEG%bX^}GSBLOz6rK)06+! z8qx#(>crRCZ++QsmV6ti8cq8R{t`{er`=b&C4<@7teO_>|U)2#4)lKbYw_4YvMYs ziMWr*V&E5L$>nY@JhB)><0PQSVjvFO>vTxk=MG!qa<_e_)*zs!fH`o00|)dgU^;Z| z1k8o5`v(W08=ey|7hLW?xSR=?&R+1u0q`9F-vRLZt+s-b(?h%_&;GCo*&oWdxa7~Z zg=+-sBU}UOMpKj+!KO);5O_Y9Jfgm{{Jm3V3(qWEBZ6@veEQ*snFjAseI9SRxK2ZV`E6 zhec81wmMg~*S9T|lmyI$8yxdSp8^J2ZYN+4`*1WW}RsuGp?eYz=&zZ<;n0q@l8YO=x^w>MeM;ntff!qd2HmuWl|F@?eY}vY~8{THmS3 z^TzUrzeztd*{qjg#8DfgNp##4#m!Mz_$&3&#l~*-QK} z=vXgsb4(R+s_e5lFnWUe!T2VmDF|o<4jo5X>KdNk)~TC_v+`D%KmD4$GX15zS&Hh- zQqIC)HpiTNce341rjNP_NlwNqrFICtro;iwQa;XccYmzu$vp1anLn!!9lR<3?VD_F zU5oZ6#z=mgK7o}qBHhb8-ONMHsr;^eD7n@S>Gs~W8FQ%n4U34AGXj@nPhaylZN=<` z?V1Z4Tk?kyn(vnPV=Tg#$$AUw1vMqQtFZ3{-dIGTYT<#F;b{}*FHM>-XB+gJ^cfD1 z*WNtx41*=LJe3*D1{#0cBnE3-O-LU6z6og&p$#=nh?JK) z`GDc3jJF{gaCHl5wFWG}i+AT{Di3-2%;Ztqn=tgpG1+!BEqfKro0_&^N5l4R`6~VC z?ACS2D_~>cQ?Lj6wSz?~=*l_$M84giEq~@7!^R=8JR+hTo8hJz3K9%_&Z%Pm>>?E$;6LBK5qre9*Z{&Q;o@ zZdB;j2;9D5+*V2Pr^R!%FBH~#LaW#9&PeoL^-w`^DD~aLW5Lgpzeu6cb}`A^q9_jr zQ<_GMML_Bgn5=}ZAX6UFg4&}E+1nQRK0QsIXXC={)#^hfXKxmeYMi{ue!Nco6h-eb zs`OAfNOkn7VP`uvzi#LAHGGNZ`RjH)S>7qHb2t?%pk~elgna)Sc$=!TO*Dn8kx1Q4_t=5~z z*DXox^H{yRoV-%NaYm}`>zI^=RNeFyc1!=CUoLcj`>GTW>$XZMqQ)UcEsq$^c0O8q ztLb9{TU>{>OIY-+pgQL}9xZ<}8A5zKnPcvFLB>I)7d%}KQ^R_lo@ z2}#}fcLaoyim`Asb*N}g>Dc5;)v<_syWca6AUaAXmS^8SlG}wK0V0qTzg>Kpy{gZX zI@tUvYf^9(#(_uLQqv=%U)_QWdL!NPw{P^**qcrGAfFi`H5BH{k_tteS$;%)LVrNn z&PG1li@kA30Y8d}a)e83f_{wC$I_qE2mNBvC)O*{>Fk)X@eQYNu!DNpO=59$s27xp zLwa2$(hI9U^?I}Asgs@o*j*w*qf*>F7`8iq0Hj0=*M-O4JJ^K@nfeLN&gf+_Q)z~X zlu0zEEe>LpIY{(U+96XKay?PUY!4U53~`#SSLFFhS#u!LK7x^?J21t)sE((VGCFC& z)2TDp{Sc)+jK^a!U>MmR z@XOyPFX@fZaF46?;{QVDE;H0uuKt-+|AcBGPq#zA(^wZZ#^Ba)97?Y4zt^hSSknx~ z9(g*BXSS*L!;ct}0J4o#WSAL!?elc(R36YD^N9-J_6C%aTV*EOe@)hl2{2wc9rt-v z%|d~%ia#fx%-2G&qk5 z@_ie#@Ro;d!QW*m)wx?IrLJV5pOOV8Vjo2dA&M60m*7?e$$@gJ6YNe-ot*Y1r(vYz zG?miMU49A-*0E-fjlI}0SYIWBH3D&m@GHhiDN^hhVjV+lp9G$XW{7nH<_J6wCh#m7 zY>6(BcLtj?*!nTpq9jr7@2%koA0(xkuE0sDlhS^qG?mQ+zC|vv2X59zTGv^Fj%~X? zI`=}u98^1-o~vt^bKwnh5^qepWh}kTUGe$hb-7FhBTr^<5mGJ#Sg&}@5$X6$ITVs8 zcoVDDlM=S<)jQ;g{@>Thnm$5#ZzXkzyKoQe$YrK4a4%(P?T*zsyV(CkN4Qxc#y26s z)g1QUVgEa0|0Q;Zg#MM%ookY{=_Bxw)74^mU3CBh%pLby3!vaSnHDklYGZ|~lVywN zQv;CQPX9Fk*ajiY*atT%eSZYHE!r?Q=@xbvFs5Fz^q_>Y-Y;Ki+|88UUV6E^kSDqV zG9+)fKW4EQ`(6X32+jG1m6h1BHH-J@XuJKRfs6@b%oNuuJ%pif0Xfs8$n9b&@j>hM zro=9%ETqOrubU@Y%eojcG02j+r-;%REqp{$bD}h`shtB+TImLRr%LC#osic9q>Pme0^*f^Y?@p1L}ksNVM<^!GlYpbe(LD6Mhjg{1b)CtrC4cERDpHH*N zc2Y;`q{L|VV+WA-)NuB2JM=qLWXM>c1xzRi|p+ppf%R{ho5 z#^M7ns(|mm|AhBH;r&zt=wv^ICW0}PAla^@3DKJC02SCDQyFKVUO&8d!|zzfAL*^p zw`5X|zAeoSwAGA`-qFE3JwLjE0T29`vOEDQ`_bm3+yy25{cD4+D2eQ?M}IococGS} zynpbH8_50Ze7RoD@~P3iJUJ!yDKm<0W%R7hC;*(2y5i1UpNG@51gz~Qll23nhowu! zeCQ)VlEoOB>|9R&p@xVonhaNw2>*r|rRtRZsYd7m^u`0J& zB{9uYGyrrFV8?a!NnMS9t_+vgk;a{6{_lYgDh91OPuBEEZ1HwSMJLOmC-HfNW2KE-K&~7r6okUTs=SN5GB(| z90H;<8KOiE3smkG7lR~(!j3%;K3FvYQNnY3e(>Al3A%K?f1YW39x{EumY*^hq`eY@ zv?Gf?Q{3X!+x@JWv0js$%Uy`-j#RQTw&_rm$Wu$|0H|<>hEv_FAD!fK6~C_Hw_n1m zSoB4BMS`kRj!saWp!Q^@=hitH>f!ATx7g{ex}TA(<_SzD2sm&<#-QtdR@Z3hsGXKv z`?Dd&Y)^{Zw?tRbG$f0zO5nbWuDa-|i>@9LU8VRB?Y6HAT4(D!ioX0g*Slg=SZx#{ z8v}6&7~+tNW6V23E&#glbOeu_vKQeHBJTUyGXNs3rOhA_&{Uw@=i?Yw5#n~hRMrw_ zOcrZoGBsyLkT3<*@0~KktaGO;*7aRHNL-=2D|B~-?hOjvOBr`p=sv7~aksv~^jvkW zlt%>ncH}{>ad0o>L1cP3@}LVQ4@zS)rR*(w2A2W-nRH&FJE&c5jToKqmbNkfQiPq{uZ^3rz;Gt0v3suMWF{wmQI>8 z<^^LihIuw!gPk6fvvvxIm;tbS2J&ny7e3m#dcY;4Kx4?EyeC@puTOHLz9%hW-q`qM zz4~i4ouKaCm4hCPN>;QTzpYlwo_BnLJHNaxH}qsj_vk+gQ?VbulY`I+2zaRV08ZVQ z;@SZpBfZqxa22$kIsHVweLa*vbFkT}ZsnNh{NWj7=TN6fo6GGDYTx9GC?bdgV?psH zkGJVlRj*d8^&|t&cz*STIuXeg9jwt^4};RX%2&Soqs6Q zQ;=od1u~)lap1Gg<_BR=2!cX3be-E-_=vNzFV)HxWKs~Ec?&h}2jU$MIi>P%nD4#wNvP8x9l78nu=mgN&BoxJ-8p7Z&!Wy=9i2^{Ug#hF zy<9N!VGg-#DFy;gFY!6v?G45BYyUR9A~Ls_0{Ja*NqYfG= zi7+B~?clTL`JIf{6S*xS$M^CiaRME75O$>QJdX3dduN<{S=u3k<#kzr43@{sR%Xp` z@p0;BQ_BrIs?LVNE=!l5FVIYnkWPeK0p!~--n^kN#Pr?{TYh_hD|^`WVF*~b^+P+g zzHB4Ynp$79r`8w!GwYui)luTpw-+9e08?a&ok`_^?|1RPKuvYG`jRi>Jgv|D5a~5< zEaEdD+bXZyv2lCdvU))eoLf->o^Hw1eVN(5GbhN}p^kq=d+lN+OxAFl)`kXr03LLc zgfjii5Rn@!}O1y7G=u;UW-s2He@VPb{AdL^S&6F9Qs(#WnXUvR?}M{?>^%j z{bObOnE;IyuCup7IbjFaC5r}!VkmMcfN!M;iZ|k z<4JhSi!WMoZ|}&o=CS1o1*gz$%Hf6_Zs@cU&A9QRr9_u9(Fj-PN}8bGbO|mO?F71K zfd*0t;;UW)-ATB&^dID>xfiO0wR{0&9QP<49mlOiTX8CEC)(QsN+ZKrNP~(j>PE?D z|1C{weIH{DZB}n?R<8sWKM};4r;!iR3M^1BFEk3$NptF8xtEZm7C8uyvjdK+Ht|~h zZBd&4AA9e*+_;f!3qQem2gXF4e_$I`xQF)s(eAdVCt@y+Y0q?g+u`VdC`#hCBRuvzHbj!so8@XceVC-zFj^*a z|@k)i3>g^7t$~?tGmk)8S-ZH z|9j2MTj0e;Ka0_GC7A*c(=DC56?7(3Gn1K(e3(-&R>>4e3EL*a^7=^Bx^E)A@wLvO zG#%{u@&0AC!ruFlX#GZSMRZ*enBx0O)#I7CEH`IDvreV!_}GHtt-QK)PRm;w8=$CXcOUWTF@U{pc?$1#g`1sG+$r?Tra*%^0TRR844{y zksmlgkmMV|woQ;Ia3~bNpWs|V1UYy|XUA=7TlhupWtDAbQr?DtD%Kdgk51hv0G#00^dP`&J;HD8E z_j+n(>X5n9YtxsWBi%ra)gh+ehG<+AhV|FMc|j>&JYJL_OE;(7RJO7Wezs5rDYU=h7(W-VhglKeyqvU0FWpgMg*7$LVeT; z>>JqhG7Tj6v7UJa@Cq2(3XnuuWsgYz6|G=r^)HN!3aJk~VqU@XY~L7wvJ;*i`WvdF zPHId2^|{j)x-@-5u->xX9?wXt!2_kkfauQ}bs);k&4&;3r@Lzto`j;H=}FdnNJVY` zbh``t3*JIg8i?g(MQ)+VS|d3Cz;2i@yY+b*z>{`decJNPfpS}+uC;z^kCwqAjpOjV zO~dASWnoY^uS|F{aA-H-fn~2XuuL&>@W3)2SXN;A0jS`Zp%V z2HO^fBm_D-jvbF&@&Wg6xVySq>X8-7PL_Ps!psT}xh1bl`y^^}zKhq`UScaghdI#C z)kRf4W|$Eu;9wtDvU&Fvy>7mG6SvrX)u2~x(A`))$jGA7MQ{-^`g!&=dOP}rCy#zf z7poEZ*+m)M0!2!C5qd_8^l21F8(q(e%_)!eXC<*Rx!`JQ`;!D&Pz~Btv0j zlE|UX>R~qs8TOM_$fj^Ru&MtZ(6W!S-UQlj01;V2Pq;d44Kt~P1;n;IM{Afl8Iy8Pueh)vsvy?dR{GDWh-htp%x|uz<96NcWaFzB(lHb54YVD0bLWl`pno z18`{!&g2STFX~0>NSlf@ zQhhqz=hvqDn&_zsrpJC1B4x~a%67F6yXw1{p8B5bLr+bDV;rD#LR2PfPZ{CUgPsD5 zqxCduuBTs7kX_L5Dx&Ezs%nx?!UGVEMu!Z%8j4VQR+`mklNVO*M% zxCOjXJ|#MhL;N!kf|*sK?9zNO`w!U$dzHDN3SAf~ksy(PeRZ!?oY<0zgAvHywa`!+ zc%cKRqfNzi7#MS^sk+Cxo_<)_F)VMOuh57NUDn{~%#N{N{7nh$qk8?({ORHQ{mWze zR6rK0ReCd}Ioa7m%6EiP34+zCU%qD_JCnP)vt#w>mQ4u8d-nM9_+<(kHd|>9P~Mn$ zV>+pgiBN;J`;t#7shYiqJk}0-&w9$6NEQA%UBRG@e%!!Bv3yYHOi`N%*K^1mED?<_ zq_A&$vybqQEem3YCTVwQ_i0Ub*?MbOOLv<@KQ4*F2$^saU`0hy{jrqer&F?g0|PNeKs+`f|E4McMHh1`Wyzio+-#xct|1=ViBJ3PsEl^@U(yxwIXc=}&E5b0lSjp!{C9yTBU;|=hb&*7pC4xA_LPR=BsKvb0)!d} z=^$r7O&zDgxos}Yj>6HGsLy=op*Wk_w|(Sopuyg@K{&PAL>_aN6)>7)^W&(D`%z33 z_SC{Z=&8@G=a%f^o9nT`a?iOX#S7jswq(=Ll4H#**+9e>LH{BrEEDmmkB=A^ix|b2 z*>ZAE*s95V_E6^LtKR4`Hy>i~Iq;@R?+$S_7n2pQwi=R{n{*o1yKA#QrpRDF89NfJ zp&XID76UgVU#BTnx}9@*q|uh=9B%xROyV zCjS-bs@Y^(|3N!d#)O`1>C1@ z6dNks6?xM(j6cm~ql`)}8^}c?ft9ulRW@$eOf)~HlRtF1@kjgvcWCskvL}4K&ig}@ z+;iA}tT53|>;ieQy%i#G9sTthWyE7CiUs+30%>GwpE);G(W5ti+&p$OFDVG(mC2V3 zppGJ;xvq&5Qlxx@A)Bq|Yc{nh%@&Rc$i^~(At5gc;eEEJo#M*bbELI!jSD&U;X+c^ zc6(GI&2B|5dYcPbdJ1Q&&y|wFr;3Wg6e7n5w~FYQfriZw+$%}o?d%6OE1XNz)N6Bu zgyBA2M9r4D#o~CbY86z=oZ4zmbCqu{Fuz?a=3hr24Ag0JsX3)*Sv-{8APf}87s451 zf1r|c*r<=1rW32L4qJshegV2_8*TMHAf#2$zWmI#@l-?W{%s=)2bpao;PskqBojD} zVK(gnmHwhc(!nO1_~8ZSFH_k9WC9>Vj}q5p>F`>A8Y!%HmJQXp72zvZoB8}vFNgf- z&D{%9REzIKBM3C(qaqU2v$Dui_PFYfW z4f(--Z!Vp#c#KM(AU3kFRnk;M)-yQYIX`3)7Zh<1ch*l~B^3E#zs^?oBefQmYZ-!X zDnsyjlAX=e!xniJ;}FF}ly)O}nR7`L^kZ&q$Sk4=3rU8Fqk`wNGPfV8N?|ijD%_~Z zNfk1_WY4(96ReDEa4iWgpiC@5_J=H?68DA|Yl2YJ$uM~2;0_L?;d(5O!B5#R- z!Xi&jI?=GpdbSs0HJ?AIf0hR+?fnh=(KM@d)mHbyvnlWG*M^z(vSk_+uW3-E49{-< z8&;t+SE1fG^@XspCieaFCe^P1Wp!g!zQTk@D~yq{mx#RRFFn-2+E?<{GAG&tgsm~#1r)YNz@EnZ@j`mNsyS0iv7$Gyxzoof93{YsGaPiLlLg>_ zCjum$1HzTG%qG4dEa?H{L+(*)EKtHcrn@YBZ`;2K&VD>|Ud{hP89#Jh^4YW1~s7spZ zfP0N}DU9OC(isHnt1|Rl&u_lZ)M+}KEeo4*jgiS1C)C7!>nN+o>H zk}P1MN+=^zAYmJ)+f{(qqui5LcO&Uqz#l-pzW$!h=gTPx+}zg!DkTPJ$;V9%1ima_ zDJCHQ&R{=&&BaHr?C868h^31Qv*) z_)TyX(U<`u14)S1CL(w1pexzV#G-+D@bFK4A@?X7+e)6uTP3)^g|CxM8G-D^i!o?gem-`DPOn*fRcX1ImWz9CH9u=2At9>xztpeNat%%-~5y0}E|;>u1{J;xqJ zll@Yaji4*sBAp>g<1*P*mB2SLtHuPH-pH&P(|F37Glm3g?My9CtDy9KEl+C=Pq_&j zYM)Ui9^do~(~eX73~yIugV;N!&*@ALrX+sm#SFD?6;fqr7#bG{JujWRnZm>q@`~0# z`fby>NS&+vU11l&S-h=!@6|oFUqaeYwxrzZvWR0_Ff#)5seBVc7Po&blA z`>p)|xElDg%{#K!0UY@Ad@-5+126qm{&h7E0V>&`$+9BQoo06-$8=S zTS(k|3n7=W7xV*tl+kZ`{>$%28vs+;H5lo!1?jQbgY!#n-+%p}{&pvye+Se^``w#3 zgS3f`;o_lq+)UjmbQ3WgZ z6O^$Kt7*cP{4n&o5*X}=m5HCuaGszzt;5Cc{>ZD+73{yLZOtkK29E{^@U)7v?7=%E z9}|{vHVjCHz@8S5>}0ULHl4L(4pA5wjtoH6HfD3kmF8>?XLC54!`YnE>)WYu>*E7w za~dWcEWTfaF=f?xAUS6p_V-yh>u_dShxkZY2irO$VmIOl<$UL}9F#Fun7{;w5p~cN z4jTq36Fjy^jfUC|C+ShWIf#U#2tkJ)l-L&b{EGU=Jzhk@w&>TxmgLN`EzdBrY%j}4xK4$abj(Ejs!eNY$E z-cpQ+)Lp5KhXR_nvL(@7d?lqmpKsDtN-tOUep-#zpVpyyBxuz=;>T^eM_v#5JNWjI zM!~OvD~SlZ5(mHBh{}zq+=$AJsO^H^N<3N)i)#biZ4om!oN~kI>v;_28ctw9pzud2 zjuSM4iAy*~3R+ICgcElu;n-dwHKwPoSBQ8qoAe4jBgR-xfC4m1T^Q9Hdyeabk)zsd zhh3F4*WoPE*~8t-6W#r1JwLNWf?`J_>^pt0ABeSWsUcej2*)`gP;oPs>b`HmmxN8| zC{~Nv-5oLmeIel12PXuDfnoxi!KdMVq^^?YmS+CR79M&4=;G-cyS_7H<6Yz^H2?8$2H6s&}DB*-xS zd%9T7uw=^?K|Mu3!#*Li2nJs#)l?-JguvE0UN~f~tT^ar(i$1Q?Bd-ha(u!T@}RY| z%eNhCICPeR6R`-d0_k3f*ppX*?_UWQ`8a#vHcPv0$PEx@O_m!76}KJt-KcxX9QZ5d zz-JD8=D_bOH-HR49o0Rm-%;JEP}Gs?<5Vf7z{vql4jilPCW|cQi_u$ez4vC4pG`gE zW)zs~)Lbz?b|NBr-x?bT-*@uwlWMWhI zJIBa#=442j6G^RXub4S$fW{$IaZYRy2gnR0jKxtx=G;KX+<@<9xdFg%aL_0dP^B&k z3z)IQPk<_RLnc=}OFca(b&>CfM3C$!>R(@6jU%Ej^5ZLj#?;TT7ZJIUN2oEMXp?b> z2ZC6Qe(R#bc90Ndvha#g>l|zV4^iSf^6D#6)#r3BNa>4dGsL|niOu9&Ei~9eauoK{|{^88VrKiY=#s8UZapQ_EU zR!AL6r(|unXdp{@Sx&xk^7WX=EO?2Ndm1D%na>OYBXUg>#rJ9xg)@$kc9k@ZARac~ zPvz1MFi`R*s@pFJyYfDNufnU**gX3IIaYAoQtS2y5 zH}m-dX~>6$(Ks0p0|ItF>B|jdo7oAWb>91Sv1GmDH>>X03z0# z*%vI4$8>3Cm_!D}6#=|O#Q7dDT>j7-acvZ>FUcuh*#Sc8Pt#PBFdYa}^d())QpzP2 z0Ojg7zRTsKGVnGXMZc;0^Mw|HdMFbmeN2?0$lxiWDAIxSWi`K5bWAaL{H9MgqaVd)BEM^#yf)C|NEW7GdBX7#I}>GaxZXl|U|v7(=!L~<(km(rx)VN7 z*gWa(43oA;1|G@~c*Aj!Py#H`M~#wQ6?821zU1gw&x49$(K0%gm9%38EDEyMDHzYw}jZrYPU&9Qx=&=;XG?%$HsNjC=aE%M5AC2@a@Ui{M1AXr2~{7 zGR6gRcMj!Xg%t-2dSByURnrY;=WuO7az&D`Tyd@A~sg2(pP={BXXlE9@I-W_@+&rJK9fd zGxvtMnQvSAwr}0_;Kq9{uY7jnnaiT-%6Esk@;BfvV_QIie+4HyVB94MnS0*3=bd}r zx#zuU&pYLdH{({^xVC#8=W5X|RlLns0@ZB%dwKiW^o(+zY11>xO@*7D;q@}2tJQ?A zNVb{K6*QmFMffxx&{g&r49sFIV*o6;Q-fJ@>JlTOninzous(?X^6z&2>O7sAr&AAM zI(1M_c^e3^XU|3XR2_C!x|E`3Z-TvvgAVWN1$Yr#mK@;jybZvM^95RL%F`J5)mRc3 zoxLvhy4dR~l)I~Z4m~=g*)LU(RFO1n@kxi|gI)~X^qyXq@7H@)m z@tOyMc-;xMcXm!_1@lK^pYy?42{3=;k~8Ly(f?hU+oU3FyV4YH)UHC{6JqDahE69zPs=0uN5E4MggvWF}?Wo%IM| ze}0AnHhL%ah`>dtcy0-xw6^U!|M~y!d`9_gYRko^)74KirV5hYqtHzOVvAC@^tsf1 z6dIxG_9qJ60C049|Kt6S_rC+}f8`Qrr~S`Tk@Eh>`yWHSI#51PB$-n_$QUV~_B7~f zumtjnVhf3M^*P+=d8Un?inKv9J>Va6;QLt`2nSslb`lFv^h0DRBd9KCDmhcxwL3ZX zul$Ibk^^ZER8w-EvQ!6NsMI(=@Z^<8hP3~F<)na+A#y^>ReJ7G`juZHIr*|$&7aJr zTQp2UWtiA?q{IcC4mD$bJ^g1XDSxt+f&>_3MX!{PQpW^V9p$+jsAN`uMSuOUf?zve6D%TSi@!MXCGE00mix zg^*q?=eI0FQ!61`ZGz8`Wg*#;PVTMR4UarabXgzor*wIr7C;K!@6d^_`bj-NGIQbX z?>S8$r^wC%&7@#V#=2S%Kp3LHO%7DNkKZqbVOz6{>EE>0V9J7nu|E)y4FB(($X8SL zITMm>ZDmKl73}QqugLjuh?ecnzMuuBP)Xeh{194m($qCok$k*|%Y>cdTTEikG0rvOK`>-{(GpB$}s;+)0KC)kc|<0ULDM zjanJ6^yy}jd+FxtO;%XY5RbduagqE#9%E;ip`$HpK3ay_lFDQFC{m>)c)MP zv=Qi))H<67k91pCQI|PLggaX|pQhMAULc##g86(;0<#7*!|l0mR2B`ln(T?bn-Jg> zT5i{pIe#;|y#xmJGDbkPQBy=J#bnpY0x>Y2or|PfQsHirR#$VHG ztlzhb#r*5&!+bIO51C_#rm}<3vz946>)t#mFV{;dLuYfysq`Eq&>YoKzC}b3r2gsx z?P#qtt;^13D8D2OUOtaRMp!AhbcXUXl)vk+TmtT^VYy+(HA3tn_F(gTv3&=TD`>18 zBqp6GY_GNfmYl>lwu@SyulgKroI2CSsd19`pwK}?qi=;9goUGEzgCm>AOcaC7X#lV z^v)MWuptvH3aw>?9^h#?1!kOI5y34{#nLK1M~Lt+2aL|FrTh^CTZSs#(v*h9{5rj! zA=*@BGfEB(3+%j$(}ub4nT3^ESle*lyEJgHZd^`%?-8+4)}5+lXjMB8Cy6;p{5nbE zP2PlU;H3^$_9obyU~hss-I>$9R@02O?`y zn2H>vM&$w5WwNGnYr*hZ2~HvBC}KCGW{RS)BQ=wx6u7D9gs9*#i9D-lcNJA-997Rj zTAa!_erSLC)Eoc9L57q`QK;zq3939uhL?ww9g8mhXl?i%N(Z*q51-3DhYrMkl&COs zz>kIEZaA|^cXhl4?&$sWZZVxMH?bBJ2Cqn}$mZ=wB61SoAShizOf?;pC+BH73>^XC zRoek)-c|5KKmYuh9{)^_XYvrGZq^uUNhH!yWZ{EdO-->gEvNKI>N6=VC_$un3Uqlc z3#gH<*v@CycO4Xqm97XX<({mr)Ows>0qt85kv?JXj0kM^q8DQ4!M+3clLT`r&EL!E z(~_>Ie;Dp364?7pV6_e3RCVQ!?^7g#V?M+h)_LjG4&Ij0wuX{UbYA=Wg+yhQ`^yQ8 zb|{0o;Nr-B;?U>xNt(E6=+GjH$#A_y_;I?Tson5&Zh3M)o&2%ZwJ%M4Dm*`MLUI$C z^hB-Uk4kLsNNlzTCEx83pt|cD;EF=utV3Vzkh~-Ej(9>1Hru=NtNURa29xSjiYuly z)d_ZE?=Zdo%DsLDh|t(eJLFWtR)&Pi5R|DJdZ3^$;s7HL@wzmb>=wT6rg?)D@vfsW z!&il4UJU#9{!@{>px6F64bH7wtlL>W)_U=%#J1#(qjNeyA7}b4jKZL zb96xaLgdp4a^RjSMaRBiMWQ0h!HQn!_&^ab`2^!>`yik25~;~2)Qm_oH8P(g>Csr! z?5B+Jm>1fg(SbYsy~0>YA(L}}={0G}Bhs7f^5I)?Qyw?v)w_D4>ggFZ?_=^?{@u>i z6TQ27*{Q0p*Q02%U#hYZbcI`_GbCwTjOV*|Q(jnVl-slWUs6WA?$j0@*lmSEZpu5o zlEf?N_txS>)zx~ZYDk2+n=XnRe-&R#JxxE$KFNAr2C*cl>O7V}EU9va9J1rJi|6mp z@Hw;VgB7sUhDP8yI4KGpTrk2)UvB#2c*`Hh5ZAW9O}4$Uh<(QkqT0WvJX-Bv2QuF9 z$FEtG!M=P;$;nYPy|Xz$h7kFRiqaKCVbgCGjcPZ{H}0BHhy5aKUY zPJjSP9SAFZlj)-F2oVq`F&C#e)zvlC<%t9eO^vyf$-Xg*e?=0Nroe8<_7xt)YrHSjImhQP} zTPd{p_jIwE;r(jE8vBGyM7H5ON$6&f!{jIm*=>CHz((ZX!;5Ho>Fn_f9p9cyyypJ7 z(FW{WWTP}go^JQ?=J@6!8+#sIy=w9|kVv@#T*be_?ne%DY!Bc&6I*un0}pi}wV`~Z zQDL%MU6_}AM|#+#w?&4fr*L3+u7RP4Vz5?WAvdb9fIpr8=&HgtyWzuc2C9rzn5}Sk z6-L@Zt1zJ(HmGodC+L5>DsX|AKS1W(V>f~oxVr-TL8icp0B@5U;Q^+T{TLHO2lWP7 zJc1SPq}K(CXyk%LpvDKXZ^4|7-3&7{I5W)gM!lx2vi=tyG`XoARM=#paOgW&Q|w%@ zZSKLjAPl9_Ve&FI+GeH1>W8+-s?=hSLV?mrKvo(@jZ}Oa=LR`4S=Kf2BIrA6DNMS- zq#K>tf`blGE7MR7vz-wp!XGB-25i@1nj@?3fvKa&7?ImJWJ+lE4tj{(fTPfnncSDw6+!_p)KTch>TE|GQDAFgeuxsF-^Ceb91+v>8-I-Ze|X|^aD-~BW@LQSN2h*O<3+g70i-|GlaX3b{J&NN%*IAb#2`)Rhw6K>gI zj6BrzS)9CH!6P`T!C0(pWq#H%S+|Hg-vVhMxN#`=b*h-G@5+@Qs*M`zb znrRTR*r;#$8VK0vz=LW+%RKHWBp5L0gbeODsphak5v{f7ryIbh2~J+sp6mI|_bE=& zxlA$zz%5R>UHjoe~;>^Q;}<|hOhjho2^OH3^@H+Y?)2<=^?%{%?W{ORu6 z^l(Il9$cAVr$r801m&}14y(&Mi$g4#2l4*t&7n{9oqmA1h%H8T+`D+7{hv6 z>Xv6c?TbrQDeT5lUv}%P8r`MO#Jxcj7@8hpHFwot zM)m>m-+u}zTc7_f>3324o}qqEH8gA6dy?!5?-@}+xA2xRIgf?6)Ss#5JtO^|9%Uuy zJ!#rf={?IA7nI&ff99Rj4B^wwzfNy%=JUnZ>zCDP{)7-Tdw&xmAYlt9k9sQ+Y`W%( zl<7@|PJ>UE)`~lXmdrNtkoS0Dpm)^iY^Vc$h==*oK0tn#;#-}}0V$r-t)m>#lKyNn z3QH54wS-~)JYP(v|G;a%Tg<;+r@J_fCfT#LV3M?Vx*L+T>E&}m8vW|j*wo^+|LX^m z^S(nhYDa3+Pt@2xPb1jOUKKZIuc8}!UK2GgiH@!ngYss6xp+HQa~VZPucJV84cM6X z_jL<>;=&oX@BKijTi_K$w1sl0`W)^oJ=4xo8VZlu|Z`$?aiQOx_OmpY|_=77GMm#@3T4Wb>B~V-1coQmi3hNv_Er7 z%IR<4^ZR3Ri!I*A^ZfH5a%(g|lQ_@vL?TkrgsyOeH}t$AkIy_3PL=yk&vDp0<(7IH zqp9Qn4!xp1+VZeO?S2-vyhrI62%ZT2fTdHBj)mOCZgQT|$?>c**am2oK>^Vk+a$CH z1P4)r<3TD~H-eI#6vDOr5=%@bR3zb?Q=|4Ovi4 z$$@*B3_}RNJjf;*WzP+rfCi?V^kkSG3{zsW51#7+08A`9=Wdw_X!3XS1%jrL5bJ2^ zi8@7RGEtcjS9(d{gi=dt&}i}V(;S7F7eHNEufJD^0 z;*uLQpFe7e=0|VxVUQFb18M%KBINnE?{@?R5kPCvO01erg1hJOaLbT9eY#l-$q9yJ zuswbjlH+b&d`SNG>Bi0)r1!3p&s?aF^z3<`HrmB~&R_Wy4mU$`Yex5Hg zb*A6aCjb#_WS&0GU!IJ*bLhT~V98~B(fAb;x{E!-?QNV<`D@9#*AiX%ry8aTwvA}) zfSpl>o={>FNZ6QB+jAyq@<|k7Lpv!$x|}{OTjC>k%vSqE0(+kc%otBmF`oT^;x5Q~ zYNox>ZyNgd`x#qKZ8Ar{6^!QZuQ`Nvhv`v0aXls}`w8wW9T=eJ2!pBd$~*DcuGU5? zMDMz*+qP}nwr$(CZQFKo@_v82 zw{TiJ^{2E7&zftFF?x4$Vc=~HKeBZgbvMfjc`Q~{a6U?ZU}@OcAh(<>KMu3pNRxa* z<~m?Mk$+ZOL=3r8WO=;D^GVw16_kr=#Z-6O)IGJPY`I^ohO$1|Q^v7AVzZ}&6DO`& z8gH0edLq-vOmjPbEAmUdJg=|d=w$?(fkA7oxR67rpjBBR6nTKJz7C#GK1p|X_8(XF zt)yCMZp>_J9x}d~x6sJWcvRj{XRrXTwyJ8&@JgG5$@Pli{pC{8GZaLw<9@B|oKR*k z9D$H}c$JvqSWx|mOME5lw_tW7$6O)x9A_LI}mUCJvTb5*IqMRLOO)bg9 zjH4o*~VP=_Ph-8tw==LJr`I3saCzG`PN5XLNrG&JSDI%FHv|_u94Uf-P7f}0$oh7hUj$}rtKY>vMyoEg{{V93;vZS_ zSO(#d#d0A0v14~c9ngQ>j{|)HcUMA9rK(F&cN_GY0~g$y1DK1JQC=FfZUDk-<+JeN z2Q0na!?zKDsnSXB>nqXL>H{w&8EfLaviLucH$3KF!TRPh~S zRoOKT&#kws?U`N)7Bm_Dn@jJb0O4oN9{F8YuV92&lvd5HUiDIc5)teK2wOsN)&Qf3 z-}gH~$Z+ajD6kfr(iB1@IR>6i8+nTZRxu8#Xts?YP(O&!`y3t#H_r3O3sQE?BWFb6 zSAmyA2&luFu@xT0K5Ih7Dgl4E<5PRZZvuso8QDrs&{-X%DvPct^-(#Ny4JE)TJ7Sb zp1WdoV9tp#3Wa3>JHxKB>7MLbW(J%#Wd=-@;R8R1eg%R@-0C9WP}#SI<(>Wu%WEnf z+^yK3HBcoQA(}FXXN81>LkB+|IfmWkz7R#pIryN^lv4LFC2b^GVHn=RGI#Q!Z-6Lb0OoW%WFttM|$zxJ14*z zTr=}=uKnmA5GU;d1aKVHNhF|+;l{Y~pK(t4P{ejKPJtK0y#ee9ckVZ#Iztxsc!w%; z{vi0PeEzp8PxD;T=dLgRJUYKwy?j$ys_Z71E|pq?8>Hw+p`heYq{)_cH8kX24{SGZ zq4(Z3e%RNaSIj5h*L7G5!%Oa+xDi%ID1hHn+x8i<460xI9y=d&n-tP`6%%Y%(eOq~ z7gd{_x@|40UHNa8?S>|Lp%bSzQmDT5oLy|dL5O8tzDO3I(z^;Ff{^rc3irax6Qe|Jg0vW!Ch{5qx~=sl--W4W@IDE#hzO+V81y%FuJh2Lh3N(Y89cPO=Qks zq-PJ(l&EdTpm^+uA>BG{TZeoNc-;rA=ypR;2Yc6^)=qIzg&D#H1l{R-oAcr?#^0%q zA4I4-K2N3CHDr$%vLuTqh>;IAUO4jIkoe%wZ(Fev2d2{A|M#A;+z=((7IH;Jf2EnHI+JnC%J6dM;g;pvMacO&vTIA1j^pbbE=rxt z>K-eMLXdBrUKJQ7j>bZO!-2{tLq?5$vmotYG$5~FSFB$dN z-`iMg$w2+`B-^=%Gg2y}tFqn4L65nVoUI{Q0H6QtuMwi%ghJ#UPqz8=qs&|_na7X! zr=vX_1-yRkrZgwGJ&S0MoFy(S;!%(rvs5zqGK5&|ykF?7RseoLYWl~cr)(=v9Gr-N*Lf0pKfpyhOy(HZHgEz~ znj=^xLJZUy)E_~ZZ`EA!m^hs*p(BP_x)YR_{9}IzKpcHg!Arm^ruh>-sx3rdR&U~* zYk=Cr#wM-g0i9W72Q(@%x<0YKq2-bAZ$TTsX`bKWimx>HP1aKBY&&Y|hlP!2%{Z9< zas%o*bMlagCj;ZuO_$V9Jmpgiup@FDfvej{1Cg8m`Lg4wxiHeBBZ@q3s`gEs_2zE& zRD?}jvykIvd8h!R>i?pyPJdTUPxi1$45kdiKR&YD6D?RKEkf#I`=>Rq`S-BI6=xM9l zu?ZhP+Vh|w4T~oCaI_$U$zBT~B@W8UTws76R!&D5mZXJlh^BHZ^U#?$_ETEgl6g-c z6>d+Mo#WX~Tr$8r*ZR38bFQnUbb0X` z>TGG+JVaghr$0^(-mcdn50kTc$IE;-rHRJGWL+HeNdMWhr)24I5sH7`ZVc&vH?3lR zAAmK~OP;AUi=C~9&JE`2p_O`pM3eGiHbX#SMt`3Z6fWbNY8BQx{4C->+bnzn@ z2|F?!Ixmb?aMc%VTP!!2hU5K9@|ljQyA2U2x&OHMOHtXKHa0t6fI z>+0&j?Z4(zeQI}eGcBMSIw4Ykw_IN2WChhUX|XiWzDE28^j0ZBIYXlmQE>u~v3QuA znyczmUQ*I`^RT+j+)@frjhwN5ukkd-iVl>FNnF=;f+4Y9YO>wjes4oqulb@ zm|>a}W7!dP7W=lTrCwMCs_f4Q%?%@cI3mz71+sSG%}SXB1s)^?|4{J9$r*tWtV39C z{gI{$tZbMN*zdm!YzBLi3mi^V~fy6cc@V-x2*NqG?5#XsBA8V;xX!w z_brHuW(28Vu&DHnC+ZkRX(Q#l4ZtI?E01B751GV)Ydl~cf!av;K}YD6fjwX@nJiy0 zF#0nK^l=?xSqw($yRj%XUB6JvVi)qV*_A5we#+_t9!$xTIQm$jB zJ_AE>e{nLmS8U@~YnDpi-}kOC6$H#`Nu*BGhT8?Lqv6EUM9&rBM+aXM=0StEBOhnL z=O-6&A z{{<(%Gdfh8ZlW8$xZ+~Xa*HxHfEM(%n5bHdYxeuzZlSMk(W!-@mAUQ99Y>k4vW$S_ z^p*oRNyFmpWbbX_Y$(FxGYWf7x|}5K*E9p0hYHa51OaOPLSM740@LHK*Yoi8h?vSq zGLlzhw~yuQHACb5tQzI)fqQ4pM5Y+q@F~|p5ycRkwW1GIoTtl3nX{9*A8-8a&q16f z{PEE=m)H1)_`|NkVz`J5*YZ1`x7<>HdHD0x^#)G_K<)ibY*IBtbH#_qPznMe8aI3t z+pd@!;JqoU^RP-r)TFUw^(4ULHgDAe3{K_0y!)V1(6CXAu*2`#oAr2ifSY9TW?qM@cnHPO zu^u=r>brDk!=GY~ohBxW7*&|ovuHJ#^;(Qq?S`sC`pq#HspP?dcO*c5d7P`k&4sMC z60VsZ3_@@hq0LVfgPh>XCx+i2U1cK52>VJ7Ldv*|W8r0AFZxMRp7tg^c(;p_zKCRB zr!XXGJ&Go4Eo7O7VD3ATiZSfK(QTb!uok~1)Fp#5Bm18W3VK7Fyg8mW++Upe)FLIx zqdtHuiik86S$l8+OyTTD8YKg*c8eRcBskh7(8BBQnAdYI{(q+6^Tiojw?k=>#tAEi zi>_8ES;LM(9ezuRdr>p1g4C)uZ_W1zxr0+W=#b+`yfXG{wS6^oui9q0@5(=Qv@B9pCnqT*CI)Fx z3ctcQ13+ydh!uRCExim9ufJaz1;57`Mv!lm3QCWG`B#bjc1>JgbR0(@V=1eX`Vsx| z3|UNnQ2QTvOSpSd1@PVMz+GT~$lSj5JvvzHJS(Ju1 z0;Sc-$qNs{r1F&MEy=p}Mt1`#OLpS2P=&9C{`eua&IYhRj*+uyOW z+1LS^KLaMQVERvg%g}*iNf7!nxZP{1TtBz|@)pJ6L3I9$B4`ESNWhPnvC-wMqF%K_ zp5LWR96as;i33|$l%jET^P0>nQ7n(_h=}AWyU9Yb<+aA#{%U-nG~7(lz}v9Mo4C)T zcd!A&0nQ1-aBQZV-f*s~ufb)ZaR=;iNXaFHT!pl&c!`~)FO7sL;KWKdHg2+roJ5Di zjqP`XkKOYRhnRemQma5OJATyRgC)gwG}%tv+5ISy{9!4YQ3gEi`D(E7unE#+ z(Du-3GAqp-%L~=+6n^!gXE~SuAkJo^&Sam1Tj7V+NV4(tt?{zXE*#^J;r@3v6Qc;$ z{CBwDKkwCnhiZr#4ACb0y^nAImO&W>YOe-q0ZH3`B2SotfgbH_-CP%k0A$$FysXNU z8B)Q7BCD4jS@r{PYD2?pUw5|{5fy)Igj=$zsy3!o9%YdYse;+It~!k`wozI`W-4cM zD2**m;3VZdJ}cnQAi7EEg)AOM$fGRMWfWW3$2=wrHq9DZraTQvB#q}(NoqSY%|;Sy zT7#(%1bLf5ND@2xeJq^t{0V=DF0h1NK3#kl{~#jx?|Z=8_(AuK@H}~Jjl&dC0lq)w z;1aFlPLsRpQ=sigNF8E{G_G8BX`@pU&jBfNNODK2>tPSWnm2=M}@0 z9v#UREzAm`w|tyqc5l2)IQQfu6cBNXKS9bfy#y}yuK$SRk^Eg^@IWyBf)MLUYmhG( zZuf`y^_o{vw#pEK1IM!MGb=e<-H=rlN_BJf)?Ax)_Im43TVFCt{j-+x>W#*en$V_+ zQ!jT#yc6@NnmN4Q!Q}8;WmLmSNQr4?OCY^vrVM@kYDbfwdxyh|8eo`bUsSDl=jPUI zRY#u;|9PjKTo&w|jNlJ|!$AtHk>rVl$XycY*5wW!ub4(_H`i@h$5Tl1bSU2=3BqkB z7P)<)>-2P}EO~6ggK$6fn(VXi^aLikqdU*!0;W2CS{XBdNtt}wAQc`qhDPe|pOd85 z(}1-OrKa}#E33|b2bnW`doQK{P<;B!hB>i6sELfXRei(N=(Ngb344d66i=B6JOnBz zVWxYoAOC>eYs!e9#j!SSN^vi9=^nkOHZ{^Z#ZGxbrC;CwvCULJd|586&w|(dn-1IU zs6Kdm#c2OqFJAP2)kDUM1;!<@4dAT-+B5y+`0p@nQUPjk(}I$0-gCGb7bYClWU4-9F#q-GHy%QkV9jhs9bC0a!@%zQWwc<#hJ0fs%c z&)wSsq1QRKIem-ZyxY96RZiBq{;*{0yAa%^5nM-_1uhP*=@>ZPy7Qi1tLk#tB5xzcP@d?+^y@r_vJ4-TO7Mc z|7Yyq``ONs9hp9_&CoL^v+P?qrjqBJ?p#Gv2@4D_-}Pz6PK7Y{BG2(csudZli?S+j zkjgNd&{E|co)d-G_uC}M<&I%B-T~x$H>&CjA_DHV%z->s+MR@6%Xs_%p^9@bQQx>h-pRY(037ARKn_W85=VrIR8JmUp zud-4-O1UMpPz%z-bOD@6p6G{basBM!`z(D*hv2U&U(SEqm>#5`RhIU3ag>+Tdxv%D zw@c{$;)#38E2SNVivv0UGkK+N{CZWCI9f#n?M?-8G$jiMq)oBT`Z_0jW}t(ps=@9C z=a9<5tX}>QPilC1QJH|Hm7v$8&#nEj|B4{<6$c?Hs$)D%-M_1@oQ?^ znn2$v=2e9q05AkK7PLPcP0m8iY$+UV%o$SJv{-xV+_SOs!6B_b$uU@8M*DZELrVEtQ7zQF7A&I_#h@ zr1z2)(*8~4NvXa~)uV|vxO-P_;m3pH$kk9d4N2bQ0yCB-qRKt78E1?a<>lI znSPU5T^XlRMZBM^GY5603@6g9xG=7vwf#rmZjCN1Glc14Aq6SOy9} zQ@hdnd{iE*p=kGGu`r8;D-#N^rI!10|4`n9QPv(gC`x1b}ThT%vuG0 ze>F^X?WB9~0mU1tM2GWkhy-~B1qBxk6t}{ICng#rz?<=pAjV1-VK79m!M4WP_Fwwg z=5q|D0t>L{U?r4B~oI*dkgtt%#()kgzQMEcPudIQd0GFLB9 zI(1)Uck(`XO?_Ncwf5TZFN9XEMC^^CPRw_DRP}X zxZ1kT4H>5K$MY_GcEa;_nyKiJ1|NSlz@i|@|7auAJn2oJ#He%J7qGa{u7aXaPy)^5 zoI=$al|5S@7U-vhBP(r)<_TQ)HK&a}+??q%4eX%4#Ebv4|9JZ_Sr>^MMj?^N_w=V6 z{^rBl&w7r{B-q8%2*smgLYN-;Ah*8Wn2ULEv}3T}yV{Q0PClwHEGb-h1VJrX(Bzbh zV`6dK2iTE?bm`@|gxzBV3l!4l0$3ur)7&R?92=$MjSNAxqlueCP5A?_vE!_*ToH0c zw&5-4sI}(sSX_WJBWXoPjz$2>Cz#*g21ZQe_ebs9i#=oJ{s=wV;ysff!w|_gP7EMC zFum0)M|0oxHlVsfWx?lJCTgE7(dv$zgnS#iY2)$$Bo;N3)xntU15P{WctBQLPc5>N zVTJW8ne?@=;+yb9T?_cx%iitr)H>@&qGxZobcZ3IGD(4oM-XZ3CC{;38i);RNMUO8 z3YUfhq1am7s|jSayj@Zi?_ga)@oS42!oW&i#OjKaX!WwY3Af7c3AJLz=evg^r*5^0 zFEOXq&F7z{ez6utgU`b=IN~LmDJt z`UP5sFZzWWa)vK?u5u15pe}K1G(t^sB;adf&J@VK{sfSH#Q&~;5`el+G^?+q3n=QR zj>G(sa23iAQVjWJUgNWRluH=qkb{*8r?7v;Qm%?#UbRX~%~=RY)+Osqrupa`REJvW!Itx7h5?qSZ{kbrj zgcWr4Wm2^46V9zwCw4T7by?7OIW6%A1xpx71rHk4>U3%UF@qBherf_FwxU+M9 zNjU!JBM;@cGn8JPRW~?>H#p5G)9W1{OD-?v^K@s(f z^h|VwHtF4Lw%&IP2`a5>Fo4=^`c#Lq34(;T$!!ZH0x;{#z}5vs{Cw1w_5~5>Sc;VS z{q7aMjE9eJq%_{tt;apDZ|w+Ac@17%L2RCG&PwAMIQSZC4EYZVZW-nE5|(^(9&rU0 z2fTn%kJ-&00_~9JZKpw4npLi4yyghN!%HpOM4GdmY)={4q>c{iAqkcAPV*;4K`R)Z zMNfZf;u+>E8^e)p8kC2cAjkRODBZMuHj+F;$)Kqc(HVi>%U8heX3}-t570@S5FE3v zz;)sTbp_5Py~i_C24S7xZrfo!piSI>NA$uOJTI^_IKvc7w1^A$eLV76)HiN_Q0YY- z{(apZ-9(!4$9w_0+M)h}T&-jeuZp}=o|0C`M#&J&Kx@@6(EBvr`}3aI#=Y!Kto-B* z!V{3iIoIXRz(pZnD3`#%1xN>nMbwb_zlL91nr?arf_@rcc}PUCOI;yaJIpC}7+>mo zyYQ51MLH7?*gRBE#$ipvR4ytO%GKdV+f>%m?BJgs`@&xMYlJ}GOn8Vo7P0JLi(SoA z<;FVl&ep1?!}Hq?qhNGmQ68Ik&aYr~KVEL~=MG#y#?QQ%xT5(*F+ilZ*y9UVo4^Gs zTOblE_PJ5FDvIREEvm)l~GF zm_6D)cRJ)g7HU2X{V+?$B&G9aDbw<-+f?&4D+?Y}pGOl;erpJz8J}7;XU3cJ#f)C* zrWnIiBAw1NER5wmyRS=UZJ9Z`Gkq1Y`xNda8WC zIj_)qawORSIlL$a0I|5V3cW>1q+dPEhqeLyVovpi$H+61T_`Y9)YF^8kGZ9a&0J2R z+_Z5^7s*8%xDS{!+&+~>ujPc-Y(Yys>u35*GyzxrMNoH@Qes#&|)KQ_%J!8 zEgWRP!!mPc{8u{na1Ac?RGPwaLxgkv8*p9kuQBE38WePyk}8Q_)L$^$*-ynw3hczy z$06OT!PF%c9zH z$R$3l!fsLYlm=C>y5V`ZT8*jV32xH_`qb4XvHITuB*m)l;tb@_acAX`Ku(KdYScsu z!}2k| z!@u(rJrr{>*E-g>R8f8_vXeuJv&L>RH~QW4i?5?$HOQpJ7kFNkHiHXWh#2l4j9N6% zi*FVu;g@g6v^Mi2CZDxFCW>>Jl%HAmwDmFhve?fzf=7~jHMJPk3rCDRS#TFyB_%(p z0jx9#=Zm@3n%P-$+)X^995ytiKDg#~mto>~xxzVKIucFZ-qV)4ACM9^i3MUfq_u@? zPP}fIax!zjan@)vazI<0HGDaG4A2s~&nPu}RT?leZ=z7$X}E<+D7`=;dj2H5Q7~Cc z02z3`H<~g!nQ}0hO zCLgC(`~sO(6t7$f)vWl!=2r2*%U*o@=tPIYtR%E>@_tDrPykwky}xj=o45jgQ!?X@ z&a-eCqi)6VHiv%3MyNau1RIwS(5U?&@Ua zay2Q3UO9GtUZ-XJs^naM^>E$IJrIj{?^bMhdLmxDvUik18^|V#_NfBpk9p0i$CsQX z=H@%03YsAgRM%Rc^)-cfsq2AgD!4ZlO>>onqAZ*^Eb7dJBu#gnsXEYfNH})q!cd~B zsA%4xC>n&;Enr16^uil(1tr2bQ{3Cxehb$S=e)TE(iqm_W};vs)2#m44dD*h`2~5x z?&0elou}fsL5I+!gUfm`q8Y?SxR-GrLYk28I#0RKE`wOIUTW=#;MOKJ?Xq6b@zF~x z)5UhoRcK#k8d50jdzZ&Y6AUoGf#q7j;Em%+OAXBH(3~b%@6xC2dam>ar`Qg9$8nd4 zPiZ%=SE&W(A$?5U9-p94LihyU08Q(WeQDg%s4k0;iG43k^lx%}X^82d`@0oKrppCo z@mcCS-MALudrsIjcXF&bWiO_+SE{IMuM3{%Y9VRH87bznzHRtdB2yQgiY-)2x;?{V z&Xh@)HlAx0inKFxHbJ28A4Qe3;;UGxuYf^>t%e8>m2|IXp?VJR@*UpZjg*$dfc(e9 zx@DCOI#Hjhhv_n3OKHauWb$EO5Ju$pgAOm0Xx_T{G?AA}4}{xC@Yjd1+dk$PHF;lf z7ivFUmT0PHntK>_C^qHWZcZ`q!KGS`1|L_K8r(|Vv#_{{(#RfrA5Isiz+URQHeEY) zI-W~1=RF$5+-QN%`ov)i5D)={3e73&OAT@%H0AbmgwE)78^HU1u?Fd{3DE?8`9l6u zBUm7!SM%G6Kb30*ismgEDnhD;Ie^2=dhYhhcX_3)8Etwn6{s0o|9~5i>EhO{YzG)o zkv#M-!|F(#A!I7mtVE6ytZ}t>n`lT~U*kx`j4ak@7k2^EqPa!{!c208Byc`KjgP!u zV#~UH?Y+XmYKE|ecP;0=fF;Lm2%pGiur~vi%XcRCj@=&Fl9cTJd9BfGZhL=!rv=Yr zTId4w;9%(w7RMDf@*r|$omSt2+QTuQsOUQqNsb2ha1VDM@mAf3LJ`))(HPqlg9bes+^6QNwB z;AJ>6K?sgJAk|u@L6aK`75|$P24Sb<3m_pFgjR_hLEe6Rxhn;rYbyw~#2eS6FQ6*B z?*t^Fzt{#aWe1E5vBv^XNB3Ae!EXKE+JvUWXXXlN?81wrChquH9!1pZ?(N2U$2%^M zNk*l@(cWewAVkCgr_szHSkO+bV8@aD>!sjm!J$oCvCVB^_GI0yh>xgwlJZK{qubBG zP3oRWc|q#7*t^Kg=sc z2ggie6lu@;%BKZbJHFMZM6~^Z&EXv{4K+y+J(iVcPKj04@B=?=Uei=mX)_;h`p>xa zR?qek!Yud&7aQhEUm$NGDe^afTEgG_Wc>sii_Ab!rj0<|e!S&OE5GxEy~#QV6WB2t z;LGOD{Lo-9;v=4dsG^0burfH|wwB`J?j(7IM=-V9>khg%Y%(u=HmCluvZ;CUP{T)9 z;k^Jd3FBu$eYe!YnU{Wuk^02~LDBxWxPB+NHQ4u?HjSLn(=ws=?`hOR0jbuf&7>4ME@udt>U6@fkZ&+1R6*- zphmn7z(sOgVwGAJMn>N5z29vu3U%%K=1U$~>eCS9Df@O$!2Y^tUKXW+$E+QLxJ3cC z!CGP>g6^(HH?DzB8RNclIc*QFPyj&t*xQR|U{ z)DptPxW#Z^DHhYQ4U;^77S-7!#!{5+9BTvpkZ-U$9d4)P*4h3@s}9xIogaHXSqp4~6wl#qIn80!=S%B7_`k?DEG3}weqm83AsrY=xr-sg!&HMqfzt;f9#QRm2IaQYB&-&`!!eN&5 z$-dDzi1n{$#2$(irApQi%VZrC8jZ5YWwur8dgs1in@7xP6vIM+NFVZ@H-O%g-fJQI zS|p<{hP9V{csNch>ou}9+S;xnNLjza*OapWhM#9_+pVKdBf7NX+F{N?3ttOGn-8&` z>ridi#GX6%8Embi=+O9Lk2obXO<8oNhu5lHl{1BH+DdI=h9t;LX1EL*Su@A34ymJD zDq^kGxXav0@fO)Xdlv%?)CboxI?Q8ICi@sm;ZjI5FP&ke0X$HsE-Bwdj-nrH;x$3t zET|rq_6+FPZ1#dX+hDq$=Q(ysXdrcxFeuSJ*H}1f`iqJWW%q``hH$C73`ega3xc>i3jn=4Z&ci5t3|BeUuo40s^Rn&jUFt~s`rC|7$j$)u`} z1hJD&@Qa2un&6)_oY4Ackq22uHJEIcI+Y%jr!<`Gpx^1TKJ&=ozBSieyuaTVxW3bH zW-cp@#^C4gWD&vUH{$F#Q>TQhZj3*%#mokI6|dO*!YAi6er1!Mawt<8PCSddH-!pD`0$mHU-HN_t|vnO*Aty zY}}SWCCQW6v3Pn{+<9B0^g~}=@W5K22jJ&8a7Zm?m5hsx>7xTiolGPvk%@5}r=B zCP+71(-AiQH&Pa{Qa6%_E7LzIi>g`oj}muag3vc#wJ{@YL{=q(OTFiK-#hZSf_QsI zSbZ%RIv#)_X+#J4`xY?uqVM0x4JX)L!@u%>Ec;q<5m8rTpJJzghAXuoC|?TYn24_akJYu zDX{m0x?S69%JXjvci{`h|9U2Kgu#?Js=NH#u;#IZr?lrP4z<=> zbN+FIqJe$5b-mv-)%9OBe$yXupH*NqcGcNkQxeCS=iYr#xKsfr0aRy@30yY4HfRkm z&(m*c<#iwyQ~Mm6>s+FS5PJjXC*c&#hC25XI9I;+CwLWyII1E;Nzuu!)%gFdZ44(v ztG0!$4?|U1FN1esloleo9X$Sk+~7E+3ET?I~WOr>JD%@=Ix%d#_6_dxy=qod{17`!zpK3PCmF(G*bYVZy9MKqhojeU%46D zAe@?L9C#Ct*B6Ja5A1^zUj5F=UT8d%`QXx$nlj)5(v*mL!aSq$Pc$*aR(|EQX3RJB zh2g{2?f^e1pxRXQ&S0&V+MKLw+3c&v(++tOdQ%4vr+Ci43r zW)55^jFmniZkqcixx;{p8KLe4+Iyvz+Z+>_f|dfA)}MkL>)NyqzO}(kL;?@*2e0s7 zRIf(b=%b+643acFNwjDolG_x}pOinycE{c0v79O2NF&*#XlbScNU@oPUE`3Zw+p&2 zCB+9wQ0z%>!N{yO^W|ymSL%DIxBO5$E}_Tr!t;4&!~shMr>fizhWOjvm;$V*h#ptO zn3yuI-tw_9CmhR0M*U%|x2lR7OXDD@VX-L<`_E&}f_8KpepQ#7`PDc=M!rCZ8(%}= z=C~X;mY3htxH>a3hMhf%~$CyP<1f^$t6&i&AfkAwz zC4|?L|M_`{lj>09S|6dyZ(DA|!JjmlG2KXSFaSz;^?x$Q{YXTkwa;V&=v+WwLu;|4 z(xhTfR~okFrOEVvAd6i+R%*6NN;AAtg<=-tkc_|U+S3>|F-vG)5hk0-fgXbs00+bh zJd~6AunZ^U5*>3-B?#9Cp`0Zhh5XB!tRN?i0tNW_mKJK(lQtjbgkpd}AGry(w4ffD z7)>DJll8)T2I)EV1~4r4VogneSZik%OMo>Y=;5hnA3d@Az9)pwIC->T&wdZAF zQn+R;ZSM<5dx!1z6p{CyIo&n>t{zQq>-4Xx&w2aQ)Pkg| zvFx+_bN!ARRK4uumAkl273eDU6TqweHtYDraG$p(HL_Ao?(BE>FVF~;&Vt#(87`fg zsIvO8I#42+6^bFDDkk^RVE%PeKg5W`I;x}jdHwMOy6^JOIl#~Eh6=RtuNrejU}pdu zJ?>fsI*)~wFUF)|0Hx6o;16r}86{fn3~J-kTXsprnmxTwb1{CUg&>Xx3d>JG}dJ>BtElO=i14oHkB77U)Qb{e#PhB#JuL zO{rU3QmE%k@44O-#(xQb)J}~+kQwY#X!NnoFHQ>kj|=-@7}3~YIdv+*V%1k4a5myA zV|&Y@idLAN1cza0A%xf-4(A@vU~^Pq-*9T!W=QzZ>s8*V1M9b9(U62FzuT2&qs z2)a1$DOr2j85P0D0iy*QYk(^O0dbEb)_g|AIg#rC|N6W>KeWs!22MO>y<6BfB)0;9 zAgUrVwMP4jQ3n9O4UF?y9l`JLTCN=Oq)oIGsiQe;waPeL;wNnihKmjh{31G5mijkW z!WdXyZcZLRKiQnvCv5pG6Tn?fhrk<6IMWFC*nY%wWa4`FXP7(6wL=V#XC8(O-{CqR zJAPRfPVEzNS%x#`e$>H+aXxt`w6+YkWbNO2egs!<|F6Uj4!?U3$Alc*DgsShE70ysaLUt zi1t-X?%~aYVG@({dFM}rjUDApIVjSTLt_vlm2G2qN$%h}fANUI<~0;SEjmEjDsB)$ z4JG(=>lWC}k9L#;>vnDb-dG5Ip2PWqBzEaVQWw|FG~P)8Gv;$+BBV150XW6%?0Mki z*xBY7Z7-gVk;K>iobFsetgnrzzh_O>?{$!3P8kq=6m(~M7`}EB?3({dsb?E&3x57X9+kT$&vW$Z*wt-FL^+Q0`%jkTc;us`(3P#g!!meiuK{zw7 zftXX9k3aa8do~zi9A~%l8uos}Yf0a<0sFkXUoFrExr**{;98baqEY#Q(Qu&B{ zozAvUjlPNr^8rvPsU3!QMkru0mL2{$!B)%{n&;-izT zIB55qCM5e-v5JVMNc8u7z#O+mt|8!8i=Y{Rbc| z*ZK}cpNN#YOZFxIzp4vgW-XP?;BGM6P5*k&@u`JNNbRVPDr(B<|I&fmrT-Tv!CV0h zq?_$3K^AH7w*>Pi-04eE-XmPG;yTfC_C1ccQoN@54!!uQ{u%wKW$Q7LUq<}uc3-QN z?_8vu4;D%-23yfBi2Af|YPT=f?TP$UrRP6@sCNxMq)Q9>H8w>?e<$)k9aIF0nwYIH zPK6v1lA#!V(nqXtE%nAptf>Kcjafbn6YYhr*Z_xN*VE}T4sb8HEwh~VC#Wko1pT%K zB8qC-sIE%o2U0@lgyCVOSHM3s_lbRHcx4Y2XFRP|TVq>f8~z{NlLQl26L!uFzaZ>4 z@j@!81gFyN2OS@uj~X4G&x0JFx15~qnC)(lmxYm-B+yi?TO)89j)>*&X5)KxneRZn z`+lyozRi#|rckqyNx{&q`D(l50|Mbe0Qo4*({G-Vh`&r3#`bkWG-8Ti200`RWbKK< z3u=ObS=Wo>4;cRDn8S*GB!-xgjG>e@0#h+<_pRFcd!&Me$Pzuhr9_0~4ylAnBKV2o zd#2zyh)K$_>|@>l^mak0{V~Fz2~3$?I;RW(rb6iBOod%Jf40U93%Lld(9LE5;C$_?G>>G@ny+D89Nha zc6Xl*uzT=`{D6{T$WpaqWT@yf`6H-DZU4rH9_o(X@+JnaWEnZ-iI|PeqYXApmOI5t z(`7jpCzazADd~bi%`ggV@UaK?64|RIIYUky)`|qWdsKY1=Q+=RBwyYiD_b3%k#M4wH-v52_x}wL;^z2VjG~*)?b-Mnp&I z+wyiZk&7J6oK11HC?=6%d{Yg~tdf-RZ?1vK?O`cvm_Jy&GWjb2$fjdw)j{IM{A7X2 zrzD7y+nRylwE&KIv0MWDM64u!&3|>ld#69 z-hrJ&YBgxQ)veeb19TelrdL#04=d8nM$=Q5&>#Uj>uXFtFS#i$Zyx2uhLl*38S$&A z>i>QRR0naNwk0YNY4Vm#K_p&kQ#ML3t9c%74(MB{d5l)yJ0U=)gjZC~ueUMeeMREz zqW`~iT!=Bd96~6x3VBvMktXm4ZZ%6Z-K`kA(1256mHg6PoVoOGoh4od(2mtU$i7EI_CKOXQu zU}ZSsUDNRKFgCz<#FZ={&TJZ-HS*JaFRjO z<-k`+nmr;osVS&hwPiF8sww~gcT=?GF-Z-%QL+;~Z97V`sFr-MQrd0?uqZ3b!Zq)dkO83w24cXUgq9qD3*T_cOnO~;Xx2x7Tn4HZ~spw`x|U=WyGB zU~1{-o`c1F1C0mF31z9DG~s~ z7c#oNdq3j&smsGXim}f?l+Pn|F0>8h`8Jf_f>^hKjXOAAyuOp~V1n<%Sz92!)3V}+ zq#*9VQ{07@GAc34p(`5$tTbX8;1gzJNb;7P%)>un84tF1WvXEqw-IH!4Wh?-7DWJg z^|pjt^ev@v+Z=fsHi%y>wKKBf z+~*1ig2Z9BX>?tM+W2>hCOeKg{XwE#HEMLPGNVH1gnn+-83m5`AIKA98bZ3jBoPej zcwk`TDQ1lwyF-(;PBC1>TNHvYJ_A*l12Pi_UJQ17SV{bus^lHy33PjXz~hT&Yv%Za zcJwHr_T!PAf&!1<)F0S2=s1=Dy1w!7f&`0;nT=P5qkZo0D6da`h)r#LeNu?9fw7>w zP_0!#f|h=sT4R3qN3=Rlg!ok%EZV-77=>#0cFPN55RI-tJQeW?OwQ-sie9PS4w8;A zZ|#-tim|&Ys?X2g&Fg0}_mL)dol!@U97LD`frec4m1e@WMYWg*el*kbJ6|syYQow7 z6C)bj<&msC99i6rB%u(?*N4dkn}5xAwtSfxvv2u=C6>2HLMQZK5Qc8^^@TY0dO8$I zc4^hVRg(VLDPgo=>_oUvm4xoYdYwcZt5EW3nyR0*}Bx-9hM51Uo5 zyvHj0-D-hquf{A>vk?;29dLUNtyc2chP_U$Q)aJh>tm2CRuhvkZt&NXt!|)88=MI{ zXaM;WxN_`EurJZpmsnS?$Yixyz1UUlU%jlW%GQe`p}y2>c|U!)HFXKN+Vs%MRVV&UMUk5J!l&1C+n0zO%jXg^aBJ>QLPwD0$0_R$CVN#q_37_f9Nx zEWtkiY+8tfibwYEuG7Y5KrPMy{IqKa<^QfoI;>nPk;tyTM{IiPuG z9n`u2MDUO-fSqKuX0`6z%`BkOs^=Igii#F>7(-$615#v9=0AYKYox;D%w#*XQDX}l z0r1XIr2U>lP?8~2v~_6uXjRV;ZKyO_bbSoC>4TI?`}fc3joxY^$8{nH&H?FF=GVWu zP6@B|UDNjJQ+4;2&K0z2vY0>MHRxC72I;Ajf*K)6%sov7`|0Km_ylh=K4FTJbS^V2 zmeJJ1R-4TOLFJCN-3*QPeeh_s_GpEwyI>JS5w(mY2x>XFV=uU)yAZ+ERYWD~fEY|7 zSBGxnSUbJyr|jnHTA)#cgr6#~vhK3(cGX=k%ygFyl|Z-&q>UCAcxxjcDQ?O6vkL>SAA~kd>8$n~ zT&=}nmK_`8m;5JbFnJK>XG2{slQj@IaHiB^JqRey43lt?QDGcB)N&}a6rxA2&q{_u zgT}os`XMaontrl9=duDsJvOS*_+zMnenZLb2ydH^%m_a^a`4_2<{q|7K4ZBFc&rh-j%T(g9pfWJQ;m$GM%w zdUi8O7dMUP&}I+sGlZ?Nw6&XwvZm9k?zf z7ZFI%#`+6^7FfdC{#bz}yml3#=TVc6KQckK*+YQ!17RI zc6-cb;t7FW#25HdV|;vU9$s@=J`HD+Ti|SVom(scAmvUXBPa0ib9-Zw1aM7#*X$Cn zN~N~T0MgjaIs-`Ov|v2DeR^IPLMq7Lsa?YBX8&OKl%#+poyh~egqsZCP|yL%1qR2J_3CF?zkz-6JyIrOYsy3zX%)B^ zs2eQ=W=zFli5#$aqK-o#qAf!pA|skYJtA^x!Xwm)%34Y`r<;%KFhV0&E`O_X`9^{k zs^Ljwqk_Z77a5h7GKpB@O;(5C&;&);wXMCbP}-JClvuniw#P0aYmsS}C$Z>J7w0M! ze~VO%6GW_R`92lKT3HC0agJj7sINymLYuHFW-W!ec)|jkB1{W4DyYE$RIxpo4JvA{ zLtBJIu1qE*+Z{wDN7a8p!xhd;hd$mTi$ zBP>b~W;#VgNHj>y3#F4ZR4EF;==;R7Axco>-qmVVKFKh#Wac8oP9Fh-jF{uhtWs(8 z)g0Tf<94p{I{V zBl}1J3aC=k?BA;vJ;P&_JjtIaiwkwnB-~l^JU!{CvfU;m3zh9Gj)hV(CNCO5AY_Jw zOEV$6wT15K7yJ1z<^xsB|FRz_4WJu~OCiPZBg6*WpmBz%w1Yy>pgLEH8((4dgg9t6 zsdY^yWl1F|5Mh;Mm29k%#6ytC5dZe0mNsY2YI)B1-NRZ+Sjj}VJ*lKg0<%i8O14%> z-z7WQlS*0`AzMkdlC7;|(xXb+@&^-?ob9fC?5-O{P$Fac7kQ^E8RBSvZmWM!7pvK% z%xtyBX7ydMSs699NF3n;FyYa3?s!)U=cH(?v}}rGU+>cA(Z4Gh<=GR7t^MkkatB{SEl5or&e8%WA#PD50(63Tf2f?UX(4!=T?#EliJ>)dh( z&ZH&0#Me_=^xX0WV(Vj$`Qb|Hd+(?PMsMCxc}MMMM@<5~p=R4@v%z3%8d_+yU{X5v z`TF$vl4zIDx4)WNzyPZ$t7-3s)Wj%_wDf6i=Uf?0wW&ro>o-Pi*gK)|UGuxyIGmW|~m;*`7Lhn#m*Vsc)Zd?4C;Z?{=Y{h0ma^hB{QXE&rY8PoC%?rHkKt z#h&}+HsZ^CAD4Bn)r>?_FRIql%XEhD5PQ8M*j%%tcEU&Oq9TF-g@Y3<>GvcrYf3YI zQk5LTeI`4tZzZHRg@}Ywk3QKAlyz(Xc@BUMKbc5dI7pn}Q#p2L!O4wh>+^L5$xsd3gE33s! z*$*|RGksajZxt)}p-J}ho1-B>4PxN`zrAbQaojkfzcTQ%;)* z!w*3oI3vwU$w(SV8qdz(r>dJbQPhoW(z+aYy&A19BT~ic>QkrAdEuaYh3^w2P5)D4zVlFP5oOUS{;2m86tl0>-F}10*-q?qt9THNs(Nun z*vQsl*}GjpC4c8PE-L&Lk@tB0FyHNZW0#zDX?;%KA1BkNjCL{DAHr) z&oclRbFCfoFKLlpjn_zpx0a?`>X{(hBHJR{BHLbXw$*=9ww*7n4HQ+Mbd-6v&G8qO zgd9d55rAojA6-v1yC$HRkH>xe`l~r(U(EYIEEg{y)3n=()7Yh(`_J{Q{i45 zT6m20eyV*)Gp6_Hv?S`Phc}r|2%V*^Wx6L$b7Y}Z?JH}fK-lXEPU7M+GGy}&zG$?; z_nYkSZ5&rO_}=aY-|X?tan9D(=rO+tE@j8x{VvpA;}8EXUFH9|hMLGlAyXyQ6=WYcN5I5I*Pq1&Djs>6{n2j$x+vLTz^atN!)v$t9iT{L6^ zz%zoF)|IUo&Ig5bNa>eaWKCmO2Gks*9+^H=9Bn-X$@fMz42CjPJZU)^N)-{IIU4!W z%Wnfksab^iEv4xeeLWU7O+&e)TptKAh&>9muxT*gVQ)`{Czk&9J3piH&mHOL+XybW z^hdJ~&AtoUYITY#?^Lvf$d)m?m#An_(YCJ#Xb;8(E#FWL5ZkhrZn%my6+wC%jfPwl zq&GuiZjFY5NLO1w>X@Ef{J=7t!>AZ(IIVi7%?ba%eoN1;RIBVHG~ zS?^t-HuZW&kuKvlA>@p*6Ad{dOeJF~`E)RdWdNLkL2;jwZY76s&x-~DRfzzvkpv;l z0BMH(HDG<>VksGCBG%P%(p45*ZzhwMr{s}J=pqM}9KVQ)!zTBX1lf}P;<>U0wOkGI zR}a!d8?5OU5`mQNHY3QW+g47pWS%DforTHNj$jI}fDnb^L3JVn-^mPSLy@IUXE6C| zjWB_^y3+~FJ=bV4Jt2IlaE;;`#guf{*XS>AFE82kmqT;xiDdVslF77mUB1)XGQGHv zOcgTbHFde1+uxr3^!jTFPRd8$NdPHGw8F_RxS`H-r zxgzb!%TVjdl;ktH9(h!)$NcMAay^(VgN)=YY4yb0_`*SH`ZJ-2za_6(e&bDaZg9LU z|ES~GWISID2!LpuK}%#5N?Jo&DUm{vLZQS9CEm_csM7mVsM3+E3>xmwpu->(CgYu& zLMu!@0sle>ExFhFh=sJ|z0oj=L;K^IzQDDeTCr`u#Z#IXGBWuDWEGHAKvp@qPpgiw z{?6&ss!(;)rmf%Zl>D^_Fv4yJfDwF0;5*U_U?lhNcB=W*RSv9~G#7<$p5S4QY@oxx z9?ZNmFKf)2W7hoY2Q~J9)$Ytvg%a)DQcs3gN=BC$l*FK<8+b(okzWi-2BCH{C@Bhm zOnOrfgOa6n6@!u(l)Upn$=yY>#iXQJ82eL3hkO`^X2@%$4$pXY6NsV~Rxca4MO> zAL3=XF8+a5TstfGw50lP`OY8B%qY{#>R~m}#?3uNaZ!9Kw>{O`ivsybZOx> z?34sAeHO4C>X8gWHoa`!p7o1qa9^@xIz((u9zbsvz1e&3&3Z?~7tiR;Djo^zuQj_{ z2Xxz;^$W=fPYu}q1Kd%J5JBn@Qjhx+8@--@_ zoB`?v)a?xF){3ESLyr_XWT1Pf+vD6hv4`I@0znceH&E`onMF8)a__8|tx)b>36d)A zl^@BYedWCgG}fVA1MM2@c+Lm8Rjgft+`aN6dEBwcf{znybfC@(?U24Yd*r%X)@*DY`W;z(=T+s^h-Y?nw=z)9j3}{viZzs z?C0!^J*0*=rdLbN5l(&hzI6X;PT3dAc5K+Tc=?#V&6CAC zzp!l#jVDPd0aAXMe50>1NPqq?0>0lpq$mFQnGz%wNIKwzW4~Kt?PlUHyKk+aM;TAV10kb9(H1y6hvr0H z6^a2X2FrmImp-4dp3^eSQ7~AW1lP#wGCJ&Zi3EzO69P${*$sPJ!)@h9s_s_J6R0|n zKz%5I zAHvjqn5LmQN&_}%olU|1Lzs4yO*uFnE&5y~gRlZ#Rae-S~uv) z?uHpyM%Wv*8o*e=q$kKFw>{~}5Q?)&Pu}SErS1_GgiuySPScgTp3dmY^6TuWi^k|r zi*Z4(<7MZ0Wu8^ygm@KB2PZetAGx9>VhXB1GDf zY!{15A=^b@F`@77yzefRv>i=uyh|B*4m$7PF(FVp4pgPQ_Jq3#OeO?s2Z5T#<|vEV z)|9&#TqXo+R~glE?%XW>TrGoi2hv@48P)egL%WlHAl>lp;)2K`m7gysCR`n38;6V-hp~|dO67uox5@}?vr{K7b;Cs#t^v!_YT}UaPMAw;oe32 rRPJ^&YGdvlliv1o?<`qvn|$}fr!Q}h^JGPb`Q!fqm=dRl*8mj&xF2iq diff --git a/Barotrauma/BarotraumaShared/Submarines/Dugong.sub b/Barotrauma/BarotraumaShared/Submarines/Dugong.sub index 2e986125926a423c362194ed049016bc6ea4d9d1..59dfa6312e15d72a7145ad4fd39be4e0d877a167 100644 GIT binary patch delta 182780 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%0D4<^EH+K%0`;MyUEKN3?0+&OeT+Ke_uY3 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%0AU%##FvOJ-`GhIjz0 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 delta 182586 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 Q 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

kwng!ulF0T>?+rIW+Zss_nsq3aDfY;Nq@tJ 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

Eg|S<_o!KuCZct4P|03TgRMOU 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 bCIEkb@osyw2v=}&{Kx+Ri=8$wm`n-)KQ!8# diff --git a/Barotrauma/BarotraumaShared/Submarines/Hemulen.sub b/Barotrauma/BarotraumaShared/Submarines/Hemulen.sub index 8b5737bfe695d4c9ab5238c6c2571287d6976a3b..6589ee31a1d98047d599a7625a6ba041836b54b5 100644 GIT binary patch delta 243073 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

    @ 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

    PS8q#K#Si%CvvGLV;#uKtdsEW=hQa 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

    I&FSPtN>eFnQK^ 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 z%0D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 NO$(F zAwW*PD3?djf9v=^Etlsdx~XqxI>djL;w~@J!nliZ*PPsSJFthgb$>aI=1wD>D z6PG;OLaszv)d2xG?0_(Y8!~JCfoZm@Mg^842f;6Ycz$PrS9829<-ma8HErEdr364{ z=e%F%YON8FrePYkw{JOMzchVyL`s+3D-a}|?|H#*gk~ee&5>Qs%^(Hgoe%650iVGS zV3isUtU5tHW>yNtkv%8Qdvm3aOA#1H&~qYS)eudb6V;rk=OjKSi8)EmNh&~#b20}L zB_|7iIayq2QKa*zUtMcj}lVh`8)* z^4w-5cU6o5OwRWzxJ7dHVY@N3!4DAF>1KSnhQI$={(;m3MJrbwMqjxgZ0nz z?z8oeRe)pbA6x%^!1|}8T>rfA6kGo`X8mg#-5NyEYM_*3T?+CZ{WzMW_~+1SE@3DKSbUt)c2 zki^weN?bpV%Pfvfk+`2i3M^*IVy0;&iIgs8ia%!|1%{MdiGY(>%#;bZ)B-MD%oKml z1RN7^tMnO5EN04Lrco=J#Y|bubc=n)i#GF!dNA0us^nxnCvd(eD{)e~HQZ=FT{3*2?j$GD(FBQ(=DH9>%)Qvs2EntsQm#{nV8@3+ z8UFk5y`I=7uy>+zWZ=;xA;uE2Z!sUV+UGCrvj;+m$0WhYZS^Fnk-Zx9a!g2UgWhu zg22NDm!@F9?1!uwL$Zqf%T??bWP$MEA3>CV%ecwMSM86Mb}qM#LEW-DJ9|dIRSolL z&pGDssTZ)#Yp6Yg;1orF0m6Q3T)0_Zu+B9G2zMS#d(eXG07iy=mAO1g78Mba*FZmt%*@xI40sn=gL+b(Iwo%8M6%oE;M~7062=rb3)u z!t0)wBdP-@e+u7Eyp^<3NM1y5#3s?FYf6DK*KM^R#rptN;{tPKM6V7hP(%I+Z078DEE8 zVm4K*iSw$o(Aua2G*HUn6qp&PQNJ}(6L^pmS&j3=Z0@l9bRFIvd0Q5E^RZEhkHK^I zcp(!|f86R23+UNa#i+E}Bpw4!Jo$6bc zsRy1pE!|q=k^0{m(ruY8RRjPrg>>sgsvjJ?`!z@0F4=3CY}O|0UBM&RPhoB)rw`9( zwEq{@i{j1*4;pty*r<&=L!85N=!02zY9>gpf0jidyKV>@V@SZ}p<^`@)&`)XKqKLC z$5e7G^1HzD14rSqneTULj%!VPR)!q)HGVWk8z)U?mdIxJ1JsxG`lkpsNZr`4Q8es}eg zf9Vl3@77cgr~|PuyfKB-qBrL15UPqT#d)5?zv=fIxK~9MRVB^6rV9Y8e)caoowq*# zjB_}K9Jrg1!;gn6dM*#9i3BlFj^E_)Z@Q4U>V?E{P6E1j3j*T)^!9??h(p8qP5u(* zw;Y_*?$+o^<(Z(%AqWYkvt`OlQ*H8 z6gYUL+1#Y(LPY`2Bbd+0`HCZBP9$|z=OiUBiims5;x5&otP=rNj&GaC(PM6tigL05 ze5Ply1x6jBIXzm+oR;c^&yrhwyxfA_I?9uDL@}r`O?Jrmj=7>x$qI3=Ym<2=S3Ob8bZi>V zrvgkFI9c&Id2=~8C7bv_I-Zl{f9>FtM9*>CsF+R(L(S7zVCBx`^&IGnyt0&YpZ;69 zw|F_{@QjjoNUC$B%1#g5`@}jYKp`YMz6ytCzbmeI!=3JZ3j*+q^N071$9y_{bs4tc z%k_ihilX4#1x=5=-A#VGX2*nhCpd?lKnZ!xo~o?l6jm@9c*(cCQFSb5e?)xZefOaI zFJ9L%o0tc39A16BLPtN*g&$K!U>ZarlIou#k3V+$`e9ozpVPzApY61_@B3;%gT;6bfBEM-3X9)+V!9p@hvJbqb!zpo71kDuN@3qWEa_657#4N7S0;v;7)A!eC23wPS0a)t z8OO!MFe?lBrD9lHu^9Futa>oyjf>4HaU{2H%1B=e(=s-n_09kPGrm|#vq2Dd2* zF-z(^;fnl3cM6u|$LuK9BLW>T*u{8@ni~hi@guzcY)kSBe;n-*!Am-Bi1QWXUkrOq zpxv(E!l3u|qF@nfcurDL;I@Jov#On$-3I7e?&Hg! zl^ahh!kkxZ*v9ju8NqtHUfsva-syTkMka1o?2Se}M?HAAAY)7{$&ba6xjCz4kShAj z8N0r=tuW0_e~hs^2~Q+goYD$hq%6d_p62FE9VFl&-Hzh=UZ4>WsQ$C*@N8%YV9{cJ zR-}=N)^HxWD3E;i?D9Dm(FOwTo3!mv2WHu~N-W!w{gfo0(JvupQs59Hl zbBJ!7D;T?ETjPo`%RN z_e6QrcV#jjWjvZWk4kha6^r_KGRC5eMYCa1hcEvSRuwpYDL~OIKQa~wcOC0o$c?-~ z#aGhRyPQcPFZKXIkgWhlrmH2-3xU`J7Wh@9O{gX>rUM&wjS(ospsyKD#Yi5j#5#ak ze^JkA5KTnw8MT%5c7{0B$aA45${uWVJ1_zB(QWK>&Edc{+D_I{G?CX~M%*dHo66Rd*3PrG}D zjoaKdPAS0%n4RTljS%V~iuL+q5yaK%jb0Q?0epr40ENw08&l$%1RqN&sr+`-(odJo zNPn^xof6#&aESIPmvQ5B7mtjd^QfpoTXyRM6?rev=Gqh>H4w-LA6OOQ({J_U-y$p* zOU)qY6Dvh7m=7m%;e0qm5V3r?EsP7SGzcInG#}1Qj7#HR6w0Cj$D=_G5(Yn(YK!sS9&f<#($NJE7NDPXTXu38O%76apck*$)l7Mvf)V2 z3&A+jU@P~M94QMaI1-|7Rkzue%axuZNWhS)h~3t~Ikxt>I)Ub7Rs(ZVvkxQ|yEVTx z8Cn8$o16vrK%MPmlel)>?^%bgJTuD}42){iH)qz*?2?x;yY@|dtet;pddh#lEPp@6 zrR&#)2x)9^=iflY;lJM)9(2N4tuFs-uISRV5)STALOkXeeJBf5gP>DsN=A$qh>MS} zB?Z!mcQO8mBrF_CTUy-uEz`l@o)>g%_Q}NUoZ=Sycr$U!#O=0;TQw_TE302AYl%s- z3c*RLl7AAN9volbG0UEbPCpwE>3`)5Pq#12Z=&17i$>LrzDppW2^{XLE#C23t6n!j z!5So-$P`VlYr|R-oQ#ZC8>l zD4HV}(i!}`ZVU~|D$yB8;eWjudIJBwS^`!ITtZ9GXK4w9LS@U&+Obo{+}JzJYXy^v zj%9%)ZCgeyFrK^1%dCd?P{$^ywpB4IEdZa;-sjPz>QFLvTq-vAMTyth0olDF&s&XV zz~2TWYHjhZTP}C~>|DS8wCJ&`Olfwtu4m0#jFzf$F#b z0`P-UyN!1cU{JufQ0Dvwvb)*$YfU6Vp7kRVQ>zwItHQyCX))L-Az$*k=czS22aYG% zVL8ogpPFJ1f^`D8v%&lS`rr>k({p~^@6mWKTd+hrD=AQGf;Dg9^4R#ASkVUBkY!^4 z%Pn1(1{R0s%KmpA?0-&8@V^WA-G^94E+UhQ5Dezbi%8*%V7>IH7;bUgfbHAFqRdNmFvFy2a(Pcz?ALPZr!y>Ec(z(-B?A zYeG&^b4aeuDJqtZMtVGnbcaINcg^k7pkQ?f;2Xdn;{5m_6q;3Z4N2k7Euao<=CSP! zPG+)=UwBR6RS4~I9@}huEd*Jdvdrccm?e4P(>m+_TAK1}>iYlmfmWnHcwBy=u0iS4~=V z%{PT)abxQU^D8ZEh3ll-pb@(Oaa&m0YTno%IyqRu^lh)^^BsLBNTKwpeJ4^*V^Gpe*>DpbG14E9i?ElO@6?$S(l3JN6W>Floq1 z^qk-+lti9ihUW!pP3g3D+S-x`ySpxBO}!4gM3z;oiTm_^6B`I}p?(Thk3Ji-$^FJ( zet(}>3Oq@U;L=x7s&ht02c6FIC3O78vMTG9(=n?zV1@|?^r~r-GTgse*)a*N3V%qV z25GE2g>>sgsvpxsF`SV=5+>&8pcpzLCLKx4lMry7PdGBIHfciTgHRQP*fXZ|Fm%oc zUpDTHz+*1mZV)3mz~-T2ZgCWB-_|iEaev2DaxC(@!14n};j-k~gC;E6s6_tr3&GC; z;}W=WrqwC`jFyA5dJt190;CL#?5ZPv135uMRiDG45U68FOm{681kh9j5NNy(e`-$D zmG#asp${5(*6dZ4D{_e=_YynK#mt&(4rzEh^L6x%Szo_T3&G6lUnaZV~ALKY$w<4y-zve_7u=CH{?xqx(#Pl87Xdk{kPZYu@~QgE0ju zDcLZ^B7ibunPouU++~1Py#KO-_fv%b@epFWRHpm!TMTIDA!?^U41~z~F^DLt*V>lV zp}cYfTbHo)dylqQhZ`gFix}we%YRRzkt01<9lJCeK%eSISOq?}e3(%NlO6^DKTPr} z6Fr9o8n-pjh)6yS{t(a?+dwiU#7OnS<68+Z^1PpWMjxBA1Zfd*d}dGZFZ#BB1i$;&41*G*o`6Pbc`!;I!B)nsC` zs#7Yt82ogUTttm;pOzbijDL&qka5wahvza?AbOh@X`%&Kl$(^VlNMIb$J2;+Y2=qC z0*A7oVW9~%r*2ll&J2|O0_$m@&<|Tr*?P*>)2~#9g_O#$UyX`QUN(8z2Wi+5F z!!jCJM#DlG4GXYW!0pQtW>~^ZI`;CFF#@=<1((bGvK-*e1QZ5{Q9!5&=x&)A8&tkC zHt78<5FVVm&v(==hd`93#}5-CQapHo^B8B2My2vt?BZMSdQq@p$UX<(Aof+$MEFDS zX)I8~M>pwy6%!SUW`6_kkg^?%qni{MOIQiG>2ul-B4*tra#hIb3QPN8X+JFOho$|n zw4d)t`{6>}RzgQYt>r^UyoKr05ii#I31~g7M=4AD**v`WMy34_d{^77^--mvYKRXF zm$4}wmVeVpDVy~!ir`m5SXu6IJQ`0Fz6FiPi-1iR;RWeVWq;5m(0K9}f$@HBe$B5r z)`_W|ycVyalA=ILxU!q>V-gfF!9)-Qtg;)cpqwt@BCl}VA6^#zkPWQtme*9l-{3jv zPhM5v9CrhD=2c08&xM>z5nlE~^a?>z15F(U_GPUp-=k37b1=7V0;u*A@*?MQXMNDe%LBHI>=H@KaM42J8 zhT5dgJE`@K0m$!ZsvU1od$kyi!N90C{ZzK~YwIGXNPoH8H}UDdxPXF7+aK+`SgLeu z^b9hMGI30p9n*$@Z1vrdJXFm3U=&?f!4U?^1Ng$$yztPs`6&hYo3e&wQf~*ZzFx%^ zf4YP6OI?ef@D2iY_H(-Df)UHAoU$sXtjZ~?a>}ZleovLtDF6j2vHmHSSj#kAn3RDU zSS`~p1b;O|T#P;%RL3$)Jf|{;Idhn&b~0+{G~~f)m{&z5v;}_#4ZT|pI`JV}; ze3SEBiRcaTss|TCbS+55eIhCW_?Do$Qt4S( zTGf%S5_r>@qO~}zfC2YeTx`0g#jU5N^=Sd)1GqX_%gH=j!I-v{1+oscERK2x76dUH z-G7>gAal9Yt5zcccteyo4;N=Ou<1ee5RPKE=C4<%eAI1n7Tg1k=n#{hSd8v>hA~@A z`J>>noqs93?7v%#FQaaZoqq$4jQ@V4C&TF~*y{4Ji>y5N66*~lB=oSFex2yty`^LW&8-3Rx=Y>FgfA{E$t*n+`TLrL|knR>PMoq9EWntvsf z>4ZLA?&AA^N_2*R;rWW&Vdu(E29Fm5krbX8Jb`z#kL2=A9;fdoDdz{%$s8aPPz?;| zXM$epzcuf8tyQm^pr;QKPGmVa%s$#A`zXN&In}CJ$YhaInJjayN?ssM7R8)`U4huD z^o^@h*my#BwiD)*DKdu@cwq%z(tp`byucA_C@*4h3~vL=s20+s3!yj1QJqLFUMRaC$?7ux${4b`gCI~J6d?NgELfV_mQnNlq3#|p>F1haf0mM_Heg}x_WC@Cihl!*CqfVvkqCA2EF`(dll28JISh2ao@}`{^5R?TG zY&(|o#^PeB*_G6Y1NIalGUk0QXxSyy%)+MD@inu+hlH^%edDk}-&!+^U#4bO`Ya;s z;tU=>m(XivMzZ=@TZ(VmihtTVE3Kau@W^8?1h2lo$^ymT9w-jJ8xOpI{>?m~J6O2n zE8a~Mg|cT<-*z5hpdF_p*iI?@&MMLi zX0QaG;Nck*iF10bLKKNxdo9g>k`#(r5`=MP9lrVUj0`fi?T8PADIm!81TFYyCg@`8qiihtxjuzz&&31t%{-w(M&=3ElZ^CKfbkYqYqqM z@0$I7xGhlRV4yXSf3#+Fdhp@@FnT21P{_S0@@o7a5t@dM1%5^jR*b&so`CGC&Gk}% zt&yRkuanhH{3hLwynmrY^oBegz7Za%Pb62;SRxAYq_Gx9oQI&752ih6Ri^+i{S)Xy z;Nd(p&|JWpM{8Y>HyL!9tQ3@lFj)={|A+hkhx-XNL_ZZ*7brO-EONO<^bi-<3z7+P z%*PW1_fvxS>4*RcmIy`k?_v;;qd6i=BShgf^ju`8E`=SkqJI}YP_P#*AZ-}fW`}`o z(m7RUwH#}h`*@d`Oi89C4co>O5GgTM!qM?kHA zO@v#FY+F{e?I*~3+)v5jB_QF72Xalp1#pcdJ)fndKT06Skw*?WXbvMi1P$ncrSG7?rRC+SrZ~heQGE~el9(5X?246y5Ra4d4=0ba+Jgb>q>N~ z;TsbWfF|TX@8hIX_wP(Rj&HAEd2TgPztGKzQ#D)Pm;QDjMa92q_5>449hUQV><$#m<&fpS4(z9=&? zkUV~`cvR-dLM;=eZY#rI!(Ol5!pl{_RqTeqBu{yh5uhaNU;yS&fn4thnD?`s_gL

    c(^nX|wQnln>fgmvaHg))okZOc1OLjRogM@<@Jg{5Dkqtip-^g%a)k)A~)d?mp zMPM9B0sti_8xp)+Nr6vb^To8cV0tw8H%+_R0`qX5T15I_cNSK;APU66Y| z75KwYtdkC>Vz5PK1^yVqH$B1^mTpp!7UbK)C4Xr@^QdR2si1Z65=;PAMwtaYvOu8| z9;MZjQzS`Xq{MMniy}BeVF_kIITn=5C@AM9^Jq@BFw$QIKSkkB9#p+Qz{tO4>>RXI zwJ<5ZTA1YWwjZX$hU3I8(}2HaFVAA)=2>iRk-!-=!s;V2G{W7KMt<=?QB~mq^&AgI z9DlA`>r0bV6v5Qd7>eL-N)aC&E~QDnBAC^M&y@A?5F z7Tij_xb1Uiro{EbcoK)6c=QJ`ksIL~&*1^GrZGPil79-Sf6PzkLbUD(Gk-CycnZA*Plv+Jp&;-9$O6~g#!8}H%g>|E0EQ}5>uDxxI}C3)5`l>TzG#C6H})bm*laEa8}hN z5m&Z~@{%!)M3jKp;)yB{Uq4<{&Cy2$bIDjA5i-l=6iwuqNL$l>BA?{Y@*PEZ)PLE( zu%(EaPJ*UD=^}u^1^FY!9}~JjtgaKTJzE@i0@MZfQ-b*Z4pM&F(J=1OhR;B00aIoN@yMOeHKo}JOI1p^aE3NnH?>$J)Hd^h*u!~}|*IBj) z!i-#WL{HdO8vqeItv=0QU4f>XSfcf(*3Wb@c#|Z&i23Pr7q|o$Hg|P5IexUm>DS#JZ4lm zf8PPZUa0rBUaG5+mlbeUSY20627q;(3K15tei3A~Id-`F zIN2NGOJkH4!ReO46VrEsw$rCbt5!Aanmaqn8afS0 zoIOqh7WXSo0{mT876Vpq-e64nTmllkp^h|hrKA@z(-3&30Hzal%9%ov|4tE^qQhfC z402YB$N4%uI)A%Y(@1EIn>-@Fof{R9qCGHK$cbu>%K_$!I^gkS{7ibwcr3tIRg~0} z=~i*KKSuILlO&ML@nRn%Aj|i+NfbA=)(F0SGGN0+xCIEAu>c7r^*$jOi;ysn-;a?? zvn*IOD+^Y{IxQJlu%cfKEn^F|Jq*_M!}yRRDm8%zaDTz_h5Z1~CG<3ThMwlx73*h5q%xV|H}}0yIX#a+#!L&R<(>9Lf5?V_WztlvM~M|T3QKb< zh9F&TMOZ7qVHmeEZq0yO1l@fzx1vRQz=}h@j<#z(z`m>q8_J86>VG zGDc>MoQ1@7#Vj(eoPoskv1tl0si*;znb}{={z}cLvMx}GiyJW#cR~4TgN^&CR2N3< zT;|0BDh^PH73#Cb^bM{grlz=!DDt|H9y zuyE*%iJ7p?SlH4{zXp9aT9U|l!AhqtJ8DU5)S76uT9O|C(*-S;*I59JP24OduBK_U zHEUj#z>4*^Fan0hoKGIm26-9&<89!YELb}wQkb1<=Zjeh|c z8MkM^?Gj;ji1dnpU-UL81N)zF63AHhW3DpBv3>VucHMKi-3zFQ*me$F007#R&@SHC zrh8fUB@{V7JyHM%E=eFqC)c*p=-6umIfY98NgkPe7b4P!0|S)@a;=LiNyxN;V|3B* zb2MZLR3x4yX|Poz6CFtg^E@wbuzzF#ekZs!pN=H@pBe{i3al{nBX((VyTOW>?3~mM zHqUbs<_Ccd1dEnrVh+|qrerEoKIP?$STEF-Dxik) z981h+iTNxs|EDG9MYhu>mP3HQ4IV_;v7LhMCk zauHRWeGw7M%LFbG9CTj&8mEBApFHUe&jMg90G2`QfX1}~kuFzt4k**IyCFfC487qC zco+MoVON_@u_DULo;!gT^nV<9*K?9S57g$nOVardl3Tv^Qc{`y>9v<2x)H6uMBiq# z_!8Z_n%YaViZ9{o`CNWU{;K**cSGAY2RqGS4bB<_P)oMiwhVmUgI(gLum%R+TD#S0 z4S-}k;1d)HoPVMy{01{aqVKHR=mQJayJo)+chG+$UEOF`i_pO)(0}XG(VEfe!H56D z=#jv$WdD}Pi}8O%C>lBz_!&7^G5V%^0?aH){;hBrs+;4z0B0jlMc?R`ys94w>!lSY z6AzO&l$gt~K+R{bRb}E>dKz^)q6TSH4Z?2DAU|kCn5aR=!;S$6=2xro&#$V{Ly4QD zO6g<_4IKvys!}4B(SM2^Q~NBkRa}6VgUkJ*;_+hEStj~ROq1VhO zjjGU_m5`~)xRN+!Tx>uXKaNVrAwaWPuLNECA$>ma?&$2u^MCR@qeiR*>@*%bDz;rG z?1R66Q6*8IGOWmlNhv2WH=c;Ys`CxYg@+A5qawpP%q}l=w}H&%S&gc+_&!yzo8E_K z;VWP~2@nkdj5ofQ&27mPA+$4Z#rX&=LVUR6d2g6qqFQ|x4IGLF*DPK{NZ_ppg~Y5UkF4(K5se>L2}_At<3?t*lr*F9fG;Ly zjT)KJQh2VB30qj8dcKHhATIDv!>k~z3eBqLyEYuFp8rG4*oD$cQOS)@mB(fjta|?X zCR`_*`F|)$QL&m+4o7qz)Up%gaQHHKVnDN+b(x5IA}5(3cp#uk%@{U#w`ADFyQNx$ z?s@}=u9rM)M2SGnAbwa+;YQpY8JKpCO&U15>LppDcp@Dbjdr3RPa8I}M59g}e2IyE z2s|-#{{k9ybKicVeToOjxUP;NVw2hAaifZN5`Vq%MZmZ`FFNEFrm}}JFMHsLp>d}V z8?mRABxc3~!D0ESREXYfq6&`(g2PTHF5bjk_J%@@QUEQvZl6ycLfZF+##mal|Mku4 z5Om#l$93p_1w*-2#pP_lz$vaqK5R?RX{^c~L$harO9Xtc^apW>WCN23!JkXB3F$__ z^?#ALuA)B@WtxIP8!|t*Pt%U{Kg2i{7ny?*0f(;8_&MkZWbk{@i%_pu;2I4B0zEuR zvgE5p#B`#M91jE^30=3#JrKeq0xJ$eblk6E*z20yd&9CoWYGKa5z0E2ct?DXPT`xb zSuU@ARXF-Q%aoFz5q92(fkAyFhn?^+kbk?{hFDT?2aRD>EzlY*e4{*xHN($haWj1~!p?$k_Ri0|G1G0ii>~w=V z1q99AP=3qcI!IHb!SCzM*ngIFM9Zurn&Y?%y0Yfs+K4Qt>W!APWKq>42%_Vhgqol% zM^tG1QbAQ4U6?++9vMCoEJ7I{KRi`lB=lUzB3c(h5Cpry>1s{~?+ybHFaW_%!@(~C zAc(jpf=B!q-rNnF?JWSXHhu2OdIHFBVk=p2+#T;ESMeYJj;Rh zopD+EG)u%~_32^R2Y<`~UQy8muhtPZ=m^$2a@Kga@Q^O$@`6gL;xF!A^V=#Yik{2! ztZ+9INLdIZT2wyIOWGera7w2tSQ-qw2a*Dl?glAkfE5m$4Xlq0&IeQI?OASi^-=pS4q^xa(^R9xl>o%D*fh*? z-sBYLw1Ukq>jqArEs$$z=@IB;z;CsjCrP&mvaEv1=RUpf9gzhrQmjCzKZnFwZ`5zU z1A+%Vx4FLA?SC(c08Z$I;ps9+uYHGJJJhjGUK_Cn-S62zN&_m?2KnaYjdsnmXj4+O zNn1FkG?&E~D}a1YmnJaz!{iT>KP=joTh6{Fkr?hzusA4F5LA zifmhrR&^Cdv5`ozh&%rV(1`#2&ejtYjhIj@7i)G* zNtIj#*XU=zEv4wq@ciu@wT*s%XD`HM|>g1kcux=*GMZ@L4i+ngRQR@5FM9G z`2lOdzkgV7+Zf<{p#<<^J|Z@;1xF|Z+^}NbQr$kjF!#UuwhD~NKBZ9Eva^=iWh`lZ zXB*vq-L&ag7EEER#vT~Y-Q^W5hxbs&40zkB7?l<*Su|;WYVG;B3g=%{cs{!@aAA5E z06y9Sz?*d8CIHTE+6BP*lC}*1*3u`;`3+=u4u7pTkqCL#k4QgmJ)co#-!EtoyWD#S z;phQ*f%^OKvgaw65PO}Zq77k1BzRz&|2leckf{@Fd-481HNy zpQLa(QIxQ+?vl9v?J|<~kzBsma;m}*odlQ@ho_1pP|t)J;$Ox)UTf81L4_YjPh7?7 zwtwvrI%asSr{R?-2=(kNvc=QMmT_$Qy#;xl$FQGDYJ;;X0}N)C&a(+tG2)y78LA?* z8KcX~yWdguVO$!wU^6geIxfX}0=&*qE`^O$TQ`om-$pC!H8monFBSvwUriu!C&1Xi2|MFji&*kqm*V9JVf)?Lt!4!-vG+ z+Dt62aU^~div#%uerJiytV9!;&OM0SxMIn}sqx_1&hv=>;kg{v3tMmBHhqTd9e>(o z7#EA3*MZrb3x@koi*XS!Wu@U+hqX_fxA7@;_s2}Gxm!$2b1NKkMA&Ggex4aTyZSh4 z&+{oGGe)8sP}>}t0RX`8-FxWfuX=dOp!mMuY4}bm_les0%{lGE}ZqX4^g@o6IKLWazL_bbH7au#& z62}>WPE*3qC_NmIysBbco!dAkQs}|x*HvgG@#r9tn-d;H-#SGH(d{(gAReeg{&?P@ z^}2%DnB!}ku-0p+gwBo6nsx@6R+)g8lH@FAzPHH}!)ylVwdu)SQ3FLn6n{3)d(Q+f z6TB?qzy$Al3tk~f@G7LFkJ^C)XMERVzzAm`m=hJS zQ<-YZWGr(iFeD9gC}bsLr9_8<2FMn46f>#2h-NE)k7kSR7F~DqJeg+8G+UYgKE?3?uJ!E(ys_Bkbp^?zHlt3!l^wJWL>PgGALq8hAPEyqjv2No{#{W2#6i?}hU zIg7Y0uOPcJSDhwvW$^rhz-2O*IVG4=f;lCaQz9#;gqGx#;5m@Cn0d#X63i*Vuw^W% zl3~l147at-S|7U{QGx5h(NzVU2#TJQ@ZTJc1aXZ(WM2o@6@;jhmw&21Q;Yd!0N153 zUGm4HX)@K%ivYjRfL-~E0J}dju1;(0#nyB}Ct!AoOc5Vuc158?AIQ&hlA2>JL|JCa zsycPg(R$Er1}%wvxEXZND9}}ah42Elg61*Bt*}gCNSvRJjUna)4pu>sv2!K$|H!(K zQWkX~vs(*TrpT9MK7X=IkvR%Pa+wu^SG?%Mr@cQq1rb` z2Vb!6!OW}GEXy8OhJyiE*RBNhsz55BjuIK_4C=}sNm~1UO!!<&Nm1r+{>xw^~SIt&rqOA=B%G$nkYTw8iU$;EUa^ zLLooZE0(JDg(NMaPkZakDqLfJmt=v@X*mhq4NFLK85=vnpDHE`^XNILwPX4m%Sd&3 zx>RRXs8jjH6cI@Lhu38IuOf)x4}+~Vm8eC(p)TW6#($+N;8I?q+o`zJZ>r0AIh%+$ETE~URa!QDdW;iWhvp!Y*u_!kQtXUy>wNwl!j~5b|;s-?zX`6Ig(b& z0<6S>V%^DEy9i@D+eM(uB%@d;F>F^63pKj6PqNCxf+(Eo$*Q$4r2Yk9kYcyyLqTw% zsoUhNKz|4`+7yRHD_IMi&6H{Ue1d3Nd3SdxAz>&jZ9AQXL}=8No|OoV1=LAmP~l^U zI)L4PJVeWG0O!B&92cr*=)?wacRT?7(` zu(SJ~+n8)**ewIw#_|C~4W3zY=|e0szw<19BkyN~EJ1cTq{Q0CV121PJ&SAtMF-w~qhQ za(M`^l1+U*nzd)AF{EKH6qC+sD*^Zw0k(|27<*;LULFJ?FRIw|4n-IfUrc;u#a~|7 zn29g8I%dB*dI2>iz8HV4fWN$G1yk;s_tSaCuftZ`1=4Myze+q-~?8EwM(a!hbDM zqtyB07b(SX>N35kfS!~KLM2J#3X*bPQIK@;spY5siJF)Lmo1xGY-+KomBG})noh3% zD1!b7f`YADY}I0`*3wg}-*j{-I={RyhpLEFE0l8DJZ84A9*W_>vf3-u4ih`lXQD50 z!V-1eK>)gcpOvQgI__8=>q`o`|9|8#_GW?I6e*?P@Z(q5)(jVBCODYjV1i@o1&5qc za0DWgnm~+YCODYjV1i@o1&5L{27xLIi$QFDOb}NP78Bfp_vqKSWik47dykLCd)Wf% z@4PAq-%e;_CD;O|f=1$c2G&e38-wProrVD}0TCSq)L}BPIQWj?d-ppJ-+u+KF124E;-7~njhTYOW5bL1;b0ij5o5~Dk~;mN(X{Z*YDqV%a%6M`JC-C5k1316 z;jyMqaClx$8lI=bCK%7e@xf${TmWepBDR`z0fAgV)Fm>$hOWmZmF3k>#^15BDSX}U^Abwz7BMrB=B znM7Ufvd_EStWz;6YSB!hGKspg0*Oj{txs9{|5LafRyt6gzia-V{|oOv-jY?*UdIyf-sELU<7F>N{)wJGuww%+KVMCMtwUAoG16 z_x&&Lmk-(c8LK~IHdO!hk5Uc4z8e4eQ&wBCe&+o%jsNwJJgtAuwi^H3)9=q%Rpp=R z+SlyQI!(i$efqQQYqb~c-=Eh%ebsD#{vMEx`=4zZsz2MD71f`AyxPy|zt544<)6K+ z{>;;~{*OOJJ55{l=fAK0XKR1^-dEfI{O8Y}HQRsv*>;eb>KYpsNxmrKf zSb#?pjNfrO!J}D!tL67u!4A{7SK|(D?wd6gxcEPR=CwLL)%h8~hX4BK6Y`dOBHF8& zIPlN(f>sI|@a^CK%BR33f4@vSvy2>PnUvH^PUsS&^^`)~24s%Fj0L52$lRD~c+Q7w zET)N6Zci~I2w6Cs_bkGXl3tDq-C=~y_dE?VHo|aOL+CJnT75QH5?NV}UXo=!x^Ib4 z1!qiI6fd?&*n~(fr*nNZ&0dIDapq8O^^J z0iWT;rGF1@rrYQK?{L0<$E|(dhVg$d!U^xcH}h@I{|qO5d5OdQI~=c5|8o(rXWP8~ zUPRT5@A?1V^Z$46dFn0iN;~e`1idCe)lx&%04WN8vQ1vBbkR0QzgMZiwe#;lkh{}T zzZ4L{BV@!a?0?6XVt3aC$fQ|MLVt9p_T=PRe_RWGi?L)~NGsCN$bYj*Yh_XYlYZhZ z#eDO3EU$7qRtnmcS|Pk4^SK0zdb!lqf9D0_4eLT}`tX&-8u5MqRNHB`MAZ9!)NbzQ z%qNI{x_BV|Rp$SBSjfGt#x1#vszk&GQINLy&-|RJi;F%p6aUy#ChSQdihrM<-+zbc z{Jy$;Tfn(Z{GR?jx9FUPYDlbH%I}M|z&mND$Z$nFvGJjmh7V-a{%p`{Umx5|(B)14 z4j6`fI{Ubsc1h57W8Gcnd@se1u!R>GT+Stb29_E1XwW&&P)}jlc5>4+{Z&eqB+0w1 z{QJz#VHn3GzX+z*bE3Bo{{HBf*4@=YBzdDdfh*l!-4wTxb;Wx!HT8Je6ive6HD2Zg zR~0|-Qq^BbN>wA(2Qo(c`1vi%&MZbV`AXm;kLAfA4J>~T$NRvvo$vt|q+xuNiRt8j z>EIK)JD<-dM$UeEeN}b}AXIMyEJNhhu6#xYcz4~z zkO~pOuRePNDGp9D4bw3ZY)JL)Fc50$UbE{S(ptK? z@lzS2XB@cikAQ*s<|CW?HC{i8hHjdH)byw;m&~<lv~dW1cMSbi>xN}wUQUSY?gRdq#rf0U@P=Jn0C zzWhtThv;=jpaf=bq@t!=h(227h)v-njIEnG|1;W#QyjJW9jU z(W7oZ#QfW?DQZBiu#Xe(=C&%&NlQYCB#FH1s$$Xn&%b@Nf%c)ZK zMFfgo_#h{wM4uBwoKq(^-!_p(A6vcI8x*5hh_2?Ihl<7kWN4=kQp z$Ghmhx_TiFVs}jlQT#mB?om2D>&#+TmBcys>^LTGoHh)%b&&UcKJnUy2T zu|yKe8l(AQw3eDs!;Ip#89QO;av_tOQXoC<{!WUFskH3m50^Z(K-kwWiO-jgB}H`0 zF|S89hUY9KmF|Xr-MRxs0#?(T6HGtl^>6RwAw3(1HSRNuTIL(KwTEWR$=u#OW4yMP ztNe^iIE?chFD-*@r^0@m7inU4h8q3(`{C-d9c}~(*)Xq20zfdV3QH7{u!Vo#f2`?eWP*W-A&dzz-tUY9xR!%W^4pcH9A;hD$ zcKTuKi6&& zU!Q_%NuPb?tAps_8f++coB=R zHD1g6I$!5K30>aqsM0_Tcw{9Grv#DU-K1NJ1TjPd&#=Fghx5QM$<~Mzp8--fsZHiB zYftjFBu9j#S1Q5z%uFx*%wmGT?6oK;S*Em}?Anii{;{zGHmqo#GA2iA*zwD}LZ^Jd z`TOk}yk))ymawWI0W z*7F$0-0<9M$_q^#76DYgla3TaoTPj>BM496jmkY6bVC7w6(3aTsIgg(>)wua9QL#@ z>-!0Rl=3SQ=S$3FRpGx7sNVGSYi!RG5Ni;y!4BJKC*jzHog$_Wya4I%7?nEEYiFp-7qT?H0wGN4CPOzBr5$)U1K2t(|A&t_^PWTH+V{96=3xSQ_vNC#G zXi7*K4xK-g+>OL2w%2x9G_}?uGL*0Wl?whhc@an=;5*ImJNwgrQ`)^mcG!N`7nfSI zjBN16inHG4z?T^Mv!Haf3b)DGAp)aBHf~CMJg6x?SkyjotRMjPy>COtg}Ix5v6Wt^ zsDrE=inTsz<>_kBtaUYVgOy7fd_$YhUZG6FxVPMLzbR(FI=)YS3fInGET3Cew_Zo2 z8+T>9TO7xZyALR>#3ie{Mjm6hn8jaf6oW(bAQmCwlwhwD+R7G%=<+3En4n}iZ}6(Z z)foM?)8-o_eOmEr&n0VtnVJ57>IsE6^-TMP+#o`*_@h^3(%&EH_o)wuslLb~(=^{2 zLpPZ}Jl`DI)G?fgbIFIbixB_fei#)NoIp_#W?UCrF=An8eA6THDO(@k@cwh<{0h4* zj-h(gZHy;3m|BqqsMR{Vm=&9CS8}Ih-0i4ao>URVs{1hr+Ig$ElKU8c>cyL1z- z8qRmS<*K3r*FUrEVmtnNuWs|RF9bAYq4p8>dnCJN;rq4EOVv*~#)=-c<-Yr9Y5U75t@)cZR%uzj!?4=YY?G)8pj z84VD2=)t1k-E51bYG}xRM}g_%s$&g-OrN_7erKh8uVFs&Al&N)>9VX40Y>F%?wLE? zX%SSgc9_>0daZC3BAlsKp_U(eRiW;smad2=kL&M z*tY1h!;&ygmO5>r1dkcMkKt({0X>ir=%_DGDSrTT)TS$czubf|7QH5N_mq)s%-4h) z8!Z5=!S;Wc%FDm2LUBAfYWonAf-eBAei(?}t~6BLW{}o-Ll)&ne*#_8FG_)4p|yo=i(F~8pfd-DX#i4a8-<{-+f)?d~eS~F~vv$}Z=PkO&b^>kmN zNtpu0Qr|T|TNsW-f(BeoG|f|o*uGR>wCy0PF_4@874Hdu{c9=0rdd zADjlf6m^sgd(xj_=qB(z6IzLsc)d2EP|BKWw8iVUekj6@NTg&w$nkj${f1hxNU4_<+OLXtE)!sF<|?zJg6CEHPlv1J3H8{Mv3 z;zhMzP;fIBXujDQeR6!Fe|<2c>cu`k8WvE z#?S`$Hzq%g>IQIMQ$u>K=%x`f4}reP7Zjt-OlHjQBGtan+9a50`Gf54lxA>fX6(Xy zdiq9nGAHlE3zq(-oNW$&yQ|Vk>t$WhL@_+{_gQ%aw+Fh1@>QJV3(~&H*i1&C2!9XG z(Ni4>0cY-jUin_Wvqt8z;ikcMpsNa1!oQF_sjbx`+Z6!g`Qg0t8V^7i85rengSp^ z;t*Hd>|e3*+s?>;4SO4_)k>y-=BuLYp*WoL=|DEQRAdTxL*G75NK8a&5gBxJ^cOT` zzD1rK^-;nCf^9GrT1^y|!lrP@?Cy<n72U^3g~;Ew{UV^{Na<2m-$MkqxlfL z+ZUw(loq~go(f>F%Cl`t5EqEne`y_EWp>AC6_68=cb#8<#T_(n3WdA8I@z|BA`v4g z8P7u+0ov-@P)Jkpu#$OsLqhw-w`@MAPZXI2>HrotXAMD8{Us+#(jn1rpbL(5MiU?C zRt9P2Sous&5lsKaL^53#a0LZA@%xrPmT?1JSuVq~f*+NXPOeEz`DZtgoU=dxJgWzD zehUI^uU;^Jhx^@X382g8TcF)WWbc{JInvMH#fFld-*tw;cjYGcy$Y4c`Fh>=cioEt z^0D%9QX9tx-nbqhEMg9y-yEjoZ)Z2sefzy}>Os@A+xxi*?T89hr7VtnjT5w=6VXVE zaM;hBjH?dy=*QB0O!>ZxY&S8es(=@g%nd6oq%RSFscQb(BG~W8OA|j#zPYf7zT0eD zzZ$?h?pa6>Dr?HRyyQvxCO&0Na2Ta{fKEt#I3S-IbS)u7v)YH!z z?W+XPA?grz#Cw?l8hOD7PH$3Iql-fQ-XETStEob}XDRprC0En5lhS=3%GtdiMS15gXkAcX(7k){Sx!`vbR=Pk<$0u&P9)DXt!_l=%W1A)H^d@gavFq zRArDQF}>)_i}F`033^uHrM53nVx}X1PO{PLFtKii!8NRRTnP2I82vY(d?gDR5zb;S zjHao)zTof&3hZ(NSAY}vZ%661#((x7%2^KPQsNT<26_W@I!a&iWn3P^T^Q?35U&OA zcQhfIW7i(fBUNIZ0?|HDdY#eyoDhamn^9N#HCQjNBVaut>@Wcm#M^os=2RGeM^hxf z*KHlBp|jF3Z=C=6hClX(Ai<|n1nODub<|oCKlvn&z{4`&u^)dia;N;$ykgXO*-@hP zsHK<8YMRRWS0m+hL$<_Kocnr)O|7&^!uALvmIxwG)lG2;LJ=q;H#Mkoudq5Wt8yT> zBFlLH@^|i9GJRqrOclSMK%J0(#(Sr>f@R+Kqn5LAs5N>-q%ZsUsu=7?Ouxz7UhrE9 zHQ)kObb5G$ygaX1z5vNNRd=qUp3G6%j4LZmL{GlgO&avxNX(L3RVgsXo)UlNPnsda z4KlToeP`h$XELcDWZ&a+j=<`|zKE+s{^ z<9yZqx&dAk+~)l=10aev^ggN`G*r~d*Dn>8QCjL+1meXXYzIeS08JU<@)%}uA-Et~ zA#sIF_E;G`bf~-oeksavme@RJfM*p=iX8`GngdC{SVLuIEgC1Sf@Nk~WW>-~i?$?X z>JJfv>KQLsNX!??HGr9a+U*%9i2GoXeB%S0^MuDm5-5E36won%?G}H{M~20bMCq4C zL2T!jOSfpy(aLsyoWSqeX;v17X7A_~{M_F z@%CXaP!y_-&lQlLi7qPf%?h_qY8-n=BS|=Qe%L`Hz6%}sR?}C{iZD9bC#e;Uh9iN| zs%4~%?#~A*SEw?8LB4h~!c|w*PBQbF`gX0N*);%Qn(<5$^zHVC4iPC$vyoV%yYTwq zBxK#IPLde%koxq0h4_jJP0uV}%N*<{oma<+0v$nZYJ7B_{21F3SK4<~bI}FyMk#eU zt-j^eqQWH@h+^Xg_R8lxQPcChdcXNjK>9Swh(%hX_;RQpzSeJ1_P`!WH8EhCZz%X; zcD1UyO!lilSwU*qvq`_A_>z3!X{%c*rFKnRuT*a}G3x|>38)C@T|diPoP8igd)*>P ziu@(c_PsR|SV=$Y?q0mQ0uj&`|j*r-+!sSzV^}hWugXY#t*#8TlE354;uxF zLjxY;1ErULSt%ZK$>3|+?JG)|ZvH0ZlnBOlqxII_q%tSdFu?~cp%xGmF9DQ5R~CGv zcmpJI6k)JC?`-9@*W2+k(~XNaCu)ba3e%aAHXA+w;xC^Q*P%PI@A!&@%8iC=$RbBO zvhNoeVBg6@j()R&x5P=IHKNvin`g1M98^0e3+Cj1ZTJfD_H9JCTU6lammdL)af}xV z`elOVIgPj(M!|f|qT~%!*L13IYe0}z3G|@20#7T zdktc3&p5`(m0nRj;UHEpWiz4xW=+ThVs@?uY#GgE^YVit=noPRjC{GH^An%MNP)KB z>i$-Lig}1qd^-W}Dp$6c`Hmxjtt`ZQW15v+=Sx5uQy?lEYoM~AgZfOp@tUFur&1GZ zTo?%J!y~FYngQwt@M(4{)*cHpx=x{3?xyenB^O#kdG){Vmpi$j)DVOo%Kkd~b4rjO z=`3?B>>iSQgI>g;E4n;WIeuMk`fZo z;<5DyK!2Uxp>Yj|qFo4n>c`JuZsihCPZ~;L9u`U${H6rBJXER}%Zj|PixwM}VSjC& zs$2ZxKwv5BomfPM|`MmOPjTMicOV z@;bU)LrmFE9bPCP?Wd^=wgIAq>cs*2JYVDAx?#-U$pAiBcV_OxyyBNS@-|B7M&Ms7 z>+&2nv$%<%bcVS1;cqMwf$zqDwT!ZF^u$v1bmcgn8z(@W07!?z268phL<`bFfF&7x z2m#5!GGn4ShMIt+d`a+H7mr9@j&NXqs4gFQ!FavE9%sm@FN9uqtS%O*f3c^TR$iA( z^(#u*XFGcBR?{R~dk`E7(IEil*W^Tke+*~BFlhs?Q_+9F!*^RiFsK2+K9!<`4tQwo?K_Z63i--Dk``nB0yCSS-se&CSZe0C^lV{SM^AfTwYmJ*<#~j(=Sna-_=tcT? zylF>}n<}9mdhzoknGCtto{b%UHFBdUsv^J<zUA6=0l(xhU-CLjz`-XiR;wXdL^#vBP?4k01E-tKGLZt2m68s;%;UsfhbLMDl?jKLl>A+pp%zJOTt zB=B{!KM1T{_IJ^UmVenDAL#b&Zgu&IrOH?hEj@KBw}#29Y6ou60<{T$Q`7aYmpw4{ z?kP4qfjYX=uyBvI?czIb10Q#w`ONwDLj@$J-?28Eznxh<8L%(tn{wLLICqPB&M4!$pX`Xuby7sJOV58&mU4%KAD{9XIOMlMA< zU3hJPn4iRqr+AWz1&0Iy-%E>RITzN!ZXp}wUsf}0u;|BquhP4<7W8ZtRLoEETTemr z-|JsQd!hu?J8l&Tr8E1*}NW!$|nv zt`gj*<}g~*A_#EozI`dA0bN3$gG@Oz{P-lVIqXJ=UY}%Jc~N6L8G|B`wUendaQUj+Uq=20_ts*W zvuV2wjMQ*{juItUB@_Yd?dKS5(puRR1()JO)- za2P(AMizjTDEvaZ5)(JzL!Ch32C<{OXNFwXTJ61mF|T9KrnW)Tj|=>g#ypscM~?)8 ztqNbi@?qHC)l(Q{UoZ{qwZC*<@vQuye>ktB*>UaHJTpgKT&I#vaEo($bpCK)D3`vr zWb7Ds+Y*4|24FP*_4TEJY{R!(WCHdV)YEitYn_w*){SDLXf3}zcoHs%?tuZrth=N< z2mvI2d6^V;@)aYAwBU-e-_2ku;tdKc0>ek&?&jzNq{n@z$A0f$R_E>TT!i_ze0Ln9 z(;e!#)1KHEb01r{J7MD4jTc)jVuL1Uy%gwfltdGAu(FR+mhwE}sG<;X(A z`g$*jGs@H{_J|2QBWKC&nN#=Rk!`|u@y z`oga3+8xlK8R%{D`}nzKrQ8OFuSZ}b0Kt==5+53_(RMN{>@^z4$T(JI6*#m*Gj|<4 zSGNE9ks^o@zr&FRW?Kjf1jI@V7C|t`zTv>&dx}Sa3LfM#3dbnI6umsa%4}qu-eu?ZQ!1HoNqel=+Qdv9HO1q zWSoTjqfF1Duok^nZl+&%$K^%~vvng?g$4?pFGF$qsvT4O{D>wHL~g<@#U>o?vv;pk zN$cf{X-11iAXsGj42lqX&nQcD!pCF)T$!)P`-cT?C0t0Quy0hR;??b!=Z8^$Z8WQ# z>3SMLMO2~Rg9yObc1CK!G~K&32hM}$m9fy*iL64(WAZE81v~$}5S>nz_X{`-?1wc^ zNJn2w_ly(yJ0H~;Bt$fw*=uipH_s=4Qv9#)CM9Z}0pGOA<%#Jh4NjO5+bDx!u_tAI zIUBV|NvC=7y%yBCie>tQ`F$>b7FGZ(gK6u0e#{d@svd2;m@dvAXC$ix;cya@23Syi zAx)}FFx@g(mh6`9jy+O_eg%DU;U<3SKh|d_j;SqXUnso6glHO8?Z#fCsZJC0-T zd|*L2t1{vN@^nw{@)wB+6T?7n{fEiuah$Wfo3q;X_7u`40a^9Y5aWnXpWnJujFCm- zU!AbYn5{D9+*}EAgz4W31Y8rQfxGB}NV7XoAiPk4M&ZH`E!9a!tRVLhbej3y6=h6_ z#LG=?m7~hl47~eREC{}TzEt30HgovFGk`xABB$wtSVrLAC?j-Yg>tL8EO*zZvO?5n zEHh_7J~Sn8^Gx|pu2n@@gb=+q=DdF(ad`lMnC?It$R$|NCQ_CfLIG>}3y>=(5ltbz z(j=XSYU=itrALYT))WKY8R;0xPq3MdEE@KL#!f$G@%Gc+fnaohvCwsEu$T^S-l4U& zkJVpAF4BjpUJ2XkgtHP2sOACCxLt4lfz!0Npt{*hNc$8hd=3x{CRsa(UuoOwV1sm! zmzEmvG#R)5F>LcUkRr>v?Hzoeo(z@={^s+zbF?JRsP)V{0bDrp#bq7$zSV%1yFFQ@m;=I zywQ=*E$sErbAAM6Wsq*w1`K;==VSCJ%te0}rRMe!0Bt$Lgy!7#dk z6+*3A&w2uNIWxGeXvJmrIzgaFN#dq-zO5P_tsooO58LK#&%SMYwsR}DC4jbKcc_%u z@)<~0xF9+7QpzMICPg1mNh_P@0&7c!3X6#@;O#X$H5=%2g~`#X0w+7spko)uB9*%+ zZOfB0n9hoSor26$06Yhjas)hABDVtX9DZyxR+kmRMiRSj2%E6$Gw zqRxl}_eMecqfXLS{M~8haXDU80r$-`;#cDvU92D}+?I;0RyI8IjsfMJMEAc<5}zif=)1Pu?+ z(#@`yWHxWwk>4PN^Z1Z5o)W!+KBL|}3`k8T z_b%%oVJn{w2v()-nETgAgSTEeJUkf{M-?UOi);XH70C%(!Z!aZjx=ZWz{RBFmwPK%HSj3>wZ^8;S3~b9{_*FWXFFbp!UETCxct<0H!m_iSPsaDe2xSU zQ?&F4{+AK5eZt7ET_AYpMNGfQ>)B|;%5@C2la3)EP{y{nX8qB=tBsN$`W5T%%mq-{ zBH6GbhsENLO=(2~m6wxolE5wf_v$7K89!JX3n&EZ}sVhG82%>nSc z$HR6_)4S1dqRu#U76g4Vxbc8-lH`uWyw&&wIcy@mpfrsCHmzF?khiQ#Zf?HFMKKT+ z!|C51er6rX!=d~eXs15bnUrXz?LBmV2ma-;!yB(Z>w5fxt%l)$99R{bcS#O0T1r~V zf$0QW!LobXX&rQ&@4@&&AvjUbJuAu{#qyLV!+~l)_tMnwr8+*J_vej%=8*S^Pk=Qr z@Ejj^*&@2I9vZ%dIdo-K{*IFEbjSfQ-4(Xi{`+yS?uL`TH~WPK`rXNNH<`Nhd(qwo zNI-x3HS8~>S&?sldLL4hXEF%4Weoa00l0=JsFH#Vb(XEoYapwSXXb zTf45J%|*D)JlI!2Ed=5w^p@6RXh8Dxt5~8GOR^Xa%YrHi36I|TB#dleP?H)5c6}b+ zC`>+ zVW-12)>p-UN82|LuM+?gtJd2Y>k~Q>v03Q*;G-LBlhAb+zIxPSn$rqhWl7jW=5G6Y zX%p!Yo+|A^X}LVniQYRKw^sh8_zZ;4ULm(KWK%B7TT$b&(gq&pXb9gxvoJ0|Mm;gl zgN3$KiJ5}=k<)uH?p!mjuaQUOXIHo5sjEx&hDM%$F&@uM@_FTW5}FaTCaLSWMs7{} zVI(skP8wUfDY=I)GzeY@P;%P{6s_pYsEo^XO4WSJrm87;|2C3ThWhn`>IHL73*9A< z|8t(ybvC87)8(Tf4>vJ)~L4dvl3ly-o5v^Ynbej_3M|Dfcd`a+63<084+<%U4b(A$}Zy3O^lyaZ+?2ob-PpzLa72Vs}@sJD!?7aZL4Kt`DL zNQlFn2_fJ;4N$%-`=q};;AQmZy1zNnllJu8SX5O(q&s2_;$^|aE6mxgToinELVTXH zF;@ytZOzZqr-E0i=kbOB`Z3%eHpE7MK;VvS+tyTXKL{9n+aM~JomTs%0nB(ggzXhH zH{3}y-_@db!jS>yvFfU1Sr%j^EdoC)?fAIA7*uRP=$6p&xQKB?Z)ufnhOxAAUfS4B zTnhTanxCH((}>Lj&VsEUXAXkCFvKvxxJPiDSi%YUov9IOv4W?4+{N&6oRGkOLS8!- z&Uexobed~R*fv(V-A8nkpt$kmH`WIc)Q32+vwN%`trm3he%R?w7f~ObB6CzqpyZFeMh?OGepJyy(9iw7W*VQZ{$dZ zrBMxTSYXXM8Yl0qrt%sl>QIpSxhy1+%N*tDw&g3^o)k+NFmc1)U-kio+ za1!nIei~u$h}H$2`XgG(Du|g_#qNMH-qy4gxA4Oi2o2s?Iku$cS6GdI-{i(zA$jr6 zra-EGzd()jBRyw7fFm>spHb{dL*H(swP`<0kVk#I#iUzZQOJ$`AJ%@y&3Qv zH6v~F_8BDn2*kR86ZJM<5E}6}+ILJ#K{-YPp;rn=(IUK{5L}Le0GL?uFLGE%lI9)U z6PiP^9N)v2_+@a94wTgq@{eaY?f;%ONX8R@8jT={_VAv`ims@{qe zA$C?25%)oV#r6_RKvLUN8d7txC2*X5)K5oQ&ISCNngQ-eEOQLt*A%9@h&kL&Ja6Z? z9+B0(IX?i}2YDc2LI9W)f-Lgu396kJg$qy)2iCIoDxicy6Ns~0)qV*$h^Zx{abL)h z+s{XF=sCu?Oz5jf{>{4Mlco zYjh^WPKQJGYr1Y7I@`MvvpHDqvu zSaqKVrA&%~Vb!I8q~t!R`6vtSs|A}+4CaF@UpE6}6w{q(qrL>~CP`6j`vYZZF3fX z+K2%2OEf#ojBfnodbEqKSiEgdG`neARv?7lD+g?J(jTU6E3eNYrc$h~@t~~lwsThZ zC^e)#NN}Er0ABH3517V63!Yb)=`RULQtokM!w*f1sRMl}FsYtKiwI>=G(G}Z?}H3* znU{ovIq8m0CC|!dN$fk6%K3JGfUYJxo0LUIS?loBmRpPh?#DYqaH7IHMuBSO zMi3zXZ13R5zrcuby>oHFdNdJNkoU(joZ%_D?@=Dg=Nz%87@1*_)_l0QuLDl$DOil+ z8_VLWeGl_X$)8(^zLxoF9P0dHD0fU`a4c!wxoEjGA~m-12SjdfVcy32lK4}92k~{N z4cB5Ep8F6wb^{c!q0~>wimLxYjOIY~?MT;xt2=E9J6mn(3l)EFN(-O#4R<}LQorXQ zuOtEFQCdueZbn+RS{GzB)Ebf5C$v*wr9Yp>!>fu4cc(IoKPHmy&4Gk*wvGaTj=?z+ zF@ATH5~oQV{;JPD(^VXYXIwmgiJ$^-plrgL;( zYjue+O~GEIQfc|hQzWD0X@n#P$u;3q4T|s-(jjW9%q0Ot&!OD9U%!)y6vc;7l7YcP`@@bVObF(rG^`rCnKl^Y2Q;#_ zdjeXOt%1(32owX(T`O=PAm0t|SPKclv!YqEP%$@!g2FLEK{)V#z8E@1Z{?}le74l3 ztn$X#ch?JWwd;zo>o^D&^@qlyBHg8fMbx?*Zyds5;A{zA8dWU=9TW3P;Vxi59R|dJ z-#u*(@yFSazmvgAc->a>#IOmMnJEZb7brW%=ZK%!0OaxTxSvRVWg*Xt@PVkq_%M3^ zK_SuEF*4f4CSnqpN4vW8$0H@T|!#KNE*<=8GcfDqL!a;sHorM zb3Yy>v&n1e#hJ4>5DJ^3TYFW_L1j^sykdgbZDNIEdLEO1BE8$<>ahDN%ch*7=U3aT zy}7M!Hyhis&CQ`npd0`c$r|97;I3}8C}=_l@Wfa2ESixw<5|8PgORETIDSEI#8663 zg+Oh}_JMB%l-6aN=_ixJ7mRm;6-3B+4muOPc^WXUAW>-%Cto_6k+L8R`uCX$xknnA z-+dJJ8fLkF`-Sfcd*{r2;O!`D_@IHqOQ0PQlNSK9dReLdh@ZksLT-ljJ=^vnXY)4Y z&{$^8-=4uhww16>EK9(nw^yZ{beO~^5_$djcG&Dk$HjuRdKU-z$-5G4DAUpj1yxw5V>v6vdA5Km)LpPGGPntEK*psK`fJ0#rhU=oYhg+8u$8ZybUeqzzZtSEWNOM6qx z@Sd=0nNFfbpjra_X+}vPzeG)OIpt{C&wL$!(Vwl(utU7#>a*qmr)2i%5UY5Z&0?~sVvK#UQ>&U7i#g4-%XO88j(%Pnpz7@!kQ zzwM<<$#G(9@0b}nyNePhWbQ(--|iMO_V-k%0$ZPs_6FQU#Nta@kEKN}-W&ehqe!8D zbaFKB*$Be0?5}#it>dS_qJcHlg|s_-3F`qugUg=w>r-srXrca;tRB(&_Q(VB z8nY*8o0sm}VkD!>Y(_bY4OE!_QwNId@~v=QLjGNyaY!-uGt^jy{is;jFXvn!>D_7m zq}--IAo9x@K)}m=yqO-GPtaq>YiAyRnuWdns$5yP7iKwgGSN~wSQChSCW#gHGoE4&fylYhu*f`uY(fp(Uiv;yCBk9{N z1%q}{0qEsF#;SLj*ps_CC9h6@02@H$zcm{@E3LOneOht)5b|MY{P>y&%aH;2+bW1h zEH&1q^^d0wL;4o^K=mGtpZoSZ=T{v^=rWowf{D$psE1eOaNm*IB0b?K`4i0JC)0yb zb|~4A_T5Y_T5i!ml9Ucw6YsDAr|KOF045?}an3$s;+mGDw@2RJQBK+M`L(a)f0usW zZ=SCUGf9*9nRoL5bubQqM4r5-BZH-A{#`0sDK%M0^)HA@;cL>W$ghgf8&y)^p#P2! zl_vrGyi41DJspJrYDatf8rfSWAa|UeaKTx<21Y5~I1n3acXQhJMFheO7Vf^J?S%KE%djgVx*eV;57Bl<8_Pqt!Ur% zvaVIizdg_H_`?WmSgN25z+YmAY4(WantXWLs*sgof=*#ZTLwNNpO&*q;zBF-vEe0u z%)TmqiJ1Mqy6$eD34JNGD(1r2M<0Fo3iR)eze=H9qy!yL<_??Mj_@Jde*lHLa4ZAe zjz-dYHTpULCccUI#TzrKojJ2ZB6MH4?=fMdJuPW%i?8#6urnzc6+eJ$ksxfqP+i?~ zBMV1KNF;9D0#9g;KEEu9L+B)p=>e!WOwh>G)$^f^R&PPGvNd=3;O6F7?aSLI5YzqO z(SKToNC$dlnAXT~m;1dKe;zh};6|I!w*daRCt|L*mDtN+rOXIg(7bX#m3wZN$doUE z5+wfx@RLD7l>^fod6gpJ*SO3fWdicJ9b{4NLFA@8)^k4i2>OF4Ax$AV)1Hp8>s)J3 z+4_K_h{#>|c1McW$-sSC2tUo@dB4#x$6QEIM!oHNlSdSfC4XjHf9e5FlQdC&R#7#E z>>J>a`EegR1uU2`o`F8pB?*=IWuaZK>r&+nlFkjN6u~JXQYoP*S zdJPZ;+S~3!#AKhGO-cN0XbM>lWH&_`rvd5pIY|B=?E>s#6#J?SVw^CHP13RjBrMui zJ1fE`tFZZsGZto7f5S$yI?eluy}^wf@t;4Po+HHe%i=oiU984%m2x~SW<9T3|C?Hh z=dU+0{t|^sfp%ZRc1J)+8EorgYI(-H(~*; zFGMVz(!>d0eIC$?whT!1EO!U!5Xhz?I4L~>=Gr_jyKGpwkT4(>u+bTFS)?6qb5KB4 z1H!NrHb9eR5d1i*QSkY}Pq17s=20xRZxEQDXN|g6+FWKgnh78pcrJ*Hd0q@G>%HxB zDQQ#=&#HbFe?!Sl&|9s&fwd9`c?^c%QI7&x6>OmKs9(}Cq0N*Tvj^^tDnyi>G;euq zT7yzMiQD?(t4R6<6V>I=t*O5ki`ps~N z?<_+qe=F)a7m%E}0|I3@H2>hVP3Xz;p;+B+ROlD&($W-{@Og4!SuHIDmvrMA$~Ci> z@YC)H5I~pk#Xhe)C0I9aK}?fai8PQp#=iKoi@Z&^zCT=Xal0;M*|(VSkn0yack#;)C%s8>(Ekasxa|SG zc$egufJZCzMu;~bb^9FyTvr<#TfLf*Za^=e0;-0DwuKEiyNP%gfJl)v%!M+q*LAIF ze^wq*Y4!k}#8Cn;?fAf=tDOBNpn}VnHl$u2Ej@a65=uR z;!r>c4m!4vdVuUO*7+XL~7@Hi@D1UAjj^l!zHw~6IV^w zFUpA+h7gvrtma8r$K*J)`JSU>&YV^M%# zGEr^$^8?1?E~}kx?#9vhf1w$!3vPrVqg2JxO1Wi7}BYPGMJk z0t=CS0WW#e!l1!cNbMia>87E%e@$?@zwSuzn6-+PaZ6gdF)u^5FRIC#!kb=wdn7~o zWeWdutbLdGTt3aAk_0U1?!?z@-N{{OEu6y_+P6}vPAtS7Ke~UnNSPYq(Nxu|s#ObS z6^ZfdHvd|5eMQ(o5P(!4Kxxf>3qENMmm5{`XzWhqoqH6@JmyAQ+#|6lfAaE)0h|#> z%Zc{$Ps?z6HoqAvMVAyGiO@H=-Gg?>H0fS@Q#1_P0}3Hw4q^yK{9vFBnBzHp7=}8) zI{6IZO?VskAa+`nwP87B2gaBI8$VlKA)nVbucsqF4o-eG9w#wJ{~%GRrWZ3t2hYKg zW#+(eUHTDIETbD7s_nlUf52)HT$8dexC3uwb8Ir+uxX!PL)}|PpwO3oqCjs@`B{xY z!2>Au`3c0e_^ExWtv27e|&eX1pXS^0kR=P z+-g!GL5pk<)|W|7kCt|!)GU(Mx1GP>G?bkbY-FIJG~PXkfvH=q1NWq?b55h*K^pem zYH2-bPg1__9F5;l`Q>EXp7?J)_-Tf(0j}tLv;Y-cpZwd=>zTpibe7}w^>PRy^qg6X zHAqpx_#N(V_x>Gve@*|qDYCGy@DtzUq7;jmsco<7XbIRD2nVqp?ez7@HHvYGFC+ZD zvWj?tJhS3hN;kro1qvytXUSgYu}?KLL?As5#eQ_900Kzo1|~||nwamQ1+67}R0NkQ z1xWgZu=sPJ872YH0+d($wekD%e{_>=G;*3>Z%|4f9LJu2Sn@U8*q0oTjv^x z*a64|>)Id9(MkD8B`F90{Lq zbxM3&9A=w0fAw0hoG*wfcazQ(?$kQaN4~B#w-hc6MI(tM9emw{C`+oZ@8Su!w2(jZ z9miGiAz8(>A^NcCoBg;|nnT|gn=a$Bz<~eCtMo&#AoFGvK*^?SViY59V7*5IFzIRE z0xFJDA-rPQKAIjZR37$7j@A)nov?|#>N_UZXxd)Ne{KaR6D(ANIy3fabYCy*1`u1v z`Lo;%&HPE6@AF#u&(A(0kF@*f1Wnz3LZ}>4(H4CMSt63aM0qh#el9SCw6K_7pcKeNZR*te8#<#E#x75Q9I~m6C0@Qn z+i3OVmIT0u=EzYh0lt1pB&cs!o+gS{(+swbeq}RX2E-4*);0a6IMKM{4;YRjJ-cQ^ zR@wOXSc>Z`AoD?-rFzUC_L%8Yk(B`8h$HYfe{;!Q3-i0#iassCkHe8fgD%irT{KDn zO8Eh>MDheOmDdR@Yz)rjTvXI_J-xFq+QT&a_anc9N-K>0UG<;k{Rb>FNt@Vdv6Pce z)ic=uns6z~e*UgJ_kmnbBM`MgdWORm=j{i%-&pa!z|%TU!f31xM!Tzg?7MZ*X$IU2gktqExJ6i}uGC0Hp zrx(tMfM18fV$6BZ-~=2y6~LAAFQM|7a(qYvha?xq9}`kc;BTJFHJ*wv-3t5z***;4 z8pKq41-2#(gCw8*f&U9R%zOuinJt%qRJY>a6;!$|(K8Tp#|(ffASm0ai>)BCe>;fl zSHj&JtbGn9s0~yb9t1Dyfr*wUQREYMEeB_R%X;G&sc7o5N zgo<-4A?A7@__vRYRpaUkK=S9d=Zo%0v;^PJ2EOe*LN5K18MwL2@*uYK8E_G$zR8Mz zvR49;c~>NW2^Ukf+@haFe?Q@Ve^$l1(>8VW5PY%pr(o?Lo`Jy}?&f|}Mg8C?y`~4w zC4i9t<+|A5(wMFeQ3)48cc5yui2OKv5m>OgfQd1K+h+%_QByHoPZzvTWKrx1^kB=X z;9BMVIIf1gd)__*P#JX%*)q+!eU0S)m7T#f3vG#ro-*+ z7uB_o;R{z69egRw1I-!~W6Hc=Be-@30x`8}j}@VZCXGos$U$3T8v$P#b|@@S73kBP zWDIw8hyg6d=RghSMR^?#cn{Njp|pfx5Yx)Q3uhO2kK0;7<$dmnDdSz?d>#cNQ5b4Z z0Xd4BMwHx9dpPVaM3qX1f6fz8yl9m>8K~wea0O2nSMy5TpQ^bRSiy@8%L=xDaPdf= zVk_4jH>*zE%r)Gfa&6Gh1}Lx%lR<3#Ua6u5sp5`hPMPeqIzF|V9j?6}uDQyehl0Kd zbN&5(ca^Q-%u?dJfF75D*=H(uu-oymYeb!7so*Z5Lw>pLn1Ro5f1Y2kXu+Z7xb8cN zFKByJ5AgmU5-Co2^UTso2N_mdpgN3;1oYR&0^K+=j0-aELWWCz8K0RJL>k7mzhC^d zZGt)Ek#Vly3@e5DP$IDLb@aIis0Vw7J*ta1z%^}P*rguGBDxT=)DR$~2aGQpEELEC zD>e<&0A67pew(QGe@$s!|A~JF+klXD(iqzzWKv184nKukl7OUi=BK$4#oNjGm6qwhJddnTYw9tad6#L2)+ zR1p|g!72~4p9|)p2gbbgAplY;iu6ODcvqF+t63ON8d&5zf1Jr^d^~7K!|`MPlr~Je zM60^6cDjdOxrFB)Fcd-tQ^8FQF&o&V1x$|xtkQo^#e%!Ze_$2*d-6IAeLf7=zux1# z>cHZ!2xa*B-bOJA0{f99mm{5+KF!myx1(s97v2pQ`E2VV#_3iz?BkQefg#!5vBAo64%I z0cf@`z>EtT7zO~K-w0;ihJ+vm)E$;pktJLacmlT!3sC^;<-t8nVL|V3L>nQ{*dEnM zLskJ~2p_*AHx`l;@#P26lk!4GP0sT8Xrwg~TsxC$DtRoxTuV7!fSzCG>?SUR6tv+vt|9Dm;Ao*pR3J+>&cIHe@a4Qu*)5X6Yy*Ok#CvMJ+{`aTR+4V z4Wgge;XTL~o3}S?Ca>Mci)jFL=tWd_k5dZ*!}aiP0qG^9JI`R)@u0b-(|Sp_GG zpX{>|{k19$N}vu%9BFH&DqG~;0cHN+e}Qcg2~b~ayYN0;dfQ#-Wb)}}W3{sT*Q)~T z2YlU%1z#PQ$pn8f;Hp>k`|$vJ>xM$z*X2-~*vpfbAah^aI}djHbzEStLSV1b%>~QL zmTc_;qbE>q^{k_gr{R%9*thDiExvHx{0Zed z5974Cx*r?|c%y(3aMhifB0^dcf6@#`FX0W&qdHMV_7bgvq~pyUSK;!Q>KuMKTLY{y zKAF-rOzvWp?!v!t{WKWKagMrmAXd&NSKY6X5!c(6#rOAMI4+$P7YuFZoVJZ*dzrqS zv(wZ;?3UZeAUej~sqPvAYL>UeI}pT3PZDqM-;N`Ct8Nl$WD8}#FXjI)rkFj)_hFY)zjQ7y?|!LbG-^7PTmTJ!aOiI* z_kib)SO%0_0Ag4jT#HooX#vy+q(WLU41^Ll3q)@Tlx5n{32@LGIIlgtGd&Cjfr6tl z0vN6HJ8Yiu%fo7&5TF(Ve>toJl&mEYOv&r2NUGn9AiUb4#i%fANLN5-x}Dn$r>gL_ zyXMI|8tX3@$NP&^J4k^_g02BuMLFPwQ2NRJOZ?<{?!eA;9DJfe#g~Up`U23mb)ww_;?{P*XbrlwzxI_=x$yC$^dI}rTp4wPYgYg8HIBA5a|2;PM%PXQ8d zn55C=)8-{;#<%jR;d(zh9|ru9U7>^}i>Z@~qwBEm1qU+1c2yDZL8oWy1o_~CZL1I5)Vb9J2SSI>NXqU;DU0dUXXgk9d5?q%mU znIE!=);K2HaNT4(aME}LD>Y~hPYU1faCnQWe}1&4em0Drf4GsfKrRcFcwXwz4anoF zh0_)EL*a3!fUn$C^MR|C-Yg}ZG`k32js$U&3J_-)xQ88)kzBtgrkLs5cfs|5`+QRG z!s*4gYVdA9r&y1riU0x6!;C4y`4?qiUx<8Y2Kj9;D3mL`g8)EOf+!xm&i=a(Byd7R z^IT}GWE+m-f9sKa*H3O$`;Pj7CxcFR-S$EuUstBVpX5N@&#-`svdvOzXc+$s@|p} z_247V6m2)Ojem-jU^$8{PEZ-@pukiYVRfP(;YJ7PfA-%((!l~>8?c#16M|jHuZeO7 zun~I#T}<0GkE`$mgnavJG_s6%M-A_m_FY^%#a6oiWnmbD`HX=B$(d^csrBXs1c03z@lpoKQ7>ov>r^Nm zZqXnoKg9W@w1LiVd-nmms}>pD*+^U!YC>e8l%=e}hkv@)N-@Jjm5r%xjz6w>qBNTBs4Yd82^m zVL>hZ*Ar4!RQ#TGFvVf4eZb z^(#gX{=Cu*%N+)8#qCb%rC0u*#nTo!dO|KfMG8bvwak(%y3Za$EhSN6bS@l6bgak& z^zeASY2~##aOPn{foFJzanVW&Z)+iL>jIn7&D}2!xdTq0UVB}4)7CtNf@b#RT)dC1 z>989B=v=1g*atkqcwxMG0e>2*e@|D9?7ZPHwZUn1ElRsys}x^injmwU0u=yf4QjsE zLu{l{CIM-N=vBp9&qd8NEVONsF-kR?k;U)=Bh8BZ02pW-2qO0$_4icE0j_#V@|Okq ze!((Xyxf=T7Esq4X!!|%-!{%w#(soiGU$Lv%-F1~NvN05^CJ=fZ$=2(F+=zCe{C9QZGQC@VUnGB~A#hr?Vj4Hk+Fpv&uU8N@E$b&b@2PvD|e-n>dLM zh>(`Lk*D*gvFY-Sw$JLj7w;6^)RgQ?_5d4rLT0E*-44K)^#!zrW*&NZEsE~3>U+MD znBRNRjo)^fe41oIR2g}Hf6MP>R`a3==C#EDP$V!cBGnxvHz7E!N3h@XS1|P12&lT~ zBb)iIvaMho$#1g0ChRR)(jqCAZUZ3u41G(X*7|J9Oeg*_B6Qv%+94*QH+jHAuUG*V zP$M2Z6dRUe4|<{Lt!qr=+X8pd{tj5y5INFQR|WdDfC+w=J-kQ0e;OpUe^Km*tZVTS zP6azXp+vc5j8ZYHMzsHi$T-K7ej8)UM(-*qIP6VIM21%A)r2mK#`T*%{DuAeLzikKFM}FWGix9Xr3q&ZzWc^_bunp1AVul#bD^r# zdGgQfE5Xwc!HIRPe=5Hy)ER7pN%EZh0(uQfC^#%WIP(F1{X>Ielw?|U)~Z(n0^Xqu zVm6eoU!T3l+RF>U=p&-zL8ZeOqf+|6pCN%C$Q~Ndt_Xf`zrDW)d5wDi{iOiyYmQBx zSl+pPeseS=IEtnN1>}e*nt67*oChQfdCGB~Yvy zv(4X6>dbHwn%X8GjcPvW**|5V04p~~9EaGi`S*PN=>?4Ds8HFLWWHvl09j4i@sGTC zEM_JKgX1i#o;zAcnJ_;9DPlT&cg9}iW7#a^)8|Zq2xh5U4O`vG?_E#`vG%KHu~tR4d)G}i5+9&+|j(dEdV=}!khEP#?re|g;lCgq`{Pq_PW4|Io|_m8(!c>HfBK8x`A0}F51myr1%WCVnE+$KehufBujjo~ z+c4C9Qe6D_WRtDW;5ePtxbM1v$V)4*7xWVnIZ-o5T0#m4wctc3LvTs=g#;sik;aSd zjN%=QOs`$Tf`aUKnEa6(cpLCX@2`*N7%?nSe?qadh_8D;d~6CGDyvtKMH3Ml43a6QO(VP5WB>;{94<0KDAYKU&%>^qQV0h&xxvW}kEg#h8=hZ+Eu;@EvCxJ@>T zsLi71*I`&LRQNJosj2IKo;O55n!(4$VtUMCfJ*_M42v4}$$J;4Z^=G^O@1CI9&Q?H zfArx8Y8!naD6a1Z!5CMv1#!J8^d1sRvFh(j|BL_a{O0IJkHVl781O-CFSl%oYUaP~(HY(E<_`_O(sFWmdZl#=oz8hEdN>+HC~{CpsZ- zl-0wP05B9Nd+JC$SZL7!b6lSal6(g=e<4KFOZ6FBepKx{_u+iUK#(?Mv;h^?NDVX7 zp%mSTA~04!IP_fARMk z3>)}_5GIHoxR-t!;>Q2@EB*F-+pK$|Yo+&%X|0oC{4K}%o@ViR+02vS9c=SMYCf+9 z-GNV)ux;W^`0ZpW53--4+=)3d2V6jZR~a(rnyC#g-?kSuUl^a#qUR)6^q_828CARZ zTJf0|*kR1yQxsGX$#9(o&=c{Mf7aFk(lMi)`P0@NT}R&*8d9*mh*GN>Grx$27TL8c zGR3hqU?QC7uU5XDG<&xJ@|^an2Pp{b(EHJ^!N*bwMdkEqBw=E>;_ump-L%Hl?M{jz zX~+xBa^XT3flMVN?h-H=MZpIYsc8@MTevjJceGj8vWGz1O6>)i0j8+ze^xU-KV)%# zn^9not4KfS!#x%U$OWQ|Q{;!^t$*)nP!u;+)rS~CF5nGtYVPwB6-%xzC7yLFpx3TR zHQY|R>P%%~8(&n4Y@@6ecBuG-2kmeSe*zQ;B7KxPdP({D>-4J8GVEJok^Es0wTm&z1ysJqwE9sJ zia>luNbPdSyu@`cRTStwAzvb=3Y(OoR+-_j^fW)q9Xuij)pi^HLe0wx6Dm-6_A z`JAlz&xyK6qxX0Tkt8A&oJT;D`4)pdNcef8)D*$oB#@%BrZ_ZmrH_&)>15ZhgH80lbwO5to|gEP zkq_5|wr=1+FV95K4?N=Zr-vJl0_vf2ic8lG9EiBUhAEdLWJ< zem_BiVMU@pU?Ua{1E0SRayWycLMgTYqYT= zXCi1yTUdN~y{IMjggvcu&eO3kQ8;w~Xq{s4I}5W2`~#Gj4)&bYk!}SURaop3Kz$;R zviB*{)o6Rje=PC#>h5?ICz((7A-!1SVL{uSA9!RQo!606I0yOV^d>%TY@1lj0j1_Z z%I941iaM;On3yJy3S+j`10kjW2ya<=>(Y3^B z>q&o#CEM0I6rD?|4Sx-;$Ql2&D189f57X&UWO8iT@zsa3loE=j5yTRO7g)ps*{4g+lZ&^>XEd zf+oXyM2hxikd|Aos|+@tnT@K5{Qfpj-8ldheVowiuf17UY#!&^VQt|%g}_d^hGxud z+2;7UX_C!KtviJRAZ3L*5D!vg0UN*QNW3YL1U)#8&H4Ak0td4gc7? z1^T*vaCRHAJr;;$H~1j$-{la#tSe5ygj zf21vw$fkIKAeYXz22tq^b0?&97gqyqzCq&fO@AOk#Q~Xs)NufVCHL%d#Fop; zCC)1fz^F^j0yGo;N>*1nG~jGhQX9$)A`c%h6!87maM?ky_zI1t7E)fBcU= zuCx9LOWnHFc1G6uh@F8R0$=@tX(OY4^p23Qy|G61zd<^9fJUipN$FHWevc9rYp=ey z@PTp1WiQ8=AxBOgv@#ox`Q-=G;jUY4w7dxB{AE1TGQO@DK+1p!2Vqr-&0x6Mhvnyp zu?NJJ{kZt&k!UWLR{Akmm3FFBe=wNk!A&2a+lH!4D6eLyHhi%XpSe6kXQI0dR&P{h z)CfSHQimenpnmw{!G1sbC^mtQdgb6FqL z213x@>BQmtTWAN`aCn;*W2P`bFt%@NI%Z1f*23BXWXDzBFx&gEC*)iC>NU@RPW#bS z;7B98n#O8<&~+ug<&RO8qHBlR*mdfLw{Srdr`-Zfemlp};S@lMf9jxyKM=Wq6X%e> zZ#4?0czW}uN9L=i#zC0GKG`hUVzn}PV|PM!Ur!qp4bB;C)S2!NkW$;mYP zj(?URNmh{WPo{(mT71+_H<$&oEKU1SKqe}IK*}h^>?7;dM_Qqm$P5FhW16LIVYw6= z%;pd&aZ{u?z)+Ame>heAv_Q5#8k$eH^u^ugP(on${P}xk#$_W|9DOYF>#B-v98m;F z^zF7JRFpxpegibmFzwe{FpV@#?!i11`4BQJ4-;srqH8|oW*WR7ae|s#N#2Up`BUQozF~w{3 zB5h{sxi_uPn3?BTDe{m`}Z@pfbPiN1%czp9O$PvF0)9C>Z z$$Av~t(SVF-t&U3Re=_15Fsd@r60Bt=G*X#=W%6~q1cWN@oM|%oogtBafA(@_)Xwz zDQ65DMNLF7f5;WImN8bSj|N-f$EZp7z1Oz5Jqk9VA1f5I?%cou26EQ2NG%b;W^^%u z5bHlI?TIP7aTr}4)1%)(-v?C=s9j^fx``5xM0>o4qm>odslKs7%uLRJ22#vZwfHpi z8FBPiyla_-NONtbTAc=C@5n$w?WY7_igCUFadaL_e{MoS6#XDAL=YgB-`sljk4K(zRP}a_{ zResh2f0yh_RPPz5_t|eZFiVJY+2vp=PzunQnF;F!Z+wh;2;_S-n~A-+uy)B)v?-^fHzE8}RiU=A8J_&@8>Xdp`I^bcgK z{9=b-h|qDMpDAG7@*9;*%lG;X$!)LCN*Hq|e}NJ}hvsEaokF|A708+0Z=f2fo&j_w zCBrBVPkX*&S`+|Ll-Ia7<&u=OGDI`I;FBTX&pd;UCAc0#89Gp`I31|bSL>@`3chZ?2MWrvgp(x;&GQ8peX*P4TC(29BwNsHh=$( ze~D2zuh?(iNe!xQ^~;9dIq1)zTc!a-W&fDiUv5j>4-P#}$6kpi z2Gi!=Yn7noLvZ~jGQbFdSedCeL~cqtivEH=EzMy_3_@~n-~nF_n3c?QuG&C*Kk1?J z_w_foqPVYa%B#5L;4*dgmLtF48t8rKf5wfGQ!Y?FD(5Gw$?8V!#Gj_&pyS91YVA*w?Sa9_Gz?d>30Dr+)zxfh{(5ON}@o zfBS|;75d)!_g$l2tsQh;y%!ynkdA`U8v?sF>!Rah41+&znR6AJR#4N2nOAc|e?;OC zlhSbVkl3sy*fMs>lTBN3qL+aMBlJ&!P@m)U?+-N65O84jxAn~M;ZiWHh;}{8a63<6 zrExloc>5mjz0qxsm$bkl9Cayq76R5HyRWT-YHW)n0XR#fuhs~3Z-dtqEcHNM02Ik5 zkbc8>eL(XiY*DRJIEw827f<|0f1tl-OckFIB^VkbjBY%2kil#EFoz>XxlU(ki_oSOS=SK1}TUrbmm3sj!UF@Zvm1+JmCA)ZR6Q0q^SRW^=ShTpG zZ_UEB#1A~-+XA~MDTzB?h%G6=<1N=(CVYTTYX)_{oGZ=|$2QozD zJ?2vnyeLfbscl18bJAT=ee+xWP>%3o%dVuWw zCCps)%)^maBv=lq*O%)ix2XWa&a3>1HW(3=7Fy>kNf@EAP1^t z9VlStS6m#;lkghjl$;3bM>U3ow=`1u3{dVS4M%+%&Th+}+WPO`Hm-aIlb9jS75j@c zmFOr^IPC0vhpEQre>WI7TFcu){z5W}PvA{gJ_1Zv+O?=HHVR zeZMvU0)w&f*KjfXx8PR2Qb(cn(L!}MEWx815dATE z5X)bnpg6qAnkoEov2l=m zHlF=NHk$9?e=SHq7KBDi^s1s_%L85qlC2rW^R=fh_Pe>&`)f%Fs9lpSPL(XeLUqR{ zMnw6_i-lHNV$qD~n)aWh+Q)r(x4P?&?PgsgK4z+R9#Y$~=r@MDG_r31WOks-u%Mxc7)(Aw!3Pwo-}Z2iCneuBNWN2vqCiR=q(^II%I#r=SIMc z&D~`cssX&+)U+?>J)oaPPQZ}ueBGsyd3@l;0Yno7%%h0`fbF`S-xNXm}%jIyj)(N*AW*!=yR96s4RUi2T+&>`?_Gw2B+p^K$?PqYD(H(~~?xiPN zPYTZtg3<1Tiu&ZXpPm|vzu6(Y$-+f*N)_|!FC?o81IdH`$V9xM;1X|F2K~7!ZmdJo zKau6ott80%8GYA&W8DA{8v0o@`ZvB<^c8-Xe^hpIF;4J(KJ!dZ{_Zmpv^|mg==OI{ zY6?ytfZ4wRxm0-=AQAP3?+n`z@cCi@tsOC=f2hK#8mp*^541&{%tu2Zau|7TVntMo z2hPoQ%E8h-ych{uzkGI9_aM?!Y%vM5#P{#@=IC2V`1xuH-A;rCx77h=3kR}W4A;xH_xmEVKO>%nx zhcEuVcI3$t6R<%P?z4tTaYWE{jO#cd*f>$`Cz!a}mgf{td%xeq@OxuACD3GOhcBYu zerE%GHq9(w6y?xd`^JJkB?I*e}ZbQO4q(m zvYY@Y+iN8>4ZEilJ-GHd%l2DTrsZPr`XEuepLZq`D9Kf)0&{)q@0J6=m~!o=Xg-2S zpllg;)89>o!)_58e;}*=r5t5T*^ddJBDkEgr~~QHBcJY~E_&k;3p%kq z32`S6h{89RJ7t!K9o=RE`6TZx00{aPPh|CV-+Q z%n!2X=LopNPoiuSX3qFWmUp_bKvMLg-t@N~zSEU40mECuPDRj-=LWVxp$Zp-lpb0dzMJtt&4rV}`xaBth zdnpgy*{`uKF=3i8;<}{7xc9@3gtxUa&uzk8vfZ5WIvDSbPaMSy^a$wt2pPHG$&9`>6zA^`Vq6d$ai0CGG`@6QdXeY zi?HC6JaZZ1-iYJU$GJPbx%Rd+M^t_B^$$R}2>pBV3{}#=)^@Z@ZZhh?Vke&9$1aHI(B7EC%~Oe2O|^l$KER471>y#HE> z^k9JxgtzT}l0JTzN0Ywz(7ZXoSpd&5^lAYB;iC6!pcCh;oq+wmK=y;EaHBnQg6tq$ zY(m!v`X$Bb>QT6MjZm*AJFT^dS<*oD>fny}kYG=fe*^J?9HTbtlLuWZQ9*}Yup?s5 zwSZfap(AhbtG?56)j^BbjWJ4q03L2oTD`w>Ul!#aS0a(Gotcr_aHRggs^}Z60@|eY zP?BFM;uQI6e*!OeP7pO-?umd_!~38<+p_e}Z`GhsT*l{2SPG#E;<#%y3AvNvfPwnQG*MWS9C=O$ zC;NWvrvH88mj9Ur(2o@7GV|DF=GQmBc?E60)#qIr6Ka8@b9^%IQBft+QSoZLqg9<( zM(cW5ocRSf7~Bk61|vjqPMtfUBD{kt)7V;@fAq|Q{MZ$bf8L=G4xVo3dsOBftz&m% zfU1y}nm1^x4a(n|gF_3v#!d!GaRLV@@^PEV^p+pmzOkv?h%XQaOLW$e3irHzik~L~ zE~d3E9*3r0{tjw6?e*~yr3GxXJpyo-Kf_v!{U{gPGITRUw=~!JpfHpC+_M+C_{-J` ze~hAEIT}bW3o3-CS9l+nU*La>@zMG@u1ZV;(Bq3Y!j#_=>8VA9#3khzK%x0Ibl((|oUS zqtj}Djr~^wMz#wEg;A)??jkWu3gSJkbTFJc5ob|(u*Bq>It@^Et1RG>1eC;^f79IT znSPV%l%fiD(%t3R*w1yV`_`U3ul63EMcBxKp1u!Yy^VyEmzh~t+AEzbd-JyQCgF&8 z0&heTK{%mZgZnKsyx|T?4V^wAswwTd+bu2 z5tMb&UZYpn9WN?=u`TX49<>33e-oErNk(T0o&n2lC$BAe`DlmoU7wPF8=I$+UkddU zM_aG#eFJ7{usO*%LBP6bh@f6!VVPnGl&B!-=00>htvJ8^Cdb|z>+7Qqe=stq$m7n+ zI+<5S2}jA9nI|jTGrua9-UJ8oLQ0``r+ZU8y~!5u2(8?Su48$!SmLkh%TK;mG{`oj zpCiCDZywU$HUFe^_2Ol7#mGnS6Id6NXR%4{dmsSFK}#g% zFph5Egrha6Ake{J#+iJ8e~Il0OEBBAf;127;PObMiK;W~xFkLrGO$<@ zVb)$=C0}Sb5*jXGvkF`g*{9lS^Z@sf7!0d^C5s#^Q>=c zo8LkVBy=$8+7s}!+#+E6#lr?OtLy~$ckBEC%G(mKSS?2mh{JdP5`3*dDsp%Ys zwAb48+Kz|nH56Nn#z}p7rv9aY8OHRAL>Mw>o4SeFW=~0*MAV{HYhVtiG6!<)fPXEx zEL0Y-;wX+*e;z=Rv4$dm(#ye;1sw7;W%K%z1KSu~I5(ekw)06@Wl;O+_<*q$#m=cK z7gYDDkh68)iH`&I=Qp_$?x7C9P8RUZM8{D+5bUBd{)5GG03n zc7p}JR1C7I^a|Zhovl1C<_G4;cMP8(zEXWj=%M(Z;GLVxn>p#^z#Blbc#! zsLP=-`#$PXrR~dEZm^oaqOJKmN-c5cfZ`k~ehg(Wlnv`>zIR4w8oYUxDh1c<Kp=D&70dtoje>EK@%9pAkS z=OchAQg!y`YfSK0ONYL7CFkw}SvB$rRR*7EZ6ZvBJztdzJ#ysFLSxAd4*Xt*|#xeiwR4gd1W9pk-s8FyU0vW(P>puQ_fo z19%NJLEpxxO@-2Rw<-|&-hloH^ z=8SX5AVe2YvbH8AZU-RUFGelnKS>7U&@(cSsp?H>Kjg~a{!%J}`tbC93VNPo*% zeJhh{%e&OZ-LbBzEtDvpY*4dP#|O9d4r}8JW8-Lt(*uzH@K(Gm#gkTVAf9gv<1;S- zyWls-w%|vEvI0jb(DC&%Mt1?+ZWRGd3ii1G!`(l<*%Z)iWBU& zPfLQ+ z57=0I$l|jY0U&WK(rtWxoMYTyDQ5Wm%`c^N2(D;M9Uw#T2Wf6PMI||0il5WSN;nv7 zetYG{O$0B8R$J@G{_PLYDaf(wB`M`*w8_W!`1NGwYqQ*znnt^K1n1~NwB`H_CFPGw zb+MXKbAUJoOal)PvfX*c>VItTWtsMYo<4lAC5&lSx9HDyb+Vu;j=}P)4Pa+$yBb;F zvsHkiINg)ae%a9_ z20*N)Nb8UkJ^+;@FdPFXRhh8~%Ot3Hag(;an!m4XyV|2YW`9)DruU@9Pfj!pdl&XA zai1W$R02MnSXzz8Z@f|g+n5h1(a^m7X9-*w4tTAo~+`}$%H4m*zJ$ISsL@Vj$ zM`|G?SKwM!N}%Wrl^`q7oR$wSxs?F)Do~y}PD=3u+mU>GJkI0p#Wp!Y4~n3#R9m_Y z{O>Bn6HdIzi#diQ`Yaw&@#1n1ibQ+hR7z}A$pgCV_tOCpu#HZequr7I?_3zbV{3uG zH-Z-4(VSlUwXb~u=5+-ur1PB&vGd2(5%s)!Sbw`f=*1|B4chfePy|dmHSfNh0;6q5 zvt|9=os-Z$UVmk~m)vbRrGhng9x> z2tgwtcZ7Kl9n}fe?FIM?%sH31%00ZlwhebEfcA|D7@Fx86rUWChy-sIFMpDHoH?1a z5Pvu^;G`zgUC--R@__QqzNi9Ce~kmD+e_Sk>2bZ<{ZLqHM&9{Vbl_E1&`O8yxeFBa zQajSF%RY!1>q;bENAqT!Q?nb|EL!MrC!tucGT&$9_Ayfq?73oOfM34l+O7$2N2+Y6 zeu3xKccWI>HuMYXwS)m|ntx?Ypf&BPxqm3sN@lq_)QRKFZoRYLNg`?bW%Jillop)o zxbdtf>XQY;**SXpa8b_-M>homD{HdPiAKMC+uq{Y1&vkLZdAZjx7ra6JXCw(fK=cz%#)+T%-0&=K}S?}TG27s zcHQG3GMKg*(uhSsTB`BDu3TE%GSTK1V4yEuTc9q?6W0ePYYVaeDFfMPn+-Ho*`sF^ zGVmCk0YYui%1dQFRCp88q7g7ic>1PGoewL;=hxs}3m0lLFM{;7wM68SR57ZX5ph zjI)r$8FuY>@z;|h4#lqRz|0beUPY-uEF2*)F_wM54#2nRjB)M!bQ6mFAPV65S=x>t>hb{@sERoInI!NpV~nmbvQ`Q0i0)+ztGH?DhD!2&Fx_}!7;{j^F@MAc=LCRQK_V-7 zSnXT)nvj&QJ>@-(CaN36kB#1O^ZBMa#I?1@^9V|Wo)~_75zLT$LSGEN0UP0sA;<5+ zRMY&V!|?2^u-J!}1Opc`-;uiG*>pq_-o4zgjc?;uIY52D_ zzxd*{AbKq88J(C=y77AFqqh52T! z0y_#9men(Vap)%p(Ue~^LMA)_fpiOU)1BP(!!5Q~U5N}8HGd2&_^P`BCJDw@f~UPv zH`^ft<}Q9`jE4l6oMG%HHx0M!Bu_Yx40P=iO zH6WUZJzDC&c@4El*#p5+-f#9Z;*(T#?n)JH{)BASf(wBp3E{)iu#H&uH|H=q0WIZw z8>4Sx3-lC*UM9#;0`{yL$l3fZe|v(08ke5Kp~ajH@PDuUVZe+K?QbZv90TO41TC|U_nImPk6^^EWUKxLx6`r7E@)uMYv|R#f4=yj!#f;) z*GduFPJaj(Nxo<;lGDn53(7X8gu)0T}LtQaHr-K!{Y}?6E zLLUto5?mQ*kXIya>a06JIHuTn%e5aUTfke@I*Xp~mxj#L4-S3!D@CkN$)J4;mrqil ze|Kgd2^{boAcIDi?-z9oP88%jdWJjd$!NOj5`RL%@}!@5pxZ@8NGIvjZ?gG(83#KH z{bu+6>C#MIjRnv=5Wv`f;isF;?YFeBv_j)&VCB5!HchJTeV$by8S_<+2 zP8pln74WpCIB)$I2(V0>iiHoD?Ki-W@g?TN+e~v;1d5Fk+W>j5{0}Zph>;tz@$m$o27AnxTbuYr(fgFsa1Bw;Lle1k~{ze3w}ds9%nU4?6ddB*C5I z*znVK&h){>fhY-oWShx$ThnEUAZB8mZCNd4$ zLzloaC*kHToV5#NCdeD%;5XLaBrsId9AjGI>cKo?OuH{|^5URyJ>_}s;E=BeRr}NQ z7ms{@xHs?or3c{Tg+a9^b@+op`*=*faz+Z7gRA))a=5#-w;5#lpU9c_Xn!>BO@*Pq zJXFD4F&lk10J?j<5PgzD{A`$o8FzR`;TDSEo(|ZMY1}jZyY;gQ754PGM-bu>`SZ3R zgNOK3;FH0+P}q3cpE_7GrY%=)?<(@13MOQLLFvb8mHR=oQwuiYrvy1xI7!jLj23+L z=A3hMN=_V(6+g*?5+h6ymVf4K>#x<@i+BN_&g=a6Q{^4Og6q7%?)w$%p_T&&Fo$Q) z5`_<3sM)WcQ0!^H7@TWy(octl>L3;PUh^9?f&RI`faozU^fg2AKIHE1kj+7fi>K^NDHl_`sJDNEUMlEj$c1cEJp0oQ;`I9YpK<9$skK?dWep6dp^iyT-jr z>&L>-sgfO6hbb0!4ZzfFpC5c#hkSN%~C~gRv-)ge>#g#m5VeB5)tL-Qj&~}$+c_PHt>xDbU6ZU?u zg=88TavLS``G4)LKvwUl293)w1MsJXumZ-k(777IMzRhGx^3=3#(wwVBs<>T@pZQU zWb*BH6McmCXZaoOs$Dd+6BAh5kLRF?Ne#;qQS*o zkrpWCk$w{KwQzi|owNvzU;qaJ;&iY)|CU*Q{Kosq-Rmf(*W}@=SBxM2khl_-f8P9K zbk}i`;4Nhs@-YW%owCEsmY#cQkMhj7r(}zoxj$aKG9JIFH8=1x1Z%Mv9EvM59Cw zhLG0_$lb}vy-`vks{3OvkXdC}tc-JbnTfD0wrwOJ@qFtvhdN;11tKslG1&3jVF`&P z5H(^i7f{wSKI@gGEE+VZNUKHP`-jO1L|YNF z#geBmAWLFE1EIspY@yP)>68PlT?wa(30K}%Md;^z#S35hsitmd$$gaJJcGgi+~o1A zmpAD6e}99Q`Q|0AeHo~yP@xLk5mIG+NZ!%@d$mQq#Gq>el&3(_91+N33!=9vkimj( z%76Z}2vyAhu{j%`%_)$nF4_8~zZ4+ijswK7N2ZSVUhUtFY8rujy^{TGGqJn57W_E` zQ+rfe;pM0GlMqBNkZtVcH?L)!>NV{UTQ~dMrX}E%Zpex)fvsCzNlnYh57p!#Fsi}Z z)9{R=P+SdmO#W7mfR1TAe$%I=R)=#crhkM(PP{SJCR%K7uN^sO*acOzL0^ac2CT}U zf!!s}pX3DuHV`67F{ZZ=-z2)91&U+d&Hd_|_UD&yG8qg1{xu#*EOAA&do(3?AO$+v z$$ngqOK|;O>QBcTS9vOyw{e(DJ*d_F1%P=@KNx2okDtGRLhY7-VhFvW+E0wX%71l@ z`28DcM-){l&<)$+*tG>D$+``$@P{y7>dUCw?|<*Sz4up& zKZNz}d(X8O)vDD;AK9Dn0#0En$00#Z0qt{6=@RCjM*QX2XClAE^M*FdTvHE=^ zXZHTwO6dC1{4~z@n{LPCH&}NDTZF)vgupmY_|4!iIwGZ)1B6XPpyu6lF4YZY)46XTm@648lGpkhsSzr4pvSh| zE3lmTU``8Ku5l6h<^?EDN(?NxHYq)Wlq*6Q}CJ6iY+1d8@^hPyPVFaLh zeA%xVthn~|$VeZ*xnKD;7M%{<4#=6X^aAZV#1__zd7BSjwf8X!FY^duut@NGOMh6-l?K(f+vwL0yqb(ZY44J2)apF_Vpuf<*uygWKO4 zo3_Vr{9fdn0FBT)g1Uj+?*}+a#1fF3g`FcE={zKjwttmo?E<;I(gE)*xNj19z25!r z0|y8S6b>em$`R2N*Q%PYO^`L0N<_?kh1cE!a}!3-I0&kg9Sh3grf5B}JA>SJ{H1SE z0t0>z+DE@QCI&^|TA@`GaXKaJE?oO9nV8C`_Hl~5A5U4<8g0pNmw2-h7*oVw7G?az zoM$w!tAE;4K*q!w$yn(_i~*0e*3OtstT6DK{&_&;0t#NY2&M((Lzpyn1c=vM{Bbgg9P%@+sML3ssJhm2yg8GO$Qa&5TUY#s_ox`n_G!`Kn+i z*_Rvb*Wi_NW@Y?T`(|?N1yr3+D5BD%tw6-EmVZr}Ik&e@c?LW$eAXJ&Xu(CJ{rw%4 zex5!4wravO%y#Ea*Ws8*02)E0FhERN{Q?H@zl{qrLseWTL@fkmrCTLT&|!IrNp2 zt$#~ppXK{^D<@Zye>2WFhQR}_EVB}q7FZ&CxSa(e7=bZ1?Ghp3e$&lB?kBatwWJRX z=Wx2k*x&?l;@2D<-#n4$T~zi}!Hqr)AJ68#i9$~`a67EZ(NNVM0D7oY#|D2jP~85c za!oegsrU{nsur|_DNUy^)K>vLXZhxxrGFZXQ&K5xxRJ?nCAnHjZJT7jhJA324UXWG zOR9P)x><3J^GWKRDSzW9Hm#wuwN6$t$XA6=f5jhCw7k~1zz-YHK^t)i755@EH_G3V zT)#YgYB&hX%Ef7!J~bJUt$k*2BVAAwH(gXjVk}Zf#ZxOs8G{*}@d3shUFWvbwSU_< zTT9vd#>}0U-kLSkBj-~w;y` zjG%2-G)CYG$Df?qVHPe9nw+Bgv(nyGnaRke*8D*uEKqwIjQzcIL-*y7Eejv2F^VA@=ULdPP&0X@6sM;htu7 zI{}#K!hodoajO8B5s|FfA|@1YVUBhyM@Fg06vzUZ6FwN*qx1%4q^i12UvCeP;oB3E zchao^^3%md47T#e)`nphn6XFE@Uz70{iA~|6t9b9L3thN5xuE*h=!J24~8f)+T%D- zR!1%H0-+3?Wrx{Gp*kBJa(|?fpYq|RXLufi81XTe0vwPOfHCf`4^Vn$!9gKxN|) z&32b6RoovQ^sz(hmEuAGu?B98FyqER4M;gn^LJD9ctE>5+pb%tT$(s-e}atS0m1Zf z$M%bt?sj$#WNLfUiKJK0GbIFy$I={0Cp`*Jg*#7!*b2BM1aRqq7{as@6g40c5k~0O zMtn^x%;%;nQveE)wtve)WHzUZB|#^!Kp14AZ2$veoT|TS@~RcLvi9Q_9fhi=VcQYR zfi88OAd6U0Rm^W8@+5Cc1W8x+iSdUB$XCT6IUFHoIQebNwJ1sleIIfk>o8>c$^N1p zk=);aG$4c>arP&D^;YSa3|L4r{sKBq#-XJRCO#V3{XNBD{(q-{CdE(89uauYx6dGo zOv?kJ1=Q8c56%N$VP1gABzCqhvpa+O^+P@e`!XH*OT^|O0ywhrGuL5I-53w^$xI^i zZm*dZMY@#_!D}a3qa1f}uV`%#G{PI%}vI-V~f|mn`g+_mO zT-tgx24YoHQGa4mw!m6x`=8#MB3yzR6hf|262~=Sn?TSn)CWZMt>lbQ0Q+^@{J4;u zio*jq(K9DgAka!I8ZvTp@5vC?ptHWMg8-;v8e-WSI zsxn$weLqJ}yM9|FVRYV0wbZjam@Xe0fri>^>|Ft}MeWi~Vu%DMNav<{x$L+ffk&)L zLNx2!=(op4EqfdMZ#=Dc;~Oubh#7@^Djv%+K!3gr4jz%O1|TS+staVpBz%hj5Q8ke zE8Je<{~kGZ;UyIZ`j(<2Zrc@lro13{WiWq9O8yid7lzy^!BQOewsbzMB}UY1Hbo$D zs^Mm!5*$L-aWal^xWiZM|V6g zx4x*_0BPDDGj`?AkJ?)qws`{N2~_ZY`)JWwNSW#Dstde1Gyvn3-7wB06en2i2o-S} zxErg={T}7c&BB*ANgDnel;bEL0TW1TOn>o%}R>teF<-Xeb&<;=ux{m-(3cUVE+x(uz0R%_3kAO8aj8|0<_he ztKRNBsf`}-)4&7sGku$6I;6Ao-hHub!+Due!xWpR>mxHtWBaI%k-q|ihslz z^g_P6nxWB2@|&9JP3<9KJ$;4yAq4UsEE=%c!ThOiRvErso!izny73S@DNeS~!~wye z7*VH}CDsU2OxHRbf5wJh(4~}q9Ohen`Ep>8D_W6IU~10v3neJIc?+%bW+w|(8D(XA z<}0ZDGzJPQzQ#2`umO$wpWc7_V}F=-_9_KEy9%|$vNDP0aewv^G*f}K=V#fevO0b8 zDhr`DT0X^`_1P&aavq>mLoqNeDzl2l}fIZGLm!+iKwQ4Swh>UIF*^=_03q z0vzlqPULE8*hS&TP93$JXg~1;_+x2gy*^~HvYxzXO959^Pl$HTfWAcXc|;2>kVtX2c2%EK=&-!8n7Y8 zw1$Am^X!jjE7BT+j{7zj9e;)8F&lKpdhFGGSprT^yUhH@Ak1Ww;up^aB$eX=@Bz>hB((J2)SB4N&M}_ZnPPH6#f1N^o)U`;}Ik!upjaayRf5P4+{p)lCBT6N2lX3eE!1rGms~@A>zA7qj*b z(|=-#<=*>Ajdhh`M{HoGx>`F;m``9(sJE#9%_6e<0gTF2-oral!}JYEzm|MAv6wWF zwT80i&I4BFpr9Xo9aA(%*!_L99%g?($^4E!_Tp@S82};5>e5h%%z7u=<>%KkmcxLC z8jSE_n%;A*_WDm?Y7iyNpnz}6gsZ$<1TOw`soy}&3uX5(OTZYsHQYdJ`hiT(n+iw9 z6v(sYB9ObrHB)krKN{%M!Y9;{0z&pJ_*tK$uwL&=DaQ4c z(AZEV(i{S@EA%GdfqK{TWI-(~?@zG+Zk$hchjV&cgTVX$z`GBRkN)jFRszf7cCE0p z2j5UND8%6bsb2u7{QA~7eSiAMu?iV~3$N6I5(_jnxDM>Tj!<%7tDk*@UV8TTRWpGN zJE8e$!fY-~iS)TX+=Zq@%JdNBGImht;98J@$B1cV29;eYYS00hfoU!)6> zb`fVPeJJ4dC)I1XOF(3L%?~1DsI1DO5ajQZ{;WH6lD_#S&S+zBkFwYI0@ohtqZpOa zHpl~bl{%4^)bH=s1NrfePoc5EclP_zfQP(qUFlb2FOp|2igKLHC&g&aLtz2(Y7mD7 zQ+^X~Fn@axSzRv>^nbs#Avca0X~^%}Nqh1hgUnLyr;9QGdsN*W6)A#&$j+-c|AH2_nW1po{>#!2f1b5~sVW^`WZR zBzEn>h39IB$R}PaXC$}_nd#R39zli!oV6Zgy@DrEOPPctkn1}KFxJ<6SLCbH^#WVMyZjS6XS$T!E90H=@N zFEDq6X1}4>_bPYX8OJvT`%D#Nxp~IN#AL;U^!$LoT@R`Jw4VVm-ZbF-ew`lrvey;H z@x9S@@KtIWdw=Cv&9)4H6wN*BJpvBR>P@Ans44CmDbB`^i(LNQiyQ4fEtEZL%%MY4 zLZIhPoDZ!;#eTv!X+|L$RETnEYJ~1YT-Yd2E>gQF61g>&HVakw4jx%(v?56Ss9HmR;qZ4Ys7UxqiEj|@~lh?L_)VfpVZe}C%!D;CIzCOu(lZUr5 z-vm6M4vf|_*wdorZJKvj>|b=?-0 z`s5y9yvs|6v_q9~QuA#uN2LUYhsbQ5byy=ZEmJ^m&O+>ZHd3W0>)M zDG+J3X)t8qbb5Wq;nidcyQPET8uK02HOr5;X%q*d~~`f$me_ zoRei2{R&y5cR+&Pz!&l+yJm{&eCl^cx3V-W^U&x-&Qc*mQzx6c1Pvk+w0__Z+}ss zBZUV5$CkCg4gT)ClpE0i*LDq~e)nKyj5~m?@|bPz^)E9qg4u(JUdFcSTy%mCex?yq zrjsLVVbv(NdH}83u3bDMOO2Y#d$(q8O(sX+z^}nGasCE(n;eR-o5t!sQSt6T6#~{b zdSPgRF0{W~rU2AwR)kVS1u*&>_J3$_5_0?aBqkWNR#`S&bx4W4bg~yrsYBwtT30+@ zaeA$l5XcIlG>ISL;0REH@+~1h=zgZzM(T&vU{rDqvoU^+PABe1c)zg`#iN3IXYO`{ z9FI;S5z7lwv@+5YDkrs?a7V`-X!*Cmr|kl0BjFr^!GL|R{S<0GfBpR`TYsA5#VneE zAF)AmSkpJ^KyKd5dHE%kv<%zL80f39RhOgq=-54>4?iYuc|guZ^V=`lex$d z>&s&XhL9C!@@2VaqvJfRnlASBL4#uzrt0)XsIP=YkHE z*9rikU$AJX^IGI~N0r~j>VHh}gen(zni^vpt+9{f?SDiBDk6{#|Lz$W87UuX-0>U z6LN$Yd>HS+J*DCUBa@WW2>v6IHGEC)V~2aC*y6wsCn8yDKs*v=+JB-zi!E-s3H^1r z%00tT5+)vq_0%0RWFJJ`EiU(J`C-Z5xm>Dlm%b281!D!-g0uRk?H{e90R;(GGJXF{ z)bUZ;+^gyR9Wn#hpYQ87CYvd%EH9Z6--C+eUs4>42DE z3wQJV`HJ1}4-pKbwSP6v*@NKvpfPxqQD{XRVjh3VR2qK6_-k&B_edbC=>{0AlhAee z-Y`gnAFlZ<@>wRA4eVSQdz39s2qMH3t`FCaxK~mEWYGDT%$49|wA8bbd1+gg*&2aN zY*1l;0a4?ooc@xWpwpAtI4}3HAOPA_qCVP~wkYg83yPT827mc3{OYK`VLOaxRpY@Mno3Mu?)aFgtkRF^mnR8jhj+eaM{Pih^d z>O7abfVkZUB!4*GQz&YfFBueS$LGiJb3Mji{q$qubP+ZXTjC_=X|x(y*py>YP|4Sc z*(_WEi~5(B{eVK8V5oazooc)GNIcg>70v6t`b$Q&h0Ttv3QB?@1}lIb|L!DZX^~#r z#+=saYs^?13)a15`5N;Mo(qTqqZx!W_)iei`r{jjoW0$fihfVBV}${7RP2{a*J0)z!ArbG zRgAO04u64o)Xsh8^q>>EBiPR#k5Z(zk?MPV*n<1IQbU9((P9oHOE|T-%{Q{&SzYZNRLP(-a!y>6GXVJqIPiY zb}^t6gubY4Bhj3CIuw0&(*dz#t+FRS;v-3)wHlVnNNghPudjWp) zQo~Kq25_==Zn^R_wsg&zs0L0SOD7GfFBq zGk+CQLxDh5Lo0x8am@KD07IsBG8!32yMbKsX)oc@ame*wctgt~NWCm_+LC}`Eqi*f zWjEQw$qg_J-|#H5a{gn?zHSdjxVi%+SQ>?YOOmTz;FQQ7FSdf4phw|V{o!wud^HS~ zUR89!!3pqZ_jkm_YNXt^X2kQ!>UD?koPYoQ{2g=p@`K*}3&tK`@`c6rS4Uev5&>vq z&0fw*7ZS@I5m9@8zz#k|T2m%loi!r_1k4GGAi7(BrJwMqLuLwgkpfspJb z`m?+NxGjx@u3$6JUlF;*(ZwP|kfE^<0 zI;r+3&l(ErIs+u&C$FEAs7Ru zU?fhGi@3{4HZHmKyR5G9pjpcM@(O~0eP7b6qTTU)`@N{27ca->ZtKNEw*Vzz11R$1 z3S4#|7$AN#QZ*Sn<=+ULvd|VQWj^DS$HJ@W)bA1w!EdJc=zaRT_@B`!Lw|VuaXjI} zDix3!nT41KkM~)do9=)M0YkJ9WX|Lbmtihr{Cw360;*RQ*m%k!iDG?0Dt=)sT4J?a z#EYaGz5>k1gny-41obS8st>?{ZR!|bK~jO(4zPbRIm^9tNyR5=0IHNtt0H?%5iNON z6(e3(mAA#Qn#=@z%oUu_;l4QkYF6*v|u38956cWt4 zk%CxlZ|N~Sz}=iGOam70I?Im**CF$*TXj}y_hQR^=hSnmmlRSyl7B@+4`h2t;HDTM zwXDRZ(B8U+Oy2x-MPXzt!x&SA*UYdik$@X)GN)>6H;W9QavfiY^z-M*1!Cl(Bn~)y zS7{<}Z@c+0|Jm=p3`4Z3S=I6sv8@)ax#`*=QbV143PaqQ6w&4zJY(jR4 zkl!y*`{k(r0fqNt(0^ZT^|T7bOEH<-$gmGCqDlGkIIg_+`v+SF;`*W^0&wHa<(aNw zoE9u3zo&uj4ylkgx!b00R`^(fA7g)%)swB29Te~YGxe-?R9g+=vS)n!9* z9yhg~Z%6=c4!;d$PWua{C?KQMj>+F`EDHJAJ>q$S_FVlc;D2+tqF0{DL0unQMXm_x zvh?J}Rxi-$h9w}|hRWYDRNuY)QmJo3klpk+VVuxAoPzHkiqm~LkV~9R>_S83wX4?F z`fPu>jw4a>RKL@b9qR8(F&a2z%E~oB<;6W&m9-nmpw&&wvXilVTMbZTtKoQ)!4k^Q zSYAxJ2s|B15`WSMypVpBnixoK-<)@r{KoMC&OroP^NdWocnQVgo>+k#7AS#ck7GHvnEu z)`8PoNPfRhi;N5J%+M+dfM73U&Ja!4SHni}Y~m9muz&n+mL*mSaDut24P68HfpbQ9 z294j2M8J7Qo59s9fMpPE7%aaFP!1$tzqIptH6K>{aC`l=uX9im8q(#$D*Prqta=`r zJ@W3_E`ip|9#KFFSQ^`{?*RE>J<WVf4AER*`$3vtf43c zbA0;SStbhi*#tS=j6AR!_YTJSAV4_h`x7HXA%EZy4c*oa)G^2nApQrzpofPbvw#yY zmhxJN_fNXwo%;%12)=nNEFtP$(h4Bb`NdNnxyTASU&gT zmN;J4hUsh@d$09a!ZqabyjDqU#>&Dv4u3*C3uQ8+U>~kx4Mx)#bUwtP*>)vjowZCq z!)IU+Q54}71@umW#6hT0-j*3)?T`uX!wxLE9MkLf-q#9MgFF>RSn#%9C|~CQq6r$s z{d^SF>kCyh7a1EPkY|f!vtqZrgA*QQPxkNrDe`eQ31Puy%+{(kMiWS_{ER=Yp?}Qd z=Sx?RsCiz7CamDq7#(__=5a z>?%&X5$_`%p!C!?$3Y!s&@gDheo`vFU&QkqbS`(a5sPSPa-ZhQ_iq|^gXsI9N$T>j zi}*;`Q698iex|B{3Pv;{(6ICpYk%bdT?;BwGC&<}{*2n`#|W+Jg$cV$Dx|_6Xc+jy zxs&2^u^_*lXf;Tf)c*dYTT>g(fh6R85;7Tw9u30Mlael^?irnAcRTuiA;mpQ^i!tdfKcf5b~MKNM$9A0)O?m1&uaXp`0EEelxns)7m>FsDp#VH^S39b>8EP55n9 ziwQ@tolK$z5F-SY$0Olo{JLN$R(3A+DJPW+%)>C~Y7vc$Rq-FDR@L?}{=59tbE(R3 z!YhmmfNu{gUk^AvzHJXxIDbD(959TA>Zfq)#WRRi7nGnUS-CGodqnD6pvf?uh_1%B zR_i>W*qZXzP2(stthw2PlS;9SLG4D3^2Tgq_?)oa`RB~cWAVc5B>?})G{V5*p6#C( z0&+_MLlcX9#&*ayV8RW;N?RHbmh|W9?R8DF~BZgoKRA5GKJ?4KHNhLa$_*r7xVuSE5MZ ztO1BkYbeO4Fz634xPY5*s@PNxCD!rf6`EfnBWZfF>Vb=WeYlhuZ1PtRh>w~ZV!

    Lj9FGXnusT8i(s4z7f%~8pl-Lg9Yq3tktN$6j&q=0^5tr~ z;EJkt+BQ~IOU}7v7%+$X4L&H%9YxU)6N-~mh7m|RPU0_oy?_;}1C4q~F7iW~qmT=I zBCAa;K+&T}bp##!aZ0Q_dQbSg>bD+5KsBWHICk2{@M2O?rGKB%f_{VSuxX)k)O2;4 zy~yBTMd9op1`1eMn(}ax%2bE;-1Z3=Jy`$a4McxHX*Cclf-wyXAw9iV%d!yB2D~KX zh-`_Abe_X9_JyOomhaIrhd$=gri}7*v2Ifs2p-QuS)==^4r~=YsfDV849m`POKlHMD19{uG(`X;wH3J&3!Sq9L{j(ExSDZrB zB<6n9$V|OWVM@rSIzXj>p%Ei(PRjr(8X=1xhlQ6!?stF5GsFWIU7w^$hAz;0;Rn7=cD$f9Vk2%vks$dUv7=kTD5u+c-IzZ+p%uYjGe%qBzK-Kh=>~F8DH0~oP zKm`~5%a_9CeFH)VdyDxg#NvUgT;u4ex`f29(gCHk++u}_HMyfnvw47#0xv){I+K+G zeCz%0gipSkD8rMh_fha0JC0=`PIEucat;NqLt(+Oq&AfwMfU9 zy%^LLBa)E#xx-HwS7e`&-(M_U!%Padx4{8MAp54PlcLFWrl%;R+@0RfaKCsCXt3I% zK>woU+`Zj2t!fLRu(_UMKLc1#8Swc!BHq|j0Xa63bxOIbrVA0Z_up$VK$ z=N6Ud#f&L#PoJ(()F`JRZ#F9cxA+nc{<~zxXL0TF+Ax~^^^HO8ng~fZy)CbOJ0X9Q zhe*B(&SB+`Wz9Wmw~60xSw7$eyUDxf894qjN|ghPEm24~pPSNUB@Hs6mK%K5PA^dY z1sozzEa=b|!wJliT2Ja$A>{;o1RZR}-gg}G=MaVjODldODcZ$M^(iWe3fDsA5?FD; zR5g2`Jb18rq6@eefV*@9<-*e@VH4VXA`Z6Jv=jHhxay%+j?s{?-dYOzm2O&&vsll(jn3UC3i?-z1`kB5wUcu{@{uXh&ex1Z+h(+8%q zFG)2Z(^OVU13Z=S0iW79X5W9Xg6fcxIqY{)3H$N;?J>Ybn|71y&-HSg!UrX>Z=D$s z!S}(#qu-7p(qD6Y6=48f4omb)U(lJnp`#+IU8~Je^qCTXz5s?GJ+Q;ipS1me-KKwnsu6zYRD=UH zt<5B~e@E)+ZxBwZBYFAJj*`szmOj0earS3ZD0U=y zS@69Al7w(p;`p3(x-fs!rgt?keCzXkd&#_^B7Tx_lF_dcYYx_xPGy@W?2!eE8O)0T zmy#^&BI{72fNH?6TzR>mjG4-BgB6&lv1J*sJU`HA6%nqAqFAG}_N=`MdWW?DLi?@6 zd~(_j z*x6zU8`kVVUON4})SAM^{~Hm$o^w7ex0$8FcBq||iA*VEO(>2DX0D0^*A;+nhcPC6 zf%2ED`dlMwxEiaAYZU_W0AaDHAfF}MZ?Q%~OCIzilGz)s)|K#h`DE1+{g%q5}=M zaBE_-p68m$jb&u>!);Epc4Hc(h|Wc#6)}Ke#|e#?yQ&K`pqtZffQ4UG`Ae`PgRX0- zGcV6Cv%iABw@J-mxm?xqntC2ki9x=)o4<{I%PfCd0=QiQwZ9441awdS2v<>Qku&$x?($ZDu>nl0+TFE%Y zG3$Q-I{gpTcor0QuYG@=w3-38%NTy7g{L&HW+=Y_(WQA)5Og2T#F;PVa!o>NZE5PI zI7`gQst6>sK!x9);o?%%h{AhWuJL%p9ULUsLU9qO_h|mSJ`DYBe+wGENJ4)|VKHb_ zgsN*Bg|~ALM(~}dxX0$a2nY4Rnq%k;ckq7(F=pYvC!>F_1dwK*S+s}+Qblfye}~&d zP5FdAC}$0dCZOGioMaoH6;u?Ft%LXhu#h3aWEZ#~u%fA3UMky%(i-Xm{?t0ZRv46$ zCQ=%x#bTk0OtcG4zO+OsoyM2-*1H>GWBr}GMkG{2Y)`M=LosIv==@5+FzHdC*fM_< z+8S;v97q(IA+cpX4=7Cf)Yu)>Sg?mLe)_V_aEZ{lYVXZl36n?L?0defjeIOB4V0^0 zMe-f}K(ur9+cD~|370K*8tRg~5fUJ$I_O80pU7X7SJmTUm@%=d)N$1igX}yO3sBl1|+KOWBp1B@&o^juWVy-qq^sM&Q|p8h5uVri%)@{EF8m&KF+~lMiiJ zk;*F2jmMGdh^oEqTMo-2(AuY7)-v8cq6ot@{&&w=GiOVfNqam)lJ94CeoKGHL&`0u zFguy>mkmNw)u>1WTsWw($h3q3N%BG}NFQQHyc~p0$)A8^aAaaNmFh30NgZu=+??WO51;Kl>Z(z4ImqyhGOUr z$IC7gEq3?HmI9f=j;Pkc+FO5XJUaPOZ6(|K(wxr25n+D!^iFLr&`|(r9@r+=Ftmdb z$56oR)r8zwghZt{WdetR7hRW;5ox4EbI>3!b6k~0ns`E zM^D4^a{F9(^A%u?k{N^T7#56Dc^FK^>yMoMI^e@zWYom_VSkVpC_jG^5Yrw6mojAC zNwe`{eou>upY`uPO~CL029)KZk4^zl37jS+3iHFxD$s>gI>={t!_sc16`P!ueJMNS z)gUj!rdf;v8xODh@w=*8^l@KOR&3{8iEUNY)pPt__wMZr(3kj9flkxWoF?BejB@KI zHEDW34?CP;5HB7lfOUV2r=J|2dRHTbmcW!cSj8A6_Q>W(Dyn1E^o20`0JmNP=j%x` zQ`ypcKYPlr3e#FgY_MMlVs6IQi=i2jTpnT397eeew+{~+M%(c;qlllT!b(5tmR#cS zDHo~R*`&9Zv6Vo zkIhVQNcDo-NgyvtWP9Rfi|abH%hRVAE2hwb$4k)RzurOb9~oJkQ1O;L&XuBAX(phM zKubcf87{kXM;B!rhSaNF14a71MZg`@Mq))h6mlE&jn9*C!~u|qJW>uX4wwcl!Ba*uaIKN;Qiwb1v)m)bRjQB}O^ z`wE~u>L>pc_~4sOZ1i^zQDvY#LDt^|B$;IMo{;5?7n#m6E-!YstrnSl%`4o(R@Tu_TAUc3QxYzu#<4T6hb0IX8&;==hzarasD zL;3nzvV8D+){QH_%kr)~7Z1!~3BO~l82rt*=2vIY((`c;0F z9%6JLFaa&YNP7P|mg0$)bXLE$xIN}4Sc{*C((K{VQc$b&@6~T!D7Fo%0ukcFaG%E@ z)0#I}Tc3QDJIp-Vu=o4y*(iq?c98E4Q_Z}%Ogsg zrs0=aFy(F>Pob^c;DRPG??95!WN|plj1o#=Bo3_Q#r-La_dRR^<;t%a1B3vm?XI3e>OJY)ZA_|nB$-jP+5U*p#@_1M|4C9Z9B9&FE6hdIe3@VU49 zo}9hGQVO8I_x|wh)jw#9fnu$U&>w#VXc}um2xy`rrBW$GQj=wz$r^sPR3@Pm?euEn zmJ74qzIj=5p6*vsS;`hKmtAZRP9EyqmM{czO=(ceMPs2RIuAZBzv@>lU)eC*Eg{w} zml|er&kNLJagBlE&W~0Yhcg9}dKL%4UP+p72AtU^KsLFWMPcrYxi9Fz~#8LlMkdswb*|-|g8S#}Vb`o(6!7xe2g< zK|oZOsjsyJW+mu`Ry2Pr%?{M~>95u2QAFLsOFq*g-G@ByaRW9CTC1lu`Y zBT-~p*rw0~7Bmkjche@-inzYfr+z)y` zg>I<~%KQ*8FS3rTK$WYK2?!N4%1#1r7sOlFWs)2Nm2n=@2L0t;t2rCS1ja(o>Hwyz zZ@V#Wo6!S(Fvx#v>57&+>vC~kfSI9Qs){Ond6e?y+*{l5d*V1LWu!Sv#sG?)x9I01 zRP9=V%qU;uhxEbqCQ^?DnB%NtZa}ny?VOZ3dgZP6_h5N=7foNvc_oU#w#3=W3cUk^ ze+>s|to5rp6apDxOF5o47z6(l_%s|}mK|TbJ}%Z6T$+C=wL<`b?vCRJ)p9CsxF@rp zbnx~y_r1AX9Sdu;r+hLZKm7~zosiN*%fRh6jOiG)I&-R66Lqf+3k;J-;)z% zSK%hF;M%J8SJai%NPzP5fC4~w?Y&D2AiNS7iERA$MkW`z32*D1p6{gIaKGrMD9)mo zgW4!5<9*-i`jXx7rESa%P+&X*gzh;0hKR7jy3T(v_Z^*h>$d)B$B<@oAb1N-;RPrd zHXZ>B#e+Oj<$I-!G$3XyW+u5a&?N#?R}_2nQb7sZ_w$pR3o8e&sg= zFdTo&DYSUGT#Y9^@-dZ!sTH*bSx$Aets&HMz(D1TIZr7GIiM6`Xz_XuWMg^a!F(HNKB#(3i8z_&?faZ}RTE$ZjRUGHK>dt8-l8UzgW^c|%dkr1b@`nvESzR70Z$n z7>+jCvWR!Im4tv?v8`r&)a$&282C>?RJPp#&XrWsp)>(>T7q03ad?TVxX>A32Y7!p zexCWuY{adaL_jw(?U{2&&1w?ue^7f8Sk@4e^ir+OkLX4CI= zYfw>jZk}w!q>E`*s^;WRz_@y1F{gjO0J&PD-3M}6>$LRNw62fOV$Im{abX@8ApC6rWN4%zU`i>eG=h=ZxQ43xdcUYRPWD)=3?I6ayI&1(ttlvFH({ zbtoO;?`a}yu6l5#DUys5ftyIkIUu($B@ghk_|9Zl{zXzQg>q}n^q0{G3n(EHGJ*i> zD;CfV1Tgp?Cux+cg=K_}ZX;lS=YWqcy?+GpmrtI|4zvipsd4J4`74HVa3_^I06mU> zX)t_ACg43dBIyIoAZc+vnrVL%z%7t=i#5rj3JqZXNEG`z3YY|wBsE2_3u>=#yzP5W zOIQuCs>le5jvLMm#p4HciZmmBu0woYA)5l#`c^z29J}w|(eVyr`Kus*YQsfF!NPv^ z-2OeTA@G?q4+J-8QoK;KB1$&bQ6EDY^|xtnkn0P zKWR#D7TZX~bK1+YjY*_&>lB!a~JGp-VPJ1q&A zgA|I_4^O^)`>u(`FEX(&8!8I)7-^n-Dztq~a2ABUQy7v7epB1biWP)W$zcMKAn(*! z1zl;Y#lO;c*D8Ogy(#oWz@c7~g?hA-$twWk$^7~D(P?fE=lWy@z8+BHZg2eEnr!kZ zTMN918`w;0@gPU80Kn{F2J(AIL6H0z95^}!yw`5F2b>JwLh9xP@`1DG90L3(Vfswp zyM+tyV^}K7b|sPIyHE!X4%Ywwf=GoXkPv3h0hB9%?_`2WZ28C8yEl zP>bZkW>0@E_=j9LU4!$@{?vH*LYxJ5Yht z{Gb*zi^s^mkE*>MyKoC+d+nCLzaNv^&+bg@DMR-B`=I?#Vsg7IApoKK=8jgVDVzaJ zRLMM0F-%ABhK@57-W=kZ9SuN}x#3(j8K@IytjK>H&LLOVIRAW812RFfbF~k=^{`<{ zeb*j%SseH%HA3&eoIco(CgHoObUnD465C|;qcuJOTmA}gz;%t|yoO?p69Tar=hO-h z)XSvX#n*lUN-@PG-%g>{!+g75X`u(^_0x3E^Pjtwe~-O_1aKx9u0O3E3tY0JpPdAk z;Iv||1CQz1M=~p61R=}rXfy1nT8&HE)i(>%*z`T3c2dsavTF#TB(ySy0+%2|e;4%w z2ZkU@E04p&ZwE7G3)i3Q{h6)OJHf36S`>eD_&5UpJ=%mU&Itw$DNFo)IARKjbOwYG z02Hm&**~DMN73B2rQ)n%;VL@&a<7sEeCTRur(wWmMx=`S9y#j2^lFn`*@7bC_P-e7(KE@2dCDW>d*f29Zl!7T}< z50CO@uUIKx>WY!rMdJPG`|p{-7cNI71^OTCl6&sh0NsF`ayOs#W#UnszPUwX z3DijGxeunM60%KO=(`{R^Htox-ktm^We+K)zKfKxHJ9lT%2*9@Ur7Yt4->q#5I%+uMKPQXp4I z8PWmn>kcVWz@Thu4}RY#(YfLpg+l~wG@Y`tXCA9;$0QKRXbzQp6bTkif+#I9zkpZC zGe$#qvD8kfJ00pMRsta-K_0LxLE{y?Tegx-wT?Xd{nD|1l(a3I3-tR#6!*|^WrqsVx zm_KKIvyz{yj?f+kHF(Ju;`rmm5hY_eU4#vOVnFU4Lc5=9dAyH(nd33OL*ugs@Srzfbh^kTXmz^jw2-JnL#!|5SMZv= zmt0Nk8>%)A>>bhm1M+_n!t!@J$^Ptix!1kXA+AHXrb2?pLzxo9xCr@323xkken6oY z0@nV0SFeyqxJ1JQ6@M40SQ4dtrHT5SyoC2cyw-s2A8j@*ZhbfR(iD3PMBqZ7A8`-7H+85F*=RbL~zEHscW=;vvexs?5jQ$v-Pf8r+dATXRC zN!@5>a5K1QVUDp$MH2<&bDPLG7vPA^14#%YP*_#XNk7y4vso?J2p_3x3wcV?4qpv5 zEO#jJdaR!n_vL?!c|=l;A5#jkbt6TIR*Mk3Y8@*jo$zj zp5bzgCUY0GP!wl$93YZk$yOCe<>usT=$ZV%U!dpR^{anp9P!jkYs>2S6s*c#?mCaA z0ovexE#d^Nai9qgYdhM1pD@-WI8$3HZh?MoIUIsv>)HN(fAu&s$=#%QyiohG`^j?q zr|K#$*sf@Zl`V!@WBR8Elw#ndHvmUK7QsKV%|A#b&WC?4ga20C=nuHB&P^zd(%9Zyu8GLk zNkD%}96zj|2n^l7dYAbH$a~%iTSv};6i$r5PB)+eW+~F)RpARH0FA_!<)p#d9%qa6 zNnEp#AD{Hsba@O6aUaR49O_qZoygSvhC7Ylbr-~5^5tuQV zUy%w2q@lM4AUuAVMCV5Of%r*huF^62Lf8sXToI!aPjX znd}RWQEM%uZW99>2iRDM9$*u#7Qs6fhsv_8=N`O@qTV)rkxCy4CF%U&f4`gNZfAKW z5f*ln&sB6VXn;_>_0~3_3?YEA!&8(>ug(!R(+O@mAoqf{-n9jhc}K3@4%FFxnxcQh zNe^fbd#uC|a3#erU@=o>M{}{!gIAueEB0Vgdh;o5O=FfT_;{KZ_Hgu49e$Z_^^f&y zs`)-I*DO&nO(lmlPP8$pMw!AOSmGN|?=+HITcb{K7~aB&flm#Kk)dXD9da6Rd;V2zU38 z4WoBs9@{y~v)rF-{&I^2)Uy|#0v2aU@&_cp6S&Q0&>Sp${aO>26gl7`nz+ zF(^`%R5RiL?Xsa@a(nA((RY6xq|B~cRBO8)r~3=^_5H0G>Pue5-v>WUwXL z?j98-*v{6Cd_FM?s29 zhR{nsF2N0JmEgTQe`J4C`;F2@bYkNLk?{f!|FUdx6t}j)beYzvsR&0ATroFXU*5N> zR(dp-)DU&=eRaVwm?wajW5DTgA(`^^NU%%2a$LXG&=#ZubD={gk6icdgKvT2{eZoF z;dW!=Ej<*E0BGtS0mT`|*fhy7y~gDc z*k~Mk9QF^42lhf0QFo#W-nq2k%fLt^m!%)}9}O1lQkqW@4Gkbu%L2W-4uxC@`!VZK zUo=j9Yq$eTQ(u2_yds(3Mo`f=fFO7P>o@`+Kd-VGU{hhnFP6_Fu4UTbdXO@EDH$!C z)ZepBgCYEky}&gmTfF%GiFe@Sxty@FuPOS0NxB@Q@p>pAffn|FGgvgS4-~L7ZnH-) z=RSa+{7DN#4Bn=1b$u=z6e|dj{5EBv+izLEunPLfqZof9ty+hY9V!{<8%S%Y(xh|b zXx2$M*^y=h+@X!IMe_02hheeF(t<=L`9MZJYT(?Af#;h^1F|J~;1SJhR`YX662Y4| zh8eP1#8?Yq1;7%SBIja4Z^YZB;Jm+1Ti6A6e}PumIs+gBhABJe%$g4+h=3utxYgOU{el>!8>T#N8x`58%a zrh_>A%V64p+I!T_-7(r-{-?b4 z2%y3;Scb8p_4j0($VN>MsFI!X#oX}I^7vcvnZdD5uex*L9X)TCQI?}Xs8taoIjZ01rq;l zqAY*y;br0~G;8Ik&@ygqOgxM*f7P~g-TR`yE6f%;5^t_L%q}`+VeQl!=>|c|3z@Wl zvJ_;Vw{gGLm>^(02_xys4j-ogNmWy;i>SVyc_l(AL@q z6nO>cMr$B8GkxhPEZo)xehj60yS>zdU2T76&SblYf*-bY+2oOew$FeBPvNtonHeZ4 z*hsLKI00+eE6+18#*%HfI@|SS-$>pglbuk*M}m{%p_$2SULK1m;a_w=&+L888FTT? ziX~|g{zSK*?!1_fO#LY=O;BnL015uycfm_08=M;I{cf0orWI_!2J=a6>&e%%(CUBC zaFtvVo!^KEJDin2&87GeB%k+=2iwIqpjLBV)plTL#=^n`RJxkUe~I@x-wM38eb0u< zNdl`bV%>_Rdmr|~0OD`z)9)xP+%r<$9RqZQQS0K)`T$&ll^cvuD!b*tKeFmqVhfS? zszBKBQL{NZCTu*znh`by(;)XcVNQRe*MK#kWTsI?-r#j}|30AeC4XbSOvBK)i4-`4 zrwkPE^=I%#RYl>2oK))BCg+I3Q&LNM6;r7 zN}$mANfCy6AQ`6|cJU7q9Z z-j)hjs4!L^<{0^jfGSLCjj9nbIbuqZH*0Vro9l0{2J3w3$lfSSc8K?5Z6z2P3MfQH zONf6O(+{4K#|!~F;*n3I4Ge#_N%6B-$$;MHc=y!-lMU-qK$Gg=Qh=!=NKh6o2#|5c$Faf=T z8+t)w{WS<=|GH!Qv7vlyxYG&+a@oyE5fLPiEBdj~3F&^;&tdKQS>k`pJHMH<5WL-M z#8zPP@9+_*V3nEfm?GD~#YI?k{eCds{um!;;ZGm(_VWX}`bdCGHP6j>S^YFO|!IxQ0LC=QQsX9!XRjGHif!hFh&RO55_5i3j@6S zjab?Db$2(SPbx;aG0K0Q<%`)UtFxYx{HIsLWm(3Q#%Zc{ZU@9Qk7Qm;fc*xyw1I@E zRzk!;biH^^G$@XfaO+uxcAI^tPPmyhPCz%J?T^}s84e@LnrT2Ia33|1`L*%%5&8VcO;>=4&0?NUlu&E=+I&qNiKuAQf6{ z7yFYD*H|6I(g^40XkXVmw3a-@2f8Rp2tFrDJG-Sd|SQuMNx?K@A9V zC3GMwg?JTDsy>Jn&EphfFA#kZ?>WdI&Bp2K!jpq$tQ3E3il)IT;tS4V1cKcBebEW7 z;=vDSZ-eCX^pr8JqnQrO@CC=BIPz{d(%&NDd1VobpS2##ODr;Bk-vY9>BW zbPA1_>hJZ*DS3RBSC=Y;^ohvQbUvcRy2DET8WmhNUA&95cGa+e1`nyGs7CNNVVA3! zg7-37@%MjdFk*UtDP}>&TrbA2sQvV!RvAxrcPpAMDgZJE|0N-&Bur(7_lOb&B{~eK zE$W1Zgu|BA)c%depTqaQ9Scy=e3nVYm6{R8^xbwq1^b3sB7%O=cL2pPlUW4eMG*Vq zxt&X0epS-=-nLM9_=u)BVA1s?_}w{_vD z{+<_0(+8YiObrIcBR9!munoFrqf7S(R7J z9~ahM!106cAh+);VQofkT*8&j+?TkKMNs>J`Pj?`@%}~S>vu6*sHegeeRi8MkXN(5 z3x=M4a=hr)0s_bKS~rvP5!uHs$`d<{%_yK*$Wfnl^=D7gq`C6N8a|uUd!J}W?~;G$ zAs>tC09ZiFXdie4!91v|Vc=wAHwAWUj9vwj8B_#CzcuLL72sKYp>coLQ_N{uj6h!W ztczG7pT&%lC>FmS-F6N7V}gdR6&5@55_xr9y4V z^UUG&2^F^W4Iq|-QYGm=WL9Q%G#EjrBR%n*^0c;Ul~aAi5DCQxO$+gQdLBPvIdp96 ztHl6OL@&(viPtjqnHJ{YL`;8Lfu+qEV8n8aSQs{GfAySCAzzqIu65vu1<(`}t_Wwd z8Kd%7#6ka(7&fjwlTABV@;|(`j`OATa`4R@+p5|UL~YB7V>H@pOt6b=Y1aG z!=kz%EGk&ULwj~5Lk+JGO~AZc=>pe2#P1~E=mgF^u5YUqU}raMXit9&H9mUQ<^(9| z1by%?#J;b#e%cSOwp-wv;G!XhG%&5khxJTjQTe&M-s8ES9S5&w_Byd>6rDZaRjL1} zqg20ghkM;FNePSLv8lFGo@aJT$bKsG@klV6`U|IP#~ zGx3WHa8qJBJ+GP-%B;i=@Kw=u=j*r#JDh(6ZF*@e4G=^5Qt{IT znn3G@(am*H^~(YyK<8h=fZOzQ>mrssA;wC4rCdH|?lmJQ#ES%4FdK7yC|abxC@cT> zXeGJgzn^eye~uw;HSKZ+xD8eAk(Rd~$<-O0E7LWJ_EF29$(vQDgk2G!#QytxQkcwa z^bZ$Ls~mu)<~4sMy8K?RxicF+Vc=7(q*CB2$xz=IK9fQJM!`b#bRlQOhpG$c3#45e zc^U~}8wumIR{!84)6-mcG@ue1_@qr^T4QW2Tt0=8tmxH)fL z-i8S!jEHaEXfqVuy_vv=Fsi@h(q;;vKT4C^+P%iBP=i-$^k2Z`ADUD#&%O=682%I; z1rhbG`&57G1N!8KaV9xy!)sHp>-FiuR?x9u$Kq}gw7}2mH#Xc((ac6=h}k${ktPah zy3GO?4BS%b@zcfECuroiv|bXJ14E0d;sCW_9hJ@K{t+bj&sSuIYDR5inP_k(}Bmlt3Y0qFeAZ^$jg8}*R&h}tF4 zZ|ma(Dcxt#HN2Le4#qSp(Vd-_N?D(1Mp$r>p^MZ8KjGShb8K11I?<5g$|InngmSX_}E`IYCcWg0qIWr+W5nC>xv(soBa?1}mg;Z`6GaDR=D*c&aD zZOISwSZPkdmg0c})c-1A?+!r4Q2KnI!61Kj0)>=`rGN^6u+|t)nhrJi!>=aq_tnU7 z!NWi@HbiQ$z3*9Q3yb|J$J65kt=riyd!T?G;1Oj~w+dhB7k-vvN~W9yrQ_a*`J6#t zOw_O*<(E@yn*|U-F!7!Hyy@U){wV%c2oxVPk>cXlvPx?B;I7`-A21|#zc)1$Wb=QE z_)~k~od@_4C!(uqaY7Sr-;}KY6#zn`nxCYvl8r_lCzcc0n_odo3i?Ry`F@kH2>Qm> z!v(mI%z7>qZ2M889V?s;N@)-IZX+y=_yeOp_GFt2Tx44$^$vr$8Wb(f@=43hX|-ds zBMRIim-WgEi#V)SdP#B5$M*S*7%SxZj?;V7vzSH7y=85$T*l2N+6Lx}$P zuit4KD+ecXeh zb>jJxN`TSY-NR(=zoYAfq%BL2xdm<-GnDEnIvF)RN|=bD$ycaz}2Ic4Z+#+h;-QwVNnS?(21L zgOPkGS1V|mlr zKXbBQvSr(&hi?OA^ca5x@h;2|r*XB&k&%s3&R@+0SUdPZ%9{43w`+Ef&7}ksH-BWd zCIJaBU)AYXslnnQaNn|e#FyqiTJ6en#CREJub&*{{dMWQ2*VS(yjaN8Qu&BjF$&DH zeL-7?6TCIy+X9>`PGRkqZ2b_4lP4chq3~^N3@BrgzRxx^VV8dd9xjCuC77jeE5Zfy za;X-GJych>?N`%(P7`Q*dv|?d;S0Xo=hG8GdfovEhZWYv4-XVUs48(#%>6y46#5d} z1iIn9X`+Y*`xLGoDy0C;s-R`Ce58;%Y-D_z!_-*H40D% z;7qUu1l3M#A57|mU-6K^nSG+E5=OLqy?)zEd(iIYsjBn@a9|SnLg`>b>?oUH``smY zaOOia%%wUAy207t4)}sZ(@b38Y_GA}>vE<2iF5`>ldylhw6Z*XAzKnuERfm}V}fc_!9mAfm9r_Yqol)F2;rB4}@@;9MDHP3Mmz4G$9 z477>i_{udn-mKg*&4$!zGe>d=(>4HByqyg$YbAo^VcpBi|B4QnB);gxNUoQqhhWQu zJP%-2JEMQ8ZG;SGA-Y*L27ig`(B1yK#Pr`@yfgGW{U+B2lEvb0klApT4fW~dWZM9I z59;nSJx)J9BG?u4>p+_O$(=eNgvcKVmpkHX)8eNq5k5q=WN*5da!CZSQ3Gz41&Ew) z?WjS4o=m<5bk|{Aif;IirCRFaS?_0}bis90$0-R?nwP&wR|P$KX6G7X z=+A%ei$fr1LO`$R*s1-UsU)HF+X@t~q9zfBZeBjF;oZsk zJr3>5SmV;5noob5E@Ik(N^1gbOJkf%P+BuhMlKW|nfMuXE8y(T_Z}F;E2-;caZ@mi z!~=|>BCTFXQG}03933#V)w94vXPysx)b)Q3K*D5)fOZFjg6*ffw)FX{X@Rzv^3MIP zSlld2xorAVen(aE$^a{cETQ|dLIP9FliN=LF3Zd{;kBA_1e{l3(PS5~8``hFsFG+o z{3<`~u1jt3BeL_g-lo08jy;>+HL*obwukaI(L(TZunv%9B{c+ONy2CUww-133>k1cV4GKfzMvmyHWhzfXmT@j znhSy6Shw7Ux2(GcTd=pFRB%LDbGxQ^l@~9dk*-_G;ZNKqJ8V#W}<>B{UtTcf&zDs zQ$d6z@;FSz?i40=5VD+EmU4d$kSZK`2XMy$Nr$Wb^34sn6ITKiw8VV@KlYVpY!Nk< z_dR~pDgE7fkbicMJHG%!K)k;y-5mo#HV=LqZ`JeXuOB)>)j`%55S+KVGFOdzlMAr2Dk?e89Yq6%S!W3DW%K-W}d+YpRNH3^5>k| zxsh|!E>9L{*@0xD5h93EFo&*xJ50EpOhf7wZ@mbvdG%HT5ED+|gMBmxu87wx+!q-A ztChjO1hlm2G0mo)%U)*Vg-g^j4+6fyGXenGl#L}-}6Rq+1Cuio+n;_)VHg_tDcU-(TSaX2u2xh)R)T|38J+ z1!M%d9CM=^os+28k`NjNhFUWVrT=n%598Y~glNA*0wZK>>&f3o67om`cO#(gVscyV z=_+QKg<$7-yZE_?%vMfx9KCzW2J#(}+nBw}1RDh~R3gBR)E^ap9GNJ|0Y_aN9^4|} zs#%Wx3=PD_v*W0C+GdFkHijt=0Rzbkn^p< zhKSy8qNX8uYOCdcyYP4uA-idQp>rAV1q^iTOq7omPXs|tPo5z9i#AKZ2Mcs`U}6juJtj zxh%y`o_>@H(-ET@D>0B%Rfo`xo&Za!Sc4*gBXE)Mn}S)6NS5kWeD!P$bMS7p1K&mO zrcY_f%uBJXm&Vyy(X2{CdO|p!&9m+SnSk??@#Kk=nMr1b8;UG#^kvB5LP#RW8D$6F4z(+@$iP6}i6o7Qd^+ z+OFZ>^m$1fy}VGk$(&_4Yx3i)i#cNaI%=){v}?>xcm(pwv#G zR{3c`wMnrs%`+n~!`xVXed-UGQC%%bHN#yIz{e-CI}qP;cu5n3;1bH0=%dfAig5yt zQk6QpuwnGQi@;p68V1|HFbC0VS>Z~j%>=K{AleY5QiR1sq$<_%kiVb8v*7PEB|pXuKWbMM=A>vIm%_xlbSRPOCPd3ju`T zB8GV(ievO(FT5S+la-Q1*x38C_R38&L0P|WNHg1b5kQ>^ECH7|q9P}Ykd(gz(s-d8 znxRs)Dt7`9EwUzn#v%N|5#`5wdWDdm1sQCA@MYY|cI>K;*fZ`Q=Z!0+WdUmg8`J$b zqfK#XYu;WEz|KRl0yv!CX!*o}{fHOF1t3DpPbF7Vaa~w*LHQ3VE{AoW%(KT_pu-mf zO1*$NQ!^tAQC^3(0d|SX!0OGAV@0Gd?Uc#~RAJ2)M=Ho~C)JFKQG5%TzzaBj<)*NI zLC>D;7RdSz^EOTbb6{_6VM-DEh&E;jdtC&r!i|!_VDm3pO^$#x3qx{R?b-$1dIri! z&BYM}%m;LlLN*N)ix;+x^Xv8Uh`WTdx+pgR!;nC^e$JqKU?JxB7XPljE9e4j3n&Bu zCQ%E$$OEG>FO#3hG<0f!%cq92C@Q>vCrgzH3>uqw;sNw1ru^px6Q$=vpIj4KRCXRQ z%l7ZjzNt7b_~lh@C#9*@mjqr))GzA1=m+)LF2I$(z$g;mV(U_(A1zVJCNGlzbp!z{ zod}MNhxVjy=_rX|&+JSMXA{4pp5#$b9K^hq`^S(){WQpJBISr^9i{Xb`jhs52PlLD z>g|O6U<}V>mVgL5+?MYLBWH4$^R!aF%J|m!59i$WnhxIV63V6oP90z4i@8_=r;-=- zAgetI{#~{Fr1X3Z$CvP3^sjXn8E~dVaQI0nlk8k~C*NPE%1(3d6zIi=XOpXA1^}5f zx^_`408<(;{A5;b)1ZQwsZXSTB`Af2pv=!K$i%-G7!k`<@!X5G^wTrmk|zwY*&o*Qep>x@Ea3d#uP9g_TJZh-bL=dD%o%|}{z{)P{u!jM^SeK;(2Bs6r(6F4x+0{g#7&h;RoI`b$ zU;e3$?mOet^lSDQcyEE-M`AI<=o`#3RQ5T5aHz&;(JsVSX>*z-oC?cvljl0i|5-pk zyw#_$slmVe0{y5u50uH}Crz2rg(p~jV8G`cry?k{!H(FD!$#15mpQhOTk*P^=If7b zMc-tdrBld=Cn!v>U@bVn*)Ih=5m07o@Jw6eOJ)__CO+o4yiqw+I0C%mI9(4xXf8r= zY)23Hk0ncQqlc(dlOu0;;r?=p zO#BTqHI=_b-*!n5dk6qcQ$6Eqrn6_RvZJLnBKs?NRt93)BsRdM{ireD$Bs-`{6+`ZzV z!*V^1cMuAYQaA3l6FySqNAGYSp%5tEgUW-nd4RB`yx-^uCA}dbzuDO#ln))otRjv1 za-fHQfO%Gbz6?&oj$7a!EPjbj&y`kld#k+PFYP*!a7-`tRrMerkh%VGHMtX7$*(&- z5VtaXZS-?vhTAiZ{f1rRMjA=<%+2D)t@ylv9#--iKNGu-e3QiMC~Th`KNvqF>l`x+ z@^gTJw(AE>BAGNqV48v1)M0Wi_>5vI_ZRPXmsq}kVO1GrdEIBGF+$qfxQH>yeI+I) zV|4xzJ?;ey{2RLz;6V%1qKqF-7bEwgxc*ERZR?QUR^`ZRut=E+ilDhWJWKvAISMBebrV4_SrBh3b zISp=qFe-Y0H+qX@Yv7#-)h&rt>x#)LIlmROE%5ra{Ys#4>wNlC;;hLF^BOxygWn)= z5UK(Z?m1*+7qeL{d9r+cw&0%b6$`k{h%Q-=!0F+SAIO!fm`qFMO)j*oRVDMfQ|047 zYA)Qk4&3GY*-l`7O?CmY5L$m%(ilwd=sf0sIf#L8E(R`WQ&ZJX3ufgpYB_r}1_{DI z$k-7@{uZy}#q>Ah3>HOzhB`vFhrD579Z;eU^T*CD5tJ{4kzL zxj|UppFK8+u}=o?hmC+`vgcN3z1MLBqs4?j6j+{aq<1$nye3&-Ss<_t()Jxzi9IE@&v(%Qyg3+pnkP75?6(kjXRocRG?@+O}&2M|%E(-Z*rKUQ2e zBBpQ{yDsA}!t*+pI9BHrLZIVv&lW3L+7TsFc)tb#XC`%ZwQNu6Du&k zp~919MXZ7VcGOWc3?_=HjU&dyK-pRJb6TAc>jBo`VX^@nP+-K~iZL!v+c{kT?z7@9 zu>>oZLpF9%8hN z9rKtTIj3QV0^{SCnD15T7YqZeqtBfLjb(DX;1Ej)KC1GqudTEkA5bZOf5?9nowt^w zKokW(hyV~i#Csz=WOyfx@Z#&IC)i;3%+ah6bl+FE1g45&KpFO1Wd|NDoj3`@4EC;F zbW{1b%<08VNz@CeX5b3m+;Goz`QCVtAp#QRh}5B>t}5f5DY);iZQl8i+9iqNjXobN z`kSEmkx;f4fb<4|bCtY*2>R+&f>)^=Pw4DNGJxxXkPlDD{>{C}yalwZ>;G?l!@D3n z*ia^CvxRXS*5{b?q$FKCo5Zj(f~$cW6tTp1vKl6Jjt86HOmO|7%$1LH`~eok@fufX zGhrHy_?oN`YPkPzYKjQA-1aEk)F+T2oS8N^)j8i-DwIHRx@7Tx-^fDT@d=Y5e4&!J zp|8}+&o@gl!S{;AQ{wT)#1mhz60ZJ+FIbUsu-mzsq9Pv! zOOYWcbFjo>WxLGZowI!h`@C3C7_$qg0blcWI=5|`&qHc|H!u_uAe@nTuZs18YEArW zj=G4)G4sZZE#=cZ5Y$t4Gy3xVcp5WOMYJ zkEa9+MDBIOKH_9|5#ejHejqve{vhtfWLA+Q6ZX zz!(>KI(*C5>-Bw$BnP~Xd#U4_1=8k67dA&O!9GntQJl!>S2o4-39kBW3V|Z#%|B0l zh^s^v{QmJO^cJ+S0!{PLKR{2##t(xCug{Y6xew|)2&NyRs^L&N9jg01>SVywhrxKW zH@}a6uXxg7& zx%8 zZhW<@FX1|X5eO42wg2uska2YKF2^MF*?;S-;W!|a$ycF@ngQZ#&C2`5v9jdp@9{1< zY|g9QLio77?a*pj3 zz6^L7s~YMx{-}ROeQbSx`?!YF!+&&KUU+c*gG+HtB5 zFvRi`U60Plwg8$5F#j{aq6?~t(?Czu+K+k6h}%0 zC9oHf#|TF2kMJp;Y&_99pIkBU^~WBwK@?vT41@8Xy{-aruIj3beKmXdSPra$;?W|y z3d!#C$FTKvA7=&}A)0=fT5vjlV1XOP&z>$GFo0jnx_ViE-e1E5orHcYVPXL%=f_yx z##2e_ZpU#gb%YhE)lk8#>tAjU2E*Bu7FoU@dvH(jK5h0}&jdpV!l2s%4s|(ch_s^c zVA>cXjeoi5gmH&D7g@x<$i(x1kcoaD}sopl5D<|+h}n_E&u9e;Iy=KB!G;3Rmy zs1gC=Sgb8^-CV46PCX44z&m7)*OVi?O1D;EDF%6tW=q!Oi6tmyG4w)RaCKs%?tVxn zG987_dANozgLhM}Pb_v_pC6FV)ey*#9*=#ovz4%~zvi0KY8?Izl3#N63K3N>0h$LU zewSxx)D1&H_?TZ6G3Jc{!~fFSh}gFCj<=-v_La z?-CO4BNBX6Ub|9=W9(aUe3mRr9@$hFo6ktNb{%M^-ivM{3OH9}_ypOv-o6n?N0w17 z-;iegwriQ)!z=bJ77xlgm&)R(&Zr)}3P9YX3Q(o$0#4Gc)VuY6sMYHyK;Uk97>aKt z7x$Xg!K(yVy}=Xyv__CtCnJ^eCi|~8NfpE3 zE=d_>JqLJXK8rbRKCusqGS|^2W_FjVlvw^qyG?&7{c<yoqzASl5W})y z`i7IBd;THwWI6+XYdYC_?H6|s6a*rWJCWw&AZ+lsQ);H5Xz-F;vl4spUcfVaBsCqi z(E-Iz^itNm2%L4hMxq~eydp+$b&0E*lV*iiDx&`Hi+m{Nub7l9`ysv;T6;#}B~z&B zhL?DaeHb=TH-K&sQzDi@|2(d+r3#0_GWNP zB$CPy4kMje{3@51SEb)nNzf0cY3b0C_Px3w_Q$~xG-bEyhy=$ew0u}#FeLmki`OAz zhyd6`uxS#IMBg3>*2{j@XE*C@BZu&XlIC_a`wSBTsfZPx^r-mE5x-PfL4IqJOisie z(uZZY5(iU%9c|x0WaIfF65}JJy9ygqFEhc2vH9Q7Yf>@Q2Oq`CB9+=qk~Uh(u>*W&c7PNWsiUTbB`^ic zG?Frj4`M!oUMiS7xkGe|kdW;iQ34&cF!-In&Mzf@N^T)2T=9T{bbK?LITq3WI3KI% z&7UVNhx-9D@blS?wHuh)3vEWTY0ssH+~v1l8sHBGG(I3p>J{EIs~I_>HIpoB8t%vQUit5jq5Xx%zk8+!IG7|qpPw+L(7`!`8-G+^T!oPjs#h=(fMqY^ zzjO&kjZf05JkXUOU^XhvFdMcS1U#tT8RS1;@qD(1k$XSPGkJPzW8qD;u4t$a- z#v|>xg=E!`!^aj7vY`N8;j~II3{xBrTwm0G?|SqyfnMTt6#-+yU?B-~M%wme`|8Ik z-uw*YDQNtuD6uKwlS;9s@~@HHSk>J4SV@^c1UtdCLy z@v6}7$j)ZkWjDao>Jj7&dFEI90PEs!(B8iu`pkg+Ef zziQ6FtgHtgBFp%A_vu1qYY5@tW1@k707pF+ZN*DvYbbPH%;l7jDWPWFx0Wa2#kRe% z{z)1Hpa5Be+LpFM#v3Yf~I!{_R+QAzy*2hi}CVFH7}8xgtWv+J*Q zM`H^hf?tgic`mZVLedjH?0rRl0a8K86HSxPt8$Q{G2q>u;uZ|E{u8bRAJ-#X6kPlz z+wIPqp6kuG*&92O2{YW9??4<|E#QbN;AlJ_RID{q5Y>ZJs){v}Z+QsEcRv6(o72md zjbF9X01OXQt}6qiXS!vumfb9TJegsG*Z{e_UU zyE1WzM#c{a;H9_LGC2DkrgJiqB>3iY1MKnOko`N>}iye&7DegYRH zBC#UZq{~>Mf-iWB#t!&XsrwFofrg!+SKG**oCa-JO zd|0j&2S(RlN0TyB_L_Bn{}6~R%`77axh%T5^%jA{sucrGofR->zw5{FZ;I}PY`izk z6td%mhLM_uD0Zf^t=t^QLzZ!xLmV--s}>#78X2^^g%!f+upCT?w0j zW~>-Llg$FYbl#VL;w}5zzYTkXp<9X|db>|bSO~7F&899Zhnv2K7^wkTAi~#1vH1&% zaUDZ?JwW5ET@+ff%Zq9=g}LB90d13vtc@1oaC&=T-Ien0ViU^5xyMlvsL=*3j`P^` zV$>3RvC8YutE6fpw!jVoVg>HrA{T_l1?KUBYvp4-5_RW)NnWeG48$L(yLG8t(V5ak`7cKDIvmwj8iQHO(vPI-++YApHt+qL%yc%!p`&DI5TBi z$~qsurhc#jH>Mg8xCjr^T9!W3fV+(cjx>1A>_BfeLFV+qFZ0$e@uZCXia@K;=el7F!A}!CD!**d)Jut<-n|a_-{g1AHIwu2`XM0@XHVq>yrz;x@0Co`X@!W> z^0YVg@U(n8QRLo<@dnNmX!QD3p+pky4zvKk?~O!2nyO=&g!Ir2#^%|b77!snGIoyL zW8qi9ky~=B+yQi2d_%*S#Q}K>)#+)RE)`B+ZN795Ey${C7bX}maGRbaEAL?(G)(8{ zQ(2CG6_T;Q`JsG9R&s!YCsKQYr5bgs_24y}%vaxR_<;G>h9|eFw%`+hxe!#d^fb~S zjBykd37aZ&*9g+HH;GE!znr(#&8eDSrkgRT>m`2v+DYjPdY|{pq+84&W2fhFu*azW zdLy{f7*ys8fkOhwiOI7GGDHw{Ura*~6}e%5`$gvuj=7I9@C@g`H|+Sy?uT)~VWrh2eb_!*se_~A{ibVggZzMyH1 zEi{Pt=FZ>z9{u{*3R-j63#bbkIz0Dr_%KG=nO0TzqWO^^f%pRWF1wZ=LAmo-WhyX# zd?lP3qCf)6fX@Xv-4@sRfXC1% zej%UhtDvt6SerF~K0gAM1laE`Z~Qrb;HQE`b>D?>Ao!BGHqdziCnc%g?@n$Gm**`v z-;WdFDrn*0sS#dZqwg)tE8UkBim>9>`~CX8k}Wo77G|8?yToRPZPfQ$VsDon1EQy_ zfLDplWJzNba-KO#y-Fv_z{s$jr3@mpSlI$wwxztD@Z&}R*pJaXlO_DNMZsBrT$jG# zTmW#}mo&8-#5)OlrV~riS46ilyMYyJ7pjLj>^bDT$-4&Ho(|V4mETG(>XHlaFwl!m4LLyU7!)watweJwWXFB`a8WVCpUF zIv~3MeP$w*Eck2cXP?d99LZVJY`prAdc$m`pP-{)6_KM33hF1)CyGdaB-cf1dvIwE z*PCa@QzS%f5-;fi9oZ;@#bZmDTzqwpPjiFT0BROx8|AcCU7OFWTRp4WWkVVtRK-%$ zdSjeg2B{~rpIqhlU1|^gm*psmyFF#Hf$U8<-TNo<;gU3;j6kXIQcGIAF-yd$TcGn) z^-7EevRfNTcZ854+atz*k-^!>rPf0Hg*uWC2Jvx&q%!T_u27)a7?4ninwb*wJ`Q)Y z1IA|s@_jP8AQ9AoC)7V5_`1>}aYt&mCl~{1v!4m}r(Tdt*D@$x7o`ZZCettE#v07@ zd9RrP;Bf*xEiNVi(yoEBH+GC7qLr-Q6!p247KaCMMSg(kGm_1Jo>p=*{6t`ci2idA zDBOY#?_gmk70ct|Of6{!12}5+as6HxhUYJInhPiXnw((^ob*FWPU-hX+MweLEU$en zY0G5!qWQ6NE@sBS2u}e~Aw^eUuL}~yn!w=czab=Ts2ma{h=4v-nb2JiN<6o=7~aGepc>X0&l`C zZFTO)hXM@{R^$Dz233?_m#Z@kVjg=8n5L(W9i0lFULPEPWA2cCFPLyD+)8gT_wO?5 z90ktH2sE&2?6qe%x|JMz4X_*pcGkfL$$Q%SwIz}z?!g%xD|m;Yxd8o?wO`A`i{qR1 zzz3zMcqX@>r%A{tnctcTvak$C;`5c^Oj-f~)CK#dKm|Yc4U^sa3zHycJ$*G}KY+I< z6ElJUR2EHtxnT~T8pcYOKk)aKj$&+Pfm}iHi@RZ9w*2fb!KT0a+foWk>WH*|0jad_ zy?{{P^7wNTfw5826Rjt6zv#+F6BYfuw!x_Ad@RRDVM?-8GxCAax%*{^Kga?_Z-)K< zRwODtbE4yiBi#<0(@NU}hAJ_LJa8R)Yb_PCjsWq0jN)du`&zV737)Am&b})-cCjQ# z9Xw6937Q=`{Ie#M6_u-Pm&TgA6zWj#2@lPczmDUB!`L$NW$;P&8nn_S8q)O)&#DkAA6k|mns#d z^Q94gc%vaK=$9j$Xa(p|86y~1*NpgSV16kYzVc^QL)l^9k(0Xb?f$;r1o|Ov!%vIS zMP3+8v(yS`PdLM$pLy?hv$V18df0p1u}03>!$fU1-A{ zGdk^DoQ_CZLq0|7#yzuL$tg}obisRnuI2l6;`t};Cn73FCypV~9W9P;?-I17tSn+) zaaBW9lZ#WnD9)(Pj;@VJ0&ZybHYzB4haP_NfyHzxu5E+e>-ZfCFXIidU|B)ci?TXj zH*@=WzxrOhyN+|kFx}KRO>DeQtk(l#xn~;GLVmpUQa`l8vhi%VF6Pdb8T>5 zHq1hO2kd~4FCtkCkXHrF?E~Hrqt9I`#Nt5tz}b!uR5awd0Q$O(#qzzZ^jO-m?c}CzkVC74H)`?WYLGQSWP_^N!ZI{K_8^ch-GeO6l)2{%o`K}!{ zM3MIo#aN!-311^1}p=x`2Zp1cXp(S2#~5=uHLO$msihdcROt&+npZfLBu z`TYmMVhK5wYt^q5Ki+}8wQke0$5w;6QF~vN8$Xvb1QN(25T>RqTM!C=%47FswmgQd zvsS~aKQTh|n*EPQR35E~8>e-jfT0?F5fAZ(qh0UlCRqBb@Y3B|eJh}fTCp-H&7WYI zwf|c@5wLPAieg}xgOGf;@1?@A>D9AJ4wymU*~OPVR5S5HaG}0G%2u`)m?gzh1&d0N zL1nQiFXd74xF;=|2I2pI4TAfR5?wHSs+s!BP2!syh#<(q+q_ylD)CI@k##*WN({fn zJhQ)s>vFZSC*t+HG5D7Qcc>@Dq10d74Njqq;^Ec)^0j=$8NKQBDX$7J(fKE@m=E0= zFm!^Lx+_5aBF|WTf?tvxD>}Wa&lZLmS5wp-RrOnOb<@`t%)NkrdFB}s4GY;1W(1!h z=}+-9&;!fQ*tUYoF}@*s9raUvz&=#}(&imJ+@0`mTnB8Q#e>H~M8aU7iR98DL7P{X z?+*0JOGvJCy=Ql7mbc285Kg1LOA~-eiTW;s+0c8Cf$e8s!kwinwa`D;J03YJIKH{e zAv$mSNTH&A-|K^a9o6;XNXSDZ9kk>bU=lQcJps{lR`v_RBc~i_Q_*!&K|sFN46MDf z-T2yCqNx4N<#N(8y)_z~9ir?Z{W0u?7ERh8&DL1@<33t$D8EVQZg$+FHT?2h>px|^ zk?@vJgq=^G)62IRcQ8gVFKc`!3eE|c2S{=D93#~5^Qo49Os>UNJZqEEkk-!*7orA& zTcVJrHUPS*_=l=c&&V*{|KrjFh>Sn}CgkqJt+CZ&Sr}jT4Gjg*m?f(2W!awWTn&H= zspKJ3XvTXAON7Jm;!FPD3GhG&p)&$#MY@mu-uWVd(gdT?02)r8(`FcgT-m= zz6=2>K$rM`>-IVS-U`U%#?Cx1)SK9-6m#L-QM;ub3I|p%(~iyfk~@wn$F;f1_~k8_ z^Pr#b%gQK#9`s8Plo!+KDg9<2*&367oR0AOqz$G&XxW8$A(gkM;C9?Q zKmwrx%_T08D+x^rvMLn&(1Pf@d5(`)mnp;m%euoQ^^5i&D0-0ENY3*G&PZB8-duw| zjT1be)YfldSg(?EjaDTE>mgb-8yCAk7-M{ouFA3>ld}o*eRV*J)dH8hJY-e5t69L+ z7Mw_b2(U6AJ@gLeXa9B?gZbiTzkT1sx0RyvTSml@A~A6g?Z-rxV840Q`T>+Cd|~b@ zn7+?t!OIlaSSLQ7p@nSJn?un$+{_MG8Ha|{$mceJx6wMpOYLx?`?;~-xT_1;Ix(DM z0jy`YLw_bcwuDFZ+ODSAZ?IxBJtRJ(fYhUZe4Q$ul=*00!;hTF4;{-k-bKsvy(|H) zHA|M+5wLy@u#sOe33NP{Y0D>eiI}Nf$#d#la~FCE{43gC#eBSGzz2o^9c;^qph#8} z5ztp7e8TDZ^7^x##;=g?syB5W%q?z$7-wQyw&Z>##u_U9%Hh)c$iC^39JpF~I?;%K z+3du@oF5WL1iNJ+G3?z52E^IzD!PZU3>0gUkH+FQd zrFx6g_!Au3US3pvbaSU7J=M7r_ciDrnk|6IGH1|R7%h9BLu)icynYsWZij_BuDYx6 zLW1_#w&Kn0GV7{`Ljl!T3ozP@Q#N0JIO+e5#ID!T&rPWUa>V|wEfZU6!5UEX zQKf#?sDMTNDp?A$en7!V7$I5Z7r|$8Lh67NMKLAX^(b-R)5vdII)>Sw0K~uIpTdAe zD-o_rU|5X(X|k8l)+P2zgt+sAXkD!MTl4i$yq_W@J@c34nQKiX7iUqxGzA%dUOZG0 z*C$prf7EZNzxZ~q);gA>@lyR3A~XT_SP?3{yvzq?G47f+-lBMbep{vG;hQA|NI)2T zg%Chw-`w8CXjB1BXDMi!sld=SC7EMmsb?kyS(X+<0INP(DkX(WXOdS_*N{@0CnWk2 zBb9}KS3G6Y4k6f&(YXTdE1k{OZ$N(uBHs8R=@piFhfTdekpld2) zNq!wH@JadECuF}24$LQbZi$-HvatROhv|NbQ3og?v=kc6=Go~p8bZH+RFscUuvIxD zY+DL5Kq++(55FRx2lXK5|KUsE-Mc2z#uS9EE=CDA*ntP*t4)ZFg#>AF<2IYW_~bG| zK!1DN?h5CdY{(<$dU0i3p+CP&WGKz(gKC^9$f!^u*t~i4$Y|Tdd=n{~r5Ho{cPX#@J&C&XPt6Eos%i%#wpIUWR?Dv`a{f?E&#U8==grGx ze{sHc5oei~2DspVY{&~2Afw@n_4dcArRteZqXiuO%c`XPKrFqAb;aZ=B?67H^7WhQrMN;|Mm# z0fpkTp>PPFUN8ypw}}!z1cnWHI041uE~kCK9OXP0m-)klkYwlNNPGW(%Qb`Kcm3LR z(aW<3KlKrfk2j^dWvV{iFLZ#-$7(--a*mSEAf$RrR;(c77t4Sy6lg|>Gf~fI9TWPy z%mw}mB)~F%p1JW++}V3G6QHhi79?xgDKx-qx8?AZjg%kY%f@CEebJ9evS{ax0g9_E zDi@L<WCI_O*e~9OgiOFg_t`cpkLkuxFbjqIK=6!|Dp2 zOBcZW&{K=Opv|=J@n(3j0{1gP@n--j{U@5n0FWP14@}n36XXl(I(b#ofQzdV7sDq` z&qwea5pgp#Q*(uZC8m5f@c?#Zpj6+mr;Lq5T$KW7!g zyVwSQmg6Ps?9M{;t(HFDJnv8I8@T_EgFuByp2>q{yMDk+yLpq#LT1*_|9^^~kTRXZ z|KGeS|z)kwd_WNLhBzk_7Y3&`uT1MgWB ztV9u|^Q=A0_1Qf!UEE?|W;7)8M8G_^lt z*gsEKPuNfjeGfa+?-zS;dui{VBWPTkHov&M0llyA7&I5TuXF&ZFvh!a^aq@OPO5-W z0yR8y9Ie(9Coqw}FSfU*{->SlJ+Mn2CqN&8sAvUD=i{_X3bGjX%`uFqx_!1I z?6YmNMU@Ai*1aj(7qmfsvH{y=kdE2R>4(!YfcmmesSy!3AciEX``CRs;@J9I18!t= zqRnG|Mh}h=6SIiSgE&+7frE7x>AQz%lp4OUBsaKRqEi}$M%dmM_7KQAP&Cnh044cg z?0nVMSU4-G&Q`H5j2fdiI&}WOFwKAKtYS|=cgo2_659U1Rk7WR=8oh|_=WJHYTr)% z+7JO~jk1FXqU+1=k9e)TPi+qu)4xF*eipQYwg*y(dj2dQNeVbX}>kinNL>o*D(>refb-r}+n z!RA{re?X~nSB{JWFcp3?|c3?u3?~hko~#ADh`!v^$D%40M*K8u^Bz}44(EuNnz+X(cFPmyU*9kQ!4Bn zspnAnVkUK{9oFj)xNMJqM*3pP{F7xGUW<4TVG4`HTw9k{yd^jV-3z7e#-M=J{Vfse z)EqAxBJ#}>@u@L@remv{h%`&@x{X8&&Yd6+P{OAT9v^V+RNp6VEP?_)4dI*R#ixA( z70(GbmxAG%XpE*W z*K}}pHGH%E3^_B&VJ~HZ6(F5@sgt~i2o-7P0oWR5=BROPy=Z{g`XjGsl6JZ1gBIZQ+whzYtVuz}=O|vj1H{*|7(K!!#gK z^eR38FQZ0|T*JaPru+e#t)Arp8QlP0IyI=tIM z6F49*@0o)L9(oeGYrqKJ@3?h;V=63~OOcP{slA#GZ%{gCz7 zTzw6yx6c{s-V8>V8iq)0i-cC)0K$040P^jBACP<*1{VAYX0m#Rh=MGNFY?Q1C z2MWEsNnGt0MW94`92PUINx;8G2Zf}eJQM^}k1|2Mjd>2g;@5ht-oL7-RY+;ai=jn- z0^Renzkf-UfVJ$`v!pY)EJS_9Ra6)WNhudn5t~6kfmElDd6nWNE9d+D)(XLzBwII- zuk|~{FTI*s5x?mqb`LtZX)yhsm8OS)K@$NHXpq%w;$nHuRl-++7jOGW)_?|BX;$I*Z>4BO{jYqvEqT)U3yaFfz`FyZ#hb$O`^Uz6cqC!u?`$pB+A< zN`o>`D(;W=Vx659;46lePX|zlaGYnN=J|>U&^+9yvwpw7X28=Ar`j|H*4PNl*I-^} z*&B#p7ze)q<>4BuCiJ}|zQu2Upikn5t2IY6(+>NO)-IO^IOzSR1QZaMoi6KeRN<3g z#7~KhlJ*47IqnfuKcL49^dXPKx_CRE!v})qTf@+^f?C$EH{c>%-5YO+@!d+?@Rn6x z0F6UyJG9Bosri^dSZGv-q8XmPUOj|zwhNc=cCs|vbT^^#?{Qw`SI`=Nbb%GNuy!ZJ z4~cz#wFMQENoCCFSy1jL6t)v0C9e^TRpd_XU89g=?z{P|@#EsYz@rk-lX(>=C#lCq zW96{^@OZZFSKo$w@)67|SV~5z*al*!I2(09Ep2$Q(2A8cflSj%2vz=^wcnwJDv@c> zyr=`CEXV%r?VaimJ;Sgrp;?#v20OMqoq){+!# zoU;h4?b6RLC;7G~Fjo?hh!YU1lY6|g@*P)=#_|qoygVVh?`#coJKpf;TWT8i0hUXz z{+#ZnS#erJHE#f6_|jh>v7qXJf*P&OtkePk&CP+2hvOpCr*WNsEkz2fyvxM0U649U zsiB!!N}uN~*6gp#MczL?D>F3NsoOVT(jsF57c8?)?DtfAb>u+f}w>0vSbq6YO{lNpH*6tUBAdwlo)o-`kq6#SV%ZqbY%yWlf)?q z5U5$r&OSJ!4w(?WBD(B6eouJ)yH%ot z3my!Npzv{z_gDO3&WAB(ebx`QsVdl!FwK=-??`rkSwp!^SA8Q1uvFl$_yD9-zF&y0 z@KnZjDeo(O0-@1iy0d#%eZ)Ca0G5`1bunIKummfYo(0x{csG#^_BEmEFt(NOXuL!XUNO?7LodX>I2pT z@&B2BRJcA;6{HHlJXmFU@hayR9c=a^(tG{CkC=j#Q}J*gwJRWT+H)Doz7KB%U{Tz9 zrKojqwlKD|WLyM{QyVJ}v`XxR_BF7yFBTui6ENCj7IIu8@veY=t0wnW{=eGKTj={; z^*2HhO~n4+d<{(bOgADC~Yu^e}C5FUDtrCWId z$F{e+LizuimL*g#+?i@vx~{8+cIE?PYyn_VpBhuA!d{_xE(1wO0_xyS6lTKA-a-&z0YB)r0pK=Kf8vjBF^^xnrbf0$gwOShG&z>(0c zbr`b@zU6ZaM9J9_?pj3bKCwga>oX&f6T@4AjC5U+=YgkCmieAXc;7BBnTNn+67rCt zlV+pPSeOQGa(`W(C-&!f4&XwtMN|BWSJWPrL>q!Rf?3RkSS@eff*Yf*#VJT#e;=&l zGD5d2FdE6CdYe9&7;Y*mSj6@`|EEhYY+W_J1B~P4fx%cc+SvkI<377mo0;2NQpZAw zmR={^DTT~(rlN;yWg@5X1u01FqVnHA~tXXpxuN z7TZgg!5q>`KQUIvuiz`WvD#p1f9S2bW}jCmYD7^N@)Sn!qPSyZZ>#;&cy%+nCQb14 zZkrwJ>Uz8_w~#UK_P2=2xhH)b4U1KQ2@-hKi`sB{-39c+b;GaK&;gT%rxxhaPkJ=Oibi4H!rJ^Ra;oF9Q{0Mqma~muM=Mkt6`D-xfy+g7m@is5FQ;2;p$^Xex@@Hn$7Y{45;2X1>)) zB9v7<9)>R=>QvZ^17@&!f0D=T6R?@`A&#JL4Aup95qZC&4>7MwwvPzF(kfq6D>(Vz zBWKG(`Y^03s>9*vKjg_ft|DWn76<3NHy+3iFSeLvD7Mlft>r1I_GeCfE#7ZmJ!5X8e=c2H%H@loDqjKU zylB}Hj3j{u?Rrfw!oK5EnM#U?*9DP+uXEZ3^BMLidv(GjRKR?l^cNpD7|6%JLQ)BrpC;_=Vh!wX)Wi1~ z0#cRNh$~5)`E@OU`#PgK90BlnZSG-ogl#zs-m4u9Bwe$Gr)G-e zIFNJS=1|0@5KUQD)%W-SJMp;>H*YLU%T>V9;V zA^hqA9mDSe>cL>d(}OaPz3_#+wE2_Xzt~UdtGHWVzqp$_j<*oE%jEA{R1p|bH-{02 z#h@_!#`F1|9OD$PJ3tuwDJM8cZqv1QI>`${`_^Al+kTTuXgL7jg%RVo`y3MWIPw+G z*Ej-@8-+;rfAK#hJB~O+-wg>L8=-#QScWw_u9{B$d{u8NUa$Sp*e*)uXt{vx!|kG;2##` zeST(n@jPx}kYJCaXvhNND3{qYbzKUMUVNWqt1F}XB-R#Ovi7e;HyMZaddy%BaC&rPo0A*2uEt$ZuC69sJ~v)J zHnd^Z@LALWYk;CIF!Tlq>kO`#P2Vo#m+L4&AD6zq%BOoW9S#{h^iLcHwlod;Z$fO( zf7I~>eFHv6{b@}+RLOzl{|3z&8N~wy8@O(AU9W&?l){DJNBv1k zw6%Y7=nx~=L~aA>+DP&cuo7(D2I7aJe^kP6>P3kEJ~|GJ;_S`p`v7|{eX`q{_hV>l z1Q@a#zJGx62g;SW--ZzQ(=(U?U*z5kPa^s@GHoKd)0PD@do+Ga90qR85JSI?q-Ffh zsh%GID`$%#D{rd^xY9pSgAqh`cD?iJIeWz%} zl>ZkoZ8dqhgH23vr%$fQw$tL}4h%^;?S6on7a)l!mP~AwPlXLZ0suEG#}_Df3=6{{H9bOFB6|&W<{5mU4f8swv8>VeKXYV>t4r^ ziPslEybVGo{*1O&GXCP{LvFNuDa1SR@CYQG7v)PK4 zc*-d8hp4rJ9NoSetNK~9rd?w*5q;++-I~Tr>3~dc(T10GNcd2>uJuk zejZA8?a%LK*H4pxMe8A0>XZq32AF<(gF7xf9Xh@x*!fd5*$me zo@W@*kkzuhDWiGUR>Vm_UF7Z|)*nMTD#!st!ec!n1J(n9eq;aCbreA(>h!~j2&Xy6 z%={IFDG&O2^J$XS>SPv~v^{!g-S`>E;`Z&f23oeDw@3{(x*iXfjd!DO@t0dYmg^pp zuImv8^@tqgT|QdqfBgpSGGv(1?twL%H%`+o8o^)#+W)R;YO9r|13ksN4}59~Y2onG zAszFAfSX(g9R`~%IF2_B9n~pGh%K;+Z;;c>Hoh4!4RS0$CYe^tJe&E=)v>(=5m&rpEeiV>Ue3@93+jgRu?vV_Vjn6q^*`f5Bw28KZngYJ7WhDDY`3 zXgGA5M(5Pqaj+JBOeyQ{#Pm_Kc9QRe_n>kBFyKw=7uc!^j;2SN(6`fO;hrY^8Q;(c zB!f`492E&q@b~Q4)gVF~`XJML;1aC!YUlNGye8 zWa_a3SY40y?Xmc}peIE6yikh{UNefBf!^=oOLv;ZfAoQErwH*0sDP272!2|6H0?r@ zo@OBmMoYE+CV~BuMEQM!2f%wy%$aUj{Z0a?PK!3H)j&X-;T-|>gQ4CJW9=&mDHDAl zr+pK$fCBceMv}FVm;QSXacsZ8Cb8>EJ{4%KUYP9!{0uoqn7g99N(n)xH?;>4BpX5c zfj{P8e;p4x0CWj9WS|lHrY_h#-z*mHr?;@DVD&iFu)_L$nQO!f&I6*^27jbL8Apy^ z$LZH^$>HUeER_8)2^A!^S~+Mhsp`xAdxxmue~mh6cm}9JKL>h!1^s18`UT3l^Y$#F4~=rWvzyffsCNmf-D5?Gnda zf80h-9m>A9g^o|d9}@o+B}3YJ{fYs7x(CVbp`VS!#;i;eGRIHy ziNKBEr&NC|OyMEEb7g=!nKFfN0s+#%CwYFB%&iDudRy|4=S*0#17{~*JOsbKL<4MV zXpygd=N5Ima?wTyyHN}n*(REjy~UJ7I1Ss2cw2mX3SZ<8t2MR`BT(96Uz3y;e;-AI zD6mwzujTIR+U6@n`3nDDmqgT>4@iL7E}Pml5c4A_*d2I1>uFLf7{**XMbul>(0k&N z?Hrp49P~VkY5L#_n+`t>E=JO<#>0bF2+AHmx6eo;uL_}^&~=ZNTj}TS=KyT`P7g=oo`p^e-!h8pSOt*`(8Ja3H~>qZV`F@>COwY@cH!<=a5La z@Sr&8-9=g(SuFAPARij;dc5eMCStW>NmG>P5Ya|KWfo*j*%C#{H$^Brb1=q~1OKDi zW*o_6FmAmCh=IX4n5k6#W}%VKijRA^n3Q?Q^9*fFP0h+nMRoJKm-12Of40b}OMX31 z_O-O64k&g*phkzALynkiIBT6#Amye7?-4&dCAD31+Va zgV$&A30(2#Ny+Y~LI9EY$F)rL^%S8_Qf{nSYzTh%JO<^J+|*OIe-vJ9Z0y&2wSM}G z@1Sp-Ph_yiWy8U%ql&zBH^3xi`lrX9g)2kl9E=W7)!e)4>MI zlVkz}Ckyg?f?p4CXWghxnsUd$YId2Ul6-jtyt~fAgn_;)gJr6Fx?3otT_YSVPOToFLvMFx;?T7?pBGNnp?z41@yF zx)R~4KVU`t-l|VLmYd)mCA322blq8+4O++v((bSPdjuC2Jx6aYl3%5C6M_?$&d0Bw z5`B$I6~E=UABEV}pVyG7~J{v#so%J|y0$zdTbi@A>f0}+HA4NxXmv0dEdE3iB zG2RzTnlQS+LF^&g0=;V!Io0aT$I9Cz+%3(G`MV=-K<#m;htbDNO*1{GA>?qWbK>5f zTK1s8TJI~q8s_{-aJfP*qi6n#R{LM`sRd2a`s7LrmCAaWkN_mqb8J z<{VGJPBl)%PiO6+=f!EifLF+R>r7QtgAZ}dI2;g$0 ze;53fiTqSlrA$i>>|6=gA$!-~`NFO7v<8`}C#zCt*rS-%5SKm8kv2m4 zfjosk7Y0m0^&X&`%5Wg8EuR{Ss_`oWf62n`!&$s0=Qlv++pWXt%#Gh_20;Qoe%e`! zi`eobZ1%fYT;q#PdF>zsFQTgQ?+{V2L?EV4NzOj(CC(l`^6u2l!bD-xl^V{ru1t1W z_?ZH0XBg1i(L^odEKm^S5G?Jll*x@$Oz@?BNenZM|wb0hsfrq`wv{3+aR(dAL|ADN+sw#T=SHD&vUxX_3i)P#3&LPz+Vj%*nsX$ zfX{wloQ_&?%`1nHc_5shj%|5VPV#Dv9y1wL2Kz<2sNmXtrJP;9I^d}W5~1!>f?x0$ zbTs`W4O!65UbKc9A(8E{zd5^b9L!QOn#byKBmq^4k12~CzWji%X zHkibVF&N!fQ^#<41JCcL_i@TgHb!9)UnE~eq54Hf4+Yu2p5PK%nMhKLN&{y+x?z!} zi3^kfBG8#4aqOK?8Q8g z&HVm#R%c5C`S=KQzs{C>yAF&&pj82(U+SL^f#6-1%m4(#2k)k@@XVG%R*?*rAa@wE zI4}e99eQ5tf04R5_}$#((AyPhy!R_zq+znOv<6gIl(BwzQ^=1 z>MzG~Z&RgYUDRVnf3UKZCWNRn`$MSjiiPy+B1zd)B~Encxzf|zUtY0kiKFLpPVB*G z2heKb>_9m&*I!g^Ead1o{N(VnL=P048;avAr@8RJTiXS!mG5uIfAc(IRj+>neOEEL zs5<8BUy6OxGnVJ`r?Ow;ExdYXQRY1b5Yn=-Y5!zOU)DDDf1U4o&Z$oFn^i$&mtZ4s zPjR|mI6?XCajLr(xM03g&*Jryf~0_5xX&9*i@4Y0enx*qp0!xwq(sl@FKCwJC_T{+OH1TH|zN%Sw*K)V%hg9qJjp0^U5 z5cL;Cb5YWie=Vv!B*t?*Edv(v{A%dir@sZRE*Gq*L*BzKc`!9*LZk#DHdELKE2(+p zYDeRW68}N+Pz!P>lFm^kw_I3GEA>cDori6#+cbzX-482~h5?o&-D(Ybr zYFl5#|CbQ?AL)_QoryK!WvOWe{=TfU7?ez7p<_)0f1-K?0!jaMooD$rv?x%-7^`{N zZXJQ*6PveMEjGzceGCqqklIh_z^Y~HE~psViSLccGFe>>B0HRsWso3Xynt`U^p~z| zB9S6oJ2{eJahNgPjD!=(n+L7Hi=D*m=WAQRH=N-!joECfn14JkhB63xmeVoPDC z9+Zwl2@Eg$he?Vw&|d+@FN1(?T6upE2W!f0vvLAV>@6u`&Lco6Ks8lsUExFy;S~Ij zZVj~8chyrPjuX?ov6P($K=<(+7miLu9Dy@dfAj8;*>%jCQ30SO=<#6(Ugnh!7abgp zW;25wuk)UHEYnqG)NaDaSLM|mH?t?4{e^t9?BCgB36xO}g8&HuA)y#L0CnDR(ak0dQ0ZySa3rnb)iRCH)jz?&! z2)ZmQ)yowQjK-=QENOVsNGEH-u}D{uf2c`q zze=}C=|eyNABr*G++4dakEw5_!rz1glkrMU;gSXL2ZmXhA}Z_)hUyWAFm?aL*Ka3_ zD~>VOls;bt6;A(Zw{S#_A_`<`>9Y4^HQfI=nv zH7jWQ4Q{fwZ_@80meGrqj(UH+>H?}UTBZjKD2IC48QldE$C(cJ3z>D_FK=T5VD0># zXx(I|exJYF*9SJ)^xyP?KTew>xpx7`dEP;|-wwLdFCk4!9VjC8Z;Rp}e_P)cw(&d` zY5MGxU{`Ue9}5rfVcY#~V?XFtt|2zUdOo_hb=0#K7GMb%3@JGlzUjxGIsh?;tY0+f zQnGKek8izjed5GZ-RD|D@a^$zd(D*udnkc{YHr$DQ+E8A1pR}aV(b{L-9xB3W>Yo6 zOyhzg-zBu<*teD1t+AADe+KsF1OC)<-MqCR1b4w1Ew9?>o*H10|DZ-;Fz6(2@;z;- zk389xPuKrz6OOGILp}?k;Mpi=Ui|kbAaM>{B8*$kh5@U7hC)q$tq2y9c=c4quR!)KeQIQm9#&5h-PTCdp$|~~D3^MlIVMTAG zSDt)?%!zn9r<`!4>ok71-!^_aSe-O*wwS1}_{U>Z7xHU_Gh zL;v@X2sGq{QV-90au$Mr8-GKXMvFBVhU0+wl9&Xn0bNa0pFQR}27`$Jf~G@%-A!gVC>7j@$ab0(e`oii!qZ?IK+qb-4)H|c9H)}Z%9{k2ONBvhXVE02soy#N7 zAoYm^MRqDTV+hG1sA7k3PX@nF@K5nFVgDOgcqj)E4D_>RQy zD*a49=`2S{R_v0fjBxdu?`!8tAgA7W`9j(7`eCNPe|vH|Er*3^CVo`DNmvfNE3lC4 zQ~#TQixkx8R+}{;Yqt47&VCh@8TsO_lY3J06cA74Av5wW9A95q~h8-~;gCj}HV4zg8P3MkJj4tVpHS^=~gp zE9tDSe{KJ8h5|8#d+0o^4iLqn>cznq=zmu0lOQVk2?{g!eHib6q&ws46~)bcTF z{oQuGQh@a0=J`Rz4M7_crDHpJp@3>?>cPxgK*$g5G>z)fKuaeW_+|?L87=ozY#{vQO7&W_Yo8F>phfEm&jar6 ze=_J_Ly?^JY4)o|_XI;cE%qbKHs~>b{o?M!;~#ns7Ss)7l4S;8TII3~u%|hxC(!MM zE0)-O1G4-iR=_Q4D<~Rg$^gazG^BO9N_aCxgD<`yez8pc#5xIr+TN}Uy3zDV7If91 zHTfX^L)?X~TKAjq4)mvAj2-&Ye&Z+-e;YN~qGpTN`)Ycah5_W|?(qzOGTgl@>4Kk( zyz2$hfMxvaw%=0b{Z|6Bk(d(rrC=7*%w<}$P$?jiX92`TO{dol#6tf%+LV% zz=UW|keq^`@3`w#Hv^^7Zp-771x%JN%>41O&^~yiSI1A`_txmc!!A#ZH^x0aMB9f9K*jSag6Gh_LGl&-E(sh5`Nj!KY34eRGoGxu1}t zm9AtsZeq_tbzX)B2nO;ELH!nb7_GSt?Mn(lMS5i$U}3KDKACJKV+Q0q+K1cEGwDph z&vn+|cM|NHK~8S6z~i&^x7|w{=$~FZ=z%!m(Vx;SM#(!f3*2otQzDYqC_eNwR zPYC{-oq=%v>~Es4*Y`#nqN-UQ;utHU z#q!KIL>4bn$AeEApOgLyf1@bqm}Rl{C;zpd!k%Dd+<(a#hFs~oNlbadVEDD>=qFl5 zNq6$C^T_Zpr%q426<*oGZ=TF)#5ndeo!;}IUu%X>4xA>mv(NJvDv_T0P~u1*V6_Qk z9Ro(WvcUJ}Q$D6+$c%G{UR=4?y7IHcXfe(q+ORtgmiO`aBXCOg_Y^jR(eB&p>xQTe9 zY4rJI>H$X&PK-)BPTlcy)iHAbd(pmlslyy=0FTn{8I1;-f18DP+W`mkNH!3uHqT<6 zXXdoav(9VysvWdq7-&*TxYOYh<00K&w^Z~=2yl?8InHp~IEEI!L1;mVo(5Fl?8$Dv>36WJAI0kdaQ?U&JbKnT01_&) z2^x}7m^X%Le;iiEe5KX&36T>>sD)`K`IL#h#lk6`$Z;+lkkvtRJV*S{S~maTtac9d zc4p|c({5|<*c{vfVBE_-@mtTVJOP%9vwXw{QhGc@A!ViG?Iu~F`mV+~DF}) zi#IkBmI^;9k`y=-U}u8Pa+Y47b6+&wQ@)&7EEzKYf21E3k<7?Om7s%D{W?I#hCkK& zLHL+?K(L{l>W8(6`}|3@5tX#nMT{R;&&2IT7ZB$_}3 z{ys6He}SFT+uhG`O6DcInEFfxm%0jpzYVnL|K9=cuNjso)ehsYQS>^ zc2o%`>?kcvxw*I=eenp>n9-uWb#&R3Pght53DYpBy?`u%pTzt$KD$H$=XpE;u`(!# z?PhtXl?QUO@Y&! zMonts${nE#NO3i$F%ID>cUfeLy|Jgejz_FXR7TYxH7|c2E4d6bkHEG8bqDZRuopVb zA0R-qq++1LheeY7?AmN4viN2oIewt*O{$gijK}jZJH>2xZ~wGB`i}|5>9+j&1{AOY zf6(ny^Jq<~F7QECO%cJ5FQ7ksg8->$r7SLocf8jSr(M4_^%H8$9#4=~&}YuTXry%C zsRE+BOs!8oI1D-1r*0^h_34<~J#ws>@9UCL*vPtz7mMRC= zfJplWr~_@8i@=;ur2vRaF|POO?1lMG)F=O~e`TsK zKO%&3Nchfp_Jcnf%k|!z(00oeG*fZNud>)Pqrp+E-WOb@kqC(((P0Uv@Ucn;pHJti z*^hi~HG-WCwM<^Yk_wDp6>30g#W?( z^3YtFh9wrA1p0pT^IN#?=tG_-f8W9NNI3;T-DbSP{V6y9kl$INQFHDzH6gJa6!+k~ zKv3_Te*v4I44eQMAT8giQ54z**kzox&y_<( z(FOf#yE*HQkbB}8m~Pz#7&@4e^g?{4!~pF zC9g+$SZMvZ*bZ>Ow|@aI*Rz{RA4kKpYXu)U@j?oNM%`~ABVqvpT#TWc`_B3yYVmkG zQYiL-ib&$GU4!s&Ip=$>o%{MAKVY_j9mJ)E^`}s0!K#^Ty_*4J#A#zrSY7=X6c2D_ z{Nx12ereSkGJ2R!x%-2ClHGne_7PD9Yj|17>5YD zRt?mGTQOD-izP+x9EOyt{0!)8dvP(|fO2LsddAMo2NRd4JT4~R;G@*vYC6GHLHaOF z&PM2tR8Qvb3$R~p4r-c|X_REG7<6W`7@9@nq7<%DX@&$kLBBnYqJt>UWQbwAcda^s zcmy@mT|bxt&@%$;e=;ao>KRC0iEW;VVf9(CxfhP7n$J|EjNn zMVy8REuYiZr_Fev;Ewu2u>4jV45+99I2gI*gY5hY3CvTRe~A&BWoIh+3JM1nU-sN$2$*PIIn{a8C;nwul}aC z_Q2h?Q70FBf7ii9m~yZG=(V+Q8vAr~Rz9S|7MKx;5&?K#2Z9Kf3;Vn=Ya6*NiQ);V zCk(X^k_Pk@BG38o#pck4>5*2c1TKvzg|bY|5|!kI@Mje#1RNHBww|3N2u)J;iW@Nf zRsqiy83(i2i${MR$Z88N@(|@i_9WQu1KnUf5t#5MfAJ~&3~ksS=KDIpxVc5`9df^c zgqE$o!$c4E(abz3r0@CzlVntmjDRqDEBn#l7}R~AW_|IMQ0laYNP+|<8m@cNeElmT zP*En<*Qe%M*2Q)&K_7?oEL5}(NLJ%Guhs7G9AMkz4{C;!fnlD*ar}NVjwD&E9h#v9 z2!UxTe@EfNOzE1Hrs;LN*K`R{f_aGZSH}o-K1nR^{@1o~L~?58qjq-9)7KPdLl2i1 zJ)W^gmV43>o+2mr`yqjAJ>MZa2dZB)?xP$Vpcl=VodpeIc;(~H=V9LS>##4;&T;RB z1^($NlsB~66Bb`^FGx*4wVcnw()$c598d%wf5oXeB4XcZt3lB2v5mTSA4>?8G{;)W zJKO_ILLzK|li2(}sfKKMPkix{^ZL=OG9m$Cq~>O$5++ ze*h!Vb&?q%Hif^=^0=6&o9WTzaQI?|v@>;}GzkUveN4XigzZNgbmA8!-$JNEGB~fp z8!UD)!2Jt9ftK{GP?->zpXUgGfL*#{AlnlTEB;0~yjfhA0zt6oW-0-;ho#Vhx)3<% z9{SUmSda)wbaZ?slt0-h%h`>$>?W_69U*o@Yg;hhi!Ir$7 zX%iBV{9ZHzTle$&>GAYRErp}pL9Gn$_AIJ!C0M6S3T3_+L>q&TELwp+Vf1xX9Bt6fF?p}rv1CB))%Vr zkIqmY%hw{l18Q&ofNDGt-?TZqe}C;X8Ixx+!R>1IrujQ~z{@5SkqTZ$uPwG8qKwF6 zcz6!h$0|D5g;kvR;S95Y`}oWAM|enc33&~@p}at9=&a$V;_zmngOL3yqAc7&$0oC|TEY9S)i7iq&HcfNHKS=nv6KKT$keW#L7wz> z0b17DC~FsV7WjgCE&hWF)8u0=Ur_zl7U$f4hnwQMeUtM0hsx60H46Ww-NbpgUZ7GfKmbexwis;{-2w>;pIE67i6IV%5xdM zDfk%&U!3Ej%9PpAc{aQhT1X!XG6u17>*VdSwCVHUz~ZbL*km~Vq7xDUhm{W zn%oGR^yOdp`eaR6>tuE_fK8a78f7L%ngN!Vq85_zgMnZmf3H$Nk;#~ysbJ{Yf6xvD zS7SV|0DVH~;o$wg0O;JiF@pM_hF_&vRV?xj>-EzMl&uDiwsyZcuY5{6Agv!+$&_k< zA~M~KX-Buz*nAKURrZsWWMk>z@~z~iLNF1yH-cu1+d;e_qy9a@NAQ_RB}X%-eg&^8 z=j>7ki9j{Xf2gu~s5kjciYN5sx1V@IHs_H%FSk( z+hPvi2Q`PU$(>h6?+ihAX%1HLH5;9TtQS)QeS|`be-FmEE1fyN`q5iLDWgw7Da-m! zfAxMXL|ujHO0|r-K{z-kiQ8)n+t~rZgGslIP>6?tbPS3UL7tpfYQ*-O=Bdx*d-Rex zl}r842jAinI_>To?+1i~FH24%Z8iFjE`eww!Q{u5c2%0U%@~I>;5qV+16-Zd>DxE7bqjgwj>dk}Nb%wWDl^qh~DB zz9D1+OKb6EV7KphmK%O2vneti(z!;afwf7{2S@SK2w2XnK?h5Ht?YBL`_=GJQ>X~K zf9*QBvkr?P$sOGMF8&lgIm^U^N4j-~N1#BAK;i>M7%>ebJAKcmNMcR>QD3g)L7qX? z8qh{j8{t-&B?2CCkr5Npa&8ABUIO?)Tp{(qZi=40L(M{1f7SK6bdGk~;VTTkJ!sYZ{YiJT4l2k3I@`JhC!b$F5`fsnyPJL{)|sYvoGx#7zLY|M=4I0l2r<+CPe(UPX+3Fv47PI%47HGx9R)4>Adu&fBiAZ zt(S6!Z-O8AlLGy`#Jf0Hi8H|!eJjwr)uPSzIx(+bH29U?ra0*Ir{lnhdUWAX!=gJX zIG*Ii%jA|V%@@&<<|3gfgoG4ZBdt`Q+8^YzdX9A4#lVfhaK4f+(8<(i8t4%u1DQ}- z*bilZtzIPzz*R7jjW4+62^hH?f3bEM&n^*g%DGw}{>t6A;8ZXll6W&0S?9D=4lLgz zqwAs&8ZAWH;i>!@)b_Rie+Y=nb@dFyq2tIf*m%Y%KO#mMy=M#_ zk5+>tsfEh=KypCcxXWKc)0B1YIJS2tvpgG21Jg%j?>kdu?X_0}1ZRhpe{^kve9#jC ztgK8W^cHg?r}`hXvi8IG59eK6VgXhoi#4P~C`&6r&@_H*1+UoNHO91z{L~tG{*_$K z{Pc*)mG%Oz)wS}D>D2T=z zIOZh>{EjyLR89XwKsj8)IT`o+BUPJsh5SMyUnAcIEAOMI2wwY$+XTNVj&G7+BY4ir zo&4}3Y~2`$nQx-&ywiGSIr;6Sr8rZdjZs1r;4?gXBS-TF_wxKRf45f#gEdo#ryrb| zq;8+>mn*jWR#Hn9$qY|X5tO)Q9{evRKb5*=qt-7%=4Eqsvrnp zCd(~wb&|Kl_|Ei-fB7z+zQ~bR4Z7~3t=J6{q{1bu*r>jXl>rkJFHrF}S6&9?eu~LR zYXZ(Fp2?Y|s}>C{pbB4!PySzyK@?5RR0Lv+fO7^|=hSBNBZQMMF`TJ`6REUMuwgwn z1NC<%{UBA*1}|;=J`Nyw5Clo8vs^F)r_Pil2`T1Fwto2%e~8x9G;A3bjR@HRXS{wO z_bi+bZ5~HeZidi5Ha;Kyw@>KLV*myN5(1@(41~XNHn?vJo~V!n@;be~O9uE681&B8 zfI@y9@YRSN;lHU%X_L0dgYW{K^afL+LDNA)*=%ugsf1C!w}-rtl%KZCCV3Qv;P6np z2w!)!AIK>}f2sYp4PjaJjrYVJ?9>tsq+oVsR}qQQ5bQF#ng{z-1=Wz@VS2VF&-jhm zn_)|1pbat02bXdQzqdAx4dwqa02l)dN2O5Su{AKxC>y6jDr*1h>%NfF3Wj%EoYJ1y z<)JK(-z)7;YEq19KmadBe~^$-0dX_Q^F=2kicHyC#O=3PW<4(nqOu0?R>jJYTbhsUbh~Z}*E376g6s`c z%Ubmff8%nFWwL$E{l>gvkJjIvj`imjq*)$h`#7$MZVgIA(#vDnj~!zicza-@gT(@z zA#x45u0^tKMjl3zEBgWd^h>mW9ZRoKub4ffP-Y)SMz~!exO^mcw?oN89=P@b+zUPm zsN)>Uzq>wfKj4F_fgS@lff$#-gD!Ap#n9f+e;C+w0eue6jMa_e>d3uwRVrogCPQdngNlX9nk!Sy)HMYIt%^`{( ze*nn!P*`tGL%F|O6KWkD`4RKIS4BQSOdu6u_1KODmpfO$RwDfv+0-P%3ifwz9`nOV zPqWV-w{Tv}tjXS$he z_t${_xHV--WOj>ayvS^W=Pbpes?V!Pe}(8t;#k+*?L_Lz8^qGborRz@3TT-Dzl<(a zi2bD0KzuC42=yk{?tKOhNy}G!fOX@J@-`YAp(h$KT2olFkkVrdlDc+F=J(=M{e@!~< z2w_OgSB%V$Db{v5(z4$}P}B-4Yp@4VzKE*GF1#+Rfol%ke)r#Q8&;}n`_h3PE||iB zDtXhrRgsrp6$$wrWfA!4FrcPtOzG4Z;PBDiaYrUi`uF{=j@9&A$V~H98@c5=`i5e0 zXwVB#FFv@qUJxA_-@?|v=u46afAxCSR#Lw=SG-)ieejxw5*h-z)jfYTcYbbL0M?@Q zL{H{?L}tm2?!$X|bvBVQ0?8 zs*sXMBC4pK8N8--26$;%3b=?-w=r9M1c4!Ne58D!^>nNyf;`*`wN8Wiw%5~ygQr>I zM|BcQoLb!w8@t*aqMHq1IPWr*d@p!(W23j0!ql?`izATr4!+-j0|K`E5U^)_a3WMXcf5IOhsQI4Hpx6%H`b#q0bnG4%>I13AUqBf7TeV6ah*cvu z;UFU#I7qak7(i7A3zl(rF}VQ~ZnDcBa#0GdE{rK|K_hAmj;Ha9Q1;OJ!>=Q%F!{be zJ4QXGJ%{qZFf5k~aQuzqH;x}u>Yj5Z9J{B+j_XoKI064`N1}Hpe|@SBTR|b5BIf@+ zmUhA`)xEj0gW4Rs%-s7+%QZ<#(1{&2aKs=-l(gAt3wy|P7L3$@(*X%Y@K{U?W+=wP z&?$g>Zb)XfIqbT|F$`nl)R<=S0dTTfKMoaC%_j*qUJJDlq%+?P%pqO9ACB{R|2*NQ zB5-~+#{w46{&xLdf2yWKGKiEm{%$8AAqDZW|Mr01^m}|k8I@S{dD*=e%)B9jMk?zR z3Vz0UA@&_>VzXWY?nNOtOpp;tNQbAQ_fy5ic$LH1uVnj4reV`c^Vj(Owq0hqQ%2>0A}b5t^&Fva5Fdr z;q*_KTyhS|fANUd24F(DHaF{}6S9pD!|Nz>J()n>-Mg;etTPXmn3mm?EC10k$2-B{ z?>H>H7kvPGn3>uN05w3$zhEPoU-2w=12|QMM0F?UD6%$HzroUC{baWQ6`Rm!bC+uL z>)}OFt{XeD-T+rm3M zL~luI3egWFOIO;IECzYC@cDW-g91*cC-b0YHr^$H<0d-f59*|lI9U2j#{sEnOB?N6 zV#?%5Z6^R-^^S}Fvw%tTd-65BJ)yqGJYMHpm2hLpR0;y(E*zA_#^bl`VKIS#YY>u_hb&Ofge{r5ecPYgq~L_^H$&N4=G(K#BcRZU?d2*Xj1%_aQGBZB#))f0(i zDsucZb6?O1|4x$7Y#(+J-LKxWE~0BS<40{ZlS!obWq*JO+=x7DWWYdVALaRy^3cUq zhWMJM;jzCiSxUpKtJnIg=$BmDAteC=FAZVzGpr?*L9jK%)fod(@S6h10=_0op@_Fi z6xO)hUA1%)SY6ze5rbnjH-iS0cx59w5y4VNGmXlf@2?u1O{T)X88=xK<=hvNwf^4EUMJ%?hcm65BIWv06<#7k8wu) z{yCFIr?EGApuNFg1h^r5@#padFea9KTuEH?sadTK0}e<-yDUKDa*x2kL-TWp+cs0q zbiWVp_~pO^?Vc~p{T9b1$=5@Eel5%5>V2t5{Qe5PO@+hk<7j+<1NX{KUeO#h+JTkk z`G3tfaBvK06bi~TBlpvIzs~!5pAYiD6U;cTEhrBi?Z*M8xKE#-&nv>;WXBcjn?L&O zMZWL{eT`XKz6SsbTt{ISDnCRL%Wse=Q}nAn-@J{Z1~^TeFD4K9_uT;FPHa7bVq=4* z9ID>z5i+R8;O3XX;gl};_av}!t^eJ=(SO{Bwq-!mfq*A;CHj{N^hN>{dBf)W%kulzk5Vp!iZkoNv=NL@l5S>hm? zoPzTc&#>u}#1I_xs?IvdAH2_~eh%=iwi~J-RP+Ep^0mOY`6G*b2@M|1rEdpI*?-?U z8;BAXUy0cnZ3sz%vy&H3|O5Cy%#46$v@<0k>U(5HMy?*bz5;q!%-I-y{&wuHT|6Xwe;@2q?f z&}kCf2kWZ{3Xn-fTvfWqYbLevjDPLw33?gKZ6GH2NiLn^lmL@1Lm|F{+urL3{!DG8 zUu2$tSqVfU6xZLL9iiG%=x$d)^UEGkf+%g)84Ij>neNliS7aJ2Co{MA9@REC8{{II z2we7tlc8C{M?HCnDZvXO>cK^$DhM~pYaA#g7aEk%CX)9Z-vb1B3xZKEu7CY}R+l(D zREz`+sNyJ#h)}vNpST{Y(+K(q=BT6%QUU}b%j!_u)Uy2cp$J=gLX;0(Up{$0V?hoM zB!cxTeILvdcgsPNHGC$5@Ip-c1vzlD`$^mMnR>aa;n8?|C-f(EzP{)`vr>Q$?)Qm?A+|AuLE(XPFJkWHgAh) zfJidTszzMX>*vHM0tsK`ikb{w#6e^#8SH3)+R8KZsW8i&XdKWGXNRH)L}EJ?@Hw-F zk))j7U4oeCHNL9fhjSnVjcO3DyiR4a-xX|L-7$o=m+012VfFGtBY!e|%q00>NJID_ z*jB()SuR!F7fJd}y;K7b{U~eVr>83ybj_nY8nEo_Izml5DgJKm?|D7;dG|vl$AsfV z<0G8}SQ)$Y=>gLe$r(+r%rLroT@tge7x%hOT2!|g|%2EDMQEGSKsD!B(!ML=wOGYgrtaGI5)m?CHNbLQ}XQ-73fmZb@`?Ji}!J-v${ z3!o$A0V4xIuQ2nl5F&>DeGfBy+x%(Os_4Z+`{mIA&*#j_RO5&J%-xp>@n;ZaT>6I( z#(bb*nl5t$qHWVeDQn|fyn(H^gH;d`vhRPr=3o*^>QQfGUkTAg7~d*cO|-wA_;#3k z-tsQlkUh*Vr+<5Qym+9tMTDmfk0-iFII~>sN^*x?`J~A)jPS~~c3QV2q%hEkB(GeO zS*9QO1#O~-b$0{chIWxw8;yZGT@nYFK5t`|QXua$$! zDOjLI1g_jfE0dipp_0`n`770}YnACpHCiq;0pCDixdJ~L@q}5HKt=_)PM8>d{}R9VA397%Xxg_a zG>&36lR8tD_F{_irq8z0h=ombGZsadKCser#O}G!>G;k`_V}pgG#@4MJ0Kp4J~eQv z;efdSXne%nZ?#KhWx3Ic@VkVun~tcQ@nq^v3vl5Ia)Ft+)#Z+ zjE%x?Xo3r&Ik)YbT5?B3n)$F+$|g~nCWg|E1sFF-k|d6U@|l{MSkv~A0T2;ZSve!} z#L4P7EcvLt=pY0Wlz@d%EiOH`a|J3YW|YCo zN`Ia1p|jd;7j~Mnt+9v|tlClK&d6FgU8>mVr(#I!v&ElC{8F9@wnfd;4_C>&7gL`R zrAuntk9HsNahHQBD5$5AfN_1f3*0bQxbAczfmL;`A?S>fq`ckj(pXHt7o8vYTw}fhu8zhHdpC!>W9dgO*WA=Ld0@vk$d>JX zAR!)cN%R?S>wvB27!mxlw(K{ zwy5w7O8tAdl_^^M**aR~kS~v2aClELeS*XF1bTDz=+~Ug`GubQRE+V%9PSjG7AYhQ zq?9m-s1_}E=*(8R0*kv5h}Dw&V^HCaT$aI4^qUbbWQ&BVgluGMXMbcVp6E0a$cFNy za|_v4V2_p@nEk9EW5XoT@4fYTE7tY;m0xL}QU@_W&>jo7F<4zj6QJKfyy^nx6}(Jf zvu0ICUqy>J#x@?p!xE;B{~piV@tA3l@+i*s_sT;8g-4VCTnZ6u)-+ncYzZW*KYj9! zC}}2FAOo#Q8RP9ZtACyUiIa#C*-`FcW8pulhH!!V2^vF__v(=;gq|n~hH(PKRcJx7 zBh8p2Y!82tarR3fKH=n7u^}T6yrB<}n6Rbn*ARrA(<=nYV9Xxr%8S;WE@iwG)G@DT z>@?%9TgUGyzs2b?IkVU_>^@7%bMDo*s$^H;i84`R1H@vo#eb?=T(0DgdfA_J$91bhiMdxr9NthZQL51S;T!(yn1k=JG`_-*4oO zw3U?eX9Lk%`IQq3{rJJcSi9Au!8~3*RF=kp`o|iQrl8UK7ZwgEKxa3*(GSE2D1XFK+S|5Q4!}V=kk<{`w)^849vo$|JkT)0Aj?AtY<{Z#^rnjvAuKP-#oIN9c`q1%&)N>kP!`Tyd-R&T$prBX3 zts<^EzJH2KFP8AxC-PM)skarff-1YJil~g_0^YZog^n)5oLjW@zy{XcozxC_GktZN z*m&Z#<;rV~JYrWS0cqAPJ`JQhqmb>cx8*egt7MKp0rdqq!H$Xuvt~tK<>C|;m`0ym zIBTYJBc=TF!oae5BDnsAKtPm%hRih55ufs-QGZF_X~%}WcoeWKk*#tB8_M6k&h!@r z9@Z2W#G9@rH~azVxS?dF{|n)}D`~a`v6}gM^2Kb_-5QkwyI)^b)LOVj6U2nx(hpdg z?e=Dz@At!oW(5>Ev-MhT!#+uAQzf;7`q3~1v*+E+qa?L^Aq$2r52~sBTI1R3O6<3w z*ngy8=di75Y(EuBrxW*Z!|Wm2VOee<9k+e0H)?p74%`b3RFw}wT!N1JH=QmZeU>S7 z`)rfhye_nh4uYuODCPBKhcB|5f{Y^&ARB?3)vaOXeyy;ZD$mBjENvJ%|AvVQ zCg9`AKVX^E^7nvC5M?&kxS|fQH3e$40?;CWRhrrZCC9DFm|UElYEVo=h9{xhbH^ba z3x#9Bj2{4zj0KTn@Agb&<^?dWMbVS^N_n+^(l!5F$qEilYmngz3=HccUhgKh-+%80 ztR^Yz&;;3*MFGZ<*YI?pUlrhThi(fv)5dyiU6lFb8doR*v_X0Lip9MGX9OPWmm&aA znvjX9%Iu(=sw{{c?hE8*2b9n+EOzn5?*uvxV3uU-mamg+w9K1}`ucsYxA3u>Rsm=% z6$seZ(R2Q34SCd8#B&=ELhL9@Uw_<%i*Th9w8+EB7G3m(*7}88;3uvz_!p&go~4j} zBNB80OqaT~nU+5*z3V!G11iyTEEs)A=j#FX)d&?J74k95G0d`w6c7B?RG#LaKt2#s zW8Vf~r~DaZ0;nAOO)o>W(H5-V^rkxRrg`p-=iuB`;;TAf8zkNWr)ra)<9{=wY!WEy zzLY~JdO+t_9}ca)FV{i%TT=MxIa*P+D}Kp*v5e{)5ymIvw0-a5^4=5|CMj*`jP51u z?5`veWr4l*r*|*ti|%_$(1CGNV`eM2Urja+qwn7T(Fmu!o;56w)#+Or@@VCO*(|dF z+1PIiTwc%+#o%{WxC`E(F@OE!6{R=E3Ct>F`@Tm~eGP7W0HLZpGmFy7$~0ce7yagX zKXA;Br}8y{ZPEO~Bki}LQCLYNwA7tww?N=_{}5v;Zv2irg3YAQ>twlt%1?M>L*%mn zdb9rc3D{O&q5BG{q)`FLsjqisaM|RIkz-3=UmigA`prJZk^lT8Nq?whwUMeid>j9i zW<-&f)y-9!0RU~!aa1V69K-J)ZZ0P9k}SP@r{3$3>zhM9uhVx9J2Ajoc+CbA9~jUT zubUSympxh@v?xLGgj$_PFv|_+G`Iq2<&&w>YApjK0_@(pgT_k-_(nA=GgR;Vm(si{ zhKT#ST)}>?`L_sutADf_qsOLhNPjCSe@+#&kK(6SB6G{k?);|t-AogZS39kEHHa~r zSah+F$O|a&pfGs{SNr$6;1V0Ca8E0)tD$FZD#@7?;t=%h{WXZ$e=GXlcbnS`X#1ue zUzRqIDN-x3uPR517{sy@hgW2v%@dw+mJS zH_Q-Pc6nAdV)p~Ca)Fi1pr;<%i{~H2@(Bj~OaaFbI%+R9Vm&8txi?R!T^%RB0&G)` z9G}v|daEdIcs`UJ?dgzT&39;)V&MMM#g8X>bHO$pmZ&?L_sqAi!t zK-v#4UgLh*sf2-m98jU|YrxSQqr`_lNxS@}=l#YOT{GUw)lYWl1L#1baBRQAz)%C( z$EYoQ$qn%EOxIvQVwBX?J~#!+)==W*tpnwclVv2-Hh)p;?8PcTfQn7gxjyVY6SfY5 z`6gu&WaDj^l%xdA)JUlK0u`1z#)W+t^Ijs~eXRG@^`~kALZI9iz)fH-?SZh)o;o_? z!UWrW9**|+E3u*!kfGfTaPPV(lt`32+JB$hj$x*Lk;^S}XsE%*d?xb?41uSK z$)mL0?jEjqTeA+quw~p3w1my{UIFr&LCHuJwFvR>WPR>@Q)e;_P`>3i7*h2x*IUSB zAI$tSzQ#Mi<2*p~890BJod~sSe?9B!8|!;8NDkQ9K;DK>Ojm&1`N!`$D)0taO@-om z9e=4)Qf%BT^-IiWw?sY#ASozzX8aE*>KUrH7Z%5-zQ-P&Y3n>^+hHkNPZ-5xHJU1+@COaV0qP+-E4tp!-p?3DZ6PqGG} z623W}C7t%j@_0}4=KQ3d6oI}cxs;lNP=7dkhL^R|@Gre%oajJX_p9*tE7i*P3&bIS zICAC0vc8@Tr?NLC-Z8@Vz*I|wz^1YVWHNAa;nPhK6LVR=DDWWc_$FpRkuh0AZ+Tb8 zVIZ?S!;dI&`xB^NgZ)FvzGTlJ5kbg8l>Ah*{^tjR=sYbN{Kb28AM87x(ntJ7 zs@jXO0tjomz&zZs$CCliMF{gqi+{V_8?_X-J8VP+pX?A&0l!S97CrZY_kfI6ud6{) zD?AZr;>Y~?)=QVq=feVQ?piYlghA-0nZj9cXDC!DywkTuXfGj;jAYy@=`*xxO%>c$ zfHXrnVhdhlSN0}t6RcLai0zkdSC%}0w8 z@s&bwwFf?>9~>#K4e#~V=XS07do`@91&@Uxo!EKp*t{KCm>v5Pk*#hGeKx3&MFd4QHBb_snWr^Y`F@b+z7b`YDKnEHb;eV z2o4Y$T^o0S2_MCW*=Na%b9Sh2ujebmpa%QdBHz^qF#DjrK2ahaC8$e1?o!<8giem9GuE_d?A~QZpz#BH2X{kA6V^n3v`9S_O$Uh~y5^B`Ybo4SG zBM_ZdOz0ajKh%U$?SC?^BhmOW=wmD;K*!U@%j~CG8U8KNfx2VGVp%Km zzal#Ir4Mz?4cB8#Vu?*gERAx|TtMwGzQ<=$2_HS3n6#O3VKc!AP3{$o=jYwb%PK$d zr}_oN@SU~?coB+ffgMTPO{D2vpeVPY72A zUY~v1K!%1z+&fiR%Pf>*4fvlp3a&FZziJVv!6@;pg z&+XzjDHcLu-lZhvbF?uACxFHFB45&#y}_Q;%uPYNmyLdx znE}y+BEEIQTWhWx{G$NCh~h^AEC}e9%elxtDSyNhKg_>LmJS5)MBRLFrjm_@;y?qOf=s0(%#i58?ZSoA5DH#Kz&7-XvhIgSmkO_XBBu>_XDCPmZ+IUt)hL~j+8 zEUV;lutULJ+w{fc@2-{Sa1yo)%BAmi(#YGrSg=)pn=IpMI7xKQ;6!JOJ_%hqEpdjG z?tfP~Io=2en#tp0W|YK&E7KLy%|U)+LRt80P_VHnZq7H+%Pij4)srw&18!3RJ9pV3 z1^#ImbR-bsr)Y8obC80ziW_ns_YeCMGEEdu@8n&UtsGTHI(1@MS;p*#^I6PX(jPu; zU66(Ik)Xj&9ywa3IaweSjN3z>B2-upEq|@!C4{t3|3au7dNI_`wxAf=o4AXIV!DHd zqJk)Hc+!3wvwY}WgFi@!s6{rVz}q-NZa^)d&Qc?iEDa1U;`iK4&gUDLD9R9C##L>c zl)VqC!WxMs5F^ev@z{PFH}u?x8Djvnq;-!+$A2^H zzNn0~q1Vjppvkly^*!Lyu-B5$inw74wrfUAT!YZD!U3PX{(LT9tD z|KS#Pu`63|hU3}@m{A4@PFv)rohnJD>14wFD2)y6Giq>g;I|YT*z-HA`BeCcn9(j* z7kq#jYLrk3g;Z*N`I!ErbVB#2OMk3CifxC9?=^=A1T#(=YI#Zmv;o8ENTj}8eD1b< zV~Am&bl-t26NOyLH-38bCQJU~Y_E@8Pw@1GgHQAjU;%%ouKx0tDu9(f(kiskJ~}X! z&?1XUzYe6D9gvm>E;QJGu(v4jBKfXPGA1xn_l+|yAc+6cujeR5r$2ZKNPlZY{C%OA zgQ9m-Ds+!Ktfoc1i)2n*ty62hVK+4FM^>a^nZ-2abUAM5EUmI0qvGv@X%dGEB>ZYS z3nK z(CE0v=h)Aogc%A3+l~Z}hjfh-Js_y_>03i*9hMvUj*BBA#qZMMiZT*L$Dm~}F3H=f zB$e-^0a)ufUJ`i0?SORc8gY^d0Txr?Qb~=0W5c_A>m@vdmeN+NkbiFYI8NUP<%{c1 z1|jkNr2k%SB^upLQr^ygp$fF1v#OS#!s+Dg@ZtRKrgMH9+W_e@u9}QBJcRL%?SXtP zMM9s}qvLV52d{E-dR~`W&0vOWV?G*U@z`VaEl3YR46D#Qa3Eebv|O@>`Xk=+5n$gu zofJq*pt1BiDfQ+I?SIF9lV7^^zZ1iU18i(xf;41hRg~79Kfi@rfG67)J-nw>jdeQX zuSPWxW}X*qPQ#2YV08Q&hM!bj(fF;4-`v(z)b{-&LADL=k4*zdTkBVFjOLyA#aY3C z4X%`t>M4BqnG+L_aih=ibMQ}Q^E`d~)!xekL%i7=YVq>#Q z=LDyXt@lhNI^xxA)PnU5%a#grgeot#S#ldIy}@~FeSccrehXlqulo8xb#G2f7GKQg zRLuG^iDdBOvL$v;dtH;32>Vc&mrcBkaiz9lzl;#mwGqP68~_j%Gwnd+%Lv`@!^WJqPDF)4vh0?B3e1;r+@NrAGvj zgML(EB7dhH{06~>0?L2g-DPPvN?m5O#G)*K@t`nO+r6Q1M=P_775$fCn>;@ zIYR`js8x##7T;BdLw4VInI6AFjc&h0=T5L`l6cM^M-L;hX3$kIhtpFRw=`+Xa7j0D zQTA4tbohSkrq#x7uAjU^h;E?gC)asVj*hYBl7H6-ayxbWc~U-nE&ca%L`aQT#3GQn*+2F}5nxNEW6Ab$IS&B2A(S>!`rbW+sP0(L(!x4y?OUG>;yz?a8t2R+7qZne7D@2aseFy^d8 zsehVgo()o1C6h^V&ldJTQ&q-g`%sKACE+=fiD!3)YTi9H!vTjI?SevT%>qhKpqZHx z0ffY+agQScG?5ai>zdq39Sz<8FqqrV;l85BBWKhNsI3j8kyoOwOH}!KhMJ_nfP|<7 zc^X_B9HGX)*IiPkZsHWi-|fwTNGRZxDu1ZvUFGDc{MKu;7kJU=(b8|F04Eq+8RaKK zm{QxC(;(lk3^(Kq`0QUxGGi5t%loEMq*+w)K_yw>e)8fd5HU1N_j=-_m z;Ju1!O{NsSNh1OsB#oCm&Q#i>u{kBPpDug5B+Z6$YH(_&15ZmtHj#9Dm}H^;*)8^!GhwsUCs<>eq}Vu6omb<>4fCrg61a zpejIn0vx;XcaZ@=H~wt#eDJxki0<_&Y!)Lgtsuv+V4VGo`dTSty0MZN2-+n$)SaP= zLn(m4^zE3XM7&)mGWzy&V&N0va7T@=;Bis>DV&bAaUWh_#dN_H=I1|*et(RV!m#57 z5I;hv~i%$KHp#$#z>t)zDSCGVn_$ zr=zLufcw!ONb$jrdL}uqeSdhtNJzOHB|5?ah)CU!8)bN1i8e0a-v-U54|_YK0hT)P zBxt7fnP0(V0DjFChhXN1QgB)kYX$^jg()5h)__gMv{1*DKai1HATU3ze1`x^JpR6Y z+2-Qen*?NuiV+?)zlwvLT_y$QVGYHIRqEK<+qIfGvR#Q2euQ#H?tk5wi6nTdy&txW zA%DABYVeLH7E7M`2@0S3^ z1b7}1=S(C_nDb+fUVl%taCH;Xkn7bHUWCNnr<^q7{>`7MGgS)sOX}fCJ@6c#UD&}s zEwQ

    D!{cqCFVjg?~XI;Hq<7vcb*dx*9?QaEu517@;LTv%QR5Lo7K2xzA7K&k% zoY4?i4MD2+7TW%`}Erk-q1wz9m&pFVO zO#2;%2+1yI1^H|)-9yf!GuB~E5njJgXHT=UeWqddk%S$_$|5ohxGGXbg6`A3e?(C6 zwD+EBIVupI4S&|+KG|Oq#lIf#HYu0BW_#K z4%B5e#o|Vx3@Yeez0Qw)HRN49r}6n1Ma!9n@3VtE$R{3^5)d(Qw*1kaS0*vCGbNmV z%U6h^k7DFD4nRiG$=&PT#I+j!ZpyBeV9ul@T?QsEeScG;T}#Q`ScB<&bzPHr^a4r| zZQkB@Fw3lZzgv9wHb)iH14d!UY#s{9KF@Q7o}FNnGN?fq{BY6^C4hPc>v)D+U>p6O zqMb>%??>iyUtA*G&M($c5F|856dbo9Uy~cdH}z@Ht4WRCM*tTkF{;7a5*QQm${*!5 z3`<%$^naDD=zA1qG}^BegMsJ@bd=BsTVtOq$_>KsPvQGRTuwJc(%qATaHza#nH zXXTZfv#iY%*T0cFh|LdctJT|DTcbQlqY{NeC|G#?*4olteI}G}1WC$kNFi*%4q5UU zsAs_cH?J?j*(r_SyPmO%iFW{1Wx1VG63e{TCV#WR;rCz0jG+Lr-_!$?tFJ0c3H?}* zh;C@<)ARFjO(D!$`<*R1gR%05=gSJe@TZ2=Z;+M&06u}{Rwl9T)(2m+f)7yG?`L8b zvHLj{z+-m4k4%0*?q^}DHv{W&Y56NbZ@7+I!o46d`k}#p`s3xvx?Fkz&K=0xI=8$g zbAO}2@?Eu`Fq~T@&>EJ{07G4|V(X7#nhFe@ZOa=T!=x#mV@ih}xK4VMM%+jPUQ$uhzC@%Pkf zTv&sMfv7Ba2-^;3hPupP&vCz$pE zVfE%q^v>0R7vJynek1<7!TGbN>7~!`ylSv z0Kgd$dYGpO9 zUpLu}QkUFzYpU>obmD|)cY$-z7?|QlYUgcA(w@0K8o}t*>8e>M(exzs?9&>uDABnR z0`4E{{A^azVU5#({ca*|$zR}!5r6hgh?^`yggXFq2?Ucw!7g7T!hv?v1%F9EJEOa( z)|)qYr?4c{>P+j%ZA7fDpZhslfyRG0Gl9FED%fWlbS@>Djfl&f{uv#tVdCo&Z;gT9%XI)8l7YpqH* z>SSR2dPuAC&h6aNK}t)4A)~N}y{$#K!tnttEP;Pa++QB~QB(?iCt zw|7-H*9RMZK`TBpJL!BMU8~PyblExNMd|dw*Q&r;zXP=>o=A(DQTsN1o8d)ynuy_@ zOe7Gvyzl^j-~5$+SYv9|fPYkz9-*dXDn&hlcE%_kFw>RFCT{hkHgbe$Dgd9T{>uP- z`2o8?>|UV>C`aMq19bXkJIgm1G~Gzj6+~s<)~8Y?Bg3VD^E^6&^q7l6n$>#<%=nbI z38!dl_t;;gz+1{Q&rkuR1A;!Aqlqf@h3JbGI5y#Qc&HET5L_5IeSh6G4N-2FyXr$W zupROIQ@}@uH(QrcSP+toVZ(yw-SCff$Jjo1S*DCdWac}oauY18_s@#rcQALUt5pEv zq{CHtxi-InaaFB%<`}3-G3O^98Zm;6OWcjf9n`nqukP*Y*lYjxun7RaK&fRZ$FpP9 zQ6Zr+y{Kg>J1eJz^nbAD;3f3m1!q7^hC&#b!F>pf!EnPO1|##ZX%{C0S|%*!F+@n= z=aKq%mtIv_TFeTT#DSR71>HG>diVroZgm=2{h*#lm=UpS9~z93Lc=il8_3B;Yhs#k zoI3==94FP4)?06#y6^yQ9R}oy*6-;zCB!|64;;2Ul+hff@PCRA^!QeKZNMM1eaqO~ zdF2)|qo5F^SFLLM4J}|wZz%@+EWIbl?X7FzB>*hzSS5J?tBBI2`d0ST3`n8h*CSjq z9t=o(2$^RHqcW^LM&DUBA(8<1%qJrjc+6Izy1fAyT{qQVwhigCh{`fCjkt`0T6aW2 z@TVzGT{kj-!hbFYgymB;6`@&GEotf^ASHE*^8l~3HRGQX=Z{gRTlrnGn#@^e2+_blMM>$mjbv)xkMGD8?F0{xDoh!o zs!oCai-^zc$4?5h#cBL9ruzOEfqDB<{cZ9ROXN9&1Am&UL=cN?wGn<{tD<@c396Wt zo00`d+qtqM!ob?54;YjhfFEZm^Jo(bbsci!K;s3<^T#mNypZTp>INoRcb^OInK2R+ z^a2HGYi&aFzCFGmuGlXJ4;7lBmSxc=510)ciWc^qU{HogFx0mGm`aO&XK4l>2cIty z%7jt1hJP%Wm-awO9T>I+;XQE$9IX`ng%^D@uLAs)_+co}qdUiy*>+f6GLJ9z^u>( zE}=G>(!p~5M;qCgu}wd{f`1&H$9kJU7)2k51-&g1RrKC=h~7IwJblL5V(bu%Qm-n>BAG@)NT0EQ$1daVk-hvfcRJ*kL9uO?G{-}iP>=mI!SR5_M5!) z&LD3a$J)Td&7sl3?TdDm0De2SIB0vPR%^f_EVltD1(dM$I3a6g6TphCxka&@`ppI3 zcm6UTVZh&Y4Vti5Qu0zS>Ny`tp1_4&w13olv)=xT~l(t6KhwZX5!w6 z1oghH%-`M20Yh1PI!Bt5rFyXjzkez5dq;lblmw4HsIu!s~>h3Ug37J)rYs zy5p{szn7c)SNEBs%!-UQS7!tHWiPM+CwLi{)7ctYr;Qpc=j3S`U-R)l$A5E(J^hta zW(=D7CpHGhi7JoC^;stz?Z+8@KVP?Q#*1w9}mwy)V9 zH8cf*6E2$-w6EJib^9@*-foqf(!NMYF6lZK9)M@GaJvYv3~n?j0)$1{Lt}UbhB-<5 zU4Xns!b>f$^**A9aar7^I)8fyy}BN}UpkgD^px&!R@n2$Bf!G7UkVFFV5YQo2NYy0 zBss3J0RDQjBgDGpQOZ2?$Dgga98!H5@EnDAIwP~d$dY~^~vKQ)G&zA1xs@oO0%-_9(yqkqyg+N>lS3c8_J z*MBKrN=|*>!@*X&hNzi5ZdgT-?rJt_MxWju!|8oz4Y2b{`<8ml7n~=9(EeSW2$X?W zcPqdC(ksC%q~N14rG;=0`n*GDzS9Aq5K|td1k@85ls3lt3V8di-E3ECe3KV2V)8Xl zpWXJw))S;40mSD(>3?;(vZH;yuF6)>!ihsQYCkAloSONB7a;DkWF_h=tLcOD)+!bZ zv!E%_w(u?sHQ4; zpDi4Nz_&!#6GU(Hax`Dz`5vdE{=MxQmft{FByy(QPT6OVvW{zS1ZM|(TCq|ZGavI2 zYz8kTcUh3Q&dO%A31-W3ExBQGvFOwu-s?0$j1r{*n4d^1GB+l;Nb#-azb!1Kq&nH! z^f?)b@0#NUmVX3Q>HsL;gWrDD1v+kVUV zU%)6r7?v(Aoy}dsY*V$dpqA)Z%^Td#8C4PJ?t6SQ6$e9T?Kln#U(GZl z+fbq&?-*1~1&36nLQ))?#;o&YmbJ&+0*5$u1OuI@!s#bX+O>wJDW_keb(35`2xd-- zQWv`+Ha$NvP=+_`0$c(}(_~Enu4HNXS_&XFH~=>Y?-&%H0CqKXUO^o`J}Gn&bb&uN zh4`}xrGMRC_nk5&5XC_L49tk63bdj9R$nrE!E^XB=O_pMShJ^XIT_98dkRL)U!%{K zmyZbfiY_XwishHaxD2i>I~pqk?X6hcGh=43(81}MvrC*d(&wA>lFqx!r0;oQ!^nak z?eBKpPrk7!f@PNeBVOo_z<*F{zRT|Yw(j2wGJm)(#_GK?XhB%}mj7l#;Q}q3kViig zPg#a(bS(!6X8S~&W|)@v&o|2VvYIqjPM{}6ySI_EXmQHx;9ch(iQbTXXB&Ne_D{F- zANC%W>QH}2|3fO4pub}feyXvG6wSe?gGPRJ`hJ(bUmbtIT=To$c73k>9`a~yklLwFmtm5$O zA1J^16ZDWrV-l2*+l1{c{ZA!2`31U&M$$1_xIkOici{kLTU)BJr!jnh*G`=z;k>I@ z6!%x-vbnc?UEu?1rk$}3^;k4fbiNKB2Y)9<=suT}JI7xObQ%oCwAy7R1`XUoK^33| zmcim<6;$XlQGR&k4RJ9QfU(WsMiC4U|;Y}-TnL0s{SFDrbNK(5WK^M zjR%lB$o#VI5`5v=qDVx5A-I^GaB|(gRr$>4=A=mQX@5Lui&Ey07$j!&v3wdeYlMeo2czME zYLb1mN+#E&fT&P6{QJm^21$03eSgY{HCm_9J3n6k5mMo)ZV z@Rd(`lmm7c$`3tA*8BK+3_=~Z3j{cKe$-^6DSY}KP19>i2Y`au3Ei8@#)Dw@`urws>b2=_5g2Q_(vG=D%L;p+nd56WUGZ57;l8u}MA8{PL?KLptHztbx#wcx6C z%C$Q;8az4Ej;Lo;X%_bqIHeD;IEW4d6HTqA;}>4ZPpisxDEYH^YbLOl=ke3PTrfCG z+nsx3>gyHq$a3ev;R{~+-0st;%Y=uRn$_+L)tJ1#X-7~4{jsk#UVmGcRTK{NHC&%b ztIgZ>04qV2HujrDhd3YX=@J87&0~h0+=z5zeHX&~u0#J-J?@z@X9RFchg-rz{rV>* zt6sbKum64p^>u@x2qWLGxAyLX#VN;?;w*P7PM-&=;2DaMldmbla>VAU$!BH5SY6eC zv0div-mA8rjllH4Y=2vvJ@t4giC5r4rCL+2lGLx8!Sf*x(S2QM+~k^x&W!^IWV9Xs|F#@I3x=@(GI=kyqtz>lQ(J( z5_LuyLv3CKDpB@>XttPGWhuY(Ti2*h8R`@Cf-yH1DQbUB8-MhZKTMcc)-av8Fk@Uh zf-7zWZSYrp`!emJiN8{TA@46UA?o(}@_DPOu9%6uAm{P?s?jr)>O;zfWuV98;M5fu zc+ZQNjTXeC!FI$n87)PUP-gxr!TZFk>-!4hcxEPLVvUv2M^GNYwTd6@RA9>pQe>=mtKZmON^+(4IKFe9bJ*Pu#oSe(Grci0+=gz|mgIciugC zOMZIX@(A^nvtL3@_u0qyVCSR+RPgd3pWK^bn|$z6;w6+{=zGP-!EDHv4)Jui!4_Sx z&pr{Cw^INVhoD5M(}`_&)SGWA2It89(2R*g3*2uzfPZqEg!R^@_g8Wb=oZ{BK0p-U=+ z{eO$}_K#6x>y^*KJCo=A$w|U$ zCcX8kBg?$RThIAzwz}LZmI_<@INbQfWtR(=o`2D)KNr>G=9ZG~^^xBA>F_xmD!CRB zvwe!k7stA494$BN;~~l^*xygcS;ixE8;NS^A5acQlLoT7ZpnI|zLzc1+y@NJAmztS z=G4fMK>n2ayB}EYbjAh+PxlEbeH1oGB!4c9Uw&V5q%xGT0S=OYIN-4ilN|FPpi=N8AiWqr&`<>PIBwKCyUWV>7;_OF zE+ItQbY>E&wgUH0DYH~P-SLT8d^a3$De-g6cK0?R5%whj!(aI^+VZzlYhZ6 z*!V{)8z6!<;#Y0zHTroq@(zDrU%A(J=$|&wjJ(29gbR96Fn!Y>*a4N)S0$aEab3^{ z{D8V?{gNKi>K>3HurKL4^Ly2Y${j2N6D}&`X!i29@aLucm{;kM-fukH(pL`vB?eRp z#nQiD44rNKd2!!fL>oz=i5|14)_*j9Oj_8WG{^=V%)si}%qF=;mE%9D_=)jdXrYgN z_`S&KZoPX1uU;M4h zh2R9sgDp?rva*c>!_Cg2$L|R^C-+^R8>3dSlo=LDl-~-wfJGM-p>+PcjO zJXwTqs%F)LXud82_DSiG!Hx&M@Rjgt!v&@Ii0OqmqV{1w0VMT}`trYB@p&M_etQ!D zr>9>C_1;!IXB<~EN=Cnm3V$j?+G8|-ACc&{`#0r*hnaW2FwE6fiX{(xW!YVg_pD_M zaA7D}tRX+XX7`79ff(=XJDr5nCPt667F>0o;!=r`{Kma4>O@)Kcs6pk`!dA-gb+-w zMw%jbcbxn!SS&kSr8F?^rs;cP*{%RbK)AmGG>(2Pu^7HT$mPD+xf^wuZ{dG8VuH0^A+1P3o=2Cf0(pRp!J-;ax$}{P&sM_eg@a5Ra( z05;#Va)L{%B)6j97L$jpZ>|H-|8~QedQsyr#~qYAzK_-EwzCY`S)^7A&K{ZDSd9ES zOoJsT2@krFn%Xq}m@Y4Tm?eKazD|Ygm%UI6z0|I1E=8CpC6I&l?f#md^uiOmbzTFQ zM+tSH9{b#8jW)>}RP+6(F60b-`AW`_KeB4)BjL>POE$^&>(vc2igqdeOqd!yK*P^^ zbz6!i(89V==CS6D_1fpf5dgP%zq;l5h|Inxysa#xBUDa3+0te*{7`=%G2Ng`8$Yoi z->nJ!*wd3|tc|_nG1qi{>;^*#;Rbi2yMFyTDwDq?h(KtvHYAd?B1I0TyATZW0{cP| zN>XSTl94&`Xd#u_tSyu1v1GhVGjM89HftS4uA99bLR|`8nzO?@!mR4}kp9O%(F*@X zn-pLkfrE}`|H>JLM^S$v^H>gzFrEB}JnhPe!1AAak{@=I!fTRW4}3kOwmixG^^);T z4ZAwM%TaCKPn}BN4QL;YrEUSZR1x*yE=)Np2}AiPEx+LChTEgF$XgYddz@tyq31Cz@`^j(zOE_YNM!Q^C*}#k8%GZ{J?F z*wT&9ogjq>$p$4i5X90b{1sW4=?xdx7B@aW{#9AW2WLM(3mERGywejKAcKJQBGfDz zVF|WcJ~HH&UT1&5@*|<>ler{)#8;MS)mUrZ`V#k@=z6ao#QMXx6wNp29>rqu`GKh$ zU78(xrkX2=0hlMGiB<@`0k;Lf)}PNj(7nEn*XQRN6TveFmk37*2#ql?LJrr7GQz|i(fOIBs&Nf-Q>d>#~OQ7z8-SAgyyHN08*j-GkaL8j_F$bOjfY%EhF3Sk*j!RfWKD zT^^b1R@w)H?(WM#vfJ-2-P{f3Nw4inaXMr}H^2aTeN#kK{BG?Hr$@5xK73&>-y3Et z-7uhj5~#+z6Y#es)^Gr4Zt|<&I8NHtXb^uU|JVb=#JAipqX5<2ohJDbX9c!qX=}}7@*Rb8wm0=>@MabGl)ch&~@~#YC z1OFFGgkFgJ6ojlhgWV0xrp<4!RlY`-X^L2}K0jfH7Uj?^#4=tBU|f(oWEuQPQS zfnAEtUalGG8+3jUu;$m@eE~trTL1PYliV7Q{|6sBNeVODe{ch)op_ppb->}QG4-VvykXC2i)WDmN$Pf>sp5hzoIk^ zD*Z?&XHedO*`F?rpT?=a5}8C6-F3R-pFp=4kp33QHO)AFla#^JIJ&B*tlgu8prrv0 zIlMjZm-PfYc5NSRg#|X)Ls&^3n{T@CuBLyV@i# zZ$U4UXxboF7y}3O%*~G2QrkW}ED|cc2#juR47G@4^7K28h{JzlWkecfbAd9k7_|2= z3w^DgnU0Cy%##T%E20P&2-#>ocldQQ_?klMywxtVxAEbF0A}IyTsYGKQ0~->uRb7f|LB;UUqbv`e`AR_XoKLj5lVjw=<9qV ziywTFnph&d)y9dFk|Kc<^EO==k__F-0JVb#k@$@t72o)DUXM>8J>jOswRWzYOP4pM z_c%)-Z#8(^&S0;*RGiTx9d8#H#5DQ!t}Xh^@`isb04jP{a31%4BT#7hI?F4TCOQwy z0NJvX5^5NdECKC&fQY|w&zP~ac;PLwH%UKE|2n{0W=Zu6wG6&zk6WmXn$#@WgIt6m z7BywQv^V79VtI#TV%${zaR4u1deZZ%!!f4`pzI-ZVciM0I}wz6xeRLXjn^=etZ)k2 zmhXRVV;nF(!QBGz-c1s{airLtZcqX5LFdbnFL=WqmB+|Nr=v^Zgy5GW*@>b#PytFn z5(ow1Xv8<+9eo6IGpChmwxj(jep6OS{Rn#wieLp~j#(e$9OIBGPQH;_zmt}Ig+Mx? zW9S31+x0LBki~Oi6P~y9>tsr*#RssJ^>cr^&+?aafKwKf^81ll>B`BRnmpfl>>R4B zfY^B-NH(KOuIyFF#c4@OdkdC_^2h1vB8=BGZc2MsGrN%s&>6rRicIOoUq!sz03l)tj*b8EV2T|e<^F; zPCPg}I7Gz`J7+BGE6rCGZ@vGPXcxh#ky88WsxQb?>}qlp`&!cuQXKj;X0~4b-j4E~ zWhZ@n@z|PI1B4vv;l`7(!T3dIj1eL$Fb%p=YZoH2Nfs5 zacy>3dtAaf%7#LK-+`Mf%phNjDZ5d^eJihiD+c%pJ^B2A0&sr_Tl{;b@*#RnRlC3~ z{WT|;Hx$sG%W5jk`d2DM4Ci_awS6S;{cOD)SIZ)u$N>BDHZg5ZU&aA5P#Kd&xLegoOOHU^0;&@Qt@# z4GTE!EU%@0BkX<*XMLJzdwf&ZDCFG+WRDge%E1#hzq`_!pcsF!co&BxKY^=;%}dz9 zN(chY+_jzenkm(6%s+xdea5oX8R6{#j7dH{@j^*$87ukIy$g_;gw!YXIUYqMNbo$ zEH~!GM`9`1JjH)*%a#{m7(xm-=8Rs!2tF}Id;!JdvOB)LP3C)k>)LtGaI6F_adQzO z+;wJkP|2tOd9eg>Kp_J7H0`QQI1`yTB=OaAw6{=}`$x-qy zx|^WZ_l(`y@=VKRRm$r}9^O20yh9+@a0(Pa=4oQ7t`t>(L$~c-2kVH6nJ`%7XwRzRF@( z8DMTTD$0Mp%GLRdR@uO~f>RM?5)Dxv*P9f_#^ITz^KFuWCeN;?o;RYk0z}erur3nX z6QxZE_P;UE8%m3Mwti1!mkIpo5Gk{1%=Oo@2Io6bTWS>y4>V-cIDG$oYIJ?@#}9^b zz`z8SWl1O~E*dz~$n^LA6&lhpjE2M?1t11jSn7XMJQIY5-V3hiE3~#Jl0Whp#zN-{sdjU$Y_7+!A!v$hhwc zbBK9^$woxy_!l*iuqQyTvO2C-yS1GVXnViI&`nFAx-9_s{V4SO;0l4WQj)*%oINA> zTLypewpW{v-QY%X`nY4g`MovVJ^=>##({$gjAD9s_N9+3i(vLGUkie6-}Aqjcl6 zAW`JIR_DYxe}Y9B!;>=L9TZ7R4SvzH&gBi&h{(k>RvZE?wC9IKpd2504-9QLy=BN& z)RKrzZwKYtSa3(~$LSSh{#mU>mTp0l2zX(a`fV^A4|)iT5-m#F;D|H(Sj{fs267Jb z)1JPKb>Yi1o%JKFbCcQ7xb1yVoY;Sx5$m1HE+`{Y382@&O+vLiy;2bAuk<}%Y;=b8 z=e0Y4vZBG3Gsa1Ie9%%8+zX@#&ItMg``vY&z|&RwKD)^Cf>G=cJe)9uzcL_)cJu;` z_vhs4cpJ`%BPFBDS615sIhVe@<|@r@$Bqm{2O3_T*s%RBwaggR=CdM3UurW7@x0H=Q-7b@S zZ2e$qrrPB|L(IJ~N8s%0^b^FY6ObCd$srO>|K&D6b``fSLCK0KVHJOi50O#Hx6|OF zvw~Fa#ZQ|JqIxsQ7ZfOc@SReQ)C^IM+6Td$x|Yz!p9tDOA^&Z4wnT&|w>-+dIB`{f z7Brs}Ch+YH7br=s0jP zcw<7f?U1yEFCCi85-PFt8>O@29*brl(W>C;d{;zhr^ZwAjocZP|@>s$(oUTKRp zD2$H1sg>}x0MUQDnC2Sl){HyJ_m|nk%lVO!P!M4bL<4sg4C2-zK4h zHm*N-Wa|0-{<^8`K3@l3C8m=oQ|DgfY-`r!ZN&ZB$t8dGdfKNXvXQyIso!5i00NNY z=HKz=IhPp?`QZ95y-H_T2H|&pwfhEi9kH!~Uq2rj+-RAY__f-DE{~TXoY6FWt|xAK-uY)txY9$OAs}oBK95*KgvO7=5e@ zS$^eL{du0V3Z%&>lYI=->t{5l!I%1&g4p$KToP%1=eM*)PtW}l@iBv?VK~}Wd2L*+ zr#f{BB44pFfV3PEZCyhJ)4&4-_c#=UG6353+?K*{+LTya)x-7gJl&ryvw-BF4|x+p zOkjWghZ%R@Q{Ne^&{%H~*Tjq%pb?8?3{_dbc1V*q*AV%H$K<9cWt8?i#?QhIkQXmY zQXkwN;OZdJ{ic6pj!TsK1|6ow(;$^o8rwdU8*gCXz(3Piov}m8`ypU9O;Kb`r9b6_ z8Tg6{`170vNp^8scp3e3l|vx#35JsKI>GT~iL zViSd7wiZc6v8(k1rQ{V+cKM_`8s)6+Ex~z%KTDDB&U>{e!C=0O8#mbt;CaU4UnMv~ z15sB$IADLFK8$nCPpl4tq%;V_L-swKo->(4AL9wp=^7|quahzg^IOalsIpCEmtueJ zBbw|~ZSQ!3yUy=mm^*s`+mQ@hBuOAl({>mX)BT|SjP=8Up7cw46f9A&PSIRZZC3Wn zOwrrY%ETWU$N<*7t)q;i#(qevh>S1JjCbSDyJU628Gj1GPFcOdWp5q4-GS{og66oE ze#Rki6MdZhWF8J+LOQyVaSumGR@i?oa%k;1Wflf0LW922AQ_sN#vN9c2OPOI|6)^i zvAf%s0EED?DF@B@p=s(WHVO|$3uU3oIj}%c9Z1aj(Cmpzbo2vJ{?Z2uj~B>)m}-j@ zej?ww}>FEup&P0MO+;B?ufjqe(kp=DB~%4m(=5 zob}u!$rTIBXDQ)_t?Wt%UOG;mz`|P@_??j0L^4f8byrIf@3)@g<_hO1V(1S%c0rsy zLc*NEW(Htq?<<`Zf^L899p-$DF}g@qsSv@E|K2IyT#5=rZv3&hK)(9=T0i(WbtH6& z$d(G+-1vR~j0)rdcPG>RzJY(HZc29Ro8HG#N4_{BgD&=8zB#;8?IiqB_K6d?$R^@u zk6r7OKV$d(dtj@)x6Py7)O5E@q%f3#mp{DId=HFQ!e!}7Y^0;VG0G+dw-CR6}fBOepRc@R_X0y+#U?mUC8U|?d`+|RzJ418R2ez7nwmFBYfg#bdbnA_MlNo`E$h z?wPF=vW>GO{_0NjgA^R~!hB#4DG@+Q#7vEQ{U$vnZnUZM%|O(;;oyBB2^qlKz)$0i z)?i3d4)SXuAHQmU8|Z(dP`u{WZ2i1lVRE7d7Da@CR$#Bh+{<$eVYwer06_p;a(zJv zp6{;N-&+s~3iFX(Y?B~Msy;Fh6j6lJ;>_}l2!Kxc<<)3QEjHb2ZI2lnkjw)G<+M>Y z_Xd$oe>2>y1+TwQr-5?%2T`<-SD+|Sc8dmwNZBuevzE<)kOF^r%JYOsmHaLBV7NL! zUD~km5^G*_@Pl~OlZ|eERyd3ljW_`il+FgV!R!G7|82(VXhzmtYFH2SK_3y6ueqng zSE3owgn-i`v4D7ZS8e{}B9VCxB&SEw7jNhp=SX%$_o4?dA)p_qZ*zX-_K)sJwb+^< z$^^P$GZ_U|#K?b1^ZRTL>*KYrt__u=W9H;six)V?tQ&8_|a2A5#gN5B4hw2l#D9HS(cAyxFkD8Za7W zfuqVkei$Lc>!LheY z{84)MkgyN=)lIys@0v5OkKrR^o0?gvJg-U6^-un8H8N6I2R|@4=Gz%)+*^5FG#)b% z@W4JQwyX=1zT-{*{5XXk6q*`v7;YsReoxrGD|>%-J#gz`i79mNPdtM5-$RXq41TgY zkC#_nLg__`%9x$y?~p__yZSs zh9yk&8_I5{*mu2>tDIl4M1CUsV=|J@^1_~q@9Rb3WLIxmC4zeXMY5YiMhC;lJ5-09 zZ(@I;mE|Vu`w*xYh;b(UQ<^2CP%1u$aN6h^nA0fWOVwHc_75||faZAq5Pq?uVG$Jm zJ;(giwAphkON9Ku(k-hK4`HEBDm3kqvr4c9jB-$hK6Y%{X$X`PK3I1o%+Pc9?XY0e zcYg@c-wT`q8wR)ze;;6()EW7^%RYoA|Bd~knFE_EJN8iP9kE}1AW}%fNQ!1??sVYv z_Pdm8r0AR%E!E=}pDhZTdk`?`2w%r4(PWviPzc1883;wkd9CFM^8)`Pqh8sDAuNBa zav~8@jE%7&Md;&8mi~glXdf%Ie$HIF-eN`(5omgW>O^~V^Qw?`dUuY}&LPw&0asgy zw0qs+wl3^yx*EQGmpG!}YV=nd4TAORfh0jmbc?Ja_xAv_c<(bE**cuwa|xV4-4^q^ zL=!aV^~>r>lu$SPIvKm$LtUqTqQHOB2jceFrsYG`#DYxIv}EkXB4tLW z^6m?XDU$EiH9qM&4j%(zBXG$gRR`}SQc%cCkcU8BjKt_r)oV@OLr$$IG~Pbb6R6L< zg;DZoRN!#fi@ytw9`M`94S&P=ntIq47(=RLx_JxqRyGQGEKc$PKvHX?S~{FH{flSxBDT=&1}$9$a*aTH{7$C z8JuH*#Rt0O`si}G5&f7NNwX~N_zbklgi<+S2KJ47-3ZP4TlzxqB7)<%K1s1Lm~n1EqiPuLS>*u~%3r@>ryf z+rPLxZAXcsUnPKhVD#ugB7WZEwEsQrfg_61IV)SFx#lZK_HdFZrc=rVMqnb{?%Ci8 zk%jElhit%0ehb7_ps1kL&7R%AXViGpOCH(kCtPd{4O?Y6B&LjDJelDrSIaJ8J=L20 z-+J|T1=~|0t1f>@M>|(+PIWU9h^Q7Y(s%&I+9IX(HkHLQ1r zjSDQvz@@|j?9chv-}~*s2@@+Yu4FPz{e16gH>8L^Z);uu9_au!MY~RL0_AHFG=F^g zh!|~5IkezIc`Xci1Q!;o5mil``J{N-+T@9SOcRVVxd(qt*H{lhDERHM4p@nmlIs;W zI1B1=AOj}w++2g9AF?iK*96)8*Jb1c0WrJ09t$R`Xa`-Q_pr{lkCWfx&@A_=fB*{# zdzTrniD%ij9nU$iR>oipbyMnG$_{{NS-~Wa#=>n~{+$dgQGKWx_%Q4$4%umQIe5u1 zlBMVS^%tRAy$ z;DUv5g4hlGwc6oF!vti5Cc?Ae!#RiUv&5we}YuVAJZ^MI%-V$)dbaA$$` z4o;{_f~Kmy^9!xUo&=!V0hbR;+H}lFwW^&<613Agt11Q>&s7_Xz6N5(3xt)qx=zcm z7KeW^5}sp|MMb!t9SKihFYaSV{=6d!~rd@iUxOSOtMTZpYsR zqmnq#*{Belvt{S13wPZTAbuTcSz_2acu2|D!x!Bi`)DnyR8y9QA`x-Ftt9Zg~Et?2g*sqKcb`s$amQb4t5D@9*nQoSfaK ztZz*kqxO`4W<>4WA7eY2`}Rf1KB)GQRoy~T@>}X<5k=+un&q$k1`>H)(xJm zPhOZ0AcUkl>E77-nUo}Cw@`mlSOjmV7EgsI+o66d7It840}QT&80aIjPh~680FN&C9U|?gVdf$Lr-3gVWaRR3E4H3p*ZzYEZVSt#8ABa9g z1@Mw{{f%RTB#mZcddP<-vrt(^fjH%odwvbjHFIBM^G^s!lcDPB6cB&NHlk<~k0Oro zHRfZ|@H2eDit3R|*)k3w*lfek&3*3U|;~|p{_*OgdHt4nVn>pQyYabm1`Lr}r zX_oWchoylFiFj7ZQ#uEXm~ULp%f<-lc+_}ODA;Gte;`O#KWt}h0V^LiZt zDD$Zoj0N6L(N)0@1pNnB;ICft@+*08R^ii4H;#{#oO7B$tARnz*VEJ|;ANQ+k3P3`f|e=mL{y(w%EK}mb%K~y!AAV@btDC9>y??X zrQLXtw2R{;Y4d;g*U^ZRw1nS#w-3vSP{T+_7~V!&CudM2Qkmzd_?t&?5`g~`B`G^E z1{$C_>ZKMHujaw~xzkp);3=*u%~dOB@#TpUua}`6)^j)bP}-;NKOza3>ugSIc7R+3X=n+yFjNPv)D3$ zes)!WsPAnh5dpxnzsj^}^M-CB*Gs?BqoN{nM?)UPuG0N1{ThbVZ|Vz$cIvPv-@kJ2z9o1rg-CFC=?h0@EfUF z3WOha5P;Q%$gLYcmG(Cr_9!XE%kU^ylQ*IEhXjAjP6Q&e1qb7$DBv^=dxpSRn*@1482Pr}D9TjpJhWpNaBKi~zXRp{9suud4hsntOUYlF)Hw3!u!7s1ej zWv+jF_x7O|>~qI5BXH~RxhY%a(%Vet$$rhR#kwcOD7Xgd0Pa(JAy}+00-Yj^CAY4 z^e$FAvwornWP9Jo;6`*jl?epw*zu-915oo<4?0}5&~BN`+?VT0`#ZvM#Xp0fXEA@( z&`LYbj?Ws({mb(v(4U^(q&K3?H>MVmt4qf?^w0n}N~cwzK*0jPdZDhemMVt8tTL7t z_M^d^rSo3Js8QQM@ynfgyfp1r8hPL2Ch1PV)ZF>JUVjeOSm5$U$ctwTB!XUouMjEs zIXNVYJBlFZUr%I1pMez&$Whc5x2<2S4PP5zB8nkl}D59-Dx@kXY-H5-8S-um3014?86e6hYhHAnZq= zmv?crrD)vD4=wy;uDpTsCk%hKcX6(qm$H(Xa&Ln*8S$r^5%w9|Ysvmi725#;VfN%6pDR}v=ox+gs{Q9^sa$6%rJ9#DNv%Ur^#oyWUIuYk?}KrU zhCpAwyn3?}aEP{k^{~+>O~Bt6sdlxcku{Gk64G~~)g0rfBUI0Azx4UjE#X2vIa~38 zCf1NVT{Ly#9?t}DX6%1s_2&D?tunhAN-&6DIDHnbAq$hCtl*Ua2{6LrOot9eD+W>p z3gewtm+5psG|U5&0_tY+e(Lp16j86%U9W}%+z4&ll$bT)fXRK-GW*`b(dQ&HjJQo_x*~83ffVkVHx8 z#x?|&ZTqBW$P{QFZ8}@8&>R|iu%MP7vzvM_jwC8NX06M{>W^nBbQ}f{600hrk)`Z& zKBG68U+Q<7{7lg)@o5hz!!|#6wnaC{(}!^E?+osYB>=+Pz--Fi+*y9h9DApwSDA~Z zfjsdAC#?OfBF}$6Xvv*FdiuDq+w)kOFqPvV=r#t^M1sY(sX)3N_i@6t<0!Atbu8Ff z>-xupaL+>a&G%ebUW#Um&ZWU+iQJ3xbv*$kzegIVBwvR20wg$BLzOv#tc_$Ayc*ly zx@T|Z(M|NFy+3wk90@1O%bb(0ZdAw zm_m>E>ED5f^IHEy-N~3gR0QK5-sYJM_aVw`=>)kDLj~7 zm{26s#y7SxTi(h#O#KhsrfD};DrQ>ig^M4Mao2yQ#b2g&cb^Y$a&0cZ0h1Jx9IhO~ ziIEy>r5CF(OT;;bvP_M4E84_i(8H3r(p^6N5p5JsH3cg zMp%ElQ5N6zJ)_)?8}C_Uk70;8uokyJ2`bw9oxra~=S$2Q)WQPooSNq%>ap48D?>gj z?SoQe{(Hzg*MV4&>_bAuFWTyWvc6zs{Q;=82iB#%upJfiBwIlM5`CWcz}%x@CYe?D zCY4XuaLo?jgvW(@AILsamMX0tZohgJJ3fDfKcBsoQW>aB-RVY-BEClzFsb~az|?BD z1`YIJ!=c6B&n|{47@Ak_oeX*xY1y@Qo6*r0n>07CTy37;GM8iEY0o|r%p+JuOG83X z<8h~INTu>&f%xhMeH2mpN(Dc>7vT=KeQ8F?x7-jQUz9iB2)-2wm(be^jDAanxnO_I zuR!Up`W9KkAU}Dd;@{1j;2nAjfW#;Liroo@3o3`Kv4kB3A`%JunGc6Ic8E$DLcgo9 zfxh^teNGWLv5mF$&x7JQ+cG8rtJN4b%Wr-oPh$MsUhn`*r+z>iTl~NVl+$tAIy~C= zdZ^}6Fg4K8l#rzqNE+tXcZBou{QrMXW>BK4;w(^(g5m352c4?Ivn$z*b1VV|+`ZHQ zib>{Z3sf{Oqo1_OZDJ-E7qhB3C}$YF&c_cOiTXv6P#29WN?EE1Y-NAi@jyQS zV<{iruMNdv=Ld9VXQZ>p!eatH;OK!&NB++G_0?r$-Ub338+5m%p8!d`5tQ}&f?h%i zFY^Mwnc^r~0L@=${BF86z|`8emvg)b>vc96d$v~kD>wd(Z$SD4Kb&uWb6}_+h0;B6 zoh0cyetNLn>@TDqWSz>nq~U+VKK~HK(mezzQeIL_gw@*SY@|j+{)R0QKI3AkiTAf z)I+M{R%8vwcMe9Zlgl zEV`RN)hI%0cNZoR>m{skKe%XI!~i9EeN!R|T$lL6DOFUW{i1`sCFCt#L#sJYrEB%u znLE}2E&_~N1a1>aNO&=qjPlCOdN?i)ozCJ-I?U_kWK@1`&>6ix*4$lNz#~V6nX$xZ ztNkJ$8U7Tr{QuDtSS^2k+W$8jJksN!0f|#!dB{?R#!`({Aj%Aaf3ja48E@6uX8{3( zh3fB}8Q->_e9t5<-s;E24Ri@#2smmODpv zQtND|x~K>&J^E$#@L&UQQeToB+OW#_mZ==m>KH@pCxRS9RyKc0O3c{RsYQFhEysK_ zR>@dco6_k!_T|s(0I7Zz=sW$?8HW*X;7XwZbuTkRUI|Z%n3)TC?k^r=T`-c9==)uZ z_vau7o60GL)80ZAeX(A31(4|AXVuM}z*1HlF17yUgh!ky0mM*+nt<~fsK4RMOuKhw z?uao+zkIx;hLnHbF?+2xFCX;n#kas zG59QtC9&~3?lC&fz%NS&#yD|1&(gj-`=NhtlAu}osY|Elq!{$d-DEIU;*Fg_&^Ba`Z1oc|D@>?}`Gk1Ap7>O5C3RLvXFHs@dIDCjEKf zeYt)J3fzBfI!8oY})5X$tY31YAJ_+fBazKaU0qH+^`3)B<_g5*$Uq##!V0=lY7@ zA)H{-5P=*EbhF-%=&ASMuu1$MaF}Q@2OJWPFKgJ^wAr=GMTt-Pioh;q{njpNzN*#^ zh1c)i12f_$F-A&Usthi11B3(lQCvDuV!(glR8E72iZG)0iihpq62Ita#E!+FU z2=h>562x!^g1-3LXtx$HD?U?5&_R}zy6!O5io>_6x^~UG->+4>Mhk9p z^JDvpJ_9a|pZZriqGG{{xo>`7t2B%3cS$!NJ+B8Q@#|p{WcYvnE`F3CgnO{j@(U4M z^1XS2)F=B8WS#_2m}IiwUZ8oT?iha}!wsZT+<)O9PwdtA=cFKxs~# zla_bld@>g+$`JriTDQ+%;UbN|svi}H)>)qd6?rorE58%V{xs~R%>rOug}|KB8oO@) zycN668GI8l-ng&yym-OE@|=ImX3%|lv8|6Ra-hKVXQKyeD)Sn|{7zsl#q9Gl_?)ba zJzdGgd`UbMH!awScsXmn3D{y6MQLgyrXdZIhB7nBRaNE4sRUxNU&6)1KQE`$Vrm!4?~1U;jO7%*j;|d3nWp(e-+7(SyPQvb`Wl_6|(pGaw+5&<*z^Kpyw4)4LnZ&vo8yr|xySYiWSrF|z?T@H{Wg+L> zruDaTSliOUTv(yFgljJ-6g?YUSol2coFJxdoMjFtGWAPaXbFE`9}9--1h*hVeF<0P zGA*cBcwC0k7Bpv3MIkPO(0gnrI|p7AZxZCaTg2yp;pzn4T!INud|>Vk7v(!Btu3-> z{V)cY2X{R5rr`~XgYqcfA9%S&P^vQKc|n`C=72qD1Kwg94h0nB1H$2?H(S6^;(yUW z?%@O$zTe_FYw&-2a!&~Skm75#P3hN`JC}BmC}sd0rFrG{+)s|8wP|p z{!$ogOUhpOzA6|EbV4@&0cb7Jka>KGa9FkM%_ zAHCH)Ke*i*1%ALPfl+=swTAW(;%M~9_Z?`xZ+p0i_i9;$7)AJL9{5iJzke@1Nx4p= z{QZA^CB>Vt(3LN8Z!=$BLNEIo4j9eU`#42t)wv#N0rNe-B9QXJrZYUCE-K#?M89@- zaF=uc1Pw?D&X?*=vh;H15-HPHb^hg)=yRXNp&|c5fi1znjf`4K2V1~Y!Rrff@-Ny3 ztfD5I_t>co21o0#82*sxq;I7{>1dPoXKNY5>n7PoXt9#_fHs^zgd6f z;^A>}NqJR2Ae;$a=FrgW2N>wE;(Vp`mw{;B+a3%!txlHeKoQ2@?2W-RF48t#wi*CC zK*YcE`i9#Ne)c$g89$VBb`3g&reKbX*$KQ;u~-@5_M<9wo^aV0W3E6;Noco&hI+Cyn*9&O*9;e!T8`v&dX3o%A}{jLbP6 zKbW>;c+9|E@A2{;RLy4QR-IRQzknmgGRH1D7JFHiZ6T+d|VqF zu?ahvMs0sK<#Yi;)W^p_2&TjZMRSLjLYUNB0T-bsUt~i(V9ery7YL)KQMQ#Jg#-%H z@a0YUhq0PGe22N({c8JVW-}0!YUGftI-RL zM*5H9cGUs)ok@bGa$CAswl#KL|owO9|c6m44>`MGt$b8#aSM!SV#k|yG|;$`*CSU{_DYg(Qs z{gdxizzLk9?7f;A*Y?75q>G@$1p~N%Oc?l8xsxmq59B))!)vf4s8-rClbU-C^12-A zmVo`8M~8Cz|C)NV%%Xu1F6ZiL{Fl;QeZI`s_v!t){QuV8>#gjt78OfF^V#hAH~C07O(NCr9?p5 zfTLR(gBZw8bgm7;$A9=6U#YBs`CNN$+lD^Bed|51ZI;g?B&1cq2Xu+#FC9=WjFg#M z&^?<#z_nDD%!>Pe5tYZAdb&PB$?y}S%lJWv3?}r&5JOVRgD!dffL1EAAF|kicXnP! zQM|&Q_lzYWRrA&55l--@UOjGrCm(59)>+FHxLwkPv=r#$*B^Rv1*e=tr^BxkNz}&V z&ge_n*No&}x7~*YQR$cE6ntzVw2+jhLq6x;T~jeihR-N}*Wl`~tM8@(_PKDPi4r=eqzzm1DDI$A<%s@(OC5P4i64r?W3tVz4%w8}@?mX2fnVQ2GCgPrv z{B_l^Anm{on3Mc}w}NV)OJ(7NIP$j}KNFZsr{^t9izuQRV?XgJEElzjZYJA0(|#8X z5HS$6$CHb{ZAn1tN#ua_V8C19TTU``EVYkOay@IbO*0Eq(eJ|lk1EB;2sRkdQc9TG zjgp&xSk;(K-Gz+Q=mS+C{;CWL6UuS5Y4(HDH*>BS1(R(iwNZgoj=-k_{#hIlUEeTIc_wJucwT!+&d)KmU`qMPm#pfvOL{Yz)gZ>(Hs|b;z1<066OUbg z={`PcrZnpv2}%LXGHjQDGa*f*WBT=+xtCl?ttq)+9;(V+=!b*wfg;5S{+AGrn}d4L z!W&u#E8kpD?41ng=LhZr7BZ1}NAJ-N`yic%!ZD3#DPASt0MFJ%27JRET)Dy4$4&fz zN>#l(6r!J%-za!Wk8k&t-w>SRwbu@RCNlE>AA%z5{PqNbV!*H%ds(5iKIR+p6=pMl z0#MW?A9I@6_GLXk<)ku`PU>oph#a@+;zjEsD*Py~N?FAbKk&Q(XKEgqBJxC1++^Pw zx>|a*N7#OQTld<`IA_P!WPepqi|yQ0f1tU5fVcuR5M2)LuSjhd3X449^>W02Bj5!8 zKy+1s^o||`QdW~Br(dKXjxc2(|4G~Tt3&Tz2=(E7ndJs{OK@3&_lsc5wy+x2&`5eCAk>JW8=!;NcJJN0(sFFD<~O&YLv;b!I=Xg! zgKgI>ED#Vy5-ZUa4fYrV?M3}wUseCz)-c;Awa`8wM5d5P%*a6*pfDMKS7kS&$M|jP zHFD5!;^Rx!Ss~lP>?Md7o(hgO*hU%5HtIFCEz~rr@&irXZ>>M-7Y$|)uYJveW98(f zk3usppR`|GZ7^B|YGdMFfV^lGbUlNuc;MUAWN%k1wa&JEW^eP&U9TN2SXl^(5fdC1#`TNBkKnjHqdyiMqM&iF=L5@Gn;n;p2nHJlHVUk*2+xQN zFiaazsSqk>g>gdi`u}SpF>`E&OLu+I@teVrTcpi*^HkTS|NLx!;mcNF>Qv4N`2}2; z3^k~jAHv=GYDBTg@PALl<-zVe^=ny4wlHy7e3Y8;S+&h7LU21CczqLV>-?TSIH{7? zGULYrEUDop9D7L6kN{nrGnirqnWxavKXa{5jj4(9d_QiK;(4?*Xc(vqGxSMAg4U?Y zL_10F_IU+$#ZY?vF>e(VcsQj-M=RG(O z|FGmio0W0-a&Tt21$&=#lHPS@%h*e%q8HHVj1O={>ygNRFy_12DuCJqSQt*lDT{6R zvX&3O6mt`}B2*0Ka($5a@FaLE=u%lQRLlnc_RgiwURHbYFE$NKw|gJ$vK1CWhZdg= zGH&W4WY8c!llH80IdViM)>KG@jExeq<2?#r6e=GSj^p46HkFT>Ze~51=u{|w^fUX* zcGr+Z7${zUc8nI_rJ|Marnq~ECWVJF&%X)@g*7_%olq{*wDi}cRwp$a-alWC;>K~~ zflc8$28hH4T2lVw&33s$TLe?L7|)T*c|8+3ZH0RtBz;epHw!u&Uq1HZfv?K|4INQF zmfWtgtNMp(Lljpf4tWuyhiMlWC(jU!QAikL{}1 zW<}Pr*Pra?1}HedmOTv3mG;DAotV43Hm!UhdP}uplGClQG|O_v{S}kYuhXW~o9$Ml z+!)+OTqB&e;1;OVxB$ghSKQ6&1652SX%OpoDwWQP@4w6lrrAjTdF@+Z9}x3jP~{Yu zrG$WgL#gkV_dYxOOJ^R?mD}(n;0gu`0E#wD)*!RWCKm?|YzD$5vObjADAEa1YrXDI z#a7q`Zx)CeaK*>r6>r4vJ->5*R?Bm!^gZc=w0QpvIPefGt~f~YDby^n z9Vg0n=N%+QEUxq>D4`bOk)C2>w1d5!7ndX1LBj84z=)P&nub}v0FffD`pS~nKttZ6 z>?#Vkbj@r|XcMBDM&47DM zvrw?xla@MmYw4oLfc;)NKmyB6i&Lt9n^|$B+MBB0yl%Q`<4j&frUQ4+(deSvM}-hu zi2)3Lr!d%J&`B>km0vmHLv`H@@~JqCg`q);OW4u?dOxk^3YcLTeb*)=(GVulp1=_xc%Jd$A<8qmkhx6{|Dt+*F?#0>!Ll` z^+CN_p3Bp)28`&L;oXYKylC7NNP1M@m$@ZyCgHCE(n#;3rpq5%M;sUQ5s8zADiwy{ zqvTsi?~B~i0^UZ=xlLUl-F-AHlKq#P2kFA)@az1Vge&~s(;b3{4n4bnw*`@t#N7P4 zIqxKs+L(bK^%G;jH3E|!EI*!hhHLV($0pZHsZtN@_fDf9s(6gpz+M-wj_@T~kU;weGK70t*m7cjr3Huthiz_gcZ4%4) zjx`vNyn%9%YvPSu``Fh*Y;wpR9?b6X1DI&7M`&FWIFjBBB3rG0?d`r^{Q6+Zh$gf#pH{TUtK?sw(nX^iThtdj2Lr;=8{Ze2jX%X7C zeL4#WeFQ;KxnOWo<%5v{Ml3&=QAgI;v0~gxfz|_LNc#KrJ%Vizj6?W+4Iod!3+>WQ zyuZuAs&OR*+Rf^uXnLF^$P;j&8XZBr15D$u_p*W2kaeB;8-p!Lwf7T774^VXLR#s#M|?n&go-{Ht*71~EI;D&4U`mU3;?$MwhT%y zm$beBTX%Y3_GLP8sGrX&v)@Ul>E6r4wtv2@3g$C^+X{B#fk{?WI_;}S@oOA^s})B` zb1Te$3Z4o#&huLy60Z6q6SLyZygex1yJl~EdzEf_lNFIUpLDn>n^2s}>u?EEy1;*z z;`DX>Xx{A_#Auf0p!vJSjTk;D2%Rqme_~W}-Aa9w*3O z(CS-Tv0sy=f#y2JSpoH$y0v4+e=#pi&#wl5>T^J>|mt zd5XWAqY7oG{3%xzi=UKHF23TO?92fj-fVY~gEMrC{3xyc1+V_SEm92MO{;Xs5uTG* zbJz5E@X&XyV7Tv@Go!m#!NLGUAwvpVHIFY%=hPU^A%^*Uu-!q$%M3n1OOkz3o)B$+ zKF#UzjSFbZNW+57$=w2k#`}%Bc`I`ft=_H>BfdrV(L~_D{Xbi64U>+_FPO|qM;N!> znF_{_UaQtj!vBnm7;_f;_CZj;rBjQbNhpkBS~8zr03_zsCLu;2b+Yq)cuoFD^{@rq z>$Os!={9{*y9Wp)!PMCJ*%SA34EZpmvZOl4O?6d(*{yoe`%9?~(l z&}l$!7Puct4*fmh%CC)gePw5Lmm2Oq!u)8QHu0n?zaqtKMoSD*uM>EEwwz$}dZelu zUifV@6-v0e8XUA5Qn9(;_p}FTk2n|RbV*{eZh|C94qHslx+3Wy2-0uBbem~; z=Rc=Oi_)BuM?F#gF@`5`(GYAWQWCGB|5S@w(~1Xi3&`z(hPx00sDs|`V~Z@!ugB-j zrz^G6aEsN8&bjp!E}gGv_0yHlpXNPPw15aUwqQyQx27eL#U*X_WP%1};#-!0>>>|Xn`xCM z2>>-j;rmoPgyi#KHuH~R#tFa@&~Z{XsRMyLv&!L$^pXDNOxIxsepe7xuL`KcK$(tzR%>f`FN1tS32|-L z@#w}S_-AgL2#uc=@dORzigAk07I1!ec4<3ya&RjR``zitwXKa&>l;kIAZaM`H*|m` zwEfUkc(KPeft%X+|71pq6J$S*9nht2HNBYiJicVXti?TNU>VvJAI$KNu-l)nufv!+66ht_NpTY|ymT zqemnyCcMF^&)=K-NWecKLJb}GeHousZm*^ArbRFOs|LLrdKaGBKPEO0nl8A;H?Qv$ zTl8=ntnh0NEb4i@f_?i&Z3=hwRODh&LoE^N_|ax|ZA0vTR5d4zUrgyV%@ua}5vm@OW8&2Ti?XAbVnq zuY>XwMX{GKPG<>UYgwhQGUTQI=;^-8Jve_KZ=@oy05azAsOs|ldEh1#TdDhvo(|X| z@L(MKl`wpN_xSJP4*Cp#GeLV%pZmi?KO-vauLEg7h1@$_gb}O+;-y%NO=68iN@n2f z$ukOr3c70Q?_srUji%N`a>EHgIyWSv_~CzXZEAejyT%W2sM`gY?Tz#EXD|}W`ney* zoOamLC7BlAcVV%*r><0Yc!Qzqj*hIIr+?-_UsLOUmxb@2jZD9pG(K{+@=iYHGFi17;<&pcjlGF9En_Hk?U#LVnuF8;4O zq#sn3>dNI~+P~A`ZAy?(yIhYy#}DY~orYw+43Zm~O{nK0vDUKdrNRZu zRKSo#i+jy@3+EvpsG>bd0r)v#9pwYSiZDojoEE-_N4;rWQ@~_WyGm2qPz^08Ivi)B z#*yJGv@K3J71T=oAV)Bz&dAP50&r>cKGO#~q0VTkVqAy5M$pC?P?X2}6IQp>yb1

    j&kR#A?_G618(PIj%curJP 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%0DN z04uSeSUY9bDPc=HC7{bBqgW_0Y*!HrHM+G=vdYJTD4gocsLlqC9)w})7^aT(C}b$)Rb%QRruQ^)x-6y+p=?Q* zI$}330II9ChF}?VjQ*P^I(@K(Dr zVQ2R}uP4{guv-RpOyxs}8a%V)(T7-MLDNkom-hKAJ+ty4aG)*pRW|;%tbh$W&|?z$HWtBrDG|K4g5j ze*_=$3-O^fes91xqwDiwPzpfB>hvHIffL1bF9i@hM=n^P>CV1200{UOAtMF-w~qhQ za(M`=l1+U*`jls0lJAF}TjRu%A-K+H{0bF&L`@|#|kbC&1ru4!ANN!J_kq-~?8EwK!#f5I(M zhSdEsN8=|T7=6tXHAmwrj&fg7adh#y6Xf=ZnwSHhESo!Q?y$Kt&)mVPOr8cPf(8hZ zfUP@h-C^ra^4#e+U3G^}AU_hJDk4?fq?|U7B`mCm?&erldxZ*IVyE?$sWd!DFz@fP zS`%MN9V=9QNiFrC97*0RyqO}Ue-sQs2nkz&;mXPc0}~8PFl@YFkW&hVQ1DL^h`GuH z0}~8PFl@YFP*S?_QRQH6{LK%m;R?aRYFqFggEFx!%)K%1@pCnIFusDqYT&Vnt>+FW zv4ZZbpgSw*&I-D-g6{JbbO({Cd{;&HxI#5>KS5rABKY#JOo*y zX4m~qbP6cO*5|L6Y#ovjCQ1Xbh+084A71ONa4 diff --git a/Barotrauma/BarotraumaShared/Submarines/Humpback.sub b/Barotrauma/BarotraumaShared/Submarines/Humpback.sub index 4fa4b36396f05b869d7785c8ab01df045d77c2b9..b5dffcd2157a79c175257128c1df3e3592384b62 100644 GIT binary patch delta 207046 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

    YR6?|B1&jRcv!^xLd&xl$h6MYY?h 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 z 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

    @e+Rdt8+M-s2wW+sNdn$2F&! zCEDH_^~hwTJZ71(<6vn%Kgo=Ha1HA*&5RwmJln%c!r5VuyfX;1J3Xv9(QNttEOTdv zJ@O=>r{VOlvTGTCem0hT?_s64BL3vCxZ`jseim>Y^B(tTk=suQPh3lD261MiVzFJk zWv>E@ELP_dD8CHQTIu1jihrd*F&1S&qxv}87i8n(mCghE0snsr*m`V9WzfRdn^4Iy zQt_z%l?l_tChPr{0k+=hxe#+co0o zfje`LlLbs;ZBLfskbCHN4Dg5L9z&J*0Q*>~CF3X*?D-dRWG8v)6LuaQxZiC=!TE8I zRz0*SPY-N=>6eUQ;-iQ41Gh_K2FS@_?Q9k2ewp**%9r^YjUC3g401kNceuWL<8s{k z5KmMkE8y}|=vW~dk2C`td%Wft}$J7-Qao%_H<7 zn>V$u{7BKJSWXTQ{2waz_+tu& z9EwSU+$TjOzXu|o6p^=8nZI+|ER8uU2O$Q3Qd5c4R3bH%NKK_bkvDs+O5Tz;YiLY{ zs%1GFFj(YLwz>)|f5uXJM(sNCK6+*F89NRXI|gB<*Qs`gh;!x)^4WleW3U|W5ij`` zFkoL2V9&zQHIH%w+!-o(3#TtByDrJSjryOtW}N%8#kjv@$uUO9orj>E@du70M&OQI?1$)gtVl*QnQ0WLg; z9Hx&l2)*)TjN{BR6*E-Rl+ zs=iLc_4I-u3|6vxL}(heebo

    c^R;*Oacc{eUCgK=dwyMA+4 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 Ab^rhX delta 206610 zcmV(vK)*T0xQ)x3@6_GfH|_DHwq&sFYwIsC_;P$vEl9slz`{(t+%|M90u_di)#PJia} zsM_Nwi$BNw=WdT?KhmlAGtT?*XRiJnP5Gxtr@GwsKkWqCE0;gQxy?)ZpMPY~)K(7Z z(O%{7{At>{0WA)5-X71Nb_cgtdwKlHo2LQz zGwGkdgF6@S1B?iaKi#(U`7>|-3?tvl8;lS%RkdJ*;H42v4w#}p=agnc`S(M&bNZ8l zEB@EWCvZo(p6&9tjsN`DpChgJ|N0m5uRk?-4qz<%KY#O%{3i{*z^g?IuKW8MxQHN# z_kYkd_AfAid>+9YMOpmq!ruPMu?4pg|KD$=-~aj-`Tu&W{4V9zmQxNMKL`F6{;$73 zZSnVN(8~>6I)k~Gjs;9ZT9=?3K{|mEr++{n|Mh3t%BwB!b_DPJ*T33;HJuyLq%=gc&mn_g2M#frzoLwo9DO0x+k|qf$_?HmGF7e_ zMQAmG!%O;+)NAyTJaaLWrk-Ijk468gL6k)&o*w;=c9ZPDh_@TWc%hGPdt05m($K>V zGqn#XwfD1lh+0NvPDT{ET*_bY>#{3N%L8ojRew&N_z`-EO|2NLhtT*Bx~>w&%apu$ z=^@!x0bklGoyEP`f&;!>IJ_U`?{AJ6N=(B2y<&bkh7lU@V&Eri&-}fq)%FkL{&Sr( zNDQa`{j9aVd4>IZofO12)BnAB?UYab&u2S9Q%m+g*L~)jVU@o(2a=sI|1{EW{J$G< z{C~u$nKu60%=}^g=?-Wl6d3hych>p&cO#&gIA;H8MC-H<^Y88iPA}R2T&Jw}{ZAvH zJATY4<3HWunSXc3PlATw{&q)OKlT3}^Z$O%|Nm<{HKsXRG5$d}VO)u@&@+FC4zyM3 zb=ZUT z^GU2qm-8iFP5ge-O+!Lm>X&q=wA`$P_uux1Tl%G+PN6s|$`Fl4_J)gOTFs50Zi+W4?uB~j^F8=qV~AQc{QEJn_O`iDdfe>>k&d_CH2o%BQqLrQB9+rQs@W~hQ( z();brEGal@ov16c>+s)$>-38ZTsL@gMtA1_ci)8iZ{JS##unB1R!(VWoW_<~VpD?; z>dB&HjL^?x#H-fZ$c|?YZ!HUtOS`;9aM)1)TQ7$i31ESQE9Ye{U#la2mHz*De}20@ ze|Lv|4kp+uvu8sv2b>!14QitrTTgV4J30-v>g~s*T|8KX-%>Y>d6=<)!)x(#)JoDg zPg-bKwF;~l=nBE9t2*3Rh%4G>tnoN@rOI_R?+3;={4+k`-*cbHMq(IIG;cJnd&z+- z9&O&~_t^Gegcs_gH)oLzQAf0M{I~9dUkUZyCx~?;rNgd{`=Q{v#O_ae?7xHAkXF7T zg%I#^%)b7P4+S@}gr&T$>e{JQ8H7TnnT^i%lg4e>Hq};YmYoUzj@J+?#~nQ{#n1y4 zlm{%x=FA3-uV2FT)`%MHlja3`f3PJ!3`<@jl~2nfJzrC}-|2~fW2X9hmVtfu`Iy28 zS)D0c7;jNikH8HH7Oswbtsm6rcYh_!(WN-kQn;&r5yErEqILBo4>RW#w@6{hab-Q( z`4TuZ`tP+a_I!X1FrSv**;6;gWiNlH-8t_}W}+XnFpf07ztT;DVS zGo0A4lkYj>ijGM3N{KQ_o@%o(w^Xaa)e5t#_t=k~WMZtHw*G*c0yWyr&D?+-8trvj zaQ6z?f$?~5EVcFAf1XWQdjT9{XYIE#!-&?Kp zBG;QT_s)`%$K%Q>?D)}@rAHzqy!?!L*uRz9Tj36Uz%0Wu0cZ2C`krYaKRBLVnD!07 z?6t5}W=TKYCTdNn37?RTgYlx8F(F01S^f1QU(@jUy{T^Y5Sg&@m!CfqHBAYcH~DkQ zQs?Zk zZJ-dSU5<|68>a2x#WzK$if9>)vSrp&gWLfhR|E2i~ zqSwrT-fXp7^3L(l4Y!0M@TSZY977ale0L5()z4@2-Y3MDmfdylVY6;dM+gyy`?C6$ zJUAxojO?Vla;vgDjpqN zeV+kp{yx9Ye{EXdSW-!9A;XL+(|10}@*;M*Lz@>Ytl_d{h#?f;y^9U)rAb-_TLg*< zUY+w-^R}j@w@9=^Z8NGq$%QvxIl*#SA26s9nY%XA(K&zFdFN5{P;)z1MK)U&`4+j) zV4VlT`bSZ7;YTKo8f%@mUd@b+3}4Tb6THYj9bOxde>`sMY#jr3OywLtKSqCw==i;v z^&RrcYKIgoG%`c6=@e*82-Romt1I|iijOm96sjK^N8%Yrgq0CQ4Eql=G2M%|6avbK zDkO*~e8pK;JRh&iKU1Y*pKrq{jU{_;&CtKBraRJjXSlK*;hlX+E{FZ{WdvUEK(Trb zo~&A1f0YerMU+IfDo}b4Cu>)ZH9)eZ@5L0Odfk)g?&Yi5tq6`c0eHTngev7~xjf%j zadtK5qOTYU;OI|M@6Pc|j<3zPynf|KywteW<+t-i7t@;&RIN4vaBifKU z=lG>K9f{R1Gs@OD{^ruI*Yt_Z!{9Vo$Py{je}c8Ypc7d-Z>VxGBOFZ3%N91dj_<1c z@*n$(B8G}Ma2PzD&oj;R?pvQVSZzVMN}RdKXIBW1H*QkgAgM-f?L{cr>r6~N(Q-sH ztg;>e#9qLK_|vH;NkY!Jk!k+>c#M_E>?6&|TE1Mbv3>LqE#t@G-O&{magy(Aqh9ln ze|OixaY_F$e*Up08nU>z4)7bTQLJ%eW=!m(N+wNUnmy_{osuZNLIwb~W_3|OWkmwY z4=-PWY6yacMK-^FrnW^e!W|=Cb_qfSrvk$!iocD=icqL6P$_vIyv@F#K5kkMl%+y-AK5M}fpGu6*Cn2K?6JGl9L*U;9> z*v`h*SKbV_(4PZ`o_I<~5erEUhiG1I{a$Rn*t8K}=aP6ym~)7io3+s%!R3$o8ZBz% zK_16zc4KIJMuA1)-RQ{j5TBTozBPc8ZwyrephlC%3_5=RmLko(k=Wt*u*F?CzRuq{ z8>w)BXsW~yCqQ$3B}ajz%L{-lIC^M4@+88D2(Mb+R#hHhECrMmB$(k^vypFaYVKDF z-5Kp=r=~Sb6+A|gC=}a?gs`a_6IdggeZ3-~*CKxZY~Rz#8Dv!3yr0Cu{%I8`l-=-p zJ%Ynj;|qUM=2xXD2B17#VX_`K54Fdb4g4!$(?w8oE8bRZJc%HRT67n``n`WvwH($k zpbc9mWV@c~mP@LLi!7(HrX;k#I{+tuRN>_Ph4u8;pd=~tWWhyso19(0D@MhO77Tm& z2$Ag>e?6fY>twAtGC+jJQeRc{<*8;j8@vDf#`u3FcAtArW=ttlpQ%GG4z6iK5$}D$ z$eBY;O~Y?qez$L$W{UFiLS6oKsLNz}t&&A`+jMDWs6dg*vzc_(#(L14!Y_M_6usLF ziy!^|<^#e<>(G6JDQU^v@2wxu`JRt>pH?u11C9kr$$C*aQtnhpm6#2mwIO>Is2%Cu zi%);fu1R38W=e{?2wy|Yb1zx!29FU)YT(DO={uVOcdyYt6cHcQX>6C>4sUxIG&a8n zv0*;V$>^*ue&631-5-)OT#-;3L5;@O$LsM8bLvN^J+7#H7e3V6ed8sOq@1Om><=n~ zTCGIfvJsC>y|n!bS{GZx^RuWe2DNkSG(CTKt-oKDZWi~tbWVToSoqwop<93{~CKX#kd} zmrJAoyiF1qz$olim?f~Gpo9GcG^a0^tbZH9918Fs_mv+zCExs(P=khZ4NP`(1NBd> zYl(!3Td^2B6#n zeI?U5MO^n^O2&)X+kZoJbq#pL1Ymu^!nXWU7xUco(-3{YW6BwxEt`^v4tEp`$q9qZ zOzh+8ntq{Q&zkx&>8~@(%vB5J^UA^}!+eV#e`)KMCCp?g`MU1+WL4ioE<#u~mKVfa zdF`zEdj6dKTb_s%P4FP*-mriFejEQbMxErEIY2DL5{V_%Cl2aP)u3Mw(MS3;-Fx~T zKYagcLvXN-V*Jz^j1i|DuwGT2$MO46A7Wnvjhd}l-b@+(%4@`GjGo8UZ1)MfkfJX6 zs!v4cs<5KUMH7iWyAN0DU;O0vBjJS0-e<(h$bi?=)vAqQ{{Qry)F+(8Jg4l(%jZxofEL9`!VHcCd8_$tWV^kIP_Xh za2D;M{TQ9eRoD6MT+Zu+b_szE!oKoxx*kiO*|LIj%Ob!@01bcd2$L9{HjMHA!U%eOK)ksL03$y{1KZ2pCSaKKMqrKLdalj z(Lm{k=-*EQC18z#PJr6me9f8VNUwl-@kGX)3#}!CYIhvjp<*Os$cP~a;I{w^2Ydb6GfgHwNO+FnWaBj6HlUn`P97N|{o zqU%4>l7AG;10BPPtMS{!%Oigj2iqK^ASHYYX-uvF&qxpX&2=6AmSnh7RGhCrOvznp z;gjNLO7U=s5==ltA73C+CId1T*XXlJ*+w+>u>chfU5ofJ&x%@u-z|kpD*qY|g}Dfa zAsm?)?!$j?g{iN6;Xi5;y7&~$WcWm&xV_*{bXE4!*>H{_R|BDJhsHR5N&VOO`HlEd zBnG?9EcOetUMeG-Bc4DKE2Io)J0o)nHXmgagRX)(9ly+#*nk)7CTc{%>;wA-g7aSw zqcD1Yl82rATEAzppzgKQ4T;8isoT8Dd~3HFAKv!lYbQ|7;r|*^;j(SQV8&Sa1zyh zDZZ0y*3GR4G?T#FN~bL>D%kMPTJnfm!Rx7!;yS5O+o&dJ3p-XT6F3N`3%u{iJ&+)4|L9iu%nxtVcz} zs`cmu_N}}IprX&L4i&snmeqNg+~=uTuU9(@oE7%C&8j=h--j%2x)TAsia%{9EkBWb z#}8C!?N}_5W|{ggcfHOn1L^~ClcN@P0YH-)7e;@mcR}E@zKJs0W^ciEp`6!iHP9|U zD#<8yDrJDRLzO6(JmzL&FsYUXo)E^5KOc_a;8N6eY^Wfhr^(RV&oi=E(J0m?LOSXm zz>A2M)_hUC!UURFZ*0bUwSQv_b*`R&u;a^34|{3IOHFNi%MR9U8~~d9 zj_7}w{X|3gSum$pQ{f9)zCy?WMT6ytucS%3V?^x1d&7psnG8DfT>>zsXYY~exz?9+ zfr7xeuzoii;jyRU!ktRZVjQ;9UgO|I;>aYbmQsE8x^MdT#$}*jG9k>@+ZS^NN(Ydw zU=CuVke}fvwvDpdaZ|tjMW1*Eoz7^)6ip5j$MOO~q8>_P3=9Lxac)>4&0vjhU>JzgL&T4}ClRQxFV8zy>wpLya!>h(VKS$IY5?(GLP{R5n zq6fqsat=*U2sOdyR1>_3cAU{ri6|d9U>jeLjkW4~lqzfrXoTd#6!5A_5P6l6j=~ZO zI8;9(-L0#O><~3;JH@#NttlPtZ;=hqGYC4QW`ov)e>Dw~aY) z?|E-iL@OM(alTQBA$Iig1`CM$J-tFo9H88!O3gl<_CDSB!~*S_6A2Ts$4ujf>K!XT0_zSs)nz7<{pb~;%@gO4%)7FzG^MX06F$4deP9{%c= z+VWyPU^nhu%Y~#2NJ{{?;>u1XRqZ(Yu@n(?p`+2pM6>%%D)46!=LiUu-#w`h5V6Q! zZ+LzPAn6bVJ3bAZ$sIkbr|H4mQZ*XmO*y zrs~sE`yl5*$_@9{tn*JvGQ*zUkUOvfRNV}|4K#n~1UnbA6tQnW>o7*IwB(x9!4Y6G zGAdhD1LXqt>Ng%6_ReM6W$Yr^2|D#hb;z&6kGOcPvCHUM72fwT{(7*U)?IA-~dRG0{aI8ZaxsJr7OH;xpeWfz@Cs3^}N zSEw28!k5PY^)ec>*T-3hmkGj7-*pcrlnb)r>48D<0bUqQEfSa=`>j@fxEZ||NPn*tGEk@bnlOy9@2zZ6%=yM(XA=)q zl^xd07uC^|6n9#(Q_X5R7{@?e?Nt`lnUAp4t}Zu?>i~@1G(rJquv}y0ay=ZY*=*=!<6uq%?aXP5gidGmHf(xbEmo;lusdpG&eK>VN1=Z2Ze)#>v*FdS#0Vp`2gD*Q)L9%SA$WVT&Xx0}q2E z%=Ad5V~L_~17%l`VnMbJLiz6Q;5AXtbAMh0yjfO^If!S{SCG@*%fDM=&e0U0%jr#N zpB)GKlTkdt&la>%jigJl)h*(wNGR1D|*iP2Afz+93_eJb`!UeV}JQY zcXParXf4XV#h8$;ee7U^o|5|oFnp(ge^tJ3T<7D>(SgFWgxMIYIXTrF(}16kzJ#G6OsHXbZW+UHx^L3Q&(k1d%2VXtForaY9fZkv_t3rP=DPUFqf|IAUEO_k7oy0%UwBUYa3$5*u zxm!*yo-IDAM=|_nQZ8+3BI8JT1a^83YU9~M_oYy&jFY%TAwVf@fk`rFo2^3 z3fl9@!SNbn9KblQ^GEC zZm|klA`0Mk8>`&~HM<<5TK?-bTR;-QqCO?$0gn7On`; zP2@Mofo^VRdZU6FtG{U>ddL}@qFPjQk)txAemLn7Z8^VAgMS~(8!5nDuzmQQY7iKD zey|iw;|0dI+X#G#zy-tKVD6!}0z7G|t*ys8LJZ5IO93+;UJqV2Z$89}28V>sv}D`< z)pG~Ep`7J`(cc``eaT&e$r$>vS`R1s9}IKf$D?t;^n^aQxCO2tJBGSq|DIXFQfzTG z6!lh${(^8G?|%(>mowTpM(9h45k6Gg+L5_=1yEVO$D z9xRxUOLaVk3Bn?}s5c1v-Y=A-DNR{g4ySmG&!*Ojb?clffJrvo?4@?40rJ<%M_*p-(Ys-(iwZB0k z1%Op%2d<$tV-#D`@Zl-H%G(E_BOG>2ZOq?Pn&Wm zKHEs+k@Njd3_QT@22`$nnu~ErucpP*c2RzvwVnLsoOqqU`BS82o!jFZ>gH4kd-!jz zE)Z#XO%vyw=`2fmriZ<$9xe^|xWv%QwFC#mi#DOTS3Z%~!sYAg?58_M(O_fOEq}ZK zh4gVN04|iV2?SCl@w9;jO6RtJ=mJf>Uv^EJ!|tGfptjDvzxkOKCOdD1b?`D2dqOSn zIg6Sx-c@iuND3BIh?jUDGs$_kG!93Wmy~NnAi}U;*A#aOeEqf!{zelI5svEO;fmG#v%8-iJAZtTLS#kjxvpCms7F5|ek5Ut2k2?H$U_Ax84Z%I zJ-^}0LT&mBwn#^MW5LaGuNmVb{4XNZ-l z#a;Qz3cQ6IFk}%19%O-3QJGLUTv8GG_uz zQW2EF;>};c^PzDFrl+&QDSsKqfdn)Z7|MVU;77uCX7%P^IHBmmLRcKw#q2GUSJcfn0k>JLAME`G3B!Nty;a%e z4I>|U_R5IRjS2!KtGRiay3V_%NRU~pc7+fJ`B}1Ims)^h0Is`!o_{@uSg%tm6^fR^ z;vu(h8X{-&9tc2rQ(lIlIFjb39{q9DjZQx6x`LeZ>upcKT&;ia7OGxPGTjYsg3w(F z$T13Z2u<{c{9xSA`!)Grt$Cgy9ZfdV{iMC?-d4Yg=eshH-UWTv&w}VHDJh`XblM_V zS{2C{>{YBoi!})NkqH3P3W7tQ921Bhy=VCo*m?3C?)8NYGCZ=VtIn={7Kq=W%6}HYUX!P@DdU5ixpFBf`q^EZLp+4*pBwYX%taIjNCZ;c zDnLWdKqhXI>)TO)mf3a)dDiR|H7H*J-ND4|kc?grqlLS=*~C`q2D>_(%d@7Um|4FY zz$^{fo#v7fI)~r;hYfFfEg^vVL*0OcTVkybe?WRl?GV2&^$pNp z&;qjS&)p{~1Abo=fr+^gpar*V@*rT-fU(U@0Q`6yjL@jH=I!~s;gG`1+2J;424^lD zmnfSp9rs%B!Mq0p6AhJMZKQT~h}_>ad|Na5 zT>wx4E>bg!&+u?eEybC{h4KQB;V^O*FTNKANYD^2Rx+6|HSj^HyVZaF+ygxpQG-wc zgoahVhl}!c4U(_F7?;}J+ZEm$-C>hef5SugoR4wA#Sx~fHDCn*`dUg;q(H#TidwvW zH0SNjSC24Z3^FUgt;F>X8mneoccGgq-cp^h-Z?>=K(d`j*Mw=`;xF;c&ri9Yt-z$3 zLghDUx3zXeNEA!Lmh3p#Iu9aS?|x>Bq?8qC&_CDJKeBm+3XACoY%LLRg`Zkse+5=& zB$b)npwoa+B?#=4FL~!oS|*VW8U>u8<6m!r`sahs95go)RG<)7RsQ%=KG15m6frou zR=pKNPEV2*Wzs^uUHhhrFQ(kJl{wkZ1yE0ac-!bC5UkC&@cRI$CPl%+erbRw4&c#| z@Yo}US8-qI(?}hIO0U@eB)`v;lWi*(0T7dgD>DROegdJByel06=#$zjA%B46wEs2l zp62$s%=`U2eTz5Y%mQT_SQL`Ic-65jGy81{_g50%zd;RJwBSaNwLusYXpZ8Qr^P4( zwpQ+=`{5{u0_n;fkbgD+^tMnB#L@_MkAPS@J1WW)k6_KIbDm(;YV z4K-z+aFN;+6_{awAjP_f3ziF>hv{^j+De`ijgXu+`NFf&aZ1j+=6{KdhLFboAq#GJ z$1Qu$APdHUWUJtQY_?X}kJO17xz;|XK%YC&1J7urE4zLlmfDgx6E0I94aR*WdCo$! z4W28$Xs!W@-;46;zF>c(JHteo0oeEx3P%XM9cyrb=!tyXLIMgzcdV#C zAOmf7yS48sSI@2rI)BC9U*Y{h`Ia0DplNvFDlmvpb}c3aLQ_ zM~*5;zy+M0h%1U}izHxS%4hif`E5%GDd0F3(W1-bUqW+tSzA)`yt~&6lX6;Y9YHNI z=^0!@#S?=|1dySPv+^axw@3y(`A%>YZ(3>U8EvE;zNf*y06!MF47fg;uiRD=L&EK= zM!d+JQC7Cql091tO4yos1yAciB6FvPuL)wc0gZnjrq4I0Vyzm4hG196r` zTm0_yp#GHLB*s;$y;9)r)IV&$X2YW9cQ4oSdBE=Y!PlyL2=e@NQLr7(Foes~uB2Hp|=B(vOO2 z26N|F4#GWZf2nvhx~=q6!>LumpVi~tF_5?f%Mz-jcN z))N83N91wjyWB3g6(R8gpnm%Vhr<{pCic&{0V~c9>6;nh$rB1Ge}eC0TF9|LFulcObxqK6E2 zavw>^-YgYJ~S!oktLOL`v{Sbv_sucEPn>T4sf zpJFj7jrsvNFQvEA=1?nw>a^cui0M7oW#hh%o~=?vpcjPgNouqC9;%(}I=`KVSU6(}`j+FO)-8wzeIC*e!w z3WDS#cbl#PaDBh4PJiFIJ!^Pb^6rAs{Rx+17lG<(zj)0)-&KF$kDI67Ty{C@M04@6 zfZhD_LMn|r%t&ZPU&i1))++;2dwg2CdDazT+&;FNYRK|P9M~Pb8`WlDy#>O2cK;An)9a zuURWh^d))9v+TK4S)s4E7)ALQog>;c2lNH8;o2(Ra|#+TDm`RVtu1yy<$x@?>-%)P z)bHZlTH~`$vN@Ip?IEyej@M~k83_`^-yL8#E?ojsDP*J=D#sYzj9C_D5qjEF1gSPW z`}U&Hs$z8I!++U~A9UbHpAeE5+Xm@QbtLt63i_fY)|9}aFA4DJbpc($$}^S3$j|^H zRrLZruZ?F@f?O9xvOadGLM?Ato%?Ht=d&jxhzo#$no$!lNo~AHCtIy z?ZJV(UXgo-vnFw`g{CKexUK8=n;;GyP$-Qs{a4XLnt$%|4G{T3y?zE=%7VRxK)@3Y z=EG2{87T9CzX(th^$Z#F+Z15A7%8cGj>7 z^G9!*1b-|Dp*1@okryAI2e;N-Q||{rBz^1_2+4S38`fWKpBL=GLJTn@9@I-Auga=` z5-P1|S*oTEhV2}7=9syQ_TRt}av81QM0nvcnRr0y|{lTwM zX?uoCUuwL+3#JFk`SkwDrnzR4drqXu<4YSck5T=O{8wYVr>Y$fl7}GeGOM}&;+1TQ zCqU$SSTlQJ5zkx(A|TJXb0$A;R71qB0TG<@S*6myK<94JNP&2|yN>A%P-6piqzSoE zsDFxC%h7-@na2e_jd6Z|g?=)Nik;>RnR*(=8o<+j{#_)H90?H01hK1H)^t8}P4dvR zOznZjY_XN7i1oR;I*zOjsKJ+v`@@iL)fL%)1NHOB8(nOmvAZW`{Y@DhU_V7O)J<@M z`X?^cRF}{&UbVaO0WM$dCm)J3q+TaTE`MTX=zDR*McfDz>%JNXWr)>>${Xl^ap zjY3fvejpY=@Fh<0;IPA8Lhz@b+v#qmZKQ#7e)&TDcGwu*c!t37^bPT<#cpphDY3aw54<4nUzg?FidP45m4VzZtu?Acx5m7Z}79B+J~F+{qZ33 zg`U9`Ba5fI)CQCXu(UlG<`sbin|qlmeT^!;JNa5jpHOqCWOnl2=MHo37hQ}*n;Sv& z455zHn!Dodm~z>mC7?lTvVWh)8l<4T)v;48A)KkX-HVRr_e$UvHA9_N2gC;w(KpKO zYkD!yHTL`Yp>4(;{AvmdAsWxkNwLbT_G+p|o}_lIl9UFE@UmsnK3+3A>V=O2#_!r~ zy(JX?_(ny09~`k2pz{m2n?v_mqofuSx>rF3?d!`0`iuFVW#wzS1b^rC8tDV6ZF>!N zuaCvQmoXJ1k=D%O@<3FAj3M;9Ed*qj0BuBA2q4lPu;bl6TV`aS8&CY<8Jw)Y>Y!va zUEU5y3$i9oT*bq@&VMmc*)3nAy0>OVf^|H<>rYLI{56xW*SHW~Q)a2Len&oep+pHp zC-#fXP|?3F`HLi1-G7NJj5q9-+iTZ;vQo5^Ff4(Y+GPxW0DV8%%aqmOcNSUjICYND z1=_xrtB=WpI?B#{F+#*r55Ob7j?WYZH4-0W)+?!|)Ay?o!0khOx)mO*wAZp^GO~?= zaF0QZZ8FQaTXeom2iJ%J=q?>cAvo{kG-aN+s){1z^Yi!pu75)N3r$kSepjNupu>4F zC?DS!pfM04{4T{;kC&eUVu`gu#PCY@bJeY7nH3?3kL<&tss93b3b<*|Too<-ZO|3` z>43N8I=WQD)w0SgVx}Puxw)Fr=FV4(SE(qo5JRn5I4KoYQwTUFBxvwALrtQ$26l4+vfN5!nAi`#7Kooy?K4L{u1x`qVkj?+idFtRze69syP;!2-@$aSen(2`?-QY1uh#FKDpA*-96@euy^*N&Tt0bgQrx&K zOHci(Z-2BmP@$d-!udQOk)Bv^2CHh1ya81wg-#H%Ryczpoql`7P$OA$)KkPR^nL zRNOSaW3MXtC_8xAZ?os{H4!f574~13nss(S72~~0C&+Q;-6d9Y@uU1vSJ!iL`)R7$ z9NM>~>#x5k+V>g0br=;guWy++zM^OXkNnJTv#N@Pf<~!ZHttj#QLajaWdG;R_XwW) z8-EqineWu|<&4osq#AY3K!B7;r@&SA)MwS#u^&6bU_y>jKm*lhPJiA8sjnAhkCZhC zLm)yTQ|#|WS8=#Yy8FEtKF1=j@hZRkOadLl=Eu3$^E-@jUZgmX#GVts^iFti@)v<$ z<;`!{Jn1!T$BNU7?RVoRA81)mOy4BKTz@#o3N8W^iXd$7FQe=yT%-7x;)<I>QVOVrvAraAOKQMVl2F?qth!OkWdu$*Y%FLT49Yl3fLM{8bCY#V^ZFB#!{&&f zBk2>emH$X_PfXdc=`KIF0 zPtAh>>l|{358+54D=~n!UnVU`2I!d>JQ38=cnx6|#<1*9zpsX*`vJWr4S3Eq5F1*l zGn)l`@c>YiaDj}ZP$+x>#kAAABY(059_#Hk27>qD08BG`{%vYHUJhGcK5m+t-K<1X zuM2QQWZJtKH$3G)(qFk2FD55|rY$QOo7@k0zUWN3zsUEi{pL8oBFdy`lh9r~5Cif4 zVw$hfA+Te?Qpd&8zHVc&lwnUen(<0?!ba>0%p&~*HN~f9zqnRiqY+g7V1HwaJTMIy zyb-sX=N=-b%-*LgKhHSIQXqgjzaH|sIaR%r>P9frctfD$bhH;c$-v zicuR^Fl{X#WiZM-zw?_yQP82TR8KD}KwIQOMzXt?u2kRy(OrbD9XBH|!j`tDcX90f zvP$2J6R5*7W|{#fFeujo=v4r(DSoQL_>k-*WSiKD;?yBF74UXkU4LFxjY)()=rREm z3n&A8TI&zZq2mlDHP8mjBUh)WD@JbnR2Kv+EPY%^mo={d=XkBu&m`*RPHy#3 z6ArNA#J!138;&=~GM<$a2enP|hnwE;;D6bf`Vj^*UXrc6f*T3cN78{@_H1mGj7(d) zpJlY;qW5Jya&3`TEn@Tpx_LRzBeok@@V(!dk_Pg;0U^d2LHK90-0Vt=r?}Klkl9N#* zsdaq}+L?NEz+qh#tUk;%wAkN8=4ALf>@oYnFn&ll_zMZX|EymXpEfr=swjWKFd(Ol zqxxdil`)e4YIBZbppgVHH!}Uw=?uX319l$l@K)i2KT1PNNJ| zr{hgp%wLgfTJX6{RG^!6!qDSUX+Yt=%lo+Y_xd2&^5Jm}m9% zNPr{4pl2CjDOAbl99aOcRUb#I;Ugc3fqgMK#C%b>N-kp=pDG!Mf~kxEvA>1dQ<|;W zV7;GK1%L89){D4Sc<+E1${!5=g3ZRzpozva?19$mwLd?VJ{-HPtoY&= zuFT->-h_7P3tuH0zT~}|y6f3@*fEm1zGvrpJ#fji=V+88$N;K&ABtp&MOP&4lOh|y zhw$H7JXtHCTlUe0_}jKXzt^hPa&+L<%aFUXW`9FG@dN!T97ZvQ+m$ifZW6$|mf}Xa zDVD@hWY50r(l8cnDgouDhT`~u^|9nmD3l({3F0rXnb35?c6e>sbe*&_TMNIZ!wR(Hkayk8wwSIu%tPsRziiFK>10=^b!bsu{?t!z7?Q@tDE#2GljkhC)qiQ|N~(={x} zlC%fRou0;ce^2=_A-bPBiXkQ3Roj>9$MY-(piBz74XNitFeDy0-A@zkdKJdLCz$Fd zNN;L9e@m<>FHTJEXRvgRsezaHngRYfq8b0%T&)Khz_z1p!MJja(|;ALt8Q7}Q+_IpYM4_CoVV*XvPxAi$0r7nBwIExvN zzwaE=1YhD0i56Zl2b;uXfZ&3?KY!qMexFcbKl}+8GedIfqqu?UF9cfd$syK>gkj2r zbsPCbXLrQLruxEj?P;hy4{w8%h%5vf0M+QR zP57$1RXv`Y3aU1Z+aQ& z3bar>9$o!Hay}6gxn;IT2!E)FH!yar%8Mqt!muaZrs_BPx@}ibNOf4%OanxLWUJUQ z1SYFHgu%aQEeLCIKuycjzhth|edi$5_O<*DqE}^uua@%d2s8YVr8UzcsZ)jP_L3LSlTOMpsmVo>esR9*A%7~lYYn$+Cec${ z$#)iI+%bCJ<`Mb)qd>w+xmOQL}+1(VNBFldzR%w-u|2Sh( zR?t0^u*$#vRjrf^sr6@~Bo;>)}K14+tic5f` z9EPvQnm`E0zX}`V)F|SDsDXv8ck_J%2GZ_zH+KX!5iuLp%lgEim&zh=`-^j^ZW$VA z)K_M{fY}Y+Kk_TQ$Ja2QwU2}5WS9+pmU0#2bVIejSNTcW{P$rub z%~@I@_q}*1|I97|xKi;Y`L6X*!kD$w?u(!EO18dg;xH&klvIYkPQ;Dko*x|ufPiYj zi4yhLB}qow4x;lEL9P!h@i8kR24wucD6`b=^%G7L_vIPUKpIkziKy3Z>pit#Raw0C zMrqZzCDa-9nyY``VN$=(V%-XAL|(rez&g_L6DNT^zS1w*Kia!bAHg~Ixdj=^wpd*- zZ=cWllV0=ik;~pbG$QD%iPII0dgh%=Yt*&%I^o}Y*n+~s3tppCcs3|KpK1}#p8BNB zhric`1T^7hWovPNd5cZ&E0oAj56d^ODHIG_j3s?Nuz-Jhi`S|?G-(e@s+hCtw#=~tpw2qr>Z{{e6?mRR0s zo1?jGeYe(j#;#K}W}vHq`y z|!#G4J`xE-bfF=S{LKfufQAxOins{3oq_2K(P@Zz!IDMq0mULVOeM*k#gcF-EoEM{IPQ- z7`=b@F7MKYgzD?kCaM&_xfZeZvC?Y+ykcCMLgwS~FUw-!qv}REkxr^?0kn#ArlN#Q zZ1b6MGf$xgba5bdQ-mxBbe9!9@Heea^0z67QW5I9M47==6$B}ebsR8*(0=y*cwL|4i)A*vF? z1zX$pK?3GxXG*9D!5ksE{s^-?eXYfQf+h*L=pVDgV02=*Ry+*OziFC|6tJd8%PElc zXB|xkX^?YK5_2H-994<2U0`2P819!RUEs>E+&KrN#YoIFRGw|S4TB#C>CC&j5Watc zMfG^uGe;>09&bCAH)meLZWpe@sIVsucOWoP441neNXxwK1@42$H_r$5(wiEr-GIqJ zSauUb)DGRT5!njymK>+ff>DKDIp-EsHtki?5DgAB*KAfSCSXB4a~lsWyK?j;;pQ;< z^x6hkNKP5=pmlET`_WxbJTCX`cyE6oT5TgSQZ)K|PjN}IV{dD^iBnCAi zNNng28rn^!e^UdVmtPHSCxaZwXGQ4kU5;!h`Uij-u8Oo6Ta`>iD>mGT&M96aTqlI~2AndO9>Ua?CVPy3KvUh8bZ`wa%m<@{IjXtCZ!fXQM3+W*W z_AMX!EUh4-`(*Zv@$_5`Ao)m(fInbR-(jD!4q>|Qzb`75E{qozGWmZwe*FTrboRnd zds4M5do!lss~`X!R|HWs!OLqRQ`4a`G`T1S1=*@n*R?DNPOTs(NGaYQ@zW14kUIht zb$P!H(K_O&#Msv>&rNe(v<>@h?>B-)sj*Ac$lr zh5$n%?=o?cj*DX}{4IY@zg7&Y7MhW2LD23?(+`T8L}5q|ZTil%iWT3Fv`~nQ5ytjR zm;pZKX*LXBi!oGCwKw!se2rm`Ux}3%ACSdx*Q?l6f-eq-WOQNhdI?)jC-9TnOuYl0pcC9g#pwmL4^w}EEG9W&W!NaY9G5nw zCw0Ed4j0yXKN9>^5v5G!5p#5qJh4k2Vj5mV%KVolyWP?bWUj5%>jLkl2##A*1) zKFxig5du|0a}qT5Uz?LQ2EIoz5M9CfvsLiAESLt5FFm3_^1(Av0D&?DVkOeX`NG1= zcKOC>LPMp<^6`I!(zQI;R=V?(RZV@5z#>B=)ntQH7B(bHsC)ihd2NL#0-(+Wy3_5; z1Cu;hfvCLYM}qMp#PefFAD|Tho>Ojh`Xo2S73p?dH0W|(`gMT{myiH&3meA=Ni=Kv zD&inTB*K0DhI%PsBYS;3R;aE9|~1Wq>K+QQ7bPskTuyj zn9eW>7beb#Iebke3_EC^LqV&nC$7w32k_m#LpfJjWhOvMxdJL_WiH|Yvk+{mth;Fz z7vTAqwEBN@nGVr5)w)pJ_w)NMJs~BCWsa6{1Af5JTZl7Vuu}3sx()nz$EjOW?(frn z#^mo)AkGM2v*W4escz*^IlV`oVcppCve-4}?J*cJ`Mym$9RL@Igz3Bed_i%2<@bc< z9Ox>fZ!2240b+)Zs1QL;g=xhx_d%2XMoN&He64?k&LDVy7<=AV+o z%U+CC6aD0#^ab;qrr&6#0x~zH`=yFd=F4M?W9;mtlt)h@8&Ey3l=4#RIvj&EwEj*_ zj-G!=<~Z@mIA(KoxUp!h{rz^8X$5^MOt(Dg?I<98eV%($u_xhZR%`8@M4!}G-`hTa z1hG7GxNw~GP?r9cfiN`-K74WI@#v_wp{L~@%V=h4o}bo)Zil5ga&o}%Wb-mQ3!vMH z#eTboy_O5B4z5>YUpkE@Y-~x51&LEkRg19Dt%2EJ5-@vZH2+x|MGxx}uZIS~y7JRG zpYx&!9tuHHDuscO9D5GRfmsiRD?jrAFcTT`5sZC=j|k|vsR;5|C4ZUr0ajm9H!FVx zpxB~>eN#1ml;bX^M;jyHLEri+OCu(Ua^?_CTW##0D%F= z@$&brobkp+8yf&f#z3awENfq`va^T!INt+$w!LcpZy3@SWIS$A+XFu z^c3P9mp8e{p18cq24f_4wh~X5Ca7>eVUmk(5%Ty(9Iw2UED_91)jU-?N=1)b5N0X> zXABsD8+f~?O+1qCHIN@Adt6?S_D!Y>b=@j_I>76Zd3nJrVP*{$I>kOl25*0YvCu8s zghE`VQQxcFW);+Y6-qF+#Z$Mj$$9j348+FD_4*>y~foz~6g^RgB9CPUn|}4AOLy zmAk(V{dB13f$ZW6r@792#KM1@h=6l(mh%ZL5y}5C3anR9;t?%Cd6C?#P( z=GDJhn)_@c*yvIYr4AycGBShiBx}B`71l|0wRsfdW^}0i@y_ z9)WumNC6|XPXhF`&XS4!u_hF;t~^)ev+$U-D?#C7>vkiD4+$s&R4*_b2xkm$3p@LH zpt!6qoA~)%L;XM`h17o=eK7XHl-Em$B6Ln67zD!0!*g~)*Gcf}ARl`V8sED5%S~DO zeRLF7(Bj9t1uQeBj*i}epJ%N53gi5Dt*Sad95m>~Z${7(W9NF&(?Ktlc*&5McV53zonXNWm4a+k(<-577!ZO?ZR^u^tygTLQwv=ZEw^76*0Do{bk`mbxBbXXat>=`+`jB(L^Y z^0g}3n{as8c3B@6QS!$4U7%W_J=&s136&{EzFvRQQEAFlRR&RhL`bjh#u7&z{s9d7 z)P3cv1AEo~Zr%qi%Mpnat06GdCIf%>c}RMM8FgL?!d}YbX93cl9S7{}1hPmBy&hN? zK3jzAYmwdEM)(A)Eys#}hEos@kqW`y#&dC*T+t;99>Z>y>7fru*5t~^6odOD4G7np ze(HacU3=z>?lf}a`zE##rb`l{c#7%WXGm3up)(~edmQNfciBcLn=aL!a+RXDm{zEQu7;`68nHAg-?LK0T-7XPDs3ivBX;)+y_v zU+b^5(sF>DNA8?m&x#Feze9L?(0sPf;U<5BvX;)$z3Z%g)1>GW*^jhf#96BZ)mr3} zE8NRvXrj46trY(b6~x}doN`Cty%7jV7$EyM4nfyKd}Rh`Z-IYi&X8j;467y=DHi>MoW@3Z0gSv~Jl^*$VRo&L z#GpZKi|4Uzco*R!ec%zt!THU?2q=ru{<+Z4GIu(AUuBjDtP3(MO%pZ81cJlmbTsLn zx+PmFklA=#OnFAFV>kg;W;o9FVl5MGYqbgn3It@CDaOozjzj+VCkfd#4u5~|^hY*V z9P)dhzk9o>8fWxdmJY_}3~C`UfbIa9E@6B+UcIFWF^>gq-wiHmz?T!+Z2AxDei<>d zzk*{6UBG_Y=Iq(;x7pUPrL6aWjQo#D)z54rfM9XHB6Y-ay3xJqb4;XZDsUu9wo?^! zL5B!ff~)yC%=afk3cG(!Wcq(O)XV)kV{65Lay2@4vR68rY7`u*)T`m0-{Akf+eZdr z>x+NOkKQfn`1ydsf^CwtWTTr*J_pGy=nQ&(6Ar1^c;3#tU_sf7a+d(T<8ZPYIt1G1 z6Xzp4($e-UJ@p+x>Ika5X!l^}mK*#_pTG&K7htC+dl%nX3@dLOAa8$yq+cIeHj+~e zd4qe4a~~6Hq5tk@2h32J49TqtQ=f2E1NxEDRs^!Xg1KV}$-%aXW{X)5cmo#jjwu=t z9eFtm+hE>f2HNyD{lT)8R!k5}Y1h|Af1Df4Cu~=u2l%28*To9HJo`B6Jed~K2laC+ z%sfX#(EG23I$5fiWI2Diyxp2zD0U!2_?U0cZyMsMKr9#2)v_}F*Nii#7e?a6+9YNJ z58=7u(}!QAB&^V?v*K%ZUZ5b0_U?Qx>w-0&r$s(NlQ z#okF4XpeBL-(q+eWBV|zU$<}Ws9n@KHQhY)XWaql2q*vtRQi9Ajr*w6H?9t_-Y%Jw z>^$riLlf%zUUeIfPt2+m724|bsvmaK*fL|P<1=Q`<#b;Lu_AGX_MFVmvQ)QF zf$N1(eF#e)wNt&{!X^IuYi+CLmh-r-5vTQj$LVrsQ>_Yey0$C=CNo~_bXwtf_&+{c zPgL|p*D+Q7CLMoLsJB!O)6~CIkd`EL_g-&*m|@VtFk1PRPkUEfIKM<$JB|D50`cfq zrdq{_F{DO_QCRBZYj-=>L6D@mA@Vn9?~0SoU-C_dCEuuz4}z7=?4q9*4q`SET%?vo z6*L~m6THkbDGS2EJO`MoL|a+1zivQy;r!mm2J8`wZvlTYnJ{RBII_bgH8yx=T3IXl z0hnkv1B_Gyo2aE5p&p2<)Ti?B=G66x;=bDwa_8@}OCum(niyouv-DHozYl;I%Ia4Z z#Y^#q9z6j#KBN*NH?R>sU?d*c-~tD4dw%k=wyY?*JT0H^C+&B)5P@I23|Sm0!~Kj% zWtc8Z)Ixu)>21(&>j1Tq-DJMQf|rixChzRr@Bf zJfS@IYt62L?U=$$h%Xv-b$^h4ArmC>ro_Mnx5Z|Hze%)4|PrXSvG4PR8-UF&~Aj|pQY=C!y++ibtvW<@IZb^(@+ z0eR>Mc!$rry)7W<85!;+sp2jzuu{J@)Dm5+^NYHew3Q`n!Uc}u2UA^+tIsg)3T^QV zZX)e|023SlzM_*1t7Wf;LW9I{BkgWCC+hkzzQ12z7+#8wc?7v$8j#QH1ndP4E#F05 zRfK;m-T4C)$nL${AM+u=+7-e08Q*U}$;7(ah!-zjZ)ds~aZzuaSF6>QRoXO~w^PwU zyhaJYMUFFnh4r9*5%hX*U>O=m;pmdgmJj0B+0%Z3FhYOoD$ej@J4D*Zpfi&;<2S}2 z*!_Ce5A}~h( zr3)C6dRkm6z?F>e&Be7EVG#&E9yKJ#j6L6?$9>N+7FcNF;4dCPlA7TkV<}C zPs1$fg#$!sg>J6^8I22&S^4YPB%~XPszxihZ_<`(R>8f{zUhtZr;@faY9YXxN+g@T zy=WIAt1iQU!x!jU`bJ(;>{Woc5iip3rPhxcEYlm8cc&D1FJ9>6ly=9-F5Vb0_yZcE z&Om^E-IhOJdy(mv@n9o-y;griv<0q9kT}DOPy2QwQWkru71l5Cz$W(uKuH*en+Faijns z#VKd`|A`?;L27DmNdc z6$;Tiz+^?jK)jFo{778(ajeme&s1K1s|Yxtm2ic))Bipy6E$f--DeTE4uq z-07G6306g?;M26T{WZUf>Gg26Z&M(T1gm0EtnQ}hvWmCpr)+;C#fZWNS}RbLKCt*L zX0No4VxS}ffe$>j&FrNEg;73qDcIi;+SNZl|K|D`dg)68=&K0JtMCeW|0q)yk7a@H zdqMnM)u!f~kOl6JjT)=S@DY>Zpfjp^Epd!@7AS7(j)tThNbBb;va$yCZ}xJV>Kih< z<4zV-8p9pw*`0sRcV&DSs(3xn4zsuYnT9eN35`GJo@LX>1$mU1kn*;s7T%6YBK=Xp< zc9q&1jJn!?_cJpCbXT5*A1>q-ynT-t^&$iv%@{<0jXr-6JSRXc)V4LJg;QK=?Y#QZ zo8%_t()>nue^tzXK9)v*)e-)Cn39QbeQZe98e&{zJIN|#X)x0_-kXz4MZ#Zy} zErvnw^J=n(#ePwWJrjU;MH7FUSCdDAd<*`a=peK#8leKOv+WflVr` z+B^{xQD$tvH1E#5S;zv4G5{s=i}mn#JNu$mvtrt}a&OArrrWJ!D{U(MZE;qPWQ?7q$ib;2$Xo1DMiY3hY*hgJW|K?dx z8gD@>`dRH#7kTu-?teNz2wG6!?>85DDxJt`8g`d-PQLk^dhgui@5{4SIL9ly6-)oQ zl)?gnhm{jb1ISzc8h(3TA6gtL!1x+uU^bhUJ2iht-*)^J-dZ4U(GzmieH2RBYWRb0 zJPUugJ0-V-^OJ#PW3yTI5zq^&b5#=R`i=KRP*CrOMLyz_sEn^D!=2Z=$xOUyxcKdp z1VkdfWt?KihJ#k7YB&crWe9Ju5WB!_(Ed zL4v~asdix^fHOtU##+jtSZvJvllT!Fz{!7Jv264BazRErl@>`16rcRDb_#aCL0)2H z=18*G53<`gXMHf_ICR%Zn=KVXY(8mW{?xx$JiX1K7J2I-3lwdBV9Z_L}EK8!W2b6Z67PWX;Qw-@$%If(swe zTb;|u$9~Rb>E7|SPf_do#!PeM*T#eB)@>bnW7s-k^#&^wkq+-JJ`>AV8r>$9qL?5H zyJ$Fw;z|Jzx1o^;z<-(O_f8Pam}-BB9#s^C%ceo6z1fs-Ky@g3Df3?Yk5+57m3GB2jXOX@?1AqNFuIIj*>32i}mj#e5T+mYc($6;C_ECro?tUWf4H@tGC_Xg?-z;!OEqnBm9L|IgYAt9VIyh z?RLy!-Y=lbu)4_kc?JlT|7vNlv}f*6EwteZweir2_cO%o*o&Y^Rx$tzSndz?ca_L# zqZN=mGDX3I18liXSUvNAQ_b&vua~K<8DbDf@(}b58r%1Noc68jy&-=gpb(oxy-&ib z9+zn4qw6K|odz^I2io>9x=ZK<1jnQ737fXr$pb(o7Y4PKJUs+r)>beP>3)>r)YtB4 zldxRQ8+cE?1?o7P^Q<$Qv*pgXv)fz=^RqUDO@p?df#7eq;)JWJ1fb0`s_c3kK^KB| z&>yyzw7Bs81PDPbJsW?2r9JmcQZffYG~`v!e!G<8KdCO&XBLms?k!PtGhm=yi42qv zn$&0VnMW_V<-0V-IeLB$KrKOf*yP=F9sFW^xvvuMZ`I6#2_9EUyfd@W4qF7#Tz$U* z2bTnGw|~+%u{?Aoxvd56fz%+Yy>KRgX{?1T)$91nK4AznpGkkUU#goRFLr3Q$FV>B zin^Tj{XT@X6`TwP_NUFSO9a`u$Q>pgE0M%{NU7)Leqs`iTL8htY8!`COnZ3JWlPvj z!u{iXEiwHWCrGa308&58F#u{!e+jK%&qjIb?+#R_L-GuYC8;_4yu>|wf7pl3N3M49 zUe!|FyCw?9xPgB&aRl68(aK^aRw^EFa8ZLfid<6A00N-!8WL9m!cUwEOsXRX8$yXv&v9zG}=n zsuJXz;c6ietd=6G5TFd(n03mt7O%N*3oFL7Jg`KUduM+tfY*lV2G*NKp9B!iP~59u zE%{wmoGZQ3%bwowRUMd`Ns6s29J7jYJlCBuX!1iHW403knPT&NnbzlBxmK`Q>~M3` z@tVXfSplGUvj4u`Xx-msVWfwQ1$jJo`%q~u{Pb7Xs-z^)Rs+VmPV}|FB>S4{EiuuK z&jF*?HvoTfa7GxbpY9{j{PjLvQn9@@w-Jvm8yp-EfI9)$8FBZJRsX~Bx5hW&ptuqi$wede+VvYENk`G1QxzQir)xx9I@)pz} zJ%-Crkr$Js`Ph;n>*Y$4%9HBhfTW|nlxBX3uq%IXSm_UjO z^r>P;IndoqR9GY22o7MtO0dcmw1kr8$-`!B&g~7qN!M$OAJ|xWFW;wF;@ybATf*`1 zzsr^lm`*)7U*CvXQ8+CBfUE-@0JhdN6pOs*c%hu-D!*02L->Ed z09+;qR5AWG;540)NN~PcQI&=LHjVE^GLFt@?hQC~tpw@D;QvZGWv^-%P#B!U5S% zFK;%LW;%dk!stc@jijQmZA=*ckE8QQaukT7;DK1+jh1-tL6{xhJAs5b{ZxO?vST8q z)q<+}FJB7T7J~{uX>x$rJP#Y!y0@wk7%=Eqm3P)+VBX|?=kJAvP^qrWRj*+gB7T9f zyq6k3K*uh#VMyvm5KU;MLMk)eT|yR)0qLy)I5K~z+Ginp>D?brKhrV7S0-YR6 zm$`t5@&T;VeQHpZz*g6FTq=K|1`A53a~i%N11SrB@p`xdMXZS-(QQb1rkT%@!ym@a z2&4{)Hb@ytO?{qo^36U?~SVKZ_t3=wP`fw8}s^WK5lXSjISb^m|K51oC2)kR}Jig z$AM#lZ3IYWYU)cvvj4W{1z?FL*Sj}Al~&(3uD5eeSQ^SDOIf2v!IqZlC_g>pH7D<6 zA66EmPWEftTA1|ra?i%o4RctBMrS#&@sgM}1vQQD0Y}HadUU8x(rWLVr7w#e58%z2 zIJVg}ErAG@Du{>i@EdmkY%6`Xq}t$<1{~nnx)KjOd5+#4eb4G{DA}> z1O#3~`w-r9yJBRXA>?mD_{gX1<2ljD3g|}hv_oP`s8uZ+`*}!>>0P?+T0IoMQqF%q;Uuym&voWFjPk6X z2O1)8@Q1aQ=(1@@uxCbL7heO8L{du*6o&yxe+(QnMA3jDfr#KDU26r!8gAgLRcs1%I-c=&XX} zi}S6sQ`Jim8ioCc?uYnU`sG$`h`)-W3g3|33qWlISO;#I0x%OGU4du_4#@rTOyFWf zRdt3;RbAHu(ZCT(=c5z)SHXv2_jv_$G6|rPHX$IAJIg)6^SVF>f@s&qz>K7vOCJPW zS`<6_K0kj#PxO{HDN6ga-|w|{ceqU$Q`t4_=IIrNL_sH2h3HvI8Cn-HioA-k|8d*QD4avOhT0Dg_jWz4Ua>*&`PgkkZBtpLphDaj(5(0|{h-LV7nX`CHo{)9B10>}7CdL>0JJnC-`G6|lCo&jA zZ%~plxG2UkCR8%~2;Wa_m)CYjnUNuA7#77PZNxRAbW06s9YqGYKGYkq!L-FKP@A_>6MzfaViMKw4BG}SQBMGnH-5xd*F%qA-wxPv=j9Y-j|C2K zt?I;Ti04ItpKsA{=mXDp`B_77PR#n@Y=M8*byBGFk@CY^l%UpmMkE0Sj!0fX0?w^+ z^}R^o6s++iv{(DRITwsOU3aW?M3=|tWI^~dM8O10PaGK4p~)`h1_@PcePA9iv%2tc zUKsw_>sNEQ?DhE?ya9~IJ`R@;)w0Q3^ni+$%jVGJZQqxK3DjBS-;!0uNibWX*#28>2EJKUWh#ByORJ%nE-m< z%jfODQHUzUoka=!Q*C;3T#8daR2P5Z-u&;#PUHmyN$rH?)vg8K?gOMmMBp#9Vssl< z6KaF>&6)!W3u!!=7`=G>hd(O=sw|y>UzHEv?$2O)Yjk3PnpZ!R%sc;`L4MGb#q?6| z3qr6&pIec(nln^1$t8W`&7u`senN81-&pk+j6~ykIg1(9eRU^L63ltjwfld5WdH+O z=_3>*Q3Kjx)qov|I4yoe*aX(0u6cmmg{XH=pr4`H0~Qw?l^Ecz&nL$^uwE2Si8G1> zw9!6)v9s%y)-#j9=>VP@HFdnGDT7g97W%cuC1c)Q7ck@0yq4$7b7Q*~-%un%If z9u&3aU9g?AwB>sN^Lsiz(w1YZ6b#`i<{Rs=+N0c#kVNfz;)}YGu`53_b|Ig!%foJam7)DasnYeBfT< z$J99C5&ga)?CuFBdUm+rP#F)KE-2T3FaNyxz2T6uTRRsb+-$@whVWTi*a~ zSzZj?VFc&7(HzB2JFqaEK}W1J7k7{(HE`1?D5_bQ%!|(_ke)0bTSjTjcE*AY1-{ZV zu0p?ik99;wNT29|u)KfG-k2tVK}T>ae2I{In3oNV4N8o}BgVD}*dLnBn-vDhAKJ2$ zOOO>d)lj?MmhkI%C<$O?4oV4KCy3T`JY~Yy6k|al$Tnd{&5$x#VNyAAJ;V6bIdcU@ z>HB9`4=~+mMKb``r&cj_hEC5oIVhDzUXgAZeiy%;L#Ykf7Da!##nvI)E(Y*4ax?)3 z_G>y6H^$Lw?0+LyB>p){W#A`9bC@2n`AXp-XX6AziX}r-iV!JMFbstvW6MnYm+`x7 zN}hc3Ic=(9Hv^Mat|UG;ygZHwG;ohN>nkwam>@QZ$CVx8M~230*w8cdn^t>k)gH%v zIi@Bc?nT7#jnsc&+5!`Hzfzf!cDjuMi|X~o=aJ0xHW}j@8-G9VaK0HTLoe3c=iYR_ z4?}BZ_(b581U6&SCshv)oM61QlVZ`Od@G5?<-{U4@mI``@l{sc%ka%ZTxw^kAY9sz zOE;rh{Q~9(BtE)0yrXsJGGn{4755c6B;YWsql5@-L|#t|%=-r}{Ngt(bQA=8fZOm+zf{>of(&3LCA9g&InMMllB1%xS8#nsa5RX@`)){w#&R@TO@m3-7hm zs72No$DoGp_t&mZkwHaP!kQ*$`eGBhb3Z=fIt+iIp?`os5FoENpXlG>w165n2Z486 zUyu1@yPKW6yy)A$Si22e%Iek$utr6JCMf|6M+9=q5_RiqF{JKvg@}vZ8^yW?NDv~B zVL_FQ=k@Q>Ou^3uU|myU?Hy;cXJlbZ%$H3B%-Y`lYXPe8WJOQjUZB|Is_AlmMkRxa z4(xxI_2(T;HTeu6>42JVL^v?^1YajO=|e-Tx4!@0(nvuv7&MV)0R`Y-&GB8xymHE& zn9UmHw;#o2<{9p7Ft#*Es|KdWupbowM9)S^unz`TuF(sHHGdC2$g%V4X7x>V!%d!t z0L15+z`{OKUQILmRXsoQVFj+Sd=+UdP0W97B;*I$BqJn%WBSe%UOgtP`|d>qWJ=}Q zjO|Ie5HvLk59p3w3`+rx-V382wu4LL%;>1&b6`t@r32v8*4Fl`CC2$rBd={7iyoGs zoTUh^D;U(c`t@{*K$r0Ywr~XtJjmPaXTbLcq-cv&fWJJIMY2u602KJ+)gceVMHhc& z1l`4Y!J7xl71V)vgEsxG#Wasr$Gd+I&6O?=tN;>arE(&CK-P8pN8y z>}l>9B^~(D*Z4+O_cQTKOQv0t_AM2UA|At#R#!wFaGiPv_Axn&Ag3jA{{Uqp8JdKv zzZ4{#!>e9ihiS`NiLwf(Y-dVD>deZQH29s%CY`L{=Ml#&!a#^{{{Dir=s{ zH(DKvyt_T{gpiN-I%r$^DIU^pyUZI?mV?1onu~Nm{P@JN$6YCKfcZ@1JfDynMM?m+ zfv#_6yx&+XIf7sFZomS$qQ_qYU{T?hoRIJ8g#)Wsqq8l86WYacAU(H#CNZOsMK8&O zF*w4K787$4GOd}Wd)6;8T$g{R5ae;ox!Ql|>hAY+Y^-($E;*YrPVW6cH}qwqHMMnh ziNP^qcil;9ohq&;I{6rAGZ*RR{aKSOH!Oayav#^DZGnAkc*@O^OKhNutT|Tp72dKE z=|ApqY|kgP69?xr{Uhxz^1oX&NexMOE8Vx}{egVmWCNg`IA*~FkZOOd%SVT_hTEIe z5f;iFE%!IP0UF%shesEMjipmS2Jv{WIxZMoYE?*KUa{5}V^}=T0@9S<6ei0T0jmIZ z9NY}SX|2UY5i1fFWeBeU#YLNc@qnysJwN=$sJEYWrC##KV%YTWVfj=rJT3<6f%o@C zu}lTO5R+k&GWI2I5fy*)?@1#JbZj5CZ|VxVyqA+>iNZCkm78H>Ai;LiNfv^0h$mqt zMS;_|got&Zl?}Kc%%Lxm27W;ru(g9K5s(&z0OWHsTIgjcs|HNt$NSkqs6q8Ip&I^E z9dV-gL$8y>PW^D=+p>{fp?$Zcmt|F8 zZO$xVjn6O=IB*ikwp3w=q#@@3``ZSXL)}h)XCiSxOkjHLpLY!d>hYPDMYmMYo|TiMsBq>SN6A0c)`F;+ zGj7()j~acMz{!6g6y(1teU_B`V7SVP0*;idjtIavYC129adRy8ee&%nr4EeVquFQ~ z;Mjy3sBz^lXfQG$ZXmt+J&EGL9liyBU|&VfPjNMY6Una#h6FW_K!DffbC+1e@<ZK2mE(dT_x(n^IL=oKvD;) z8ziXZcNBfav8q>#z?0VBH@!rN4&>}IorU(M1ZM#BTXoXwrT9%A-f8C9#N05Hm)V*3 z-AB^`m^NC3!UUBu4Sm=ld|||Rm4;7|sX%2D{yPVfc{My(Wi96bfsXsUfZ!y^Kb3<~ z5?VxG^%Q>=2Z|mhslLilKtdjG4CcFPb@+sp5c>tVl=j$hzI!zrP`2fFGU4m(C!d-w zjHdBd*+G^?)=cOXTua_^7GAoO5?^WxUMbecafhb}Kdv8rKY;B1sP8b#!;5}zP8eND z9Y61ZMue1THP^ZxBQ5&T`b-XPQ5*2g&u6LX8_a(`P>`DQLsS=B?XTK zC=iVi!$zRsI{4Sejh{)sXEXZAr7~52{^w0IWaw#JlDo`02K^}ZH<8Qop;my$u@FzIpqcR8|W&f z5yo(ZC|Qhx$V;`b{mM!s{Lxbh-?SnD`qzKAH4Jmfh1@K2Sh79K4~tc+K(ufN1iZaR zAU^-FG5K+sO6+ws%LYVG+Gel($L&N`|FB-d_nMEx;5PigE$D z73c`mRA;<9?xlvmL;yVR^zEv=or8;yucD{zY*CWaCn1P)c>$T}$v4T^Fre!o#P5GO z_Nmbb7WM4cRWvv)fpKbE81*Z;D;-MO9T~&c>g{g1D%s$o5{3Lm#=sfh{C!coZ>`tE z=n_lc1z?^B@#q3wedIKMEchB$vxT%Z##|k<#hHOUpVGQDZC*Vpvwht`vj-_a21H?m)AmCBvUAa;Zim1Hi4Tn6Q#gK+w(V>%X7ZtL_GJ?F#KU>M(0lVXqpzm-4{-0S81C9R=`2^)H!FNm_E3<4=~L)XW$e} z^>bB!I1Ip6q!0srW#*X1w)wAFQwN)aDD}F&HY~>98>Z=lppGdXB0^oRms}ZZ#*~_2 zFlz=MvQsae3^fT~@naW`_T_*5{Om>&6f_({qZK%TTU`r7=T!=8=(_@!K_q0D3D9)gwQCNYS-?vL56=+KF1<}BT*bP zA))|JU5p~;q{e7`R=8AFFw~kZ$pa7y5>lK)0N#^peGv|l8sACoFVdYn5f>elboxD5 zj_)CRHlBD88=$O8Lf;?ORXkAwesOTt?Vvug8eMy2j>Pju{Q+Q(b4GItzGejw*N6-Y zjP$#0)rGQ&uzp_EK-hoa##Ea#{t9)CCJdRHb(9@5qzaqU_{FrnL4GB`&(s$902 z#w#W^qqj&(%l`YleWcoeZ_<7uMESJL)ePXEWjdx+_sM~pZ-}%Dyw+pZYK+)A#Hy#5 zegbY=iQ6M+DqGp{kd60M=%SHq6!dD_x)5ODz<&p)*!(+7O4k;6 zSzrUDoERDQw%zBF)@oL6H{T!uxB(@o6e)cw`vh+yuM1bU2cvt(&8#ucIk*q%iQ>6i zO&T919L|3`;28&e?sH+2Q90PDJuzN6;b844LJe^1_&7`65!)eXWsRPru^H zZ^ugsieHorS**-DX%R!UvQ+65Dpa+0~$N(eH z@MPt4--ly3S^YS*(XT4L;#>;;AG|BSNf<%#V{jjE=-*@P(Vs`u0AjYDmt`nZ7#H-@ zWYhJ2D(5Mz1s%PWw8?1z4)w1mX)vt+dWwHtiN1LZ#gd3>VD8@`V-Zt8!!hOJZ+!_Q z%n@MXn?Axra4#&0w2AX%1F5nhdaK0hiBii4AD)kUYKjXm=TvDF06lF+>Z(P*vyT46 z9H=(0VW@|c@eKkJd!Wc9B>`UT7OBQOS#L|`T|lW7KpxpI!9wPAtGWxOJ?a9RT9AK) z`14ZLtE!$;D6V$p*_JE*-f9a?Uaz+^UsKs%#7a$HCh#jb*vue6~`cl|~)a!@Te*waG~ z=POXjWQ`ja*eQRQ-Non@ZJWsy7>+Y_Dd50W=whtS7eH4YLQ)yO zQEuqCh@YZ>#R5o6LiG@9Yxl)Cbv3Ma;{iVQQ%X_}Ohr49?0t?+Y7SVr*SWRXuez>+ z3V(rmMU#Ndg#)Xof%Dr&MP)u7nmdS!*;OV~tHyER?ddBdfj`{hU~v7b_{N?(x`+4jQIm&&18q29@lGn;VOZ=uo9WmOyY$1>=i3|8r+MHg? zNppKB+7>WTSE;FfWc4{A2*hExodoSkN@o6mc2-{FLu9s8j(|D<+{4a1j4v(U!%DdZ zCJVuB7g_SV#}AtiC3N@GX zQt|6g(sueaEU9#8mQeJJ-0-FI&g>456!ev#-5Bwfr9whbKs)7;8v8}>uN#G>QscZL zfHnb3Y^<2@8K2`M*q%*x<}bd6cjW=g=+`eE@@f#Ms?Q{7?;q$>@8uQ0U(T-47Djsr zE29kP!=KPw8KxRgcXy$)a{&W?IntT^5H=feZC*lDXjk)>3cd1tMk1DoVtatqG7^g6 zBnZ1nR`>^Kl3+7Y(FagKoOml|M7_Vi zjSIp1+1$%aOE+3};qZ`{c=M?ytzMK^N_g|#z9BZIo?C!|LG9zB7Y<8TJx_fbT1_1x zHgM&J(hNYY->tld6u-WIxSRrs*otp?=p|ai1BsC8BJz3w3COmgEz`XCdUlt!ngFW| z{B6paY?JkSNZk+Et6W3Ozdod(ke_1xyW5dB^U5j`Tpe371C2nWrE(N!DqIIpNdHdW zWb#f_Zb9ffMQ~n5zab3$MA&Z}wQl_&?Jk#RQL#Qfwg#=dUT2Pfn?di(0P?cbX`l4K zlbi=v3mJZS=MR@S5>rv|lc^q7N5>_nuwShwtK&De8EN@Y+ybV!%i9n=K9Qh_UaP=v zaC%p+1I*^6A8}m-H-aNRG9rwoXI@UNPZH#Kh>8A!nJ>{p$~jjP5Qssi%lYo$X(&UnAi1ezNW|{WyI7zdR+@Y5 zqQ8`ElA!X(65zV%V$F(PuFYi*j7g(`ywI1Z&7Q*`n>w5NdC@EWks0zmYZ=0x7h41v=|XFu*hE!bzB$_oeR!?Y5}ZB6xAKVObw+3?Z6tj72(q>tin$00qm5PwGB)|(KA10#Kcc-HP&8w(kkkIw< zkbFEf@fQWU;H0Ov&+;w)K7g%(x7mxh0YfTJQZEo2!Q}~#nSV6kRSa1#0)K+#8ULNF zWX}iIJMdS1nSg!ObCa5~FJ+H22N`Y=?^!M{C|VKsdixXHc4(mC<~`X ztYag$K6xAM-NzYZ6DO1khDkgeY_JMC{z{m_ezf87$QDg7Ggt?x_I3!CYTT|nqloH$ zSqSLNEV0Y2n+Snce4Y$!Sj%vg_k042@3(x9Lm*^oJ(^qm2-q6MORni#MY}GTl^^u$ zAivCiY{2zb2%Rd0Cofvz!`z?ig3{nCWp(#$Plvh;dTnl_c zz&aZa2*dm%9z-c@4v`)dH*cfVAnt5oz}Z?K;dx1 z@^c(EVc?j#bjUA0Ih434v)WH%E4mwnUQ8!GyL zZe$$r-oRF*jd&WaLS*7+yE4nscnT=(x6X2yRyr6CjM9BONk8i!r zs}o;!L6g!nuUl^H5BY-nPVZK4K3&!xd}Sc3vIW`t(D`N=0aj^EFq4Jw7J=fIZtQv{ z%UI`t-Qr6^UA<}g1;I*SPXSZgJzO?_wAE^ve0+x4QUXv>39t8JPW?B+ONW2u73e&3 z_}9#P#GR7Cig7val#S%0;-a~b#Du*@)YLvDe*tRumi0%~4iif2Glod7a&Ctlan!Y; zQU083Yr}fz8*AlOG7BtA#v!U^1)aQfe0HpV?<)O# zSu*I^zmNc!ToPURTOO*uQN|tT>Iyxt8+&8o=uUb@a{fWaxE1~0?PnA_B)jxk1UGW> zXfpu3xeL?3{?_M*q5=^?^Rla@=!?tc^lkyPDalKmy)bNe7OwMTBn3ME03QyFV|D_f zaaX$m{^R(z4m8ewE$s@12~^d8?@su_Lm}?wRtj;bJ~qyB6SmmBn!(FfnM~?T_*#8vQmkD~`+CT)_nJ=>p9r@6|{%UOe%{xrZL) z{AudT1{qYXRXZyd9*DSre*jKlOl5UgQ7#UY9kh}_1q#&5@PYPnoev^^E0D2!LG62k z2QNYh;7>tD^Fm@{)Hkx;41a6E4T#rYF0S#1!I=;Y^*$34rx5aQ$NK z937k>_LAC!2nig?_x1gM>Y}XZR1z=bHmEtQ^e+n)S~pJ3;|C`uG-^rc7O*xt$WZ|g zn(`X1Plwkf-=BUMiV%!OMDIe_coc~2yty2+{Q{`OW;{Re&q%NUuqrW-Zm&}UiS`Dt zCc+#hjtzz#_%ZRLrEnN^q;LlV?Nz``UKj8BaN?iB+uMF9Kn!kwT@R=1DVkwmac*$E z6%1bOJ);8&4ikCh1qx%p&99DpYvgG0S$k0wY3lM5^`rJ!<^6jvKrL(uhKD>jyJTb0ohwFEcGDhb8WZw@Gjz{35)Wgq{3jV9r|z zDvkWc7>2zBf7rHFg|zE9Q=3OkA2);ggI|)X>2%N_(3 z4MOwom9i;RV+8yjXMYD?#y4p3Pm@}G(}D8ITd10CZGe}5>5)LId7<~XZ+jEMz02X? zo;E!ZDzhT`MFZSz_}uesQvvrv?;fdVx*$X~AVWW{wgpQZ96sommtDqCn>`w_l2cRH zO11(2-vthIXFZ$i7d+RrGAg)7ox5ltBR0+MN=;2>pL0e)_34ftJ0_WEk5wdPHrP;D zdw#cxhQL67eq{Us4v1fH#5iHeQP$s~brJBYNbpI5>CoSQ;>X%_I09tal%z;!vT$6e z(UIo4Qss`g!V(ug(@s-}nfwqzhXAx;k#)JAQUOwbDx3LEg%TP153{osXqDHP=~$+bxIc)-UK zAVmK8&`f4L4?Zk6cc$(TWW^=q4Rf2bW)PDYTM>w|Ah>f*zPt z!yR^ikB5Jmv6aULgs)j-vj$gVy_E2d?rN4)pa|dK1kWtp>A!zS7YaRPuW~SlIK8lM zfs;Byp#PqvRbMl zTl8Kla6D~YPO>$Kl0*(HR&D48Sh%6W(oecIds<4cJ8&3(v-ol@ zlNL*(0On3&d!2MjpP%Hf=J(Tkp4^g&Dgpm$&rNDPDz`3lAOry9o1@$kgLjT^*ALZy zb8Xm096_*)_*(?$3p9vb(q?oHt@MXd3TvKrji^t7bHT!o9$AN+@v-r>*tk3BfnG!x zt=e}*^SNRUGksJD=2{ETx&H}s1;;29afWFd?peH=a5dRw%PWEUHGK0lTU0_24v(A~ zkyP5i(6dtMBwfi19RDy(e`{uG;ZN;B#x=ali04AG|paXtG^xeQuic1Bx<3v^XoUYJQAzoX>^uK91gDdKVpl z9^yrw^5MLRA=S#(8Ukh(hKk2*r9YI@P|N5^;od1AT-D<80NbWRcDj3reavuwgnB@8 z*KVHiiS$JbmP6KF0W?8vT02IVNrdi+rHw%xufKJSOawAqXi8doTKSzR>>lL!8NnME zdw`*xTNqZJZ`3hA;P@K)|IQ8&cUV#G6?jsRwXV;gL> z@1a-M-|Xt!awtzA0`#eC;}L#;V6<2m{ll!itPKJ0JQl2fC-K$8Z~l`UZ*7!oehjiC zG|bia!UwzCCOAX~XbV{wW+D$5**n3_n+FU>^QrRX|>`_sk541|sG>U?^vxv_Z2gf6=?1SwYcRLHPdS`Ja>r za!r6{6s*i~T{PJXdie(d0fC({Q`*L)cEyp7G@o$WK6+83gVo?D@ym>cCAxcrGB@LU zBD+IpIrRAjChimAKG*PnX7ZNtyU#a%iU7T_s?*`Zic(c3*fKn#c@5*xd7$> zw6?V~cF;wAwEg`)wp<|<4Ba73J)W0b8l8!S@AcTg2#D>Ya+!vIkhk|Zl8~Kcciv+J zh(UOd#{?wN?@kfsWeB4?)4Sz+mA}n350VsP&;Qc3wSZct2FZH7mruK6*-xfkiz}PP z!*ygBj}@4-9Q{rrV*7niNTzZ803a8FZB=(93LhADj6;D{_03-0rxWLSCq<@d6bp!g zoNd`D{b70BH0XPOEJ6A#&oBLg8FH-8QvrTuVmf$Nf4&>^1N0XlAW0rEFv-6^K{s6diX2!gD=$E&Tle%#F z!NB?r-aKWIXK~Si=Dmn^Bs{32oSMZ)q>o``ozN$wk^>}v8sY$ptNxOfK_m2Ave4~4 zD`4VS2DC69C6XMeXkhx2$H7nV5sNX)LOeoyLS{`b$GaxyB%$+Eu*ZWl1JE>Nv;GS= zp(%7>;H@+Z#@`Qs-#N3V7< zBohsc1u1SFkq}uJHhk#kpk*Pv!v$7Y>*Il$kdXWK#r;f-?>GGCmOsBSWh&eKJQv#~ zM?#8ron$!JdOkZ~%#kJ6SX2QU-rsXoiqoZnGpCS$z+`&cMmb!WAh}KsXnZM7OYj6y zU@DBq^Pc`amQC$RibipU_=q)8fS03wYq&b&%2v`8R*JTVJ2XLZ#`x86Lj#ZjP{TwM zEJ+eXUlMQv>*96&t%)B6uLl5mC7eo94 zg};f?I8At`1_hA9-nj+8(hELpvkn2PobbM*)!zU^jYM@IfA}`ZIA5=M>T}A7FC>DD ztL<1`#?l4}N3KTCMiO9;??SCIhTpAZ82bW$^SM{k&E6Yjq!Pc=d?_)i2I9kGD+qmb zQek9BT{=Bo0AQD!xpiLRCXXZnsX%E^B2?9CG+U=jblnc~$MiJTd>dixTpY%VkT^!Z zrI@**yDtCt{H|LYt~WSECbL_L{7z`8ZpBJR|y)?9Ke3}W(_k(jC|)zgVfWtlq}~5Nql`7XIb)KJoJ7`8*OC5w>If0MwKGH ztUS)g!wer#rr1ofmKDnp-n=>*;^V=b-j2Z7x|ra^1XW^0h?7d3e@~Sga94f!Hn}em zY+tcu7uAWTz7J#*kci-Z$126o^prT2$Y7m3wK1l-O&}e(7Mq>xS zktr3dvlf-u g45ge9vl+<60u0c9Qm>~o`C`A#y_k~>eHClv|&@{tGLHd(_0_`pm zv*ug(aQ!AgA8pLO?64f8k#C=702vf_MZ7mX_JPe0XtspDz+pa4c0V!IrkBa(r}>46+M#!+tRpy(Q$EpZeHcQzfW%2PBXX5*NbqlKvmCp;Ex`9F#~-r z9?AktdC=PSrj~a`&>Cw?YAvRcs>Jl}VD%Z&*LXp>AZ%AzxO0W)u9W(JV~Z=CXZ`54 z4`>FVW9@5ywQOsxE$$Eq^e_*%2?`y@iCya*#^b;PodGNS`v|)bXboUpCWvg@1W@T= zL{;M>n@?~>#5-=QMa>74?aU1Fw+er=fC9TTsD9aGXSF6Zh@n(3VjF!}R)i2XO7g5a z&SVUH)In}sCF3wh2C!i+Xd4l4p?O5m#5@3` zXts9!JrvY?1IA4YzZs+X`~<)2!C$|CP5a0jY}vgP?7QgMP?zemjwto(Y`%b9-e*MB zdHXv^3}Em3h_iNohF=C$hLy?V8|c^?b}+OX4|uSWp|>RB!VvQnDrf5J6h%1tc<2j| zdD~SC=5-NCS7@9lM0Tu=02l)#e++?pG~b`7z>m+A{8DoB+R#9JGup*iVbub|Nd5uzrz>7kf!noS$SmNL6VzS-bvviM4-VNbx8$X5)b%tPyF@;QvQ}T$ z`J$q0)eialzCGZi?xmS%U%~kmnt+i*B)!!b-rsiH0(GrrGxV6#2HHG5KQ2<#Z>;$K zeYdFmJAfq%L>Ga!&6spPY3mhsx3E$Mi=srEkqfYYDHigY>OEZOvC=nN-`l7vPkMsk zj;JUa_@~s}`*4@fKVdY!%tCTl(QD)x$nw)SCX(jrt(6R0a- z@jm?IWgtH~tUu|!&a&~9DF^FsvU^Wnmc9AM-?s&f)C2K*O(X9NxsU||0?ZMwSnO2- zLi^XAburOWOf%bVGG7u^J(@m7Zx%lMAG&ydz@XZeFB!O+iiI1LN72xIkqIaqR{65_z5c|mCEVC5&wFNWTT}PXizamWOE1^&e zWObrWpzu$30#3rIF`6n)5`x1``<*il!`7UG!I+DpPgg_5X#tj3^MoqZ%We1UVn(2U z@lEoRvY%sUGU_wkZ*)iZI39x!r68YQR7{`-?fmhv3bq&K;J}FrVEd1B35ma%+Gw95 z_cST1d>}mSV7jU&-44EX3KtIW+kb+Al3$P4Bmx->Gzj}T?sVx#0VqGvZ>f^w2triN zFqa?b(^5C$Vo(Am_%a1wmbpPkg0+Evg3>i0V<5X&MD}Lr8RRi}l@djGk!wq?xEm;Xt%pMaA#>$a4IBitoj|P~dsz zZ;^rG1?QGZX3AguWjq;~E{s@>OO39Jo4GY*TZ^GS7qt^|>BK;EO5d7G6png-a}c8~ zkWA1|59KcLJ1$VnK-h3CAlM3DaRzlk=Lo*2q4aMF<62c{-x^u+cLP0nQtx(5ww$TI z1J)mu=&gy{EBy*J%#xmrCCRg4ebqSsWk}KxTC8f`)2h+z=JI46>fbjwOT*CG-S_JW z8ipTqtS4@e=5m2er8DbS+;3ZdR*KDjVDo{OxZnJRd$4L7BA@cfd$OH2?0X-wBzOQs zFXMI}abA3_614lK3{2N3_?QLxb_A{txWUF{|5UjmNNo;o61IZWFM?C=g-y$so|o1x z0^Q@gR_Qf&6fYIzJaYk1c$O_4xRg64Cp$Br(an zLLaH!^~KTC3~bz;u5~JJVxJrA%1|BO`wtK?5+uHVk-Ab*t$h(KYUX1N z0@QP7TQf)Aub=Vy`qtyO7n2LX31K4pQnv49vNAQq->-k{i`HH*@K2n=$U#qkTI11_ z?PH#TMgvDgxV>a=<0F>Jj#u7It{ZKwiRvB}cJ;mpDz_y1m%p5&{$jwIR8K+A+;{3J zR^;B6qTdGa223e`6-tn~TF|D($%TDaB)nFjZ<$NhE)u@EBh4PD2vA(_DRF;DL)sux z4wgGle`iAlrEfL;4#PQa2+Q(0W4e%eL9PY($*tQAz(&xz`>!0z?I4fExpQ=0k6d5| z?KApInGD57;3a%!cxT^Mk^S&@D!pW|;Ic2L7VKk%*hW%+`h{7J*Rgb5^!xRn=l96` zJ|#CcMl9@wW2tKwxV^Fb_CQE{Ju1jxYfLybzzBh?q$)sakj`7ba8h>nr>cK#kr_wNfZJl=5E9nK-4z8V#q<06BQ%CYi^O!3@LWoEDh1RzV`-~H%I>V-v zIwa@QD}982rJt~H3L$xuLhGZ(D}7;+;W;lLFw@XIw91n753tl;>+*zh-T$awYroSO zKBUu--Bdq5uO_38W%Nn~$~S6FK0qbS$y(0(+=!}kQQm$gu%!}*ZpC0;cE4j#f|A-O z^z-ABuh9uD#vMNa7f1C8-OOAmX}ZLqQa{8xX^zoLmS8Y{*MsoV|m25&PVWs_$oi0P4_ z?&FAmUA-I_X2LVo1or#2X&zE#8=ll~pD4s!(?*j)k|uf0*NZFQv(%4hS?~%fSkYeP z6@c$l;N8XQj2GBJ=kv2hPN#*e3(4j7$VM{k@7xBw8l$HCdxS0eCf& zp1Nt1Z|+x5hpk^n)1t zQaWk!G!1&4OYEHC%dMu@YdEew5fjRWD?_wg#nMA(j@LT|2pg z^vUt}yA18|`kh+Bn6Ia&fgqUfeA1QErF6dzPl*~bP>~FXylSs59DCIRnB$!{AZ~eo zX0wfwYx05PZ3vthQ4RVYGRBx=K?~>aXz+1a7fki2SQxk*pQ2lKo)t?YW7i9zE<$=H z(U1sODLg)}UYGE;PAE8r63cqr<`bnas`$--ij4Z4uOjHubDV4zRg14{SP-!xo}8eYsxp<2Y@`k&UKC*IXw@x$FVXmPu)^C*xM8-_*8i?w#X0fgdvy%JFWE*x zh6rX(souaQ3w@jkxe2S!fl`|S2-W7KRt7_YbJv>_wH&Cq7mNU@DxRJx-&5;q11Xj> zKWlEGxiH`%cR&|#H*j|*sliW`2>#=JqV^xIF%Y}ItQxAiJPc&&hwQ-ivE;^o0zRf` zu6Xc>ljYG?k337ASJ+U#G9Nbiv+>^~k_gG(y+SDrF@NO5C};*U%syK)oyhb7B#X0e@nA?N_GtZB*QR{2q6^}JrAg@3>;r6Q zyre%Om6*N-UoS&L1P6>Tq4cGHoqB)j$)$luw8bLE>rM&Ws(W++VkWG^MCmtRy9H$) z4_BHpj&Q$;3#9K58sE%CCyo&aUz62)5|(f3rqFHjaBzOjYAH1rvg{-fqJKSHX>0)1UOQ;HpSA|8>uFr;s;27z7c?yzqhOi zt^KOy-sUObkb*!;w7J*nQb5Nzv`eWUi6efw6~mx$5`7A#-54=^33iuQF@fZZZ+KW4JqTSTYol^dl<4$>Y! zJ7k{^)20YwDXJ$$sj*&v2K@64Gp{S!PiWavL*gUXd`zpF8K8u-(O9mZKo%1+wXDpE zw_rW6H)Vn&mh9$xl6=6&TN9|Uflv*K;G+PeunM-E)%@0X1?v!bvk5;*luTN9k;^+h zNJQ7W;_I?3rSch3j>+%$nYe@v!96lr)NQH~T{_cyxR7kfX>&1uj@q}ow<-)jQ8OB8 z@r8Heb6*(iHx|qDc8>&9E5VSd&hD>&L&H+VQLa*G)DEwI&#M zN{J@ffY>Df5z(K2i(XSzJ>5Y%fQu;UaMa(;o4)D1s#{-46{=^y_wCO}&$NC&gmmef z?*(nipH|D1hNRC2brt=_#Q_gS1)2s)%H0-bpK z_i4vx4NNG5!(@KAMG`MuTy9WF1j7#0o++xD4Gx!sx9)Go9T}G-8Je##7DOLtb-GYh z9&a|)Pikg=+v(uY8PtWQ!K}~h6ra5n(mr{sa)q(C$dicKR*fZ2HuQXc39L{NzG!5K z6V*?IOt%mrfd(1R@BjzHKCv%N5KVHn4${%E9Cpvtx4ey>$x6x)jUl4|DLN+&F*F9*Egf zSs_b*1u}^e0rj>AY9^7jdV8bF@)V@CF?O3Lrs?`ipINX+&EDZA*i;~Wu?pmH5w+iXiRu>v2dhamTX(Yd7i}`3=Fl zR^mAGh81ZHoZhG@dk)7earrq*_^s;C@3pXhBx>(zd0uODTEOwK-y{!NM~T5N%soS* z!0>2d^>t+htnG-^?nRovQISJUHf(@VL8Kh|Ycm;t zTcJQV{hiNKTkR5)lL`Yp11|zW<&0=#@-9!LAA6mRqBb{5J3^hugb?wKIb-{s<=!#F0rWj(s0AX!Z&Ql%ZeH8m>$(>*8VhJsH)+ojXr$ z@}}S2?Jg3$B?_V?5~596>X$}RxEF((@r2k4^ngWN!Dex6<@e7mT z$Xn`%Hj2gq3?@VL5eAXhQPr8`aW!ko)uv!FAzUdD&xX==k=T#Nmc7#E?>!QKN!@HA znqW(N#!tq!Q`M%4?Vu5pcr;b??ehpgk7{8U48^@`< zJf!Jb?(~_Egyj}Z_E12p3Iodo(b|%k7$iPnfEK`{yxJY!6u{rpMI0*AFkz1I^9O4> znjLM?T{TLXWmqIS*JCYXSe@1 zi(laM9<;RqyQes617A?Ku4hO1w5OW_A%GknzI@Z`+G$3aCk`;cZ!}8)u#iX09;Pd8 z)`a$W9*o>W5+XnB@d)WxPJ4_{@m&XN*L+^ruHQ*RDVWhMmwHnbdZpKYeWH)>Gk|p2 zh6g{uiWc;PFn_52JJ9IHB2W9#6DSd#7ukl!wW#WBzVEUN1l!YTiLT$1Z2=Rl6}5YK z{ZefDMsE^}Q{vaogC6OG<$2mVq~0rZQt(PNY+k-nA)QvUIKT-l*HZidv9MI zI3b4!^P)!)PQvhV`7K-u!CTUf_jq8a1d2iTMPbk_6vA}iz z0sm7E+3xYqUtqM1T6jSS*u0-ojv|znM~-E=Jj!LG#=t(MmCnI_H6)h8Q4Vhq z>pC3RSe}pcV2%cO2tjO)e#YlF|C~+>+p>y+7OO-l_@|hEr>Qp$?(7Fmr9f08|O-8NSH2NBjMe5skmwC~{!;Z)^f&uzU|c^kr&ER*yVWwmF2_IFc7orPKPzA!G>Uvz%sdc5;v@si z%`@;*mLTy+A$6Tbq#nJ0eLBN4pxaX^*Rp17`h<9Yo&POM$d@tQ-i;RpA+c6~Je;3_ z3JvfACT|{h<|vS#J_V-B?aQX0lx0GOdb{97eMI%+gUR+Q9o}pFna)QaxNonxO8YXm zXwRMIjK7h|eQZk(fz77Qo9h4s~Ns)H1sBM(pv>H?u$w#gl$soWm9nn(H0KMlMo%F>>U>Yc1Zda zf^*(1AN@hp0*`cKT#Ya%)BO8$%`b?0z{DGWpg8i`X?zp`iN-sXp>=d5DinNn$eI+G zQO8JU3~)X+6)Z!Tc(CllJtRTF`~9OoIN_ra9&>cIBIZuRYk5BWnpG__+96@D`nvfb z=W*QQfVl&>dAF)xC=j?or@pLRQ98XfZ>8vdwbR9-1vCkN z3IUm_Sve&((RF;~4jtCAwO?|Gan1c2FmnktN`(419tL$dAyJjd-_Z@LaVs4vj z0M!=Qfh|At0>rJsi@B(PM}Ai#Fu)Eq60?#5IaxH^czY^AxW6mY!MxmC_jPm-`U!22 zFVqOc=dB&)!TK2~@{ozT;-V+*N@h zfj!Ifp}M&D5|bB4#Y4gE0LabJ);$-;n(2MfHqd!@mTIH2e5XmYoXM$_NZyX6K;FyOIR>%@-FlaomG3`Z`n})m4Xh{;hsJ1}W9qfSUgLvTe3W43VsL zLJY%`rqwivf=|x!Lcj&6v78-$WQD%GYZsKC9weOIZFNW*PF2DOjfZz6FiM^nsC6#O zf4#S{jjpYJ#YK>;m>Jhu=!p)$e!yhyzi=G_Xy<_FEZQZ9KhcHka-cpm=mT_NW%1CF zPa+J?X#3KS&L+$`u z@Dnd8^q7e6>=H1^LoLUD%*^bT^q!D_YUK=CK8``Ak*EnYstly2kniCx0zrBL`6You z$;odINMH&l4KzGBB7|QLO*Zo1uMlf~6M+RMOs27z9?skD!;le=EBkxa%=RZzV0q^RK)~)5uB(R#hg=(h$ZcQb z+p>GIgN$;|QsAb4*dq}eX$4#fF4Jma995x{EKXG2k7wY|4HUh6JyUF58db`cj5>P> zCVLXqKnf{{kO3J)WE`?sRx3-f*(kg<%9jjT?9@*i zI_y9d@CT6Bj20Qah$p%;yHG=Ysz$$LU!m?mnQjd?bC(5woKTO3h~o%juJZt6%`U=n zyDKtwF_a{v3NI$ow;Od`q(zQ`adW4y55IVs@$Nrf`}h2%2%=@q<}fs^Cuat)wZd6T z@0b!?8)?l0! zB32aV+8mO9LhS;eT)Otr?(fXtiiyalI|WrEU0~Wjv68xIS-F$czk3CPq}VTPNDbEm zNd=!O{lG=s-AGU5M{aBLWNkrjO4hnElWhA@*(ZG>9HLA?tV}2C(#KWc49iBHXTxyP z!S5bJIWIBnHx>X~;I}ov67`OCutqu#J-|W};ML84(CkWyW6bdx1-?i5VR*pCAN z(JP97578<(7)YYjk`ON}0i>%0N&Kk1+0(_Gq2IrhmnaIv7r;x^xF;4 zK11AOY`I!KB(N*fIZKuanaN$XvgI5Z^gDM3+-i~>xCRYIRjpQgGw6<=>{Qv9`;+`( zf6rzat(y{2P}YFms4*M9?{snnH3RzWk-T(OYkl0Oo{j3~cINhj?5LTMSeJX}p+kXx z3Tcs1*9yS2wdQ%(*wAN9tFhpMvuxvc$);k@NI_! z74`B!^mT}JpoZaO00aTUOUZm}LXXY-k?{S+XHmG_cDop($G|PSg=Hm+C{kX3i7ozr zb}OJVh3x+jCwxUpboHq$wm6Q~$~p%@@*zM74^(3tKoXhPDfzr*A%21TcOPHJYZG4k z3PIpN6$x)s(j$P;&Ojx6IDWP+bgH9lp$ zxPXVDHLZWhTs(dr1GeOJOAPnQ&Q;OlbPGKY7@q^ffeXJ=W~Fw2?Cf?fE#)yIzCT9d z9STqBy5ZKJd%Su*m>xys=*gIM&b{2;A6rVGwA4ZSx(3xUTU8 zjJZ788`-|aK0DEF+pr03#yZsblKv!KYW03fmq+f?PdjiHLS!3gXh4naT=!CzI~1p8 z;_gY#MVEaRggqm!Z$!z&mY0fP$R!>MegJ`JU}PiN+}{Aiu_n}0fhLpm`u(fB$lQ;TWpSx{Y~$cAYHzD8OX)jE6Dw726UiD8WO#Zii>?+VkrrSm|KC z_`t6JJQs-li7tm5*BA#P#IVq9$@>M?pl^%OFnkYZ}|EQ zbBxv0B?fd{nISB))KRS{Hk{pm+wI(EIUYZJvFhK9<_ND)hIhMWs5$7p`dwrn_+=o9 z<~J7{kj-)}vpkT0Fv%rq0B84t7;b6{#XqpU2VmGQKg(}7%eip7So!it?mK5ev>_iE zrP>XlA@lz*RMwG!}%hg=@2`qBW1Cx77M(YGNWtNIe@sKtY=I)@ zWDd%=HVw24ReHJF@*TsS6EsK?QPJa9Ri6#R7Tl*CQ45tnU^c%9z*nV7u2bAr|SHm{d7}GvuAk(|ev(k~JFW&65Ndecg z2mr22#@B3ovLj}cUHM2>=^@jiD-E+~&frc${SjoXncs%4@^91R=Tm%XkVyb_lmHIT zbXY%yoD~oG9`>f&?fboI`0&Hj5bR7RJ-Oqr`OY7IESzq{)o=xSWT$h%nus7r0qCFw zJGU6VL6bG^_wUE(wtF<1-W_p@(}Q114a^wfE?{ROb61}0UNZ5NS%es0b=Q21ybX}e6M(}Qmlfw>c>&GrzV$9dH-xzp<7#=^U@33FV7xio}A6&R^ zf=%45NZPcvXtPh#$JGVTmAnoMJ7z|oiAhGuijrP@#=z`NgaL6D4D8q_;g@8iKkhqI zy}4|Gxea2}XD?draeE$mj?)DG$1)hU)leIMI)OelUy)7n zoStl}HKsw@gM1uuK0nO|*Ty>lD(co%Z!~M%-9D9v`YjxRzE~-2UhJ8$srtyh~8gQ~P^*+$B%6uFN-vQ&>qVB6@prs$C zNIHeyG4VG=wHjCVR2khP!vf(^=i%`Lt#DMZ-_@@~_5LW3v)1o9ZbWV2bksAiQKf=M z0A)AQKfyqAJX|pKFBH-Gz7Pcl1UvhGv#t%mADR3c2g?t7&Gfsj-l5)URPySUADe!+ zMD9KWq#3#+&BBc2a() z^-9$;M1{!?$k+GlS@=`t=a-!$UZiSa(_g7nD$1KUR>lOUJZLuqG7Ama9JSA^pNBPAMiW$?Pq@^&A7jl9%?^k^(-Ah5@5Xv&SeaFo%6s38PspUGl z!s4pRt~=Jc{2@c=?8zEaYd2n>-no?|_k&*Sp_gsMIX6+&p5=H$GVp#1bd}9ToyN~k zulS2FJ#%0f>jg)EOM(H-X5kEfApi)R$iD~XlxY}jLOX8EvEOHbr$rB3jXlmQpO#aJ zay`5Vn<--FFcPoDGT}HERcoM2bpPx^8w?<))vPRdVQ(HO3Jg;0zWm4SA8K}Y}QQlw~<@o2uH<{!q*|{Xw#kcq;iHPT6$Vh{G zamoaCIk8lhxfj(Ew{S1a7X?L((Z{i{6<_G$s$5E%3sxG*#<08gvLwqHI zyIeBLOLBqRvwBU>K13RSQswG~))s3jMNOS|4!kD?c_LS)L2|#RPwHb7h*A;_y_$OX zG-+P}pR}-9a@bOxa~p;NKj0=;1b8M|5?M50E03C`fCC}r=}|8v90nxhKKt@bzCgvW z32z2DVb)uNn}CyO{vr<$rpX@8=bja*kR$x}3@>^m>#1e#QMxC8HyE9ETgZmy=m!%w zdvD|--J;2G&x=y}9Ov1Vb4#oJ2yMOnBo_za$R((oCT;~8&VX+;b}0znvb%3RZ*ZxB zGtuXuml7=IopEpdZ<$X;Vav59H=I2%u%i8yGmw;Y zn*N{lY6OEunB4wO+IMWpug&v7Y(-Ro8rL~x+YX&-;x$$8F9$MMm(|`wQ|JEfI2QBP z&lNpt{%7@q$MgmSI4<=Dmy{-tj6ANx6fjj)?qXLkE94k|hsq*Y+FAh_ef$oaWyMF% zw-Y$-2qa6}AQ$I~&=Lv{fuIZWt#85XbZL&9ON~1ZztU=y`f{&+mgVeo;Eu?oJ0Ps7&e?J8m%@yB*|Q+a zsoxIxDiGU${m!pYe8oy#ifG*ffRBP@$cVs6-`|OO-yPJyiLY$&kT^C#6w%FdM>Np! zADjLm8Aa?>nmr((y2OL;k*Sj4Do+d(NQg6K?1f(RjIhUlJ zD_|#pKVyDPR&=L0-yLUzBNh}@b)`dk)7yw-JIoq?#`&`|qD9&Qof?GV_im4*(aS=5 zRLCt20;{;1?b3-F1|it4THfOT^9Zb86rp~g8vo%fG3Gxo#0(fR_vO#sKJ!(yPjucE zqx1v=d^heJ-49(3>Lhn#4VkZw|H4A&uB!@kga(b7rt8yyAKs3tgizHInx?ez$DNo6 zlri*w2fW1Jh`9z&SwwShhT|q#fKy^x>KF15s|J>0sZ*Nr-s?+5E^yh+lz)I!kz@f& zi0%7TI>4s`@up#Y08T)$zpzQ5qHlcfP7G#3m6OqOR2txR&o*~%GV;`~iY~`YYiz8R zz6D|xHS~q*Rfay~H_p0%nK@g1^8!w=KFC2Vh4(*hf6S(Drl4C%`oiCrk}jm_YAC&W zhx)PHjw`~S?VQeoELnj0llzUUyUFuCwdA<{XNv@DlYJ!^g;h&J*IHYA(=Y-DjsQ^CL z9yH@mpBG%e6jW6v#f?Wj#+@<}?k$_nT==qIe}eYG#>6pFr%v(rClo5%0Jje*CIf$| z{7=Xqw4f{AsiYJHlmu<>m;GWRGXYDaxyX3&+AO&p-WpoIW0}!*Cq$@ZBicXh8wD>A zmO2sWX=Yg;7U4Oh@7D-^$0=_;WL4M=wPI*c;z~^vj>zI~=J^zz>P;~M_RaKKe}gpa ze~Nd3(zd%HjF!_tG>4wx;>}^P5XBA)quh|4~8IzZ|aZ{)ie<3zo zfvQzg<0%ks1+J%PvEGc8939}HzW&aYlgT@DAU*$e#baZ|(ratYdX+HoeZDz`0BB%M zf$H)=xS-o|uAe-eIE1>U0{NpI(viJ4f8|%cuz<;PhKpiRxNH$&UpiuTs8{dvF5fWn z4VxeG9qPAHh~?88ISO1Ax_tet5BoyDK%e2aV`L$b;&328Vi*{s6qKBr6HUfAf47LQ z4Ib;4@ybdPFcs_KP6x8bL;&E6n4SgGsOBZeeM&4<=(F?HAaYZZWBd9d6DQ!Ne^3&M zFkZjm6b1C`QsPqK{XKoMtl~%!eK4{*7G&6gf0UD}W=Iiwm%!)ApfU}B$ZTrj8m-Mf5{`X@m5;N@5E)FQGz{;pK@ zjg1Hdr1qk?)8zrk1gJ3F8$9q;eqQ6#;Ge?ba@8~Oc|_0hoj_bne-^2~G$3t&Rv-x>=f8ArZ?Z~qgbi2jWtRiyh?rx^FDrDJAL4Ywx60O|_YDTG5 zo(rsn1&DA8W_BPSL(OiFBK0soS!`o|PM|G8@R@b^-PvTAe`{o(=F1aj%#U1neQr}P z6i^2ji@2+qJpx`yY{3VRXMX@}$7`#8)Jb6gwJe4^p8d??uWOOse`{N?8Iftwi!J-> zyy&4&tPZV>&-Hx7>hesZ?a4e+RMWn=KL+yoBGMFr6j2i^^!Xq!i>;Dn(dIqqI)+zk zH4Uk%`946o8E`jO&mzq@y1j2G6+m*^!G$kKaJQ>rP7%iWp(XBjqA0dnzylz2@=&ZluuIM=e2MSlY+tEvnSzk@yR;NG0?4pGXx%Z=&0&BRuF#n&#qx-% z_D~iV=DnWylvK{eroZ=U(_M9ea#Q>@sa%*|FS4|d#eUUcF|QV$ zB2KQe%A%hFxljOtr`Mh)A%?$ithvb1EMdVKc4S^BkZ+hbRh}Sfg1dV@C=dptR}yRx zfA0J+NwZZLe>3>v6rjRPb#kU`dLaS315mBm?dJUGH%!cfE$`jO2WmYc6M+DxJgUg( z6CI{xR88%4L^DvDS*>8m!v5~baa*iiAn{vZzv#=l$`ZDKcchS=O6xw%rgAgl83ZY4}_a4hM^aBSbCKc);@*u*r_8#Lb{M^~d z*Raukf7przl<`FnKS9g9rFhtKh}=)OIASuw8ZS^wH|y4c&>c$OCp99=3dS6;1XHvb zHbqkV$4qQOI&ZwT9GA%g(N}eDDq2xPaWWOvJ?fAzwjYp^KL=nEZP=W{ejHw(*D`_= zF_;Ddad_b|#}`${RrCnb)ktXdu-|iNU?bibf6lUt{M@RbMI(YT2>do^Ow4FIKNeLp z1R@Cy;p9>Sti7Lw=71P=ntA}2OV#~$SB5qMncW-!oPPbXFB)fu1)Zn{y)Yk$#H{^= zr6hlvHTS^xLQ#%;OYw>(Kpz1{XeHe+8wLc-k+%vqdy9NkK5Kq(gKQ~ak6kz~LBfwc zeZJX)5)Pn4nun~NUwQ{2ZScz>4ujP8d-EFk~Yug znC#b$&hDX|B8G@+zqB^@#yuR7>lQ2)+pyjUE;o`bOu2z!6HCcNf7~x;yOS`0QZT@V&+pqYc_S~93aBO~++VL* zH7@S&$s)d%}~bCF9RS=*Py&&>w{s7n}AHyvSM;WiH>g^$|ywFZlcY{TU#pqGhX za5*u^y-Wm5ek=iqm5`@b-bR@ca*$^iw^3R;(fJfYt@|nPgP$O54R%~#a%#=Ge@Y}l zxyU3zr}%`Z{R-S_d)^566T;8;BePI)egVE`wNGZx)>S>|T|FyEq7RC>ll2jg1K~Qx z6xRTD#jqskuZR_TJfP7+1ypq_UALh-*L3i{0Z zqtgkKF39DfDCFPNSa~>VZQej!uga^~=~0-a#yz=VSrT{kp$|6u>@DqQ!$89L5_|Tu zI28LPCo)2^oD>`#%sm}Ne+wxO-HI~#MN}&}=1|+0pTT;~#vFoSPCd}-MeNQLAvl83 zntFCUXjh{7%yyaYyuHq6fbj!TtP2VU06gbf37P_M+KcK%!*f<0_hpn6TG%5gm07*x zGGU7QOuVZn0Lh2>MX9pY!)1U^F8KoCjlJlHU zbHrFP!~vt3Q>xoOHhIb8d?5%{r}UQdNMC>$_i3yiVZhxL-QboU922wau=q_4E4gQ1 z!k~#lkQJ7JRaGIqfBWP$(tY)5vjDiw)GSa{$Q0-f-;`v-AIR#7OBzNrT`wSzUv;rc zRUlnCG`7^XwqKylObCI}=wqdz77?j|o$%-P>Zv{3#3;?!0X`&u%iDIy-1dEtQw%8% zsLSw!n-NWc4!a#arLZ!XgTSU-Wy{7;a>GNUd3Q(dH= z(y01ej73m|zwqC$i408?0DZ#6jabF?M^SQK+DHPg26ARlGz-8DF-CdOo(PE$iOLYG z3Qwy3BP-&=$UA<&b(7kym=Yq7^43yO~~T3JLc zG1PfsQ}up7$c6m)X+}VEy_oF#8<$$<#+rDJQm)A$e_D3%oEuOV*eDP_bqqxp5v}q- z%f6OnsGt5P+AyxN#{(BR9sFhAC zGnAJAKrAN3Zep;u)s6Xx1oa2kxK57fIE{3mI>bc8Wd!^t@75ZD68(m=I{lg7LIMy% z*%*fH(C8D>fI^eM2iTfW|K)$He}b97HstGUfA}ZHl!ErZTY#EgdzDO3UU?_mY3f4e0MpQ zf0fivoZ)^vdxrga4KvBBmj(!)N5IjCis#W60!A@l8ok{V*uJw!13&iPTVVF62BWx@ zegG#UY}v0Dd~LP)NqBZt+&HOoW4@(02SS*VtM*;+M~Ne_1@-v7 z+NbQQPqg|O!IRWmQlsH(Vzd`#DD+**YgZB_=!2#^(6v1|FIVxFaesdWiw@7Pf2mqm zUmY*FjDEE2v)KK_AU^<`DR7voND3WV(qYNbHz9j`2Cc;R4MlM%_;2|c$>8;PhAw|* z&2^Y}I~B;D*gA;~^Jat;yvPKEw#{zU?!kOsVAGp&1*o)U&&VM5o~RO-k$wpQvF8@! z#GBshrL!kjE1rt<-(SVQkja)sf6ey9#b&I6$xX8g|8Bu=5RC>b>FHa0GH$#0Y=CFt zlkvKqwW?+4)gq4^q@Ar~8AwaPh8s;G_^};6O0f4`_`?^ht-wYP4kA#)ZiITkEZ5Ia z?H!CJoFhS0e7}|K9hS_R{~qX0L6`;s_ay&LF#S|XY70$^stiLg zkj!I`Mv_@@*ZVOsN5BQg^=y>Too9*lK(EqY6Rw>J4bgPj>EWF&6TuSW7#hkcEExhx?!Ds?D;Ds+xGYO8)I#7 zG;h+1Ab)R{=&e3*DYw{-e+Ye<)(x^3JKA1nb(;RE&%1@sG{o`=8lyg+g08?~`Wc;g zydNNt>+T4zsz9%mwIQa`*?wkRJglcpH3o0qe7+!+@2zEUf5fAYWS8!WHznFiKyjhuzj60pYaYd)S?U^ zT`wzZe;!^fg_+>%$8Tj3nM`PLdc)dm2@rulAa#$^f$e5Y{+TN{5WwbQ>b5VCuuvt?%}2K=wfwkFF`6mwFNj3ESXFOOAzt?0aOjiQP9_L=kN14 z3mOG5iclyHtTU~B?BJt(MyA>U2weFt^{g0?U+v_uGpo!v2M`#5bkUsgzZ~&_$$3Q2 ze`oXLqs9JzpZkCSRElR5*o%tMkpM@b8Q?C~0vPUz`I&2=ZDIAtmfvzIpy|pLJQ*@D zRpQ?Y2BAlnThQzv{EYKWqF8)Nv1!jPPg*G-nke>UM@>Eb)+|1QMHII`jb|pt`UWom zu}x2L{nlkuB^Ir~b?OkkJw(9Y;gGXme{g;gD_C%Y^!v=MDV$%xf?R$UkKmeNA3jvA z929oU|&XG5EuB1lfn6S0E~$y(M;R!JKY?AO$8<1ComD zWm+>;z~jt4!=?hBCp`_;WNKsb10o(vK`=hiCL< z@GJK7UzOt5ON_jAjzi{X5e+Rc>8n_@*up=){4FR^3)9ysUj+r?(PY&5e6QT5{88EY zjrpRMFg#0JsP~|`F{O*C7$o4XCVfS`ywY~^5zX`^G3)ToHvO|fkvjl$f2D!P?EXy% ziVJkM;-*)9ZM}_DGgzvkN1)1 z1d5bHnjFA_MhmO5tz5yX#&yAlbSC)rMMGyWoz_$?zpD0o{LRqZG9xYt>(I~8l`z2PC9e+z-s`@26TK2tP(XVXcsT5USC1NCTVUq*rh$&s)nYu51> z#LQV<{_47>gGpR=jNCys_oN#zt!j7(cU5^ZcomQ(MNb0#p}YKdgSCV)N3=w>bAAEy z4QM)e7Lj_ozSTp$U^gxRet;LVw8LpjT+L&}}_o zAX)xy!lh?h0Y<8l)*m;Rj0%QF6&OX5d{wY@EYQj~#Wyi3Eo27wf_Qj;pdvQOihLXt zZk+`lKwQUEP57&Ue+L1psiV9Z_!BERrysYhKgX} zu1}4JSV`y6|Cj__VSAt#5w2?V#WI{?^?gz(>vJ)-+fPJ2rqjgaAr!W2g1W#0TL{nv z575qPciHm;WiosC=Hg0x*@rIgJOmA}Pb5;JJLrf$wR@NV$P7!uHbl}wp9~{ffDdON z*cLz)6PCDKe*_3ez94|ThI)OnFU92K^>AVO!^zaFVYd)y_1e=CETcM}waBhe;JxM$ zTJw>8o$Qs;9EcZs+V0e9F46WddD5bZP+`=*0leh{#c560xNaVw|h?1XyOh!>MioDAt=Pd}!G$Fq_fAZ)$#|^TW&wNl!s@e_c!PU#I zR=GW#;7)I<#1P=S**fT(A?v@04D7Z`pJ5dfwOdarl{;7z61~vnziJM6*e-(sb9ip& zIUhh0aH2xxIBTX|>66*v&pyyO?CKuzG(sz-Jx>5bJrzhV(jG5%5C6i~0VHJ(_J#%1 z;R+pde;4(D(L4@r2->484Vuk-1wtJ)KW4ItloxmStt8#Y07xG$27zw^Y|Ou8(9X9o2d-2xi*VqZaU%z)VGaGndMzjfWM zK_iG-vRj%sAiziaVyo0p8Sg6oSL6I9O>2KHh0Wlfvwl*BRXkOnEr0$(}aPsMI2lH6?+TCXZ9$_jXiggqjJLf~12*;NWw@UO#XD)p1a2{2Q$DE&Gi zFny>PIB92uZp1)8AKIa1=86ofAAG>Bf7SJhHmG>k_zdz+nPT}=ybUlLvc<7raJ`_m zFjFUJ{P+$I{*z%gBbz0*Qix=^#CNV;LIS2i-hG1#_=@X` zwYE4Cr&Rf7*gg90PIR#kQdm5~aiYNY6_Y5L%R>pAWfPBcx+wtX3REcG>V1Hrf63m{ zEM9UR69qv^m+^*<`L+bukPwXNZx0lnIm!u& z%R!B(pr6%Q_=W!(f$D4aoURgTbF} zpaCaye6s0afouTu>>3KMH!tP>Y99bXQGf)5zhFcMnTIK;Ou?GWQRSKJAh@GqK_ z5@QdOq9CgKFfb6*hVc20wgbZ^b#9_KhhY9+(xC#&@C}zLvtf0VIFxV!e{ITKIdhUY z;6&XT?(??nq1|HB1*&5R?#IPlxx0ds4IENvJs`X{XjMJvfP6R%`+&aH027DFHnDXp z%!Wi2L|HuAK`Af&j-P*{a!3tY11Qd8X8P|5aBo$ekIgFX-&#m#pAT@Pndld-y8?v? z*U7CZb zo{ycOU`HpPT=aFQPN|%Xn1r8qxU0x_U#r#zbeyX@nGT^N@Sq*P#%T<>m{6qz8JlcM ztG3M{`|0Pj4vGFI7<$+4$K^GTT!q+2%SzaQ*ZThWX0G?-Mq7j|?%W);|tP#npY4Wr9D;ICNsNvDt$0ERWq45+Sma8kD;$%2`W zDZKYPUlC7Cr}HB(gzLnR58FguuVfeTJ1N{fcp6j5bDg?$e<9_%JZ_W&Wmupj{&tfp zZ*&Q=C((T?oA!h7`sotC?~OP>Ma;#O6Gv8U&cdbv0#&(lsYzF<%R#c4lN&$MgT!db zvRkik61ZV~11mU+2R-!tF4YkLO(b@xS^JM(+w(d@#`CVlaJ!p8NvbjoEDyEk>*)mG zwB=0D<;$2?e~{2>SuWBy99ewAf#CNei`i zese}&*ehu^o1tE^E+|=PI&;7r8Uo5-`|1fF^gpu|+87WbVO?R`{G%sAcR*2kgCzef z^;f@@Yg5+qXBfv(sipNV#uzDf`b-Kv+-m-7_ zAk;16_{k#aJI+OsZwsJ*guE`b84hQ0H`U9~?of(A?+i<6RS&PAmp8Ff5DU_F*h%A_ zaTF2VX1q36L?sY^n3HtbozOA_XLpD?Ax-*_}gJfHY)j4nTI zcg>>he{CR=1o`C;!Xp9Uw!WgD3$C~^`9m&CG@R2u2!imlh4LSB=xZbKVt1+d4EjnQ zGR8%C3LvzKGh-7W`f>f&xVJGbK;1vo`)BE|e}ypw01v(;k}I^lwN!UTsChO&6Lc%CW5OI}hVUWrotK#1uBS<+<(|8st?F?46|^+s-2V%=z>Cn*x5-m2V`a?1ia3?&= zP|f#r`@6|J=}C5{r_5SSANWI7!??2et^a>Q4g(CfpGSU!K3Q>3DJ%JoHv>!n{elsoZR?7Ze;nB$O_f=BZzVbx7FtGrOcbGfAS? z)croy4Nq8XgaXw814Wk2X%{&S)b4%>W-+PNCL+x zb&0!^fVGh!-}qs!#dD>JSD(ZcIhp*(%l$ScicpHY45BeLn5WXPWRDOdLA)Bp1P^U7 z-t%Y>Y<8XZN)XxS1L7_te@R|F8>C`M_C|rVE==2}mdhv--o^X*K3hkK$0t6~4&#hE zryeDoEPQ;Uq*%zehSg3aF%H9zEDMKYVLy~WVJ*;`ukvC5N*dk!XB{nyj$#m@5|kH4 z(#KAGQCI=M;RW7>ay43l0ip7vSz$4qBjnwvB?Wzg{1knj35Yf}e~buioZ49IpAlFF zC%REd2NgipzWQpt^+PH^V8)?)RHQ^9F|$K$I+D@6QDoDqIEBT6_{1U}gNH`Ut!e=) zh%|}okF%Q?uIg!77+qas`T13On!lAs$}@DoOwN^+3x(+7<0wmuUkwYb%eT{rIm$ zSlXZNsXl5`3i~DJZzj1kRk|NQPsIdV-kWB*buT_CJcsnI=%C^RZUP)A*NRiqZ_n&9 zWGy!I>?=KBh_`9@RM_Rsi%N>b=jhhpD&?Iv04LS{32Of^AEK%`b!V5CLa~2NXOE1+ zF9-2?zA63?f8SXEj0b?ggaX+mTyvS`drizLyDTP*2|#C-9hl`Gh^nfKE#erl*PyMH zHhFuV#Wd$^1UdZL(&q)d%mN3J<^2kWGR@v~gsHxEc@-wTq(d9@D%AGxrvw;#5d8(U zKjUuN2^c_1ORElw@X6Mvs283?P~+OrSV=SZ@QZ!jfltSbU#yqb+8}?`3)r0F>vQ1 z>dqlL-v7dg8Wa;`wUWI&qISzH$B={Lq6`;q%l-Ge<{f}Gf^R-0$dzF)ehBzDPBLI& zzB=MLe|STHHu-*LK!>d>Fw9JIWvcg^r8tHKQSsq}7Tq@NvAT#i5o`K==`UB>h^qSC zuZ~N~JE1ZKXQ8XSHYhe3*M?A94(ko;mOopMWlbdfyaZ40!f~Os&6h;>lA8DENBj|k zO=c5x7mThZYQBcwsRYdNQ1QmlP-X3PjZPowf9pb2hbs!mAH{u?dPG6Mqd^4XLg;wO zsmdqMk$Y9fgL<&tC!Hw#s_{qS>8+kPU?C%MQD1eRsLz9V;CN&CjQp!@6c$<`+`7oO z*>(@>204fg`j6$3#5YBXE>YVPn;gEECFie36y?&wa8Ey&Kv5JcnJi4TCBg1v4RYiN ze<*QQ)WN5<&E8c|agpPZUIZ|095w>6q*)V)1xM)s z_f$~7?vM0M(u5fLPFL?=;8J`ccv{o*!ze1Hm*P727$iVHXC$HRYaFUc;{<57e>UqK zKP&sWR%HW&>c)JFNEa&-2@7C_R#U(kRm z=x5v`Q4ZFz`+!+a?Kwb1UHm(K30z|*B@~xmLsTdI2MJ=;#wCalN(lP?1c0bI-!?h% zBLtD6;CPnZUSV%xri0f$IQ`Xvf4MG5Utl$7+1rfS>$D+R7gdC%{U)V5Ys$|CkIj;I z1>$^q-cE|ajjuuH&!K&NF*@EVUCp2t9s>GsEzewSRfYJSi>j_a3+C-VIPp+KbWg=_`;h(GUs_|g^MIuS=r(OY4LKsf7WIHE&Xe2 zJG~pe5JSC4Am>05M?j{>M5+u!s!|{>g-szJSdK!|XP?2n08p)7VOVH_2*$j|PD4@P z=J;ydcjW_d&674!=&A;uHZ;J~wMD-^Kuo@YhTYcBVfTt|h%&4}@+Fr=9LP$2n1N0Q zz!8e@+Oc8D=e6tZ!K|^^e~iXBBILw}{c{9^g61&#;6xsjlm5uNK#+yLp2qVeP1O=E zn;o&2)hKbx47FX3Ef^A20LIY;rm^t}!LEB+cSiXv<}a45R;Xz76qi@)G|UrvWc1ej z)b&-lc~E7@>`OUMJAtYO{-k6zFW2qjJ-=7_w~eKbFZvTx&&LJGf0{YzpN)DZ`;)(C zejYI<`5q%U?5KSK*E_iTvVMLHn7dn%IHxUA87JD0Y!I_d_YBKMy$@uU(n}(FRb)@gnHyMPTLaE?{(1yut+;R^Q{NC_XqM zi6CH&VZ}b1_&8`y!+QdZHt&c{uCB;Yik5hIc7(7tx09 zIEdeIFXOKM*fz0+7?>Tb?4U+W?n0?}>_>BWXM4AC(C$kT{Z`XU+9;N#sl=H|lPeqA z>06y14K~fOlNaxp5(fJ&wHR_;$!~!5sCaB`bpmin0|x#8W?~8HBG5SQ2KF*sfTU$@ z>orQJV3Ww!f4ZVhbsAeF{N|d7;4}FxM)#PoA8FMKrHZ@;dT&{VI>F~3NFPpYE*zf# zIU0RGxaKJRe5`;KFC%0kci-elrVstLm%{Ur28K}e=cay;QGn*d%e@Tf3G;Dt1x}? zM8G`6F45obx_-P91?b8#_kOTGKLL`t3`Ec6jSCP&F(Spb{6eogpmDGVk}f)b6DS0; zci@crZ3718IBVC1FQSIoj)fc&R|gjZl$8SH0qpv9+m&7}Lrns3~Y zIxFd=e+shu^5@bDn631ss`aE*bg-xzSNH~J_5B)q=&XV@l#rq*6g0K?=RW#o%rva)1bL6fBOYNz$+dQJWgW#fI;Zu;@cY*+0mho z8W05W+`X>}AmxtnBXbPLfr7w+PQl$A>LEY{!_CJ6{fID0+U?>W$2ZF3cvrmvE#KZa zKA$+fJ~Y^CH4TEG=cwzR-G8vpN9%jB1+?`h1Bimjxe?XMCtdZt=W~Uh{>eVX&x5ei ze~BFockc>fUgj6d)SEKprO(pTdn7=2?v{!0TGm^<%B4})OlIkY!Q-L+b~ddR!Jt7B z_KyN2Ek;ljnKL#Q!`EEHfLdlu#l@47cIQqFG#YhG0mog5I}W#uA#sWzntQ^(7a463 zGmcbz^Jw9sV06rM>XRJ#w7*f^Q2?q!K_DwJ;j8QT!`1SJIFu?66*KnnH5e*{NT z)oP<8wlMs?Sey|r5+XU3A=e5%d!X!@kQLcmS1^bYM`r>AVmozaofPa5$;|+U`RRs7 zkdHmt&bJ`b*@Oe9KX(666Z#v)N{GzpcNI|K28}EbNfzkr`)5ib0+H-& zXL`fl$NUnq(I?lvv*uz8jrTKa{2@)&3uxq%jOy_rkNyKm5g>n`ajaF8VfcrDPGClv zit5~2*KSD@$b>0yU0b}>HBC2}_Qq`{ve*pHJyc3lUp}{WA zNHE?{oJlie_hMXFYmVc&^_``whO8lItk8wrsKP$>5;A~&NGm7{&0jzn!@Qy%{Vf9_ z$w*G^rjS}p89U(BMUmd?{(hktoxd#nay4h!T9nCSv;ppF^uD`|;pf-) z1C<`2l-j!G8NV-)e+hnUG-dBO*=J-f=4&SC1_UKV@j~XgHw0*3F7DgTqf}a>DPBk3 zeSR^`cxwwEEmJ`cBqFCz5j6m;h$YHRNI}qK07f<-e}(rtybi?@ce^t2{P!03)=>(A zVaU=v;Y;oWZ7cCbsvQsb_}7s75gN%h%2M+o@}=j0A&e_je<{`BdAQ7PP;Xg~PsV#p zUsas~hX4b?8No8^N?ocSztDamjTYMpUeh{l=cV~!Nv%bw>H9lE5*17aW3#`PK#u3f zGxkTQjd|1@9h$!vM^)UmcZue}6mr}NJF%@7r|8o6 zJ8&u`WroH9Kuu3?%!yOvNBqSof`Mvb#~Bh##vG~5C?kX~>NhNNvnY%Ge4gRVuRXRS z&sWUT%AGah?A&l1i*}w&9QCCS8sxy$d|-QWLyD+Ie`Ydaq&Pywuq6oTXARyvddatQ zEy-ky0j6~%*>q=Nr-P!sm$8Qo*yYa>{=BlQ(@P^b0cXwYlh4b_ zOi)4?qW}TnlAkGB@z~AwBaUfpp8&M#lFkvB8fq@a{AK9z(zy=!J+l0Y!KZ51e@>7D z(GK!Ee_T&9!}EL7>;zJ0UID1T1XD*b1@20*YCsrt>70Y&yzfn=u<4Dg@FKE0^I|=^KCfXId8We z&p_6QWd$z)dKm$vYiBp z7JpjY)0G{KY}`}V!QvktHa+}(LrllsOwt&@J)F~vzBHWwy$m`Bl-F+nr_}j*`s>Zs z?N(Hk&dF@wfo6>I^_!>y5R${p-?P&?Tb@3{0h$rV9TPKf-{%c0<3SVc11v6w{r=sj zf5rjFq5vrraF@SqEW)*M@4DLjp!b-2dk`?WZLX-nlYj4kiHcUpyBFu4)=o~6KPtCx zy+IaryoLxDKi%mPu;zZwq$BP*He8h-Dy*XhxSB8_!`boQ6LUj2s6EcJ5 zJ$fC1Jrv{=spaw@SXPfKHdru}*K-GVnO*C-vuMeWd@>Ke=(l)$|?*U zaGD^>mTvKx4YW82!s^E_vR^@ev8}ZAQxx`!=6NPZ8*^Ki^BWJ;_=Ov7X9o1J6zy3^ znqKfEWHr~Yzn#w_j?*XHz)*~R`J^NckmQmayCb{ShOg13auk2kj~lsZKG*zvb&1!x+(qTbXT(ROSo*r7{6`9A3rI* z&W}FarM<)ha8WZ7%y{o)!S6yRlW_TMRqGe*vJTpw@g(#M-!e zEdKp$;U&#B(+naD8y4jO3Q%BvkDpTWk|M5Mg5a5Hh7zWCzrz23bGAhI|G);=#5 z8A@9!I6?SwzR;(95kGhDYZIp>8ss>i-#oyj90KB4-tL^cU7a}er^>p|S4w}0uinbF zgGI+ckmV~Mf5SoFg|IC7W~K-^_s;f_(IU1EzqsOgI!#}AbXC7Ha$|W*OQowVgdnB9 z0=JrvqearppDO4xe>MQ~{?&L+VD-$IU((oOsj(;-qc2YIN@w8DOf^&+?J6caO%8gQ zr~<^8J2zRQJ9&BO4S{^aYmzpfL_)4py^w|OLCsgwDLlhOTkGva0gMlZgUfhMzcT{KMW_*%@tF}MN@4Sxr0fWPr+Uf$T z6)k)u6<7Tx_V&3o)EwJzq)C7Nd-*zi@(Xy$edD|8o~dq0Nsx&PQV#?IbS3HsaBPYVv^1+1u-0cdRR+<as>_oxYhlu6ppUVH^nGCzMBESR|4~V^S%1Y zZ>I))!Z@j2&%I8>d{8MAdnf%N2{$TyQ~UV7f9Q!Z_;r?6kG!4g^ZBKn;xSg-CU6gE zDdtSkPgdt_N`5w6`Ma5F&G%M~&X@sNRsZFv?x%YI&$okjcd$;|^SR&QIMR{%M6*9|fy>ViO3>-STj)7yn7 ze_qkD7eok%4Xhm(d1J-Fvo}gE{St}obpwl9K6jE6&nbV>4G-Dm%MoS__6m@jB-_Vx zxKIMJOPXk&Iq?&h2KC?h@OK~9IfS}=dbFdsfE%S239FhcpVD#6=O$D@-W0Fq{?&0 zD7CiiI3lMjdV|^Kj0946*Alwx1Vi@YP>zJ$*73Yj;KEJY-h5yME7iC`ppU}kf714o zve6o)IeFjs!T};>UW%gO-k+M5t3iBEFA1(2grS${y?9;nYu3vgoD&p%m~~x@#&_Cb z+`oiz%C2BWR`)t#DRfkI0w}u<0kS!E-p^s@si8`tHwkZjGhjQAP>@`1QMn#P)seq! zcypnL1FE&$&9X0Cw(lW(@Y|&Ne>rbV0db47e%uk*u9nf(e>O#Y;^QlhJSOzA3g`;z z+H%tU0!+Y`=R@_8GBUeZltmAYl-s5L4JOkd!mM+;k`z!w72?f6%2vg^Vx* zzE*iNj|~9E^sG$RVZH)VmK%-a-bDWRj~r-v!YT8Smhuw}HQ!E8Q8n_=3NsUU_86a6^5Ldj@ z#|0#zTu@cJVLNw@$R=O7f4+%bTwJR;Zls(<61fHvi;D=;=1wR){FnNzGR6$Ci)aR3 ziH$Gt=*!6!FF7mg(Dw86Ah28s(kW-{@hvzYMBXKwislBbjQR;QQw|xAHjO z(w`Rruf?LlZ2AgGc=hv`El!YYwvU3mCDv=)l5ueSLV544eMw$2tva)UG3L>dk7v=^ zVgB$pPBoMHR|O2Qe*ro0AQLX)=Lxkr(;4(eV85`yq%RnalG#KlR))UQ!w3dMOFDmPZpnr3CXM_gf|)6 zfLI1YfOOrq(O|{fh&gTU?wo8sner%9LgfXVh(R)b;0Hk4{D4F{aKJzi)%t=)Xjdc$ zoVXpbTTe6!0Sj&4fPWu19=y+=;$cpQ3OYM_G|9@fuDC>o13q*O95dzdLtvkUo-P|^ z+oc6GaOa}@3Sf>mt0}045x+JYSQ|+75QYinV3d;PbUXp#?tP5c<-7!8Ti}Nx0L-;Z z{bEu38loS47bRODs3WkA`v(1J*Bt>sSG+Mib;_oMIBZ}aO@9-IFynG4#UJUL?m|Vn zW9i9y5&38#8}xAEmFn!Xd37{?qQ)s&9Xx;q4rgcJ$Hv6nFF=_s6~L45i#9IkMttR} ztZN^m1ShhM^(%4x41BnEtgQ;PIun;oP%zS0uG32ZVE?j=7j+PbYqmb>zd$C6{mhC5 z(pYfxc~JX}0)Jd562ay8o~7&3S1G&~0&T7zukm`}bQQ%>6)}}>J07QLW z$Q>FY`G0HioG(GX`5w4BtfZ?;HXB5B0Oml#O%CcJc{!lggsE0oZsK9aFNfj|+8Tkj zCzx9gK+3%O$f|~4B3rnQIfP>>)iXf>gtq~OFLe1U zV7CFFKb88;`kT()QOEI1+}E9uJBzzkUlOD^#oAF{y4e)k_SF_NeP~tKUM)TTmPEfH9?UPX1}VR#@W@p6@=c5L+W^1e<$tavny2doT;#yrYXrhejJdOR(OxgI)4yLC zkk+$SxiK)TD}1>QfZj3-sr-~zLnBi*Fo@n&z4O)NI-z$k(6{9m_{3xnAl6RVi<2^$ z98Me2^lO7O!*v`~1@Gha>KB4-$>f7(4!fx|gmur|y}y_|&2eF1zZ#qnJj?AR3x97% zTJWZVJa59juAQw^W82L0hR&FK00OdnRrmM_it!wS{e5%Ix1NiAR;E3azPT0&26{p& z!-K|Qs3>B`X2RCA3K>=Z&XORWY%jyyt(1I#0$tIHLswIJQI8py9gxWn5OdLJdI9`= z!#l1%VCvy6v-nUwWuF(R6KrqZ#ee5+)<;U!+MmANV@Q@sH@Gklst5sM7=l{%-Xy5q z)**GEhWXqFsUM3|L!NbqEzFlF3`%z}9p)(vcF#Y{e)zJVNV*Y9iwGenV+_i6w@LYW zGV8t4FzGCm4h-Xd1rFx|{*{AHKVd{0N)BXJHy(rl^oO)w+r5_sF3YAzlz*61b2<<3 z2gTASEDgtP$mwTX39;F$t$B<(=i z)=xL`b1j%zgIH*CRh(eD`uH8b17oHn%gp!tlJ}S&3sojC@y#GOed2J#i|I_>@Ds^Y z;XPipH57n4oDY&PEK|-!27kafhpH6;lCUENw4)J5Hf1Ied#XBQS`peoE)3j1#EEIZ zZM)yM7Y^~Orn`1Q?gJSC*dW!e9wXJYV)TJ1IF8avSGlQUlz{lux)o8G3J+@}eAA#G zLB%vf&T!PoyGTwbz=+C2#EirA6w=L?8*E)EWB1=>+zg6ZYbF3#LnFfTFjr(_nneQ!pYo-@EO@p}kX2$Z_n}p^hs57eS|vysV>)OlFykRx zGP0KRGos-`S@*zC8-ImI-!XkWydTJWDlC|1(#ZIGHxjFT7gtckOPMGdhR;ofv6C}& zVr&rOGmmt&XdX)xz;oN!SkSEy{9xan0Vmna%kKi)g8UWDxBnPgpn%ftDj05kTVVr! zpN0d;yvqU&M%)ovgZ^`(DS2)HzqQ1T8q_{O%Tlwfia%ekwtwJ1dMyQ-3mp$DMXK9b zAL(Hm!2xji-<#$%k{C_W1E?^_WCdW7(Kr6$LuU#DLvlYJpou>y@Mt!x34+oGozWYQ zZ4g;19}iFbdxrxh+?t_li3)H}Y7?`7{p6pnGX0zoZbB8q^Wuuw2g91b5paxL(d(fo zp>9h<82M20K7Ua_0;0!AT_7+tdTu&u2R)GsV=a;sM@kKYW{XpU50< z?Y`L>c;KddG-q_7wH0plVAFEI}y89qmvbl>q*^(Ng zkI~1i3Bl2q^Gk)S-wN~w3kV;le-xd^f~r6eML&oIIhWiF0TzE442g-{o(1140x!lE z&7h%YR@vJ6`Fp<@dfXwSjacR2b@c_KGzg#%DQJ4S0-g79*~pXkauz1Af%&(2vdJTcv1 z^I|^0P>rJZUX*`@D)C=5&ON5^3raLnSKsJAS&++|rIj2?rih(o{%yIK2 z`|^fxqUl}^u`kJ_GA4%-nIi2Tl-(D^r@}kZf!BE6c7jV3nPL#YQbf1&dAn_X-_YJxvj;sXVuMX1qi(T2Rctxw8$(0&sl z!J~4Y=*fQuOTpG6buYR``x@fF9^#-FpF1Ngp2q=YfBBzB@DiNlliCz z;9072OOzvOiuL;F(G{UizS>#Xzskd^(9n>q+R$ItxUbjyD)g(4TNN}TJ-r>I(XhA^@;#%kVu zRF->`d*&(Gv+jWDy%}B|QLl#vwg!hi0Bt^u+G;=98Vk0oY>#bqF!lK77>W zXufNeO!P6qD@YGdPI?%+MZORPX@C(@eZpMqa?e=Jn~u;@8swAJ9iyaHe)K-DDPS>B z)^7hchAw{QACNtcUDz6!h?u$AO?dfl{=WZFAE+=)mU75Kcb zQu%Zg$U!d%Gyk8$C(EI8qadB&W(VX@k9jkm3-mpqZ2#@{=P?+;>Q)h(fseMjG)G?$ zEmL^^4&PBXzu1`w%|01!1?#47QeGgH#eNoRGmm0k7X-^pfQo6k%!!+_SqIQ$``v&0 zpZbfM`wsIff#CsiXyZZJXyJQ@H+VBfZ0)3Co1YN>Ysf2k6v>A<%41}^y)>hb=yEW# z(+D`Lyjy_f-Iw=BbJ~UEtHwUmgaYb_Qq{LE89`u%$B33uzcoN#Mg8J%kejmjJ^)$X zn7R~77w!0aC{+N*mMiZ2u``%w(9nPPsP`!Tb|C9fzrP}@EUlEUw~ADwowWffh?sx} zJih?;74ygsXu$+R!ce2G1^hPcq5vvhC2LKtVzuWfP?|$Bn6vFzWWt!B(n?8WQJgfH zoYZ>lOp2!fYp22Ooq%j6CI{s7s5dT(L14HyTi(t{l;yCM|CXi$pddl0-FM;ONmDk{IlYje~5NF@Xed~8f9u5<(p^iK|H~75iqo*re8B*H21zu+VXePN%bqhPR10? zGEVizK|!POT!aTfik5#uhdv*Us_@(8`2-M!n{V6*vAcrE3e26zu$+9TR%iCXM4=|> zg*pIKL9mwrPCDHn*HRyUf+L>H=jVeephd`Y{7!}hX&qI76orD`Kz?Z+yF+%D89?d# zK;GbHnb8X2d#o&*2~+=}ZKHm1vo<3JTb97)N+O{?xoEn8aE^Zy61KEd1IRTll~W~! zAd-%5y@F~8_G=JNxWxELOsr_g(E`T!N-W8t*)M@09df;=6>}va1O_)>O|37MM-Hv= zE8}oPsIx|;u_MFyw^fU|Q~Zq82dyJUL?son+Zpy_L?S&swaZf0?G+BMyBqkr%z5)2 zQwo}IXG~|%!!3VVwqJyWxA!4LcOSI>y!$!t} z^Uc|EU;{u*Cd{>biwVJG;hn<7T8P5z>rC2rqQ$eIKCOQ<29F*n1Tp8ca6T=J)BZn( z8-Jw*v665h06DM*?Xim-)%)QN6tjW(XiB{4>8v=kBj}eL=X$q52XHb65>%SWcXeQ- zMtm^&x?oyhz-6oD@A942_ezmkSJOiAK`C5Zr}Iuh*QnIxu-Z|;;K4@>^&DOAH=?#raIltx8us(KY@h0 zq6YOc1rI9<8%Jxs#zkOhpp%oPNFou>%?E2fS9Ts&gZpd8u*H8HjDoG|ldmpP+0*y=)~~@iIB}SG zzs@k<&LbSm`mbc~WWbJ~nQeY;B4ReQjxb@Y4@)TyJ^2Q9yp^3Xynks2-gc4P+`xRw zczD&_rYqfJ9_3n?24$zY+H_r1{{9H;==sp2B&$A51yYS+2(^aD=Vxr}M zyThx3fZAWH@p;?Pc8bvw(0Qkr{qF!ddx=p%0wH8>U^NmK8V)35!2&2@k+%^1E=PXj z@&j9d@+@N3OSs1OP2b;U5DqJf210~FkHde)9~dIg-cp9Ic)hA82oq0;C=Nq$f7W|l2*XN8M}VF2QD{EC0S1&m(ZD%0qUQlB;+ z!$ZAdl@}(*&eK6Eo0fVSjPmw6!<#kN*xQmg-ud88$ZZG4=AN)+zl++fF3uc+C)hx( zf9KEPoE1yrr-&i7Gb7Et^|qGyy)1vBK=1qt*f#Rqp0KT$r6L?=oS>>qDba!A9wLCc zoxDCRI71A1Xy_1dljqT5x`Jk)4^%<(iDO+GBi{t(Ze=J>qW)+B40`|9U!?QY#w{2h z9Qd1WkZS9rh^B7)J{d)O32)>h-^cUyq>-B2RNs4LhAt-Jet(IfobjYr4mK;#v;{b%>YVzT0y7kle{XY&#OWe3B4+_bINVqC5WU*1OEC8AxW zcon`B)Yb=p&NXDT)RXmje@zRT38Znod8j5iw1@0@m6x8%H4x$fBkzA?owuh|Yj`!N zsGZHjf)lS36=X2X`n$Bn!g=M6&0?!VS##8}%SjB&Ua?1FI$l8nit^CBpWqPWRp;iMFFW5Q_OZ@6wdH$5X zV_iQitC*Kl%rp+;38t~PKa&UOv;0Z)a|bJp@mliZ=A`Dfyc*s}4zc(_S_BbU+3T(T z^ug)ImjDYD1Rrue8~$%DpvW0cvH-Hjh{4?6c zos#OHxOJv+F~LC@i78orGBURww*FG~w2I7>^5}EDM1o`h(cQw5EK*jk+h~2g%eApu zdQU{IrX8EhS{NQHCj$q-0okS(WSbkht15s!#|;^{CCPsU%#qY_P+*5+ES^c7nwth+wVvA8>`~ZIhQK&R4%wl{<9v*`#Lrx4A+N$~?3${ll zQq3R6@a=zE_jOTfqwmdGC7+Ys6-!N(l7=BS+SbPLo z%1b%m$2z!b8?nneYF#wV4n&P-oV~44@UvFnNP&N5pgu`Bhb0keZ=6=`ecOKz`$iG% z)>cJvpzZZzB1L)-kQPy@Qcc_q;jMfZP4eDX@E2nQAPr_cd>@_lg#hV16ejm zC|;j^k~0dpIj`bkCM0h+Tjss~gFs6|e|`^;SS|#qfAh9PR8+5D35OXI%`XmMnuh>D zCa{0>*^_{WFukOCp-5o6-p*ir+09iZrjcCq+knbxZsNd+*7O2nl$h2h{FDTbY%%4I zZQ#bOfy`hhrWokeU@i*v+Ixr97@VfNoG+c^ouLqA4zPdi99O6PK@ds>8QBUGK^1+SjLEn^Q0MLI5aX0_AM8nA3j9idfcl}!q@Eu@E@K(5h z+V?-YvQ28z^lpFX@I?p$uUJ7=~{A5hTJTOObL@b?7l5`X;djWLBy1fEFcc`i6f2 znU)*=5czV&a!n4PIEa~qK;ZuinLwrFr#bJ z3EblE_{I-`BC(^Xp)UaEgHZd9(``$xrQt$v^42Yl5K*5Gdp}L+fM8;^*L1TeTy@?I zq-}7QX7UmT6#alPqqvL=>trPI}1B$SA3e@jZ-U%HixtAf*3Tsgfjf~LcIWv!*@q(mAxQ`{ha zX-RO5UT-(_6Q2NyN;;v|LM=g`=I_KLH0ru2Cx_Qp@{UND`28I30O&E}U!Z^24ojf< zB$HSJ(`wZf-3R^n6FtLM_bBI5Hx%mbR}^zI}>K)1IAUX0IJ?xR61Dr~gg;=??&i zv;8M;6>VcJOBi}w1IT+1DsgDq+BP)ernd~xU(q(m_BEKZ^d(3bFt}=;3G2bV6ZwIe zN{d4)BE9_NP&@?6O zg-w3c=Es33uyM3n6$BmVW))o$iD?PA1cE|gdEE=&fSQuRg)#=p7D_QFTSz%hcPjC- zx#}kqrQ0M#RCz0 zz4%dD)~POmDCcL&X|}YSB0BHQ`t37C(W0b)%a-ZMu)z6Jg#b)i(7Y^XgBei zCP_<>BM~pS^<^YL(uaPpumC_Va9s2Xn9?1v!DT-(8>M}&2VHPZ?(i@)Ohp#V{pa*Z zs0c8kD4&1LN?w;aG?zR=>~+o$NU=q}gV)ROTyq}P4QsQH>(wX_f?1#o?m&OGW7@7k zGp)ZP_;~$l!UYml+5$ZVrE&st%$Jw2Q$y>gyY}&8US<$Il}1h}6>vrYcLQwQnQ!oY zVxDaADQDU=w#Y}*6$TzCP}=K3-7{yh!OY;YaBzQL*Yi}hqh##h9^;icpRX@BdueOt z3mGZL<0enaZg##;@u^;vMfB90x5OZbcUeT;lmMI5#h-_N-TPM3^E_l>`=*I5Bexat zl_(tR08{}#CItNPrQ`13()WdZ*`#ayK=*5N6TIeSfvoEXTsy2{qTe$O2vOPfsTtL` z5e0wO(1@NO22@gQCZFsy`Ec;nOOH|&`|Haz8i57X0**!ab$*qWQH7*8=*Pz1_#kBb z`QlUR%S(k77UafLp@fJi0$gVecWsBAM17>=&`fu765WJwQaqEL(H3|RLXMe)3uv(8 z!X1Wl25EYuw+sx*Dm~3EhgrY(qmRYfCtrWVlt6 z(`F)ZU3qNsmqdOai=>7`uYOA=Jm*M&O#UHX+4p)=-AC`tBYx$!0IhVyGI=#kg|fV^ zpJ?fnNmJzB5};nA33Ht{xSXoz%b}!m{eQ^<0${VylFe<;HqSR;Mtj`kq-0oI&!vBv z@j9hf!S#LgeJ1w2UNiH!uaGH_3 zqIU-gSzvb8o{L(8hmUz0Q?5hwDY#AuRv;Xl?$!XVphnd zNvzG8KGaP`J$*OpQJ=uqEJ(_!Ry0tI~vQ(Sul(xr^eXJ8v&JeVaZOVE0+g>4DB;c-RsMG!nMSImE>=uhbXx#Vv^7eIS+nUEA?=@uRI`u_|S?W;^+Kj*bv zQ_n2%0y~+yd8H0`x5GDzOGGIFF2IE_1+iT3&DF*C2*@Sf@vd~fL#*NF-rU%Lg=~Gw zZE>9tvVNG@X#z(#B-Z%E5cFD85f1>g71!5>o1}yT6I=vIylzODMmW1YwtNRL+4t*q^RgS6#Z|LCE;^8l;W@g*-TU zFxtY@X^s`wETpyv^DrcQ&Uc6( zzdlGX0(b9IUa8&TFSmL-Rv2cgjguma1~>*Ne&6hGymJl0G_8=%R*6a2{St?z-qRfa z*qr=O}VGK+1Qz3tv?MMMmAol;KZ%-fw z@NJu<_+B(Jn4Z?`mm!~SM;anUL+8Em`nGhqgg>BI`cY(l(jkowA6|Myn#zmaJ%En~ zr+AG*B7LcGVe-#W5NL$sAgisY*P#wW=B4F9Tzavu9c&IuUjji87B7&0RDAbYZN7|w zpP;n0X0@*Hzy*Ir#wTMSlR2131d7>xp$uuOkD=c&rveZW;f`AV2p6i&Udb~&nf?4; z5w^L;XBy|4e1YU(h9CmWZ}|%=9fbw}$F_+wrMy1sJ_~4V18;rH{JoR!tsYE68rHoQ zhR@pe$(jD>RJZRPfqRofV>i)92FMgPNl;Ffy5RGjlWu=(>E`y4!le#+^I!XsPfJZ| z_GFV?1#T|bF`~t?#rv($)6#Se4~fN3%-UfD?;A954~R<@9(E3B$B8Z{63hHnQ%XyBlW&%?fwl464b4D0h~)V)s*xWzaVd!J#%~mnp3O@!sN-S66EiNO4Cb5g`Jbf)hPtc$n#;Q?x=TXGH-hLXm^X(rNe$=8%&ne5%7 zF}z=%k&1-MpNWQlMV2_+Zd#mCWrN9{LMr9;D*AtTOcM3j=0!k^9d+|(QHbEdP$tb3 z36+S~fH{24fqeLpZjLjl?kQy#aJX&!K)j$a+-$x()Dm)#D=#u}23pK7)8)LFcMYV* zGpR2=A7rvHfX?`mOM^cp;}h6#LKAtlj7jl4Bo*=6OcmH=3RkU(CmANXeQh-0nLt0F zoQi)y8T=|rU=Kh=j6w!TfpX6Yae?n)#n)Fj%X9V3yrM|p7ZP=E+AzPW3Z41HV%PG> zkv_MMU`FZ2cd>-~FOtYZ;)mhRH4YV>z)c^@&xWX9GGFDREA`o4mv6{7b~}zqQ0wQj z=u<4yoZR5)mhIy^D@`SxlqwdA8*kr_rA~jWarD0sMXz-Sg(I8*s){%FQ95&wlK*e~ ze+V3y<^Zp9@Xn<5$G;1a4CiUa>gbMN@HZfo(qneN95h}Bh7AuhW z^eHmis=<~)+9t$&O);L7{1grsz4+rH&-1FyoolBq6DJ^+@An@0EI9`t4Ge2maFu^3 z1(V4a%^eJl{OT1?G3b-r_wMy#RGWo-#aeW;`UosAc+gZgEx> zazAevhT1`LrLWs&?GzbdAV&cr_6)-=D@=GfyvJ}GCI2$bjx}H4rMQRXeeg5PJ zlTrhEI^$$j_Jyki(MnuDhVZRHx}JZkx)0o^Xt0jOkbw~KF2h(Vf8{nf=GT-JYu#3F zMe71g|7N|g7jdxr0n%+K72mI-O1=DN-ty0*Uo~pJ+_|LgZbNk3i8OAvcUh7d;)?CL z@LVr51eT+?o=l5yAD8?4KI@>6ycgg7xm0kg!{+$RivxeOV3O$^ zuQUN(m~{7sfyw1xLDv$0r^X zNb>YeF2&WbunWG-SdOKgd0iCmTQVTi_xkzB*k*+9paOo)#8DT|Q!1qr*@uTnyBQ6J z$HKZcm(YLNlh{y~{=!?-epP=6O)D4O8W&KcSo?!mKfl(E+3J9O`;G_*6SSvNM`GmM z@Mvt_sJ}hB%MUR+dM;$T=}wa$@vb#*MiJIvA4#UujuPXBL2$m)4hK=*Y5qRWTb_XU zt^Wp-8=l|t!MC`QZ~Jr7k_2FL)L;QC#cYOW-)35Eb^3i}g4jw-*-!mVr9B=Es+ zO+Q;%hCM{Q)%SG`o4X5rPp5_uxkGZL{MN_9Q1`7b#Zq9%r%l=kcjn*taV$CqN)xGM z?aeN{^&(^croLPWls*}cJhmQB9W3d0T85qronNWdqyN615B;iyActTQQ|JdU=7u$c ztSsoQiM@NfzZrF=>m2rIjYPkcSC+ctKf`rV|kxU>0ckw#yQz@}#Sm{1bMu<#+D}YDvt>=}W76n%w#c}RRI{|mvskGzc zwnIE1xr|($B&j>FGKE@@hJqp+w#b-0s9gfm|#SDK-GWLWHR1foCmSGz*T`+o!)G( zq4VUzKlHlg6W>3bt}zU*8eXx=CX|DVvLEM94qluYEmT-zGHSUb!&o;1LDLgTv?9hU zutw3Q8K7^MjhElNBHh0@k-}u!dY*HLB5czY>Y?6jm#e&w%vM}8MWfkJi z*r1|O5Oja16ywvcD)b8689!7oQTfZ*NKmZVI|S@_xy0uA@L5lOZmW_?leDVqC3C^v ztYY|f#4EE`O?6SZRzZMF1c|EMooiK}FbIWYqn8K$yXiz~PXw z(6MB3fE6%^!k#@xae8AQ7haM(4%&~m^$$6AgWG?9+B%;n72B&Srd;@FMxV zc=NNsUt->Bc?w!;1|zYrd+Vb0FqT>h0T3(2haaq~vf3K4qa}fAv~di$+SC8TE%~oI zAKLpsu*4aE{0pGr%lPKUG8Lim!WWRO8UM=)h|$qJ{4ixBZw8yz1KM0epA){pr>cMG zp0<%H>y24r5{}<_5oeI>ix#YXjFQeV;~{_MTfJC*-`3JSHa3G9o1y`bD7^K-MQ>{Y z&7018Sfi8{3`EkKU8ii|4*2AdYWS%;VI|u0t6Q%$(j--X(o~EW8SRD?>c46(cxJhS z3x{)y5E+CW)^8z>W>u9yQNByWQS^VwO1PIGzj-oxBFztqvdvx0oKvz2b`?^2+kX4R zqs&fZi!(}-Xau)ROogd<0x3|%-{^}Tc^OM>uxyO7QgMJ^xQpg=Q2Ti1mC6Z3FC-dp z1O5qAF*E^eX;#0~^cZ-drL?2a6PF_cW5Vv;C|PUX-B!7}P)HkIvv`vI&A@+KD!^O0 zoZ~P8-;)7ws@o`C^aFy&2O9Ox=FSk=C{G<^_iRz_-9!|PI-%XDAACdaeRN49o?V5c zzlzVfZvb8q6|kUxBY=LBtdaJ||J;m|61?y$oB6I6z=uDUmGeb<#DE4?Fh^8fW$R=v zVvOUVM*k-NpP7Il*obmM6k>nb0Sua@@c}Ex$JzmL0IP5#mA=Lho`Lt>pQ`o>cLCTw zwB7gSp#sDQrr@`9A-mx9HsC?EnZK$yJrQ?L6J8>|RtVH_A^Ujp{nhX(`Bmll{k?kN zSSceI^(TpU_GY)f`%5=Kt6Q0_0{p-(rgv+*aohC|`Ui15)Eo(uy#Rk!L1L>~C1AYF zzutbo*5Ry8Z_=`hms<$-f}OoJUfSK7_&X^&`X5P5&8T1b|I8)CzUz4k=-)7@TCJCB=H#%;okw+asyeSX?O_nBl zZXf7hus>fo0sp!LEjw5bP&>P-ZwIYhMt4?)+l;uCewmpuXGHy#(6s3Z6KawuM6}nf1_@&E{AQv0>Aw zGPeNe9-v9c?5PxS(MEeS_G}Zfc{gHo;Kqh^P4~f zMKpYJotwUjS+IY-%agEQTB`%8E-E0{8Ndnq=8D_oTGixsdOd>jwR}5*o_~QQ^1nSs zuPC^OD6>!$pp>YSl#ezud21gys?Usz{0PFv0WJ)&%LUm8?twnX%y*?HRd6+#^0h6G zf0L7OnAFI0%+i2LjQEKp75$~$zSYC*OK!`hP4rm1i!gtd0fk%Su^Z1BxPz+9=2lBg zX--Q~S)zxOf*Vjyn!)VM55&y6@1>@Q_2i||4VW8N*5FeB5A@PH^J)q3%#dgA|ECD- z0S|fqr$ZwDiC&+8SLHpBnxxstk+~*89fty*t)hPlt8}g^w9fx0m1hfz>CE`ms1JRb z!kZ7bsW^Wu)JbZbRi{Z`;pR(a9#JU3l>Qi61pvuc0wAjXW;-zTyl3(Fah0=#I&mOz z1f&P%+_XjKL-scfyv+|wUPaKcKQ~&h%zIoMB>?Fqw+IMNHb)2J@?>0;9iAx`V)v`z z7T0Z=>NRk(2a&{mCv*#5VB+kebpG)ne z1$dX18e-iaes7BSQFM@G+vK8;!-P|>hi9$v& zdH2XUPcl@ zZ04g&Az1xb2AlAUek?KO!ySJMpk;rJi9$(oL;3~1CK;fYb>N8?6wG}^D5YQFo4SeU zrn;EN3SN~%Z@+!X)$RJL!7R!S@=^HSfuq-Qrbt|Z8U~iTWZbalmNo`!RE_7>iSGGg zfIv~iz6{O6NAF_YrKcT=c zz)2F`rw&O4G%#5iT{y7&&i)19&s<1(GgQZ~cMtUy87%4q{o@=Bu_GtobBNg!R-IMQ z)qLch#V-OJ%I`MmL==h*oaNssFcdwX=GvwjC{6!NQk1SP1Z(vX@Elx7ypH_Lp?IfL z(I9Y+5jLWKx;g&|KFaiEO2yIJODdKCH;Rn@Ir7!O5fm*iT9H# zBUmx@mT&~FXu$U~A@O0#ONnp>-#X}#@@@b+l{+PdTBOyS;ufYHIR?g%V;zq?ItJ;p z3i)Efg5`OBbA1s1H-?I{6a6Oj3c{w3{Ov@myJdti<-6qC)iZv>=wyEgoM3ufJsbLH zbJTunj;+M6DiC*H)YsRnHn=Dx3#<t6e@X_&61R(i$O_{V*uIWgS*-t zQ&3w8uU43bzM;Cv=3%7WCj(#ZSDXQjvf-AXjGaduA{0oRwZeaaEQ*3QAxpm&#a^i} zFE6U6*|8nH7UV564`}cuf_QjvIoN-{S70Mt5=?wWHGWT~p}GjmytAU_@GNqGVzl-R zaK?zx#w8%;(mRYj&g&;fv?HN7J-~qH4W>sR88P&ur@r9N_$EGMe%jnp+$+b3`9p5j zA!;C0$;v?bY^#5Lw-?F2SP+#g?`~p1cZI(+CVIKBZqmj8z*BT`UPR`RysG(4I9awi ziB4->!>RQZGmHE#r+j&KY@t&2Jwe^-o-x&?yAs=W-W1i&JKU|44;Y7^dn-6Ov%v9g z!1~2hG*zHrrqZBb`}VVU&{MyPYIh(Y*VFlHXK686SQLM9VAfQ}%^14%pn_8BUQzn~+}00ckg1 zN__l%weNpon~#AVIW7_k;TifbKVorTqNaX~RzuWo>Y5;S zSZh7I*Nm%G#ck76^#DDUeDkMVyfE1@$P$%A&*N_z*=>90K)JNcTa=GdO0yc5MXH@u z49IMw=Yp-;FBP7omLkmg29&|GjY6oKBy?VVGMK?k> z1>`&v82s@Af_`v`JXztsbh^}@w8__$@h4J|h}7{FB|Jo;pTrOdF2WJV+Vo0fLhDE! zB&>hh3DPk5K@1Y|sFwXnLSh1Um5-JfaeGnxrM>?VD?*19r+^1`=RiwuN$|K3H+MUy z>@&#oIE#={An|1O5-<056DL{ntOvo>MQ@*voJ-?g30v$sduA%;?VSJ|}`jrY426Ll$Ch6oOIMr|%61g-piq;i;!@JVeLob~2m zRhrT-Zt$Vf3IVog_R`d7=sKB+Q|fn`E00*aGt4&;DPK}-U5tP8B2A@Y&eF(9?ficZ zWc8pSvlrSP4oicHA{A7lHdj0qh`m*NidR!66*~;hk@L5ZbP3?=lcM{(&kiL$!Bw-K z`{F)B{3ANvOS3J@+Kqu89bHeuceKlZwy9PLzbR31GC>U818K-IQ_$v0DN&Qiix#S8 zB3=P&Dy5qT0T}m`TNK1oP}ic^4j6wBM>sscJ=mVvqA~H#n?P8Rhws4-FV}@%Hhj1c z#Qlg^fiBQ~m{~O(Uq1-Gub%t{&=-x9H|=twiU$GI#cd2E4;9JS<~;O{0dYyXL!fK> z2(xmGZz)KO59(tZpL4-@PhGH>Gxq5Z<`9uo;MGZ$3A~Td>NO>Ue7vyfgKK}^_{eNG zt9RkufI0p~2r|=a2?i!55F(&>?`AppKzcWQwBQM?7IjyKiUJvD#P(cRmZ}j3ic{PV zj9*Eb!{-n)3kDu%Uy{gR&Wr>4YOgu3sGl6?Sw8~xx~JnESrETC=ZhP@P0w>l*>kW5 zSLA-1r`>&+KwC5r;d55B`f7iIBal51iuXY`p^xkVOz+fIFwbXncpY@ORLkGnAZ}`G zghyT(myY=kO%M#6ZlUwMtPFas`3mBB=(wZ$TnNe4zNN=gmG+T73+v+Rd+m%tI)3QD znWRn69vD}>&PeBLcY}vy2%pRr54l&efFD}az5wc2Nf?Kefm1LF>K}j9+z5>m{7FR# zCT6t0O*zb2tImlm&o1w^SUc7ZfwG=?8VbaYxjhp`G%JGw{m!?IM~kp0;HRCttSI%@ zQxU{PMtAiEvMT_rijx^|9E=9az$Q!6P?ja5zgyBmnIEI_qo?KULeW9>QVh{k4E|^3 zOQ>z+%x35B0vWP)#uI-M(>%|lMG`o*y&xSrc50L43^j^Pe>HEXRg`pXf564F08jq^ zUcM{~v;FmrKz~qe2p5Nchi`YMh9mV9tKk^qaPXmjO z5d|{d`q4!@P$qu^KKNz#C1l06^V;r}F?F2j7Zkbn3~m#o91{r|j?Pyeg%23afnMOA zf%Nd@z9=Ai#j~0YH3Qj34aZmZ9#J3^xjyHp6j0T8P$D~G0|+Um%kX?9OGQJJ#AsLi z3ub^l8UMA0kpxOF4s)>!7#OW8LEae3$rEc^hRwA(!-ap+Ku%(K0n(0cqCgf-Z|E_C z!BfJW!SnU8(;+T|e_X1BtE6Lwj{u(>2KcPRuDwHIt|J8QZ?U z>y60Z@KAru;58AK3|7}SpE3(0wZ?@J8kIk~c`v&IqROvkhHkR&VW_@lt}gLndHO@n zEyIJr!9g`7%Id?0EQ{Y4-?Jr?!=9*Ru3Aq8@n|o)u(go{>tYOR>%Z>{UEI~?+`@|+ z`;VgY$Z`{iqUeGc03r_&8Ic7d%*Z)sR^Qbl+vk7S7O1ITFI>P6aO7g-1fOQwzSyM) zN9}#<-M->{y~AVvRzbs{L2+$FQB>o=+RN(-Fweq&RC0h)kFK8U^@jKBMHl;}V;I1h zNRr8$3k#C;lK~)#bNZRWK9E~nO!{Rh8eUrY|K8-}4$IZ{lI;bv%)amEN>NGuWnNZf zkpzDylj60@$3&4ZFZmGMfZssu3x@Dh*IP-BJdvLEk!GAnvmQBN_n3;UK4#2*zM6xk z%x9C~c0p=0k54K@e*4AJHmx{dbnJ31glCD<1gSR)84&o`{J?hugxxP9kvrS(7M0Yt zhDbW+UY{RAN17tPal6v`P<^y7RttH`j2VAO+(_kZA-RFJzdJg9vHOa*RSAYO^c&DK z!)!u8|M$weFrV)b{DC@9%-f&TBytl)2}WvRnruQ4YwpSFHzxnK!7<2hU%8fyq_{3$ z{m{VbT(~U8GkE9eQWnXa7a_?bl0)aBiuA9%%}Wdxl$Jn3a2A?2DAdE8VUCj|=!Jik ze%M-7rm>|cL2fidG~ft7*c+#r^#nQS998hBbiTG#)xaA28R7L-hQ1z^XopPvwWB8uPH+(t? z`nA7`IdX$-tk_^rqhL>!Z7*!6@>K?Hdj1g#rv-VAH2EVFR35dJwfaSC0%lC!z#jkQ z8Yj{Xin60ps<1&4r#XcCdLbO>IKutV?K9xhY%U*JgHu@TV3*6MTCRJxzv0MfHG z)}aBu#H{r~>Q&R5zn50FHtRnyP|Q z7XeQ4Y|?v0zR8fcOfGlP=obxfqyvM$Y6<63^L*Fr@{|LmJIWH3-^Wmb8s8m%&gMYI zqG;jxlAAL4cu({wB4@ewzUx=`@Bq6$($@?Cvuey*Tf{eVH0x&qsJiY}No*$NU_n^@ zWR$0!SG<%QoaZ_b^Hpy3k;(G|))$9B^HVEdYmQ;BMo2qN5RuV4+0x)!Rn0+iB-!BS zON-kIeIK*0D`R@;(}Q>*09pNiuO9`MY_HpAUP!3h3#p{@*RN}ZJZbSSycdUVrB!t! zzc%g{UoU&3u_jLviyZ$j-a4<841CFZmOFAUbR;3)J3o`&M1idZu!@Q4%4VIfBgY(| z`vuz<ALB7;6qpb;}VjPze}EW zSKn^|eWsKnnwA%wQGaKs?287Sfklz#~?dmL06VU3K48D-+rF_=Uf# zckMd`aaJt)mS6x3ltch;{9obJZfYD`t*f?ojs3lKC5(~>@iw12}gzm+lS=8rOvFL)^@AdOdvugu&Pv31Z z;&r!6=lKIz4&faKsuB~;8g|uquibNiv_ku;rib&E&)t6M(*}^M%Jl-*9qE1d&+`gv ztF11SL=!7~KS2c48?Eyyzt6EtKR)Yk=Wn8qBV{oWrSZ3a9@ZwRkp!Q2N|I3+B-Q&w zwg)1hW4?W~&aOg>0w9R{vh{c93V_~H1YT(72W8>^huw)q7fF6y>iO2w{e62L3=E}F zw~WzR=!`HdK@EG!ibPA8IK-21{Bou~xpZ4-Cy|-!w>CW>*wmbwU(sbI>viDWj}jr_ z?LXnxgxIZr0eY`HS#AS##`jt&=G*3}6HUwaWt2U|ei(JBh(0#cLK>x-F1K&tV};c# zuh_K#S-t%h1o#WoNgMsiuM3U#?v=Lc2XM*TLUqcmN>-!iRec({{Jg|Z+I(XlFC0_? z4c*a#(xx^XQB9>vt4BgO8IKUI?;}R`K9pM@OY32O^!#t(N`iJ@)&r9j#XmLi?7$bO z{mY~*H(L_ymqTCFzy8Zn&Dik_Brn;r+2lU?`;EH;Y{2r z&;bdm&CKhUEk46MGo{1uGgvv3p(!U(qyWowfdV!Wn_7yYD3r0x6aX_Hq3ZB3SW$Ks zPIwo84{KI$enI~qg3d@YL%?!vAj(77txorR&u2MnjdP9#P&~?~(bx+_LEFzD=~fAm zh%m$HbNAeZ0}0r7@AooW`=Vcm@=ZLf%ztHrh6;kCCNO+Ca|qz#(@}5F%(JyvD9;ZsYB_1 zTF&pEL360lL*3Q;(4a{tnUMsr)cPJ+?}l>VOUOwzj-&4*He1$umR_?>pa2&PS4{cw z)d`J54VtVWI-B#(MB@dRrp8p+?w|T2$HT{$+=72erG+I=TEDhNZFn42)_?5@%tdk) z50&?Ydk_j^C6;HP-8a`!hI`ot>uZgFhOEC7W27L^0AfF&-URo=HJ^59{>VtgQ}uH$ zrP1#c!3&)??Lm5^X-qlWBLD|p8L(7ee;Z-_!=VM&(H_gKGvJDO3_IPy*VM_9faz!U zl9U;U2~q=qke@H78ikA)fB;OCs_d)DPb9wsy|Nw?;|G*~RENHxZ_-9>ZoDgh_l%uq zG$`r{-0}x#xqIEb?DtiLHi}8%&aFAwi9@?|pl(87Fjv+Q&1ikio@kKyE5{P!0_xTA zNxta_@C!Q6@6pE{um#+1*NtKnt_glKV9NLePt&nt%?c!D+hPjAnbvn! zOjUFOCUV0_uXlvRHsWdM924Sjt=n~AVvUiAeCApztk0M&^s``X3VZ^Cp}jy=p_s&LcO?EeOR z)ZNxgcg0`4@d6zODUg(Z9VriK9@HDWJUN|m42;V=;BMRm@}BXln401}?ugrj>fHT9 zN|9!J^+4S%0V$zY6cH%@FcajEhBRdxL19exo5h_1SFfRXN2I=`T}u<(i_2bAsKB4^ zU!SfxD4B==|DtLqfdZO?kBbg8aqna5MNZq`jZrk{w8YYnQ7tZi<4y(q{eav+<3m0b z4zafCcVN%}q9wYi@y%R69{&+x+|}Id+&iZDXa{53f=M~m_rp@dM3|S#xmUdU3ZD4@ z?+jlnl`Jr04Bu=?i)V+ETJsq~c&2uEVNrHo$C2wVLrgRKr-W40`*s4N>xrxk#Cu^1 zs{r6^`y~wxEg;^1PCtwe`fWsfuwZ!h|16AmvJD7Bf5cl86zVRZTC2Qo8y(G}Wu{R| zPk$)I{9X&1b;dXgKewoE2BIV8ys|6$u$7cr#h@NS@p_^eV#3Y!`K5*r`!%V;ER;g@ z6O{_yNKgELK7*n0#@(SEjZuAv0*bC>&>rtU3j}rKT+A1LY%-5i8X6H}a*K=PCbV)_ z$u2WZ+aV|d`u~>m0um|fnKkJ}(Y&fMBm6d+k9jS>)sVWy0Z3zj3{21b3?kj0#X0|< zRRcC=G|Tg^XUZh%gHG0k-uIGaQ(V503K@k&Z=}W+8LPYFF^bE&`$$MHT0K%a;X@2| zb|^U2V*7`GQRV_L;_f{y3$IDJUqX9TEcZHR>T9omV&lI)?=hS2bIKy|1J@JbmP{9W zS&$eK`Z6|98_&eibw~Pey)$xCvHu$MJ%x!LJSyF7S|)smj`*o+psUvovs2R4g-EmmH1P3d?cp28B!y4+`kD`aOQi9P|I3D8aYRYBT&IBU>Q30Db zK`j=4Q6Izr*`)=wm>s*8lz|S>AUSFvjJT%sI z=K>T0IvhrULpfuZgaiibBNCv%HW#d7K!E`o&KEj^7DrEk9og*Rxx5!FI1Gas1yz+y zTJ;qOzpGj4@81($N2*hUm7+es9yOP1-HTO!jXZR|xu!e{K3AYJdCStB*rxi`?gMbH zKNRqrNARpE&qEl%?x+Yj`ywwzYJN?>neV=tqi#jo=eCRY!~enj&2$K!AKzBDP<~cH zHY>fw?6H@Ud4GCg?Aq_~9J1{C-9?~(z84C+WHVnf;+$Kp3@85TGJaX2+c!Q9)2u@o zH31T28ls+eyQz0t%F)52oMnC_<>MKkdeSDa86YMgGdlqnxa6xFa*ddB6YsKqr=3Gy zNfNKo^|jWl%hQ{qq-Q}3aJs;E#8oQ`vFs{g5)z=7gJ*;*he1caSgO|`VeBk_h0=N{ zIGJmy2RaZFy$30{vJ=vLNB%iIu!yW;mteUM9}2fbHq!R#*EX4qXLh^yk9FPHgW37zMT}?Cg z6_HX@6Z#qfOB55v)<oBI?X#$r!sfp$S(LA5F&Z%?j<=`j&kDe~#29XZ zf_p1k?o8=+GtXh#f#Iyc(hOo41XKze6Gs7hf-yf6DDF~EwzIM2O2;1mIA8vj+Qhv~ zzV=YXNu#DqpLnjvjr^5=i>rC%f$&S)S&@lZWXF0SU8GY)Zn0(kdQ0ZAS^O;Lsev9x z{oFXV%D+S(onSt7iLVymtBn1(%|zMLN&|Y6g4h$zjq=$ixP1jmDhNT({uu#8p)AHK zJZ4Poc)0I?5&%=rzTt5Njyw2{uvinh_x$3n#y6j36xt5}4m)XoCRoKn`r?tmC#XyT zMu)o+U29!p5&IG3UMQ~Dk*{GF2>3IPG#FBE4-fvzsKti-PUMxD7dvu$Odqa;2yz0W z)qX*xKI;CCI>{Tawo)x5^5r06`x{SK{Hu(-335(ZYLOYUcfSi44hv^|;h7rgNF;Vi zKM>j4?(r1pMbp`TrbDQ0UqkmPX6dx27XD5AULwFiy#QO^-38%xalOv8xGckh-#5jB zi5|Bx@^C}A#m|wZm|%D+1*}vmBK~U z!|?7u$QsUxd=Ta5`2|^h=T4sIuMmR|3x-)0!-h7Hk7m*?``A#@lWVmd`0FL|Fo}B> z*FIT8K{$wi5Rz}0JP2Nigq*r2_03v0;cJ9wZg~Z$B5s}qMx)O-ehY0T-@$OcHt{$ie+?>k_WU z1bEoI=#XNQ#ioOl7zbRNV0EWVpFb=QGOkguIA4f=YtIoli&VNYZrbI!=p(?%lrGX4 z2AAdxwCcNiF%=lgkU{vO2gag;3p&i~e5h)lHoVv4xVp%$TyAXS6NJkjiv~H>ZY2z` zmUl?R4f`NrA4T#(0iFUDzRaFq^QeKQ!~v!691nmcM#z_DT=}Cy!Krty1&}ifmm8JZ zMCkv2b)>nG`C#1fNN#4p!XeG+$jy8eVw>~pLiH`^6QuXS5%KX^}Rq@MH^3_^1V(?UcRLR#b^HmFr1ej#~R+gnHoDGt(wlQ zzE`&w`^5^cT7A|JkY4%jQ>#RBZ7z7xN_`xEH1h3nSTc~_@FWQlCGwJtT^kNvjD5*rf}<_@|2N$*LGdl`9yuOzelapjo>?Qf)B6Z&e3tYLx5l&Y>M=IQxrtSW!? z@5dR-zHq2a`@XWd*pD$5--$q2xvTUJHUgFXp0cyIHQe1S4RPf3M;VU&lfjAjlr@qVq`#%@T?`Rh>toa#U#M@{XD zgSy9va;N$L_~WeO4L2=+NT=&bAuXO2^GtWGK2$ICtA#?9B^5+yX}B@!T;2afVHMxF zJ!D!MNTRn8Np9&W(l%i$_8|Xx0V64 zTIU;JZ--zL%UWYY^`G>eThGwneU=1u>HPE=1C)5vrAlkw07(YKN zMn>fzVFEb7$9z`_gM)rlO4S?kY_Mwg8bz!8u+0j@a)6B4U z`p!$vVJ50Zof?IIJp%*|`nP8srrLf-a_b>nI3cQ80~avE0n2DGunQvo1@rTn^exyL zzLCGLw8^mEiA}q@0cy{db&%%s1?u8itic>Sc>lCyoSOMlKx$2*PercS|TcHUwht)-f#;V6P#dMk&TC8@ zzRn%_;6I+@2jjA6puI#12}t#txW!oRf^t`BP^(xACT|VFd7CZr%w^ z=Kl_No$+UXo&}z7){2x+!*qmFhRYlVL@3l)P-cTP1!MK5v7chVqeM#&-jQ)6eBP7T z_Jtpk^bPCc`{piHcmRrK{cp_YM4 z-|A<7|86$Ah!&Upn!=UzkB?o)?mRB4Jg#DKBc4f(;PY>*Fl6{-y;|oX9pR5hYsf{8 zw-H%98qJ7F^vh2yfzk86nKF$heOo}=FxG5}>h@HUqyWi-TY+*V*ND3t>=?!P*wAw>YnI~R?n z_T>8(gjyUobr235bPeL!^UK*l{S*#h6(T#8BJuG9Dsr$qrMsHR%PV_Xpeq8JUoBN|jXx)u_$2Mac(Qg9+u|Pv_CauOrrV79KK{Co$Lv;+^o#rxt zFhUxwR#Dps;4fc?5dJhOO+0FL$C2``uENRXWzw!J^x^s6`pA>_>g1&DS_Bw4J`=ee=9d z4!%#sqG%+o*MvhqsB#m$HaHiRCCdR6wXZL@P6h27*wYV%0X8TcvrER{=FQMQ;`@DP z%th`fRiN7kM5}r3AZ{#(=+nl35B1qvK4yX#Y_Qw9Wy~8E1=MTTU^zgb#b$Z-X?{QT z1@d(@3`y>c>+4c097vt03yfZ)xGS$aCPUsR@SN%Vi)H~zQ6k2zcdd`2DOr*tk<=(o zQq1;aYJl23A4=dGlm46lKrrgo@>S6Kj5#UCio1@Mk-Ba0)8Da>sjqu~1f;I^fdvVM zNgD$(4xEl7_B<-+D+UZ}d`gw~gTEH+d>`p@GyTbuoR=+^`0Q-9!b*H_= zHWhd|aFG=`^7If-8fF~+YXm4BgD@=@pc zRfGXDc=`uC&)$;E!dz+&Pke=dA{=!h9l)HrJ?OUMh5$SUE&u_S@Z;JXi(|B+9uS?Q7avO z+Ctwf?On<73?Sfti?)iG?u*}Ye&@MY0Om7VhHuW_wg2I=v)04-!Al6w&!D~M2Kw0=wzu)DZ#(vVB=C87UpL)l7%O2qpm1giyyd`0) zRp4Ar*9p1$5X3h}Gs&^N2N1{Fp6|7cVN(X>73|o2+eSVpHK?G?>er$08| zdEy+t(BjF5kK&A{ee0WwNwE-epG^3QBt%J#?ATSW+2&S!-!*i>`{3JePx_%r zl?FJFUKX6D>7jj=cYXw2&r?kwt^3CoUQ~$TjABe#O)hquXg9{!C@`lV7&Fje80<#t z1KD}E$&c|~^bY(-pvt593S5!w`!Bnfw?Fz6&-=B{(OYtMe$9-DeNmrKtYS*4FK`heJ6nMa&P}h5?PK!u z+S)#U%qU!Wf6}u8^sRmVvd#SfK8y)w0H2Kgr{@%CaI|->3QjL_W_>2&u8wB$4NK{b z7r^v*;r>;ssInzU(k9an-@>MrVXp|VZ8aagv5<#&W%Bm}6idkhkPzfk=700qz5s~G z#E1P%EI2b{USTgZV!h96`>0Gn<@)sGHg4#DDW7Qadc^RKhL1LkmsVy~?p#5+)tZHG z_67}=Q7_e&#F{IY(lIH3YR^J+>)d^Gy37e`Dp&&)Fdwm%`Qs0ePMddq9m5#`nUn|P z3HXmx(NK44D(;e5-myQ4qwDX!9(_S(_7kcEUlU&?Kx3WC3uXfi_s<2yMn@&Dh>PNmMnM(vaJ>gf&`ktai=jxo!&sSS<+x4z#j$V@EqfL~jEglZvkg z!gObB>q#aAX#sxgv-;A=;G%Lkt89=}WUn3PtIi05Jp5s1b+qTm^tjMjyEz2){WK;G zh5pTqNYYPnqfKOfv3m45PO|!O0cf0mCg&}Y?spMw+w*60L1-5-Z6)X77$DrFaA3kc zs#wsepI^EG_QY}p02Y)#0;nn`eq%ri)ybY^+$(;1hTt=F8sL67E~6KjFA#3wr6(6V zzcgiv9}p^i_ygglk0|Qb3Q+OrT+No2$fQxvMkyM6JHdX1&fZd^GN8a;_Zkp?{SU>DvS1>g=L_5d<5N=B1v9 z)yO*_^1dsg0ipuCKDik9rro7FvUA7=gm?R68+}KuMC}>qiAwa>>DXJ3m1>ZxTN57U zYcG8w+?s zc~F^Ag5%{z8J;(*pkr_(7t7E>f%6sR$i6K*6_5 z6`mnA zS6`m}ebAY8PSAN@1E5MCSVC*p(u1pUk?1O$b6$to?|*ABj1Ea3tVKlt^|CBHktKP> z>Qt=c*JNh77J;09_i=FV|0>;-2f$nmMcH0kuw+K&@(^Tkae?|1CL`Uj_m4|ex^#&;r?5J;NJ6IcZvjAJ(y^?i zgE-pQf*}E#2pNd?ss}B?1)4Mlf-MP4-#%& zAP@|kP4oQRsv&kks%+5&`z%-)N))Iu#lXpnq=o7ip4TKeDfQ-Sv2D9KusFR5uS9L6 z){?Etf*<(H1h_v?a%JBD>OG$jQ*pAwe>h?QVobV!Sx|fIbh;DzBk5l}sLjNhQlY5H zpRgHU^;jfmTz#pvRpOWfT>@0It-gEip?c;x$PNMo92d}|M4+E&aO{Tr4XPGZ8n zu)bWSU4Le?bn0!+si{)%6pnSktE*gbwp}5|dVc zfo{70c->W~#2wt9&I7n#K)Z`RgQaq6Kbjv$+u~%9Fk}S%Gg0PB-0wDmFz;@B2N_joO1B(pxnK`W6>;t#J;@m2ehF4 zr0`+fD_vY({nbnI0GLL$kjtZ}@?fKXc4qVSegiFb+3J!cKsWC5vq*T>*fUy1#O(P$ z)(c<)npv7w#O9$DaK)y0B@>W6)1U+Aif#bapwMmR0jQv5212G{-xnufU4Uj$1n07! zX2%g4s{KsB-+e;sHF@ji-eKSiO%Xln=j6q~uYr=pgxY%EQ*w{g*6NEU8~g2lMT}}A z{db*USh?_lQ73JM$4inJIX6N%hH5;WU-Op%A3g6I2W7WLCxeBJ=(~@h!`i+U==R}n z-q^rhnj0jC^EYywZF97&FaoXg2N+H}^jqq$0O$sdkG0hyWTZy-WQaaHRws9x0FNtU zgSF(Kii4>S1DL+x;4n;0s|tXB=1AAeePGpAr@n!UYSCF5=(Id!R6IliR)2Q{J2#YB zBoCmys~khADbcoXR(dvv(_9|!+V3!Wq^t=};{{@yTs;Y&p{9Y`HXo%dJwy2Mi5eRh z%x!VXj!$ewd<~19aq*e=NVmJqz7>pO!VPkL&=(i>JIHFCaO*=WUWM*|x*&ga-n@qZ9M;$L+gC-`C((@JP#>bCfj>aZ33ZDk}$kprhZwp!mAGBxn zmH)T{F_lShH@h9ih3yrv&%EN_uxzju9d#ZvTupfJ1L!aR5(o-_apRI^tU`5R&4nuTky`~PsCB`J~#_gM^ z9Awp`+>-Hr&Um?EA1f#Lczpy4#QDe%mjoT;qisyQODOZ{;W*~E#oy<6@rQ2!aCtfH zpub2K)F6O0S&02NV>-$6FfPDQ@O%vMeG|9ISp z+f>#y3winLOh7h&2=)&ND}t~B!i7U#-0R#>*Tzyiy`OsQyO%HnNYLobh>bJyyRN?! zd@AoAW#`AU(#nYR)BW9f#0fi8%nyr zyFbPs3|C6RVR7c}K|@3rWaJYD`#0KIeRvH(WE)TV4)gqfj2QtU*agYaLX8L@g?5A% z&<}fi3(#fh25?C%a)nBBz)0$OdoM=)F{R%Ga!m#Le>7Z4di5Gdzz?Upp8-4>|8SQc z(r0`rGcA=5!khdD;oeyfH2bfoC);Cu@s%ik+%jmG#k8#6JGI8E=?*w5rl!I{d0j*~ z05y*V5G?P1ur0TWF3v*v&A^&p)MB5nm+Yx$;>gx8Yot~A*#Zm#bbj3%eiK-7H0F`k z42ahAd-&ke1r&G9L~h1z0S zEWyKnPxX;cbS@6S)hY;l97q!fouD5RMQdc=48!hs4YfawFZn`KwV57~-=97kvTOPB z%!r)OB;QW$3%6lWkE%;SFA9-pj0p1<`97%jWkvYxNW%iUZoB29J&Q+B9IEfv;>X{C z=O4~9mz^yt^z-t4RGOrB+&!HANL$$_A!p`)^qd8E_H-+Z&UO&1pnB)Om-?Fa7geN- zo4@h%NGvGE02#37LvtSR_B-?yHT?6%WHi_wlN&}+Z1|K>R8!^!%#4=ixed<8hAfu( zT%lhyrX)OI66ogVBTk?!a6cAk0YTdzI+VNpKL<+orBCN#rTi=^4|+lxt1Ek8gg)@AAHqR<+fqtjn8$U}91%y1!9KiMo2ilJ4OJ zZ)}l3J>wT63j!zLzdp8`=~BF`0fDiG1dG`Y-q3&faRmWxhDpM> zYk0(6MT+uT))uwxqMEJ;vX!uQ2r7%!yq$Gg@847*$XX^V?d(MCue}>rkO64$1=^fF zy&qmchlCXf-S-1UTQ|a*YaVak-T6_SUOS`eBH>7~AQc2v=R*)A-igQ$LU}`fchwtE z4$2xx-)7_L)9)-k^_(ZAb!xoX2JaLAv`0hneQDUxe;PNLP;Njif(1agyp)&z4ujg0 zl2@$0=Qr0VpD<_SCflYE)Z0#3>u0kf5g6N8 zF_d@D=NjdbVEb$T-&pVXAp?(5@%0sYy-?Wqg9gD@OwwsbCfWI;AWomCyUb4k4N9@tH4EjXQy}A6)Byr9)XrEy;`OiqD&J z3ZMBvM8~+V`$jV1EvI`wHDNpMGGHDKa0u~|6(F9D1bW(#NrDOqLamF0+GyRvVf=jC z_Z!MBf|~M*#Cl#3tstqwwsffAj8Jh3pjPFae(nhH{TM4s(}!!_Bi_ckNF#MRg5_sCXpT>M=qs z>uP%|I_G?_wgLbMaism}9UzAV&W6EnhGRcYg4+m&odi79Z6FYpe_J;Kw%7KC9WLX9oXO9O?M6EvVZ>dH^F1j9n@!DAsYEH$jth@^Q4RQ715TpD8 z|B^Z5ROhLltW6);Mdy7;E6~+3KvxHh_$TBMk-#j|umXQV1Htb>Ga-&tGYw>Qt zdp`PEt|fwTD4&38ILJmWeMZ5^&&(TN*y5)tD4YONBSEjEXM~D>rS>F0+Sg&XxP9yj z5f?yzXPfl--HXxzD3HYD2pUtW^XZ(vFsJaBhiy7c__+k%=55x{f;?`tX@>gZ-d>72 zJ&Y1#kfRW+t{|NfOk^_{2sxuCN6ZyY@F`|~NHkymt_*-;pAncWf0y4MDF#`A2f58S z^3a7i98S4y3ACM3G`vyRFrKh~f9{n?6q?Atrrk605P^B&ch?$8NM2#; zR)8MR1Lt~i-`pH@X*Rt5%%OFM1mh|)ezZUEA4li0r793b(GOxkPD3T)fMRNmI|3-7%DUI7QY5LG!Op@Z(s{&m#JmP%2Wpk+_Hu~p(uub z%}e)8QzQj!{`6bkP5FBV8^$`|ZqK{rej9HPu(u`!5kx&POz!yKB@!=sEGvp41RwE4{Kx*YBNuNZ?<~e zjszYWfa@U@T2yU7{N;`!wJ0DhCq7MqB3e`F_iX07@&Kr5 zZ(*r+*|a^mKU%Eq$O!U(BTq4ZS6`E6PM_e2eoS76O7IP2n>!c zfE6|%5a{(&cI*7(9zDJ1K+M4VjCoBL2@^lkmR@V)Odemrsj2#a!zD$33M00u@_vva z_tUHu@rE?u6TN_%L$b`9VsTi{e|7c1Rm7jk4Xm{Ruxf?U2~|ylAx@Enf^_l5F35z& z=FDA@#dkuf6Br1;QoQ-!IsxN)OuSb=^MjllMkgWN%Z9If1&QPLkR{q&Vg=-ub}6~z8(yLen-mOe23OYdnE(Tg~aY%t$U7bD<2X8OPk6Vp_QT7%B%)TQd!aF)}?C! zFw%{?c(d2cZaDiyd>3&}pgp)Q>*!(q3UP3uld(o?JLqat70<}L>d2TFotnc;6C1nB z?tw5k;(lBAf8>7_33uHOnLnnQN?=H42zq#IPp{S= zjT9Jt)+o=C`u^UqL(g_pA8l_c&=0pcasV9=m@x=N2}H|!0{3@_)qA`8$8#PT-icCh zThLSWqG1v0qR&8=yd<=@IMAQ=w?WJwz0f}cu}`bI4tAJ-h3HqK?K6M4t7?8g%3hr? z%bg5taUnT(-Ed{a4O~cqRT<%cI{pp(GdlrQtKA{_Wk24)jWtU^yF*GYQUw>k)v4%i zA0CvGd_IZVZAqO-3QfYrFLuOG!m&w#wnMq~RdFO$zbL3-q2z!MiklDw&o0wizz~Es zCk;9!yj`|`M^?$SLwi4m9V;i$nAzRnk|@~F9^!|8N^7DV|{l8Nt*`vq_6X?R~@85H$*HU!963~ z1JeU>HwaQO9%Mwn%vpwC7@iviIWd+z_0O1=4(Pyt1`m5nX9!ZiaeM`TGaWHZrIdc_ zW}yi^Q;P2%bZB~O<{O}QL7EVt8$7b7DYI}+cd|`d;ossg({9(#&njk?N1#lk@x%AA z)M(y`JXr53&B`1s5WhfP&r`xEP$N5g+fXdKx1v8{3bu@V|6wqH4@GVy+yzPxIk%&c z9TsnYBlf-_4zb*LN6W$n&ox;2j-lv1!n<|fZPt!8V#n(T3ckMJe)f0t zvbk0zSCsPzJZ*H?(u+a25GL>FobAqvV~mG?7-Luq5WQist5qWNsGISegDuDhS-rjqOl`2nFQ(-ic3CBN z4K)np$O+0wGnD!EBTeA1AHXW>UFQ?;(wWE_zbQ%Dih*>kG-yB4&L~$XUbjV2+rAA3?9Urd z$j2Xag=?0Qc?|$F84#Dm6CCplO#qc|()>E9r>0Cis)fpZ z1x+>KHylyB{t%^Cx07mCoyxvG8m&Hm1o;ahEldmhOUl4oA0HdUVSP{ujQHjUePQ&w zb7hKGLb5qsq8n;rsZZ!vGb#cp;q&MlFStaQjxT`+zDAI4%ejYF-D8X`_Vdf6-bm?w z9IWg?f5XJNF7B8lAGnhx6-&^Oj8wK zbKOU_9BB7dyaVbo3kgi#QUvf<(d;9?`eXA?QRK#NPY1DA>bia0UQM`|%PDSu;6+KX z;8bstaly%}6|4IGKd)?;U~4+P+%+DuB@32`$FI~yn~-A6oHK-f7Ok>1L=W~Jr+^lz z<1%V(aMQ|1{8x31v(@0i9>UAmht@whCvUVG~Lxwwr)*dY=4u702rp2 z5HtmWIE(XQ9k%%kRix=e!vbz0MXEaM`qKoZ69Y@jfN_b>vVWeK1Xnfdiq4Z!E9F%CfYVikrvv;-Uwf zwLlSQx2jLk!-V&Ux@RG(n2JQk$IC9p|-P(sGi^6G{8pbg)YHP zvm#D;gGAK&EvHCCopg2rpx`RJDnzeciQjqf@{pZ{c{Mto0w2?ML@d0rU%*gC|hNIA&X8%=o0QR^mH-6e^*WUeHHgxEq(D<$JiJF znu!cF{9z|RBwU#CkzAv< z=1KpOS-W$MGPt5{2|z4bimvV-!%fn z-ehRs39C~Ge-{O0HM9rC%%AEK_V`Ukxb1|HILct3&GbWL6|BpAM=KyTgc|H!ZB9-5 z&Mep*V$d?n7(ADR0a{9wYv!>0<<$IukvE*yz6V+S;P~=RQa8 zbU)&qwf!#p?0dLKCivv#+EF$KAAl7F(@r6Wa$D(m%kgFd-8(6(w}{c(Jo|QXgYN>H zUEZr|2P02e5U+Q*0FzS&l4T!6lfzO2kLe{MNICaq@e7L}h7*J2gV*Di$?aJ2&otVh zQorKoe;ckv%|_3By}F9wSd835?&hYFVOad=slq1GH;|Bb=l^e zoiS6ORK@LrA4nEsWr4M~OXYH|K;Q&!7Wg;zb{lkH^z>mIZRUT;T==r^p-%%ITm74$ z#}VFaJ04+{xq)~M`q}Y~o8yO5a8j^YT0C<0e?aXK$SthbNDc4;_JyqB0VpiV{P&`+ zh<)uP{ED%y?h|JY|JIo>;z8svl!Pei##BLjgSxftkGVAUIJ*x z-4aFi{mj_Ji|`n2C9=fD6GsbP*&f?h&PV3e6eb~eWp|VV5Nr(+Hfqr0tv%2YgLooy zdEjd9fCC3_v@nVg7RtU#%^8wan;rN8f5g~ZwVS1RR^EQp#)51CL4fn9THv&VXu@Jx zv|Xb2dp~nMs_ch^4{%K~8TZyiW7X<1iT1 z1^;m+S+_yklV2G8Gr+w`kzHaU_vyis(Nd<;@l2YxDWe(LI)3B0I1NgeApYq-f4WB; z9`Zhp{cX$YFPlKT9ViG%-zb3n=y1Pc?ER~Vur<@x_G{4Wj67R{wyyoz{N^-W2yh{8 z(AYL-L8epI^honU*sK|}Qo>Ly9H23;Kt;sb(PewgN5^dw*peN~q$AY7+of*H6aaS% z7lVh&BunRhmWbkPeqbz3_AAx{f8Fhn5$qdlj`{LG2efD!EF$4~6(LQJ*Dt384reSF z{ho?i;KBrR2Y~3p zPTZp{xl?xi0Lg{v`C&o$e*$7W=)@3;1E2;F{Onb5F2T@84ctvk8O-lDgK3K{Bz~ay z0%Pklt8V5*4?P3gqKSs3DjD$YnHvpYP7cJgkEJ@+;kqPVcX=U${$3BUr$*3qO3XKf zT1}_$`Y^jS2DSdVx5jg5(>5C$21sq&(Ggqk**RKx9xbrc{Sm%&{}?0Nt^k{Sf5y=Se&-~H=#}(c!hv2B zmeEZviG2y)rJIJU;Kcgzq?*7Mz;8Td8VCQdC>a>x7DEl|JFPd}!-G=YV#gB)yCRI@ zdu44q>LSERBTRC=YDd`)SEs@rF{0ap%irT%Vw7D~mc%e{XG`n_4Q&ZW{SR1E1Oq}A z7>>%U4e%JUf27Q+_>m^P^&UY9hQix751yp_HPn^|T!b8>mw| zLIGQaB-Pk^C136Xj#G-jsw$8};(;?DCy!MphXCpN==X>ivgqspPJ;}FnKrN0OB8z+ z6#HWyg8Y)2;Hx8ZoTI-7A?8!idyM9$9m**ff)}$le?acuMiIDD>e}8q4Di=6j?gf_ z)GGDq1$<5IAc@byo&cy3g1?7f9dN?Tz;j)VM0RqmYJACy!1}31Qi^OK+yG#o!!sO3 zQVcJkF>7W=ryXObfo+CiI5GyDabrewd%m*cDySM}^ZS z#rqUhe~@6RgNuBB#}%I0K3vh6h(cUTKh$?TpaWEG&}M>N{ya3w-jYuvcc0;~Ntgrt zjxdx&9-OIB8X)i$9%1BL!YnyIFm!D;!y@bgcW0=trMcELFtgknPK(|kXv=|zvzf*vOfR7UIC|Dd|wjRh* zzB^CGAu@kzx*2rJa-E;c*O&lDRk@YOW*QmrHXDMl0z{g{hXNx5QQXY#=u3!DMJ%?m$2 zRMEW1p68^h5g_g4mhFzk>wxFHuhb}EXKSV^>CQUt3#6E~1Si}eP?bO&ze{3&U?{kM zkqF!vt`VOs_jU7DDfE>pD-+t6F5uh2f1JgX86y(M4G>4Ce$YR)P?8J{uWlPhpH(o) z=@&k4pisUQo;pZV|^qDx4i8mdbZEzUo`YjgPBNU>H!H zJh%q&lUikIwI~U{0H^>)gMpjew}1KkBfXq-O+0-|w#@`&uiVrz-;7~#g15C@e+c_M zC|)OeB;%Dg8iHYkZ}W_kqhLtP`AiX1nq<2+cqf+igf_a-)8nwk-ymMyxMZwjPU>wZ z9!?2*cyD0K8^O9w8eTJpE`0)g)G>L!RPwxr@J#Fq*?klFlBqe3iQgveBRPuIzGSuk zMq)dBXL8HKAE@H$YkpJ^Qfx|yf3;b7yq!J788zA->^mejT>VHK4991n_(oX)rTVq~Hpk-}#Dkv_` zbPNA_x%DVR zryh0=534L_B!^QOT%a((tpD7dg80WZlhoKK7w`>1;;OCmEb$6ne`v4`{0X;sC#(1j zYbulnd)z;DZ+ze3_TyK8iu0{DV05Nsxx$KSyP)Jh#|s7GBb-2aZ~|}D29mb`S^O;w zuO`1NX7B;@bE)p(T&4zI-#C2=0iX;;3aa0peg$}kQ(TDbd zYn=n97}0ti_^fp~JxkC8x{(eV1&d920FYdt5mPJ~@2SzCe;fP+eQTvZ!4CX&3Tdlb zNVsx!?#2ZivG_IJ%4o=-m-dhh1 z74v9wEsv929AEm(hC`DnmxE$72$ee`j8=6Z%_}dqLSn)Jkx8#ngD4VnKE~?vTFCYH zn|~MFxkCXXf2#VF4j+mZll=7P#7^v5;Vmt(H-{39E_ZvUZt-)^?_0%sTK$$F@BQ;c zz8VMAlMBcN&{w#<_jg9Uq(cyg0}v!G`!S6-{i>5+^OMcKTQvOY!kU5I{O!H^Nlqf= z^|r5g4HeD@Kuh~G0{R5eN;o4cxcf0pW;v69f3qqtf0TSrjE}yqaerKD0AdF2LK182 z6mYhG}k}f7CtrRdg6NeA7zIf5t7JW}3%KFi`uT5ZA?ST^f+TfiQwc!arPtv;(WHWQyl5 z7iD&?g_v}S&M-~S&;N4oAHBUt+LSe6k1B+fG>KC<@Snhf2M>WkklAd_Ki*#Rwub>d}H`V@OC%d4~f|9J+&k|;vf+j zRFl@z>PGT&mj-#z<1C-k@?VU`TvMuWUe@~Zdk#J?P^tVDp|+OVC*=le%^iKEJeYU zCl5bPU9+h+7Bgg4#!&XlHv-)Sg@7S0sn|%PT@g04z+sMe`g&Dkj_1M%5x}K z&a%KJVbn`N0=9YXHD!c)z3l|}+c2l-Wgw#*y9r(Xb8P5@m_|ft_Ny_}`u8>fe}v3f zk7Q!}mMget4a%NRCs5qZUwNbab3l*cZsi1~99xqX%6s46p=`HMh@LGAzU@2G6jkjA z-Hk?j8%QqdC`bbg?3{S6$^8eSRAahn)JHd{ezZ!ZmJ4Q@e8(f~d2BfSqOlG-AtA?h z9}xup=+<{1b5PD4V_ck1`z|VMe@d^;ZA(Z`vd-8Ah3yw9md*``hmVBikJv+)IlA8l z92;kC?#N5Pfzc>?D#yPLp5^8arCKkYvqj}=*eMB>0^9|q%zY*GFE?`j>a*hCJ4VsN z@AEkeOKu^-1{ENH^eb$r1z$Qc=iH?$K-E~r5De}m}$oGAbk zg2v6?by{1v?vJUp0c`V!pr{YU@6|;DiOrHgYW(*JLi?`Xl?_2MI8z1@)fWW#Pb82S z1fWcb0aOHuxH^;gqIFw)y-FJw0wBY&CAj2)zV*{Qb4sQYk`iCuy2l_Cw@o@k(%?$1 zuQ?eYKHTe2SmYjUJ#}-Gf8t3b4A>hn3W9GFx>zRAn4X5);kn2l1Sw2Gqge}V=d`ki z2Nmk{J?qvs5kT0?`vc8CqBq^&Q{1d9{M1&G=mPoteV(3%>&8}{0nHKxo|so4I>(F>VHY4&t~`tBQa9m?#;5o+ zrNkS3ZT7FfzC{qbf47f=8NuS^d|?@wU5x5b$SzT67fxZjwkgZP?~<32Od3N}?*tti&H13%WOvv|BI-bYgfALx>^1n?WrRsD zLr-lr84BsmBk2KGO9|C#LoKw*D+o!F(k}K>e_-Ypx`&#&e=~N|0|@y~YTAO}3AVG+ z4C?dESRa6~5Js>pZ)5+L_jB-yhNz!DjS@DPPXPUN&Rn!TI{)PXy7>j}C*gA2#mKMP zC~4~9s%yg_hR>>k1!_C1*N)06{(cCf`{CN$(BVq_dnb4s3SYrAULQh|H-Tc5#loxK z`}c7iEG@_Pe~C+XN2W0dg5MI+@^IF_$~#tp>5NTHiQzypO5bm$0< zw!ej4*BAGm2kduDLJvl@8hIY&^Xl!B8d}1bu=L~(e^|=$bYOt$`5~taM8@{YsFx?X z0tgu*VDy-8j{kaUy~jU#_u^}nPOejdY}c%3@CdHRf!@7LSn7P8+bB9y-F{ym^AP=4 zPXKG{XcpLR#ul=m@xdf8li*X`03XxW_u-kO#(#&2<5Z_sfJOABwL);L=Z&b`IuHUB z$vDXTe{`7>>Ebhe$ox`%sT2qOS3FRlYvjn`ApQMk>YY<=6WBpUP1JoR4eVbgAkU`# z8oB#?+rYQoud0xDrJO%a5I%GH++mB>jEIULEFZ3~_`40rf$|%oMbKR%$~p})^L}l5 zRp9gy)?J`c%-i!C?UFLYo0wjRRlDE zI%O@O)a@V=XxcLt*3VdooPY$D>~dV95V!QLmq(|k%QT5!O1*3VvG$XADLZx6xqc5k ze@KG>8M|3@c*ynjP{9X+z~HoKyGMt|YvB$4v8K=gSV3k}jy-n%T)w)XAW?l;uu)xgSice++9?NRk2Blg?F$f)gP56tY3}>ISm-Vpno5m6i3&cJk094b z`-BWpHu*lq0%lk3%W(`0pAE#WJQ#EQ)@IUWfkAR|643WT4j8}&+fI1c)*2e(e_wTq zbDCg#7i|#5aLQ&2)7tY;6uh4aTnwn07nk{d*#TAJid`%iEg=Z7-PY2kUA>`GeofF6 z`Q^p)z=Y?+5B4gb9Bz*lx8s;OR9$%MDNuM|cH@y zN4V?d-b$f+_r2?DR&pY*twrN3p6M1u)rVCCx2Xi^56J4fsn$p_VM=t1G=uWML-N0g zKTHlt(PtDS@mKb9$8}*KW{+vcE{>Ak!ohp9@*J_4*_`4~{*n*1`0JM`e}?auv-kHWEq+0~kPhL5j2#2Y&M3Z?K>&{e7TLmy&&36htcXP( z^-~ll_YIavP)_UMyJYy+WPl&nxUiDp7iez%NwZ3p!lVoMMP*5^spon0%owClz9k|p9N zr7^r6TaqODQC`gQrz(4;{eddRe zc%(H(X&sn`o&yZ&KEF=4fyhM*+8oZBw+|edYYp3}uaEFCM%;gCB|?;MY!T>pO%G=; zZhpEAbhhkR>GSKye+@ZM#ax>~JH+<#k>`H&h59BV?0^KSlBGqc<88JlGRf>~e^I!s*_%-YM>#=@jsk0hZInScT7bR3;Q9Q7U%Oonc<4Bu;FbO@^x5~6 z#lmX8HF1Ipo$-6qN-3DXMbwO~pAMeMuhqqrpaM(@{5(KjW(K20aAMCXMhBupMQ8ZU zQ_|GeSGPs8>omR=3n%E!{e#hB=2|o{`gyYJkNnO_f6yX@d7R!^f^EN!6F1FUSM(48 zr;sv{JYEQBp=2D#v!rGViuPU}SUIp&}UxY&10v)5Uu%|jRzc{}F7_OA+#YgIq zV!h;kgq_{#tOkkC?*5X_2f}^O;$ubmw+V6K}{1lR-$BqR|7zgoa#eT)ppNcv1 zEhJaufA10bq6ERMofVWeZX_gxgqpclb4_mpjANLvM&f-HKuSxB-I7BIf7jPV=fzrp zbH1tI%f1tab(?q!*;x8}%WbTDjcIwzh>mR@KZn)&5eybil!LI9$76#6E8=T<)%b*< z?gi%Mh#$-(jTl$rp^gzP<>2CoaP|(QpYh&rw1SjWcKc45ghw)?f7a&T#yu`+We!x;tdRpve7& z>8Y*2?x4GR02*tum@$8CM*d53(uVu%P!BIe+$w1Gu5>@YM+v9U&!UL^p=lm&-|fX* zgim0sQ5#XRULU&^Ba^{_Cz8@71}B7-4?e|uLV zlz{&RrzNTR(l~YRev-ydy*@tPgiGd?CHxM3#`T*lkI#Z(FBzRwE)0(TJdK#`d)U|7 zs?UXakwl|Luwp*Cq9simAvA~mHMcK!?Ahki!5!+IE8Qe0Fv|{OG+EknCpH6uFYAU+ zlOmCE(efd2WC4unV*nf{(IwTHe>E_hcmX(7EQ7TdQM+3VdxAwNH>*gA^uW*}|>1AY80#n}q65!c{!MPI2kyXRQ-N+et=oo09Lz?*UFh1MVhU zKV?GZU5DBKtlbzGZ+3${dUHiZ;jDM7Z_z0jdL>Y%Kk9|yeEo{vkMP+v^UE(fH{W{` z5FIiRzPKu{-?mNpmNWqKe+klqHP^>pKAU|UM$*Rf7UO3%q>grZvx9+<(HDMK5tJ?A zX)T$zTsmB9ub}g5u~>6I^pwjXiq--?Ari1;hHaS$GxJ~FdXEq}w3VuKzU$a7iuC@n+aE-3YY4duz zUi^E5Eyoqp<< z`%}$uyzAdh{+N`iy@qv5Vfkb{nW2;%zSfK6aA{haAsg}4>XI{$eE^g#P>(~Ypzv8> zw|S}_Xx~G@q=w0k;a#`Tx925~VlIwVtO9MMPL`v!;CNxWf3_vJIx14I{u|Xu<9CHt z5lgJS#T*~+PB&pj$2Ik)sp^0lcSebbuXqrb0iOWKyzNqzjSh^GZ~>mA`2n?^@>6hY zhIb%YTZjGF{nV&(WgBd6Qed>R6a6}H4YGG&l$Z57lN`){+YOJIe8$4KmBQ}TH{DXu zSyAe-9=^0+e}9~YFHimx(=CClyQ2kam@(@MnmG_~30<@;jLqL44}F(rX9PpPnPW{1{6$%B z76{odS#*Ps^Ua66+<;@jVIf7oB$mB7j3S{(&&z%L70UWT@9`mpZZtlCNSbO}1@-+I z`|rn!f04Hh$3Lyh225Ht*VFu0_~jg|pGxkjAf^;jO-g*sRQf!)vD5v4B)|ZHNhwaj zFt5jfgz>M27oA>B?kd((J(C*>QEs$H;JywbNeLBv-k%fK~9Ew47jf47I$RUjtm}NB1CP93Nw<%)0qKO7qQy?9zTci~ZWpnU+Z}0O(4iL(jGRc}(hu;a z6aeLEa20e_(e_Ri3U|Zfp<6(9gUJV2Pgc$(L{>tWeaN3k26m>}-Ym=eB|{JwAnz>k zf6#C2co|g$u6J3e`yE)VfVcHn%gp208)WG+1`Duw5T(S%x!50uqpt6_Q{}vT#;Vfz zEhr}k`SA$jBhfWl`YdmL3GT5=6$DP8v7VxJ5rcWy@uP2q}y^j^N};0HNdV^yX#51t0QMy4p?C`5^4VK0+A_# z>y^Rt7~y!iDQ~XtZ5lZ|G#wQU*1pm2uL?KMJHeavE2tt?;;HwuF!h6z@%wp=e@<_Z z^?QpF4nHTmg+g;M;cj3YGJTipL{dwneG|t|K+x5^48AjQLE(WDu{riR%Acx#4!Y!a9Dzvo3UC7^sW^2Xw6+HK?zgiHWy zXwU8m^7Q)&d97!{!5qc%PvjmNONohB)H1mB;Bt4Ry1#Zj`7`uA*A}cCe-%gy(2vb^ zxfrjU^?7Yf!mm@IG{me%su1J-D!i=x6C@p}ZRF|hEswL1YG83>L=hqI&D#0>=TX1D zU1x?fSYT8(7$jOmM01G3iW40L+5K4CH0h}7n_DB=(9jM{`=4KCrmrKpm)qbC`0=&g z1yT_Ik`|~PwrD|;CB4^Be+SKOP?=3C*E*<#aq@eKm0Phm67l=)J*bx%2~gB39<_>R zRV3}>A?%NB_{KiE(sPOc`vkxr{a_wiBtkVfRR*8nczlseYyA3%*w-+7I!Hj2n|Q{0 zJa5fajy%@8O2pkYYF<1Kehn+oVc5l{e~P(*2Zep9**baz^OU0lf9Lhsxv2H?L@#60 zxd(dWp}~bWgCYXGW-^l!;|W~XtwrNoK;qJOC3QN2Gtg^wAaGV|B$;Gc%o!(8FV`S& zOfS4rlyDY(W2U@HY#AncR(CCsY0ak@Egy*g*ltecKdZ%^T9(1(vNq?Qm^c#kF0T=M zP{tJaKGX^@i+1udsyIci{$vqmRr5rJlXy?M2Vk2#;&TpfWk0 zA^`P;jLgDF*|uRS6kMF3q$Rv_I%|p0dbuZcx?#iO)zPe|qn6`v~X@*a9?5VV`MD#mSn;kJw2l`2Ai+%;=*O)%*Y)aIHR~nZpCl zv68(gp#u?sE+=^o^{8bYg+I}>{0iP|)GTKk*{|#wor{$#7OImM{lxbY{qX=`g;y-_ z)9dp`ATmg>vXejJqmpO+V$o@f{0_eibSCT>Q z9cEtYf6&VH)qEVr6eweIkeCm`><>KIe>aEd`dV@k7@Cc~1Tks8+>Irs41sF_wAsY1 zR@4qm+$#`s)HL`-~lW(>?&mN#ze`vHp_7HrDzOzG;B13UY4o zfAMMY?}Nb2gJHivY!aTGBAjT3_r!;y8hkbV>og}@ zjCwgjEh4f2<0v?eN+3#8>+h6Qg8;lx6QN(jB<0eAjRMNs3nbSlL?Sm%1lBSHBpa~6 z8Vci$H><9>m?P9gWQ^LXl*YZ(Is)?&e^J0DxQo6oa#vMSfZ`dSbZK~ND;9CI2c}?` z_@=*-S9lJ`EF2gl_|r5>5wvfhvk3nb`QK#1`5)1KuV z+ha>K-S6HiNnv{_<>*krT`Xc-x77Po5$3~~!1G|(%{W_!l~@v%2maI|BigBee}duA zBPjD*qN5iVU0+I|jrqzX*Gq{Q*duX8=u4sadRF`)UDZR{df%&fF{9n{lt<7GDvqwC zgJi0*rJN-6p5p|%|q1r;lrk9zGrcPE|?^m@K!*Bzv3{qImiJ-*{ zWMeyvMzS;E$*4R8MF8}TAM%XN1dJA51l%$b!O-)(jep~aeh;Ty@M`r$!eR9}4rB?!uwNgN6depNDoCY;=I>=}yfS!$wE)xAI1`A zdU80AreS=*gEH)zI#;Jk(1UX)*&JP9P4f8~B z)nQ<6P#=I3e@KMQtNs%wf1kTzCp{2b5gis3>TYrXV9Jg~&UJ=(v4XTFZ^*J}zbr#$ z6+t1DbN=Sg!bPj6jN~qAFq-FeeV}vcfTvW4i8s(|2Xx#al2bMCv;6_ancgX&%&E`c zM#PXq%}jn>Ckw=88WMibF`aO~wGhl%RR? z#TrEh`Q_2UXGlI7`T2Dn@cO_WESXbRe0T!|n%O<18Ob^>f)h+>`_irHWbK9@K@2id z1)%(Oe`zA4zcPH?t)`?yF9I9@IA0Ql=0g?l?&jT^3*g!Ht^@6CQCv;#;|X_tdOxU4 zA?WKg8_-txxAU0U#ZZHZG@yVG@qvHQIxu@LP zebW5}%@~Io+kol^K+8RH;5pS`t2oXd|K(mhv7d<0O1Lmfe)Ia$qMh#C=Zc0CooRTk z3JHwD!2N@ssqQNGGg{K{_pURS)7Ov_QO}!pu8(u$ZL$h?F-nD4Lhw9DlW7=`;--dCCE7&DV=8f8M~OeM!HGBvS2j`{ZaY+cp5JIncnc+faBa zf;vtF@x*ZV_qrsu7nY3h(h=8aKjQRz>E17`s>8}^!+anE>7Fl4e4YeXXjE_JD@epjt-FEv47}pQ$Vi3ZMUz|;U5(cVff0bb1 z#;WlAE`cvZsjFX`9tbR;WRbxEs#}e|q^**EnTbBNG}1yT8KE4f4a5h;+y_D z&P+i;tw0=_VbreEH2=?Jp0-_06Ho(!q%q0wr4RX(kEUSGQIU zYWfBh52{oAK9w`{*^+7Y;o7TE<}{ujyxm_vTRIhe!2?%u;)Y-c`#U-vpJGURa21kj z{#4@!&JS>)-R&o9wrQtuf6_|%3(0Y`VwzJ~z&u6pvOfe&A&b(4v*#xzfPNHDW7U%7 zl)appQSz+L5}AUODj7#)n6yU&tqXwx&~E~^I24kGZ?&{rzHk6`<{nVG>aU_>!El|r z)CG&yY{cFKl=E_}m{V}!FSu!MiD((N9%jbOfiBpO1`a|D@P%wOe}jsq`@y*6%!<2x z+H7AXQ1mr&-vnM$70tyk)?y7GbuZj^YIT;|03c5cFG`6W6GFvwS?A%<7APXm5sz%& zsgY`I^!rstT_mcYS0rbEBNPKE*E@1ayDJ;ACs@Hhz~-vEwyy4PaG|T$K1p`EIKKx% ztNPkh%*26qC{V2?%I zevsGSho`J@kCrC-wLZ}k2*DGyL@qKsEz>&&G>lD_K+)M1f51;rzj{`~Py(LZ!y;DD z1`)x%=HaIk^cgyy+5xj74EO0q@yt6zBp(Q6-+_h6v|i{G=hcTsm0+#bQ=7RD>(utx zvQFd>MC3SvsA35LjMJH+mLDw9C;~f^^Yh^GhW6{G)0}vIbMg6XLw_7q%wF;me;GQB z^Sjl zBRijZd1?^V_950>!z;3aY{64qP(6~4d{{~94pl<(_SW0rGa3OSxBBQVd4n4^;vXCz z=Y70wswHIX-Qk!dRO9h-KT%m(Ru&6ce;s2C_`V35f920l-0IUTIjnH-CoO|43A{hfu1Gb%I?{dt=NIMNf0i`iNq^>}L_1K)KT|5DaY1D{-9WF*ZaB_HOC2X~1*GY7DSsf2`WRh4bi z?(S~0D;}Q7qpTU%C0;<4V8p*qRpq|oa)h{j;WA|UNvWd`6px?Pqg2xBSF}kc%6BkU8jNh2Zeb%KW-7P(4HU ze`8u3loQBWr7M@-vNIg3nB=Gt$1t~()ZQ0*pTIUir_jq*`U^vcz1RM2p(uLRRItM?5caSJQ|yu)b1o6N(7^Z_wLAK3%v2Rs{7RBZ@O0*etv7OeePH(H4Nf6(N` zn%2hTySF@06LNz|@3i@#PyJXYTa77idwrt4mX?*&g_biAxb-cpnO%MXb|_C)t*ISQ zd2x+fjdCc32&{}R>^LiH6hIoN8uCSHU-x)PkriIxTridg60o08Ivf7#7Gafx)&2_j zgCzUzY+u$Q3vLjWX>%A#B&VtNe~)_B211dfHi-Np12tQ60LMjafuq1bw=)4FqGc7<{ ztfy6=H2Qnh%h_%_PKQqRWXBa<%==5JY|hU^>`}tpN)PP)ne>ptf3i%D%=H~m}Moi>EBO`SLP(sQ>E94>aKkG+&iQDfN z_*tHZ`Wo6`!X&)au|!O{xxv zFsDIBJ&9A|&A(A{zLE-tEkVox+Tq)aPH+Sk+$T8FqEh@H-psWewUhq+g0vWA;Sd5V z3Gjlibt<^w1Z7W`H2_C;ivrJ;=&=g|gSMXS@CynNFRi`Ie;X!a!$;+O`FB2(HT{D> zEG$@f{XN%L?oc28_kEZG2HQS&H&EW^ASI6@iYdP0zu3*^n|9x*2__Vs05Al2I53!B zeI;yMd5|#b^Arj=@01OUN07O(IIt!JfG|L3`?6L zaR&A0vlyX#R@w-6%TZEPywI0R6Y%>(jg})Tky2WANX&9}oz%HpU)cDVl2bFHwfgw& zxUS^51nHbetc4bHIaXUSMV5B=nZiHbC7Uq15)jXCw<;> zuin8Y;VEcmk9!At$-uEz;(Rw4;TeClUlQ7;)5qV&F@(&=WFf~l78_)&+q4`kfC$Zrl3cD)dXWv1Kl9;Gm8mI?;2EOh^I!lHr^LJ2WPZ z@2<hBj?~Xc+mq}a#^f39^ zKjMSOZgT|pqjaAvjLYf_pdNdOYV^AZ4b;wq+nE!= z@_|RDELz8Vl%cdbWOFk>*#RK5u~VI!2;wOA3&R(>w#5#t?&TQ!`b|{NsjK?ae{~%M z^nrf+er~UzTbiaX1K4c8ALykc%Fc5DmcF~KN_N(B?d-1uwP>DayuBjrxyK~tdzVon z6T(p|rq5c36Kw&c)EWLOfBJ8`pS3~OfG(X7_moO+A!Hluwx13uCfp;&bx!A&jWr>B zVwHyLXVF)uh>80et}1B#7K584f9QleZ@YPL)68VwAy6rEN6udCj=~oG_>^SgfPs9f zX2Fj;{(_D>u|(jsVMGD56Yv#{(OL4>AQ~)7Dhg=g8TdQhlr%wT`7y#dbb@7%h`)F5 zk^L!Oz0aNPy7lYK`vG98!Qo$Bmu>OUg8V{KS>{Jn^wjZWaRP{-uzSKle?hT|o{l>G z$=l4B#H>ZJOVp_^7;W3QUkSFqNTrwBr!0Qv1lxidkm93jd=d$LplHdQVzKo|mwgU( z12Y6o@70R-n5N$|r9Yyn)bES}vF6QpDLeP|t?@vMs3xzM^6577Wp_U9`*&h57H%}v zduhuHSK7|#z+gwFarVAGe>K0W`zs!0ZP^r7%~1gv^%fz4guy=VhAv%q0z!>;G?yJ1 z-bBxj!)DzQYeGA`l>#$%P)WeBs9&~Br+|+nz#%!uMg~4ZO+Y_qewDyu_q)!$;}_%A$UzLF$b=vFjbx;&0@5?pZ>}KLR!1zf9t42w6wxSGt^zb zZ9FFv^ZD`zjxKo9Z4kw?3dZ?YS+;;Ssbo>qV02M_tneZkf&eW*(!VFoFP!#(Rpvt0 z5rrMm&Ja5)lT9!zSAmZ2SFuGU%l%o%5A;yLEjZMo3}T0f}-Rq{~ zhNe!7DSX;J4?sr)#x-M9IjK=ll3}B%P}55q%0m}f8jn!jB90Phe1FbD0x5#LIQZ=1 z=CfZqn9`2(co1FPoGa(ne`VlN+gaP{sp9B91)a6+AizVOXDCsTo z)TEpXAAJxKpTGHc1fCh7K89U@`HBU$fPAT-d5V_LieF;=10I|D_i+Z)FF*oma?M1G zMRArfPxNe=V?tIoiGKpY1;Sf1)>MIKQjv^Ad3M6&%NmVtw}+XLbb0I=Jm}Di-Rs~A zmPgxti}6>HME-*pI=O9&qaC&Mdvqu0LZW`zJmxoMte>vm1(Ov5A-(y{EZHB*&Tg#! z11e!SQ0V6xH{h0I#Y9%R!EF0-Fw+-wy?E##!C_?Png9|F27jr~nzdUdXbqkThe~12 zUCa96<$_0hiKl>xx-b{amsfgK%>8RX1I!Z6CKjSeg1nfA$yxjYb0foxh08{8RX9Qe zkXe45Ak)TkJWQ+>*Omefq(bw6S9!^po~2I*yroY)Ow{3;vKNo^DB{l9R*7YHhT^)V6aN5^-eFj zh#g;iaoW;Sa~y3jiF=vVbH8(XnoRIj>brET^L7$I&7(PrQlCNEszs_qHrcqebMJ@v zd#POlhSE&u+{@~-9A*J$024mwmo8p9C=&#n#pNj+R)756+%NP`(|^Hl=rFcGT&P#jDVvX&-r_m-!c(E%Uiv%hp^R7OkYdGVA2)r?gfsnUl|YO&Eh z?iYI^7=MMbMlaiegduS0XPp3qy10o<52OS_QoV0 z7copZv1=Lzt{}U5AnP2(y_QBnhf{LBT9lKvU)UK8?-{c-f*-EC64_ti-{x8Zq>+pi zFbMik`K8=MVw5~W~gWfea?2GLG$*t zg?|KcdDe40vu=yVJ>_c@K89-pn$Sholt@prMk{$JG;(hxVyW=;hK$Vc8aaXD-Wq7~ahN zH*n5XD%g|@$eOD>CQ+BzpoM7kR%$kK2I?-{0WynNe#QpPX~UB(k6g@JyEzYd3yo*nyr*3 z*=QW)q}*^w>|aAlU`6`^&s& zF2L2n%rKMw=yK0z_G<&i?uKD;9;)XDu)77wEHo2ZnsuHhBXIFk{!Fa*@Hjw=*>{*# z;9e$)^}cSqvU5%{luiBn@iBohs18U*%IXyrxE9|pr zZAh@mO3?O}gDJeUX6$@3-hV5dFP|X*Cbk%gl6qs#{xke^3hLq|CeX+0-_I6B<@f4r zxB{>(AhE6rfFik^eae9Ig_%Jy?qxw%cY8Mg+N4&W7j?Kw8LQOt@mU#zmJ85(uvSt~ zqW!%Rx-a^`hsa#|gsR+>ZgnleB0=Nu=slM9HXLv+19xBnWX)3nQ-8Mp{;nlvtbn){ zEBRqWq;7ekt4s}-gf#&BCzh#?`C&*s>aCg~l@#(TffGZr$)8AHH2w`_HeYit;4fM2 zXflO=MZ#;eIAfi46hqzEA;~ZXxsmhZTeg%u!jFMeO+!p`wi zK7KG+ov6-6LeK+H@H=D;Y#Z>_wppkP$M5g`(rSyERxQ0+ZG#QAwj$6>G{)=hCK3X= z+*{bF(-UWA1(nEyoAL(=Dxj>iPUhMmI=_-i^nwrXV(}yG8-MU&WDzHURR|_{9QidQ zlcGfklrxl=gId@0V12kJWfYPI@lbn`J*OzQH+zsX8`rUBFCfi_BpGu1?lXccLFYk; z_SSUES0vk0O$E1n-tHf)QqDK2BtfAo9bJ)ss>H1gZ@KOzL|h6P7-zC#cxS62$i|?k z{%(IFNF**234dBuW^(Jc=I5iW?%QVCm518GTSD#OfWd&$KT8L#!Yo`q;Q@aaK7E*rjiOBW2Byb7#D1SN7c90^~Fw_ogU~2sxVu2Kb zUMrK#js$v;aTDSck6x{_)U*j7;dvyoIrK?fU3pp+>>ahh?0~ACmR}q}YlbLvGh2O8 zjCW2joo8gohEuZ+J6AXY;y#U`<_F5(eg8(<6KdRfsenrLB`9N-jq!Z1jH!N!FIhdg zjMvT$)_-;9TeW;i8~IK)&hhdP*`oa;AiV}n1A48}N!{1SJGbbYHdw05pBFYVH-0Y5 z4Y|*|OmBYh=-v&!%+_!^P-J776$)8Jqo}Pt(mMb%`l0sZxt?LL_`VHG1JkZzi#B6l0lL$#Pk5#*T%}WGf!+F*p*^6ZU9GHG zTVks)vNSp{_d8kO`2Ln9t|_~BBlU(YL7GZurY;w?UA<4sz-Br?9HMQ4{(_|#k!zf0 z$A2%~Q~D9R7aFV;>gzZKcfkFo;h5!o6^02`-63o(q0;X9X&C>z{H^9{XR_dg(CEyGO22-B_ zO@TDU?o!~xyQL!KFV_)Sn3eaCcDmmWvwx&_E+|l%Bxq0aRUjlS3kna^AgJ5vup$t` zPPdIo%94~X8Y6l_B#wScky7drcO4Y-E5^o->;?}`m5V2E8a&B4kIN`c61bB<_4Z?` z4R}PN9>b{X+8@v;|CWOJ^OA`!7`kW=xyBBS?WG0shppP>|ldOy{x$kf8~6by2vvl?wW?nm9Etwz+RX$4nD_> zI)fe?Qk9cl312Rr3!q=n`7;zK{CjeqR6Y3dVXqjU8nqGGc9@v3I}e2(F|~LmEJp!Nxwsk3RyJXS{pT46JRAVFRpyubNk{83>6W@S)-{*iGn(LY*9)I*3=q|f4 zHz^99Hk(ZFmZ~NlTAEOulyNneaRtKH`S5T(nj|Uy&W@n$&mQ{orB&oBDRdaXpB2TV zE0h}A@@hig0j91yt(6|%RW29#KT#lI1X) z;@sd;Er5gcuf_5%;F3Rj`u1^*NYBHwrv8#2C5^(tOsIx5SYdgKrl{iBfkb_nyxpk) zqdZCypIh}!_5MX)1~cNHk)CYDFDM4AuC*_q*OP4nn-O5QcTQ=CD}TI#Is;L`AIOc_ zo3vh`y(8H-`B6t{U%3nnlo6|}s+NHty}YiCq{ay`o5y)W;r=;aMO*>!RG`#*-?Z14 z{IP9v?*z;yQ0Vj!6^)|r$|kqSnvMjTc+SNny`?Ctfotxi!m#aIVM>#Ypxf*uB3O9o zvtag#YzeytQZ<`=Wq%1nmHA9u6ub^}#)SgKEwm9D{LWaoZ)Xlx8~`ArQMYfX*i z2d9R>KpAi^lu4HYMeo12+Rpb9dvuVl8DYvC9F-<1AMSZYkJtuHcg3iq7`8NEEb~q7 zsD>oEk=|w>^ktLEzFE%q+XaZ!vH+{y0=r*d(NFtnd$fy@>wlR=3wHP+ihOUbFkq=Y z!*q{)i2}-M*~i?x{6zyKan?*BMd)V8zPI%O*HFG<4N-+LTqn=haMc4TCrQW*s5522 z%=4HsBZbu(`m9m@4Soj05lXs5H(EEhF7?Gur?Vsvyyor(U`Ny(MAKCtGb32Aqq7q{fV5bC;j*`x?;F|*}!q&l#c@zNomRKN`cZj z4IV{S*}hs|dku13O|BvZDBkhvYb(o!?arLp;1P30M(yeJpSH~NiI0%JAoAwo3mwo6 z7570J!;+>e;F|#(+q3qg*%>OG*C@{+iQ4^v`d%CisDJ%A62o?`d_K~%dXHcIDDO0P zwhqLRxw}t<>GZhh{rExCO$m_|j3(p!Ge`zW-&YHu{}KAT8JWPS5l|oONh)~WQwQx@ z9&wA#u;}s!(KUlud-Y|>`-K39*&I>geW2MJ32N2)Rxbo?eF)x9zOLq_h=KQ`cs>xDp5%3E5YvEesW1&>6sR1F z^!IC}jp+R190?RwgSSP3VW8hdE>*8Pq*9j1EqcrY1#)WGD#`ET?$CT+anDdev1p=h zyi?@)EN|PesUf45UUD8kqrVqW1QIZ@)6pxN9H%28SU~|FEPub$poZ}0jg~P0zNKcN9uAWV}Fe8->TQO2N2eMxHqXA-|_uPhwbz1V(bl)Tz?^- zBw5vaBV^E`->cllQoS7T{nSW8Hc)e~?_qs`x3~uj4VN`Zh!Gx)Un@E2=KXu-&*%!J z`d&`i%uST@%ZO4x&#P83zEA0OY2aU{MzBCWIB>mSATKZmPfW*ml`r!%`pI!~%2Q5w zEtJF$^k?;BB&j+jKkWvEEvaDnz<=r>8SfZGls!0RY?++xBau z2i2v-->18W9mPnp2!$_1rhrw%qr%TFf%e-0f@ybEsOwWZjPJnppTdx496CBEt|5qn zn?Rl6H>Y#8Vd%vd7s=X@a4^1ez{8#AP_wFOVhFok%8s@`;}wtu%zxt>Z$=iV=RG%U zbv0VE2m(I2sJ<$^i~G_vA%CY-S@M_~gc4(L*RS8&v4|oNmk^V=Un1D4JTh7kwFgRs4EIg^b|g0a6u9?D8b@x7 zhQXQaOhz-X@ocdCm47f2pV^yA7ukf-@AkbV0TwSx9Wl@{nP&X33Ba}z zC!>=^Z93eTdhP^wSg%Itr=A$_XYH}oNwMOG zEv#QqzeAQzLVpKx>^*l~pljv!mm)ut9q7z2y#|TN=5>_I_n_OS1^~=8a?)ElF{$*x z0BlWmKbhxB`o7&7r3lCI&x$r59GE=NDBtMMC+p^_A%?4q-Hv?L$Pdpv5)oXN#c*hX zSIkRym1!^GQD3N=SKj*v@I^JG zlN`F5y0X9ZaM#*y>;|)U@fHGo2^Rw0lrIRYUzI%>WP+AjZcQj&_1` zD#qMSQh$Od!I@%dRHZB9Sx3Ha6`Q|r?TiiqAoy~ck2_$xA)3JisMnwT({)lIEE&oQ zGVm3dhX>{=&||1qvNFM!g#nO1S>Q^+wH;Z4!aw(VH3(^N zVq$+J^u73rsb(OcH@;0o*x7l9ps0}zY7I}ONXG|XV5PYUv4 z=KWiyd?YzbSNV4|P9jq^i8lbnkg{lrZvQ@MQ?8Bs1Ektuxf&J=Rh77ka${nR1#={* zpihQHFB||=^1q9!6WOk)_)y2 zL}UYy$PDA%^}TGkZlfx3ez&x$eU#w)WJ#zGMQ`q7SL?5N)OpKd7Zf^k>vx1CE36zD zlKJZl#Rz3l*&|unDsHwYUlqntGU(Aigyupy0b)+Bzl6F-U^2Qsxd#E~G(YB(3(_FPH68UE6-l4%+V6fpgFt^I7$$-X#CTp)gn>(?D1GrJ{wj#@=ck-*jpJs)~d~ep*-IDF79_c)2WA$sR@(sKw=W>NBTHa!}CScg#xbwa|q6a z83caIoE+xtIfYppJ)S={DR8tD?`U-;{_;f!u%x(4?`>Bo(fi8oa9QklGdMpgb_Rt$*ga zY;tQ3I;#k^)+@d)`E+2nNH!vWa*o8gMgsd{@%h-R_W*u1BC+c7Qw%F%0?9V=4PM{4 z#J-f}#YstT)C?3v)^ou$;G7-+CkO%6^^a$d<8&+%xFAAw$>iNo3(P3`RJ)t@)s-)4 zPSj2)W_|)Hu>Zi89DnfH76u>pc;A5IYov``7$k!)3q`V;ST?PP`~ZeK>UYDQqlPkl zSjyLzU)Ij?yl;?P>Z(4RAW?I8hsnJ40^gx{5f+Lpmu`ycP0zgZcli>UJcPjLV)pRl zAHG@~SsI^T6Ei*H`3T}{i9yIeHa`aAYV56}DYCr~+h=Ho@qY_ujF_m)zE-Y!Yjjh? zOy<|DEg?KZEw5arnJ;JlIhOHCqkL5RbbyUPImTjd_oYFh;y3QF+uiCL0a2YRV`Kv> zI$DAJ#W7@toDH!Kaoi|0jREfdl~4(ery zQ2yZ$5=LtsZ0+ssr#<_UJAg?z@=e)<44x`GM#|T!1?uG-k z+c;gE%XfjixP1eO3Vh8lRr2uVF z|5O1jXS_;(K!!}$o=#=HS5ss;WC6{(#v<#Oy!h6joria8no))J2(>>zv;@A9<;#1e z62(-NnCZ>yc@4t;~!09#ZL}*wT`o8M^uE41+RWEmb{dVND z%X)x3fg{m(VnY|MfO|wDO*UZ-B|Sfcnf3Rp-aE17RPyY(RY6X(WzWJ7Z5366Szc{q z3zr?plDP!JKL2|R1o^m3GUl(cVpg6)qL7i`K;SfV-Vl0Z$I zXlh|s(DtT^f?{{81+R_1h9NV6DbWMs2fz~M*x$$ZtgvGDi<#t0_i7POm`@LiS@H); z{}n}C1~|Q>qYH~8gKV6A4z-7`nSU7Im>@}lhxNi~Sx|V4@s_@HY2NNuY1a@n&DcV( z?6m|F29cDE-ks}~(yP#L8cPN$Hn0ij8#Q#GB8;HmusZ@44(3%tEH` zWSZ9yU<_xM`ET)ozF>+qW=(&uRU2;K^Hi`OtiaWz{q<%#YjN1hh(bih)PM4xv>PB3 zt)AJh?)8ddC}3Z9liG|o_{{qS!5vL;7allmud1mwX^pPFt z6;K=B1@Y)L{lh?Vbev8BPar(nUX?p0f(UlztlLs5xdk-4k@jHvKscLbH$8JlEHJ9H zbxo&Lo(J#KZwQ$!TMf1H2`J~{R%iyl7P8yPe>Iv<#ObF#At$KXRgG>}(w= z$n$?oPc*;#bD0Ih6=1c5UyHvQXxF(CN%cTgj8=0t9nfWaj;Mhp4h&%3(eRhqDtl`h zAmi8cy1J;C48KEgfPYKV<5-B*&eBX1@PewF=ksAka~I$aWqbyeWsk^LLAZe&zme*V zR{1rZr>5rOpt=YLHEWN>Rh1epuU$rfv{&~Z#|h`5*(D`PjjoieV3SJ8>)QJ#)bWFg z*0PAGIK{KaeEMY9Jc~XFoD*2`c4?>t(UWJ(iNffu43dWy*njF3u9hcWkuoAf0}mk1 zMK(2^gSncR(a)-u!LQlYPKSXqSa?9I>Pg(uE$15YSI>VVw_GOE^+NHx0w^hQC-^9Y zZyrX}^9?u|ECB*8Lm{ykomwxRssTU7d!NGb_D~i!aM#YkIFC#KRMrxPocU<^2=U3~=Ui>iOvD>k@8Y}ak=&cs zKuQ|OU77|@dKkzjibeRW={^hZMcs@juZCnAKsm^2)u{w15OM%%CK7?3q6o#;bT{>5 z9ewBZER6+&F}>p^kchL{!>CE$MiZF^6W=LALvU?_pp-hP4xdI0D>k4UpQnsrAkP1? z(1E7ThkwBK1j&ha)H_kuPhr&2;R4z&Z*y@#0v%C-(L3smww^-7~f)FO!zI3aFvl| zljS4PtB5TEQVdr6$%>wF5)yNq%X0$}vu(P5V1I5V3tmpjGu%5p*x9z>K85XIls5(j z!C76D%!t#%_Gz$oHZ6p?1G7m77bIyhXEQf(KE3IW&&9!Ts4thKN?*Q1&E2oxWX)P* zjehD@u)f19JTA{jH37ub-^&< zeSeCwxDS-6z|Q?!S^xpiJ9?Z>yWKsA1HzfuAHPN=tI6fdEaTAvEGW9OQ(yUhdBfTu z;@t9D+qkKB=-6B61V+Hji4(t$N`d+^rOV2LoFDp#MF<$IMq1I2CAL5Qzk0MQTZ za0Y_G1%*-1cVS8VHn8hL{+eV!*jfWHm2QaND175j7RLel79aAYDELt38h?UYx&t)Y zk;}OVde(3ZN%9z;JsaTjGNWg@68}PtiU|Wh+lP@L3ZIf%b{M*J%!Hr1+-s|d8HlAi z9w>*-+*HXxt)jvEh8h{Yk??v}jJ7r{nKcfg|vFHTH#}5p!vd)TT_eop_kgt~vTa z=^a!O$}|{)1E#;S7pHfu)6kT6MaZoZ<1UY;ZCYQ3H?b`1sqc@BDL?FKthg+li*M@F zyV~uuli?p~5dg$kw^|l(pCKBbV}EAAV!cZu8?_~PAA|wH!IPQ8*MCU`u0bDqjX*7m zCo&<3z>rAjnN7@w@3twwY-Q@7qoW9%qhxLfh62cd9zt_1(uBZF*p>=3d(-#B4wj*r z?YHad9cyZHFDuavcfIuS@V=u02I0zKxuOcbD;S+ z2YRdmV-xB3_E!d1^?@l3IDnWkf~Hco&~cm>zMb$4SJ&LrVhA(?TwDnm$;w{8c}bLW&N?Tj8yh`cOSx_$f*7T1%D(KuqJy3N=H}*qIZ0L zl(Dc>6T2LLD6M#ONoNyWgZpe?>hRqzRne!T^AB@0wS8o9Z42 zY=b!~AU#fSpnp6|kuWz);tv*m>Z=Lgix%u?9=z|y*Dw&OxA z+YXY`2!?PaJnqRx6(r-6Cyd&xXj!Hk_yT$T`x(Cko`15hY3So@o@oLhRnoeftu17q zjBZu&%s^7x=hz-KfAFY|#O);}Sy#|$@$w!syQGpQ1A&*Sb5xafNuO=}8s%y(CjBUr zczqp&vAy!M(O3t1C~0l|MFsf*q>Sz!UYZ{!-J1eZy8(=j--Maqv)L}0ZT4svmuga4 zbnZ?sm48G(JZ5;5Idrvl{Ay6`1Bb^&xU!-C4v1-a{H$|Gmdpd=6^#H0bMNCpgnrb)inTZTvR)0ww0NoI4D;ca+ z$X9e1<^x(*u*{$xM#{aY&CH?Ea3sJ<-S6+%s(+WKG}OL4SJ13&7sGw>D2W!bcfKwA_rgjd&l+O6aX5it-xU{3g%JmH7jgu>(EvUw?SPy8|FljphnD#7_-2$eO=XPOL6BV@_6# zct-d*;O%(bXaoE^9ivs1c)t($CJ!41%ozfhm7+@XoC-j7hsU$h%cy2OqV zt|erva9l_PpUH9gspxScE2D_s@h6C5iA27gSJL;tX<^+KW(ml!|wH^BFi3lzVQ%--%SNk}MF zU!|%x;fKlN3h=Ao?(RpNxkv9T+)|pwILM06O^gCg^jZ6L$L9U*gP(a$s;#-YX%7JC z?i?Njb~*+;z?0X#cwnrk50{tlu-YX2h$H<$Ut;_St(Bis?h)=;7K*Lp{C_r;nVBt* ztRP|k8Db^l$L!5Cb`WM5_px5&7bN=rN=|8+Af-YeAZ1r5?z|CQnwA@wTYIkUnuxK4 zr!R5!1MQ+(XicM(t~7rWxp=R-ilZ;il|HGTS`i=62eE(#oT_a6@RK}e#rH)}PogWm zK??}uYkn-ppr!e3VQFzhoqu)*!_tF7MfuV1;%JHKJL`b=;arlm9mG#lOfwH(u{b`c zQFY}Qj{c?z_-jNF=|6`5%Vj~!#BF2beUpa&?kz9(Y5RK4S_N9zQ_rr~@O}d8`tGao z->+dNOG#fEdu=Oa`;~&)qEuH78@>8Lzy5LrbD-EZcNr^u5O)HdOMh`SLASuw$wok= z2!z{Tc*X&*+L7hz=SCxlF(;eB-Y?Vyd+>QfC*cMs*nxmo=I=cxe9hcMVrpj6V&jOh zCp{&~f$;cM3Lw1Dz3+{i-R2D|PI#kK&SBYH&S|a!Bovi0O%hO^fh(s8+Re88MXo%) zoND?$zQQVTS@HV)d4E@sE~FL_?+Tny^_}FOGGrWVOli=#_t+TS_}#YVQjbBryxu0i zerkMx{JQqsN*lb=1qE1D8f3r}0d9sbVS)Nw3dxJ%D;Mu70-gZ~?W(V#w*}BIfy`yS zh~xttPGKIExrDPi!vb`O>r!&{-9bK*IxXyu`agjTDWZA5@qY*SOD{@_3{8SF#n1y= zKjUTI28*y9wa#Rq7@-ZbAd5V9%7E*f$o4JV;y}L*pq!@c6eQW(>$Dg5P6_az4`sv! zkI@?QuT8f8F7gvl0ejF-UnSz+j0t|D5b;pYh1SC%$M&M;8QVt5Ae*m{0wL zie5dMd^)L>O@HtP66Q37y|nS1KmfQzWxvBJo+&U&TNS?`s?<2*f_(}rZ|Hq?g_<97 zw2d~4f#_}}MbLK9zSE6g%I26%~^7F>h(D_VPoX{QkQf5KLofB+e zeg}V@b?&h17iRAK9gd|J5^wo7g5ziWfRQz$tI@kY|9^fPG+eoQ3t9%OiQ`~XItipO zRAU%g_d+mm0q|HPB=1%Ct^9b~2l82MPPMs;r~C{-Wu&Wuby=q*_Tjc=*bLTh!z9Fn z=q2Cxhz=&Yg^U|vq%4vuS1U0=~qzJ4z%1PM>`sW~%7?}o2< zm;pzqly5EobVJGY4>&}V(brTQ<}Vu7fnxeWqt1dnkZdo?i~Ge*=E@}joif1e6bL%s zV_xoJLSnB@prb1tfSPhi5FA^vTr|O1<;JJ)DSweahlp0Q(=Ae5US8QTp}Udqh+p$V zaj}&MYCob{c7`mgKl+w28lZHjZI~X)T=V{-&^67S4m?wOxoHd!|@HD zAaNVQhTCLN2|4^{^j7lSJi3coc6dWrDP zpnu^kyz2~W9h3b7{45}D^+}$`L7L>gq*zB!DYP>1jq>?IfzrVWV0By(PIPuxWl*#n zpZBLOa4Jy&q5vuMHgiokTohoEQ3V#^nA=9Od8-5<`}a@NZb`=xMZ_YRsQL-1!|exW zsq?78IkDxv1|L>2@Z4@L?SPkF62YWJTYmzsgx$)rng7C-H|yhs|89<0!sK<8%a-fk z)Y1X75E_6E4wx)5vd%N+c&vDaGYN>^afC_)-sv*| zHH?Q|Xv2H%YY(@cB-Vs;+wW)X3kVQSu#rNRAs z8x&BuOG@J83^w*1lAY!A)dU`V@qd|t=-EU2-vgY$9HxLPFoL$yJs_5@=IeF?;A*W& zyT2hPeOhSUFZ^%|U+|=Fw#0%rZEkt0QQUy|z}bUO9W>Vkj5{wAJ~oeKTAJ+(4@oad zu&7f@_}4(l9uJ$Ii+;VIp5#so(*-$M50%-;y7Fl}8r-wrKbk;@JsfJ`Dq@$Pc3 zpD6XlzvqdWU#mz#9B2033x^6|jF>+y(^k4-YrF^6H@<6s&I(cS$UCY_OYk#h6={qs z7nwbTAu!@q6-2A?jZFuow0*=#$1RX}76Hqq`J0UUA60Fn7O3l&WPfNXAS)%ac2a64 z0E-0LX!wsl0AKQT)=*)&#iI8pM+%O2UsN_xP@h2hrG&y>H@G`JuNs6uu=W|w-z(3Q zUO}ft8iX<$fpv@H_&cR6pefNh4Y68L!UT4x(SbZLjXx0hdbQ3aN0|e`o@z%3MHFer zO*Z_EW_2(_uZt!$-dz~b%?&#hSe+|D`jIrtA*0_bP6*iNh1l%sQty2Iv7cm*rV}&5 zq9^xfp>p#l+tG=AOSy?p|3$N`vza;_Y%`a$}AsCR<-j%Gn$f3n7#>UITOrej+`ET@J>uZjsg?B-3H!`$PLmDd$56E0 z_jcjL{J5uP=G$J3ukL-Vicj9@d6O`dAy0RXR;2#OmxxWw`krv}+#&&FVhH)#HFick zEwiInk_e#ket_cx3R5{nwCRJWUBvFXl#1f z*B-PGn1N^(ALppFYbu~GG5kzn4#KgR?4V--G3l7P<`=*ku^%m-0y}eqZdioBa{Wy! zjwtUDlup{C^+Aeb>n~C%_B5RR)p#x?QCbdmf8)*^O8B&G@?>$IxM2*#6ffpQ`?I}W z_syz%3@`~u`EFOYwg~~6A_ehY`F#-2^H^qn#7+kxw_Ee6_4SR|T^pF83z*i7c!=NZ z2#h?02LEnZwS26I&xD|-K)J0v-&dZxERK}XP%)S@*g|cjj@xvGc zf9ZS7s8zYnym0P@_K|pSq9OyH+Z+FYSu&#O&|l0)m7`e=&x@D|I$7{ zaj78RZyNpmVuAt#5>7)1Ho-5%!qP)+e@bwqvgNoLxqbU|O3`q1vWf9lH{bS?LPaRj zf5Fev2if_4LB)H9)>+!+B0D{nHEh~>L*oto9C^}Leyi3mQj|y*4lFQcXUBV4V*x@* zGK@aZcWf;02h$*;Ym1{q2vbsJ`;ppleK(oWGteAW0F3!fU2-q}r6bmD*@DB&e~!v= ztxC?4l_~}wyv#z!o5=b~R^>zqjLQbSJPFVpypDXQ&T^**j;w6T_7j)U!)({{S;h znKuLlkMIrhy-MgqIV|}UDzXeBA_3CCv;0XeUFSPRU=?Qa97o{;`nulxZOe+2*d2#q|L513T~E$D+(Ax*cSzKy>UI1yn_&hUu>k1#8c_b0@{1#5J1 z`6ZxfZv!+E!@KstDX1Y+rnnMYCCjY}t7)jRB~Sj-lX%?>P)T zAJ8o=f9wJ$!MQ_IWkjWKN4cnyc2Gg~yM&+nO8`yb^7Kk|V<5<3K!$<e+}$#uag2?;xQLgQlrKRQ|H)uKBv1b z2Uq1)>1ZqTw|~MNC>qz2y!9_-vlV>Sb5R1x4YZNJ+ew0a`U#Qr-f~NEL;dS35C4Ic z`Rgj1RfxQ>nN>1V=k#nrEfc--As=cDUoA~Ru8pIg0s`VN$VP3v#$d{&Mqp#fARpc_ zf0+vH6K40*is+GIq7!!e!6_b7&0x6bY}_VJm~o>MqIob9!{z4%){<^7Vf_wa+2HTD zaHj>t(J&5b*5yFuFMk*G8;y-OKN#(&pqU7GrGd?aBR(t7R`4I5OAxwwO|G8Kp@H0T zR_>cjDRc>|u_wa7d(b48{rrv>(f47-fB))Bs?zc>Lm8|ik6PgM=c9$f*aD&juRqwt zk((K+3|O|Dhm;~knXhQtx$NcmD>}58)a?4PABA1>-Ubl7L;OS1SiSz~n zt~iDIvqw^q6OZS^qX`TFTYHE3ahHhw?kkukBHI%q`y&xq2;8jXIMnQV4rxD4nWGOv z@l|A*xXYSV$^Q*HoJVTZ3BXS$f0$yRKx6Hls|cws1_3J8Vqj*0ltU&CKjBTBx0~GZ zvxmcRm`{NA-0XSTeBg}!n&on5yM@u-8wlxLuCFWwzz~mTm<~QDvv9oWB>`_ z9WC*1j$soR8twi8)v2uMxWJ9|3}i76)y#AP>Z>k@%(;3Ngqzb8-=Wqoe{~y^q>H>B zVawg+ulyoR41Qh38#Gwk&7!FMk~{YdHBc+?Q|6qNp0Tyc)%JYGdJuElJLP!=a!RG1 znm7yP*ef$$hMn&uAk!pJD6Ax@BW1O#?nu{OKfA0OtOm7PE=c%om&A{7sf0qE4hl?Q=NpCpDXAJ>E?}&F& zU^5;a`F*Ox2?pkDZ)_abEoO+_zVPu*{D$+>mL7)ly3A@z*OA^}UMfxw;xWp3!*B(` zJQ|{J_IO~>iJxoV&ud9x+*D^z&YL^`(M16beI~EGWu2S{^RE5IfAh}^dy7ChK5)MDH2{Us#PZ5{Z}RS{G|e*~ba$KMUx&(&ZYI;PnllY-B%p^qc#r9yFs>|r=SP{nR~=!;%nr!uHQ6Z+tvxl7JCao zGtM_eCtKdj!G9XkpwSaMIt)(bMPNpK+Rk9MU?HJAe0? z)A0LbOF($ouyyaZxlJ8Z-gEpI?r?iN9ys5AQ4n#s+s)hn+YyJ@CCwQExHH^a`)u+o z{p?G4c;pbQZe2D{dz9M>zAIWa>Gj)FG`haI?Ajm+@4)s+f9)qEV!Sfz8cuj6x~+B4 zG5lR>i}{T@KpAT9ECBTs1^Pe;7$70L9FgEOX0leHwsj{KLLp^^3!5&hv8a@qEI1H>!2X(QXsGboR}@ zzV3SoCW7%mO)Gcp%ctB#nv?F`s(urs1thx(cf=OQ*cXNgMTvb27}|~#-!izY>Jqk;({lx=fnb=T5y7(FVg(G^;QLkoelyE4=vzu( zfap3SP~{%;^y_PTrG^T%=Bz@o$)JwIE?rJOtV$4VaGCNiM<;kl6s1VMRKNnk7MQC@P9YImyy>g@z{+Tm3Y{HV3@`r zHGgB*``Kwo27ilb%Biy_f(->OYaGKyCXYtj^~?5)VYm8S6KdB<2sVNf*Rbfk`?D~N zcb4xXjNsJzlf2*s)4#dAiMD`+JTK@MNs%N4E6_%G2Vavf_^s^(@_arx`re?H+h9n@ zw8Nuw5`Svk{^3AhJ!z}^JQ?aEB0DDPBhV%Sa?;s--2)b%QEp?gjAZjGw!u`C6G>je z$0$>xjKSgn8$AFb-w_)PpQvF#Vw}uGC)Pw3&MZMngWN}$#cRE#j*K^z%dn*eOE5cj zKsDSg(-Lt9M?4t@ha98dQJBp;=X1nQ|5c$K&42PDJym^bil{9yp{|pTRF_0`?9Uf` z0X00aYAolwYM%}Y zX@KBi_8Cp%n}MHc=I?K;UCUPYu}k{0gSqnrCccj^ZF~$^1!f7bjhue$XA3~~h$Nhah@wP)$mJE6;0>;Qc80g2 zFjvsTKD`v~DLnolUCsztm_^mm{ABa8*C_IzBCp;S%9Gk@;J@dARu-J&6C_ZPOcAIL zN#cbamjx!p6C(p&M2C+Dbh9V{(~ko&SAVH;z)%+xnugu|28S2Y_#OQnWDp*j1j;-Z zzd$O)2HVqtWXu%#SgQ&sMj87d3fkcz>jFwy`p|w{R2+Bga<6Xr_AZcb^WK-GX)@dX z2%A3CfcAdfeaqfx)JU(=>^`rbSZbE;s&L*yyHm^Dr;o+L4M3zlb($VM0o)LSI)4$$ zblFazYc2eGx&xLJNJ}_AW3zdxyYA#BY9DhF%eQ{=*yT>v24!X|iOX*dlt3T~M$6ab z+-_(~dd$x-(vt`j@W=ilJj4)ixhofUsr!+9x6kjbsS;j@>x*FzRwsXR7O-TI=LmQm z?i9|8_fgeVO!Tm7+_+VBRRP0`)nbVmiQ>qoHS1G2289hhroX3%X|8aPmR@uFje5^H zexcKI*jnH*$1bkP1%(1)+ZEq}{Z6feR}&KDD!4dt}0=qK0H1TJtUpC$VIEavkH zqEZtti8uWKtuNk~zDqr!mk|g86@NZ1odDUSSBQoei0?iHFGP`}=0iqV;C@Cv@vkL= zDKUOSzdpag6i;`VYI_p;rlAbJL|`pW&IzBAS=baR7T*)%@p*=h;Fyghc5b}EIez_n zrm}Pm%JXCFX|u+e5%mk}ai$h2R+*P2^+a1IHD>y3{k@tt*#i+#5fl`-1b@K%D;po2 zGYNxXR-|NVmzHFCeLPPMKW65%o^zZ2VEe$@`C6rb+)eRNCdl0^Uz=HATTAD9A1$JV z?QbLNL^ip|bX<$51z>Ewb$*aMqGLf^Vy^qaOj^_&H$e3@9u4?1u^wv3!grAfwu9-j z(K)%^LaqCH7HdvV2sR_ylz+crtb;l1ggRJl%t305mv%dKa2>i~iX;UlFZOzaq`4q_(n0|vP`@h9^oR&n2KMmUihiM0 zzWBZd$TxARZ;ab8l~}%@L{w8DgZ{c7B{aV;#v7U#{}R7_4tQ02Sa{`!kY8`Q0UxR?rHG3E>I~oFV~U z4Rl0~7+9A_`OyKB{SYDEv5Q`qDK4-Lr+`1GPEl*V=9RXla>>S&w=4rXPror(d1~m* z)z--W*f)lq$GhFH8#I5&gi6b6N0PT&h*8S2Y-JcxWEdztFn`YgW4oazm~Ns6y1EUx zx4`Y8N)*Rvm>3N& zT{LD@3rr?Oj|7t-OA``X-#*p?q*SCPL1L%TIt;K<&8_;oxY1b63{jpfbKP2Uq0vLv zFDi)MGWhtR;D4GkAZ~|CTjUQ*B6-?^^+Ew{Y1Som`QDHe@r$%)2uIb_5qqE2mJWd@ zOm#)GAD0RnI7UBpYz<%rKf#8x*gKlM4ZPUFs4oIG^*RjQ4koThzkAGls{vm0{_7_X zhph}g%8qy3+H5lGCj4zY&JbSHp394`3Voj0Z{o0yV}JZLF=)pfxh^vLL$W=r1!GSm zXE5Z!BuW}jqlvJL?_ zb1O>$*8{`iH)>dz3|(Skebv;!v$4uDqeB!X1mnj#Z)zPQHQGR1`i5Q9JTB;_c+R-KEl(MF zn%UYs(l(`ze6|6EGn`rIT*!mG3{P*I)YC%}7(JZUvIwk#PF!A4+h;5;!&hNIZ|t}E z)sBg3Mp)BS>OdS_#CT$eWpO^OhCR^yc^H_yNp{yM>Ut#vUOMUka9X`V|Z!5cIlJUCO49t%@N&#x#PTu@UHBuV9X|zxPW{SWM z9`o;h#Aj4tqFm6OMEv3%0YDspqYOjJ3&*0D#CgY}A6!a#x6Y$lJy9TF>*NS1*OWl; z%}d*g%3wn-W>uak0b`mT9U5N1{-9boIDe_EI9obWtBAyE5zGyH5_m*IQRCO!N7uJF zSAv?y&=X-5K~PjN9L}FXYQu&#%l!MbTw`X{5!;7;E>6qZ4Px2{`v>4E~R=#8z^3xME$F6?q)eT_{8OSPTc^?wz} zVh`#AHf!I-GcZz`F8wijs@3u<*~jDiXkX(OedxUUexCpxGh&GCjtR9nR5w zfQs_efl>lhJc)}8TV^}io!DeUQWXmpdLk+0?nS%8O-Jxa`KALovV{5k-G5RFm8=*< zwcSA!>etx0Igr=n8}*GSC(qS|Cop6nGu%RluiDc%ue076EC8y&%<)e1nK5+B)%hH)rR&#%20V)y&w0|T2j!xO;@y~JG z-(n@r7C%)4zrI%@Oh{pWC(f9ofIk(WIo!dC)Vr$A0GYxvhP`i|s4M>hAWh{saq=!vAM)3!- zMKRKTad)9+VPYA425X_hl<$uBds^VFL;I+_$1Q;?k(-u&t3sjjQjnIKw>lu?98cJU zcblRu?--?01;Hhp@QeuJi&nk*7Tt@^*iP}MW?nWaam zwPtSpy@KW-@O+%va=%g%$SC%gm)t&QQ{ouv(=CZfa-|^ifZ@z{E|`ww6o1&G&>vah z5jomCsC2T+&UJIlN82J2!ub#=G*eV2P-^dj{k}r0r?cKo3CK2wDhmZJlO#xD4$R<1yj?62`UlB|Ml!X1fnj_f&ukY8#|pGQi@AAeYCn(8B#R=m^voo86v z9?{a-rG-=N)moK8L~>X#F2=^`Q_FlvUR6k?>sF*+p+6-&g5DKh|f`EK&`&yo&()8_D)C=m}22TkKHc8yIjb11?hPtInQ;}>;&+NP@3|l

    HyNa>VR=Z^;nmo(ALx<3YH$Ica9&e86D?5rG(6 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 z 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 diff --git a/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub b/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub index 81e94e0342d94cab97122ad2bdf3e61f98fd71d4..08e0a77489c5ccd71f2b7582d0ca9c56f8cb9716 100644 GIT binary patch literal 572637 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ℑ$^3MS0TbWC6I@9@7Y!x6B7GQ$@zulWvp6 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�xxILTQB7Hzp!-aTe`Wq!2# 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

internal class SpriteBatcher - { + { /* * Note that this class is fundamental to high performance for SpriteBatch games. Please exercise * caution when making changes to this class. @@ -41,7 +41,7 @@ namespace Microsoft.Xna.Framework.Graphics /// Index pointer to the next available SpriteBatchItem in _batchItemList. ///
private int _batchItemCount; - + /// /// The target graphics device. /// @@ -54,18 +54,18 @@ namespace Microsoft.Xna.Framework.Graphics private VertexPositionColorTexture[] _vertexArray; - public SpriteBatcher (GraphicsDevice device) - { + public SpriteBatcher(GraphicsDevice device) + { _device = device; - _batchItemList = new SpriteBatchItem[InitialBatchSize]; + _batchItemList = new SpriteBatchItem[InitialBatchSize]; _batchItemCount = 0; for (int i = 0; i < InitialBatchSize; i++) _batchItemList[i] = new SpriteBatchItem(); EnsureArrayCapacity(InitialBatchSize); - } + } /// /// Reuse a previously allocated SpriteBatchItem from the item pool. @@ -77,11 +77,11 @@ namespace Microsoft.Xna.Framework.Graphics if (_batchItemCount >= _batchItemList.Length) { var oldSize = _batchItemList.Length; - var newSize = oldSize + oldSize/2; // grow by x1.5 + var newSize = oldSize + oldSize / 2; // grow by x1.5 newSize = (newSize + 63) & (~63); // grow in chunks of 64. Array.Resize(ref _batchItemList, newSize); - for(int i=oldSize; i /// Sorts the batch items and then groups batch drawing into maximal allowed batch sets that do not /// overflow the 16 bit array indices for vertices. @@ -145,36 +145,36 @@ namespace Microsoft.Xna.Framework.Graphics /// The type of depth sorting desired for the rendering. /// The custom effect to apply to the drawn geometry public unsafe void DrawBatch(SpriteSortMode sortMode, Effect effect) - { + { if (effect != null && effect.IsDisposed) throw new ObjectDisposedException("effect"); - // nothing to do + // nothing to do if (_batchItemCount == 0) - return; - - // sort the batch items - switch ( sortMode ) - { - case SpriteSortMode.Texture : - case SpriteSortMode.FrontToBack : - case SpriteSortMode.BackToFront : - Array.Sort(_batchItemList, 0, _batchItemCount); - break; - } + return; + + // sort the batch items + switch (sortMode) + { + case SpriteSortMode.Texture: + case SpriteSortMode.FrontToBack: + case SpriteSortMode.BackToFront: + Array.Sort(_batchItemList, 0, _batchItemCount); + break; + } // Determine how many iterations through the drawing code we need to make int batchIndex = 0; int batchCount = _batchItemCount; - + unchecked { _device._graphicsMetrics._spriteCount += batchCount; } // Iterate through the batches, doing short.MaxValue sets of vertices only. - while(batchCount > 0) + while (batchCount > 0) { // setup the vertexArray array var startIndex = 0; @@ -208,10 +208,10 @@ namespace Microsoft.Xna.Framework.Graphics } // store the SpriteBatchItem data in our vertexArray - *(vertexArrayPtr+0) = item.vertexTL; - *(vertexArrayPtr+1) = item.vertexTR; - *(vertexArrayPtr+2) = item.vertexBL; - *(vertexArrayPtr+3) = item.vertexBR; + *(vertexArrayPtr + 0) = item.vertexTL; + *(vertexArrayPtr + 1) = item.vertexTR; + *(vertexArrayPtr + 2) = item.vertexBL; + *(vertexArrayPtr + 3) = item.vertexBR; // Release the texture. item.Texture = null; @@ -225,7 +225,7 @@ namespace Microsoft.Xna.Framework.Graphics } // return items to the pool. _batchItemCount = 0; - } + } /// /// Sends the triangle list to the graphics device. Here is where the actual drawing starts. @@ -278,6 +278,5 @@ namespace Microsoft.Xna.Framework.Graphics VertexPositionColorTexture.VertexDeclaration); } } - } + } } - diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Graphics/Texture2D.DirectX.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Graphics/Texture2D.DirectX.cs index 2cce0c726..93f4c9363 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Graphics/Texture2D.DirectX.cs +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Graphics/Texture2D.DirectX.cs @@ -74,7 +74,10 @@ namespace Microsoft.Xna.Framework.Graphics lock (d3dContext) { d3dContext.UpdateSubresource(GetTexture(), subresourceIndex, region, dataPtr, GetPitch(w), 0); - d3dContext.GenerateMips(GetShaderResourceView()); + if (_mipmap) + { + d3dContext.GenerateMips(GetShaderResourceView()); + } } } finally diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj index 0b4d267a9..a98cc5944 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj @@ -500,19 +500,18 @@ + + + + - - - - - diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Properties/launchSettings.json b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Properties/launchSettings.json new file mode 100644 index 000000000..42118d872 --- /dev/null +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "MonoGame.Framework.Windows.NetStandard": { + "commandName": "Project", + "nativeDebugging": false + } + } +} \ No newline at end of file