diff --git a/Assets/Art/Materials/Creatures/M_IceCrystalGolem.mat b/Assets/Art/Materials/Creatures/M_IceCrystalGolem.mat index e2fdd1908..78300ab56 100644 --- a/Assets/Art/Materials/Creatures/M_IceCrystalGolem.mat +++ b/Assets/Art/Materials/Creatures/M_IceCrystalGolem.mat @@ -25,6 +25,7 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - _EMISSION - _METALLICSPECGLOSSMAP - _NORMALMAP m_InvalidKeywords: [] diff --git a/Assets/Art/Materials/ManafallShoreCaustics.mat b/Assets/Art/Materials/ManafallShoreCaustics.mat index 8edfeb692..1a06b8736 100644 --- a/Assets/Art/Materials/ManafallShoreCaustics.mat +++ b/Assets/Art/Materials/ManafallShoreCaustics.mat @@ -24,7 +24,10 @@ Material: serializedVersion: 3 m_TexEnvs: [] m_Ints: [] - m_Floats: [] + m_Floats: + - _CausticRev: 6 + - _CausticScale: 4.6 + - _CausticSpeed: 1.05 m_Colors: [] m_BuildTextureStacks: [] m_AllowLocking: 1 diff --git a/Assets/Art/Materials/Manafall_Water_Surface.mat b/Assets/Art/Materials/Manafall_Water_Surface.mat index 8cb6e45b1..da5023421 100644 --- a/Assets/Art/Materials/Manafall_Water_Surface.mat +++ b/Assets/Art/Materials/Manafall_Water_Surface.mat @@ -46,8 +46,8 @@ Material: - _Ambient: 0.18 - _BeachContactFoamBoost: 1.25 - _BodyDiffuseFlatten: 0 - - _CausticScale: 0.82 - - _CausticStrength: 0.34 + - _CausticScale: 1.05 + - _CausticStrength: 0.52 - _CoastalShimmerStrength: 0.78 - _CrestFoamEdgeSharpness: 1.55 - _CrestFoamHeightThreshold: 0.42 diff --git a/Assets/Data/Creatures/NightlingLootTable.asset b/Assets/Data/Creatures/NightlingLootTable.asset index 16befd795..0e019ee63 100644 --- a/Assets/Data/Creatures/NightlingLootTable.asset +++ b/Assets/Data/Creatures/NightlingLootTable.asset @@ -37,6 +37,10 @@ MonoBehaviour: weight: 3 minAmount: 1 maxAmount: 1 + signatureRareItem: {fileID: 11400000, guid: b7e4c91a2d8f4e06a5c3d9f01e82b4a7, type: 2} + signatureRareChance: 0.1 + signatureRareMinAmount: 1 + signatureRareMaxAmount: 1 itemDatabase: {fileID: 11400000, guid: e8f7a6b5c4d3928170615240abcdef01, type: 2} includeAllNonRareItems: 1 genericNonRareWeight: 1 diff --git a/Assets/Editor/.manafall_player_chat_setup_done b/Assets/Editor/.manafall_player_chat_setup_done index a9fedd8f0..da98b2e08 100644 --- a/Assets/Editor/.manafall_player_chat_setup_done +++ b/Assets/Editor/.manafall_player_chat_setup_done @@ -1,2 +1,2 @@ -2026-10-15T16:57:07.8254215-05:00 +2026-10-19T20:46:43.5656378-05:00 OK diff --git a/Assets/Editor/WildlifeSpawnTableSetupEditor.cs b/Assets/Editor/WildlifeSpawnTableSetupEditor.cs index d6176b8ab..7b9aa0085 100644 --- a/Assets/Editor/WildlifeSpawnTableSetupEditor.cs +++ b/Assets/Editor/WildlifeSpawnTableSetupEditor.cs @@ -169,8 +169,9 @@ public static class WildlifeSpawnTableSetupEditor WildlifeBiomeMask.None, 0f, 0, 0, 1, 1, 0f, true, true, 300f, 600f), Row("cave_worm", "Cave Worm", "Cave Worm.prefab", WildlifeSpawnMode.OpenWorld, WildlifeSpawnRole.Predator, WildlifeBiomeMask.Mountain | WildlifeBiomeMask.Forest, 0.05f, 2, 2, 1, 1, 0f, false, true, 720f, 1400f), + // ~3× rarer than prior 0.18/3: weight 0.06, single alive, longer respawn. Row("nightling", "Nightling", "Nightling.prefab", WildlifeSpawnMode.OpenWorld, WildlifeSpawnRole.Predator, - WildlifeBiomeMask.Forest | WildlifeBiomeMask.Swamp, 0.18f, 3, 1, 1, 1, 0f, false, true, 480f, 900f), + WildlifeBiomeMask.Forest | WildlifeBiomeMask.Swamp, 0.06f, 1, 1, 1, 1, 0f, false, true, 1440f, 2700f), // Visual removed (Capcom Pteranodon). Weight 0 until a replacement mesh is wired. Row("vikra", "Vikra", "Vikra.prefab", WildlifeSpawnMode.OpenWorld, WildlifeSpawnRole.Predator, WildlifeBiomeMask.Mountain | WildlifeBiomeMask.Forest | WildlifeBiomeMask.Grassland, 0f, 0, 1, 1, 1, 0f, true, true, 480f, 900f), diff --git a/Assets/GameObjects/Prefabs/Player.prefab b/Assets/GameObjects/Prefabs/Player.prefab index 532408812..7baf68a57 100644 --- a/Assets/GameObjects/Prefabs/Player.prefab +++ b/Assets/GameObjects/Prefabs/Player.prefab @@ -2303,6 +2303,20 @@ MonoBehaviour: bobSmoothTime: 0.38 downhillBobCadenceScale: 0.5 downhillBobRockScale: 0.38 + walkBobRate: 1.8 + walkBobVerticalAmp: 0.022 + walkBobSideAmp: 0.012 + walkBobRollDegrees: 0.55 + runBobRate: 1.4 + runBobVerticalAmp: 0.05 + runBobSideAmp: 0.02 + runBobRollDegrees: 0.85 + crouchBobRate: 1.1 + crouchBobVerticalAmp: 0.009 + crouchBobSideAmp: 0.006 + crouchBobRollDegrees: 0.25 + bobEaseTime: 0.16 + bobGaitBlendSpeed: 5 idleMoveThreshold: 0.06 idleBreathFreq: 0.33 idlePitchDegrees: 0.45 @@ -2585,7 +2599,7 @@ MonoBehaviour: lowVitalsRecoveryHoldSeconds: 0.12 lowVitalsRecoveryDecayPerSecond: 5 lowVitalsAudioFadeOutPerSecond: 8 - rowingDrainPerSecond: 0.675 + rowingDrainPerSecond: 0.135 --- !u!114 &-8877665544332211993 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2621,6 +2635,8 @@ MonoBehaviour: inWaterGravityMultiplier: 0.035 buoyancyUpSpeed: 2.4 swimPaddleUpSpeed: 5.5 + swimPaddleDownSpeed: 4.8 + idleSinkSpeed: 1.35 swimSpeedSubmersionExponent: 1.28 swimSpeedMinSubmergedFraction: 0.07 buoyancySubmersionExponent: 1.15 @@ -2679,6 +2695,7 @@ MonoBehaviour: swimStrokePitchAtMaxSpeed: {x: 1.04, y: 1.22} allowOfflineDevControl: 1 logAquaticMovementDebug: 0 + logUnderwaterCameraDebug: 1 --- !u!114 &-8877665544332211991 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2691,8 +2708,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b4e7f2a91c3d46508e9f1a2b3c4d5e6f, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::WaterRippleEmitter - radius: 6 - strength: 0.52 + radius: 4.5 + strength: 0.92 worldOffset: {x: 0, y: 0, z: 0} aquaticController: {fileID: -8877665544332211993} belowSeaSurfaceMaxDepth: 4 @@ -2703,16 +2720,16 @@ MonoBehaviour: highPriorityWake: 1 localWakeOffsets: [] enableVelocityWake: 1 - minSpeedForWake: 0.2 - speedForFullWake: 6 - minStrengthFromSpeed: 0.22 - maxStrengthFromSpeed: 1.15 - wakeStampSpacing: 2 - maxWakeStamps: 5 - wakeStampStrengthMul: 0.78 - wakeRadiusMul: 0.88 + minSpeedForWake: 0.45 + speedForFullWake: 2.4 + minStrengthFromSpeed: 0.62 + maxStrengthFromSpeed: 1.4 + wakeStampSpacing: 1.45 + maxWakeStamps: 8 + wakeStampStrengthMul: 1.05 + wakeRadiusMul: 1.55 wakeProfile: {fileID: 0} - kelvinSpreadAngleDegrees: 22 + kelvinSpreadAngleDegrees: 19 useKelvinWakeStamps: 1 surfaceSkimStrength: 0.35 fullSubmersionDepth: 1.2 @@ -4483,9 +4500,6 @@ MonoBehaviour: syncDirection: 0 syncMode: 0 syncInterval: 0 - syncClassId: 255 - syncHasClass: 0 - syncAwaitingWorldEntry: 1 --- !u!114 &166600001122334671 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4501,7 +4515,6 @@ MonoBehaviour: syncDirection: 0 syncMode: 0 syncInterval: 0 - loadoutPublished: 0 --- !u!114 &166600001122334801 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/ScriptableObjects/Items/Brewer's Cask.asset b/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/ScriptableObjects/Items/Brewer's Cask.asset index 035e4addb..095baea20 100644 --- a/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/ScriptableObjects/Items/Brewer's Cask.asset +++ b/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/ScriptableObjects/Items/Brewer's Cask.asset @@ -12,13 +12,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: de710cc37b178ac41bdc90fbef7a5c3b, type: 3} m_Name: Brewer's Cask m_EditorClassIdentifier: Assembly-CSharp::InventoryFramework.Item - id: 20896 + id: 23006 itemName: Brewers Cask description: A placeable brewing station. icon: {fileID: 0} maxStack: 1 model: {fileID: 5447498083774230809, guid: 2b56106bf121367478c84400844373a5, type: 3} - carryWeight: 25 + carryWeight: -1 isIllegalItem: 0 itemType: 0 consumable: {fileID: 0} diff --git a/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/Scripts/Player.cs b/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/Scripts/Player.cs index f4f9a227d..7eef553e3 100644 --- a/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/Scripts/Player.cs +++ b/Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/Scripts/Player.cs @@ -72,6 +72,19 @@ public class Player : NetworkBehaviour return; } + // List view is a sibling of the bag — if the bag already closed, Esc/Tab must still clear it. + if (!inventoryOpen && (cancelPressed || inventoryPressed) + && InventoryFramework.InventoryListView.AnyChromeBlockingGameplay()) + { + InventoryFramework.InventoryListView.DismissOrphanChrome(); + CloseOpenChestHudIfAny(); + ItemTooltip.DismissAll(); + InputStateManager.RefreshFromOpenPanels(); + if (!InputStateManager.IsUIMode) + InputStateManager.SetGameplayMode(); + return; + } + // Inventory opens bag (blocked while a hotbar instrument is equipped — E is a lute note key). if (inventoryPressed && !instrumentBlocksUse) { @@ -119,6 +132,12 @@ public class Player : NetworkBehaviour private void SetInventoryOpen(bool open) { + if (open) + { + // List mode: hide the slot grid before the bag activates (no old-grid flash). + InventoryFramework.InventoryListView.PrepareBagOpenVisuals(); + } + if (inventory != null) inventory.SetActive(open); @@ -135,6 +154,11 @@ public class Player : NetworkBehaviour return; } + // ChestHud / list chrome are siblings of the bag under the Inventory canvas — closing + // the bag alone used to leave loot or an empty list stuck on screen with no Esc path. + CloseOpenChestHudIfAny(); + InventoryFramework.InventoryListView.DismissOrphanChrome(); + ItemTooltip.DismissAll(); InputStateManager.RefreshFromOpenPanels(); // Inventory tabs LateUpdate may still hide Skills/Crafting overlays after this; @@ -144,6 +168,14 @@ public class Player : NetworkBehaviour FindFirstObjectByType()?.RefreshTimeOfDayHudForPause(); } + private void CloseOpenChestHudIfAny() + { + ChestHudController chestHud = GetComponentInChildren(true); + // Always dismiss — Close is safe when already shut, and catches orphan panels + // after a corpse despawn cleared boundChest while the loot panel stayed up. + chestHud?.Close(); + } + private static void CloseOpenMarketIfAny() { MarketHudController market = MarketHudController.FindOpenLocal(); diff --git a/Assets/Resources/ManafallAeroVolumetricFog.mat b/Assets/Resources/ManafallAeroVolumetricFog.mat index 1fa04a8f5..8bebc4963 100644 --- a/Assets/Resources/ManafallAeroVolumetricFog.mat +++ b/Assets/Resources/ManafallAeroVolumetricFog.mat @@ -209,7 +209,7 @@ Material: - _Main_Light_Self_Shadow_Remap_Max: 0.8 - _Main_Light_Self_Shadow_Remap_Min: 0.2 - _Main_Light_Self_Shadow_Steps: 4 - - _Max_Distance: 140.15604 + - _Max_Distance: 160 - _Metallic: 0 - _OUTPUT: 0 - _OcclusionStrength: 1 @@ -242,7 +242,7 @@ Material: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Bottom_Colour: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - - _Colour: {r: 0.7507201, g: 0.81142175, b: 0.86014926, a: 1} + - _Colour: {r: 0.78, g: 0.84, b: 0.9, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _Height_Gradient_Bottom_Colour_Tint: {r: 1, g: 1, b: 1, a: 1} - _Height_Gradient_Colour_Bottom: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Resources/ManafallWaterQuality_Laptop.asset b/Assets/Resources/ManafallWaterQuality_Laptop.asset index fdbcf0388..ecfaf680c 100644 --- a/Assets/Resources/ManafallWaterQuality_Laptop.asset +++ b/Assets/Resources/ManafallWaterQuality_Laptop.asset @@ -18,11 +18,11 @@ MonoBehaviour: rippleFollowCameraCenter: 1 rippleFarBlurPass: 1 rippleNormalOnlyFarWake: 1 - rippleDecayPerFrame: 0.955 + rippleDecayPerFrame: 0.972 objectWakeStampBudgetFraction: 0.72 - maxEmitterWakeStamps: 7 - rippleFieldHeightScale: 0.58 - rippleFieldNormalScale: 0.5 + maxEmitterWakeStamps: 8 + rippleFieldHeightScale: 0.85 + rippleFieldNormalScale: 0.7 refractFullQuality: 1 refractionChromaticPx: 1.6 refractionBlur: 2.1 diff --git a/Assets/Resources/ManafallWaterQuality_PC.asset b/Assets/Resources/ManafallWaterQuality_PC.asset index 49806a8cd..825992d85 100644 --- a/Assets/Resources/ManafallWaterQuality_PC.asset +++ b/Assets/Resources/ManafallWaterQuality_PC.asset @@ -18,11 +18,11 @@ MonoBehaviour: rippleFollowCameraCenter: 1 rippleFarBlurPass: 1 rippleNormalOnlyFarWake: 1 - rippleDecayPerFrame: 0.955 + rippleDecayPerFrame: 0.972 objectWakeStampBudgetFraction: 0.72 - maxEmitterWakeStamps: 7 - rippleFieldHeightScale: 0.72 - rippleFieldNormalScale: 0.62 + maxEmitterWakeStamps: 10 + rippleFieldHeightScale: 0.95 + rippleFieldNormalScale: 0.78 refractFullQuality: 1 refractionChromaticPx: 2.4 refractionBlur: 2.1 diff --git a/Assets/Resources/WildlifeSpawnTable.asset b/Assets/Resources/WildlifeSpawnTable.asset index ccd5a2d5f..13cb10ac3 100644 --- a/Assets/Resources/WildlifeSpawnTable.asset +++ b/Assets/Resources/WildlifeSpawnTable.asset @@ -101,16 +101,16 @@ MonoBehaviour: spawnMode: 0 role: 2 biomes: 130 - weight: 0.18 - maxAliveGlobal: 3 + weight: 0.06 + maxAliveGlobal: 1 maxAlivePerCell: 1 minPackSize: 1 maxPackSize: 1 packSpreadMeters: 0 spawnAtDay: 0 spawnAtNight: 1 - respawnMinSeconds: 480 - respawnMaxSeconds: 900 + respawnMinSeconds: 1440 + respawnMaxSeconds: 2700 allowWaterSpawn: 0 minWaterDepthMeters: 0 - spawnId: vikra diff --git a/Assets/ScriptableObjects/Combat/Shovel_Basic.asset b/Assets/ScriptableObjects/Combat/Shovel_Basic.asset index 914dd9634..074aa30ca 100644 --- a/Assets/ScriptableObjects/Combat/Shovel_Basic.asset +++ b/Assets/ScriptableObjects/Combat/Shovel_Basic.asset @@ -14,8 +14,9 @@ MonoBehaviour: m_EditorClassIdentifier: maxRange: 4 editRadius: 0.45 - cooldownSeconds: 0.4 - maxEditsPerSecond: 8 + digDurationSeconds: 2.8 + staminaDrainPerSecond: 4 + maxEditsPerSecond: 2 addSolid: 0 materialId: 1 digPower: 1 diff --git a/Assets/ScriptableObjects/Items/Dusk-Fee Token.asset b/Assets/ScriptableObjects/Items/Dusk-Fee Token.asset new file mode 100644 index 000000000..fa5d8f9cb --- /dev/null +++ b/Assets/ScriptableObjects/Items/Dusk-Fee Token.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de710cc37b178ac41bdc90fbef7a5c3b, type: 3} + m_Name: Dusk-Fee Token + m_EditorClassIdentifier: + id: 522 + itemName: Dusk-Fee Token + description: A dull disc the Nightling court leaves when a dusk-fee is collected. + Still warm after sundown. Nightling-only find. + icon: {fileID: 21300000, guid: 879ef87f9d5c4778a9ce85ff05e32c8b, type: 3} + maxStack: 5 + model: {fileID: 0} + carryWeight: 0.08 + isIllegalItem: 0 + itemType: 0 + consumable: {fileID: 0} + meleeDefinition: {fileID: 0} + bowDefinition: {fileID: 0} + shovelDefinition: {fileID: 0} + hoeDefinition: {fileID: 0} + farmingSeedDefinition: {fileID: 0} + isWateringTool: 0 + placeableDefinition: {fileID: 0} + instrument: {fileID: 0} + noteDefinition: {fileID: 0} + readableBook: {fileID: 0} + sealclashCard: {fileID: 0} diff --git a/Assets/ScriptableObjects/Items/Dusk-Fee Token.asset.meta b/Assets/ScriptableObjects/Items/Dusk-Fee Token.asset.meta new file mode 100644 index 000000000..429fe6bc7 --- /dev/null +++ b/Assets/ScriptableObjects/Items/Dusk-Fee Token.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7e4c91a2d8f4e06a5c3d9f01e82b4a7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableObjects/Items/ManafallItemDatabase.asset b/Assets/ScriptableObjects/Items/ManafallItemDatabase.asset index 3322dcd22..70fcfbeac 100644 --- a/Assets/ScriptableObjects/Items/ManafallItemDatabase.asset +++ b/Assets/ScriptableObjects/Items/ManafallItemDatabase.asset @@ -40,6 +40,7 @@ MonoBehaviour: - {fileID: 11400000, guid: f1a2b3c4d5e647889900112233445568, type: 2} - {fileID: 11400000, guid: aabbcc11dd22ee334455667788990a01, type: 2} - {fileID: 11400000, guid: aabbcc11dd22ee334455667788990b01, type: 2} + - {fileID: 11400000, guid: b7e4c91a2d8f4e06a5c3d9f01e82b4a7, type: 2} - {fileID: 11400000, guid: 6ac28aefdecdd5845a2932e6f80c8749, type: 2} - {fileID: 11400000, guid: 5b5ea7d34b869fe46aaff494d99fd570, type: 2} - {fileID: 11400000, guid: a0bc3a264faacdc43ad80c400be18bc9, type: 2} diff --git a/Assets/Scripts/Alchemy/AlchemyCatalog.cs b/Assets/Scripts/Alchemy/AlchemyCatalog.cs index 9d200df6b..0828f85e6 100644 --- a/Assets/Scripts/Alchemy/AlchemyCatalog.cs +++ b/Assets/Scripts/Alchemy/AlchemyCatalog.cs @@ -147,6 +147,21 @@ public static class AlchemyCatalog new("grave_moss", "Grave Moss", false, E("Resist Disease", "Detect Undead", "Drain Personality", "Fortify Willpower"), P(AlchemyProperty.Death, AlchemyProperty.Spirit, AlchemyProperty.Stability)), new("azure_coral", "Azure Coral", false, E("Water Breathing", "Resist Shock", "Reflect", "Slow Movement"), P(AlchemyProperty.Water, AlchemyProperty.Shock, AlchemyProperty.Stability)), new("goldcap_fungus", "Goldcap Fungus", false, E("Restore Health", "Restore Fatigue", "Fortify Luck", "Cure Disease"), P(AlchemyProperty.Life, AlchemyProperty.Stability, AlchemyProperty.Earth)), + + // Disease cure signature herbs (mild = common, severe = Risky/rare). + new("rawcap_bitterleaf", "Rawcap Bitterleaf", false, E("Cure Disease", "Restore Health", "Drain Fatigue", "Thirst"), P(AlchemyProperty.Life, AlchemyProperty.Earth, AlchemyProperty.Stability)), + new("coughbane_reed", "Coughbane Reed", false, E("Cure Disease", "Restore Fatigue", "Water Breathing", "Calm"), P(AlchemyProperty.Life, AlchemyProperty.Water, AlchemyProperty.Air)), + new("frogitch_salve_herb", "Frogitch Salve Herb", false, E("Cure Disease", "Poison Resistance", "Restore Health", "Calm"), P(AlchemyProperty.Life, AlchemyProperty.Water, AlchemyProperty.Stability)), + new("feverbreak_root", "Feverbreak Root", false, E("Cure Disease", "Fire Resistance", "Restore Health", "Warmth"), P(AlchemyProperty.Life, AlchemyProperty.Fire, AlchemyProperty.Stability)), + new("mirefoot_scrubmoss", "Mirefoot Scrubmoss", false, E("Cure Disease", "Water Walking", "Speed", "Restore Fatigue"), P(AlchemyProperty.Life, AlchemyProperty.Water, AlchemyProperty.Earth)), + new("blackwater_char", "Blackwater Char", false, E("Cure Disease", "Restore Health", "Thirst", "Fortify Endurance"), P(AlchemyProperty.Life, AlchemyProperty.Water, AlchemyProperty.Earth)), + new("leechbane_thorn", "Leechbane Thorn", false, E("Cure Disease", "Restore Health", "Fortify Attack", "Drain Personality"), P(AlchemyProperty.Life, AlchemyProperty.Fire, AlchemyProperty.Corruption)), + new("ague_ember_seed", "Ague Ember Seed", false, E("Cure Disease", "Warmth", "Resist Frost", "Restore Magicka"), P(AlchemyProperty.Fire, AlchemyProperty.Life, AlchemyProperty.Frost)), + new("rotveil_spore", "Rotveil Spore", true, E("Cure Disease", "Poison Resistance", "Drain Health", "Detect Undead"), P(AlchemyProperty.Death, AlchemyProperty.Life, AlchemyProperty.Corruption), "Spores cling to the lungs if mishandled."), + new("poxiron_flake", "Poxiron Flake", true, E("Cure Disease", "Light Aura", "Fire Resistance", "Drain Health"), P(AlchemyProperty.Fire, AlchemyProperty.Life, AlchemyProperty.Arcane), "Flakes sting the skin like hot iron."), + new("gravedamp_lichen", "Gravedamp Lichen", true, E("Cure Disease", "Detect Undead", "Drain Personality", "Restore Magicka"), P(AlchemyProperty.Death, AlchemyProperty.Spirit, AlchemyProperty.Life), "Smells of wet tombs."), + new("hollow_lungwort", "Hollow Lungwort", true, E("Cure Disease", "Restore Fatigue", "Water Breathing", "Drain Stamina"), P(AlchemyProperty.Air, AlchemyProperty.Life, AlchemyProperty.Water), "The leaf whistled when broken — empty air inside."), + new("aetherwing_membrane", "Aetherwing Membrane", true, E("True Levitation", "Feather", "Reflect Magic", "Slow"), P(AlchemyProperty.Air, AlchemyProperty.Arcane, AlchemyProperty.Spirit), "The brew strains against gravity and wants to drift upward."), // Vikra death loot — hollow skybone steadies mobility brews and hardens stone draughts. new("vikra_bone_shard", "Vikra Bone Shard", false, E("Feather", "Fortify Endurance", "Slowfall", "Weakness to Blunt"), P(AlchemyProperty.Air, AlchemyProperty.Earth, AlchemyProperty.Weight)), diff --git a/Assets/Scripts/Alchemy/AlchemyPotionRuntime.cs b/Assets/Scripts/Alchemy/AlchemyPotionRuntime.cs index c6b4ca65e..4ff37ef7f 100644 --- a/Assets/Scripts/Alchemy/AlchemyPotionRuntime.cs +++ b/Assets/Scripts/Alchemy/AlchemyPotionRuntime.cs @@ -135,14 +135,8 @@ public static class AlchemyPotionRuntime ApplyImmediate(potion.Secondary, Mathf.Max(1, potion.PotencyTier - 4), health, stamina); ApplyImmediate(potion.Tertiary, Mathf.Max(1, potion.PotencyTier - 8), health, stamina); - if (HasFamily(potion, AlchemyPotionFamily.Healing) || HasFamily(potion, AlchemyPotionFamily.VenomWard)) - { - PlayerMushroomSicknessRuntime sickness = - player.GetComponent() - ?? player.GetComponentInParent() - ?? player.GetComponentInChildren(true); - sickness?.TryCureFromPotionOrHealer(); - } + // Mundane diseases require their matching signature cure potion (or a paid healer). + // Generic Healing / VenomWard no longer auto-clear disease. if ((potion.Flags & AlchemyBrewFlags.Volatile) != 0 && health != null && potion.InstabilityTier >= 10) { @@ -247,15 +241,6 @@ public static class AlchemyPotionRuntime ApplyImmediateScaled(potion.Secondary, Mathf.Max(1, potion.PotencyTier - 4), clampedScale, health, stamina, applyHealthAuthority); ApplyImmediateScaled(potion.Tertiary, Mathf.Max(1, potion.PotencyTier - 8), clampedScale, health, stamina, applyHealthAuthority); - if (HasFamily(potion, AlchemyPotionFamily.Healing) || HasFamily(potion, AlchemyPotionFamily.VenomWard)) - { - PlayerMushroomSicknessRuntime sickness = - player.GetComponent() - ?? player.GetComponentInParent() - ?? player.GetComponentInChildren(true); - sickness?.TryCureFromPotionOrHealer(); - } - AlchemyDecodedPotion scaledPotion = Scale(potion, clampedScale); if (scaledPotion.Primary != AlchemyPotionFamily.None || scaledPotion.Secondary != AlchemyPotionFamily.None || diff --git a/Assets/Scripts/Alchemy/AlchemySignatureBrewCatalog.cs b/Assets/Scripts/Alchemy/AlchemySignatureBrewCatalog.cs index 7c3056ead..b8a85ec2b 100644 --- a/Assets/Scripts/Alchemy/AlchemySignatureBrewCatalog.cs +++ b/Assets/Scripts/Alchemy/AlchemySignatureBrewCatalog.cs @@ -4,12 +4,12 @@ using System.Text; using UnityEngine; /// -/// Fifty specialty drinkable potions matched by ingredient signatures (parallel to hostile catalog). -/// Encoded via . +/// Specialty drinkable potions matched by ingredient signatures (parallel to hostile catalog), +/// including disease cures 52–63. Encoded via . /// public static class AlchemySignatureBrewCatalog { - public const int RecipeCount = 50; + public const int RecipeCount = 63; public readonly struct Recipe { @@ -353,6 +353,68 @@ public static class AlchemySignatureBrewCatalog AlchemySignatureEffectKind.Clearwake, "Clears underwater murk — stronger brews see farther through the depths.", AlchemyPotionFamily.Tide, AlchemyPotionFamily.Spirit), + + // Disease cures (52–63) — one potion per DiseaseId + new(52, "Rawcap Purge", "rawcap_bitterleaf", + new[] { "ash_fern", "marsh_salt", "goldcap_fungus" }, 1, + AlchemySignatureEffectKind.CureRawcapGut, + "Cures Rawcap Gut from eating raw mushrooms.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(53, "Marshclear Cordial", "coughbane_reed", + new[] { "marsh_salt", "ash_fern", "silver_reed" }, 1, + AlchemySignatureEffectKind.CureMarshCough, + "Cures Marsh Cough.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(54, "Itchban Salve-Draught", "frogitch_salve_herb", + new[] { "marsh_salt", "mire_bloom", "ash_fern" }, 1, + AlchemySignatureEffectKind.CureFrogitch, + "Cures Frogitch.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(55, "Woundfever Breaker", "feverbreak_root", + new[] { "ash_fern", "bitterroot", "goldcap_fungus" }, 2, + AlchemySignatureEffectKind.CureWoundFever, + "Cures Wound Fever.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(56, "Mirefoot Wash", "mirefoot_scrubmoss", + new[] { "marsh_salt", "hollowroot", "mire_bloom" }, 2, + AlchemySignatureEffectKind.CureMirefoot, + "Cures Mirefoot.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(57, "Blackwater Binder", "blackwater_char", + new[] { "marsh_salt", "goldcap_fungus", "deep_moss" }, 2, + AlchemySignatureEffectKind.CureBlackwaterBelly, + "Cures Blackwater Belly.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(58, "Leechblood Draw", "leechbane_thorn", + new[] { "ash_fern", "redthorn_berry", "bitterroot" }, 2, + AlchemySignatureEffectKind.CureLeechblood, + "Cures Leechblood.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(59, "Bonechill Warmth", "ague_ember_seed", + new[] { "ember_moss", "snowbell_flower", "ash_fern" }, 2, + AlchemySignatureEffectKind.CureBoneChillAgue, + "Cures Bone Chill Ague.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(60, "Rotveil Antitoxin", "rotveil_spore", + new[] { "grave_moss", "mire_bloom", "marsh_salt" }, 3, + AlchemySignatureEffectKind.CureSwampRot, + "Cures Swamp Rot. Rare reagents.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(61, "Poxiron Tincture", "poxiron_flake", + new[] { "sunscale_dust", "ash_fern", "goldcap_fungus" }, 3, + AlchemySignatureEffectKind.CureRedscalePox, + "Cures Redscale Pox. Rare reagents.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), + new(62, "Gravedamp Rite", "gravedamp_lichen", + new[] { "grave_moss", "ghost_fern", "cracked_soul_dust" }, 3, + AlchemySignatureEffectKind.CureGraveDamp, + "Cures Grave Damp. Rare reagents.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.Spirit), + new(63, "Hollowlung Breath", "hollow_lungwort", + new[] { "sky_reed", "moonwater_lily", "ash_fern" }, 3, + AlchemySignatureEffectKind.CureHollowLung, + "Cures Hollow Lung. Rare reagents.", + AlchemyPotionFamily.Healing, AlchemyPotionFamily.VenomWard), }; private static readonly Dictionary ById = BuildById(); @@ -523,6 +585,9 @@ public static class AlchemySignatureBrewCatalog if (potion.SignatureRecipeId <= 0 || !TryGetRecipe(potion.SignatureRecipeId, out Recipe recipe)) return string.Empty; + if (DiseaseCatalog.DiseaseForCureEffect(recipe.Effect) != DiseaseId.None) + return $"{recipe.DisplayName}: {recipe.EffectSummary}"; + float durationSeconds = Mathf.Lerp(18f, 120f, Mathf.Clamp01(potion.DurationTier / 31f)); if (recipe.Effect == AlchemySignatureEffectKind.Featherfall) durationSeconds = Mathf.Lerp(25f, 180f, Mathf.Clamp01(potion.DurationTier / 31f)); diff --git a/Assets/Scripts/Alchemy/AlchemySignatureEffectKind.cs b/Assets/Scripts/Alchemy/AlchemySignatureEffectKind.cs index b8214fad6..996377e24 100644 --- a/Assets/Scripts/Alchemy/AlchemySignatureEffectKind.cs +++ b/Assets/Scripts/Alchemy/AlchemySignatureEffectKind.cs @@ -69,4 +69,18 @@ public enum AlchemySignatureEffectKind : byte /// Underwater murk reduction — stronger brew = clearer water. Clearwake = 51, + + // Disease cures (signature recipes 52–63) + CureRawcapGut = 52, + CureMarshCough = 53, + CureFrogitch = 54, + CureWoundFever = 55, + CureMirefoot = 56, + CureBlackwaterBelly = 57, + CureLeechblood = 58, + CureBoneChillAgue = 59, + CureSwampRot = 60, + CureRedscalePox = 61, + CureGraveDamp = 62, + CureHollowLung = 63, } diff --git a/Assets/Scripts/Alchemy/AlchemySignatureRuntime.cs b/Assets/Scripts/Alchemy/AlchemySignatureRuntime.cs index 668b2fd17..cf23d699b 100644 --- a/Assets/Scripts/Alchemy/AlchemySignatureRuntime.cs +++ b/Assets/Scripts/Alchemy/AlchemySignatureRuntime.cs @@ -79,6 +79,29 @@ public static class AlchemySignatureRuntime case AlchemySignatureEffectKind.FailuresShelfSurprise: ApplyFailuresShelf(player, health, stamina, status, potency01, durationSeconds); return; + case AlchemySignatureEffectKind.CureRawcapGut: + case AlchemySignatureEffectKind.CureMarshCough: + case AlchemySignatureEffectKind.CureFrogitch: + case AlchemySignatureEffectKind.CureWoundFever: + case AlchemySignatureEffectKind.CureMirefoot: + case AlchemySignatureEffectKind.CureBlackwaterBelly: + case AlchemySignatureEffectKind.CureLeechblood: + case AlchemySignatureEffectKind.CureBoneChillAgue: + case AlchemySignatureEffectKind.CureSwampRot: + case AlchemySignatureEffectKind.CureRedscalePox: + case AlchemySignatureEffectKind.CureGraveDamp: + case AlchemySignatureEffectKind.CureHollowLung: + { + DiseaseId cureId = DiseaseCatalog.DiseaseForCureEffect(recipe.Effect); + PlayerDiseaseRuntime diseases = PlayerDiseaseRuntime.EnsureOn(player); + if (diseases != null && cureId != DiseaseId.None && diseases.ServerTryCure(cureId)) + { + if (health != null) + health.Heal(Mathf.Lerp(2f, 8f, potency01)); + } + + return; + } } status?.ApplySignatureEffect(recipe.Effect, potency01, durationSeconds); diff --git a/Assets/Scripts/Bandit/BanditLootTable.cs b/Assets/Scripts/Bandit/BanditLootTable.cs index 7e352c123..787102ee1 100644 --- a/Assets/Scripts/Bandit/BanditLootTable.cs +++ b/Assets/Scripts/Bandit/BanditLootTable.cs @@ -85,7 +85,7 @@ public sealed class BanditLootTable : ScriptableObject if (bonusChance > 0f && Random.value <= bonusChance) { - List picks = RollBonusItems(ctx.pickedIds, commonW, rareW, minRolls, maxRolls); + List picks = RollBonusItems(ctx.pickedIds, commonW, rareW, minRolls, maxRolls, ctx.quality01); for (int i = 0; i < picks.Count; i++) { Item item = picks[i]; @@ -117,15 +117,13 @@ public sealed class BanditLootTable : ScriptableObject float commonW, float rareW, int minRolls, - int maxRolls) + int maxRolls, + float creatureQuality01 = 0f) { var results = new List(2); ItemDatabase db = ResolveItemDatabase(); if (db?.items == null || db.items.Count == 0) return results; - if (commonW <= 0f && rareW <= 0f) - return results; - MarketCatalog catalog = MarketCatalog.Resolve(null); var candidates = new List<(Item item, float weight)>(db.items.Count); for (int i = 0; i < db.items.Count; i++) @@ -138,9 +136,11 @@ public sealed class BanditLootTable : ScriptableObject if (item.HasMeleeDefinition || item.HasBowDefinition) continue; - bool rare = ItemLootRarity.IsRare(item, catalog); - float weight = rare ? rareW : commonW; - if (weight <= 0f) + if (ItemLootRarity.ResolveTier(item) > MarketItemRarity.Tier.Rare) + continue; + + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) continue; candidates.Add((item, weight)); diff --git a/Assets/Scripts/BiomeClimateSampler.cs b/Assets/Scripts/BiomeClimateSampler.cs index 5d9ff7d00..60044bdd9 100644 --- a/Assets/Scripts/BiomeClimateSampler.cs +++ b/Assets/Scripts/BiomeClimateSampler.cs @@ -147,13 +147,157 @@ public static class BiomeClimateSampler float outer = localRadius + edge * 0.35f; float inner = Mathf.Max(0f, localRadius - edge); - float membership = 1f - Mathf.SmoothStep(inner, outer, dist); + // GLSL-style edge falloff — Mathf.SmoothStep is a lerp and zeros the disc center. + float membership = 1f - smoothstep(inner, outer, dist); if (membership <= 0.001f) return 0f; return Mathf.Clamp01(membership * strength); } + /// + /// 0–1 membership on the separate void island. Missing YAML still places one opposite the volcano. + /// + public static float SampleVoidDomain01(int worldX, int worldZ, int seed, BiomeSettings settings) + { + if (settings == null) + settings = DefaultSettings; + + EnsureVoidSettingsDefaults(settings); + ResolveVoidLayout(settings, out Vector2 voidCenter, out float radius, out float strength); + if (strength <= 0.001f || radius <= 1f) + return 0f; + + float edge = Mathf.Clamp(settings.voidDomainEdgeMeters <= 0.001f ? 36f : settings.voidDomainEdgeMeters, 10f, 80f); + float dx = worldX - voidCenter.x; + float dz = worldZ - voidCenter.y; + float dist = Mathf.Sqrt(dx * dx + dz * dz); + float outer = radius + edge * 0.35f; + float inner = Mathf.Max(0f, radius - edge); + // GLSL-style edge falloff — Mathf.SmoothStep is a lerp and zeros the disc center. + float membership = 1f - smoothstep(inner, outer, dist); + if (membership <= 0.001f) + return 0f; + + // Only block paint that would still sit on the main landmass. The void center itself + // must never be zeroed — a stale / oversized islandRadius used to reject the pad. + float mainDx = worldX - s_islandCenter.x; + float mainDz = worldZ - s_islandCenter.y; + float mainDist = Mathf.Sqrt(mainDx * mainDx + mainDz * mainDz); + if (dist > radius * 0.35f && mainDist <= s_islandRadius * 0.98f) + return 0f; + + return Mathf.Clamp01(membership * strength); + } + + /// + /// Gravity scale at a world XZ: 1 outside the void, + /// in the core. Uses a wider soft edge than biome paint so gravity eases across the rim. + /// + public static float SampleGravityMultiplier(float worldX, float worldZ, int seed, BiomeSettings settings) + { + if (settings == null) + settings = DefaultSettings; + + EnsureVoidSettingsDefaults(settings); + float voidCore = Mathf.Clamp(settings.voidGravityMultiplier, 0.05f, 1f); + if (settings.voidDomainStrength <= 0.001f || Mathf.Abs(voidCore - 1f) < 0.001f) + return 1f; + + ResolveVoidLayout(settings, out Vector2 voidCenter, out float radius, out float strength); + if (strength <= 0.001f || radius <= 1f) + return 1f; + + float edge = Mathf.Clamp(settings.voidDomainEdgeMeters <= 0.001f ? 36f : settings.voidDomainEdgeMeters, 10f, 80f); + float widen = Mathf.Clamp(settings.voidGravityBlendWiden, 1f, 2.5f); + float softEdge = edge * widen; + float dx = worldX - voidCenter.x; + float dz = worldZ - voidCenter.y; + float dist = Mathf.Sqrt(dx * dx + dz * dz); + float outer = radius + softEdge * 0.55f; + float inner = Mathf.Max(0f, radius - softEdge * 0.35f); + float membership = 1f - smoothstep(inner, outer, dist); + if (membership <= 0.001f) + return 1f; + + float mainDx = worldX - s_islandCenter.x; + float mainDz = worldZ - s_islandCenter.y; + float mainDist = Mathf.Sqrt(mainDx * mainDx + mainDz * mainDz); + if (dist > radius * 0.35f && mainDist <= s_islandRadius * 0.98f) + return 1f; + + float void01 = Mathf.Clamp01(membership * strength); + return Mathf.Lerp(1f, voidCore, void01); + } + + public static void ResolveVoidLayout(BiomeSettings settings, out Vector2 centerXZ, out float radiusMeters) + { + EnsureVoidSettingsDefaults(settings); + ResolveVoidLayout(settings, out centerXZ, out radiusMeters, out _); + } + + /// + /// Profile assets authored before void fields leave strength/radius at 0 — restore defaults + /// the same way volcano settings are forced ready. + /// + public static void EnsureVoidSettingsDefaults(BiomeSettings settings) + { + if (settings == null) + return; + + if (settings.voidDomainStrength <= 0.001f) + settings.voidDomainStrength = 1f; + if (settings.voidDomainRadiusMeters < 40f || settings.voidDomainRadiusMeters > 280f) + settings.voidDomainRadiusMeters = 160f; + if (settings.voidIslandGapMeters < 80f) + settings.voidIslandGapMeters = 140f; + if (settings.voidDomainEdgeMeters < 10f || settings.voidDomainEdgeMeters > 80f) + settings.voidDomainEdgeMeters = 36f; + if (settings.voidIslandBearingDegrees <= 0.001f) + { + float volcanoBearing = settings.volcanoIslandBearingDegrees > 0.001f + ? settings.volcanoIslandBearingDegrees + : 90f; + settings.voidIslandBearingDegrees = Mathf.Repeat(volcanoBearing + 180f, 360f); + if (settings.voidIslandBearingDegrees <= 0.001f) + settings.voidIslandBearingDegrees = 270f; + } + if (settings.voidPlateauAboveSea01 < 0.02f || settings.voidPlateauAboveSea01 > 0.14f) + settings.voidPlateauAboveSea01 = 0.055f; + if (settings.voidPeakLift01 < 0.18f || settings.voidPeakLift01 > 0.55f) + settings.voidPeakLift01 = 0.44f; + if (settings.voidHeightExaggeration < 1.05f || settings.voidHeightExaggeration > 4.5f) + settings.voidHeightExaggeration = 3.15f; + if (settings.voidGravityMultiplier < 0.05f || settings.voidGravityMultiplier > 1f) + settings.voidGravityMultiplier = 0.3333333f; + if (settings.voidGravityBlendWiden < 1f || settings.voidGravityBlendWiden > 2.5f) + settings.voidGravityBlendWiden = 2.1f; + } + + private static void ResolveVoidLayout(BiomeSettings settings, out Vector2 centerXZ, out float radiusMeters, out float strength) + { + if (settings == null) + settings = DefaultSettings; + + EnsureVoidSettingsDefaults(settings); + strength = Mathf.Clamp01(settings.voidDomainStrength); + radiusMeters = Mathf.Clamp(settings.voidDomainRadiusMeters, 40f, 280f); + float gap = ResolveVoidGap(settings); + float bearingDeg = settings.voidIslandBearingDegrees; + if (bearingDeg <= 0.001f) + bearingDeg = 270f; + float bearing = bearingDeg * Mathf.Deg2Rad; + float centerDist = Mathf.Max(1f, s_islandRadius) + gap + radiusMeters; + centerXZ = s_islandCenter + new Vector2(Mathf.Cos(bearing), Mathf.Sin(bearing)) * centerDist; + } + + private static float ResolveVoidGap(BiomeSettings settings) + { + if (settings == null || settings.voidIslandGapMeters <= 0.001f) + return 140f; + return Mathf.Clamp(settings.voidIslandGapMeters, 80f, 400f); + } + public static void Sample(int worldX, int worldZ, int seed, BiomeSettings settings, out float moisture01, out float effectiveTemperature01) { if (settings == null) diff --git a/Assets/Scripts/BiomeGravity.cs b/Assets/Scripts/BiomeGravity.cs new file mode 100644 index 000000000..7bdfc4bc4 --- /dev/null +++ b/Assets/Scripts/BiomeGravity.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +/// +/// Spatial gravity from the void biome. Core void is ~1/3 normal; borders blend gradually. +/// Character motors call ; Rigidbodies are corrected by +/// . +/// +public static class BiomeGravity +{ + private static readonly BiomeSettings FallbackSettings = new BiomeSettings(); + + public static float SampleMultiplier(Vector3 worldPosition) + { + WorldGenerator world = ManafallWorldBinding.FindWorldGenerator(); + BiomeSettings settings = world != null ? world.BiomeSettings : FallbackSettings; + int seed = world != null ? world.TerrainSeed : 0; + return BiomeClimateSampler.SampleGravityMultiplier(worldPosition.x, worldPosition.z, seed, settings); + } + + public static float SampleMultiplier(float worldX, float worldZ) + { + WorldGenerator world = ManafallWorldBinding.FindWorldGenerator(); + BiomeSettings settings = world != null ? world.BiomeSettings : FallbackSettings; + int seed = world != null ? world.TerrainSeed : 0; + return BiomeClimateSampler.SampleGravityMultiplier(worldX, worldZ, seed, settings); + } + + /// Scales a character-motor gravity accel (usually negative) by the local biome field. + public static float Scale(float gravityAccel, Vector3 worldPosition) + { + return gravityAccel * SampleMultiplier(worldPosition); + } + + /// World gravity acceleration at a point (same direction as ). + public static Vector3 GetAcceleration(Vector3 worldPosition) + { + return Physics.gravity * SampleMultiplier(worldPosition); + } +} diff --git a/Assets/Scripts/BiomeGravity.cs.meta b/Assets/Scripts/BiomeGravity.cs.meta new file mode 100644 index 000000000..29dd8eca2 --- /dev/null +++ b/Assets/Scripts/BiomeGravity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6b9a7447cd74130b2e87fa94e976a68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/BiomeGravityWorldDriver.cs b/Assets/Scripts/BiomeGravityWorldDriver.cs new file mode 100644 index 000000000..76e58ebf4 --- /dev/null +++ b/Assets/Scripts/BiomeGravityWorldDriver.cs @@ -0,0 +1,119 @@ +using UnityEngine; + +/// +/// Applies biome gravity to every active Rigidbody the same way (not player-only). +/// Unity still integrates ; this adds the residual so net +/// acceleration equals . +/// +[DefaultExecutionOrder(-40)] +[DisallowMultipleComponent] +public sealed class BiomeGravityWorldDriver : MonoBehaviour +{ + public static BiomeGravityWorldDriver Instance { get; private set; } + + [SerializeField] private float refreshIntervalSeconds = 0.35f; + [SerializeField] private int maxBodiesPerRefresh = 256; + + private readonly System.Collections.Generic.List bodies = + new System.Collections.Generic.List(256); + private float nextRefreshAt; + private int refreshCursor; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + private static void ResetStatics() => Instance = null; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] + private static void EnsureExists() + { + if (Instance != null) + return; + + var go = new GameObject("BiomeGravityWorldDriver"); + DontDestroyOnLoad(go); + go.AddComponent(); + } + + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(this); + return; + } + + Instance = this; + } + + private void OnDestroy() + { + if (Instance == this) + Instance = null; + } + + private void FixedUpdate() + { + if (Time.unscaledTime >= nextRefreshAt) + { + nextRefreshAt = Time.unscaledTime + Mathf.Max(0.15f, refreshIntervalSeconds); + RefreshBodyCache(); + } + + for (int i = bodies.Count - 1; i >= 0; i--) + { + Rigidbody rb = bodies[i]; + if (rb == null) + { + bodies.RemoveAt(i); + continue; + } + + if (!rb.gameObject.activeInHierarchy || !rb.useGravity || rb.isKinematic) + continue; + + float mul = BiomeGravity.SampleMultiplier(rb.worldCenterOfMass); + if (Mathf.Abs(mul - 1f) < 0.001f) + continue; + + // Unity already applied Physics.gravity; add residual so net = g * mul. + rb.AddForce(Physics.gravity * (mul - 1f), ForceMode.Acceleration); + } + } + + private void RefreshBodyCache() + { + Rigidbody[] found = FindObjectsByType(FindObjectsInactive.Exclude, FindObjectsSortMode.None); + if (found == null || found.Length == 0) + { + bodies.Clear(); + refreshCursor = 0; + return; + } + + int cap = Mathf.Max(32, maxBodiesPerRefresh); + if (found.Length <= cap) + { + bodies.Clear(); + for (int i = 0; i < found.Length; i++) + { + Rigidbody rb = found[i]; + if (rb != null && rb.useGravity && !rb.isKinematic) + bodies.Add(rb); + } + + refreshCursor = 0; + return; + } + + // Rotate through the world so large sessions stay bounded. + bodies.Clear(); + int start = refreshCursor % found.Length; + for (int n = 0; n < cap; n++) + { + Rigidbody rb = found[(start + n) % found.Length]; + if (rb != null && rb.useGravity && !rb.isKinematic) + bodies.Add(rb); + } + + refreshCursor = (start + cap) % found.Length; + } +} diff --git a/Assets/Scripts/BiomeGravityWorldDriver.cs.meta b/Assets/Scripts/BiomeGravityWorldDriver.cs.meta new file mode 100644 index 000000000..61e9509ac --- /dev/null +++ b/Assets/Scripts/BiomeGravityWorldDriver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cedc44cb0334a3594d326bd6aa776f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -40 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/BiomePalette.cs b/Assets/Scripts/BiomePalette.cs index 9fb7af487..6b70eea20 100644 --- a/Assets/Scripts/BiomePalette.cs +++ b/Assets/Scripts/BiomePalette.cs @@ -28,6 +28,8 @@ public static class BiomePalette return new Color(0.45f, 0.55f, 0.38f); case BiomeType.Swamp: return new Color(0.18f, 0.28f, 0.14f); + case BiomeType.Void: + return new Color(0.10f, 0.07f, 0.14f); default: // Never hand out the magenta debug sentinel for ground: the terrain shader multiplies // this tint into the detail albedo, so one out-of-range biome value painted a whole @@ -58,6 +60,18 @@ public static class BiomePalette return rock; } + /// Dark stone / slate for the void island (vertex paint — not grass tint). + public static Color GetVoidRockColor(float height01, float seaLevel) + { + float lift = Mathf.InverseLerp(seaLevel, 1f, Mathf.Clamp01(height01)); + Color abyssal = new Color(0.08f, 0.07f, 0.11f); + Color slate = new Color(0.18f, 0.16f, 0.22f); + Color paleCliff = new Color(0.28f, 0.26f, 0.32f); + Color rock = Color.Lerp(abyssal, slate, Mathf.SmoothStep(0.08f, 0.55f, lift)); + rock = Color.Lerp(rock, paleCliff, Mathf.SmoothStep(0.45f, 0.92f, lift) * 0.55f); + return rock; + } + /// Rust-style top-down map colors (biome + depth), not mesh tints. public static Color GetMapColor(BiomeType biome, float height01, float seaLevel, float beachBand) { diff --git a/Assets/Scripts/BiomeSettings.cs b/Assets/Scripts/BiomeSettings.cs index 6901a21e5..dde098015 100644 --- a/Assets/Scripts/BiomeSettings.cs +++ b/Assets/Scripts/BiomeSettings.cs @@ -163,6 +163,28 @@ public class BiomeSettings [Tooltip("Jagged ridge / buttress strength on the slopes.")] [Range(0f, 1f)] public float volcanoJaggedStrength = 0.9f; + [Header("Void Island (separate landmass)")] + [Tooltip("0 disables the void island. Missing YAML (0 radius) still places one.")] + [Range(0f, 1f)] public float voidDomainStrength = 1f; + [Tooltip("Degrees from +X toward +Z. Opposite the volcano so the two islands do not meet.")] + [Range(0f, 360f)] public float voidIslandBearingDegrees = 270f; + [Tooltip("Open water between main-island shore and void-island shore (meters).")] + [Min(40f)] public float voidIslandGapMeters = 140f; + [Tooltip("Void island land radius (meters).")] + [Min(40f)] public float voidDomainRadiusMeters = 160f; + [Tooltip("Soft blend width at the void rim (meters).")] + [Min(10f)] public float voidDomainEdgeMeters = 36f; + [Tooltip("Height01 of the low walkable rock shelf above sea level.")] + [Range(0.02f, 0.14f)] public float voidPlateauAboveSea01 = 0.055f; + [Tooltip("Height01 lift for sky plateaus / tall void towers above sea.")] + [Range(0.18f, 0.55f)] public float voidPeakLift01 = 0.44f; + [Tooltip("World-Y exaggeration for void peaks (same idea as the volcano island).")] + [Range(1f, 4.5f)] public float voidHeightExaggeration = 3.15f; + [Tooltip("Gravity multiplier deep inside the void (1 = normal, 0.333 = one third).")] + [Range(0.05f, 1f)] public float voidGravityMultiplier = 0.3333333f; + [Tooltip("Widens the gravity soft-edge past the void paint rim (1 = tight, 2.5 = broad ramp).")] + [Range(1f, 2.5f)] public float voidGravityBlendWiden = 2.1f; + [Header("High Country")] public float alpineLandLiftThreshold = 0.68f; public float alpineSlopeThreshold = 0.42f; diff --git a/Assets/Scripts/BiomeSystem.cs b/Assets/Scripts/BiomeSystem.cs index 3e8a685b0..c08803458 100644 --- a/Assets/Scripts/BiomeSystem.cs +++ b/Assets/Scripts/BiomeSystem.cs @@ -11,7 +11,8 @@ public enum BiomeType Snow, Tundra, Swamp, - Volcano + Volcano, + Void } public static class BiomeSystem diff --git a/Assets/Scripts/Books/LoreBookLootUtility.cs b/Assets/Scripts/Books/LoreBookLootUtility.cs index bf61c3758..cc3b802bf 100644 --- a/Assets/Scripts/Books/LoreBookLootUtility.cs +++ b/Assets/Scripts/Books/LoreBookLootUtility.cs @@ -157,20 +157,14 @@ public static class LoreBookLootUtility if (item == null) return 0f; - ReadableBook book = item.ReadableBook; - float w = book != null ? book.ResolvedSpawnWeight : 1f; - LoreBookRarity rarity = book != null ? book.loreRarity : LoreBookRarity.Common; - switch (rarity) - { - case LoreBookRarity.Common: w *= 1.35f; break; - case LoreBookRarity.Uncommon: w *= 1.1f; break; - case LoreBookRarity.Rare: w *= 0.65f; break; - case LoreBookRarity.Epic: w *= 0.28f; break; - case LoreBookRarity.Legendary: w *= 0.1f; break; - case LoreBookRarity.Mythic: w *= 0.03f; break; - } + // Tier rate from MarketItemRarity (ProfileForSkillBook); spawn weight is a relative mul. + float tierWeight = MarketItemRarity.LootWeightFor(item); + if (tierWeight <= 0.001f) + return 0f; - return Mathf.Max(0.01f, w); + ReadableBook book = item.ReadableBook; + float spawnMul = book != null ? Mathf.Max(0.01f, book.ResolvedSpawnWeight) : 1f; + return tierWeight * spawnMul; } public static float WeightForItem(Item item, LoreBookStockBias bias = LoreBookStockBias.General) diff --git a/Assets/Scripts/CardGame/SealclashCardLootUtility.cs b/Assets/Scripts/CardGame/SealclashCardLootUtility.cs index 259c85fe8..d9efa880c 100644 --- a/Assets/Scripts/CardGame/SealclashCardLootUtility.cs +++ b/Assets/Scripts/CardGame/SealclashCardLootUtility.cs @@ -154,9 +154,24 @@ public static class SealclashCardLootUtility { if (!SealclashCardItemUtility.IsSealclashCardItem(item)) return 0f; - return SealclashCardItemUtility.CatalogWeightForRarity( - SealclashCardItemUtility.ResolveRarityName(item), - pool); + + // Canonical rate from MarketItemRarity tier (ProfileForItem CatalogWeight). + float weight = MarketItemRarity.LootWeightFor(item); + if (weight <= 0.001f) + return 0f; + + // Orian caravan slightly boosts Rare+ relative to village shelves. + if (pool == SealclashCardItemUtility.ShopCardPool.OrianCaravan) + { + string rarity = SealclashCardItemUtility.ResolveRarityName(item); + float village = SealclashCardItemUtility.CatalogWeightForRarity( + rarity, SealclashCardItemUtility.ShopCardPool.VillageGeneral); + float orian = SealclashCardItemUtility.CatalogWeightForRarity(rarity, pool); + if (village > 0.001f) + weight *= orian / village; + } + + return weight; } public static int CountCardsInChestSlots(SyncChestSlots slots) diff --git a/Assets/Scripts/Chest/ChestHudController.cs b/Assets/Scripts/Chest/ChestHudController.cs index 2742fdad0..552c903fc 100644 --- a/Assets/Scripts/Chest/ChestHudController.cs +++ b/Assets/Scripts/Chest/ChestHudController.cs @@ -44,6 +44,9 @@ namespace InventoryFramework public bool IsOpen => panelRoot != null && panelRoot.activeSelf && boundChest != null; + /// True when the loot panel GameObject is active (even if the bound chest was destroyed). + public bool IsPanelActive => panelRoot != null && panelRoot.activeSelf; + public ChestInventoryUI ChestInventory => chestInventoryUI; /// Persistent 2D source under this HUD object — survives PlayOneShot (temporary Destroy sources often silence). @@ -51,9 +54,16 @@ namespace InventoryFramework private void Update() { - if (!IsOpen) + // Panel can stay active after a corpse despawn clears boundChest — still allow dismiss. + if (panelRoot == null || !panelRoot.activeSelf) return; + if (boundChest == null) + { + Close(); + return; + } + // Same F that opened the chest must not close it on this frame. if (ignoreCloseKeysThisFrame) { @@ -112,10 +122,21 @@ namespace InventoryFramework private void LateUpdate() { - if (panelRoot == null || !panelRoot.activeSelf || boundChest == null || boundPlayer == null) + if (panelRoot == null || !panelRoot.activeSelf) + return; + + // Body despawned / unbound while the loot panel was still up. + if (boundChest == null) + { + Close(); + return; + } + + if (boundPlayer == null) return; - // Slightly inside interact range so you cannot stand out of interact range with UI open. + // Slightly inside interact range. Corpses override IsPlayerInRange for ragdoll / + // disabled colliders so this does not false-close under a dead body. float stayRange = Mathf.Max(0.5f, Mathf.Min(closeDistance, boundChest.InteractRange * 0.92f)); if (!boundChest.IsPlayerInRange(boundPlayer.position, stayRange)) Close(); @@ -166,6 +187,8 @@ namespace InventoryFramework if (panelRoot != null) { UIDraggablePanel.EnsureOn(panelRoot); + // List mode: hide the slot grid before the first paint (no old-grid flash). + InventoryListView.PrepareChestOpenVisuals(); panelRoot.SetActive(true); PlaceInRightColumn(panelRoot.transform as RectTransform); TryApplyParchmentPanel(); @@ -244,6 +267,8 @@ namespace InventoryFramework boundPlayer = null; suppressOpenCloseSounds = false; fHeldLastFrame = IsInteractHeld(); + ignoreCloseKeysThisFrame = false; + ignoreExchangeKeysThisFrame = false; if (chestInventoryUI != null) chestInventoryUI.Bind(null); diff --git a/Assets/Scripts/Chunk.cs b/Assets/Scripts/Chunk.cs index c407006e9..056778198 100644 --- a/Assets/Scripts/Chunk.cs +++ b/Assets/Scripts/Chunk.cs @@ -1590,7 +1590,9 @@ public class Chunk : MonoBehaviour if (biomeMap == null) return; - int max = (int)BiomeType.Volcano; + // Must include Void (added after Volcano). Capping at Volcano turned every Void cell + // into Grassland — flat green disks on the offshore void pad. + int max = (int)BiomeType.Void; int firstBad = -1; int repaired = 0; int sideX = biomeMap.GetLength(0); @@ -1811,7 +1813,8 @@ public class Chunk : MonoBehaviour && inland01 >= 0.28f && biomeMap[x, z] != BiomeType.Forest && biomeMap[x, z] != BiomeType.Desert - && biomeMap[x, z] != BiomeType.Volcano) + && biomeMap[x, z] != BiomeType.Volcano + && biomeMap[x, z] != BiomeType.Void) { float bankTop = seaLevel + Mathf.Max( beachBand * 2.5f, @@ -1827,6 +1830,11 @@ public class Chunk : MonoBehaviour biomeMap[x, z] = BiomeType.Swamp; } } + + float void01 = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, bio); + // Paint rock even on the low shelves between towers (not only high plateaus). + if (void01 > 0.08f && height >= seaLevel - 0.02f) + biomeMap[x, z] = BiomeType.Void; } private void SampleClimate(int worldX, int worldZ, BiomeSettings bio, out float moisture01, out float effectiveTemperature01) @@ -3107,6 +3115,13 @@ public class Chunk : MonoBehaviour return WorldTerrainHeightModifiers.Apply(volcanoH, worldX, worldZ); } + float void01Early = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, bioEarly); + if (void01Early > 0.02f) + { + float voidH = BuildVoidIslandHeight01(worldX, worldZ, void01Early, bioEarly); + return WorldTerrainHeightModifiers.Apply(voidH, worldX, worldZ); + } + float sx = worldX; float sz = worldZ; NoiseUtility.DomainWarpPosition(ref sx, ref sz, interiorWarpScale, interiorWarpStrength, seed + 2929); @@ -3434,6 +3449,7 @@ public class Chunk : MonoBehaviour } height01 = ApplyVolcanoCore(height01, worldX, worldZ); + height01 = ApplyVoidCore(height01, worldX, worldZ); if (t_captureTail) { t_tailPre = height01; @@ -3458,6 +3474,145 @@ public class Chunk : MonoBehaviour return BuildVolcanoIslandHeight01(worldX, worldZ, volcano01, bio); } + /// Offshore void mass — rock shelves, chasms, and sky plateaus. + private float ApplyVoidCore(float height01, int worldX, int worldZ) + { + BiomeSettings bio = ResolveBiomeSettings(); + float void01 = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, bio); + if (void01 <= 0.02f) + return height01; + return BuildVoidIslandHeight01(worldX, worldZ, void01, bio); + } + + private float BuildVoidIslandHeight01(int worldX, int worldZ, float void01, BiomeSettings bio) + { + BiomeClimateSampler.ResolveVoidLayout(bio, out Vector2 voidCenter, out float radius); + radius = Mathf.Max(40f, radius); + + float dx = worldX - voidCenter.x; + float dz = worldZ - voidCenter.y; + float dist = Mathf.Sqrt(dx * dx + dz * dz); + float radial01 = Mathf.Clamp01(dist / radius); + + float shelf = bio != null ? Mathf.Clamp(bio.voidPlateauAboveSea01, 0.02f, 0.14f) : 0.055f; + float peakLift = bio != null ? Mathf.Clamp(bio.voidPeakLift01, 0.18f, 0.55f) : 0.42f; + + // Voronoi pads: each cell is a shelf, a sky tower, a mid mesa, or open air/chasm. + const float cellMeters = 42f; + float cellX = (worldX - voidCenter.x) / cellMeters; + float cellZ = (worldZ - voidCenter.y) / cellMeters; + int ix = Mathf.FloorToInt(cellX); + int iz = Mathf.FloorToInt(cellZ); + float bestD = 8f; + float secondD = 8f; + int bestI = 0; + int bestJ = 0; + for (int j = -1; j <= 1; j++) + { + for (int i = -1; i <= 1; i++) + { + int cx = ix + i; + int cz = iz + j; + float ox = Hash01(cx, cz, seed + 9011); + float oz = Hash01(cx, cz, seed + 9029); + float px = cx + ox; + float pz = cz + oz; + float ddx = cellX - px; + float ddz = cellZ - pz; + float d = Mathf.Sqrt(ddx * ddx + ddz * ddz); + if (d < bestD) + { + secondD = bestD; + bestD = d; + bestI = cx; + bestJ = cz; + } + else if (d < secondD) + { + secondD = d; + } + } + } + + float edge = Mathf.Max(0.001f, secondD - bestD); + // GLSL edge falloff — Mathf.SmoothStep is a from→to lerp and crushed every pad to a flat shelf. + float padMask = 1f - EdgeSmooth(0.16f, 0.58f, bestD); + float cliff = EdgeSmooth(0.03f, 0.2f, edge); + float cellRoll = Hash01(bestI, bestJ, seed + 9043); + + // 0 chasm / air gap, 1 low rock shelf, 2 mid floating mesa, 3 sky plateau. + int kind; + if (cellRoll < 0.2f) + kind = 0; + else if (cellRoll < 0.42f) + kind = 1; + else if (cellRoll < 0.7f) + kind = 2; + else + kind = 3; + + // Keep a walkable rock pad near the authored spawn seat (domain center). + if (radial01 < 0.2f && kind == 0) + kind = 1; + + float rockNoise = NoiseUtility.RidgedMultifractal( + worldX, worldZ, 0.028f, seed + 88107, 4, 0.52f, 2.2f); + float rubble = NoiseUtility.FractalNoise( + worldX, worldZ, 0.055f, seed + 88203, 3, 0.5f, 2.05f); + + float shore = seaLevel - 0.035f; + float target = shore; + if (kind == 0) + { + // Deep cut between pads — reads as open air / void under floating rock. + float abyss = seaLevel - Mathf.Lerp(0.06f, 0.18f, rockNoise); + target = Mathf.Lerp(abyss, seaLevel - 0.02f, padMask * 0.25f); + } + else if (kind == 1) + { + float h = seaLevel + shelf * Mathf.Lerp(0.7f, 1.35f, rubble); + h += (rockNoise - 0.5f) * 0.045f; + target = Mathf.Lerp(shore, h, padMask); + } + else if (kind == 2) + { + // Mid mesa with sheer sides — floating-island silhouette from the water. + float top = seaLevel + Mathf.Lerp(shelf * 2.2f, peakLift * 0.72f, Hash01(bestI, bestJ, seed + 9061)); + top += (rockNoise - 0.45f) * 0.05f; + float stem = 1f - EdgeSmooth(0.1f, 0.4f, bestD); // wider top, thinner approach + float mesa = Mathf.Lerp(shore, top, padMask * stem); + target = Mathf.Lerp(mesa, top, cliff * padMask * 0.9f); + } + else + { + // Sky plateaus that climb hard — flat crowns, cliff skirts. + float crown = seaLevel + peakLift * Mathf.Lerp(0.85f, 1.2f, Hash01(bestI, bestJ, seed + 9077)); + float skirt = seaLevel + shelf * 0.9f; + float tower = Mathf.Lerp(skirt, crown, Mathf.Pow(Mathf.Max(padMask * cliff, 1e-3f), 0.55f)); + tower = Mathf.Max(tower, Mathf.Lerp(shore, crown * 0.95f, padMask * padMask)); + tower += (rockNoise - 0.5f) * 0.06f; + target = tower; + } + + // Rim softens into the sea so the void disc still reads as one offshore mass. + float rim = EdgeSmooth(0.08f, 0.78f, void01) * (1f - EdgeSmooth(0.82f, 1.02f, radial01)); + float shaped = Mathf.Lerp(shore, target, rim); + if (void01 > 0.55f && kind != 0) + shaped = Mathf.Max(shaped, seaLevel + shelf * 0.55f); + return shaped; + } + + private static float Hash01(int x, int z, int salt) + { + unchecked + { + int h = x * 374761393 + z * 668265263 + salt; + h = (h ^ (h >> 13)) * 1274126177; + h ^= h >> 16; + return (h & 0x7fffffff) / (float)int.MaxValue; + } + } + /// /// Standalone volcano island cone — dry land above sea, independent of main-island falloff. /// @@ -4255,6 +4410,19 @@ public class Chunk : MonoBehaviour return t * t * (3f - 2f * t); } + /// + /// GLSL-style smoothstep on a value between edges. Do not use : + /// that API lerps from→to with a 0–1 t, which zeros void/volcano rim masks. + /// + private static float EdgeSmooth(float edge0, float edge1, float x) + { + float denom = edge1 - edge0; + if (Mathf.Abs(denom) < 1e-5f) + return x >= edge1 ? 1f : 0f; + float t = Mathf.Clamp01((x - edge0) / denom); + return t * t * (3f - 2f * t); + } + private static int FloorDiv(int value, int divisor) { if (value >= 0) @@ -4554,6 +4722,20 @@ public class Chunk : MonoBehaviour return ComputeLandHeight(height01, cold01, worldX, worldZ); } + float void01 = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, volcanoBio); + if (void01 > 0.02f) + { + // Always keep the authored void silhouette. Lifting every cell to sea+ε + // erased chasms and turned floating pads into one flat shelf. + height01 = ApplyVoidCore(height01, worldX, worldZ); + if (height01 >= seaLevel) + return ComputeLandHeight(height01, cold01, worldX, worldZ); + + float seaY = seaLevel * heightScale; + float depth01 = Mathf.Clamp01(seaLevel - height01); + return seaY - depth01 * heightScale * Mathf.Lerp(1.15f, 2.1f, depth01 / 0.18f); + } + // Safety: arid interior cells never use deep ocean seafloor carving (sheer desert cliffs). // Gate must stay stricter than the coastal shelf band — a low inland check was raising // arid shoreline mesh above water and painting the rim as desert. @@ -4636,7 +4818,7 @@ public class Chunk : MonoBehaviour float volcanoEx = Mathf.Clamp(bio.volcanoHeightExaggeration, 1f, 4.5f); if (volcanoEx > 1.001f && volcano01 > 0.02f) { - float core = Mathf.SmoothStep(0.05f, 0.55f, volcano01); + float core = EdgeSmooth(0.05f, 0.55f, volcano01); float ex = Mathf.Lerp(1f, volcanoEx, core); float seaY = seaLevel * heightScale; float above = y - seaY; @@ -4644,6 +4826,19 @@ public class Chunk : MonoBehaviour y = seaY + above * ex; } + // Void sky plateaus — stretch the height01 towers into readable cliffs. + float void01 = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, bio); + float voidEx = Mathf.Clamp(bio.voidHeightExaggeration, 1f, 4.5f); + if (voidEx > 1.001f && void01 > 0.02f) + { + float core = EdgeSmooth(0.08f, 0.55f, void01); + float ex = Mathf.Lerp(1f, voidEx, core); + float seaY = seaLevel * heightScale; + float above = y - seaY; + if (above > 0.05f) + y = seaY + above * ex; + } + return y; } @@ -4710,6 +4905,9 @@ public class Chunk : MonoBehaviour if (biome == BiomeType.Volcano) return BiomePalette.GetVolcanoRockColor(height01, seaLevel); + if (biome == BiomeType.Void) + return BiomePalette.GetVoidRockColor(height01, seaLevel); + return BiomePalette.GetTint(biome); } @@ -4745,6 +4943,10 @@ public class Chunk : MonoBehaviour if (volcanoTint01 > 0.12f && biomeH >= seaLevel + beachBand * 0.35f) biome = BiomeType.Volcano; + float voidTint01 = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, bio); + if (voidTint01 > 0.08f && biomeH >= seaLevel - 0.02f) + biome = BiomeType.Void; + if (WorldTerrainHeightModifiers.ForcesDryBiomeAt(worldX, worldZ)) { if (biome == BiomeType.Ocean || biome == BiomeType.Beach) diff --git a/Assets/Scripts/Combat/PlayerDeathPresentation.cs b/Assets/Scripts/Combat/PlayerDeathPresentation.cs index 953695bdc..134ff80e8 100644 --- a/Assets/Scripts/Combat/PlayerDeathPresentation.cs +++ b/Assets/Scripts/Combat/PlayerDeathPresentation.cs @@ -543,10 +543,12 @@ public sealed class PlayerDeathPresentation : NetworkBehaviour deathToSpawnScreenRoutine = null; } + bool abortedWorldEntry = false; if (ownerWorldEntryRoutine != null) { StopCoroutine(ownerWorldEntryRoutine); ownerWorldEntryRoutine = null; + abortedWorldEntry = true; } localOssuaryHint = false; @@ -556,6 +558,14 @@ public sealed class PlayerDeathPresentation : NetworkBehaviour deathFocusTransform = null; deathCarryVelocity = Vector3.zero; + // Death respawn used to call ForceEnd after ServerNotifyOwnerWorldEntry, which + // stopped ReleaseWorldEntryWhenGroundReady and left spawnBlackScrim up forever. + if (abortedWorldEntry) + { + ClearWorldEntryCover(); + fpsController?.RestoreLocalPresentation(); + } + if (characterController != null) characterController.enabled = true; diff --git a/Assets/Scripts/Combat/PlayerHealth.cs b/Assets/Scripts/Combat/PlayerHealth.cs index e12d1c5dc..23d7c65b5 100644 --- a/Assets/Scripts/Combat/PlayerHealth.cs +++ b/Assets/Scripts/Combat/PlayerHealth.cs @@ -370,6 +370,10 @@ public class PlayerHealth : NetworkBehaviour alchemyStatus ??= GetComponent() ?? GetComponentInParent(); if (alchemyStatus != null) damageDelta *= alchemyStatus.ColdDamageMultiplier; + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + damageDelta *= diseases.GetColdDamageMultiplier(); if (!NetworkSessionActive) { @@ -528,6 +532,11 @@ public class PlayerHealth : NetworkBehaviour if (spell != null) finalDamage *= GetAlterationSpellDamageMultiplier(); + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + finalDamage *= diseases.GetIncomingDamageMultiplier(); + if (equipmentManager != null) equipmentManager.ApplyDamageToEquippedItems(finalDamage); @@ -571,6 +580,13 @@ public class PlayerHealth : NetworkBehaviour if (finalDamage > 0.01f && (!NetworkSessionActive || isLocalPlayer)) CombatMusicSignals.NotifyActivity(); + // Creature melee that lands (hurt reaction path, not spells/effect ticks) may seed disease. + if (finalDamage > 0.01f && triggerHurtReaction && spell == null && syncedHealth > 0f) + { + DiseaseAmbientDriver.EnsureOn(gameObject); + DiseaseInfectionService.ServerTryInfectFromCreatureHit(gameObject, damageSourcePosition); + } + if (syncedHealth <= 0f) { PlayerVitalsDebug.LogFatalOutcome(gameObject, "TakeDamage", hpBefore, currentHealth, @@ -1039,7 +1055,12 @@ public class PlayerHealth : NetworkBehaviour private float ApplyMedicineHealingBonus(float amount) { - return amount * GetMedicineHealingMultiplier(); + float mul = GetMedicineHealingMultiplier(); + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + mul *= diseases.GetIncomingHealMultiplier(); + return amount * mul; } private float GetFortitudeDamageMultiplier() @@ -1066,6 +1087,16 @@ public class PlayerHealth : NetworkBehaviour return practiceProgress != null ? practiceProgress.ClientAlterationSpellDamageMultiplier : 1f; } + private float GetEffectiveMaxHealth() + { + float cap = maxHealth; + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + cap *= diseases.GetMaxHealthMultiplier(); + return Mathf.Max(1f, cap); + } + private void ApplyHealLocal(float amount, string debugSource = "Heal") { if (NetworkSessionActive && !isServer) @@ -1073,7 +1104,7 @@ public class PlayerHealth : NetworkBehaviour float before = syncedHealth; syncedHealth += amount; - syncedHealth = Mathf.Clamp(syncedHealth, 0f, maxHealth); + syncedHealth = Mathf.Clamp(syncedHealth, 0f, GetEffectiveMaxHealth()); currentHealth = syncedHealth; PlayerVitalsDebug.LogHeal(gameObject, debugSource, amount, before, currentHealth); diff --git a/Assets/Scripts/Combat/PlayerMeleeCombat.cs b/Assets/Scripts/Combat/PlayerMeleeCombat.cs index 9e9d1907a..de70ba2dd 100644 --- a/Assets/Scripts/Combat/PlayerMeleeCombat.cs +++ b/Assets/Scripts/Combat/PlayerMeleeCombat.cs @@ -1021,6 +1021,12 @@ public class PlayerMeleeCombat : NetworkBehaviour damage = VampireCombatIntegration.ModifyOutgoingMeleeDamage(attackerRoot, damage); damage = WerewolfCombatIntegration.ModifyOutgoingMeleeDamage(attackerRoot, damage); + PlayerDiseaseRuntime diseases = attackerRoot != null + ? attackerRoot.GetComponent() ?? attackerRoot.GetComponentInParent() + : null; + if (diseases != null) + damage *= diseases.GetStrengthMultiplier(); + if (profile != null && profile.usePracticeSkillModifiers && NetworkServer.active && attackerRoot != null) { PlayerPracticeProgress pr = attackerRoot.GetComponent(); diff --git a/Assets/Scripts/Combat/PlayerUnarmedHandCombat.cs b/Assets/Scripts/Combat/PlayerUnarmedHandCombat.cs index 3c86c01eb..c616ecce7 100644 --- a/Assets/Scripts/Combat/PlayerUnarmedHandCombat.cs +++ b/Assets/Scripts/Combat/PlayerUnarmedHandCombat.cs @@ -892,6 +892,12 @@ public sealed class PlayerUnarmedHandCombat : NetworkBehaviour : null; damage *= alchemyStatus != null ? alchemyStatus.OutgoingMeleeDamageMultiplier : 1f; + PlayerDiseaseRuntime diseases = attackerRoot != null + ? attackerRoot.GetComponent() ?? attackerRoot.GetComponentInParent() + : null; + if (diseases != null) + damage *= diseases.GetStrengthMultiplier(); + PlayerHealth playerHealth = hit.GetComponentInParent(); if (playerHealth != null && playerHealth.gameObject != attackerRoot) { diff --git a/Assets/Scripts/Consumables/PlayerMushroomSicknessRuntime.cs b/Assets/Scripts/Consumables/PlayerMushroomSicknessRuntime.cs index 24c82eb6d..d3686de91 100644 --- a/Assets/Scripts/Consumables/PlayerMushroomSicknessRuntime.cs +++ b/Assets/Scripts/Consumables/PlayerMushroomSicknessRuntime.cs @@ -2,31 +2,22 @@ using Mirror; using UnityEngine; /// -/// Raw forage mushrooms (not stew) stack toward food sickness. -/// After a random 3–9 eats, the player turns sick: pale-green health bar and slow HP drain -/// until the bout ends, a healing/antivenin potion cures it, or a church healer clears it. +/// Compatibility shim: raw forage mushrooms still count toward illness, but the bout is +/// on . /// [DisallowMultipleComponent] public sealed class PlayerMushroomSicknessRuntime : MonoBehaviour { private const float SessionIdleResetSeconds = 480f; - private const float TickIntervalSeconds = 0.5f; - private const float DamagePerSecond = 0.85f; - private const float MinSickDurationSeconds = 95f; - private const float MaxSickDurationSeconds = 150f; private int rawEatenThisSession; private int sicknessThreshold = -1; - private bool sick; - private float sickExpiresAt; - private float nextTickAt; private float lastRawEatAt = -999f; - private bool hudSick; - private PlayerHealth health; private ActiveHotbarConsume hotbarConsume; - public bool IsSick => sick && Time.time < sickExpiresAt; + public bool IsSick => + PlayerDiseaseRuntime.EnsureOn(gameObject)?.Has(DiseaseId.RawcapGut) == true; public static PlayerMushroomSicknessRuntime EnsureOn(GameObject player) { @@ -34,7 +25,16 @@ public sealed class PlayerMushroomSicknessRuntime : MonoBehaviour return null; PlayerMushroomSicknessRuntime existing = player.GetComponent(); - return existing != null ? existing : player.AddComponent(); + if (existing != null) + { + PlayerDiseaseRuntime.EnsureOn(player); + DiseaseAmbientDriver.EnsureOn(player); + return existing; + } + + PlayerDiseaseRuntime.EnsureOn(player); + DiseaseAmbientDriver.EnsureOn(player); + return player.AddComponent(); } /// Owner / offline path after a raw mushroom is eaten. @@ -51,7 +51,7 @@ public sealed class PlayerMushroomSicknessRuntime : MonoBehaviour hotbarConsume?.CmdRegisterRawMushroomEaten(); } - /// Server / offline: count toward the random 3–9 threshold and maybe start sickness. + /// Server / offline: count toward the random 3–9 threshold and maybe start Rawcap Gut. public void ServerRegisterRawMushroomEaten() { if (!HasDamageAuthority()) @@ -66,83 +66,33 @@ public sealed class PlayerMushroomSicknessRuntime : MonoBehaviour rawEatenThisSession++; if (!IsSick && rawEatenThisSession >= sicknessThreshold) - BeginSickness(); + { + rawEatenThisSession = 0; + sicknessThreshold = -1; + DiseaseInfectionService.ServerTryInfectRawcapGut(gameObject); + } } + /// Legacy healer/potion hook — cures Rawcap Gut only. public bool TryCureFromPotionOrHealer() { - if (!IsSick && !sick) - return false; - - ClearSickness(notifyHud: true); - return true; + PlayerDiseaseRuntime diseases = PlayerDiseaseRuntime.EnsureOn(gameObject); + return diseases != null && diseases.ServerTryCure(DiseaseId.RawcapGut); } public void ClearForRespawn() { - ClearSickness(notifyHud: true); rawEatenThisSession = 0; sicknessThreshold = -1; lastRawEatAt = -999f; + PlayerDiseaseRuntime.EnsureOn(gameObject)?.ClearForRespawn(); } private void Awake() { - health = GetComponent(); hotbarConsume = GetComponent(); - } - - private void Update() - { - if (!HasDamageAuthority()) - return; - - MaybeResetIdleSession(); - - if (!sick) - return; - - if (Time.time >= sickExpiresAt) - { - ClearSickness(notifyHud: true); - return; - } - - if (Time.time < nextTickAt) - return; - - nextTickAt = Time.time + TickIntervalSeconds; - health ??= GetComponent(); - if (health == null || health.currentHealth <= 0.5f) - return; - - health.TakeDamageFromEffect(DamagePerSecond * TickIntervalSeconds, transform.position); - } - - private void OnDisable() - { - if (hudSick) - ApplyHudTint(false); - } - - private void BeginSickness() - { - sick = true; - float duration = Random.Range(MinSickDurationSeconds, MaxSickDurationSeconds); - sickExpiresAt = Time.time + duration; - nextTickAt = Time.time; - rawEatenThisSession = 0; - sicknessThreshold = -1; - ApplyHudTint(true); - } - - private void ClearSickness(bool notifyHud) - { - sick = false; - sickExpiresAt = 0f; - nextTickAt = 0f; - if (notifyHud) - ApplyHudTint(false); + PlayerDiseaseRuntime.EnsureOn(gameObject); + DiseaseAmbientDriver.EnsureOn(gameObject); } private void MaybeResetIdleSession() @@ -157,19 +107,6 @@ public sealed class PlayerMushroomSicknessRuntime : MonoBehaviour sicknessThreshold = -1; } - private void ApplyHudTint(bool enable) - { - hudSick = enable; - hotbarConsume ??= GetComponent(); - if (hotbarConsume != null) - { - hotbarConsume.NotifyMushroomSicknessHud(enable); - return; - } - - PlayerStatusRuntimeHud.EnsureOn(gameObject)?.SetHealthBarSickTint(enable); - } - private bool HasDamageAuthority() { return NetworkServer.active diff --git a/Assets/Scripts/Creatures/Chicken/ChickenLootTable.cs b/Assets/Scripts/Creatures/Chicken/ChickenLootTable.cs index 10129e479..1cba65eea 100644 --- a/Assets/Scripts/Creatures/Chicken/ChickenLootTable.cs +++ b/Assets/Scripts/Creatures/Chicken/ChickenLootTable.cs @@ -68,7 +68,7 @@ public sealed class ChickenLootTable : ScriptableObject if (rareBonusPool != null && rareBonusPool.Length > 0 && Random.value <= chance) { - RareEntry chosen = PickRareEntry(rareBonusPool); + RareEntry chosen = PickRareEntry(rareBonusPool, ctx.quality01); if (chosen.item != null) { int lo = Mathf.Min(chosen.minAmount, chosen.maxAmount); @@ -88,13 +88,18 @@ public sealed class ChickenLootTable : ScriptableObject return spawnedAny; } - private static RareEntry PickRareEntry(RareEntry[] pool) + private static RareEntry PickRareEntry(RareEntry[] pool, float creatureQuality01) { float total = 0f; for (int i = 0; i < pool.Length; i++) { - if (pool[i].item != null && pool[i].weight > 0f) - total += pool[i].weight; + RareEntry row = pool[i]; + if (row.item == null) + continue; + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float w = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (w > 0.001f) + total += w; } if (total <= 0f) @@ -102,18 +107,24 @@ public sealed class ChickenLootTable : ScriptableObject float roll = Random.Range(0f, total); float cumulative = 0f; + RareEntry last = default; for (int i = 0; i < pool.Length; i++) { RareEntry row = pool[i]; - if (row.item == null || row.weight <= 0f) + if (row.item == null) + continue; + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float w = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (w <= 0.001f) continue; - cumulative += row.weight; + last = row; + cumulative += w; if (roll <= cumulative) return row; } - return pool[pool.Length - 1]; + return last; } private static Vector3 FibonacciDiskOffset(int index, float spacing) diff --git a/Assets/Scripts/Creatures/Cow/CowLootTable.cs b/Assets/Scripts/Creatures/Cow/CowLootTable.cs index 1f1dfa866..9af46143b 100644 --- a/Assets/Scripts/Creatures/Cow/CowLootTable.cs +++ b/Assets/Scripts/Creatures/Cow/CowLootTable.cs @@ -60,7 +60,7 @@ public sealed class CowLootTable : ScriptableObject if (chance > 0f && Random.value <= chance) { - Item bonus = RollBonusItem(); + Item bonus = RollBonusItem(ctx.quality01); if (bonus != null) { int lo = Mathf.Min(genericMinAmount, genericMaxAmount); @@ -127,18 +127,19 @@ public sealed class CowLootTable : ScriptableObject } } - private Item RollBonusItem() + private Item RollBonusItem(float creatureQuality01) { - List candidates = BuildBonusCandidates(); + List<(Item item, float weight)> candidates = BuildBonusCandidates(creatureQuality01); if (candidates.Count == 0) return null; - return candidates[Random.Range(0, candidates.Count)]; + int index = TierLootRoll.PickIndex(candidates); + return index >= 0 ? candidates[index].item : null; } - private List BuildBonusCandidates() + private List<(Item item, float weight)> BuildBonusCandidates(float creatureQuality01) { - var candidates = new List(64); + var candidates = new List<(Item item, float weight)>(64); var seenIds = new HashSet(); if (cowHide != null) @@ -162,9 +163,15 @@ public sealed class CowLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromCreatureBonusLoot(item, catalog)) continue; + if (ItemLootRarity.ResolveTier(item) > MarketItemRarity.Tier.Rare) + continue; + + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) + continue; seenIds.Add(item.id); - candidates.Add(item); + candidates.Add((item, weight)); } return candidates; diff --git a/Assets/Scripts/Creatures/CreatureCorpseLootChest.cs b/Assets/Scripts/Creatures/CreatureCorpseLootChest.cs index 009573dc4..db449a0eb 100644 --- a/Assets/Scripts/Creatures/CreatureCorpseLootChest.cs +++ b/Assets/Scripts/Creatures/CreatureCorpseLootChest.cs @@ -11,6 +11,7 @@ using UnityEngine; public sealed class CreatureCorpseLootChest : NetworkChest { public const int DefaultLootCapacity = 12; + private const string BodyLookVolumeName = "CorpseLootLookVolume"; [SerializeField] private int lootCapacity = DefaultLootCapacity; [SerializeField] private float emptyDespawnSeconds = 8f; @@ -241,10 +242,164 @@ public sealed class CreatureCorpseLootChest : NetworkChest public Vector3 ResolveBodyLootWorldPosition() { + if (TryGetBodyBounds(out Bounds bounds)) + return bounds.center; + + Transform hurtbox = transform.Find("Hurtbox"); + if (hurtbox != null) + return hurtbox.position; + Collider col = GetComponentInChildren(); - if (col != null) + if (col != null && col.enabled) return col.bounds.center; return transform.position + Vector3.up * 0.5f; } + + private void LateUpdate() + { + if (IsCorpseLootable()) + UpdateBodyLookVolume(); + else + DestroyBodyLookVolume(); + } + + /// + /// Death disables CharacterController / many body colliders, so aim rays often miss. + /// A generous trigger volume covering the corpse keeps "search" prompts reliable. + /// + private void UpdateBodyLookVolume() + { + Transform volumeTf = transform.Find(BodyLookVolumeName); + GameObject volumeGo; + CapsuleCollider capsule; + if (volumeTf == null) + { + volumeGo = new GameObject(BodyLookVolumeName); + volumeGo.transform.SetParent(transform, false); + volumeGo.layer = gameObject.layer; + capsule = volumeGo.AddComponent(); + capsule.isTrigger = true; + capsule.direction = 1; + } + else + { + volumeGo = volumeTf.gameObject; + capsule = volumeGo.GetComponent(); + if (capsule == null) + capsule = volumeGo.AddComponent(); + capsule.isTrigger = true; + } + + Vector3 center = ResolveBodyLootWorldPosition(); + float radius = 1.15f; + float height = 2.2f; + if (TryGetBodyBounds(out Bounds bounds)) + { + center = bounds.center; + radius = Mathf.Clamp(Mathf.Max(bounds.extents.x, bounds.extents.z) + 0.55f, 1.1f, 3.8f); + height = Mathf.Clamp(bounds.size.y + 1.1f, 1.6f, 5.5f); + } + + volumeGo.transform.position = center; + volumeGo.transform.rotation = Quaternion.identity; + capsule.isTrigger = true; + capsule.radius = radius; + capsule.height = Mathf.Max(height, radius * 2f + 0.1f); + capsule.center = Vector3.zero; + capsule.enabled = true; + } + + private void DestroyBodyLookVolume() + { + Transform volumeTf = transform.Find(BodyLookVolumeName); + if (volumeTf != null) + Destroy(volumeTf.gameObject); + } + + private bool TryGetBodyBounds(out Bounds bounds) + { + bounds = default; + bool any = false; + + Renderer[] renderers = GetComponentsInChildren(true); + for (int i = 0; i < renderers.Length; i++) + { + Renderer renderer = renderers[i]; + if (renderer == null || !renderer.enabled) + continue; + if (renderer is ParticleSystemRenderer) + continue; + + if (!any) + { + bounds = renderer.bounds; + any = true; + } + else + { + bounds.Encapsulate(renderer.bounds); + } + } + + if (any) + return true; + + Collider[] colliders = GetComponentsInChildren(true); + for (int i = 0; i < colliders.Length; i++) + { + Collider col = colliders[i]; + if (col == null || !col.enabled) + continue; + if (col.transform.name == BodyLookVolumeName) + continue; + + if (!any) + { + bounds = col.bounds; + any = true; + } + else + { + bounds.Encapsulate(col.bounds); + } + } + + return any; + } + + /// + /// Death disables body colliders. Base NetworkChest range then always fails and the loot + /// UI either never stays open or distance-closes every frame — use the body point instead. + /// + public override bool IsPlayerInInteractRange(Vector3 playerPosition) + { + if (!IsCorpseLootable()) + return false; + + return IsBodyInLootRange(playerPosition, InteractRange); + } + + public override bool IsPlayerInRange(Vector3 playerPosition, float range) + { + if (!IsCorpseLootable()) + return false; + + return IsBodyInLootRange(playerPosition, range); + } + + public override bool ServerIsPlayerInRange(Vector3 playerPosition) => + IsCorpseLootable() && IsPlayerInInteractRange(playerPosition); + + private bool IsBodyInLootRange(Vector3 playerPosition, float range) + { + range = Mathf.Clamp(Mathf.Max(0.5f, range), 0.5f, 8f); + Vector3 body = ResolveBodyLootWorldPosition(); + Vector3 delta = playerPosition - body; + float planar = new Vector2(delta.x, delta.z).magnitude; + if (planar > range) + return false; + + return Mathf.Abs(delta.y) <= range + 1.5f; + } } diff --git a/Assets/Scripts/Creatures/Druclad.meta b/Assets/Scripts/Creatures/Druclad.meta new file mode 100644 index 000000000..c50891d47 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb3b8f72db8d4bfb92ade07fb7e90457 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladAnimCatalog.cs b/Assets/Scripts/Creatures/Druclad/DrucladAnimCatalog.cs new file mode 100644 index 000000000..7bd2f7998 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladAnimCatalog.cs @@ -0,0 +1,220 @@ +using UnityEngine; + +/// +/// Mixamo Humanoid clip filenames + strike timings for Druclad (void fire boss). +/// Clips live under Assets/ThirdParty/DownloadedAssets/Druclad/Clips/ (preferred) +/// or fall back to shared Mixamo FBXs already in the project (Copy From Druclad Avatar). +/// +public static class DrucladAnimCatalog +{ + public const string ClipsFolder = "Assets/ThirdParty/DownloadedAssets/Druclad/Clips"; + public const string RiggedModelPath = + "Assets/ThirdParty/DownloadedAssets/Druclad/Druclad_MixamoRigged.fbx"; + public const string AnimatorPath = "Assets/Animation/Druclad.controller"; + + // --- Locomotion / reaction --- + public const string IdlePreferred = "Monster Idle.fbx"; + public const string IdleFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Idle.fbx"; + + public const string WalkPreferred = "Zombie Walk.fbx"; + public const string WalkFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Walking.fbx"; + + public const string RunPreferred = "Run.fbx"; + public const string RunFallback = + "Assets/ThirdParty/DownloadedAssets/samurai-character/source/Untitled@Running (1).fbx"; + + public const string RoarPreferred = "Roaring.fbx"; + public const string RoarFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Attack.fbx"; + + public const string HitPreferred = "Impact.fbx"; + public const string HitFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Reaction Hit.fbx"; + + public const string DeathPreferred = "Dying Backwards.fbx"; + public const string DeathFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Dying Backwards.fbx"; + + // --- Attacks --- + public const string SwipeLPreferred = "Punching.fbx"; + public const string SwipeLFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Punching.fbx"; + + public const string SwipeRPreferred = "Hook.fbx"; + public const string SwipeRFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Attack (1).fbx"; + + public const string OverheadPreferred = "Axe Overhead.fbx"; + public const string OverheadFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Attack.fbx"; + + public const string StompPreferred = "Jump Attack.fbx"; + public const string StompFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Mutant Jumping.fbx"; + + public const string BreathWindupPreferred = "Spell Casting.fbx"; + public const string BreathWindupFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Zombie Attack.fbx"; + + public const string HurlPreferred = "Frisbee Throw.fbx"; + public const string HurlFallback = + "Assets/ThirdParty/DownloadedAssets/samurai-character/source/Untitled@Frisbee Throw (1).fbx"; + + public const string ClapPreferred = "Spell Casting Sky.fbx"; + public const string ClapFallback = + "Assets/ThirdParty/DownloadedAssets/animated-skeleton-casts-spell-with-hands/Standing 2H Magic Attack 04@Mutant Jumping.fbx"; + + public const string SpeedParam = "Speed"; + public const string DeadBool = "Dead"; + public const string HurtTrigger = "Hurt"; + public const string DieTrigger = "Die"; + public const string RoarTrigger = "Roar"; + public const string IdleState = "Idle"; + public const string LocomotionState = "Locomotion"; + public const string DieState = "Die"; + + public enum AttackId : byte + { + None = 0, + AshSwipeL = 1, + AshSwipeR = 2, + MagmaStomp = 3, + CinderBolt = 4, + InfernoBreath = 5, + TwinBolts = 6, + EruptionStep = 7, + MeteorRain = 8, + WorldbreakerSlam = 9, + BreathSwipeString = 10, + } + + public readonly struct AttackDef + { + public readonly AttackId Id; + public readonly string StateName; + public readonly string TriggerName; + public readonly string PreferredFileName; + public readonly string FallbackAssetPath; + public readonly float StrikeNormalized; + public readonly float RecoveryNormalized; + public readonly float ApproximateLength; + public readonly float Cooldown; + public readonly byte MinPhase; + public readonly string Notes; + + public AttackDef( + AttackId id, + string stateName, + string triggerName, + string preferredFileName, + string fallbackAssetPath, + float strikeNormalized, + float recoveryNormalized, + float approximateLength, + float cooldown, + byte minPhase, + string notes) + { + Id = id; + StateName = stateName; + TriggerName = triggerName; + PreferredFileName = preferredFileName; + FallbackAssetPath = fallbackAssetPath; + StrikeNormalized = strikeNormalized; + RecoveryNormalized = recoveryNormalized; + ApproximateLength = approximateLength; + Cooldown = cooldown; + MinPhase = minPhase; + Notes = notes; + } + + public float HitDelaySeconds => ApproximateLength * Mathf.Clamp01(StrikeNormalized); + public float LockSeconds => ApproximateLength * Mathf.Clamp01(RecoveryNormalized); + } + + public static readonly AttackDef[] Attacks = + { + new AttackDef( + AttackId.AshSwipeL, "AshSwipeL", "AshSwipeL", + SwipeLPreferred, SwipeLFallback, + strikeNormalized: 0.38f, recoveryNormalized: 0.90f, + approximateLength: 1.15f, cooldown: 1.35f, minPhase: 1, + notes: "Left fist melee cone + light burn."), + new AttackDef( + AttackId.AshSwipeR, "AshSwipeR", "AshSwipeR", + SwipeRPreferred, SwipeRFallback, + strikeNormalized: 0.42f, recoveryNormalized: 0.90f, + approximateLength: 1.20f, cooldown: 1.35f, minPhase: 1, + notes: "Right fist melee cone + light burn."), + new AttackDef( + AttackId.MagmaStomp, "MagmaStomp", "MagmaStomp", + StompPreferred, StompFallback, + strikeNormalized: 0.55f, recoveryNormalized: 0.92f, + approximateLength: 1.55f, cooldown: 3.2f, minPhase: 1, + notes: "Foot plant circle AoE + fire splash."), + new AttackDef( + AttackId.CinderBolt, "CinderBolt", "CinderBolt", + HurlPreferred, HurlFallback, + strikeNormalized: 0.42f, recoveryNormalized: 0.92f, + approximateLength: 1.35f, cooldown: 2.4f, minPhase: 1, + notes: "Single firebolt release."), + new AttackDef( + AttackId.InfernoBreath, "InfernoBreath", "InfernoBreath", + BreathWindupPreferred, BreathWindupFallback, + strikeNormalized: 0.28f, recoveryNormalized: 1.0f, + approximateLength: 2.4f, cooldown: 6.5f, minPhase: 2, + notes: "Windup then sustained cone channel."), + new AttackDef( + AttackId.TwinBolts, "TwinBolts", "TwinBolts", + HurlPreferred, HurlFallback, + strikeNormalized: 0.42f, recoveryNormalized: 0.92f, + approximateLength: 1.40f, cooldown: 3.1f, minPhase: 2, + notes: "Two firebolts with slight spread."), + new AttackDef( + AttackId.EruptionStep, "EruptionStep", "EruptionStep", + StompPreferred, StompFallback, + strikeNormalized: 0.48f, recoveryNormalized: 0.94f, + approximateLength: 1.65f, cooldown: 5.5f, minPhase: 2, + notes: "Dash-stomp then delayed magma puddle."), + new AttackDef( + AttackId.MeteorRain, "MeteorRain", "MeteorRain", + ClapPreferred, ClapFallback, + strikeNormalized: 0.52f, recoveryNormalized: 0.96f, + approximateLength: 2.1f, cooldown: 11f, minPhase: 3, + notes: "Sky clap — rain director spawns delayed meteors."), + new AttackDef( + AttackId.WorldbreakerSlam, "WorldbreakerSlam", "WorldbreakerSlam", + OverheadPreferred, OverheadFallback, + strikeNormalized: 0.58f, recoveryNormalized: 0.98f, + approximateLength: 2.35f, cooldown: 8.5f, minPhase: 3, + notes: "Huge overhead smash; long punish window."), + new AttackDef( + AttackId.BreathSwipeString, "BreathSwipeString", "BreathSwipeString", + BreathWindupPreferred, BreathWindupFallback, + strikeNormalized: 0.30f, recoveryNormalized: 1.0f, + approximateLength: 2.8f, cooldown: 7.5f, minPhase: 3, + notes: "Short breath then immediate swipe."), + }; + + public static bool TryGet(AttackId id, out AttackDef def) + { + for (int i = 0; i < Attacks.Length; i++) + { + if (Attacks[i].Id == id) + { + def = Attacks[i]; + return true; + } + } + + def = default; + return false; + } + + public static AttackDef GetOrDefault(AttackId id) + { + return TryGet(id, out AttackDef def) ? def : Attacks[0]; + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladAnimCatalog.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladAnimCatalog.cs.meta new file mode 100644 index 000000000..3c640a3dd --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladAnimCatalog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a36243af7fba4a1aa5c900fe73629b83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladBodyFireVfx.cs b/Assets/Scripts/Creatures/Druclad/DrucladBodyFireVfx.cs new file mode 100644 index 000000000..d11722c2d --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladBodyFireVfx.cs @@ -0,0 +1,96 @@ +using UnityEngine; + +/// +/// Boss-scale body fire driver (Hellhound-style). Prefers Hovl hellhound aura loop, +/// otherwise keeps embedded Vefects layers and scales/tints with health + flares. +/// +[DisallowMultipleComponent] +public sealed class DrucladBodyFireVfx : MonoBehaviour +{ + [SerializeField] private Light glowLight; + [SerializeField] private float minScale = 0.55f; + [SerializeField] private float maxScale = 1.35f; + [SerializeField] private float minLightIntensity = 1.4f; + [SerializeField] private float maxLightIntensity = 6.5f; + [SerializeField] private float enrageFlareFireMultiplier = 1.85f; + [SerializeField] private float enrageFlareLightMultiplier = 1.7f; + [SerializeField] private float enrageFlareRangeBoost = 3.2f; + [SerializeField] private Color healthyTint = new Color(1.4f, 0.68f, 0.16f, 1f); + [SerializeField] private Color woundedTint = new Color(1.05f, 0.3f, 0.05f, 1f); + [SerializeField] private Color dyingTint = new Color(0.48f, 0.12f, 0.04f, 1f); + + private GameObject hovlBodyFire; + private bool usingHovlBodyFire; + + public void ApplyPresentation(float healthRatio, float flareStrength, bool enrageFlare = false) + { + healthRatio = Mathf.Clamp01(healthRatio); + flareStrength = Mathf.Clamp01(flareStrength); + + float flareMul = 1f + flareStrength * 0.95f; + if (enrageFlare) + flareMul = Mathf.Max(flareMul, enrageFlareFireMultiplier); + + float scale = Mathf.Lerp(minScale, maxScale, healthRatio) * flareMul; + transform.localScale = Vector3.one * scale; + + if (glowLight == null) + return; + + Color tint = healthRatio > 0.55f + ? Color.Lerp(woundedTint, healthyTint, (healthRatio - 0.55f) / 0.45f) + : Color.Lerp(dyingTint, woundedTint, healthRatio / 0.55f); + + glowLight.color = tint; + float intensity = Mathf.Lerp(minLightIntensity, maxLightIntensity, healthRatio) * flareMul; + float range = 5.5f + healthRatio * 4.5f; + if (enrageFlare) + { + intensity *= enrageFlareLightMultiplier; + range += enrageFlareRangeBoost; + } + + glowLight.intensity = intensity; + glowLight.range = range; + } + + private void Awake() + { + if (glowLight == null) + glowLight = GetComponentInChildren(true); + TryAttachHovlBodyFire(); + } + + private void TryAttachHovlBodyFire() + { + if (usingHovlBodyFire) + return; + + // Reuse hellhound aura pack — same fire look the player already knows. + hovlBodyFire = CreatureHovlBridge.TryAttachLoop( + CreatureHovlId.Hellhound, + CreatureHovlPhase.Aura, + transform, + 0.95f); + if (hovlBodyFire == null) + return; + + usingHovlBodyFire = true; + DisableLegacyFireParticles(); + } + + private void DisableLegacyFireParticles() + { + ParticleSystem[] systems = GetComponentsInChildren(true); + for (int i = 0; i < systems.Length; i++) + { + ParticleSystem ps = systems[i]; + if (ps == null || (hovlBodyFire != null && ps.transform.IsChildOf(hovlBodyFire.transform))) + continue; + + ParticleSystemRenderer renderer = ps.GetComponent(); + if (renderer != null) + renderer.enabled = false; + } + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladBodyFireVfx.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladBodyFireVfx.cs.meta new file mode 100644 index 000000000..4b00d8fb0 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladBodyFireVfx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d9075eb420946188bc3dec73f43e7b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladBrain.cs b/Assets/Scripts/Creatures/Druclad/DrucladBrain.cs new file mode 100644 index 000000000..b478e027d --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladBrain.cs @@ -0,0 +1,263 @@ +using UnityEngine; + +/// +/// Phased combat brain for Druclad: close-in / reposition / hold / attack / channel / rain. +/// Weights by phase, distance band, and breath-cone occupancy. +/// +public sealed class DrucladBrain +{ + public enum Intent : byte + { + Hold = 0, + CloseIn = 1, + Reposition = 2, + Attack = 3, + ChannelBreath = 4, + CallRain = 5, + Flee = 6, + Awaken = 7, + Dead = 8, + } + + public struct TickInput + { + public Vector3 selfPosition; + public Vector3 selfForward; + public float now; + public float deltaTime; + public Vector3? targetPosition; + public float targetDistance; + public bool hasTarget; + public bool isDead; + public bool isMoveLocked; + public bool canAttack; + public bool playerOnVoid; + public bool awakening; + public byte phase; + public bool playerInBreathCone; + public bool playerBehind; + public float softEnrage01; + public System.Func isAttackReady; + } + + public struct TickOutput + { + public Intent intent; + public Vector3 desiredFacing; + public Vector3 desiredMove; + public float desiredSpeed; + public DrucladAnimCatalog.AttackId attackId; + public bool triggerAttack; + } + + private readonly float meleeRange; + private readonly float midRange; + private readonly float farRange; + private readonly float flankBias; + private int strafeSign = 1; + private float nextStrafeFlip; + private DrucladAnimCatalog.AttackId lastAttack = DrucladAnimCatalog.AttackId.None; + private float lastRainAt = -999f; + + public DrucladBrain(float meleeRange, float midRange, float farRange, float flankBias) + { + this.meleeRange = Mathf.Max(1.5f, meleeRange); + this.midRange = Mathf.Max(this.meleeRange + 0.5f, midRange); + this.farRange = Mathf.Max(this.midRange + 1f, farRange); + this.flankBias = Mathf.Clamp01(flankBias); + } + + public void Initialize(float now) + { + strafeSign = Random.value > 0.5f ? 1 : -1; + nextStrafeFlip = now + Random.Range(1.2f, 2.4f); + lastAttack = DrucladAnimCatalog.AttackId.None; + lastRainAt = -999f; + } + + public void NotifyAttackCommitted(DrucladAnimCatalog.AttackId id, float now) + { + lastAttack = id; + if (id == DrucladAnimCatalog.AttackId.MeteorRain) + lastRainAt = now; + } + + public TickOutput Tick(in TickInput input) + { + TickOutput output = default; + output.desiredFacing = input.selfForward.sqrMagnitude > 0.001f + ? Flatten(input.selfForward).normalized + : Vector3.forward; + output.desiredMove = Vector3.zero; + output.desiredSpeed = 0f; + output.attackId = DrucladAnimCatalog.AttackId.None; + + if (input.isDead) + { + output.intent = Intent.Dead; + return output; + } + + if (input.awakening) + { + output.intent = Intent.Awaken; + return output; + } + + if (!input.playerOnVoid) + { + output.intent = Intent.Flee; + return output; + } + + if (!input.hasTarget || !input.targetPosition.HasValue) + { + output.intent = Intent.Hold; + return output; + } + + Vector3 toTarget = Flatten(input.targetPosition.Value - input.selfPosition); + if (toTarget.sqrMagnitude < 0.001f) + toTarget = output.desiredFacing; + Vector3 direct = toTarget.normalized; + Vector3 right = Vector3.Cross(Vector3.up, direct).normalized; + output.desiredFacing = direct; + + if (input.isMoveLocked) + { + output.intent = Intent.Hold; + return output; + } + + if (input.now >= nextStrafeFlip) + { + strafeSign *= -1; + nextStrafeFlip = input.now + Random.Range(1.1f, 2.6f); + } + + float dist = input.targetDistance; + bool melee = dist <= meleeRange; + bool mid = dist > meleeRange && dist <= midRange; + bool far = dist > midRange; + + if (input.canAttack) + { + DrucladAnimCatalog.AttackId pick = ChooseAttack(in input, melee, mid, far); + if (pick != DrucladAnimCatalog.AttackId.None) + { + output.triggerAttack = true; + output.attackId = pick; + if (pick == DrucladAnimCatalog.AttackId.InfernoBreath + || pick == DrucladAnimCatalog.AttackId.BreathSwipeString) + { + output.intent = Intent.ChannelBreath; + } + else if (pick == DrucladAnimCatalog.AttackId.MeteorRain) + { + output.intent = Intent.CallRain; + } + else + { + output.intent = Intent.Attack; + } + + return output; + } + } + + if (melee) + { + // Slight back-step / circle so breath and stomp stay readable. + output.intent = Intent.Reposition; + Vector3 circle = (-direct * 0.35f + right * (strafeSign * flankBias)).normalized; + output.desiredMove = circle; + output.desiredSpeed = 0.55f; + return output; + } + + if (mid) + { + output.intent = Intent.Reposition; + Vector3 circle = (direct * (1f - flankBias * 0.55f) + right * (strafeSign * flankBias)).normalized; + output.desiredMove = circle; + output.desiredSpeed = 0.85f; + return output; + } + + output.intent = Intent.CloseIn; + output.desiredMove = direct; + output.desiredSpeed = Mathf.Lerp(0.75f, 1f, Mathf.InverseLerp(midRange, farRange, dist)); + return output; + } + + private DrucladAnimCatalog.AttackId ChooseAttack(in TickInput input, bool melee, bool mid, bool far) + { + byte phase = (byte)Mathf.Clamp(input.phase, 1, 3); + float enrage = Mathf.Clamp01(input.softEnrage01); + bool Ready(DrucladAnimCatalog.AttackId id) + { + if (input.isAttackReady != null && !input.isAttackReady(id)) + return false; + if (!DrucladAnimCatalog.TryGet(id, out DrucladAnimCatalog.AttackDef def)) + return false; + return def.MinPhase <= phase; + } + + // Never back-to-back rain. + float rainGap = Mathf.Lerp(11f, 7.5f, enrage); + bool rainOk = input.now - lastRainAt >= rainGap; + + if (phase >= 3 && rainOk && (far || mid) && Ready(DrucladAnimCatalog.AttackId.MeteorRain) + && lastAttack != DrucladAnimCatalog.AttackId.MeteorRain + && Random.value < 0.38f + enrage * 0.2f) + return DrucladAnimCatalog.AttackId.MeteorRain; + + if (phase >= 3 && melee && Ready(DrucladAnimCatalog.AttackId.WorldbreakerSlam) + && Random.value < 0.28f) + return DrucladAnimCatalog.AttackId.WorldbreakerSlam; + + if (phase >= 3 && mid && Ready(DrucladAnimCatalog.AttackId.BreathSwipeString) + && Random.value < 0.32f) + return DrucladAnimCatalog.AttackId.BreathSwipeString; + + if (phase >= 2 && (mid || input.playerInBreathCone) && Ready(DrucladAnimCatalog.AttackId.InfernoBreath) + && Random.value < (input.playerInBreathCone ? 0.55f : 0.28f)) + return DrucladAnimCatalog.AttackId.InfernoBreath; + + if (phase >= 2 && mid && Ready(DrucladAnimCatalog.AttackId.EruptionStep) + && Random.value < 0.30f) + return DrucladAnimCatalog.AttackId.EruptionStep; + + if (phase >= 2 && (mid || far) && Ready(DrucladAnimCatalog.AttackId.TwinBolts) + && Random.value < 0.34f + enrage * 0.15f) + return DrucladAnimCatalog.AttackId.TwinBolts; + + if (melee && Ready(DrucladAnimCatalog.AttackId.MagmaStomp) && Random.value < 0.36f) + return DrucladAnimCatalog.AttackId.MagmaStomp; + + if ((mid || far) && Ready(DrucladAnimCatalog.AttackId.CinderBolt) && Random.value < 0.42f) + return DrucladAnimCatalog.AttackId.CinderBolt; + + if (melee || mid) + { + bool left = Random.value > 0.5f; + DrucladAnimCatalog.AttackId swipe = left + ? DrucladAnimCatalog.AttackId.AshSwipeL + : DrucladAnimCatalog.AttackId.AshSwipeR; + if (Ready(swipe)) + return swipe; + swipe = left + ? DrucladAnimCatalog.AttackId.AshSwipeR + : DrucladAnimCatalog.AttackId.AshSwipeL; + if (Ready(swipe)) + return swipe; + } + + if (Ready(DrucladAnimCatalog.AttackId.CinderBolt)) + return DrucladAnimCatalog.AttackId.CinderBolt; + + return DrucladAnimCatalog.AttackId.None; + } + + private static Vector3 Flatten(Vector3 v) => new Vector3(v.x, 0f, v.z); +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladBrain.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladBrain.cs.meta new file mode 100644 index 000000000..9d30ab058 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladBrain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9dc1e8eb5644a0c99ce61a287b34cf7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladController.cs b/Assets/Scripts/Creatures/Druclad/DrucladController.cs new file mode 100644 index 000000000..aa9378798 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladController.cs @@ -0,0 +1,1082 @@ +using System.Collections; +using System.Collections.Generic; +using InventoryFramework; +using Manafall.Creatures; +using Mirror; +using UnityEngine; + +/// +/// Server-authoritative void-island fire boss. Mixamo Humanoid motor + phased attack kit +/// with animation-synced hit frames (TrollController patterns + KillChallenger-style timings). +/// +[DisallowMultipleComponent] +[RequireComponent(typeof(CharacterController))] +[RequireComponent(typeof(NetworkIdentity))] +[RequireComponent(typeof(Health))] +[RequireComponent(typeof(DrucladFirePresentation))] +[DefaultExecutionOrder(-100)] +public sealed class DrucladController : NetworkBehaviour +{ + private const string PlayerTag = "Player"; + + public enum EncounterPhase : byte + { + Dormant = 0, + Awaken = 1, + Phase1 = 2, + Phase2 = 3, + Phase3 = 4, + Fleeing = 5, + Dead = 6, + } + + [Header("References")] + [SerializeField] private CharacterController characterController; + [SerializeField] private Health health; + [SerializeField] private Animator animator; + [SerializeField] private RuntimeAnimatorController defaultRuntimeAnimatorController; + [SerializeField] private Transform breathMuzzle; + [SerializeField] private Transform castHand; + [SerializeField] private DrucladFireBreathVolume breathVolume; + [SerializeField] private DrucladFirePresentation firePresentation; + [SerializeField] private AudioSource bodyAudio; + [SerializeField] private GameObject lootBagPrefab; + [SerializeField] private DrucladLootTable deathLootTable; + + [Header("Motor")] + [SerializeField] private float gravity = -24f; + [SerializeField] private float walkSpeed = 3.6f; + [SerializeField] private float chaseSpeed = 5.8f; + [SerializeField] private float phase2SpeedMul = 1.12f; + [SerializeField] private float phase3SpeedMul = 1.22f; + [SerializeField] private float turnSpeed = 6.2f; + [SerializeField] private float attackTurnSpeed = 12f; + + [Header("Combat ranges")] + [SerializeField] private float meleeRange = 5.4f; + [SerializeField] private float midRange = 12f; + [SerializeField] private float farRange = 28f; + [SerializeField] private float acquireRange = 64f; + [SerializeField] private float loseTargetRange = 78f; + [SerializeField] private float attackAngleDegrees = 78f; + [SerializeField] private LayerMask meleeHitMask = ~0; + + [Header("Damage")] + [SerializeField] private float swipeDamage = 38f; + [SerializeField] private float stompDamage = 52f; + [SerializeField] private float stompRadius = 6.2f; + [SerializeField] private float boltDamage = 28f; + [SerializeField] private float twinBoltDamage = 22f; + [SerializeField] private float breathDamageMul = 1f; + [SerializeField] private float worldbreakerDamage = 78f; + [SerializeField] private float worldbreakerRadius = 11f; + [SerializeField] private float meteorDamage = 46f; + [SerializeField] private float softEnrageAfterSeconds = 150f; + + [Header("Encounter")] + [SerializeField] private float awakenImmuneSeconds = 1.65f; + [SerializeField] private float fleeGraceSeconds = 4.5f; + [SerializeField] private float voidOccupancyThreshold = 0.18f; + [SerializeField] private float maxHealthBoss = 4200f; + + [Header("Animation")] + [SerializeField] private string speedParam = DrucladAnimCatalog.SpeedParam; + [SerializeField] private string deadBool = DrucladAnimCatalog.DeadBool; + + [SyncVar(hook = nameof(OnDeadChanged))] + private bool isDead; + + [SyncVar] + private float syncedLocomotionSpeed; + + [SyncVar] + private byte syncedPhase; + + [SyncVar(hook = nameof(OnHealthRatioChanged))] + private float syncedHealthRatio = 1f; + + public bool IsDead => isDead; + public EncounterPhase CurrentPhase => (EncounterPhase)syncedPhase; + public byte CombatPhaseByte + { + get + { + return CurrentPhase switch + { + EncounterPhase.Phase1 => 1, + EncounterPhase.Phase2 => 2, + EncounterPhase.Phase3 => 3, + EncounterPhase.Awaken => 1, + _ => 0, + }; + } + } + + private Transform chaseTarget; + private float verticalVelocity; + private float moveLockUntil; + private float immuneUntil; + private float nextRetargetTime; + private float encounterStartedAt = -1f; + private float leftVoidSince = -1f; + private int activeAttackToken; + private Coroutine attackRoutine; + private Coroutine deathRoutine; + private DrucladBrain brain; + private WorldGenerator cachedWorld; + private NetworkAnimator networkAnimator; + private readonly Dictionary attackReadyAt = + new Dictionary(16); + private readonly Collider[] meleeBuffer = new Collider[20]; + private readonly int[] triggerHashes = new int[32]; + private readonly bool[] triggerPresent = new bool[32]; + private int speedHash; + private int deadHash; + private int hurtHash; + private int dieHash; + private int roarHash; + private bool hasSpeed; + private bool hasDead; + private bool hasHurt; + private bool hasDie; + private bool hasRoar; + private bool offlineAiArmed; + private bool awakenPlayed; + private bool phase2Roared; + private bool phase3Roared; + private static bool NetworkSessionActive => NetworkServer.active || NetworkClient.active; + private bool HasAiAuthority => isServer || offlineAiArmed || !NetworkSessionActive; + + private void Awake() + { + characterController ??= GetComponent(); + health ??= GetComponent(); + animator ??= GetComponentInChildren(true); + networkAnimator = GetComponent(); + bodyAudio ??= GetComponent() ?? GetComponentInChildren(true); + if (breathVolume == null) + breathVolume = GetComponent() + ?? gameObject.AddComponent(); + if (firePresentation == null) + firePresentation = GetComponent() + ?? gameObject.AddComponent(); + BootstrapAnimator(); + EnsureCharacterController(); + BindFirePresentation(); + } + + private void OnEnable() + { + BindHealth(); + BootstrapAnimator(); + BindFirePresentation(); + PushHealthRatioToClients(force: true); + } + + private void OnDisable() + { + UnbindHealth(); + breathVolume?.StopChannel(); + } + + public override void OnStartServer() + { + base.OnStartServer(); + offlineAiArmed = false; + ServerBoot(); + } + + public override void OnStartClient() + { + base.OnStartClient(); + BootstrapAnimator(); + BindFirePresentation(); + firePresentation?.SetHealthRatio(syncedHealthRatio); + if (!NetworkServer.active && !NetworkClient.active) + offlineAiArmed = true; + } + + private void Start() + { + if (!NetworkSessionActive) + { + offlineAiArmed = true; + ServerBoot(); + } + } + + private void ServerBoot() + { + if (health != null) + { + health.DestroyOnDeath = false; + if (health.MaxHealth < maxHealthBoss * 0.5f) + health.ConfigureMaxHealth(maxHealthBoss, healToFull: true); + } + + brain ??= new DrucladBrain(meleeRange, midRange, farRange, flankBias: 0.62f); + brain.Initialize(Time.time); + breathVolume?.Bind(this, ResolveBreathMuzzleTransform()); + BindFirePresentation(); + PushHealthRatioToClients(force: true); + syncedPhase = (byte)EncounterPhase.Awaken; + immuneUntil = Time.time + awakenImmuneSeconds; + encounterStartedAt = Time.time; + awakenPlayed = false; + phase2Roared = false; + phase3Roared = false; + attackReadyAt.Clear(); + } + + private void BindFirePresentation() + { + if (firePresentation == null) + return; + + Transform anchor = transform; + if (animator != null) + { + Transform hips = animator.GetBoneTransform(HumanBodyBones.Hips) + ?? animator.GetBoneTransform(HumanBodyBones.Spine); + if (hips != null) + anchor = hips; + } + + firePresentation.Bind(anchor, bodyAudio); + firePresentation.SetHealthRatio(syncedHealthRatio); + } + + private void Update() + { + if (!HasAiAuthority || isDead) + return; + + float dt = Time.deltaTime; + ApplyGravity(dt); + TickEncounter(dt); + if (Time.frameCount % 15 == 0) + PushHealthRatioToClients(); + if (isDead || CurrentPhase == EncounterPhase.Fleeing || CurrentPhase == EncounterPhase.Dormant) + return; + + TickCombat(dt); + } + + private void TickEncounter(float dt) + { + bool onVoid = IsPlayerOnVoid(out Transform nearest); + if (nearest != null && (chaseTarget == null || !IsLivingPlayerTarget(chaseTarget))) + chaseTarget = nearest; + + if (CurrentPhase == EncounterPhase.Awaken) + { + if (!awakenPlayed) + { + awakenPlayed = true; + SetAnimTrigger(DrucladAnimCatalog.RoarTrigger, roarHash, hasRoar); + firePresentation?.TriggerRoarFlare(); + DrucladFireFx.PlayAwakenCrack(GetGroundPoint()); + moveLockUntil = Mathf.Max(moveLockUntil, immuneUntil); + } + + if (Time.time >= immuneUntil) + syncedPhase = (byte)EncounterPhase.Phase1; + return; + } + + if (!onVoid) + { + if (leftVoidSince < 0f) + leftVoidSince = Time.time; + if (Time.time - leftVoidSince >= fleeGraceSeconds) + { + BeginFleeDespawn(); + return; + } + } + else + { + leftVoidSince = -1f; + } + + RefreshPhaseFromHealth(); + } + + private void RefreshPhaseFromHealth() + { + if (health == null || CurrentPhase < EncounterPhase.Phase1 || CurrentPhase > EncounterPhase.Phase3) + return; + + float ratio = health.MaxHealth > 0.01f ? health.CurrentHealth / health.MaxHealth : 1f; + if (ratio <= 0.33f && CurrentPhase != EncounterPhase.Phase3) + { + syncedPhase = (byte)EncounterPhase.Phase3; + if (!phase3Roared) + { + phase3Roared = true; + SetAnimTrigger(DrucladAnimCatalog.RoarTrigger, roarHash, hasRoar); + firePresentation?.TriggerPhaseEnrageFlare(); + moveLockUntil = Time.time + 1.1f; + } + } + else if (ratio <= 0.66f && CurrentPhase == EncounterPhase.Phase1) + { + syncedPhase = (byte)EncounterPhase.Phase2; + if (!phase2Roared) + { + phase2Roared = true; + SetAnimTrigger(DrucladAnimCatalog.RoarTrigger, roarHash, hasRoar); + firePresentation?.TriggerPhaseEnrageFlare(); + moveLockUntil = Time.time + 0.95f; + } + } + } + + private void TickCombat(float dt) + { + if (Time.time >= nextRetargetTime) + { + nextRetargetTime = Time.time + 0.35f; + TryAcquireTarget(); + } + + bool hasTarget = IsLivingPlayerTarget(chaseTarget); + float dist = hasTarget ? PlanarDistance(transform.position, chaseTarget.position) : 999f; + if (hasTarget && dist > loseTargetRange) + { + chaseTarget = null; + hasTarget = false; + } + + float softEnrage = 0f; + if (encounterStartedAt > 0f && softEnrageAfterSeconds > 1f) + softEnrage = Mathf.Clamp01((Time.time - encounterStartedAt) / softEnrageAfterSeconds); + + DrucladBrain.TickInput input = new DrucladBrain.TickInput + { + selfPosition = transform.position, + selfForward = transform.forward, + now = Time.time, + deltaTime = dt, + targetPosition = hasTarget ? chaseTarget.position : (Vector3?)null, + targetDistance = dist, + hasTarget = hasTarget, + isDead = isDead, + isMoveLocked = Time.time < moveLockUntil, + canAttack = Time.time >= moveLockUntil && CurrentPhase >= EncounterPhase.Phase1, + playerOnVoid = IsPointOnVoid(transform.position), + awakening = CurrentPhase == EncounterPhase.Awaken, + phase = CombatPhaseByte, + playerInBreathCone = hasTarget && breathVolume != null + && breathVolume.IsPointInCone(chaseTarget.position + Vector3.up), + playerBehind = hasTarget && Vector3.Dot(Flatten(chaseTarget.position - transform.position), Flatten(transform.forward)) < -0.15f, + softEnrage01 = softEnrage, + isAttackReady = IsAttackReady, + }; + + DrucladBrain.TickOutput output = brain.Tick(in input); + + Vector3 desiredFacing = Flatten(output.desiredFacing); + if (desiredFacing.sqrMagnitude > 0.0001f) + { + float turnRate = Time.time < moveLockUntil ? attackTurnSpeed : turnSpeed; + transform.rotation = Quaternion.Slerp( + transform.rotation, + Quaternion.LookRotation(desiredFacing.normalized, Vector3.up), + turnRate * dt); + } + + if (output.triggerAttack && hasTarget && output.attackId != DrucladAnimCatalog.AttackId.None) + { + BeginAttack(output.attackId); + syncedLocomotionSpeed = 0f; + return; + } + + if (Time.time < moveLockUntil || output.intent == DrucladBrain.Intent.Hold) + { + syncedLocomotionSpeed = 0f; + ApplyAnimatorLocomotion(0f); + return; + } + + Vector3 desiredMove = Flatten(output.desiredMove); + float moveIntent = Mathf.Clamp01(output.desiredSpeed); + if (desiredMove.sqrMagnitude < 0.0001f || moveIntent <= 0.01f) + { + syncedLocomotionSpeed = 0f; + ApplyAnimatorLocomotion(0f); + return; + } + + float speedMul = CurrentPhase switch + { + EncounterPhase.Phase2 => phase2SpeedMul, + EncounterPhase.Phase3 => phase3SpeedMul, + _ => 1f, + }; + float baseSpeed = hasTarget && dist > meleeRange * 0.9f ? chaseSpeed : walkSpeed; + float speed = Mathf.Lerp(walkSpeed * 0.55f, baseSpeed, moveIntent) * speedMul; + syncedLocomotionSpeed = speed; + MovePlanar(desiredMove.normalized * speed, dt); + ApplyAnimatorLocomotion(speed); + } + + private bool IsAttackReady(DrucladAnimCatalog.AttackId id) + { + if (!DrucladAnimCatalog.TryGet(id, out _)) + return false; + if (!attackReadyAt.TryGetValue(id, out float ready)) + return true; + float soft = encounterStartedAt > 0f + ? Mathf.Clamp01((Time.time - encounterStartedAt) / Mathf.Max(1f, softEnrageAfterSeconds)) + : 0f; + // Soft enrage shrinks remaining wait on bolts. + if (id is DrucladAnimCatalog.AttackId.CinderBolt or DrucladAnimCatalog.AttackId.TwinBolts) + ready -= soft * 1.2f; + return Time.time >= ready; + } + + private void BeginAttack(DrucladAnimCatalog.AttackId id) + { + if (!DrucladAnimCatalog.TryGet(id, out DrucladAnimCatalog.AttackDef def)) + return; + + activeAttackToken++; + if (attackRoutine != null) + StopCoroutine(attackRoutine); + brain?.NotifyAttackCommitted(id, Time.time); + float cd = def.Cooldown; + if (encounterStartedAt > 0f) + { + float soft = Mathf.Clamp01((Time.time - encounterStartedAt) / Mathf.Max(1f, softEnrageAfterSeconds)); + if (id is DrucladAnimCatalog.AttackId.CinderBolt or DrucladAnimCatalog.AttackId.TwinBolts) + cd *= Mathf.Lerp(1f, 0.62f, soft); + if (id == DrucladAnimCatalog.AttackId.MeteorRain) + cd *= Mathf.Lerp(1f, 0.72f, soft); + } + + attackReadyAt[id] = Time.time + cd; + firePresentation?.TriggerAttackFlare(); + attackRoutine = StartCoroutine(ServerAttackRoutine(id, def, activeAttackToken)); + } + + private IEnumerator ServerAttackRoutine( + DrucladAnimCatalog.AttackId id, + DrucladAnimCatalog.AttackDef def, + int token) + { + moveLockUntil = Time.time + def.LockSeconds; + SetAnimTrigger(def.TriggerName, ResolveTriggerHash(def.TriggerName), true); + + float hitDelay = def.HitDelaySeconds; + if (hitDelay > 0.02f) + yield return new WaitForSeconds(hitDelay); + + if (token != activeAttackToken || isDead) + yield break; + + ServerApplyAttackHit(id); + + if (id == DrucladAnimCatalog.AttackId.InfernoBreath) + { + firePresentation?.TriggerAttackFlare(); + breathVolume?.BeginChannel(1.85f, breathDamageMul); + yield return new WaitForSeconds(1.85f); + breathVolume?.StopChannel(); + } + else if (id == DrucladAnimCatalog.AttackId.BreathSwipeString) + { + firePresentation?.TriggerAttackFlare(); + breathVolume?.BeginChannel(0.85f, breathDamageMul * 0.85f); + yield return new WaitForSeconds(0.85f); + breathVolume?.StopChannel(); + if (token == activeAttackToken && !isDead) + { + firePresentation?.TriggerAttackFlare(); + ServerApplyAttackHit(DrucladAnimCatalog.AttackId.AshSwipeR); + } + } + + attackRoutine = null; + } + + private void ServerApplyAttackHit(DrucladAnimCatalog.AttackId id) + { + Vector3 origin = transform.position + Vector3.up * (characterController != null ? characterController.height * 0.42f : 2.4f); + Vector3 fwd = Flatten(transform.forward); + if (fwd.sqrMagnitude < 0.001f) + fwd = Vector3.forward; + + switch (id) + { + case DrucladAnimCatalog.AttackId.AshSwipeL: + case DrucladAnimCatalog.AttackId.AshSwipeR: + ApplyMeleeCone(origin, fwd, meleeRange, swipeDamage, 8f, 2.5f, applyBurn: true); + RpcPlayTelegraph(0, origin + fwd * 1.2f); + break; + + case DrucladAnimCatalog.AttackId.MagmaStomp: + { + Vector3 ground = GetGroundPoint(); + ApplyShockwave(ground, stompRadius, stompDamage, 16f, 8f); + DrucladFireFx.PlayGroundSlam(ground, 1.55f); + RpcPlayTelegraph(1, ground); + break; + } + + case DrucladAnimCatalog.AttackId.CinderBolt: + SpawnBolt(spreadYaw: 0f, twinBoltDamage: false); + break; + + case DrucladAnimCatalog.AttackId.TwinBolts: + SpawnBolt(spreadYaw: -9f, twinBoltDamage: true); + SpawnBolt(spreadYaw: 9f, twinBoltDamage: true); + break; + + case DrucladAnimCatalog.AttackId.EruptionStep: + { + if (chaseTarget != null) + { + Vector3 to = Flatten(chaseTarget.position - transform.position); + if (to.sqrMagnitude > 0.01f) + MovePlanar(to.normalized * Mathf.Min(6.5f, to.magnitude * 0.55f), 0.2f); + } + + Vector3 stomp = GetGroundPoint(); + ApplyShockwave(stomp, stompRadius * 0.85f, stompDamage * 0.75f, 12f, 5f); + DrucladFireFx.PlayGroundSlam(stomp, 1.35f); + StartCoroutine(DelayedPuddle(stomp, 0.55f)); + break; + } + + case DrucladAnimCatalog.AttackId.MeteorRain: + { + Vector3 focus = chaseTarget != null ? chaseTarget.position : transform.position + transform.forward * 8f; + DrucladMeteorRainDirector.Play( + this, + focus, + GetGroundPoint(), + meteorCount: Random.Range(4, 7), + ringRadius: 7.5f, + safeRadiusNearBoss: 3.4f, + damage: meteorDamage, + firstDelay: 0.45f, + stagger: 0.28f); + RpcPlayTelegraph(2, focus); + break; + } + + case DrucladAnimCatalog.AttackId.WorldbreakerSlam: + { + Vector3 ground = GetGroundPoint(); + ApplyShockwave(ground, worldbreakerRadius, worldbreakerDamage, 28f, 18f); + DrucladFireFx.PlayGroundSlam(ground, 2.2f); + RpcPlayTelegraph(1, ground); + break; + } + } + } + + private IEnumerator DelayedPuddle(Vector3 point, float delay) + { + yield return new WaitForSeconds(delay); + if (isDead) + yield break; + DrucladMagmaPuddle.Spawn(point, radius: 2.4f, lifetime: 4.2f, damagePerTick: 11f); + } + + private void SpawnBolt(float spreadYaw, bool twinBoltDamage) + { + Vector3 origin = ResolveCastOrigin(); + Vector3 aim = chaseTarget != null + ? (chaseTarget.position + Vector3.up * 1.1f - origin) + : transform.forward; + if (aim.sqrMagnitude < 0.01f) + aim = transform.forward; + aim = Quaternion.Euler(0f, spreadYaw, 0f) * aim.normalized; + + float dmg = twinBoltDamage ? this.twinBoltDamage : boltDamage; + uint netId = netIdentity != null ? netIdentity.netId : 0u; + DrucladFireBoltProjectile.Spawn( + origin, + aim, + chaseTarget, + speed: 22f, + damage: dmg, + lifeSeconds: 3.2f, + homing: 0.55f, + knockPlanar: 7f, + knockVertical: 2.5f, + ownerNetId: netId, + authoritative: true); + + if (isServer) + RpcSpawnBoltVisual(origin, aim, twinBoltDamage); + } + + [ClientRpc] + private void RpcSpawnBoltVisual(Vector3 origin, Vector3 direction, bool twin) + { + if (isServer) + return; + DrucladFireBoltProjectile.Spawn( + origin, + direction, + null, + speed: 22f, + damage: 0f, + lifeSeconds: 3.2f, + homing: 0f, + knockPlanar: 0f, + knockVertical: 0f, + ownerNetId: 0u, + authoritative: false); + } + + [ClientRpc] + private void RpcPlayTelegraph(byte kind, Vector3 point) + { + switch (kind) + { + case 0: + DrucladFireFx.PlayCastBurst(point, transform.forward, 0.7f); + break; + case 1: + DrucladFireFx.PlayGroundSlam(point, 1.2f); + break; + case 2: + SpellFocusVefectsBridge.PlaySmolderingGroundRing(point, Vector3.up, 2.2f, 0.8f, 1f); + break; + } + } + + private void ApplyMeleeCone( + Vector3 origin, + Vector3 forward, + float range, + float damage, + float knockPlanar, + float knockVertical, + bool applyBurn) + { + int count = Physics.OverlapSphereNonAlloc( + origin + forward * (range * 0.45f), + range * 0.55f, + meleeBuffer, + meleeHitMask, + QueryTriggerInteraction.Collide); + + var hitPlayers = new HashSet(); + for (int i = 0; i < count; i++) + { + Collider col = meleeBuffer[i]; + if (col == null || PlayerInteractionSphere.ShouldIgnoreEnemyCombatHit(col)) + continue; + + PlayerHealth player = col.GetComponentInParent(); + if (player == null || player.currentHealth <= 0.5f) + continue; + + if (!hitPlayers.Add(player.GetInstanceID())) + continue; + + Vector3 toPlayer = Flatten(col.transform.position - origin); + if (toPlayer.sqrMagnitude < 0.01f) + toPlayer = forward; + toPlayer.Normalize(); + if (Vector3.Angle(forward, toPlayer) > attackAngleDegrees * 0.5f) + continue; + + Vector3 knock = toPlayer * knockPlanar + Vector3.up * knockVertical; + player.TakeDamage(damage, origin, knock); + if (applyBurn) + SpellEffectCatalog.ApplyToPlayer(player, SpellEffectId.Burning, 2.8f); + } + } + + private void ApplyShockwave(Vector3 center, float radius, float damage, float knockPlanar, float knockLift) + { + int count = Physics.OverlapSphereNonAlloc(center, radius, meleeBuffer, meleeHitMask, QueryTriggerInteraction.Collide); + var hitPlayers = new HashSet(); + for (int i = 0; i < count; i++) + { + Collider col = meleeBuffer[i]; + if (col == null || PlayerInteractionSphere.ShouldIgnoreEnemyCombatHit(col)) + continue; + + PlayerHealth player = col.GetComponentInParent(); + if (player == null || player.currentHealth <= 0.5f) + continue; + if (!hitPlayers.Add(player.GetInstanceID())) + continue; + + Vector3 away = Flatten(player.transform.position - center); + if (away.sqrMagnitude < 0.01f) + away = transform.forward; + away.Normalize(); + player.TakeDamage(damage, center, away * knockPlanar + Vector3.up * knockLift); + SpellEffectCatalog.ApplyToPlayer(player, SpellEffectId.Burning, 2.4f); + } + } + + private void TryAcquireTarget() + { + if (IsLivingPlayerTarget(chaseTarget)) + return; + + PlayerHealth[] players = FindObjectsByType(FindObjectsSortMode.None); + Transform best = null; + float bestDist = acquireRange; + for (int i = 0; i < players.Length; i++) + { + PlayerHealth p = players[i]; + if (p == null || p.currentHealth <= 0.5f) + continue; + if (!IsPointOnVoid(p.transform.position)) + continue; + float d = PlanarDistance(transform.position, p.transform.position); + if (d < bestDist) + { + bestDist = d; + best = p.transform; + } + } + + chaseTarget = best; + } + + private bool IsPlayerOnVoid(out Transform nearest) + { + nearest = null; + float best = float.MaxValue; + PlayerHealth[] players = FindObjectsByType(FindObjectsSortMode.None); + for (int i = 0; i < players.Length; i++) + { + PlayerHealth p = players[i]; + if (p == null || p.currentHealth <= 0.5f) + continue; + if (!IsPointOnVoid(p.transform.position)) + continue; + float d = PlanarDistance(transform.position, p.transform.position); + if (d < best) + { + best = d; + nearest = p.transform; + } + } + + return nearest != null || IsPointOnVoid(transform.position); + } + + private bool IsPointOnVoid(Vector3 world) + { + cachedWorld ??= FindFirstObjectByType(); + BiomeSettings settings = cachedWorld != null ? cachedWorld.BiomeSettings : null; + int seed = cachedWorld != null ? cachedWorld.TerrainSeed : 0; + float void01 = BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(world.x), + Mathf.RoundToInt(world.z), + seed, + settings); + return void01 >= voidOccupancyThreshold; + } + + private void BeginFleeDespawn() + { + if (CurrentPhase == EncounterPhase.Fleeing || isDead) + return; + + syncedPhase = (byte)EncounterPhase.Fleeing; + breathVolume?.StopChannel(); + DrucladWorldFlags.MarkAliveFled(); + if (isServer && netIdentity != null) + { + NetworkServer.Destroy(gameObject); + } + else + { + Destroy(gameObject); + } + } + + private void BindHealth() + { + if (health == null) + return; + health.onDeath.RemoveListener(HandleDeath); + health.onDeath.AddListener(HandleDeath); + health.DamagedFromWorld -= OnDamagedFromWorld; + health.DamagedFromWorld += OnDamagedFromWorld; + } + + private void UnbindHealth() + { + if (health == null) + return; + health.onDeath.RemoveListener(HandleDeath); + health.DamagedFromWorld -= OnDamagedFromWorld; + } + + private void OnDamagedFromWorld(float amount, Vector3? source, bool concealAttackerIdentity) + { + if (isDead) + return; + + // Short immune window during awaken roar. + if (Time.time < immuneUntil) + { + if (health != null && amount > 0f) + health.Heal(amount); + return; + } + + PushHealthRatioToClients(); + firePresentation?.TriggerHurtFlare(); + + // Phase 1 only: brief hit react. Later phases ignore stun. + if (CurrentPhase == EncounterPhase.Phase1 && amount > 8f && Time.time >= moveLockUntil) + { + SetAnimTrigger(DrucladAnimCatalog.HurtTrigger, hurtHash, hasHurt); + moveLockUntil = Time.time + 0.28f; + } + } + + private void HandleDeath() + { + if (isDead) + return; + isDead = true; + syncedPhase = (byte)EncounterPhase.Dead; + syncedHealthRatio = 0f; + breathVolume?.StopChannel(); + firePresentation?.BeginDeathSmolder(); + if (HasAiAuthority) + ServerBeginDeath(); + } + + private void ServerBeginDeath() + { + DrucladWorldFlags.MarkDead(); + SetAnimTrigger(DrucladAnimCatalog.DieTrigger, dieHash, hasDie); + if (hasDead) + animator.SetBool(deadHash, true); + if (deathRoutine != null) + StopCoroutine(deathRoutine); + deathRoutine = StartCoroutine(DeathRoutine()); + } + + private void PushHealthRatioToClients(bool force = false) + { + if (health == null || health.MaxHealth <= 0.01f) + return; + + float ratio = Mathf.Clamp01(health.CurrentHealth / health.MaxHealth); + if (!force && Mathf.Abs(ratio - syncedHealthRatio) < 0.02f) + return; + + syncedHealthRatio = ratio; + firePresentation?.SetHealthRatio(ratio); + } + + private void OnHealthRatioChanged(float _, float newV) + { + firePresentation?.SetHealthRatio(newV); + } + + private IEnumerator DeathRoutine() + { + if (deathLootTable != null) + deathLootTable.TrySpawnDrops(transform, lootBagPrefab); + + yield return new WaitForSeconds(4.2f); + if (isServer && netIdentity != null) + NetworkServer.Destroy(gameObject); + else + Destroy(gameObject); + } + + private void OnDeadChanged(bool _, bool nowDead) + { + if (!nowDead || animator == null) + return; + if (hasDead) + animator.SetBool(deadHash, true); + SetAnimTrigger(DrucladAnimCatalog.DieTrigger, dieHash, hasDie); + } + + private void BootstrapAnimator() + { + networkAnimator ??= GetComponent(); + animator ??= GetComponentInChildren(true); + if (animator == null) + return; + + if (animator.runtimeAnimatorController == null && defaultRuntimeAnimatorController != null) + animator.runtimeAnimatorController = defaultRuntimeAnimatorController; + + animator.cullingMode = AnimatorCullingMode.AlwaysAnimate; + animator.updateMode = AnimatorUpdateMode.Normal; + animator.keepAnimatorStateOnDisable = true; + if (networkAnimator != null && networkAnimator.animator == null) + networkAnimator.animator = animator; + + hasSpeed = ManafallAnimatorUtility.HasParameter(animator, speedParam, AnimatorControllerParameterType.Float); + hasDead = ManafallAnimatorUtility.HasParameter(animator, deadBool, AnimatorControllerParameterType.Bool); + hasHurt = ManafallAnimatorUtility.HasParameter(animator, DrucladAnimCatalog.HurtTrigger, AnimatorControllerParameterType.Trigger); + hasDie = ManafallAnimatorUtility.HasParameter(animator, DrucladAnimCatalog.DieTrigger, AnimatorControllerParameterType.Trigger); + hasRoar = ManafallAnimatorUtility.HasParameter(animator, DrucladAnimCatalog.RoarTrigger, AnimatorControllerParameterType.Trigger); + if (hasSpeed) speedHash = Animator.StringToHash(speedParam); + if (hasDead) deadHash = Animator.StringToHash(deadBool); + if (hasHurt) hurtHash = Animator.StringToHash(DrucladAnimCatalog.HurtTrigger); + if (hasDie) dieHash = Animator.StringToHash(DrucladAnimCatalog.DieTrigger); + if (hasRoar) roarHash = Animator.StringToHash(DrucladAnimCatalog.RoarTrigger); + + for (int i = 0; i < DrucladAnimCatalog.Attacks.Length; i++) + { + string trigger = DrucladAnimCatalog.Attacks[i].TriggerName; + triggerHashes[i] = Animator.StringToHash(trigger); + triggerPresent[i] = ManafallAnimatorUtility.HasParameter( + animator, trigger, AnimatorControllerParameterType.Trigger); + } + } + + private int ResolveTriggerHash(string triggerName) + { + for (int i = 0; i < DrucladAnimCatalog.Attacks.Length; i++) + { + if (DrucladAnimCatalog.Attacks[i].TriggerName == triggerName) + return triggerHashes[i]; + } + + return Animator.StringToHash(triggerName); + } + + private void SetAnimTrigger(string triggerName, int hash, bool present) + { + if (animator == null || string.IsNullOrEmpty(triggerName)) + return; + + bool ok = present; + if (!ok) + ok = ManafallAnimatorUtility.HasParameter(animator, triggerName, AnimatorControllerParameterType.Trigger); + if (!ok) + return; + + if (networkAnimator != null && NetworkServer.active) + networkAnimator.SetTrigger(triggerName); + else + animator.SetTrigger(hash != 0 ? hash : Animator.StringToHash(triggerName)); + } + + private void ApplyAnimatorLocomotion(float speed) + { + if (!hasSpeed || animator == null) + return; + animator.SetFloat(speedHash, speed); + } + + private void EnsureCharacterController() + { + if (characterController == null) + return; + characterController.height = Mathf.Max(characterController.height, 3.6f); + characterController.radius = Mathf.Max(characterController.radius, 0.95f); + characterController.center = new Vector3(0f, characterController.height * 0.5f, 0f); + characterController.slopeLimit = 50f; + characterController.stepOffset = 0.6f; + } + + private void ApplyGravity(float dt) + { + if (characterController == null || !characterController.enabled) + return; + + if (characterController.isGrounded && verticalVelocity < 0f) + verticalVelocity = -2f; + else + verticalVelocity += gravity * dt; + + characterController.Move(Vector3.up * (verticalVelocity * dt)); + } + + private void MovePlanar(Vector3 planar, float dt) + { + if (characterController == null || !characterController.enabled) + { + transform.position += planar * dt; + return; + } + + Vector3 motion = planar; + if (characterController.isGrounded && verticalVelocity < 0f) + verticalVelocity = -2f; + else + verticalVelocity += gravity * dt; + motion.y = verticalVelocity; + characterController.Move(motion * dt); + } + + private Transform ResolveBreathMuzzleTransform() + { + if (breathMuzzle != null) + return breathMuzzle; + if (animator != null) + { + Transform head = animator.GetBoneTransform(HumanBodyBones.Head); + if (head != null) + return head; + } + + return transform; + } + + private Vector3 ResolveCastOrigin() + { + if (castHand != null) + return castHand.position; + if (animator != null) + { + Transform hand = animator.GetBoneTransform(HumanBodyBones.RightHand) + ?? animator.GetBoneTransform(HumanBodyBones.LeftHand); + if (hand != null) + return hand.position; + } + + return transform.position + Vector3.up * 2.2f + transform.forward * 0.9f; + } + + private Vector3 GetGroundPoint() + { + Vector3 p = transform.position; + if (Physics.Raycast(p + Vector3.up * 1.5f, Vector3.down, out RaycastHit hit, 6f)) + return hit.point; + return p; + } + + private static bool IsLivingPlayerTarget(Transform t) + { + if (t == null) + return false; + PlayerHealth hp = t.GetComponent() ?? t.GetComponentInParent(); + return hp != null && hp.currentHealth > 0.5f; + } + + private static float PlanarDistance(Vector3 a, Vector3 b) + { + float dx = a.x - b.x; + float dz = a.z - b.z; + return Mathf.Sqrt(dx * dx + dz * dz); + } + + private static Vector3 Flatten(Vector3 v) => new Vector3(v.x, 0f, v.z); + +#if UNITY_EDITOR + private void OnValidate() + { + characterController ??= GetComponent(); + health ??= GetComponent(); + animator ??= GetComponentInChildren(true); + } +#endif +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladController.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladController.cs.meta new file mode 100644 index 000000000..ca4ae707a --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f47593d0f38241f39f6f7004194e43b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFireBoltProjectile.cs b/Assets/Scripts/Creatures/Druclad/DrucladFireBoltProjectile.cs new file mode 100644 index 000000000..581692af2 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFireBoltProjectile.cs @@ -0,0 +1,139 @@ +using InventoryFramework; +using UnityEngine; + +/// Lightweight homing-ish firebolt used by Druclad cinder / twin bolts. +[DisallowMultipleComponent] +public sealed class DrucladFireBoltProjectile : MonoBehaviour +{ + private Vector3 velocity; + private Transform homingTarget; + private float homingStrength; + private float damage; + private float lifeUntil; + private float knockPlanar; + private float knockVertical; + private bool authoritative; + private bool consumed; + private readonly Collider[] hits = new Collider[8]; + + public static DrucladFireBoltProjectile Spawn( + Vector3 origin, + Vector3 direction, + Transform target, + float speed, + float damage, + float lifeSeconds, + float homing, + float knockPlanar, + float knockVertical, + uint ownerNetId, + bool authoritative) + { + var go = new GameObject("DrucladFireBolt"); + go.transform.SetPositionAndRotation( + origin, + Quaternion.LookRotation(direction.sqrMagnitude > 0.01f ? direction.normalized : Vector3.forward)); + + var bolt = go.AddComponent(); + bolt.velocity = direction.normalized * Mathf.Max(4f, speed); + bolt.homingTarget = target; + bolt.homingStrength = Mathf.Clamp01(homing); + bolt.damage = Mathf.Max(1f, damage); + bolt.lifeUntil = Time.time + Mathf.Clamp(lifeSeconds, 0.4f, 6f); + bolt.knockPlanar = knockPlanar; + bolt.knockVertical = knockVertical; + bolt.authoritative = authoritative; + _ = ownerNetId; + + var sphere = go.AddComponent(); + sphere.isTrigger = true; + sphere.radius = 0.28f; + + var rb = go.AddComponent(); + rb.isKinematic = true; + rb.useGravity = false; + + DrucladFireFx.AttachBoltVisual(go.transform, 0.9f); + DrucladFireFx.PlayCastBurst(origin, direction, 0.75f); + Object.Destroy(go, Mathf.Clamp(lifeSeconds, 0.5f, 6.5f) + 0.25f); + return bolt; + } + + private void Update() + { + if (consumed) + return; + + if (Time.time >= lifeUntil) + { + Destroy(gameObject); + return; + } + + if (homingTarget != null && homingStrength > 0.01f) + { + Vector3 to = homingTarget.position + Vector3.up * 1.1f - transform.position; + if (to.sqrMagnitude > 0.01f) + { + Vector3 desired = to.normalized * velocity.magnitude; + velocity = Vector3.Lerp(velocity, desired, homingStrength * Time.deltaTime * 4.5f); + } + } + + Vector3 next = transform.position + velocity * Time.deltaTime; + if (velocity.sqrMagnitude > 0.01f) + transform.rotation = Quaternion.LookRotation(velocity.normalized, Vector3.up); + transform.position = next; + + if (!authoritative) + return; + + int count = Physics.OverlapSphereNonAlloc(transform.position, 0.4f, hits, ~0, QueryTriggerInteraction.Collide); + for (int i = 0; i < count; i++) + { + Collider col = hits[i]; + if (col == null || PlayerInteractionSphere.ShouldIgnoreEnemyCombatHit(col)) + continue; + + if (col.GetComponentInParent() != null) + continue; + + PlayerHealth player = col.GetComponentInParent(); + if (player != null && player.currentHealth > 0.5f) + { + ApplyHit(player); + return; + } + + Health creature = CreatureMeleeHurtbox.ResolveHealth(col); + if (creature != null && !creature.IsDead) + { + creature.TakeDamage(damage, transform.position); + Explode(); + return; + } + } + } + + private void ApplyHit(PlayerHealth player) + { + Vector3 away = player.transform.position - transform.position; + away.y = 0f; + if (away.sqrMagnitude < 0.01f) + away = transform.forward; + away.Normalize(); + Vector3 knock = away * knockPlanar + Vector3.up * knockVertical; + player.TakeDamage(damage, transform.position, knock); + SpellEffectCatalog.ApplyToPlayer(player, SpellEffectId.Burning, 2.2f); + Explode(); + } + + private void Explode() + { + if (consumed) + return; + consumed = true; + DrucladFireFx.PlayImpact(transform.position, -transform.forward, 0.95f); + Destroy(gameObject); + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFireBoltProjectile.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladFireBoltProjectile.cs.meta new file mode 100644 index 000000000..3b104f908 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFireBoltProjectile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69019902bbbb47f8a023acdb4ce5b2ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFireBreathVolume.cs b/Assets/Scripts/Creatures/Druclad/DrucladFireBreathVolume.cs new file mode 100644 index 000000000..6d10f1663 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFireBreathVolume.cs @@ -0,0 +1,146 @@ +using System.Collections.Generic; +using InventoryFramework; +using UnityEngine; + +/// Server-side sustained inferno breath cone with tick damage + brief scorch patches. +[DisallowMultipleComponent] +public sealed class DrucladFireBreathVolume : MonoBehaviour +{ + [SerializeField] private float coneLength = 14f; + [SerializeField] private float coneHalfAngleDegrees = 28f; + [SerializeField] private float tickInterval = 0.22f; + [SerializeField] private float damagePerTick = 9f; + [SerializeField] private float burnDuration = 2.4f; + [SerializeField] private float scorchPatchLifetime = 1.6f; + [SerializeField] private LayerMask hitMask = ~0; + + private readonly Collider[] overlap = new Collider[24]; + private readonly Dictionary nextTick = new Dictionary(8); + private Transform muzzle; + private bool channeling; + private float channelUntil; + private DrucladController owner; + + public bool IsChanneling => channeling && Time.time < channelUntil; + public float ConeLength => coneLength; + public float ConeHalfAngleDegrees => coneHalfAngleDegrees; + + public void Bind(DrucladController controller, Transform breathMuzzle) + { + owner = controller; + muzzle = breathMuzzle != null ? breathMuzzle : transform; + } + + public void BeginChannel(float durationSeconds, float damageMul = 1f) + { + channeling = true; + channelUntil = Time.time + Mathf.Max(0.35f, durationSeconds); + damagePerTick = Mathf.Max(4f, 9f * Mathf.Max(0.5f, damageMul)); + nextTick.Clear(); + DrucladFireFx.PlayCastBurst(ResolveOrigin(), ResolveForward(), 1.25f); + } + + public void StopChannel() + { + channeling = false; + channelUntil = 0f; + nextTick.Clear(); + } + + public bool IsPointInCone(Vector3 worldPoint) + { + Vector3 origin = ResolveOrigin(); + Vector3 fwd = ResolveForward(); + Vector3 to = worldPoint - origin; + float dist = to.magnitude; + if (dist < 0.2f) + return true; + if (dist > coneLength) + return false; + return Vector3.Angle(fwd, to) <= coneHalfAngleDegrees; + } + + private void LateUpdate() + { + if (!channeling) + return; + + if (Time.time >= channelUntil) + { + StopChannel(); + return; + } + + Vector3 origin = ResolveOrigin(); + Vector3 fwd = ResolveForward(); + transform.SetPositionAndRotation(origin, Quaternion.LookRotation(fwd, Vector3.up)); + + int count = Physics.OverlapSphereNonAlloc( + origin + fwd * (coneLength * 0.45f), + coneLength * 0.55f, + overlap, + hitMask, + QueryTriggerInteraction.Collide); + + float now = Time.time; + for (int i = 0; i < count; i++) + { + Collider col = overlap[i]; + if (col == null || PlayerInteractionSphere.ShouldIgnoreEnemyCombatHit(col)) + continue; + + PlayerHealth player = col.GetComponentInParent(); + if (player == null || player.currentHealth <= 0.5f) + continue; + + if (!IsPointInCone(player.transform.position + Vector3.up * 0.9f)) + continue; + + int id = player.GetInstanceID(); + if (nextTick.TryGetValue(id, out float ready) && now < ready) + continue; + + nextTick[id] = now + tickInterval; + Vector3 knock = Flatten(player.transform.position - origin).normalized * 2.4f + Vector3.up * 0.8f; + player.TakeDamage(damagePerTick, origin, knock); + SpellEffectCatalog.ApplyToPlayer(player, SpellEffectId.Burning, burnDuration); + + Vector3 foot = player.transform.position; + if (Physics.Raycast(foot + Vector3.up * 1.2f, Vector3.down, out RaycastHit hit, 3f, hitMask)) + foot = hit.point; + DrucladMagmaPuddle.Spawn(foot, radius: 1.1f, lifetime: scorchPatchLifetime, damagePerTick: damagePerTick * 0.45f); + } + } + + private Vector3 ResolveOrigin() + { + if (muzzle != null) + return muzzle.position; + if (owner != null) + return owner.transform.position + Vector3.up * 2.4f + owner.transform.forward * 0.8f; + return transform.position; + } + + private Vector3 ResolveForward() + { + if (muzzle != null && muzzle.forward.sqrMagnitude > 0.01f) + { + Vector3 f = muzzle.forward; + f.y = 0f; + if (f.sqrMagnitude > 0.01f) + return f.normalized; + } + + if (owner != null) + { + Vector3 f = owner.transform.forward; + f.y = 0f; + if (f.sqrMagnitude > 0.01f) + return f.normalized; + } + + return Vector3.forward; + } + + private static Vector3 Flatten(Vector3 v) => new Vector3(v.x, 0f, v.z); +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFireBreathVolume.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladFireBreathVolume.cs.meta new file mode 100644 index 000000000..b0b7070b4 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFireBreathVolume.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dbdc979e48a4bbdbbfe44b9e6198dae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFireFx.cs b/Assets/Scripts/Creatures/Druclad/DrucladFireFx.cs new file mode 100644 index 000000000..994de06c8 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFireFx.cs @@ -0,0 +1,81 @@ +using InventoryFramework; +using UnityEngine; + +/// Thin wrappers over SpellFocus / volcano / troll slam FX for Druclad combat beats. +public static class DrucladFireFx +{ + private static readonly SpellFocusVfxProfile DefaultProfile = new SpellFocusVfxProfile( + scale: 1.15f, + diameter: 0.55f, + trailTime: 0.35f, + trailStartWidth: 0.28f, + trailEndWidth: 0.04f, + castIntensity: 1.1f, + impactIntensity: 1.2f, + orbPulseSpeed: 1.4f); + + public static void PlayCastBurst(Vector3 origin, Vector3 direction, float scale = 1.1f) + { + Vector3 fwd = direction.sqrMagnitude > 0.01f ? direction.normalized : Vector3.forward; + SpellFocusVefectsBridge.PlayFireCast(origin, Quaternion.LookRotation(fwd), scale); + SpellFocusFireVfx.TryPlayCast( + origin, + fwd, + EnchantAspect.FireballFocus, + DefaultProfile, + powerLevel: 28); + } + + public static void PlayImpact(Vector3 point, Vector3 normal, float scale = 1.2f) + { + Vector3 up = normal.sqrMagnitude > 0.01f ? normal.normalized : Vector3.up; + Quaternion rot = Quaternion.LookRotation(Vector3.Cross(up, Vector3.right).normalized, up); + SpellFocusVefectsBridge.PlayFireImpact(point, rot, scale); + SpellFocusFireVfx.TryPlayImpact( + point, + up, + EnchantAspect.FireballFocus, + DefaultProfile, + powerLevel: 30); + } + + public static void PlayGroundSlam(Vector3 groundPoint, float strength = 1.6f) + { + TrollGroundSlamFx.Play(groundPoint, strength); + PlayImpact(groundPoint + Vector3.up * 0.05f, Vector3.up, 0.85f + strength * 0.25f); + SpellFocusVefectsBridge.PlaySmolderingGroundRing( + groundPoint, + Vector3.up, + radius: 1.4f + strength * 0.55f, + duration: 2.4f, + patchScale: 0.9f + strength * 0.2f); + } + + public static void PlayMeteorImpact(Vector3 point, float scale = 1.35f) + { + PlayImpact(point, Vector3.up, scale); + SpellFocusFireVfx.TryPlayPierceImpact(point, Vector3.up, DefaultProfile, powerLevel: 34); + SpellFocusVefectsBridge.PlaySmolderingGroundRing( + point, + Vector3.up, + radius: 2.1f * scale, + duration: 3.2f, + patchScale: 1.15f * scale); + } + + public static void PlayAwakenCrack(Vector3 groundPoint) + { + PlayGroundSlam(groundPoint, 1.85f); + SpellFocusVefectsBridge.PlayFireCast( + groundPoint + Vector3.up * 0.4f, + Quaternion.LookRotation(Vector3.up), + 1.45f); + } + + public static void AttachBoltVisual(Transform root, float scale = 0.85f) + { + if (root == null) + return; + SpellFocusVefectsBridge.AttachFireBolt(root, scale, EnchantAspect.FireballFocus, powerLevel: 26); + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFireFx.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladFireFx.cs.meta new file mode 100644 index 000000000..23f34c50b --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFireFx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0650c336cda46b18c15e26f73855540 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFirePresentation.cs b/Assets/Scripts/Creatures/Druclad/DrucladFirePresentation.cs new file mode 100644 index 000000000..2eb7c8ef2 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFirePresentation.cs @@ -0,0 +1,320 @@ +using InventoryFramework; +using UnityEngine; + +/// +/// Hellhound-style body fire for Druclad: persistent flames scale with HP, flare on roar/hurt/attacks. +/// +[DisallowMultipleComponent] +public sealed class DrucladFirePresentation : MonoBehaviour +{ + public const string HellhoundBodyFirePrefabPath = + "Assets/GameObjects/Prefabs/VFX/HellhoundBodyFire.prefab"; + public const string EmbeddedChildName = "DrucladBodyFire"; + + [Header("Anchors")] + [SerializeField] private Transform bodyAnchor; + [SerializeField] private AudioSource bodyAudio; + + [Header("Fire VFX")] + [Tooltip("Child on the Druclad prefab (preferred).")] + [SerializeField] private Transform bodyFireInstance; + [Tooltip("Usually the HellhoundBodyFire prefab, scaled up for the boss.")] + [SerializeField] private GameObject bodyFirePrefab; + [SerializeField] private Vector3 bodyFireLocalOffset = new Vector3(0f, 1.15f, 0.1f); + [SerializeField] private float bodyFireBaseScale = 1.85f; + + [Header("Fire palette")] + [SerializeField] private Color healthyFireColor = new Color(1.4f, 0.68f, 0.16f, 1f); + [SerializeField] private Color woundedFireColor = new Color(1.05f, 0.3f, 0.05f, 1f); + [SerializeField] private Color dyingFireColor = new Color(0.48f, 0.12f, 0.04f, 1f); + + [Header("Flares")] + [SerializeField] private float roarFlareDuration = 0.85f; + [SerializeField] private float attackFlareDuration = 0.55f; + [SerializeField] private float hurtFlareDuration = 0.9f; + [SerializeField] private float hurtFlareStrength = 1.5f; + [SerializeField] private float phaseEnrageFlareDuration = 1.15f; + [SerializeField] private float vocalPitchBoost = 0.18f; + [SerializeField] private float vocalVolumeBoost = 0.32f; + + private Transform bodyFireRoot; + private DrucladBodyFireVfx bodyFireVfx; + private HellhoundBodyFireVfx hellhoundBodyFireVfx; + private Light bodyGlow; + private float healthRatio = 1f; + private float flareTimer; + private float flareStrength; + private float hurtFlareTimer; + private float hurtFlareStrengthActive; + private float enrageFlareTimer; + private float baseAudioPitch = 1f; + private float baseAudioVolume = 1f; + private bool bodyHidden; + + public void Bind(Transform anchor, AudioSource audio) + { + bodyAnchor = anchor != null ? anchor : transform; + bodyAudio = audio; + if (bodyAudio != null) + { + baseAudioPitch = bodyAudio.pitch; + baseAudioVolume = bodyAudio.volume; + } + + EnsureBuilt(); + } + + public void SetHealthRatio(float ratio) => healthRatio = Mathf.Clamp01(ratio); + + public void TriggerRoarFlare() + { + flareTimer = roarFlareDuration; + flareStrength = 1f; + EnsureFireVisible(); + } + + public void TriggerAttackFlare() + { + flareTimer = Mathf.Max(flareTimer, attackFlareDuration); + flareStrength = Mathf.Max(flareStrength, 0.85f); + EnsureFireVisible(); + } + + public void TriggerHurtFlare() + { + hurtFlareTimer = hurtFlareDuration; + hurtFlareStrengthActive = hurtFlareStrength; + flareTimer = Mathf.Max(flareTimer, hurtFlareDuration * 0.85f); + flareStrength = Mathf.Max(flareStrength, hurtFlareStrength); + EnsureFireVisible(); + } + + public void TriggerPhaseEnrageFlare() + { + enrageFlareTimer = phaseEnrageFlareDuration; + TriggerRoarFlare(); + } + + public void BeginDeathSmolder() + { + healthRatio = 0f; + TriggerHurtFlare(); + if (bodyFireRoot != null) + { + SpellFocusVefectsBridge.PlayFireCast( + bodyFireRoot.position, + Quaternion.identity, + bodyFireBaseScale * 1.1f); + } + } + + private void Awake() + { + if (bodyAnchor == null) + bodyAnchor = transform; + EnsureBuilt(); + } + + private void Update() + { + float dt = Time.deltaTime; + + if (flareTimer > 0f) + { + flareTimer -= dt; + flareStrength = Mathf.Clamp01(flareTimer / Mathf.Max(0.05f, roarFlareDuration)); + } + else + { + flareStrength = 0f; + } + + if (hurtFlareTimer > 0f) + { + hurtFlareTimer -= dt; + hurtFlareStrengthActive = hurtFlareStrength * Mathf.Clamp01( + hurtFlareTimer / Mathf.Max(0.05f, hurtFlareDuration)); + } + else + { + hurtFlareStrengthActive = 0f; + } + + if (enrageFlareTimer > 0f) + enrageFlareTimer -= dt; + + if (!bodyHidden) + ApplyBodyFirePresentation(); + + ApplyAudioFlare(); + } + + private void ApplyBodyFirePresentation() + { + float combinedFlare = Mathf.Max(flareStrength, hurtFlareStrengthActive); + bool enrage = enrageFlareTimer > 0.01f; + + if (bodyFireVfx != null) + { + bodyFireVfx.ApplyPresentation(healthRatio, combinedFlare, enrage); + return; + } + + if (hellhoundBodyFireVfx != null) + { + hellhoundBodyFireVfx.ApplyPresentation(healthRatio, combinedFlare, enrage); + if (bodyFireRoot != null) + bodyFireRoot.localScale = Vector3.one * bodyFireBaseScale; + return; + } + + Color baseCol = healthRatio > 0.55f + ? Color.Lerp(woundedFireColor, healthyFireColor, (healthRatio - 0.55f) / 0.45f) + : Color.Lerp(dyingFireColor, woundedFireColor, healthRatio / 0.55f); + + float flareMul = 1f + combinedFlare * 1.7f; + if (enrage) + flareMul = Mathf.Max(flareMul, 1.9f); + + float scale = bodyFireBaseScale * (0.55f + healthRatio * 0.7f) * flareMul; + if (bodyFireRoot != null) + bodyFireRoot.localScale = Vector3.one * scale; + + if (bodyGlow != null) + { + bodyGlow.color = baseCol; + bodyGlow.intensity = (1.6f + healthRatio * 3.4f) * flareMul; + bodyGlow.range = 6f + healthRatio * 4f + (enrage ? 3f : 0f); + } + } + + private void ApplyAudioFlare() + { + if (bodyAudio == null) + return; + + bodyAudio.pitch = baseAudioPitch * (1f + flareStrength * vocalPitchBoost); + bodyAudio.volume = Mathf.Clamp01(baseAudioVolume * (1f + flareStrength * vocalVolumeBoost)); + } + + private void EnsureFireVisible() + { + if (bodyFireRoot != null && !bodyFireRoot.gameObject.activeSelf && !bodyHidden) + bodyFireRoot.gameObject.SetActive(true); + } + + private void EnsureBuilt() + { + if (bodyFireRoot != null) + return; + + Transform anchor = bodyAnchor != null ? bodyAnchor : transform; + + if (TryUseEmbeddedBodyFire(anchor)) + { + ApplyBaseScale(); + return; + } + + GameObject prefab = bodyFirePrefab; +#if UNITY_EDITOR + if (prefab == null) + prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(HellhoundBodyFirePrefabPath); +#endif + if (prefab == null) + prefab = Resources.Load("HellhoundBodyFire"); + + if (prefab != null) + { + GameObject fire = Instantiate(prefab, anchor); + fire.name = EmbeddedChildName; + bodyFireRoot = fire.transform; + bodyFireRoot.localPosition = bodyFireLocalOffset; + bodyFireRoot.localRotation = Quaternion.identity; + CacheBodyFireComponents(fire); + ApplyBaseScale(); + EnsureDrucladDriver(fire); + return; + } + + BuildFallbackFire(anchor); + } + + private bool TryUseEmbeddedBodyFire(Transform anchor) + { + Transform embedded = bodyFireInstance; + if (embedded == null) + { + embedded = transform.Find(EmbeddedChildName); + if (embedded == null) + embedded = transform.Find("HellhoundBodyFire"); + if (embedded == null && anchor != transform) + { + embedded = anchor.Find(EmbeddedChildName) + ?? anchor.Find("HellhoundBodyFire"); + } + } + + if (embedded == null) + return false; + + bodyFireRoot = embedded; + CacheBodyFireComponents(embedded.gameObject); + EnsureDrucladDriver(embedded.gameObject); + return true; + } + + private void CacheBodyFireComponents(GameObject fire) + { + bodyFireVfx = fire.GetComponent(); + hellhoundBodyFireVfx = fire.GetComponent(); + bodyGlow = fire.GetComponentInChildren(true); + } + + private void EnsureDrucladDriver(GameObject fire) + { + if (bodyFireVfx != null) + return; + + bodyFireVfx = fire.AddComponent(); + hellhoundBodyFireVfx = null; + if (bodyGlow == null) + bodyGlow = fire.GetComponentInChildren(true); + } + + private void ApplyBaseScale() + { + if (bodyFireRoot != null) + bodyFireRoot.localScale = Vector3.one * bodyFireBaseScale; + } + + private void BuildFallbackFire(Transform anchor) + { + var fireGo = new GameObject(EmbeddedChildName); + bodyFireRoot = fireGo.transform; + bodyFireRoot.SetParent(anchor, false); + bodyFireRoot.localPosition = bodyFireLocalOffset; + bodyFireRoot.localRotation = Quaternion.identity; + bodyFireRoot.localScale = Vector3.one * bodyFireBaseScale; + + var lightGo = new GameObject("BodyGlow"); + lightGo.transform.SetParent(bodyFireRoot, false); + lightGo.transform.localPosition = new Vector3(0f, 0.4f, 0f); + bodyGlow = lightGo.AddComponent(); + bodyGlow.type = LightType.Point; + bodyGlow.shadows = LightShadows.None; + bodyGlow.range = 8f; + bodyGlow.intensity = 3.2f; + bodyGlow.color = healthyFireColor; + + bodyFireVfx = fireGo.AddComponent(); + + // Seed a few looping Vefects bursts as a stand-in when the Hellhound prefab is missing. + SpellFocusVefectsBridge.PlayFireCast(bodyFireRoot.position, Quaternion.identity, 1.2f); + CreatureHovlBridge.TryAttachLoop( + CreatureHovlId.Hellhound, + CreatureHovlPhase.Aura, + bodyFireRoot, + 1.05f); + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladFirePresentation.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladFirePresentation.cs.meta new file mode 100644 index 000000000..30f363d3e --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladFirePresentation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31dfa9489b574c089fe560c27b65e872 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladLootTable.cs b/Assets/Scripts/Creatures/Druclad/DrucladLootTable.cs new file mode 100644 index 000000000..2ef3b0af2 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladLootTable.cs @@ -0,0 +1,260 @@ +using System.Collections.Generic; +using InventoryFramework; +using Mirror; +using UnityEngine; + +/// +/// Druclad death loot. Every item is rolled by tier — +/// Abundant/Common often, Epic almost never. Optional entry.weight overrides are multipliers only. +/// +[CreateAssetMenu(fileName = "DrucladLootTable", menuName = "Manafall/Creatures/Druclad Loot Table")] +public sealed class DrucladLootTable : ScriptableObject +{ + private const string DefaultItemDatabasePath = "Assets/ScriptableObjects/Items/ManafallItemDatabase.asset"; + + [System.Serializable] + public struct Entry + { + public Item item; + [Tooltip("0 = use MarketItemRarity tier weight. >0 multiplies the tier weight.")] + [Min(0f)] public float weightMul; + [Min(1)] public int minAmount; + [Min(1)] public int maxAmount; + } + + public struct ResolvedDrop + { + public Item item; + public int amount; + } + + private struct WeightedCandidate + { + public Item item; + public float weight; + public int minAmount; + public int maxAmount; + } + + [Header("Boss-themed pool (tier from MarketItemRarity)")] + public Entry[] bossPool; + [Min(0)] public int minBossRolls = 2; + [Min(0)] public int maxBossRolls = 4; + + [Header("Bonus generic rolls (also tier-weighted)")] + public bool includeGenericTier = true; + public ItemDatabase itemDatabase; + [Min(0)] public int minGenericRolls = 1; + [Min(0)] public int maxGenericRolls = 2; + [Tooltip("Highest tier allowed in the generic bonus pool.")] + public MarketItemRarity.Tier maxGenericTier = MarketItemRarity.Tier.Rare; + [Min(1)] public int genericMinAmount = 1; + [Min(1)] public int genericMaxAmount = 2; + + [Header("Spread")] + [Min(0.08f)] public float dropSpacing = 0.65f; + + public bool TrySpawnDrops(Transform origin, GameObject lootBagPrefab) + { + if (origin == null || lootBagPrefab == null) + return false; + + bool networked = NetworkServer.active || NetworkClient.active; + if (networked && !NetworkServer.active) + return false; + + CreatureLevelLootScaling.Context ctx = CreatureLevelLootScaling.Begin(origin); + IReadOnlyList drops = RollDrops(); + Vector3 dropOrigin = origin.position + Vector3.up * 0.12f; + int dropIndex = 0; + + for (int i = 0; i < drops.Count; i++) + { + ResolvedDrop drop = drops[i]; + if (drop.item == null || drop.amount <= 0) + continue; + + float angle = (360f / Mathf.Max(1, drops.Count)) * dropIndex; + Vector3 offset = Quaternion.Euler(0f, angle, 0f) * Vector3.forward * dropSpacing; + CreatureLevelLootScaling.TrySpawnDrop( + ref ctx, + lootBagPrefab, + drop.item, + drop.amount, + dropOrigin + offset, + origin); + dropIndex++; + } + + bool finishedLoot = CreatureLevelLootScaling.TryFinishDeathLoot(ref ctx, origin, lootBagPrefab); + return dropIndex > 0 || finishedLoot; + } + + public IReadOnlyList RollDrops() + { + var results = new List(8); + var pickedIds = new HashSet(); + MarketCatalog catalog = MarketCatalog.Resolve(null); + + RollBossPool(pickedIds, results); + if (includeGenericTier) + RollGenericByTier(catalog, pickedIds, results); + + return results; + } + + private void RollBossPool(HashSet pickedIds, List outDrops) + { + if (bossPool == null || bossPool.Length == 0) + return; + + var candidates = new List(bossPool.Length); + for (int i = 0; i < bossPool.Length; i++) + { + Entry row = bossPool[i]; + if (row.item == null || row.item.id <= 0 || pickedIds.Contains(row.item.id)) + continue; + + float mul = row.weightMul > 0.001f ? row.weightMul : 1f; + float weight = ItemLootRarity.ResolveLootWeight(row.item, relativeMul: mul); + if (weight <= 0.001f) + continue; + + int lo = Mathf.Max(1, Mathf.Min(row.minAmount, row.maxAmount)); + int hi = Mathf.Max(lo, Mathf.Max(row.minAmount, row.maxAmount)); + candidates.Add(new WeightedCandidate + { + item = row.item, + weight = weight, + minAmount = lo, + maxAmount = hi, + }); + } + + PickDistinct(candidates, minBossRolls, maxBossRolls, pickedIds, outDrops); + } + + private void RollGenericByTier(MarketCatalog catalog, HashSet pickedIds, List outDrops) + { + ItemDatabase db = ResolveItemDatabase(); + if (db?.items == null || db.items.Count == 0) + return; + + var candidates = new List(64); + for (int i = 0; i < db.items.Count; i++) + { + Item item = db.items[i]; + if (item == null || item.id <= 0 || pickedIds.Contains(item.id)) + continue; + if (IsDrucladThemed(item)) + continue; + if (!ItemLootRarity.CanDropFromCreatureBonusLoot(item, catalog)) + continue; + + MarketItemRarity.Profile profile = MarketItemRarity.GetProfile(item); + if (profile.Tier > maxGenericTier) + continue; + + float weight = ItemLootRarity.ResolveLootWeight(item); + if (weight <= 0.001f) + continue; + + int maxAmount = Mathf.Max(1, Mathf.Min(genericMaxAmount, item.maxStack)); + int minAmount = Mathf.Clamp(genericMinAmount, 1, maxAmount); + candidates.Add(new WeightedCandidate + { + item = item, + weight = weight, + minAmount = minAmount, + maxAmount = maxAmount, + }); + } + + PickDistinct(candidates, minGenericRolls, maxGenericRolls, pickedIds, outDrops); + } + + private static void PickDistinct( + List candidates, + int minRolls, + int maxRolls, + HashSet pickedIds, + List outDrops) + { + if (candidates.Count == 0) + return; + + int lo = Mathf.Clamp(minRolls, 0, candidates.Count); + int hi = Mathf.Clamp(Mathf.Max(minRolls, maxRolls), 0, candidates.Count); + int picks = Random.Range(lo, hi + 1); + + for (int pick = 0; pick < picks; pick++) + { + int index = PickWeightedIndex(candidates); + if (index < 0) + break; + + WeightedCandidate chosen = candidates[index]; + candidates.RemoveAt(index); + pickedIds.Add(chosen.item.id); + + int amount = Random.Range(chosen.minAmount, chosen.maxAmount + 1); + if (amount <= 0) + continue; + + outDrops.Add(new ResolvedDrop { item = chosen.item, amount = amount }); + } + } + + private static int PickWeightedIndex(List candidates) + { + float total = 0f; + for (int i = 0; i < candidates.Count; i++) + total += candidates[i].weight; + + if (total <= 0f) + return -1; + + float roll = Random.Range(0f, total); + float cumulative = 0f; + for (int i = 0; i < candidates.Count; i++) + { + cumulative += candidates[i].weight; + if (roll <= cumulative) + return i; + } + + return candidates.Count - 1; + } + + private static bool IsDrucladThemed(Item item) + { + if (item == null) + return false; + string n = item.itemName ?? string.Empty; + return n.IndexOf("druclad", System.StringComparison.OrdinalIgnoreCase) >= 0 + || n.IndexOf("abyss", System.StringComparison.OrdinalIgnoreCase) >= 0 + || n.IndexOf("abyssal", System.StringComparison.OrdinalIgnoreCase) >= 0 + || n.IndexOf("void cinder", System.StringComparison.OrdinalIgnoreCase) >= 0; + } + + private ItemDatabase ResolveItemDatabase() + { + if (itemDatabase != null) + return itemDatabase; + +#if UNITY_EDITOR + itemDatabase = UnityEditor.AssetDatabase.LoadAssetAtPath(DefaultItemDatabasePath); + if (itemDatabase != null) + return itemDatabase; +#endif + + ItemDatabase[] all = Resources.FindObjectsOfTypeAll(); + for (int i = 0; i < all.Length; i++) + { + if (all[i] != null && all[i].name.IndexOf("Manafall", System.StringComparison.OrdinalIgnoreCase) >= 0) + return all[i]; + } + + return all.Length > 0 ? all[0] : null; + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladLootTable.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladLootTable.cs.meta new file mode 100644 index 000000000..e24728dc3 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladLootTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c462a027fd6c4d44818d3dd7585eca2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladMagmaPuddle.cs b/Assets/Scripts/Creatures/Druclad/DrucladMagmaPuddle.cs new file mode 100644 index 000000000..eeaa0623c --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladMagmaPuddle.cs @@ -0,0 +1,79 @@ +using InventoryFramework; +using UnityEngine; + +/// Small lingering magma patch (volcano-pool style, boss-scaled down). +[DisallowMultipleComponent] +public sealed class DrucladMagmaPuddle : MonoBehaviour +{ + private float radius; + private float damagePerTick; + private float tickInterval; + private float burnDuration; + private float dieAt; + private float nextTickAt; + private readonly Collider[] buffer = new Collider[12]; + + public static DrucladMagmaPuddle Spawn( + Vector3 groundPoint, + float radius, + float lifetime, + float damagePerTick, + float tickInterval = 0.35f, + float burnDuration = 1.8f) + { + var go = new GameObject("DrucladMagmaPuddle"); + go.transform.position = groundPoint + Vector3.up * 0.03f; + var puddle = go.AddComponent(); + puddle.radius = Mathf.Max(0.6f, radius); + puddle.damagePerTick = Mathf.Max(1f, damagePerTick); + puddle.tickInterval = Mathf.Max(0.12f, tickInterval); + puddle.burnDuration = Mathf.Max(0.4f, burnDuration); + puddle.dieAt = Time.time + Mathf.Max(0.4f, lifetime); + puddle.nextTickAt = Time.time; + + SpellFocusVefectsBridge.PlaySmolderingGroundRing( + groundPoint, + Vector3.up, + radius: puddle.radius, + duration: lifetime, + patchScale: Mathf.Clamp(puddle.radius * 0.55f, 0.55f, 1.6f)); + + Object.Destroy(go, lifetime + 0.35f); + return puddle; + } + + private void Update() + { + if (Time.time >= dieAt) + { + Destroy(gameObject); + return; + } + + if (Time.time < nextTickAt) + return; + + nextTickAt = Time.time + tickInterval; + int count = Physics.OverlapSphereNonAlloc( + transform.position, + radius, + buffer, + ~0, + QueryTriggerInteraction.Collide); + + for (int i = 0; i < count; i++) + { + Collider col = buffer[i]; + if (col == null || PlayerInteractionSphere.ShouldIgnoreEnemyCombatHit(col)) + continue; + + PlayerHealth player = col.GetComponentInParent(); + if (player == null || player.currentHealth <= 0.5f) + continue; + + Vector3 knock = Vector3.up * 0.6f; + player.TakeDamage(damagePerTick, transform.position, knock); + SpellEffectCatalog.ApplyToPlayer(player, SpellEffectId.Burning, burnDuration); + } + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladMagmaPuddle.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladMagmaPuddle.cs.meta new file mode 100644 index 000000000..7e27f9b03 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladMagmaPuddle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88591988a2d749ce9c0e78f87fa558a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladMeteorRainDirector.cs b/Assets/Scripts/Creatures/Druclad/DrucladMeteorRainDirector.cs new file mode 100644 index 000000000..99eadc38c --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladMeteorRainDirector.cs @@ -0,0 +1,138 @@ +using System.Collections; +using InventoryFramework; +using UnityEngine; + +/// +/// Spawns 4–6 delayed fire meteors in a ring around the player with a brief safe doughnut near Druclad. +/// +public sealed class DrucladMeteorRainDirector : MonoBehaviour +{ + private readonly Collider[] hitBuffer = new Collider[16]; + + public static void Play( + DrucladController owner, + Vector3 playerFocus, + Vector3 bossFeet, + int meteorCount, + float ringRadius, + float safeRadiusNearBoss, + float damage, + float firstDelay, + float stagger) + { + if (owner == null) + return; + + var host = owner.gameObject.AddComponent(); + host.StartCoroutine(host.Run( + owner, + playerFocus, + bossFeet, + Mathf.Clamp(meteorCount, 3, 8), + Mathf.Max(3f, ringRadius), + Mathf.Max(1.2f, safeRadiusNearBoss), + Mathf.Max(8f, damage), + Mathf.Max(0.15f, firstDelay), + Mathf.Max(0.08f, stagger))); + } + + private IEnumerator Run( + DrucladController owner, + Vector3 playerFocus, + Vector3 bossFeet, + int count, + float ringRadius, + float safeRadius, + float damage, + float firstDelay, + float stagger) + { + float yaw0 = Random.Range(0f, 360f); + for (int i = 0; i < count; i++) + { + float yaw = yaw0 + (360f / count) * i + Random.Range(-12f, 12f); + Vector3 offset = Quaternion.Euler(0f, yaw, 0f) * Vector3.forward * ringRadius; + Vector3 impact = playerFocus + offset; + impact.y = playerFocus.y; + + // Keep a short safe doughnut around the boss so melee is not pure death. + Vector3 flatFromBoss = impact - bossFeet; + flatFromBoss.y = 0f; + if (flatFromBoss.sqrMagnitude < safeRadius * safeRadius) + impact = bossFeet + flatFromBoss.normalized * (safeRadius + 0.75f); + + if (Physics.Raycast(impact + Vector3.up * 8f, Vector3.down, out RaycastHit ground, 24f)) + impact = ground.point; + + float delay = firstDelay + stagger * i; + StartCoroutine(DropOne(owner, impact, damage, delay)); + } + + yield return new WaitForSeconds(firstDelay + stagger * count + 1.2f); + Destroy(this); + } + + private IEnumerator DropOne(DrucladController owner, Vector3 impact, float damage, float delay) + { + yield return new WaitForSeconds(delay); + + Vector3 entry = impact + Vector3.up * 28f + Random.insideUnitSphere * 2.5f; + entry.y = impact.y + 26f; + + // Telegraph ring + SpellFocusVefectsBridge.PlaySmolderingGroundRing( + impact, + Vector3.up, + radius: 1.8f, + duration: 0.55f, + patchScale: 0.85f); + + float travel = 0.55f; + float t = 0f; + var head = new GameObject("DrucladMeteorHead"); + head.transform.position = entry; + DrucladFireFx.AttachBoltVisual(head.transform, 1.35f); + + while (t < travel) + { + t += Time.deltaTime; + float u = Mathf.Clamp01(t / travel); + float eased = Mathf.Pow(u, 1.25f); + head.transform.position = Vector3.LerpUnclamped(entry, impact, eased); + yield return null; + } + + Destroy(head); + DrucladFireFx.PlayMeteorImpact(impact, 1.4f); + + if (owner == null || owner.IsDead) + yield break; + + int n = Physics.OverlapSphereNonAlloc(impact, 2.6f, hitBuffer, ~0, QueryTriggerInteraction.Collide); + for (int i = 0; i < n; i++) + { + Collider col = hitBuffer[i]; + if (col == null || PlayerInteractionSphere.ShouldIgnoreEnemyCombatHit(col)) + continue; + + PlayerHealth player = col.GetComponentInParent(); + if (player != null && player.currentHealth > 0.5f) + { + Vector3 away = player.transform.position - impact; + away.y = 0f; + if (away.sqrMagnitude < 0.01f) + away = Vector3.forward; + away.Normalize(); + player.TakeDamage(damage, impact, away * 14f + Vector3.up * 6f); + SpellEffectCatalog.ApplyToPlayer(player, SpellEffectId.Burning, 3.2f); + continue; + } + + Health creature = CreatureMeleeHurtbox.ResolveHealth(col); + if (creature != null && !creature.IsDead && creature.gameObject != owner.gameObject) + creature.TakeDamage(damage * 0.65f, impact); + } + + DrucladMagmaPuddle.Spawn(impact, radius: 1.7f, lifetime: 2.8f, damagePerTick: damage * 0.18f); + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladMeteorRainDirector.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladMeteorRainDirector.cs.meta new file mode 100644 index 000000000..c5e59a5b2 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladMeteorRainDirector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4476b4351f454294a17f9dcbd9c20d83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladWorldFlags.cs b/Assets/Scripts/Creatures/Druclad/DrucladWorldFlags.cs new file mode 100644 index 000000000..a0214ea92 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladWorldFlags.cs @@ -0,0 +1,157 @@ +using System; +using System.IO; +using Mirror; +using UnityEngine; + +/// +/// Once-per-world-seed Druclad encounter flags (alive fled / permanently dead). +/// Persisted next to world-entities.json as druclad.json for host/offline saves. +/// +public static class DrucladWorldFlags +{ + private const string FileName = "druclad.json"; + private const int Version = 1; + + [Serializable] + public sealed class FileBlob + { + public int version = Version; + public int worldSeed; + public bool hasAwakened; + public bool isAlive; + public bool isDead; + } + + private static FileBlob cached; + private static bool loaded; + + public static string FilePath() => + Path.Combine(HostWorldSave.SlotRootDirectory(), FileName); + + public static void NotifySessionEnded() + { + cached = null; + loaded = false; + } + + public static FileBlob Get() + { + EnsureLoaded(); + return cached; + } + + public static bool IsPermanentlyDead() + { + EnsureLoaded(); + return cached != null && cached.isDead; + } + + public static bool CanSpawn(int worldSeed) + { + EnsureLoaded(); + if (cached == null) + return true; + + if (cached.worldSeed != 0 && cached.worldSeed != worldSeed) + { + // Different seed slot — treat as fresh. + cached = new FileBlob { worldSeed = worldSeed }; + return true; + } + + return !cached.isDead; + } + + public static void MarkAwakened(int worldSeed) + { + EnsureLoaded(); + cached.worldSeed = worldSeed; + cached.hasAwakened = true; + cached.isAlive = true; + cached.isDead = false; + Persist(); + } + + public static void MarkAliveFled() + { + EnsureLoaded(); + cached.isAlive = true; + cached.isDead = false; + cached.hasAwakened = true; + Persist(); + } + + public static void MarkDead() + { + EnsureLoaded(); + cached.isAlive = false; + cached.isDead = true; + cached.hasAwakened = true; + Persist(); + } + + public static void ServerCapture() + { + if (!NetworkServer.active || !OfflineSoloSession.WorldPersistenceActive) + return; + if (!loaded || cached == null) + return; + Persist(); + } + + public static void ServerRestore() + { + loaded = false; + cached = null; + EnsureLoaded(); + } + + private static void EnsureLoaded() + { + if (loaded && cached != null) + return; + + loaded = true; + cached = new FileBlob(); + + try + { + SaveFileWriter.Flush(); + string path = FilePath(); + if (!File.Exists(path)) + return; + + string json = File.ReadAllText(path); + if (string.IsNullOrWhiteSpace(json)) + return; + + FileBlob blob = JsonUtility.FromJson(json); + if (blob != null) + cached = blob; + } + catch (Exception ex) + { + Debug.LogWarning("[DrucladWorldFlags] Load failed: " + ex.Message); + } + } + + private static void Persist() + { + if (cached == null) + return; + + try + { + Directory.CreateDirectory(HostWorldSave.SlotRootDirectory()); + string json = JsonUtility.ToJson(cached, true); + if (NetworkServer.active && OfflineSoloSession.WorldPersistenceActive) + SaveFileWriter.Enqueue(FilePath(), json); + else + SaveFileWriter.WriteNow(FilePath(), json); + } + catch (Exception ex) + { + Debug.LogWarning("[DrucladWorldFlags] Persist failed: " + ex.Message); + } + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladWorldFlags.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladWorldFlags.cs.meta new file mode 100644 index 000000000..a5786fbe0 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladWorldFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa91401f0bf24c98b7320a0c45851638 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/DrucladWorldSpawner.cs b/Assets/Scripts/Creatures/Druclad/DrucladWorldSpawner.cs new file mode 100644 index 000000000..c9adb01a6 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladWorldSpawner.cs @@ -0,0 +1,177 @@ +using Mirror; +using UnityEngine; + +/// +/// Void-island only Druclad spawner. Awakens at most once per world seed while alive; +/// permanent death is stored in . +/// +[DisallowMultipleComponent] +public sealed class DrucladWorldSpawner : MonoBehaviour +{ + public const string PrefabResourcesName = "Druclad"; + public const string PrefabAssetPath = "Assets/GameObjects/Prefabs/Networked/Druclad.prefab"; + + [SerializeField] private GameObject drucladPrefab; + [SerializeField] private float voidOccupancyThreshold = 0.22f; + [SerializeField] private float dwellSecondsBeforeAwaken = 6f; + [SerializeField] private float pollInterval = 0.75f; + [SerializeField] private float spawnHeightProbe = 80f; + + private WorldGenerator world; + private float dwellAccum; + private float nextPollAt; + private bool spawnedThisSession; + private DrucladController liveInstance; + + private void Awake() + { + world = GetComponent() ?? FindFirstObjectByType(); + } + + private void OnEnable() + { + dwellAccum = 0f; + nextPollAt = 0f; + } + + private void Update() + { + if (!CanDriveSpawn()) + return; + + if (Time.time < nextPollAt) + return; + nextPollAt = Time.time + pollInterval; + + if (spawnedThisSession && liveInstance != null && !liveInstance.IsDead) + return; + + if (liveInstance != null && liveInstance.IsDead) + liveInstance = null; + + int seed = world != null ? world.TerrainSeed : OfflineSoloSession.LockedWorldSeed; + if (!DrucladWorldFlags.CanSpawn(seed)) + return; + + if (!TryFindVoidPlayer(out Transform player, out Vector3 voidPoint)) + { + dwellAccum = 0f; + return; + } + + dwellAccum += pollInterval; + if (dwellAccum < dwellSecondsBeforeAwaken) + return; + + TrySpawnAt(voidPoint, seed); + } + + private bool CanDriveSpawn() + { + if (NetworkServer.active) + return true; + if (!NetworkServer.active && !NetworkClient.active) + return true; + return false; + } + + private bool TryFindVoidPlayer(out Transform player, out Vector3 voidPoint) + { + player = null; + voidPoint = Vector3.zero; + PlayerHealth[] players = FindObjectsByType(FindObjectsSortMode.None); + for (int i = 0; i < players.Length; i++) + { + PlayerHealth hp = players[i]; + if (hp == null || hp.currentHealth <= 0.5f) + continue; + + Vector3 p = hp.transform.position; + if (!IsOnVoid(p)) + continue; + + player = hp.transform; + voidPoint = p; + return true; + } + + return false; + } + + private bool IsOnVoid(Vector3 worldPos) + { + BiomeSettings settings = world != null ? world.BiomeSettings : null; + int seed = world != null ? world.TerrainSeed : 0; + float void01 = BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(worldPos.x), + Mathf.RoundToInt(worldPos.z), + seed, + settings); + return void01 >= voidOccupancyThreshold; + } + + private void TrySpawnAt(Vector3 nearPlayer, int seed) + { + GameObject prefab = ResolvePrefab(); + if (prefab == null) + { + Debug.LogWarning("[DrucladWorldSpawner] Prefab missing — run Manafall/Creatures/Setup Druclad."); + return; + } + + BiomeClimateSampler.ResolveVoidLayout( + world != null ? world.BiomeSettings : null, + out Vector2 centerXZ, + out float radius); + + Vector3 spawn = new Vector3(centerXZ.x, nearPlayer.y + 4f, centerXZ.y); + // Prefer a point on the void pad a short offset from the player, still near center. + Vector3 towardCenter = new Vector3(centerXZ.x - nearPlayer.x, 0f, centerXZ.y - nearPlayer.z); + if (towardCenter.sqrMagnitude > 1f) + spawn = nearPlayer + towardCenter.normalized * Mathf.Min(14f, towardCenter.magnitude * 0.45f); + spawn.y = nearPlayer.y + 6f; + + if (Physics.Raycast(spawn + Vector3.up * spawnHeightProbe * 0.25f, Vector3.down, out RaycastHit hit, spawnHeightProbe)) + spawn = hit.point; + + GameObject instance = Instantiate(prefab, spawn, Quaternion.identity); + instance.name = "Druclad"; + liveInstance = instance.GetComponent(); + spawnedThisSession = true; + DrucladWorldFlags.MarkAwakened(seed); + + if (NetworkServer.active) + { + NetworkIdentity identity = instance.GetComponent(); + if (identity != null) + NetworkServer.Spawn(instance); + } + + Debug.Log($"[DrucladWorldSpawner] Awakened Druclad at {spawn} seed={seed} radius={radius:F0}"); + } + + private GameObject ResolvePrefab() + { + if (drucladPrefab != null) + return drucladPrefab; + + GameObject fromResources = Resources.Load(PrefabResourcesName); + if (fromResources != null) + { + drucladPrefab = fromResources; + return fromResources; + } + +#if UNITY_EDITOR + drucladPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath(PrefabAssetPath); +#endif + return drucladPrefab; + } + + /// Editor / debug: force an awaken check immediately. + public void TrySpawnNow() + { + dwellAccum = dwellSecondsBeforeAwaken; + nextPollAt = 0f; + } +} diff --git a/Assets/Scripts/Creatures/Druclad/DrucladWorldSpawner.cs.meta b/Assets/Scripts/Creatures/Druclad/DrucladWorldSpawner.cs.meta new file mode 100644 index 000000000..6fdbfa576 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/DrucladWorldSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71f7a6570a28473c989785a391dbe325 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/Editor.meta b/Assets/Scripts/Creatures/Druclad/Editor.meta new file mode 100644 index 000000000..0042d4611 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da5a04d298b945739ffbc12dc3ba2fa8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Druclad/Editor/DrucladSetupEditorTools.cs b/Assets/Scripts/Creatures/Druclad/Editor/DrucladSetupEditorTools.cs new file mode 100644 index 000000000..8c5ebb333 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/Editor/DrucladSetupEditorTools.cs @@ -0,0 +1,885 @@ +#if UNITY_EDITOR +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using InventoryFramework; +using Mirror; +using UnityEditor; +using UnityEditor.Animations; +using UnityEngine; +using Object = UnityEngine.Object; + +[InitializeOnLoad] +internal static class DrucladAutoSetupOnLoad +{ + static DrucladAutoSetupOnLoad() + { + DrucladSetupEditorTools.ResetAutoSetupPass(); + EditorApplication.delayCall += DrucladSetupEditorTools.AutoSetupIfNeeded; + UnityEditor.Compilation.CompilationPipeline.compilationFinished += _ => + { + DrucladSetupEditorTools.ResetAutoSetupPass(); + EditorApplication.delayCall += DrucladSetupEditorTools.AutoSetupIfNeeded; + }; + } +} + +/// +/// One-click Druclad setup: Humanoid retarget from Mixamo (or project fallbacks), +/// animator controller, networked prefab, spawn registration. +/// +public static class DrucladSetupEditorTools +{ + private const string ModelPath = DrucladAnimCatalog.RiggedModelPath; + private const string PrefabPath = DrucladWorldSpawner.PrefabAssetPath; + private const string AnimatorPath = DrucladAnimCatalog.AnimatorPath; + private const string ClipsFolder = DrucladAnimCatalog.ClipsFolder; + private const string LootTablePath = "Assets/Data/Creatures/DrucladLootTable.asset"; + private const string LootBagPath = "Assets/GameObjects/Prefabs/Networked/Loot Bag_Object.prefab"; + private const string NetworkManagerPath = "Assets/GameObjects/Prefabs/NetworkManager.prefab"; + private const string ResourcesPrefabPath = "Assets/Resources/Druclad.prefab"; + private const string BodyFirePrefabPath = DrucladFirePresentation.HellhoundBodyFirePrefabPath; + private const string ItemDatabasePath = "Assets/ScriptableObjects/Items/ManafallItemDatabase.asset"; + private const string EmberAshPath = "Assets/ScriptableObjects/Items/Abyssal Ember Ash.asset"; + private const string CinderScalePath = "Assets/ScriptableObjects/Items/Void Cinder Scale.asset"; + private const string HornShardPath = "Assets/ScriptableObjects/Items/Druclad Horn Shard.asset"; + private const string FireHeartPath = "Assets/ScriptableObjects/Items/Abyss Fire Heart.asset"; + private const int EmberAshId = 7820; + private const int CinderScaleId = 7821; + private const int HornShardId = 7822; + private const int FireHeartId = 7823; + + private const float ModelScale = 3.35f; + private const uint NetworkAssetId = 4182736501u; + private const float BossMaxHealth = 4200f; + + private static bool isRunningSetup; + private static bool autoSetupAttemptedThisPass; + + [MenuItem("Manafall/Creatures/Setup Druclad", priority = 54)] + public static void SetupDrucladFullMenu() => SetupDrucladFull(); + + [MenuItem("Manafall/Creatures/Setup Druclad Animations Only", priority = 55)] + public static void SetupDrucladAnimationsOnlyMenu() => SetupDrucladAnimationsOnly(); + + public static void ResetAutoSetupPass() => autoSetupAttemptedThisPass = false; + + public static void AutoSetupIfNeeded() + { + if (ManafallEditorPlayMode.BlocksAutoSetup) + return; + if (!File.Exists(ModelPath)) + return; + if (isRunningSetup || autoSetupAttemptedThisPass) + return; + + try + { + isRunningSetup = true; + if (NeedsSetupPass()) + SetupDrucladFull(); + else + RegisterSpawnablePrefab(null, AssetDatabase.LoadAssetAtPath(PrefabPath)); + } + catch (Exception ex) + { + Debug.LogWarning($"Manafall: Druclad auto-setup failed this pass. Reason: {ex.Message}"); + } + finally + { + autoSetupAttemptedThisPass = true; + isRunningSetup = false; + } + } + + public static void SetupDrucladFull() + { + var log = new StringBuilder(); + log.AppendLine("=== Manafall: Setup Druclad ==="); + + EnsureFolder("Assets/Animation"); + EnsureFolder("Assets/Data/Creatures"); + EnsureFolder("Assets/GameObjects/Prefabs/Networked"); + EnsureFolder("Assets/ScriptableObjects/Items"); + EnsureFolder(ClipsFolder); + EnsureFolder("Assets/Resources"); + + ConfigureHumanoidModel(log); + EnsureFallbackClipCopies(log); + ConfigureClipHumanoids(log); + + Item emberAsh = EnsureItem(EmberAshPath, EmberAshId, "Abyssal Ember Ash", + "Fine ash that still smolders with void heat.", 30); + Item cinderScale = EnsureItem(CinderScalePath, CinderScaleId, "Void Cinder Scale", + "A plate of cooled magma from Druclad's hide.", 12); + Item hornShard = EnsureItem(HornShardPath, HornShardId, "Druclad Horn Shard", + "A jagged horn fragment glowing with abyss fire.", 4); + Item fireHeart = EnsureItem(FireHeartPath, FireHeartId, "Abyss Fire Heart", + "The rare core of the void fire boss — still pulsing heat.", 1); + + RegisterItemInDatabase(log, emberAsh); + RegisterItemInDatabase(log, cinderScale); + RegisterItemInDatabase(log, hornShard); + RegisterItemInDatabase(log, fireHeart); + + DrucladLootTable lootTable = EnsureLootTable(log, emberAsh, cinderScale, hornShard, fireHeart); + RuntimeAnimatorController animator = BuildAnimatorController(log); + RecreatePrefab(log, animator, lootTable); + RegisterSpawnablePrefab(log, AssetDatabase.LoadAssetAtPath(PrefabPath)); + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + Debug.Log(log.ToString()); + } + + public static void SetupDrucladAnimationsOnly() + { + var log = new StringBuilder(); + log.AppendLine("=== Manafall: Setup Druclad Animations ==="); + ConfigureHumanoidModel(log); + EnsureFallbackClipCopies(log); + ConfigureClipHumanoids(log); + RuntimeAnimatorController animator = BuildAnimatorController(log); + GameObject prefab = AssetDatabase.LoadAssetAtPath(PrefabPath); + if (prefab != null && animator != null) + { + DrucladLootTable loot = AssetDatabase.LoadAssetAtPath(LootTablePath); + WireExistingPrefab(prefab, animator, loot, log); + } + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + Debug.Log(log.ToString()); + } + + public static void RunBatchSetupFromCommandLine() + { + AutoSetupIfNeeded(); + SetupDrucladFull(); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + EditorApplication.Exit(0); + } + + private static bool NeedsSetupPass() + { + GameObject prefabAsset = AssetDatabase.LoadAssetAtPath(PrefabPath); + if (prefabAsset == null) + return true; + if (prefabAsset.GetComponent() == null) + return true; + if (prefabAsset.GetComponent() == null) + return true; + if (prefabAsset.GetComponent() == null) + return true; + if (AssetDatabase.LoadAssetAtPath(AnimatorPath) == null) + return true; + return false; + } + + private static void ConfigureHumanoidModel(StringBuilder log) + { + var importer = AssetImporter.GetAtPath(ModelPath) as ModelImporter; + if (importer == null) + { + log.AppendLine($" ERROR: missing model importer at {ModelPath}"); + return; + } + + bool dirty = false; + if (importer.animationType != ModelImporterAnimationType.Human) + { + importer.animationType = ModelImporterAnimationType.Human; + dirty = true; + } + + if (importer.avatarSetup != ModelImporterAvatarSetup.CreateFromThisModel) + { + importer.avatarSetup = ModelImporterAvatarSetup.CreateFromThisModel; + dirty = true; + } + + importer.globalScale = 1f; + if (dirty) + { + importer.SaveAndReimport(); + log.AppendLine(" Configured Druclad_MixamoRigged as Humanoid."); + } + else + { + log.AppendLine(" Druclad Humanoid already configured."); + } + } + + private static Avatar LoadDrucladAvatar() + { + foreach (Object sub in AssetDatabase.LoadAllAssetsAtPath(ModelPath)) + { + if (sub is Avatar avatar) + return avatar; + } + + return null; + } + + private static void EnsureFallbackClipCopies(StringBuilder log) + { + EnsureFolder(ClipsFolder); + CopyClipIfMissing(DrucladAnimCatalog.IdlePreferred, DrucladAnimCatalog.IdleFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.WalkPreferred, DrucladAnimCatalog.WalkFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.RunPreferred, DrucladAnimCatalog.RunFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.RoarPreferred, DrucladAnimCatalog.RoarFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.HitPreferred, DrucladAnimCatalog.HitFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.DeathPreferred, DrucladAnimCatalog.DeathFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.SwipeLPreferred, DrucladAnimCatalog.SwipeLFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.SwipeRPreferred, DrucladAnimCatalog.SwipeRFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.OverheadPreferred, DrucladAnimCatalog.OverheadFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.StompPreferred, DrucladAnimCatalog.StompFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.BreathWindupPreferred, DrucladAnimCatalog.BreathWindupFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.HurlPreferred, DrucladAnimCatalog.HurlFallback, log); + CopyClipIfMissing(DrucladAnimCatalog.ClapPreferred, DrucladAnimCatalog.ClapFallback, log); + } + + private static void CopyClipIfMissing(string preferredFileName, string fallbackPath, StringBuilder log) + { + string dest = $"{ClipsFolder}/{preferredFileName}"; + if (File.Exists(dest)) + return; + + if (!File.Exists(fallbackPath)) + { + log.AppendLine($" WARN: fallback missing for {preferredFileName}: {fallbackPath}"); + return; + } + + EnsureFolder(ClipsFolder); + if (AssetDatabase.CopyAsset(fallbackPath, dest)) + log.AppendLine($" Copied clip {preferredFileName}"); + else + log.AppendLine($" WARN: failed to copy {fallbackPath} → {dest}"); + } + + private static void ConfigureClipHumanoids(StringBuilder log) + { + Avatar avatar = LoadDrucladAvatar(); + if (avatar == null) + { + log.AppendLine(" WARN: Druclad Avatar missing — clip retarget skipped."); + return; + } + + string[] guids = AssetDatabase.FindAssets("t:Model", new[] { ClipsFolder }); + for (int i = 0; i < guids.Length; i++) + { + string path = AssetDatabase.GUIDToAssetPath(guids[i]); + if (!path.EndsWith(".fbx", StringComparison.OrdinalIgnoreCase)) + continue; + + var importer = AssetImporter.GetAtPath(path) as ModelImporter; + if (importer == null) + continue; + + importer.animationType = ModelImporterAnimationType.Human; + importer.avatarSetup = ModelImporterAvatarSetup.CopyFromOther; + importer.sourceAvatar = avatar; + importer.SaveAndReimport(); + log.AppendLine($" Retargeted {Path.GetFileName(path)} → Druclad Avatar"); + } + } + + private static RuntimeAnimatorController BuildAnimatorController(StringBuilder log) + { + Dictionary clips = LoadClipsFromFolder(); + if (clips.Count == 0) + { + log.AppendLine(" WARN: no Druclad clips found — animator not built."); + return null; + } + + AnimationClip idle = FindClip(clips, "idle", "monster") ?? FirstClip(clips); + AnimationClip walk = FindClip(clips, "walk", "zombie walk") ?? idle; + AnimationClip run = FindClip(clips, "run") ?? walk; + AnimationClip roar = FindClip(clips, "roar") ?? FindClip(clips, "attack") ?? idle; + AnimationClip hit = FindClip(clips, "impact", "hit", "reaction") ?? idle; + AnimationClip die = FindClip(clips, "dying", "death", "die") ?? hit; + AnimationClip swipeL = FindClip(clips, "punch") ?? FindClip(clips, "swipe") ?? idle; + AnimationClip swipeR = FindClip(clips, "hook") ?? FindClip(clips, "attack (1)") ?? swipeL; + AnimationClip overhead = FindClip(clips, "overhead", "axe") ?? swipeR; + AnimationClip stomp = FindClip(clips, "jump", "stomp") ?? overhead; + AnimationClip breath = FindClip(clips, "spell", "breath", "casting") ?? roar; + AnimationClip hurl = FindClip(clips, "frisbee", "throw", "hurl") ?? swipeL; + AnimationClip clap = FindClip(clips, "clap", "sky") ?? breath; + + if (File.Exists(AnimatorPath)) + AssetDatabase.DeleteAsset(AnimatorPath); + + AnimatorController controller = AnimatorController.CreateAnimatorControllerAtPath(AnimatorPath); + controller.AddParameter(DrucladAnimCatalog.SpeedParam, AnimatorControllerParameterType.Float); + controller.AddParameter(DrucladAnimCatalog.DeadBool, AnimatorControllerParameterType.Bool); + controller.AddParameter(DrucladAnimCatalog.HurtTrigger, AnimatorControllerParameterType.Trigger); + controller.AddParameter(DrucladAnimCatalog.DieTrigger, AnimatorControllerParameterType.Trigger); + controller.AddParameter(DrucladAnimCatalog.RoarTrigger, AnimatorControllerParameterType.Trigger); + + for (int i = 0; i < DrucladAnimCatalog.Attacks.Length; i++) + controller.AddParameter(DrucladAnimCatalog.Attacks[i].TriggerName, AnimatorControllerParameterType.Trigger); + + AnimatorStateMachine sm = controller.layers[0].stateMachine; + + BlendTree loco; + AnimatorState locoState = controller.CreateBlendTreeInController(DrucladAnimCatalog.LocomotionState, out loco, 0); + loco.blendType = BlendTreeType.Simple1D; + loco.blendParameter = DrucladAnimCatalog.SpeedParam; + loco.useAutomaticThresholds = false; + loco.AddChild(idle, 0f); + loco.AddChild(walk, 2.2f); + loco.AddChild(run, 5.2f); + sm.defaultState = locoState; + + AnimatorState roarState = AddState(sm, "Roar", roar, new Vector3(420f, -160f, 0f)); + AnimatorState hurtState = AddState(sm, "Hurt", hit, new Vector3(620f, -40f, 0f)); + AnimatorState dieState = AddState(sm, DrucladAnimCatalog.DieState, die, new Vector3(620f, -160f, 0f)); + + AddTriggerAny(sm, DrucladAnimCatalog.RoarTrigger, roarState, locoState, 0.92f); + AddTriggerAny(sm, DrucladAnimCatalog.HurtTrigger, hurtState, locoState, 0.55f); + AddTriggerAny(sm, DrucladAnimCatalog.DieTrigger, dieState, null, 0.98f, exitOnly: true); + + AddAttackState(sm, locoState, "AshSwipeL", swipeL, DrucladAnimCatalog.AttackId.AshSwipeL); + AddAttackState(sm, locoState, "AshSwipeR", swipeR, DrucladAnimCatalog.AttackId.AshSwipeR); + AddAttackState(sm, locoState, "MagmaStomp", stomp, DrucladAnimCatalog.AttackId.MagmaStomp); + AddAttackState(sm, locoState, "CinderBolt", hurl, DrucladAnimCatalog.AttackId.CinderBolt); + AddAttackState(sm, locoState, "InfernoBreath", breath, DrucladAnimCatalog.AttackId.InfernoBreath); + AddAttackState(sm, locoState, "TwinBolts", hurl, DrucladAnimCatalog.AttackId.TwinBolts); + AddAttackState(sm, locoState, "EruptionStep", stomp, DrucladAnimCatalog.AttackId.EruptionStep); + AddAttackState(sm, locoState, "MeteorRain", clap, DrucladAnimCatalog.AttackId.MeteorRain); + AddAttackState(sm, locoState, "WorldbreakerSlam", overhead, DrucladAnimCatalog.AttackId.WorldbreakerSlam); + AddAttackState(sm, locoState, "BreathSwipeString", breath, DrucladAnimCatalog.AttackId.BreathSwipeString); + + EditorUtility.SetDirty(controller); + AssetDatabase.SaveAssets(); + log.AppendLine($" Built {AnimatorPath} with {clips.Count} clips."); + return controller; + } + + private static void AddAttackState( + AnimatorStateMachine sm, + AnimatorState loco, + string stateName, + AnimationClip clip, + DrucladAnimCatalog.AttackId id) + { + if (!DrucladAnimCatalog.TryGet(id, out DrucladAnimCatalog.AttackDef def)) + return; + + AnimatorState state = AddState(sm, stateName, clip, new Vector3(420f, 40f + (int)id * 36f, 0f)); + AddTriggerAny(sm, def.TriggerName, state, loco, def.RecoveryNormalized); + } + + private static AnimatorState AddState(AnimatorStateMachine sm, string name, AnimationClip clip, Vector3 pos) + { + AnimatorState state = sm.AddState(name, pos); + state.motion = clip; + state.writeDefaultValues = true; + return state; + } + + private static void AddTriggerAny( + AnimatorStateMachine sm, + string trigger, + AnimatorState dst, + AnimatorState backTo, + float exitTime, + bool exitOnly = false) + { + AnimatorStateTransition any = sm.AddAnyStateTransition(dst); + any.AddCondition(AnimatorConditionMode.If, 0f, trigger); + if (!exitOnly) + any.AddCondition(AnimatorConditionMode.IfNot, 0f, DrucladAnimCatalog.DeadBool); + any.hasExitTime = false; + any.duration = 0.08f; + any.canTransitionToSelf = false; + + if (backTo == null || exitOnly) + return; + + AnimatorStateTransition back = dst.AddTransition(backTo); + back.hasExitTime = true; + back.exitTime = Mathf.Clamp01(exitTime); + back.duration = 0.1f; + back.hasFixedDuration = true; + } + + private static Dictionary LoadClipsFromFolder() + { + var map = new Dictionary(StringComparer.OrdinalIgnoreCase); + string[] guids = AssetDatabase.FindAssets("t:AnimationClip", new[] { ClipsFolder }); + for (int i = 0; i < guids.Length; i++) + { + string path = AssetDatabase.GUIDToAssetPath(guids[i]); + foreach (Object sub in AssetDatabase.LoadAllAssetsAtPath(path)) + { + if (sub is not AnimationClip clip || clip.name.StartsWith("__", StringComparison.Ordinal)) + continue; + if (!map.ContainsKey(clip.name)) + map.Add(clip.name, clip); + string fileKey = Path.GetFileNameWithoutExtension(path); + if (!map.ContainsKey(fileKey)) + map.Add(fileKey, clip); + } + } + + return map; + } + + private static AnimationClip FindClip(Dictionary clips, params string[] keys) + { + foreach (KeyValuePair pair in clips) + { + string n = pair.Key.ToLowerInvariant(); + for (int i = 0; i < keys.Length; i++) + { + if (n.Contains(keys[i].ToLowerInvariant())) + return pair.Value; + } + } + + return null; + } + + private static AnimationClip FirstClip(Dictionary clips) + { + foreach (KeyValuePair pair in clips) + return pair.Value; + return null; + } + + private static DrucladLootTable EnsureLootTable( + StringBuilder log, + Item emberAsh, + Item cinderScale, + Item hornShard, + Item fireHeart) + { + DrucladLootTable table = AssetDatabase.LoadAssetAtPath(LootTablePath); + if (table == null) + { + table = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(table, LootTablePath); + log.AppendLine($" Created {LootTablePath}"); + } + + // weightMul 0 → MarketItemRarity tier alone sets the roll rate. + table.minBossRolls = 2; + table.maxBossRolls = 4; + table.includeGenericTier = true; + table.itemDatabase = AssetDatabase.LoadAssetAtPath(ItemDatabasePath); + table.minGenericRolls = 1; + table.maxGenericRolls = 2; + table.maxGenericTier = MarketItemRarity.Tier.Rare; + table.genericMinAmount = 1; + table.genericMaxAmount = 2; + table.dropSpacing = 0.65f; + table.bossPool = new[] + { + new DrucladLootTable.Entry { item = emberAsh, weightMul = 0f, minAmount = 2, maxAmount = 5 }, + new DrucladLootTable.Entry { item = cinderScale, weightMul = 0f, minAmount = 1, maxAmount = 3 }, + new DrucladLootTable.Entry { item = hornShard, weightMul = 0f, minAmount = 1, maxAmount = 1 }, + new DrucladLootTable.Entry { item = fireHeart, weightMul = 0f, minAmount = 1, maxAmount = 1 }, + }; + EditorUtility.SetDirty(table); + log.AppendLine(" Wired Druclad loot pool (tier-weighted Common→Epic)."); + return table; + } + + private static Item EnsureItem(string path, int id, string itemName, string description, int maxStack) + { + Item item = AssetDatabase.LoadAssetAtPath(path); + if (item == null) + { + item = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(item, path); + } + + item.id = id; + item.itemName = itemName; + item.description = description; + item.maxStack = Mathf.Max(1, maxStack); + EditorUtility.SetDirty(item); + return item; + } + + private static void RegisterItemInDatabase(StringBuilder log, Item item) + { + if (item == null) + return; + + ItemDatabase db = AssetDatabase.LoadAssetAtPath(ItemDatabasePath); + if (db == null) + { + log.AppendLine($" WARN: ItemDatabase missing at {ItemDatabasePath}"); + return; + } + + if (db.items == null) + db.items = new List(); + + for (int i = db.items.Count - 1; i >= 0; i--) + { + if (db.items[i] == null) + db.items.RemoveAt(i); + } + + bool already = false; + for (int i = 0; i < db.items.Count; i++) + { + Item existing = db.items[i]; + if (existing == item || (existing != null && existing.id == item.id)) + { + db.items[i] = item; + already = true; + break; + } + } + + if (!already) + { + db.items.Add(item); + log.AppendLine($" Registered item '{item.itemName}' (id={item.id}) in database."); + } + + EditorUtility.SetDirty(db); + } + + private static void RecreatePrefab( + StringBuilder log, + RuntimeAnimatorController animator, + DrucladLootTable lootTable) + { + GameObject modelPrefab = AssetDatabase.LoadAssetAtPath(ModelPath); + if (modelPrefab == null) + { + log.AppendLine($" ERROR: model missing at {ModelPath}"); + return; + } + + GameObject existing = AssetDatabase.LoadAssetAtPath(PrefabPath); + if (existing != null) + { + WireExistingPrefab(existing, animator, lootTable, log); + AssignNetworkAssetId(existing, NetworkAssetId, log); + MirrorResourcesCopy(log); + return; + } + + GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(modelPrefab); + if (instance == null) + { + log.AppendLine(" ERROR: failed to instantiate Druclad model."); + return; + } + + try + { + instance.name = "Druclad"; + instance.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity); + instance.transform.localScale = Vector3.one * ModelScale; + WireRootComponents(instance, animator, lootTable, log); + GameObject saved = PrefabUtility.SaveAsPrefabAsset(instance, PrefabPath); + if (saved != null) + { + AssignNetworkAssetId(saved, NetworkAssetId, log); + log.AppendLine($" Created {PrefabPath}"); + MirrorResourcesCopy(log); + } + } + finally + { + Object.DestroyImmediate(instance); + } + } + + private static void WireExistingPrefab( + GameObject prefabAsset, + RuntimeAnimatorController animator, + DrucladLootTable lootTable, + StringBuilder log) + { + string path = AssetDatabase.GetAssetPath(prefabAsset); + GameObject instance = PrefabUtility.LoadPrefabContents(path); + try + { + WireRootComponents(instance, animator, lootTable, log); + PrefabUtility.SaveAsPrefabAsset(instance, path); + log.AppendLine($" Updated existing {PrefabPath}."); + } + finally + { + PrefabUtility.UnloadPrefabContents(instance); + } + } + + private static void WireRootComponents( + GameObject root, + RuntimeAnimatorController animator, + DrucladLootTable lootTable, + StringBuilder log) + { + if (root.GetComponent() == null) + root.AddComponent(); + if (root.GetComponent() == null) + root.AddComponent(); + if (root.GetComponent() == null) + root.AddComponent(); + + CharacterController cc = root.GetComponent(); + if (cc == null) + cc = root.AddComponent(); + cc.height = 3.8f; + cc.radius = 1.05f; + cc.center = new Vector3(0f, 1.9f, 0f); + cc.slopeLimit = 50f; + cc.stepOffset = 0.55f; + + Health health = root.GetComponent(); + if (health == null) + health = root.AddComponent(); + health.ConfigureMaxHealth(BossMaxHealth, healToFull: true); + health.DestroyOnDeath = false; + + EnsureHurtboxChild(root.transform); + + AudioSource audio = root.GetComponent(); + if (audio == null) + audio = root.AddComponent(); + audio.spatialBlend = 1f; + audio.playOnAwake = false; + audio.maxDistance = 48f; + + DrucladFirePresentation firePresentation = root.GetComponent(); + if (firePresentation == null) + firePresentation = root.AddComponent(); + + Transform bodyFire = EnsureBodyFireChild(root.transform); + + Animator anim = root.GetComponentInChildren(true); + if (anim == null) + anim = root.AddComponent(); + if (animator != null) + anim.runtimeAnimatorController = animator; + Avatar avatar = LoadDrucladAvatar(); + if (avatar != null) + anim.avatar = avatar; + anim.applyRootMotion = false; + anim.cullingMode = AnimatorCullingMode.AlwaysAnimate; + + NetworkAnimator netAnim = root.GetComponent(); + if (netAnim != null) + netAnim.animator = anim; + + DrucladController controller = root.GetComponent(); + if (controller == null) + controller = root.AddComponent(); + + DrucladFireBreathVolume breath = root.GetComponent(); + if (breath == null) + breath = root.AddComponent(); + + SerializedObject so = new SerializedObject(controller); + so.FindProperty("characterController").objectReferenceValue = cc; + so.FindProperty("health").objectReferenceValue = health; + so.FindProperty("animator").objectReferenceValue = anim; + so.FindProperty("defaultRuntimeAnimatorController").objectReferenceValue = animator; + so.FindProperty("breathVolume").objectReferenceValue = breath; + so.FindProperty("firePresentation").objectReferenceValue = firePresentation; + so.FindProperty("bodyAudio").objectReferenceValue = audio; + so.FindProperty("deathLootTable").objectReferenceValue = lootTable; + GameObject lootBag = AssetDatabase.LoadAssetAtPath(LootBagPath); + if (lootBag != null) + so.FindProperty("lootBagPrefab").objectReferenceValue = lootBag; + so.FindProperty("maxHealthBoss").floatValue = BossMaxHealth; + so.ApplyModifiedPropertiesWithoutUndo(); + + SerializedObject fireSo = new SerializedObject(firePresentation); + fireSo.FindProperty("bodyAnchor").objectReferenceValue = root.transform; + fireSo.FindProperty("bodyAudio").objectReferenceValue = audio; + fireSo.FindProperty("bodyFireInstance").objectReferenceValue = bodyFire; + GameObject bodyFirePrefab = AssetDatabase.LoadAssetAtPath(BodyFirePrefabPath); + if (bodyFirePrefab != null) + fireSo.FindProperty("bodyFirePrefab").objectReferenceValue = bodyFirePrefab; + fireSo.FindProperty("bodyFireLocalOffset").vector3Value = new Vector3(0f, 1.15f, 0.1f); + fireSo.FindProperty("bodyFireBaseScale").floatValue = 1.85f; + fireSo.ApplyModifiedPropertiesWithoutUndo(); + + if (root.GetComponent() == null) + root.AddComponent(); + + log.AppendLine(" Wired DrucladController / body fire / Health / Hurtbox / CharacterController / Network*."); + } + + private static Transform EnsureBodyFireChild(Transform root) + { + Transform existing = root.Find(DrucladFirePresentation.EmbeddedChildName) + ?? root.Find("HellhoundBodyFire"); + if (existing != null) + { + if (existing.GetComponent() == null + && existing.GetComponent() == null) + { + existing.gameObject.AddComponent(); + } + + return existing; + } + + GameObject prefab = AssetDatabase.LoadAssetAtPath(BodyFirePrefabPath); + if (prefab != null) + { + GameObject embedded = (GameObject)PrefabUtility.InstantiatePrefab(prefab, root); + embedded.name = DrucladFirePresentation.EmbeddedChildName; + embedded.transform.localPosition = new Vector3(0f, 1.15f, 0.1f); + embedded.transform.localRotation = Quaternion.identity; + embedded.transform.localScale = Vector3.one * 1.85f; + if (embedded.GetComponent() == null) + embedded.AddComponent(); + return embedded.transform; + } + + var fallback = new GameObject(DrucladFirePresentation.EmbeddedChildName); + fallback.transform.SetParent(root, false); + fallback.transform.localPosition = new Vector3(0f, 1.15f, 0.1f); + fallback.transform.localScale = Vector3.one * 1.85f; + var lightGo = new GameObject("BodyGlow"); + lightGo.transform.SetParent(fallback.transform, false); + Light glow = lightGo.AddComponent(); + glow.type = LightType.Point; + glow.shadows = LightShadows.None; + glow.range = 8f; + glow.intensity = 3.2f; + glow.color = new Color(1.4f, 0.68f, 0.16f, 1f); + fallback.AddComponent(); + return fallback.transform; + } + + private static CapsuleCollider EnsureHurtboxChild(Transform root) + { + Transform hurtboxTransform = root.Find("Hurtbox"); + if (hurtboxTransform == null) + { + var hurtboxGo = new GameObject("Hurtbox"); + hurtboxTransform = hurtboxGo.transform; + hurtboxTransform.SetParent(root, false); + } + + CapsuleCollider hurtbox = hurtboxTransform.GetComponent(); + if (hurtbox == null) + hurtbox = hurtboxTransform.gameObject.AddComponent(); + + // Boss-scale capsule (taller/heavier than Troll). CreatureMeleeHurtbox.Awake + // forces non-trigger so player melee/spells can resolve Health. + hurtbox.isTrigger = false; + hurtbox.direction = 1; + hurtbox.height = 5.6f; + hurtbox.radius = 1.35f; + hurtbox.center = new Vector3(0f, 2.8f, 0.2f); + + if (hurtboxTransform.GetComponent() == null) + hurtboxTransform.gameObject.AddComponent(); + + return hurtbox; + } + + private static void AssignNetworkAssetId(GameObject prefab, uint assetId, StringBuilder log) + { + if (prefab == null) + return; + + string path = AssetDatabase.GetAssetPath(prefab); + GameObject instance = PrefabUtility.LoadPrefabContents(path); + try + { + NetworkIdentity identity = instance.GetComponent(); + if (identity == null) + identity = instance.AddComponent(); + + SerializedObject so = new SerializedObject(identity); + SerializedProperty assetIdProp = so.FindProperty("assetId"); + if (assetIdProp != null) + { + // Mirror stores assetId as uint via serialized field name variations. + assetIdProp.longValue = assetId; + so.ApplyModifiedPropertiesWithoutUndo(); + } + + PrefabUtility.SaveAsPrefabAsset(instance, path); + log.AppendLine($" NetworkIdentity assetId={assetId}"); + } + finally + { + PrefabUtility.UnloadPrefabContents(instance); + } + } + + private static void MirrorResourcesCopy(StringBuilder log) + { + GameObject prefab = AssetDatabase.LoadAssetAtPath(PrefabPath); + if (prefab == null) + return; + + if (File.Exists(ResourcesPrefabPath)) + AssetDatabase.DeleteAsset(ResourcesPrefabPath); + if (AssetDatabase.CopyAsset(PrefabPath, ResourcesPrefabPath)) + log.AppendLine($" Mirrored Resources/{Path.GetFileName(ResourcesPrefabPath)}"); + } + + private static void RegisterSpawnablePrefab(StringBuilder log, GameObject prefab) + { + if (prefab == null) + return; + + GameObject nmPrefab = AssetDatabase.LoadAssetAtPath(NetworkManagerPath); + if (nmPrefab == null) + { + log?.AppendLine(" WARN: NetworkManager prefab missing — spawn list not updated."); + return; + } + + string path = AssetDatabase.GetAssetPath(nmPrefab); + GameObject instance = PrefabUtility.LoadPrefabContents(path); + try + { + NetworkManager manager = instance.GetComponent(); + if (manager == null) + return; + + manager.spawnPrefabs ??= new List(); + if (!manager.spawnPrefabs.Contains(prefab)) + { + manager.spawnPrefabs.Add(prefab); + log?.AppendLine(" Registered Druclad on NetworkManager spawn list."); + } + + PrefabUtility.SaveAsPrefabAsset(instance, path); + } + finally + { + PrefabUtility.UnloadPrefabContents(instance); + } + } + + private static void EnsureFolder(string path) + { + if (AssetDatabase.IsValidFolder(path)) + return; + + string[] parts = path.Split('/'); + string cur = parts[0]; + for (int i = 1; i < parts.Length; i++) + { + string next = cur + "/" + parts[i]; + if (!AssetDatabase.IsValidFolder(next)) + AssetDatabase.CreateFolder(cur, parts[i]); + cur = next; + } + } +} +#endif diff --git a/Assets/Scripts/Creatures/Druclad/Editor/DrucladSetupEditorTools.cs.meta b/Assets/Scripts/Creatures/Druclad/Editor/DrucladSetupEditorTools.cs.meta new file mode 100644 index 000000000..092f79c52 --- /dev/null +++ b/Assets/Scripts/Creatures/Druclad/Editor/DrucladSetupEditorTools.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f058367093f1406b90815d17ac6a9eaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Creatures/Hellhound/HellhoundLootTable.cs b/Assets/Scripts/Creatures/Hellhound/HellhoundLootTable.cs index 0a6efe13c..f73d6de3a 100644 --- a/Assets/Scripts/Creatures/Hellhound/HellhoundLootTable.cs +++ b/Assets/Scripts/Creatures/Hellhound/HellhoundLootTable.cs @@ -44,13 +44,20 @@ public sealed class HellhoundLootTable : ScriptableObject for (int i = 0; i < pool.Length; i++) { Entry row = pool[i]; - if (row.item == null || row.weight <= 0f) + if (row.item == null) + continue; + + // Loot rate comes from MarketItemRarity tier; serialized weight is a relative mul only. + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, relativeMul: relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Min(row.minAmount, row.maxAmount); int hi = Mathf.Max(row.minAmount, row.maxAmount); row.minAmount = lo; row.maxAmount = hi; + row.weight = tierWeight; candidates.Add(row); } diff --git a/Assets/Scripts/Creatures/HorseLootTable.cs b/Assets/Scripts/Creatures/HorseLootTable.cs index 630e5d158..c00de0cb9 100644 --- a/Assets/Scripts/Creatures/HorseLootTable.cs +++ b/Assets/Scripts/Creatures/HorseLootTable.cs @@ -43,10 +43,10 @@ public sealed class HorseLootTable : ScriptableObject [Min(1)] public int genericMinAmount = 1; [Min(1)] public int genericMaxAmount = 2; - public IReadOnlyList RollDrops() + public IReadOnlyList RollDrops(float creatureQuality01 = 0f) { var results = new List(maxDistinctItems); - List candidates = BuildCandidatePool(); + List candidates = BuildCandidatePool(creatureQuality01); if (candidates.Count == 0) return results; @@ -85,7 +85,7 @@ public sealed class HorseLootTable : ScriptableObject CreatureLevelLootScaling.Context ctx = CreatureLevelLootScaling.Begin(origin); - IReadOnlyList drops = RollDrops(); + IReadOnlyList drops = RollDrops(ctx.quality01); Vector3 dropOrigin = origin.position + Vector3.up * 0.12f; int dropIndex = 0; @@ -106,11 +106,11 @@ public sealed class HorseLootTable : ScriptableObject return dropIndex > 0 || spawnedArrows || finishedLoot; } - private List BuildCandidatePool() + private List BuildCandidatePool(float creatureQuality01) { var candidates = new List(64); var seenIds = new HashSet(); - AppendExplicitEntries(candidates, seenIds, favoredPool); + AppendExplicitEntries(candidates, seenIds, favoredPool, creatureQuality01); if (!includeAllNonRareItems || genericNonRareWeight <= 0f) return candidates; @@ -132,13 +132,19 @@ public sealed class HorseLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromGenericLoot(item, catalog)) continue; + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) + continue; + if (ItemLootRarity.ResolveTier(item) > MarketItemRarity.Tier.Rare) + continue; + seenIds.Add(item.id); int maxAmount = Mathf.Max(1, Mathf.Min(genericHi, item.maxStack)); int minAmount = Mathf.Clamp(genericLo, 1, maxAmount); candidates.Add(new Entry { item = item, - weight = genericNonRareWeight, + weight = weight, minAmount = minAmount, maxAmount = maxAmount }); @@ -147,7 +153,11 @@ public sealed class HorseLootTable : ScriptableObject return candidates; } - private static void AppendExplicitEntries(List candidates, HashSet seenIds, Entry[] rows) + private static void AppendExplicitEntries( + List candidates, + HashSet seenIds, + Entry[] rows, + float creatureQuality01) { if (rows == null || rows.Length == 0) return; @@ -155,13 +165,19 @@ public sealed class HorseLootTable : ScriptableObject for (int i = 0; i < rows.Length; i++) { Entry row = rows[i]; - if (row.item == null || row.weight <= 0f || seenIds.Contains(row.item.id)) + if (row.item == null || seenIds.Contains(row.item.id)) + continue; + + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Min(row.minAmount, row.maxAmount); int hi = Mathf.Max(row.minAmount, row.maxAmount); row.minAmount = Mathf.Max(1, lo); row.maxAmount = Mathf.Max(row.minAmount, hi); + row.weight = tierWeight; seenIds.Add(row.item.id); candidates.Add(row); } diff --git a/Assets/Scripts/Creatures/Mammoth/MammothLootTable.cs b/Assets/Scripts/Creatures/Mammoth/MammothLootTable.cs index 7d6493d42..ab643eff2 100644 --- a/Assets/Scripts/Creatures/Mammoth/MammothLootTable.cs +++ b/Assets/Scripts/Creatures/Mammoth/MammothLootTable.cs @@ -52,7 +52,7 @@ public sealed class MammothLootTable : ScriptableObject [Header("Spread")] [Min(0.08f)] public float dropSpacing = 0.55f; - public IReadOnlyList RollDrops() + public IReadOnlyList RollDrops(float creatureQuality01 = 0f) { var results = new List(8); var pickedIds = new HashSet(); @@ -60,8 +60,8 @@ public sealed class MammothLootTable : ScriptableObject AddGuaranteed(mammothHide, minHideAmount, maxHideAmount, pickedIds, results); AddGuaranteed(mammothTusk, minTuskAmount, maxTuskAmount, pickedIds, results); - RollFromPool(mammothBonusPool, minMammothBonusRolls, maxMammothBonusRolls, pickedIds, results); - RollGenericCommonUncommon(catalog, pickedIds, results); + RollFromPool(mammothBonusPool, minMammothBonusRolls, maxMammothBonusRolls, pickedIds, results, creatureQuality01); + RollGenericCommonUncommon(catalog, pickedIds, results, creatureQuality01); return results; } @@ -77,7 +77,7 @@ public sealed class MammothLootTable : ScriptableObject CreatureLevelLootScaling.Context ctx = CreatureLevelLootScaling.Begin(origin); - IReadOnlyList drops = RollDrops(); + IReadOnlyList drops = RollDrops(ctx.quality01); Vector3 dropOrigin = origin.position + Vector3.up * 0.2f; int dropIndex = 0; @@ -123,7 +123,8 @@ public sealed class MammothLootTable : ScriptableObject int minRolls, int maxRolls, HashSet pickedIds, - List outDrops) + List outDrops, + float creatureQuality01 = 0f) { if (source == null || source.Length == 0) return; @@ -132,13 +133,19 @@ public sealed class MammothLootTable : ScriptableObject for (int i = 0; i < source.Length; i++) { Entry row = source[i]; - if (row.item == null || row.weight <= 0f || pickedIds.Contains(row.item.id)) + if (row.item == null || pickedIds.Contains(row.item.id)) + continue; + + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Max(1, Mathf.Min(row.minAmount, row.maxAmount)); int hi = Mathf.Max(lo, Mathf.Max(row.minAmount, row.maxAmount)); row.minAmount = lo; row.maxAmount = hi; + row.weight = tierWeight; candidates.Add(row); } @@ -167,12 +174,14 @@ public sealed class MammothLootTable : ScriptableObject } } - private void RollGenericCommonUncommon(MarketCatalog catalog, HashSet pickedIds, List outDrops) + private void RollGenericCommonUncommon( + MarketCatalog catalog, + HashSet pickedIds, + List outDrops, + float creatureQuality01 = 0f) { if (!includeGenericCommonUncommon) return; - if (genericCommonWeight <= 0f && genericUncommonWeight <= 0f) - return; ItemDatabase db = ResolveItemDatabase(); if (db?.items == null || db.items.Count == 0) @@ -189,15 +198,12 @@ public sealed class MammothLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromCreatureBonusLoot(item, catalog)) continue; - MarketItemRarity.Profile profile = MarketItemRarity.GetProfile(item); - bool uncommon = IsUncommon(item, catalog); - bool rare = ItemLootRarity.IsRare(item, catalog); - float weight = rare ? genericUncommonWeight * 1.35f - : uncommon ? genericUncommonWeight - : genericCommonWeight; - if (profile.Tier == MarketItemRarity.Tier.Abundant) - weight *= Mathf.Max(1f, profile.CatalogWeight); - if (weight <= 0f) + MarketItemRarity.Tier tier = MarketItemRarity.GetProfile(item).Tier; + if (tier > MarketItemRarity.Tier.Rare) + continue; + + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) continue; int maxAmount = Mathf.Max(1, Mathf.Min(genericMaxAmount, item.maxStack)); diff --git a/Assets/Scripts/Creatures/MushroomFairy/MushroomFairyLootTable.cs b/Assets/Scripts/Creatures/MushroomFairy/MushroomFairyLootTable.cs index 9a92b3024..1d8b36d05 100644 --- a/Assets/Scripts/Creatures/MushroomFairy/MushroomFairyLootTable.cs +++ b/Assets/Scripts/Creatures/MushroomFairy/MushroomFairyLootTable.cs @@ -44,13 +44,20 @@ public sealed class MushroomFairyLootTable : ScriptableObject for (int i = 0; i < pool.Length; i++) { Entry row = pool[i]; - if (row.item == null || row.weight <= 0f) + if (row.item == null) + continue; + + // Loot rate comes from MarketItemRarity tier; serialized weight is a relative mul only. + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, relativeMul: relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Min(row.minAmount, row.maxAmount); int hi = Mathf.Max(row.minAmount, row.maxAmount); row.minAmount = lo; row.maxAmount = hi; + row.weight = tierWeight; candidates.Add(row); } diff --git a/Assets/Scripts/Creatures/Nightling/Editor/NightlingSetupEditorTools.cs b/Assets/Scripts/Creatures/Nightling/Editor/NightlingSetupEditorTools.cs index 35ee4b70f..bf096196d 100644 --- a/Assets/Scripts/Creatures/Nightling/Editor/NightlingSetupEditorTools.cs +++ b/Assets/Scripts/Creatures/Nightling/Editor/NightlingSetupEditorTools.cs @@ -29,6 +29,7 @@ public static class NightlingSetupEditorTools private const string ShadowShardItemPath = "Assets/ScriptableObjects/Items/Nightling Shadow Shard.asset"; private const string StoneWispEyeItemPath = "Assets/ScriptableObjects/Items/Stone Wisp Eye.asset"; private const string GloomDustItemPath = "Assets/ScriptableObjects/Items/Gloom Dust.asset"; + private const string DuskFeeTokenPath = "Assets/ScriptableObjects/Items/Dusk-Fee Token.asset"; private const string EmissiveMaterialFolder = "Assets/ThirdParty/DownloadedAssets/stonewisp-mutant-stingray-rigged-and-animated/textures"; @@ -43,6 +44,7 @@ public static class NightlingSetupEditorTools private const int ShadowShardItemId = 519; private const int StoneWispEyeItemId = 520; private const int GloomDustItemId = 521; + private const int DuskFeeTokenId = 522; private const uint NetworkAssetId = 3123501245u; private const float PrefabScale = 0.62f; @@ -93,14 +95,22 @@ public static class NightlingSetupEditorTools "Fine ash left when a nightling's glow gutters out. Useful in dusk-tinted brews.", null, maxStack: 20); + Item duskFee = EnsureItem( + DuskFeeTokenPath, + DuskFeeTokenId, + "Dusk-Fee Token", + "A dull disc the Nightling court leaves when a dusk-fee is collected. Still warm after sundown. Nightling-only find.", + null, + maxStack: 5); RegisterItemInDatabase(log, hide); RegisterItemInDatabase(log, essence); RegisterItemInDatabase(log, shadowShard); RegisterItemInDatabase(log, stoneWispEye); RegisterItemInDatabase(log, gloomDust); + RegisterItemInDatabase(log, duskFee); - NightlingLootTable lootTable = EnsureLootTable(log, hide, essence, shadowShard, stoneWispEye, gloomDust); + NightlingLootTable lootTable = EnsureLootTable(log, hide, essence, shadowShard, stoneWispEye, gloomDust, duskFee); NightlingRigRefsSetup.CreateOrUpdateRigRefs(log: false); RecreateNightlingPrefab(log, animator, lootTable); RegisterSpawnablePrefab(log, AssetDatabase.LoadAssetAtPath(PrefabPath)); @@ -731,6 +741,12 @@ public static class NightlingSetupEditorTools nightlingSo.FindProperty("mortarChargeKnockMulAtMax").floatValue = 1.9f; nightlingSo.FindProperty("mortarChargeRadiusMulAtMax").floatValue = 1.55f; nightlingSo.FindProperty("mortarChargeVisualScaleAtMax").floatValue = 2.65f; + SerializedProperty chargeDmg = nightlingSo.FindProperty("chargeContactDamage"); + if (chargeDmg != null) chargeDmg.floatValue = 10f; + SerializedProperty chargeRadius = nightlingSo.FindProperty("chargeContactRadius"); + if (chargeRadius != null) chargeRadius.floatValue = 1.35f; + SerializedProperty chargeInterval = nightlingSo.FindProperty("chargeContactInterval"); + if (chargeInterval != null) chargeInterval.floatValue = 0.35f; nightlingSo.FindProperty("mortarArcGravity").floatValue = 24f; nightlingSo.FindProperty("mortarLeadSeconds").floatValue = 0.55f; nightlingSo.FindProperty("mortarLeadAccuracy").floatValue = 0.42f; @@ -830,7 +846,8 @@ public static class NightlingSetupEditorTools Item essence, Item shadowShard, Item stoneWispEye, - Item gloomDust) + Item gloomDust, + Item duskFee) { NightlingLootTable table = AssetDatabase.LoadAssetAtPath(LootTablePath); if (table == null) @@ -848,6 +865,10 @@ public static class NightlingSetupEditorTools table.genericNonRareWeight = 1f; table.genericMinAmount = 1; table.genericMaxAmount = 2; + table.signatureRareItem = duskFee; + table.signatureRareChance = 0.1f; + table.signatureRareMinAmount = 1; + table.signatureRareMaxAmount = 1; table.favoredPool = new[] { new NightlingLootTable.Entry { item = hide, weight = 12f, minAmount = 1, maxAmount = 2 }, @@ -863,6 +884,7 @@ public static class NightlingSetupEditorTools int genericCount = table.itemDatabase != null ? table.itemDatabase.items?.Count ?? 0 : 0; log.AppendLine( $" Nightling loot: favored={table.favoredPool.Length} bonus={table.bonusPool.Length} " + + $"signature={(duskFee != null ? duskFee.itemName : "none")}@{table.signatureRareChance:P0} " + $"+ up to {genericCount} non-rare items (1–3 loot bags per kill)."); return table; } diff --git a/Assets/Scripts/Creatures/Nightling/NightlingController.cs b/Assets/Scripts/Creatures/Nightling/NightlingController.cs index 4ce6db3e1..0357dfad9 100644 --- a/Assets/Scripts/Creatures/Nightling/NightlingController.cs +++ b/Assets/Scripts/Creatures/Nightling/NightlingController.cs @@ -151,6 +151,13 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall [SerializeField] private float mortarChargeRadiusMulAtMax = 1.55f; [Tooltip("Charge VFX scale at full charge.")] [SerializeField] private float mortarChargeVisualScaleAtMax = 2.65f; + [Header("Charge contact damage")] + [Tooltip("Walking into the swirling charge orb hurts the player while an attack is winding up.")] + [SerializeField] private float chargeContactDamage = 10f; + [SerializeField] private float chargeContactRadius = 1.35f; + [SerializeField] private float chargeContactInterval = 0.35f; + [SerializeField] private float chargeContactKnockPlanar = 6.5f; + [SerializeField] private float chargeContactKnockLift = 2.2f; [SerializeField] private float mortarArcGravity = 24f; [SerializeField] private float mortarLeadSeconds = 0.55f; [Tooltip("0 = aim at current player position, 1 = full movement prediction.")] @@ -247,6 +254,9 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall private float lastDamagedPlayerTime = -999f; private bool attackFxApplied; private GameObject activeAttackChargeFx; + private bool activeChargeIsMortar; + private float nextChargeContactDamageTime = -999f; + private static readonly Collider[] s_chargeContactHits = new Collider[24]; private int debugCombatWindupSession = -1; private int debugCombatReadySession = -1; private static readonly Dictionary s_globalNextNightlingHitAllowed = new(16); @@ -1100,6 +1110,9 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall if (output.mode == NightlingBrain.AiMode.Mortar) UpdateMortarLaunchWindow(); + if (output.mode is NightlingBrain.AiMode.Attack or NightlingBrain.AiMode.Mortar) + UpdateChargeContactDamage(); + float locomotionSpeed = output.mode is NightlingBrain.AiMode.Attack or NightlingBrain.AiMode.Mortar or NightlingBrain.AiMode.Hurt @@ -1711,6 +1724,8 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall private void PlayAttackChargeFx(bool mortarCharge) { ClearAttackChargeFx(); + activeChargeIsMortar = mortarCharge; + nextChargeContactDamageTime = Time.time; float duration = mortarCharge ? mortarMaxCharge + 0.35f @@ -1732,6 +1747,7 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall private void SpawnAttackChargeFxLocal(bool mortarCharge, float duration, float visualScaleAtMax) { + activeChargeIsMortar = mortarCharge; activeAttackChargeFx = NightlingShadowBallAttackFx.AttachAttackCharge( transform, GetAttackChargeLocalOffset(mortarCharge), @@ -1747,6 +1763,76 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall Destroy(activeAttackChargeFx); activeAttackChargeFx = null; + activeChargeIsMortar = false; + } + + /// + /// Players who walk into the swirling charge orb take periodic contact damage + /// while melee / mortar is winding up. + /// + private void UpdateChargeContactDamage() + { + if (!HasAiAuthority || isDead) + return; + if (Time.time < nextChargeContactDamageTime) + return; + + // Prefer live charge VFX; fall back to charge socket while mortar/melee windup is active. + bool charging = activeAttackChargeFx != null + || (activeChargeIsMortar && mortarWindupStartedTime >= 0f && lastLaunchedMortarSessionId != mortarSessionId) + || (!activeChargeIsMortar && Time.time < attackStartedTime + Mathf.Max(0.35f, attackHitDelay)); + if (!charging) + return; + + nextChargeContactDamageTime = Time.time + Mathf.Max(0.12f, chargeContactInterval); + + float charge01 = activeChargeIsMortar ? GetMortarCharge01() : 0.55f; + float radiusMul = activeChargeIsMortar + ? Mathf.Lerp(1f, mortarChargeRadiusMulAtMax, charge01) + : Mathf.Lerp(1f, 1.25f, charge01); + float radius = Mathf.Max(0.55f, chargeContactRadius * radiusMul); + float damage = chargeContactDamage * Mathf.Lerp(0.75f, activeChargeIsMortar ? 1.55f : 1.15f, charge01); + if (damage <= 0.5f) + return; + + Vector3 center = activeAttackChargeFx != null + ? activeAttackChargeFx.transform.position + : transform.TransformPoint(GetAttackChargeLocalOffset(activeChargeIsMortar)); + + int hitCount = Physics.OverlapSphereNonAlloc( + center, + radius, + s_chargeContactHits, + attackHitMask, + QueryTriggerInteraction.Ignore); + + for (int i = 0; i < hitCount; i++) + { + Collider hit = s_chargeContactHits[i]; + if (hit == null) + continue; + if (hit.transform == transform || hit.transform.IsChildOf(transform)) + continue; + + PlayerHealth playerHealth = hit.GetComponentInParent(); + if (playerHealth == null || playerHealth.currentHealth <= 0.5f) + continue; + if (!CanGloballyHitPlayer(playerHealth, Time.time)) + continue; + + Transform player = playerHealth.transform; + Vector3 knock = ComputeMortarKnockImpulse( + player, + center, + chargeContactKnockPlanar, + chargeContactKnockLift); + NightlingCombatDebug.RegisterKnockback(this, playerHealth, knock); + playerHealth.TakeDamage(damage, center, knock); + RegisterGlobalNightlingHit(playerHealth, Time.time); + NightlingCombatDebug.Log(this, + $"CHARGE CONTACT dmg={damage:F1} radius={radius:F2} charge={charge01:F2} " + + $"player={player.name} HP={playerHealth.currentHealth:F1}"); + } } private Vector3 GetAttackChargeLocalOffset(bool mortarCharge) @@ -2825,6 +2911,11 @@ public sealed class NightlingController : NetworkBehaviour, ICreatureStartleCall mortarChargeKnockMulAtMax = Mathf.Clamp(mortarChargeKnockMulAtMax, 1f, 3.5f); mortarChargeRadiusMulAtMax = Mathf.Clamp(mortarChargeRadiusMulAtMax, 1f, 2.5f); mortarChargeVisualScaleAtMax = Mathf.Clamp(mortarChargeVisualScaleAtMax, 1.2f, 4f); + chargeContactDamage = Mathf.Clamp(chargeContactDamage, 0f, 40f); + chargeContactRadius = Mathf.Clamp(chargeContactRadius, 0.45f, 4f); + chargeContactInterval = Mathf.Clamp(chargeContactInterval, 0.12f, 1.5f); + chargeContactKnockPlanar = Mathf.Clamp(chargeContactKnockPlanar, 0f, 30f); + chargeContactKnockLift = Mathf.Clamp(chargeContactKnockLift, 0f, 20f); mortarCooldown = Mathf.Max(1.2f, mortarCooldown); mortarDamage = Mathf.Clamp(mortarDamage, 0f, 80f); mortarExplosionRadius = Mathf.Clamp(mortarExplosionRadius, 2f, 14f); diff --git a/Assets/Scripts/Creatures/Nightling/NightlingLootTable.cs b/Assets/Scripts/Creatures/Nightling/NightlingLootTable.cs index 510b7504f..db1895985 100644 --- a/Assets/Scripts/Creatures/Nightling/NightlingLootTable.cs +++ b/Assets/Scripts/Creatures/Nightling/NightlingLootTable.cs @@ -39,6 +39,13 @@ public sealed class NightlingLootTable : ScriptableObject [Header("Secondary themed drops")] public Entry[] bonusPool; + [Header("Signature rare (Nightling-only)")] + [Tooltip("Exclusive rare drop — rolled separately so it feels special when it lands.")] + public Item signatureRareItem; + [Range(0f, 1f)] public float signatureRareChance = 0.1f; + [Min(1)] public int signatureRareMinAmount = 1; + [Min(1)] public int signatureRareMaxAmount = 1; + [Header("All other non-rare items")] public ItemDatabase itemDatabase; public bool includeAllNonRareItems = true; @@ -46,16 +53,25 @@ public sealed class NightlingLootTable : ScriptableObject [Min(1)] public int genericMinAmount = 1; [Min(1)] public int genericMaxAmount = 2; - public IReadOnlyList RollDrops() + public IReadOnlyList RollDrops(float creatureQuality01 = 0f) { - var results = new List(maxDistinctItems); - List candidates = BuildCandidatePool(); + var results = new List(maxDistinctItems + 1); + var seenIds = new HashSet(); + + TryRollSignatureRare(results, seenIds, creatureQuality01); + + List candidates = BuildCandidatePool(creatureQuality01, seenIds); if (candidates.Count == 0) return results; + int remainingSlots = Mathf.Max(0, maxDistinctItems - results.Count); + if (remainingSlots <= 0) + return results; + int loDistinct = Mathf.Min(minDistinctItems, candidates.Count); int hiDistinct = Mathf.Min(Mathf.Max(minDistinctItems, maxDistinctItems), candidates.Count); int pickCount = Random.Range(loDistinct, hiDistinct + 1); + pickCount = Mathf.Min(pickCount, remainingSlots); for (int pick = 0; pick < pickCount; pick++) { @@ -70,12 +86,42 @@ public sealed class NightlingLootTable : ScriptableObject if (amount <= 0) continue; + seenIds.Add(chosen.item.id); results.Add(new ResolvedDrop { item = chosen.item, amount = amount }); } return results; } + private void TryRollSignatureRare( + List results, + HashSet seenIds, + float creatureQuality01) + { + if (signatureRareItem == null || signatureRareItem.id <= 0) + return; + if (seenIds.Contains(signatureRareItem.id)) + return; + + float chance = signatureRareChance; + // High-level Nightlings pay the fee more often. + chance = Mathf.Clamp01(Mathf.Lerp(chance, Mathf.Min(1f, chance * 2.2f), Mathf.Clamp01(creatureQuality01))); + if (chance <= 0f || Random.value > chance) + return; + + int lo = Mathf.Max(1, Mathf.Min(signatureRareMinAmount, signatureRareMaxAmount)); + int hi = Mathf.Max(lo, Mathf.Max(signatureRareMinAmount, signatureRareMaxAmount)); + if (creatureQuality01 > 0.72f && hi < signatureRareItem.maxStack) + hi = Mathf.Min(signatureRareItem.maxStack, hi + 1); + + int amount = Random.Range(lo, hi + 1); + if (amount <= 0) + return; + + seenIds.Add(signatureRareItem.id); + results.Add(new ResolvedDrop { item = signatureRareItem, amount = amount }); + } + public bool TrySpawnDrops(Transform origin, GameObject lootBagPrefab) { if (origin == null || lootBagPrefab == null) @@ -94,7 +140,7 @@ public sealed class NightlingLootTable : ScriptableObject int oldMax = maxDistinctItems; minDistinctItems = minDistinct; maxDistinctItems = maxDistinct; - IReadOnlyList drops = RollDrops(); + IReadOnlyList drops = RollDrops(ctx.quality01); minDistinctItems = oldMin; maxDistinctItems = oldMax; Vector3 dropOrigin = origin.position + Vector3.up * 0.12f; @@ -117,13 +163,13 @@ public sealed class NightlingLootTable : ScriptableObject return dropIndex > 0 || spawnedArrows || finishedLoot; } - private List BuildCandidatePool() + private List BuildCandidatePool(float creatureQuality01, HashSet seenIds) { var candidates = new List(64); - var seenIds = new HashSet(); + seenIds ??= new HashSet(); - AppendExplicitEntries(candidates, seenIds, favoredPool); - AppendExplicitEntries(candidates, seenIds, bonusPool); + AppendExplicitEntries(candidates, seenIds, favoredPool, creatureQuality01); + AppendExplicitEntries(candidates, seenIds, bonusPool, creatureQuality01); if (includeAllNonRareItems && genericNonRareWeight > 0f) { @@ -142,10 +188,11 @@ public sealed class NightlingLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromCreatureBonusLoot(item, catalog)) continue; + if (ItemLootRarity.ResolveTier(item) > MarketItemRarity.Tier.Rare) + continue; - bool rare = ItemLootRarity.IsRare(item, catalog); - float weight = rare ? genericNonRareWeight * 0.28f : genericNonRareWeight; - if (weight <= 0f) + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) continue; seenIds.Add(item.id); @@ -165,7 +212,11 @@ public sealed class NightlingLootTable : ScriptableObject return candidates; } - private static void AppendExplicitEntries(List candidates, HashSet seenIds, Entry[] rows) + private static void AppendExplicitEntries( + List candidates, + HashSet seenIds, + Entry[] rows, + float creatureQuality01) { if (rows == null || rows.Length == 0) return; @@ -173,13 +224,19 @@ public sealed class NightlingLootTable : ScriptableObject for (int i = 0; i < rows.Length; i++) { Entry row = rows[i]; - if (row.item == null || row.weight <= 0f || seenIds.Contains(row.item.id)) + if (row.item == null || seenIds.Contains(row.item.id)) + continue; + + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Min(row.minAmount, row.maxAmount); int hi = Mathf.Max(row.minAmount, row.maxAmount); row.minAmount = Mathf.Max(1, lo); row.maxAmount = Mathf.Max(row.minAmount, hi); + row.weight = tierWeight; seenIds.Add(row.item.id); candidates.Add(row); } diff --git a/Assets/Scripts/Creatures/Skeleton/SkeletonLootTable.cs b/Assets/Scripts/Creatures/Skeleton/SkeletonLootTable.cs index e0127dd6a..2fe0dec70 100644 --- a/Assets/Scripts/Creatures/Skeleton/SkeletonLootTable.cs +++ b/Assets/Scripts/Creatures/Skeleton/SkeletonLootTable.cs @@ -70,7 +70,7 @@ public sealed class SkeletonLootTable : ScriptableObject if (bonusChance > 0f && Random.value <= bonusChance) { - List picks = RollBonusItems(ctx.pickedIds, commonW, rareW, minRolls, maxRolls); + List picks = RollBonusItems(ctx.pickedIds, commonW, rareW, minRolls, maxRolls, ctx.quality01); for (int i = 0; i < picks.Count; i++) { Item item = picks[i]; @@ -108,15 +108,13 @@ public sealed class SkeletonLootTable : ScriptableObject float commonW, float rareW, int minRolls, - int maxRolls) + int maxRolls, + float creatureQuality01 = 0f) { var results = new List(2); ItemDatabase db = ResolveItemDatabase(); if (db?.items == null || db.items.Count == 0) return results; - if (commonW <= 0f && rareW <= 0f) - return results; - MarketCatalog catalog = MarketCatalog.Resolve(null); var candidates = new List<(Item item, float weight)>(db.items.Count); for (int i = 0; i < db.items.Count; i++) @@ -127,9 +125,12 @@ public sealed class SkeletonLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromCreatureBonusLoot(item, catalog)) continue; - bool rare = ItemLootRarity.IsRare(item, catalog); - float weight = rare ? rareW : commonW; - if (weight <= 0f) + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) + continue; + + // Bonus skeleton loot stays at Rare or below. + if (ItemLootRarity.ResolveTier(item) > MarketItemRarity.Tier.Rare) continue; candidates.Add((item, weight)); diff --git a/Assets/Scripts/Creatures/Troll/TrollLootTable.cs b/Assets/Scripts/Creatures/Troll/TrollLootTable.cs index 5b7e3e990..5372d6587 100644 --- a/Assets/Scripts/Creatures/Troll/TrollLootTable.cs +++ b/Assets/Scripts/Creatures/Troll/TrollLootTable.cs @@ -44,14 +44,14 @@ public sealed class TrollLootTable : ScriptableObject [Header("Spread")] [Min(0.08f)] public float dropSpacing = 0.52f; - public IReadOnlyList RollDrops() + public IReadOnlyList RollDrops(float creatureQuality01 = 0f) { var results = new List(8); var pickedIds = new HashSet(); MarketCatalog catalog = MarketCatalog.Resolve(null); - RollFromPool(trollSpecificPool, minTrollSpecificRolls, maxTrollSpecificRolls, pickedIds, results); - RollGenericCommonUncommon(catalog, pickedIds, results); + RollFromPool(trollSpecificPool, minTrollSpecificRolls, maxTrollSpecificRolls, pickedIds, results, creatureQuality01); + RollGenericCommonUncommon(catalog, pickedIds, results, creatureQuality01); return results; } @@ -67,7 +67,7 @@ public sealed class TrollLootTable : ScriptableObject CreatureLevelLootScaling.Context ctx = CreatureLevelLootScaling.Begin(origin); - IReadOnlyList drops = RollDrops(); + IReadOnlyList drops = RollDrops(ctx.quality01); Vector3 dropOrigin = origin.position + Vector3.up * 0.12f; int dropIndex = 0; @@ -93,7 +93,8 @@ public sealed class TrollLootTable : ScriptableObject int minRolls, int maxRolls, HashSet pickedIds, - List outDrops) + List outDrops, + float creatureQuality01 = 0f) { if (source == null || source.Length == 0) return; @@ -102,13 +103,19 @@ public sealed class TrollLootTable : ScriptableObject for (int i = 0; i < source.Length; i++) { Entry row = source[i]; - if (row.item == null || row.weight <= 0f || pickedIds.Contains(row.item.id)) + if (row.item == null || pickedIds.Contains(row.item.id)) + continue; + + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Max(1, Mathf.Min(row.minAmount, row.maxAmount)); int hi = Mathf.Max(lo, Mathf.Max(row.minAmount, row.maxAmount)); row.minAmount = lo; row.maxAmount = hi; + row.weight = tierWeight; candidates.Add(row); } @@ -137,12 +144,14 @@ public sealed class TrollLootTable : ScriptableObject } } - private void RollGenericCommonUncommon(MarketCatalog catalog, HashSet pickedIds, List outDrops) + private void RollGenericCommonUncommon( + MarketCatalog catalog, + HashSet pickedIds, + List outDrops, + float creatureQuality01 = 0f) { if (!includeGenericCommonUncommon) return; - if (genericCommonWeight <= 0f && genericUncommonWeight <= 0f) - return; ItemDatabase db = ResolveItemDatabase(); if (db?.items == null || db.items.Count == 0) @@ -159,15 +168,13 @@ public sealed class TrollLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromCreatureBonusLoot(item, catalog)) continue; - MarketItemRarity.Profile profile = MarketItemRarity.GetProfile(item); - bool uncommon = IsUncommon(item, catalog); - bool rare = ItemLootRarity.IsRare(item, catalog); - float weight = rare ? genericUncommonWeight * 1.35f - : uncommon ? genericUncommonWeight - : genericCommonWeight; - if (profile.Tier == MarketItemRarity.Tier.Abundant) - weight *= Mathf.Max(1f, profile.CatalogWeight); - if (weight <= 0f) + // Cap generic troll extras at Rare — Epic stays boss-themed. + MarketItemRarity.Tier tier = MarketItemRarity.GetProfile(item).Tier; + if (tier > MarketItemRarity.Tier.Rare) + continue; + + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) continue; int maxAmount = Mathf.Max(1, Mathf.Min(genericMaxAmount, item.maxStack)); diff --git a/Assets/Scripts/Creatures/Vikra/VikraLootTable.cs b/Assets/Scripts/Creatures/Vikra/VikraLootTable.cs index c5f1eed8c..73f1c9428 100644 --- a/Assets/Scripts/Creatures/Vikra/VikraLootTable.cs +++ b/Assets/Scripts/Creatures/Vikra/VikraLootTable.cs @@ -47,7 +47,7 @@ public sealed class VikraLootTable : ScriptableObject [Header("Spread")] [Min(0.08f)] public float dropSpacing = 0.5f; - public IReadOnlyList RollDrops() + public IReadOnlyList RollDrops(float creatureQuality01 = 0f) { var results = new List(6); var seenIds = new HashSet(); @@ -60,11 +60,11 @@ public sealed class VikraLootTable : ScriptableObject seenIds.Add(rawMeat.id); } - AppendWeightedPicks(results, seenIds, themedPool, minThemedItems, maxThemedItems); + AppendWeightedPicks(results, seenIds, themedPool, minThemedItems, maxThemedItems, creatureQuality01); if (randomGenericChance > 0f && Random.value <= randomGenericChance) { - List generics = BuildGenericCandidatePool(seenIds); + List generics = BuildGenericCandidatePool(seenIds, creatureQuality01); if (generics.Count > 0) { int index = PickWeightedIndex(generics); @@ -94,7 +94,7 @@ public sealed class VikraLootTable : ScriptableObject CreatureLevelLootScaling.Context ctx = CreatureLevelLootScaling.Begin(origin); - IReadOnlyList drops = RollDrops(); + IReadOnlyList drops = RollDrops(ctx.quality01); Vector3 dropOrigin = origin.position + Vector3.up * 0.18f; int dropIndex = 0; @@ -120,10 +120,11 @@ public sealed class VikraLootTable : ScriptableObject HashSet seenIds, Entry[] pool, int minPicks, - int maxPicks) + int maxPicks, + float creatureQuality01) { List candidates = new List(8); - AppendExplicitEntries(candidates, seenIds, pool); + AppendExplicitEntries(candidates, seenIds, pool, creatureQuality01); if (candidates.Count == 0) return; @@ -148,7 +149,7 @@ public sealed class VikraLootTable : ScriptableObject } } - private List BuildGenericCandidatePool(HashSet seenIds) + private List BuildGenericCandidatePool(HashSet seenIds, float creatureQuality01) { var candidates = new List(32); if (!includeAllNonRareItems || genericNonRareWeight <= 0f) @@ -170,13 +171,19 @@ public sealed class VikraLootTable : ScriptableObject if (!ItemLootRarity.CanDropFromGenericLoot(item, catalog)) continue; + if (ItemLootRarity.ResolveTier(item) > MarketItemRarity.Tier.Rare) + continue; + + float weight = ItemLootRarity.ResolveLootWeight(item, creatureQuality01); + if (weight <= 0.001f) + continue; int maxAmount = Mathf.Max(1, Mathf.Min(genericHi, item.maxStack)); int minAmount = Mathf.Clamp(genericLo, 1, maxAmount); candidates.Add(new Entry { item = item, - weight = genericNonRareWeight, + weight = weight, minAmount = minAmount, maxAmount = maxAmount }); @@ -185,7 +192,11 @@ public sealed class VikraLootTable : ScriptableObject return candidates; } - private static void AppendExplicitEntries(List candidates, HashSet seenIds, Entry[] rows) + private static void AppendExplicitEntries( + List candidates, + HashSet seenIds, + Entry[] rows, + float creatureQuality01) { if (rows == null || rows.Length == 0) return; @@ -193,13 +204,20 @@ public sealed class VikraLootTable : ScriptableObject for (int i = 0; i < rows.Length; i++) { Entry row = rows[i]; - if (row.item == null || row.weight <= 0f || seenIds.Contains(row.item.id)) + if (row.item == null || seenIds.Contains(row.item.id)) + continue; + + // Serialized weight is a relative mul only; 0/1 = pure MarketItemRarity tier rate. + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, creatureQuality01, relativeMul); + if (tierWeight <= 0.001f) continue; int lo = Mathf.Min(row.minAmount, row.maxAmount); int hi = Mathf.Max(row.minAmount, row.maxAmount); row.minAmount = Mathf.Max(1, lo); row.maxAmount = Mathf.Max(row.minAmount, hi); + row.weight = tierWeight; candidates.Add(row); } } diff --git a/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs b/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs index ef2c2ddf4..9e4df0a66 100644 --- a/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs +++ b/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs @@ -4,12 +4,16 @@ using UnityEngine; /// /// Disables Mirror IMGUI HUDs that allocate tens of KB every frame via OnGUI. /// CLERK: also re-assert after a short delay — NetworkManager can re-enable showGUI on play. +/// Clears sticky F3/F4 debug overlay prefs once so player/probe builds start without screen clutter. /// public static class ManafallDisableMirrorImgui { + private const string DebugOverlaysHiddenPrefsKey = "Manafall.DebugOverlaysHidden_v1"; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] private static void DisableHeavyImgui() { + ClearStickyDebugOverlayPrefsOnce(); KillMirrorImgui(); var go = new GameObject("ClerkMirrorHudKiller"); Object.DontDestroyOnLoad(go); @@ -17,6 +21,23 @@ public static class ManafallDisableMirrorImgui go.AddComponent(); } + /// + /// One-shot for installed players: turn off saved F3/F4 visibility that agents left on. + /// Does not run in the Editor (F3 still defaults on there). + /// + public static void ClearStickyDebugOverlayPrefsOnce() + { + if (Application.isEditor) + return; + if (PlayerPrefs.GetInt(DebugOverlaysHiddenPrefsKey, 0) != 0) + return; + + PlayerPrefs.SetInt("Manafall.ViewCostDebug", 0); + PlayerPrefs.SetInt("Manafall.MemorySpikeDebug", 0); + PlayerPrefs.SetInt(DebugOverlaysHiddenPrefsKey, 1); + PlayerPrefs.Save(); + } + public static void KillMirrorImgui() { NetworkManagerHUD[] huds = Object.FindObjectsByType( diff --git a/Assets/Scripts/Debug/VillageTeleportDebug.cs b/Assets/Scripts/Debug/VillageTeleportDebug.cs index 577501cc7..c588c2a76 100644 --- a/Assets/Scripts/Debug/VillageTeleportDebug.cs +++ b/Assets/Scripts/Debug/VillageTeleportDebug.cs @@ -1,27 +1,147 @@ using Mirror; using UnityEngine; +using UnityEngine.InputSystem; /// -/// Debug: press F5 to teleport the local player to Npc Village 1 (Forest landmark). +/// Debug: F4 teleports to the volcano island. F5 teleports to the void island. /// public static class VillageTeleportDebug { public const KeyCode TeleportKey = KeyCode.F5; + private static InputAction volcanoKey; + private static InputAction voidKey; + private static int lastPollFrame = -1; + private static bool volcanoHeld; + private static bool voidHeld; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] private static void EnsureDriver() { -#if !UNITY_EDITOR - return; -#else if (Object.FindFirstObjectByType() != null) return; var go = new GameObject(nameof(VillageTeleportDebugDriver)); Object.DontDestroyOnLoad(go); - go.hideFlags = HideFlags.HideAndDontSave; + go.hideFlags = HideFlags.HideInHierarchy; go.AddComponent(); -#endif + } + + /// Called from the local player so the keys still work if the hidden driver was dropped. + public static void PollIslandHotkeys() + { + if (!Application.isPlaying) + return; + if (lastPollFrame == Time.frameCount) + return; + lastPollFrame = Time.frameCount; + + EnsureKeys(); + if (Pressed(volcanoKey, ref volcanoHeld)) + CompleteJump(TryTeleportToVolcanoIsland(), "[VolcanoTeleport]"); + else if (Pressed(voidKey, ref voidHeld)) + CompleteJump(TryTeleportToVoidBiome(), "[VoidTeleport]"); + } + + private static void EnsureKeys() + { + if (volcanoKey != null) + return; + + volcanoKey = new InputAction("DebugVolcanoTeleport", InputActionType.Button); + volcanoKey.AddBinding("/f4"); + volcanoKey.Enable(); + + voidKey = new InputAction("DebugVoidTeleport", InputActionType.Button); + voidKey.AddBinding("/f5"); + voidKey.Enable(); + } + + private static bool Pressed(InputAction action, ref bool held) + { + bool down = action != null && action.IsPressed(); + bool edge = down && !held; + held = down; + if (edge || (action != null && action.WasPressedThisFrame())) + return true; + return false; + } + + private static void CompleteJump(string result, string tag) + { + if (result.StartsWith("Teleported")) + Debug.Log($"{tag} {result}"); + else + Debug.LogWarning($"{tag} {result}"); + } + + public static string TryTeleportToVolcanoIsland() + { + if (!Application.isPlaying) + return "Enter Play Mode first."; + + Transform player = ResolveLocalPlayer(); + if (player == null) + return "No local player found yet."; + + if (!IsPlayerReadyForWorld(player)) + return "Waiting for class select / limbo exit."; + + WorldGenerator world = Object.FindFirstObjectByType(); + if (world == null) + return "No WorldGenerator in scene."; + + world.EnsureWorldReady(); + if (!world.TryGetVolcanoPlayerSpawnPose(out Vector3 pos, out Quaternion rot)) + return "Volcano island is not ready yet."; + + return FinishIslandTeleport(player.gameObject, world, pos, rot, "the volcano island"); + } + + public static string TryTeleportToVoidBiome() + { + if (!Application.isPlaying) + return "Enter Play Mode first."; + + Transform player = ResolveLocalPlayer(); + if (player == null) + return "No local player found yet."; + + if (!IsPlayerReadyForWorld(player)) + return "Waiting for class select / limbo exit."; + + WorldGenerator world = Object.FindFirstObjectByType(); + if (world == null) + return "No WorldGenerator in scene."; + + world.EnsureWorldReady(); + if (!world.TryGetVoidPlayerSpawnPose(out Vector3 pos, out Quaternion rot)) + return "Void island is not ready yet."; + + return FinishIslandTeleport(player.gameObject, world, pos, rot, "the void island"); + } + + private static string FinishIslandTeleport( + GameObject player, + WorldGenerator world, + Vector3 pos, + Quaternion rot, + string placeName) + { + world.MarkPlayerSpawnHandledExternally(); + world.TryEnsureSpawnColliderReady(pos, radiusChunks: 1); + world.EnsurePhysicsGroundAroundWorldPosition(pos); + + PlayerFallthroughReposition.EnsureOn(player)?.NotifyIntentionalTeleport(pos, rot); + PlayerFirstSpawnPlacement.Teleport(player, pos, rot); + TrySyncNetworkTransform(player, pos, rot); + + PlayerRespawn respawn = player.GetComponent(); + respawn?.SetRespawnPoint(pos, rot); + world.MarkPlayerSpawnHandledExternally(); + PlayerFallthroughReposition.EnsureOn(player)?.NotifyIntentionalTeleport(pos, rot); + + return $"Teleported to {placeName} at {pos}."; } public static string TryTeleportToVillage() @@ -120,44 +240,8 @@ public static class VillageTeleportDebug [DefaultExecutionOrder(5000)] public sealed class VillageTeleportDebugDriver : MonoBehaviour { - private float nextRetryAt = -1f; - private bool pendingRetry; - private void Update() { - if (WasF5Pressed()) - { - pendingRetry = true; - nextRetryAt = -1f; - } - - if (!pendingRetry || Time.unscaledTime < nextRetryAt) - return; - - string result = VillageTeleportDebug.TryTeleportToVillage(); - bool waiting = result.StartsWith("No local player") - || result.StartsWith("No WorldGenerator") - || result.StartsWith("Waiting for class") - || result.StartsWith("Village not spawned"); - - if (waiting) - { - nextRetryAt = Time.unscaledTime + 0.4f; - return; - } - - pendingRetry = false; - if (result.StartsWith("Teleported")) - Debug.Log($"[VillageTeleport] {result}"); - else - Debug.LogWarning($"[VillageTeleport] {result}"); - } - - private static bool WasF5Pressed() - { - UnityEngine.InputSystem.Keyboard kb = UnityEngine.InputSystem.Keyboard.current; - if (kb != null && kb.f5Key.wasPressedThisFrame) - return true; - return Input.GetKeyDown(KeyCode.F5); + VillageTeleportDebug.PollIslandHotkeys(); } } diff --git a/Assets/Scripts/Disease.meta b/Assets/Scripts/Disease.meta new file mode 100644 index 000000000..efa59a10f --- /dev/null +++ b/Assets/Scripts/Disease.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e95a613ef6679b4e99d9d0b5bb8bb89 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Disease/DiseaseAmbientDriver.cs b/Assets/Scripts/Disease/DiseaseAmbientDriver.cs new file mode 100644 index 000000000..e9e77297e --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseAmbientDriver.cs @@ -0,0 +1,46 @@ +using Mirror; +using UnityEngine; + +/// +/// Slow server/offline tick that rolls swamp-weighted ambient disease contraction. +/// +[DisallowMultipleComponent] +public sealed class DiseaseAmbientDriver : MonoBehaviour +{ + private const float IntervalSeconds = 18f; + + private float nextTickAt; + + public static DiseaseAmbientDriver EnsureOn(GameObject player) + { + if (player == null) + return null; + + DiseaseAmbientDriver existing = player.GetComponent() + ?? player.GetComponentInChildren(true); + return existing != null ? existing : player.AddComponent(); + } + + private void OnEnable() + { + nextTickAt = Time.time + Random.Range(4f, IntervalSeconds); + } + + private void Update() + { + if (!HasAuthority()) + return; + + if (Time.time < nextTickAt) + return; + + nextTickAt = Time.time + IntervalSeconds; + DiseaseInfectionService.ServerTryAmbientTick(gameObject); + } + + private bool HasAuthority() + { + return NetworkServer.active + || (!NetworkClient.active && OfflinePlayMode.IsActive(true)); + } +} diff --git a/Assets/Scripts/Disease/DiseaseAmbientDriver.cs.meta b/Assets/Scripts/Disease/DiseaseAmbientDriver.cs.meta new file mode 100644 index 000000000..a9c25bf80 --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseAmbientDriver.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bf003be8be07ef545abbbbb078837608 \ No newline at end of file diff --git a/Assets/Scripts/Disease/DiseaseCatalog.cs b/Assets/Scripts/Disease/DiseaseCatalog.cs new file mode 100644 index 000000000..aa4a074d3 --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseCatalog.cs @@ -0,0 +1,175 @@ +using System; +using UnityEngine; + +/// Static definitions for the twelve mundane diseases. +public static class DiseaseCatalog +{ + public const int MaxConcurrent = 3; + public const int DiseaseCount = 12; + + /// Base per-creature-hit chance before disease/biome weights (~0.4%). + public const float BaseCombatHitChance = 0.004f; + + public enum Severity : byte + { + Mild = 0, + Moderate = 1, + Severe = 2, + } + + public readonly struct Definition + { + public readonly DiseaseId Id; + public readonly string DisplayName; + public readonly Severity Severity; + public readonly DiseaseSymptomKind Symptom; + public readonly int HealerCoinPrice; + public readonly int CureSignatureRecipeId; + public readonly float MinDurationSeconds; + public readonly float MaxDurationSeconds; + public readonly float CombatWeight; + public readonly float AmbientWeight; + public readonly float SwampMultiplier; + public readonly bool PrefersColdBiome; + public readonly bool PrefersUndead; + /// 1 = no strength drain. Multiplies effective Strength level and melee output. + public readonly float StrengthMultiplier; + + public Definition( + DiseaseId id, + string displayName, + Severity severity, + DiseaseSymptomKind symptom, + int healerCoinPrice, + int cureSignatureRecipeId, + float minDurationSeconds, + float maxDurationSeconds, + float combatWeight, + float ambientWeight, + float swampMultiplier, + bool prefersColdBiome = false, + bool prefersUndead = false, + float strengthMultiplier = 1f) + { + Id = id; + DisplayName = displayName; + Severity = severity; + Symptom = symptom; + HealerCoinPrice = healerCoinPrice; + CureSignatureRecipeId = cureSignatureRecipeId; + MinDurationSeconds = minDurationSeconds; + MaxDurationSeconds = maxDurationSeconds; + CombatWeight = combatWeight; + AmbientWeight = ambientWeight; + SwampMultiplier = swampMultiplier; + PrefersColdBiome = prefersColdBiome; + PrefersUndead = prefersUndead; + StrengthMultiplier = Mathf.Clamp(strengthMultiplier, 0.35f, 1f); + } + } + + private static readonly Definition[] Definitions = + { + new(DiseaseId.RawcapGut, "Rawcap Gut", Severity.Mild, DiseaseSymptomKind.PaleDot, + 90, 52, 95f, 150f, 0f, 0f, 1f), + new(DiseaseId.MarshCough, "Marsh Cough", Severity.Mild, DiseaseSymptomKind.StaminaRegenCut, + 110, 53, 120f, 220f, 0.15f, 1.4f, 8f), + new(DiseaseId.Frogitch, "Frogitch", Severity.Mild, DiseaseSymptomKind.WetScratchDot, + 100, 54, 100f, 180f, 0.2f, 1.1f, 6f), + new(DiseaseId.WoundFever, "Wound Fever", Severity.Moderate, DiseaseSymptomKind.FeverDot, + 200, 55, 140f, 260f, 1.2f, 0.05f, 3f, strengthMultiplier: 0.85f), + new(DiseaseId.Mirefoot, "Mirefoot", Severity.Moderate, DiseaseSymptomKind.MoveSlow, + 180, 56, 150f, 280f, 0.1f, 1.3f, 8f), + new(DiseaseId.BlackwaterBelly, "Blackwater Belly", Severity.Moderate, DiseaseSymptomKind.HungerDrain, + 220, 57, 140f, 250f, 0.9f, 0.4f, 7f, strengthMultiplier: 0.9f), + new(DiseaseId.Leechblood, "Leechblood", Severity.Moderate, DiseaseSymptomKind.HealTakenCut, + 240, 58, 160f, 280f, 1.1f, 0.05f, 7f, strengthMultiplier: 0.8f), + new(DiseaseId.BoneChillAgue, "Bone Chill Ague", Severity.Moderate, DiseaseSymptomKind.ColdVulnerability, + 210, 59, 150f, 270f, 1.0f, 0.05f, 0.35f, prefersColdBiome: true, strengthMultiplier: 0.85f), + new(DiseaseId.SwampRot, "Swamp Rot", Severity.Severe, DiseaseSymptomKind.RotDotMaxHp, + 420, 60, 200f, 360f, 0.7f, 0.55f, 8f, strengthMultiplier: 0.7f), + new(DiseaseId.RedscalePox, "Redscale Pox", Severity.Severe, DiseaseSymptomKind.DamageTakenUp, + 380, 61, 180f, 320f, 0.85f, 0.02f, 3f, strengthMultiplier: 0.8f), + new(DiseaseId.GraveDamp, "Grave Damp", Severity.Severe, DiseaseSymptomKind.StaminaSpikeDrain, + 400, 62, 180f, 340f, 0.75f, 0.02f, 1.5f, prefersUndead: true, strengthMultiplier: 0.75f), + new(DiseaseId.HollowLung, "Hollow Lung", Severity.Severe, DiseaseSymptomKind.SprintCostSpike, + 480, 63, 200f, 380f, 0.45f, 0.15f, 5f), + }; + + public static bool TryGet(DiseaseId id, out Definition def) + { + int index = (int)id - 1; + if (index < 0 || index >= Definitions.Length) + { + def = default; + return false; + } + + def = Definitions[index]; + return def.Id == id; + } + + public static Definition Get(DiseaseId id) + { + if (!TryGet(id, out Definition def)) + throw new ArgumentOutOfRangeException(nameof(id), id, "Unknown disease."); + return def; + } + + public static DiseaseId DiseaseForCureRecipe(int signatureRecipeId) + { + for (int i = 0; i < Definitions.Length; i++) + { + if (Definitions[i].CureSignatureRecipeId == signatureRecipeId) + return Definitions[i].Id; + } + + return DiseaseId.None; + } + + public static AlchemySignatureEffectKind CureEffectFor(DiseaseId id) + { + return id switch + { + DiseaseId.RawcapGut => AlchemySignatureEffectKind.CureRawcapGut, + DiseaseId.MarshCough => AlchemySignatureEffectKind.CureMarshCough, + DiseaseId.Frogitch => AlchemySignatureEffectKind.CureFrogitch, + DiseaseId.WoundFever => AlchemySignatureEffectKind.CureWoundFever, + DiseaseId.Mirefoot => AlchemySignatureEffectKind.CureMirefoot, + DiseaseId.BlackwaterBelly => AlchemySignatureEffectKind.CureBlackwaterBelly, + DiseaseId.Leechblood => AlchemySignatureEffectKind.CureLeechblood, + DiseaseId.BoneChillAgue => AlchemySignatureEffectKind.CureBoneChillAgue, + DiseaseId.SwampRot => AlchemySignatureEffectKind.CureSwampRot, + DiseaseId.RedscalePox => AlchemySignatureEffectKind.CureRedscalePox, + DiseaseId.GraveDamp => AlchemySignatureEffectKind.CureGraveDamp, + DiseaseId.HollowLung => AlchemySignatureEffectKind.CureHollowLung, + _ => AlchemySignatureEffectKind.None, + }; + } + + public static DiseaseId DiseaseForCureEffect(AlchemySignatureEffectKind effect) + { + return effect switch + { + AlchemySignatureEffectKind.CureRawcapGut => DiseaseId.RawcapGut, + AlchemySignatureEffectKind.CureMarshCough => DiseaseId.MarshCough, + AlchemySignatureEffectKind.CureFrogitch => DiseaseId.Frogitch, + AlchemySignatureEffectKind.CureWoundFever => DiseaseId.WoundFever, + AlchemySignatureEffectKind.CureMirefoot => DiseaseId.Mirefoot, + AlchemySignatureEffectKind.CureBlackwaterBelly => DiseaseId.BlackwaterBelly, + AlchemySignatureEffectKind.CureLeechblood => DiseaseId.Leechblood, + AlchemySignatureEffectKind.CureBoneChillAgue => DiseaseId.BoneChillAgue, + AlchemySignatureEffectKind.CureSwampRot => DiseaseId.SwampRot, + AlchemySignatureEffectKind.CureRedscalePox => DiseaseId.RedscalePox, + AlchemySignatureEffectKind.CureGraveDamp => DiseaseId.GraveDamp, + AlchemySignatureEffectKind.CureHollowLung => DiseaseId.HollowLung, + _ => DiseaseId.None, + }; + } + + public static float RollDuration(in Definition def) => + UnityEngine.Random.Range(def.MinDurationSeconds, def.MaxDurationSeconds); + + public static bool IsColdBiome(BiomeType biome) => + biome is BiomeType.Snow or BiomeType.Tundra or BiomeType.Mountain; +} diff --git a/Assets/Scripts/Disease/DiseaseCatalog.cs.meta b/Assets/Scripts/Disease/DiseaseCatalog.cs.meta new file mode 100644 index 000000000..26a07f0ce --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseCatalog.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 101f792931345f74d937765efd69b069 \ No newline at end of file diff --git a/Assets/Scripts/Disease/DiseaseId.cs b/Assets/Scripts/Disease/DiseaseId.cs new file mode 100644 index 000000000..38802aa8c --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseId.cs @@ -0,0 +1,17 @@ +/// Mundane player diseases (not lycanthropy / vampirism). +public enum DiseaseId : byte +{ + None = 0, + RawcapGut = 1, + MarshCough = 2, + Frogitch = 3, + WoundFever = 4, + Mirefoot = 5, + BlackwaterBelly = 6, + Leechblood = 7, + BoneChillAgue = 8, + SwampRot = 9, + RedscalePox = 10, + GraveDamp = 11, + HollowLung = 12, +} diff --git a/Assets/Scripts/Disease/DiseaseId.cs.meta b/Assets/Scripts/Disease/DiseaseId.cs.meta new file mode 100644 index 000000000..01669c33d --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseId.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1497c2cf3333450429cbde7d79822a8a \ No newline at end of file diff --git a/Assets/Scripts/Disease/DiseaseInfectionService.cs b/Assets/Scripts/Disease/DiseaseInfectionService.cs new file mode 100644 index 000000000..99ab633cd --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseInfectionService.cs @@ -0,0 +1,166 @@ +using UnityEngine; + +/// Server/offline rolls for contracting mundane diseases. +public static class DiseaseInfectionService +{ + private static readonly Collider[] UndeadProbe = new Collider[12]; + + /// + /// Tiny chance after a creature hit deals damage. Swamp and disease weights raise specific odds. + /// + public static bool ServerTryInfectFromCreatureHit(GameObject player, Vector3 hitOriginWorld) + { + PlayerDiseaseRuntime runtime = PlayerDiseaseRuntime.EnsureOn(player); + if (runtime == null) + return false; + if (runtime.ActiveCount >= DiseaseCatalog.MaxConcurrent) + return false; + + BiomeType biome = SampleBiome(player); + bool inSwamp = biome == BiomeType.Swamp; + bool cold = DiseaseCatalog.IsColdBiome(biome); + bool undeadNear = ProbeUndeadNear(hitOriginWorld); + + // Gate: most hits do nothing. + if (Random.value > DiseaseCatalog.BaseCombatHitChance * (inSwamp ? 2.5f : 1f)) + return false; + + DiseaseId picked = PickCombatDisease(inSwamp, cold, undeadNear); + if (picked == DiseaseId.None) + return false; + + return runtime.ServerTryInfect(picked); + } + + /// Slow ambient contraction while standing in swamp (and wet for Frogitch). + public static void ServerTryAmbientTick(GameObject player) + { + PlayerDiseaseRuntime runtime = PlayerDiseaseRuntime.EnsureOn(player); + if (runtime == null) + return; + if (runtime.ActiveCount >= DiseaseCatalog.MaxConcurrent) + return; + + BiomeType biome = SampleBiome(player); + if (biome != BiomeType.Swamp) + return; + + PlayerWetnessSystem wet = player.GetComponent() + ?? player.GetComponentInChildren(true); + bool wetOk = wet != null && wet.IsWet; + + // ~once per ambient driver interval; keep chance low. + float roll = Random.value; + DiseaseId picked = DiseaseId.None; + if (roll < 0.012f) + picked = DiseaseId.MarshCough; + else if (roll < 0.022f && wetOk) + picked = DiseaseId.Frogitch; + else if (roll < 0.030f) + picked = DiseaseId.Mirefoot; + else if (roll < 0.034f) + picked = DiseaseId.SwampRot; + else if (roll < 0.036f) + picked = DiseaseId.HollowLung; + + if (picked == DiseaseId.None || runtime.Has(picked)) + return; + + runtime.ServerTryInfect(picked); + } + + /// Raw mushroom threshold reached → Rawcap Gut. + public static bool ServerTryInfectRawcapGut(GameObject player) + { + PlayerDiseaseRuntime runtime = PlayerDiseaseRuntime.EnsureOn(player); + if (runtime == null) + return false; + return runtime.ServerTryInfect(DiseaseId.RawcapGut); + } + + private static DiseaseId PickCombatDisease(bool inSwamp, bool cold, bool undeadNear) + { + // Weighted pick among combat-capable diseases. + float total = 0f; + float wMarsh = Weight(DiseaseId.MarshCough, inSwamp, cold, undeadNear); + float wFrog = Weight(DiseaseId.Frogitch, inSwamp, cold, undeadNear); + float wWound = Weight(DiseaseId.WoundFever, inSwamp, cold, undeadNear); + float wMire = Weight(DiseaseId.Mirefoot, inSwamp, cold, undeadNear); + float wBlack = Weight(DiseaseId.BlackwaterBelly, inSwamp, cold, undeadNear); + float wLeech = Weight(DiseaseId.Leechblood, inSwamp, cold, undeadNear); + float wBone = Weight(DiseaseId.BoneChillAgue, inSwamp, cold, undeadNear); + float wRot = Weight(DiseaseId.SwampRot, inSwamp, cold, undeadNear); + float wPox = Weight(DiseaseId.RedscalePox, inSwamp, cold, undeadNear); + float wGrave = Weight(DiseaseId.GraveDamp, inSwamp, cold, undeadNear); + float wLung = Weight(DiseaseId.HollowLung, inSwamp, cold, undeadNear); + + total = wMarsh + wFrog + wWound + wMire + wBlack + wLeech + wBone + wRot + wPox + wGrave + wLung; + if (total <= 0.0001f) + return DiseaseId.None; + + float r = Random.value * total; + if ((r -= wMarsh) < 0f) return DiseaseId.MarshCough; + if ((r -= wFrog) < 0f) return DiseaseId.Frogitch; + if ((r -= wWound) < 0f) return DiseaseId.WoundFever; + if ((r -= wMire) < 0f) return DiseaseId.Mirefoot; + if ((r -= wBlack) < 0f) return DiseaseId.BlackwaterBelly; + if ((r -= wLeech) < 0f) return DiseaseId.Leechblood; + if ((r -= wBone) < 0f) return DiseaseId.BoneChillAgue; + if ((r -= wRot) < 0f) return DiseaseId.SwampRot; + if ((r -= wPox) < 0f) return DiseaseId.RedscalePox; + if ((r -= wGrave) < 0f) return DiseaseId.GraveDamp; + if ((r -= wLung) < 0f) return DiseaseId.HollowLung; + return DiseaseId.WoundFever; + } + + private static float Weight(DiseaseId id, bool inSwamp, bool cold, bool undeadNear) + { + if (!DiseaseCatalog.TryGet(id, out DiseaseCatalog.Definition def)) + return 0f; + if (def.CombatWeight <= 0f) + return 0f; + + float w = def.CombatWeight; + if (inSwamp) + w *= def.SwampMultiplier; + else if (def.SwampMultiplier >= 6f) + w *= 0.25f; // swamp-favoring diseases rare elsewhere + + if (def.PrefersColdBiome) + w *= cold ? 4f : 0.15f; + if (def.PrefersUndead) + w *= undeadNear ? 5f : 0.2f; + + return w; + } + + private static BiomeType SampleBiome(GameObject player) + { + if (player == null) + return BiomeType.Grassland; + + WorldGenerator world = Object.FindFirstObjectByType(); + if (world == null) + return BiomeType.Grassland; + + WorldGenerator.ClimateSample sample = world.SampleClimateAtWorldPosition(player.transform.position); + return sample.valid ? sample.biome : BiomeType.Grassland; + } + + private static bool ProbeUndeadNear(Vector3 origin) + { + int hits = Physics.OverlapSphereNonAlloc(origin, 3.5f, UndeadProbe, ~0, QueryTriggerInteraction.Ignore); + for (int i = 0; i < hits; i++) + { + Collider c = UndeadProbe[i]; + if (c == null) + continue; + if (c.GetComponentInParent() != null) + return true; + if (c.GetComponentInParent() != null) + return true; + } + + return false; + } +} diff --git a/Assets/Scripts/Disease/DiseaseInfectionService.cs.meta b/Assets/Scripts/Disease/DiseaseInfectionService.cs.meta new file mode 100644 index 000000000..32120a2fb --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseInfectionService.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ca5d28bc159784140babd676055e7d79 \ No newline at end of file diff --git a/Assets/Scripts/Disease/DiseaseSymptomKind.cs b/Assets/Scripts/Disease/DiseaseSymptomKind.cs new file mode 100644 index 000000000..6d91a202d --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseSymptomKind.cs @@ -0,0 +1,29 @@ +/// Unique mechanical symptom applied while a disease is active. +public enum DiseaseSymptomKind : byte +{ + None = 0, + /// Pale HP bar + slow DoT (Rawcap Gut). + PaleDot = 1, + /// Stamina regen cut (Marsh Cough). + StaminaRegenCut = 2, + /// Scratch DoT while wet (Frogitch). + WetScratchDot = 3, + /// Periodic fever DoT (Wound Fever). + FeverDot = 4, + /// Move speed reduction (Mirefoot). + MoveSlow = 5, + /// Hunger drains faster (Blackwater Belly). + HungerDrain = 6, + /// Incoming heals reduced (Leechblood). + HealTakenCut = 7, + /// Extra cold vulnerability (Bone Chill Ague). + ColdVulnerability = 8, + /// Strong DoT + soft max HP cut (Swamp Rot). + RotDotMaxHp = 9, + /// Incoming damage increased (Redscale Pox). + DamageTakenUp = 10, + /// Periodic stamina spike drain (Grave Damp). + StaminaSpikeDrain = 11, + /// Sprint stamina cost spike (Hollow Lung). + SprintCostSpike = 12, +} diff --git a/Assets/Scripts/Disease/DiseaseSymptomKind.cs.meta b/Assets/Scripts/Disease/DiseaseSymptomKind.cs.meta new file mode 100644 index 000000000..743d4cb7d --- /dev/null +++ b/Assets/Scripts/Disease/DiseaseSymptomKind.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4d11ca0e588661e49b1331117aa5a0fc \ No newline at end of file diff --git a/Assets/Scripts/Disease/Editor.meta b/Assets/Scripts/Disease/Editor.meta new file mode 100644 index 000000000..678c8ecb3 --- /dev/null +++ b/Assets/Scripts/Disease/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90c5cd951245f6b48bd34105e97d839d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Disease/Editor/DiseaseDebugEditorTools.cs b/Assets/Scripts/Disease/Editor/DiseaseDebugEditorTools.cs new file mode 100644 index 000000000..1ae599b7e --- /dev/null +++ b/Assets/Scripts/Disease/Editor/DiseaseDebugEditorTools.cs @@ -0,0 +1,161 @@ +#if UNITY_EDITOR +using InventoryFramework; +using UnityEditor; +using UnityEngine; + +/// Play Mode helpers for the twelve mundane diseases. +public static class DiseaseDebugEditorTools +{ + private const string AlchemyPotionItemPath = + "Assets/Jinxish/Drag & Drop Inventory & Hotbar Framework/ScriptableObjects/Items/Alchemy/Alchemy Potion.asset"; + + [MenuItem("Manafall/Disease/Infect Local Player With All (capped to 3)")] + public static void InfectThreeSample() + { + if (!TryGetLocalPlayer(out GameObject player)) + return; + + PlayerDiseaseRuntime runtime = PlayerDiseaseRuntime.EnsureOn(player); + DiseaseAmbientDriver.EnsureOn(player); + runtime.ClearForRespawn(); + runtime.ServerTryInfect(DiseaseId.RawcapGut); + runtime.ServerTryInfect(DiseaseId.MarshCough); + runtime.ServerTryInfect(DiseaseId.WoundFever); + Debug.Log($"[Disease] Active: {runtime.BuildActiveNamesList()} price={runtime.GetHealerTotalPrice()}"); + } + + [MenuItem("Manafall/Disease/Infect Local Player — Swamp Rot")] + public static void InfectSwampRot() + { + if (!TryGetLocalPlayer(out GameObject player)) + return; + PlayerDiseaseRuntime.EnsureOn(player)?.ServerTryInfect(DiseaseId.SwampRot); + } + + [MenuItem("Manafall/Disease/Clear All Diseases On Local Player")] + public static void ClearAll() + { + if (!TryGetLocalPlayer(out GameObject player)) + return; + PlayerDiseaseRuntime.EnsureOn(player)?.ClearForRespawn(); + Debug.Log("[Disease] Cleared."); + } + + [MenuItem("Manafall/Disease/Grant All Disease Cure Potions")] + public static void GrantCurePotions() + { + if (!Application.isPlaying) + { + EditorUtility.DisplayDialog("Disease Cures", "Enter Play Mode first.", "OK"); + return; + } + + if (!TryGetLocalPlayer(out GameObject player)) + return; + + Item potionItem = AssetDatabase.LoadAssetAtPath(AlchemyPotionItemPath); + if (potionItem == null) + { + EditorUtility.DisplayDialog("Disease Cures", "Alchemy Potion item missing.", "OK"); + return; + } + + Hotbar hotbar = player.GetComponentInChildren(true); + Inventory inventory = player.GetComponentInChildren(true); + int granted = 0; + for (int id = 52; id <= 63; id++) + { + if (!AlchemySignatureBrewCatalog.TryGetRecipe(id, out _)) + continue; + + float meta = AlchemyPotionEncoding.PackSignature( + id, + potencyTier: 22, + durationTier: 20, + instabilityTier: 2, + AlchemyBrewFlags.Stabilized, + purified: false); + + if (ItemGrantService.TryGiveItem(hotbar, inventory, potionItem, 1, meta)) + granted++; + } + + inventory?.TriggerUpdate(); + ItemGrantService.RefreshUI(hotbar, inventory); + Debug.Log($"[Disease] Granted {granted} cure potions."); + EditorUtility.DisplayDialog("Disease Cures", $"Granted {granted} cure potions.", "OK"); + } + + [MenuItem("Manafall/Disease/Validate Catalog (Editor)")] + public static void ValidateCatalog() + { + var seen = new System.Collections.Generic.HashSet(); + int ok = 0; + for (byte i = 1; i <= DiseaseCatalog.DiseaseCount; i++) + { + DiseaseId id = (DiseaseId)i; + if (!DiseaseCatalog.TryGet(id, out DiseaseCatalog.Definition def)) + { + Debug.LogError($"[DiseaseValidate] Missing def {id}"); + continue; + } + + if (def.CureSignatureRecipeId < 52 || def.CureSignatureRecipeId > 63) + Debug.LogError($"[DiseaseValidate] {id} recipe {def.CureSignatureRecipeId} out of range"); + if (!seen.Add(def.CureSignatureRecipeId)) + Debug.LogError($"[DiseaseValidate] Duplicate recipe {def.CureSignatureRecipeId}"); + if (!AlchemySignatureBrewCatalog.TryGetRecipe(def.CureSignatureRecipeId, out _)) + Debug.LogError($"[DiseaseValidate] Missing signature recipe {def.CureSignatureRecipeId}"); + if (DiseaseCatalog.DiseaseForCureRecipe(def.CureSignatureRecipeId) != id) + Debug.LogError($"[DiseaseValidate] Cure recipe map mismatch for {id}"); + ok++; + } + + string msg = $"Validated {ok}/{DiseaseCatalog.DiseaseCount} diseases, {seen.Count} unique cure recipes."; + Debug.Log("[DiseaseValidate] " + msg); + EditorUtility.DisplayDialog("Disease Validate", msg, "OK"); + } + + [MenuItem("Manafall/Disease/Smoke — Infect, Wrong Cure, Right Cure")] + public static void SmokeInfectCure() + { + if (!TryGetLocalPlayer(out GameObject player)) + return; + + PlayerDiseaseRuntime runtime = PlayerDiseaseRuntime.EnsureOn(player); + runtime.ClearForRespawn(); + bool infected = runtime.ServerTryInfect(DiseaseId.WoundFever); + bool wrong = runtime.ServerTryCure(DiseaseId.RawcapGut); + bool right = runtime.ServerTryCure(DiseaseId.WoundFever); + bool gone = !runtime.Has(DiseaseId.WoundFever); + Debug.Log( + $"[DiseaseSmoke] infected={infected} wrongCure={wrong} rightCure={right} cleared={gone}"); + EditorUtility.DisplayDialog( + "Disease Smoke", + $"infected={infected}\nwrongCure(should false)={wrong}\nrightCure={right}\ncleared={gone}", + "OK"); + } + + private static bool TryGetLocalPlayer(out GameObject player) + { + player = null; + if (!Application.isPlaying) + { + EditorUtility.DisplayDialog("Disease", "Enter Play Mode first.", "OK"); + return false; + } + + if (Mirror.NetworkClient.localPlayer != null) + player = Mirror.NetworkClient.localPlayer.gameObject; + if (player == null) + player = Object.FindFirstObjectByType()?.gameObject; + if (player == null) + { + EditorUtility.DisplayDialog("Disease", "No local player found.", "OK"); + return false; + } + + return true; + } +} +#endif diff --git a/Assets/Scripts/Disease/Editor/DiseaseDebugEditorTools.cs.meta b/Assets/Scripts/Disease/Editor/DiseaseDebugEditorTools.cs.meta new file mode 100644 index 000000000..dd95b6697 --- /dev/null +++ b/Assets/Scripts/Disease/Editor/DiseaseDebugEditorTools.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1d88b2a4b428f834aa8af69b8546df17 \ No newline at end of file diff --git a/Assets/Scripts/Disease/PlayerDiseaseRuntime.cs b/Assets/Scripts/Disease/PlayerDiseaseRuntime.cs new file mode 100644 index 000000000..309a940ef --- /dev/null +++ b/Assets/Scripts/Disease/PlayerDiseaseRuntime.cs @@ -0,0 +1,428 @@ +using System; +using System.Text; +using Mirror; +using UnityEngine; + +/// +/// Server/offline-authoritative active disease set (up to ). +/// +[DisallowMultipleComponent] +public sealed class PlayerDiseaseRuntime : MonoBehaviour +{ + private const float TickIntervalSeconds = 0.5f; + + [Serializable] + public struct ActiveDisease + { + public DiseaseId Id; + public float ExpiresAt; + } + + [Serializable] + public struct SaveSnapshot + { + public byte[] ids; + public float[] remainingSeconds; + } + + private readonly ActiveDisease[] slots = new ActiveDisease[DiseaseCatalog.MaxConcurrent]; + private int count; + private float nextTickAt; + private bool hudSickTint; + + private PlayerHealth health; + private FPSStamina stamina; + private PlayerHunger hunger; + private PlayerWetnessSystem wetness; + private ActiveHotbarConsume hotbarConsume; + private WorldGenerator worldGenerator; + + public int ActiveCount => count; + public bool HasAny => count > 0; + + public static PlayerDiseaseRuntime EnsureOn(GameObject player) + { + if (player == null) + return null; + + PlayerDiseaseRuntime existing = player.GetComponent() + ?? player.GetComponentInChildren(true); + if (existing == null) + existing = player.AddComponent(); + DiseaseAmbientDriver.EnsureOn(player); + return existing; + } + + public bool Has(DiseaseId id) + { + for (int i = 0; i < count; i++) + { + if (slots[i].Id == id && Time.time < slots[i].ExpiresAt) + return true; + } + + return false; + } + + public bool HasSymptom(DiseaseSymptomKind kind) + { + for (int i = 0; i < count; i++) + { + if (Time.time >= slots[i].ExpiresAt) + continue; + if (!DiseaseCatalog.TryGet(slots[i].Id, out DiseaseCatalog.Definition def)) + continue; + if (def.Symptom == kind) + return true; + } + + return false; + } + + public float GetMoveSpeedMultiplier() + { + return HasSymptom(DiseaseSymptomKind.MoveSlow) ? 0.82f : 1f; + } + + public float GetStaminaRegenMultiplier() + { + return HasSymptom(DiseaseSymptomKind.StaminaRegenCut) ? 0.55f : 1f; + } + + public float GetHungerDrainMultiplier() + { + return HasSymptom(DiseaseSymptomKind.HungerDrain) ? 1.65f : 1f; + } + + public float GetIncomingHealMultiplier() + { + return HasSymptom(DiseaseSymptomKind.HealTakenCut) ? 0.55f : 1f; + } + + public float GetIncomingDamageMultiplier() + { + float mul = 1f; + if (HasSymptom(DiseaseSymptomKind.DamageTakenUp)) + mul *= 1.12f; + if (HasSymptom(DiseaseSymptomKind.ColdVulnerability)) + mul *= 1.08f; + return mul; + } + + public float GetColdDamageMultiplier() + { + return HasSymptom(DiseaseSymptomKind.ColdVulnerability) ? 1.35f : 1f; + } + + public float GetSprintStaminaCostMultiplier() + { + return HasSymptom(DiseaseSymptomKind.SprintCostSpike) ? 1.75f : 1f; + } + + public float GetMaxHealthMultiplier() + { + return HasSymptom(DiseaseSymptomKind.RotDotMaxHp) ? 0.85f : 1f; + } + + /// + /// Product of active disease strength multipliers (carry / swim Strength level and melee output). + /// + public float GetStrengthMultiplier() + { + float mul = 1f; + for (int i = 0; i < count; i++) + { + if (Time.time >= slots[i].ExpiresAt) + continue; + if (!DiseaseCatalog.TryGet(slots[i].Id, out DiseaseCatalog.Definition def)) + continue; + mul *= def.StrengthMultiplier; + } + + return Mathf.Clamp(mul, 0.35f, 1f); + } + + /// Server/offline: begin or refresh a disease. Returns false if capped or already present. + public bool ServerTryInfect(DiseaseId id, float durationOverride = -1f) + { + if (!HasAuthority() || id == DiseaseId.None) + return false; + if (!DiseaseCatalog.TryGet(id, out DiseaseCatalog.Definition def)) + return false; + + CompactExpired(); + if (Has(id)) + return false; + if (count >= DiseaseCatalog.MaxConcurrent) + return false; + + float duration = durationOverride > 0f ? durationOverride : DiseaseCatalog.RollDuration(def); + slots[count++] = new ActiveDisease + { + Id = id, + ExpiresAt = Time.time + duration, + }; + nextTickAt = Time.time; + RefreshHud(); + Debug.Log($"[Disease] Infected with {def.DisplayName} ({duration:0}s)."); + return true; + } + + public bool ServerTryCure(DiseaseId id) + { + if (!HasAuthority() || id == DiseaseId.None) + return false; + + bool removed = false; + for (int i = count - 1; i >= 0; i--) + { + if (slots[i].Id != id) + continue; + RemoveAt(i); + removed = true; + } + + if (removed) + RefreshHud(); + return removed; + } + + public bool ServerTryCureAll(out int curedCount, out int totalPrice) + { + curedCount = 0; + totalPrice = 0; + if (!HasAuthority()) + return false; + + CompactExpired(); + for (int i = count - 1; i >= 0; i--) + { + if (!DiseaseCatalog.TryGet(slots[i].Id, out DiseaseCatalog.Definition def)) + { + RemoveAt(i); + continue; + } + + totalPrice += def.HealerCoinPrice; + curedCount++; + RemoveAt(i); + } + + RefreshHud(); + return curedCount > 0; + } + + public int GetHealerTotalPrice() + { + CompactExpired(); + int total = 0; + for (int i = 0; i < count; i++) + { + if (DiseaseCatalog.TryGet(slots[i].Id, out DiseaseCatalog.Definition def)) + total += def.HealerCoinPrice; + } + + return total; + } + + public string BuildActiveNamesList() + { + CompactExpired(); + if (count <= 0) + return string.Empty; + + var sb = new StringBuilder(); + for (int i = 0; i < count; i++) + { + if (!DiseaseCatalog.TryGet(slots[i].Id, out DiseaseCatalog.Definition def)) + continue; + if (sb.Length > 0) + sb.Append(", "); + sb.Append(def.DisplayName); + } + + return sb.ToString(); + } + + public void ClearForRespawn() + { + count = 0; + nextTickAt = 0f; + RefreshHud(); + } + + public SaveSnapshot CaptureSave() + { + CompactExpired(); + var snap = new SaveSnapshot + { + ids = new byte[count], + remainingSeconds = new float[count], + }; + for (int i = 0; i < count; i++) + { + snap.ids[i] = (byte)slots[i].Id; + snap.remainingSeconds[i] = Mathf.Max(0f, slots[i].ExpiresAt - Time.time); + } + + return snap; + } + + public void ApplySave(SaveSnapshot snap) + { + count = 0; + if (snap.ids == null || snap.remainingSeconds == null) + { + RefreshHud(); + return; + } + + int n = Mathf.Min(snap.ids.Length, snap.remainingSeconds.Length); + n = Mathf.Min(n, DiseaseCatalog.MaxConcurrent); + for (int i = 0; i < n; i++) + { + DiseaseId id = (DiseaseId)snap.ids[i]; + if (id == DiseaseId.None || !DiseaseCatalog.TryGet(id, out _)) + continue; + float remaining = Mathf.Max(1f, snap.remainingSeconds[i]); + slots[count++] = new ActiveDisease + { + Id = id, + ExpiresAt = Time.time + remaining, + }; + } + + nextTickAt = Time.time; + RefreshHud(); + } + + private void Awake() + { + CacheRefs(); + } + + private void Update() + { + if (!HasAuthority()) + return; + + CompactExpired(); + if (count <= 0) + return; + + if (Time.time < nextTickAt) + return; + + nextTickAt = Time.time + TickIntervalSeconds; + CacheRefs(); + TickSymptoms(TickIntervalSeconds); + ClampHealthToDiseaseMax(); + } + + private void ClampHealthToDiseaseMax() + { + if (health == null || !HasSymptom(DiseaseSymptomKind.RotDotMaxHp)) + return; + + float softMax = health.maxHealth * GetMaxHealthMultiplier(); + if (health.currentHealth > softMax + 0.01f) + health.TakeDamageFromEffect(health.currentHealth - softMax, transform.position); + } + + private void OnDisable() + { + if (hudSickTint) + ApplySickTint(false); + } + + private void TickSymptoms(float dt) + { + health ??= GetComponent(); + bool wet = wetness != null && wetness.IsWet; + + for (int i = 0; i < count; i++) + { + if (!DiseaseCatalog.TryGet(slots[i].Id, out DiseaseCatalog.Definition def)) + continue; + + switch (def.Symptom) + { + case DiseaseSymptomKind.PaleDot: + health?.TakeDamageFromEffect(0.85f * dt, transform.position); + break; + case DiseaseSymptomKind.FeverDot: + health?.TakeDamageFromEffect(1.1f * dt, transform.position); + break; + case DiseaseSymptomKind.WetScratchDot: + if (wet) + health?.TakeDamageFromEffect(0.7f * dt, transform.position); + break; + case DiseaseSymptomKind.RotDotMaxHp: + health?.TakeDamageFromEffect(1.6f * dt, transform.position); + break; + case DiseaseSymptomKind.StaminaSpikeDrain: + if (stamina != null && (Time.frameCount % 20) == 0) + stamina.TryUseAttackStamina(Mathf.Lerp(4f, 9f, UnityEngine.Random.value)); + break; + } + } + } + + private void CompactExpired() + { + bool changed = false; + for (int i = count - 1; i >= 0; i--) + { + if (Time.time < slots[i].ExpiresAt) + continue; + RemoveAt(i); + changed = true; + } + + if (changed) + RefreshHud(); + } + + private void RemoveAt(int index) + { + for (int j = index; j < count - 1; j++) + slots[j] = slots[j + 1]; + count--; + } + + private void RefreshHud() + { + bool wantTint = HasSymptom(DiseaseSymptomKind.PaleDot) || HasSymptom(DiseaseSymptomKind.RotDotMaxHp); + ApplySickTint(wantTint); + } + + private void ApplySickTint(bool enable) + { + hudSickTint = enable; + hotbarConsume ??= GetComponent(); + if (hotbarConsume != null) + { + hotbarConsume.NotifyMushroomSicknessHud(enable); + return; + } + + PlayerStatusRuntimeHud.EnsureOn(gameObject)?.SetHealthBarSickTint(enable); + } + + private void CacheRefs() + { + health ??= GetComponent(); + stamina ??= GetComponent(); + hunger ??= GetComponent(); + wetness ??= GetComponent() ?? GetComponentInChildren(true); + hotbarConsume ??= GetComponent(); + if (worldGenerator == null) + worldGenerator = FindFirstObjectByType(); + } + + private bool HasAuthority() + { + return NetworkServer.active + || (!NetworkClient.active && OfflinePlayMode.IsActive(true)); + } +} diff --git a/Assets/Scripts/Disease/PlayerDiseaseRuntime.cs.meta b/Assets/Scripts/Disease/PlayerDiseaseRuntime.cs.meta new file mode 100644 index 000000000..c799046e3 --- /dev/null +++ b/Assets/Scripts/Disease/PlayerDiseaseRuntime.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 18366ef1794468e469a251ff419ea195 \ No newline at end of file diff --git a/Assets/Scripts/Enchantment/EnchantableItemRules.cs b/Assets/Scripts/Enchantment/EnchantableItemRules.cs index 8789ab380..2ef964972 100644 --- a/Assets/Scripts/Enchantment/EnchantableItemRules.cs +++ b/Assets/Scripts/Enchantment/EnchantableItemRules.cs @@ -121,6 +121,7 @@ namespace InventoryFramework public const int NightlingShadowShardId = 519; public const int StoneWispEyeId = 520; public const int GloomDustId = 521; + public const int DuskFeeTokenId = 522; public const int BogMossClumpId = 7812; public const int WormChitinSegmentId = 550; public const int PhosphorGlandId = 551; @@ -166,6 +167,7 @@ namespace InventoryFramework case SoulweaveThreadId: case NightlingEssenceId: + case DuskFeeTokenId: twist = EnchantTwist.Leech; return true; @@ -225,6 +227,7 @@ namespace InventoryFramework { StoneWispEyeId => 4, NightlingEssenceId => 5, + DuskFeeTokenId => 6, FrostfangShardId => 4, GlacialPeltLockId => 3, PhosphorGlandId => 3, diff --git a/Assets/Scripts/FPSPlayerController.cs b/Assets/Scripts/FPSPlayerController.cs index 6f54dbaaf..06abdf450 100644 --- a/Assets/Scripts/FPSPlayerController.cs +++ b/Assets/Scripts/FPSPlayerController.cs @@ -511,6 +511,8 @@ public class FPSNetworkMovement : NetworkBehaviour, IAquaticMotorHooks if (!canDrive) return; + VillageTeleportDebug.PollIslandHotkeys(); + // While loot/container UI is open, still allow walking so distance-close can fire. // Skip look/crouch so the free UI cursor is not fighting mouse-look. if (!InputStateManager.AllowsPlayerGameplayInput) @@ -928,6 +930,14 @@ public class FPSNetworkMovement : NetworkBehaviour, IAquaticMotorHooks private void UpdateCrouch() { + if (aquatic != null && aquatic.IsInWaterForMotor) + { + isCrouching = false; + controller.height = Mathf.Lerp(controller.height, standingHeight, crouchTransitionSpeed * Time.deltaTime); + controller.center = new Vector3(0f, controller.height * 0.5f, 0f); + return; + } + if (rideBugMount != null && rideBugMount.BlocksMotor) { isCrouching = false; @@ -1134,7 +1144,8 @@ public class FPSNetworkMovement : NetworkBehaviour, IAquaticMotorHooks Debug.Log($"{VampireTransformationDebug.Tag} jump jumpHeight={jumpHeight:F2} heightMul={jumpHeightMul:F2}", this); } - verticalVelocity = Mathf.Sqrt((jumpHeight * jumpMultiplier) * -2f * gravity); + float jumpG = BiomeGravity.Scale(gravity, transform.position); + verticalVelocity = Mathf.Sqrt((jumpHeight * jumpMultiplier) * -2f * jumpG); ledgeCatchTimer = ledgeCatchWindow; lastJumpPressedTime = float.NegativeInfinity; lastGroundedTime = float.NegativeInfinity; @@ -1157,7 +1168,9 @@ public class FPSNetworkMovement : NetworkBehaviour, IAquaticMotorHooks float gravityMultiplier = status != null ? status.GravityMultiplier : 1f; if (verticalVelocity <= 0f && status != null) gravityMultiplier *= status.DescentGravityMultiplier; - verticalVelocity += gravity * aquaticGravityMul * gravityMultiplier * Time.deltaTime; + // Void island is ~1/3 gravity; BiomeGravity blends across the rim. + float biomeG = BiomeGravity.Scale(gravity, transform.position); + verticalVelocity += biomeG * aquaticGravityMul * gravityMultiplier * Time.deltaTime; } else if (waterWalkGrounded && verticalVelocity < 0f) verticalVelocity = 0f; @@ -1684,6 +1697,10 @@ public class FPSNetworkMovement : NetworkBehaviour, IAquaticMotorHooks speedMultiplier *= status.MoveSpeedMultiplier; if (practiceProgress != null) speedMultiplier *= practiceProgress.ClientMoveSpeedPerkMultiplier; + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + speedMultiplier *= diseases.GetMoveSpeedMultiplier(); return baseSpeed * speedMultiplier; } diff --git a/Assets/Scripts/FPSStamina.cs b/Assets/Scripts/FPSStamina.cs index 8c49d6a66..6140d01e2 100644 --- a/Assets/Scripts/FPSStamina.cs +++ b/Assets/Scripts/FPSStamina.cs @@ -62,6 +62,7 @@ public class FPSStamina : MonoBehaviour private bool isSprinting; private bool sprintLocked; private float swimmingDrainPerSecond; + private float diggingDrainPerSecond; private float environmentalDrainPerSecond; private bool swimmingMoveAttempt; private bool rowingMoveAttempt; @@ -90,7 +91,7 @@ public class FPSStamina : MonoBehaviour private bool restingSleeping; private bool lowVitalsAudioSuppressed; - [SerializeField] private float rowingDrainPerSecond = 0.675f; // was 1.35; halved drain + [SerializeField] private float rowingDrainPerSecond = 0.135f; // was 0.675; rowing costs a fifth public bool CanSprint => !sprintLocked && currentStamina >= 1f; public bool IsSprinting => isSprinting && !sprintLocked; @@ -203,6 +204,14 @@ public class FPSStamina : MonoBehaviour consuming = true; } + if (diggingDrainPerSecond > 0f) + { + float drain = diggingDrainPerSecond * GetEnduranceStaminaMultiplier() * dt; + currentStamina -= drain; + exertionDrain += drain; + consuming = true; + } + if (rowingDrainPerSecond > 0f && rowingMoveAttempt) { float drain = rowingDrainPerSecond * dt; @@ -224,6 +233,10 @@ public class FPSStamina : MonoBehaviour float sprintDrainMul = GetSprintStaminaMultiplier(); if (vampireMotor != null) sprintDrainMul *= vampireMotor.GetStaminaDrainMultiplier(); + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + sprintDrainMul *= diseases.GetSprintStaminaCostMultiplier(); float drain = sprintDrainPerSecond * sprintDrainMul * dt; currentStamina -= drain; @@ -257,6 +270,10 @@ public class FPSStamina : MonoBehaviour regenMul *= werewolfMotor.GetStaminaRegenMultiplier(); regenMul *= GetColdStaminaRegenMultiplier(); + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + regenMul *= diseases.GetStaminaRegenMultiplier(); // Still recover while overheating, just slower so heat remains a pressure. if (environmentalDrainPerSecond > 0.01f) regenMul *= 0.55f; @@ -351,6 +368,12 @@ public class FPSStamina : MonoBehaviour swimmingDrainPerSecond = Mathf.Max(0f, drainPerSecond); } + /// Hold-to-dig applies a slow stamina burn while the shovel channel is active. + public void SetDiggingStaminaDrain(float drainPerSecond) + { + diggingDrainPerSecond = Mathf.Max(0f, drainPerSecond); + } + /// Continuous environmental drain (e.g. desert overheat). Blocks recharge while > 0. public void SetEnvironmentalStaminaDrain(float drainPerSecond) { diff --git a/Assets/Scripts/InputStateManager.cs b/Assets/Scripts/InputStateManager.cs index 53ede85b9..b0bc504da 100644 --- a/Assets/Scripts/InputStateManager.cs +++ b/Assets/Scripts/InputStateManager.cs @@ -424,6 +424,7 @@ public class InputStateManager : MonoBehaviour bool summoning = SummoningAltarUI.IsOpen; bool inventory = IsLocalInventoryOpen(); bool chestLoot = IsLocalChestLootOpen(); + bool listChrome = InventoryFramework.InventoryListView.AnyChromeBlockingGameplay(); bool fullMap = PlayerFullMapHud.IsOpen; // Rune sprite combat stays in gameplay mode so the trainer can walk/look while ordering. bool ruinInspect = Manafall.RuneSprites.RuneSpriteInspectHud.IsOpen; @@ -443,7 +444,7 @@ public class InputStateManager : MonoBehaviour // Re-assert a visible OS cursor (SetUIMode may hide it for gamepad UI). EnterOsDesktopAccess(); } - else if (ShouldHoldForClassSelect() || summoning || inventory || chestLoot || fullMap || ruinInspect || bookReader || pauseMenu || sealclash || marketOpen || pigeonMail || skillPerkPick || chatGroup) + else if (ShouldHoldForClassSelect() || summoning || inventory || chestLoot || listChrome || fullMap || ruinInspect || bookReader || pauseMenu || sealclash || marketOpen || pigeonMail || skillPerkPick || chatGroup) SetUIMode(); else SetGameplayMode(); @@ -470,7 +471,7 @@ public class InputStateManager : MonoBehaviour return false; ChestHudController chestHud = player.GetComponentInChildren(true); - return chestHud != null && chestHud.IsOpen; + return chestHud != null && (chestHud.IsOpen || chestHud.IsPanelActive); } private static PlayerClassSelection ResolveLocalClassSelection() diff --git a/Assets/Scripts/Inventory/InventoryListView.cs b/Assets/Scripts/Inventory/InventoryListView.cs index ec7efb488..e6529cb0a 100644 --- a/Assets/Scripts/Inventory/InventoryListView.cs +++ b/Assets/Scripts/Inventory/InventoryListView.cs @@ -63,9 +63,61 @@ namespace InventoryFramework return v; } - private void OnEnable() { if (!Active.Contains(this)) Active.Add(this); } + private void OnEnable() + { + if (!Active.Contains(this)) + Active.Add(this); + // Hide the grid before the first paint when list mode is on (avoids a one-frame flash). + ApplyListModeVisuals(ListMode); + } + private void OnDisable() { Active.Remove(this); } + /// True when any bag/chest list chrome is still drawing over gameplay. + public static bool AnyChromeBlockingGameplay() + { + for (int i = 0; i < Active.Count; i++) + { + InventoryListView v = Active[i]; + if (v == null || !v.isActiveAndEnabled) + continue; + if (v.IsChromeVisible()) + return true; + } + + return false; + } + + /// Force-hide orphan list chrome (bag closed but list sibling stayed up). + public static void DismissOrphanChrome() + { + for (int i = Active.Count - 1; i >= 0; i--) + { + InventoryListView v = Active[i]; + if (v == null) + continue; + if (!v.IsHostPanelOpen()) + v.HideChrome(); + } + } + + /// Call as the bag opens so list mode hides the grid before the next paint. + public static void PrepareBagOpenVisuals() => PrepareOpenVisuals(chest: false); + + /// Call as a chest/loot panel opens so list mode hides the slot grid before paint. + public static void PrepareChestOpenVisuals() => PrepareOpenVisuals(chest: true); + + private static void PrepareOpenVisuals(bool chest) + { + for (int i = 0; i < Active.Count; i++) + { + InventoryListView v = Active[i]; + if (v == null || v.IsChest != chest) + continue; + v.ApplyListModeVisuals(ListMode); + } + } + private void Init(Transform grid, bool isChest) { slotParent = grid; @@ -127,11 +179,140 @@ namespace InventoryFramework back.sizeDelta = new Vector2(60f, 26f); gridBackToggle = back.gameObject; MakeButtonOn(back, "List", 12f, () => ListMode = true, out _); + gridBackToggle.SetActive(false); PositionGridToggle(); + HideChrome(); + ApplyListModeVisuals(ListMode); } private GameObject gridBackToggle; private readonly Vector3[] corners = new Vector3[4]; + private bool chromeVisible; + + private bool IsHostPanelOpen() + { + if (slotParent == null) + return false; + if (!slotParent.gameObject.activeInHierarchy) + return false; + + if (IsChest) + { + ChestHudController hud = GetComponentInParent(true); + if (hud != null) + return hud.IsOpen || hud.IsPanelActive; + // ChestInventoryUI lives on the chest panel root. + Transform t = slotParent; + while (t != null) + { + if (t.name == "ChestHud") + return t.gameObject.activeInHierarchy; + t = t.parent; + } + } + + return true; + } + + private bool IsChromeVisible() => chromeVisible; + + private void HideChrome() + { + chromeVisible = false; + Image plate = GetComponent(); + if (plate != null) + plate.enabled = false; + if (root != null) + { + for (int i = 0; i < root.childCount; i++) + { + Transform child = root.GetChild(i); + if (child != null) + child.gameObject.SetActive(false); + } + } + + if (gridBackToggle != null) + gridBackToggle.SetActive(false); + } + + private Image hostPlate; + private Sprite savedHostSprite; + private bool hostSpriteCleared; + + private void ApplyListModeVisuals(bool list) + { + if (gridGroup != null) + { + gridGroup.alpha = list ? 0f : 1f; + gridGroup.blocksRaycasts = !list; + gridGroup.interactable = !list; + } + + // CanvasGroup alpha does not cover the chest panel's baked slot sheet, and the + // list plate is translucent, so the old slot frames show through meteor loot. + SetSlotGraphicsDrawn(!list); + SetHostSlotSheet(list); + + Image plate = GetComponent(); + if (plate != null && list) + plate.color = new Color(0.012f, 0.012f, 0.016f, 1f); + } + + private void SetSlotGraphicsDrawn(bool drawn) + { + if (slotParent == null) + return; + + for (int i = 0; i < slotParent.childCount; i++) + { + Transform child = slotParent.GetChild(i); + if (child == null) + continue; + + Graphic[] graphics = child.GetComponentsInChildren(true); + for (int g = 0; g < graphics.Length; g++) + { + Graphic graphic = graphics[g]; + if (graphic != null && graphic.enabled != drawn) + graphic.enabled = drawn; + } + } + } + + private void SetHostSlotSheet(bool list) + { + if (slotParent == null || slotParent.parent == null) + return; + + if (hostPlate == null) + hostPlate = slotParent.parent.GetComponent(); + if (hostPlate == null) + return; + + if (list) + { + if (!hostSpriteCleared && hostPlate.sprite != null + && hostPlate.sprite.name.IndexOf("slot", System.StringComparison.OrdinalIgnoreCase) >= 0) + { + savedHostSprite = hostPlate.sprite; + hostSpriteCleared = true; + hostPlate.sprite = null; + } + + Color c = hostPlate.color; + if (c.a < 0.98f) + hostPlate.color = new Color(c.r, c.g, c.b, 1f); + return; + } + + if (hostSpriteCleared) + { + hostPlate.sprite = savedHostSprite; + savedHostSprite = null; + hostSpriteCleared = false; + } + } /// Cover exactly the grid's on-screen rect (the grid can be resized by layout after Init). private void SyncRect() @@ -184,22 +365,47 @@ namespace InventoryFramework private void LateUpdate() { if (slotParent == null) { Destroy(gameObject); return; } + + // List view is a sibling of the bag/chest panel. When the panel closes, hide chrome + // or Esc/Tab leave a stuck empty menu with no close path. + if (!IsHostPanelOpen()) + { + if (chromeVisible) + HideChrome(); + ApplyListModeVisuals(list: false); + return; + } + bool list = ListMode; - if (list) SyncRect(); - if (lastVersion != Version || gridGroup.alpha != (list ? 0f : 1f)) + ApplyListModeVisuals(list); + if (list) + SyncRect(); + + bool wantChrome = list; + if (lastVersion != Version || chromeVisible != wantChrome || (list && GetComponent() != null && !GetComponent().enabled)) { lastVersion = Version; - gridGroup.alpha = list ? 0f : 1f; - gridGroup.blocksRaycasts = !list; - gridGroup.interactable = !list; - for (int i = 0; i < root.childCount; i++) root.GetChild(i).gameObject.SetActive(list); - GetComponent().enabled = list; - if (gridBackToggle != null) gridBackToggle.SetActive(!list && !ManafallTouchUi.IsActive); - if (toggleLabel != null) toggleLabel.text = "Grid"; + chromeVisible = wantChrome; + for (int i = 0; i < root.childCount; i++) + root.GetChild(i).gameObject.SetActive(list); + Image plate = GetComponent(); + if (plate != null) + plate.enabled = list; + if (gridBackToggle != null) + gridBackToggle.SetActive(!list && !ManafallTouchUi.IsActive); + if (toggleLabel != null) + toggleLabel.text = "Grid"; lastHash = 0; } - if (!list) { PositionGridToggle(); return; } - if (Time.unscaledTime < nextScan) return; + + if (!list) + { + PositionGridToggle(); + return; + } + + if (Time.unscaledTime < nextScan) + return; nextScan = Time.unscaledTime + 0.2f; Rebuild(); } diff --git a/Assets/Scripts/Inventory/ItemLootRarity.cs b/Assets/Scripts/Inventory/ItemLootRarity.cs index 0cd30bfab..2d79cd2a6 100644 --- a/Assets/Scripts/Inventory/ItemLootRarity.cs +++ b/Assets/Scripts/Inventory/ItemLootRarity.cs @@ -1,11 +1,11 @@ using System; +using UnityEngine; namespace InventoryFramework { /// - /// Shared loot rarity rules (matches high-end chest filtering). - /// Prefers tiers so metal bars and similar loot - /// keep a clear Common → Epic ladder. + /// Shared loot rarity rules. Every item resolves to a ; + /// that tier alone drives random loot rates (Abundant often → Epic almost never). /// public static class ItemLootRarity { @@ -62,6 +62,45 @@ namespace InventoryFramework return PassesSharedCreatureLootExclusions(item); } + /// + /// Canonical loot roll weight for any item: → rate. + /// Optional slightly favors Uncommon+ on high-level kills. + /// Optional biases within a themed pool (1 = pure tier). + /// + public static float ResolveLootWeight( + Item item, + float creatureQuality01 = 0f, + float relativeMul = 1f) + { + if (item == null) + return 0f; + + float weight = MarketItemRarity.LootWeightFor(item); + if (weight <= 0.001f) + return 0f; + + float quality = Mathf.Clamp01(creatureQuality01); + if (quality > 0.01f) + { + MarketItemRarity.Tier tier = MarketItemRarity.GetProfile(item).Tier; + if (tier >= MarketItemRarity.Tier.Epic) + weight *= Mathf.Lerp(1f, 4.2f, quality); + else if (tier >= MarketItemRarity.Tier.Rare) + weight *= Mathf.Lerp(1f, 3.5f, quality); + else if (tier >= MarketItemRarity.Tier.Uncommon) + weight *= Mathf.Lerp(1f, 1.55f, quality); + else if (tier <= MarketItemRarity.Tier.Abundant) + weight *= Mathf.Lerp(1f, 0.82f, quality); + } + + float mul = relativeMul > 0.001f ? relativeMul : 1f; + return weight * mul; + } + + /// Tier of an item for UI / filters (never null — InferProfile always assigns one). + public static MarketItemRarity.Tier ResolveTier(Item item) => + MarketItemRarity.GetProfile(item).Tier; + private static bool PassesSharedCreatureLootExclusions(Item item) { if (item == null || item.id <= 0) @@ -88,6 +127,10 @@ namespace InventoryFramework if (LoreBookLootUtility.IsLoreBookItem(item)) return false; + // Tier weight 0 = excluded / special-only — never random creature loot. + if (MarketItemRarity.LootWeightFor(item) <= 0.001f) + return false; + return true; } } diff --git a/Assets/Scripts/Inventory/TierLootRoll.cs b/Assets/Scripts/Inventory/TierLootRoll.cs new file mode 100644 index 000000000..bbdc534c4 --- /dev/null +++ b/Assets/Scripts/Inventory/TierLootRoll.cs @@ -0,0 +1,128 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace InventoryFramework +{ + /// Shared weighted picks where every candidate's chance comes from item tier. + public static class TierLootRoll + { + public struct Candidate + { + public Item item; + public float weight; + public int minAmount; + public int maxAmount; + } + + public static float Weight(Item item, float creatureQuality01 = 0f, float relativeMul = 1f) => + ItemLootRarity.ResolveLootWeight(item, creatureQuality01, relativeMul); + + public static bool TryAdd( + List dest, + HashSet pickedIds, + Item item, + int minAmount, + int maxAmount, + float creatureQuality01 = 0f, + float relativeMul = 1f) + { + if (dest == null || item == null || item.id <= 0) + return false; + if (pickedIds != null && pickedIds.Contains(item.id)) + return false; + + float weight = Weight(item, creatureQuality01, relativeMul); + if (weight <= 0.001f) + return false; + + int lo = Mathf.Max(1, Mathf.Min(minAmount, maxAmount)); + int hi = Mathf.Max(lo, Mathf.Max(minAmount, maxAmount)); + dest.Add(new Candidate + { + item = item, + weight = weight, + minAmount = lo, + maxAmount = hi, + }); + return true; + } + + public static int PickIndex(List candidates) + { + if (candidates == null || candidates.Count == 0) + return -1; + + float total = 0f; + for (int i = 0; i < candidates.Count; i++) + total += candidates[i].weight; + + if (total <= 0f) + return -1; + + float roll = Random.Range(0f, total); + float cumulative = 0f; + for (int i = 0; i < candidates.Count; i++) + { + cumulative += candidates[i].weight; + if (roll <= cumulative) + return i; + } + + return candidates.Count - 1; + } + + public static int PickIndex(List<(Item item, float weight)> candidates) + { + if (candidates == null || candidates.Count == 0) + return -1; + + float total = 0f; + for (int i = 0; i < candidates.Count; i++) + total += candidates[i].weight; + + if (total <= 0f) + return -1; + + float roll = Random.Range(0f, total); + float cumulative = 0f; + for (int i = 0; i < candidates.Count; i++) + { + cumulative += candidates[i].weight; + if (roll <= cumulative) + return i; + } + + return candidates.Count - 1; + } + + /// Weighted pick where each entry's chance is its item's MarketItemRarity tier rate. + public static int PickIndexByItemTier(IReadOnlyList candidates, System.Func itemOf) + { + if (candidates == null || candidates.Count == 0 || itemOf == null) + return -1; + + float total = 0f; + for (int i = 0; i < candidates.Count; i++) + total += Weight(itemOf(candidates[i])); + + if (total <= 0.001f) + return -1; + + float roll = Random.Range(0f, total); + float cumulative = 0f; + int last = -1; + for (int i = 0; i < candidates.Count; i++) + { + float w = Weight(itemOf(candidates[i])); + if (w <= 0.001f) + continue; + last = i; + cumulative += w; + if (roll <= cumulative) + return i; + } + + return last; + } + } +} diff --git a/Assets/Scripts/Inventory/TierLootRoll.cs.meta b/Assets/Scripts/Inventory/TierLootRoll.cs.meta new file mode 100644 index 000000000..44a6cc8e1 --- /dev/null +++ b/Assets/Scripts/Inventory/TierLootRoll.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a8c3e91f4b2d704e9a15c6d8073f1e2b diff --git a/Assets/Scripts/KillChallenger/KillChallengerCorpseLootChest.cs b/Assets/Scripts/KillChallenger/KillChallengerCorpseLootChest.cs index da2e66630..5af0acc34 100644 --- a/Assets/Scripts/KillChallenger/KillChallengerCorpseLootChest.cs +++ b/Assets/Scripts/KillChallenger/KillChallengerCorpseLootChest.cs @@ -434,7 +434,23 @@ public sealed class KillChallengerCorpseLootChest : NetworkChest if (!IsCorpseLootable()) return false; - float range = Mathf.Clamp(InteractRange, 1f, 6f); + return IsBodyInLootRange(playerPosition, InteractRange); + } + + public override bool IsPlayerInRange(Vector3 playerPosition, float range) + { + if (!IsCorpseLootable()) + return false; + + return IsBodyInLootRange(playerPosition, range); + } + + public override bool ServerIsPlayerInRange(Vector3 playerPosition) => + IsCorpseLootable() && IsPlayerInInteractRange(playerPosition); + + private bool IsBodyInLootRange(Vector3 playerPosition, float range) + { + range = Mathf.Clamp(Mathf.Max(0.5f, range), 0.5f, 8f); // Prefer the corpse look volume (covers the fallen body). Transform volumeTf = transform.Find(BodyLookVolumeName); @@ -457,9 +473,6 @@ public sealed class KillChallengerCorpseLootChest : NetworkChest return Mathf.Abs(delta.y) <= range + 1.5f; } - public override bool ServerIsPlayerInRange(Vector3 playerPosition) => - IsCorpseLootable() && IsPlayerInInteractRange(playerPosition); - /// World point near the torso for proximity checks (hips, else mid feet→head). public Vector3 ResolveBodyLootWorldPosition() { diff --git a/Assets/Scripts/LootSpawner.cs b/Assets/Scripts/LootSpawner.cs index e6d432fad..9fac137e0 100644 --- a/Assets/Scripts/LootSpawner.cs +++ b/Assets/Scripts/LootSpawner.cs @@ -1192,18 +1192,18 @@ public class LootSpawner : NetworkChest, IInteractable, IInteractionPrompt LootCandidate picked; if (abundants != null && abundants.Count > 0 && Random.value < Mathf.Clamp01(abundantChance)) - picked = abundants[Random.Range(0, abundants.Count)]; + picked = PickTierWeightedCandidate(abundants); else { bool wantUncommon = Random.value < Mathf.Clamp01(uncommonChance); if (wantUncommon && uncommons.Count > 0) - picked = uncommons[Random.Range(0, uncommons.Count)]; + picked = PickTierWeightedCandidate(uncommons); else if (commons.Count > 0) - picked = commons[Random.Range(0, commons.Count)]; + picked = PickTierWeightedCandidate(commons); else if (uncommons.Count > 0) - picked = uncommons[Random.Range(0, uncommons.Count)]; + picked = PickTierWeightedCandidate(uncommons); else if (abundants != null && abundants.Count > 0) - picked = abundants[Random.Range(0, abundants.Count)]; + picked = PickTierWeightedCandidate(abundants); else { GameObject prefab = PickAnyAllowedLootPrefab(); @@ -1211,11 +1211,28 @@ public class LootSpawner : NetworkChest, IInteractable, IInteractionPrompt } } + if (picked.Item == null) + { + GameObject prefab = PickAnyAllowedLootPrefab(); + return prefab != null && TryResolveItemFromLootPrefab(prefab, out item, out amount) && item != null; + } + item = picked.Item; amount = picked.RollDirectStack ? RollDirectAmount() : Mathf.Max(1, picked.Amount); return item != null; } + private static LootCandidate PickTierWeightedCandidate(List pool) + { + if (pool == null || pool.Count == 0) + return default; + + int index = InventoryFramework.TierLootRoll.PickIndexByItemTier(pool, c => c.Item); + if (index < 0) + return pool[Random.Range(0, pool.Count)]; + return pool[index]; + } + private int RollDirectAmount() { int min = Mathf.Max(1, directLootMinAmount); diff --git a/Assets/Scripts/ManafallIdentity.cs b/Assets/Scripts/ManafallIdentity.cs index e98a248c4..8ef5d873d 100644 --- a/Assets/Scripts/ManafallIdentity.cs +++ b/Assets/Scripts/ManafallIdentity.cs @@ -5,7 +5,7 @@ public static class ManafallIdentity { public const string ProductName = "Manafall"; - public const string Version = "0.1.43"; + public const string Version = "0.1.44"; /// Unity Player Settings Company Name. Replace with your legal name if a store requires it. public const string PublisherField = "Independent"; public const string BundleId = "com.manafall.manafall"; diff --git a/Assets/Scripts/ManafallWaterRippleSimulation.cs b/Assets/Scripts/ManafallWaterRippleSimulation.cs index 8c0333ab0..f349148ab 100644 --- a/Assets/Scripts/ManafallWaterRippleSimulation.cs +++ b/Assets/Scripts/ManafallWaterRippleSimulation.cs @@ -433,7 +433,9 @@ public sealed class ManafallWaterRippleSimulation : MonoBehaviour Vector2 vel = emitter.PlanarVelocityXZ; bool kelvin = emitter.UseKelvinWakeStamps && (s > 0 || emitter.PlanarSpeed >= 0.25f); - float str = Mathf.Max(emitter.EvaluateStampStrength(s), 0.14f); + float str = emitter.EvaluateStampStrength(s); + if (str < 0.02f) + continue; if (!TryStampWorld( _stampPosScratch[s], emitter.EvaluateStampRadius(s), diff --git a/Assets/Scripts/Market/MarketItemRarity.cs b/Assets/Scripts/Market/MarketItemRarity.cs index dbf5bb2e4..8918af3d3 100644 --- a/Assets/Scripts/Market/MarketItemRarity.cs +++ b/Assets/Scripts/Market/MarketItemRarity.cs @@ -174,6 +174,11 @@ namespace InventoryFramework ["Runed Troll Fang"] = new(Tier.Rare, 8_500, 0.12f, false), ["Ancient Troll Idol Fragment"] = new(Tier.Rare, 28_000, 0.08f, false), ["Troll Heart Core"] = new(Tier.Epic, 85_000, 0.04f, false), + // Druclad void fire boss — CatalogWeight is the creature loot roll weight. + ["Abyssal Ember Ash"] = new(Tier.Common, 55, 2.4f, false), + ["Void Cinder Scale"] = new(Tier.Uncommon, 480, 0.9f, false), + ["Druclad Horn Shard"] = new(Tier.Rare, 14_000, 0.14f, false), + ["Abyss Fire Heart"] = new(Tier.Epic, 90_000, 0.04f, false), ["Vikra Talon"] = new(Tier.Rare, 12_000, 0.14f, false), ["Vikra Bone Shard"] = new(Tier.Rare, 9_500, 0.16f, false), ["Vikra Wing Membrane"] = new(Tier.Rare, 15_000, 0.12f, false), @@ -182,6 +187,8 @@ namespace InventoryFramework ["Nightling Hide"] = new(Tier.Rare, 11_000, 0.14f, false), ["Nightling Essence"] = new(Tier.Rare, 22_000, 0.1f, false), ["Nightling Shadow Shard"] = new(Tier.Epic, 65_000, 0.06f, false), + // Nightling-only signature rare — CatalogWeight 0 keeps it out of generic pools. + ["Dusk-Fee Token"] = new(Tier.Rare, 15_000, 0f, false), ["Glacial Pelt Lock"] = new(Tier.Rare, 9_800, 0.12f, false), ["Frostfang Shard"] = new(Tier.Rare, 18_000, 0.1f, false), ["Phosphor Gland"] = new(Tier.Rare, 8_500, 0.14f, false), @@ -235,6 +242,27 @@ namespace InventoryFramework public static int GetBaseCoinPrice(Item item) => GetProfile(item).BaseCoinPrice; + /// + /// Creature/chest loot roll weight from the item's rarity tier. + /// Every item gets a tier via ; CatalogWeight is the rate for that tier + /// (or an explicit ByName override). Weight 0 means the item is excluded from random loot. + /// + public static float LootWeightFor(Item item) + { + if (item == null) + return 0f; + + Profile profile = GetProfile(item); + // Explicit 0 = excluded / special-only (never randomly rolled). + if (profile.CatalogWeight <= 0.001f) + return 0f; + + return profile.CatalogWeight; + } + + /// Default loot rate ladder shared by markets and creature tables. + public static float LootWeightForTier(Tier tier) => WeightForTier(tier); + public static int ClampPriceForTier(Tier tier, int price) { return tier switch @@ -410,7 +438,11 @@ namespace InventoryFramework || name.IndexOf("glacial", StringComparison.OrdinalIgnoreCase) >= 0 || name.IndexOf("frostfang", StringComparison.OrdinalIgnoreCase) >= 0 || name.IndexOf("phosphor", StringComparison.OrdinalIgnoreCase) >= 0 - || name.IndexOf("wisp", StringComparison.OrdinalIgnoreCase) >= 0; + || name.IndexOf("wisp", StringComparison.OrdinalIgnoreCase) >= 0 + || name.IndexOf("druclad", StringComparison.OrdinalIgnoreCase) >= 0 + || name.IndexOf("abyss", StringComparison.OrdinalIgnoreCase) >= 0 + || name.IndexOf("abyssal", StringComparison.OrdinalIgnoreCase) >= 0 + || name.IndexOf("cinder", StringComparison.OrdinalIgnoreCase) >= 0; private static int PriceForTier(Tier tier, Item item) { diff --git a/Assets/Scripts/Menu/MainMenuDirector.cs b/Assets/Scripts/Menu/MainMenuDirector.cs index f55ad4b34..fb824eaeb 100644 --- a/Assets/Scripts/Menu/MainMenuDirector.cs +++ b/Assets/Scripts/Menu/MainMenuDirector.cs @@ -1218,6 +1218,7 @@ public sealed class MainMenuDirector : MonoBehaviour BuildOptionsPanel(canvasRt); BuildCreditsPanel(canvasRt); BuildOfflineSavesPanel(canvasRt); + CreateBuildVersionLabel(canvasRt); } private void OpenSealclashCardGame() @@ -2582,6 +2583,58 @@ public sealed class MainMenuDirector : MonoBehaviour tmp.font = TMP_Settings.defaultFontAsset; } + /// + /// Bottom-left build version so players can tell Mega / Probe / patched installs apart. + /// Uses (Player Settings), not a hardcoded string. + /// + private void CreateBuildVersionLabel(RectTransform canvasRt) + { + if (canvasRt == null) + return; + + Transform existing = canvasRt.Find("BuildVersionLabel"); + if (existing != null) + Destroy(existing.gameObject); + + string appVersion = Application.version; + if (string.IsNullOrWhiteSpace(appVersion)) + appVersion = ManafallIdentity.Version; + + string lastApplied = PlayerPrefs.GetString("Manafall.Patch.LastApplied", string.Empty).Trim(); + string label = "v" + appVersion.Trim(); + if (!string.IsNullOrEmpty(lastApplied) + && !string.Equals(lastApplied, appVersion.Trim(), System.StringComparison.OrdinalIgnoreCase)) + { + label += " (patched " + lastApplied + ")"; + } + +#if DEVELOPMENT_BUILD + label += " DEV"; +#endif + + var go = new GameObject("BuildVersionLabel", typeof(RectTransform)); + go.transform.SetParent(canvasRt, false); + RectTransform rt = go.GetComponent(); + rt.anchorMin = new Vector2(0f, 0f); + rt.anchorMax = new Vector2(0f, 0f); + rt.pivot = new Vector2(0f, 0f); + rt.anchoredPosition = new Vector2(touchMenu ? 18f : 24f, touchMenu ? 14f : 18f); + rt.sizeDelta = new Vector2(touchMenu ? 420f : 520f, touchMenu ? 28f : 26f); + + TextMeshProUGUI tmp = go.AddComponent(); + tmp.text = label; + tmp.fontSize = touchMenu ? 18f : 16f; + tmp.alignment = TextAlignmentOptions.Left; + tmp.color = new Color(1f, 0.96f, 0.86f, 0.72f); + tmp.raycastTarget = false; + if (TMP_Settings.defaultFontAsset != null) + tmp.font = TMP_Settings.defaultFontAsset; + + Debug.Log("[MainMenu] Build version label: " + label + + " identity=" + ManafallIdentity.Version + + " unity=" + Application.unityVersion); + } + private void CreateManafallTitle(RectTransform parent) { Sprite titleSprite = ResolveManafallTitleSprite(); diff --git a/Assets/Scripts/MeteorStrike/Editor/MeteorStrikeAssetBuilder.cs b/Assets/Scripts/MeteorStrike/Editor/MeteorStrikeAssetBuilder.cs index da691f77c..211f97407 100644 --- a/Assets/Scripts/MeteorStrike/Editor/MeteorStrikeAssetBuilder.cs +++ b/Assets/Scripts/MeteorStrike/Editor/MeteorStrikeAssetBuilder.cs @@ -86,8 +86,9 @@ public static class MeteorStrikeAssetBuilder } table.entries.Clear(); - table.entries.Add(new MeteorLootTable.Entry { item = iron, weight = 6f, minAmount = 2, maxAmount = 5 }); - table.entries.Add(new MeteorLootTable.Entry { item = shard, weight = 3f, minAmount = 1, maxAmount = 2 }); + // weight 0 = pure MarketItemRarity tier rate at roll time (see MeteorLootTable.RollLoot). + table.entries.Add(new MeteorLootTable.Entry { item = iron, weight = 0f, minAmount = 2, maxAmount = 5 }); + table.entries.Add(new MeteorLootTable.Entry { item = shard, weight = 0f, minAmount = 1, maxAmount = 2 }); var seen = new HashSet { iron.id, shard.id }; int rare = 0, epic = 0; @@ -116,7 +117,7 @@ public static class MeteorStrikeAssetBuilder table.entries.Add(new MeteorLootTable.Entry { item = item, - weight = tier == MarketItemRarity.Tier.Epic ? 1f : 2.5f, + weight = 0f, minAmount = 1, maxAmount = item.maxStack > 1 ? 2 : 1 }); diff --git a/Assets/Scripts/MeteorStrike/MeteorLootTable.cs b/Assets/Scripts/MeteorStrike/MeteorLootTable.cs index bc0443220..309ab56a7 100644 --- a/Assets/Scripts/MeteorStrike/MeteorLootTable.cs +++ b/Assets/Scripts/MeteorStrike/MeteorLootTable.cs @@ -29,8 +29,20 @@ public sealed class MeteorLootTable : ScriptableObject var results = new List(rolls); var pool = new List(entries.Count); for (int i = 0; i < entries.Count; i++) - if (entries[i].item != null && entries[i].weight > 0f) - pool.Add(entries[i]); + { + Entry row = entries[i]; + if (row.item == null) + continue; + + // Serialized weight is a relative mul; loot rate comes from MarketItemRarity tier. + float relativeMul = row.weight > 0.001f ? row.weight : 1f; + float tierWeight = ItemLootRarity.ResolveLootWeight(row.item, relativeMul: relativeMul); + if (tierWeight <= 0.001f) + continue; + + row.weight = tierWeight; + pool.Add(row); + } for (int r = 0; r < rolls && pool.Count > 0; r++) { diff --git a/Assets/Scripts/Networking/HostWorldSave.cs b/Assets/Scripts/Networking/HostWorldSave.cs index 61d1ea56f..9addf14e6 100644 --- a/Assets/Scripts/Networking/HostWorldSave.cs +++ b/Assets/Scripts/Networking/HostWorldSave.cs @@ -68,6 +68,8 @@ public static class HostWorldSave public int[] witchRecipes = Array.Empty(); public int[] witchBooksRead = Array.Empty(); public string[] blacksmithForgeGrants; + public byte[] diseaseIds; + public float[] diseaseRemainingSeconds; } [Serializable] @@ -120,6 +122,7 @@ public static class HostWorldSave HostMountSave.NotifySessionEnded(); TavernBarChestSave.NotifySessionEnded(); PlaceableOwnership.NotifySessionEnded(); + DrucladWorldFlags.NotifySessionEnded(); } public static void NotifySessionEnded() @@ -130,6 +133,7 @@ public static class HostWorldSave HostMountSave.NotifySessionEnded(); TavernBarChestSave.NotifySessionEnded(); PlaceableOwnership.NotifySessionEnded(); + DrucladWorldFlags.NotifySessionEnded(); } public static string SlotRootDirectory() @@ -174,6 +178,7 @@ public static class HostWorldSave CaptureWorldEntities(); HostMountSave.ServerCapture(); TavernBarChestSave.ServerCapture(); + DrucladWorldFlags.ServerCapture(); // Terrain dig/fill op log (holes, tunnels, mounds) saves with the world. VoxelWorld.Instance?.ServerFlushDigSave(true); long t2 = System.Diagnostics.Stopwatch.GetTimestamp(); @@ -276,6 +281,8 @@ public static class HostWorldSave witchRecipes = CaptureWitchRecipes(player, false), witchBooksRead = CaptureWitchRecipes(player, true), blacksmithForgeGrants = baseData.blacksmithForgeGrants, + diseaseIds = baseData.diseaseIds, + diseaseRemainingSeconds = baseData.diseaseRemainingSeconds, }; return blob; } @@ -671,6 +678,8 @@ public static class HostWorldSave hotbar = blob.hotbar, equipment = blob.equipment, blacksmithForgeGrants = blob.blacksmithForgeGrants, + diseaseIds = blob.diseaseIds, + diseaseRemainingSeconds = blob.diseaseRemainingSeconds, }; // Don't stomp day/night from a remote player's blob. @@ -748,6 +757,7 @@ public static class HostWorldSave SaveFileWriter.Flush(); HostMountSave.ServerRestore(); + DrucladWorldFlags.ServerRestore(); string path = WorldEntitiesPath(); if (!File.Exists(path)) { diff --git a/Assets/Scripts/Networking/NetworkNpcReplication.cs b/Assets/Scripts/Networking/NetworkNpcReplication.cs index 9c091bc21..3bd23caa2 100644 --- a/Assets/Scripts/Networking/NetworkNpcReplication.cs +++ b/Assets/Scripts/Networking/NetworkNpcReplication.cs @@ -50,6 +50,7 @@ public static class NetworkNpcReplication || identity.TryGetComponent(out BanditCampController _) || identity.TryGetComponent(out TrollController _) || identity.TryGetComponent(out HellhoundController _) + || identity.TryGetComponent(out DrucladController _) || identity.TryGetComponent(out IceWolfController _) || identity.TryGetComponent(out Manafall.RuneSprites.RuneSpriteController _); } @@ -362,6 +363,7 @@ public static class NetworkNpcReplication return root.TryGetComponent(out IceWolfController _) || root.TryGetComponent(out HellhoundController _) || root.TryGetComponent(out TrollController _) + || root.TryGetComponent(out DrucladController _) || root.TryGetComponent(out BanditController _) || root.TryGetComponent(out ScorpionController _) || root.TryGetComponent(out CaveWormController _) diff --git a/Assets/Scripts/Networking/OfflineSoloSave.cs b/Assets/Scripts/Networking/OfflineSoloSave.cs index 9a6b3c3b6..7be778347 100644 --- a/Assets/Scripts/Networking/OfflineSoloSave.cs +++ b/Assets/Scripts/Networking/OfflineSoloSave.cs @@ -83,6 +83,10 @@ public static class OfflineSoloSave public SlotRecord[] equipment = Array.Empty(); /// Village smith keys this player may use. Empty on saves from before forge permission was kept. public string[] blacksmithForgeGrants; + /// Active mundane disease ids (byte DiseaseId). Empty/null on older saves. + public byte[] diseaseIds; + /// Remaining seconds per diseaseIds entry. + public float[] diseaseRemainingSeconds; } [Serializable] @@ -582,6 +586,14 @@ public static class OfflineSoloSave data.longTermStamina = stamina.CurrentLongTermStamina; } + PlayerDiseaseRuntime diseases = PlayerDiseaseRuntime.EnsureOn(player.gameObject); + if (diseases != null) + { + PlayerDiseaseRuntime.SaveSnapshot snap = diseases.CaptureSave(); + data.diseaseIds = snap.ids; + data.diseaseRemainingSeconds = snap.remainingSeconds; + } + if (DayNightCycle.Instance != null) { data.timeNormalized = DayNightCycle.Instance.TimeNormalized; @@ -676,6 +688,17 @@ public static class OfflineSoloSave if (stamina != null) stamina.RestoreExact(data.stamina, data.longTermStamina); + PlayerDiseaseRuntime diseases = PlayerDiseaseRuntime.EnsureOn(player.gameObject); + DiseaseAmbientDriver.EnsureOn(player.gameObject); + if (diseases != null) + { + diseases.ApplySave(new PlayerDiseaseRuntime.SaveSnapshot + { + ids = data.diseaseIds, + remainingSeconds = data.diseaseRemainingSeconds, + }); + } + if (DayNightCycle.Instance != null) DayNightCycle.Instance.SetClock(data.timeNormalized, data.dayNumber); diff --git a/Assets/Scripts/PlayerAquaticController.cs b/Assets/Scripts/PlayerAquaticController.cs index 9c530c724..8191845d3 100644 --- a/Assets/Scripts/PlayerAquaticController.cs +++ b/Assets/Scripts/PlayerAquaticController.cs @@ -36,8 +36,8 @@ public sealed class PlayerAquaticController : MonoBehaviour [Tooltip("Once swimming, keep swimming until the feet are shallower than this (avoids flicker at the shore).")] [SerializeField] private float swimStopFeetDepthMeters = 0.7f; private bool swimStateLatched; - [Tooltip("If ground under the feet is within this of the water plane, treat as dry shore (not swimming).")] - [SerializeField] private float dryShoreTerrainClearance = 0.1f; + [Tooltip("If ground under the feet is within this of the calm water plane, treat as dry shore (not swimming).")] + [SerializeField] private float dryShoreTerrainClearance = 0.12f; [Tooltip("Optional; when unset, the first SeaWaterSurface in the scene supplies material params and plane vertical offset.")] [SerializeField] private SeaWaterSurface seaWaterSurface; [Tooltip("Uses Gerstner vertical displacement from Manafall/WaterSurface so breath line and buoyancy track visible swell on the open ocean.")] @@ -50,6 +50,10 @@ public sealed class PlayerAquaticController : MonoBehaviour [SerializeField] private float inWaterGravityMultiplier = 0.035f; [SerializeField] private float buoyancyUpSpeed = 2.4f; [SerializeField] private float swimPaddleUpSpeed = 5.5f; + [Tooltip("Meters per second straight down while Ctrl is held in the water.")] + [SerializeField] private float swimPaddleDownSpeed = 4.8f; + [Tooltip("Sink speed when idle in the water — not holding Space and not swimming.")] + [SerializeField] private float idleSinkSpeed = 1.35f; [Tooltip("Planar speed lerps from land (×1) toward swim multiplier as more of the capsule sits below the surface. Higher = stay closer to land speed until deeper.")] [SerializeField] private float swimSpeedSubmersionExponent = 1.28f; [Tooltip("Fraction of capsule height below the surface before swim slowdown begins (0–1).")] @@ -153,9 +157,13 @@ public sealed class PlayerAquaticController : MonoBehaviour [Header("Debug")] [Tooltip("Logs water/motor evaluation every relevant tick (PrepareMotor runs twice/frame when walking). Search Console for [MF_AQUATIC_MV]. Disable after profiling.")] [SerializeField] private bool logAquaticMovementDebug = false; + [Tooltip("Logs camera vs water surface for breath/tint. Search Console for [MF_UWCAM].")] + [SerializeField] private bool logUnderwaterCameraDebug = true; /// Copy/paste into Unity Console search: [MF_AQUATIC_MV] public const string AquaticMovementSearchToken = "[MF_AQUATIC_MV]"; + /// Copy/paste into Unity Console search: [MF_UWCAM] + public const string UnderwaterCameraDebugToken = "[MF_UWCAM]"; private IAquaticMotorHooks motorHooks; private AquaticPhysicsSimulator aquaticPhysicsSimulator; @@ -164,6 +172,7 @@ public sealed class PlayerAquaticController : MonoBehaviour private PlayerSailBoatMount sailDeckMount; private InputAction swimJumpAction; + private InputAction swimDiveAction; private float oxygen; private float waterSurfaceY; private bool hasWaterSurface; @@ -251,6 +260,12 @@ public sealed class PlayerAquaticController : MonoBehaviour public bool ShouldDriveWaterRipples => aquaticEffectsAllowed && hasWaterSurface && (inWaterForMotor || CapsuleIntersectsWater || bodyInWater); + public bool SwimAscendHeld => swimJumpAction != null && swimJumpAction.IsPressed(); + public bool SwimDescendHeld => swimDiveAction != null && swimDiveAction.IsPressed(); + public bool SwimPlanarHeld => AquaticPlanarInputTrying(); + public float SwimDiveSpeed => swimPaddleDownSpeed; + public float IdleSinkSpeed => idleSinkSpeed; + /// When set, vertical buoyancy/wave-follow runs via (server authority). public bool UseServerAquaticVertical => aquaticPhysicsSimulator != null; @@ -350,16 +365,23 @@ public sealed class PlayerAquaticController : MonoBehaviour swimJumpAction = new InputAction("AquaticSwimJump", InputActionType.Button); swimJumpAction.AddBinding("/space"); swimJumpAction.AddBinding("/buttonSouth"); + + swimDiveAction = new InputAction("AquaticSwimDive", InputActionType.Button); + swimDiveAction.AddBinding("/leftCtrl"); + swimDiveAction.AddBinding("/rightCtrl"); + swimDiveAction.AddBinding("/buttonEast"); } private void OnEnable() { swimJumpAction?.Enable(); + swimDiveAction?.Enable(); } private void OnDisable() { swimJumpAction?.Disable(); + swimDiveAction?.Disable(); ResetAquaticSurfaceSmoothing(); motorHooks?.ResetAquaticMovementMultipliers(); if (stamina != null) @@ -609,6 +631,16 @@ public sealed class PlayerAquaticController : MonoBehaviour if (hasWaterSurface && controller != null) TryPromoteDeepWorldSea(controller.bounds); + // Capsule under the map-wide sea dive volume while map terrain is dry hills above sea: + // refuse ocean swim/breath (same land gate as ManafallUnderwaterRenderFeature). + if (hasWaterSurface && controller != null + && ShouldSuppressOceanUnderDryLand(controller.bounds.center.x, controller.bounds.center.z)) + { + hasWaterSurface = false; + waterSurfaceKind = WaterSurfaceKind.None; + waterSurfaceY = float.NaN; + } + if (!hasWaterSurface) { ResetAquaticSurfaceSmoothing(); @@ -665,14 +697,32 @@ public sealed class PlayerAquaticController : MonoBehaviour playerCamera != null ? playerCamera.transform.position.z : b.center.z); float surfaceAtFeet = GetLocalWaterSurfaceY(b.center.x, b.center.z); waterSurfaceY = ResolveCapsuleDrivingSurfaceY(b); - eyesBelowSurface = GetEyeWorldY() < surfaceAtEyes - surfaceEpsilon; + bool dryShore = IsStandingOnDryShore(b, surfaceAtFeet); + float eyeY = GetEyeWorldY(); + // Breath / tint / underwater audio: camera lens must be under the local surface. + // On WorldSea use the calm plane so wave crests do not drown you on a dry beach. + float eyeSurfaceY = waterSurfaceKind == WaterSurfaceKind.WorldSea + ? ResolveCalmShoreSurfaceY(surfaceAtEyes) + : surfaceAtEyes; + eyesBelowSurface = !dryShore && eyeY < eyeSurfaceY - surfaceEpsilon; + // Grounded under a water lid many meters above the camera is never "eyes underwater" + // (PhysicsColliders tall dive volume / wrong surface pick). + if (eyesBelowSurface + && controller != null + && controller.isGrounded + && eyeSurfaceY > eyeY + 1.5f + && (eyeSurfaceY - eyeY) > 3.5f) + { + eyesBelowSurface = false; + } // Deep dives still count via feet below surface + water column / volume. // Shore standing must NOT count just because beach height sits near the sea plane. - bodyInWater = EvaluateBodyInWater(b, surfaceAtFeet, waterProbeHitsVolume); + bodyInWater = !dryShore && EvaluateBodyInWater(b, surfaceAtFeet, waterProbeHitsVolume); // WorldSea plane is always found, but only allow aquatic state with real immersion. // Lake/collider water uses the same body-in-water gate (volume hit alone on dry shore is ignored). aquaticEffectsAllowed = bodyInWater || eyesBelowSurface; + LogUnderwaterCameraDebug(eyeY, eyeSurfaceY, surfaceAtFeet, dryShore, waterProbeHitsVolume); UpdateSplashAudio(); @@ -897,31 +947,42 @@ public sealed class PlayerAquaticController : MonoBehaviour float dt = Time.deltaTime; - if (!UseServerAquaticVertical) + swimJumpAction?.Enable(); + swimDiveAction?.Enable(); + bool ascend = SwimAscendHeld; + bool descend = SwimDescendHeld; + bool stroking = SwimPlanarHeld; + float equipMul = GetEquipmentMoveSpeedMultiplier(); + + if (descend && !UseServerAquaticVertical) { - float buoyScale = smoothedBuoyancySurfaceFactor * - Mathf.Pow(Mathf.Clamp01(lastSubmergedFractionForMotor), Mathf.Max(0.01f, buoyancySubmersionExponent)); - - bool swimDriveActive = AquaticPlanarInputTrying() || - (swimJumpAction != null && swimJumpAction.IsPressed()); - float buoyIdleMul = swimDriveActive ? 1f : buoyancyIdleScale; - - if (!SwimOverloaded) controller.Move(Vector3.up * buoyancyUpSpeed * buoyScale * buoyIdleMul * Mathf.Clamp01(1f - SwimMediumLoad01()) * dt); - // Idle swimmers float up until the head is just above the surface (Jean: idle player sank - // to ~2 m deep with the head under water). Holding a move/swim key skips this, so - // deliberate dives still work; let go and you drift back up. - // Heavy gear: overloaded swimmers keep sinking even while paddling. Idle float / idle sink - // is driven through the swim motor (GetIdleSwimTargetVerticalSpeed) so it is not fought by gravity. - if (SwimOverloaded && swimDriveActive) + controller.Move(Vector3.down * swimPaddleDownSpeed * equipMul * dt); + } + else if (!UseServerAquaticVertical) + { + bool swimDriveActive = stroking || ascend; + if (!swimDriveActive && !SwimOverloaded) + { + controller.Move(Vector3.down * idleSinkSpeed * dt); + } + else if (!SwimOverloaded) + { + float buoyScale = smoothedBuoyancySurfaceFactor * + Mathf.Pow(Mathf.Clamp01(lastSubmergedFractionForMotor), Mathf.Max(0.01f, buoyancySubmersionExponent)); + controller.Move(Vector3.up * buoyancyUpSpeed * buoyScale * Mathf.Clamp01(1f - SwimMediumLoad01()) * dt); + ApplyWaveSurfaceFollow(dt); + } + else if (swimDriveActive) + { controller.Move(Vector3.down * swimOverloadSinkSpeed * dt); - if (!SwimOverloaded) ApplyWaveSurfaceFollow(dt); + } + ApplyLocalWaveOrbitalDrift(dt); } - swimJumpAction?.Enable(); bool canSwimUp = (stamina == null || stamina.HasSwimLocomotionStamina) && !SwimOverloaded; - if (swimJumpAction != null && swimJumpAction.IsPressed() && smoothedBuoyancySurfaceFactor > 0.12f && canSwimUp) - controller.Move(Vector3.up * swimPaddleUpSpeed * GetEquipmentMoveSpeedMultiplier() * Mathf.Clamp01(lastSwimSpeedBlend01) * dt); + if (ascend && !descend && smoothedBuoyancySurfaceFactor > 0.12f && canSwimUp) + controller.Move(Vector3.up * swimPaddleUpSpeed * equipMul * Mathf.Max(0.45f, Mathf.Clamp01(lastSwimSpeedBlend01)) * dt); } /// @@ -1147,6 +1208,10 @@ public sealed class PlayerAquaticController : MonoBehaviour if (bodyBounds.min.y >= surfaceAtFeet - minWade) return false; + // Dry shore first: the map-wide sea dive volume overlaps beaches just above sea level. + if (IsStandingOnDryShore(bodyBounds, surfaceAtFeet)) + return false; + // Water-layer volume under/around the capsule is enough (lakes, sea surface probes). if (waterProbeHitsVolume) return true; @@ -1156,15 +1221,88 @@ public sealed class PlayerAquaticController : MonoBehaviour return true; // World-sea fallback without a volume hit: require a real water column (ground below the plane). - // Dry beaches sit at/above the plane and must stay out of swim state. - if (!TrySampleGroundUnderFeet(bodyBounds, out float groundY)) + if (!TrySampleGroundUnderFeet(bodyBounds, out _)) return bodyBounds.min.y < surfaceAtFeet - minWade; - float clearance = Mathf.Max(0.02f, dryShoreTerrainClearance); - if (groundY >= surfaceAtFeet - clearance) + return true; + } + + /// + /// Feet planted on map terrain at or above the calm water plane (wave crests ignored). + /// + private bool IsStandingOnDryShore(Bounds bodyBounds, float surfaceAtFeet) + { + if (!TrySampleGroundUnderFeet(bodyBounds, out float groundY)) return false; - return true; + float calmPlane = ResolveCalmShoreSurfaceY(surfaceAtFeet); + float clearance = Mathf.Max(0.02f, dryShoreTerrainClearance); + + // Beach at/above the calm plane stays dry even when Gerstner crests wash over it. + if (groundY >= calmPlane - clearance) + return true; + + // Grounded on a shelf only slightly under the calm plane, but not deep enough to wade. + float minWade = Mathf.Max(0.05f, minWadeDepthMeters); + if (controller != null + && controller.isGrounded + && groundY >= calmPlane - minWade + && bodyBounds.min.y >= calmPlane - minWade) + return true; + + return false; + } + + /// Calm ocean / lake plane for shore dryness — not the live Gerstner crest. + private float ResolveCalmShoreSurfaceY(float surfaceAtFeet) + { + if (waterSurfaceKind != WaterSurfaceKind.WorldSea) + return surfaceAtFeet; + + if (worldGenerator == null) + worldGenerator = FindFirstObjectByType(); + if (worldGenerator == null) + return surfaceAtFeet; + + float seaY = worldGenerator.SeaSurfaceWorldY; + SeaWaterSurface resolvedSea = ResolveSeaWaterSurfaceRef(); + if (includeSeaPlaneVerticalOffsetInPhysics && resolvedSea != null) + seaY += resolvedSea.PlaneVerticalOffset; + + return seaY; + } + + private float nextUnderwaterCameraDebugAt; + private bool lastLoggedEyesBelow; + + private void LogUnderwaterCameraDebug( + float eyeY, + float eyeSurfaceY, + float surfaceAtFeet, + bool dryShore, + bool waterProbeHitsVolume) + { + if (!logUnderwaterCameraDebug) + return; + + bool changed = eyesBelowSurface != lastLoggedEyesBelow; + float now = Time.unscaledTime; + if (!changed && now < nextUnderwaterCameraDebugAt) + return; + + lastLoggedEyesBelow = eyesBelowSurface; + nextUnderwaterCameraDebugAt = now + (eyesBelowSurface || changed ? 0.75f : 2.5f); + + float landY = float.NaN; + if (TrySampleGroundUnderFeet(controller != null ? controller.bounds : new Bounds(transform.position, Vector3.one), out float g)) + landY = g; + + Debug.Log( + $"{UnderwaterCameraDebugToken} eyesBelow={eyesBelowSurface} dryShore={dryShore} " + + $"eyeY={eyeY:F3} eyeSurfY={eyeSurfaceY:F3} feetSurfY={surfaceAtFeet:F3} " + + $"landY={(float.IsNaN(landY) ? "n/a" : landY.ToString("F3"))} " + + $"kind={waterSurfaceKind} bodyInWater={bodyInWater} probe={waterProbeHitsVolume} " + + $"fx={aquaticEffectsAllowed} breath={(aquaticEffectsAllowed && eyesBelowSurface)}"); } private bool TrySampleGroundUnderFeet(Bounds bodyBounds, out float groundY) @@ -1208,10 +1346,13 @@ public sealed class PlayerAquaticController : MonoBehaviour const QueryTriggerInteraction qti = QueryTriggerInteraction.Collide; + float headY = controller != null ? controller.bounds.max.y : transform.position.y + 1.6f; + float feetYProbe = controller != null ? controller.bounds.min.y : transform.position.y; float bestTop = float.NegativeInfinity; + float bestDistToHead = float.MaxValue; if (controller != null && TryCapsuleOverlapWater(mask, qti, out float capTop)) - bestTop = Mathf.Max(bestTop, capTop); + ConsiderPhysicsWaterSurface(capTop, headY, feetYProbe, ref bestTop, ref bestDistToHead); int colCount = Physics.OverlapSphereNonAlloc(p + Vector3.up * 1.5f, 6f, s_overlapBuffer, mask, qti); for (int i = 0; i < colCount; i++) @@ -1220,16 +1361,31 @@ public sealed class PlayerAquaticController : MonoBehaviour if (c == null || !c.enabled || IsIslandRiverWaterObject(c.gameObject)) continue; float y = PreferredWaterPlaneWorldY(c); - if (y > bestTop) - bestTop = y; + ConsiderPhysicsWaterSurface(y, headY, feetYProbe, ref bestTop, ref bestDistToHead); } if (bestTop > float.NegativeInfinity + 1f) { - waterSurfaceKind = WaterSurfaceKind.PhysicsColliders; - waterSurfaceY = bestTop; - hasWaterSurface = true; - return; + // Tall sea-dive lids / parent renderer max can sit many meters above the camera while + // you walk dry. Ignore those and fall through to WorldSea / river. + bool highLidWhileGrounded = controller != null + && controller.isGrounded + && bestTop > headY + 1.5f + && (bestTop - headY) > 3.5f; + if (!highLidWhileGrounded) + { + waterSurfaceKind = WaterSurfaceKind.PhysicsColliders; + waterSurfaceY = bestTop; + hasWaterSurface = true; + return; + } + + if (logUnderwaterCameraDebug) + { + Debug.Log( + $"{UnderwaterCameraDebugToken} skipPhysicsHighLid bestTop={bestTop:F3} headY={headY:F3} " + + $"delta={(bestTop - headY):F3} → try WorldSea"); + } } if (TryResolveIslandRiverWater(p.x, p.z, out float riverY)) @@ -1262,6 +1418,10 @@ public sealed class PlayerAquaticController : MonoBehaviour if (feetY > seaY + 14f) return; + // Dry hills above the ocean plane — never arm WorldSea (shell fall-through / void under terrain). + if (IsMapTerrainDryAboveOcean(p.x, p.z)) + return; + waterSurfaceKind = WaterSurfaceKind.WorldSea; waterSurfaceY = seaY; hasWaterSurface = true; @@ -1270,6 +1430,62 @@ public sealed class PlayerAquaticController : MonoBehaviour } } + /// + /// Map terrain at XZ sits clearly above the ocean plane (matches underwater post land gate). + /// Wet river channels are excluded so real river wading still works. + /// + private bool IsMapTerrainDryAboveOcean(float worldX, float worldZ) + { + if (worldGenerator == null) + worldGenerator = FindFirstObjectByType(); + if (worldGenerator == null) + return false; + + float seaY = worldGenerator.SeaSurfaceWorldY; + SeaWaterSurface resolvedSea = ResolveSeaWaterSurfaceRef(); + if (includeSeaPlaneVerticalOffsetInPhysics && resolvedSea != null) + seaY += resolvedSea.PlaneVerticalOffset; + + if (IslandRiverNetwork.IsReady + && IslandRiverNetwork.TrySample(worldX, worldZ, out IslandRiverNetwork.Sample river) + && river.hit + && river.distance <= IslandRiverNetwork.WetHalfWidth(river.halfWidth) * 0.96f) + return false; + + if (!worldGenerator.TrySampleMapTerrainWorldY(worldX, worldZ, out float landY)) + return false; + + // Beaches just above sea level count as dry (was +0.25, which still wet the waterline). + return landY >= seaY + 0.05f; + } + + /// + /// Ocean surface under dry land must not drive breath/swim. Highland lakes keep a surface + /// well above sea Y and are left alone. Covers PhysicsColliders from the sea dive trigger + /// when the capsule has fallen through the terrain shell. + /// + private bool ShouldSuppressOceanUnderDryLand(float worldX, float worldZ) + { + if (!hasWaterSurface || float.IsNaN(waterSurfaceY)) + return false; + + if (worldGenerator == null) + worldGenerator = FindFirstObjectByType(); + if (worldGenerator == null) + return false; + + float seaY = worldGenerator.SeaSurfaceWorldY; + SeaWaterSurface resolvedSea = ResolveSeaWaterSurfaceRef(); + if (includeSeaPlaneVerticalOffsetInPhysics && resolvedSea != null) + seaY += resolvedSea.PlaneVerticalOffset; + + // Local lake / pond / highland sheet — not the ocean plane. + if (Mathf.Abs(waterSurfaceY - seaY) > 2.5f) + return false; + + return IsMapTerrainDryAboveOcean(worldX, worldZ); + } + /// /// Thin Water-layer probes only cover the top of the sea. Once the capsule is clearly /// under the analytical sea plane, keep WorldSea swim rules so deep dives don't lose buoyancy. @@ -1286,6 +1502,9 @@ public sealed class PlayerAquaticController : MonoBehaviour if (includeSeaPlaneVerticalOffsetInPhysics && resolvedSea != null) seaY += resolvedSea.PlaneVerticalOffset; + if (IsMapTerrainDryAboveOcean(bodyBounds.center.x, bodyBounds.center.z)) + return; + // Head clearly below sea surface → underwater column, not a shallow puddle splash. if (bodyBounds.max.y > seaY - 1.25f) return; @@ -1396,12 +1615,58 @@ public sealed class PlayerAquaticController : MonoBehaviour return parent != null && parent.name == "IslandRivers"; } + /// + /// Prefer the water plane nearest the player's head — not the tallest overlapping volume lid. + /// + private static void ConsiderPhysicsWaterSurface( + float surfaceY, + float headY, + float feetY, + ref float bestTop, + ref float bestDistToHead) + { + if (float.IsNaN(surfaceY) || surfaceY < feetY - 2f) + return; + + // Remap absurd lids toward the head band so distance scoring stays sane. + float scoreY = surfaceY; + if (surfaceY > headY + 8f) + scoreY = headY + 8f; + + float dist = Mathf.Abs(scoreY - headY); + if (dist > bestDistToHead + 0.05f) + return; + if (dist >= bestDistToHead - 0.05f && surfaceY <= bestTop) + return; + + bestDistToHead = dist; + bestTop = surfaceY; + } + /// /// Use the visible mesh top when possible so the logical surface matches the water object; /// thin triggers / thick volumes often leave collider bounds.max.y far from the actual plane. + /// SeaWater dive probes use the analytical sea plane — never parent-renderer max. /// - private static float PreferredWaterPlaneWorldY(Collider c) + private float PreferredWaterPlaneWorldY(Collider c) { + if (c == null) + return float.NegativeInfinity; + + SeaWaterSurface sea = c.GetComponentInParent(); + if (sea != null) + { + if (worldGenerator == null) + worldGenerator = sea.WorldGenerator != null ? sea.WorldGenerator : FindFirstObjectByType(); + if (worldGenerator != null) + { + float seaY = worldGenerator.SeaSurfaceWorldY; + if (includeSeaPlaneVerticalOffsetInPhysics) + seaY += sea.PlaneVerticalOffset; + return seaY; + } + } + Renderer own = c.GetComponent(); if (own != null && own.enabled && own.gameObject.activeInHierarchy) return own.bounds.max.y; @@ -1410,22 +1675,8 @@ public sealed class PlayerAquaticController : MonoBehaviour if (child != null && child.enabled && child.gameObject.activeInHierarchy) return child.bounds.max.y; - Transform parent = c.transform.parent; - if (parent != null) - { - float bestTop = float.NegativeInfinity; - foreach (Renderer r in parent.GetComponentsInChildren(false)) - { - if (r == null || !r.enabled || !r.gameObject.activeInHierarchy) - continue; - if (r.bounds.max.y > bestTop) - bestTop = r.bounds.max.y; - } - - if (bestTop > float.NegativeInfinity + 1f) - return bestTop; - } - + // Do not scan parent renderers for max Y — that picks waterfalls / elevated meshes + // and reports a surface tens of meters above the local sea/lake plane. return c.bounds.max.y; } @@ -1939,6 +2190,7 @@ public sealed class PlayerAquaticController : MonoBehaviour private void OnDestroy() { swimJumpAction?.Dispose(); + swimDiveAction?.Dispose(); if (overlayTex != null) Destroy(overlayTex); diff --git a/Assets/Scripts/PlayerFallthroughReposition.cs b/Assets/Scripts/PlayerFallthroughReposition.cs index 47b44f7b1..083933f0f 100644 --- a/Assets/Scripts/PlayerFallthroughReposition.cs +++ b/Assets/Scripts/PlayerFallthroughReposition.cs @@ -57,6 +57,20 @@ public sealed class PlayerFallthroughReposition : MonoBehaviour private float nextAllowedRescueAt; private readonly RaycastHit[] floorHits = new RaycastHit[12]; + /// + /// A debug island jump is not a fall through the map. Remember the destination + /// so a late rescue cannot drag the player back to the mainland. + /// + public void NotifyIntentionalTeleport(Vector3 footing, Quaternion rotation) + { + lastSolidFooting = footing; + lastSolidRotation = rotation; + lastSolidAt = Time.unscaledTime; + hasLastSolid = true; + underMapAirTimer = 0f; + nextAllowedRescueAt = Time.unscaledTime + 8f; + } + public static PlayerFallthroughReposition EnsureOn(GameObject player) { if (player == null) diff --git a/Assets/Scripts/PlayerHunger.cs b/Assets/Scripts/PlayerHunger.cs index 8ec368dd1..adf1e075a 100644 --- a/Assets/Scripts/PlayerHunger.cs +++ b/Assets/Scripts/PlayerHunger.cs @@ -84,6 +84,10 @@ public class PlayerHunger : MonoBehaviour rate *= WerewolfHungerIntegration.GetHungerRateMultiplier(gameObject); rate *= blessingHungerRateMultiplier; + PlayerDiseaseRuntime diseases = GetComponent() + ?? GetComponentInParent(); + if (diseases != null) + rate *= diseases.GetHungerDrainMultiplier(); PlayerPracticeProgress practice = GetComponent() ?? GetComponentInParent(); if (practice != null) diff --git a/Assets/Scripts/PlayerInteract.cs b/Assets/Scripts/PlayerInteract.cs index 73d73863f..da2300aa9 100644 --- a/Assets/Scripts/PlayerInteract.cs +++ b/Assets/Scripts/PlayerInteract.cs @@ -234,7 +234,10 @@ public class PlayerInteract : NetworkBehaviour } ChestHudController openChestHud = cachedChestHud; // F while loot/container UI is open: toggle closed (do not fall through to reopen). - if (openChestHud != null && openChestHud.IsOpen) + // Also dismiss orphan panels (corpse despawned but ChestHud still active). + bool lootPanelUp = openChestHud != null + && (openChestHud.IsOpen || openChestHud.IsPanelActive); + if (lootPanelUp) { if (wantInteract) { @@ -1124,7 +1127,9 @@ public class PlayerInteract : NetworkBehaviour continue; float lateral = (ray.origin + ray.direction * along - body).magnitude; - if (lateral > 1.45f) + // Creature corpses (esp. Nightling / large wildlife) need a wider aim cone than humanoids. + float maxLateral = challenger != null ? 1.45f : 2.65f; + if (lateral > maxLateral) continue; if (lateral >= bestLateral) diff --git a/Assets/Scripts/PlayerNewLifeStatusReset.cs b/Assets/Scripts/PlayerNewLifeStatusReset.cs index eaf0ac1c8..dcba78339 100644 --- a/Assets/Scripts/PlayerNewLifeStatusReset.cs +++ b/Assets/Scripts/PlayerNewLifeStatusReset.cs @@ -48,6 +48,7 @@ public static class PlayerNewLifeStatusReset playerRoot.GetComponentInChildren(true)?.ClearForRespawn(); playerRoot.GetComponentInChildren(true)?.ClearForRespawn(); playerRoot.GetComponentInChildren(true)?.ClearForRespawn(); + playerRoot.GetComponentInChildren(true)?.ClearForRespawn(); playerRoot.GetComponentInChildren(true)?.ClearForRespawn(); // Status HUD rows that should not linger diff --git a/Assets/Scripts/PlayerRespawn.cs b/Assets/Scripts/PlayerRespawn.cs index f1ab19526..e5d8b624a 100644 --- a/Assets/Scripts/PlayerRespawn.cs +++ b/Assets/Scripts/PlayerRespawn.cs @@ -163,7 +163,10 @@ public class PlayerRespawn : MonoBehaviour // Wipe gear/loot; leave only the starter harvest rock (same as first join). GetComponent()?.ApplyDeathRespawnStarterLoadout(); - deathFx?.ForceEndFromHealthRestore(); + // Do not ForceEndFromHealthRestore here: ServerNotifyOwnerWorldEntry already started + // ReleaseWorldEntryWhenGroundReady (black cover until ground). Ending presentation + // stopped that coroutine and left the scrim up — black screen after every death respawn. + // Cover clears when ground is ready; Unlock restores motor/look immediately. UnlockLocalControlsAfterRespawn(); ClearLivingPlayerMomentum(); health?.ClearHurtOverlayIfHealthy(); diff --git a/Assets/Scripts/Practice/PlayerFirstSpawnPlacement.cs b/Assets/Scripts/Practice/PlayerFirstSpawnPlacement.cs index 2f09014a7..2ea8a7a25 100644 --- a/Assets/Scripts/Practice/PlayerFirstSpawnPlacement.cs +++ b/Assets/Scripts/Practice/PlayerFirstSpawnPlacement.cs @@ -8,6 +8,9 @@ using UnityEngine; /// public static class PlayerFirstSpawnPlacement { + /// Console filter for void / preferred first-spawn: [MF_VOID_SPAWN] + public const string VoidSpawnSearchToken = "[MF_VOID_SPAWN]"; + /// Deep under the map — not a playable world location. public static readonly Vector3 LimboPosition = new Vector3(0f, -2800f, 0f); private const float MinDryAboveSeaMeters = 2.5f; @@ -117,9 +120,9 @@ public static class PlayerFirstSpawnPlacement // after a successful pad so the following New cannot reuse it. int next = (ReadAreaCursor(count) + 1) % count; WriteAreaCursor(next); - Debug.Log( - "[FirstSpawn] NewGame prepare -> next area index " + next + "/" + count - + " salt=" + s_wildernessSessionSalt); + Debug.Log(VoidSpawnSearchToken + + " NewGame prepare cleared cache -> next wilderness index " + next + "/" + count + + " (void preferred still runs first)"); } public static int LastResolvedAreaIndex => s_lastResolvedAreaIndex; @@ -241,8 +244,12 @@ public static class PlayerFirstSpawnPlacement /// public static bool EnsureCachedFirstSpawnPose() { - if (TryGetCachedFirstSpawnPose(out _, out _)) + if (TryGetCachedFirstSpawnPose(out Vector3 cached, out _)) + { + Debug.Log(VoidSpawnSearchToken + " cache hit at " + cached.ToString("F1") + + " label=" + s_lastResolvedAreaLabel); return true; + } // Continue/Load may restore the save pose. Host Offline New must never. bool allowSavePose = !s_newGameWildernessRoll @@ -253,25 +260,105 @@ public static class PlayerFirstSpawnPlacement && !IsInLimbo(savePos)) { CacheFirstSpawnPose(savePos, saveRot); - Debug.Log("[FirstSpawn] cache from save restore at " + savePos.ToString("F1")); + Debug.Log(VoidSpawnSearchToken + " cache from save restore at " + savePos.ToString("F1")); + return true; + } + + // Void / preferred pad before wilderness — wilderness used to win the cache and skip the void. + if (TryResolvePreferredSpawnPose(out Vector3 pos, out Quaternion rot)) + { + CacheFirstSpawnPose(pos, rot); + Debug.Log(VoidSpawnSearchToken + " cache preferred at " + pos.ToString("F1") + + " label=" + s_lastResolvedAreaLabel); return true; } - if (TryResolveRandomIslandSpawnPose(out Vector3 pos, out Quaternion rot)) + if (TryResolveRandomIslandSpawnPose(out pos, out rot)) { CacheFirstSpawnPose(pos, rot); + Debug.Log(VoidSpawnSearchToken + " cache wilderness fallback at " + pos.ToString("F1") + + " (preferred failed)"); return true; } if (TryResolveWorldSpawnPoseUncached(out pos, out rot)) { CacheFirstSpawnPose(pos, rot); + Debug.Log(VoidSpawnSearchToken + " cache uncached fallback at " + pos.ToString("F1")); return true; } + Debug.LogWarning(VoidSpawnSearchToken + " EnsureCachedFirstSpawnPose failed — no pad"); return false; } + /// Void island (or other preferred pad) with dry snap. + private static bool TryResolvePreferredSpawnPose(out Vector3 position, out Quaternion rotation) + { + position = default; + rotation = Quaternion.identity; + WorldGenerator world = Object.FindFirstObjectByType(); + if (world == null) + { + Debug.LogWarning(VoidSpawnSearchToken + " preferred: no WorldGenerator"); + return false; + } + + Debug.Log(VoidSpawnSearchToken + + " preferred try prefersVoid=" + world.PrefersVoidIslandSpawn + + " mode=" + OfflineSoloSession.Mode + + " newRoll=" + s_newGameWildernessRoll); + + // Hard path for void: do not accept Galbesh/bandit when void spawn is requested. + if (world.PrefersVoidIslandSpawn) + { + if (!world.TryGetVoidPlayerSpawnPose(out position, out rotation)) + { + Debug.LogWarning(VoidSpawnSearchToken + " preferred: void flag on but TryGetVoid failed"); + return false; + } + } + else if (!world.TryGetPreferredPlayerSpawnPose(out position, out rotation)) + { + Debug.LogWarning(VoidSpawnSearchToken + " preferred: TryGetPreferredPlayerSpawnPose=false"); + return false; + } + + Vector3 beforeSnap = position; + float void01 = BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(beforeSnap.x), + Mathf.RoundToInt(beforeSnap.z), + world.TerrainSeed, + world.BiomeSettings); + bool isVoidPad = world.PrefersVoidIslandSpawn || void01 > 0.12f; + + if (!TrySnapSpawnAboveSea(world, ref position, world.SeaSurfaceWorldY, 1.05f)) + { + if (isVoidPad) + { + position = beforeSnap; + Debug.Log(VoidSpawnSearchToken + + " preferred: snap failed but void pad — keeping analytical " + + position.ToString("F1")); + } + else + { + Debug.LogWarning(VoidSpawnSearchToken + + " preferred: snap failed at " + beforeSnap.ToString("F1") + + " void01=" + void01.ToString("F2")); + return false; + } + } + + RememberNewGameSpawnXZ(position); + s_lastResolvedAreaLabel = isVoidPad ? "Void Island" : "Preferred"; + s_newGameWildernessRoll = false; + Debug.Log(VoidSpawnSearchToken + " preferred ok " + position.ToString("F1") + + " label=" + s_lastResolvedAreaLabel + + " void01=" + void01.ToString("F2")); + return true; + } + public static void GetLimboPose(out Vector3 position, out Quaternion rotation) { position = LimboPosition; @@ -298,9 +385,15 @@ public static class PlayerFirstSpawnPlacement { WorldGenerator world = Object.FindFirstObjectByType(); - // First arrival: wilderness only — not village, ruins, bandit camp, or other sights. + if (TryResolvePreferredSpawnPose(out position, out rotation)) + return true; + + // First arrival: wilderness only — not village, ruins, bandit camp, or other sights. if (TryResolveRandomIslandSpawnPose(out position, out rotation)) + { + Debug.Log(VoidSpawnSearchToken + " uncached wilderness at " + position.ToString("F1")); return true; + } if (world != null) { @@ -775,6 +868,12 @@ public static class PlayerFirstSpawnPlacement if (world == null) return false; + // Offshore void plateau is dry even when the analytical height is still settling. + float void01 = BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(worldX), Mathf.RoundToInt(worldZ), world.TerrainSeed, world.BiomeSettings); + if (void01 > 0.18f) + return false; + float seaY = world.SeaSurfaceWorldY; if (terrainY < seaY + MinDryAboveSeaMeters) return true; @@ -1007,7 +1106,10 @@ public static class PlayerFirstSpawnPlacement TryResolveWorldSpawnPose(out pos, out rot); float feet = PlayerSpawnGroundUtility.GetCharacterFeetOffset(player.transform); - if (world.TrySampleMapTerrainWorldY(pos.x, pos.z, out float terrainY) + float voidHere = BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z), world.TerrainSeed, world.BiomeSettings); + if (voidHere <= 0.18f + && world.TrySampleMapTerrainWorldY(pos.x, pos.z, out float terrainY) && IsWetSpawnColumn(world, pos.x, pos.z, terrainY)) { // Keep the chosen wilderness sector: ring-search locally first. @@ -1027,8 +1129,41 @@ public static class PlayerFirstSpawnPlacement world.EnsureFullQualityNearWorldPosition(pos, chebyshevRadius: 1); world.TryEnsureSpawnColliderReady(pos, radiusChunks: 1); SnapStandingOntoTerrain(world, player.transform, ref pos); + + // Dry-snap / inland walk must not steal a void New Game onto Galbesh. + if (world.PrefersVoidIslandSpawn) + { + BiomeClimateSampler.SetIslandLayout(world.IslandCenterWorldXZ, world.IslandWorldRadius); + float voidCheck = BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z), world.TerrainSeed, world.BiomeSettings); + if (voidCheck <= 0.18f + && world.TryGetVoidPlayerSpawnPose(out Vector3 voidRescue, out Quaternion voidRot)) + { + Debug.LogWarning(VoidSpawnSearchToken + + " ServerPlace left void pad at " + pos.ToString("F1") + + " void01=" + voidCheck.ToString("F2") + + " — rescating " + voidRescue.ToString("F1")); + pos = voidRescue; + rot = voidRot; + world.EnsurePhysicsGroundAroundWorldPosition(pos, radiusChunks: 1); + world.EnsureFullQualityNearWorldPosition(pos, chebyshevRadius: 1); + SnapStandingOntoTerrain(world, player.transform, ref pos); + s_lastResolvedAreaLabel = "Void Island"; + CacheFirstSpawnPose(pos, rot); + } + } } + float voidAtPlace = world != null + ? BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z), world.TerrainSeed, world.BiomeSettings) + : 0f; + Debug.Log(VoidSpawnSearchToken + + " ServerPlace teleport to " + pos.ToString("F1") + + " void01=" + voidAtPlace.ToString("F2") + + " save=" + usedSaveRestore + + " label=" + s_lastResolvedAreaLabel); + Teleport(player, pos, rot); // Colliders finish a frame late — snap again so we never stay buried in the mesh. @@ -1037,13 +1172,24 @@ public static class PlayerFirstSpawnPlacement Vector3 stand = player.transform.position; SnapStandingOntoTerrain(world, player.transform, ref stand); if ((stand - player.transform.position).sqrMagnitude > 0.0001f) + { + Debug.Log(VoidSpawnSearchToken + " post-snap " + stand.ToString("F1")); Teleport(player, stand, player.transform.rotation); + } } // Stop Bandit/Galbesh/volcano late snaps from fighting this placement. world?.MarkPlayerSpawnHandledExternally(); Vector3 finalPos = player != null ? player.transform.position : pos; + float voidFinal = world != null + ? BiomeClimateSampler.SampleVoidDomain01( + Mathf.RoundToInt(finalPos.x), Mathf.RoundToInt(finalPos.z), world.TerrainSeed, world.BiomeSettings) + : 0f; + Debug.Log(VoidSpawnSearchToken + + " CONTROL final=" + finalPos.ToString("F1") + + " void01=" + voidFinal.ToString("F2") + + (voidFinal > 0.18f ? " OK_VOID" : " NOT_VOID")); AnnounceControlPose(finalPos, usedSaveRestore); } diff --git a/Assets/Scripts/Practice/StrengthTraining.cs b/Assets/Scripts/Practice/StrengthTraining.cs index f8fa13ac5..b88075f66 100644 --- a/Assets/Scripts/Practice/StrengthTraining.cs +++ b/Assets/Scripts/Practice/StrengthTraining.cs @@ -62,7 +62,19 @@ public static class StrengthTraining if (player == null) return PlayerClassDefinitions.BaseSkillLevel; var pp = player.GetComponent() ?? player.GetComponentInParent(); - return pp != null ? pp.GetSkillLevel(PracticeSkillId.Strength) : PlayerClassDefinitions.BaseSkillLevel; + byte level = pp != null ? pp.GetSkillLevel(PracticeSkillId.Strength) : PlayerClassDefinitions.BaseSkillLevel; + + // Wasting diseases lower effective Strength (carry / swim capacity) without changing saved XP. + PlayerDiseaseRuntime diseases = player.GetComponent() + ?? player.GetComponentInParent(); + if (diseases != null) + { + float mul = diseases.GetStrengthMultiplier(); + if (mul < 0.999f) + level = (byte)Mathf.Clamp(Mathf.RoundToInt(level * mul), 1, 255); + } + + return level; } /// Total carried weight (worn + backpack + hotbar) and swim capacity for a player. diff --git a/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs b/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs index 562d318e4..b7c398c12 100644 --- a/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs +++ b/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs @@ -332,8 +332,17 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour private void Awake() { - // Default on in player builds too — this is the hitch board now. - visible = PlayerPrefs.GetInt(PrefsKey, 1) != 0; + // Default OFF — the hitch board was sticky-on in player/probe builds and filled the screen. + // F7 still toggles it. One-shot clear so older installs that saved PrefsKey=1 start clean. + const string hideOnceKey = "Manafall.HideWalkHitchOverlay_v1"; + if (!Application.isEditor && PlayerPrefs.GetInt(hideOnceKey, 0) == 0) + { + PlayerPrefs.SetInt(PrefsKey, 0); + PlayerPrefs.SetInt(hideOnceKey, 1); + PlayerPrefs.Save(); + } + + visible = PlayerPrefs.GetInt(PrefsKey, 0) != 0; BuildLabel(); ApplyVisible(); } @@ -356,8 +365,8 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour PlayerPrefs.SetInt(PrefsKey, visible ? 1 : 0); ApplyVisible(); UnityEngine.Debug.Log(visible - ? "[WalkHitch] Overlay on (F4). Walk — top rows are ms on hitch frames." - : "[WalkHitch] Overlay off (F4)."); + ? "[WalkHitch] Overlay on (F7). Walk — top rows are ms on hitch frames." + : "[WalkHitch] Overlay off (F7)."); } if (!visible || label == null) @@ -456,7 +465,7 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour ExpireWindows(Time.unscaledTime); builder.Length = 0; - builder.Append("WALK HITCHES (F4 hide)\n"); + builder.Append("WALK HITCHES (F7 hide)\n"); builder.AppendFormat( "Frame {0:0.0} ms smooth {1:0.0} ms FPS {2:0} hitch≥{3:0} ms\n", frameMs, @@ -541,7 +550,7 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour int n = FillSortedIndicesByWindowMs(); if (n == 0) { - builder.Append(" (no probes yet — keep walking with F4 on)\n"); + builder.Append(" (no probes yet — keep walking with F7 on)\n"); } else { @@ -926,7 +935,7 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour private static bool WasTogglePressed() { Keyboard kb = Keyboard.current; - return kb != null && kb.f4Key.wasPressedThisFrame; + return kb != null && kb.f7Key.wasPressedThisFrame; } private static string FmtMb(long bytes) diff --git a/Assets/Scripts/Rendering/ManafallUnderwaterRenderFeature.cs b/Assets/Scripts/Rendering/ManafallUnderwaterRenderFeature.cs index 63ebe1a06..6ad6819f4 100644 --- a/Assets/Scripts/Rendering/ManafallUnderwaterRenderFeature.cs +++ b/Assets/Scripts/Rendering/ManafallUnderwaterRenderFeature.cs @@ -5,12 +5,14 @@ using UnityEngine.Rendering.RenderGraphModule.Util; using UnityEngine.Rendering.Universal; /// -/// Underwater murk/distortion masked per pixel (split view at the surface). Pass runs when the camera -/// may see any part of the water column; the shader skips pixels above the surface. +/// Underwater murk/distortion. The pass runs only when the gameplay camera lens is below the +/// local water surface (river sheet or calm/displaced sea). Dry land never gets murk. /// public sealed class ManafallUnderwaterRenderFeature : ScriptableRendererFeature { - private static readonly int SurfaceYId = Shader.PropertyToID("_ManafallUnderwaterSurfaceY"); + public const string DebugSearchToken = "[MF_UWFX]"; + + private static readonly int SurfaceYId = Shader.PropertyToID("_ManafallUnderwaterSurfaceY"); private static readonly int AbsorptionId = Shader.PropertyToID("_ManafallUnderwaterAbsorption"); private static readonly int SwellAmpId = Shader.PropertyToID("_ManafallUnderwaterSwellAmp"); private static readonly int WeatherParamsId = Shader.PropertyToID("_ManafallUnderwaterWeatherParams"); @@ -28,9 +30,13 @@ public sealed class ManafallUnderwaterRenderFeature : ScriptableRendererFeature [SerializeField] private Material underwaterMaterial; [SerializeField] private RenderPassEvent injectionPoint = RenderPassEvent.BeforeRenderingTransparents; [SerializeField] private bool skipPreviewAndReflectionCameras = true; + [Tooltip("Logs camera vs surface/land gate. Search Console for [MF_UWFX].")] + [SerializeField] private bool logUnderwaterFxDebug = true; private UnderwaterPass m_Pass; private SeaWaterSurface m_CachedSea; + private static float s_NextDebugLogAt; + private static bool s_LastApplied; public override void Create() { @@ -65,31 +71,72 @@ public sealed class ManafallUnderwaterRenderFeature : ScriptableRendererFeature return; if (!TryResolveSurfaceY(out float surfaceY)) + { + LogFxDecision(cam, applied: false, surfaceY: 0f, landY: float.NaN, seaY: float.NaN, "noSurface"); + return; + } + + if (cam == null) return; - float aboveSlack = -0.05f; - if (cam != null && !ShouldApplyUnderwaterAtCamera(cam, ref surfaceY, ref aboveSlack)) + if (!ShouldApplyUnderwaterAtCamera(cam, ref surfaceY, out string reason, out float landY, out float seaY)) + { + LogFxDecision(cam, applied: false, surfaceY, landY, seaY, reason); return; + } - // Ocean uses a small straddle on the displaced wave so the waterline can cross the lens. - // The pass stops as soon as the lens is clearly above that wave. Rivers keep the old - // below-surface test so a wet deck does not keep the murk pass running. - if (cam != null && cam.transform.position.y < surfaceY + aboveSlack) + // Lens must be below the surface — no above-water slack (that wet dry beaches). + if (cam.transform.position.y < surfaceY) { m_Pass.renderPassEvent = injectionPoint; m_Pass.Setup(underwaterMaterial, surfaceY); renderer.EnqueuePass(m_Pass); + LogFxDecision(cam, applied: true, surfaceY, landY, seaY, reason); } + else + LogFxDecision(cam, applied: false, surfaceY, landY, seaY, "camAboveSurface"); + } + + private void LogFxDecision(Camera cam, bool applied, float surfaceY, float landY, float seaY, string reason) + { + if (!logUnderwaterFxDebug) + return; + + // Log on state change or every ~0.75s while murk is on (or refused near the waterline). + float now = Time.unscaledTime; + bool stateChanged = applied != s_LastApplied; + if (!stateChanged && now < s_NextDebugLogAt) + return; + s_LastApplied = applied; + s_NextDebugLogAt = now + (applied || stateChanged ? 0.75f : 2.5f); + + float camY = cam != null ? cam.transform.position.y : float.NaN; + Debug.Log( + $"{DebugSearchToken} apply={applied} reason={reason} camY={camY:F3} surfY={surfaceY:F3} " + + $"seaY={(float.IsNaN(seaY) ? "n/a" : seaY.ToString("F3"))} " + + $"landY={(float.IsNaN(landY) ? "n/a" : landY.ToString("F3"))} " + + $"cam={(cam != null ? cam.name : "null")}"); } /// - /// Ocean murk must not run on dry land or near river banks. Only when the lens is - /// actually under a local water sheet (river channel or open sea). + /// Ocean murk only when the lens is under open sea or a river sheet — never on dry land. /// - private static bool ShouldApplyUnderwaterAtCamera(Camera cam, ref float surfaceY, ref float aboveSlack) + private static bool ShouldApplyUnderwaterAtCamera( + Camera cam, + ref float surfaceY, + out string reason, + out float landY, + out float seaY) { + reason = "ok"; + landY = float.NaN; + seaY = float.NaN; + if (cam == null) - return true; + { + reason = "nullCam"; + return false; + } Vector3 p = cam.transform.position; @@ -97,19 +144,33 @@ public sealed class ManafallUnderwaterRenderFeature : ScriptableRendererFeature if (IslandRiverNetwork.IsReady && IslandRiverNetwork.TrySample(p.x, p.z, out IslandRiverNetwork.Sample river) && river.hit - && river.distance <= river.halfWidth * 0.72f - && p.y < river.waterWorldY - 0.05f - && p.y > river.bedWorldY - 0.5f) + && river.distance <= river.halfWidth * 0.72f) { surfaceY = river.waterWorldY; + if (p.y >= river.waterWorldY) + { + reason = "riverCamAboveSheet"; + return false; + } + + if (p.y < river.bedWorldY - 0.5f) + { + reason = "riverCamBelowBed"; + return false; + } + + reason = "riverUnder"; return true; } WorldGenerator world = Object.FindFirstObjectByType(); if (world == null) - return true; + { + reason = "noWorld"; + return false; + } - float seaY = world.SeaSurfaceWorldY; + seaY = world.SeaSurfaceWorldY; Chunk sampler = world.TerrainHeightSampler; if (sampler != null) { @@ -117,28 +178,39 @@ public sealed class ManafallUnderwaterRenderFeature : ScriptableRendererFeature int wz = Mathf.RoundToInt(p.z); float h01 = sampler.SampleAnalyticalHeight01(wx, wz); h01 = IslandRiverNetwork.CarveHeight01(h01, wx, wz, sampler); - float landY = sampler.Height01ToSurfaceWorldY(wx, wz, h01); + landY = sampler.Height01ToSurfaceWorldY(wx, wz, h01); - // Feet on solid ground above the ocean plane → never use sea murk - // (covers dry river rims and coastal desert 30ft from a trench). - if (landY > seaY + 0.25f) + // Map terrain at/above the calm sea plane → dry (beaches just above waterline). + if (landY >= seaY - 0.02f) + { + reason = "dryLandAboveSea"; return false; + } } else if (world.IslandModeEnabled) { - // No sampler: still refuse sea murk when clearly inland of a river sample. if (IslandRiverNetwork.IsReady && IslandRiverNetwork.TrySample(p.x, p.z, out IslandRiverNetwork.Sample near) && near.hit && near.distance < 40f - && near.bedWorldY > seaY + 0.25f) + && near.bedWorldY >= seaY - 0.02f) + { + reason = "inlandRiverBedDry"; return false; + } } - float displaced = seaY + Shader.GetGlobalFloat(WaveOffsetCamId); + float waveOffset = Shader.GetGlobalFloat(WaveOffsetCamId); + float displaced = seaY + waveOffset; surfaceY = displaced; - aboveSlack = 0.2f; - return p.y < displaced + aboveSlack; + if (p.y >= displaced) + { + reason = "oceanCamAboveWave"; + return false; + } + + reason = "oceanUnder"; + return true; } private static bool IsOffscreenUiPreviewCamera(Camera cam) diff --git a/Assets/Scripts/Rendering/ManafallViewCostDebug.cs b/Assets/Scripts/Rendering/ManafallViewCostDebug.cs index 03597f6c2..35ad25ae8 100644 --- a/Assets/Scripts/Rendering/ManafallViewCostDebug.cs +++ b/Assets/Scripts/Rendering/ManafallViewCostDebug.cs @@ -116,6 +116,16 @@ public sealed class ManafallViewCostDebug : MonoBehaviour private void Awake() { + // Player/probe builds: clear sticky F3 prefs left on from agent smoke runs. + // Editor still defaults on; F3 toggles everywhere. + const string hideOnceKey = "Manafall.HideViewCostOverlay_v1"; + if (!Application.isEditor && PlayerPrefs.GetInt(hideOnceKey, 0) == 0) + { + PlayerPrefs.SetInt(PrefsKey, 0); + PlayerPrefs.SetInt(hideOnceKey, 1); + PlayerPrefs.Save(); + } + visible = PlayerPrefs.GetInt(PrefsKey, Application.isEditor ? 1 : 0) != 0; BuildLabel(); ApplyVisible(); diff --git a/Assets/Scripts/SeaWaterSurface.cs b/Assets/Scripts/SeaWaterSurface.cs index ebaebe744..0d5c0194d 100644 --- a/Assets/Scripts/SeaWaterSurface.cs +++ b/Assets/Scripts/SeaWaterSurface.cs @@ -351,8 +351,64 @@ public class SeaWaterSurface : MonoBehaviour public void BindAndRefresh(WorldGenerator world) { worldGenerator = world; + // Menu / video glass-calm zeros waves and planar reflections. World play must restore. + if (forceGlassCalm) + ConfigureGameplayOpenOceanLook(); EnsurePlaneBuilt(); SyncPose(); + ApplyWaterQualityProfile(); + ApplyQualityMaterialOverrides(); + } + + /// Open-ocean play look after menu glass-calm or video pond/storm presets. + public void ConfigureGameplayOpenOceanLook() + { + forceGlassCalm = false; + forcePondLook = false; + _forceStormSeaLook = false; + _allowHostMeshDisplacement = true; + enableRippleField = true; + + ManafallWaterQuality quality = ResolveWaterQuality(); + if (quality != null) + displacementGridSegments = quality.EffectiveSeaMeshSegments; + + EnsurePlaneBuilt(); + ApplyGameplayOpenOceanMaterialOverrides(); + if (_rippleSimulation != null) + _rippleSimulation.enabled = true; + + // Force quality re-push — glass-calm early-outs cached a matte profile. + _lastAppliedQuality = null; + _lastAppliedMaterial = null; + ApplyWaterQualityProfile(); + ApplyQualityMaterialOverrides(); + PushWaterGlobalsPropertyBlock(); + PushWaterWeatherGlobals(); + } + + private void ApplyGameplayOpenOceanMaterialOverrides() + { + Material mat = EnsureRuntimeWaterMaterialCopy(" (OpenOcean)"); + if (mat == null) + return; + + ApplyBuiltInSeaWaterDefaults(mat); + if (mat.HasProperty("_WaveDisplacementStrength")) + mat.SetFloat("_WaveDisplacementStrength", 2.85f); + if (mat.HasProperty("_WaveBumpStrength")) + mat.SetFloat("_WaveBumpStrength", 0.55f); + if (mat.HasProperty("_WaveGerstnerSteepness")) + mat.SetFloat("_WaveGerstnerSteepness", 0.55f); + if (mat.HasProperty("_ShoreWaveMinAmplitude")) + mat.SetFloat("_ShoreWaveMinAmplitude", 0.26f); + if (mat.HasProperty("_WindChopInfluence")) + mat.SetFloat("_WindChopInfluence", 1f); + if (mat.HasProperty("_SkyReflectionStrength")) + mat.SetFloat("_SkyReflectionStrength", 1.72f); + + _baselineShoreWaveMinAmplitude = 0.26f; + _haveBaselineShoreWaveMinAmplitude = true; } /// @@ -1087,7 +1143,9 @@ public class SeaWaterSurface : MonoBehaviour if (quality.enableShoreCaustics && ManafallShoreCausticsState.IsEnabled) { strength = Mathf.Max(strength, 0.01f); - shaderCausticScale = 0.42f; + // Shore fullscreen pass owns the bed web — keep surface caustics nearly off + // so two different patterns don't stack into a muddy ring field. + shaderCausticScale = 0.08f; } else if (!quality.enableShoreCaustics) { @@ -1098,8 +1156,11 @@ public class SeaWaterSurface : MonoBehaviour Shader.SetGlobalFloat(Shader.PropertyToID("_ManafallShoreCausticStrength"), strength); Shader.SetGlobalFloat(Shader.PropertyToID("_ManafallShaderCausticScale"), shaderCausticScale); - Shader.SetGlobalFloat(Shader.PropertyToID("_ManafallShoreCausticBandWidth"), - mat != null && mat.HasProperty("_ShoreFoamWidth") ? mat.GetFloat("_ShoreFoamWidth") * 2.5f : 6f); + // Floor caustics reach the visible bed, not only the foam ring at the waterline. + float floorBand = 18f; + if (mat != null && mat.HasProperty("_ShoreFoamWidth")) + floorBand = Mathf.Max(mat.GetFloat("_ShoreFoamWidth") * 0.85f, 16f); + Shader.SetGlobalFloat(Shader.PropertyToID("_ManafallShoreCausticBandWidth"), floorBand); float sunElev = 0.5f; if (RenderSettings.sun != null) @@ -1732,7 +1793,9 @@ public class SeaWaterSurface : MonoBehaviour causticScale = mat.GetFloat("_CausticScale"); } - Shader.SetGlobalFloat(CausticTimeId, Time.time * Mathf.Max(drift, 1e-3f)); + // Caustics need a livelier clock than surface drift — otherwise filaments look frozen. + float causticTime = Time.time * Mathf.Max(Mathf.Max(drift * 2.4f, 0.85f), 1e-3f); + Shader.SetGlobalFloat(CausticTimeId, causticTime); Shader.SetGlobalFloat(CausticScaleId, causticScale); } @@ -1986,9 +2049,10 @@ public class SeaWaterSurface : MonoBehaviour m.SetVector("_WaveSpeed", new Vector4(0.92f, 0.58f, 0.68f, 0.42f)); m.SetFloat("_WaveFlowSpeed", 0.58f); m.SetFloat("_ReflectHorizonFocus", 2.5f); - m.SetFloat("_ReflectZenithDim", 0.48f); + m.SetFloat("_ReflectZenithDim", 0.22f); m.SetFloat("_ReflectHorizonBloom", 0.48f); - m.SetFloat("_SkyReflectionStrength", 0.46f); + // Menu glass-calm used 0.46 — that left open-ocean looking matte/unreflective. + m.SetFloat("_SkyReflectionStrength", 1.72f); m.SetFloat("_RefractionLivingDistort", 0.03f); m.SetFloat("_RefractionChromaticPx", 2.8f); m.SetFloat("_RefractionWaterBleed", 0.38f); diff --git a/Assets/Scripts/UI/InGamePauseMenu.cs b/Assets/Scripts/UI/InGamePauseMenu.cs index 7dfe08cf2..114261104 100644 --- a/Assets/Scripts/UI/InGamePauseMenu.cs +++ b/Assets/Scripts/UI/InGamePauseMenu.cs @@ -135,7 +135,7 @@ public sealed class InGamePauseMenu : MonoBehaviour return false; ChestHudController chestHud = player.GetComponentInChildren(true); - if (chestHud != null && chestHud.IsOpen) + if (chestHud != null && (chestHud.IsOpen || chestHud.IsPanelActive)) return false; MarketHudController marketHud = player.GetComponentInChildren(true); diff --git a/Assets/Scripts/UI/LoadingScreenPreviewRig.cs b/Assets/Scripts/UI/LoadingScreenPreviewRig.cs index 4f112efb8..80c2bbf05 100644 --- a/Assets/Scripts/UI/LoadingScreenPreviewRig.cs +++ b/Assets/Scripts/UI/LoadingScreenPreviewRig.cs @@ -17,6 +17,8 @@ public sealed class LoadingScreenPreviewRig private const float AutoYawDegreesPerSecond = 11f; private const float MinZoom = 0.58f; private const float MaxZoom = 2.05f; + private const float ZoomStepPerNotch = 0.055f; + private const float ZoomSmoothTime = 0.42f; private const float DragDegreesPerPixel = 0.38f; private static readonly Vector3 StageOrigin = new Vector3(0f, -25000f, 0f); @@ -44,16 +46,13 @@ public sealed class LoadingScreenPreviewRig private Light rimLight; private Light fillLight; private RenderTexture texture; - private Material hazeMaterial; - private Texture2D hazeTexture; - private Mesh hazeMesh; - private Transform[] hazeQuads = Array.Empty(); - private Vector3[] hazeBaseLocal = Array.Empty(); - private GameObject instance; private int layer = -1; private float yaw; private float zoom = 1f; + private float zoomTarget = 1f; + private float zoomVelocity; + private int savedMipLimit = -1; private float framedDistance = 4f; private Vector3 focusLocal = new Vector3(0f, 0.8f, 0f); private float modelRadius = 1f; @@ -91,17 +90,19 @@ public sealed class LoadingScreenPreviewRig UnityEngine.Rendering.RenderPipelineManager.beginCameraRendering += OnBeginCamera; UnityEngine.Rendering.RenderPipelineManager.endCameraRendering += OnEndCamera; CreateLights(); - CreateHaze(); Frame(1f, new Vector3(0f, 0.9f, 0f)); } public void Show(LoadingScreenEntry entry) { Ensure(); + HoldFullTextures(); yaw = entry != null ? entry.facingYaw : 0f; distanceScale = entry != null ? entry.ResolvedDistanceScale : 1.2f; lookHeightBias = entry != null ? entry.lookHeightBias : 0f; zoom = 1f; + zoomTarget = 1f; + zoomVelocity = 0f; dragging = false; hasPointer = false; ClearInstance(); @@ -130,6 +131,8 @@ public sealed class LoadingScreenPreviewRig if (stage == null || camera == null) return; + HoldFullTextures(); + // The local player's spawn (FPSPlayerController, SceneDumpedPlayerCleanup) disables every // other camera, and Host Offline keeps this overlay up long after that. Keep drawing. if (!camera.enabled) @@ -156,9 +159,12 @@ public sealed class LoadingScreenPreviewRig if (Mathf.Abs(scroll) > 0.01f) { float notches = Mathf.Abs(scroll) > 8f ? scroll / 120f : scroll; - zoom = Mathf.Clamp(zoom - notches * 0.12f, MinZoom, MaxZoom); + zoomTarget = Mathf.Clamp(zoomTarget - notches * ZoomStepPerNotch, MinZoom, MaxZoom); } + float dt = Mathf.Max(0f, unscaledDelta); + zoom = Mathf.SmoothDamp(zoom, zoomTarget, ref zoomVelocity, ZoomSmoothTime, Mathf.Infinity, dt); + if (pivot != null) pivot.localRotation = Quaternion.Euler(0f, yaw, 0f); @@ -169,7 +175,6 @@ public sealed class LoadingScreenPreviewRig } ApplyCamera(); - DriftHaze(); } // The island scene's fog and dim ambient leak into this camera once it loads and turn the @@ -226,7 +231,6 @@ public sealed class LoadingScreenPreviewRig keyLight = null; rimLight = null; fillLight = null; - hazeQuads = Array.Empty(); if (texture != null) { @@ -235,23 +239,23 @@ public sealed class LoadingScreenPreviewRig texture = null; } - if (hazeMaterial != null) - { - UnityEngine.Object.Destroy(hazeMaterial); - hazeMaterial = null; - } + RestoreTextures(); + } - if (hazeTexture != null) - { - UnityEngine.Object.Destroy(hazeTexture); - hazeTexture = null; - } + private void HoldFullTextures() + { + if (savedMipLimit < 0) + savedMipLimit = QualitySettings.globalTextureMipmapLimit; + if (QualitySettings.globalTextureMipmapLimit != 0) + QualitySettings.globalTextureMipmapLimit = 0; + } - if (hazeMesh != null) - { - UnityEngine.Object.Destroy(hazeMesh); - hazeMesh = null; - } + private void RestoreTextures() + { + if (savedMipLimit < 0) + return; + QualitySettings.globalTextureMipmapLimit = savedMipLimit; + savedMipLimit = -1; } private void Spawn(LoadingScreenEntry entry) @@ -269,7 +273,8 @@ public sealed class LoadingScreenPreviewRig StripGameplay(spawned); SetLayerRecursively(spawned); PrepareAnimators(spawned); - ApplyCheapLod(spawned); + ApplyPreviewLod(spawned); + CheapenSkinnedMeshes(spawned); Vector3 scale = spawned.transform.localScale; Quaternion localRot = spawned.transform.localRotation; @@ -281,12 +286,12 @@ public sealed class LoadingScreenPreviewRig shell = null; spawned.SetActive(true); - ApplyCheapLod(spawned); + ApplyPreviewLod(spawned); instance = spawned; spawned = null; if (pivot != null) pivot.localRotation = Quaternion.Euler(0f, yaw, 0f); - KickAnimators(instance); + FreezeAnimatorsInPose(instance); reframeFrames = 2; ReframeFromInstance(); } @@ -329,7 +334,6 @@ public sealed class LoadingScreenPreviewRig framedDistance = modelRadius / Mathf.Max(0.15f, half); ApplyCamera(); PlaceLights(); - PlaceHaze(); } private void ApplyCamera() @@ -352,14 +356,16 @@ public sealed class LoadingScreenPreviewRig camGo.transform.SetParent(stage.transform, false); SetLayer(camGo); - int height = Mathf.Clamp(Mathf.RoundToInt(Screen.height * 0.67f), 360, 720); + // Full-screen stretch of a half-res RT is what made the creature look soft. + int screenH = Screen.height > 0 ? Screen.height : 1080; + int height = Mathf.Clamp(screenH, 720, 1440); float aspect = Screen.height > 0 ? (float)Screen.width / Screen.height : 16f / 9f; - int width = Mathf.Clamp(Mathf.RoundToInt(height * aspect), 640, 1280); + int width = Mathf.Clamp(Mathf.RoundToInt(height * aspect), 1280, 2560); - texture = new RenderTexture(width, height, 16, RenderTextureFormat.ARGB32) + texture = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32) { name = "LoadingPreviewRT", - antiAliasing = 1, + antiAliasing = 4, useMipMap = false, autoGenerateMips = false, wrapMode = TextureWrapMode.Clamp, @@ -374,7 +380,7 @@ public sealed class LoadingScreenPreviewRig camera.nearClipPlane = 0.05f; camera.farClipPlane = 40f; camera.allowHDR = false; - camera.allowMSAA = false; + camera.allowMSAA = true; camera.useOcclusionCulling = false; camera.cullingMask = 1 << layer; camera.targetTexture = texture; @@ -393,14 +399,15 @@ public sealed class LoadingScreenPreviewRig private void CreateLights() { - keyLight = CreateLight("Key", LightType.Spot, new Color(1f, 0.9f, 0.74f, 1f), 18f, true); + // No shadows — soft spot shadows on a skinned mesh are a common load-screen hitch. + keyLight = CreateLight("Key", LightType.Spot, new Color(1f, 0.9f, 0.74f, 1f), 18f); keyLight.spotAngle = 46f; keyLight.innerSpotAngle = 22f; - rimLight = CreateLight("Rim", LightType.Point, new Color(0.48f, 0.64f, 1f, 1f), 12f, false); - fillLight = CreateLight("Fill", LightType.Point, new Color(0.72f, 0.66f, 0.56f, 1f), 3.2f, false); + rimLight = CreateLight("Rim", LightType.Point, new Color(0.48f, 0.64f, 1f, 1f), 12f); + fillLight = CreateLight("Fill", LightType.Point, new Color(0.72f, 0.66f, 0.56f, 1f), 3.2f); } - private Light CreateLight(string name, LightType type, Color color, float intensity, bool shadows) + private Light CreateLight(string name, LightType type, Color color, float intensity) { GameObject go = new GameObject(name); go.transform.SetParent(stage.transform, false); @@ -410,8 +417,7 @@ public sealed class LoadingScreenPreviewRig light.color = color; light.intensity = intensity; light.range = 16f; - light.shadows = shadows ? LightShadows.Soft : LightShadows.None; - light.shadowStrength = 0.8f; + light.shadows = LightShadows.None; light.cullingMask = 1 << layer; light.renderMode = LightRenderMode.ForcePixel; return light; @@ -444,174 +450,6 @@ public sealed class LoadingScreenPreviewRig light.transform.position = focus + localDir.normalized * (reach * 0.48f); } - private void CreateHaze() - { - hazeTexture = BuildSoftDisc(64); - hazeMesh = BuildQuad(); - Shader shader = FindHazeShader(); - if (shader == null || hazeTexture == null) - return; - - hazeMaterial = new Material(shader) { name = "LoadingPreviewHaze" }; - if (hazeMaterial.HasProperty("_BaseMap")) - hazeMaterial.SetTexture("_BaseMap", hazeTexture); - if (hazeMaterial.HasProperty("_MainTex")) - hazeMaterial.SetTexture("_MainTex", hazeTexture); - if (hazeMaterial.HasProperty("_BaseColor")) - hazeMaterial.SetColor("_BaseColor", new Color(0.78f, 0.8f, 0.84f, 0.22f)); - if (hazeMaterial.HasProperty("_Color")) - hazeMaterial.SetColor("_Color", new Color(0.78f, 0.8f, 0.84f, 0.22f)); - if (hazeMaterial.HasProperty("_Surface")) - hazeMaterial.SetFloat("_Surface", 1f); - if (hazeMaterial.HasProperty("_ZWrite")) - hazeMaterial.SetFloat("_ZWrite", 0f); - hazeMaterial.EnableKeyword("_SURFACE_TYPE_TRANSPARENT"); - if (hazeMaterial.HasProperty("_Cull")) - hazeMaterial.SetFloat("_Cull", 0f); - hazeMaterial.renderQueue = 3000; - - hazeQuads = new Transform[5]; - for (int i = 0; i < hazeQuads.Length; i++) - { - GameObject quad = new GameObject("Haze"); - quad.transform.SetParent(stage.transform, false); - SetLayer(quad); - MeshFilter filter = quad.AddComponent(); - filter.sharedMesh = hazeMesh; - MeshRenderer renderer = quad.AddComponent(); - renderer.sharedMaterial = hazeMaterial; - renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; - renderer.receiveShadows = false; - renderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; - renderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; - hazeQuads[i] = quad.transform; - } - } - - private void PlaceHaze() - { - if (hazeQuads == null || stage == null) - return; - - Vector3 focus = stage.transform.TransformPoint(focusLocal); - float size = Mathf.Max(1.6f, modelRadius * 2.4f); - Vector3[] offsets = - { - new Vector3(0f, -0.15f, -0.35f), - new Vector3(-0.55f, 0.1f, 0.15f), - new Vector3(0.6f, 0.25f, 0.2f), - new Vector3(0.1f, -0.45f, 0.35f), - new Vector3(-0.2f, 0.45f, -0.1f), - }; - float[] scales = { 1.15f, 0.8f, 0.72f, 0.95f, 0.66f }; - if (hazeBaseLocal.Length != hazeQuads.Length) - hazeBaseLocal = new Vector3[hazeQuads.Length]; - for (int i = 0; i < hazeQuads.Length; i++) - { - Transform quad = hazeQuads[i]; - if (quad == null) - continue; - quad.position = focus + offsets[i] * modelRadius; - quad.localScale = Vector3.one * (size * scales[i]); - hazeBaseLocal[i] = quad.localPosition; - } - } - - private void DriftHaze() - { - if (hazeQuads == null || camera == null || hazeBaseLocal.Length != hazeQuads.Length) - return; - - float t = Time.unscaledTime; - for (int i = 0; i < hazeQuads.Length; i++) - { - Transform quad = hazeQuads[i]; - if (quad == null) - continue; - - Vector3 drift = new Vector3( - Mathf.Sin(t * 0.17f + i) * modelRadius * 0.08f, - Mathf.Cos(t * 0.13f + i * 1.7f) * modelRadius * 0.05f, - 0f); - quad.localPosition = hazeBaseLocal[i] + drift; - Vector3 toCamera = camera.transform.position - quad.position; - if (toCamera.sqrMagnitude > 0.0001f) - quad.rotation = Quaternion.LookRotation(toCamera, Vector3.up); - } - } - - private static Shader FindHazeShader() - { - string[] names = - { - "Sprites/Default", - "Unlit/Transparent", - "Universal Render Pipeline/Particles/Unlit", - "Particles/Standard Unlit", - "Legacy Shaders/Particles/Alpha Blended", - "Universal Render Pipeline/Unlit", - }; - for (int i = 0; i < names.Length; i++) - { - Shader shader = Shader.Find(names[i]); - if (shader != null) - return shader; - } - - return null; - } - - private static Texture2D BuildSoftDisc(int size) - { - Texture2D tex = new Texture2D(size, size, TextureFormat.RGBA32, false) - { - name = "LoadingPreviewHazeDisc", - wrapMode = TextureWrapMode.Clamp, - filterMode = FilterMode.Bilinear, - }; - float half = (size - 1) * 0.5f; - Color[] pixels = new Color[size * size]; - for (int y = 0; y < size; y++) - { - for (int x = 0; x < size; x++) - { - float dx = (x - half) / half; - float dy = (y - half) / half; - float d = Mathf.Sqrt(dx * dx + dy * dy); - float a = Mathf.Clamp01(1f - d); - a = a * a * (0.35f + 0.65f * a); - pixels[y * size + x] = new Color(1f, 1f, 1f, a); - } - } - - tex.SetPixels(pixels); - tex.Apply(false, true); - return tex; - } - - private static Mesh BuildQuad() - { - Mesh mesh = new Mesh { name = "LoadingPreviewHazeQuad" }; - mesh.vertices = new[] - { - new Vector3(-0.5f, -0.5f, 0f), - new Vector3(0.5f, -0.5f, 0f), - new Vector3(-0.5f, 0.5f, 0f), - new Vector3(0.5f, 0.5f, 0f), - }; - mesh.uv = new[] - { - new Vector2(0f, 0f), - new Vector2(1f, 0f), - new Vector2(0f, 1f), - new Vector2(1f, 1f), - }; - mesh.triangles = new[] { 0, 2, 1, 2, 3, 1 }; - mesh.RecalculateNormals(); - mesh.RecalculateBounds(); - return mesh; - } - private void ReadPointer(out bool pressed, out Vector2 pointer, out float scroll) { pressed = false; @@ -665,18 +503,23 @@ public sealed class LoadingScreenPreviewRig UnityEngine.Object.DestroyImmediate(component); } + StripParticles(root); + } + + private static void StripParticles(GameObject root) + { ParticleSystem[] particles = root.GetComponentsInChildren(true); for (int i = 0; i < particles.Length; i++) { ParticleSystem system = particles[i]; if (system == null) continue; - ParticleSystem.CollisionModule collision = system.collision; - collision.enabled = false; - ParticleSystem.TriggerModule trigger = system.trigger; - trigger.enabled = false; - ParticleSystem.LightsModule lights = system.lights; - lights.enabled = false; + system.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear); + system.Clear(true); + ParticleSystemRenderer renderer = system.GetComponent(); + if (renderer != null) + UnityEngine.Object.DestroyImmediate(renderer); + UnityEngine.Object.DestroyImmediate(system); } } @@ -719,25 +562,44 @@ public sealed class LoadingScreenPreviewRig continue; animator.applyRootMotion = false; animator.cullingMode = AnimatorCullingMode.AlwaysAnimate; - animator.updateMode = AnimatorUpdateMode.UnscaledTime; + animator.updateMode = AnimatorUpdateMode.Normal; + animator.speed = 0f; animator.enabled = true; } } - private static void KickAnimators(GameObject root) + /// + /// Sample one idle frame, then disable the animator so the pose stays still and + /// does not keep evaluating while the island loads. + /// + private static void FreezeAnimatorsInPose(GameObject root) { + const float poseNormalizedTime = 0.35f; + Animator[] animators = root.GetComponentsInChildren(true); for (int i = 0; i < animators.Length; i++) { Animator animator = animators[i]; if (animator == null || animator.runtimeAnimatorController == null) + { + if (animator != null) + animator.enabled = false; continue; + } ZeroLocomotion(animator); - if (!TryPlayIdle(animator)) - animator.Update(0f); - else + if (!TryPlayIdle(animator, poseNormalizedTime)) + { animator.Update(0f); + AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0); + if (info.fullPathHash != 0) + animator.Play(info.fullPathHash, 0, poseNormalizedTime); + } + + animator.Update(0f); + animator.speed = 0f; + animator.cullingMode = AnimatorCullingMode.CullCompletely; + animator.enabled = false; } Animation[] legacy = root.GetComponentsInChildren(true); @@ -746,6 +608,8 @@ public sealed class LoadingScreenPreviewRig Animation animation = legacy[i]; if (animation == null) continue; + + bool played = false; foreach (AnimationState state in animation) { if (state == null || state.clip == null) @@ -753,8 +617,40 @@ public sealed class LoadingScreenPreviewRig if (state.name.IndexOf("idle", StringComparison.OrdinalIgnoreCase) < 0) continue; animation.Play(state.name); + state.normalizedTime = poseNormalizedTime; + state.speed = 0f; + played = true; break; } + + if (!played && animation.clip != null) + { + animation.Play(animation.clip.name); + AnimationState fallback = animation[animation.clip.name]; + if (fallback != null) + { + fallback.normalizedTime = poseNormalizedTime; + fallback.speed = 0f; + } + } + + animation.Sample(); + animation.Stop(); + animation.enabled = false; + } + } + + private static void CheapenSkinnedMeshes(GameObject root) + { + SkinnedMeshRenderer[] skins = root.GetComponentsInChildren(true); + for (int i = 0; i < skins.Length; i++) + { + SkinnedMeshRenderer skin = skins[i]; + if (skin == null) + continue; + skin.updateWhenOffscreen = false; + skin.skinnedMotionVectors = false; + skin.allowOcclusionWhenDynamic = false; } } @@ -777,14 +673,14 @@ public sealed class LoadingScreenPreviewRig } } - private static bool TryPlayIdle(Animator animator) + private static bool TryPlayIdle(Animator animator, float normalizedTime) { for (int i = 0; i < IdleStateNames.Length; i++) { int hash = Animator.StringToHash(IdleStateNames[i]); if (!animator.HasState(0, hash)) continue; - animator.Play(hash, 0, 0f); + animator.Play(hash, 0, Mathf.Clamp01(normalizedTime)); return true; } @@ -812,7 +708,10 @@ public sealed class LoadingScreenPreviewRig || name.IndexOf("leap", StringComparison.OrdinalIgnoreCase) >= 0; } - private static void ApplyCheapLod(GameObject root) + /// + /// Studio close-up — lock LOD0. Forced mid/low LODs look blocky on the loading stage. + /// + private static void ApplyPreviewLod(GameObject root) { LODGroup[] groups = root.GetComponentsInChildren(true); for (int i = 0; i < groups.Length; i++) @@ -820,11 +719,7 @@ public sealed class LoadingScreenPreviewRig LODGroup group = groups[i]; if (group == null) continue; - int count = group.lodCount; - if (count <= 1) - continue; - int index = count >= 3 ? count - 2 : count - 1; - group.ForceLOD(index); + group.ForceLOD(0); } } diff --git a/Assets/Scripts/Voxels/PlayerVoxelDigging.cs b/Assets/Scripts/Voxels/PlayerVoxelDigging.cs index b05b3f8fa..4a656935a 100644 --- a/Assets/Scripts/Voxels/PlayerVoxelDigging.cs +++ b/Assets/Scripts/Voxels/PlayerVoxelDigging.cs @@ -32,10 +32,12 @@ public sealed class PlayerVoxelDigging : NetworkBehaviour private double nextLocalEditAt; private double windowStartedAt; private int editsInWindow; - private bool legacyPrev; private float hostResetHeldSeconds; private bool hostResetTriggeredThisHold; private double nextProtectedDigFeedbackAt; + private float digChannelProgress01; + private FPSStamina stamina; + private bool digDrainActive; private void Start() { @@ -51,96 +53,156 @@ public sealed class PlayerVoxelDigging : NetworkBehaviour CmdRequestTerrainDigSync(); } + private void OnDisable() + { + ClearDigStaminaDrain(); + digChannelProgress01 = 0f; + } + private void Update() { if (!HasInputAuthority()) + { + ClearDigStaminaDrain(); return; + } - if (!InputStateManager.AllowsPlayerGameplayInput) - return; - - if (!enableVoxelDigging) + if (!InputStateManager.AllowsPlayerGameplayInput || !enableVoxelDigging) + { + CancelDigChannel(); + HandleHostResetHold(); return; + } HandleHostResetHold(); + TickDigChannel(); + } - if (!PressedThisFrame()) + private void TickDigChannel() + { + if (!IsDigHeld()) + { + CancelDigChannel(); return; + } ResolveReferences(); if (!TryResolveShovel(out Item item, out ShovelDefinition shovel)) { - Debug.Log($"{DigDebugTag} local-no-shovel", this); + CancelDigChannel(); return; } - if (NetworkTime.time < nextLocalEditAt) + if (playerCamera == null) { - Debug.Log($"{DigDebugTag} local-cooldown", this); + CancelDigChannel(); return; } - if (playerCamera == null) + InventorySlot localSlot = hotbar != null && hotbarUI != null + ? hotbar.GetSlot(hotbarUI.SelectedSlotIndex) + : null; + if (localSlot != null && localSlot.HasDurability && localSlot.IsBroken) { - Debug.Log($"{DigDebugTag} local-no-camera", this); + CancelDigChannel(); return; } if (!TryGetShovelHit(shovel, out RaycastHit hit)) { - Debug.Log($"{DigDebugTag} local-ray-miss", this); + CancelDigChannel(); + return; + } + + if (stamina == null) + stamina = GetComponent() ?? GetComponentInParent(); + if (stamina != null && stamina.CurrentStamina < 1f) + { + CancelDigChannel(); return; } DigMaterial hitMaterial = DigSurfaceResolver.ResolveMaterial(hit.collider, hit.point, hit.normal); DigSurfaceKind surface = TerrainDigStrata.ToSurfaceKind(hitMaterial); - float effectiveCooldown = shovel.GetEffectiveCooldownSeconds(surface); - Debug.Log($"{DigDebugTag} local-ray-hit point={hit.point} normal={hit.normal} obj={hit.collider?.name} surface={surface} cd={effectiveCooldown:F2}", this); + float digDuration = shovel.GetEffectiveDigDurationSeconds(surface); + ApplyDigStaminaDrain(shovel.staminaDrainPerSecond); - InventorySlot localSlot = hotbar.GetSlot(hotbarUI.SelectedSlotIndex); - if (localSlot != null && localSlot.HasDurability && localSlot.IsBroken) - { - Debug.Log($"{DigDebugTag} local-shovel-broken", this); + digChannelProgress01 += Time.deltaTime / Mathf.Max(0.5f, digDuration); + if (digChannelProgress01 < 1f) return; - } - nextLocalEditAt = NetworkTime.time + effectiveCooldown; + digChannelProgress01 = 0f; + if (NetworkTime.time < nextLocalEditAt) + return; + + nextLocalEditAt = NetworkTime.time + 0.15d; int expectedItemId = item != null ? item.id : -1; int selectedSlot = hotbarUI != null ? hotbarUI.SelectedSlotIndex : -1; + Debug.Log( + $"{DigDebugTag} local-dig-complete point={hit.point} surface={surface} duration={digDuration:F2}", + this); + if (!NetworkClient.active && !NetworkServer.active) { - bool changed = TryApplyOfflineEdit(hit.point, hit.normal, shovel, out TerrainDigResult offlineResult, out string offlineFailReason); - Debug.Log($"{DigDebugTag} offline-apply changed={changed} surface={surface}", this); + bool changed = TryApplyOfflineEdit( + hit.point, hit.normal, shovel, out TerrainDigResult offlineResult, out string offlineFailReason); if (changed) { ApplyShovelDurabilityLoss(selectedSlot, shovel); GrantDigYield(offlineResult); } + PlayResolvedFeedback(shovel, hit.point, hit.normal, changed); MaybeShowProtectedDigFeedback(changed, offlineFailReason); return; } - Debug.Log($"{DigDebugTag} cmd-send item={expectedItemId} slot={selectedSlot}", this); float safeRadius = Mathf.Max(0.1f, shovel.editRadius); float safeVertical = Mathf.Clamp(shovel.editVerticalScale, 0.15f, 1f); - CmdRequestVoxelEdit(hit.point, hit.normal, safeRadius, safeVertical, shovel.addSolid, shovel.materialId, expectedItemId, selectedSlot); + CmdRequestVoxelEdit( + hit.point, hit.normal, safeRadius, safeVertical, shovel.addSolid, shovel.materialId, + expectedItemId, selectedSlot); } - private bool HasInputAuthority() + private void CancelDigChannel() { - if (!NetworkClient.active && !NetworkServer.active) + digChannelProgress01 = 0f; + ClearDigStaminaDrain(); + } + + private void ApplyDigStaminaDrain(float drainPerSecond) + { + if (stamina == null) + stamina = GetComponent() ?? GetComponentInParent(); + if (stamina == null) + return; + + stamina.SetDiggingStaminaDrain(Mathf.Max(0f, drainPerSecond)); + digDrainActive = true; + } + + private void ClearDigStaminaDrain() + { + if (!digDrainActive) + return; + digDrainActive = false; + if (stamina == null) + stamina = GetComponent() ?? GetComponentInParent(); + stamina?.SetDiggingStaminaDrain(0f); + } + + private static bool IsDigHeld() + { + if (Mouse.current != null && Mouse.current.leftButton.isPressed) return true; - return isLocalPlayer || isOwned; + return Input.GetMouseButton(0); } - private bool PressedThisFrame() + private bool HasInputAuthority() { - bool inputSystemPress = Mouse.current != null && Mouse.current.leftButton.wasPressedThisFrame; - bool legacyPressed = Input.GetMouseButton(0); - bool legacyDown = legacyPressed && !legacyPrev; - legacyPrev = legacyPressed; - return inputSystemPress || legacyDown; + if (!NetworkClient.active && !NetworkServer.active) + return true; + return isLocalPlayer || isOwned; } private void HandleHostResetHold() diff --git a/Assets/Scripts/Voxels/ShovelDefinition.cs b/Assets/Scripts/Voxels/ShovelDefinition.cs index c6d90699f..fdc664e43 100644 --- a/Assets/Scripts/Voxels/ShovelDefinition.cs +++ b/Assets/Scripts/Voxels/ShovelDefinition.cs @@ -1,4 +1,5 @@ using UnityEngine; +using UnityEngine.Serialization; [CreateAssetMenu(menuName = "Combat/Shovel Definition", fileName = "ShovelDefinition")] public class ShovelDefinition : ScriptableObject @@ -7,9 +8,13 @@ public class ShovelDefinition : ScriptableObject [Min(0.5f)] public float maxRange = 4f; [Min(0.1f)] public float editRadius = 0.9f; - [Header("Rate limits")] - [Min(0.05f)] public float cooldownSeconds = 0.4f; - [Min(1)] public int maxEditsPerSecond = 8; + [Header("Dig pace")] + [Tooltip("Seconds to hold dig on sand with digPower 1. Harder ground scales this up.")] + [FormerlySerializedAs("cooldownSeconds")] + [Min(0.5f)] public float digDurationSeconds = 2.8f; + [Tooltip("Stamina drained each second while holding dig (slow burn).")] + [Min(0f)] public float staminaDrainPerSecond = 4f; + [Min(1)] public int maxEditsPerSecond = 2; [Header("Voxel effect")] public bool addSolid = false; @@ -18,7 +23,7 @@ public class ShovelDefinition : ScriptableObject [Range(0.15f, 1f)] public float editVerticalScale = 0.35f; [Header("Ground dig speed")] - [Tooltip("Hardness divisor for sand (lowest = fastest digs). Effective cooldown = base * hardness / digPower.")] + [Tooltip("Hardness divisor for sand (lowest = fastest digs). Effective duration = base * hardness / digPower.")] [Min(0.25f)] public float sandHardness = 1f; [Tooltip("Hardness for normal dirt / grassland / forest ground.")] [Min(0.25f)] public float dirtHardness = 2f; @@ -61,12 +66,15 @@ public class ShovelDefinition : ScriptableObject } } - public float GetEffectiveCooldownSeconds(DigSurfaceKind kind) + public float GetEffectiveDigDurationSeconds(DigSurfaceKind kind) { float hardness = GetHardnessForSurface(kind); float power = Mathf.Max(1, digPower); - return Mathf.Max(0.05f, cooldownSeconds * (hardness / power)); + return Mathf.Max(0.5f, digDurationSeconds * (hardness / power)); } + + /// Legacy name kept for call sites / tests. + public float GetEffectiveCooldownSeconds(DigSurfaceKind kind) => GetEffectiveDigDurationSeconds(kind); } public enum DigSurfaceKind diff --git a/Assets/Scripts/Voxels/TerrainDig/TerrainDigCore.cs b/Assets/Scripts/Voxels/TerrainDig/TerrainDigCore.cs index e1dcf43a2..c5b1b48d9 100644 --- a/Assets/Scripts/Voxels/TerrainDig/TerrainDigCore.cs +++ b/Assets/Scripts/Voxels/TerrainDig/TerrainDigCore.cs @@ -149,6 +149,7 @@ public static class TerrainDigStrata return DigMaterial.Snow; case BiomeType.Mountain: case BiomeType.Volcano: + case BiomeType.Void: return DigMaterial.Stone; default: return DigMaterial.Dirt; diff --git a/Assets/Scripts/Water/AquaticPhysicsSimulator.cs b/Assets/Scripts/Water/AquaticPhysicsSimulator.cs index f517677ba..0070b0b0a 100644 --- a/Assets/Scripts/Water/AquaticPhysicsSimulator.cs +++ b/Assets/Scripts/Water/AquaticPhysicsSimulator.cs @@ -163,6 +163,31 @@ public sealed class AquaticPhysicsSimulator : NetworkBehaviour bool hasWaterVel, Vector3 waterVel) { + bool dive = aquaticController != null && aquaticController.SwimDescendHeld; + bool ascend = aquaticController != null && aquaticController.SwimAscendHeld; + bool stroking = aquaticController != null && aquaticController.SwimPlanarHeld; + if (sample.inWaterForMotor && dive) + { + flags |= AquaticStateFlags.ActiveVertical; + float diveSpeed = aquaticController.SwimDiveSpeed; + float diveSpring = profile != null ? profile.buoyancySpring : 42f; + verticalVelocity = Mathf.MoveTowards(verticalVelocity, -diveSpeed, diveSpring * dt); + float diveStep = verticalVelocity * dt; + float maxStep = profile != null ? profile.maxVerticalStepPerTick : 0.35f; + return Mathf.Clamp(diveStep, -maxStep, maxStep); + } + + if (sample.inWaterForMotor && !ascend && !stroking && !sample.groundedOnSeafloor) + { + flags |= AquaticStateFlags.ActiveVertical; + float sink = aquaticController != null ? aquaticController.IdleSinkSpeed : 1.2f; + float sinkSpring = profile != null ? profile.buoyancySpring * 0.35f : 14f; + verticalVelocity = Mathf.MoveTowards(verticalVelocity, -sink, sinkSpring * dt); + float sinkStep = verticalVelocity * dt; + float maxStep = profile != null ? profile.maxVerticalStepPerTick : 0.35f; + return Mathf.Clamp(sinkStep, -maxStep, maxStep); + } + if (!ShouldDriveVertical(sample)) { verticalVelocity = Mathf.MoveTowards(verticalVelocity, 0f, profile.buoyancyDamping * dt); diff --git a/Assets/Scripts/Water/BoatHydrodynamicDrag.cs b/Assets/Scripts/Water/BoatHydrodynamicDrag.cs index 3ded39903..533d025dc 100644 --- a/Assets/Scripts/Water/BoatHydrodynamicDrag.cs +++ b/Assets/Scripts/Water/BoatHydrodynamicDrag.cs @@ -1,8 +1,10 @@ +using Mirror; using UnityEngine; /// -/// Submersion-weighted planar drag using the same sample points as . -/// Controllers apply returned acceleration before assigning rigidbody planar velocity. +/// Hull in the water: the bow cuts, the beam holds, a start has to push water aside, +/// and the nose rises on its own bow wave. Controllers apply the planar acceleration +/// before they write rigidbody velocity. Attitude (yaw, bow lift) is applied here. /// [DisallowMultipleComponent] [RequireComponent(typeof(Rigidbody))] @@ -22,6 +24,8 @@ public sealed class BoatHydrodynamicDrag : MonoBehaviour [SerializeField] private bool requireOpenOcean = true; private Rigidbody _rb; + private Vector3 _prevPlanarVelocity; + private bool _havePrevPlanarVelocity; public float SurfaceHeightOffset => surfaceHeightOffset; @@ -76,8 +80,20 @@ public sealed class BoatHydrodynamicDrag : MonoBehaviour bool sampleOrbitals = includeWaveOrbitalVelocity && !ManafallWaterSurfaceHeight.UseCheapFlatPhysicsSampling; float orbitalScale = physicsQuality != null ? physicsQuality.dragWaveOrbitalScale : 1f; + float longScale = physicsQuality != null ? physicsQuality.dragLongitudinalScale : 0.68f; + float latScale = physicsQuality != null ? physicsQuality.dragLateralScale : 2.7f; + float addedMass = physicsQuality != null ? physicsQuality.dragAddedMassScale : 0.3f; + + Vector3 bow = transform.forward; + bow.y = 0f; + if (bow.sqrMagnitude < 1e-6f) + bow = Vector3.forward; + bow.Normalize(); + Vector3 beam = new Vector3(bow.z, 0f, -bow.x); + Vector3 totalDragAccel = Vector3.zero; int submergedSamples = 0; + float submersionSum = 0f; for (int i = 0; i < localSamplePoints.Length; i++) { @@ -107,23 +123,46 @@ public sealed class BoatHydrodynamicDrag : MonoBehaviour relativeVel -= waterVel * orbitalScale; Vector3 relativePlanar = new Vector3(relativeVel.x, 0f, relativeVel.z); - float speed = relativePlanar.magnitude; - if (speed <= 1e-4f) + float along = Vector3.Dot(relativePlanar, bow); + float across = Vector3.Dot(relativePlanar, beam); + if (along * along + across * across <= 1e-8f) continue; - Vector3 dragDir = relativePlanar / speed; - float dragMag = linearDrag * speed + quadDrag * speed * speed; - dragMag *= submersion; + // Skin drag along the bow, bluff drag across the beam. + float alongMag = linearDrag * longScale * along + + quadDrag * longScale * along * Mathf.Abs(along); + float acrossMag = linearDrag * latScale * across + + quadDrag * latScale * across * Mathf.Abs(across); - Vector3 sampleAccel = -dragDir * dragMag; + Vector3 sampleAccel = (-bow * alongMag - beam * acrossMag) * submersion; totalDragAccel += sampleAccel; + submersionSum += submersion; submergedSamples++; } if (submergedSamples == 0) + { + _prevPlanarVelocity = hullPlanarVelocityWorld; + _havePrevPlanarVelocity = true; return Vector3.zero; + } totalDragAccel /= submergedSamples; + float meanSub = submersionSum / submergedSamples; + + float dt = Mathf.Max(Time.fixedDeltaTime, 1e-4f); + if (_havePrevPlanarVelocity && addedMass > 1e-4f) + { + Vector3 accel = (hullPlanarVelocityWorld - _prevPlanarVelocity) / dt; + Vector3 held = -accel * addedMass * meanSub; + float heldCap = maxDrag * 0.4f; + if (held.sqrMagnitude > heldCap * heldCap) + held = held.normalized * heldCap; + totalDragAccel += held; + } + + _prevPlanarVelocity = hullPlanarVelocityWorld; + _havePrevPlanarVelocity = true; if (totalDragAccel.sqrMagnitude > maxDrag * maxDrag) totalDragAccel = totalDragAccel.normalized * maxDrag; @@ -131,6 +170,64 @@ public sealed class BoatHydrodynamicDrag : MonoBehaviour return totalDragAccel; } + private void FixedUpdate() + { + if (!HasPhysicsAuthority()) + return; + + float submerged = ComputeMeanSubmergedFraction(); + if (submerged < 0.05f) + return; + + ManafallWaterPhysicsQuality physicsQuality = ManafallWaterPhysicsResolver.Resolve(); + float yawDamp = physicsQuality != null ? physicsQuality.hullYawDamping : 2.1f; + float weathercock = physicsQuality != null ? physicsQuality.hullWeathercock : 1.15f; + float bowPlaning = physicsQuality != null ? physicsQuality.hullBowPlaning : 0.9f; + + Vector3 vel = _rb.linearVelocity; + Vector3 planar = new Vector3(vel.x, 0f, vel.z); + float speed = planar.magnitude; + + float yawRate = _rb.angularVelocity.y; + if (Mathf.Abs(yawRate) > 1e-4f && yawDamp > 0f) + _rb.AddTorque(Vector3.down * yawRate * yawDamp * submerged, ForceMode.Acceleration); + + if (speed > 0.45f && weathercock > 0f) + { + Vector3 bow = transform.forward; + bow.y = 0f; + if (bow.sqrMagnitude > 1e-6f) + { + bow.Normalize(); + float slipDeg = Mathf.Clamp(Vector3.SignedAngle(bow, planar / speed, Vector3.up), -32f, 32f); + float gain = Mathf.Clamp01(speed / 4.5f) * submerged; + float yawAccelDeg = -slipDeg * weathercock * gain; + yawAccelDeg = Mathf.Clamp(yawAccelDeg, -28f, 28f); + _rb.AddTorque(Vector3.up * (yawAccelDeg * Mathf.Deg2Rad), ForceMode.Acceleration); + } + } + + if (bowPlaning > 0f && speed > 0.6f) + { + Vector3 pitchAxis = transform.right; + float pitchRate = Vector3.Dot(_rb.angularVelocity, pitchAxis); + _rb.AddTorque(-pitchAxis * pitchRate * 1.6f * submerged, ForceMode.Acceleration); + float lift = Mathf.Min(bowPlaning * speed * speed * 0.012f * submerged, 0.38f); + _rb.AddTorque(pitchAxis * lift, ForceMode.Acceleration); + } + } + + private bool HasPhysicsAuthority() + { + if (_rb == null || _rb.isKinematic) + return false; + + if (NetworkServer.active) + return true; + + return !NetworkClient.active; + } + public float ComputeMeanSubmergedFraction() { if (localSamplePoints == null || localSamplePoints.Length == 0) diff --git a/Assets/Scripts/Water/ManafallOceanWaveGlobals.cs b/Assets/Scripts/Water/ManafallOceanWaveGlobals.cs index 5ce199da5..80c003871 100644 --- a/Assets/Scripts/Water/ManafallOceanWaveGlobals.cs +++ b/Assets/Scripts/Water/ManafallOceanWaveGlobals.cs @@ -70,9 +70,12 @@ public static class ManafallOceanWaveGlobals float windChopScale = windChopInfluence * Mathf.Lerp(0.5f, 1.05f, Mathf.Clamp01(windMag / 4.6f)); windChopScale *= Mathf.Lerp(0.82f, 1.06f, swell); - float flowSpeed = spectrum.flowSpeed * Mathf.Lerp(0.92f, 1.06f, swell); + // Phase speed stays on the authored value. Scaling it by live swell + // (which follows wind gusts) and then by _Time.y makes crests lurch + // forward for a few seconds and then back when the gust dies. + float flowSpeed = spectrum.flowSpeed; float displacement = spectrum.displacementStrength * Mathf.Lerp(0.96f, 1.1f, swell); - float chopPhaseSpeedMul = Mathf.Lerp(1f, 0.76f, swell); + float chopPhaseSpeedMul = 1f; Shader.SetGlobalVector(WaveSpectrumParamsId, new Vector4(displacement, flowSpeed, spectrum.gerstnerSteepness, MaxWaves)); Shader.SetGlobalVector(WaveWindParamsId, diff --git a/Assets/Scripts/Water/ManafallWaterPhysicsQuality.cs b/Assets/Scripts/Water/ManafallWaterPhysicsQuality.cs index 973f941e9..98ed41cb1 100644 --- a/Assets/Scripts/Water/ManafallWaterPhysicsQuality.cs +++ b/Assets/Scripts/Water/ManafallWaterPhysicsQuality.cs @@ -19,6 +19,18 @@ public sealed class ManafallWaterPhysicsQuality : ScriptableObject [Min(0f)] public float dragPlanarQuadratic = 0.42f; [Range(0f, 1.5f)] public float dragWaveOrbitalScale = 1f; [Min(0f)] public float dragMaxPlanarAcceleration = 26f; + [Tooltip("Drag along the bow. Below 1 lets the hull cut forward.")] + [Range(0.2f, 1.6f)] public float dragLongitudinalScale = 0.68f; + [Tooltip("Drag across the beam. Above 1 stops the hull skating sideways.")] + [Range(0.5f, 5f)] public float dragLateralScale = 2.7f; + [Tooltip("Fraction of this frame's acceleration the water holds back. Starts feel heavy; top speed is unchanged.")] + [Range(0f, 1.2f)] public float dragAddedMassScale = 0.3f; + [Tooltip("How fast leftover spin dies in the water (1/s).")] + [Min(0f)] public float hullYawDamping = 2.1f; + [Tooltip("How hard the bow swings back toward the direction of travel (deg/s² per degree of slip).")] + [Min(0f)] public float hullWeathercock = 1.15f; + [Tooltip("Bow-up acceleration at speed, from the bow wave (rad/s² scale).")] + [Min(0f)] public float hullBowPlaning = 0.9f; [Header("Player aquatic spring-damper")] [Min(0f)] public float aquaticBuoyancySpring = 46f; diff --git a/Assets/Scripts/WaterRippleEmitter.cs b/Assets/Scripts/WaterRippleEmitter.cs index 87011c8f7..b9ecbbe1c 100644 --- a/Assets/Scripts/WaterRippleEmitter.cs +++ b/Assets/Scripts/WaterRippleEmitter.cs @@ -524,6 +524,9 @@ public sealed class WaterRippleEmitter : MonoBehaviour { + if (PlanarSpeed < minSpeedForWake) + return 0f; + float speedMul = EvaluateSpeedStrengthMultiplier() * SubmersionStrengthScale; if (stampIndex <= 0) diff --git a/Assets/Scripts/WeatherSkyDriver.cs b/Assets/Scripts/WeatherSkyDriver.cs index e2d50f959..13da2d5b6 100644 --- a/Assets/Scripts/WeatherSkyDriver.cs +++ b/Assets/Scripts/WeatherSkyDriver.cs @@ -56,7 +56,8 @@ public class WeatherSkyDriver : MonoBehaviour [SerializeField] [Min(0.05f)] private float cloudScrollSmoothing = 8.5f; [SerializeField] private Color clearZenith = new Color(0.26f, 0.52f, 0.94f, 1f); - [SerializeField] private Color clearHorizon = new Color(0.68f, 0.82f, 0.98f, 1f); + // Was 0.68/0.82/0.98 — that chalked a white band across the top of the sky plate. + [SerializeField] private Color clearHorizon = new Color(0.52f, 0.68f, 0.88f, 1f); [SerializeField] private Color cloudyZenith = new Color(0.34f, 0.55f, 0.86f, 1f); [SerializeField] private Color cloudyHorizon = new Color(0.62f, 0.74f, 0.92f, 1f); diff --git a/Assets/Scripts/WheeledCage/CreatureAttitude.cs b/Assets/Scripts/WheeledCage/CreatureAttitude.cs index 1fa33bb75..a7acfeaf8 100644 --- a/Assets/Scripts/WheeledCage/CreatureAttitude.cs +++ b/Assets/Scripts/WheeledCage/CreatureAttitude.cs @@ -45,6 +45,7 @@ public static class CreatureAttitudeCatalog { "NerkrovController", new Range(70, 100) }, { "HellhoundController", new Range(75, 100) }, { "TrollController", new Range(75, 100) }, + { "DrucladController", new Range(90, 100) }, { "ZombieEnemyController", new Range(85, 100) }, { "BanditController", new Range(50, 90) }, { "CivilianController", new Range(5, 70) }, diff --git a/Assets/Scripts/World/BreakableLootVase.cs b/Assets/Scripts/World/BreakableLootVase.cs index 376e0c8b9..140934c1b 100644 --- a/Assets/Scripts/World/BreakableLootVase.cs +++ b/Assets/Scripts/World/BreakableLootVase.cs @@ -524,19 +524,33 @@ public sealed class BreakableLootVase : NetworkBehaviour bool wantUncommon = Random.value < Mathf.Clamp01(uncommonChance); LootCandidate picked; if (wantUncommon && uncommons.Count > 0) - picked = uncommons[Random.Range(0, uncommons.Count)]; + picked = PickTierWeightedCandidate(uncommons); else if (commons.Count > 0) - picked = commons[Random.Range(0, commons.Count)]; + picked = PickTierWeightedCandidate(commons); else if (uncommons.Count > 0) - picked = uncommons[Random.Range(0, uncommons.Count)]; + picked = PickTierWeightedCandidate(uncommons); else return false; + if (picked.Item == null) + return false; + item = picked.Item; amount = picked.RollDirectStack ? RollDirectAmount() : Mathf.Max(1, picked.Amount); return item != null; } + private static LootCandidate PickTierWeightedCandidate(List pool) + { + if (pool == null || pool.Count == 0) + return default; + + int index = InventoryFramework.TierLootRoll.PickIndexByItemTier(pool, c => c.Item); + if (index < 0) + return pool[Random.Range(0, pool.Count)]; + return pool[index]; + } + private void BuildPools(out List commons, out List uncommons) { commons = new List(); diff --git a/Assets/Scripts/World/Foliage/FoliageChunkVisual.cs b/Assets/Scripts/World/Foliage/FoliageChunkVisual.cs index 652f581f6..e09517447 100644 --- a/Assets/Scripts/World/Foliage/FoliageChunkVisual.cs +++ b/Assets/Scripts/World/Foliage/FoliageChunkVisual.cs @@ -73,6 +73,7 @@ public sealed partial class FoliageChunkVisual : MonoBehaviour case 1: SpawnBush(slot, settings); break; case 2: SpawnRock(slot, settings); break; case 3: SpawnCliff(slot, settings, useExactMeshCollider: true); break; + case 5: SpawnFloatingIsland(slot, settings); break; default: SpawnGrassGameObject(slot); break; } @@ -295,6 +296,11 @@ public sealed partial class FoliageChunkVisual : MonoBehaviour // Cliffs stay immediate (silhouette + collider); timed for the slow-spawn log. TimedSpawn(slot, settings, 3); break; + case FoliageSlotType.FloatingIsland: + if (removed) + break; + TimedSpawn(slot, settings, 5); + break; case FoliageSlotType.Grass: if (removed || !includeNearFoliage) break; @@ -1354,6 +1360,45 @@ public sealed partial class FoliageChunkVisual : MonoBehaviour SpawnRock(slot, settings); } + private void SpawnFloatingIsland(FoliageSlot slot, FoliageSettings settings) + { + GameObject prefab = settings != null ? settings.voidFloatingIslandPrefab : null; + if (prefab == null) + prefab = VoidFloatingIslandWorldSpawner.ResolvePrefabFallback(); + + GameObject instance = CreateVisualInstance( + prefab, + slot, + "VoidFloatingIsland", + CreateRockPlaceholder, + instanceRoot, + keepPhysicsColliders: false); + if (instance == null) + return; + + OptimizeDecorativeRenderers(instance, castShadows: true, receiveShadows: true, useLightProbes: false); + ApplyVoidFloatingIslandMaterial(instance, settings); + EnsureBlockingCollider(instance, useExactMesh: true); + decorativeInstances.Add(instance); + decorativePrefabs.Add(prefab); + } + + private static void ApplyVoidFloatingIslandMaterial(GameObject instance, FoliageSettings settings) + { + if (instance == null || settings == null || settings.voidFloatingIslandMaterial == null) + return; + + Material mat = settings.voidFloatingIslandMaterial; + Renderer[] renderers = instance.GetComponentsInChildren(true); + for (int i = 0; i < renderers.Length; i++) + { + Renderer rend = renderers[i]; + if (rend == null) + continue; + rend.sharedMaterial = mat; + } + } + private void SpawnCliff(FoliageSlot slot, FoliageSettings settings, bool useExactMeshCollider = false) { GameObject prefab = settings != null ? settings.desertCliffVisualPrefab : null; diff --git a/Assets/Scripts/World/Foliage/FoliagePopulator.cs b/Assets/Scripts/World/Foliage/FoliagePopulator.cs index 0103573d0..93b3acb8c 100644 --- a/Assets/Scripts/World/Foliage/FoliagePopulator.cs +++ b/Assets/Scripts/World/Foliage/FoliagePopulator.cs @@ -406,6 +406,38 @@ public static partial class FoliagePopulator } long p17cliff = System.Diagnostics.Stopwatch.GetTimestamp(); + + int floatingIslandTarget = treesOnly ? 0 : settings.GetTargetFloatingIslandCount(dominant); + // Offshore void disc may still majority-classify as grassland while void01 is high. + if (floatingIslandTarget <= 0 && !treesOnly && settings.voidFloatingIslands > 0) + { + int cx = Mathf.RoundToInt((chunkCoord.x + 0.5f) * chunkSize); + int cz = Mathf.RoundToInt((chunkCoord.y + 0.5f) * chunkSize); + float voidHost = BiomeClimateSampler.SampleVoidDomain01(cx, cz, seed, world != null ? world.BiomeSettings : null); + if (voidHost > 0.18f) + floatingIslandTarget = settings.voidFloatingIslands; + } + + if (floatingIslandTarget > 0 + && (settings.voidFloatingIslandPrefab != null || VoidFloatingIslandWorldSpawner.ResolvePrefabFallback() != null) + && ChunkIsVoidFloatingIslandHost(seed, chunkCoord, chunkSize, settings)) + { + nextIndex = PopulateVoidFloatingIslands( + world, + sampler, + chunkCoord, + chunkSize, + seed, + settings, + padding, + usable, + floatingIslandTarget, + treePositions, + rockPositions, + results, + nextIndex); + } + // Shared undergrowth patch centers: dense pockets with open gaps between them. PickFoliagePatchCenters( world, @@ -1003,6 +1035,151 @@ public static partial class FoliagePopulator return nextIndex; } + private static bool ChunkIsVoidFloatingIslandHost( + int seed, + Vector2Int chunkCoord, + int chunkSize, + FoliageSettings settings) + { + float cellSize = Mathf.Max(120f, settings.voidFloatingIslandCellSizeMeters); + float chance = Mathf.Clamp01(settings.voidFloatingIslandChunkSpawnChance); + + float chunkCenterX = (chunkCoord.x + 0.5f) * chunkSize; + float chunkCenterZ = (chunkCoord.y + 0.5f) * chunkSize; + int cellX = Mathf.FloorToInt(chunkCenterX / cellSize); + int cellZ = Mathf.FloorToInt(chunkCenterZ / cellSize); + + var cellRng = new System.Random(HashChunkSlot(seed, cellX, cellZ, 0, 7741)); + if (cellRng.NextDouble() >= chance) + return false; + + int chunksPerCell = Mathf.Max(1, Mathf.RoundToInt(cellSize / Mathf.Max(1, chunkSize))); + int hostLocalX = cellRng.Next(0, chunksPerCell); + int hostLocalZ = cellRng.Next(0, chunksPerCell); + int cellOriginChunkX = Mathf.FloorToInt((cellX * cellSize) / chunkSize); + int cellOriginChunkZ = Mathf.FloorToInt((cellZ * cellSize) / chunkSize); + int hostChunkX = cellOriginChunkX + hostLocalX; + int hostChunkZ = cellOriginChunkZ + hostLocalZ; + return chunkCoord.x == hostChunkX && chunkCoord.y == hostChunkZ; + } + + private static ushort PopulateVoidFloatingIslands( + WorldGenerator world, + Chunk sampler, + Vector2Int chunkCoord, + int chunkSize, + int seed, + FoliageSettings settings, + float padding, + float usable, + int islandTarget, + List treePositions, + List rockPositions, + List results, + ushort nextIndex) + { + int target = Mathf.Clamp(islandTarget, 1, 2); + for (int i = 0; i < target; i++) + { + if (!TrySampleVoidFloatingIsland( + world, + sampler, + chunkCoord, + chunkSize, + seed, + i, + settings, + padding, + usable, + treePositions, + rockPositions, + results, + out FoliageSlot slot)) + continue; + + slot.Index = nextIndex++; + results.Add(slot); + } + + return nextIndex; + } + + private static bool TrySampleVoidFloatingIsland( + WorldGenerator world, + Chunk sampler, + Vector2Int chunkCoord, + int chunkSize, + int seed, + int candidateIndex, + FoliageSettings settings, + float padding, + float usable, + List treePositions, + List rockPositions, + List results, + out FoliageSlot slot) + { + slot = default; + var rng = new System.Random(HashChunkSlot(seed, chunkCoord.x, chunkCoord.y, candidateIndex, 7753)); + float scaleMin = Mathf.Min(settings.voidFloatingIslandScaleMin, settings.voidFloatingIslandScaleMax); + float scaleMax = Mathf.Max(settings.voidFloatingIslandScaleMin, settings.voidFloatingIslandScaleMax); + float hover = Mathf.Max(4f, settings.voidFloatingIslandHoverMeters); + + for (int attempt = 0; attempt < 16; attempt++) + { + float localX = padding + (float)rng.NextDouble() * usable; + float localZ = padding + (float)rng.NextDouble() * usable; + int wx = Mathf.RoundToInt(chunkCoord.x * chunkSize + localX); + int wz = Mathf.RoundToInt(chunkCoord.y * chunkSize + localZ); + if (WorldTerrainHeightModifiers.SuppressesFoliageAt(wx, wz)) + continue; + + float groundY = SampleSurfaceWorldY(world, sampler, wx, wz); + float void01 = BiomeClimateSampler.SampleVoidDomain01( + wx, wz, seed, world != null ? world.BiomeSettings : null); + WorldGenerator.ClimateSample climate = SampleClimateMemo(world, new Vector3(wx, groundY, wz)); + bool onVoid = void01 > 0.18f || (climate.valid && climate.biome == BiomeType.Void); + if (!onVoid) + continue; + + float uniform = RandomRange(rng, scaleMin, scaleMax); + Vector3 scale = Vector3.one * uniform; + Vector3 pos = new Vector3(wx, groundY + hover, wz); + if (!PassesSeparation(pos, treePositions, 18f)) + continue; + if (!PassesSeparation(pos, rockPositions, 12f)) + continue; + + bool clearOfIslands = true; + for (int i = 0; i < results.Count; i++) + { + if (results[i].Type != FoliageSlotType.FloatingIsland) + continue; + if ((results[i].WorldPosition - pos).sqrMagnitude < 40f * 40f) + { + clearOfIslands = false; + break; + } + } + + if (!clearOfIslands) + continue; + + slot = new FoliageSlot + { + Type = FoliageSlotType.FloatingIsland, + WorldPosition = pos, + Rotation = Quaternion.Euler(0f, RandomRange(rng, 0f, 360f), 0f), + Scale = scale, + Biome = BiomeType.Void, + PrefabVariant = 0, + }; + return true; + } + + return false; + } + private static bool TrySampleDesertCliff( WorldGenerator world, Chunk sampler, @@ -2352,7 +2529,7 @@ public static partial class FoliagePopulator if (settings.mushroomTreeVisualPrefab == null) return nextIndex; if (dominant is BiomeType.Desert or BiomeType.Snow or BiomeType.Tundra - or BiomeType.Ocean or BiomeType.Beach or BiomeType.Volcano) + or BiomeType.Ocean or BiomeType.Beach or BiomeType.Volcano or BiomeType.Void) return nextIndex; if (dominant == BiomeType.Swamp) @@ -2652,7 +2829,7 @@ public static partial class FoliagePopulator if (!climate.valid) return false; if (climate.biome is BiomeType.Desert or BiomeType.Snow or BiomeType.Tundra - or BiomeType.Volcano or BiomeType.Ocean or BiomeType.Beach) + or BiomeType.Volcano or BiomeType.Void or BiomeType.Ocean or BiomeType.Beach) return false; // Swamp is always mushroom country — skip the mid-temp band used by forest stands. if (climate.biome == BiomeType.Swamp) @@ -2985,6 +3162,7 @@ public static partial class FoliagePopulator int ocean = 0; int swamp = 0; int volcano = 0; + int voidCount = 0; for (int z = 0; z < 3; z++) { @@ -3017,6 +3195,11 @@ public static partial class FoliagePopulator if (volcano01 > 0.12f && height01 >= world.TerrainSeaLevel01 + world.TerrainBeachBand01 * 0.35f) climate.biome = BiomeType.Volcano; + float void01 = BiomeClimateSampler.SampleVoidDomain01( + wx, wz, world.TerrainSeed, world.BiomeSettings); + if (void01 > 0.08f && height01 >= world.TerrainSeaLevel01 - 0.02f) + climate.biome = BiomeType.Void; + samples++; switch (climate.biome) { @@ -3030,6 +3213,7 @@ public static partial class FoliagePopulator case BiomeType.Ocean: ocean++; break; case BiomeType.Swamp: swamp++; break; case BiomeType.Volcano: volcano++; break; + case BiomeType.Void: voidCount++; break; } } } @@ -3041,6 +3225,9 @@ public static partial class FoliagePopulator return BiomeType.Ocean; if (beach >= samples / 2) return BiomeType.Beach; + if (voidCount >= forest && voidCount >= grass && voidCount >= desert && voidCount >= tundra + && voidCount >= mountain && voidCount >= snow && voidCount >= swamp && voidCount >= volcano) + return BiomeType.Void; if (volcano >= forest && volcano >= grass && volcano >= desert && volcano >= tundra && volcano >= mountain && volcano >= snow && volcano >= swamp) return BiomeType.Volcano; diff --git a/Assets/Scripts/World/Foliage/FoliageSettings.cs b/Assets/Scripts/World/Foliage/FoliageSettings.cs index 920909023..2c0755937 100644 --- a/Assets/Scripts/World/Foliage/FoliageSettings.cs +++ b/Assets/Scripts/World/Foliage/FoliageSettings.cs @@ -143,6 +143,20 @@ public sealed class FoliageSettings : ScriptableObject public GameObject desertCliffVisualPrefab; [Tooltip("URP Lit material with albedo/normal/AO so cliffs receive self-shadowing.")] public Material desertCliffMaterial; + [Tooltip("Void biome floating island model (Meshy Floating Meadow Cliff). Falls back to Andrews island if null.")] + public GameObject voidFloatingIslandPrefab; + [Tooltip("URP Lit material for the void floating island (Meshy albedo/normal/metallic).")] + public Material voidFloatingIslandMaterial; + [Tooltip("How many floating islands a void host chunk may place.")] + [Min(0)] public int voidFloatingIslands = 1; + [Tooltip("Chance the chosen host chunk in a void floating-island cell places one.")] + [Range(0f, 1f)] public float voidFloatingIslandChunkSpawnChance = 0.55f; + [Tooltip("World-meter cell size between void floating islands.")] + [Min(80f)] public float voidFloatingIslandCellSizeMeters = 180f; + [Tooltip("Meters above terrain the island mesh hovers.")] + [Min(4f)] public float voidFloatingIslandHoverMeters = 36f; + [Min(0.5f)] public float voidFloatingIslandScaleMin = 2.8f; + [Min(0.5f)] public float voidFloatingIslandScaleMax = 5.2f; [Tooltip("Landmark mother tree prefab (spawned once at world start for horizon silhouette).")] public GameObject motherTreeLandmarkPrefab; [Tooltip("Landmark Ruins of Ishtar prefab (spawned once; terrain is flattened/carved under it).")] @@ -564,6 +578,7 @@ public sealed class FoliageSettings : ScriptableObject case BiomeType.Tundra: return tundraRocks; case BiomeType.Mountain: return mountainRocks; case BiomeType.Volcano: return mountainRocks > 0 ? mountainRocks : desertRocks; + case BiomeType.Void: return mountainRocks > 0 ? Mathf.Max(mountainRocks, desertRocks) : Mathf.Max(8, desertRocks); case BiomeType.Desert: return desertRocks; case BiomeType.Snow: return snowRocks; case BiomeType.Swamp: return swampRocks; @@ -576,6 +591,11 @@ public sealed class FoliageSettings : ScriptableObject return biome == BiomeType.Desert ? desertCliffs : 0; } + public int GetTargetFloatingIslandCount(BiomeType biome) + { + return biome == BiomeType.Void ? voidFloatingIslands : 0; + } + public float RollTreeRespawnDelay(System.Random rng) { float min = Mathf.Max(1f, treeRespawnMinSeconds); diff --git a/Assets/Scripts/World/Foliage/FoliageSlotType.cs b/Assets/Scripts/World/Foliage/FoliageSlotType.cs index ba53f3b36..280ccc6c5 100644 --- a/Assets/Scripts/World/Foliage/FoliageSlotType.cs +++ b/Assets/Scripts/World/Foliage/FoliageSlotType.cs @@ -7,4 +7,6 @@ public enum FoliageSlotType : byte Cliff = 4, /// Harvestable plant rooted on a lake, river, pond, or sea bed. WaterPlant = 5, + /// Hovering void-biome floating island prop (Meshy meadow cliff). + FloatingIsland = 6, } diff --git a/Assets/Scripts/World/Foliage/WorldFoliageManager.cs b/Assets/Scripts/World/Foliage/WorldFoliageManager.cs index 83ab9136c..efedfd722 100644 --- a/Assets/Scripts/World/Foliage/WorldFoliageManager.cs +++ b/Assets/Scripts/World/Foliage/WorldFoliageManager.cs @@ -241,6 +241,9 @@ public sealed partial class WorldFoliageManager : MonoBehaviour settings = UnityEngine.Object.Instantiate(settings); #endif + if (settings.voidFloatingIslandPrefab == null) + VoidFloatingIslandWorldSpawner.TryAssignToFoliageSettings(settings); + ApplySettingsOverrides(settings); ApplyRuntimeMemoryBudgets(settings); diff --git a/Assets/Scripts/World/Village/ChurchHealerDiseaseService.cs b/Assets/Scripts/World/Village/ChurchHealerDiseaseService.cs index b213ba1a0..93174f1a8 100644 --- a/Assets/Scripts/World/Village/ChurchHealerDiseaseService.cs +++ b/Assets/Scripts/World/Village/ChurchHealerDiseaseService.cs @@ -1,15 +1,14 @@ +using InventoryFramework; using Mirror; +using UnityEngine; /// -/// Church healing for lingering illness (e.g. raw-mushroom food sickness). +/// Church healing for mundane diseases — expensive coin rite that clears all active diseases. /// public static class ChurchHealerDiseaseService { public const string NoLingeringIllnessLine = - "You carry no lingering illness that potions cannot touch. When true disease comes — the kind that waits in the blood — come back. Waiting is the medicine."; - - public const string MushroomSicknessCuredLine = - "Your stomach was turning on the raw mushrooms. The chapel rite settles it. Drink less of the forest raw, or cook it over a fire next time."; + "You carry no lingering illness. When disease takes hold — Rawcap Gut, Marsh Cough, Swamp Rot, and the rest — come back with coin. Waiting is medicine; gold is faster."; public static bool ServerTryHealDiseases(NetworkIdentity player, out string response) { @@ -19,17 +18,58 @@ public static class ChurchHealerDiseaseService return false; } - PlayerMushroomSicknessRuntime sickness = - player.GetComponent() - ?? player.GetComponentInChildren(true); + PlayerDiseaseRuntime diseases = PlayerDiseaseRuntime.EnsureOn(player.gameObject); + if (diseases == null || !diseases.HasAny) + { + // Legacy shim path (should be empty once Rawcap lives on disease runtime). + PlayerMushroomSicknessRuntime mushroom = + player.GetComponent() + ?? player.GetComponentInChildren(true); + if (mushroom != null && mushroom.IsSick && mushroom.TryCureFromPotionOrHealer()) + { + response = "Your stomach was turning on the raw mushrooms. The chapel rite settles Rawcap Gut."; + return true; + } + + response = NoLingeringIllnessLine; + return true; + } - if (sickness != null && sickness.TryCureFromPotionOrHealer()) + int price = diseases.GetHealerTotalPrice(); + string names = diseases.BuildActiveNamesList(); + if (price <= 0) { - response = MushroomSicknessCuredLine; + response = NoLingeringIllnessLine; return true; } - response = NoLingeringIllnessLine; + Hotbar hotbar = player.GetComponentInChildren(true); + Inventory inventory = player.GetComponentInChildren(true); + int coins = GoldPressedManaCurrency.CountCoinEquivalent(hotbar, inventory); + if (coins < price) + { + response = + $"You carry {names}. The rite costs {price} coins. You have {coins}. Come back when you can pay — I will not cut the price, and I will not cure half."; + return false; + } + + if (!GoldPressedManaCurrency.TryConsumeCoins(hotbar, inventory, price)) + { + response = + $"You carry {names}. The rite costs {price} coins, and the purse will not open. Try again with coin ready."; + return false; + } + + string curedNames = names; + if (!diseases.ServerTryCureAll(out int cured, out _) || cured <= 0) + { + GoldPressedManaCurrency.TryGrantCoins(hotbar, inventory, price); + response = NoLingeringIllnessLine; + return false; + } + + response = + $"The chapel rite burns {price} coins and clears {curedNames}. Rest, drink water, and do not walk the swamp barefoot for a while."; return true; } } diff --git a/Assets/Scripts/World/VoidFloatingIslandWorldSpawner.cs b/Assets/Scripts/World/VoidFloatingIslandWorldSpawner.cs new file mode 100644 index 000000000..6ec821fee --- /dev/null +++ b/Assets/Scripts/World/VoidFloatingIslandWorldSpawner.cs @@ -0,0 +1,103 @@ +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +/// +/// Resolves the Meshy Floating Meadow Cliff model for the void biome. +/// Andrews floating island remains a last-resort editor fallback only. +/// +public static class VoidFloatingIslandWorldSpawner +{ + public const string MeshyFolderName = "Meshy_AI_Floating_Meadow_Cliff_1019132410_texture_fbx"; + public const string MeshyFbxAssetPath = + "Assets/ThirdParty/DownloadedAssets/Meshy_AI_Floating_Meadow_Cliff_1019132410_texture_fbx/" + + "Meshy_AI_Floating_Meadow_Cliff_1019132410_texture_fbx/" + + "Meshy_AI_Floating_Meadow_Cliff_1019132410_texture.fbx"; + public const string MeshyFbxFlatAssetPath = + "Assets/ThirdParty/DownloadedAssets/Meshy_AI_Floating_Meadow_Cliff_1019132410_texture_fbx/" + + "Meshy_AI_Floating_Meadow_Cliff_1019132410_texture.fbx"; + public const string MeshyMaterialAssetPath = + "Assets/ThirdParty/DownloadedAssets/Meshy_AI_Floating_Meadow_Cliff_1019132410_texture_fbx/" + + "Meshy_AI_Floating_Meadow_Cliff_1019132410_texture_fbx/Materials/" + + "Meshy_AI_Floating_Meadow_Cliff_1019132410_texture.mat"; + public const string AndrewsIslandAssetPath = + "Assets/ThirdParty/DownloadedAssets/andrews-floating-island-unity-v2/source/" + + "Andrews_Floating_Island_Unity/Andrews_Island_Unity_2.obj"; + + private static GameObject s_cachedFallback; + private static bool s_resolved; + + public static GameObject ResolvePrefabFallback() + { + if (s_resolved) + return s_cachedFallback; + + s_resolved = true; + s_cachedFallback = TryLoadMeshyOrAndrews(); + return s_cachedFallback; + } + + public static void InvalidateCache() + { + s_resolved = false; + s_cachedFallback = null; + } + +#if UNITY_EDITOR + [InitializeOnLoadMethod] + private static void EditorReset() => InvalidateCache(); +#endif + + private static GameObject TryLoadMeshyOrAndrews() + { +#if UNITY_EDITOR + GameObject meshy = AssetDatabase.LoadAssetAtPath(MeshyFbxAssetPath); + if (meshy == null) + meshy = AssetDatabase.LoadAssetAtPath(MeshyFbxFlatAssetPath); + if (meshy != null) + return meshy; + + GameObject andrews = AssetDatabase.LoadAssetAtPath(AndrewsIslandAssetPath); + if (andrews != null) + return andrews; +#endif + + // Runtime Resources path (optional copy of the prefab). + GameObject fromResources = Resources.Load("VoidFloatingIsland"); + if (fromResources != null) + return fromResources; + + return null; + } + + /// + /// Editor helper: assign the Meshy (or Andrews) model onto FoliageSettings. + /// + public static bool TryAssignToFoliageSettings(FoliageSettings settings) + { + if (settings == null) + return false; + + GameObject prefab = ResolvePrefabFallback(); + if (prefab == null) + return false; + + settings.voidFloatingIslandPrefab = prefab; +#if UNITY_EDITOR + Material mat = AssetDatabase.LoadAssetAtPath(MeshyMaterialAssetPath); + if (mat != null) + settings.voidFloatingIslandMaterial = mat; +#endif + return true; + } + + public static IEnumerable ExpectedAssetPaths() + { + yield return MeshyFbxAssetPath; + yield return MeshyFbxFlatAssetPath; + yield return MeshyMaterialAssetPath; + yield return AndrewsIslandAssetPath; + } +} diff --git a/Assets/Scripts/World/VoidFloatingIslandWorldSpawner.cs.meta b/Assets/Scripts/World/VoidFloatingIslandWorldSpawner.cs.meta new file mode 100644 index 000000000..9b5e9a02a --- /dev/null +++ b/Assets/Scripts/World/VoidFloatingIslandWorldSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c89a3ba2f544f32ba079715a6f728d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/WorldGenerator.cs b/Assets/Scripts/WorldGenerator.cs index 0d693db33..9b621c8f7 100644 --- a/Assets/Scripts/WorldGenerator.cs +++ b/Assets/Scripts/WorldGenerator.cs @@ -208,6 +208,8 @@ public class WorldGenerator : MonoBehaviour [SerializeField] private bool spawnPlayerInVolcanoBiome = true; [Tooltip("Radial fraction of volcano radius for spawn (0 center crater … 1 rim).")] [SerializeField] [Range(0.35f, 0.85f)] private float volcanoSpawnRadial01 = 0.48f; + [Tooltip("Prefer spawning on the offshore void island (overrides Galbesh / bandit / volcano).")] + [SerializeField] private bool spawnPlayerOnVoidIsland = true; [Tooltip("Prefer spawning next to Ruins of Galbesh when that landmark exists (overrides volcano).")] [SerializeField] private bool spawnPlayerNearGalbeshRuins = true; [Tooltip("Horizontal meters from Galbesh Ground center to the player spawn.")] @@ -238,6 +240,7 @@ public class WorldGenerator : MonoBehaviour private bool playerGalbeshSpawnApplied; private bool playerBanditCampSpawnApplied; private bool playerRiverSpawnApplied; + private bool playerVoidSpawnApplied; /// True after has finished spawn-chunk pregeneration. public bool IsWorldReady => worldReadyInitialized; @@ -258,7 +261,7 @@ public class WorldGenerator : MonoBehaviour public float IslandWorldRadius => islandRadius; /// - /// Call after an external teleport so Bandit Camp / Galbesh / volcano spawn snaps + /// Call after an external teleport so Bandit Camp / Galbesh / volcano / void spawn snaps /// do not yank the player back. /// public void MarkPlayerSpawnHandledExternally() @@ -267,8 +270,11 @@ public class WorldGenerator : MonoBehaviour playerGalbeshSpawnApplied = true; playerVolcanoSpawnApplied = true; playerRiverSpawnApplied = true; + playerVoidSpawnApplied = true; } + public bool PrefersVoidIslandSpawn => spawnPlayerOnVoidIsland; + public float IslandWorldDiameter => islandRadius * 2f; public bool IslandModeEnabled => islandMode; @@ -358,6 +364,7 @@ public class WorldGenerator : MonoBehaviour sample.biome = reclass; ApplyVolcanoBiomeOverride(ref sample, worldX, worldZ, height01); + ApplyVoidBiomeOverride(ref sample, worldX, worldZ, height01); // Rare inland desert oasis bowls stay shallow Swamp, not Ocean. if (sample.biome == BiomeType.Ocean @@ -399,6 +406,7 @@ public class WorldGenerator : MonoBehaviour cliffSlopeThreshold, biomeSettings); ApplyVolcanoBiomeOverride(ref sample, worldX, worldZ, height01); + ApplyVoidBiomeOverride(ref sample, worldX, worldZ, height01); ApplyNearWaterTemperatureCooling(ref sample); ApplyTemporalTemperatureModulation(ref sample); return sample; @@ -416,6 +424,16 @@ public class WorldGenerator : MonoBehaviour sample.biome = BiomeType.Volcano; } + private void ApplyVoidBiomeOverride(ref ClimateSample sample, int worldX, int worldZ, float height01) + { + if (height01 < seaLevel + beachBand * 0.35f) + return; + + float void01 = BiomeClimateSampler.SampleVoidDomain01(worldX, worldZ, seed, biomeSettings); + if (void01 > 0.12f) + sample.biome = BiomeType.Void; + } + /// 0–1 how much of the local neighborhood matches (for soft heat pulls). public float SampleBiomeWeightAtWorldPosition(Vector3 worldPosition, BiomeType biome, float radiusMeters = -1f) { @@ -838,7 +856,9 @@ public class WorldGenerator : MonoBehaviour ApplyStreamingBudgetCaps(); spawnPlayerInVolcanoBiome = true; spawnPlayerNearGalbeshRuins = true; + spawnPlayerOnVoidIsland = true; EnsureVolcanoBiomeSettingsReady(); + BiomeClimateSampler.EnsureVoidSettingsDefaults(biomeSettings); BiomeClimateSampler.SetIslandLayout(islandCenter, islandRadius); BiomeClimateSampler.ConfigureVolcanoIsland(islandCenter, islandRadius, biomeSettings); TryAutoFitSeaLevelToIsland(); @@ -854,6 +874,7 @@ public class WorldGenerator : MonoBehaviour EnsureVillageWorldSpawner(); EnsureRuinLootGroupWorldSpawner(); EnsureRowBoatWorldSpawner(); + EnsureDrucladWorldSpawner(); ClientViewTerrainVisibility.SetIslandViewDistances(islandMode ? islandRadius : 0f); } @@ -1023,6 +1044,12 @@ public class WorldGenerator : MonoBehaviour spawner.enabled = true; } + private void EnsureDrucladWorldSpawner() + { + if (GetComponent() == null) + gameObject.AddComponent(); + } + private void EnsureDesertCliffWorldSpawner() { if (GetComponent() == null) @@ -1314,7 +1341,9 @@ public class WorldGenerator : MonoBehaviour ApplyStreamingBudgetCaps(); spawnPlayerInVolcanoBiome = true; spawnPlayerNearGalbeshRuins = true; + spawnPlayerOnVoidIsland = true; EnsureVolcanoBiomeSettingsReady(); + BiomeClimateSampler.EnsureVoidSettingsDefaults(biomeSettings); BiomeClimateSampler.SetIslandLayout(islandCenter, islandRadius); BiomeClimateSampler.ConfigureVolcanoIsland(islandCenter, islandRadius, biomeSettings); ClientViewTerrainVisibility.SetIslandViewDistances(islandMode ? islandRadius : 0f); @@ -1338,6 +1367,7 @@ public class WorldGenerator : MonoBehaviour EnsureVillageWorldSpawner(); EnsureRuinLootGroupWorldSpawner(); EnsureRowBoatWorldSpawner(); + EnsureDrucladWorldSpawner(); } // Galbesh (and Bandit when that spawn is on) must exist before volcano boot so we skip @@ -1424,6 +1454,14 @@ public class WorldGenerator : MonoBehaviour FlushPendingColliderBakes(); ForceBakeRing(GetChunkCoord(riverSpawn), 1, 3); } + else if (spawnPlayerOnVoidIsland + && TryGetVoidPlayerSpawnPose(out Vector3 voidSpawn, out _)) + { + ManafallLoadDebug.Log($"warm chunks at void island spawn {voidSpawn}"); + PreGenerateChunksAroundWorldPosition(voidSpawn, syncChebyshevRadius: 1); + FlushPendingColliderBakes(); + ForceBakeRing(GetChunkCoord(voidSpawn), 1, 3); + } else if (spawnPlayerNearBanditCamp && TryGetBanditCampPlayerSpawnPose(out Vector3 banditSpawn, out _)) { @@ -1574,6 +1612,7 @@ public class WorldGenerator : MonoBehaviour { spawnPlayerInVolcanoBiome = true; spawnPlayerNearGalbeshRuins = true; + spawnPlayerOnVoidIsland = true; EnsureVolcanoBiomeSettingsReady(); BiomeClimateSampler.SetIslandLayout(islandCenter, islandRadius); @@ -1588,16 +1627,23 @@ public class WorldGenerator : MonoBehaviour Vector3 pin = new Vector3(volcanoCenter.x, seaLevel * heightScale + 40f, volcanoCenter.y); WorldLandmarkStreamingPins.Register(pin); - // Preferred spawn is Bandit Camp / Galbesh — don't sync-build the whole volcano disk + if (spawnPlayerOnVoidIsland && TryGetVoidPlayerSpawnPose(out Vector3 voidPin, out _)) + { + WorldLandmarkStreamingPins.Register(voidPin); + ManafallLoadDebug.Log($"Void island spawn pin at {voidPin}"); + } + + // Preferred spawn is void / Bandit / Galbesh — don't sync-build the whole volcano disk // (~20s). Streaming pins create those chunks when the player approaches. - bool landmarkSpawnReady = - (spawnPlayerNearBanditCamp && TryGetBanditCampPlayerSpawnPose(out _, out _)) + bool preferredAwayFromVolcano = + (spawnPlayerOnVoidIsland && TryGetVoidPlayerSpawnPose(out _, out _)) + || (spawnPlayerNearBanditCamp && TryGetBanditCampPlayerSpawnPose(out _, out _)) || (spawnPlayerNearGalbeshRuins && TryGetGalbeshPlayerSpawnPose(out _, out _)); - if (landmarkSpawnReady) + if (preferredAwayFromVolcano) { ManafallLoadDebug.Log( $"Volcano island: pin-only at ({volcanoCenter.x:0}, {volcanoCenter.y:0}) " + - $"(player spawn is landmark; defer full disk)"); + $"(player spawn is elsewhere; defer full disk)"); return; } @@ -1919,7 +1965,8 @@ public class WorldGenerator : MonoBehaviour int cix = Mathf.RoundToInt(wx); int ciz = Mathf.RoundToInt(wz); // Volcano is a second landmass — never treat it as coastline for sea fit. - if (BiomeClimateSampler.SampleVolcanoDomain01(cix, ciz, seed, biomeSettings) <= 0.02f) + if (BiomeClimateSampler.SampleVolcanoDomain01(cix, ciz, seed, biomeSettings) <= 0.02f + && BiomeClimateSampler.SampleVoidDomain01(cix, ciz, seed, biomeSettings) <= 0.02f) coastHeights.Add(mapHeightSampler.SampleAnalyticalHeight01(cix, ciz)); float oceanDist = islandRadius * Mathf.Lerp(1.28f, 1.45f, NoiseUtility.GenerateNoise(wx, wz, 0.0015f, seed + 66001)); @@ -1927,7 +1974,8 @@ public class WorldGenerator : MonoBehaviour float oz = islandCenter.y + Mathf.Sin(angle + 0.4f) * oceanDist; int oix = Mathf.RoundToInt(ox); int oiz = Mathf.RoundToInt(oz); - if (BiomeClimateSampler.SampleVolcanoDomain01(oix, oiz, seed, biomeSettings) > 0.02f) + if (BiomeClimateSampler.SampleVolcanoDomain01(oix, oiz, seed, biomeSettings) > 0.02f + || BiomeClimateSampler.SampleVoidDomain01(oix, oiz, seed, biomeSettings) > 0.02f) continue; float oceanH = mapHeightSampler.SampleAnalyticalHeight01(oix, oiz); @@ -2775,27 +2823,47 @@ public class WorldGenerator : MonoBehaviour } /// - /// River bank first when rivers are enabled, then Bandit Camp, Galbesh, volcano. + /// Void island first, then river bank, Bandit Camp, Galbesh, volcano. /// public bool TryGetPreferredPlayerSpawnPose(out Vector3 position, out Quaternion rotation) { + const string tag = PlayerFirstSpawnPlacement.VoidSpawnSearchToken; + if (spawnPlayerOnVoidIsland && TryGetVoidPlayerSpawnPose(out position, out rotation)) + { + Debug.Log(tag + " preferred=void " + position.ToString("F1")); + return true; + } + if (generateRivers && TryGetRiverBankSpawnPose(out position, out rotation)) + { + Debug.Log(tag + " preferred=river (void skipped flag=" + spawnPlayerOnVoidIsland + ")"); return true; + } if (spawnPlayerNearBanditCamp && TryGetBanditCampPlayerSpawnPose(out position, out rotation)) + { + Debug.Log(tag + " preferred=bandit (void skipped)"); return true; + } if (spawnPlayerNearGalbeshRuins && TryGetGalbeshPlayerSpawnPose(out position, out rotation)) + { + Debug.Log(tag + " preferred=galbesh (void skipped flag=" + spawnPlayerOnVoidIsland + ")"); return true; + } if (spawnPlayerInVolcanoBiome && biomeSettings != null && biomeSettings.volcanoDomainStrength > 0.001f && TryGetVolcanoPlayerSpawnPose(out position, out rotation)) + { + Debug.Log(tag + " preferred=volcano (void skipped)"); return true; + } position = default; rotation = Quaternion.identity; + Debug.LogWarning(tag + " preferred=none voidFlag=" + spawnPlayerOnVoidIsland); return false; } @@ -2932,6 +3000,71 @@ public class WorldGenerator : MonoBehaviour return true; } + /// Feet pose near the middle of the offshore void island. + public bool TryGetVoidPlayerSpawnPose(out Vector3 position, out Quaternion rotation) + { + const string tag = PlayerFirstSpawnPlacement.VoidSpawnSearchToken; + position = default; + rotation = Quaternion.identity; + if (biomeSettings == null) + biomeSettings = new BiomeSettings(); + + BiomeClimateSampler.EnsureVoidSettingsDefaults(biomeSettings); + BiomeClimateSampler.SetIslandLayout(islandCenter, islandRadius); + BiomeClimateSampler.ConfigureVolcanoIsland(islandCenter, islandRadius, biomeSettings); + BiomeClimateSampler.ResolveVoidLayout(biomeSettings, out Vector2 voidCenter, out float radius); + if (radius <= 1f) + { + Debug.LogWarning(tag + " void pose: radius=" + radius + + " centerIsland=" + islandCenter + " islandR=" + islandRadius); + return false; + } + + EnsureMapHeightSampler(); + int wx = Mathf.RoundToInt(voidCenter.x); + int wz = Mathf.RoundToInt(voidCenter.y); + float void01 = BiomeClimateSampler.SampleVoidDomain01(wx, wz, seed, biomeSettings); + // Always seat at the authored center — domain probes used to fail open and fall through to Galbesh. + if (void01 <= 0.05f) + { + Debug.LogWarning(tag + " void pose: domain low at center " + + voidCenter + " r=" + radius + " void01=" + void01.ToString("F3") + + " islandR=" + islandRadius + " — forcing center seat"); + void01 = 1f; + } + + float terrainY = mapHeightSampler != null + ? mapHeightSampler.SampleAnalyticalSurfaceWorldY(wx, wz) + : LandHeight01ToWorldY(ResolveAnalyticalHeight01(wx, wz)); + float seaY = seaLevel * heightScale; + if (terrainY < seaY + 1.2f) + { + Debug.Log(tag + " void pose: lift wet analyticalY=" + terrainY.ToString("F1") + + " seaY=" + seaY.ToString("F1")); + terrainY = seaY + 4f; + } + + float feet = playerSpawnFeetOffset > 0.01f ? playerSpawnFeetOffset : 1.05f; + if (player != null) + { + float live = PlayerSpawnGroundUtility.GetCharacterFeetOffset(player); + if (live > 0.01f) + feet = live; + } + + position = new Vector3(wx, terrainY + feet, wz); + Vector3 outward = new Vector3(wx - islandCenter.x, 0f, wz - islandCenter.y); + rotation = outward.sqrMagnitude > 0.01f + ? Quaternion.LookRotation(outward.normalized, Vector3.up) + : Quaternion.identity; + Debug.Log(tag + " void pose ok " + position.ToString("F1") + + " void01=" + void01.ToString("F2") + + " r=" + radius.ToString("F0") + + " center=" + voidCenter + + " islandR=" + islandRadius.ToString("F0")); + return true; + } + /// /// Mid-slope pose on the first volcano climb path, facing the summit. /// @@ -5489,6 +5622,27 @@ public class WorldGenerator : MonoBehaviour return dx * dx + dz * dz <= reach * reach; } + private bool ChunkOverlapsVoidIsland(Vector2Int coord) + { + if (biomeSettings == null || chunkSize <= 0) + return false; + + BiomeClimateSampler.SetIslandLayout(islandCenter, islandRadius); + BiomeClimateSampler.ResolveVoidLayout(biomeSettings, out Vector2 voidCenter, out float radius); + if (radius <= 1f) + return false; + + float edge = biomeSettings.voidDomainEdgeMeters <= 0.001f ? 36f : biomeSettings.voidDomainEdgeMeters; + float reach = radius + Mathf.Max(10f, edge) + chunkSize; + float minX = coord.x * chunkSize; + float minZ = coord.y * chunkSize; + float cx = Mathf.Clamp(voidCenter.x, minX, minX + chunkSize); + float cz = Mathf.Clamp(voidCenter.y, minZ, minZ + chunkSize); + float dx = cx - voidCenter.x; + float dz = cz - voidCenter.y; + return dx * dx + dz * dz <= reach * reach; + } + private int lastChunkCreateFrame = -1; private TerrainSamplePrefetch terrainPrefetch; private Chunk terrainPrefetchSampler; @@ -5689,7 +5843,7 @@ public class WorldGenerator : MonoBehaviour pendingCreateSet.Remove(coord); - bool volcanoTile = forceVolcanoBoot || ChunkOverlapsVolcanoIsland(coord); + bool volcanoTile = forceVolcanoBoot || ChunkOverlapsVolcanoIsland(coord) || ChunkOverlapsVoidIsland(coord); // Voxel Play: fixed resident budget. When full, reuse the farthest live chunk // instead of allocating another Mesh/heightmap (the multi-GB failure mode). @@ -6000,6 +6154,25 @@ public class WorldGenerator : MonoBehaviour if (PlayerFirstSpawnPlacement.IsInLimbo(player.position)) return; + if (spawnPlayerOnVoidIsland + && !playerVoidSpawnApplied + && TryGetVoidPlayerSpawnPose(out Vector3 voidPos, out Quaternion voidRot)) + { + CharacterController vcc = player.GetComponent(); + bool vWasEnabled = vcc != null && vcc.enabled; + if (vcc != null) + vcc.enabled = false; + player.SetPositionAndRotation(voidPos, voidRot); + if (vcc != null) + vcc.enabled = vWasEnabled; + playerVoidSpawnApplied = true; + playerRiverSpawnApplied = true; + playerBanditCampSpawnApplied = true; + playerGalbeshSpawnApplied = true; + playerVolcanoSpawnApplied = true; + return; + } + if (generateRivers && !playerRiverSpawnApplied && TryGetRiverBankSpawnPose(out Vector3 riverPos, out Quaternion riverRot)) diff --git a/Assets/Settings/Mobile_Renderer.asset b/Assets/Settings/Mobile_Renderer.asset index 3e18251c3..35fcafb02 100644 --- a/Assets/Settings/Mobile_Renderer.asset +++ b/Assets/Settings/Mobile_Renderer.asset @@ -109,6 +109,7 @@ MonoBehaviour: underwaterMaterial: {fileID: 2100000, guid: d8e7f6a5b4c3920182736455a4b3c2d1, type: 2} injectionPoint: 450 skipPreviewAndReflectionCameras: 1 + logUnderwaterFxDebug: 1 --- !u!114 &8123456789012345686 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Settings/PC_Renderer.asset b/Assets/Settings/PC_Renderer.asset index 315ef564c..7297ff0cf 100644 --- a/Assets/Settings/PC_Renderer.asset +++ b/Assets/Settings/PC_Renderer.asset @@ -137,7 +137,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6dd81a3604104244482537b55c0f6641, type: 3} m_Name: ManafallPlanarShoreReflection m_EditorClassIdentifier: Assembly-CSharp::ManafallWaterPlanarReflectionFeature - m_Active: 0 + m_Active: 1 reflectionLayers: serializedVersion: 2 m_Bits: 4294967295 @@ -153,7 +153,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 077703060909635488781ae46bf1d16e, type: 3} m_Name: ManafallShoreCaustics m_EditorClassIdentifier: Assembly-CSharp::ManafallShoreCausticsFeature - m_Active: 0 + m_Active: 1 causticsMaterial: {fileID: 2100000, guid: e9f8a7b6c5d4938273645546a5b4c3e2, type: 2} injectionPoint: 300 --- !u!114 &8123456789012345684 @@ -172,6 +172,7 @@ MonoBehaviour: underwaterMaterial: {fileID: 2100000, guid: d8e7f6a5b4c3920182736455a4b3c2d1, type: 2} injectionPoint: 450 skipPreviewAndReflectionCameras: 1 + logUnderwaterFxDebug: 1 --- !u!114 &8123456789012345686 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Shaders/Include/ManafallFantasyStarfield.hlsl b/Assets/Shaders/Include/ManafallFantasyStarfield.hlsl index 69f288935..43e750101 100644 --- a/Assets/Shaders/Include/ManafallFantasyStarfield.hlsl +++ b/Assets/Shaders/Include/ManafallFantasyStarfield.hlsl @@ -1,4 +1,5 @@ // White night stars for Manafall/WeatherSky. +// Soft circular point-stars on a fine spherical grid — not floor()-painted cells. // No aurora curtains — those read as magenta/cyan wisps on the Offline night soak. #ifndef MANAFALL_FANTASY_STARFIELD_INCLUDED #define MANAFALL_FANTASY_STARFIELD_INCLUDED @@ -9,25 +10,139 @@ float _ManafallStarNight01; float _ManafallStarBrightness01; #endif +#ifndef MANAFALL_STAR_EXTRAS_DECLARED +#define MANAFALL_STAR_EXTRAS_DECLARED +float _ManafallStarfieldMul; +float _ManafallStarMoonDim01; +#endif + half ManafallStarGate01() { return saturate(_ManafallStarNight01); } +float ManafallStarHash21(float2 p) +{ + return frac(sin(dot(p, float2(127.1, 311.7))) * 43758.5453); +} + +// One sharp point-star layer. density = cells across spherical UV. +// thresh = minimum hash to keep a star (lower = denser). radius = hard core size in cell space. +half ManafallStarLayer(float2 uv, float density, float thresh, float radius, float intensity) +{ + float2 grid = uv * density; + float2 cell = floor(grid); + float2 f = frac(grid); + float h = ManafallStarHash21(cell); + float keep = saturate((h - thresh) / max(1e-3, 1.0 - thresh)); + if (keep <= 0.0) + return 0.0h; + + float2 offset = float2( + ManafallStarHash21(cell + float2(19.1, 7.3)), + ManafallStarHash21(cell + float2(3.7, 41.2))); + // Keep the disc inside the cell so adjacent cells do not clip into squares. + offset = 0.22 + offset * 0.56; + + float dist = length(f - offset); + // Tight size range — wide variation made bright stars into soft halos. + float size = radius * lerp(0.85, 1.15, ManafallStarHash21(cell + float2(8.9, 2.1))); + float t = saturate(1.0 - dist / max(size, 1e-4)); + // Hard core (pow 6) with a tiny secondary spike so gems still punch, not bloom. + float core = t * t * t; + core *= core; + float spike = saturate(1.0 - dist / max(size * 0.35, 1e-4)); + spike = spike * spike * spike; + + float mag = intensity * lerp(0.55, 1.0, ManafallStarHash21(cell + float2(5.5, 13.7))); + return (half)((core * 0.65 + spike * 0.35) * mag * keep); +} + +// Galactic pole. Tilted so the Milky Way is an arc from horizon to horizon, +// not a ring around the zenith and not a flat stripe on the horizon. +float3 ManafallGalacticPole() +{ + return normalize(float3(0.62, 0.38, -0.68)); +} + +// 1 on the galactic equator, 0 toward the poles. Narrow spine, soft wings. +float ManafallMilkyWayBand(float3 dir) +{ + float lat = abs(dot(normalize(dir), ManafallGalacticPole())); + float spine = exp(-(lat * lat) / 0.010); + float wing = exp(-(lat * lat) / 0.042); + return saturate(spine * 0.72 + wing * 0.38); +} + +// Density clumps along the band so it reads as a line of clusters, not a solid bar. +float ManafallMilkyWayClumps(float3 dir) +{ + float3 pole = ManafallGalacticPole(); + float3 tangent = normalize(cross(pole, float3(0.15, 1.0, 0.05))); + float3 bitangent = cross(pole, tangent); + float3 inPlane = dir - pole * dot(dir, pole); + float lon = atan2(dot(inPlane, bitangent), dot(inPlane, tangent)); + + float wave = 0.5 + + 0.34 * sin(lon * 2.1 + 0.55) + + 0.28 * sin(lon * 5.3 - 1.15) + + 0.22 * sin(lon * 9.4 + 2.05) + + 0.12 * sin(lon * 17.0 - 0.4); + return saturate(pow(saturate(wave), 1.55)); +} + +// Raw star intensity (no night gate / brightness). Safe for menu and CG sky paths. +half ManafallSoftStarfieldRaw(float3 dir) +{ + float3 d = normalize(dir); + half elev = saturate((half)d.y); + half horizonFade = saturate((elev - 0.008h) / 0.07h); + if (horizonFade < 1e-3h) + return 0.0h; + + float2 uv = float2( + atan2(d.x, d.z) * 0.15915494309 + 0.5, + asin(clamp(d.y, -1.0, 1.0)) * 0.31830988618 + 0.5); + + // A few bright stars off the band so the rest of the sky is not empty. + half field = 0.0h; + field += ManafallStarLayer(uv, 72.0, 0.90, 0.055, 1.15); + field += ManafallStarLayer(uv, 36.0, 0.955, 0.080, 1.85); + + float band = ManafallMilkyWayBand(d); + float clumps = ManafallMilkyWayClumps(d); + float along = saturate(band * lerp(0.22, 1.0, clumps)); + + // Dense pinpoints packed on the galactic arc. Clumps make bright knots along the line. + half river = 0.0h; + river += ManafallStarLayer(uv, 320.0, 0.28, 0.042, 0.70); + river += ManafallStarLayer(uv, 180.0, 0.48, 0.055, 1.05); + river += ManafallStarLayer(uv, 84.0, 0.70, 0.072, 1.55); + river += ManafallStarLayer(uv, 40.0, 0.84, 0.090, 2.05); + + // Faint milky spine under the clusters. Kept dim so it does not read as a fog band. + half dust = (half)(band * band * lerp(0.35, 1.0, clumps) * 0.11); + + half stars = field * 0.42h + river * (half)along + dust; + return stars * horizonFade; +} + half3 ManafallFantasyStarfield(half3 dir, half cloudAmt) { half gate = ManafallStarGate01(); if (gate < 1e-3h) return (half3)0.0h; - float2 p = dir.xz * float2(37.0, 29.0) + dir.y * float2(11.0, 17.0); - float h0 = frac(sin(dot(p, float2(12.9898, 78.233))) * 43758.5453); - float h1 = frac(sin(dot(p * 2.17 + 4.2, float2(39.346, 11.135))) * 24634.6345); - half star = saturate((h0 - 0.996) * 140.0); - star = max(star, saturate((h1 - 0.998) * 180.0) * 0.65h); + half stars = ManafallSoftStarfieldRaw((float3)dir); half occlude = 1.0h - saturate(cloudAmt); - half bright = saturate(_ManafallStarBrightness01); - return (half3)(star * occlude * gate * bright); + half bright = (half)clamp(_ManafallStarBrightness01, 0.0, 4.0); + if (bright < 1e-3h) + bright = 1.0h; + + half mul = _ManafallStarfieldMul > 1e-4 ? (half)_ManafallStarfieldMul : 1.0h; + half moonDim = _ManafallStarMoonDim01 > 1e-4 ? (half)_ManafallStarMoonDim01 : 1.0h; + + return (half3)(stars * occlude * gate * bright * mul * moonDim); } #endif diff --git a/Assets/Shaders/Include/ManafallHeightFog.hlsl b/Assets/Shaders/Include/ManafallHeightFog.hlsl index afed01c7c..f2fb1205f 100644 --- a/Assets/Shaders/Include/ManafallHeightFog.hlsl +++ b/Assets/Shaders/Include/ManafallHeightFog.hlsl @@ -55,16 +55,13 @@ float ManafallSampleHeightFogDensity(float3 worldPos, float timeSec) float span = max(ceilingY - baseY, 1.0); float height01 = saturate((h - baseY) / span); + // Ground mist only. The old mid-height "shelf" painted a chalky white band across + // the top of the frame whenever the camera looked toward the horizon. float groundMist = exp(-height01 * 3.15); - groundMist *= 1.0 - smoothstep(0.62, 0.98, height01); + groundMist *= 1.0 - smoothstep(0.55, 0.92, height01); - float shelfCenter = lerp(0.42, 0.28, saturate(strength)); - float shelf = exp(-abs(height01 - shelfCenter) * lerp(2.4, 3.6, saturate(strength))); - shelf *= exp(-height01 * 0.85); - shelf *= 1.0 - smoothstep(0.88, 1.0, height01); - - float groundWeight = lerp(0.48, 0.86, saturate(strength * 1.15)); - float heightMul = groundMist * groundWeight + shelf * (1.15 - groundWeight * 0.85); + float groundWeight = lerp(0.72, 0.94, saturate(strength * 1.15)); + float heightMul = groundMist * groundWeight; heightMul = max(heightMul, 0.0); float swirl = ManafallHeightFogBankNoise(worldPos, strength, timeSec); diff --git a/Assets/Shaders/Include/ManafallWaterCaustics.hlsl b/Assets/Shaders/Include/ManafallWaterCaustics.hlsl index 06c697704..f7793841f 100644 --- a/Assets/Shaders/Include/ManafallWaterCaustics.hlsl +++ b/Assets/Shaders/Include/ManafallWaterCaustics.hlsl @@ -1,7 +1,10 @@ #ifndef MANAFALL_WATER_CAUSTICS_INCLUDED #define MANAFALL_WATER_CAUSTICS_INCLUDED -// Same shore caustic the sea surface and the underwater pass share. +// Rev 6 — OPEN filament field shared by seafloor caustics AND surface micro-waves. +// Same phases drive bed light and top normals so the sheet and the sand match. +#define MF_CAUSTIC_REV 6 + float MF_CausticHash21(float2 p) { float3 p3 = frac(float3(p.xyx) * float3(0.1031, 0.1030, 0.0973)); @@ -21,13 +24,127 @@ float MF_CausticNoise2(float2 p) return lerp(lerp(a, b, f.x), lerp(c, d, f.x), f.y); } +float MF_CausticFbm(float2 p) +{ + float v = 0.0; + float a = 0.5; + [unroll] + for (int i = 0; i < 4; i++) + { + v += a * MF_CausticNoise2(p); + p = p * 2.07 + float2(17.0, 9.0); + a *= 0.5; + } + return v; +} + +float MF_CausticFilament(float phase, float sharpness) +{ + float tri = abs(frac(phase) * 2.0 - 1.0); + return pow(saturate(1.0 - tri), sharpness); +} + +/// +/// Shared filament field. Returns: +/// height — soft ridge height in ~[0,1] for surface displacement / normals +/// bright — high-contrast caustic brightness in ~[0,1] for seafloor light +/// +void MF_CausticFilamentField(float2 worldXZ, float time, float scale, out float height, out float bright) +{ + float s = max(scale, 0.25); + float t = time * 1.25; + + float2 p = worldXZ * (s * 0.5); + + float spaceA = lerp(0.7, 1.45, MF_CausticFbm(p * 0.18 + float2(t * 0.03, -t * 0.02))); + float spaceB = lerp(0.7, 1.45, MF_CausticFbm(p * 0.18 + float2(4.2, 1.7) - float2(t * 0.025, t * 0.035))); + float spaceC = lerp(0.75, 1.35, MF_CausticFbm(p * 0.22 + float2(-t * 0.02, t * 0.028) + 2.4)); + + float wobA = (MF_CausticFbm(p * 0.55 + float2(t * 0.09, -t * 0.07)) - 0.5) * 1.65; + float wobB = (MF_CausticFbm(p * 0.6 + float2(-t * 0.06, t * 0.08) + 3.7) - 0.5) * 1.55; + float wobC = (MF_CausticFbm(p * 0.5 + float2(t * 0.05, t * 0.04) + 8.1) - 0.5) * 1.4; + + float2 d0 = float2(0.985, 0.174); + float2 d1 = float2(-0.259, 0.966); + float2 d2 = float2(0.788, -0.616); + float2 d3 = float2(-0.819, -0.574); + + float ph0 = dot(p, d0) * (2.15 * spaceA) + wobA + t * 0.38; + float ph1 = dot(p, d1) * (2.55 * spaceB) + wobB - t * 0.33; + float ph2 = dot(p, d2) * (1.95 * spaceC) + wobC * 0.85 + t * 0.27; + float ph3 = dot(p, d3) * (2.35 * spaceA) + wobA * 0.7 - t * 0.41; + + // Soft ridges for surface height (lower sharpness so normals stay readable). + float h0 = MF_CausticFilament(ph0 * 0.1591549, 4.5); + float h1 = MF_CausticFilament(ph1 * 0.1591549, 4.2); + float h2 = MF_CausticFilament(ph2 * 0.1591549, 5.0); + float h3 = MF_CausticFilament(ph3 * 0.1591549, 4.8); + + float ph4 = dot(p, d0) * (3.8 * spaceB) + wobB * 1.2 - t * 0.55 + 1.9; + float ph5 = dot(p, d1) * (4.2 * spaceC) + wobC * 1.1 + t * 0.49 + 2.7; + float h4 = MF_CausticFilament(ph4 * 0.1591549, 6.0) * 0.45; + float h5 = MF_CausticFilament(ph5 * 0.1591549, 6.0) * 0.45; + + float soft = h0 + h1 + h2 + h3 + h4 + h5; + soft += h0 * h1 * 1.2 + h2 * h3 * 1.0; + float envelope = lerp(0.38, 1.0, MF_CausticNoise2(worldXZ * 0.02 + float2(t * 0.012, -t * 0.01))); + soft *= envelope; + height = saturate(soft * 0.55); + + // Harder filaments for seafloor light (same phases). + float f0 = MF_CausticFilament(ph0 * 0.1591549, 9.0); + float f1 = MF_CausticFilament(ph1 * 0.1591549, 8.5); + float f2 = MF_CausticFilament(ph2 * 0.1591549, 10.0); + float f3 = MF_CausticFilament(ph3 * 0.1591549, 9.5); + float f4 = MF_CausticFilament(ph4 * 0.1591549, 12.0) * 0.5; + float f5 = MF_CausticFilament(ph5 * 0.1591549, 12.0) * 0.5; + + float web = f0 + f1 + f2 + f3 + f4 + f5; + web += f0 * f1 * 3.4; + web += f2 * f3 * 3.0; + web += f0 * f2 * 1.7; + web += f1 * f3 * 1.6; + web += f4 * f5 * 1.4; + web *= envelope; + web = pow(saturate(web * 0.4), 1.4); + bright = saturate(web * 1.9); +} + half MF_ShoreCaustic(float2 worldXZ, float time, float scale) { - float2 cUv = worldXZ * scale * 0.52 + float2(time * 0.084, -time * 0.069); - float cWobble = MF_CausticNoise2(cUv * 0.71 + time * 0.05); - float caustBand = sin(cUv.x * 2.25 + sin(cUv.y * 1.75 + time * 1.05 + cWobble * 4.2)) - * 0.42 + sin(dot(cUv, float2(1.62, -1.28)) * 2.95 + time * 1.22 + cWobble * 3.5) * 0.38; - return (half)saturate(smoothstep(0.08, 0.94, caustBand * 0.5 + 0.62)); + float heightUnused; + float bright; + MF_CausticFilamentField(worldXZ, time, scale, heightUnused, bright); + return (half)bright; +} + +half MF_ShoreCausticLit(float2 worldXZ, float time, float scale, float3 lightDir) +{ + float2 lightXZ = normalize(float2(lightDir.x, lightDir.z) + 1e-4); + float2 skewed = worldXZ + lightXZ * (time * 0.2); + skewed.x *= 1.0 + abs(lightXZ.x) * 0.1; + skewed.y *= 1.0 + abs(lightXZ.y) * 0.1; + return MF_ShoreCaustic(skewed, time, scale); +} + +/// Soft filament height in [0,1] — same shape as seafloor caustics. +float MF_CausticSurfaceHeight(float2 worldXZ, float time, float scale) +{ + float height; + float brightUnused; + MF_CausticFilamentField(worldXZ, time, scale, height, brightUnused); + return height; +} + +/// World-XZ normal from the shared filament height field. +float3 MF_CausticSurfaceNormal(float2 worldXZ, float time, float scale, float strength) +{ + float eps = max(0.35 / max(scale, 0.25), 0.22); + float h0 = MF_CausticSurfaceHeight(worldXZ, time, scale); + float hx = MF_CausticSurfaceHeight(worldXZ + float2(eps, 0.0), time, scale) - h0; + float hz = MF_CausticSurfaceHeight(worldXZ + float2(0.0, eps), time, scale) - h0; + float s = max(strength, 0.0); + return normalize(float3(-hx / eps * s, 1.0, -hz / eps * s)); } #endif diff --git a/Assets/Shaders/Include/ManafallWaterSurfaceFoam.hlsl b/Assets/Shaders/Include/ManafallWaterSurfaceFoam.hlsl index 168dfff63..90b3cdc69 100644 --- a/Assets/Shaders/Include/ManafallWaterSurfaceFoam.hlsl +++ b/Assets/Shaders/Include/ManafallWaterSurfaceFoam.hlsl @@ -87,6 +87,35 @@ return combined; } + // Breaking cap on the top of a wave: a solid lip, then lace trailing off the back. + float EvaluateAaaCrestFoam(Varyings input) + { + float h = max(SampleFragmentWaveHeight(input.flatPositionWS, input.shoreWaveAmpMul), (float)input.waveHeight); + float amp = max(_WaveDisplacementStrength * max((float)input.shoreWaveAmpMul, 0.4) * 0.42, 0.2); + float crest01 = smoothstep(0.16, 0.58, saturate(h / amp)); + float slope = (float)input.waveSlope; + float micro = smoothstep(0.018, 0.07, slope) * smoothstep(0.0, 0.1, h); + crest01 = max(crest01, micro * 0.8); + if (crest01 < 0.02) + return 0.0; + + float2 windXZ = _ManafallGlobalWind.xz; + float windMag = length(windXZ); + float2 windDir = windMag > 1e-4 ? windXZ / windMag : float2(0.86, 0.42); + float2 ortho = float2(-windDir.y, windDir.x); + float2 xz = input.positionWS.xz; + float t = _Time.y; + float along = dot(xz, windDir); + float across = dot(xz, ortho); + float lace = Noise2(float2(along * 0.42, across * 1.85) + float2(t * 0.07, -t * 0.05)); + float laceFine = Noise2(float2(along * 1.15, across * 3.6) + float2(-t * 0.11, t * 0.08)); + float holes = smoothstep(0.22, 0.58, lace * 0.62 + laceFine * 0.38); + float lip = pow(crest01, 1.45) * lerp(0.55, 1.0, holes); + float trail = crest01 * smoothstep(0.48, 0.82, laceFine) * (1.0 - pow(crest01, 2.2)) * 0.55; + float face = lerp(0.4, 1.0, smoothstep(0.012, 0.06, slope)); + return saturate((lip + trail) * face); + } + float SampleAdvectedFoam(float2 worldXZ) { if (_ManafallFoamWorld.w < 0.5) diff --git a/Assets/Shaders/Include/ManafallWaterSurfaceLighting.hlsl b/Assets/Shaders/Include/ManafallWaterSurfaceLighting.hlsl index d066476c1..e9c67ba18 100644 --- a/Assets/Shaders/Include/ManafallWaterSurfaceLighting.hlsl +++ b/Assets/Shaders/Include/ManafallWaterSurfaceLighting.hlsl @@ -27,35 +27,36 @@ waveN = normalize(float3(-dhdxz.x * bump, 1.0, -dhdxz.y * bump)); } - float flow = _WaveFlowSpeed; - float2 microUv = pWS.xz * _MicroWaveScale + float2(-t * flow * 0.11, t * flow * 0.09); - microUv = WindChopOffset(microUv, t); - microUv += (Noise2(microUv * 1.7 + t * 0.03) - 0.5) * 0.8; - - float rain = saturate(_ManafallRainIntensity); - if (rain > 0.01) - { - float2 rUv = pWS.xz * 2.4 + float2(t * 1.9, -t * 1.6); - float2 rCell = floor(rUv); - float2 rFrac = frac(rUv) - 0.5; - float rHash = Hash21(rCell + floor(t * 14.0)); - float ring = 1.0 - saturate(length(rFrac) * (3.2 + rHash * 2.0)); - microUv += rFrac * ring * rain * _RainRippleStrength * 0.18; - } - float m1 = dot(microUv, float2(1.02, 0.53)) * 9.2 + t * 1.12; - float m2 = dot(microUv, float2(-0.48, 0.88)) * 7.8 - t * 0.95; - float2 dm = float2(1.02, 0.53) * (9.2 * cos(m1)) + float2(-0.48, 0.88) * (7.8 * cos(m2)); float radialOpen = EvaluateRadialOpenness(float3(pWS.x, 0.0, pWS.z)); float beachMicro = EvaluateBeachMicroOpenness(float3(pWS.x, 0.0, pWS.z)); + float depthOpen = EvaluateDepthOpenness(float3(pWS.x, 0.0, pWS.z)); + float shallow01 = 1.0 - saturate(depthOpen); // Stronger micro-chop at the beach so shallows glitter instead of going matte-flat. - float microMul = lerp(0.34, 1.0, max(pow(saturate(radialOpen), 1.1), beachMicro * 0.72)) - * lerp(0.72, 1.0, (float)swellShore); - microMul *= 1.0 - distLod * 0.52; + float microMul = lerp(0.55, 1.0, max(pow(saturate(radialOpen), 1.1), beachMicro * 0.85)) + * lerp(0.85, 1.15, shallow01) + * lerp(0.85, 1.0, (float)swellShore); + microMul *= 1.0 - distLod * 0.35; float foamDetBoost = 1.0 + saturate(_ManafallFoamNoiseDetailScale) * 0.22; - float ma = _MicroWaveStrength * 0.048 * _MicroWaveScale * microMul * foamDetBoost; - float3 microN = normalize(float3(-dm.x * ma, 1.0, -dm.y * ma)); + float camDist = length(pWS.xz - _WorldSpaceCameraPos.xz); + float nearDetail = 1.0 - saturate((camDist - 3.0) / 32.0); + float detail01 = max(shallow01 * 0.7, nearDetail); + + // Top micro-waves use the SAME open-filament field as seafloor caustics + // (no rain droplet rings, no sine lattice — those read as frozen circles). + float causticClock = _ManafallCausticTime > 1e-4 ? _ManafallCausticTime : t * 1.25; + float filamentScale = max(_CausticScale, max(_MicroWaveScale, 0.35)); + float rain = saturate(_ManafallRainIntensity); + float filamentStr = _MicroWaveStrength * lerp(0.55, 1.35, detail01) * microMul * foamDetBoost; + filamentStr *= lerp(1.0, 1.0 + _RainRippleStrength * 0.55, rain); + float3 microN = MF_CausticSurfaceNormal(pWS.xz, causticClock, filamentScale, filamentStr * 1.15); + + // Shallow secondary pass — finer filaments, same topology. + float shallowAmp = lerp(0.35, 1.1, shallow01) * max(beachMicro, 0.45) * filamentStr * 0.55; + float3 shallowN = MF_CausticSurfaceNormal( + pWS.xz, causticClock * 1.15 + 1.7, filamentScale * 1.55, shallowAmp); - float3 blended = normalize(waveN + microN * 0.78); + float3 blended = normalize(waveN + (microN - float3(0.0, 1.0, 0.0)) * lerp(0.9, 1.45, shallow01)); + blended = normalize(blended + (shallowN - float3(0.0, 1.0, 0.0)) * lerp(0.25, 1.2, shallow01)); float3 chopN = MF_VisualChopNormal(pWS.xz); blended = normalize(blended + (chopN - float3(0.0, 1.0, 0.0))); @@ -78,7 +79,11 @@ float3 Ndetail = WaterNormal(input.positionWS, NgeomDisp, input.shoreWaveAmpMul); float shapeInf = saturate(_SurfaceShapeInfluence); - float3 N = normalize(lerp(Ndetail, NgeomDisp, shapeInf * 0.62 + 0.28)); + float depthOpenN = EvaluateDepthOpenness(input.flatPositionWS); + float shallow01 = 1.0 - saturate(depthOpenN); + // Was ~0.9 toward the flat mesh normal, which erased shallow ripples. + float geomW = (shapeInf * 0.42 + 0.12) * lerp(1.0, 0.22, shallow01); + float3 N = normalize(lerp(Ndetail, NgeomDisp, geomW)); float3 dpdx = ddx(input.positionWS); float3 dpdy = ddy(input.positionWS); @@ -86,7 +91,7 @@ if (derivLen > 1e-5) { float3 Nss = normalize(cross(dpdy, dpdx)); - float ssW = shapeInf * saturate(derivLen * 14.0) * 0.48; + float ssW = shapeInf * saturate(derivLen * 14.0) * lerp(0.22, 0.08, shallow01); N = normalize(lerp(N, Nss, ssW)); } diff --git a/Assets/Shaders/Include/ManafallWaterVisualChop.hlsl b/Assets/Shaders/Include/ManafallWaterVisualChop.hlsl index 707c9b6d2..0b43160ae 100644 --- a/Assets/Shaders/Include/ManafallWaterVisualChop.hlsl +++ b/Assets/Shaders/Include/ManafallWaterVisualChop.hlsl @@ -2,6 +2,7 @@ #define MANAFALL_WATER_VISUAL_CHOP_INCLUDED // GPU-only capillary chop. Amplitude is hard-capped so CPU Gerstner height stays the gameplay surface. +// Shape matches the shared filament caustic field (ManafallWaterCaustics.hlsl) — not sine rings. float _ManafallVisualChopAmp; float _ManafallVisualChopRadius; @@ -19,18 +20,18 @@ float3 MF_VisualChopDisplacement(float2 worldXZ) if (a < 1e-5) return float3(0.0, 0.0, 0.0); - float t = _Time.y; - float2 wind = _ManafallGlobalWind.xz; - float windLen = length(wind); - float2 dir = windLen > 1e-4 ? wind / windLen : float2(0.86, 0.51); - float2 ortho = float2(-dir.y, dir.x); - float p1 = dot(worldXZ, dir) * 0.62 + t * 1.65; - float p2 = dot(worldXZ, ortho) * 1.15 - t * 2.15; - float h = sin(p1) * 0.62 + sin(p2) * 0.38; - float dh1 = cos(p1) * 0.62 * 0.62; - float dh2 = cos(p2) * 0.38 * 1.15; - float2 slope = dir * dh1 + ortho * dh2; - return float3(-slope.x * a * 0.45, h * a, -slope.y * a * 0.45); + float t = _ManafallCausticTime > 1e-4 ? _ManafallCausticTime : _Time.y * 1.25; + float scale = _ManafallCausticScale > 0.01 ? _ManafallCausticScale : 0.65; + float h01 = MF_CausticSurfaceHeight(worldXZ, t, scale); + // Center around mid so displacement goes up and down along filaments. + float h = (h01 - 0.42) * 2.2; + float eps = 0.55; + float hx = MF_CausticSurfaceHeight(worldXZ + float2(eps, 0.0), t, scale) + - MF_CausticSurfaceHeight(worldXZ - float2(eps, 0.0), t, scale); + float hz = MF_CausticSurfaceHeight(worldXZ + float2(0.0, eps), t, scale) + - MF_CausticSurfaceHeight(worldXZ - float2(0.0, eps), t, scale); + float2 slope = float2(hx, hz) / (eps * 2.0); + return float3(-slope.x * a * 0.55, h * a, -slope.y * a * 0.55); } float3 MF_VisualChopNormal(float2 worldXZ) diff --git a/Assets/Shaders/ManafallMenuNightSky.shader b/Assets/Shaders/ManafallMenuNightSky.shader index 41c7bf50e..08eb8d39f 100644 --- a/Assets/Shaders/ManafallMenuNightSky.shader +++ b/Assets/Shaders/ManafallMenuNightSky.shader @@ -50,6 +50,11 @@ Shader "Manafall/MenuNightSky" float4 _MoonColor; float _StarBrightness; float _ManafallSkyNightBrightness; + // Declared before FantasyStarfield so soft-star helpers parse cleanly. + float _ManafallStarNight01; + float _ManafallStarBrightness01; + #define MANAFALL_STAR_NIGHT_DECLARED + #include "Include/ManafallFantasyStarfield.hlsl" struct appdata_t { @@ -106,9 +111,7 @@ Shader "Manafall/MenuNightSky" half moon = pow(saturate(dot((half3)dir, moonDir)), 170.0h) * (half)max(_MoonIntensity, 0.0); rgb += _MoonColor.rgb * moon; - float2 starUv = float2(atan2(dir.x, dir.z), dir.y); - float starHash = Hash21(floor(starUv * float2(48.0, 36.0))); - half star = saturate((starHash - 0.988) * 90.0) * saturate(dir.y); + half star = ManafallSoftStarfieldRaw(dir); rgb += star * (half)max(_StarBrightness, 0.0) * (1.0h - cloudAmt); half exposure = max((half)_Exposure, 0.55h); @@ -141,6 +144,10 @@ Shader "Manafall/MenuNightSky" float4 _MoonColor; float _StarBrightness; float _ManafallSkyNightBrightness; + float _ManafallStarNight01; + float _ManafallStarBrightness01; + #define MANAFALL_STAR_NIGHT_DECLARED + #include "Include/ManafallFantasyStarfield.hlsl" struct appdata_t { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; float3 texcoord : TEXCOORD0; }; @@ -181,8 +188,7 @@ Shader "Manafall/MenuNightSky" rgb = lerp(rgb, _CloudColor.rgb * lerp(0.78h, 1.12h, saturate(dir.y)), cloudAmt * 0.88h); half3 moonDir = length(_MoonDirWS.xyz) > 1e-4 ? normalize(_MoonDirWS.xyz) : half3(0.35, 0.72, 0.4); rgb += _MoonColor.rgb * pow(saturate(dot((half3)dir, moonDir)), 170.0h) * (half)max(_MoonIntensity, 0.0); - float2 starUv = float2(atan2(dir.x, dir.z), dir.y); - half star = saturate((Hash21(floor(starUv * float2(48.0, 36.0))) - 0.988) * 90.0) * saturate(dir.y); + half star = ManafallSoftStarfieldRaw(dir); rgb += star * (half)max(_StarBrightness, 0.0) * (1.0h - cloudAmt); half skyMul = _ManafallSkyNightBrightness > 1e-4 ? max((half)_ManafallSkyNightBrightness, 0.55h) : 1.0h; rgb *= max((half)_Exposure, 0.55h) * skyMul; diff --git a/Assets/Shaders/ManafallShoreCaustics.shader b/Assets/Shaders/ManafallShoreCaustics.shader index 7052a726a..ddc343456 100644 --- a/Assets/Shaders/ManafallShoreCaustics.shader +++ b/Assets/Shaders/ManafallShoreCaustics.shader @@ -2,15 +2,17 @@ Shader "Hidden/Manafall/ShoreCaustics" { Properties { - _CausticScale ("Caustic Scale", Float) = 3.5 - _CausticSpeed ("Caustic Speed", Float) = 0.12 + _CausticScale ("Caustic Scale", Float) = 4.2 + _CausticSpeed ("Caustic Speed", Float) = 0.95 + // Bump this when the shared include changes so Unity reimports the pass. + _CausticRev ("Caustic Rev", Float) = 6 } SubShader { Tags { "RenderPipeline" = "UniversalPipeline" } Pass { - Name "ShoreCaustics" + Name "ShoreCausticsFilamentV6" ZTest Always ZWrite Off Cull Off @@ -20,109 +22,25 @@ Shader "Hidden/Manafall/ShoreCaustics" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Include/ManafallWaterCaustics.hlsl" TEXTURE2D_X(_BlitTexture); SAMPLER(sampler_BlitTexture); float _CausticScale; float _CausticSpeed; + float _CausticRev; float _ManafallShoreCausticSeaY; float _ManafallShoreCausticStrength; float _ManafallShoreCausticBandWidth; float _ManafallShoreCausticPhase; float _ManafallShoreCausticSunElev; - float _ManafallShoreCausticVoronoiScale; float4 _ManafallSeaCoastParams; float4 _ManafallWaterWeatherParams; struct Attributes { uint vertexID : SV_VertexID; }; struct Varyings { float4 positionCS : SV_POSITION; float2 uv : TEXCOORD0; }; - float Hash21(float2 p) - { - return frac(sin(dot(p, float2(127.1, 311.7))) * 43758.5453); - } - - float2 Hash22(float2 p) - { - return float2(Hash21(p), Hash21(p + float2(19.1, 81.7))); - } - - float VoronoiCaustic(float2 uv) - { - float2 i = floor(uv); - float2 f = frac(uv); - float minDist = 8.0; - float2 nearestCell = float2(0.0, 0.0); - - for (int y = -1; y <= 1; y++) - { - for (int x = -1; x <= 1; x++) - { - float2 g = float2(x, y); - float2 o = Hash22(i + g); - float2 r = g + o - f; - float d = dot(r, r); - if (d < minDist) - { - minDist = d; - nearestCell = r; - } - } - } - - float edge = saturate(1.0 - sqrt(minDist) * 3.2); - float ring = saturate(1.0 - abs(length(nearestCell) - 0.38) * 9.0); - return saturate(edge * 0.55 + ring * 0.72); - } - - float LayeredVoronoiCaustic(float2 worldXZ, float time, float3 lightDir) - { - float2 coastVec = worldXZ - _ManafallSeaCoastParams.xy; - float coastDist = length(coastVec); - float2 coastDir = coastDist > 1e-3 ? coastVec / coastDist : float2(0.0, 1.0); - float2 coastTan = float2(-coastDir.y, coastDir.x); - float2 lightXZ = normalize(float2(lightDir.x, lightDir.z) + 1e-4); - - float2 uv = worldXZ * _CausticScale * 0.85; - uv += coastDir * (_ManafallShoreCausticPhase * 2.4); - uv += coastTan * sin(time * 0.85 + dot(worldXZ, coastTan) * 0.08) * 0.35; - uv += lightXZ * (time * 0.18); - - float t = time * _CausticSpeed + _ManafallShoreCausticPhase; - float v1 = VoronoiCaustic(uv * 1.15 + lightXZ * t * 0.22); - float v2 = VoronoiCaustic(uv * 2.35 - float2(t * 0.14, t * 0.11) + coastTan * 0.4); - float v3 = VoronoiCaustic(uv * 4.8 + float2(t * 0.09, -t * 0.07)); - return saturate(v1 * 0.42 + v2 * 0.34 + v3 * 0.24); - } - - float LegacySineCaustic(float2 worldXZ, float time, float3 lightDir) - { - float2 coastVec = worldXZ - _ManafallSeaCoastParams.xy; - float coastDist = length(coastVec); - float2 coastDir = coastDist > 1e-3 ? coastVec / coastDist : float2(0.0, 1.0); - float2 coastTan = float2(-coastDir.y, coastDir.x); - float2 lightXZ = normalize(float2(lightDir.x, lightDir.z) + 1e-4); - float2 uv = worldXZ * _CausticScale; - uv += coastDir * (_ManafallShoreCausticPhase * 2.4); - uv += coastTan * sin(time * 0.85 + dot(worldXZ, coastTan) * 0.08) * 0.35; - uv += lightXZ * (time * 0.18); - float t = time * _CausticSpeed + _ManafallShoreCausticPhase; - float c1 = sin(uv.x * 3.1 + t) * sin(uv.y * 2.7 - t * 0.8); - float c2 = sin((uv.x + uv.y) * 4.2 - t * 1.3); - float c3 = sin(dot(uv, lightXZ) * 5.5 - t * 1.1); - float n = frac(sin(dot(uv + t * 0.4, float2(12.9898, 78.233))) * 43758.5453); - return saturate(abs(c1) * 0.4 + abs(c2) * 0.32 + abs(c3) * 0.22 + n * 0.28); - } - - float CausticPattern(float2 worldXZ, float time, float3 lightDir) - { - float voronoiWt = saturate(_ManafallShoreCausticVoronoiScale); - float voronoi = LayeredVoronoiCaustic(worldXZ, time, lightDir); - float legacy = LegacySineCaustic(worldXZ, time, lightDir); - return lerp(legacy, voronoi, voronoiWt); - } - Varyings Vert(Attributes input) { Varyings o; @@ -143,19 +61,33 @@ Shader "Hidden/Manafall/ShoreCaustics" float3 worldPos = ComputeWorldSpacePosition(input.uv, rawDepth, UNITY_MATRIX_I_VP); float waterColumn = _ManafallShoreCausticSeaY - worldPos.y; - float band = max(_ManafallShoreCausticBandWidth, 0.5); - if (waterColumn <= 0.05 || waterColumn > band) + float band = max(_ManafallShoreCausticBandWidth, 16.0); + if (waterColumn <= 0.06 || waterColumn > band) return half4(baseCol, 1.0); - float shallow = 1.0 - saturate(waterColumn / band); - float kneeFade = smoothstep(0.02, 0.35, shallow) * (1.0 - smoothstep(0.72, 1.0, shallow)); - float sunGate = smoothstep(0.02, 0.22, _ManafallShoreCausticSunElev); - float rainDim = 1.0 - saturate(_ManafallWaterWeatherParams.x) * 0.42; + float3 dpdx = ddx(worldPos); + float3 dpdy = ddy(worldPos); + float3 floorN = normalize(cross(dpdy, dpdx)); + float floorUp = saturate(floorN.y); + float depthFade = exp(-max(waterColumn - 0.15, 0.0) / 3.1); + depthFade *= smoothstep(0.1, 0.45, waterColumn); + depthFade *= lerp(0.08, 1.0, smoothstep(0.2, 0.75, floorUp)); + float sunGate = smoothstep(0.04, 0.28, _ManafallShoreCausticSunElev); + float rainDim = 1.0 - saturate(_ManafallWaterWeatherParams.x) * 0.55; Light mainLight = GetMainLight(); - float caustic = CausticPattern(worldPos.xz, _Time.y, mainLight.direction) - * _ManafallShoreCausticStrength * kneeFade * sunGate * rainDim; - half3 tint = half3(0.35, 0.42, 0.28) * (half)caustic; - return half4(baseCol + tint, 1.0); + + // Rev-6 open filaments — same field drives surface micro-waves. + float patternScale = max(_CausticScale * 0.2, 0.5); + float time = _Time.y * max(_CausticSpeed, 0.55) + _ManafallShoreCausticPhase + _CausticRev; + float caustic = (float)MF_ShoreCausticLit(worldPos.xz, time, patternScale, mainLight.direction); + caustic = pow(saturate(caustic), 1.05); + + // Stronger lift so the web is unmistakable vs the old droplet rings. + float gain = caustic * _ManafallShoreCausticStrength * 1.35 * depthFade * sunGate * rainDim; + half3 sunRgb = max(mainLight.color.rgb, half3(0.95, 0.9, 0.75)); + half3 lifted = baseCol * (1.0 + sunRgb * (half)gain * 1.35); + lifted += sunRgb * (half)gain * 0.18; + return half4(lifted, 1.0); } ENDHLSL } diff --git a/Assets/Shaders/ManafallUnderwaterPost.shader b/Assets/Shaders/ManafallUnderwaterPost.shader index 9eedb9111..4555428e7 100644 --- a/Assets/Shaders/ManafallUnderwaterPost.shader +++ b/Assets/Shaders/ManafallUnderwaterPost.shader @@ -194,9 +194,9 @@ Shader "Hidden/Manafall/UnderwaterPost" float causticScale = _ManafallCausticScale > 0.01 ? _ManafallCausticScale : 0.65; float causticTime = _ManafallCausticTime; - half caustic = MF_ShoreCaustic(worldPos.xz, causticTime, causticScale); + half caustic = MF_ShoreCaustic(worldPos.xz, causticTime, max(causticScale, 0.45)); half causticMask = (half)saturate(1.0 - column / max(_AbsorptionDepth * 0.65, 1.0)); - col += caustic * causticMask * fade * half3(0.45h, 0.62h, 0.7h) * daylight01; + col += caustic * causticMask * fade * half3(0.55h, 0.72h, 0.78h) * daylight01 * 1.35h; if (_ManafallUnderwaterSnell > 0.5) { diff --git a/Assets/Shaders/ManafallWaterRippleScroll.shader b/Assets/Shaders/ManafallWaterRippleScroll.shader index a24eff377..c10b4422e 100644 --- a/Assets/Shaders/ManafallWaterRippleScroll.shader +++ b/Assets/Shaders/ManafallWaterRippleScroll.shader @@ -34,7 +34,11 @@ Shader "Hidden/Manafall/WaterRippleScroll" half4 Frag(Varyings input) : SV_Target { - float2 uv = input.uv - _ScrollOffset.xy; + // Center moved with the camera. Read the texel that held this world point + // before the shift. The old minus sign flung the wake off the water as you walked. + float2 uv = input.uv + _ScrollOffset.xy; + if (any(uv < 0.0) || any(uv > 1.0)) + return half4(0, 0, 0, 1); half2 v = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv).rg; return half4(v, 0, 1); } diff --git a/Assets/Shaders/ManafallWaterRippleStamp.shader b/Assets/Shaders/ManafallWaterRippleStamp.shader index 0e6f4b3c8..cbe3ec8a6 100644 --- a/Assets/Shaders/ManafallWaterRippleStamp.shader +++ b/Assets/Shaders/ManafallWaterRippleStamp.shader @@ -102,29 +102,33 @@ Shader "Hidden/Manafall/WaterRippleStamp" - float EvaluateKelvinWake(float2 delta, float2 velDir, float spreadAngle, float norm) + float EvaluateKelvinWake(float2 delta, float2 velDir, float spreadAngle) { - float2 perp = float2(-velDir.y, velDir.x); + // Arms open behind the mover. Wide enough to survive a ripple map - float along = dot(delta, velDir); + // that covers a few hundred metres. - float across = dot(delta, perp); + float2 back = -velDir; - float angle = atan2(across, along); + float2 perp = float2(-back.y, back.x); + float along = dot(delta, back); + float across = abs(dot(delta, perp)); - float lobeA = exp(-pow(abs(angle - spreadAngle) / max(spreadAngle * 0.55, 0.08), 2.0) * 3.2); + float spread = max(spreadAngle, 0.18); - float lobeB = exp(-pow(abs(angle + spreadAngle) / max(spreadAngle * 0.55, 0.08), 2.0) * 3.2); + float arm = across - along * tan(spread); - float centerLine = exp(-across * across * 48.0) * saturate(along * 3.5 + 0.15); + float crest = exp(-arm * arm * 5.5); - float vWake = max(lobeA, lobeB) * saturate(1.0 - norm * 0.35); + float behind = saturate(along * 2.4) * saturate(1.25 - along); - return max(vWake, centerLine * 0.45); + float trough = exp(-across * across * 4.0) * behind * 0.45; + + return saturate(crest * behind * 1.45 + trough); } @@ -166,11 +170,9 @@ Shader "Hidden/Manafall/WaterRippleStamp" float2 velDir = vel / velMag; - pattern = EvaluateKelvinWake(delta / rad, velDir, max(_StampVelocity.z, 0.12), norm); - - pattern *= sin(norm * _RingFrequency * 0.65 - _Time.y * _RingPhaseSpeed * 0.85 + pattern = EvaluateKelvinWake(delta / rad, velDir, max(_StampVelocity.z, 0.12)); - + dot(_StampData.xy, float2(11.7, 8.3))) * 0.5 + 0.5; + envelope = exp(-norm * norm * 1.15); } diff --git a/Assets/Shaders/ManafallWaterSurface.shader b/Assets/Shaders/ManafallWaterSurface.shader index e70580220..3d9057d4f 100644 --- a/Assets/Shaders/ManafallWaterSurface.shader +++ b/Assets/Shaders/ManafallWaterSurface.shader @@ -346,6 +346,10 @@ float _PlanarReflectSpreadMeters; float _SkyCubemapRoughnessLod; float _ManafallShoreCausticSunElev; + float _ManafallCausticTime; + float _ManafallCausticScale; + // 1 = surface draws full floor caustics; ~0.4 when the shore fullscreen pass owns the bed. + float _ManafallShaderCausticScale; float _ManafallCombatClarity01; float _ManafallOpenOceanGlare01; float _ManafallFoamNoiseDetailScale; @@ -364,8 +368,8 @@ #include "Include/ManafallWaterWavesGlobals.hlsl" #include "Include/ManafallWaterWaves.hlsl" - #include "Include/ManafallWaterVisualChop.hlsl" #include "Include/ManafallWaterCaustics.hlsl" + #include "Include/ManafallWaterVisualChop.hlsl" float _ManafallWaterInteractCount; float4 _ManafallWaterInteract[8]; @@ -458,14 +462,14 @@ float SoftenWaterColumnForOptics(float measuredColumn, float far01, bool skyOrClear) { - // Stay in the readable-shallow band near the beach; only the far end - // of the coast fade is allowed to look like open-ocean abyss. + // Sky / clear depth buffer: invent a coast→abyss column so the sheet + // still murks. Never shrink a real measured column — that turned a + // meter-deep kelp bay into a glass window down to the bed. float desired = lerp(1.35, 36.0, far01); if (skyOrClear) return desired; - float measured = max(measuredColumn, 0.0); - return lerp(min(measured, desired), measured, far01); + return max(measuredColumn, 0.0); } /// @@ -594,7 +598,7 @@ { // Depth damp softens large swell in puddles, but never zeros beach micro-waves. float shoreOpen = EvaluateShoreWaveOpenness(flatWorld); - float depthOpen = max(EvaluateDepthOpenness(flatWorld), 0.38); + float depthOpen = max(EvaluateDepthOpenness(flatWorld), 0.62); float openness = saturate(min(shoreOpen, depthOpen)); // Prefer shore micro floor when depth sample is noisy/shallow. openness = max(openness, shoreOpen * 0.85); @@ -619,6 +623,9 @@ float radial = EvaluateRadialOpenness(flatWorld); float openness = EvaluateWorldCoastRingOpenness(flatWorld); float depthOpen = EvaluateDepthOpenness(flatWorld); + // Shelf water (a few meters) used to inherit puddle damp and go pane-flat. + // Only a film of water should lose its swell. + depthOpen = max(depthOpen, 0.62); openness = min(openness, depthOpen); float swell01 = saturate(_ManafallSeaStormWaveParams.x); float coastCalm = lerp(1.0, 0.32, swell01 * (1.0 - radial)); @@ -667,9 +674,10 @@ return baseUv; float2 windDir = windXZ / windMag; - float windStr = _ManafallGlobalWind.w * _WindChopInfluence * 0.28; - float2 ortho = float2(-windDir.y, windDir.x); - return baseUv + windDir * t * windStr * 0.11 + ortho * sin(dot(baseUv, windDir) * 3.1 - t * 1.7) * windStr * 0.04; + // Steady crawl. Live gust strength must not multiply _Time.y: + // a gust raises that product and the lines race, then the gust + // fades and the same lines slide back. + return baseUv + windDir * t * 0.035; } float3 ApplyWaterSurfaceDisplacement(float3 flatWorldPos, half waveEffMul) @@ -947,11 +955,13 @@ float waterColumnRaw = waterColumn; float opticsFar01 = EvaluateCoastalOpticsFar01(coastSD, shoreOpen); float opticsColumn = SoftenWaterColumnForOptics(waterColumnRaw, opticsFar01, skyOrClear); - // Longer clear band near shore — shallow stays teal far past the first shelf drop. - float absorbDist = depthFade * lerp(1.55, 2.35, readability * 0.55) * lerp(2.65, 1.0, opticsFar01); - float shallowAbsorb = 1.0 - exp(-(opticsColumn / max(absorbDist, 1e-3)) * _AbsorptionStrength); + // Bed murk: a few meters of water should already hide the floor. + // Old absorbDist (~30–70 m) left kelp and sand lit all the way down. + float absorbDist = depthFade * lerp(0.42, 0.72, readability * 0.4) * lerp(1.15, 1.0, opticsFar01); + absorbDist = max(absorbDist, 2.8); + float shallowAbsorb = 1.0 - exp(-(opticsColumn / max(absorbDist, 1e-3)) * max(_AbsorptionStrength, 0.85)); half shallowMask = saturate(shallowAbsorb); - half deepMask = pow(shallowMask, lerp(1.18, 1.45, readability * 0.55)); + half deepMask = pow(shallowMask, lerp(0.85, 1.15, readability * 0.4)); half3 shallowLit = _ShallowColor.rgb * (half)lerp(1.0, 1.14, readability * (1.0 - (float)deepMask)); half3 waterRgb = lerp(shallowLit, _DeepColor.rgb, deepMask); @@ -1039,6 +1049,30 @@ half3 sceneRgb = lerp(chromRgb, blurRgb, blurMix); half3 refrRgb = sceneRgb * _RefractionTint.rgb; + // Sun nets on the bed, carried in the color you see through the sheet. + // Reconstruct bed XZ from refracted depth so the web sticks to sand, not the sheet. + half floorSun = (half)smoothstep(0.02, 0.2, _ManafallShoreCausticSunElev); + float2 floorXZ = input.flatPositionWS.xz; + if (hasOpaqueBehind > 0.5h && rawDepth < 0.9995) + { + float refrBedDepth = SampleSceneDepth(refrUv); + float3 bedWS = ComputeWorldSpacePosition(refrUv, refrBedDepth, UNITY_MATRIX_I_VP); + floorXZ = bedWS.xz; + } + // Livelier clock than surface drift — otherwise filaments look frozen. + float causticClock = _ManafallCausticTime > 1e-4 ? _ManafallCausticTime : wtMw * 2.4; + half floorCaust = MF_ShoreCaustic(floorXZ, causticClock, max(_CausticScale, 0.45)); + half floorDepth = (half)exp(-max(opticsColumn, 0.0) / 3.2); + half shaderCaustScale = _ManafallShaderCausticScale > 1e-4 + ? (half)_ManafallShaderCausticScale + : 1.0h; + floorCaust *= floorSun * floorDepth * hasOpaqueBehind + * (half)saturate(_CausticStrength) * shaderCaustScale; + // Additive filament lift — bright threads on the bed, not a pale multiply. + half3 causticSun = half3(1.0h, 0.96h, 0.88h); + refrRgb += causticSun * floorCaust * 0.85h; + refrRgb *= 1.0h + floorCaust * 0.28h; + half washN = Noise2(driftXZ * 2.08 + wtMw * float2(0.051, -0.047)); half washAmt = saturate(_RefractionDarkWash) * hasOpaqueBehind * (0.22h + grazingMw * 0.58h); refrRgb *= lerp(half3(1, 1, 1), lerp(half3(0.62h, 0.72h, 0.82h), half3(1, 1, 1), washN), washAmt); @@ -1052,11 +1086,16 @@ float measuredDeep = saturate((waterColumnRaw - 3.2) / 14.0); cliffHide = (half)(measuredDeep * (1.0 - opticsFar01)); } - half refrAmt = saturate(_RefractionDeepBlend * hasOpaqueBehind * saturate(1.0 - exp(-opticsColumn / max(depthFade * 6.0, 0.5)))); + // How much of the bed shows through. Falls off by a few meters of water. + float bedSeeDist = max(depthFade * 0.28, 2.4); + half bedClear = (half)exp(-opticsColumn / bedSeeDist); + half refrAmt = saturate(_RefractionDeepBlend * hasOpaqueBehind * bedClear); refrAmt *= (1.0h - cliffHide * 0.84h); refrAmt *= saturate(1.0 - distCam * 0.00035 * _RefractionDistanceFade); float distMurkFade = saturate(distCam / max(_DistanceMurkStart, 120.0)); refrAmt *= (half)lerp(1.0, 0.72, distMurkFade * _RefractionDistanceFade); + // Deep water is the body color, not the lit sand. + refrAmt *= (1.0h - deepMask * 0.72h); half3 baseCol = lerp(waterRgb, refrRgb, refrAmt); @@ -1164,6 +1203,11 @@ reflAmt *= crestReflBoost * max(_ManafallNightReflectScale, 1e-4); // After the floor: ease the sky-mirror so a seafloor drop does not flash white. reflAmt *= lerp(0.38h, 1.0h, (half)opticsFar01); + // Near and shallow water keeps its body color so the ripples can shade. + // A full sky mirror turned the bay into a flat pale sheet. + float nearShelf = 1.0 - saturate(distCam / 48.0); + nearShelf = max(nearShelf, 1.0 - saturate(EvaluateDepthOpenness(input.flatPositionWS))); + reflAmt *= lerp(1.0h, 0.42h, (half)nearShelf); reflAmt = saturate(reflAmt * 1.08h); half3 reflCol = skyRgb * reflAmt * (0.62h + 0.38h * shadow); @@ -1311,12 +1355,15 @@ peakFoam *= (half)lerp(1.0, 0.45, stormSwell01 * (1.0 - shoreOpen)); foam = saturate(foam + peakFoam * 1.15h); - half rippleFoam = (half)saturate(SampleRippleFieldHeight(input.flatPositionWS.xz) - / max(_RippleFieldHeightScale, 1e-3)); - rippleFoam *= (half)(1.0 - shallowMask * 0.55); + // Crest cap. Not gated by shore or depth — those were erasing the foam on the bay. + half aaaCrest = (half)EvaluateAaaCrestFoam(input) * (half)saturate(max(_CrestFoamStrength, 0.65)); + foam = saturate(foam + aaaCrest); + + half wakeH = (half)saturate(SampleRippleFieldHeight(input.flatPositionWS.xz) + / max(_RippleFieldHeightScale * 0.55, 0.04)); half wakeEdgeFoam = (half)EvaluateWakeEdgeFoam(input.flatPositionWS.xz); - wakeEdgeFoam *= (half)(1.0 - shallowMask * 0.4); - foam = saturate(foam + rippleFoam * 0.18h + wakeEdgeFoam * 0.65h); + // Only the crest of a moving wake. A piled stamp must not paint a white hill. + foam = saturate(foam + smoothstep(0.42h, 0.82h, wakeH) * 0.55h + wakeEdgeFoam * 0.45h); // Quality wake specular (global from ManafallWaterQuality.wakeSpecularScale). half wakeSpecMul = (half)lerp(1.0, 1.0 + saturate(_ManafallWakeSpecular01) * 0.55, wakeEdgeFoam); specRgb *= wakeSpecMul; @@ -1377,48 +1424,32 @@ half3 sssCol = _ShallowColor.rgb * 1.6h + half3(0.04h, 0.12h, 0.10h); diffuseLit += sssCol * sssView * sssCrest * shadow * cloudSh * mainLight.color * 0.35h * (1.0h - deepMask * 0.5h); - half caustLight = MF_ShoreCaustic(input.positionWS.xz, wtMw, _CausticScale); + float causticClockLit = _ManafallCausticTime > 1e-4 ? _ManafallCausticTime : wtMw * 2.4; + half caustLight = MF_ShoreCaustic(input.positionWS.xz, causticClockLit, max(_CausticScale, 0.45)); half sunGateCaust = (half)smoothstep(0.02, 0.22, _ManafallShoreCausticSunElev); - caustLight *= sunGateCaust; + half shaderCaustScaleLit = _ManafallShaderCausticScale > 1e-4 + ? (half)_ManafallShaderCausticScale + : 1.0h; + caustLight *= sunGateCaust * shaderCaustScaleLit; half caustMask = shallowMask * saturate(1.h - deepMask * 0.75h) * saturate(1.h - foam * 0.92h) * hasOpaqueBehind; diffuseLit += caustLight * caustMask * _CausticStrength * mainLight.color * shadow * cloudSh - * (_HorizonColor.rgb * 0.38h + _ZenithColor.rgb * 0.22h + half3(0.85h, 0.92h, 1.0) * 0.25h); + * half3(0.55h, 0.62h, 0.58h) * 0.4h; specRgb *= lerp(1.0h, 1.0h - foam, _SpecularOcclusionByFoam); - float2 glUv = input.positionWS.xz * _GlintScale * 0.1 + float2(_Time.y * _GlintSpeed * 0.28, -_Time.y * _GlintSpeed * 0.22); - float2 gCell = floor(glUv); - float2 glCenter = frac(glUv) - 0.5; - float2 tKey = float2(_Time.y * _GlintSpeed * 1.55, floor(_Time.y * _GlintSpeed * 2.85)); - - float hRot = Hash21(gCell * 1.03 + tKey * float2(0.17, 0.29)) * 6.2831853; - float hStr = 0.58 + Hash21(gCell * 1.91 + tKey.yx * 0.21) * 0.82; - float hSkew = (Hash21(gCell * 2.31 + tKey * 0.37) - 0.5) * 1.25; - - float cr = cos(hRot), sr = sin(hRot); - float2 pr = float2(cr * glCenter.x - sr * glCenter.y, sr * glCenter.x + cr * glCenter.y); - pr.x *= hStr; - pr.y /= max(hStr, 0.32); - pr.x += pr.y * hSkew * 0.38; - - float gh = Hash21(gCell + floor(_Time.y * _GlintSpeed * 6.0)); - float hFreq = 4.8 + Hash21(gCell * 3.17 + float2(gh, tKey.x)) * 4.6; - float2 wob = (Hash22(gCell * 2.71 + tKey * 0.19) - 0.5) * 0.22; - pr += wob * (0.35 + gh); - - float gPh = dot(pr, float2(1.618, -1.427)) * hFreq + _Time.y * _GlintSpeed * (2.1 + gh * 2.9) + gh * 6.2831853; - float gPh2 = dot(pr * float2(-0.93, 1.08), float2(1.12, 1.63)) * hFreq * 0.74 + _Time.y * _GlintSpeed * (1.65 + gh * 2.1); - float hMix = Hash21(gCell * 1.47 + float2(gh * 3.1, tKey.y)); - float wave = lerp(sin(gPh), sin(gPh2), hMix * 0.62); - - float hShape = 0.72 + Hash21(gCell * 5.03 + float2(gh * 2.1, tKey.y)) * 0.62; - float gSp = saturate(wave * hShape - (1.12 - gh * 0.42) + gh * 1.22); - gSp = gSp * gSp * smoothstep(0.05, 1.0, gh); + // Sun glitter follows the shared filament wave field (same shape as bed caustics), + // not cell discs that read as frozen droplet rings on the sheet. + float glintClock = _ManafallCausticTime > 1e-4 ? _ManafallCausticTime : _Time.y * _GlintSpeed * 2.2; + float glintScale = max(_CausticScale, _GlintScale * 0.012); + float filamentH = MF_CausticSurfaceHeight(input.positionWS.xz, glintClock, glintScale); + float filamentBright = (float)MF_ShoreCaustic(input.positionWS.xz, glintClock, glintScale); + float gSp = saturate(filamentH * 1.35 + filamentBright * 0.55 - 0.35); + gSp = gSp * gSp; half glintMask = saturate(fresnel * shadow * cloudSh * (1.0 - foam)); - // Stable sun glitter: tighter contribution + separate grazing sparkle (was dead property). - specRgb += mainLight.color * (gSp * _GlintIntensity * glintMask * 0.46h); - half sparkle = (half)(gSp * saturate(_SunSparkleStrength) * pow((float)grazingEase, 1.35) * (0.5 + 0.5 * (float)sunFacing)); - specRgb += mainLight.color * sparkle * glintMask * 0.34h; + specRgb += mainLight.color * ((half)gSp * _GlintIntensity * glintMask * 0.5h); + half sparkle = (half)(gSp * saturate(_SunSparkleStrength) * pow((float)grazingEase, 1.35) + * (0.5 + 0.5 * (float)sunFacing)); + specRgb += mainLight.color * sparkle * glintMask * 0.32h; specRgb += half3(0.92h, 0.97h, 1.05h) * sparkle * glintMask * 0.08h; float dmStart = max(_DistanceMurkStart, 1.0); @@ -1590,6 +1621,29 @@ return half4(s, c, lod, 1.0h); } + // Wide sun path. The tight GGX lobe only hits when the camera stares at the disc, + // so a calm sea read as a flat grey plate. + float3 Hsheen = normalize(V + L); + half sheen = pow(saturate(dot(Nopt, Hsheen)), 18.0h); + half crestVar = saturate((half)input.waveSlope * 4.0h); + color *= lerp(0.92h, 1.06h, crestVar); + color += mainLight.color * sheen * shadow * (0.42h + fresnel * 0.35h); + // Sky fresnel where the sun is actually sitting on the sheet. Off the glint, + // the pale sky wash was painting the bay solid. + half mirror = saturate(sheen * 2.2h + glareHot); + color = lerp(color, skyRgb, fresnel * lerp(0.28h, 0.05h, (half)nearShelf) * lerp(0.28h, 1.0h, mirror)); + + // Thin water can show a little of the bed. Deeper water closes the window. + half columnSee = (half)exp(-opticsColumn / max(_DepthFade * 0.35, 3.2)); + half transmit = (1.0h - mirror) * lerp(0.45h, 1.0h, saturate(ndotv * 1.35h)); + half seeThru = hasOpaqueBehind * columnSee * transmit * (1.0h - foam) * (1.0h - deepMask); + half3 bed = lerp(refrRgb * 0.7h, waterRgb, 0.55h); + color = lerp(color, bed, seeThru * 0.45h); + // Deeper = more opaque. Thin clear water only where columnSee is high. + half depthAlpha = lerp(0.96h, 0.55h, columnSee * (1.0h - deepMask)); + alpha = max(alpha, depthAlpha); + alpha = lerp(alpha, min(alpha, 0.62h), seeThru * 0.35h); + // Fragment fog from eye distance — vertex fogFactor is unreliable with // multi_compile_fragment FOG_LINEAR (keyword not declared in Vert). half fogIntensity = 1.0h; @@ -1606,10 +1660,16 @@ if (unity_FogParams.z < 0.0) fogIntensity = (half)saturate(nearToFarZ * unity_FogParams.z + unity_FogParams.w); #endif - color = lerp(half3(unity_FogColor.rgb), color, fogIntensity); - // Transparent water + alpha < 1 composites unfogged sky (cyan) behind the sheet. - // At fog end force opaque fog colour so the coast rim cannot reopen. - alpha = lerp(1.0h, alpha, fogIntensity); + // Full MixFog replaced the whole sheet with fog colour. Keep body, sheen, and sky. + // Do not force a 0.9 alpha floor — that painted the bay solid wherever the sun was not glinting. + half fogKeep = fogIntensity; + half hold = lerp(0.92h, 0.7h, saturate(nearToFarZ / 240.0)); + hold = lerp(hold, 0.88h, seeThru); + half through = lerp(hold, 1.0h, fogKeep); + through = max(through, saturate(sheen * 1.6h + fresnel * 0.4h)); + half3 fogTint = half3(unity_FogColor.rgb) * half3(0.78h, 0.84h, 0.94h); + color = lerp(fogTint, color, through); + alpha = saturate(alpha); return half4(color, alpha); } ENDHLSL @@ -1618,4 +1678,4 @@ FallBack "Universal Render Pipeline/Lit" } -// manafall-water-compile-stamp: d3d11-visual-upgrade-v26-crest-sss +// manafall-water-compile-stamp: d3d11-visual-upgrade-v29-depth-murk diff --git a/Assets/Shaders/ManafallWeatherSky.shader b/Assets/Shaders/ManafallWeatherSky.shader index 47ffb80c5..89657e54e 100644 --- a/Assets/Shaders/ManafallWeatherSky.shader +++ b/Assets/Shaders/ManafallWeatherSky.shader @@ -25,7 +25,9 @@ Shader "Manafall/WeatherSky" // That file closed two include-based Passes then left a duplicate inline // HLSLPROGRAM body + stray '}' (line 329) → empty shader name, Shader.Find failed. // Do not #include ManafallAurora.hlsl here — its old '#' comments broke compile. - // UnityCG only. + // UnityCG + soft point-starfield (no floor-cell squares). + // Star uniforms must be declared BEFORE FantasyStarfield — the include's star + // helpers reference them at parse time. Declaring after → compile fail → magenta sky. CGINCLUDE #include "UnityCG.cginc" @@ -55,6 +57,9 @@ Shader "Manafall/WeatherSky" float _ManafallStarBrightness01; float _ManafallAurora01; + #define MANAFALL_STAR_NIGHT_DECLARED + #include "Include/ManafallFantasyStarfield.hlsl" + struct appdata_t { float4 vertex : POSITION; @@ -118,7 +123,9 @@ Shader "Manafall/WeatherSky" float n = ValueNoise(uv * 3.6) * 0.65 + ValueNoise(uv * 7.4 + 11.0) * 0.35; half cov = saturate(_CloudCoverage); half cloudAmt = saturate((n - (1.0 - cov) * 0.40) * (1.2 + cov)); - cloudAmt *= saturate(0.22 + saturate(dir.y + 0.05) * 1.15); + half elevGate = saturate(0.18h + saturate(dir.y + 0.02h) * 0.85h); + elevGate *= 1.0h - saturate((dir.y - 0.35h) * 2.4h) * 0.55h; + cloudAmt *= elevGate; cloudAmt = saturate(cloudAmt * (half)max(_CloudDensity, 0.4)); // Night: keep sheet clouds. Day: thin them if volumes are the hero. @@ -127,7 +134,7 @@ Shader "Manafall/WeatherSky" if (day01 > 0.38h) cloudAmt *= (1.0h - volStrength * 0.40h); - half3 cloudLit = cloudCol * lerp(0.88h, 1.18h, saturate(dir.y)); + half3 cloudLit = cloudCol * lerp(0.88h, 1.02h, saturate(dir.y)); half3 rgb = lerp(baseCol, cloudLit, cloudAmt); float3 sunDir = length(_SunDirWS.xyz) > 1e-4 @@ -146,12 +153,10 @@ Shader "Manafall/WeatherSky" half phase = saturate(abs(_MoonPhase01 - 0.5h) * 2.0h); rgb += _MoonColor.rgb * moon * max(phase, 0.35h); - float2 starUv = float2(atan2(dir.x, dir.z), dir.y); - float starHash = Hash21(floor(starUv * float2(48.0, 36.0))); - half star = saturate((starHash - 0.988) * 90.0) * saturate(dir.y); + half star = ManafallSoftStarfieldRaw(dir); half starGate = max(saturate(_ManafallStarNight01), day01 < 0.38h ? 1.0h : 0.0h); - half starBright = max(_StarBrightness, saturate(_ManafallStarBrightness01) * 2.0); - rgb += star * (half)starBright * starGate * (1.0h - cloudAmt); + half starBright = max(_StarBrightness, saturate(_ManafallStarBrightness01) * 2.0h); + rgb += star * starBright * starGate * (1.0h - cloudAmt); half auroraGate = saturate(_ManafallAurora01); if (auroraGate > 1e-4h && day01 < 0.42h) diff --git a/Assets/Shaders/ManafallWeatherSkyPass.hlsl b/Assets/Shaders/ManafallWeatherSkyPass.hlsl index 50ff87bf2..bc119baf3 100644 --- a/Assets/Shaders/ManafallWeatherSkyPass.hlsl +++ b/Assets/Shaders/ManafallWeatherSkyPass.hlsl @@ -2,6 +2,10 @@ #define MANAFALL_WEATHER_SKY_PASS_INCLUDED #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" +// Star night uniforms before FantasyStarfield so helpers parse (same trap as WeatherSky.shader). +float _ManafallStarNight01; +float _ManafallStarBrightness01; +#define MANAFALL_STAR_NIGHT_DECLARED #include "Include/ManafallFantasyStarfield.hlsl" #include "Include/ManafallAurora.hlsl" #include "Include/ManafallCelestialPlanets.hlsl" @@ -277,7 +281,11 @@ half4 Frag(Varyings input) : SV_Target // Soft then harden — solid storm lobes, not gauze. half cloudAmt = saturate((n - (1.0 - cov) * 0.32) * (1.55 + cov * 1.1)); cloudAmt = saturate(cloudAmt * cloudAmt * (3.0h - 2.0h * cloudAmt)); - cloudAmt *= saturate(0.28 + saturate(dir.y + 0.05) * 1.2); + // Keep sheet clouds off the extreme zenith rim — that read as a white fog band + // across the top of the screen on clear / light-cover days. + half elevGate = saturate(0.18h + saturate(dir.y + 0.02h) * 0.85h); + elevGate *= 1.0h - saturate((dir.y - 0.35h) * 2.4h) * 0.55h; + cloudAmt *= elevGate; cloudAmt = saturate(cloudAmt * (half)max(_CloudDensity, 0.55)); half day01 = saturate(_ManafallAtmosphereDaylight); @@ -318,7 +326,8 @@ half4 Frag(Varyings input) : SV_Target sunTint = sunTint / sunPeak; half litFace = saturate(mu * 0.7h + 0.32h); - half3 cloudLit = cloudCol * lerp(0.88h, 1.18h, saturate(dir.y)); + // Cap overhead lift so sheet lobes stay tinted, not chalk-white at screen-top. + half3 cloudLit = cloudCol * lerp(0.88h, 1.02h, saturate(dir.y)); // Wash sheet clouds with live sun colour so menu time-of-day tint reads on the deck. cloudLit *= lerp(half3(1.0h, 1.0h, 1.0h), sunTint, 0.42h + 0.38h * day01 * litFace); cloudLit += sunTint * pow(mu, 3.4h) * lerp(0.18h, 0.55h, day01) * (1.0h - cloudAmt * 0.2h); @@ -370,10 +379,9 @@ half4 Frag(Varyings input) : SV_Target starGate *= (1.0h - saturate((L.y - 0.02h) / 0.20h)); if (starGate > 1e-4h) { - half3 starsAccum = ManafallFantasyStarfield((half3)dir, 0.0h); + half3 starsAccum = ManafallFantasyStarfield((half3)dir, cloudAmt); + starsAccum *= (half)max(_StarBrightness, 1.0); starsAccum = min(starsAccum, (half3)4.0); - half extraStar = saturate((ManafallSkyHash21(floor(float2(atan2(dir.x, dir.z), dir.y) * float2(48.0, 36.0))) - 0.988) * 90.0) * saturate(dir.y); - starsAccum += extraStar * (half)max(_StarBrightness, 0.0) * (1.0h - cloudAmt); plate += starsAccum * starGate; } diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad.meta b/Assets/ThirdParty/DownloadedAssets/Druclad.meta new file mode 100644 index 000000000..cfbe334a9 --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c0ead4c993b0744cb22cdad4ba3f115 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Clips.meta b/Assets/ThirdParty/DownloadedAssets/Druclad/Clips.meta new file mode 100644 index 000000000..78f6cfcbc --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad/Clips.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5d827ef05534929990505e73271f39e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Clips/README.md b/Assets/ThirdParty/DownloadedAssets/Druclad/Clips/README.md new file mode 100644 index 000000000..160e3990b --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad/Clips/README.md @@ -0,0 +1,14 @@ +# Druclad Mixamo clips + +Preferred workflow: + +1. Upload `../Druclad_MixamoRigged.fbx` to Mixamo. +2. Download the kit listed in `DrucladAnimCatalog` as **FBX for Unity (with skin)**. +3. Drop the FBXs into this folder using the preferred filenames from the catalog + (`Monster Idle.fbx`, `Roaring.fbx`, `Jump Attack.fbx`, etc.). +4. In Unity run **Manafall → Creatures → Setup Druclad** (or Animations Only). + That retargets every clip onto the Druclad Humanoid avatar and rebuilds + `Assets/Animation/Druclad.controller`. + +Until dedicated Mixamo downloads land here, Setup copies the closest project +Mixamo fallbacks (skeleton / samurai packs) into this folder automatically. diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Druclad_MixamoRigged.fbx b/Assets/ThirdParty/DownloadedAssets/Druclad/Druclad_MixamoRigged.fbx new file mode 100644 index 000000000..b80632ea8 --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad/Druclad_MixamoRigged.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:849cedef80b1dc5b7f97e3e4378dbecd22c3becf600e1585b4950b93e6e27bf3 +size 10378652 diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx.meta b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx.meta new file mode 100644 index 000000000..e2b3d5319 --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b3519423d53b1a4087a0ace00f20022 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.fbx b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.fbx new file mode 100644 index 000000000..025c4f7c8 --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48498ad118c86fad6300b6372459f059ce301b3d24e9b90fe4c040475bff864e +size 9401068 diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.fbx.meta b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.fbx.meta new file mode 100644 index 000000000..813b1edaa --- /dev/null +++ b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 03f4825c2e4bb3e46af1fc89af851d7c +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.png b/Assets/ThirdParty/DownloadedAssets/Druclad/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture_fbx/Meshy_AI_Horned_Abyssal_Demon_1020014627_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b8156dc43640998db2a33341073723acbd342b GIT binary patch literal 4123299 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�S75IF{XZ+v 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

e_(1u!Q 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 z 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]dkgsv*Y(!zY!QUr|%(L=7XWxWma7R1L)? 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 z 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�y?g89CJt4CDe~dsS9Oqqo9S?nN>B-6Oo<1gS0I~SF!Z^2l5}1&l#14W5 zpjcNeXy5m@KfL4i2@m-9R@_S#_s?Gegw6fqhksD_)eAnY$(yyT^szr0;q8;RPEXlb zf0JGHi_;KHxlQYx(v7VZPeMl|%>;-eGYyVg=;Qxf+6ki^-laHuzzb5R=MQeW6Hp8cfE%hWlF-*x zT%1f|5!wa^JhJ?c`ee7kM5Q96hHTt|dFF_#rzM=`9IB+&s%d*l6wIRS{}OFnUxW*e zQYrGZX~N9OEe+^Yvzm?)(>|q& zg#V5=6a~zQA%Y<@TYJAv$*d9=;v$NA*tF~zq{0?~z zq25EbIV*+CyLnrMeYl zMta)tYJ|7`*nZ^&z)K_Y25~8|y|6WG2OuLtq*Mxl$%VZAH}G_#1zF(p|Uj(1I@#>w&n!TVT$sN$dI$Xm5d9dED9AaR;_R^1q3IG zVWx0t(!ALtOY_|ngA8d>+;+Y6zEMT2f)-alN^{x@h{PZ>)>Xx9M_!zqR0#Xy&wu`exSO5Yn>Mc+hi;bNDzHk5@jH{CdnYA{YR;=UIMBS35RD!l3M5FD>zJX)9 zd_N4G(K&#APpN`^#{$5Y5haw}|Kf9Hw9;D(B>oxq13GoNa_j$S_n!y<@7=kVooE*_ zuHfw2(NE@4F)AGbA=%O%Vd`;=ANWLMc37N)ReqeOFuKpZy4(Z6a%v4K*A4WkASRus z8Ooe)?!{hCwq(&Do+7VXO>mK9Sh3XFk|epYJnsPzT9Xq=DC5MIx)oDsru8Otx0jKL zd1bQ@1D0~Z-NwecS=OVNYU?(arjj5VB#@-x>4ufIY{f}Nzyd?^UfNX2)ZPg`55{C? zEZAl3Kq_EVrpqegxCOpKTblRB$W=-9ePWu&HN1ZL=JgAnx$&pXDtr*Xc-BoDX>NG$ z?E%a<3R;=peEoHHLcL@0;1|DM*~oUQc*?H?MkbOS(mC*}zb`U`c!5gZaED)+6QKEYT?ypc=O1bZtDB_1jA;lhSB@|8TTzrxhq>htK%Z(byEGVL ztT6#py1C55Irb9_nVR$SCq6%i@q@;;urFK-V7K8 zNtCSkUu#vHlQAqVvO`P#d*ueAC&ZM075%jF%gn5U|;0~fIshNY2pxxaC|=w_wHlrvJ@g^5@;(BGzGdw@OwFK!L0zn zdKB0?Hen*3lw(?1Rm2uNJsd9E)@pM4f|r1c)Mf}0zx9&%tTY!q!V-EU5#?*-(9YDv zv9I4==={!y+})NXpif}%lt_XdQrBi@{v=u$p9h7~U9x7lEkXPt6d;-Xgh~xhsfx~j z1|aVl#ZE%k#}B&iS!f7Mzx#L{6|f0JaAxNpuLT5cC2)s=-G7o$-kcs8boQ5>jBYt! z@Fjo^=TAtm@Y!nJ`SA^LyS$v}k@C+L2~*H;d+fTYi)vr&>?ZSvb(@1OIuAK$LW?rxzDCM4PB@ipEz zubAAk{$IDj8Q3@abeS}cC8P^>z24H!$es1(p`!E+fw9l{Fl|^!=R@o9T6#q$4i6tb z@)k@-7lAv-;5IyTeF^ZRE!ZN!l;8-bBoH7lKM>;Jo7{$j(xvu2aFdHx&d zVG_eEjo%#O2#EwJC2n7IwX=rgIx1^I@SvL$Usk%9!I z#0IGktx`_N0je_`=S;d|Ge`MJh*+F1F8MT_(JX@Z+OVo*kucjg({fJ{4y`&cMpmf? zfjvu-CPAdFQkRO!v=Mpf5K6Ha98ue_q7U&~M&MWbz*~_x#L_6>VJdh?dL<2wbcZ;j zxeQgIsiqCE&4qRS*Oeiu_(d54pO8?xjmUx+3lG4CR zq?K4M%T5p|?utX`(i(aru#Bc&%7BeZ9;0JoNewX+3J(VPwb{jXh;SS>1Wgf(vN9;7 z#Zp-AY)%M5q*q(C=E^@%TCia@Ew|FBV&S0b(659EA%A%AGW(kz3B8I#ob*oGMw=O$_)wlE#a&cP+jdV>a4F^PZm`o#~=xs%W9bY!4Ogh)d% ze*16wfBI20gWQ=+z>E1Gnj(47(dN~bYcEYw6W?O(J+g@r)< zgj~<+Duh@roWWzY7zSy@>*(ELs}rUJ#Bkz7HC$Lk3UNMc)QWuTHEB0^t?W!&6X(u| z_q41T5h{;1vh2GIr3ZpHSh8lJh)J36UuMF#J^o*?n~z8L1Gqeb|MBHb zGu5zajVpKmi^|`%T+zwrE+_*OQ|F{J)8{ko><({7DA|vm>NIOb%(_GquTOnIf;ajN zd}@($tbpRqp}pcmIXSj3X#TOEAq| z|MORA>mVw{ML|GYu>+9(GlS7Ky|)zFfL-oNNk`^s0W-^m7!9$CEXfyl)Q|DS-tY$T z9%@;(B+qL2z}#$R|CAdGWFsY_Pgz|VG-ZYL?9t(ouPXt!OsLfqRuFxz3y=$T5fwW* zvL-K*7DVdkC3IsB_Hj?MU{BF;P3{mkP5Dn zBU2VF0n9Zg-3$9y-oz3w79asqp(N&UOubM>OR~f$L7E?T0pEXcKiY3T+n)I$*MUbr zsg;t?m$lqATF)t#sO@<1NxaEc)Q-rNSt#G6W5<#X*$ay?!g6nQ@-TM4=yi6N*MK^T zw>H-6zW>>syZ7(hV{eL9vI9^VFFYzDZKQR7!BxtTmPp8h zU?P=Kn}|)17IXEJ50w(fBMja8Kg#@+%VR{JQs+t-1WP`9F&w!EPyrRv>4oN`0Qol^ zccxWqVMOhZ$Q5}45;QK&EB2a!0^`GE8;aU`lj20W4>C-ir`1(Bi+xwJCC#*`g*64T zw8WT#p2py@q_%2NHeHfKwAr-f;K^O?w?Dpl#okqT=Hw$P-Z*8ahHnM7E+3$4;<_X2 z@LJE+$H;Nj4f!E+<&mOc zS_wI5hz6?GRS>I)qLVKoNtk`r?)q_w5{SX_B@eUvzfj^V=v{0e`z1%_uT^+Eb1Wjm zA!JC2(;D^%d5bFo!9en47G^TM%PoatII$vF$Tqe+v_AN^hx8#!e$%4 z{OU3B+XoN#@w>-Qh{dsg3E)@1{N+CW_BX#G{`yznefQlj8^1~5Ay0o$W{ccnj;I+% z_jJM7{_<#n&EUE(MGpJRs&1ciRT>OD{(pE9p)i-ngRAO(ByVm5jA?%a_*07c#Qz4y zJ%FRz0B9X^W!PrI?F*Y(A&f15;H88+=jZ1Pz}9G&wGS`z~fBb&L&-U z+lj-q19Esd+Wjv9Uw{4Z>!%N!rtK#FdB>_uPlB-GwKyUog{i-5lpTV6%h*;h2_aj> zT2%Gl%ndlw(EDjCnv_ww#3L%Gz*b=-x!i_EX$u+R15#fo{xo2g^cZY6b}kWI3!6YY zk+@B!(KJjo*|c8PmLd-&Vw8ZWDT{>AxhU`UtB`GAXe%!3R^PTPzu?&(RtxVI>_hvV zpot4@YAYy5fl7>8VKUO9JVCRZ;3QC(mX~{x5^RvVaR_M*BO6%8RP z2fCYbqQF7KV234?wpMRVs#((mat*;lwmEHXh@zUbHs9K}_|~6fa7)~_-7xSC2w@~X zx&k280E6A3Jei@}en(g)uqf#i3kQYbLWaknbvZ$>WT~Ia$gq$WDxyOWeg$)w*+pg5UIXXu=_aB}&ZkzrWFkm!^Dm`(zx~N52x#U5Xu56SA zT&ds!!=OfU`!>IP7Hui06;c;jw>OiUfeB3M?xVLDl7}j25^)*}Pt71!70cL~P`Ne& zfOeMIKrdC6F{MChi49xQ%qfmR;v%`6P*21>Vr3`+RBTK=l}=M?n!!&C0Es0rXUB^K zq@;)dGZw#q#(1_2<~CgrZ4CeBb{>{(%JBibC)ne~&#$6Nn%6WhAt`FBD>He4u`t5u zK_ZgRrT#pM4}xF|OPH8yabZ_!)L$Vq$NlIrWVIUDf+{}Q6xR}Fgp8Ki5OuVj+zsO* zJPe7nWe1!a05&9md*b4Oiv0%54YvWHsHHtZ{e>8Aq*@IqqBbv?3N!R3uf&H~pY$hU z9%GO|S-`ykA9rAlK-%j3jmbefyhbjSlZeZ%6GO#F2TW80k(dZF1e9V4BIr*;mQtWu zBLEueE(inQ&kpU*mmm4xBmU^){{SC6?7rqtOJjmm>^%VXYMf*EIEFiV#x;l5kr6U` ziS((Ya!n&*3pgt47;xM|Op{WCXQ-rW10&F}PW3v9G+DH%GXR!uur^s3YDqyLJ*4NW z&Mm05z2XW_{Y5iwkqetoKhkT*X@^(sh=3gYRnt5j5w|-Vom;!tC7i*o7(-OH6UC7@ zl_fcYD)wiV92=4-my(!FE?XY55{x#eNlp&I5D^QN@(>tMuTz#TX9px`###4v>HsENwporeX}eM(HYaa3 zr0`bA_<}n|zjy(c)9K-E%OqySqVlQ0jD(&6V5lI&b4gn0u020JfB4P$SHx=}PENji z^rZ1O-+WE{^>>G7t8b`vP0^w;#W<}!7^2xg`_w*bv=$ z_lCG#l6d)MK0&k3yp+DcAf^1e?YRof2YeK$*;(Cmtjvb()Yjf0AT?t^2>(M-S2sC)jv`YEh<3mh1oc$@ne)ir;me9<%edb7<;a%Wlzu@Z&Lx&P7ZhpCX;n+LomGxKS$;h z4E}=ly*spuozzrnUAOsK&#C;d`tcKo-jL!)%s6wwV@voc-9D0I8-vx7J1ps+REG{= zc>OVNK-Ssv&b~FIT;ffroY=MNjf>CzmoLa}f_ng8Jv_U8@07T)jEJ`M=O#kwp;GMu z!p+J75s{4J)x$tZgG#9U1150c75M>d9HdT*|EM6$4E1U#6|G+7FFaC^u~4)aUSkYM zLiB`CV#1{YL51tQm41(5PDqQ}lqWGuJ|Q%(c4IO@BJx(!hb-x)Dz%M8I5Z2pFWY~{XFlwMd)qHS!PppFE$ZHN1t2c z3QGNXPVo?_@bOMc*+|cmRX#9w=ME4dw~|#BAt(sQ6I0|mEYriouy{t^;vCHOS#1UF z*#T>3g82`wY;Bq=2n}0JJj76!5{e=y>l+7rWfvyLR8DmTE{_N?8wc@j?IPtp6O9xn z*OV}+L#o00cBwEl?TC?C(M1z_l<@W0+#)TgDqG>zGj9@rYh|qS?p}FZ|H{93zI+eh z<^TN4MUd?(O+-kMI0sAxbD4?B%-*|l$u!;`q0%EUx>I{N_*8MsOvUA&Q+pyA%LM>v zeRV^?Dy@=w)Sp^~88|M~aByn<14edQu@ZRrBaovpNSx$V!8l{>9~Dr(bR+DgaQPm< zC6KE#pz3k~1ekfTrOS{1U#|EmIoesw!=K`sU|XmY)@z8kiFdDfW#gS*OhvE?<&z&j zo@8ptt^4Q%9r0~J+>;V)cR_Ialf)Qw92up0kBpJA8Y;lI3Ta2Iiqo5g8o=7HnC-#Q zidtCmr&xup5oCH)mAB=GLBs-_1S~2{LIBK3N^(P_IqbGOUzaJ%ES6D0lNU1)K`$wC zG0wbL$;8gYAFOaQU48(U&V$5bMjj+rIxN zHtyJl9^D0Y0Ag0^4vSvQpg`1b{-X`9^#KHZ-z`>wQD@+)+KSN{EaEn?sfCV8*~~r2 zv*PS9v078GrQhbY&P1sJ?GkL7TbCk`&H{$;0;^eT^o%N1YYweorF-1RxW`r*kC)tq z=AvpHful+?h9`_r1Zo#Dh(BHFR5-6%+%Rz6azQ} znG!@T2vOkDA0(sWV#yJ(4%SJ;AewK}U}%p9XHRPVA;XQ*XuyD=A|_xkNTiW)f?E0U?p?7lp}h)FIETaNqk{ zyx%lq(#|3pMrbVSmNXH5qh=6FQae&Mn-mVY(26D59gtbZ2u25z4vQAiu&QUo!7>pz znf|aG_s{q_W7eb`&kt+iZtIk3Wy%N>`)>q02C;>KIH)XLPq!c6^aIqNvinb?AL*r^NY(}hW27;=c17gY zhiLqaLmo8nE`T!*1!|}*MkS=piNxdVq8{Wu`chpl-@JSA_AQzsAm^CKiJK<*j5Ssm z*p^z)+A2Gz?b^I8GZ!mk0F$Q*wHz&x&|~WXCgD=731y$iK4!ihCMG5GnWL>a5T!6K zYs@?8mWHC3bFYq$=eq}KLx}hzI2vr6>Rv!6a*6TTMPrPi*|x06+1aDAfUe+4wV;N_ zy(vFk4F^*GO^yrMY&b z0{pZii-I4S7qB{Tcr${BRVeY^eYUi8c_W{`!#{x|7%LjW@E@xkeEpLaOuIfRdRg( z;UCYAvv$}2SuX)V{Y3`2e;$E2x+9$2+1}B0b&^jqUtMr9_vjwL#lqdyF-24K_>^~O z;^B{v{CLI(W-532n*UwwV4MZ3Cydk01PsJy~Yz1H2tq$HZ`I5*6g)^O2)$(-Yf zcrjhK4k=+o$AAsgCF3uedddoI0=f+?w>z=^x*u#d47&V z46u{_g}@}-&Z;M9Ncu3MaLi7a|ssJ19n zJ(^D%S6H^RYi&{EIlKlBl!m(!>so_s2%(h-mi#TW362ys4qx&b_%s)I35-O*I0zJA zM5q+8V-HAEmMT})m0Eei!P0w~k}0;HNm~s~(|~Up-TuYb-~Qt1FB-S}ukYR8(w~*+ z6C0mWg{}YY{yU)LRrI(wi8LsW2qNb={3#eY#m#4-qDlfkJ|zq95o5H~p5p}8T(OSr z6=U++)+pCvu^J!*0E9;b^HiP=6H_Q~P>R@jJ5?t(TSEp9EXC?jD{#W(rUmq*dHjFc zOyi|(JN8uojt_qK`z`ajgu>g0&7}63Nz-vI<(c8l=@mZZB>;E*)@Oy?nRF~FPYVl7 zI=uOX5R4H)z2k%3Z+tw59O|B(^O_xFs|HRTZ%MiedxxaxK#4K?7=QWzO(<`7)e&Qm zSBsl^)rPvG|I|%Sc?}``k{pGVjs`vf_%|A+<68=nIg&Kpkjz}AF36n52j`#~i$mSB zq>fPm6w{CaO$FDT9ULmPo)nO>yftyKz-e5BfzqrBU}0@eIQoUlSYI`Wg{?YVrsfV3{XFOAH3aO-pT{rB|1pW_F?z2Lez(>g`6-RQ2wkV)zx`9P_CUL>8L6%j_=jnV)z zkV!3KWgKC;_o}=TNA{g*27GAKsI?faMQaGMG$PK0Huwb`<)uzqw(ZoWkYG(h?MRaB zH~!@=AkW;eFlL*Ak5#Uo3&buI0c0o{{&pebz~rQ9X$6qrCEd<0L9~5a&MeKs-b5f1 zyTTd$!#ihR5)tdZLwN>JmXE7*zTE%DA;>KYV{6J1I6bn*(NFJ@@D4 zHL93)a7I6}9G%)YL`Ht3?F=+M9E(X6u0W0Ox&#!8;M`8-6JH9%0CH~dWCCm#vkCY8 z*_iU>UA^=$UV_qYNnob?p22dT zS%$=twE^X!wG^wj^Q{~UkeO(HwF^QKIe>-)O)IT0RdGoORw_!#qRx4k7g5=D$BJby zoFeRA|Ix9_900!m+kX`7Cm+@6n|C*L)SrgB{S%|Ylji{%z6QufjsG0y27n?>P`QVI zb)hP4S8)q~7VL#a{uMH3b);M+@c!8uN1m$pLZ~gIc&VjDTRBYvw>4bUfmtBgqfuwT zjZCW6lxNVUnK_T*cW{26Il^RS2{h1KnkX zYLhzVM|GB`33Gl@U@L7Ox2=r~^aqT1uI=L8%lAZ7hKJ>-1^fK51Axn6w=Xl8acbA5OldqF?0h5;x+C(;~ zNaCJUk4S;m8?Fc?iWL|;7wK&cQ8^24Et>3Rid;B?g;H8(M)>Z%--Bkj<30diuj2Qz z$c=V16@H;LU0n&=U!hb2ybFyWVjd10A&};I3qYEXn?6;7@YP;bhM5pDCzLFMCXuFc zb@9N~|0nJKU##_ot|V*=aJr>QFf8vcvuAe5_-QWzFeq;*=ulhwCnv6a382{eD!`{b z{(szlt?2TR9;8m$?BM$ub~?;B6Ke*jud^yX9GiH`)ruX@@<{ zSE}CgNWyKukn`Z2y>W~fvBc!)dssUb>q1q-iv4NiPMS428YIc$4SLeGP*Kg;DPNJ$ z)ncddUee=EJ<;lt<>)2Be#igb{Rd}f=RQBB#e&}c)7cr*KLgiFDs?%N;rDy+Av~(d zU57XRvH?)y22%Rxt@bnfp(_kaWxhueD zg}7M zR{n#zZE-OqK%;6>ZV1X_WGIK^dpI2BB{_O8Q_1M$7XHkW(=gkFDp4`A-jEzK3sy|= zUy7>E91rYL%GW6v2#Bh;4de*eKuQJwR!FN-r_@86He%3JnwNxS2}Q|eazgzyA^@c{ zo5Q|^MzWjJfgp@eqof^9I;Q6izpJ8&`RYqtKakWfxF@Et4mBO~Z6DO+eT z6FIvdX*nf~L=eap98xDvo(ib;HiUFJM~Fd%1SACTh-xP>wWO>PG-L-n*M!ZF;4BV3 z+32UEriyJVSoO*Hj;Bq&o%D_k1c)XeLj~`#CG}uf9TFUp z7EaP)i)AtHzq>`uC@>(GAOA<& zmR;CX9N_CtfBm$RS+LR&Z|hD8oEtS=qmZGiM!|4)2wF?As%iiAr@e_qQZK0F zwU@TwNDV(uy5JT@fXtnMwl7Qj2-&3qFqzb{t>%zWJ5BpqY3Lji?TAKOdLeNt7pF?1 z;~E;=vva@Fpv?Gc$GzLn{=ffs`}l#0JlCw#6CzSAGd_5liM!^W4Nzf@1F$wm<@dbs z>g&A{-miMvtjk_+Gka?9im)P3alwojP9O|4ZJ8hNVo4%3jrtxV;C=j`mjl>{ux?^h zM+3nJ^U-gc3RTu#Dc^Q(7D{^R8~~_ zBJSU?R{~uS2@yG^#c_d-J6u!eI80+{aw~iOCT@LxOlBz0$wsmv=BYa#Cf@4|g(=qKyF33>p9am%kP-%Sw$l zwnt70>5e50Az7zJ?iCqWBN&;QBb@AtKoxa*e8t=L(^OR?jM|Itl9g*2wuYw+Hx{jB z1yx!{_gCR4%xt1&E4AIt>JaCeHwhbFBEy_Ad0hBe+W5Fxl%>77{r~1I-{R%_C3e8v z5n-))=N{kb;#PqTizC8(|AvQl50TaJ7NFtsPB)pC100bV4cjfFXD@|ZR66e3N$F?- zcI)3)*;p^X_K9;po8^u(Kj_Jq*t3rpN2kWb9rPN`gkml-8>iI{ooT+-Z=FzKi-!8qlO>-xX1b#EfnXUc}HWW68=nMr? zxCh(P`yKx+^Kzm?bo1G#t`508d&u**K9GP9*QsH{opU&2a~CXg1=U%07zS8`tJln* z!kj9XNjbI!z4MIY0Frbph|zdqDcAW2*a0apngvxIL}a&lLP2_7CF!kQ3@_-U0T?|Z z|BSMrwC$lN3DuPAP}K?$5GqQB-4^^oCFV@(%u7DFVF~3@l<|*yA$RWGzk8RhynKG) zlzYZ!>;$k8<>P~XUeibWH6VzUjlb~Tf*?Ka#RRsrV{9Z0K0Q;~0=%&z)x zzy0NJzWv27pFX{Net48Dkk=fdh-=Dj%6@U_2W&4x|1(|!P%RT6J=Cj}s{;elWm&I^F@N7L#rU`#$&((Ph-ohMj)q z*)Dg(eU!$@T0|X3jfLil<{Y8o#cbY@NGl~Vc!RbFu(Hu$xB1=>!(g2eRI@^Eg}}Ev4{|7cTpp1*0pNX4)G0L$)tqI_%m(pfWGq z`L!+kZYY2$XGFZ|?>nJL-6e!K6luo*wSY)fP0t<~X;TJ$G>O_81$%M7|qs*`!Ap`lZqnxP@PMihfFKIKi z2rqUROxCEp9}O8$oX`|Ub4t4S=rtQ2u10RshI>u9C(l%CD^q6g{6Ks5> zf_%7=rnF*5Gss4QCoo2eRa;hdyTM2>CFmecP<|qlvJw{nVJwXtC>E)e6&0bX(|Jc zwDFWXE2C*Z&A5H*@%nCZs?%oiLRHI4Vc|vb6L5|SGZqa93FJfzmZiwE(l(|8+Pp%vvU6oT zoyw>YSQEWFd^kR8?TO^1o^bYKhd+m-3^HRXX^C=`7(LmFQH9Db1lgd&$c6ao)tg4P z{%K_&9K+J|K9jUe?L&BOM$KR=?1;Qw-kkXDfB)}S0(1j~A{oh^+GVg9=43Oy@db3B z;Z0{;x=`qmxw|3phw9yX?LH;sSM&RSo4NuUm`2))#$EkZ8i6DkuO9p05UKXayU-H%pA{aQ^NQnn-Od*|!aUEQU?<26 zQN;|R_fbr{Kf8fG^F$BLN?&sVl4&Oi@}`VzAl9YR!tL$FsL zI(2+ZG!}!bdW#Tr1d#>}K*(Ne<;dJ~KH;L(s|`SBMGX(eHAR%5cyKeckNLCGJ z1EqjJk<-gGq=ZmpcA!ZZryb42-{8=>krmn_&rpG_&Mv>E`T@5*1W-zEW1N5Az*Uv$PEs4mJQSjZu}|lD6mn*6UaE zqQjD_Duymei@)0BP9;pvV@)G-WmQfHkHUu)J8lAeKswTt0-b@A4S5gy;vuv#j=qTv z3PzNPHkQ#pa2F2uA0D3mc2c?)5#m!B5Hdl;2{33@dWw>udDBiUW}=(CL$yWNqK=UzDr<9vhl+A)uDq9#vrZims?XQ35`0B;jO9& zt_SfKCWukqjK#FuAp5DQY$6%-MANL2GYYxgzos-krpj)B2O>|=y=G^?Y|C!ZEkIunG+td+pP~NZdrEueNlyC}ULX7^>VH{^AT;y!0L$Mnxd}iccM! z-HX9T6V(dbG@*$^3sy;PwXw>>Hd!sR4+PrmrnuZPV`lA$9_?ndc~E(5VPzKu6k8o! zdeXSZIR3Po+PKf|BjhHbn>IX4c#pRi&xi%%SP#5iF7l=BV%$-)aT18ujs415SmqGg zdXVEt+wLE-Ef!Rt;0#h#q(%>E+d2RgW-C@xaS_v7nP%%+x7sVc=zzM6PNjMJRA<*> zR#Gd3rjw(40ITpzo>_6BGSmUmOj9xjbP|wd1N=m0l>6}V2ul|fBS0*ISwN1Nf*7IqoQzSoq)vEb>tS8LA5HT*cj^;?^y&V`0A8}k234afX~=q^_^@@ zOJ=HPZjzl=4MLmXdn)X2W`X4LNaP5}DolfjArS%jAriJN$)EXPK35J^er8aELIM(I z{j5m+HeFn>W|JRMpfH?e(XrCxtd1bz@blYWen%{1p3^+x9>8_C0eC*QkVnT)|NhTW z#Y>mf#$@Bn_5h5H`^(%{Ib?j~B>)(A{t=lV(+}+M4mNvQ8;VICFy5HTe(_MdzXx!` zO8~|9@p}Nfc7OHgLCg?kUJ+3~I%EuBmcUE`1B-pf%(W}5Be?8G-pqf^RzA0~V>?;E zWIF@HWDxO}REosvnepjQbUVJS!WOu8rv`4(sq=(p-crQhGGzf}=JD)?Q^Q{AsWc#S zH zaLkw?CtKZ!IIg7<_n06L25Ngf(gzDz6}A4X6Z~d$P|kEVst|~BGJsUD9$AOXr8qNB zglqyd(Oe^EWFD;5z6@xi38gDl)Iiv3#TH97*`b|7Wx?f!e^6^z;X9|=O4}@l9WWd! zz+rP0DTNWH)fJ5`l$h1xP3L;lHG6Z67*&8r-7LkVEfG;3#cp5~0&Oc>7fD9O4mA{c zV*kY86$|iLms&4U$xX8`&$Ti@u&e+W-lmq)qZ_8Gm4d`frK2|U1QfXS*3vBmCvmlv zoU*hS4JlouCNa`!CC!Cv_>$Vv90CrU%A<{v6ERp~D5Fj!JKNU ziBMF<=C!q)M{*p@L2DHYB^ZPh*$q}m>ToHfz=i;)7P;Piv`$d2GdanW6e@%r5*?nn zwgQ9KHJbty^%h{D0(tk=`I{3WVaB_Z&0xA)PUa`yQ}+1>C9r$?OsX|N&8R86wpr>R zJZ<@z_^305l+F@MOSb}NO`unMuIo*mybynoF!lmEs5^nu*{wne-KEby!y$b}4?SsQz0+Q9&NpIaS7xv?21v zqj!;+96Xw^rYX+^Qqm;Y7WDfXkLJN7hojQi>`8kORsyj2QW49KA1)6euiXF`eM=!% zsV%23XsZ_jdn_9z|GdPbuO1K`i@#`;Cq(BW&f6z+Gml!00#^hPgHpF&X9+A=?$sgf zrh#u%3*Zwr$B12>iH(b9n)GTLN^EZ;=RuX62y~QR>!}R{acDASV@u&pq&)Q;W4UVk zW(zIu;HT5@e9pTc*9}+|5 z(jzS{`m7QnQ;ma*7uT-v!xngY8s+cbv&V~vK_@n|0tG8MXL~gPumGOjJ=ZO4?!p3Q z88NhFZuZl3N2Z+(w3Y?zJ z7+EJ#Qu772*5n5BB#usO{df2O&3C_WU|lN+z@(bP3f-TL9bp+Nlk!ElppwQqi!HLu z6|E;+LTZo_P9`F#4uVNLA(g-3SaA%HJX1;Q4U&;2bnrA^cAu5t3V;8{_iVz7>*R!0 zXA?_F=8Kj2pr40QV(^;`{cC+EBN%)jK$Ho5b(5VxE-#Q*BBMVFLM0*k1gdYtyQOP? z&2~_Cdh@xLbqBHheAer+g!VdkQd%;U4cb9m5?+=9^4jW-OoNDi{DqTN&3?^ zYy|i&fCWB*?t2U@jk!yJBE8R`0N_U!+AtT0L`iCklV=MydlVv0NTDoJ4k-$4VtyNx zD{L*8j;i0h?+@_N*8frUFLJreSd;j2F_Y=^e33#Z(j6DiX;c}3uYp15TUEp?M_>Up zJ9+>>BKXT!uBi z4tiWb1M=m|8@yl2H~!EZ<(U#P24t^oW)P7IDB|Qb9UVix(+o5CFI&l|BY%`@%5Wg` zfxBoEfC_(;6i`CiJpUS`t&r8o*@Re^6zjubN5xh>GHA=hRV|2yQpxbKVs6m^52VW< zmwD2POngx&?@%)kv-hEV__LjGoco<`c-ab@Q%0b$IqGx8oQW$hBUQliHV`Gw3O9`? zwQE9p1PG2p?*Sa==K8Sve?`43YaD0tv7_UxTr=Fgy*Rh~A};}8U~LZl;3H5{)T~S{ zOXlpVIr@fSPqus8F+Vc7(YP=Alr&!I$*tR4e0;r*zBxZfE;mG7sb42>f1e(K#c~&f zK@K}|N{uze7Ih;S2Alb*(4KawX_`nSJ1GQe_v*o3m+w>Qnh_y%LO3rA`QiP1W+!*Ql7D!v z+>S$F}!)rlMUQCvt#ED zKmfx*1Ej7A(i*3l+5?5|>lu*<;S84T?c&7vtC>nz zHc5`i(?CoV7)dqb08Uz@X4ITftE9QsOi?im?r9+q7qa*%@B9Gx_U!+DO|G@YVA63M zH;wj_Fej1FB}d@&f0&j|%am;%2J-PJ7kA_cQncN-lI!sappf(tuqeWVYbr9+sO1@8 za3)$8U7-Eh4%B9;lTCJOgR#Sg@e6^El-@4@d^xoOy z+n+ao+toJtm=D6G%O2%(slKB}(h-Jm31*wjWuS!PIud1{Sg1{&wX|x|DS$jhre%)f zBqCabr=FCdBvmTpX_%|~Xf&hK1s6zwCpv0k!&L_OuxrqQMC4OP{PH+1GOe{*O^+#y zbFwSG{ByMXPt6DS`F5|rHY1jVkZW6Wx#=!ONoGaX(jKpT{GVO+J%}dgd`Wc6i_OFeKGzb@J>XtwQ3d=%mP+axiLAS&cnHZAm7p3Vl8}# ze)#YKkq;EfDusM_mUU%tiWcIX)Qg{GCoIsNnY}-L{2=v<*yB_QSkvKBj>XEp;T!&g zxde}arww?k26==iDRTe**YAJ${yAK3p<<{EkB{LViP9*$k(9!Z2Xmyl9WvcBolvt= z-&HnLhllXA)P&%JLQKHQVuiKsv~kqJ(`cD!xU36_ zE-bJB=lXmo8@$3 zjGdv9-SU@w{r5Ff4dF|Jzx&A83D2VicK`jsgVf7W!W2Lvo9sj@Ulm@iMc?Z;@3#n3 z7h^n0NQ-r}vx=_b;-n5?RV_L%vh(`o0N;IgC(3_A_6Y2s6hYN1R?&I<)Ount4BdL6 z$TXQ^Z>WMcOHwPf(kQ6%%#njQ8>!A@iH?xS_i%`m-tfGCTf1)S|7Sk_zkl|B8tUoG z9%sQ7$<+A3AE9bvwHP(#MP|cU@0p)+fk!FH(cBGayC2dgoYE<) zG}U8oHJDv_coh_jKuMK_!}ZX4kzSk|`QVw-oWMo5-RFF%G!%0?&^cTc^)?+!X&ek80L|wx{gfrw|iDk~MP|QH1(m>*0Mky15xSk?A)L>I8FRRz0La;Y1j6LSbmk^xXl-7?ffP z$<5)DTH<$Tur)FPbx8mX5Go~Dxw7I1-*2BX$Kwq!_9tJxdHs^-d-1XO(((<>Y^M0A z7j@)W70ZQzL8A$dC4@w%S`aCwYkc?ZHyh-Z=skd=_W)>U1NbK=E?B9u+6Am(cZIE7 zzW;^L_lmu6Z7}`furWCt*Vw$3}bY(cYB z;B$V=TC~N?o-<5dqSzP_5C)7X6Dh406=&s=a3)Ijd*wfR-f3 z!2*&ibj)#LKBqN!YQ#X7g=Z!ku`^5GO7< zq%3~Ns-lV);;dk`Kv?h?d*pkkx9^-?v830lM5MCuvA~1>efFQ-{~KQCdUE^p3Cp%N ztWd`#>Q4z$J3%jma92i{lIKX=bE#iqi0)+EqJTv-0BM60!#nz@lx$igOArBrgz$~6 zFl1!q?=^&_cgH+Jn2Jwxm3dmLs7tp^O1vvV;D)rR6{{g%&~T*5OI3!Km=CH}UlQ5M z0%~TfiZyb@!E;Me+`|%GuQZ)&0`vZhyZ_#^u|IXL++%vQa-b!sva`&1(Uy0_V39uc z&llwEVcY|-gGnVKM3@;6gGmnLZVcL{iv>VCD`bdJ47?)%z zss1Ig_(l)vo&Ufql_sp(R`pzvSW-DoyQ)M)))AtZv&>D({H6|<8oWHG ztTeg*BH>%WHn#MZxcvD4R@B6WdjN-L1N_;TBgh*r<63yE@7=~oz3%y>I_!BcE$Xc~(#Dk_Tzu@OeMD7Cp&XO3j(>$+U8S!OZ@-JK?k z_7yt;oF1rDqID%LvC!7mL0zRp-V*(UMpodLcmJ)l!WFjxbb6ze;9sEIxoxk@qsRYO z_M9(2`+sx~KpkA1K^67_LJ*-R~oc7k10d*Rt$i_6K@f4BYZFzTKv4E6D=nG#pq z={d220O<(YiR?{;F?Ewyh1gUI05m{^NAsy)6yh*bE<6wvYIUU`y|P>cQ>j%`pR5^i zS}d;=Xb-Jh6g|d!EYu>bc}Kuvqq4HrFZrL)3+2RYM;X=2WNu`xVNn8#7_Us6oba=# zP5f_mbo@m8xK?IZvz?UfBRh~BGH2vl?)e2y@5V$~dSa$t4uXJD-*QH)k|EV~7$hc4Y`}I5GAO-S6gDVdcpD+*lah&L#&FwjP4T972>*Z?q_7Bv^7R z%ghP{a?UE??SK5GcLbe{Yl%LBM%^F2|A9nBKecJ%F0*K!zvLAk-W-ZbBS5(aG{PXE zjvYWV>}FS1^~)On`NGME6Mpwq^n}#9#V?}***)>lK*^J@AGzMNiy08$Cg1OV|1YaE zhT&jQaBtSfWFlnMov?MMc0l{1y>Kb|)+x_0tBD|^J%vN)VkaxQ5=xdP2X_N1=R`F# zY+KnFk_u+lU=(TW3~9z5>jp`aFtS9NxNZ8U^2z6J{kuz>UC~xg`!Z!h?y$hfAWtBr zH`SIRYv`6{p-bn6;ELpJpkf+erEXkkcCAS=MhFoK8OV*5fN0R-7NHD_2P67Azmd; zge|O;3~e?!0*;Wwc0}4W9i<2)MVgj#Ld`z?aMa{pmBwi>l~Z8bKka=q`Qtp%*XQ~? zvirY@;&LMHr4v32+hS5D?5JIa-{*Y#r~kKFhnBXipOwI75cOIMAeAv&`$?8(nrlL& zi-b2@(Q2a4`lTvYXtOn09535P9J%D{|HU-Gnnnm83|5{#cexA6SJ^At}!xQ5ObJk^7yJ3SC_mBUVfN%f! zhaqgS<7ES_CTtm#pA#z%VxOKivvuNru|QVfIN~IE%ueu5{A_bIWX+=8%txN|Xx}imk4ev~)D09TeG>Gi!14=^- z4)kQ<@bjxjN{9xy%jotf+k-s04$;iy`g_GrBG4cHs^%E0jN?LXt5<@WW@t*k7Ozk( zj;(*-8<#v8;e_e!+xIV@vlGc~B~|Pq2*_`&1P3Lx2Q&VK#W!Ynr$Vm!G*(o|ft7P9a`U9OP6@+E-nJCz%@CYZ7u zd!j6P|IB3sOcC%lU=5{S0# z4lF4-vRu)Jg?)zxXmbz=a3_l8U0cXR^PSDW6UeE{C#Fgh_T$KWVZJqZ~4KMQv{ZGn|b%+G)#v zIGp)+M5#@N!|f1O5GjPUI>!Lj3^W*JN+c|qk~21ye4B20phIP3uH06g@MWj8vb1v4 z)nu_!5$#$@>%s!cPGJi`_qphjP zm6o=vmYR`SgfsG;rZ$1mh?vn&?VL0?E}*f&Ad{LQRv5`4lBeulvIHy;YR1dyONH!_ z0alu?3WGdFy$z6o$3c<-C}HTY!G_iYB8KL}#Y)}$`2T|Pyfzdr=xz^il)e(KUMJ=r zxzan9v!Qc%cRS9oBA?zdYE$s)A@c;sVDr;8F)8n&YaHYm%y+NDzI10a0guxb8)vftsFbIG9NEuFz9KORN^7E{DYe zY)5mZQAeMcK(Xy{0uHJu(?&a1#wNm_gqKS(ICaN7UEK9904bNlip#A}fI(6a}ZZg-0sKEaa%lCgq3Da_a&~kiE5@#NiT( zwD1Jd;6rhFYLIo1Iw8|4{9`0Wo00%51lI|Lcjx2b+x!sN%Ul0szT7>u$2yBh<_!VN zlp>9ANt?(*&rOC568e;TX5f%G3e~tw-hlaYi~jB3{qBDQ;xd6K_$fAQF^f|Y%7_C} zqc7x6MmmBPmR{#~qKIr9dF%P?E{n=M?xMDl;)Q+IKAuH^&jv{~2AZ`$4VcU2()T3PDy6zutZ80gn- ztwam?YD%hKP+C>8ke(y)noTtw4z6%9#rg`3n;q z1nw*)&PetEXImhQXiwBFFtEYlIXPL_fh*HmhXN`Q)Qj3-xQ#k&UkW&GnM0KMR#U<; zfwVv7@c!h^du|#G?w;< zIPAgrGl~vDJ^DYPdQf7MaRjVRGba-bm?y02J)0>CV53$~NgU9clU52SXn{)20Pf($ zOdYL?E{9n)#@IA0?ae|$X{U$AS4R>kF77p*S`QxQK66iv3TA8|wu~W%T8>A%|CJwr z-~Q(GvB)EPQ{izf~jk=H8U)2yJi?7pccSIt>3edRj((_KlRgd5CUkD zQ6xcGyulcFh0>73b~Tw7SA`Hb`MZ+{) z)9DE#7N6cDz#;*-|6jttFi%sUekCv;|x&gdiIPASylXiWgx>CQ!r zSK9_zv?3+^)-SxedUxa~P5(c2=e8TiaYa#xkwuD50viS#5sJZ!@wk;li=yZ?J^koT;k!>SWk7aOb^T|i{c38P(QVI%wsH`7Y225anX z4CgL^^vjjmAb54jbcCOs$ougzL6hG({qK8k8#sPr*#;0pE|V|T1K1x3HCszcu9W(^9g~ag-LgB!9(0LmziCEH&a7hUszjD`J@BgK{VE zT1;Ftqq8;!U;Y9@XcNl_hynA*@hO#f*mF>Z#ib<$pu}{Ivbiv5!5mq_SDAv>HFeY?nFPssa=) zj9LN>-J_9`&=}_JSGy8$dK9HZi7$hoeQSX_qX96?03(8w3lDI36p087gJ9P7NGZw5 zt5mdDlwu?)CC?g7yO61fbyI; zm()`I*~kA2#@TxSkH(S>>X7;Uhxo>!;E;=LAq$OUadhWz>U(!6D{HMSEKpyiwtvxM)@l!a)N)BUBRE3xoDbs)iB1i2wNR$8@ zVWhGw&*1{@^r1YTRUZP0I312TtE-_$t&up>L|y1)={`P4L3K(;M~!+F3W6!ZQ*GKq z{bvG-7-|*(1`G$Lxg^1j^w6IQfsg7y`eXV5OM3v4ipnkp7l}EV*;4X>T9vI9vnyGy zNCqw$q)&61jficf3tnxWgN4W{`xSipdPSaLVuYLjtfR>DIrjjxepEBDO+D#b9!TNr z1v5~ix3W}}R*WD6v((yFQHAX|X0Ga_G1|;S?hL!?h7|Ndifv0N2cWuDF+t@iY1h^^ zp>yg2A=c1WjDXYm>&pvlNs^$5Ofizkywz#GUWw0lzZ0!3ef;$9`mMs%%}03ck#~WroV+F!4Rq_jylOJL zqsUqXskeMp{{1a+1NF&K4tw|Lhy2QFRE(PXBglLoSPMW+st6ge<_U+qJ5|NF1fl|B z>4gOIQG}B>XSTv}b{m296D5`-u_Prz%84_ri>JJ!pmeRxmyrjz{#$i(?a%w51&)?% z=kAzqmt~F*%%dGh$`RcKhr^apIe|MF(7MT^ZAVHnLQgUSjrL|I5jog=my|?+Bsb5L z>iQ)}Uv}%4!BI=ebXuz~I5-T#MfjtiAFqB)4~G-eX)f4%sAl11jswzB=aP>E@*mX) zSi(6JLzgf#ZHd||ZL|p4R-rFd<~drGf5nkj0Z&&JM;(=E6gG56zW^;MMvxJv07kb} zrTa|!>bvh&_UQAet^ZKf-T&LGtD|Pe7eC|ie-J48pPk$U*;3xv*k?D~sz6vVu!Ii7 zS#}{~nGq_TYIBGT5&(`F9jqpzPyM1U8sR%ATvxd0DY;&Hg_-y_k}uruA{Z7>0KG`^ zW7l{UVnhyZ8c}Q|8S)yJsh&iTumSA2<0E%;YNdymBh->` z?>rnFm)hSh4M)3@LzX&wnR9XiRpjad0C^XPD-W+`Hz^8S37cUJYhn6+D&KA%(>}8!q3nmMowDVAq z=|0??5tqH8>bI=Va%Yu&R3Fjy5eGWIy>kk~B?H5&3!*@lUECy=@{lXaNp_gTH_0aV z?2kWu`>prUA3qcp;RHT&FGs!X5?lZ7{xi9KM!J2QA0_-8WCxoK>bYM6SVDka<3+S2 zt?@^l%>f(o&04GA`IIwkuic@?tzQQ{VYO8=G$9b7yWQ45HXBSf+P(yU7P$m7R=r_s z=JLy<+YI+=?_FN~>uMf0fR;?ol|lz>NS zDWnLE;L89;y)<@t&o{=-Uo!ntGNBMlAmr$-S>%YI+fVwsQp=HXb%f&NPt3U=pFrhC zMoa>NG_!+FvkU;UM48v9Q~^?zNWUe`r@U|w6LQ(++>&gD^Y-lj_U50hYRfRVHjmb} z!e)4^8aTtlARAJINmThm0zMvnWOi zBHhxFDq-+>5pQdLFVo%sMw=?jpq`{X%k$V_3!%4CslPDm!)7s8E}Pn9q%{|jz#x<1 z$RnK71Km~k=*VwGzhDINKZoQ;%U%nuye(^eB|tgj zERXMX%AU}n<zSQ&m2jiwGA_4A^?X-yBOs!5<3Bt8;n3&-MeGy~)$_x1M zQHqozxt)ntz4hF7HPWRQ(;#Y9gatmYKtsZ<>RI3}OjKiIF|Q&nsE;t)`cM-Vav1;| zoeg*Splgm8+NRIdY?DqitN8KHVw2`r4_t+Qekb7EGSVV;Q!69XU6`6{kBeByu3rWc)H?%d_mX0*19A_&i#fHZCI(gB6A|nGGyBcMt z;(T0^IZBJP38}x+#Oj(^8L7(CK{}MAx`3<&TN>HWS^gjpN%#G2kOa7)fspqLPO!!U zOl-n#G_G(Ko51Lmd1uG3J*%097Iqi!J(Waz|MAZFnPX=H^W4Q=dLo&Mtt--5qc6c#nr7iGck> zl=$ddfQo;bx*q8?jF;Z}x_62C^oe;6F%VKYHkmz=dBF=#J0PB4p1;22-NNzHHOX=4 zKCDV`?+oU;y5R)gy97dg1`v~ijdeN@%LQS;lPTI%)e3yoA|>l>7Px?tGXZJt3<*Y8k{4~`90Lh=gZz)Umt+Bm63sZB^}*;c4R66xqCFChEm2P=7Ubvl_YJj zC8xpO)pH`8=`atuaYsA|=}bHVi%#iVWa4b4C8;>fKmw~$oO-ePWI$jcm8HKHg3Np- z%vb^nRUFkv*D8`!%%1h79P()Qw4o(DU;wxXXj$6k{uJy9V~FE9&wS4w$GLs?zK_g? zUPyZ?{pb3I;~oUoPKjGsrkY!9uB?Yvr4nJ3%J8HFcA3ae-dwv<-c6L)abzlkZYt`* z-TjX{6mcy|d96gAl%UFod27%F;#7+5&XN#Voz-}O%kPV3SzZz!-2LxdcXc@W-7e{a z^qgn^pV<9>?AibJ@;?9o0RR8Yy$6>j$#tGtrpvV(18)Wc$H9;QB#_W*u{`?!zhIZ= z$Z+?N5GmnEz?kkXZ}dFx87Jh9K+CA8%*covH?E5tCe63A^(Di>{@xOIceY;} zDcIh=+1k3fx!K;@+S%E8w7c`@(eCc<&dxS*+hPJIa+0;P0~lFbW;Sxs0FnR(A1Do? zzD;~G0ZHy{5W%gGU=kS913{9x*c>d{-oC!Rxw^c%zP!G^GTvNY7Y#=NWNv$F2lBSU z2bX}{+!zIsA6weGCV=Gf`sxBal!9tSK&Sz7@4fd#yS0U+IPUC#mBgfTYwP_Ve~|JA z4iYiL#nt6ZdbTC0kt2?vYffk=fQ^J~DTO@3*7XWddc)F!7fhqUg*@6Y2EEweG{|f` zWL$G3XW&TviDcy6T+PyC&?IsiW%G1)b}^IVd^&5LoSrn^0eHjZ_Kt;-&&|%>&ZB)S z6}?|yUZCc5y+?a{9_dY?Q(Y&6PNo??g2dfj zuv}eTUtL{+Gkr`{Tw=zwu?1DZZ&64h6Yk)Y2owP$5@g3(7w5^^raK^+>+|!g^YhEI z0AF6BW|@_EjCNN_fku85C1)6l#aj_~Qax0?SC<=$rT(gXIE3B9eIf#XT~t%pY$<`G z>zhlu+tu~i#T9Xl@XhJ7;|(SEA$K1QYs4$8N=IgM;C)qOFYe{eqrrPbC66ThN61mT zLPzY>5ArAzjiaI+bd65q8Py4Oz0|Z~x*XzmxFipil4!WPKzVoBS4Rn&CkFFq_wnOH zVly8<*>B?OJwhVQJ$ht!iT?@3GOVk?uJ;cQ4h}HuM=}Tp>JSsMCsN_j-tNKUz5V@1 znAzp|m4<2wwo2!}q0c_rhZ8GCco}_kHQT$p_7?=Wb!|sJKR>^?z&7#1jw=e+E?^h4 zZv}Ll{s&T1-gN^R=k$TgYX%BOJj#*}J2amRhca0~l+Z#x%_IlU z2<!ayg0i=Up5UJH#e=0Z$T{3M%UNpAO*}KxUu=G%bS}kTL@w*L3!+n z78600CiFHa9xnFw9J?V#1BkrCk`xA*YKGFKiZFKt7KC8YKWzd&VYz@9KrhbiM6X^R z6G_k)3jiStH`tia19Q`-x#WBJe|)WUa!4`kToa@d8sN^OkH!wtHwbO>h7N= z!}m+>=io)wnb_R=lC;EcIRtRjyUu|4X3}#-Ne`l*W^4*i?J{Mr-YZsXg(0EVtxC`e zVL1F=Od%sA1=LJV?Tid`=3~mEL@E>){mGy^ZOUfIHYmH%IKWYp)Km=0J+K@U{@+mf4PDcCwB4JGZ$k;sF6k(RuLvQ*6l z4$9u0G}ziWZAD`7N-;W_8qEb13KWJXHB7<_1w*m_QVX*55y_T60SHa@QY2!?p~x%{ z$V|M+9L^wMaTL3Iw~R;PkQ?%xLnN2qc=|ZmTRVG;N}91bKEHYZkHr<#a!d^rFN2Dl ze}M>+7z&{nW)WM8VnTpBSI3#-w`YhL139pywJ=OdGobDyAnm3V+sf7EfGm5VkgYlo zCTDX4VPpzkN=Eu1hk39U^y|y>Yo?&_-j-~FRE%JoA|#~o3Z34BgF@+@i-oyd+saYHjXX|qR?(?2L5z<^K7;1W(S5;Y;OwFHMhqQ<|-jf&=E>2-nh z7W`s4d3nA>E)S39Lh^gxw|E8=y6BWVER(ndSc&Oskg#pPxM3}yNpIF-N=9KRdw?)> z5(a3V@$&TU9?^pTb%__p$1hHf_x9){?R&EaMf_?2XWO{vsyu3m)0u6+E{Z*(6L*15F3!*FYg9RSyib&`H-=X) zPl#)fPW;%qB9pc>WZ5Q8T4w@&rj)~0Km`_lgt2_D95d8cI!FWkvV)Bxz&jdI8J*Hc z4paL`1CEqN`Xew1k|skI#%9V80%J3=MWF=Uftrfcj7ix%-d&4ri4)LXZ{!FR~6LeZ%y+ zY@})Le(w4nz_RZG&xr$2A zXhgJ{N;5oq8{jMK{_pM_zdYSwxtF>;yCkw#PKSzp+0md~dJ-@^sNmiJwry{Sm!QP1 zL2zoZi)C}y4TB^P*3M4O-F#;T3j4VQ>%_sCmG-OT**zCUB(7!jt{yi4*#Gx7tTwKt z17;5ZAV#ZM(FAC=@dTElzL<3jsDW);FUqREY%N_n8%E#(A>j7Iglfs0OwZ&IBArXI zo$HQ20zou%*z?nK76x9z8|$a2l6xKE%&i)30_-2|=?9#I%Av+U1O7{u77($SAj*Xy zmwJ?KStGb6MpA$WmhHG6Y$dU0}mc6#j6nyvq3 z_y6S8X0c6Cy=$v~spHY%K9MS+jC1(TKvNlrEoIP7RD&eSkSfS*&#WR)bcsckG}o5T zo+Us- zUO^@Gkz)?UTvDm1EJ9~<3Sx7_nbpi(&vM%mzgt?d!Co&_q=1V7EVYsM=d~& z%t1N5GBOACRLHoF9Hb&)BmZdwl}V2U(=@8Q)`@;?bOwtPfD-*w%dF)&m8=l{W9bVK z6VDsYzxd7n(Nd;(#EIFw!zW|Ez8#F5sB-JzXz%#=ctcpSA0IJcIE>wH^b35Ezs-?W z9t3;yJ%DBR|G};Q1z{;svbQOU($tBf<=@jV;s`$#nuFW6yVWrd|DzDd7Jx$QdYY{^ zzlI{BwaOdvB@1O~EFCDleVliyeLlC$Nki+8vYFvuOJcBvjEo$T-*L3M3TUIu6dMJu4Q9Ye@-_fx7E zQ=)=M2eENOf_j<KqITZo^sK6Z#r&8)5O0YK(?Jj@-9+^w0hD;dx z-~<~4wF#14Zj^C@adgm70|?McmpDSYg5p*KMMt7GA3UKaq=-9;Yl5UCOKixM{BRRX zR@aer$qQXIfWU+vD#)i!4fc1KAox%$J7DTUUAvs;c~EW!Ub~&?uJ=HSuOP(k*%Uvg260Q-9c<81{~mO1h&{h zI669D5uJ)kRQc)t6zLR}`XYM-rICh1gsl=wrN~QJ+KnOvr2@l;I7VDjcjmgZXrnWP z*okp#>nt~Pkl=VUoDGiGmHy6twJv80oK>4^P0(SR=)VqdVk zG>X@#Omge4ma3E^o)A(IR{G0v>j&TXCZ)t5QG{u1QSkeQ~T0IV7QePypkX|GwcySKxN=lNt zJ;^trE*oCy8>#5Yg|wWS$oQv0B+<;lWgAZxo1vp@z&x`xW2Bz*kB zqHfrtieV1D_|^oq&_JIcp{NEVC+I_&2D~_pkHD5t8lY6~p23GhyA!s`JpgjW9F0U( za0foG_0$O#4?~a)(GW!rr@Q+H2i)6W>*0Ev2X~zZZR47EnXIV$-97ILxc|7XRAd|i z(yMjCu&??Q3sh99y$4WcbCln`{mnK&%!J1SH{J^60JGlu|NOI;D-0%i$c)It+>O|j zg77|sOh$HWerA+n{SP0vx5*%NLD+4i=wQkFvWX2gY9gxEFKbDo7sW(~a)u@$)uA-K zEWiT~YK%}-ReCJc0b~!%?9+J|Tv4dT!3k10ihh;AsuNwDj=LS)0{|XV41nx%KcAd5 zZsOq4X4qyeK+YEiZV?ye)#oP{$EOcQHnm4QKI63!rjHdqD=SFC60jD86C=f4IM;)> zmU2Ujmu$Sr1}Mu-?(5`579PVnKV^w<)sB=|sWqLUdbbsJn1S=aybsG$i!KAZV0QaI zOACQ{*rX5s$CeSf{UVZ=7#3r8aJoiV#Ds=&bRGmJ3_wsQ?%Bs(d!$D|8GnRsKxfmC zAw|tbWmFt0b+r_xS%9Y+-R$l& zKOXX8>;KN~zs<}bj}Hajad;?uzB~U+|#80EMjWrUu)L>?yL(SwkBU(}r4?{2#6ZH@&n>T|H0xC+S zH`X}H(hzY3i4|1QDu^(F5@Cv-9FqjR1C;UpK}IF=Kp16dpChQ3>PB5RuF6bGSrt7C zMs<*gF=Zk&QBg^$6vzU3Hj&_Uzy%x9iDu1Kq>)9dNLZwy{{^m9>br8zDtr zbX~K|&m02-S@@+^1;{xxsl`;cq&Ue*mMDyL-`HJCvB5Mx_=zYz3=RjO={Upg%gAU= zp1N%Obdm zEyflzNE0G!b2g|X%^@U-W(iW^Y)A=5%9=Rx9&ttE@IhjpeNdk=t69(1(uky5m=VhS zkdYQ)ghtbC?YTvfte~<73m-eALot>u!)j1ddM9Y5i7c6jcS`^FU$XUoXZN26|4(1? zAnWF-VU>wYn7P@-)Qj9l?1NzCBuql|pVDj!yZW%Or$CHrOwPee^CR18>EC2UQ~F4z z4MXhpErAm>VI-F8#SWwxvY#K@PoX zHp5KKsxmP>{9quoPra@o78uH<)cH4aU6(Lig4vRqXr{a5I~PWX*u)ni^#42@{MDI?egQh9!U*8-bzpQ0L!Qd7-s1={5!FNFb zq)~MAg8(Teu%0MccaBq{*p=Pe-op*pgFPe@`GAI=8I(|> zPgQTBOm#>e?p{YVRKuADsi5J2V(6k2MP34midbcYq#&R!=1md=bD(#}iv3*msVJ!B zykh7G(QBXT5k0XNoOq!SHi6xL_7FGMNkQbz_rBX3IW29n^1@fjOT4s-9#H}6f;e0(&|G{&|DowsLUw2Q+@(?nY5g#TNW2-c&pqWj* z>FVe+>6T(LXnir(n1DhWf?7^W4!~JHv88qotuiVs60*hwKKcApQ3yCJFI~$CB7Gth z*M2yrQn9p?B~5h=-P-!uQJz`d^^>Q>t*6h@gv44pjbUDBKxr#=rj6A%0q$Py;r<7| z`UUYvzy8Jde*QD!cmLw&-~EffXj|)J=@O$snrH0gyk^-E4lPcAd>P4zu4}_14R1tt zg(dmvq8=l750+-y#L<1a1n_VMUoXdTwzXt-Lua`pasM6wF9Ez^_rG=TA)YAF3=iDp zSp#f|-APp?ZIZ3m<#Q#z?S=TQf}_StT^-_~ZnpS}h;J7hACstx$<$MH{@?^fmz|no zRA5-LrIo5_JhncFV4EBo6*VDh5}}hbj)DVxRA zr2(~@%M!qD<{W-BTH9x%-yLE59nJV!!@(X7on7^puU_%Y7Y`&mCCi9^c_~^qKB32l z$9J3%WXID_d@&%gam;_}r00`%(m)>~uE=i4Ym=;N`H zNY1sAG{8OsBro*Mt_OTnyx>C{Ec@9s%3LkdJ3D>&ZffiBM$o1*HrcJQDe)F9F9B2= zWLEFdPKGB^ol!;M98^&>#hI&CnL|-^ii`1;4rT;)KXK_jr9Wn*F3F}~I7V@zC1T8m zN9KoFXri={e#)rNROa&Zib$i~{Xf_p9|Dq{g$FMl2+Qt&%TCX4_v=}M+ft>?X^ksD zEzKzdCX+cFi+MI*Am)Nw1)4WK6I2Y|C3xaLe%=bBO0iR2EE?P}hRjREBdSSM z>0~abhYT4S87#4mgG07V%tH>jO(Sj+mWHp%x zW297*vL=L?@EOxoVC{|oM*s>w{mi+rzHZhCq|gNWR8^mgG#BaHe)=Q&LVgmondI3R zA#GYR$&2s@=Fz#*HE8|ezE(Vt*2LQ!G5a@wX@+n+!)EtCA|aa&5G#bg(ydhqUMWsW zQWiUFVT3j9e6Tq16vdL&)9CW6=q5XkFKOGvPFG0bm4>qKMs(LXk zaO=>B1*il{$Eb)eN>wi%cWXzSqbsW74-;UF)&_=HENE$4zGO{GL?YdWw#X4g`6uZW z|GGcZgL0E82q}XK(n>k4E9XFjACp0&Q_^1%vvzH}caGiqUoyA%kM748M~6Iuu)y3- zC=v-spk*y|-p^K{3HYXw(rLR9V~EuW1FMV;RP>HO`@ea2Brq`CI%Rg}K!UwSJ@A}H z(TRYHe`W>BYx_|toAjj)LbFMAB^f#D#}Hs^^~f_QO^lY-W%ts*`M>@{^LiU#^qo8$ zFgVO7CELByl!9T~#a_3)eTqXrJ1aThQC3@9&)<3WN#DFG{b>q4+Zc&ls)p; z{cq~Y4}N$D3?kmV^}oPJT2jY9Lc|u_P|3@7T&o)eu3<*Pv!1pC57;~2Ssf_S@L1Mj z;@YwuI;s>ylD!)Gt*%l(sI6jxL-2*XF(e5EJw{6#f}q5tIhsib$)Q4)jN|~U@y2|q zt_tjinF<3oD^g@b8PCX7AU?cl2l3&GI9Lb}JJt1Xq(-}(Oa?=H3HD%z0U^1oF~U~5 zpOPb&tRaXb2)zyP|JR*>J6r$Ib9d`sYlsI9v(*Uvk&DE_fd>U4oY9SFb)nfHnP~vg zq}o(M9l0{ASIf2`iisx^jcQGqPyb(#(qO9t-pba;1e+MgfekR4)Sd{Pjy0X53R8ch zf9r}-)UAm(=5qm(3k{62Ei<$WDQ|Z;$T{Xv6R4t0~6WGF?lJ8 zge=dn+KPb0^1yJ#_hx;RRna9ZR!^U@meNC1pPhxJ$r72H|l@V8%=Q(Z|0a4H#{V z5LdtWK)PXWIfVCgI_DM6@9e57v+66E5+YeCwkR^+;^W6`N-UjqG&F$6C{k3ZEHQBy zj>ROZaBD?rZ8(=U2kQ}p4G-nAf0Fr+u5uMNpZ!^7Rv@T-`-eYh_LR^HXqB9Tl6nc! z&aWZTj~_@YD(YbA8%SPa8k;Z+x3>Pri_ib?$)|t#M--s1K3}Qm!G#mI32adW)|x@eecwTX0N^~kswQ7D@hhGfdMk6UDWt3f)mnE)3u+@GyxjKqzd2`jx%mj)nN_4jKjHsO}F5AlS%!YwM3MKmVUEKL^Rsq&SB~ zG?8PNiV9LFhQOI+BA298o5xKU+PIxfzXA*j>_ds#iS9yDTg61^?7oWRrd!h(tk4c^ z3BTh_>9+UTvhbMg133|<0uo4lQ8`UbqiGMLot0j97Vd+O|8glV<&rzw5UK3Q7=)Q< zfHQ~8O}jK_oZ;PYVR}R!xs^G6gfKpx!Gr_e(LT-s5PTvZkUZv*XFn%` zQ*()^=oCN3tH<^}dYG@*j?9%wB~Xs7kUHcOLQj((Db*{Hn>>(l3!QJ6aAcGSFnhb# zzLS;D>XC`rLBDho;@7~h?rMix>rj>kDwo-%V_oEh?SSO`?3{@*w>Mboy?VvO;tYo$vsY22x^~Mi zbL2={u;@QS5#@pyTc6X&&@qm=g_9xl>+KDK<=~`LQ?sQ}m91ocoWeWmBZrK5F6a78 zQW?K}4{nD2M+XbpJ2#vB#mpw)II~~Q@?H~iG&NuhjIXaw9)7}WpXtJ$GkE!R=tU%& zZr%p45JxB+u|!mR8Ps+rI5xhsBd!>9kbNkgaei6HGT^ADb!!Flk=o zxy#-GcN8L^^dGq3wpqSZ7?IkXU5jZ`pZc_~WDkgTUCx0{r{7+u@T)=GqtaumQ7OU% z!iQ=*yiMnI_)byvB6;tP{zg-Zp7%;st~UUH@d(mPVBrwB)DIr(mU2q` zP)WW=M3zm;P!L9>NPxSW((>l?|AJP43f*hYCaCHC7jhl|+IMJQ%#z zA%iNtCvE1?=GU130XZbys=+}=%h^L;0>DU?oG(mhv2P3-;zMDx`=3%e4V{6`yTA@+ z!kvOFOL8G2@I81*jgg%~<(h~cYK@6lR%9=|#4NTExRNh0U>+F(yKbZzanLe) z*Xl!*E;qXvdNI5)H3cl4X#pC>3O~Igr6~t20FWxdQwptX2En3@_9w-hYx}@PE}KI) z{qJo3Z;BsEeTwlhGQ8$C02*nfu&H8{UIIeHFG+m*ks6NkCox2fP&Y;hxV%*~1I24j zy%|Yi?M2OC7z2SUGe%lfL93L7NHYzC#37wpXmngP7pO=0T3^0S4r`cS{>}fn?EWwL z4o1uec>6*24JXG=)$C#t=>E_$=4HgNfH~;Z&4u>2wavuMYPqLB3|JEwOx$_)pV0wy z!oMagyZ`ipy~EvifA%49fo1o9Nk6#b5O1%v7BGdH&IQR#EwE~e)OplpQh5~7W{`L;*B?Np{w*l&8 zid3$pK1^}MTdpi~z4hOE%kit-31H&7VE9sr`w#w8o!$Qhi9ANS&53lB4?=W^@Mw8> zh0k)Xb`@oehxB@A9+;`npolslNL_0MCvX`u$S^OXfQqiKR^MXCSV-%JLYl~BGeVvv z>Lyh@MZM+;8agClgsM%O+1}z;?eZEzKZz-TT?E+C=F*l;N@s|Ocp?{AabDxGtyNgm z?)}q}=aDc85Ig#e-xc4mHsz8=0&E4sz)F#0BU5^o2^B|3>}-9s0$CY=>;kz%W_?2N za7thH_xzjyWS`_8aKK47Te^wqJ65&6F5sjG%Qe7(EVAzI8gH@wLV zCU;H`_lWD~U3w3|#%HJxL^2(Td>C;KN%cS4M#La_5m(g#0u2K%M1-u6&PrWLDrmEm zBlQu2(2X*n%`yjz9m2R3@b4~8HX&M%Cos! zY;XVYhurR9yJ8?K$~#AJsR36L1POK&;yEpcB8^oxMJREEd${0<-T$=cfkz}c{=@J8 z=^y^#zY_oP_y6?r*dHfbLKq#xA5Doba$7J@$Z(N9WlpG&L_?fzy=CQ(>1CF|3r83s zVglQc{g}Vvb|t=;?D3g5<+dy{1#2hPTC-!H-072D3lHWIN;@kGR%%7+aWs%NpmI2N zw@M6Tz=mvsDlA_dpZ)2d|IkG=N9(!7cF+V6t+4v$Asa6f-e%%4VLj96a#_pi>V=C!{+S;C z2l);gE`N@QYj$>BoiSt@H829A*6aENrINSfrB|fC1H-m#ZUDtBse&-5g+$(a{1nSz zVUxMq#u${5dRjs?KHDZ+STBdXn_j>Jz+vh%!VkjZ&pyZYGd^e@u@F_?eqy8g=xL3E zL#VZ~-6~H43P#&pUOT1!Jo~nvfAXpArq>=(d2K7vP&`MMcyLj}6It(?lR z_8b%Go*yOoTeP&}YFi5!YGafy{|Z_wKf z>gv05>`u1~WIl?f92e|!RGZpFkwd25tM{vI3@-%MKlZ6urNa^*=(1ylP=CV6{r0!=Nhz%#qS)HQ&9zaL2euN%? zYMSJ1%i$zbAC2M@JQ7@A7Qv(t?pCnkrepb1=*1?~*iuDc|jYCft0Q`4i>^GJi$ z7h1rh$8{CYr<>eR=c79AknQaGd&TZe=kSb`+pj9`dum{;Y+cO5nEk8L!;Q`?Lf5QF)19#BOT!>j zp7Tq*%=p=wSB7&hMArc?(2vZb3|w+{Qe+e5QC}@dQ+sJL{o+uzn`j;Cv-FC?p&cz2 zSa+<{El8a&l46>|R7{eRFHwNopLJ6iXe-ooJldwgsj|pNcxu(+z)#B@)KA({Gg%1$ zK~hKw&j9D$CZCXv`a~^~VV~|P*28OpItkRr=h66SJ%4K%hX61_TkqO{6@(lc(#*WL zcfM1)JpRv<&FHG(@cH4{)^IEmDVK(x>@o@V!$GA1A{jUes3+!m-$lXw<|oz%&JOcG0wF6?H2ao!mN5J0uqcI79b1 zNuTBsi3R~V6(3-De%kGb?$c!85le^^jAkSTnl~X7**HPW$UCk31VhZMD5Q`e3Zu}3 zP?9Tc1;kX>G|l&DFxwiIr-o30;P{43e|8E^4yM(W%G*co0g%BGbcyTo7+7X&kq|{t zTL2X|gZ8EegfU5M;L7UBoOzz1yO-bm=x5*j#n0aR*-zg4*-xK-@S~?c{1KnTZIOEv zGoTm;?2LspbxWVcn0;KwAq)o8uWVZ^@7iX99YAXx z#htUI91JyUOKVhd>C2_4f>woR5Vi-XH&th8gS8t*0t%KAAggHeq<+Oz2?ZcH?O}v? z7L8$p#F4pJV$!ous*yl1oQ6EGw#5)pS&(DZ2{`yrb_t&6BvT3@Q#&7}oZhhYzX3|> ztKA8>gXGPZ4?g(6?EY7n8w@bAS?D1xCV)UyRSO{}BEfn}b^l@nawP-yUtnjtTUtW3|( zx+8eyGl62j)`6>%rY&iH3DTXvfO<2)MjVgG2!B>mHZ}-)eNk*?h)yyWRI=BWTg&&Y z8=c8Jr|{I89=ErcJ6B)a=d11UX&RQjOsXjdF~@lpC%`y0Br8pBj*n?JGi|54afgE( z*)kgPx{SRW?s81+7LjE3&W9QDJA7%c2R=&l)4%-H$Y2M|8w^7-QA`AxodKm8nMSPQ zrk2uDWHTtv)aw>g08++x^G-@nPVkCv={m-ruv#C=a z7d<^~NiW!%XI?UBKty>;aLC<^o!S}B1WI|nB zfz}m=5ZS3~9a`qzRFQWTz!@Zh5c&!i3vJZECDVdrd)PnRYzVw=XkLIxl=3A9TAJo` zc6{nZd!NnA6&ju($w|K40R}DMj!K%B=|M475W10$i<)>p&JW$suH0OLfkKDK`K<`khlR0LNh(OMv#1yviQZ}!H@sE z{j>jVV26hy{~Qrp(LO8us87C-BeJp|X9L0qA#)qRT@~k*cwG~{LjX+V8aHtB{*z~@ zqze)-)3K(6Y9STbMsSF?Eh+?_j%FxO2{JK-5Q_{#UzIce)EO{fzFk>gY7iKZvPk*}U zlWVXAvkloutBeaS6O_8%gTi!xtYI9nnnPwpW!=Erof?|6;3d%(mrhO&0pn=m)=})6 zFqS}@jLnCD-hTIgRr}U^0DTF7QvHA%2U;O4FkL`ta?Mqk(jB;uoXu9pNSS4g$JPJ> zVM*fy%ezh{D$I>s;oOCULZdn&i&f}1BG(ORLv&?7vW~NP7W@ZVPOYA(!k+ zaun31n@*o=$b(!raH$9tJhzWOb53h-00ym>+k_xAYI#I(N%^u+xE@8$VKjQDNbD=Doe6$NNv7KYq%a{m*>0pMd_Ct$&f`XV3~Li?b9x7DgPQz&O@}~TFv7S3L*Vk@PZ11YAfi` zwL5l@X+d$N1B0LT(`BbJQrkWoHa9v|t)g~(vOl`7O)6RAfL%9*%-8u%FQxa3-X;et zeDP%57X*H@`=83|+5dvgJvkz-A>N0_d06&98&}92DZw44rUh`soR+=C^kp|1F__VL z5VY#RT@YE)`-q&l!IX&b)2)Uy(Nhp(az6f#t$`@F%oHi1+8s1VMD>!cW49qE-OEEz zNg+`@5q^k+Xi7DCamGuSm?|#XP+lt=I<&7+1DPs`Sc|nXqtHg^gtS$}gTc;qvCp=p z!~oHAgm@UzmMnGPqH3iY>XaP$TDVV2DmUqch;SWYNH!sP(oX;esZz0MJ(v)H^uXiVF84}cKw=H9-Rr>!mS0rWON3p+7T zi!+d~UgWiWZtZ{XJMaALN94pe`79eHk*8EccQ_ruln(irGQa`5|4nm@0=#;UP3oWg zh`1Ept?9FoqJ4Vr>-InU_kaD1zy0lB{O+%b0AME^Ly7af6+(*ES0nw?U;T>sK*2*< zJgGr8Ki*5Um(b%dFB#E0@n)yin4kk6?+56AG(G}{xiJKTOn;XTJRUuM+z$aEBAP(^ z+``BH-1xt+(YM_FFV#H$-$ai*(y{yP@4aDvK?|LsTmSQ_s!tzmmc3=VAioIA1qE8` zD0hs^xHxUbGV~EE2NE@kAtqIuvFdOmCIpYE=Mcn{2Ea49$N21K@=n3`$k5Qcp zRA|f40ABS1nvE_Zr6P`ws+}~K$`qxNGY+-lRYJ4~2p3`-A++Q`?$8AzN&yNzAj2fs zX5Ce5WQjsRsGam82fnjOUeM>@MgBZb?lg>b2m&*b5NS|w3@hblv>xSJbd`8U!VC?t&L~A&ghp>s&v%EM|Q zBb`GBu9WimFBL}|eJ_@1Av0kZJLmJeUU-Dg=uPW3#_M++i4Ie$!ibs}!Aho>#dW(Q z`~S@9oY;+%Wtmpx)<7m#dDjgIX3jR7gUB>5!y^xV8){t`Kk-{X{$MRptfeBt7Mc*T zk9KYD0W|-0$AA92{{$23QUwNcnJ17xjK0j$Hqxp<%o+6}W7Fg)YUr*puXsYF1q&u* zXoz`ubbS)Hq2#Sx>$TT3=yYeNM|5dpX(e(B90UY$)Na~KRkdi$5=h}Wwd<|t&;HZj z{l|a$|9=1Eh!^>F3+wMDsgaFRsAk3gZGlhz)04jbh-u<{6?ycO&Y`~iuj+D#&HWS> zx6UW?^j4;ubi7=e$?*EkcbpLXv7dQ&{353piWX33Azxy9@5x&Wu~ z5Yn_u{avb61&Y_HoL72DLuOUD_xR}W`LlPPJ$rVrf5_ZJta<3!(FjB|2O)|`jP!RYKt7ga z?Uc(N03uO!@4oYF>*%p@hCXRMuQunSXAj@R0;1YHc+8h&9HgNQo6LCUCM)-5%tRIu zqLMO1IkPguJB+A8RWl{HY5Z2oE#lXN@;eG;U0fhEMEJQ@z18pl;PfEE07)t;aY1g> z5Xe{B3$c`{O?x7!Y{&$ImrFUlWps^$B`^i$&X&382n!gJ042{Qym~plx65r6kYY0o zQI8)VF8ltF@#M)9mi9JqFO&eX*%w|H^3|w05%FW4M224&iNRR?a{ew z_7JP;WC<>;OStxf1KM520SwlCMJ!F#=DrpjGGe$}kyjhs*g#h3-8)*ot%7lnFJfm0 zpV>JSMD-|!#$qBo*Wk+pI`zT{*NGie+Ak&@1a|94G>|8M9JJdxNGE)dcxWK$k;>|w;Kwlb2 zc<`UFdiIBW&CjuAGn8wlm^|*@={7xw-|gV3w``_cUzf|F>njpm=Q1lUdk8pXy5dt= z*)q;jF!DxP7zrYyWlfeCDXFt|DNv1uEXdFRiPTe|TDQ@hqG@+?)Chg9Zyf{q_s>gT zFya_yLs^tK+Kq0>P}w8oq75Xc^u^?~AM!$mOyu87W2;*(Sb9A)OLm2(Thq4$ur1Q6 z<^#rb={h5rhHDudNVG32<)7-Mm1Ap0AZ=W6QH{_Oq(}}2Ff5Ceu}emo3=Ag9tsLhSyx8utJmfABrh zHGXW&C>PU*Ol>UHTk*TU{8)QUOX{qToGy7!WEEAjq&FJC_J_~8Qci`)aK zN}H*VeNFiJZ+`vuTmK7=o!OzGA1>jV`CFE3@jDsD+5_^~!1$(?9f1lN#8R=nPSf^T z&Z`TktYsqY=kGt`0Rl9R51?JP{@<|se|CAgJo^u@K4S^D#klu_A1ozH0vEk_`#W3z z^cn(?b}m@uFS3L%E@8#td;ZY92CIt@*q*Mz#;R-E8gjaeYz{%CMmk_hL~g})JHx{?L>mhgZ)kD4?^H;_ zVUVMS?;QX$Y)kS-!mi_Go1lMW8YG-BR0wl2tDF-1ps2ou5R6jgALGz+GQ+etc zLW$PE7a5th;8_V84I^tIbLP$>&m(W7oFrgSS|yef->YHH?h>jXOvKDBm&hk8_zk>av28U+ zyi;2Ux~%InF+f3uDvhD1gt(R58wvJ?@FP9Uw55mR3VV`~;SE1ZmRH96Ve}B3($ll^ zF+S=-@B%y6w|`OY@Bi-qhQb9Y{&w1#ElNVVb14*6bc_-z{~l43PME1U*(pMM)TA`( zvW~w7;FpUGYA7lWRF)jts>q}=&I%Ec;D4wb6e&tWDWojzl9NXwvSF7QQ3eIQD3wSr z+%*A%NraO-W%n*oMg@X6NT6aA?V5rSq`F|<=S$-5d@He9OAMwTGP#HHO&Onj@~0N} zHh}!iL7mB7pSe-c0ELMNvlkJ0l9tRKO%h;*4t3f8B*&}-t5Ybow++kcGp5UN;2P+_ zMi$mJAQu9Xi41a7Ao&0^2j8E+@C9ssA(M6QxJkA&5IfLl+~uz!)re|iMnk*cV>rGiUPfHOEK;j~)p@MO8O6 zRmEZ8++tNxNEgS0?bRZCq$eV7cK?-chlkG2RhRT~^e>mDXGl&8TT~J}22W|?V!*52 z+K*(KDcUDbpFes04D8U>Tu(OVgs^e68R~^`rzkyEpiC}tsW{f`b7l4GiWl(4&;RtP z)Dy06PF}ru_3}lpPLE$*o}UaE#S4fzO^3Ktg33^0&ZZv@V`4hHJpOdjbjw}JR- zkN;D@>@L3taPpF0famRum?>)T&T~e=NY#uyH&4ZxM(8X~`gs|KB3MG{tY$BL0-bvR z`qnX+A{ciKj0nczIx|AO&XA4_O${vK4T;K}M8v0oK%lTzkOE>Qt5xKm6Cq%&3y}=j zj$t}=t&aM*>?{)URG_1ULuqo{Pmz6Swu3e0+~l zNMb{9@2ERYCqOXg&Mlh5koKxLnhFCKIT?T)gRCybcvQDu{Q+Tq z>H6f=85^d2nVk=`unDuQj$VBBk{LtZ1wpM^0+sn^(?3m0JwJEh>B|IO*e8l8Q3La~ z8T|tB>+v%ds)9>C@58gg5al*EWb@`eUv*&Lny)kYE3$r7CU%Fp@@<)u)3XyFFZRcR ztq@_<;N5O!E7UbV0-}tKNPc_CiDb+YIcptE@c1qbfW35UFY5%ghzTHjqB~$aoP}9XFv)P98VaFCQ}W(~^JhC4D3&)yd8k$HqS$za)OzAC`=u;G#sR*Mvbqq-aLu z7Ez7e4cKac38<1=Z=G^d73C~*!WfU^S^!AQa(Pcrz+OqfAnkyYT8fM$QQNb11d@LN z$hZ@?RyW(2=Yyw5DgU|y*1Di%@wcQ$;`Y`*yLd!3twaWcXbs)*=`kFs)@4^C3^P~c zS{D`+|(GW5EaUGc{9kfRSdz_tEWM9S~7d(M#z(rKmyibHR{h*y8&nh0KkqH z$cUfo8bsz9lnOlB(ObPiaOK3pPrsmQ|6D5>XI_$@Rh`6oiPLrCJun zAyF2EE;GmpQyn`faMz}j*3_mjVIZw_usFqsjPRQ0{m+k9zev9!?cvm&djO6)u`7?+ zMnYnbzWYsj?7IH*pZ<``sz}BXhGbzP?&6)F{Dk=KPk&0`cmML^y2^2MUc;M_n~e`9 z`9*T{{qG!p_uIsy?|!>ETkpTS{rVGf zu=NiZyZ;Q73p_NCzW@0D0&wRZKy^pyovr@`KE2xSl@T4~eGtb#033rldZwe00~cn7 z9WF8Kn(MS+v8J!YMj}7E1fe~|?hv7}$-o34!$7)+eaAjIk9HtClGjUfK}GdI*^q6G z%v20r5xL!4Fww*#W%#wL30S1E9NYpLXi-;@F$tnWXq?w@AXFP@ZCLz+6!}Xl8RJKX zrZDmmky!xD$AHq>*Kkb-spW?2?2{E9eMy~G&Xc1Oq$dGN9$ZA6F7XIu;Sxj zH!UrJ6nem>+%!Bf8}{L;8OB}aa6w+^2_>Q|_N0;yZ87KI<`TmgK{Bz8Hr>kB(Fijq zj0u@^rtC#%m%fNNEa+OIVU4w9?3H7*U*85QD?+e1sVka}ys0hzZ3cV@4{E-Cr@gWaCqe{wy$; zESN0A;cIzudid|;z@+ezefZTwTH><6xmpaqwV27#E;D<-vdF4GYbeJAaaBecbHO7! zV?2$Oas3tn7Xl&`BtiL#GLL?Z1-W?Kzs=nrbvVKXKequMeEfexdhTXLb68z2MT~T= z&z$^uB*J`{k~aelMwq5dn`@CGHBqpkP~EH=H{X->qiyx={8c8!bSrQvLTVMA>%KL> zB&GVI1x8Ng!9VuvpBw)k8py8}s3>`0hFa&%%y-=(=~ylUt9JhMkH23Uefs?AlD?DZ zNZriCqldrj$L@atDh61eGBmqw!lQ{vz_?^6i9nOh0qQfQ3p&N4*u$13PmxfQh0dh%!gg6cdPp+$9NtbdgG;Xv8HVYt>!3R!wYCm16UVFIz0|57T|6g1Aiwbsf3u%2j>FY@=9mjykSj{NEN)p$QRh5EO^oUXs z0w5F)s%{PV_uqM@oI&E?5R_B8<;!Zugq)-L=tf9oFGO&ts?am2qAY}sBmQbs7M=(5 zL!UHC7$>tm7_9@XGYS(^7*;hfI}Z8On@6kM4#C+OgDk?}i%&jF6G5&YKL+os&tJsI zEK!<~Xh~Ufe;fC$tDpROyc%48w3K1uBRvMDr4PuXI~5_MFy(u*a3wcf3K@uEb0aB1 zMN(b4Z9>T2Ts8&oceA)&XrrCY9gYV8zigHY9TdB}6la;Y%n+=rAlYuWhe3vUcJ^J* z>H^?ZpUwdoSW^|qg+w+PolC+C)wOWPYAO;;F+L*H+IehJbQW>~b!e(QOP+S2Nzf*R z)<|2a8jfd%_7Jp|cYjI#v`yAExUcy4ICn_H45?Uk(`>(&GEqS`LnEU-Z91>m<(Y9l z>v7IbE0bi%R6_K`@W`+JGBc>~tLyc!N`BP}-;08tyubO{&u$jXY{@RAuX_n#0ay}v z-6ajH?$eAY)f74{%sqhk8ToYQS%EJ#-L*og0fR(|RK<}sKqQ>?AcH&zz>H`AkPT@k zLw1D7Tq$ohIix6ZNBu*wKsx0cgNk}g1EnK(gG8XU&@_#Ufq$#1O3s$<=0%ghggkwP z8U!A~X{%M3C%8Q80!$+Wco-B3e}Tgn_1Q+}DHQ^hxY6Qg+Syj;i%)q22GyRi7I(Lu z`vc4+*m)oKnXv(?EFn8*%hhWWpXIj%kB*p6u>+`_CB7_XmJHw7V?!EaGl*i@jHn_K zdnmt2!R-gO`?I2EujmR2$>ghw%zpT`4^QG}Lfo!q5}KIG^L0C>K^fBQw+PwWS?JN8 zk!~5cMWbkzZ4~>5%aTNv0Z!o9r>>v32A0OW5IiAQMd%W{X+o*Hhg!UgY&XX>Z!kLw zAcI8j0Z(mmmJ}~z0g7Y3yaMxf>F7BVH8wiUgQ!0HVNcXb$OOM0CP8Ircvj}0b9$PO(fM>7Xr_r@{i%E@*NZpnB_TOnVAkTIRf3ynp!c zb|G~NGwuQ4!4mWqlJ13PLx_Sdy<#|udvtE6L?hCsa%m3oh@73FMBJb!XGYbeta22( zd|Q2X^dKDN3W@xZF_32yNm0{T8>N_g0F7RJ>2S4K_`Ip^GEeQE;9XEZ*fm18{^wOj z?cC$hI3I0ePV^3~y&XjM)dEKbmkcZRwOEj2tOi`==(Z$MB3&vS#ei6FOsXz?` zRMc``fMvNa+*qX5+t;Jqbb+)Pwb7t`x}p5FPjrUvB%Lx$BIqU7w1i6l_ACvCbhoHj zZ-7t81VP#eLPLzqYF9Q+Ml)uO>`_H#6ZCi{Qbmk1QC@4NTo=^}g?X}-g0!1@<#eMjilb@Il%>-bm#wYC zS9qZ5&gXzc?#S*$1qXKd&T}4&BP}(#4S-YS@{rH*fAD?PM3}SyfB4-W5}$qWq4^0< zzW>3C&t9z;O>h7tmV&qA$8nZf5W~)_v~|LO%fA2Zt^ZfAZv6=10!-p0KTP_Q-~81# zKK!up{SSZejUWHuy&rv__|2dG=MLC+~(ClYq4ImVbu|4DUF$y*6a6LSe&Cp8w%`%@7i=Z1B!~zC8U-PM( z^&BPei^B3~3xLNjPnL)#bUr*n;BYizHgmhBd+(?}m(6-zY~P6xOe>ni3VG6FX{Y6t zL>#FyibO?3s9@|mq*7rewt_~}!wFNUu3NVaiLHW97oaGrY9U4HH-Db7A2FmxD5&;5 z`i!}nB~Z?fZ~{08;M5SLB5Mf5yb^i|qH`#8G#rD)Xs$#eNku>E+N`Dx;YSgR}sO zGpQWY7R_ldPN*_n;g}dN9BbOBY>~=Vzdk>-S>KicQ3xhT36>@Sp)U3_rNMWxHbg=I zS{Mi$^x>(woIylNNlGMsDx@|L`Ztv1(gTCXn<6q#zW`F{gllAtjcQp0EI^A_9u{u) zF@_kIhSbFfOJZC@a#JpJ=WPJSwmeWGJJJvxfFJ2hJg|eEYw8f@0^Bv#=&Hb#UdI^i zS>1(1VW-i>&X+#YF}JE-wLvw4)i@?_x%7dMrhT*(RF>NS?*HfRhzAB@j&oqw&LXnl z&7|73cOE#K&5CVF|Kacd-zEKq1Oj_Q>9YG@nDC<*HWsf`MvxuC6cf3^hy56VD(6yo zB@^*fHi4;}dK4pwP=UgZI~t}TCfi6mB}9O9U$U)kr*PHKDUHe%UBgVaI(b1g8nQLQ ziltQ2#U-Mn*@=1!VD#V7eds_lu*#dsFFrF*{t8p&;{9{I0T7WZ&xi&oVZ61xIFjMZ zvo?!vV;O=}+USV+}XZv{M#S_8q;NSdlva#}Q`-$>UJ3BhWHs64bq z_hzN~i_bqx&-WS_Yhl;KhUvIY-rM1^9h*$x$yd(Y1NiYTf7zUf zy2%`;AfUgw<20mU(-zUrJVIpXK`1Lc4iXy+ra&h}=A>;Pzqz?@-0bn)LiEN9_NCrf z{#J!ZOpW+d5KQEWc<(ocuN!9@of`rJ*N%v=;bY5klqY)g_^Ja>RGpE@+X$DJe4+t` zIA6?qEK;?WqVnuEx(2G|m6*0P%t06xDl}$5DuWiatSE}eJM}qq9#2-H!(*^I7-cKp zVHqkM(Cl>3)4|)7Dj_R6$Y%~DS}0*dKd7Q=7cdv6%!pDFSU zPucj!rN6Sv0-p1!kJz8)LHpZ3%&^+^lhRdy&ehc>$yP#H@b{+kNk@0+YTc21C5bR_ zU%t=5=g$3sLBArxo@ahP3Af>mid`Nk=V^66?Bi@F+(lm4J)uhB&4FDy8vD+$bH@CR z#we=%_k5O|q++8*sKjXL1|$%UzBT)LdV}~%K-~)*I;grb0R)yFf5E!|+My4-AGu&a zE1i6S5OZP8sG_Ov9|6^%7oT$>Zx{i&DqPDMh6Fds(}H;Zr8BmI!3_RCGd|d-82*8- zEm^&W!QCJlinXYE-GwEzAT1#WNi$dwV~oj!T4(1;I}vxn1!>4hNzre}Qprj{ffHKR z;w-KCblB6UkB=VnTN7;A`t2zxsc7>P>(UHYwPX;0Guoroy#uzLm>6M~>_Vj*s-tZ_ zbB8heC8dOR+hq%^nRkyXV}y*Belmai3-shTj@vep89|1*@EWN#zs!4W7D0-={|Cu*7VR)kh$0)Az&P?gi^o;=N(CQfiH8 z?SADqt!Y?REmTvU^dOe; z{JtEWtFL*fEQEtdiNN#Y6FMwcKFZ9(NIf#e>R}vna%!Ymrw3{c+Ls;B6>Jwma2Z#K zK?kxn6Fn7Im5Dku-73j%}XR{@kCeC-_b66FOf3{0H^yWPWpj4RI_fH{c4Zq}_Cz)ab@keuC$$UR@a!hL>qKJ0E|bc5a+ z+3Cf}q<@?%x;H%j58OLXeZ8Rf03O`>r}XaDzXZmKDWDjhh8Vsh61cY?WZ(-U_AHGx z5rou}JEn!0jYD2Kj-o2d!cTj$60#k=QN;Q&CR$) zVAA@>|H&Y~+4TQHvV1jd#`sypH)Eul!NM6k3mm$G`hfYYzalYOP&(*DO~puD)@8}B zFUhPRl2S|RK&W|04R9J33?u`QUX>K!F*fTNdcn~|P^Ot^O_phCq0kHdIjT@oQlnP& z$*B11`o)V^0tFc;gT1sS*Mo&Uhux7(ei|?(>JeKIP#YS)b0Col;--onrnHeONte8` ze6ct~X4gxk*QBDo_mfXPnP_h4Ub4j4+M7kaL!SYW%&?o{5Ly0dQxDE80uOn{NjHGZ zQS<@NEgdj#7@h6(gsqrLX!wC_#9JzhxL+cbK&)g6e;hld~{ z1j#Yn#;^2dv?QDj5H!06W|7-VM#)yHC~Q3f&$z)Mv&XbGXwJex32FjR89LKyBp*wQ za5Z!TNA)?@?`k)FkDR21AZ;f9sR0oQmA%cNfEh?rm|9kGI_gZsAd+Ai*_mq60h4Rr zBB6A5S^wJ7dLqPniyf~3IMARL>S&}EZCpF z`wrphv!{#ZypECo4BMucy$iQ9|BJezFHyT@=faL0@|K``k zW&^$|cf?&TG5)4)-zXuW#VaL*m;?`4iYU#JSgBTl#ZZzovQ+@xTipX#QHVTO2)>4- z95`w^q1XNK!#wUwVy@^KCej=;^KQIeaf?9Km2no02p=Ly%OFV$wK5Ebf6PH4Wmr<5 zv0gBXZOBZgk4&{Vn-qg33cB;Q8!OMp0%bBJ*DGAXw4f#5gPKKazh*#OvRC65Et1T7AzmgPZ5veyf zfMjPXw;+*vwm=ab!po#2t)kk|#DYwOpo}o>Yaplj9GE|`$IUAR@a1ws+Er+jnp#yt zrZ%bRG%h3#N(1jMFkV2D=(Q$fP3TXC{y}5J7iDW;cORw8evK5Adf+^nt5tI?^=@;p z59db&*EyH~9pXQJiEYMpe(ymrRHBAq-L)dy+V`dRi?7k*Y>CNZ~|~BdF&ueHVi8AykyvM_cUMhC0ARh51Bp$i$sDxzZ2o z%~+lHl4I27m7E>8l3?mz!tq#?IkG`hSt{~xCik1!Y?j)-Om7Eo_8z1X6rv( z;Z-zjI|z)RbKj!lCf@n!i_=%1AMI;zakdHA?nKyIyf5XeX||ht2`uSB10MUbHpW5kZl81AiXZj{nD@hZ zYh~$(HYD*5d6L2{jSlQIB2iHjZKxZk3ngisqXZy8qGi(_G)n@CP4i{Lj#lSv{*W+G z!(auXYG5&E0mQFO2}6~ETxS-KRo~KG51W%pf+%1-k1rIVIKh|F0JND3mkOy8n35H4 zYn0_QjDx?$J(fJ_M=lXf+K1_q5hN`NE7Y=LgF#dhA8)q* zxV81-VBh;Jz81z_kHbNR4(K5%9p@)LgR=dNZ#CZE{a2tfXrDDxkM6Kz9`^G*bjO%^ z#ux4UXtnR_v=R)?+PdH+txNEpSGMW<+lDFQHv9s^ZO!Y?7Ym@C|4j#;{^Xv;n8efn^QP9cs09ULHOSG0mh{N{eOvX->uO)Qy zISbR(w4qaew)2dKYfrVS$XbJpt#$XmqjULU=vgy3Eo|g5BHRhz`YYc9xF6X4zn_UX zh>?JLmqmJWd~!W4^ew(C6TmV(*p~GSG*cRxMx>Lbmh+pK(nM|p1TqcEf6O41v0V~; zIxEg*MDBy?)R@u&LF!fs$~5>?2({!yglVZs(&Y~RRH-x&QgP^DkUE;{Ni;zhj72%R zXONGUKpEe>v1h6yz+1TfoEOK(w^j#jicSAUw*LPmjrVzoOij^_S2Y>hT;Elx^o#+6gM(5HhtCC7{5lp;|_dF@`i?trV(KqsD=aMRzfP(Xm>WF;TnH zJjjS)Km}wp1ceTHiJF2+mYzh2myzph#z5_M7+4q*ETtS(xP_355&7xPk~;JKEu~2Y!1ma>yJ8f@Ojl5ua7C zj)Wv)NMk4;iUF97D~DjX@YmYGetvOE`|x4YJ!DxE0WrfjE0p_XfEXG zCnxHO3E$k$X~~j$*W4R-_r+b55NY4NNhU+JP52kDIL8MREkalG^-5# zE(m8Aopt}^=l}j6|NcQFwY{*nqPDV#43q>lD*@PxmClnW$uO_^W>^7mAO~=2+ofgO z$TY`eq$6?_wgwN9;8|L$PR&zn99ny+S^~^Rj0*%*Nq=BDdZT;>Aeki6u9~FlB%;Mx z{>5i@GuA*~ZO**Lz{fF4``3I_W`0+}y>e$cbR-8Vdrz8IP1>*4Tpwy7|4TsnkJ&@O z1@7%Dd^@CW%$brB8$wP)rbSyx((n?fq>(pBQ$p2488xUgY-X5*8)R(Ld%ptOm?{em z5QNjuC6X%U1nHO|(UfB&P8h~r`sw!kovARQi;JQBcd#AOeF z1&#tUx=8aHIvCU|3E=J&aVdlM0*k5d{N+ct;xB*kof*IV@kj6d^e4o7^}bw2sD6N? zJ6O=A`*hd*<{@?fkMSTn{p>_wB;i@^g3M`$J9~^Kz65|Zn7_;vxrL6*HbT=>jFBn_ zZudh#Xj7GqF#=l-ZMP&Qh_rx{;IaE74CNXshLas7cNnBe=blN7G(hV7GzvRWH|e3R z!=Pqs7#IYY;>$4EBO?vJYCGD@oK2!aVW`WYx~A7O>*<$#>VJnXD9*6nq(B$;U^(_o4;YzTHFcKzoGZn4)`A3u#z-EU)fs$wA!9f!@iUe3isip)GiIVQB zIL|v+N&&!rB1tUCh-aZT6F~&%1k1S~kpxm=c1RQXZPaluam>;rFlu$$F?32DIL#eD z(bEw3AZ;dmi&7FKuf&JS@SMd11t=XS?A=z>DjmWr%9sxHw2D3&Qy;Ga@DvTV-!%{B zSV)383L9(kaYD|opD{qm3|Uvu>@bP61x0E>&o4nT5(=5qu-V|ZXP9w;9n1AAMQo4Y z`(QagKl0?%?Q4R@)}S2mA4+G*6g@guj{@Bdr zcq@cRau`;^1xb79<0HREafuI!XCqxe$b`+_$skkdg<4$=vZE37Oo3&IT!kw#n$J-; zq!}8(hVXPy3=K{DL+b!hK(4>$sO8k6X+euYz7a&!)l!5&6TulsNxdJrm9)gO-7VtR z63(8#gHi~$u+0bmm#6;u{@oIh)H+g^{*3IDt#e;KDaKcuZf(%8f$8S|8E^SCqh zOuqSXYPT=_1Qypat8p@FW6}5-vHL+Ge4Tof9<4;RWGYzA)D128wTfvI_Ch;cI$0En zc847UW6y~CC2N9NR}0e^Tv%!fu|G{;aK{2k5W;RR!8STfPENICiAV@wuodS(8`Gm! z>`mGx_>#1T8+(o+E@dWYgGv*`>dgz478=6ZKuwLov~>aZGEAZ83G+3agIql7D?uJ; zFCN1L+amoXC$`Gb@9mE@1HgM`sI>tzK%hb6!Qm)l6A2<)By84mON*!-=2?61TKn}m zZU8Wd#a%7+lRzEF3f>)0{rZGoGkf*ol!tu4fUzy$7~GP^ikrp|n|Srg2N->6k6R7# zED9B+vGU3+3BGHAxY^8G6ahU#YUz2QlU_!xOzMyvOsC6*d2m*k5ukQvh}B_u_MxQ* zb+5%CEsHwNX;|Bj@DUO(1V9^st^e-+BZ4xrK7R4z|3T6!@BRE2@BRGarMkaXe0%p_ z54OW}eXPiUOy>xvoj{gd#70j-X!-%~D&dN`B<-+eXIw=DVV9G&iWf+A8o#0BL|@6l zV4@Y0vLidNs{&Bw zl|wh%q8&{)NpXgu|Nl`6MJQw85}CwgU`daZ6{gD8P66ThfI988Qvnqlh~mlbVivxwk!@*B`1;T+=%Pe z^IAGd<4s;L7Po@ebO#5D-OO{9oM+vCH}tk&cary4XTvG++A>_k%HV)bX7QfJoj!y{ zr(3u9Jo9=Bs1J7P$wg&w<2-GXydod0I}7O$RreW>!4#ApJ~wgp`36AIkkZjz)4J8| zNK+%u6qY-tF5B1=v?rMH*uXsaO;Jl%iIa>Lga=)ItJOQNV$y8FLA$K)KOz;$DiO3T zJz9@*`6-Y@;BZlOnm~ks!yMflaWqQgpZ>4^`?!4jLjXsyBl4!z|0$pyMfAZB36}-& z(VxYQs|-$}c|jf?$-4nC9;{l!Jt5W+%lYPXmm*VtF@FtcMx;4pYa4=|?T-V|1JsC2 z&T@+k5@ylJ)STMW%xX+`r1Dawk^(?>=oKb=sImDdh2s*VQrr6FCAZfCfCz&l0CR+d0J zr55Av;v?lZ|MkC{<4Acm!bI!U#P2s{xFD(s5^s$&i9P?4j)=0UB}z0Z%z2B_B-L-^C~Ia&AFpM3dYZ0AqUcy=j>>PD_=_Zj z#+s;AX1T;0(ELy@SWseC2K(%r(?350`$Rk`PA*?=TW$^@YP1^XFDtKO$lgu1lw@nm zx`Y%bkUM}2(HlShm}94{U%m=zY%AN5d;TQ=H0nsVPiGwNYf7&3JSOux7jRdP&h5ax zBIcQ|gNNs0MGC0f{^DQ#s3}WPGc@srOpI1x8ivm@us3OZ`2p|Ku-Dn3dg&9Tk`ACk zq5F|_Kdd?nz=(qgiglPm4YSPio3S-zqaKQW0A@?r(^#(ZEZz2Ja4AHAPywx+Q9h8v zy=L`0W3W8ZS3P={K7IvEtJ-v}Ix(SvWwwJKplo#Lb@|(yc4rM@c?10d^@PM)rVDdv z7A3{1&P<5PYsOn^fc4XRw_rAMTcb3#Jse1xD>^Rjc>tHXEF0gv@MXiqfl3amCwK|h zP$=zcus1cjBuE9C1#cO}nAx6XD3##@8*6MvDoW1gy4lz77_#&$t@bjxB}}J;m<-S} z4hTWqk^_ZCf4KFSO$k08&YOQ)!gf~xe+!dYxN$Rs?^5s(v7<&N6`CGnN4m`I*4gA1ahM?#4o=JgI8YK`V15ZJ} zbx&=m!8+uR(n*&8GEdb6I}g18>A)3VW$mIWgGC6bJq6%eD2+xb%c)o^2mpcguV;_- zFs^>f8YxowvTqxtocNO-w z1SpXSU<~ur>*$AHyq0KZ9%YQA#zoSr10Vf-oXM$({{)DsU{$IPfw*^>r$x>=_oD)_ z9prg=2idkO%H8yjh9KYRpZ)K`N7SbP%K(=S-jH}4gVOo=9rpnCD&l$7QykfxE+*EE z|14BKe)Q;A^nba`J6!W<`9t1-{_w%W2M-))d0^#qod!+b1x+oV9IStqQ`IFGM%%Hz z!AGHyJ7$c*<&#`UosCH?pS9Vk+&E24;$Ip*N|JY1b^%}3MPVw?!cL?zej%1EE!7UhL)b1p4sMoEjT~lh zOi!Qz={Lfk3gJwi`DbAvM$>N2Kw(C0c>u~2aIluPGFY2saS@FzVWcYw-*Roh>w>5S zW`UA-0USgijcu(ApB(XtjCG268>@e@h&3D6D-<$zuRKnk-L2(t8@DXV8y1 zq0^|I0ysr5_*jx^NV`yydCLJfMhc>$ z49g!seEj&K8vsuq^HhsZnjoKH+O!DJqiG^EJC~0hvaQA#NHfaO@;I12lL!9l~`Rj4xd4pJ)FUQ zR&^}1v+4}L%^3c(2f$1J!8|pvxuK#S=MsT1eX{0^Al?#Y58$Pxf6HH9`sX}t*poXvhV4P3KozA1@u%nF+%Pp&MIac&Y7__LK0?Rl(2RTHhqeL>1h53+00lNmf zRHbht%dUr)7K-)f=?ujYFayhRTnmyFw)`jOOday` z<&Tut*{b#to=U zB(BUELGKqDfl@RigKk;==eY9h;iKRQRUlWdJk32?!1tLCGT=6=ioe zxJJ3!{^01D3kUyaN;lf3iE5?Nqi|*pr-X7ZDMWbh1}n)$(qD-HSSsw#9*9_m1p(Ds zMDSa#5_|gtIe-_oyfxyl{++`mK40LeWSW^|J@gJ6gKzgsCp8ry5=_+JFxIk# z-^p5T0*it|RIu?-!WhLLuGXY%^iuZnFI(XltS(}DsqnF-pk$M&RMA|jRljn|d$dG> zcEw4!o`q$N?2ngN@#bPMH?Q>${Z2i+=G)RLW(9ttWwc_V&mMXY-NVoBnb8DVol6-Zl%wGBWk z8x?=W;VgWxzxf6ZXUVULGF+Hc;qNfr8tiTSz^HFSkC+u z-ZCm+6vHGHaG5;z={kTOpgec(KiwJd0m@iSoD{4t_ z0nx>f=rtYYItrvA((SV>DBs8ONmN2;4Pz{X8Q)y=XZ3%UJT{+DHN1kh>0TPJ>>%|M zL4b+59hatRNX?W?)iI=|bGfulLc>&UX-R*}EVJw5P;GeoE5R06E_+G zMHy|&@B#B&NYVNfMv@&4gEpn&`i5{k3IIw+k(nACm)|0C^{dBxne@@4S^EDL6<=3$ z=7bP0x8N59t0=lCk8IwTr_9PDE1NtGFqVQ2vcu_fr6?zhwep{jOalk!&?@RvmNi*I zW$|)GakU?Vu^abT@=+!rl4ZoSO<@A4DB~?7%5b3E{HlJ41S#7lLR{yPQ%VV$#3f}e z6ghGWjx9oGWk@EmmP(p>wAM2^WcdfGw%*SmU}NhL0#-+;OC&CQS~$X}4UnnTcy@Bs zFh_NfF}dk*dTbFeRKp19EKotjn5-~1#1)ag>OzyOli&qeUKqT@-FOHkWX6V<=%*OP zJ!aj1@O+muR3F7|-o6nvVgZ+Q4h5LVFUxkE!69Ges~bFKq&Gw&Wo_^TaH?B|oPXu~&V0H{`|17d;| zg}MV>-b679j758Ko~5|}0)~o|E}mvbDxm}z`xft0p)gaJo&Z>ulG92CP~f6~yKWTF zrnp&zRdRP^-IhQ(hEZrA%Ao?X{vTUop?v`dnrkLJw%c#?kJ&qZ8?H$~`mw3nzu$cO z|1Pk^Y`!g-lRWr;8_X z^gCU%CjUyEr8TK zi8{9AZRNlQe>D*uR#!9pDRU}&mO^RY8%tAHN-hT!9fiLCFt#Y^T>d zCou|Mxy5Fi@5bcCl4A~IH1z5Gme~p~!g0&_`?Xb|4W*v3nshH~P zP(guGQVumbssQm!w=7j|jT4td>HZp@G6*Pn01s#VR@gFX7xa9Ax35KAJ zLIsE!F>GWmhUvl`X^r5l!qEnYPG=dGJY2yUJcsO0Zs#hj$hFX_!%B<9d|Ff}T0o*j z^CL@+4_u9S8u7e^c8Hf}X`dhyB;kFIzGT*6wf|UogKWmZIO3WI7BCP}fJS9UeZ}MJ zM<0Iu@Pn`a_~N<8m(Tw7G0&o}k<)m_GbJBAOs|MagSw>iAXTW#-5lSEFahouaJ!&v8n6huBL?$?v@fa5Uv?hT9HZo)TM0@_gk3XNH>M(BACM z&JFvdAHlssAew+~SQsu0L~l@bypB4cE4{zKaeKcJl{fJlmqlG-N=Kw@E5@WxeLdx+~0rZx?D7T{L_qFt+17 zZc%xZ%q993kK`C=Aqg$iyVx{YMk6XBB`C>jd?E@*LS(A#X8n~eEkXAH>CY*oLThCn zs~u9!n4qW%JE3BNK?I%!IhO;KGv3YSTYqYDjC3fTS7dQiHr8p2_zb2tYVFn3xNw2b zaMLp|Z3Y~~v4H4ZcV>d!Fh>Oj9H?8x0iQ<|Xp2D=t8mgLbPYGOj6sv+L{#f;LE^O&%$@#f{&*PL5Z7r&DCn zLk$l#XM3z{e9#t{3n+m@l>@KLdP>Ic{a)o!S6*LZUG$DOpDI4lBZs!Kq+1YCG5l?sc0MMgUmYs{yKU=*N4vTRb>l#>N! zrN!c+r})z!3IH5Ku`o5DJk-xMCV{D+8-7w=kOS-eNiBg#g@tqb|47i-g5;G zLmg$~VOS;u6WS7Pj?SiOOAIwI6pV43%n*6zUEcaDw}75^MT=xSu0;-sn-I*e2t-OI zj*R=jX-Pfk3}QYc4oU=_NF`-23&&^2hqtcVb|E1c1L96uJXaG8sJ4ZV;ph#4E%RHzvH6-2e4xp@a2#H zA1_4O9zWs zjV_B|q!h2bO_?tWusG9#rCtDtxI|v-jH2pfm}Az7YtpjRsXmZBT;gQa(|$w+11&WH z*W}D>5#~cl<|TI{a1)q#C$3U*r1(x zOx@AfsYObO3DFE9Rj?XG;_INK3lyszU~28Z>uEP{d1S;nEB6$7x(2X3fx{MIEX<9+ zo;Y-HZU&q$>ytvQC=41cVY)42(U2dbW?ji!9Y6FyJzOD*)mGcSD&2-)Nj}&ze35E| zPSH3LpJ0zF!S~N`p{bl2upB#n(hdtv8}`zoo%nQ8Q8)rxyi7OI?KzsgFaUHa#?fo7 z%o^^4%N(Mn8`kXTduR2Z4FF!@&m%ir0!O^Y4U@9SXB@!SgD z2t$ zlre02Bl9f~d-!$CKroLw)2S_SSQ50xsNljZ#EgP*7BzAe5#~DY9K&EsmFaTNwZbWv z(WJ~)9R@F&sj)|hHfP{m7vt67kiw}~{)JT~ow9|lr222Wc1I@Lrh-Q+%BiBs21$Ll z@NG@_8=<~->3?e7yL}M@e!vr=LDUL;c;mL&yg17njtFSONPbXK4R%m*R0@wHDD2~+ z0$w>iNz42J65Lj>$;;8v5>T2r4Vki1rv(95@nkj#wxmF%S)KsfXkyynGCLNS$29G4 z36@_uD@s;0Ey@O)voqw`YN&7yE6@I&l5J+PO6)ZGR7WE@aOX4`##qV}`#=82|4DD% z!TLW>!E&}<|C}1bdX2kqm6yA4*r^>Si4teEf(o0k3O5-mLL)MIcAr4)4TMNv!a-x% zuuW0%+Qn^YD2@t%Du#N6r_d53PSn|o-tq-rny0Vkz+H1#Z3kfQ==!xe?-$neby#{Q zUV=hwG*NBL{iG|4hA7fX!Bm%F$Cd}KhsyyaxcFpYIp859SQ%1WlV}ISG$+L-3G5st z(WWV6E%3B3vN`YL(jc%`X!&+2xg2z>9giM&YvAQQfXijQ;)bpx5u_&GPo!*-4f5oE z_V6L+n-|wOj*95X#RZ=wyFtV`VE0XV8_;zhS9aFy#|W9$0Y+l6b-Mt20mqgMGN*@H zYzHok(I}mlk~jx(g#}9s&@Lku5^-8)AGtCswUU*T?C0RF2|^$UVPvI#c1%;MEO}Fx z@`!m2X@sct5Qs5&B;658I&8ajrjbgg26eALKKs{C7y94w=N(u77u3xoFNrS>9Zh-- z-#%>f=}4Ujc~G&rgCKO*3xGzsm>7hZIO1w3r8En+S=1E%JcQCA@WNQvQt_R{@5o22 zodr}=jKsu))&D7c=ic2KLv&q)A7zoCZ8i|jzqOLM^={TAmSC0=v3p10=Za- zKz2(i)RNzd0Ha){sa$HpDmwsaf@S+R)BN>YD_3{~W~_h8Ok3>e(&c+sna-GHsa8+` zGQ<69LhPd}UqAlv3df^2@D*B-aC!rZ3VP`fKVk)pN#QJRgVF|1-Z%?9#aY2k;t=@R zr=P-*&;R(TS}YU;ksCK&e)|E5ygn%4S1x|~(}}F}fyGW0GX*MZ{r9KKA%Yf|J-C|r zw(!Yc|KU8Fulk%{zA66F>i?UHy(L}b2{3IROi5lUKf6{Eh{vP@b{Qx-?Hn1_>HI6Tig~^AMGKaIu9=R>&oW^sN zC|848M*k+3MV0!4q0C_fM65k(1|-%Vf@qcW3`fV~*NS|d4&viBG(zxNXG!5n0XYha zV(7Vwr^~w}?wdb4``9np1!M610><3 zS{N2EjX#&kxI2a$X2l!KZR*5e#*TVEJf4YHN-ozi%th2%Zw9S!PAO>0> zbM-b)@HPs?VoL%S)#yN@e2#&suPddFNhy`nqdNjjZOV8eQprh2GygLj!FP;@46l?8 z;#Ao2e+~lVp4~|-GRp|yOxROLs^?azg~V0n7Su=_Wv~-+hrpp4@emsEd1)Hf3g>+609S4B9jeD;-m_F?FPV&3mzA6G!Kz%yS9pl z=HO<@SK}>6c9g|ixrCB1)Ngf0LUs9B)G(*clm>k>{=EAq6s-p=$Fz;@081;Xo2x1q ze_o<-(sadCFjo~s>BWOqS3k||$Sefi_{cBSIN4}}P_W7pez;5n=T$$KPV^sg2q312 ziLy^fdKiP*_z*>}q{sybFK}Rg#2uExkj@3bOajpqXEcE{(1ZCccrJaDL;}TuDPN-r zH0(STZbIa@CWLEw_IVmN!$QTKtf}aB1>@$Mw;WR2iiyj2`Ovpieamhs5`?PpGt*t5rAHGY!ycape6m{R@SU5@yTfLXpz@dUQh+Ai`zGO zn2#J^!~_g>eQ<)z>nSJ=C~YG!8SqboBZ!j z@f!TC1?(nKs z^vcI%81JghhUA*S(KR3BM&V@=!)4d#8GxZ3PkVj2AO2;z-%H$=TA_Vv$liaF9#Io# zh+*Pecw>Ms5uQDO)*opO$d+u6vzHFFsN=ehu9jRd!eG)gt>dE>XGuhgG>TUwpy6pe z5=)+5u8@FDw}4a{vJF#+>zg8<)Db-ysM9hQ6-=K%nTlz=slV|0TV{)X69%}g0gQ57 z6GjgyJ<}emS=~~@^(<EfbQl^z^oH7&=IEP9*Fa%&q=FZLmXIJehD?41%6UMX09INedEzbU={4 z8FX~;bV3G}>bz$+_iTSLLA8cD!jk4Y-Tr@){HbC<*6A1j)yucp9=Xd`sIkh0cE<)o zM7YBNN1Afo4h**75#;=EW;}V_lcH4OYBD8k1?JcnDC5|ofvb+Q@0cO4A)wuwWoRa@ zdFpZirKT|vR%&Gxw6K_Y;XyN_a!DgEqF6vBY!(jU8A?Q!;8r6+3VHfCecC+y;jJ{h zdavAXI?XQiH#%4gi9pDF#B^johUpzN7>lv zgyC{>AT5!M)={axekoOnCz(-Jc}*B4@n#Drbu)aRe7aIY3+#el(!@6&s6cvU6{T-F z|NfRW5lx|BfeNKrmS15J3Giy}@~c`urbWMP5KRp`i;`+-D1KDmkr>ql?PpVADlX%1 zaM8ewGa4Pvgs~k?Ua++VS6ghtk1@8_xXNpkv2oBJP!Q zizqULKtlQ}U;0<1v1heje4S2c$ZvVEnM%%L0{odUhR%6pWv^)%PU{G)JdM*N`rvZu zS{|jn!ADTbX(XI9mV`PGJ0A~5o1-O3{SfqCtcJBOAD{l~zny6LA!5V(^ynqU$wCYdpbkKO-FK0%LQa|@;b7o4CxJa7d+mshg&t1mwP zBMIF5&y_&IrC@`vgnPgJWHvTy?Z}oH1Cg_65jFwjY#xZiQRn}M$h$uTV2_n$y@XZ$ zj-v`DV@?1V?h}wOgg9Fpzd@pcfTggXE}K-MD1zO?^zSOCy8?vXP5^V~?V``_-n)&D zsTXftf{UfSCCvF%>b0bo&w`Y_Y?axCAj|m~94G~v)N*Y22x2{of$M`D+`q#Fl$J># zZ&bMQp{o0wNuYOA`jj_!CDWpv4fmY!I+SZ}Z_ti7VZULt8}JuL75Wme_W;zZJ3sve z2N4!pI8S(!KHR*s%786n6z_+cJ2Y9U>po3qzcj?N6!yMQsUL?nFpvlQgd|bcso@R1 zdg=0NH$I$9%PCBCE6=GSHgO8VSKZ4Apnbp?r^cU9LI(DOz;QUn2?Zf3 zRuzwv>je%qptiwB>rm*IR*Dmw_2N;ykQ6rU*V%VogHdUyU1>-~fgkOpDl(-GF=?!i zyiy7T7~;TzMX)feg4{TWxJV(oGvW{mAr-Koct8|U--ybM)pIYcBNV1z6tfZG5TcqN zt8kFQs;t`8`m1aLH-M`|%0spHLJ4VpZmqFM(Y^n!0gs~B0!73|gg_^gv~2*p@Ihta z1=JHS1sQ}|Qm34_SbdG`CD=oRSj*n#PXgQo)WD}apjp;lk2DZ(8oPpel2cQ9LG>&PK3*fDIs(ngBeT-!go^rMdDf}i3W>X0AI8+`t z64GPWvO307Ry5px^Iv9MIco}aIe@T-`tAh~vuPDoNCQMl%aoJR+4Ua&+bcv;6X z2k&e4`wDdZipFZrg8Wdh$n!h_I0408YRz+8TEgjYkI(I!tn;!NLHy<|)D)TnD!!}@ zsB-|-Z(lw{OWjD#<^paX^RfN%kjdGmkXZ>eM%%&)MC6(w%LiZBqpwy6W;BCi!S10i zB2D*-Lk!VNDW5~O%3m8-C-{Hg<59y10liyb>HpmdenY8yckeNC<$eB?V;seqcX9El zkBeLU-$Y(8PRk#Xvr~-@vqFZN6$O&I3L)Q`TC*SEmH=-PcTE$M!{m8hf(<&Djq`4- zMtNKmn&V<4&G6s7)rm@t1{q zE;i?o#WpR!bZeKO*?m~XYEy$V7bB9?apg^Zg*b(X5JJczqpP$fHK&j=mwHjHQfcX4IGJ zNInj=?uo_>!j(UY4|HfKPvuyV7h<^Tpj@Crb%GlducIFV8$~H!nFUwjYoi`a*meI# zcintx0s*_sCN#AY7ZUn^Qj&w3;vEhCO5!Mix`21tV4-@)cT@c0a?h^5=jgjE z{nI3)jO+4dEb9k3!x+rM-lR1_@0S_3dk8&oqo1-CxyWtRVzKPtToKb{yMs4*-gS{K z%tL0u2^yl`vS$5sRMv)3Q_FD(;rtLL2?oOTWs#tEwVNWr;!dx6*+u7qW%1pqRoWJ`< zPwoI4etOnTAuiUD-0bvWCn7FU>AF?`u8s07+((a}J$WJ_nV6kB&-K#swq?_Cu-*<8 zbE;<5rUrPA2Cmd6Eh>4`-nu$d1`to@9);&1wivxIxctK#dM5#|IT1<=QBY0~Rl?>& zpMSxNS#nP?K2LxR6mTvR9LcY-3K0hIdL4`AMu>Px*oh8b(=<8jH$f$EvDq@|o{6C2 zT^P)Nl#6nov+SRtixo``p;RO~(A}Yn^RfCbzX+fF*^zZbp10h8e*6Dqjenjv(m%=* z`Rw88ZRtn)kgWdOIS9~gqm~+;sx#=1!@B-aB)dS#vyR7T^{BFJDitb{ zKED$={J$}<2k^iD5C8KNV@&?`@=);i|M7o&dzqCRZ%!rCrlmcT zx-7YL_rT2??U zs%J#AOr!uiY>*(T#Rgerr98^Jbo%u3PyglL{-wJyup^aiw8fDoavI@?z1S8M7tIfp z@AuySf%$G)aEXfbA^|Le<8sdBtKCDv3#jF_dA!)64|e)SY8V)cwGs-n{BK`73-05= zQFN63Fe$y^dC(j-0$Xrmu$hNo$W~H`tFo3?z8y)91WTDqQ5PUscT|FT0T6>qf*9%p z?bDWVTXT!~jjR6$hLqj`^6fLWz74{hMIp6YI+Zu6bT^{tCA*azZV((08^ zIu>0E#bJUBj!?>SrSg!Wr|`w%d}-|&-`c&yD{)*QNXe(1{sI7=mMYRrF;3^&6POz-spAtfR8%jo)&XJqy}})Oc-0qrf_D)ic?C1 zz!Wz$$iV7>%NcfYre)69Kj(YDIOzoE&>23QK1qKA2(FCM4dTBK> zwN!A3(+c({AqQ@*wr2#?Y=)(QI-=s>L@)s!d#N*Lxs&<7tOpiDqp3cia@+~-SxKTT^ZjJLh%lC^V}?r4i| zIiRa7RpfN_whh6c6thxHfOl2G-a|NyY({^hT85DU$|#7R?~Y_|)1g_OZTFUZk(RR} zYJ@YSz&)~no4KV z2L_ocxc=U7d=1c1379o_fRWGGhLz+>uQ_Zb!dUcOF@b?%7jQlbGNqy3iqZn3f*=WM znycV#0Dx_)TaGVXU4Uf_5+|DltPF?c~2)Qj&6H*5K$d~wm-vNutK?9nR4oqLTa`of=PhX1yF>^0C5sX z=>Ae3OCjPmzy%JaT|_X}B0$Ixma^tNe08>fc)spGW$>RzVfAST!O7y`MjlkU)&Y7J z3~>yB?d>g7h+KZ!hpchk0Jx+qZb4t7qEkRJgO5?LvAu z=cT*>uFj212ALdO4tHg<;4*%eB((ba4} zRhonEB7GI!at0_Ra40(i@F07prA z%c}=-EFfYpQ-9H@Y*-0xXKF1oOh*m!STb<&fPzgUEI^1S@*u^~Y+c$>?_;M$fGagg z;(#M=ql6Qa9h6!H%LGO$WzGbP61X_A%rd6UFBmOjGrZ%{KhW{b(*`32nD|2-8kBsovrf|wZpzhRocsfqn7uV+vo+yT zai@!O5-=j?w+JSlKG;MqCAYo2B>CaM`vcIQS{#R*s%)0`D^`Lhcx|z1-`Ebu)E*Hq zA8kc9xb)z6{eI(Q1VFI2ln=i*lBRvHBP+WVr*f3R z^RBSUKsIZ25~)Hep!CA85%78p9u(jmi$iAVadbN#G(y#Ic?#B8(NSyxK^&|9lQQRL zKlwGsdCE7&@7(b{!$`|LqTIDe66@G z>6CED2FHJdS+faRDrubwSqM?3ywmtqPL`B1Y+o$i7LGlDw-tKFJiSPaobqvSt651$ zrpWO($h{s#Q#bPuc+#xeqlc0@)EaR!Ph;^YUFxmA+6}eP8zeyhGevN4DrS*j`O9an zEZzWfRAexjbHaJSbY4pXi7QwC%Rl}TBQ7Qw?g41t=^LnkX);=kkwOKMO5}VF_WO#z zD^R@XaeQOjGkcfXktHh2fK}(`Cv=)wK{_T7Cy{VbyV=oX$6twM&YIOSN&UO(-_OWR zA!$FeIWr~~h9jxkP)P_Q=Y@WT0;^TBvV;j>uK6)W!2U(gr5UuRW)#!{F+X|yBc(z? zl(-}L<%qBclDdRu~hNOvz0tQm4TMTxDJil#SDEM9>Bx+sHXq|L=dk zwgFzk?Cx)W`QyL%Q;HtxR`ZYzjT$#zC9f=-$u^F2)E_+f&Atg5f)Q!X@7o#Ax9^-6~=lH5+{x-GtmBmPA#> z6)T>?=4B?&^+0o*quz#q#6x^lK>h^J6H5`CgB^h=jq0+Rt6SU-#To_g`I@-%MkaUO zO#Kx%;XZoE^V@vsfGaoQx*yjY59wmK8;cvXLA8mZpZRG%=>Q9~u}=}jUloSoqtKEc z4Ih8<$&Ws94+bDpj5GJ+g5_LhO-9FwlkSLvu}Txc-oST_u@wMtp(0HLPC>RSmwv03 zUQz2HrxxZz9O@bf5e^I6y+q|KFE?b*>1W`uwn$nNhO4}T_r>(e0vDLl0W7L6e4`U2 zAsd}Ca$msK2@y+D#-L~vc#;Zv%2ATwx}HI_I25Lgo2sRdMoq!!injNoIt5XIT$Xt9 zCx*C5%#_^RhSdPpu!fijlU}Nbh6E=w#F9Juxp{Ce5I0~nby3}jb`YSn6gfDtKy3_z zBq>)j8@D(hE`9O)k79> z!OaJLe9ZX+wt8vcntRTfbEXUSG2~)7K=MXSikTVBq;G-P8lx;*bG3$ z;igiCH1H5_%&)-!jI%K5Nk=u4!*0GV!KfG35OaE`9GzoXYOMhVl~Z7#AT!n-+*rHD z3`V%9TsPfAma4B52r3gCptUgFI#AO-0OtZL_{~;Ca%kv`$?6aJmNM{JM&TxXXm9X} z8M{R!R`^txamB+{!8i_+tJ7*1XM7#(Wv<22Jq6&7sJP{$py2Ja4oX&WIBQTVWxQyp(@wHJE4;dqEqECZ$kALN8B*&!Bb<0ZMNZrI@tYA;u z44<+xQ|~p+PM_;atM@c5 zlXW?C5H#UVfW93oa$tob(H=NzZa1%8T=)tFB8(F8?x2yTqzN!aR;qzQtkWcaktWp< zR~^&W9)SC`#9RE&JG(p34tpIyu6t=w{dfXMmyNw40G}L{>6P&IJpcssQVsEK=&tUJ zb}bEnboJJOzrvF6I(?ZoOfXepDXGydBJyEY;$R6vR}}bvi}G?!iXOSF{q*Ki5I=9sN&z zNz3^EY35q5c@wu87!DU@m7#hI;{0&N9!aM~-1vU(Dvrup*|0bhV`Oq8QmWkl*Uvz* zKAjb0{Qy2$9&>A5<~bNIOLyvxOFIp=KKZjh51*G$3>zj%CdjnbspUs(iZ8b=ZYw;! z4U~F71qXwviEwraPN_LQF35pHRmiXpy1`?$J|Sn^Wexqd7XIQ(s!*QqU8u}6B>@L+ zXJQ5K(Id72=ruxbVH?i6ubNC<&=?p&5=G$C3-4$d(neS>Q9gSB51+l@cy{#)#}Vk} zhy(dZIU=7vy#H?x)?2I<4Qfv3Xy?a1Juz55a|iWFMMxQ_&TI~edzTp0$xBXfyF-j; zU_Yu80V=>MWv+lcoR+4+oa7Yk>;o`lQ7e1Fp0pLJPAjxKeqve+ngx)7J%+)D1^tPq z07XE$zvdCdQ!J@X-{AmYjRByWa6*-ys9}W-if>^lKvyA7&I&Rix_83MzwfdK@Spyd z|M+sX^XrH_5(cH=qWqMpI~a>uCLGC&x+w%3E2F2fdZqY9b$!`U3nm)K@J(YWklyGE zF3VSy)GEu^DU6oI2>DD{Jn=^r>L&>(M?(6&5CMmHjv<)mbfNj1*6%nAlcuV9|MZXl znTZLB)1@L#VG3NXh;lOW<)(vnWO#?$_kFy^s3fZZzQ?iCzTww_9PC#div}3l>Zj@s zAGrUd_dCxGR`{CiAfu4OGQoKu&76t7-XKqu@0gEgCGz1DMTvx(tOG=_;^}~tw-ZKe z`|9*d2`$$zp5s3V2+ye%{v)GvkfYsIW2wTf{jg-^hWss7sc_X&2XhzZF4fySIyiMA zhWZ|ayoroagHwiC@T*%f;45!ZcGfU#aRnuD8QyRH_OD)o{~a&k%dGz2{N!f`sH5*WQodE>ql;rc zz^=7-MfpWQNX0}xV9CH|sO$FB1XxXgd%QM>cGbQZ9@}X)b#%ptS=KXNnU3U~9PD)Y zGc}f!vil`}WotK(^GCwYr|iy0zf^+M%=*-@*_7m@Fqo|!11K_@2v2YA_l_`xMIAd8 zUy18Ci?Bcm_4x+7*cm!tvy^A0=D5)Yk|-QMJ%i1?PrUJ8fNu?}(ma^Id~UpuL}}zq zG#0xR?|9CSsyZ?5(59X|dHlpTh&_QKsdD)yErbP-pR#chv$!foK#0ltgAzJ1ZL%T!05yOKa$nA@>smBN+itj@L%>*)h^V7T-jC-Ko$UmS zG(mO*tG67`gMX|D8UUwf5;(yLn~NWk0H)ZZIw|Iek7e$8V@#^j*hI!%`RX~h8CsVj z4m4I@s19%UA|8W*%|!){&9-dO1PqCkU@HO$ z2Bj3L4j6P4JW7G1s8bj)qM=bc<`Gei3k?w_f$E6Sg$#J&Yg7bCrs|K#5IC&LJGhGE z?bc|o4TFGdM%aFxd$80uHc)AY+A=mJ6TK!UOh{lQO^Pe+e(7s2d_+Kfh!UYlsXiD>1FX`Y(1s18672QJzBITm!a*6;qwwVuOVK2~cHRHwqOd26 zHa!MT0ZAAlNcL|DPaGt>OXVqVE2zT4z!;_G5+s-ZMX_o!$E!Gemz2kRkLCvscW>SH zcKp{JE<3g^&-#}dtY^@%5a12lKfE=I9bps!KJc{$3L{XI+ciYq@8pW)db}edtayYI z>)al2AouvOp8%bgPcrOOhg}m@k?b3jrX7(JV1BbW&fws;2kZnLqEBcg)lt0T_)zDx zkkBdVx0L=48oB1?7&=!om8Qlnr=dYDdNTcB%0iLz7Sy;jh*A`Dy8^$BnY%c!`g%D@ zO8(sWqr|9ewx$YNQ|%)~&@y~l2C~3K+sMAGNh@34GY6%B>LEBQSv;ag$30VU%0s(t zOhDx}Dytc(7JSJzv_r{cmk+%s%4GN>qmE!e7il1+kEe;lr?egsEKx&<7y%`!L7toVqS--cn4+of(LBMv9{ zI4krp*>#_3E`l~3BFO>UQ30Duf~)En(t3*ieP57!T|PQsAIh^YBupv2iu6mKufxI> zt2s2nHB5^?_Q=k{NJ1vOeTz4<-MoGK;ttQQ-nqDQ_x5eRq{3rWYzwqEYcY*AnJ=wT zHy~~HT-{EaZfJ8(zMz0{2KcgQGijnL5f%t_4?mRs(vNlf|Dg>=~8$QD>W!HVDTkP{JjAYNwJ`wcylHz=nhW z=e*J*@(j%LXXlCU9eDG8$zazsz!sE$vPp14X+r7~Kh*1h?>hhyJi#PFkLtyHifarV^jBzs=%O28abW!K*TB3j(S zifTDBPrz_qpua+&g-;?^Qv>*R;yJo&u5RauaOVY^52Yf;J+AQeI47P16Xw~&`dp$U zit^5-AzG*B&uB}l}J9SD1rE5z+koX*M$WhO7_b)eZa$8YWA2M~sk3RH1g04#m%0QVXuak0D9 zT2_wkrjI!I5y6C`{fRz3fiR>vb5Ih?41_!y;t&6-tx~cIdN)%QFU3auPH5R%Z0E31 zJ^Ou^J%F>~XHl9sZ{>2Mi>a2`ayhF?Vr<*IyLwutvy^}h{Kyw35l#i=o^#>R{Gd`_ zAq*dzlTNWlWtCKEmmS&UNK@t+9JCOA(@(fGh|Dw-`u$@5lLI%VrxE&fxGsWa0CspIP*u^P9?$4qMPa zY&D~FChq{Yk!^aKAAyxFQ+)M-Z*(QT^f3X93>1UV7T-to0w-y8XUjS$Xj$cW87&i6 z-uzmC7$Vk{OdpfHN#xSBv%U981oHzbf>-wEL5Kkz2!RQmj35=o9 zsWn8B<0U>^x$^73{mV1(r|7lQg8M1)Jof7C|3lV!8RF~#=oVkMKm1b3Z@lzgLRKN! z+_n>O$G!=F;&&~{*_wCmG^=E8i4MTg*?5PI=!x!lG?eEEMx$EU(fxBLvYL5z%-XSx zBvD0C${t8L;c_t&n`%^-`y?eZ8*=VY)iu(`YM4B#$XEmMdL3sNOfg#6rB8E)Yp?7k z2Z1auDa;Q_#jKS%+QF-1v`q>Pmj3mfU;O+iFcBJ3^9oFLmB)S#K%HeIMyhvx?X?!E zRD+!@&vdW{vGsT3M(tFu@Wdr|96+WN4L>Kcl4NH8qkJ|$92-PKr$iY^X#Blr*TeG# zc1Bz@NzFurhe6eVNC`*M7_V&|qh_kM*@e>tfgCP)J zqekK>8(hyE@t;huDwZPR0Caqob5U2}M*>RMe~MH+Ug^`*Gw{}Vv`AqmIVf7T(lg{! zrDS316n@-3>BExVHt4)JJ*Pb*m;=BqJS+$j2+YyuqPgx1tC>`xwAq$-bOJWO(Lt(Qf%0B%meBCsmfy%2E%9FxZfq!kNIS z%?}e{zmkXE7V4)6%o^(C8;A0slyu0)QM!skBYAewihHn=E7n3>Jj2Y0Jb!{J=X?cAVdCImEtL(?z!4>rnxO&t z5Ej~)#%QEC8D3|1l^bxZ=-|%VqCDEky@L z+v_{GDkVc*7FF|OibQ+WZ}^-6kFT<}>Rr>MY6xIr`6;Xj68mdFD+va?#hA{D5p))GrT2=tFcNf`ub z1%lN*dzs;9gDa&UbK(9NyL;*lbvXNBVP6yHhjSX|02wf}WoODe@w`hBS&+c)7ryJm zk8b)>npuF>+u=>=8CY%QtiMznT{zY+6NvCg4e$DY#zxm{agn2AmLgHh3Hh=|mhfH2 z=c%>6+OGU`V`!Js!be`X8 z0O`{YOCgZQ@W|_w*Oqo*tf|p{vuw;93Q(K~os5_~^9|!@;*+P3jlFMpkEMT_I-ifcZ_D3Y&zTV`o&{Jk!(bFbtI>kx z-UK)$v*5Ly^>+o?84pV_GtO5W&QER%q}-KhHOwFJab9wy?5VB=z+$zo3|AmBak7+b zeujF&4RlR%y?xq@F%XLldV_$ioVZ}q0z5E~5Dr5n zSDZ_lnw07be89jP&7|W${I~zja>B0i+gVp8BZ`S=tMGd}KX@j zJ`ERyqh{T%i4l;LfrD6QTQ|Pl z{tq(Gp9A=s7s@@S-!fBAn~H%wmm|=m%azUJ&S&gH9HfT4A&U6oH<4EY>=}JfgSIqj ztRcg>eA6NQ!`IyPuR!?@1YHngGDq(YhdArmAQpw9V11=dDgH>tD1>sP!aacH|k{v4dLUdqQJ6n*l z1O!$tJxqvR3fM|bO0WG(KwuY%g>W%ZiKwDPrrlGcGVC?vB+m_Jf!ja-=YM$XJ^s7c z>DLxc9E$;Gm%|t7A@OLk0-lbNXSo;&-Rf6gk~H`mQCPOaw9L7%oU^Ht1-wg^s17)O zZY*XYu{Fn1{L9x^75D7E$IR`ViI2#V8U+c9*xFd}vmXXD9K7P1`Lg4?>wZV!pa1!v zZ{N9{s}S6PT%dxtpz1usaLD@s&iY)G=Qz$V|K@0_`G%SF<=O|AcCx%>RJ66yzKA2K zEs;R%D1g?IOw^EE%>b#qQYSK5$^&0Lf7=tuPfN^?R|*YJ%aCi!Sv*WLB;ksXE#S4} zQPva@f<<2mRjbxfA}U63qOs5wp^)md;ZRcoCJavL8HrZSBMi?y*GDWLuA1yA5D)}d zo27e#v%37n+gg#d-SYZ{_9KO7=zskC-yN4kfLIOD6j8%iOHmAIY^kg7czVm?3!1~= z`5gZBpa10i@;%}YpFVx~;IY%G0uw7V!mx+sc9*=aX5YJ^*JxtkWC+IQb%@Xxb2kCZ zK~^XxT7{9*8^wI*j&MysJU7X@9(tt_11)WhNk&SHml2_*b+LGGh*DQr%VV;g)+A1Z zGHZVd$6Bo($|5I=G{v1+u8f>!eN-07nM<WH)La0&dZ&Ll)b-joqWK}#4FF`KfA5(tRi zrLIP3wnVkmmF8f)3k`Fdo_N!idMir$9D;Zf!~_CE(K6(#&-4}LHlT<;A#jK+gYvnb zI?3v$V7RaBFvKO>;tLJ{cKZQ&s@$P8^iAsKjTZ=m}Lu@8qaDDR5Wu)P9(tm&irHg()fiaKr6G1nPj^ z$y+lnrPr(yq9}jt0q7Vnhx2v+%Q;@5@vkOM%6Uf=k|tAn>nWOAU#&{$^!k;{6ymJO zM89>CA-{@}(;T?|ul#<}H1~a--?9hrU7C3B)qljNVqob!b(hAX(<&q^N)1@SpU;_c zvomqJFed7JMYvm)Z{N9h=kC3`ckkWdhUHtlC&(93Wi!c5ZmaA#HVr%i*Gd+go@8=R zwqd+hGy7FD@}K7b*hruwM7{Hl`X>!1B*9YmNE-@|#*{1?XzxdBf;C`mQe(oY7#hHe zjD|v4F7Q(VSk*+@tP*S@^j)7D8w3Zkw6u_?+L!}sMu>fpdmsT0-Xgcki~8Zu}iItPx`YED}_bkX{QuRlakJ=?K&hICjk0=lqL`$zuc zVE#XXL}0i|7P@DFUbw8=v5v!-4y(JA?y9!WilK^>aKJ3U z1~J4`_B*b#vZ#-iUCZRsEOu< zh(T&JS)~?584U!*-(jhR^k602{sdxVC{oQPSgi3YIe9Ew)XW7Ga6#wL{Lw`n>&9Fn zbPgiy0X*bBhDVpbz&S)&@AcvRmi~ctJ`5#VNKqG4dh~v_WV{Qf13uGBa2Al|40NR!2qzm{7?=r+lO&?kliXdMDJ-37 z5gmlRK&%!BSV@{_4JOYXJy9@8XE-)OED6&n53p1LLpmvktYZ1n>i@Otj9NeVtjgvEtxO)Oq8hF?Q%I#XVK{8OT9&!V zb~)=N*RDy5N(jdz)YFV%Vx(6@EEQ*s4<$qnxehj?)h1Hw2#Ld|QRb#>k)EtNV7!cW5Kvhjr6*oXY- zA}Ljr>!X6vx$2y14amWs$|E^s9!Mb^6;{Ls43$|w$xMb1wTfT~XYmd7c6jKK4(Lo| zdUawn6$Yt9p_-V#f>@D#^~%L{Kk`ArySFZY_UWgeVq7*g!lqI%t+us>7cio{2gV1l zzQ@Q1Z<*XK3NHW5*lf<1bKZExeSGJ6F+^gce0)_`6w-rx#A4WdDNKz4H3}l1_c3vS z)?p|sO_uC}vL~`M!D5CPnyy8_@mmSj>{S6h(RZxC0B&MbMlFc{>*KYWvx{_#rq zQ{(0sG*0kBB5Z7Na2^dhKZ~iT14NH79$Lpn7=Ms!Sl%lgU)1uG{#a0d*Le!aI-56$ zvwnOBZaSLi&;I()fBYA}-F#cwgUO~SXa|9pBft9hf7l?u)9)|?5U56G^PQl*rt%?z zB5;I0%;Ed2ZbPEO@kTcc6zGwi(s7-C)i229Juq9ccIlJJX+vhlXYxGyU|)J~$S$gZ9FcQgvP14OXrQckFN*+26*ZoOAqtb?Fi z|Ht$VG?*%kk%mL}9h`IN7H%mVaF@nE4MrBN9a)k4%e=N4jbpPo-n&>S1EY<;Hc73xl?R=DU5F|~hu8+0mTp0@ea*r-pt9`$84@pX5%G6(>2Ake}R2k&=g2ULd9lsI%Z4Q1r5?@?8MAVNO` z>ny+ukt;i{e39UzMMwlFZ9%b7Bnd2*U28MOl}}Ru>y2HxP1FIx^Pe_^rty{`fZRlJ zTz>#7m@~@AOdzbe@&BvmPjr7D_<50(A#Vn3=yJ_&zvACk_PPPKGP#^5ymkj#WuO^Z z_;LV~l@#NYsEo?Xd0zfa=BQinDS|Dm?2^eDOr*du^VpJqxIKX5GXUS^_J5ZC-*5Gw zzUkv1-NQCGlo4FyE5RS}(*J9`^xt*J>*@+(ee&qpqX%>jkJ&Xt>Tr~sns48}dHc?- zySG{Szr&~DxMSHnoP8=l7tzhvT;U90w@M}7(=M2b=AhedShd512hd(lDPsuO0vJt> zxfBsawaqiq1HD=6M~o#|WqeLns*E*E1!_M33LKmAmL=6dI7+;{-V6r-KwHbvg{tK( zXuwzFIaS!yT8|bz*g&u_Eju&>xTW3}X(P|qoZ|tET{mfqd?;|VDn%DynTwx094e(gJ!GN7? z9dSrcZ!R^F+%FXklzTowE9nPMFIOD zJFiy!X9IHW98fa9XN8e(qLf$~h?{lN39D**|?YfUALk* z0TpVmVSQ-#27y(5mi2j)4=eiah~2!!jqVq`#RvBXuiSHrAFM!KyM_6DeCOWBY@yv| zJIy5z_|F5Z&UnQEPw2J-9(MYSDyzEPW(#8w;%tZW&MwN2a3z#N^12~Aw9wtnYr(uR zC4Ww50iVJi+&t_tG+allp6ulxK6$A1p2CXT^tTLu{OpSxpZxCnFMfAg`mc|GlcEX9 zt=FeGYH18F9Wykw_Fy`yp>|+qYE+{mWkI&AMdpo{N>ImFNcq)&y0!XHyVP!v7;e*E zB`Khh5Cro03o8})Jz$#s}ml357kyCp^4BQA-4vy8bj#5EEQz(bC z$0%i(QI(^pyZH9`1=a#NCjOT5doTUJ1oM3L|D~+&czJ&BKY|C^CKrCmDL7(4$i3i& zagIm*y7~}r%}zX4mX#js$C$a?s4;02k@4f2yr^KhHWkg)1LZ1^ZC-_5Y+!~@B`8$U zC34;T)U;xG(PFb@1aoRQ#H*Sa;x|>RZm}9qt!8U4dI4$r=-Gy8eL>hnkL!>CxjI1}Jt&@oC!qHBLDU_o7-~)R*eF}-vtk|5Bc+ArO zAaI-`J2?#}a1o8AQ!r}jC`8ikW115_y%4?FbPz@y%xIOGaDE0JIfS+ribemj7`+Ig z`B+f4cp3qf3H^e&AS$&&|!`(JP$6L(~YN`035(>$`um(_5jqnbm7T4GOO zgTup3x$Viv6<&G>U?=-aPjP;U2j$Y?7(*tfZo_B$=q4I=zA{Y@@4c9yiDC?M6lIu* zlHZt<{Ym))y2_ccZ=uh%H>IQIxA|E46eiBAF_Beb;rVJ7DgXF)e?P}R z{lh2E_KYAfr2?{GSmWUazOICFBf?>f*E=YJ6>Q4Z47FVAHh=Z%y}P$* zg3)4FQAb-Hu(%4y-r#p2By=N#_3_xwhnk(IS*1Uou;=M6toq%L|Mb^)fAh(m zU%U8=6(6}1nRaS}W=_Y?{_tlnl{_waH1CMN8hP#FOM0QKUM&w>Zv6bGucp6a%9Agj zADo#8(+*fAxA9usGVD~)myIAM6a{a~S{|O5u`-{|MdF}^EL=+KJ3J$1g#)vMp$i3n z0~)7}>!ru&nb^B_hqfnkN+M=eXr3f+qGgvxdujlAf|4?Qg`vLPh;n57(SYEEUA#f5_m=YE0)cM81p9KgL_ssIaC%FHE!CMF`11i1#J=D;(- zb9#J@WQGOa@-`zX2-74~Wd5J>aiNC~%?meCJPW(ovm^^10j#Fxu3v>gb#Pnlp!p7o zlnS}E6dV!v&KppkENKExC4lZ0l4uX-IWWSB2oJk z+gwd1+bq41H3spEHk;vE4b7a*Sk9BS5^o;NcjZZGV)iUq<{G9lZ7HJiRKqzj}KtJeP9H^xbL4e_-`*uV{NI0yJYnj;S zE@`6-BXEydqo6q;8P2e}!CF5u02(CY!PvLpib;hy&qp16)WJ9Y+oAXvkW2p<5$|4L zDU+9LffbVWHs|h_l)3VhT6z_Jyx)^=jr5i=RVU3-s5uKcAghPz z(mvVRXFOpDTtV?@7g^+LsOm1|FRG%FX*^Yk0Z~FTUWsYo_PRq5U1RR(mF!RMfj%m%BP6Cq}u_jYq zgSwJaI9(iojrfh*@9E9U1NZxS4&eQk{=tDe%LWtgOvWvs2llsizpUM}Gj#nH8${SG zTg&Vp^O;|tiCK$;nq+votXU}Q%Ih|VUzEg_daWP0tAR2fDXD&StZilc=Lx| zIYY}RiUAjsQBl?HrE*KL6p-arzKPlqr+QLjDJ4x(){4n%hr0r`DPn^v3y?vTBL%U# znOir3YYU)fgDG~o;4IpEIm1d6k(PXhU#+V3QL)Jt-{7WerRf0#EIKxuqAooYpjjqL zTCQZ&TU4QL@a9}D2}4+DG2M+r61!s z+$ogVtG(!bak4;t5hswQ6cFeTsA5~{BSRw=DdsIz6pniGG>HK#tLO=9kycP@mdr66 zmis*}Fe8`$Idi{1EBm+ZUfjBE5;!AC0HOjww!?Dw*F9PsH5Dnw-WmI5h_U_YC%mNY z!TpCE+~eJc1$+fjJd#Txr}jdkyf;l5yTalgz~Da8Q!QB%V*9-BfA|DXri!%m_D}Pf++O;h%Q>?Lz;`G(&J!p85ida4pkB>=mz3isq}LXP<*!Zuj*0mgVI(*s z$VES@{F*Ug?~OBc7s*!%OlYVH7j@lvZxtw6%<8`v1d4kghWM`r6||`-zu;MpCR*u3 zU#8UZSQSaLRvW+)cG@s4SY#R`ac7ly#E&wB;6gR`dm6VVN`C6P`O<%^0jhX~%+&^&;lGnq0V#W=kGeOj5 zEPIwv1BxymJ_fBY96AsZkoGv31@;opOql@e9ew?;_WQbEr!>@Ex$>X)qCZRjFO|Lc zlOMy!>$fh>k82k<=kRX7jx_tyDMo>R8sWvza=4D^>uhc1If*_QPHN_f+!#vV1|wIm z3gYoSWR>lR1N&hx#An=<_y`E5BMlbxRNx)Z8ip&K93CiV!a~uQm&sQJ*~h_|NLqBA z;#aTmdPSr@D2H_xIOIi&77J$j4fQ!*tnAH(@8RXa{aZC*1fMDdZQDbCBtso)O}n8q!UurB zSGD;ihY0ZI5^eb7^XD9Md7PolVi|cbPGA(|?%+dwuwPCgof6v<#>Nl8t8mVGr9JPs+UJr7nn@9dilUsAR;Nlb&)pS}c=XyHd7$I|P1SM>S=roFeXe{^x(638P(mGA=ohq!@sLMnEj!jc7 zDXt1Kf58}77Bx{MPRIeR!zOHJjc7?_X-QRaSVywvpSPn?O2QQwsLw{J zV41LY&9^L0MF6;V&|u7_T==$C7jwt2GI>`u8UWRwO$UeXb6hlA0{SjUQZnftNV?wO z$ju-*sF{n`>We)m2zyqf>mZqSZMw#}8oE%7r5O?c;SIBV7qjn>cho8-9BvWCkDvh7 zA)c7v!>qNN5`+49usT>pAr_Rq0T|wbElVoASD!mnSZm-WbUw*=oyiWbnxV^wL)D`N zSDB-aX>DXt*Sq_*M^b1~JGN~ob!Tvy53^1Yn_UoS`s!=8fggSG2R7Cq(ePLO~ zyE1hs-a=oOqo%}Ud5yRMj)Z&B1ALfeJa4+^a5V42OR5#|a!wJ*3o)a%ylIRsaVpgW zGD#<{y!bAzF9Kq$3|yIGx=fs(&hQh!ot4^VHD&1BraE1gCVR<(vH;JUYDM*XuPwYhmuZCK% zAph7(<50yd;gGH)Vl76A8^q|53gf!mL<^c6I2XCu;wbA!ZIraeF`}Y6$Uj2V~ z|Dnpd4}6Rp(EP<31gD0hZbu2bN|l_so)+M3XiuN;EsY0{9(?}b{^#6}#u_1?)1bF| z0c+`qxtqC1jEEw=bu>z@fJF!n{qxNLEHHg4ub`n)-lPT9}bf_js zM2MgjE2!9MsJUQYNCH0RJX!U=cL8t#vS*yPZoOGqnNL1@u2m&8H?>i& z6jZ%J4%UO9&8kfr^;D!4s9T!zpk(bsGbkq`YMG=9)+A1 zq)(f8L}w3a@8X6C)I!ms*{F?2LXFWyfbb%|Yaf2VTdH}UX*{8lAe-aTRDE9D&-;1& z46mJ1-{5b@)Sm+L3%lvU-uS%P)zx`#&>I&)39N)QDIoy*MUI_%*9z(q=t^k zK?bk=o$Er86kl_0K& ziOX7dhVtMWpVL^c(gG#>61<+SWpd~JwbluCzaa!`I2So(o0X37(xpDe1Vox)IEOv4DMe1)|24LQQjuTnm{o;7` z|J?2Wye^S{R;*0R@DUbm>LO!!m%Lhiu%%7@PB{B2HCcR{4A^5%pMl2}-x^c`Fey4floOD==HPyyR=*vGQixZyKrdqh|>-NmMVtdvboXQFubS> zFe4hkQ{Ob`_Rp=G!I!-Pzz=R`Xa7$<1aP3D0?Z-M&dvNxtp-hAQw%f^V26XHM}>Q3 zodO&==h$V2^LRF}MY*!I-LycuVF?S+F-NwTwSy80m?V2FY6L-2N;d0qzv5>$8M}h< z1CR)y9{Yr=9?F6c6~VD)|79J2HrY0jjUl|hi;}7p%XCPBxK8kQztlgxSBSm?oMRZY zJonCf+crwr>b@iStGDj(4%*{VXXCp*rHJxf){jb(d-S4&?P|L#%L|m)f`t)AQsFKP zgKbVD)Vn|o%3C3gpwvASVY*~IuwsYAmOEBkkXc+OB}m!B;dWZ1ycPLix}c}kOX&Pe zYp5ex%96%tSQAtqfej{y5Eak^LoiAx>p3#yx{;e}a)=xv5EcvLaENf&Xu!222ymCDAv}V#j4d2TsmrXBFmr5#p%a{LFvXX zKfC$GXSaU!*`42<{vIqD-h1|cfS*0XDH2Bt$9IQMlk%<)0l3+g@6PWmJ&K?wPFTD5 z5I;>{(5K$eEL}?eh0RbzP$~yM47eDFAdM6}zic<(NBmW__&kU|)0du@UV zbHOBK5~a-QfuyCWX~NbDxFSsRq0RtBThMdW66?Q`wjdH)0}0wNV2hD65xXQM$y-~` zh^QI2V8iAX=HLG1pOXYbyiwCKxd3>iLd=iQU9fFZpH<5=&tgJAdAQ3|a?~j%3lWl$J}R&?iS7+6 zri6G4lTJ>oml7+IL@PE}HR!M@110q}$8CH_(B4x|(Z94sEjCcvJ5Uru1Yls2;Os@&9s6P8(RnfY~{V6lBjH;r2W%G{EWQcG~A#u5ie%{Nh;TO$f0;5lu? zP~Es^bSkkXU!ju*K+EdDbZ~+e6seoOjd(|YWVYPHO(r%xj0cSGhtdR*rMUWHPz*em z%?gbx9G-njHwY5nIAP`GwiFTkbf?Z(CV(aXL;>baR7eKOMvc(hCy(p5Z``nWCIZthlAm4}YXJfb%PRed>F^ z_UFM@55N8|-_%d9HMPTz!K=@`S;f}WVVeTyKU4bfGG=)Frdykt){62(pgnkuVV`v-_hvpi9MSD^(}oyEgiBtCriqDZCyGd9HC6xtG%en zVmAgU*aVsQmNz0xQnhf|rHY!QZfYbIloqDKm*ZMTx?%cw;MFmuO6wKj0+~~qbdFSy zxg*?AtH40Ds2Gt=+(jfTzy@@(stvpa_OM9P&rC33!XeEb2O%ctCFBD}4nQkg-1UmE zsH=a3ci|UkQs0h?fo#5&J){EmhkyQ;|L1@E-|v6<)j$#ZAwl$EZC=6!!frURs}_y< zNn~{^CYWP8xcr8TuR4z0cUmM|gSe(iV8^eGS99z+MfjLp#;%7<^&tTb_D9+Q02i^K z*C`bpafF}ZmC9=)!Txu4@$<1b-feaJ&P~5>!9+jr^WmjFHw?vHU2cil>@7HM1g0 z(+T;uDXhF=DbNQkt`1OjO(b|ui{oc${4V{|M~@#rB=~-Z#~i%ag|g(4KtNAt35BFl zZHx^&;S0bp&mOf=2~tBjOrR88hp~RsyPc{{ZM18(2@bdf!C;H+)5Gi`03Qcv_PSOehmI!~V+K0+(ug*`Ht`x$BN@lQTpGk2u0O?Xc?vh?j_nu`3EAW=*u zs6VKox)tr}f;tKN;9lzOJQ|{DID?|)K;o2sC6kfU86!9I19Eield~Fci1I@=GnwQS z>D26*xVme(73Y#J!I*_PDuGib zbx#H>7gzI`vdYYb_Ey=_$tOKYuSu08C}Bb7vBmX(%ai-}LqHscOh_iz0A-hvmjpZ_ zAI-)y)I*`~dd{wY-)~d1GJO)2r;fLUh3&fP;5d|c#)D|ibd25j<$43oo@?>R&T%=E zF^mMmW}>ko`NWlV-;9dOGeK!~*kHM=3^r=Br+$G?l`a}TXZU8TX`|4w`x)7;-;=uO z-2u(PT484Y870l-e$FoTD|QLkYSAjx*ztNho?7b-{jGV|WYA+v>134bQvV_bC`Lsi z{g9C{Zexxs@orU8nTKELLA=$w+QZ`yR^Yl9?YROu6^_HNQF@3Y4cJyFGKP&3b=4yL zldHnsMvYe3q74>oQ`8wX$DU11MTAVXLZuzwfcJa2b0Ya&FI3|*;qK2b`mIe~&UmKu zISKU9N7p>djuY4~POUV>X7ni6VrEBq>1Sj(D4?TthIW(*u}b=W$7U{O@vR(%rx3s#iNy5L~Jr z_V}oaZ#SR*ay|Yg{%8K*D1n=FMH6`*eZ_-9!l;||pp-IdSVYY;aTx}lZvXnTJHPt* z?Js_Q_t(F=^TjXk{r1=Ut#c#uYUZ=I=sq8B{~z{{4K{Ixw`Yr-O1bzNfK&f(3y$m# z>huz-;Sk0NFOq=M47|9Uxg-xOs*0Pfir*ruBbB3m)QSreqoIc}4|6>71*o=!m zMnJoQq!eG|kHVJjJRfXk{CVr@)f;W(E~k#Z0gpCJPlYDo*=z<^h5gfZJWrEdC3EsV zhcepw;)8_6Htttk>vO;^Zxsfi?xc;E(r#jUUihOJ5gqcHPEw6J#mr{9cQ{eQ*dF!Z za@2jEQ>$NFr_hxFnUZI;J7G;RPQ4J#g$cCl6&F@!L@P6N3fQ9ME4fW^`Jl$y)(Fmp zDZn|Cq?kC&EROi<(MRjmJq~w`?}53v4QxQD5Y(Z3z>%}vyN|ri|5}2FaR5Rd=Ru^oAp@pH z!G;fT*;ZJ;8e3|Qfd|u2UMK=Ji_v6t<|4sv;S%1G0;fIDsC_pu@-H-IK?>vw{zZ_!d52MU7ik z_$w&vjxFI5YXG-@a(50AXV!JUd)y4|iDirCl4_KWZ))s?>K*2=Pl|n}zC+vj#l15L zzd$F6u9Li8wkZsR5~$an{A&G=_b9-lx;g-8K$pL-t?axT@4fN=*`qaW_mVGrf9Dpq zIWSJhiA|cJzr<&#mNU>H={F4sHU_58lID|_Ng6PMK&FsNp zK-uNo^H+laEy=GOI2#7+*Z=ab|HuFIzuy1yYY=nV6^jRWi1%Af@ql!jI{ysh0jBhb z6~W#Y<3$YAmAcmIW_AgSt$x5ciYnM2= z?b4>qCq>1jgu6SrKtID(q!~J znJ1l`M!0S1DQVh71LqAcsjfp`#!wIElV3{{a^;-{tF5y2J5=Q%(O9b^q`m%zT3Na` zu~gh!g90^@RcEpXeQwOB68FK^t)&Ofh?9-PT^sL_D}tBLP_bcqUo* zn_l`riOqurWmm8h5+P$dnhz}?Xaroj_cR;njKy4qeQH~^mG<}RKYVk138B+SQ0YX} z8_X2@_Q@h^ApbCwszth{4+3=UA6=*BND68qivh_MUBck$#;+L#?0s6Ct`1~aGiz=-!5&}u$=h6zn87K3A|TnLRSrT@<}!8BPO%}X8c{r}?c{`Qy; z(g>PX$8>^i98E%RgtMD>-Dkzt;l$TABKEmSreyr$8mX~R5NIgLajg-ps(@%@ZVnqm;~$VR6;Tw2)$T(nZ<8s-bU6`ZCxQB4B>#&kVZsKc7=wPi?}p4rXFU%gl_MeT=jSLW zkRSP20@hmg7o?pe=v}X_UA@BLBlzEc2eA~7op&a{=$f3- zHvFH?k;ek^pSjVAnSeiCZdgaTf=dN6q;SscF!j9nl9_2~1t?h99N{!k#_cC=9bG`@ z(bZd`@k>x=OUan!HckM!$Qr;!X8-ZJ0~d5*fBm?eJ2q_h?nByvB;+)4(^J|iDNgUY zJGe2N%hFDCj$^Z-5^J599!h;w5oihEs)>$~WGi>k86-fPhbUkGiY@fs-MJ7WW1^sh zIyQ`@zTR-6`k))s&rhwL_g$H^w278>E{}>xsb8_J0hDuU`Rw<9UAbD1tpyVCpowvaNoA=7_cBHRLe&2L|vo zQlKVNWe~G9Uc{J`L1Q^9$~dvPaKRgJOSMo7z<5KI3TQXzO8T~RcxfJP)*J3#zrP{qnDUS#@6fC#kt<36d4XbY4PMnjit4=em;I@UML$<4K zv1n)~q57$pMLjkFSE!goYJL8Hbhs!tFIq!^QcfU+J=q zg>x{<3CA@>f)pq(D|}^$Mc86|<2G;YVc$NM!<)z1XzU~W=#uKIpq=j~Ab!|epF^&| z8+SN9Wx^7h(#qhAOyI@kyc75FGd^KDGfK!-UO)r;4ES`&pr%}aqxgoWF!lWNjk~uwKDc#GhgD&{ zEm#9V2@*QzWARd4Gk?w5uE`vmx|5jSJ^TOd z)6?%SLaQQrE3J7^pHK(|@TVa$vc;q)(K89F+gCrnhTC;*zk)F5-C%##|pU}(ss zOJMCdX5!g+FIb=ThM97;JBU#<^D=@)3?iY@d#bH>`8IO{MRJvKOv1ci?2!@-sMQiA zR*+PYL6>4?#$%WQX)1y$feHtfNV7=hYG5FMG;1kGxCu=p0+vy$eI*LBiAW%b>gKoc zSGlY~Xl0h?MCT{f14fJmEAaESOo(vdSt*Bls(lT~B-n!?uQ*SiQRi#ZxMczx;nx6E zdHy3XFnDW3$w8h#iI$j!p{Z9c|L%*=%dk#@)F)l~!+-kc`(J+Z?Z{#cO4op5C*V_Fv&Qd@<+);fxqqxB2WYrj1iDUJgL-MycFZ6P-#_A^=e!RX`@` zg*KWOP=CgXx-UbC45`2`+SV$d^|4}?e%tH_bx)tlp8NM7ay)#%>wcc_RxK#kH93ja z8yxk^$}<`2s_ZLbH?XFz7)mVBU>!TT8j47ONRY*|(3L8`bjfEr@ z@<*NI^DaXh6<>wq{D1EUav6Zt5B_<>SMQa0z#|KfAJyGt$;89_=5o1&SStyZ{@JHL zf%y||-?;hxy-zRwW6Y`ftAYo6}QKfASCiaVvDruloFs z;nZ|9r8O6AEiS_s{DkX3s>uX9kla*XJrS&SVv~pXL^x-p7D3U}HNn77bqpU`HoX?^ z$UHbe{VF+er$9!+!Vfx$#K*A^*@H^aMA)8kDstP$nSX@v*6shN>Uh63fMXz-)bZsf zpMEmOy-)7lxp#*VO|H#3S^3thy&EqQ+D|S~w}_Z!X`Kd#F3HsT zumt~Q`=pJSfGU`g;-(G>m7KT~@0N3PfwGF*#7SN{Lj~KNvE;1|Qlm#02k>S0x}>FA zf*eE!JZFhhbybFOP0{Gd!a*3svJ&Z=5WPgHD5|Ahh1>3XHI_AbV#4Yg;V>rHwBRbB!QE0eby*mrGkQwKP7Nl~o1;b1?OPYW9D?f~V}&C#XC6O19MC zbE&*h6W8LwKecxjIc1{{VXb)JbdF91JCbu`hX@rJMxHE_oxS(z=OjcyiNPF|_5xik zpwwZeko8G3oUNZPTS<`3Mm-hC$C3=pWNO|A#abH!7#({KYA1fY1^`%@$$D@-|N8$l z1g)rzqi@SfHD- zMg4`a`ZA3fBIGq2E|L60bCJp{y<7NPo`u`#dN!06bfrm5w6`$%Oz&?TGD>aHH>m z@zP{$cAVC>q{T=Uz0Z5{*+M^%Nd;Ew?zK98nX_yFy4L!~3E;r7G59UNAK$qChU512 zs~kHBY=bxy?kOwUMro<#b&k8O;WEaF=V#<~mt=$Y@WoCttVdLP24yhvNWh2Fh%3;P zA1Mi^K2V}nJGhl)>g-l$Ym^~zQjr-H30a9eJK5dY^l&E*RQ6-jlBF!F9#N4MNo=^eurB9hEe{xybAsiMs$USzmNug&GjYSOI@1L)+b2Y=PqbH!UNZAy$K1&j ze)E={=PvG+AdJ8W$s=}A{R$u&>f8193$0gq2XwoWhQr*E0p|spUXJ}PJQ(I%WVnLx zE*9?HyLI#DKYv5si_HEzVk$UzvL(hqnAunVV1w)D_9_q-^E*!Wqesopy3ak24Xb4@ ziM~FQFr6;MrmK(-dKQ|jsEbDC5L0m!uZaM7k5I^sM<|z`fP(5vFihM*r7zq;gOi?e zbBY=~(R}8hn)>&W(xWPA)bQL5ERdNS(9)VEWa@ur|I;>VvsT(~&O8S&j{*Qgoxq3K zD*KS08dawWG*TW_kSV(F*yjEGnKWt(YI*om@96JhxT(96kY+z6wPv?9)8E_MawA;N zAhi9br5B#<+NNNvN4yaiSdJEtIOM`cRsgJCImzL$OG3C}Wn@rbF_}1^WHeIMqb+~5 zunw#o9=9hhA~@vA!3ZXWrae|ny<2+ITebk8Z3BS5S&Nl9DqBbo5Fzz%ZfXJEYCF^e z>1{fd!e-Nnb=YT2Q3h&q5P8(GT}a;Jk4GsYLC6uX$!X`el>#a({N2L_a)^cyLF&(C zs;{q~{hHhsW%z(0f#Y*Igjg`(pqAj<)q|3u8{C~| znVphYGdJk&f5giWv?M5|&pj^$Kh~%=De8MRoE61HM`U-hw@S@BElp;h9vecMJ&YYzZ1pWNY7#1Y=qbs&3y1&8YXI;4+81D6s{AM&rEFqraMp8XO%7_jvo*}U(e_{T`s!kS82j@>DK^HEkghSTBR1 ztUKY#sC{{l8Io<3{YS+?@Nn}_!weEsDg9)9)J{V%_~ z|K%SZeD(D=|M{PuK7922DW8UX{=)Tu7w|?ptoRiUpUY-}d|5pQLG_b~zDO@|!B1x! z$Vn+E9`xW_H^?Z@4{8ckAc^+j&75IL_%cRC!ZVSVMPeTg^5Z>vQaMookjVu1?@xmj zF1$O3z!C+o&3gtlta31E|IDc+e-8@)U<}w8>&Ab)D?%A!A%Ql@$*3o=9lvRt{Lkh-~x-&MVS?DOV!R5*{n$auL)yAAviPmI&^hdsPmn-Y* z9MkYmjgCi-!ZgZ932%yG#>cnc^&x<_&i)^7|39wif^k%a<80V4m_k4eH*l0) z1`wX3i^;b%bZ#H+?u4yeM?W@sO$_17>y+C<)o9v=h2|Q4SjZX$Hs}~%HChCZ#&Dpg zdjZNMlMSC;0_W(oBAP$?+vKD?3$3w0HgH$(LO#TwhqvuswMlIViP*F*>{j96ZEHIn z51yQH2-`hC3t8u<*P=R`r0>2{gk#ZQrVJBm(jitqB?ia#xL>SNmLLd#f7?+>pp!E# zR9zi`4-PVIlzbRQs@$-oblav7Y|w16oc!|@LYFEr0$C!+#%|Kc7t&?T zvXt2l}MD|L>Md>Ut8BGT~9SQc;rT_bX z{$K9gzRhjBD|S45n9=SBogum)qtGZ&mP|j5??M6!EDX=swF@szPXNp=T<<*}@Vw=&vTj8C=+-m%o& z@{Hi@z$9ZYC_TBR#WIxTXJ!`2(x8zTtClKvG&Qw3!R%~Ykz%skmtQkBM^@@_a-Xp0L!I*E)5>40ro zW_m~!t%*@BU9PfgKD#oBb!VEOrL`gw^oB9wJkq0`VCztK!e*$VN~G?hHdDu;1V2&m zY02z?%^t}!4-F{Q0@O`p&egEdc6{T~C1(F0J@5^EtO1<63~-Uz{~hGhwkyJ?Ns)DI zdR6fpb(1*4q6uVR!^p&jsv%Pr?>xlxiR3^cpkeNJag5@O&m2}cRB8fowAzn@yLkaF z`bk6PC>7k0Y-9uq0&-?FBy7m#py&oNyJBNjKZasca(nhgbrE;#+6#*cFr0DDy?^#6 zzvJ>KL~q*b6MQWLII~Di(-ELkta{9$c7fOl~TP)K!Oy}JL+ zLq0mkK$h_%V^n4(;Da0^mj)5mQXlH1kcrPJIIT(h9YCLHpom;TE`yZo5p%eMUNE7R0{x< zFJQbl*8kN72;5k63uGOY6vMv7z4nhWbv`ApaXEvBHh|}j&4E_ z@5w>Un6}9Cz+o#$Z4urkKqxGcB!Oz|^x@OfCL-9sCEkR3JR z=co%HSFfRsej-4Rhp+2x47>|yUTFe%M*v!mEq#v0?-o!wN1CBXNN<3bXeg zVG|E8>==B@CR3%@+;uP}f^tn{&PwM3;lJ7%z^PfY3!t{LF#Au8C%*TC_mCVPh!|qw zH;mGs`>kjiq%qm;$8nP>fKs;VLK=>~qA=WxYADJe{TzI^l1bsq&tnH_1v>xC6hAg~V6Dgxv@d%_w8 za-(t$#1<}*gBr~`yZdMMzsCW3DbmrCKs+K~o{v64CM=R51eK41Jsm*Xj)vamxuI*< zsP94my&5r#o6iTa3Gfk%ts%wL@ zFpdK*lf_QaYOT;eTbhbk%0t-s2Sh?S#k^QPwX30W`wba#_oCadeq+9o5iVW)6lN ztJIkvl;%v@=>)Jtf5fx33h;oyd$;f0y>sX8?YsAG-O`fh`mqx@A)8~KtH$x%Q z=o8^yU6sVP0Dyv;Ld(IcTq%gEIo}ZN)X)|{NlFnBoOuu&Xn-iAH@Ic_328yx7^s=t z*kyK_oKqXXP~+BJ3A*XAODG&D!Y~{E!1bu#XrVMZJ0U)SgRuBm1(6`WQ=FVb{+v;z z3(ROSeKW3WRPgB=odaum&3nJXXYwHOp+aZn;aN5|TmUgpO>E~*NP%zoam z4Di-90Px31UPj9RO>gLq8 z>eLy{u|by{ZhGWjXijWJ+_hcfq;fBWQvAtR6yGH#1o4mwxI!hd9d>I*!-%Mvqoi|o zRiKy(3+g+egH5zqF?XmWm7Q8SCp~Uas}$l8_dyj6q`R$J0|3StFcCm_UhEM1TLZKI zr}EtT`7dt%?C>-I#W!Sbw5odb5KCgh+4ByH9nA%Qsid2ihIO|A4F8FjD`uSefyEcnaQ%iQZErG+Pbw;htuJF@AJ<;`Ss^d9zHf{0u>wlaSjE%eRi)U zB9uZdq!XM|ZU}ht;2}e9a?c@L^-jErP8dF-65L}{%YYpy0N_M0l>(f(+ZW_eauTg% zHIwF9nafAqr^{z1*j!RKeK^IV?+ihir8tI*vbv_9hD-Ppj>g;X>B@YGSupnThsH@mno$`j; zr-Lfzgf&)g5$kOjL$^jgffQ)e;87Alc4)`L z2U;hNtI@uqnwfES=(E5u!W#sL>-vBI1@tRefMf3ZI&+9jSeTVJ*S*AfU}(%O-u#d^ zmBR{p32qW)_jyMPQOaGRMAmQym?$}t6*#?CRtlQSqYk;z0pGYC5ui*5je1zRfUJ@A z@MyT?pdEe=^J1uCg>J_nsUm7%Sxhs&sj1LLu=DHp-omglaEogtU;r6d;d2Ji2Tu7S z)3;y_izs_77dz6F3Yh?C@k9huMa^aS0-rQPr(u7KH@vreq9`?0H~=j%km)vfmv^N? zAW{#!QX^1E`>Za{=po^sCg#=nC?Kb)59ZIFoXJ>}7!WoBe0%e`fzrp|2ggCwCou zq676%TOG+MUqp|V!3MNZ1xOb)uDq!Fqe6E>6~;8|RB%p*Tfox<>T2>k_TXrBYphaN zprzfml%uK&6YW~l_oMBYtv5w(Gf_2uC&_y%TzARkJyDwdp=#}BLH$D1*q5yUO#p8g zgHlI>f~k55_d>vyM&IN{wg98_5LH1fsiMeX8YbHE8&vzKTXX$lG+62J#hvWrAMTNp zqeOLC;2wuCiQcn-NNSln;QD;j;WGq#ls5OFZq10V(bVTPP}Mu#WK^k?PI zumbS);|HYOy?5)*T|S3&CB)XV=+BVqB`#%?06Fhp+BOc=vjnr1$2;?g*q`Z?TaPcNC!LV#y_ z&D?eoxQeVxxj^h<-*_8rimfE+1=(G(Zr;Bo1v`AInC(7xq0E*VCFn4-a{{tdWAW!N z=%?|bAhB|3qScls&mKQ~%GM1YBVZ+x{c$D0>1*bYG<>@ZIu^(r zjfEdRQno%A!o6XjI;63gi+>nkY&(*mr{Dkmi8TNux!?MM5tgoY2sM0O0p1RUHl27U zhn732j-2AByaaO_4%ut4lg1G_p45-PZLru->~n!6;$|^S)aUp>Ij6$3+kB(6L&Yda z=Uj9xiDMCU+ML4W2pT|GudCn*K7$a6;x$0$!md-cXmM6ZXTMZ@v-J}9==01$ZNz-d`9ZCVB( zCF@l=7EQL-1xDAeyS1mMNX}GoAYLdN?vnw_#bxl=n>w?UWMkoC{t^MqA%B9D)OZxP z$yW1Z3l$LAh(oYJu$6%p5HRRqNr0C)DxcmWJ1~X2T+ot5PMvHU{E@D;FP>21v%mhU zefFOxU}+?1co&>aRc z7<5?zqSRkUAFkPnBX!z>MHz9TNZiRcl6~UD8-&P_N;%>!y8-ZqY&C$~k%3s_(yRu! zmJjKQ52QDraV_U(*c@>C%Foa8=2WKsk7xf+WqzlJ0H$oq00)(hcPI3pl*zdyai}t$ z#M#AOawz#FVijT7JB;R%`>KGMra|K?d+EcRN8b`I8s?j+>?fecOUAssB%h!;h{mcm zj7ad{R=;z*ibSfMW%-ML|BsUs{Xsd=Jm-^F&~TJ~K@Iat)ubwhJAlU(F$!lYOP~a+ z+=M#Cex&pJ1AW~xz#G;8^plMGS_W|?M84=bwX$Kt{KO9ILk`MnZNu|TWb~sPHj0itM9RW=_Gue=X%)VK8i(G3HnK{mcye+kKfQ6VC24&8v zPO501JmVgMrby?dUSu}QA)8P_Z_yRxIjIl);SJGvdy(c^3`s2^$Q3$LL2_aWkUn1T-w7ts!d~3s=&E z(T$Pl;vB}V00B+W{1k9qdvEN=yTqMdbjB3v028JQNtY&v60_3;OZ^*jqrrR__50_H zKwsu^bSQL6CVehOIW(UZq7{vt?9IFC9#i{++=V0Rr^TMe;Mva`PGMeq;s8mzYRK`s? zM7PpFL5U&=SBgmqz1>WyWdvvzhm;;f8#t~pNqwE9ytrofzWn6XffyPyd&X9$&i#Dn z-pxyB+3~@vTDJW-`2u}HQ`mGTWs!7MiAXbmq9K-<;tC-gcp20TapQ;x5X+g_d}zj} z^f6#3{pT&=m=G$-EI+fsIXBNfg2aY;=Ham<%+opng6ct@z6eRcKT>0$;vimC3K$_! zc1b&SARRZm(Cy=$A@&p{0P09`QAery*-{`tqH6<~q0{T31OaNeTFs0H#Q-f)T7k_Y zzs_r5ux-miL6FoM?2Qg8;MJQM&QoPJEgCQnR6Ppfo_4wN(K2SR%SKhdt)gT|BpV#tdTt03+krZY`}S&{b`bX#6(a5(P9NQM=i>!K z&QpqJ(t|3A&U!Yr6CbI78FBQL^9pqbjO+3b0p&hi0M*{kMZ^mC52x0=`mn}$W}Fm%uP zc7Xze0wPfG(t32}%Q~b&A4mnn%oTN+A@q*zm#Do98=P^YB187YEBkpoLspwU9Yq^1 zW#xf>)6?#Gc@aozR$ns|Zs8}o;$R(xL3%&mymj4|$=vX}9l~8fuEvMMSzi-1futpJ zvN>n^{R2KA`|#m&Hm*N<@Z{k)Y;I?^`Z;gZdHResU1!Q!$#i?l3$~?4@=GG@NvHTs z^?MegQ~uaHv9%+S2Kx+=h%h@SA!g>NFF9+>CqfJ*?ZwLE$F;4vQ=e&qLseNf;ruN!*oGYgQE zc_I6qGtMy4HnJkf$H0AhjQ%RMu%gUP8Ja*0L*(olMSAA0JBWR#s(yd)eu-kV@@Jpn z>7ysZAM%lx`1I8w`?F7e^6AGPtDtZU`uooam#OSpM+7PV>aYIY=YRR{juS5)hih-m zJZ&b~l4JPPAxs!`iBliM$32xuoMn`876CLHE!V)g_|QeJ=E&fWz2Z8D{E{k1=xmsB zbnt`)Y~c{pI|igPZQ?tYTiK5v%Q!px|9&t}m3rO0|EX-p%K**tp(nK|tS+;|lOCyq zAlPK`I61u!12EK%vEX(7X@NZQf@+!W%J$1roJb*1uR=R5yYYY9d9)tex8>3{#}Thy zL@E#z;cP+|wnt*Do~cBb0zsX=f7S5PB8AZ&qoYoh7hZQm7eIS1D9{FRzDBgJ&QMw0 zvk<2EU{K)zSOe%vw?W(nvKJ=;m!{|(wu2{VY185DU`E@bTNwA{+z4Y090=D|VMVR2 z0cG-&ioY07vRumCqV9lDkeoFyng&#eK^~WkJh+6{Y%s#Sm*m4qjEf=wK(M-Q7C?K~ zC{(c)t1?`5pD$qc@Z@bo%Aa=*Q$fJ+tVl zlaFvaA&@Cuh!iY|b(kU{=G<;Xdn{UVu5+a(r~1hjrNU?PD!1oyUpA6Jl4t6wraj&5FW34}JPD;+z1dba!ri}55hxYq!!RQp}Bo4KbC%) zIE054C@tzBN|HQ?_TQ!Kr6p3O#ROInhN4Ebs1MR4byx@ZX?D$QTjPs>xLF<_G?|=A zNaW2SRNn_EziWc0egT{f6hE8zW2LYYo>{G1ckdz49VTfLf7gcq;N=cvA}lhy4)*#W z6ASA{77~^)=T@w%pFd)cw{0#^n5&>|+UP6cnVz1BLQw)W9CRjI?P(vmc{Ex_MUAR%>EYjsx1@#T3D+=@p{P91_#)Kw)Q z$L}~WaSg!1N3A_o7OdvL#W4?C%1}f9caT^AILcW#>v!Q{n?+MOnB23 zbRTYS`wJ!oC4R|dqGW!^i%l70&<3yGQ5aA44y1oLGLf%ltdUbola5M{Sf%pL4n2Q6taQ+P!92$i5{jh zej@`la{k%xfBV^={_eAX^Lygw23{5moVg_piXPQ5B8|A<7tG|X4?Kb!q6V{YfEh{~ zJQ)$Du_`8ahXlZ)C!<|Zng;0?xJw(~1BGgcevmMYpTs)907jG?cP3z`Iu%03%b<9655)jkbn>7$o&W@A zeo8S?0fVWP(F>76E=vg3@7%y}a&cRVk+UieGkm>|OOi9VQYlRwREaScY-Y{01po)J za*x%54_F|m)2{2Me9y}Fe}*?}(aDBI?3iN)gl;_%2u4@& zhdolDC2G8glG%T!3w;O9Y+;sqFuD4{bvm{##f|02Sm(a1Wgb@W3k271_`*Qyjqi?G zrUwoMQaI9&R8DvfRa1_6G7DbU?hiMb<8z%wg_(vA2TG6YH{%q#e}k*VzDgS~6NvkF2b`9?NgZMh@%g$|T6@3ki@Ah)9jyhr1VyUF1=KebS%EG1zn00N!Kc|3#+$_jcF4qfT)!U$(>WhyP|g`>luja428dbvam5U&B34%>61}@eSVgy$A%bhdm`q=fFX|_ z2W)Yq+olOr0Re7(mgw4GS46$~MJu z(2NR^AD0;m!c92iZWNGSLSSGgdP6M4=z0{2y%wFb=zD24(+pChP04WUB?=_Z>uN*O zq&Egze*gn_fu0(v&L)j|Mq)#+Q2mn+hIVv5die1EH}}8#@+-HmKm6v&!~4&l@X=rw z1N^2gGu6E(=gFfd9B#UQ@$HjGPkG;stzhk-j;w$QucT=kkwHx)x$M_5;k^|g9kM|| z)m_>GonqG^FW^d|5l9VVwjra)mPcA-sA+OlhbgPgASVs>fN+O~^)!RC?&NU)1pTg7 zn=LG_wqiAbHup-|x(C+iWDN&mvQ}DDsvtxCE(lyX$xo~G{r4;YJYnMhF%Ji@2Jra) z*N^Uh{gCs6`;T}S!_@*l4OLgd+;WK-ayxKt*>l-lbpSj(=V=2Dr_wYP4ALr8L&ETu zMkN35;?0_Ovsr;wwd2DN9#f|)J`drIEQEkw5(wW?m1Wl(>lDDyJ!h~ZaCgENfAyYg z02=^*r?-Bbvd6*3xVu4+wu*oXrD%|>O{yuQ0A$sZn4iRDPGPS={r3kNk+LF#gMu&# z3w1^^7K{#PGDpW0zWDjn_Wvn}i`gN({WAc(kLzvAB@Jjn|V547+B8 zl;7EAwQn;kl|I3aX3kA>TlWw@%1VKicO`FXunI1?WF8o1zs#N)t-_QIToE05cr6mW zY#!X6co*HLDEt5d9W#cT^vn1($1UEnb^UtOO5wmKd-z$oh}r@|^? zL0j9JQLd%H@D!nsuy9+F320 z>aZFt2uI3WM8<_m+9lo*>Lc3tqIr=QacgHX${ojt1q_xsIY9oM)&PWd>C%nc*Etv| z)Pm^1$B)^6Sk6%a-@S8}*8z=QcnxPMuScn)MbsdpJOC_gg1nSLC~9n74EA!<-s((` z_XamF1c$5ym*uR#71@-m{#fu8VU;q_XcK*H4cQp5-~Qd74F+(1A{$CxH75{MVSrl6@K27>FbxCcWUL!F z?&N@pcH*o@SY?nQFkyI4idtTP08y}zCu;Nuo*xC8@1v_j6z!V}+|VHvNGyrrvu@nD zb@%SwPd>TF{N_)8x*tFN#b+P?w+yMPoF*b<^g?=2M_L>ub@pG!iw9dtQKM2w?)OkIcM{YrTzWVNOiMMbjg(C6hEqE zJiwWA9@6?n;BZV4^g|p7K~!6X>hHVNn!J^-RB`12K$GNi_tdhY@0x zbW#ItrOc{*G(w^0+#2kZt{Twm@T6PR|K_GeEY~WN8ducFxdz~*8V@i1HD~${&i?DQp;RHU zkOA@|WF#knUOOsQG5Y5ufRzIKaWRn3ls7_ht|4H`0M6h<82k{i@aP%Y381MzQt@aB zy5&0)xWi&N@ROZt&b%j#9;1S?czkIl$UgneZ%?pbyP%=nqU)DxM%;9AsZ_!k5rK96 z_0dcuOm0zYdQ{~PEm2I%C^Zt7WVEzy2aH3(+)ATKrbxU6-RA}z%h^Rsm0=G1*QN>> zSf9+k7YfN!Y1A;f8gjI9dZIt7hzuzwQEc* z!OlMnQ2GwT@JTbZ2hJ3rO8Nx8_Fp&$vX@B(5IEU_7kIhGsXng||4Js_xl)Rto8aH^B6mglTAxJqHhDpl`HlJeq! zLugL+Fx!J20};TsR>9y!1Rq>sJkzSGZHordLs8VjYKq?&P$S`|JDwCuyrNeDj?N#c zS}K(DUTBp>ShXa)OW+{@2N!P(%@MDzB(;|H zwFNy1&<2!BQ&wBuQFvhLKGb{)Qv@5);xerC-n0oBf}7@gKbY>7>V%`hV|%E0KGxbo zW~u?9s%2{@1?PB*Im>?*}B}k*W|6VuLzvrnoHnn`X$Rx?zbm*9`zc zKr14MlUb7uY4uPyRlEEUxDm&$2$Y^Oy8@`8sRra7G=y9lk7(MZQMX5-rVkT8lXcdr zkZo995$ACLKNY|e0IUV@nxKbIcxBMT2Yxw#Wm+Ezjia1eP#XX6pakoEJ%~ zyIyx(8=OvyMv+D6t+W z3bu*#yVF0MwU9RCKLRj|Ky7~`X71VAhN?_;D>Hvj9zH@b=#FyG?m)}d&X`AT%kb5Q zrvMk$RhL^lkHWqNz>5WrlFy0G)c<~ijjT8LaJLoPoWcXia}+ua!OQ#1Jd&V79fwq5 zFmzGX+aB_XBjG?W5Mzsj#L-fJSF5VWFT{9nQw~S{^zjn_VL+b0YJ!Chz}$;Lizq8n zKUq3KBpvs~DhF!Sd+8Eu0EkT-Z1)aMgb`U?L_jU{tUeKeiPeXh$nYh|>o-80Dx$$Q zi%=&gn;E3- z=V{`rs@!((gelt8aiH78*9LYlU%mR0F7ij$cv73Ot}n6r|9!w*zq`B+7ze)a=LFV= z%hKh0Ea$Xkgr`gnp!ZmHQK}{fmxjWYnU_5f}~g{9I?&$_Q~)DCJ$I7 zw1_!WV+`Q@MOBhiV>4i{)c7@6R*?LA% ztw%0d#mJG8j_l(zO(~AhO4)vpQSFT@4HNYt7wWrt-R=dGZ@>DBKmY9azaI?d%;e+o zB~Qoim%RLyx|rnr{w33F?Av-GpwC0AEsS(!S1JUXN6;|bRX5;=iR4P>&>eXicm|k>E#;w; zr5n|=0_Q;J;#-UX%uHtl5GX#W;9`x|*@wp)m=6cil+F2oB+j!UyxrKD5W7k= z-FmYuA}+xezwgJ+p&M)@LMg;-92ZQ6W$vJv)h=~LjwXubrs9|V0`{6s9b+#FIuaq5 zxnm9@>IYoLH6a3-o1U<92i$mek6GOwMjVdksK`$!Nc1_>p4gp8#j<*|}`M zx&|cMHL0hku0f*q;fyz&MthWnZ&C1J0`j3Q-qc7KL9yje3xUTqS1w(M`X-9HnK=PP zrm&`4Y941ZMyMJeXh~gq1Y^W8g%UhCt3GBHJ}4zw71bNwZjCL+rHs@%Z>@PBS%MC` z3Po8l0K7e9m7lW*^<@Phn>Lc3my$yV^`SQ5KqeKkFSR)6kjVui6$B;Rlv&J}QnU#I z6Y68O7ti3UE&BF=*1^~T7HS0^NS5Q2uD<#525+(|e0b6&o-S1fNgPU)1z6cnn8?#x>jiWs4H+Zruu1TI1lwubu=+8KzZ=KdCRh+rehlzm}~HU*kk#n z%*E2Gpq`M7S(#Qd5Ug0>OWC}yZAI1EHW<=ip&!@Pq|6e)jj^>xd}0B%gZ7k}E9%O% z%K$Q9IvRBo9AmkF7Q5Y@HdMesT!!mGr#7SZ948OWNxVis%v2df*I$jLJ=Q?;njmL5 z`vWT@Oh#j3PORXoICJR@*S3Kx&-I6Kd*L}9MqM@8xC;+CgMoN#f>u;h)rv^wI!fVW z@d?U7K-5Q&971uigkGK>@`O4U{m8ZZF1xssxR!8VvIH<`WT?1|3|_-W!k zURRP2TZ_*`uTGp z3w(aYie$RXI}XPhf)M8*@wb2b_s6&192eEM1+kU=Ft^MVL2F1<%E(`G;irC&mQjHj zyrtAPyabCREe%owke>zIaCQ_{OzhRag}-;P*rL}R7~ZbgPHfUsw`ax zLfGq?m{8IX@0DTlRQ5PcWF|`pnK#ttbnDhFKhnV(fX@dwd$rd?N)`BP15?;_C0?z> z`H`7N2b|3iG}y_o4-F6&14B2CuoJ~TwKXj+QGJKJ?T(Ti=jKKwnx(CE%gG4JrkqT& znsDpx$FcqL$3OWbS33Ox4VMhjGzM&(;%g@4@)hSR*^@+ zC|i;CB)ZBRT;dkoIm5#iQUaDX=c76B@Q$AazPql=jRtsE`A$%Wwb3afS7ZZB_UocB!d)d>cM|1AQ;w2M@WG%k{jm+pVdOOmnD4?o%zaFyFM#>@Oe0MQ@#CO>Nj zlN}kf@m)Wu8u8WWs_BYA7y?Y6Q3f~-^VhS&`j4f`^j<8gCq53{7D%Bx8M`r)vZQLT zE^q_8pZ@IApZ(&~pZ)yPPk;8QSt>d@Q*@okx?dheCv6e3X8=9i>3;b`BBzz?hrpV$ z$IAe$0ni(4P@rKlzo*?8Xzwz1`DgghbzImbe>y`n|o%%n9h)e(Wg*$wC8B&vV zmstEq%b}(5oo*co>HBl%(4?e>yGeYMa-_{!Pc?+lS7=k4yiT4#neh_$N43=)K`Rn! zm+@GV1zK5dmYh-wmk$ZFzgpe2CuGO#<4^8!W)0vsf9VnkI3JTn9AO=&Fsa54D>ROp zoT_v56x8I3*^lTZe5h0H%JhQx5v_rv3p*rJMi>aE1pwk9F(LO%~f2FvuaB zjw+o2Eh}C#tp+B2a8mbg7G(tze0PMM_)G^-A!M%U^y;S$`(ubhCxZpqm31M8l}dhQ zEoj9<~S8xoxM3kZIFK!e;s& zP*Ne80+*5m3i7B8hx*{Wp$4K7yFx~n*-E$2MAG;O_(3UmGc>;jRs>|m(bQ=3kedvv zY&Zi@bIMC6cL0J@H^m@>0q+dYw#}ARkPmqQD|uwBT1tcf=-Gd52g{dQ z9#uLB=M6~I9fFLnV6wcz(-2;$)8di7F1RfKjJ@LxSiaT9V^R-b_Wews#C+iv(d`h+ z9~R_HjAb$iNDN9j&kX(`jeV1XxGz+X6dwXSJzOA=GhX`m?zwUH1YLa6{}hB%&jFme zd+Ktg{!b;o-(|kVq6*jsMU%*;Q2}i&$?LY%Sv7?H3NOEBINbyp`7NOK`p*R`g*7^( zpUoztKfn>zG`kqI2C6x69;fZpFAWe{gt{pgZ6He~FQBOfb=44%lXWU$!H|E9RL2L# zqA5m}0i($z8fBw^Mar}^S|Hh_r5c^e08!OlTa&Q`DM|t^ejs3_!PI8Rj7xK_ldjk- zH}}dcpRnk_BUbk?rtxLzyxoFK^D$ zwJYDX5msiE2Fl5Lm>~o!>TdTp^Wr92m)loJvJc(1KA>>+QU?2l6-vv<_*>4&sDrlG zhjjTPVoQ`tjJ8n17L9wr8JmLS^-bQl9_VQ ztfax#ATy`CAtOPWZX|y(78PXiOZ~?Hm>;Ui=ey4qn?9Aiko7TbB9m0Qas;^(YqXSo zr!@d^JOo)vIA{C+nc4qgF3ht)ujz~Q5v|fq2gIF-5~~AAI>I6@Uq%-skgGNK(Ik}I z$J2-T$TzQFJCdF#45~JqPkoz16aQfAbfAF^>Tq&VET`brToukYZbdxv$Q% zjWtscH32kgC<|j8ObOV#iGV@05OZ|M4C_8~NzwnvBZt^0819uLDu% z0vbu=ej_;XYJs7ogmfYN4i(`$jM(aus3o_p<1wt`3^$B-EQ^Q9w8kkX(2Tb(iuMPe3u{J@J1Ye(N?x6`se^T7kJ4Co*a@7gzV=q#+wZCvYX zk%~bHXr+;d337{IGwq7+5N*wcg!xj;XeFKUXE0j7-&eutUTuKPh#h z4ms+jm-lc&X%82tVpbgOrT-{v0MP$O3Cv9DiRkQMaYzBCX-M);4kn#}J z#R@dGf%|#ucr?H_nrw$quP@TEd^`ufwfFYe=SAbx1;qLMTA{uae8jtV=BlQ9z z$qU$-r6LZ}3w7@G(7pLZ&OS$qW-Z+05I#L)7K9v@yMh$)z*V4PQ7a|Y`CuBZVbw5! z{6@l`dME750M~9GJ-f;z5o*wE0(irI`s&iiIK^q`$OT8(GC0KeOHJC(#5L6zv=}`r zz{Zfkhu2|4sSJZeZtFu-ImHr(xWy6bkZs_WM7fc~CK>zUu4+l|+%N9(+%5BBil_RP zssbOK zVtj%&+Z7a&;B2H`f(zZws1}5?V1N^&Vrg;B47AK+MM{>KPKG6iun--&penFt$pWV; zIr?C7a8#bxgncF8oXMB12oC|A-Tn{92q>+Msk-!oXa7(3_wW|N-GUzc9RpMU9Pe1@ zM0TX`uYdT%iKO!`e#EJN!H=|gUIA+yaQ%)T3|iwNrUlWjkQ#SjxLx@i&2kYm9MUADOnWe{ zn-b+#68=Mp>@b~wzb!mKWQlPJHzlVROJ(HCSGTXOhjOf`Ao&IEP8j07AA`ARg#Q5Td;PNt2a zAUi*Yy1$SooNgraMg#zJcb5WrksaDr6Ra zI#x95mEuIso`1j^zzJY8_y==SaVV}RPo<_{$DTE6OJLokO-lDD_UYoNf0zY+bur_+q=kD!+Qs?j<)O=+Z}Q5^2|26y9+A} zyeDn&xf=eT{^?)$#8Z)}e?#hU69iHun@}*HUi$Q$Wisae>J`sn@QQ0Lqm{P6Hhqy7 zq>Uw#O1h`oV)ECl>$w*P0^)s8DF9%_>}c%4qD+pdjD%Orwta_xquJ*yhZU2Z6gyyB zP&gfzfB7rY{B+^TLkBpAq>7SQgd_;_X!lfyaXA2IV#Hl^R=5}Y0$0DxXA;`7!eGETuM@P;^0wn< z`d;?2=w+!2j`2_q&S300T_Q4Jv}?OM{Eo&Rt|yjdPLwr(AGi#V@}92Y$GKKgOWU0% z_4TP4#FBxQQ3Hh-$69il@WKoYffl{|0E_&?^vjog@b>Xj_Nn1!Cf$2`P!NWG5sjku z0?~N#mlMm;E=coi!FHF(;7fZl5I8d)6V&C)pMUXdj*m}tE|=)MJYp$c+=O_KMRAnfug7D@n;&F`VM#y8$L&4 z!BT+<^(VB9;n-*~z$H2YEj0JZVJ4J+JhI*}TYzAp31VPx{D?urOQ;yL7-z2|rVi{O zStD`xIkX*TSgth|sBqOerloVI8K8v}5>Uy-zb04Pxz%lx%(436+w4EfE|cN-0|0xG zi$`1oxO0<5q1PP=P1ITIxpA8>0bFL>M|VNxfPK8q%=TOfaNhjC`FU{&Xwcxe5wF2F zq)~`OI0L;pmYq4@J3%>yBVgXY;mntCO&?n}wtr_T+h%4iJ?JJ$vQb&mC*z0!0)&X?dGC0CSC6 zcd5Tz-m}m1a*62KuG=nPH4P;v+enjL6@aC793o?n8Fj$Nf@6=xyJd@7qI_82tb+~W zvrs~x+qL9$YLolfNjgd~>VSqCW9pg%;P$}BW~^e_pQ4x|nM60NS4G4;6jm9`uE_{{ z8xWF5-IqUVIyuapfkTW#0_ujLl(8t`G8gnnl%}mi8j~%1ufotvS7VyAicE#{V`NdR zbEr}IvbhvrGv$;bpb{0f=?8e%#@Kq7y(~kIM4!zE zP3W4t%8?)eMu*bQy5l++7yfb!5}1R4G_?9TAB^Nd7Pb<^um6v_Gi|QpxY9HUZrHd< zq-4pqc1zaS8b^2Ze3^*(|KF!4VxrqUo?hME9$A(|5&&1s^Sp0X-NMBM2#S=WJ5i{c zm6dt&RwWL6dAQ{2$9=S%?Vl(C>gaMv~5bil+w+Mw6ANdieB%|4_`;mU@_(OOKl ziB3GA1B{iHs-yFtJ$Mr z1%^T_DQ)p6fZZKCD?QWc;r(X@rLtEBH1csl_OUR&@HGhb&f-RMQG@|;NI|cZ zeFP!vWj2`b?6Y6=(gsoA5Kr1MWi!I((xD|##DBuJ%{=RT&SC)Hs{H=ZaLJu09@z(7 z5)ll}m@m%ogERQ$ysjW5o)=V#RiK@#i<9HUW%?Yyy0_P3PI;XO!twRL{_92v_4{+) zc=v}TB7Mt($l3Cec;rw5!BZ3*xzf#NuWJb5>@>L?YUsogK9ENtK-kF7Wo>i-qJ#XV z_tj&l#Xxd2@8yG<$ZfkkLIJ4}1~ZvW4eB8%@Q9+>EskU46e7St-l{F?LEK9m9!gEF zwGZ(l&`F7aB1{mo7z8o}D{cr!)1DraxcQ1@V2vxAKQQFS_R|#F$a1)%U5UuC%hS?;UElWj{#*yUGW(JeCAqX@0Xj`L0$JKhXd?9d5y^d(LIG#)>C z1Nw+`%l6R?8rBzEtaeYMg^g%DJv@S$3dZsA!*9Mn_?{0B@U#JMv48S}=M5h4g7~Qk zlV$)H))gAnHBtzip$UzkPQPOr>54oIK65js9@NYUt!=RKoAa^5$cjh7_MBJeI8KL6 z8eqO&$t&=DZQV7ffmE?%D`ljT5<QdGJk3aR9?+7|zb;h^+y9`5xR7p?CK!fKOaa?Tqc_D5b;@CKFqnFDEgzycBdT4nm zlh2nQ)3H%DqZb)35+NYC1wA@NV@pz;j=!lj08~ccVaRFkKXl|KBYaq|T7_I`y#goN zl27a*sYc5|QM$ueB>ABBXRs8l{IQM1{@o4GOVRQ>(d9H2_ccOYn#JYwyy24PsFV!3O~Z43rY{F1ElAK04)(R%0mY@r{ zC?#NTxeczmG!hU8hzeH9b1I^XpmF7&q3QYBB z-#M=CkL?c4@E_;QfaH~sfj{Tx#{iz6p=$u8ra7hA@zXf0q@-NT7PJUM1Td$FQ`A@n zx437@z$>2!A=%}eI72E%VQ>@(s3f%yO^=DNDq|6|ic2w>&fs9R7Us~fXWW9zhKkDH zwp2l!3K98%A=22gud@c=9O}nA)GHVS$?01dMd_zVq$8@BT6IpAdbTf$@=UG?8z`gv zpMDZg;_>5ygZa*^R8!`ZP&oSEA9=(LeE&mk5Kh}4|BQFWbOJZ4@yYv7{Lvr&;O({G zSC#C+aeL_ZcTs^?SMTod0*hVVFvP1?e9w@P-Cf?$=F_L!44ZX=4uq++4AAqAcxlZd zO4g(q=`Xb6ijbaNYtzG&1o7}-)M%tVR;|{s?-{ z9&&)g7>5sZiqxjFD)#0BRD!p6?%vwDzU@0*e2iX%!LVW`i3y_vnC*dcBzO z$1EN=$^h)nd+)ZE?bSO3;k*2FM5la(-Tt_Ht4(WP+hHOVkx1Xfp^vY-ID7+$b-j36 zmx|hCMYIncQd}cx5k+K-Uws^O$p|6C=N^7GHIkhI;DZFxQgZ4AW+sVzMh1`>Z(_Hz z!IM!ARau2ZhZNapuM8SwMG#2$Y^*w@K>=yeB#T!ggbc*Fr6LASZ;{WO1ZCUt#1QPj zp)R;s@&#PD)-s?QVW1cta z2HH3cMXkE#tVM_aqOVpk8Yd!nXRqFJxXh5tZ97*{uDyNiTv+1o~TXKgZowA5k$rW zatwSy24$m&O^FVPYz}%xu_CZ03KHZjt+nC=Z*g!Jt>Mh%o-?fC3?Xu!Oga}Y4NB806xw`^ zG|%zVkz+O^#r1#s)(=R5`$MR**OE1WLw#KMO{*l`N-*Gd6($*qgyFd zSb-`!Q5JHFappGa)6hh;7n3os;*&)&pn(o;+fK_7RDbKMb>o~BJDPxXWq^Z+1LVj7 zJJd(jwHU;1u-@-RV|104g+iG1!X+0ibwn6)NR$uL>+~?xxn{b^oX#iRNCUpS7d8u$QX3XA}|?#H_r2NK1p)*8W6e%?e?9! z4hl)xy2k7KF^4c2#2mW;l+O}YoFvdhyf{ty*3bU#Eo6#bY@ZiZ-@0`NSlML-k`&#( z&S%B1@+HgP{qsNfIH$n*PXD=JzUaute%GQ#$S__b z&@}+ZMLr(n(YJv>*%;JeJ7YtV8+r2uFyRk^%z-*;8fD?2kD5!+z8mDCcVxE0??I{P zIc)S2aNZ4woGAu40EGDnKn|5%v)ltYA;LDsR+qYRQZxvua>PbbuF5>3aUvwCr&cGr z!JK^jaYp)ZiP+^#9ew0|QPP3v2~!D+FRTz8^p;$3C@jMpo|S9CCb|ck*r=>MZ0s> z0DS32zX!m46Elqt9X-iT4qj-Ub!9hq&a43xUeps}K%EefgUG}zD$d9uby*|B7PKu` z4p`9x5Er>LAy|qom*z?1xG>rd1+md=M!EDEtRzOrglHI)RD1lf#zeeXh(H6RMNL7` zawvvg&ZHWbv}pSV56EzE6JD8T5op!o>b0WvZN4f9IQ7yZXFU@TT5m3mfNj39NJX4a zWC|lCc?ewrko7WjrmL)WJPFoGhYjH*egp^6G7DvS(JyGSm%)A7sNOb`;+7n}i z4jH00*3;@|qXNR%o+^TvwWpx2k&uq za7+_>5y=tZ88n$%U0S3H8>-wA=x+QWfW(NTceER@!&}#@v9O0-$ z+q&es5Kc{BqZ1oyPI!dZ(_M19`}myh69y?MM+uXl6y(xmH9IK|4qQQSk1LKRZtzG6 zi7cN;Q%IY2ekCA60q}m*7dr30|DN`43Sg2+cz8jJVW;!<=lB2^m*6C&U?I~$Zox(- zBu+K6v4{-L0jWCplv%xHi}msKB{RaOq7G1$Nqa$uWkl3ET8yl+JKG1wadtRx;Se35 z#CA(f?WaZp3md8OLfeA9j)gX}1UJJBgfij8kaGo58d-~(1v&nyp;;w1*>Vqv0u9`x z5G~4f9<)WhCkb9@Kxj)ZI2XEbfD5k~>$^QL^8qIZ&M|fVGecm)2{cO35LsJ|0!2zs z2aIzqC&DjrBB9kX5P{Y3CDVwiy{I7oxFrDY^T}WU7HJ_m)cl>Ru%*U%N+v7hg;L;b zQ>YDK8FPdq>Z>7&i~Nf!$mVdZbI-vyfzkM!-UyArksZIevuh?iE>?tgvPvFFawhh! zCiv78ZiP#3@#AgFPk4$%3zFd&vvXblQ5|Rse%U@xcaCJ{%{ha0GFDyyzgR1%H(Va8 zTt&YW!fISmP-k>zp;M7+mzT8JPLo~n8jkr$86vuMb^GeI9rw9IALy1B0r{kdgsY7f zy8D|naWWRkR$9tIbXIbTr#?Gy!^gr9|^m1$FX=*l2!`HE|dVu58j*Tov9Np`f%QPy$k9J3oFss<1q!pst**G}8m7 z4UyG&-ytd@=aW5gg=vTc8kMjnlu+~|Xq|XbF-SnkYdjqeNjib?ok(^Z0D$kXhM68( zAW>XO@s^UH&5e9#(q$UbMb1caL~@+E3~<54fOFmpw1l~P|DD@EeIHd)j8h|YC5{p= zv%Nz6^6~cGE(cGeaBTA(>>O9GA#J=&b{sdhcR8-!*une%3cxRxwSutB+hu?^yXAig z|NJ-~$e1(uq9>$6?zeALu#gFaM0s-sjw?hQ{=2Z};VfL6A5|Ns8i3@ZEGjeiDO@Y| zohhT>^l$XpEOlpgiVE1h%Gn|3+MjkQ+5;8b$$~mL+kYh=mt2g7)p5(4l=F_0SVln} zlp>$-a)T^dC-lUoQ$)=RU;)~oX4D=KoX{j2CL$mSXh!Wo$CsU@?GgNV|` zV3P?(X)*v$9=&U`rtslsUvhl>`G5KBmtS%G;+J22^;iFmW4b?nA@ZE^$rr!;^p{_L z_T`sf{Q6g4{^r-e`pd6=^%uYX)n9xyXShftUB>2VIW6A^0b;JDW3tv#%JgNTR8M$% zv>7Zn;l;@0&qTy!5;iveAo?1ImheLwDs`AH_%Rz&`qP#xwlH-D698jL0L0~D#Y-m3 zGxTO>=O%iEywa@F`ikZf^V`Yc3lapy$zXJ7s1#P#Ch#u;yLUiLMN4OA{yl*@v&EA+R?ybUAX|DnRw zYd9bm)F%xZ`80O?ILi`ky`y|*r~?4IPIBmX%LoTy;IP|Gpb}zd9nHh}wCg{XVZIN9 z0dSQxF<~ty8Lag3B?h6*jLGN`Iz* zw-N3RYRm;R9qsy~Bk98ANhVGbAi)+%Da?zA5HeC?n9ZAVr8p^SpQCFgnP${YaHa3J zb=E@(ZsFx%4IrzfYCD6L0L$!t;rchvwxhdm9)ADb;X|INZ?-!9dv3~nre&2fQou07 zd^_dND;XHHAzFxP(B8ugIw$j18{TQeXksYD*oKL+6PyfhI+-P#Y0{89yHdJFJs|x%SC~aRqr1 z{<6a}yx5rUWMWxD+U_ksUAYW{;N_?s@@9opR=^8|GHivRnR1#=N}e(?2O4RDV|TQY zsW)D_8{16yZK9?Bu6i7sR!;$06oJ4A^L*{+C)*xx1SSkl)+$h?t)gIKLgyer2x0SKXj zE0#{Z=$?>|1jiG_BoPc|^A1^8!cc%V(y@M8=T90M%ccEFddpfqKvWwFib{f}*)J3SH z>qOGHQaM>v$ z5&Jeqa?9SF_|2R9J9iw!-4S^Yusd!pCGIZ}efH=me7r{ofpc>s7#)RWq_mzMx#Z^Wbg)NRx9Fu;{ z_j0=Ztp{kxSeF$5s}Bp%)BsrI935c?G4723a0Z~I!XJwt-{GD81*ND6@`=`JmyL!! z4OM4Ag?lmA)|1xhs>rhxa9@>b$CzTaT(P3fz_g%RPK3H>j!KyJ(vUI01sfF1o&L(H zCW1O4i$ma&TXfQ7_$p0`51B;>?8z>W0(aB2nY9Lz(AKHM(X!-}+N_RXopKBG+8Kp_ z3Lhau~uaVhO#0esR@@=%f9d=jHrw5#Hx;WLvKA=D801Z_g7 zk3Ee47nYn3=Pv^+Ju;`uo=$oD!w)$2-nq}gT?lnL&r4H~{vM}uvhuM^oOj}&Q>0%z z`4t@O%QExD<1i=uvBW&!Sr-5Mzy00v@(so@i04DwVwsKpg6H2g({x7JY8M-VBv2OK z+qH2I+PeW=XE%nH_l0O{xi$xq$=FFLPl{TM5Ya!v3Ba(=>#)`8w8C6Nl zL?MNI90Ax=Ze)ZpAX5}Fs2_$jAFH0XC6pf8x>!@}f^Ey}TZ)Kt{zmm)7l<7%U1d>6 z-?i*)^Tt!6I-48}f$z>%mbs<9(kq6sDwYK?2eGcrU@HWfHj-!AH1j31kwv((f9wAH zAHMUmkKX_2v!8wZ`3IkVG2a9o;*OLO{_21HcaC5G)n9&<)l0tJV_vSnRq_6L84+MzO z^8NSj@u8hL0}(rw2Ic1R{>{Cp0m}e;j0XUSD)J6(ZZUE0XhfNy>GXH>Iaz~eZM1zz z#}jsc7Y-;$^I|S8T<9ek-}}|CUy>uY(T=rjXacs2#Fu*i-Lk<~@g%t9ARr77nX=fg zp*Bu59C4w7+`=Ha*k9VfE5{Gk54q}j&unYOKJT3hhmW7`9dB_g?@;^law!8%pEYHg z?T|%eD=aOn0XaLYdH>Vyvva@7oqzlK+a4DzbjZe(BR8Du{mbD<*{30~WEq~i;Np%P zkBY1WlCWvD%95ZdrPcFwl4E6avJWH3VfhK4YhLLF>_~E>1WXqA$yE+dwkB*@^2V;i z0b$0MvU>zYNc8mOt@5|tMS?Izr6?IsHAYsU+?-@9ve}yhHt<`kJ=O01KF3_RbFlf6 z&Tx)nC(b%tKF`pU%z(bcOL5`N<7ZC}nQOrTM}&wyXF_J)%!^N$G72&f%`jO-Qb*|8 zgoFBsgNB9b#a#tW8*R^n@4hRoJ^SeSC59-PqrA2k>aZP%;&5_|+8x%asthGGdm)9h z*E~N*&W73b-^;Af>4)9u^lu)k=g7p$>6N0T_<(P4r%QAKz+ppWvcrDgP`&yj@(>=& zMKT@6OFyVK3*$+iFZdsr#f7sstV2tk_KAc`5oIEk216h}|Kq=Z^X>op_WM6Q6Zx;N{RnuG-Cp^avVh?s;@cB!Qi z5(Vf`37AA=mLg()5YzkL@20repm|MeEii(r2x!lyctIG^=DBixm!t9jbmwPBt0mR8 zYuN-HO4%_6`=xdbTF8u$hMr9KB8^BWRGO8{_gJ7DaxC0fbu`$mR>7+nJs`UhmP8}a z817J)2k~M>U1dcX5RL#QGjVT41G&;&zybg}uGn?u1BZ^}MG-yKBs37=iliJ_V9$*) z>eenR^Fc?6SPN(qDcBUxi#32b+beJXpG!7E&6oLB=&OAdV2hQHH8^kZ68cDxD2T+C ze()YgN=fRO>fl6=DAL5&g=9s2WNVEJzqv5MNQ1voHX(XzWS-jtE@63pnDi)slx&dS9k4^p_ECikAl+h}3uILTc2 zqpZ&_Z(d^zXixoi?tJ-5k@w#j@5wn`st(%2N4#@~&YlUgrYbhV)`_sbJ3c867t*+` zt=+wS7TYNZw6I9oU~C9^u^Q3|6B*V4j5zI;?D0`Te0xD2M$xnB>;92CvQVqk*<$a2 zUmukN6mzXxD`+C09-Vq_SvgJNz=1JJr1b?r@L=M#cO5G3dpcKv>MM*D)`tpX`~oRM zU66<0u!NwL!NF;9#3G$XwxEv{il9bV*&!UAdWZ3eBQI&UylP3&t z#Lybr0oM5_D0Pt^m=e$(8Bqm@l(zE?2E?_3Of^(7)vHQ^rNs!jlFT+<+&wGzUM7!J z^fK8=krQN08%@h~Zrbpc>DfDG<|IR7*{lL>wA!dq2xk4TKAv#A#n8fJODQ;zKU*LW ztBBStSEJ^5x8)BMOrTDsfG}uiS7)0DW(Zc;5_CvRLY&M=5Dk12V<{q=WGG|Dj0ok^ zd9*|lMWcaY4dCRe1ac?;NeSBqJvRREz`a6fjd^h=aUj~OYv+`chzcF8@}@FL0_t_s z9{V`hL5YrlREEj1CF!xjG@`C)kc%Lr$H&E_jPOD(8xOV&M38V)6>>-vg%QTcEt(?5 zA-Q8dWM1{*hQb=xmD^LKkwZL7N^KjBy!mkp7-;Q^Iv7nX1Qz^}9&(g{L^lz{B>~z% zpp5G+Sq!5%?RN3Z)iCBHw8=WuO_zeSE;Iy@$CJinhJw^8blC$wHbSPLMb;`p4Wf+W zBvg%lidg6)l}HCNKOhcpW~!Xwj?@hDR$-%NX;$i}j|%J^_~9CNsqGFK{j%{DL^%kE zojd}0au8^~_n?(il;D_la3>9bP$EMH-Vfzu15M@|K~S zjyhuW)Ebw8wL`5_f~X~Z%w2*9!F-UJ`uy9v%cvCxq!EMskC%^{u1jg93^T-to-MFx4|sK8RehD;Xo zL>T-rvL3GN-wcMncgy;$&ND^qY%ph`I6VuARME`eeluR@)l2&qnF(%GDP?TS*mf-@ z&GzZ1zu@@nv(G>O;)`GMxWJdcWL==QmS?sBFE4-8I1d4A;n7MjMn$e&xjuR+50Gu1 z%9RwSv07VMYzDmcjm&r9Bho=49nt`zbQqv?Bdc=~K#7z{EHuUo1LH>#=BLe!32%hV z<3LC998cD6eOd*PQ?}LdsEXo~(MROnzB?mNKKx56neo|miED+=6hkhi=nwx@OwzRT zLEQiR%kwkLcTaRT2;|GW|Gdgb*Z(R&9!Dl!!*SMX@6C}^j z&u1lKI+?bdV&$rq_1MO&v(_{>mCeN_ebVNQgL^=!)=%INWusFmeT^NH}$ufD{7oOS4`bMPMoE?;(Q zrZ&U}G?ag(NvIr{cgMQ)Ry?vfw?lHJFRKxf0aD+7GjZ->T-tLHm)ew_N{OhTlvxOi zA-c|oATdYn&AoAqn;svSJUDmGAb1jyHx8>S`D@p z1K2|jI+o&*28G&057XgoAEuUv$$9d+Q?7vR6GapnBCl z5@n04IdtAo47;Rh;@#s8wL1i*9;qPVwOFCZ&D(cy{m+%|GQqU4Vi!|MWxyVx*&_bR zgS?jaFi^0R((t)Jr1b+^bfSU^3j7(0oqR1eVK8`_7ln$DgzdQ>s6Yn(bo|5r{9iM+ zjg~UWO(Ye-yw$7;6B_<8?7ec}VS{CDJCyWr-eL0!0l4{D}4|BF1GD zLGIu|i6IH7p+6Qe%ls=}%XDE)|GB*^Cq#kvue_9}DIx@Va=fd-A<)T zd?=_n$fN0uP!A%vUPVz{z+k`wu+|N^XBsBWs-o%e(q|0xqbFi-kacOs)b0{_l(#J1 zsy3Vz6j?cuF@2|)MX3rW8aPN142%awRnnYx_WYq`Gzqh98=~7I+l0g=h&RVyD>5+% zRs!etTX)u=r6{07o$TxYNCx9t&K&onv;iBtpcumA9jGXN~uPH?4ati zJ}S7H9)ZVK<%$mP=RG)hba2SWb77(1&g!bDl|ZW)WDx<47#YPluTJ9KT5dYPi>@Mp zr=O01$l*ywZq%*JBi5R9vbE6^S43To5$zI9D~KmZUfWv7E>C>3Fb6UQSjI8B5q*q; zL5<%Z#y!p09Ud}H1QahV!7T7JLlyw^&a0?UT(MQ=82r;5o!Y$0#Sg=%fNpTfBOsoA zsz!T2UPn&6G0M8!)gR%5JCM%+VJcTN*|s42(%WUWP)sSZ$y_TkG8nL~cBtB5HMB{{ z3D5yJwmk=+%ofqLiWPT>M~rCXYubIv_yvM3xc}OF0|vcik5Y z1eFvpLC5;Bh)caRfwB;meHnPTpotXmWt7&KgmuNBL@&%ja72$+#h;=J6nAGgL-0 z2XlJ{HN>Sbl!eqb)OJN@z0`bZ(5AX@aHG)Uf_b7=3JmX$6p%3rPb{*bK6fB;frHD zN|dgL&L{oJ8Bg&a9j@;{pP|j$|L2t3ckkS~yZ#J5?3*(zBW)8bYT}S|I5p+pzq@a@ zm4IZ-Wz|_9+scO``1;Sn#n3$LS;3owwzy)(h*n`&dC(x2-+Gq|`^_2Ze~t)S#6T32 z6?D~KYyxMrmNVl4M3*CXJymyz#EzItQmD+a08u%G8B5C09&>>;P~O!;D311E6%c&^ zY;8evKxJ?t@Uy}_zD_xX72B*)Bv(NtN|=6oC6ZbpYZN8X5C<(3CaOTzKwY}D-2P9I zlORVuZ}z9l0P|wNAHVqy*Z+DIl9tUM!?JbAk&(C5pcC2M-QgUT*lwGy#ih$~{w*0C zac6*&DKCj+ie>afNR6Yp6Mb_j2b+V-9_9_}BM#Gvq*1pKYiuh5Wnu&sgGX=lzU-VT zOnUNrYByy7j^nk;tmgzuV_>)4HvN!3>x3AEu`Dp&tISmd< zY8D5#%6f(*PB9ovJK1z{N!vz?LL$0NGD{r(#W-!Ei8(wOK$wUZO&@~VJk5}NJxM=y z2aP(NhiI&QNd{dt-Sko9IGyl|XNQjt8D&6fXHt<>RV74j1HZd0KFrAVV_3Lg9 zLY#9fPTk)@nVJ7TBwCEXO8Lu3U9_T5MXF`#GBER)9QR^}6X)Fe`?X;vbsJM({ z6CIc|sB;F{pwi{15#nCTTVviFg}fejSH%Ls%Lch5s}dMqjbtIB;@V|EP^Ly_7y{P- zgcC!WoZ9r~5B~5q7rJILzheA?W_qrP(6FE!gfu>tT6eHaQ`-WOLF_CBfVM>)tLM*` zyYq;EjATT=-Dd^xIP;(iZ_Z32eqT13`o)1BOgpvgj4Xh{L4%|VwNZHv7oNL}Epi=u zW%3jMk!VfQkMQR};$uKXUwYfGq^w%k5fEqXX)eQtlG)<5jN@!Ss%>`k4-#(qw3KB% zfJP-%GkaWXHYesFIY)mc9*&P!qWk33RH1n;ezpsWZN0X0C*x(OISXM27aZk;h6@)lBI`}q0|UmttS1KUshs3|vW+f`;M%A9U8iK45^2&XI$ z($A2MX`G&~3?+f@^z}v3}T+3jB{%*K7Lx{>3>{A1%$rpsU z5{rnj8-J*6CIPSj?~1al?>;SZPGwyrIxW{DiAxkGs0vVtQZPb8;C3WLJxncB3sp-| zCxf~oUKoO*jZ{Deic^=w@fARbY4J6kN~17>nR?^;9h5czC951XsEf&;W)}bC;{+Jb zsW8(IrA{tPsmZ}ruhaG-7ZvA*D5khrS&p0>BvM@}lY~hu(5eqNCtw;A^1uOz-{7!J zlIa7jF(ET9A(OqMj3F8$C_M!>4UXFpf)C|oo`>}ot5ofUs+HEORN_k>?S-B$oo76- z#OpO+4Y{a9aq_lzg$C{25(0&7dtkTSp1Hqtvo=m!D5#nsVmfx!dh$}aKq5}i5GnGd z|M^}YLKT52p&bW=UY8tNiw$&;%tby_2t?8opdls^oXMg%YM^Mc$RjZ{9|#^MgnP6I zl>!-=sPT8{wJ*tKeGz{?-X_+$SOYj@$f~H5hurv=c)#dvcQEL@`kzSLj*_~g3Tx5ULT{98ERWep z?o$nxL9T`M!9H0d|Bx&ODhv+2lnlgWyboXxE z#QT4d%yS<7Ba48vqB4tw*NtYxZ50Ub#_j)W6|e^IfB)w1))If%C13hj7MxxGb0Ul< zt~W5YOVOdT^nlSy_271lF5(<%WMJbB?nlO*+B0l}^-e-E&maCT`z6hw(p(vg#A37% zCzT^03Z)uEHcQZBLolIx44JemB27uuXvWqk?skylNOhVZfJCMl{{V+%GIl-8^--U` z!~6_$ZB15IxhIbLIs!>bS_+BOVjBV+E{a=B2TgVT9@A%?X^Vi&T<4%RkesNvnpIF~ zW%3JYxaugI;^u5WOLO5x{8+RZ%%s^Mn=F)fTo*o6vhzrmkjc8F!ssx~zalu!08Pq? z6@Z=00Lj+?H;D)yBb%&_O?<%}PmvwzGktV$G=1)M{_ZQEmq{-+fV+*LLwUd85(XB< z)IL>}-%~oy68Agr{e{ACwsz5j=De0qvQO1*m6-`~4+ zYoBAod!NsR#_HqE{o8l%`L%Px?yWt(*n4AV2g6Qp+{BG%Cx8jac_V$*_1cS!kcGK8 z9BJIXIFs}W4~cCwE6UA4uWBEOr1K(6wAs)9I8tRmOn^5` z>04^aDM?t%cKc@^t);y5@_g_A=Hd~D&;sLyLVH~iL3bQu=b9hXs>} zPL;myFX*pY5MV3=fcR{PO_Q4WVVaU|2)c{7!x#pT-TcAJuG|Wnp*wch`CaUscHV3m zp?6P93D3~BFQinoO9!m4U6T1p$PYDZO-rBgQ(Pph#$T(R^C*&nrT`>7ksU-x4|FQv zE@wI&TbFFqVmx6Ln^Km)!VSsDmYh@e{@M~Cj(d%BZdk%;oJRrH5pu9Xf!|&~DIot~Y&}(gkA2=TUxzhMS0j@JdG789fc*ht94R50g3M~TZet+4D4LjVQHsdBz#rLQ!o zdJ3@zGSb!Jst%{o_CN`w1)`TOu?DcV41g^n2PE>mc&6b*u{Uy&Wq|V`Md8oRvRn)x zepbeM4~GwNEmIg5NtHQBVFm;l6NKI}JpU3ufl(cA&na`g$z5P3Q!YpL#=T*2e$AA8 zu(xr}D~^QEJtZ+>0V9)#i-d^9u$cDDF4HR_3C=KxsPiq%4B^VbeQ3$GXjkzkYx zE1oA?iD7!k_TWcfJg7domeYDiQAjOb;w z>G5WEPz0{zROj7=>XutKcl*{CpgFw_geccA=ghawpL!=!g(>UK5#G>q@h~_r3gG=; z7G*}qF{fbg(+%>ptdF15CulJ);R<|u`RWT+I~hhm3Yy-|fD6~SGYx%;>p!ojp=pX0 zuO-20_3T(1lGp4&dxprD-9B4^cA#)0AC1=gFD2qLt+b`rfkj)FSZ-$j&Wp~h$b>l5 z`_HDK8FO4|a%c)L#?`@X9f)?y8P=c$Adkpe7tBG7-Ba(h8jPe9cO%|_BHis;icdU* zaD@!C4gO>-)!HI*E;1oxs(r|%Bv$Oyj|_w(D9#Fm;=eNJPs}teSDd73M=YYPq{n=Z zzG<{B?Mz%jREi{MzzQwVS_%z?a?3wsL`~DFV0#QvXHR2vXI|8uJ5_q1G^<(EG|9*z z0#ohd+Ezhm$8qgJq&D4OE|dY4N%|0>-3-?VC=gAhYs>)2ypo3;q~w_!(wy+C?q3{4hbLwd7z=t-JP7VAiEb-F>;jHV?+Z919-FrHn!DLcX5!X+POT-4kU{D zBWUDNV)W^t^}gms4g_(Mv8V`@)B~RpQpn44pW-ty)gdnCF5)tJ; zI%pZWmLl{E+EMuv$wBfgg(#@2`Ab0&bOamGRKCcUHIJ_1Oud_AFDTBCD)q~s=r!%7 zu2d&$MhDRuQ6Pj@0En7_Eb1<2MK1yrvU?JEa8cHKkmmH)4>iXiagxZ&Ii<;iVDJP6 zd#NJ*wG2P%C4{^P{FiS3U;6;SMPM%T zM7CrSL57~Y_rKZZGpu0^;7u(902UuL#|(cNfvE@{0;Y5?=7j1+4rQQ1Wk17}_Dxxx zM-8NzLE(>8Q1+-3c~OLsw<%~hG(4)IegS(ggXL>Zhk;cKNH!ZH$y_Hd7vf1BT)@6$ z2=GWRmVy;RruuR`@=R^SZtnPr7P%U~f()D?kNyiL$}fk_Ayq@>*t zcoJKQO^7)Ff3aa~Av$zCw2Yn`O13&lqyydO=V%L%P$Gu}hSVYWkc~>yBa=#bXai=% zhk^?^npk>;V(6~K43%gjWhfMCwy9|*Qimsm(z)6DH9pB{)$=ins6(#|$Q+4*x^OL& z1pv4IyFr21bsw=5;5TJ3ylo7=ej@n-p_%ah`>H4(#N^=LCr3EMCJ%-Zs@{A`E9vvOBt@z;ZsK*R*j$Ga5 zJM&xlFdg5fyT;QO^DQE6`!eOMI6m>^t?g?&*Dh~gy?o;~U)#NV_a{HO|G`H;{p8aR zKKkURAAJ1&&p&$a-Jjg!1HHFy-toBQv#`_9VhP4L-+j8Vy}i4?cl*vQKJ9z|-M8+& zbNB6gckaG@`_|q49=kXF)Mo=k-oC!S^#Z@nHs3JkQH8zR`#10ULMO#I0X8-=&O^*y zyJ`xKp+=B8#-8*tY^;WZbj!-&B(W!eOczIo%a`X&sc-sM{m)x^ZvXVdyB~a9@I30b ztY?I#ak=rI{8bGLrm@;9l?kilHM$aNVoB{cqoWvy8i*8{RM?9suRS*U zo*`lrPcH-D{U5g$YXBP1rV3|}e&QrIa?_Cs^?R&r6j3doGi5N;l+Y>`jbhje%5e;z z5}6*CY3Zr9i~cg6;<#w;^Yb}Mmr9boM<^-TV{$c{PTIz-E#80kT(@IMw}OC{DwZdO z5VC1%9rAP!Np}M=+2JLY49^)C+G8|ts0j>>U(Di6*$BUYf=qOQ3;803R7fdGWTTkO zXimGx;BUTUBA?ieIAotvH&Z7a&wOjnPGp2dhCr%33^IfWQ(Y~<8o;faw;KQKzkUVI zFAK?=npt(}Fvh{84@`#|)P-o}PvT6LWZ;*dNT4LO<#yUWTAingWuG0sA)I7vub({h zQsczVDX)QXz8whj@l4GCC!KNQP>K2MKr`)PtI!R%@5x7d-r@bgN3z6fjyo}8(7Orq zIS-L5*LhMLUfbt7+$g%OEYpA(}dcWQ<9SFa#K>lTg7|tXr{CYA0!HQUZjuq685#%_0Ua(uQGU zGY@qPmSG$Bi6`I7PY(QonEK_s+fic&2DCe`Fh^V>&oHlpDF&6DsEL%5NMQ^>HcNp_ zGXX5tD}xsKpv5$_w9ZHmEU}XB-n)nEf5uqQ-Uvz6M+#Xmq{#*IR@jT=XQ``{v3lDh z38{h3M-n=O;PIYqE!SHv*Ca5jvrzs4~J=DG6dC&9+jeG7}7_l1Abx^#L|e%Jc5vS*a4@Z$WVG3k;Hh2e`<_~M=3P~ zO1WnvBLqrOP$M%N))&@shhzwZ2x5SZ$qvEPI{}MOR1F-Zp2{kvgHRhk&dV2*ow#xCg>5+*_&Cv=uv`X6^Tp!9 z_Xo@?QCf!bkUefY2}(yI-Dn-&0X`Mw`^@>oI?jHifDyT4MViF(zBEC$)0eWtBroD% zD1fPwj-+3?%nlNEkw5_(Yml(Co+T)J4Fo3jY&!O<<#gQcu#Qs?adI(Szj)UGuy3oj z*yB6Mpa@%!>HRfrunYUB(?Pxze?~drU&n;#$O%V9@qSVWQ6pJL0Ihp`;KUZo@8-KB zF7<_oaYe)!*xLr!*0b6HukG+6sL>9EGK(n5V@pIV@|Zn_`U`03B$cq4!MHttC1 z(U%ZOvotp(LlubKpi?sIE|nPxK!D)EsVfJezq;U108dUDCu(U%s}(nJB9D^eonoH| zT$i8fqAPQb1HI@D)U4Gh4E1xaqRH5c7=}MXDmx@ zk%_NOvJj$`G#kMN8Zz$SH8ADxLZ=aHRfY+4t-s+ERxhq8tlNpR1E>p-9=vN8RZ?Yasb0q+7z7l5DJ?T- z5oETp5DjL~;84%!R1)VB#GtcIISDAYJ=OOYcP$VgZ?qpe$|G9`Y5T;y1PdRP`S@7* z3IbN;P_LajqQ79YLMDP)(32pDL@bHvbD&l8F(*!u8#h*_eo8y@_n-dew`bkkzqt=m zXWc!WJ|yt;jZ-NyVG$4@2LPJ_9?eb3FG-7@nFm3Oti2@v+U+;83~-j~e_2-^#?i#8 zlQ9=a4zeWo(-m+_p|aO-J;`O$m~rJ@);Rt4rJu-&AyZ0s>!5iZmj^m2=ph%IyDm8NO@Mwu13@2#YFA(D4d3uQ#J(9ggO2L)& z(lX$pfo^M=RYUn_2}@7b`yae_@16T^-Me@D&Ulhw4TXI^>+Dmv`@6SUOBf$`Xr8-o z-F*A4TW{UH_10UrZtd-H@bm$<&ZU8x(&9h;+57Lld!Of}x7p>u2H7iHPx+4R;gjb_ zblc;2@#NXo^A|nV5IgIV?KT{|7I1N7-EVUJFAKi?$*0T9WxQ{kJKy`i%)g3P2OSmI z+hH(Pw-R&cQzAHk@B+(G-lLVOwk4us$*8KIq$zTT^QyjJP$t}$dg5pPRl9`@?SsIV_Gd4U-AC>y$}Dk*gEZVBLnN{#~n z$?QCj@4r}Esb!2eA5?WtV43LpKI;`?)F4(0if6l0H7<4l=}r6M?PuP{>m&^0*SAf0 z>EOhd@I-zTrwN*HL#fJNw0Ou>`g{lTRyTyE$gI#ZS)7W4R3<2_(kLJ!qmdIjatH+r znD3uHMmzKKr$2mGE#s=*e;5>ij!cw}9uR?4>Ze_XD6vBn#m{TzK8^~~=PPmc`YA4N zN4lg81#D=bf%()zTIW5|ZI0(_*IfUuqugt1N%5Rb5Fav_-|AG+OfQ3>qrDLsncTJJ zy6BwKVm6aGLZ(GlPbKBqoSrQWnb1{Pkco^WY1NY>o=rbIczA%-LVzs}9T;}tg~*eU zg7(^J7p;e3bvH!|R%C>S;E%*Q>S8qPMP5EGP*V)Q(B3~M3vEBM(m8} zVoXRaAE-3OKnosA8tWxmJ=y{#IAM~5Xx=0f<{9CvHGqYMn6mx|zh^B2yjJb32kdO~ z665vdg%W6Pg_;iOVK!t5!!m!U^ec%{R8N-D3|F)urY-^*4F2@+B1t)o=(sg9FL==C zNGQ87FN%fMo=zI?=a3BHs^-8&2IFAl3jHryt2z^#G*PT4xd}3@i!^coEUlc%njr;j z57;zav?5`nWrI*E37!!MRBMTpir6uG8{!zK*hT5vuoXmFGGJSssHRpinr%qp!B}x8 zlqL$bF^MpMSXP7s<78uL02Rq!`*&d*{LyZvgQlK9*FUbeD2vU+k&94cf*gEi)`CVm zUH9Hc0P=;K}ipr+f_=7}ittlZ_#H6l3h!T@$@ZnM#fBZ-78#kC zAyE~t{x>gcJTG_zs!u@$^vM&|wZ-{Mdx_wkooHjeGvJ zPGTp;qKmbVkb{V+4c_H{5VI{(_tO!W4m$Mate3dTC{Xa%PGJlfez;VrEhatnwaWB_ z_B>huVA>jqCw?>PB8JhP4j!lE7DVG{9;(#>#t?e8WpTtjd(Ilb_uqa0-M8NndF1wc zUcl&w-MJluWOKCSQ1XS3Z_?))3l2t#t`VOU!%!LJ0<)d<9+o6oBe@-fHDYD4!4y0=?Vr34ioCtd1dc^C91%eXGTEF%ZtRpg>1KO zkIlRnDbhT*@9c9h0>S&gvDA(q+}UQVxM$!wg59^@y1m0JbTJS00arf3n&Hz%AWdYj zvb_7^@e^LA$?`SbGaWFue5mj#haUg=SQfcR{GHFgxc&2w&&r7+=9U!3FmOiRV|&)u zeySsdgZ>ecdFVpZIiJv=qyoAs+|Ez^rfj_}UOj@GgjEaA^MY>b@c_h%#3 z#{54xF)fma9Fof!xq+Yk-QAn}`&zMBR{EKGdoyb5$XP~{+0ryTT|gkI)#VfxuCD(Q zj*LVsMY$qfqNIvcE5Obzgq@702(L6pDijQk!J67)4R2F~d-!;+C?xBK*lky%`U{eo+!q+2c!tb^XtDI6t!H`e##-M|`zP2dL>ii1Ro5f2c&N zAb0JcE;;Qs*E}PmnaUDGQFM8m)LFm?D*lWw>Z`)v-JMAUNK~dpfR;) z7oSRCoh53OGtjmY^pPV+GPWnj)FwHcV2whMUkOI0oBW>W`gzK&qdW3M5}LW1Xt4+? zu%c-aP>O|U1I-jjX%b>5-5ik7lqAJnp9-nC^d-OGB2mQ=n5aftLv9@qsZYQZ;U=`f zW$!bRPxw*=4y7$MB_G$66mE5JCj>MUF^fyIsw%@U;-U}7CADAP?$egU$qauTi@2`j zKoFtQj!_N399Jtw!c^}784pJ2sf3AbY?}IE1~C=|1JyOc*^8> zyqKq?0hluEW}PPoZZCU!WHVcJfg>8!Ye7SZCX;&%$hN3JrA1ZVI_ShW3THl_wFZC} zan3^ok}ogcVEpu>0P86Ju*&9T0O&q52~c)#LrUPYRMFv5ijA6--Lh5jY|vH?a&wpa zt6Q3eNeV_hyk4ZvKoTj?a@{!p9tNd?5M!hxBer0Yp=?ov*L0AG2%11yJM8H>ELCeU zSJ760=iHQ3J49vmlg18wfk!N5QYs}xIjQ_QHIfXxMY=DJzp@1y;?2;ldsErEr45Lg zUXf)LOEZNzLTUq1jUfkxi*&h`yHn08(u5x}-)PR3^*GVy6tscd!i3s!JBm*C9OpQV zDY*y1z0iU*&y|SJCJaV>g}d+ywU%V-M?5e2`8?Ea1HZhFYdxX z_WqNsch6uJan*>>P!8>qUu`fC^I0c;FOJa?Mu8KFp|uK86P9NiX{lUB9y(FqT#h!(;rah zj1>R_BcOz-UKWW|Dt{I5+_$3;%b*ENpxE_{?#Gtdow_6q1f56q`#NlLV^KzLelwQc z8=3i&fSnBk=!s`K0Vrb{cm$PT2t#DNv^gk=lg#xecC5f1kO5~|riUf?(_~Q;Z^Utj??`*x8WZi7sz z=be~;j8$H`#x>If^aZKJmB-M6x1&*?=&1VAm#9*ef)IRkIl4>Cz+E8XBGl%qf@SS! zCOJTuF)(+r9=MXB2}mlpk#*pqCJ-Mo;)-yznTsfHPw<>$>3=VX!|nfHV*qMwO5iSg!J^mMT#M zNg^t@TyU5ZG0=>t&r!^*7+K08dkQ)vqMf$X1hpIBq%?!l>o^U#4Er=-5fn)bo{)mT zZAj;kk8k!$VE9sNU|&lfeV}#1mc>BAV6rO{n-i&mh@|-B5|)tfpk(s4bsfN30R_XF zL+Ajfk$7ow2}Ppfi{zOMDSgK9Mwav8^own5L|iT$!1}^@D|Ii)j$AEsAYaSN*NMwQ zs1T1T=gs>3iWR)-G5{X{xQO@PozV$f_@RO{(g+KcVzl!*x}+pkM7iTVLAqsx0NHrKhs*YNuSxUQ_hI&Gdh%J^jila?d;L{>b$**x!Qz{IBPa!Iz zEv=huY6jPBB{n8XO&#K8&@3>u z5;OtJns=1plf?)?Sg;Ojs45f*@DPV`E!w_0jRRn`cEaEK8@SCHK$ih**AU=i_Wavd z4z4gNV5VY(%uBhAH-hVfaWS#Vk$=#7D~8`UFNVaNctcB0=5p zSR*GL%T2q`IY^$!i2-WcmW|gePT!t|W)=oqlBl;N6j6-mQF7sX} zu9`$WLbWI~D&&z-`w1A)xKykz#;5$6=g?y9Va+oJWnP8Jv;r+-|x>Fz^g6; zNT5lwKs#J6af09Ft@u^lszquI)UEwJB4my&kNLzA%%F(2xYR`$}mZb zW-Zh!%?2Zg4_1-pElHcCMW!Gz3Rp1KF%Vj|GyPiM!UKdz<{!%_UyhGiJ)Bxh4Rh3r zPK4=Bx(e=io%n>poWUCw9VhXBNpM`6gW=poj=aMS3-6X1K*#qT8o5{6PR;T2wlDD1 zlH2%W-kU2TA!D0Klp#dwO}_#)B#uXj7OW*I0CaciekCNC{w8q++D;qBrmrWjRJFTQ z&s2zX@{UpYP7D)&zvFe)nb8f#1H37;Bkh6?{KcvL8J_$_+9kaI^JQKC^CjIh*m*cj z7(?O=glsxUw&S4J;9F(&|8tJ@WR7uzEnrA3YFQ%D0+0{>6&VQ*aniRcMMg?7yIKzN zW>n*uvS1;xBn~#KZh>@CUS@c~lXwS*ehk3es?LjN>?7~fT1*XCZa?&x8%X5f&f5of z@6izAeV)?62Ei}1WdbF}tcYYBC`!R2oKJ&vVT75sPOKpm##jGDNhR7NgqSwK;ONJn zke3V;wcdCL8^QbENXBpGqyUGBfyggcI*BpRv_QFwK!xJuF)w>8)9+GB~Nafrz zJ>Wt^(HexcreK;Xhwim5C~tkiAtaD@Ik*A>b5frI;qB0TqLLkPJl@K)*E}r;M|2K= zVeCd$n36&rX;eYVJIy||F&$KrTw2Pk)!A-UBFcrF=)F;8L{l(Y&Io|Nr3DjBXUnOA zv<3>ko2Lnx7jvL)mIr~dcVy$oVgtFzmz{HZ1-BOYwLmYxkM zGbS2ARSrqoWU>v`u{!+l)^rrY#x;Ne{m=5V_9(#AvNusT%K&sC90059e+d;LLh*1B z5)BeN2Q7=jW(8Mr=cw|CA&%5@+mHfm`eE-Eig9sD0zM!mTjLI>ygYp)Z3fqZps zOiy(@ZBZ!e;@UDj{oK3`<_)eTuijm7$ zy0k(N%Rm)rj}fea{!Hs)+esDWSRa`Sl5k=uN-r%K5N-TKN&SFw=i2raJ_4q~vj&j& zL<7;LlunXJ-(@HEl|7wznzIz?Q+u(CiX5e!4USO$PFJhn(`x`st#}W$Ejm8tv!(p( z@?|y%uPbk~hw^E@aziA|;;xE@tssTQx7&dpwvIb2>rg5yq7_(rGBC_8vphh+2qEe~ zjUk=oXax)k4WK24&7uyPr`M!%*<}DC1YG}1?|&7KuFfarG4W6B0H_7guse^5r(cu3 zS!{rrx;fakOrux+e+|6Rv;lF7n0vVY4IX^LK;;<+JKHgBA1+OhpYzXAPZuEPRaodjKPa26onzXZ&Gl~Ejgho88iCjrYUF~ zxzqRnvSRdr?c( z{wtcUbb&hbn+`Ki;l}ox_x?|?FZ2r`&&fA7W==Wa)f9c*-;$+JHze-TM zH-*3d+yC_382pv3DAc#jXBJ=jS^=R17pteYqd(vw3(LXiNlfO#4k{gAhmV{9| z^6#N>Z`Jx{ZHwh&xKR1dtkN97a|_``$@tuDz7sqxT4Y^;z% z;46`B_6(mSLV)Dcg<>t)&Dt9pmK@2+c6;{QvweVf?`X1sgh}YsomK*uV12|j7#zj9 z;DFR%1r8e1CEJ8nV$;G$bIC`~+)B3^vWy(ok#!fCJ2o(?npJvq-`n6UfR<1eGfB%icO8q?*ZAjI7hh^e3B@sbVF&uMU=0b`C+eR2 z%Mug?(XdJrQs>yPhvwUAF|rzOZV2-5QOan2*h0_VyQTb7x+<-Xx^F$ss{&d zi{r%v&n~|}l@W+X2M6CjJox^5KfDRwd8~t`Dkd|fh|4}ljb$ob%RzrFVKS&!Yz zm+$TEaJ=sm5=tao;EcF!^!_Wuov=iDwOwYOFhoSuHU}!m_nB?1>whz@i`3)o z?H3cCuet`X05gz}WxxEy$3onSC!YML``Fvr37azbtlhyrV99By-H-pxX+c7I2es8h zYJ^1PjYJ?oPf|lp$Tuz$0X1*T!F&3)R#Y~JiRwWj$!kUY2U?6-Y?zEo%8nwOp_FB3R4J=3`Fm8UU{U+55ld`nMlS09BhA&W1#E zQ|Swx2Dsgd{SZt>SUh&g6en#>^swT+U$; zSEzD_voZ#URD@}cr4lUE0*Zle$t}fK{|fM0pj`4_y8ij6-TU7RZq1m!&13UTwKoKq zlt>Um(OzIm0*so%bR*S*ROPnZ7GaLeZZcgWGj)KrRpEi5H{0H|-V{{LCkZ4;ks(Nl z39Q#P1#{k;5?KTZ;bGfgQR&4=GPa9Hx1;j8lbX2WKpDDfKN%P>2n)e$PeX6YzTl-* zu9kK93TdoA4Rg{MJRk_8L#dhJuH-`_aSO2D1$p+tHJYI;iBVXo_lZG*pU%|tpO;C2 z0abIKDpVd@B_snx2%?V70RS0D~{{CMf}qX1|2udh=#YXF$RB?KrdeVtc8wS*8fB4ox42`WiZ21P2#3n&o;N{mD4 zSlk7~6y)I)U;F~oOw$QLAC^cVY>@8=MWjSjYm`UdEc*#av(p9unRj)NGKq){EDCLE z&#H6Ukjn_0`cO$CO#om(pTFQ>=iMZx_er6Y67~E?vc=a(bVf;M4LLqUb|xX6ZtM1q z$-s65geeFhO&~qBa4FU~k~2BH zw3wMa(r6*K-c*{YDz|K?+e>p~4==>kcW8m|&QE!~KlBSSbQedP2aU~pq8IUKQ0`8hkve=eDw1Trffq+Hk zE&5xbbV3g$99sM58_h-8HkN{1sSK6uO{1$G=b zVjzW0z(IidR}{@1YS1WdS~-AeF>PVw1Y~d98s#dPNk~?*M?4?`paRK8jm&@zd_`j% zRu}OwPk@L{3r6^o*VaIl2=J&+X=u_FlIqA*V_Z(5o>Jrh6}7)(QJ1pH zEHzVcirG*xR&-HeHPqeK4%C!47E7{e8XU-_NXjJ@1!;zoG-^zQxsD3RaZ#-BrY;5F zB1539*A{`E_T25mzVerF?{BQmvNH@(ee?QT0AML}RS_b-e%QdA#_2MG$OQMi!&Jkk|*{?i3IPntmIl~W*oU;t@H^2QI z$3OkcKmPvTfB(mCzdl{Xb3T+a9WzBMDhReKMjB1z| ziRKri5kfJeqe64JkY}meH4MD-%9Fs6b=MUsmT~P z0v(M@BWjIn@jkwQVP{>FDzvT%B~GA<9#AG~Ygn)z8eS7QBz2CerS;O4Q*AJ#>|lWi zf*;NFB=QN?8UyGRlo%6WuY^QW;H*w2jlXk8Y@TK*C&@OjZr`^;{)`y4uib&Fb4n`r zN=uhuOIk0i;C7e-=ZL^4Zj~u8SqmKQ6d~}TneCT(o($hR{YiZKnY8PFr)zTdZs(kt zydEKXDTAM9!5(u#qK6N7?lT5r$k7!p*hnwy`NOvl3=Vb_8B|c5# z3O0tx^6b&Uk=o`17RQHA9*2{(4@E_opW|{hXE-w`CJ78u>7~J{H-wg)?oGcNGK%?z zTyP}<~HtJnQCRJElmF94g$WT6lH`KVmrz)&1 zl$e!0Ln^A9%%dbVc&1{mKqg40M+&xq=3q=pj)OFqZAnTw3l2k4Hg%3_S>7(Z0w$gc z{9S}rYt4kTW)%-=XB29IH+pugm;($RJ!CV!FM*_|8;b|l(0IAwnHH?t{r7h|$z?)^h`H^tSpR{MK=vE%wDf z8g{1&4qTiuIM&B}=WvdJuQbAG*N=n?uhOm1h6swE(Tokeo4K=@Y_l}UIA5VLD5#Jj z1CJ|PyEkskPy~{J#1O2xRf$0MWy02nAA+N<|HV73oYTfx%oZ_l*9GBVL+Owg86W1t zG0d#9awyFL-C!%K3WqAH0TzZIi1Xm5=sh7WB{ObP_6Bq)4@ti#S?mr&K()!4#}dHyPjh@gpl%KK#FE0 z3PN&F7g;3H#V`)WjLIj!26RlGDr97)g;a^t-%S8JE^09@P)(c_N_0bj2Cx%$SD~;& zPTWd23Fsg&o60I^GbL>^F98b1Hc}Th0EcaQi^T0F!d}U%cPJ;!S&6Nj%%sT z{7h`=0rh5u$)aO`txUm0p3Lq#Yw{W|M$@A5pDbhy)UTqlh zQq&N&IS*4V;=CW6!-u&Ln3|u=HxRvXAehQg$U9Vmf*yKoCu+~c7k)3uaw63`3D!FW zI9mB4VdkzWDoXy%P|e7t*<+d%ko3|`=A7rEe4vjbK&MLbYdM5QX;B!J$)O>&gOSi^ zoOiv-S-oh+Xfstdk2=F0m3-CA;8TQ)C-GeB%cD8yWg8E0O4W`qXG}ITN`vG`WrG9O zIhuf8Qcm1z3e^@c8Pn++NAGIK)m62tU_-5_VNPjN8fo?sMoWr=xDaxpFpcf_X;>NN zsF)v86@+9Q{DNK(c{CsSJ%ZAhEcXXwAKo1n)A4sWP|85M0+mHIS5utJCP7@ z(=lSNK=+U}W1YthW+!NHeU40yXpVuF{y3giVAuj>Pk|?UDo}_mUAvLQAyQ_J1cI&@ z%M0Zj42hc}JyKpsf*lFmN)hvn7(NhXjBlS(^XS~cf|}C}XBbDl?MtYljuqhv)q(ZE z+$%^|L@K2sLV=Pnf}ciO!o-MnN);)wAPu4LwMS4@AB_XjbhpCdAK8_jk$ih5%1_X2 zh6E(hkpeel9KLD#Cno$nqQxLDeY3POcSd0)&tN73<#!yk*V3NnM|sNy%ZYJ~lO|YE z=4_nmJ$C$B_3|JOHGmmeG#nhcAMvqZtJjE3ayP`vR*Ib(tyVfp9B*~|b>Ikz5eim7ce$`@s?z?v*W0c4yhoImMd#ZdY}#SeL))XV z6yXUZ^pxVXk&Qg;yK(6SEy3R4>KLE&j8w5cpgW$f5Ujb)rwR0h47Z9Sv$8<6pb&Bm zbq^o0tCjBpAN$ZCA04nGWq{H#x?UNeDwN2m9~h7VxXq#!cZ-R*WDFE?nkS@FZZ0W3nn@R-%ge zY?(!XL6O+TUT|OYM~Xc*rE7VWILC)jYFL0c;uU7h*fjNxHq;seWpT4WW;=Nm>3^%Oo&3dDx4Ix&;SD0_RrpInZ^NCGJ`*rN)v$W~&9Upo$&V z6tjUFVZ&4~reQAXz4ESoAPSPRsPCFwF1(zI?QA3Qf`w5TH%?e=zNE z)qX8qn+-{eXiusbl!~I-y=jvj$CY4- zjX)w30C$Nh)nYbn-DO=hQ)NB>|7XmXvDte{5=Bbfu!8_N=bY;i@8tpzq^K$z&&YTl z9`4ug?rTISZV#2gv33ej=^r^U@;sL#!cC#RLr6uXH=jA_l^ZGVoJ5rM6k6p`vNDS7 zAnbeq`|+C4$BKDD{(5VW^ZQKeBcJxl7(q_W9kd4E4JT{ihQ!st&~lI`=MU8dxMCHq zA>h?)Ye%6$8cb!J*e^Lk3aEjfUBs|dv5DD*RESHqCaf7T_srHsynpWuiXi;K{WHND z4ZggY1Qp}Jyf?(ie0&G>J-+Mim*tBE=LAAlmOTk(2pxhQs`jnIe3bY@%Y8Qh?(62g`=^TuDUz)6qfiW^7<%Jw?1+jFIILlQOp`YT z_yEI@+Dvrjhty3uBPXYJ#))|cOXRX6fl+6nTr9Rt!GN@t)6wqXJKSolSt~;4I z)uP5NJbL)#;iXRk%uVMUwqV5s8<;J`3tAbk7hd8>ppb|){FEuH&aKj@BM(IfJme6$ zd2{)2?JfcrG{~->CYweUPA(4`!-`cScr>(eB8AqFUf{roDZ-?gYUi1atc`7gqbW9e zIL*+h5!6ysh=Hasvb%y@Yr&x~(b0U{YTJhy{Ukkg09z45beInv3ozd0qwlistzgLm zF03IjmSle$!(j&76qT0gWZIbL5+!?aSY{*@A=Lej&vIXtnIO`nU>Dhr9?aw8vj>%? zTt}K>Plk%=gE-?Sb=rdTqUH9_$VL8uOB866lerNbNVB_)U|E+~%1lqw9*Ts6N;pt6 z9P_xM31%&C3G3Z{SOYj-2ADz!{@qIdGP$lGLJ61HLf%;n1L&jyo7C@*&z5(+LmkRGTM2hp%PQwH0HWMVDel133C zQDJlus&Fh@Y0(v^5Ez$o%$7!;7!ag;JV%fCoyQQ6Yv-S6p?7-sSMs zhYn!ON=^E$17W}Z=l?_^8x1%UaLf=san9Lfk03!#b@2T|C+vVE?jAB~eFR2n!UU&W zslq%G2O6NZ<_Y9^fhL1(hJId;^*;x4qzV^0$HdCnxX)VyWQYtNd6gXZa243Azy3bm@1kT+G+1R9|vjuQ5~q_!ew4! zP|G>g)iqY%Bco>apdgz5kNk8cferQS)WH3MsglwdQ{((4h>*XjdJ3v4PENuHaIn>A zAB&S=k)KH6FufTjIOv)#JsJ!xoFIHE)1d+ej={lTYR0(O%q6et#-XTv3CYzSC+PH; zFVQSGbN!Wwz$(TV*uH4ZIf(X!Sop1XpAL!blBEcgwmw{d|NTsU2?$WkBoH7EzT2nd}+*;KCa zOF(e;zXbqo59}z&WzYZi1afVmp3@0^Wt+^kFPkKw!hZMl+ZhsvI*Vy9CmS8>Y6B^A zN@;sKmBp){a7W{bG2*4lfdkc9BhR}qPSXvP1q?@ae2*MmB_|MjWsqo$&jOo5P^|{O z=PWcuKyp~wrND~ErL;rB`yYIGxcIp-CG``7608s$o}x2Y-NC3E*ACnN_w=6>vDL_K zr!!;2i7cD_cb4z38GiSF|Mv^?{!<%jPh>V8(p(UK^5n^m$ni3Ox$lxKpM(3E6wFpd5GvwgE1`;+F2Q3qNKt}`StuW2phc=CmCj?p>oKdJGE>| zZn~4g*$65=@H0&DdX1}Wz1)fHL{2dRMpOV7h)_}rggmx=AY2gr^j}j63z-s1mJ0*EsNM{P=5UcGZ30;t5p&;tw!s_s+A>fQqY=*YyIPve)?tFhZ+XI;mSV*6$TVopq6TiU$y+~lN zPONAyy;m!&WNk)gI|y2ASjt;Brl(KP6W%gB0af7!6iv<*nL@8$vk{#36Pn+@f2N9h z!~)J#J(ngKw3^h(3e~DZP~}z&9jx7-X zRxWn$bqBChp2a}>4XRgRGG=#an?K~AH%N-TjfFbKS@ZpfTWc*-R<9nJ>6>R>rO zU&eFzz!`2`{b-jUo;|k6slCx3v^?t%x3H&v`_;oeF0x0K+ra2GJGFe0nAhLCi6Whf z08j-xMzi&6Y_hexhyp!@qvsrrRYrEteNc>6XI*&tDf7Ftktjqg>Y>1G z5KY|eeq-k7b}hbDfEBfg7Hm;s6K>pi`usUt69?b)IM~B%S-6vaG4lM=&n9W84u^wJ zb2N7p6z4)Q0a~AvNy>O6C0`0k%}x(@Ls_IIP=pB8&E<{jK5vwDlU}YpYuDCPhR8q| zHHUWXy0b_lu1rS~gO@0b2FWWY6KJ-#F`WZ@6yDG{Y5F1R8=Tt^Nj!>30wYlz$TQLc zZ}o7)fZXJ%=OA?ZA?EBPCiZIZijI>YX)E1^d&*1!WLK7=zWr*XP64w5Q&xAtnW_3OJYQY|_zMC4q~bJ1zi_~iFF+g( zKwb2@GTylaW*Bggu!!C`(_|5l3}R(WLuVk=Eg_e`@0>rC5^NIbG9K`%0wMVly8>(t;qy}@wLdz7(S>D!MD2|-D- z!cq`oE(`M?o<&Kn8f`=!yk*t6Edd+_vu$I8FTVJy?Q9f$_1!}rP4@kyj~=h73Pw}R z@%`zKpF=2k(I7y$5xRiNA2vF{Cp9eMI#ueV#mwu?e0@VPOsDn}^qUTdtr9(*W0GYA zFre5zWW>&lq;qp?4Ipkx22-Ll`#&@>^SCbq#24Ew{4yUvcMR4R3Fo>UQzAzyM=Rny z-G~>jUipS%M`+*sCIstpdIeXQcjc@&r4MZR*Y&fbnb~UTb#60ZK(?YKAOC8X|5QRy zRQ!-+7JJW_Kvn=oK+qhz>rHbJq>P`HOq|27nRRnZ?&8|K=qbIn6pa;UAo8l4Re2N> z_tF{}P5TNwsfBVAJJjX@=@>;M%`J5ROeX5!Qd7N&0cEh&P&Y#%E|8rf;tznCKyM$V znQ4Z4=T)tfRXibEYbhK4$9spUmwVKAdoz-lal}8W=YwJ zfw8=of3}9{4S=-1Li>`G3FA5J9{c?tt>(n97T8+!j%wBqC?ikV^^d_)a(JH4aq&`7 zj`v0uH+bK|T|XE=KN?Zg0b#UUr$n~?z?T2(x9-4qFa(f@=)aRolp zH8K!XDMF7p+2+BX^o;Tfv(XVixGNfJ-|D0ife%nY!~?7#RcKhF4|S;&^Cm}Fg*aEY z!FqOpz~oTGx`GUL`jB#Z_5R}Uqi+Fv_Zp&O$%|6RWy+#O6QQepCA5=! zS8Nx(GAD_OdxMMys)XvzNJlrQyxuKbcnAP7yjwYQ-MiGnPFWlqkqc`8xQe;UnYIK$ zs{rUC=dtsMf-VAiP$6;AcvT6qp&?iwXYyf@#9R9Hs%q z9Z_ws4yqZlMIuG}ssdqdjL@E>C&n5&6KCO5KJ7zq6R3CEAKteEzex1 zR;JCPn5LKktZ?VSU_R6Ry}cjlwBFDXcet4n-O@c zLZvII7K34@-8t*-x)=M+iCvTEt#Qma;4Or0J*#~D2n#nj^(lpHm#!=;A3QD86BvHR z2@7(ke7%%pnuY`4XV0k2y5P%lxuU8cA2{%nvMj4mT>j$~*4qDk2uFt3t|`!}s7qG2 z3>&fEXfhi`5Db^B^s@rQ5|E$G1~L9xpa8z@KA~LXvzHYZ6IBC#YCMa*y2ob)PIw0l z?^R%KKpv$k>!cJ>z+IED5ri~114=ZJn{8uo_pOZ}GF$rLSJ@uI`Kv?vyT*QW`~MDT zq*mLzryU~GWj$OU#Xh)x>w{}+Rp2OjMeC~-uY#SPrBpC&4voOPpWeF80qdqb!W~C8 zmpYJXeBr3a!IXfUJIN-h2CfTqiKV!rNMMO6k!QZkrmRHAfIe9)Yn_VU;XG6S?~rk2 zkrtOH-?|Kd@7Q!l0twiSW{%C~aH83L4D%Ys8lAd8d7>#%SKD4FvvvC5K0R!r zPq1bW^`?eVNZINpjFA%`k4vlF#If9?Jp35zz%r(lynf^Hlc&tGq{T}k)1IxStx`&} z{eMfn_VTmeOnkh~o=)qt$Bk^oCms!+M8#VkMm)R%18Iqa1E*|8N!wE1gV_^@3^Fis zXO6)>9S{P=3H57|T1_CcKF)vM1u+WYP-=!(Lg1gXWekqwXOLB&!4&!Bq=I-LVtj|f z6brRcY1@>7I`HX%;39y@rE4V4)LA{luBlvoS?NR-jh5xp?LM-u=$)*g|59N@J_4p3%v zgq?V8peOF2ps6$K%GL6t49U*~3Aiz`hSJ4)eaE%evl~xp7hYgL2ma<5lb;>`4_pH{ z^gDkx_LmEyCdY~Fn;d~Ue(}%{#=O)MRb?5z7u}H4GQ59(Rv1O`#=5uN*feIl?w33R zr-&siR#vqap%c>Nvdt|p$gFfl+@#EoQ6;B5?>1t!c@+~bYOB*UsuJsaadXV`s=(@W z7;lADby6qYdxVOvZ0ctAgGFaCjGIe?pJa}zoJ62GWaaHl zm<4&{=4)IzEvqWVOg&o_m}rA_FJAHnk~QtjYd&r|tq+dP+DN7@SPv?2Ac6lv0>Hj3 z`|$M8@k0Q6o{89s^mwdn;ms~h$TFC8YzLIZKRX8|DaUy#&E~YPVX{p007Bx+DUw{AI{j3=cD#G0gM<9 zXKg(Wg0Na7g8e8k<$@K+6SuKv&TLVq`wl{~&48<#Zglh0;t@+$ml|6@_1MNmpMpgk zW*P8cWMXaw|Ddrr*C~B)MUTk=;k_dbzR)RWCc06911BGW&lo`r&d5k+Y3TgGkb5U* z_vi%C*y}SjMzkGV>~c9sh6I2wva)Z)f#HU39lAPxkOdQ%WMNH7*TguXCWB4}Xrq;Y zaa$1n&rXbrLValtT|C94`mpA40^tox<5O}FB|L-UADoF>7{arcAc?JmRca57);J7+gO+hsO-7xx@poR zF;WKGH1Oe)ebd%5?U>GN7mESRCxKy%f>ts(nsOyeI205O&2>}@&Aw6-O+*7!0=9dc z-*`*PFBQ)2o#|5wcA(!7juC(vhfN6KeZ)hn>y8m=dJ5a%CL**g&fTqI8*)(6? zI#k!bTz+#4wknqzsjYw`6%l*)U)?@ND?lSKQpGK2Lk-;D}-Y(YPOHim`(*EE2- z$`wY$89cFK<|amm^EEjLJZ+a3!YLUh?@F&;GyeOlf zUM~EF;lHPhP}uVtCAkCxSO0R%cxzLDKwAX4b@r-?Tax4Wa*R=9Er308AX%S9IiFIB z9Jx}W>3(TE1o3iY-_RE`c$^dm%g&-~FeAfQ3YtZL{z!~>2d7fP*jh@5N{+?Psf+7r zn3{EqrGp-z$PB`{IGfjLV8Jk0Vk-v71a&$NBJLrl)jlWs$GOP{-CpVTaHlCT5ts@> z3M6BR$;^dVD3L(6G@i`*Q4F_kOc&SwZCxVX1zIgMrK991t)L6gt2)Iq9Vh!b{N&Gz zCy$>!dE5#@UFGTQBS;*}d`@gO^1}uf@(s)%d8@9qR|Kq;n6F}H#)U`ynEz+aPH??1T5K|ETKDpV`13t?a? zPPLZhY6+Y~V-_!<7~26SOxgfhcIlElN{M3D;k2hIokQ|F#NK`OA7J>G(Vi6R9iU&z zg2sG!>phN-FTajp)NCsv(X=deV79btpWeLjiM`{C0k)GwKglD-UW#c(QTAL|%57a^ z2M17^YbKMdvO7h9)AblJA(^?WqS&m{uR9EC4zMo8est>p!drmEyDr2I>GCoFb~sIB zij&}@6+*G%k3RVzElPJ{LD_91>_^oL&E*OPwlQL@36XyWdu0NOd6FODX=Nu;9BJgQ zq+u* z#J@6lb(FpMI$eN#eCw_8D<}P@L|fW!+ZnWP$eU`|tizUdp9ZEg49Q>x-S*fU$`H38 zFW$L*n7M;|o=MID*wT#xlW7STwTE*$Ya$C#ZY@W2@B3Y^xpz82`|yzS9pl7~&(t-232HBo+czYxF(h+XG=)%~<*0T?8n-aR85Fr|2o4Vl5&G#&Hi zx2CBn*~Tje7iijGY~FS~hBbtXqgK@s9WWcAIF9UXEIBUNJE{MP{1 z-t{^{g+kWKyII4V6BzsGzXRB$Cg_zZ1g~AcedF8%WPD0v^8D2E=l{#$lK?-p>|c`q z#{cvA7jyh2P%f8^b-Wfzxo{T+>wuSVavgBhK5EkrlQcHdpqN6)Lp=+CdX#)j_J&rM zf?!{Xd{Vu$he_uW5L3om#gyV!!&s9wOm()+9%55!CaxKsKLiF0Of1(hmlT-_c7K7f zS#sT;imiImwmW19eCC|qYE%8`B+z@EMD7%WF>bv=4)mmD?M8ikOV&pbbZxbO#PCy= z%wev+en}}i^0q7se2|J)J7`#G|J{<6A)RG9?j8S5k;y7{hFFw?%llJ99U3wj7Hfw8 zdUkFUSCtfNN$Pv$;*Ixi$wV>%i+tpX0m1Jt`_V153=|z_`N_$P)da_3-}@$UE96V}P(nZ%!t-MSy_i7_~gx#8G>Q(t=#fleTn$RJGg|-?jZ=6)l^n8WaD+q{`+Az}Q96hng1k`{Ov8hD` zitMVJoTEN`^Z&TCIE*|VLVS2*JZkSw7s!P-ql}lb|3+{TiYecZI zO_^j}{bTF5TtVF7$M|Pi!SY6LmY|IM!B(;sIDqQfgTb`u@nGHdJFSw5e%}rQkUB0H zCYvaMDnG4KkgS;S8ZHht?b|^4N&DG`&&&O9^zKod4g=-DG`HnT82AzfR0(9@*nxu@ zR0&g-2gvZ%D?VC@1L3h7w1E{qI560jompS4oJ- zy#DQ-+_}rQe0^Laal#hluh{^(0?_81(IkjZb4EVf;!C=HXelq+j1f?3jO{1E)}~az zoV5d0ttMAMRWOzS-3Ho(SHJtW-+l4r z7ukV6so;cy{|3cF6?&vmPA(dy znYJgW7G9A1;hOYOENXYrva*^gp_amBPR+$iH6>y?jj~$R1k(xBtJ$V()R0+HT)mlK zTcSO#c1KN;S8!Z3iH4Dh5RT3_%?lhL+kn{U2wv=KYRxa{)H`j9T-*al8wU|U6hg@> z6JD_*Lr2A-q|^Z?8aSC3Y_^W7m{q)D;*2M$!_ef{aF|Rx&Z5n-&Cmp{p&-u8q0Dwg zZb_{vMzXA8`my0=Y;0-5e5Q#YoL|Z!5fn)>B2KV~i2>n`f+M#_IwA-4$gXvJpoKE_ z*3Bsb1aY1h{tUsEG}M?{1B`$z`1xlw$Mg@eDL+TWgUy@sV*34cGS zOSGpbiNZ>WRXf8HO`V<05PeJUI3Y4@(?j>8@JyMI`X@cj5%w#{O_o-uT_qOpbwxon z{LROeQ~z&&|Ifk(?aFPUU4%(&x~os2wiuJrICblNRS}{zt`9%{0K^AF*l5pB)=0jy z?b&D%rloSz^V&Cxs-i42)z+x5qWHL#mY>c*Vse46o*nDM$YTidpMCrA20$;STP{BKwyA zD>L$zT*88AX5wTF%S)j2dTl z_=&2W{1gewcqmIo-@191&%U0Vkp=L%TFL`KApLsjH4GEJ%DgmivZ)v47jw`qz@WnY z`)8$kkyiEFt;zWCyKOtBJKR?(@Bj91%k{Ps-wNArJ8mS5s{#-ED+mRgvvI7u`=bxi za};<+Vy@=y@Gy0cHr!m!K}(E#gLzDmMJdz9AEd%4)j_06J<6<->s?9A!1)owis&H< zW7KhWHH7k+N(NUA-x6I?937rO+-{naY5c%rRZ%(hP=fx$5CSNUiYY_D8DM#y2Gp!5 zfVcxOC#I&Yhk0ZMg7#>qCF!P^4iX1QZGf0`xic2%QRNNM;h$%B3(~QL&02My9&jZJ zfwSQ#%~4}l91QF_q0A1<-FpIyoV8;r!w2{0u(CvESs$4kKbm*tio^?n?~hza`FWSD z0nEJ0&ny1(N*#R7z7nuUejY?h$)g&VdT~C8dNkMHTmh~l|KdoDfxj*ri6q3#Z%lb( zwR%Z7oU9=uNZ>jivQC++k*?t+)9433f*T_kSgUS;DDYh6)sT)-mlAI&qr*ePq)mmY zFzTmTErR+L=~Cj9uE#gxH-))N5y0VP^rSUW3(5fXLc>b{TLUj1R?WT6@d`R& zAxAxrNf+SjAME1udhC23&`ffOvHI5JG=OcTCqjbcPhR;V9o4!_dqENPkO!PijztXQ z1)6-v^Nl@k0_HA-b-^O9bZ{o~0JWbfvy~eCp*R`HE^}wE`{TAQ*?`ZluLpc(8 zvnrhjX=?C4Ra3>FAX|8?IZ*ltAtdlVctvRoA+cD^R@J#*C^gfY1H8iCpr1_S#1ry6 z7L`UMf>d%)BLCPaMoM=01e2RRoVHOg^S^UXk|X;97NTDueRL2E6sy&(^TeiOXZMZJ zN#J2j1~sR~(z^okm%tph=l5=tkv;*N7P_}ubakm<`-ldnf6;FFLCjhvgg+OkjH6*f zt*a-LDh;NPbmmObe+7heY&P|2Iu-y4Az>*@nPVqICT?2Rqg?f2Sslot0h*mv}G10rX~f{eao$IfaC z?{LD9khzBut^T&1q<}C#?mIx;<^%}D;*<>^+CZbB&d$f$e+ox=)6T8iH=tiZG@a2D z1}&9c_8xfTS=T#v&+eSwzXMn}gqm?X7lhuykal4Vqd=OKFS)9OT#~%&N6G5<^X>)Q z8Q)*wv7Q%vEu85Sbe5`tmo7Iz=g}xQzs$+;3c8*?VUwoXnz~t?mPJsxl(Y9>C_@(&4hDev_O$>z)Mip7 z8a-8sJU~n<)T zYXBOHt$1gZNrfJ*P7^q-fJc=e)w;m9Mr<^Bgha*U&O6dLx~bzxBnf84bXd7Bgflvy z8fp}3rAn@2=dU-$^}vBs6)sQ54Y+I#f388)9Wo8jV|rSZcQg<4W1<(0ENWGdVaYt7WUn#)fCpUQi)9)Ij(<@)*2K z(ilBPql7foFN$>T4#EmULo5JZjvCOz(yCY$4_b5PSuc&KgSO4@5r#jd3}9RXr-CeQ znH=q6H|TK|Q+-uhr0d3|;4^I)_0Zlb)H}*LB5sm1AWe#ycWWfrgyzvC*9v(QMb`ua zy_{5X0y&lvA&PyfZUzSiJgem3vZNIBC#y<{7aOos+eq1tj4vc*;c z94gqawr5@Ey0OEduYGp+HcE1O`@PfKxB1w-Rtk$raw(kkfZK4%zXH6Pi05U{+fNc* zc{f8?#gu0MTVB2sfiT&~D8mWYe(+^fuAU|>Qwk%O6_@w(Z^9_l-1-a7KWY2_aXsl# z38O>D_ud@We2zneq7TPu$MKJ^U;Fs_^*KH{RH-SiY}>D#%edtAbop&{?XTlNI!2$z zfN>#9wN*xybWD4|09}bC4lJQ#+{Yvfw_d-Nt9p2>pSd`kZ{GO{lP{Ma0)R|C+6BIm zc*G5{$%rFKQXahjz*cC}H;iM@OA+JBjA4Pom37eYEbph?6E>$k+!Fzz4}UBHds1Gz zoxzs_69!-`vI4Cg4jY}ytj{3K2+_A27rus)CF7dBE1$Vbmsqd`p_F;fmE~0Km8A@m zZBka5RqnzaZyqPjgRuqfHvU4IR;|{#44~Jq)F`-m zHSU$gSC&tE+mAWQGr)=SPPEeAbXqJ&9u!eiryo*{Js%7PaYZF|FsoZGkEq$E?Bo49 z-$02Q)Hj+$)AYfIAARt_hrAAmzB*+~Z~u;i_~R%0BEiMXbIm}Ih+-imG5HpTV7h1!Wl%cu zjpTLsxn}1*aF9K5?dD zMpgD-F{I^Fk-tSY4N(gTb6zo2%}fe(5x>o`v$NoSximGT~qK;vKRW776`ZYBe0{lm>25ekO~*rVzHfXnzVi z#ulK-JK4ymHLc=7B%Z(D^2Xz8_N0tBTdXRku#=TF4S>R?R|aR&rgVik4Y!SW2y4P7 zQnJTvU@xk5Lkm@@<*p^j-!NEB(A_PjEQXXZtG0fsS(PL-%UUc{qR}d9)a0aYE8o-{ z0$h`q;F9@+mL97xEiYulfqnL$?7#Zeuc~yNfHtw0Po6UMzu%I=!VTW#EyJnLnNb`E z-W8csHI(7knL%WN^805mq0={S&=(*-Z_9PI2*Yq;BVBa!vRF~FCzwp+4x>8@c*1%( zk4AXC1svrTz517e11COFh1-E8jVke#_7#{}42wFg;I-ZoM@P`3uUsob}$of|&bz|uxH+4k};*cP17oz4>N~H7Us;`uX7v zu+xKoI~pUz1ktESiKwmyJ*o?{HXL%jUkckmtdRsggxanWqB(K2MSYx?r+^n|m6yPHhG z-Ny5w7x(X-+&gXd|HPLgW0`a?G004mcU5O$<54(2nNo5gYEi>h zjTvdcz*Ks)cC}k_Y4t`H%4uVF;itNz-f&K68zSk}k|!WEJrC{8QkJ{oc<)E1K{x2{ z_M5dX-tF-sW4apkpfzmJQOgpY3_%hgSr4bFq&+>txC~0I3xyD2Rqj@F%THaMkD`-zDz0E<7XXWG z!7|lr^~NWZxbhq_Z-svJ_v{`oonJ@zzu`oMH?L#fOHY{DBxBNH(+qoS<`|KQ5@G9C zi8z1pW%#qKZBgUhNvAls%)bfH3nvg#QO=52aJD)%N%YTWDlB_ZQsR~KB(uHu>II#F zNmcb+=*ApO-b`CIrv86y_J5eF+4w)rVk&DbXbufjxD6tX;_XbCV`ZqZiW(JMWXa&` ziFD*-6PqZd(PF3FgZm%wK*0U8`yV{`5F7FCA(*ec@o2cND*`z)0n7#{h6vh0k~qT+ z#dQ7pci%nw?z@N05FPXi2T?9E5-dW~Hy3lZ_=Lax?b(0%FZ->l9?JEmg6$v<^-6H? z5Osss6YRGf5{~;M6R&2Aj0cU7tz9>X3CeSMBKIo*-YBG86o;mp))rebJZcZ3 zFj?Sv`iw6|aHt359;@d}JcaiqKK6AT1Ua$hXvn@2Dbz={>agDGbQ!?JDhGI_oRL05y3QM>Inj%G&Vh)R?!_LRhuuuWQ)KLC%4PWF^3aaw>5 zuo^?Hg)ux_cX=DM-?)DE*01epT!LFct7-(x^}q~|@xx?WgrS^v7Am(P?p-ZhdsgEI zi?W0?w+)%IduR?`n^f+NnOj^_t#9H<3pb$Ai*17Ba=&BA338%Xn5@KsHf0^V$bRv^ z?i=TYrA^dhW4yBlqF#zWbZ=p=Bz~I;0^({^q1KhL)%3_6d52&Qi3f!u8%)j8TVxQs z{F1l?VxcvXELFVo-NPa)*T%E`DxndgsYZM`$7E2~ZHe~$4?vC|0@!aJzj+@=yQeee zm)MuDP=6F3R^e*F*)bCnpv>sniEuH1ja{?{cqd3eAz6ZKq90eq_ej|i%#5d_FXg~d zC&6*w`Sy=`fBUchxYvF;0^cVwIWY!qlEwFdghxGl{G;wNu~K_NaOc8^RbIIUU{7U9 z5sX~GV0N$h5k2gHZxA`+vsTCzdnXrd*lTdj$p3cB`CE5DkGIHq%K;lkyVq09?957| zFH9;E$FnmkCd>F7(4dGq=yX78WVO*oWlW*iBq$AA0x~Y#bOZXQrth~~b^!sQ5M`Dg zj>}3^ZcbvPM;ioidI+={;6;$ect8gJ4-VG0Fd_dGiE2CL)h2(zPO#4MfZKX~WEs+3 z;NcVMpCK2O+CkJ%7fWMWiOhyKd8&S85jFO|HVpfhw(5W%7WvvdO zpgumyNGEE<+N=nW6r57WyyPcS5WJX(7ah30hJUPGe+kLZ4u@4)^6<8VUaxG|mmF*< zq<*c{=L}p+fH}_ozjEr?Wo_SJ(?iFvmtvN_76Wy^ppLRevta6yyj0>Dm zwZPX-xqLvpS}U=pm5C~7Ue^F05HwJxtE4=2ek+R5eKze)PJzWaMWV{5Y5Ty z?fdVaaRBQ=*k}LMoGq{f;ws3c08=idU6H^VfZn5HZlg*>ltQc#t@Diz%*Q-!-=$W& zFpEA_(}oWu!mvpMh;U{ysCiCH91~EjfSlT|JjvFCITTy85d}KY9Oc zpJK+ng2BE9z%l?z>exk}wB9_zF9|SwKf3hVuiErxlVdWTAMFCuA8g^Zqltfh)-wUAo@+Vf&;#ai8(^&K@bG3{8VjBcI8oZC(W;8aDm zD{_MTn3C~@fNiB560tc+Uc;e?6Ofga>KzVF+OnpQIS^m!&0VKC^fQ>S?Tao1@HI2i z$JK;|7L|bFur5BDXAU?l*bZ~WB2NMktf)vM`RCfai!qRj*Rv-g@*5mQNT6+y)7_(l zE`58nlos4&$knFU`bMJ7j0X#;v!@Ba?f{3gE`C~YTRHB^6&v=nKzAM214%E#M&JB^ zssq4v!0VUTgJ|5uo0r!PFpQt~*bDK8+ z*+=TIK{^U)_%vif15-l@=-GB{(n|N&|F6ILnjkt(4d0**=Mw{up733+hu?npUHC3l zAg)dqly{<4@~OkK7cZW^`2N}VE(Y+$ttZc3JbK1U!1p3sL`9LA1`GbQd*3+%Mv%&M z*=Zg`#p1c-$7MCP4=Tl=Fx_Li3=gligp^_z}SX;KLK|t|vW8vf&u5Nr?g~=jT z=HQnrABtTHViNGjW^#suFFYLnRd=O=Q3Ga)tAZTZ>R!AsYnA$A%!~8oEpimPEZ6z; zqb!%Bj1xHMioeT&n}O|gCR44(GG6P@;5V%*U2&Jytg zxV!qLLEdG4ZsWgR^zBFHIzk7rX@Ai_P|$z#l$!nj*xS>Ju4B~MPzhxS4Y!-6aFj2e zx|fItyBrSb(xXzA!45k%NUBGNZ-4aRC$@BrI)*Jn!h?JF#H1qfF|NyOS_r!bHc|_0 z^n*d>rqd$!=+Q$ZMyhP;r*3xCU8DK*uDm_)%FE3pKK$o@o}*lz*yOaw8Cc|CR>E)$ zP)nLS&cNFOw}>)I+Y%1HVmRFl`K%VfA#j1Z;T|f&C1lz1)3`e^S_i;xV)O<=ZlO*J z$yU_j0|8C;DRB3fc*HmHPa#v<+|~2}R7k0l_4!`=$@HV$83tSw56lzBWKbgNFj``y zF?f->j`rJPg22h3Wr=`6_|-z(lwn_GN$?(I?J`x>rL|Dsn9d7{@-C}d7{|k%xpZ?l z7)I|YD?*t6!9dvTOq$ae^>6JxI}VzSO-Vz>!fp7CTBTV= zCS{#B_<-ER!yS)KCeOvx>ZP@BVd9)o3PP&diFk@jqMCunZ$3hG3MYYHzxLpRdk-Gm z+khQ@)v-5*bqm@sTY$h5$FNSBYS5Sn3QFmXjNSe)zHl2$TgYloh0TwQyBsq!yJh-k zyrl(e1A2|tpUGyRJ~1w?iJvdMlKGkJlsROm9JppwUO+{-`&}AYRZnqwpQFx@>=B~X z?IKa$gGRWBZo$mM4(}5-RJd#Dh5KNokC8xrgwIWjX4f=G+tkdO#&u?p4S2RCEMlla z14~fO{nf1LOOcTS8DjEqi9p@>^=H2xoc1#X_xR-q4_Z$mvq4S>0gG>)fq}gg+Ag0j z;Uy1ng1YD#&}cHw#4ARGBjlk6gc(0NN_12xeN7Q<6+$zVY={g$wtH{o8bFoD;f+eZuQBx*}x%V7z>-}p1 z_~EX_N`Ur8*)zN)({*N$$5#*`57}KWxq0LC?5?#{5C&t*LQlS_NDjpfl@*#nyj)dP z#IxxY(X(EVr)K^kVydpGKy#9$YBRcF0V|zmAtF3QxXIqxLsgesMo=fcJ#}>vE+`WR zVBN~maP<-=LZi>l?k1|K0nD7Za5c!ghyZf45fYJN+_kbiynOH`)#>7ttYs;|eJbU! z5V@$PZ&9#SkjVn-Lnm&rhxq87SN2!7rvc`5C0CxsaHN0|K`3)2a#SUTFOZ4C&w2p1 zfFM9iv?B!0NdR%=)&n#$RdN&%|MXUU(TyLo@+m7gL^5+FcTSl%=cPHA6Fj;}ALYe! z`Y3#*);S$OKpi}^hd}Q|dv~sjZ-RvZ2)oD$6Z~!mFArhz&KFIzmmg*{Wsf*0h{}st zOAcs?lSI6i8HU>H5J~6-*~mdyH*ebnLcLW$1zBtt@5oopmL*%}_}w(2z1R<@(e%|u zw|S3{C_zcIt1tDiE#5)ZJ{odD9ikcwWgHwM-ERZ9#7JRZqs*$tGv++hD8g&jHh7eQ zg8%|h)utqnlp&xC!stkJWvin(f|m$I!Mv91IARS?^qsU#ae=e`fx_9MI7pzH<~R)j zIbTifTG5V(+M!awU${SW!f;KM#`n(?sNNC|L#ZarTb_6v1YK7PkS*a*mZ}rk(P5=I2D8J>~7>M4mq9U0S@v#HqhFGxIi+74ecB6d15P<1>*tKiwVy z;qt40`~9E(`|tkr|Nb7K%v}VuGOMpEpnelW)&%5*qU%9xu!x|QDK|1x*AocE&FK&4 z#vtU^#bNl%g{^i(b8~2fh{>5bcol?60c_AL2r}skC}~QeVg&PSoM!rJQ%vScNa)xK z+z&c6LiBcP5orA#{RoOb{8>wf5o0$)O{CylTY~{ahOE3EoI8WyIcwkgCk{!a)5WRJ87+Ko-1{5QK?AdFZps9{^4pS~85F3p1>Xbq#JN)(zmE z5wJzPI$5slaWMhK+`8lQd2C$&?P9<*f3{pqinESQHXqgM(nq$sWNMz(Zl|z(R}Vmh zIEP@YeCi=_{QR~&>}^9@CIK}Rc2&mTJ68Y-))I8LRdFpu`x69YGHk#T!4QV-&agOH zkPDJ&1Uqku6SAi}aqGs($$OSfO=uwr08@K!-NbS6UL%GwBx8a?A^m>8Q{?7rA)3i zVQ!AlBnokfH{#4KxzxWY6ram(ZMA04*=^!pW}R+q#=ATw{!(R7Ve~f3KTIRJLA!nT z(ge_U>o55Qd5Xt{i7e98Fv#lv?wyknz;aO47e~=FRj#-U69g_@&&;Pao3PX3Y!u{} z&RqWtjkY`vv*i0!B|i;I9JJRS1GGCv3zQ%ld#8X!s#~x&E*UfT7TQ9!u(=IFIl7$0 zIUmw3vC0X&!aIajWZ>*MO%1Z?RWtdl?@;@sU47>H_;){eb0(eI@p28}(XABK%2lY) zw<4?W^Ib#6)Q#k(-5W1Oe%M$;786pxNV9ZOsoY3VnD%Q&V^Ll1S^Ef=_lh{Bpbwm} z2DugbHirw&6v;t0OtKSfN1Y?I2SMhVZ(i8=|N8r0?x~NxI@o~}hFuV9z#%i5BkRz} znH1)NaoY}{>a?qYwjs)x4ETJ%;>Jp8dz7li26qMRQzU5Z7?OPa$){&$ z_dfaf(@%f(>rX%Z1a^G#(MLGs58i+O{Ra=?vq*tk*5SgK!vSZ-1Pn}#NZ-b3oSX@d zp3sqhnADaOFu4a0?oS6hHYscZwm?+!*#m}H2fY1TjQ?e!H z$W6#SXZ9R)te#K$hQt)w1TSdE=Rdv`?U(gDxxR4cyZ2R7iupZuJpVXS%!+kJ6Q$HJa`Jurm3~h}YL(6*_FBj{mSS0a;PxfJ0M|60F_hq*fl`9@oF>35RtL^Ave8=O9QH=nZ5p zy`k5&@^r2FbVpWAqA?6(4Cbq}-H?^i>11h%n~G}EN*ZEaO_7Y7>O{40c@1FFFP!&> z0A90!x{ZqCaDl^E64p>X?f(RUAN^Enu{jW0|>)BTjv#d4YKF&Z*W&ZbvpQ4$Izi%Xk-QWf&$T;gGI2mn=V+VTZ;GF)5z#P;Wg5lV(6SPz{a++7uW&VY; z_yUb)%4y%NjU27E&u?B^4XNPZL<#cMj&K4V22xYXxi`--5)v%`pbr`J#vEC*b?DRC0D#PdyH!x7$QtwwFqhw)Pd>-kCqh;ig^vJct*h=Lg3!M*!RrX(D zi_oN2)55Zx{Z9&%hGtwm=rd=|Y&h+@{U4SNe5hhT^WGj_u)y0DczeNns|%)aQm@nc zZtX_|IGe^hG0C1zT?TC@bZs zeEj?8N6YSaLg$D@i)-4n*&Q3PTjiV88T=Zu|K%rKhqBz#u4Bz zweo=oK;G9P30%X|@>Eg+Wk7;MO_owRh-6`+yZ&gprkyGh^g%Z%Kfw+yQVJ>wXpnzi zjk-QTX|ua6#9r9ZKg$4@Xa84ozO4c5rM~&<(ChM{j~W-w8aqC%t-iD-V+%-dBD8%R z_URkQZ60_qR>WmBVAs^t^-jI;Bec= zSYEu)vw~h{*fm%wFoC|??7ta*JVeKjXZuMx-o6H)D_Vi5tmEu2XH+a7Md>Xn`S$@v^EQCN)Jj0bVynu~(F4ycD3vFxttT+T* zo#QC4z*OX=_+DB;Rm(Qua@vmr!q@MuCws_1lLzZ&;(*M;kY$n{HqtLrwedFh&b>EF zUW;V&PcX4$x8T()U>e;F?iyiQo%wwx@twzSqTkGdnRNEu>xc8k^emZ*w~J|3x8%DZ z;8*0?r*Af{2s9Ssu?0izE6l0@&A|!F*Q70GCS9bhmZ@e?WRfXzyQdo|N`4!w=v7I~ zO`rgL9o8t4c%(-~Y>F=l#%Gz1L*W4dB2OMa#$=ep$Euz@dHn3j6Q8Yr!a?90!B1F4 zd(P6MRye^3yYe+nw-&aNj5_J;45MJWtRG(g>5D&q`NuCgV)D(e{`?iv<^>NAnb~># zh#CHGzWF8!qXzlRT1&4(gumXP zc1BP%>Y*}1Jq_^zG{%VJ-T+PH(jm_Vfux|CqTJ34sdB8_H4U^VvaTG+xRHuy!Q**0 z1O_NqGl&=?KM>jNOQ*MN|DU{XdI*5K;UE=tnY)sXwDS55AA(tITR#ER=2S)$jxJMk zMUbyt$Q_;bC17G5QA^7FWvjz9*hga398P93vplIti0Mqnu)W=XKOh07jlPK{mXQr0 zD!9oioDZk%F27diLBwO_S-+DwX>*q|!Sl-O^<)#++$f8ub78xGF7d)eEq$J*rvFDS z+0I;Jsy{Nn4J&O9`X)v?%?4=GPZG7AK5;IAyokvFt0-cpN=_=fXf!3s${&(!0l8}v zt_KCCqOq;>&YV;2bw>g%+E9H|gG}OC6}EcTo8MCH%H9I1f~%q`S%hd7bAhXO^*U(OaKW^Z_wGHgjdRd- z`!}C`mK*ML>n7g~80B1081u?K|8*1t(pUP_4mvW$jT7`J2};T23Dozv!F~pJ6AfoX zeNwlSxtuedE+U`(%fHU$@$CPk(2?hmPUugbq12T*mhsUvLAh$yONEwl+L!ZC=#K5d zuSu@d0yuPB*Wl}W-V8-*mP0iWj-*V{jwuP1ihwXocPF|t0w{BRd#kt4Nj@2);Y;`w zNeu^o(k58l>XddzP289zf)v$Kn)nu)$eB@VsHimwL54U-F&(u5zE#+jg;1Szgg9^r z!j}}QT2(74@9`_aI7}Z>cfn)nnkA^vTXf&Zi4g~ilckOiAi|lJUjNiA1L$h;D!Y{?*Toi4-0Pdj+m`{3Ggp-fkUZ(3 zi2*I6B11Te|85}aYshdnn-NnKIS-i&_P*L&hIO|jeU{@a@2dLF5*U_y$pp(!wz;FV z1u9@w;J2ew$0wcSo{+Z*u!|=dIrX7QEH|@i>i1zperxo}YhgJm| z%fY2mSs}tV40oQty2X( z44haK9N_VKECl67g}{n70~I?(QYHs_V5NX$_8BN(^qsv*FW&XFF zER=x`R1ZB#E9lG6Y}qn8acdY|MI4$>+8_B=zBr*8J2wjP%#5R5RBd&#h(M`YaPkky zq&THs1+at}XnPfY-Y1}&-dtD)(8s^wP}+Kb_+r(HEMr2s*j(>ch#p1M1i;e|AvD{| zB#5g5?3sn_aT!HR+Ny#5w>-3q^KjjqW@D==^fCreNz8_G1#>bmgU`I}bfA?BuMA3; zaY*1d-T*J*np}_QQiRQzcjhqyo_yH0ohoRnVvOj){5&$nHv^uc&YLozKEA)`2W+49xG^;4B~}1;k_h}^6stbGRgaD%ZopSR z^YHtfS*T#8!C7X6Dez}6{o-k_cksc8J_79AH0*tSjmHR_1o72kFcWN5OB5Mav!4!x zU41M-kzXlb&RwgNI(bjAJRwYw=MyjqAFJ|(NKD2-8aC^Q!uLzSVkm_I03ZmX9OSVF z%$u0o0`D*i){)U8&CDFZEfN3&hbT)>tNkM<`Vs-Dw|dFKi9eUZAAa}8OKB#+f(iTg z07mpAS`k=l!qn|SEqX|~r9!)+eEYEX=kx#b{~|NHzv!oEE4qgi6sA3WTtyII(*~e{ zHBl@bZje5{)|jg6&Bc-$L8`WQVvq}B2YN-}0ljcNk)B6mP=In={ILrTB6=ust0Oi2 z8RfEtqv)3OlYdo`HwSRLd=tfyHA;UAvTku^B~c6haq2<^k1J(5 zlVeg~@Vd3>0p-<+xkLlE4jUgurHaWMYjcG*X=*hLuMOCXrJUlTl#oKg8lsjB0SYmq zP>yhrUS+P>&Jh64gL)9#qIEb5aU%sW`Vb{}1pjR6z)CA`!I8-K3g)yDb;Jj|jG!7{j_D)@g%dug}9x_r&S)Is5L}2-EQ-*8=-Xwn^l!mmMaP z>fC*uMpp+44q`;(Uf78kL-gAekPuZ}C|IuS+^_kXZ zDe=jphwkC03E`CwPad<1=B>v*bK{VF+?TT$Zu5Wg_|a1jRs|k|KPv}VBeVD%PaXpE zNw3&pLBL0HSUq_7@XA+KL!EnsnI)HUY7p5w4xPDfAOPYC|bF`0J;Um1Dw zfBbJ(rvHS*eCmi;qu7G(Mbumd@R)5M;8~h&usK7Xd=Bt`*PTWO5ve#n|J!v z<3M=QQ4oJw;LD|N10eC$tm2I3+`!UBMGB=3ws#eVSSbks#o0_FJTeAqofh2!ChzZID+PBP)Q-P<0Vm{fqMOH(iPE%>L8VKWcFS!~InXF>&ERF@%TM^l>h|0aMz5PL`ivo=6sOK` zZ*8LD8X8i?^iV40X$**+;z`hyw|+~^5^IP`rFmAYkJjAbk>u4JJB811f_IzJ{<(MQ z&aZy;>yJPBbQl}Mrvn6=iO3IcwK>W0FKn+_2P@)|lQtzgTMaIWlZThJgT>Gb9TTD5 zp2!TwiPNrd{?$MIj~sK0GnKlLqz{bkiBr*B4&fljB^?XSyGKRMz;elNq-d^0TYk_> zbsT<6TsmeKM$ya8kpiP{Qc@vk^rjjyf6i1%_?(4)6iCb)S;S!962S6ua(Tl_RWm@S zlMbJ?1@u)JJ7hM4C8}zbEdSU-dF8r5Qd|fy9$Kb%hZBm=pYDG8h={^%liFkb2=K`1 zhb}`HP!$xHrG$v6$~S`ERDa4r;*OXFjt)_8mL%m7)P$vGj8AzJm)j-bx3z0rmlo9` zU6L?9f3|=XjfRhw%Y}CcpT7V824MaEw}1F-j(_>>r*mA$aN&|=fDiug`Gv$^_HxV7oDJ_{X&qfA)O!68w*E9TiHd$LxP~^ZKi{1Rf_YO`yn1?Po5G z@-H~VRQy2S(hCxpv{3id{OwTp$S|eJa!$qgW&jft9e3$#o}CU*r{j)Bn|RbiW$Dda zhF?*%Y>i&TF1{>h{m|f;~RSW+~SZ zB3m^87yjUKe5d3jY|~p6xeS!5!#S!MDlqI=q-Hqw|~#ET^)XT>(hnf7Hz998o8zGQ*17EGW7|8D1lDywl50mr7N=m zcs49>&x0X1k3&*quY)y!d-v~QI(v!{XHjiyPJjF9x%BOVhqgK93c$?PK{%Jm#iqWd z-3DHrL*;yWky&S(X4&qXavZ7<4B0F<08S7PxuJv4$0qCDQ)2ba_bVXH-?M`|r!=@W zQa1vp0mhFJx!Gwv~pa6=~D*F!j?q#Le@dUHb>ZDdg^Ps-b#0fs>jOSPLiV z_^@neY6Jq9=&1<0FwTXp5X_VlqZKL+Ug01Mo3kfkbv8PJ(BTDXNZHCl6^MjY^GD>t zeTpsZ=OAa7)M+F8DsEJG1quvlnUY4mEUW{OZtxEW5b$vUM~P0u%e|15my=E3GP1?9 z*&PHbcc45jTd|>}iF%%8fPeh2|M~C#?r&y^?W*%Oc<%$eOn1&)ztg_>gPx70KWgt8 zE6^vxpA=XHNhMsWK`9nvC^mT0Pu-{WWvFjgR`-~ediA|pN;Uu}Ab!yzT9BcRJ{DtU zrnS=qr@3$6LJfGwr9ERb-N|e0oyP*`wgLedOJD-bYr;>p0@1iX1;te*$VaVcz9O*u zhOdByw1Cbl!FT3DnEM`GZL_%A7wh?DjKY2dU6t)&8xsJF0s5K+r_4bO@IV8rTgVPL zz*29oU#A^o_W#*a9@lkFS<&k^{j>lE&Rz27Z^2T|!W=3DL)n>5vphiU9t=x(PJ)Fo zGpMbj@;YjGi3?+;fJY)UAa4?Z+vp6E)m?xVmBWL)gzD}Jf|^OX?!*-)c|ZzS1%*tu zf(sc2JU4DYnZkg^Ml7@l<_BSb!D$U*DJOEYAW!l>TFvghqkq!hbf)V4)|Y?y{Lg>< zg6m0>STEL5A3=UXgKWTQHIK(|=HYkW0^}8+ofOxXH(p)4_4@jI3`DqOVfDssd{d4| z&R|>xSW{aIL)85-QyqmFkeO%m!=?GRL2Sp3<+eF+kRfn-_LvnUR}xe~1)Ny6sedI6 z9dDiefBVOicP{->k&`o5uNig@Ky;hPZ$AF;qtn%)x?EAx&j+anbDtmL2F@N@pUo0X z-XUlkFP_qNP71DIB9oK2x>rDBRoYmp8EZujo?pNA3GvaEQ4gzHs;d#mb8iO+L{!y+ zhz`6|2dU#(so1buE!op%q*MRz9OE{kqX`rr%#|)DOkS2%V%0z9`G|TV&b}Q z4uWXTJoEt427jxTgeJAKR4o?9)~|@gFv&2<@!U@Vp^SP1)LC)4+NytCf=jDVJpN?X z7T}&fmkz60De-;XPYcn2Ocw&_f5*FazI((MbiMKVH5>godb*gLRTCatFX*Zff{)r*RZkNeyjY7}85_R2|G-PohQ4Dgm1%M`M4i2G0 zO-HwSsMnF4jI|F?XVZIXtV6k)?Vt)mcG?$}nF^F*pd0+?>{@UaK7j`=x52_!FQ-?x4Aw*3sg2!50E<6Peb)F)iV}_gDt_ z=%bHe_XOKFxws*c!vH5Rh~?8nI^92Y5rKUKK0ZwIPQ5_ACQA)wqT6ui;zmg-Cf%Gz z;lkAaSlGG`qy@|bP^E!CDtd@Q-c)Vvt({EAO8i-Wa>tmXMKv?^PFGp;@jg(2UA zGW94NV2h@(58=VhlSmKqjcUeQz>tOH9}K}}1xIq~Sj-V^I~X1VRDKn1_L#`JKED)UWDkfebIGU@`Y5#GpEONCJ5YfZ z*dpizmt!){9y(pZ+=P0FT5)5hsW#nd41TVA4V2S%j0)~j2>elM_;Y>KMX%owH#mXi z^x_u&64Gf(i(~vVp6WHWL)O2ZNc6ncb^~ zv*jEBlgpfY32qn$Dp`$ikfW-ZZc`1IV;bK#^L(~0CMPqpFKAltszO(=E~PITrzNiH zsgattkd${(%TE=}pqAO<_%wiP0E`n(9TPfoW1DePNFq>;@`k^BjS;s}I?0ZRwwf;f zURVbB{@d>^=3vLRLlCAfg1(-TL#F1j>ahh$aPQ-XmI1HMix-?fQ zYY|FqpNG}<>@6jkoB?!=bk6Rcp#=b997i_l7lOT5n@r*75Sjzd_(PO-j=B#?-oLPcwIbq(jZxuOTQ6IfP4x>MO`$ zpkg}M5h`_TI2wk`SavSK)TcurBVhE7bru)ER89>+Nola1Z-y4>A2EqJ9Gk^_clV16 zwQ~qm7KjXOFg{HpyHKJWUMTB2e`XnEDF%Wy@W67~(FOCP<`5co<@!(m^?#6}YuA4L z>rd`IIK6zh(#CE_Gz1l3#~~~5&j7fjtQH_89qlz1d**u>VogBLX!z)Y$SzgQB(=*I z_R)(Po4)=YjaQTYpid`X%~5N}$o`t!r>K=v)j)w>zHiNo4R}d7y;vkCFF9Chx^)Bf zVZy_y_UCM(@6m)f)?)-df$O#v-mw2(JN@C7dIpvvj=OE@O!H(t0PO80vtZ_qAvfL6 zf%MEgm{Hcjo(>p;oh5RM> z#Kv@nb5BTAPo)UWRwb?En}&dhYr@Novtk3z9iSL#$bbWqT{R)7AX_LpE@eyl@n4uQ znOGtF@!W6Cv9AG4F7`^Z25@;9KwUZnCFYU1{Mm1n4Q@>Wqcmp!_nUh!e+ifyl(dx} zM>wLbDw9mNY}&A`0R*i2tO}#iHZl*mT|^bK&8oC#fMZ`Mg74Bz`iRnlJEGto-mpN$ z1|k5E9A|HvgY){$O1VM=8umQbtURJfX%ftX2)w!&*eoj|0~%QN4pudTq1U6aKt28R zLvLTZ#u~uP*P|-#toI!|?!m_rGe%#FPolxIv-d3rG)wI(``1_K>GkDun2WY(ll**Q z*LU{MJ7h@AC7F+@?dC3A$*gm&s2P`nDE`epqMSmu3<)96tQ_P;j;3ior|KkvkyZLChF&$7Tz}H(PA7c&%rzkD#Uty53i8 zU*a%N^Ii%fSx~eV58Nmf(!yaZvb}4xO(WjH+URdr)jBE4?I4MH=Ht6>ic@00Mc-qO z6G4yaZrXcYJ~dFzdQdA{C9-R@0m=8Fa z!oO61{P8Cre)ys4yymeSp3Wt|b$v~ckCpAk#Y@msDuT5sci6k+*e0b9Z8{4>Y1m3N z%|+*ffB1)g`JWj^O*YQswD!x(5gz(;pnfTUFli7z#!j4sHBKi6V;nj;7-Zms*i=>d z*_J!HU-sb{06?xpH=*a__zan0hx)kMUrVVzXdUV_?!me&A=i=xXY)|0%!%uAZ`3_5 zCZOB^m*h2ASO@|F6oEvgBou$kCBw&kAW_jWVfr^J3Y4Nn&@)GU5gt0BKjIc8(FDHx z80?}n`QWf-{*-1@ET9OwW1?8#WloHf-(tmN`A00+WkpD{f|4cYK% z%rB13OAPMcyJAGc2E-wpGuZ9%cZvMn2iyA7V%{or!3N&~N=c4*%Jk8fUwrb_pE%x9 z-5zU;Jdbtgm9k0sPb_FN_~6@ZO4~+2@^Dx z0+HRE;styemVm4nr@u!8VjY9-;5VwQv(b8?r~+YYh9M(bIAL2eQ8dH_VauV-mnG*z z9FIamtXjZLnCz64iC(P3yxTqQR4k_H5S7M8LJX;9(pd3^2K-8(0Z z8t6iBN2)Qp5k~-NzoitOrG!L1ums-cxv=M$cLA#&h+T;c2j8jss} zD5_Hg>obg)%@c5j0T!?Rc|5r}JPA@0c>`R$^q6n0AQglU00WLefWi*CKE;VS&eJz) zjR3U0=&&Y`ovNAW-om9uMUgq#A8|E zKJewDr*YkKj`D!8sv@ya>j+(TSaX6<2y}}#gPE0_`+XfMhq97^u)Cd97btVu98J zCUa8q4xD0^0|JMS1_jrO3mo&dDks$qMh)d<8p8lBFZ zpha{ct7ajAYHy4}40|Z5S=(Iz`>nq)az++MFg}%j$TANB?ANRTJh**_2FJ^E3|4S15QcW_HOY zJD93P=~4DxYOpNgm2kN-V$(}^gXA@THb|mNeJpA2mBL*s%N$tk5VX}Fmfamp7^*q- zig5t|R7$L#+ac;h5s^p$N_5hm0%)C!PyK9|4&|e_Zra$6yS@XB4#oulJ-fbCC+n(N zo3HQUB&z|pK?5X`s^u70rUy@`d{#7 zp4V@%JnZZL@n0U}?)R&_fqcf>_Mbha6B#Lkm9!Bux69)Bx(v;JADD?y!~~u$J4qgR zDL_b(Lo!BQz=Bl5Ut-EN>23-MEt6eg)HhOfIo%1dRD|mo8$4i(7ZT$Ej(cnvIc2N= zUE<29A%(b;%LXj}=ovAcK*g_n|NcE+|LQzoS`?E$b)+GK$BkNu1haE7FgQCPe6vYjUmWfR~)OB;ftO zB=vlf$RDSH7j1qH7qwJ<#xYj_O+d20`Q{`z-#fv5DN=(z(Y>tc>mq;y7-o&;chf=9 z&?VP34l)Q1n#mM$QP*U$gmq#6<(10=S&2>B-45)k3Ye2NXlw{@H3-M>;bzSoJI0YQ zqXzbwSni070b|Og!Ssskr4~l#^Ut-pHx`}GaRGjGi^?3_KhXFEar4)0p^7wgS77N$ z9ga#qfd`J=lvaO4PEtgTTORnSZ)E|TIy7qClpX<<)w~`Ah2q)qL51un?XokZ-5jW^ zk=YC=E5G>%O&SP&La)m9p1mVI$W?t2j%%-deETuaFI8vMR2CNG)Dn^TD*|;Nmu8%~ zUpfh5Hqj?)8H;M&mVikmVM zBmd2#Z@+o;$ma3k!`EN?wO|(Kh+{_V3O8qq5U*W*!{=(OQ`~o%sMZRAtyFdiWE6Lv z3}#6?*Z)QDKj~~c`-lJj--$pC2a(G|dZPFLY`_2>66g`bhqKsCGk4uCT%D&bB>^ug zqYG~4=`hKjepuA@b7b6wx=u6bM^c7Y z6sXDADytw-a<6=!-5dYvd^Jrx-Y(*VZ|UAVC#?&(hImf2QNKy#3Q*2?ZSpltWAvQO`1W^gB` zl%}rJd#B3%Cf{~v)NVr~z~|tsa#TNgvgtro$;gI?v5zv&xDmHNYjni4B8}vMpOFEk z{G2(=IM*o7f=d;uAftC`NQX&^l2A;F&R>jy-ViQ@m348Vx`H$N)v=haJV; z+UHyBc{J0P*YijXOrX%u45NKr0dnUIMfkrRe9k}&)F6;i2m^7Mj4?^sbPw@FPAh^+ z{T9CLC0R@sukm4HB^^X~DMUn1tI^LOE$rpTmv5KKast`N@1_CsxHxgM1pphl9SwWL z`S|a=-ipQ!I&emX2d;e(W+06Pf9Do%rPnb;DLx5+tA~T-0mmh%BVw;L0RfWzh;(+Q z&kN)H0T@JHy}`E)?%+(hd++q*KmW%+9VJ{6wOO&Sqj1g!8L+87T=XT&+B^bK z;40j;mB7yRzO`wOKER+;(JqYESMwqxCIFdXsWea)v-!EyD$Z{ubETOgItzD5jXFt#rQJ_W-snV!5VCjRy7H$EcpkTdPOE~1}11yBhFD}4ISMI zVEqMquS6t-)OwEeU04pY3E?w2tirN203-dIcZG!kSAY2Te}}_&KQswi1@~}Zt8H(E zx(M#cBtZiRM+i!OomX``qC ztj2fmM-+SNOG087t(jx>xwiLAf+K;3RWTErppmb)1+YzieGq>3^}DIxPrC3%{@1*g zhu7@Cz|H>*|GjSgAAk7%hbKQidG^!O7tf#j!Cp7{zr;E6hRy#z7VzrvkNW+o!I1M4mTmUU2{N>z7Z?Tg3BM5cSo(RdjU4+?O4%6ooz*-zrv)Y{SjNG0-G zlz#Tx3v{$}atQKP@1YhtIfp{KXFyuBZ4dB7MzIsyb`k@vZHg<-gZVnoB~|~Q42PY+ zww8je3r!NARdbhfS}EL;ppF`9L~I4xav^}^Hto&}OT}(kvb10;19*Bfw{5NtYV01x zrpT~R4Nu&;kj%NV#Xb0mXlb5|3T&l`Tj|DS?oNQQqzJeW5i=<>T?%VnfK;RA3B^VC zl`r%DoBON#hgUPx_DKPg0RtLDVj)r202V4F@i&Y|9>+#k^QGmZkzw?-t{FMieItXS zW#H}#Fjc$tBOPkdIo<=RSLV zoPlu*H^H9;RQenqFT=es!&DgrnJSqSsb>ogk%eWdC$)`r9k9wRSYep6V}ti^W-P^R z^2|+vYX@Ndwd=nze3yQzIrmQ=2opXr5~ga($Qr}824F>8S_B@^vtPY+?TTGPc7)tG zM((p8jmqFHp;|rR`sbL-15Nww3lX*|9@4TBb4gW)^eyTy|8u}5xtB6Xga~tnA`UYe zIGZ0v7f2?X1Afz`()L=)PT7_B~^fX8TK3_ zPCM&NN#Ymw?}rFeJjZ?oyfyjJ9D`7G{qq?i1Culgh?BE;i7dp8#81)?*u7Au72=F) z|AixxRYZ1-!VHMBXPOv?X~3h9(^x9A`&MK4sUx8-MFHn!i;wAFJZ?Sym+Q};%yG7o zFTL7b|8#V#%z+3KXd_<;>zHKdno^J`*S4^)1Q6NMe%D-7Sja6pIolCxu z!UBM=lk`?1QL%}P@{V}X0;${kxwHaxCRe2p-EpOht)>NWU8nj$Urowd29Q5TWrD@) z8^S`pKu^{0Hu$8=NXpTpq)PI2gooG#tYEH8#?thvt~5 z!$Y$OM;rzq_M;%p8#P8$3Nx;G&QQOoC2yJMa{4mklSs_la$v-ktyrAi;$2SbiBq)d zx`JVwUDOtYGjcjeYpQ@DR1_cNbw%Jdtq~d}bR$-W{vj+Z)B6}8BV>y_;eS}86zeQ? znqZbRRU0A_NEk9Dn}5xb+>+Brf$IfXJq)Ehk&q5pymFKczV5mMj%Q;i@Y#gJRm}19 z?zKq1dhr_nBd-GjDQzTN!DjP{Rd-2xb_SQ*l}m#(aNOnvkw)(rv4_P_A9Q|KKk9x$iUgxA6IR zsh_kjk$&~nLnhrY9uCu2DL2H0zz~_P4&~1c5OZ7c<}X%mR5zNl%{-TmrJhQRHslT- z+t4%~(JaW@tuM2)Jf|J2iCBsM;yzSSnNq)RDi%8k7W3xJ`gk){1Av~eNGFu@2+ z?aBu?5Nv633K$uo0!(Kq8!2V=f|KcVi+DEhQ{b_XQc28E5X+OU>gwH4p_K)eH%6&d z6KonHCB&H$@Ju|r((#5Ny-a%b$Ad9nx zEqnJ)eY*nfN&P^Ejm7iI>0NcLzN$e0j*>zbj`E`(w$wg+9izaQ@;1yC5^Sn4-#|8K z;uai$H|Pu-{FAcadYujf9!(Y))b?xitU_2Hb?G!X!R5`^!l)?z6=TkrKT7XARLDv8fqskjLYp1O4VLc);t4TsG1((m*G>fokdS z)~4Z3K`1BpAKZWN@c#XW_wlLVR6|(sWDFxa^wA1in=KNNjq#MvhHN8e2bCP_eU~tR zCV}WsPu(vxL#JQ0B^7Q0SmjE9Qc)C71e#9{1k@OPd-!pD)q`=CB{0D#gZ`QsJXp@@ z3j7MUxxRAc?N85t`p3r{B(Qn>>ytCjMNO_6ji!ArB_$P6V?3;9CDmY6SY*R3h__5+ zY~*m4BDO!mSe~@sMvb;?+0r{r4Aoi-q^M1%7$X~^!c_1kmS%&fz-S&kB^eozWrQGD ztkVDypyk1df@(!pl!)-n8BtS*^%SH?2lQOc`Q)pk>CN$t%i>I5FH8Qb()Nb{(3}CJ z3fUdUAd)nYS6Bmhc>C^yTX#-T^*u!3cV9pF`c#Rd-}{|xNLQdt8^}8e!!$%Hc)Uok zRD(2@l+jH_={A5J(jk&KG~*;8o)NCLArFg9jOi!WyKt)psijwLOH@5NXSZ$pwj;WR zFmgqfCaemGvbQ)yS5{2>6MR&oA>;%H^Pvya-iN`dZuG)?0NA*=2$EDgps86>tHgRH zta`n)MtbV16ou&Gv~re0JYzv^>Z{0z^5W^Jx@h?C&mc_JGMYrWfGnt?WYw62Ioxa|g4iFA?_?GvFvu)BAVW8vX1ON`ZQC9)#I=2_&Mqu3vbWA~gLvGpt zYvhjIo~LvmwN@G}p+88;f~uwnnK^S)2)xh7-ImUi*`J8F#a8Q*FkObO`;>-rmUdlbwPGjWbP3F~Y%FuQO`B?w-iXkMWOIKU1*4~j z401&6P+=MOsZ)*pC`VAD(y@WB5;=mMqKAb{O~xCBqWrnfM`mnT5kd|Bbvs3h&f(7@q0WIP?Ifs{3|8L*As_KB13DD2v60c zE#}B;OP?*D-6j$3)?(W_aWUIQ$Fj-c36_&Z8hHckk%f*e&EL3>JY-)mBUH`Iai2|d zaH32&hUbEwrG;^6Wk!@v@U3QY0H(f4me=~ZZ%Ku>^($4~wU`z$LjcNG^vr3aZ6%77 z_;;Mi=!GzX(|KYSGMz~{%D$m<0B}CVE)|=#Rjxrw3PeV7NCX?Jq!v^Bv5M*hH@GSg zS!9|Ll#zvr!!!1LFc@v5hnYe;z_11Y=hu7vg3akVBARE_5UkYpQiqO_6pcg#0sv1~ zf?!C-gsaK;_=W6lM2_mhah-7b?*~cj-8sH{F%Cr+6OU8)j18B3mzXp2l{fS~FIhx> z$3ic3$)tkB&;RgE^Gzd_2*_dl=Deh{5qqk5FTaP0<^%>8FQ2}8_3UNvfCZ2gTHUm! zG-%FO9z6K!!TpEw3#L_k!{-_+6<{2OBTB$9m2+$`cE+Znc3bW7H1^o_4@E%!hyV8f z5cy0vO9Q_gRqEnQcV1o^dml%W3St6cXLJ{$^`Xp<2!a9 zre!w(j9D73$l9bwW>$@4kRyS_Z#>vod0g<>aiEUG;&xBc>3hh43{SU0?~m#ojPaa;%^(56H{!hFn-`MJ0+L0T1hjvVs)P~fTFJ8P1o91IxLgsN+q$o; zRj~4FNWAvsd4LeBmjD-)pCg@gg2Y_New=4mW+*$YwRtry_cP(n8G5e#=DV+d`tJ;>4A*COctnYPSpqK=)t`c&oP}0xTW{iIqyKZ75sk zoMco6)0kbj=qTr#hqw=wT7@E`1`q^dyD@=W0%B74GbXj{E8*|{%YWwB?@r|Ija#ux z!l#3fy>3XlhVM(^vE3MnA*3o`+-!|J$xXM~YUMeAT(arpT;drbKYgK{$9G52vcLmK zj-~NVpH>V|O`17#SH^njd5E>a*wnjB;OV1U#*Qt#ci;v&l*MB!dvgmmav~Kf?Qd#X zjhz9fvD3SX4;KXTm{{HLt@bMCQ|44#ZbgJ7P>PA4Z3*_u7ATb2oaLw`Ijf;10azFc zdEmMv)(YepwA6kX$RYw?h3#uqnTz+71D^`uiC|v9#RgcHGr`!3HDheP zyaPEcD@jq}aN7?LM)cw%7BUsK(nXfz=m!m79mSitF&%jS`$h}>;q2K2ks2jqWjo1; z@-&0O7k_?&_kT~^BacoW{O-}W#|O8-knWXrG!>y%y%eoD6owaU+=QWSif_$b*l=?U z3-QdNx8!?=1cNPq!crS&rnGL`w;0GjDXPC#NSmNO!+KgDJS)L#)TP6^!K5XM6h}T)(*OgVest8)(lkU}?sj9?;~ z=#mBuaT|$?K?<7KP2wJT*Zrs6sQBTjiRL=&14$EwDVyS>OuZ z(55(um=cQ$dtHOP0EUWS1#$7SQNUnr4ta5Ws1i1iaGY$R9YFDn>k_ie4ut{Io_)*? zG)9Yr)kaAP6HVM00E9wW^{$H4zJ@?zQ-4o4nnd-Fq@G;aw@QAnL~a{bXz}#Rugp%N z-@fZDJ>A>=tiIl?)1lcgmzls`vgau?3A`FI$wiJhg2}{0d z#bB=}k}bvIM<5HCP$EueVb5+Cf8eu9cLw^64*8=f4 zsf18l>{)fD1S*Q6_SYyegFnid$mqh{UT4#{K)#8ZdrLo#ZyEo(-wpDoprnuJ7ra(N zoXvSavvNnt+!>It&5X5}NmMQyB~ssr#kAy=X@dI-KrIsrhuoL>o0r*UC^Fo(r5)V` zQ`>9^EgcY;l9`|q2_44nq|h*Ru+|zg0m7wnpfDI}i?;HW?_x6t9;d10*PbP8`b1jl z&}l-=gWqNns5C@Rh2oXsEv}m?9)lkAj=7LIT7h-8#G)t!MOui_BsU3yWuRp~VZ%1l z^5b#2No2T}JVqk0JS8YIwHq)ppdqj^T}nYtLDixyoB2)G4emKLt_v9a5C85G-MkQz!jk9Tt(zrUy!<~^%KfAh`ZiI%x_yt{u=Jb#+) zXLB&|SUlKT|N*O-#N}&7q@ADks2n2X$ymk%8Gpd>uB4q*5xF7}x_sIwpWim$O z<3-oMQu|ATI)(MnTG-1Gm!N3Xl8{t;MaHmkIxPAuTB#b+Fhow82Vyo30LA7n(@3@vVGlZ3EyRSGK^g6} zEjTuzL9kzmU07Us$<&l(0agddK;7E*5v%;se8CN^nVe}PU@}!eB1B3nY%rt25@xjn zxQ0U(%sBvfF6?{%1G10**S-x{k#a$R8Ux%^4dv>A86x5+TvIG6d7%j}gUwpW zB_zisOq)Z%Q~@vg_h+gpGKp2W!C6ga@bJEfT4Bb5R)QL%*MrP2o^i!+@FsQuJ3pq&25GkkPQ8c5nad*+D()+tPzXMSG_L=&~CUPmq<|;rD3=m zjNDtz(E>6y2&A;L%kql9n3rNa)F*O$rvCl%5C7pmPW+F*{XGY7+c<<%wjATm^nD%p z6BGG$$8PqRyfQdE8FgS#kG@fZwPk{cA>OMX!rbC1Jif1QxPzD3g$rm2Sd5Pe5W)>|BUU-0_I21W-K=gw4Wfq87ymNw z{FzrC`9?YQJkBa47YUS)5|QED^{a6+NWq~(yNCOX3w=ERixDCSSk&=)kMUxZ^~bwh zfN-(HcR|bL0WNRccKHhJwW5S4a()|JF6HikiD8`of(IXH2@nQ$3|$x=@dj`n2=I+P zZrW$jCO0%oHSFBi^8qsU4v+(eZGJZq2vkp^qb)brI1iyFp8mOepC@aUwZd}Q>TdHc zB)louNf-|vj)36_ON>-^1u8=(%~tpXGzVtSo;3)mjkw*z{Tra>E2wA3c{~-z@$TgtpA4XjwArHD+Xe#g--g97ma@3k2ZCBt!20>&ZknvO zH7ig-bHIMk##Lh-y9yT(DX1mW89^jho4CgS8oSm?>ZMz=iLI?dhm$lNRgXf!3`r2U2v0|ZCV>SNQg<>ZP<;e_a4>ZME3FiiT z5Q`28*;BV6;+F7l{_Wp7I5-MmYfnA2K&5h&THsMNgisVbQzpxR^L8R`IVC zFiM|-gd$wLW&2)jJi$bU;yS`;s8o&9)EPn#C&(p(63}pORS{EUhqny!J?@iW>LPh@ zafSh%t4;QsC2J~3(eZkIg`rG5=CpvC70m1|vrZGyh^$skebS2_>K+m$i>y9)BxwTS z?%5Ba(aTSIXTcm@ULF;?$7aiDeKN43wgnD)xHWTBZ>_+3juw&qSP#z`BGb zxJCDv^Hjpgf}Y5A*y*V0Rf?3bioPW^FHqCjTB6n6e|T_B?ymoeak~1OZ@${%XMR_E zIg{4Kh8h>U_kViqrbag%|Ib=QdRqIln#NjxA=Xg&_iZ20;|a4g!c-?#oWg$MCT>&M530*Syl{?;gh5 z?3YA7^AG@I&!Yjziq@#D@1XG52M)1P7m9cWF(_vs!K{ku-&g~(h*(|B;8hv69k6^g z8WQkKuf$1X&;lp}U<1s|I;q#~k@coo4GjgGp{_jSdeyn zF>z11bo+lat$7eEm+RX!2afDze<70hpFA|ROLLxE61erJfBa(57vSNn-H*}F!`Z&m zZk<9%hzI4opC%O(MI1#+0icsR3t$b~5;h8rk76KLH)lEI)g*+I8RwcC zivSsPFi4wSFeTQND=|BhTE-s>NFN~U=P*-t+g}0C=nBkj-F`4llBAM=dD2_tv}Yn1 zELkJkD-fTY+Xf(z2CSBpL6~1Uo&G5g8WnKZk5oBefHpIsZMvdO1f)7VZ|key3R!ss zp1WZJVGd?c+`SlB1Ne7;`?t)L&K-9A_6rQt1Z|8?;w>yP_#X4V42-b@CQsyX?7(Lk zV85Km(Hg+c<NJkd%&pw8ruE*Ky-fFZoBl zj)`ZiAf(8&mS)M$5Ld7|RM8xBE_d}FaTq^u!KNhy5u!3tT|ANG34FxKL@gM<^3X=m z3}+TO=#g!$tGE>d6ObDHINz|qA~X39Yj8&u8_PQJ;PtjBN&7@Z)7othZEbN8&1p8u z%#7ID9g)!|e!vUNN-Q2>&{7JiZXFL(2;?w`ssp&;=3rwx$Ic31e&+o@lg)Rxu(SMx zw*fIp*ZaTT2tzXiM`(rrw7B)StF7Cue>Z&+L7kzQd#MeC3Oo)pF8PHWQ=N!F=SDKN zQztntd){pm0~%p#FnNXjwQFoqcVEJcWtB*k01#ZLfW5{zM)K^d6zngz={F#%4N?y^ zIX=4M@&b%Vln9h2gTNSVjIQGTzRH>b%^WW$JK1r*^!l0^Ci~?Z450l2FRp=2_-uIY z$HxwQ%MI|+f_HC_0-U*l9~?OHicXW}a~o_~UuS;7lcY)#N^jlM3xlH{glkryNzuND zkcS91j?ID3t*asQng(jcI$}?3^2ElgmwZpyXE#}8P;=RD;n#_AwXAnq!#SVn$1VHD zLn}V|YnMdJSDG^EIxG7=<;uZ8ZKh$<0Bbwyw(1R4@OxZHka>@{7rEIP)x_V_vTuE(3JNOj z(w+mH#d>Sn-ZMp=5ag(#ZPxVaKsq!fx!`6WNN-thJOyM>_7oltT4vdm;h{Bg*9#Rc+=^<3qdWU30Hrz8)M^2E9(9fHBEt^JI2(}g*#xgx2bx4w1q`1(ea>=)*!C7$aF_QI9-eb;&%A1cJv&S@79>+g zLVY(jQ;oH4n-z`$BzvpSv=C|*05LdqB7k;0h9d4Cp5>9v{i#jB0!C{ZFe?;bd={{> z6Cfw6wbC`vnT~1Rk+MoCx0x9OQ2CLyZ%%*@4GI`b;2CBzb4jA+j?o~F3|&OV8C{B2r;Euwx2VP*@4KR!Uh=l!^H7%R$@u4f(K}42Lz89zg>7_A+uDv$W z1`E_nf;Zc#-c6r*=O$~k=>jyptYDb?j zwdqmZ46VrO{TCp2(=C-zR=O3&&)L7VB&}mvP|fAiXj+ajP}W>A}-3c5s7yV37NAfZ5WM$aW4tV%Ql|Sq((`J!K(YpD_))Y*|4YsjZcK3hns3)pyjN+ zj0BNBCM8Q#qBNHg9c10BK?B^86LDSD+M*aJNg0=@77H+vg%KKCr2ygWj1A;fL91q6 zaaF2CgR_!ag9B6cBlb|F3OFw_NXbP$467k;Z1b0Ye+Zo?-nD6$hq=x9e7<$fPsnZ= z<|53)enH(-Z0XwW@h5VzUby##2kQhbwZ5kR^9cYf21hc9Sm~5X$u=;sKAN!0cq*^A zwYS=*c#`BzZkwY_14IdNh_WmJB5FX6j~`vpT@R*sM?0Ewb$0=@Uqb2Km1J}b($oNW zl>$TRT*Q?CCPDX3*UpKHuK(&6jZdusc#jaO6FolPJ@vcUDa*mckpg}^WIW0>#Df;2 z4ox?j@1id>+d$y9M-vmsmmGr)DI)FWY}84loAQfR1icPpnEMQjQ9W2Y}Ssxu!n$Hqmc~-vrB!!xQtj% z399Z^3d3~kgC7ubSTfoKG0u9V1)N14*I`|p8cReG4PejK#C=qSd9lyLYpG2nV@|)^ zSqu>x5YWrcV*lpuca%_1?9jpOVs_$$c$djf)j=h6fay^d4PU%XPlF3I!vM0PMg?}{ z4YI+E5CkQn%@nR@!y?jH2Q}5Mrd171>s&G8k8ZD*U*Qut_Wtu=`ecQHMf{>3ky!(H zc+c?3dw2TtTU`GflV?A(DQ%CRi=16lK6ev*m-3ytag^qG@0Y^TBgnyj+i}9a%OTc#2s5C4Wk2S(lbLcQRM4v0QKs|QIGQuyzrUEp8 zrlYnKEhF6UuW%F{6Fk$s725&Y!=38GGz#JkS_zz_e< z5^aWpngD~bCCk1^w)x4Rojv4|BLbaULY;dh%cEdhissu&pcshLV)W8dd8UAN-fh;Y zL@b??a0hpF$=O7ODt<5+Ie5l8W&)Kq*VIJM$1@}1ca2w4u$L-~hFKaZO;v_PTU4&a z1+Rw~&5jtO2-ZgxI%Q`4u-+(S#5*+^7F#ry2sOyugajXR;=5;dH)I^U9OQQ9n&=&a z_PT%qGZ7_v=iaT4zxieokI%23zw|A8c!;iDVLkBGb7qVmoj7TeRT3J4{v)@c8IH?N zoJRr9C6f2`y<3Xu3y$Fv5I}Wx&tL$`vU>&NH6^cCA4S>~{C@N}IBC@iC|1u#4y(Je zel(}C!puy$U0ux2oh>t|=3s8mWu4+EQQaWm)C=PT6qpn8uy1iN!~lSu&h}}`UARpq zmU~`VyjGv7{U#$x;xFWb=9aFCqP{Fw{%K&p8S}#4*Ht`?eO~BWHTY=a9 zoSd=};AMi-sgE#MKR`@1!OQPUVDQZ1u)rUo+gkB19{^<9*i{3y3eAJeTRK75;;1VD zOyrup<&(30Rh#$AV;Xr~&uvzmX}Np@wEdf@R`W2K4?h9xsKw2ZnLFGTceQ$K!bAXY zqzMPXRm6L27-JjFC=qSj_%Fs-ptC5gzC z%$M}^I+Q#3S$y4)YXF)u`$m+(5^#y^ST_CjKhrboOsU2BP0Ph1A7*j|i)KF4Z2V2U zd-}zT*M2$jB^y(H1}7G&FsxDZ?MWM^yc@Hb{R_U}Yu%2zP*nH`J>*55cuzHFBX5AI zA8m0PR@#h}cfKKb?$QPFw7lj`suN{2_F`O$IG$uP1;`0tg_8#-9HXL7|M~lKx_ap) zTMwum9pf&_g`3OQ4CVjV^+iw#CLn^wEOdkE0kT0X8(-;uw)X8iQXsLG19~-^nymts zBQ-4UlL*9aX*r_CQXFVQ-4mx&m_+U0fR(Yqg>~>w^1DZ}VANq7G+?$sITgDMoHHFb zD>*<$i?@2Hqaqc>I^b2@pd5ZzyJ%aD!a54?+f#Ft(6AxzylRY&$TeE8@rXapdx*P; zb^SW3i7A2?GC)0{nd4`4i!rqOhGkxN<{Qs^h#}jrum%cCITKNCsXE-$D%yd{eAp*L zfA%Zler+53iB|3NB3=Ks8z6IwgD8&31B%7=WdLB4p!^7p3X=SmlE4&K&=8urXtN-r z@6q-Tgba%VBm+gW)e4hR@s0A}LM7cU+oGjub4I3zOH>#IK7*W@X%8C%X0rncmDtv& zB~_KM!K$pts#lTSFWAa|0%&lM1N^`_Yd{2i%AhuKp*fN+%LRpq8VQ*Mu%b$LzU5gXFLL?>d^6NGJmtTE69kM|!n6;3 zFtIMLVU?m${bdFrKA=4$CfoGKPRl@wdW=d=W;IHcu{_!Uf*M^e$Y+ZXZ1-v&b(`tc zsM)dZ4V+2;k~5f+EsVq9OUisY&oqbqzVsahNLnnav1|%2&4jclL};irWQq>yHbRi> zUwpFx0QcA|L+yOHE;ltdww9P*L=X`Q-!n_dz0e>4kc>mfFZ+A2i7p-CCVAvri<@>Q z6^h3bXPc#Jm5?|maPKTx*XkPtqz4SudO;A#DAVCQ!x5 zq|SWDS-Gj8_4BFxvb+2w4m_ZbQI(;YNqG+wDKSmT|ZiG87Vsm{p^B;;EPlM6+M0YjfYiysMUb26H8OemwRt zQGplRFN1oN%Nv!Pte&@oNuHGO3;(@rTBe=TF|mH-*f;5 zBJ@_a3lyVK0YIDY`|5n3AET(M2-W^vDrtw8pf`KlTKWz85-WWVGPGDg>gFNA05`A_HVI z3IH)E%c;v;GM{i*1E_tGV%Bvw$_3bpuyO?HfuiuZnj9C;pLq!2IP(lh_LOBU!HuM9 zRA<1c_AR=ErCXC}h?0kB&?_`}rrbGKdE)FaY1nKzG&ReGi4iq0AN?Mf_VNY*8?vs=&b_M7w>oZ< zSUyiSLdgSlD6UpTU9IpX9`Thw9_bEyd$HToA zKtIXIi0zp=Fcr!U21fEShvVk}xWyX4xn+Qb_hA3ov;2{SJR=E3876xTIQ2&>zdCPk zuou9-iV{vo(F*s!_*!r>jFZS+rMBT(SK>pv(ksOYw;lBGP-frkVqWZ4J|&(CBvY}G z^B`7Ga-q?j1#0ZZoLGjp)EV{4L6vg|06K?I(^RktUZ!_4T>PkPMd&V78wEFKB4jd; z^b%3mJw=yk!rcIp8pa}l=mu2hxuR&@DG+3+;Q)VX7<^DOhUQ?-Ajw&RDycT)7q+$N z@%0s!Fd0WMjFne{*ZcpT&5LgwUQvZpudC~gF?jtbC>ub#A7i8U@rtT&lvr;gvk_(f zS^QtTCgt*O%mtuN9KO-lRfzFV=&e9x2x+*8De>Jqyvjoz!t^9OQhVu*j|;FRoT1Ff z6>8az&dzykjO{{EqYYe20ufnGOTNm71lW(vdlxXaK1?EsH7;XFULK5o;h?7od05Z$ z2|`sj`^IKk-n0{B63OpCoF4=ir-jp!o}eK97PDM8T&SLHfrqi02;GZfh&0uqR%0=K ztRPASnc1L<){}(4o%`yH8t$x)hva(uCp9XqS-3#c7_%yL@YF&8nc{C>zkl@-6j2hm zKnmZ4)a_n&=~w@TVZK4g@0Pcb76+EvKqJ8gHj8jHN$N*Hk)Y!YHl`KB#yAOb_D}E(&Yw=|Kz zqBU+%?frDdwyav{%dmOLCx2zW+SWl$-k20XWB^E;65g}e=qNH$$-IbI(&tx34hZ=N zh;&P^9vTO;21wVx)QN#rbK+;T3^0#>eERI^3vU#v*El4s6zjCwIix`?cF;0m5wKl4 z+to4+Mx}xi2?e>v2gcE7i6mLvZL|c`2Opx7+vW`J8&S)#@aoB_Mjz?LIhnIbgTuI z3LI3ICJmJf6>t(+vyT-wvRE06gQ8iTNf!ddA>vuk60r>ea5B-D)~y-&4o|F^E8OWH zS;Ptv@Ctr5<|76my?(>R%NOk1fBF>f|I;Tw{q*CL7tda>Du6@(+0$pwSsZxw47WZO z*5{^l?z^v_ZJrEcd~D^XXN=9btOEk7ul->S0M|b?sDeG!LFL?nUFw$(B~%-Wvt0Sw zAQ!?tblm$09fuvFePTW4bemZ#3eN1F(IeUIgK-lEoWyAyo`;xhCN{R6&4 zOGiQ8e-=M={j=^)qA&CDK`b#LeI9%v#i5oxta_fI)6~RqRazntz0y< zokg@(pR7qNUArnFXv?T;aS-VDlP9>h-vj48PDJ{5e2(JBc|H?YO9<%Srsv1VfV)k) z#+;$p@U-m-74o%L4Q{kTdm~zRHvkpxZYX+!iiIwAz>aQ4VZ=xd^s3p$Za+Y6+~Bs( z{S2=n9-Uk^)CRvRhJDmB0X0=*sXPf$T;oN|(5_tT7^?O_GdVkwrEk+>G`t9hSn_cI z(o%%#=B#7g7bKQi9^*600{f0J>Cu1YB<-*U>*zKBTaDJz_Qr)pAxJjYb;JCE{S=x_ z9KNZL*6f|EI?Y?&Iz-HZCQR1=){&vMtQC8b`y9k6M5PV>0g4dDqD!ne94eaPppA<# z7AZi3paNT;5^zrlfb+=TNHI?qIa?MGr7mb2Q1XR>w+}hCqUO3hq#w#Ai) z;I_aTz-k3s%Ee!FdJ^xPe0Kay_3VXm@B+b6B{uvU24^+1Apaf1ctDk9=!&!I4&Z$= zd|7QGVN8BFOj$a_raToJ*i|A6Vr&Yp(hqM1z`KC#uf|Hg;qC2%LpWN4Sv|!@83Hre6e)VHXNkq1|>A-9|4Y_hUJT3H%#n%E}U zVWb#l7RNR^GC*t|Mhuur{Su)rE&TgK00Rh}BVKqKE-9w+iRa3+Wr1kmF^*^wArH;# zc|y(P%2#*p{FmQ<$MK(j`-sC^4p9%`tE+D~zP(|8f#?r6R_tPmH=KRYyNM`!;*Pw0 zTId4|7UvEZ7h^{`>F+My-%~c`)F`N;*~FX=a@=#DiX+En+4#T1$j)_j&ezZ7 zp6M@%P}*q}>ZGiRtNM5i;GchqS=l4hxi*o5%(7#vGX0s{C0f$3{mvDaTfze9kDyET zce{U-RVWzyrFd1j*E=2RF1A|es_XbC$UEr6omm4oTvJsT)Q)NxjIAX#q9!7uL3vw#TG&+oUhC9LK^6t>ZNS`AUJCS&&X;!~$g{lLN&&iP zxom;w!?V625#Pajb3L+?1=p{`ff->s$iB(D=|1X-<`I)7pC|#$cVcjxOm$a_V$&ErI#*b|;*kg|MXapf_&6s@ z_YqY2*c3RY^QgV+Ua0@H4EQbUulnVWVH664I_RWgAkPjWGFy=ne2q(;2hiTIT@-J% z?ix5NWL4WmLY+ak`Ec=7tgOBh?d`M*#R}NoV1|`bJyhQ&8Z_qBdib1xaAiAh0AeWx z)L^Ct1gJdU;L1pG=CmwwqFua zFw_}Tvjh4=fn)o@8Z%+=!vi&~G&UaEB2<2~m#h~K^8DIBEf^&@V54v$iLQp8FmtW} zge5+_u`G^_)^_VetMwoop!0KXP_taM51U2`g7s*&BkqbbYd&p7Cq+#$xk7dsTa%M6 zAwVfj$SfRjeUcYpYs ziR|YLX=DnTe}8P4fm`Tg8&{K|&Q>}Z7r-2dkV)7`*pCO_Z?d~;y1rcZp6_Pk+t<0z znY93S^uKtHAAj=X_kWFzWAq|Gu%Z2`=d4ir(35MrnOE6W)l>%$u_szWO>9;M0bpV5 z1Pxek9PYD2-);H5l?;EpuO`D6-99^0X z+A4r0s+?E!(Ct$3yuqKIwV{;;UQnRwo>L#t%EslySJMNK=P(h=jv@nJYT9$HIY^omdB!Xn1Zn*5! zsKezV;wX$LsU%{u=?Ne(o3h>(r^%axOOA%Pb@kH0U!;k4HB+vUgqh)i^w#@IHW@O@ zrc=ij*mQzn6+)frB-g`3BAS2AA=LZ!WlnjSs zDM=o#gV`35`>}X&m8Vp*iWKCiu~4e+9~w5&By(yJWe%IuL5@OKt^=f4QY5FN5nCSD zRb1UdAjLeR`-1jfA8q}^WOgupUOZCywvm&%n)c&WQsB5Ly$_oDj;*K?{pB$`#;7_ zj5!$S0kENImO;(~P53F7kmXvc0xFSd(orCh7sOJG&&p71h37Yp51%?831`nZ+0UQ< z{=fd;ivaeNTzL6Uwrh1Tx{&T=Vbi2M-=IFIO+yhPbd=^7n&VsI(3Q>U~ARfv3Z zQ=E~Feiv&XkVnv3z1Tu!+9((HwcTJ~o~g7+R(7{dCk|K)ja_;u(P7WHVjPQVk<$CD z+6-!T6DOvq@esJ7Au=nZs8yW4tMc9rUy5}(Sf$$|Qt3geT#S@CR}H^)B4wQlrXp<{ zAx?BkTZC{f{9k|g_HS-~oa37-Z@;;A{yiB-Fji6Ifl%tmV4^LOKq5gx;J6++dlr!7 z?p|YZTvun1+jCrqoZJ3?tWnGOqf0g0IfKXr7-tj8jNnL}^V!>HuJ+gd9H(B}{r<

hm1QhA-2@C$+cTz}*Z8I; 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�AOtK& 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�PtGHYJ; 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༫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

+m*RB8H!UYau>Xn7VYTCla2Cg~QjT1M|+ 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%0A}B8f}KUGKw+JHsa(kAH&oLEiE|? znH?VmYk61w0p!eZOR@(fp3Lks!aJiVSm!TyeBSxSJA65p5<8L-Sbz`l^qz*(g(j;U z@**v#xeGt^+O8$XzI$s&|A1bHl>llEx$q!1dl)?*to_cr7^lqPsv$OH)~Yn+5a+A& zcpDIUd*8sT3 z5RnJz>_AO#)fku~`o@M#)J!S-_y}eX#R7SW;LHslP`*KkvMT1o$Ym)LP{9hqC?*-r z#>B#x`89$6Q&U@WU`3JZ4A2H)z0wer4puBTa&m)0cZxh=yyAeI@vd2#GGssrP4hlSo&~;HLl8g;dGFDL)597ag1zBM^$tf2v>t+Q zzUI<;gL7G!*#SWbxaF7tSzE!HZAT;Ib(Hm$)~RGQJX9E%Mq_tr(;ot$I-)UHo?VTE zA+BLu0i?!vgWU8MJ})=SJ0Vo`)n*X zePDuYh*@zu{Xj{KgnIuG69atXc0&ZCqStNQrgKl^KYsUpAl>IYcYGPHI#Ek%0gW`B zl^7?sjU$iRR6NzLJA<662ydA{K>wQ<(~NDC3IY&e!gDt4LKg#zplo}FDCd-%!s3B! z4b$=904Tz&Mi3dEF5@_HuA>R%L%9vRC4mfUT!8q5Ht+XotzdzZ#1~=d#2uyot4X7ho}v5sRU8D59|46!^A?sT_Xp z6A124J*GwJ`t`&h5zrMWLEBk{f6q)6a$ZYM%Q+dafE?)Sx>g-48W3%$sgC62=p#Uu zcp$2Qwkiz}kAn?|5_q{kYMcc`_H4nlSz`1Y%EtkRRFJ;e*acR=wy@x^S*_8*p)nQ< zs0d$d%$ksNr-&nE%uyxXEvtejn!xS zex>35jVyY?z^zD7C|?OcJYdE~VkAOBZj*r1T{*9yLELj}xD^_7${Z zAjhP&3esOgsB6g3=6&M!EJ{u&+Shy{hpT1n#jJI^ddT;yzWrW_`_zSxXtdByv8WR$ zUj3dl^h_-jfghSdosEj8v1ENgen5>dz-rYw!|2+fCXOH++433+H$$J1-z#d|fA`S` zT)+AB(@*$B^CO?a_ul_rbMK`OPy-z7>ZOM>>>@G%??L0yOs*~{k9w2z0;Nh(UX>sJ zQ9CyL zazTa0dxsK>_!^lJ!XTj}TgvCw8NwPOb1uruPM<#J?p@Tuw3}-RPG!IDC8&rI)->+~ ziz{kQh}4HF)cq1jufx0FW2h$wnl+mxrJ*d)U;_XPNjfBVZhCX2mWp-JdBFl#BfM+| zFK`1%dW_>6ET?IaQzXL>($RYG6w1?^SU?gkr#52C*QF!_lN94)QK(VY0u#;c);Cg; zDi8n-qc!aCm2d3X9x1L|!ADufX}}piRC*>SQ3NzKxb*dI0B0S>Pd*0 z>{MKHJT6SaY4n{UW+D@( z;|1%7gRD;7%Uysf73DeokH7yd+kg1oZ-4j4Kd{~Eyzamt)T02etFU~Q{{I52|8J(@ z&t1wx0Ch6%es)~M%ICs%CT^VH*ltlLJ!)$FtL=UqhIvZDT1Z=z$65RY zz4PonHUYHJA+gBL0F@qJ(CXsI)L|-5516CYocny|;|q3zbsyAk?B~o-?nuhX--~r~ z$w|g5wciHjRnOm)ZyjPT!fCXLsXJnX6Z%Z>a%%$gP=vj-^y)}J> zf&uklD;FhG1n0)6&MeJRssst@7wM7Qcemc<4n>nKa zr_3lJ;0Fk8h6s`f7ZnL-#R)~K4w=eCzD?DU;Qd!CvdH2$`9IW+t~G2=?|IOODj~23 zh!mhlkNi!aie#~LnVdQ!t9Ox5Xo1-;A4^p&zb5nwcGSJ|?cJ+XfyH*N0a)qPNl;Y*8kzk`lNR9DS!t+d`YtIf6b9a{<1ANYfvMimkuRgppfpuq4} z3lLIrHI~*gtUDqACwh{Mw^UHLC}LY?zj!51Wu~;APG|`v?gdtI?PL{o)#0!}w6SEP zXizBz(AX>Q6vgahC8;s7^5^!4iz~01oQN|(;Z$Qgv&chfiPA_q4MtPh@QJqFG>*tn zcMa>5!maH9-uBjPBPS)***K!1&$+ac?heDlX=PiCOn|Fswu>E!S9NBU(DH64v`ZQ) z0aimmq^gS45vzm3gV7F>q{QvcAgZ(I&U!u9y87?r0PZK)(3uDiMawIzz)csgC5wcj z-P$k(h;}^})Y^c))y=-E?c%^+IXE5KDXnQO$6q*(oA*7dnxHR`rC_VX^l5^yktiD_4~AoX+AL&8(b~sEX>G6!Y*#%l=#p(8HKxQ$sDu zpF5hZe^guo-lUb1EFyAjAzBDyht?hDO<+9Pp;gU5ok50p0*S2t?*c$l89RZJhI875 z6SSzy&{%bb9L@nEHSE$i$0PqHtwY##4kdE;`gAS>$a~w!$oR9WE>$XIE?bY6t&t*6C}zQg1}KU~m*MO~ZTb+++7#*H;| z5ghE2o6rwBkr^MZl>}9;`9x|YN+t(mqsoFbIQZLUz>s88m4zNLQ8HZ&q9WQR#5=CV zGMrYNa6Fe%IjL+rP7O%y0U|&pq1Hi~nv|OqlWgf}Mb|o@nKzh$e=dj8T?RP&Km6gM zj*{mRJ@RwscPDST^v?rQca47Bp$7TqOh5SkpBwULfAx#o@y~V84DkWjBCftW7dAYo z;!Hz*Xa5>P!OCBAj~UFlgqAT_1elJsjjGWlIU>?g=vJ;MlbwU)0;RbuMVlm;{DmNi z5G~tB7&vxnXL`C|Nv-I37;#_@#Xz93z-+Rx8w>|Xf?{KwQEWYi3KjdydOb`Ir}7?} zq-}mpW&u38NvlLeDt!jjN)6B3;j?VO(V6X&`SQ_|r(b^g_^YqJ{`#x)rb!6aI|c0l zgdy!ln*6J}yegC}l3v_>_l*NH$7WJWGaS27j*$i& zrJ@e-4fv2Mm zrJ1oy9Bxh%+LRB)B|3feQK!FWM!S2!VUGGzTFT06JTqWf(n@oOBSmUadGeO31~Y*t zZvvjO)nHaIS|uZ}_9L`H9CrDLafx5EYBVPuJ<%jm|Fb{{iEYU>e?fre;^W^z`}HDy zTVE-Wos-u+3PACFwX5lm`#nl~n?{d*@x^^L*8M;Gt6#7|#B+&L6w_UzJ^$+$A&$9e zd$V4L@w7rx53P0Y=OEpm@DRX1dX+0Ou@g=U0(ig>AsFm{ktl|RRZaRR)!BnfY7Iuc z@x-BIo1;p`qx|1xY7#2lO;UvekQm%Jq|l^hoh#}-5B6mJOo1Qrm&Bb#%uX>cg#!=R z8DJ@`o|ZC%(#}LkuQqs*E}=w)w20+~z~<6(`-wDB>KNArfJw=W<1oTq-~@{zYXGAk zq^Dt*^&17^a3i_1p2bmDu2~Dk5QcQ?~hoC&-{lNxVzH;h{5GDXkw| zh5TEj%u#utW-!4peBZqP{WCu3#pLtDciA{t0x01$Vu$@I_^H3U2H+g>htlhf-Ikap z`vl_Yf3{2i5?A_jJPPpDmyZYB33fOB|G?6}{^^`KQ`KN>UZ_PQc(FEe+ZYL89vCU6 z|6q5{y4S%9hhCe@(y7{=sagrPa+9*b7`WvT=s_;_s&ecRD)D zziMmqTC*wV)Zyxl*xz8S^T>I$?t@D#!m$OcGbB4T?3$tJ!NLQeY#K96(HDN1E&`t!P!P zzcw|dX1`a}8$s2H+ykd$<#Q#E6Ihwo_&`8|KaeUet3fo?mzdV=p(VN2*p5fiLXjr4;=j&43%*kEH@BGNb@Vmphu5PX7( zc%jLz5@BLvXq%vxiV!ge5kuD^H?(pL5t+)1(f^JEKc;N&h~bcXt7bD2bH9y72qnRG zT?nl?7NMORRN9LAbrbs4M$e^|ED-ZGc%P3P>15s~~1mIQFUytF)yd zNfh0yp`0Ly`aBNBIwu!AB!aa^hscS>h)M#M#^TjdLW%-2*KFlZf&~N($=oKjdm*Ui zo#w7gN;I=RM)fXL@=3O@9VtWp zoRkXE9bFl>Mv;-LM)f|9beL$c3Cq79zt1*9(KJksXW4ZX%sHx%L#-9jjMMVM$7%4* z#|X9L-9d(ASg7RD?Gnmxtts8AgoY?`K z!ZrF;4qXPId$C)z_d#~9lR}r(u=Uo>>sSH0>jz$))`B(e#>W6+Y>$CNK$I&3peO+E zhxO7Nhrv~tjqbB>Z|jCg;Ax2S5l0+36^>GWt!}gw{E)sZ!KnWl%^H{lX5Y82ZOzXkE9;_DOJ)GPfsip2ezvV#~1gS-fVpINPQMXm; zUX#pWgsN@Jp|-GnS|pEREL`RnCD^Ow8Yq@jsG2!u-;J1A zMj~ViwktS1k%R2C3xPRMO3^NjioLc%6CtW6*HFVY>(nl2>A;3f0^D;Up$dn7Jv3>L zn>e~y^CU##dVTu-nb#ND4jDBUDN6Jy5<+}zL{%11w?Xw<89z~t?wv?ekiNicX?-Bx zs|XqcjgURhc@kH>_JyTS@(+~1p2p`&5DG}jDuPTA(oCa&{uXS zJ0yaT+)fHd>CQQ|OF~+=00TNss~Y86(6O$GC?;ekt@hfZ-9>|;#u~O zIoMWMwRG#k9|6BoEGfEq%>mdqYS%kG`Ci;kV09hpt$c4JO02W!_=i=oaY)UF9HAN)=9pEk3S`P~VZiJ1t|Wf_^^-5Z z{E8)l$9yD;C-rz@o;uwwaLAL|4%tDE;);>DmKPijnyKX|!{EEY?5dAu_FMztb(K5^ z@agjpkPxxEIpabR9O|pN#;DT22xEVt<8vQ_;|^O$n;jpW*G`fBk?@FKEvcCJ*iQmQ zwp60*1cZPcP$0KNMm*O}TD1U{23Lng4Vxhbhe|4k)7@~xn8$3%I@GB(GQNL@0Al`K zdhh@H4?BZ!ujSnN0&Jd$Dw{%cyB!0sgqq~S)&CY6*!wgBS!ciyFLk)}n2pRG6UxXu zLI$J)vJ;5=F&73(63#)WEuUg7*)$d&_RvX!>Ee5~qQz7Z0|61%Wq$%klE8NL9S^{2 z4g}yV*`AFE--3+t!Al%Spp`{~_b@JQBbXVSX8o)whm0`)OqT)fRCka0`Qwj2`uw90 zKYRB0TekZWCGH@}sL`fMV3(%(Gcsn}kC<>Rxi`|}`iuW5DQPBr+~C47S8lGZ)+ zw?4*rZgtU##|XQj0A#R{B+sW>q>Z44J{^Xl1|8G;?|7t|o8Xw+IAXqZ<2daoOtaQc z;SPYokfu3ib^y*zGBVoZoEBa4#i10=Hb1)ihIa(B z@8` zxBpM~_pATFe)H1*jS>u?O~Wxc$}r(q>jgI*(k<%n@UrYzKhpxSxE#|@Xw2&x7Vd%WtSewpI z0%UhYu8{o+2S9dc5>-5z=);KsT|lD0Q*2pE$ux;gT*AM46QLs&0$ zwrzPUIEN9S9M5^fhLgD;3p_H^(Ycd|xXqcRZGsYo>k;50Fi&0@4Ea~OI~3cYr%vv1eq>EO0m^z$Z)esJh0yy9t!hk|AXu`rL z8SCEc0qclUh1kZQypO$`w_DhJUl6HKxRq(qW+lAf!(QB5bPqkhU73muv4jAT)enth~E z{Wmd+N~(d36o%SH_%9W3cc{=S>`ko1rp;L0miD-`&pi>ViV@0&6POR>G>IRVJZZ5i zwo$Ftrm`E0x$fK4k1I}&12jz=S=oX8vYM(v25-yBN-c({P#u;wKcGr+tPrF~34#g* zmJ1qF8qvcT@}2KSN+1(eG%5)Lh8U7I2UQZ8<0dZ$Xpb_a0Q?037)u@?Lf-xOSQZ@_7V16Tx&t!fI2BPPhPBAF;4gmR?XSL~iD zh(Ux4uy#B7%uroA!go{jKKD-rzFfeA09?voCAY4h7aVc_;N!2JeErzXF9)`{I3B6e zcbSJS$+IrKzzV3yT*+&ddI3yv6$GnBDf+RpLL3S^<5BOsJ5Pvq{l+(spHH8B^x~&q z>Fn zv|toqlgqB~)C(j3qNVYXV^u64lCm`IUuR+oks1H$U;i7{6xeR1FC5@O#wppUM42`! zNHV9x6x{a)oEV}Bm8T5bx;buC#yY2bLL>H|$dsyrm#z9LMT7*+ak%yJ_5y`F1voOX zSsU0VC-(e_Gg*t&AKK1xuPq*4U8^BCnq~ zsz$q6u0|Ik5OX*(AoR=*$dVQtBx=DuqzhP(Z`mkX5=a5(WHg`J!a1Z=GUZ&L-uS!A z054n&AP^D6fAK&5_iUg45C8m)0RF)i{wxmx;JIwKL{MeBo$hrpnl_G(N7w=JqcT%z zk;)d0>pGyDE_e~Y3SsrL4x{R7QQV>%D6kM+WFfoWU;n5F0oj0LHisMvwYQz!%t@Qm zTJ!jR*4s+qEi+_Uq?PB4;(xGkkL1aIZNDKhlyO?s14J;F5r070T}mtvd7-n2y2PN7 zy>cR|G%yr&88p8mLO2!xSNhUvD2{QmMN6Wm~iah_TD|lnDCFke`)F8 zE{1B+pIGn|db-*FQKn$z;~>_aPfw>(p`~uX+m9Fyd<(#h-x&Tlu|PO75=h9q^p_pa zqJeEnI0`MYl^Ni`>KG#{I7Yeh3y#%mZT+?ZK;kW4_d%y;d^pH8rPxwMOQ}WclC|tj zUc_Y@oM~2%pIhVScj?p5KKcCfM{Eb;^%G;Byx|%ErMGHVySMti3udpX|LG@RJo@Ad zE%Zve4B*4M+l(b@0)fEfF=l*`Asp_?n7(Tlg)KFWt2*l=OmJbX*JmFQ^NqKqjON1j zw!gauAQ4P;oU(j~erSwPQiDh+#ZQJt4Q8U-V_VD|c&?gh53LCVtfQbBEH0C?m4VK2 zn_lCHjmPToVg|MN8;~zcxZtkI%oViOaXa4q&>}n2O0-%w5i$4CF4jRvj6ng?Z%E=r zeiEKmD^dM=co^3h8LwE<;as4aD`KEoByGf%B6Zh-g%}f`&mTk?a3AnrdND_i{fnNP zKit(wG|#o=#N-deD%eRU5CVKI$q%U!+ekrN3lz9k2Zk`+t;t}r~gJoDB?n zCf-l6i@WCl$YgEzR^d-S@RqN)cnAPQZ}z~y|MaszotU2t;RnA1{7T3_%cB5W{kH@A zj!*Bn-Ed*9q}%BZa7BC)i@)VN9kVlAA9=05HEYGa@kwk6gQ2g(=1utzp5Y<=g(C*% z#=1`~L_Rn&wQo@_iU?X?%xk zS>+41(~6H=BfocJ$MuPLdpDfV(;gLP8v$)g`Eg=)HH}DLYaww1@6a z(YNt+!Vg-sgu-F-wAZh zsXp#B6s}b$Kk1NniB`-PPK!8`FDs8WQ6}9X6P^MzuM+78<7c1nFyRSnm{LXV{_as8~TI?>=<(3P>B*T9j!rez9WKI zmI+;gJ%{o@zD}Z+^#~Fb$PrO%jt`6l9LYo5h@tJ^P2G<29p)o0AJ7FLNeo%IVmEpy zT`*WVz0ihq)P%xB&Ob*Lco0Pu+^mpFc6>4>Ym#9#@hPArr6+#Z%aCSNu$J6ho$YZ+ zgj*nD1nz+w7XyIYf*|0|;w<2}eYMw{3?;}eqmtA}I5Crm&76&tHsYT72m+FQl|Vj& z!>I}x@s4m8tUqB$=GOvP{-zGiebf5aV&xRO9_?e+{hJf^ns0%Rlt|9w&rJ>iX(kJo zma?hq*l)f~2J*CQdm(5J{G7pwMQG8DOjtI6BIJd*4egL&-|j`EnydK2MN>4T7iTF_ zA}X_K!RwWL(+{|2 zQju?47=aLp(R#c$`CIlHur`ccc-ykl0lPtfz1OoDG>-)+X0wN&@W`n3aYPiEF6NzB+b0GwY{Q2U+XP-a%^mD&>%&Ho| z0m5s4c<=(JVD($ND}jPd$M zMis4_ieND7Fjgrg>H*KBJs@_iKEZ3RY}h60Vp%`R-Ivc&_a-44FcyqN{I<7ZiW$i< za&VEUI|LyaXsOk{*hndF`Amib83dkU&*(wvhQxDHore=9ppUWdHfBwKOHy^JX* zelEesFS}1aeT0Z~C;3fU3etgM7S1grF~_-{pqPbn`pz96EJPt@#~9>|+BYBY<@5B_ zF3BiqookE?TZAeyfl2-?O$89;HomAO7gsv9hXrstp%sOeomCNU(;5sPM+l?)lGs7K zhP1X(L8pU5l*HW0{~C;mOM*{PtQ`jXku-`E>5X)$Tf5q3l#rZuDjCevh?*98CW-As z=`MjC5!D^&Z=Po=PB_6I7AXaev8R|3I(A8lvIhbtJ97emoQqJ{Q0>qFozddyPfNFp z0W^Q~>%aeLK>i`M`ctj}ycksoJufZ&-(-~yI8a+Jn+7!m^2sY??c(LCtQHDiJJ+7* z?&;2`X%{?W&d_IxGf~j#ZUS}V*c^?^wCKy(IjHBLTw*d+j;(GoM=#QlgHfX@uDZEY zx8~I%MCR1qa)1=oI`$+CoCUxAL9t%n8Whb7bbqi2%)E7)2Btg=Z)5PsXr7xw9O6io zEjE()mVg;<9vEfJ|AgC)y_*1LBvzKaBiUg)D+H!o%)Qd96R{ToqNAFkreu{STbF5g z^Z&J4eHF?+U;yr5%#pAkae3cw2*o_KpINUhB!vnMDxT0AA5`&838bXQSwn&u9vaEt zMYllsS3C7bwG=c}0I3kQBPuyi?_Xag=XePU+yGpX%4pwN`&bdFw4f~2S=v$2l&2&e5m8@JVAl>X-ETD~F z#5RFAB8r!|*wFd~T({FVTn5;3`mN^62QmM0_G@#n>(?e$|8He8m)j{508NT*D;FtB zN7{G{jcHvC`KhCrv`vNXM3^CF-JEdS*kJ zQX|5vELBq2s+LAB8=N}A%;X@xY1J`qs5lB&y=2liG}zTvB|+Y!g}qX^Ap#I5+JTjj z{mq7mGqz)6$$EQ8X5#uYt_XgHv?Vo!$s z^q;p3&;zB(!;F-Zj#P)d@jQpp4(z4dp^7j!-0V#3m5%9Zk%R;r=)++ZwmU73v}6ek z@|ORmi;m#o{8Dy;hkiG~(XArKhpE&q14Pr=z2O>w)c(kHdkz5O`H@Xe^?&;Dix&fb z8k{$``qiVK|MiGqe9K1xUU~cfZT0_cmj1!@;?n=Dj)L`YI9-ewY?e3GuMS?XhNRk+M zGNn!Ou5{?VonAG|Ke;x)PqbFIZ4xt(?GukBRRO67D#(7_140UvNp8Zk`9O%^pb0WN zbJ~kzg12?73p!e>5N^d!_6A$g9K171E0QTR>PoTDQ`q6owxtTT8<10ZwryyXJ*pez zk-Up^O-RsW9hk7r5RbiA5%v2UsAVSnhN>R7hW($RpegU|)Kk3O>9>(j0Qut@sv ze)k8qfB(lnidN?umja}(=c}kJLc&@2l<_w>CIfgc>gl(Z{U){?$Cud-n)0+z2M-ltv#$_sryw1nhuP=uHN$d_m)IStK`Pg_<#}BW|cu zTHhK2_eS#ROWTkbakyTl8GE5_SvU=X%-QH7)togs^2c- zCa)(@rkqJ|#U9aj_RcGw18{7Eh@Ve#Y^dA>#K~ler5@BX_fh0mqUI7A%E3XVZB?9# zfpvH>nyXH)YB|3F{BB`p+^a09QfZYDw>^Td13=*8m zO|sD`s!V0y^U4{ZfN>h^Ceu~*Aqm|_uqq?d)=)OV6P=pUQQ(NZOZ;9M!Odt(Y+#`N zG2ROe)MX{T7r1*TJ)gh($VUxaeDCe~7$AJW3xaVyOCH={76G7tEkGk+uHE-Ec7+1E zk*|iOdni6+r#?unrOt9CzUK*=s0$eRVEkTg;O>5U_0)#y3TR4DVR`o-2h_~!yz`C$ zuJ`EqB!g4CCU{t;hY+{f1P`NZ=#AWftWAFW@n@es!Xz&<7C*Dqk=lYO5+`4!n&nTVOQbB{8g8(1P(JAr^Siei$BgMA_2!7YbRGtm^CyhY| zHo7$}jg?+PCdViRc<52_2ur$@mnr#Z;MRqzoPZq*87EK#P>@t{Di@{Es||tJS&u_% z|LZ{19*I2^QtAs2RDddU4$X#uRfggK7Z>z+-r@7)WM10k**5u|<76z=;X4a*!QjiVUTYjP`B3RIVoN z#La*!MP0gfHNVv;4%p;Z@m|hehvMsiw2^m}N364e_2nNPv%P^<-h9p00*XR8TSOuR z|DcbQraWXzOglE)E$-Oi9ObBL{;8>8Z9#p(xg~v$#(Z2`Z5yW^$h#Yj!zl)U=i42K z$p2H{nk4X;TWt`TJRZ%N+5!Uki_#CjR;_Z?fOJv^vkD;T{jvxeQTcySHO4Jj8hzE4 z26^9)RGAdT$+RsASceB8OXUwpMct~?a!Is{sRDiA{8%2l0x1M=I;8xof=-_oL`LrrE8cfU(cYIXej9TuB5kE zi3*%+yJp`N+i_+Q8Ul79%*@ETA=B6_v$S-82Guo*NCr*nYc}$kX$QRxRNjK4$lhfyl6PafDB*Szf23U8}SNN5W6TQ5{4v z(5#IU{uc0bMz5jP&l;unVpjf?f~`Y0fy8oK0G2Dl2)n24s|bB&*k$`E3c zyL1R~wB?3$#*PQvK9`XKOtM#V z5O%z408s8|B06q$JV=*P4D7Z5%KxE$dNG`;;A^}`_&e$phOB0P=cf}*vcfTTcMa&^}Ml7m@(fT+E};kI|*t1hpt4xpF8o7pMKgZ&&tNyve4 z5fY3t^KFpd((n~_R7MJ^(CVhJi}T=@8UN+9MD35Bv1T!w9p^T5!g6;RfJXt$y%G+5 z9sUfztPQ^nl;?5bHL>Z}lC5E_p*uiXKa@bqt?Lvx->Z36z&Zw}mz z`9|h(*T`_E{7Zwk<7L$6U)dMwH8@Sed2l>5l*|2HxFR^!o0GgexVAu|1vdr>baRCL zhI-Wy@`JcGP$5ggqysn{dIr*isZ$I9aU@84gz>2oBQ7~v?CF?Xy(4UjcI6!yWQoRTJCfGfSsjZNhBe|wi zS}*sCfer)KFul0@?|$`P{a?TN53a+t{oCLD$A9;S-+%3Qty&iP?%OB4jF9(^ki+1+ zwSEZa&0OEGaf3456VA>Pue|i%;jDTX4-zZ$C1mbcZd}W$mQOkrlt9%lE?Dj2fu9dG zX5)poKR4XxyqZiWfbaNY))Fc(_^6M*@6d7T+7Pgl!~3Mj$qYolkrbCRH;ytClxYr2 zmtCPZHn^B+4y#XwmaF}gx+bZbg+q*)DT2Ku+&1xooOEoaT|X?e&NV;8p|uRER~c$71N5;c;)j7sG<4v-Q@5K4_991DCb_POHsE^Eb z5L`QDFeFs1_@F2oa-jBZ|7j)p+}2FxAUbb_P8T)3FU^Uf8#2dm7+TWXxg44d=6i64 z_>`yr=n7lg^ernzRavytV^W_5=xJI{9QwZdJ|FnwZa9VWoo1;Q&{Ud5&Fwqm(SAo6 z+s|ycdl?aZnK%CP23T)<|LC(XKKbo4*($j~csP%#{xi384GzsD(6UKVC4wlnYfgC6oF!)D?T^3zlI=O-I$`Pmg-oEi726{>q9YG^q`XKvYOM7ke~?bW zeYs;@97y#8QsBd(sMkmdjeoU1ImkT!^QUFJ7hlPrU-NvTmRlZHF@8;n)0o*0owyz><$jiup zvY|m8ht@Rd`~!EL1$x49KTK3U)h^sOB7VfdfBi51*O30W-9OaN0Q{(j0A7q94aIJ9 zeBILjDrh;g8qOUFEv9Gzn!z@!7P@tsV>ndE(g?srw&QaeJ-$@CMpHAe8P{bzIRi)m zgj*4bmgpDlBlAkyax;aUWcVNuz_!cIYiLDD!K4qFhc@{*2uF3)8zDTHWgGPGYDo&| zmZL-}ZybkIM9dZkAmnI${3_~na9(6H$S0X0ipxPa!y>x^qQ8G$)-a3xcnfQ1bSaBUy3`XXY#5`tmdS?ZM}ymf*XtU{v=G)L~G)AMUzBw2~T zADYlsa=l5QeDX-clC(run_9KA!sH3aUc(+ z6h7^CSP5DgE{Tl=*@z_y1S_oP`<)Bk`Ax5mCm`?|Sdd4l?30v>x>f)qSF_>tVaOD{ z>@*k%KhQc@|1M7&2-YW5ng-S(D+i93+8%xOA=@R+SNy*GKmbsg`tmfuD{9|mC5pTA zR~_CBj;`WYF8yDH{wiwu!n3p<*kG}ryMcINsJF#*+l!}@*ioWNO`Gq0&vU+@g@zfn){kQ}-YP7r zTlB8}QkP6IY9u;zOObOMgT51YJ}<`gdDkqIYlen`8;7&9U+TiY;yEs4wNB5pl@o(c zazk`ET*ly?GC3Cp!w|Q59P|(yN?K1Ab3L5^bx@`?QX~tcC>m+td5{m~)~X`AVTBHt zN3_l15Qt|sw3c@634&+6C&Mhb(E=`6mWMQVI=Kl}%<^ncIm8!iL9>h}M4e$>+c3#0pX*RU;Do4$6L>$i=~oP^a$L+{n7~1{ASHqBn7P& zF+Zmi$n^yF4^`F+&d{wQi*;dn%eco{@FZ(xF?pDg;KhfP$4`yN?EKAkGHPB^4vsk& zeMR$~9dbOWh`~B*8ohb9N3}E|{6ZZW* zB!xsVEoU)*l3<@gFKsP%Qq*j2DL!u~pgD;iH04KeI4-=DMsu|y4fTnM)ehEWOIjnF zl$(I$MWb^THOIm#6Va(y8&9kxSQUEA1BNf0tG(0vV`^Z%x19TftwP@C+#lDu*$c6e zj{}^@t_N^z&+I)+T#@_s{rA3u_k^kh*v2c;J(9uG?c?MJ z5@B+U(=It=OH8LR-$^0G4wUX4bcPYH|4|tLS%{wCSfWKAvZzP}QPj68J-Ro2Q+pT| z;439K?S6dgfPh9j&~l7RjYAAiWG5C4ir#r0nd`8uJt6DZ=E&ENQ_uRrXNS(Cd3v|w z#`|Dg;yZ5UAYMOoDR~$|<05)5mIb?So8HmoYVTE~tu`gYohm80gFbM(G7P=h4OAdY z<^t3O01s%h>c>R@SHw-m0Zq)%$^!tclCk>dr`=dE^SN(mZj~7}iRj#H?%RPLeflvQ zbwrHn;eyC}C7uI#`v1Io&BytEBEpE9W1s_8qE8)oW}5! zs?Hf>7oQ9SJapjKwGfgQZ8$)#5QkD(#O1ED7W}*E+3NukiQMUGFghn_UV1YU^Wq{{ zq|oAmkM_8^*|k)fepG?_(vkT&&ShlUa2+msZ36c1#rW=)N0K=VZF~fQ1!b-3+-UBy zvf8c|IBN6v#6Ihgo9aTY%KkMkDR~$@|(wB^4egoxaiuF9K-N<)v7GXWU%_ zV0FI>09^L#N+4fg;7VY3DPk^Mn=vL71JDu5`pR0ZnsWhR0mF*`7&EGaTueu&(icO- zksC~?)Fq>?-N=inIGZ^|>#Z0ovUea=$S!*YepuWc(NY82iHwG01MotyEvY0S`DT*U zq>Y_M&{2QD01R?}|NB2ESOMSD_3oFy|7zRFdtvo|?9xn*V;$<)qM)6}VuQ`+L z!vLWoHNoe7x{+x4StQNeHF(Kmi#C;L8k!L*>Cv%@ot=^u6l!R3l@Q6{m1e*`nAxU~+dH(vQneP+LZg(7#smQhOj1SKz6hYgtBEfALL>TQbqf$sE#jKvIQe<$0$Bi#rSog zQbL0&usLS1xzeCD_XqKaCh^Y!wxd92tUPDw-3%XYNlviOC#6SKcH)FMMFL)DM!Rq3 zjQ_uXX2tjyLd*o}WR1I(T)YR&U=y9UU-`O(IqV6SEQyh$lWZY(jKCQ%!<4E-1Q`cX zVi@Ooro7UwnMK`}ASQYDAwL>1hMQ`_@2sM%SMPSAe~qj$5lD3`yz|a4zWBv2f5B@f zl$>hBfKReVH?sf_d5&1?Myo{0tWF~tR0Uw?Wjazo%Ro%)$8R*($Pu9vG}9S8G@I#I zOcJYF1;(cD+$5`=Xf+@Yy1*f?F*P}ZcXju&WVPswb7VTPCRfm}{3#ABN?vBDWS6Y!TRpFN9m}l3peRPDSFhQs+ z*?@NMy~iiS5GkLJyZ8x(OlRQ=;H28wJl3wgWDlf!s*XBIBY$3XF_FW0GPYvKvj;BG z+9`|?VFVqtY#tJ@PDDYgWTF>B1lt1<*AbS>wzIdn25`0ealdc>9Kb(%_oIJctN%Ai zz2zH$e)F4$C7X?EZV+BLcwy=PR;p1J%E{pty<0w(d^^s>Z(d@ruX8(Q((5rPOh_}* zkXq@>0cpO+Br!+wSpsmSstN6r$Ie_g*VBRV*|}{)3Snc)*kZIfnt{U1^%|$OOfFga z1l@L%bEgzWsmwR9dYuCsqrtn2xcvrn7sypaN%4A7)iMA~UTY9LE-p(=GUQis%7Lgu9tTx$Pf`WKsrg_i_7O#0wRRL2 zv?GKge}TzHiaLhEFj+2#Q554V#sX`LXb-=1JsfyE&TLjbzb<|`NI(V<>!q(ZrvKyb zevO2-NgPkJva0CjYv@2B49mSxClz>hLUWeCYw+gR% zAcU6+weWh4FDFl8K;u&@qy_rHBuR!5pi@6e30&u2D>Y)cgym`IYHKGBR5(&_{3lEg zuFidK9!S=TH~whSsr+C^JLXbcgrfdD=jcjHL2BA3G zLPV~uvOI0ytcw?ES>|>X``LG_3V!t!7g)b$P0*U}Glb(BV&gHFE?b0l(fY$Le#x!r z-mXQm$N!NDQ93DZ2AHi(*Ha(TPYS9`Iyaj#VwFIpNo5;QK$7Lw=!5Z;_+Lbf+_;d8TIEx@hGFaVPqzg~&4S7HI)SB~_M z8LY6;(nr*NP(z;54<@4s3r`%YD;f3;kc@jj>TVuPj2!Ngd-nAEZ=b@Cobbx4+z8cb zYAtrV^#6qG;%ID3>@LlEfdH4&Vh|SKeVCR^oFS{i5>hu5B9R=u%XP{x%hOIId;X&L zBDS{wpS?F}x+GZ=tRiEca;Vp@D7tBe9nvg70D)dWBLe(!cC6R|A`C4c)lfaYdP8Q$ zoDrOJ)XeYw#*D~}ta??Heg3(d+n}bZrmCi9=I+<1`n{}#Qnmx#W=Zs&s;ZsZA{vg^ zENB=s>>f$BV4)VC1em!IN1C2JGPIO$w0m(HY(W0C5DZ1Kjkx6Hy(hx|M-!< zM1j5|WidqI@ffa<4|Qf0B!)vLVHKewc0-w>i+J=W0}?5#j50$9$?^_WA0l&U@@J4= zjSL*4$KjIVuNkJ7D5=ydg-&Yh1s;RflGq#EvL|L1pDD16wu!#Cm>>JHfGg+rnFn1s zy3kq40zB;~6b(F_@4f%ParfQ(^W*;e_j3%pE}bP%+La>@<1(!vUyam&7ItSnd-7D) zS$-YsdV;P3D2<$zE;R9UC?qmRgHi9;Wv8kaW6%EKe{jC~Pd$!h2gJwHHpFGxROAhc za~YjIQ9yF)Z-`Y095y7}-W_}gwax)BmR`zoN5;Y6{7lzPn>AR|EAU_c_%$J(8{{gRoI9fpVR#%RZ9LB5y8=};o`fNJSBpcT<$4rqZG8hr3 zks-+jDZJ3G`v*(XqgL`PWKbI-i{kQ~e;eRxk&f;}pv1w4zChOs!us^^Nvr>CGJSdr ze{D5>x$pnvGoI+mP@cXU{4q=aM`di-SSLDK#ZeNpZQ21xL1l^l9;0d3Tf(PfJ@)@V zP)e%KnV2#&6I2G|>X|SLL6=LITcLzpQ3#J1*EK6(W){wBu61A<}+-h~2Bv*9h5#1}JcytL}m2IU$iW)K6xv>)8h48|25*8B{+cyeb zX$9yv98bS`cpMjMb#v*30QLZW&Njdj=r5mt!!ge5$DYTa>@yCuGio#mx3T3XU0#1z zmzMyXWPm)I0i0*8p9o!hyae#!w|{x}+uuguji=jR0>HPXCLKHVbu68!qLwn6L}f&! z^)V$yite!+6hGoRrhXno3A8hlgS3YqPveoOo`mv~-)kvnLBj!4@w26MD5|6xa!!O; zDn@zMMB)#(M0K)2X@pe-4GEm5OgngJv_J@R;=E+Z>~i;44dF-ARL(cwZr|eLvaq2z zy`5@J>*CE+uAuLom7IaZ0f-dGl@EM{SQ;5q9x^>Ud_UL(6FrM^k(101eV&KR(5cWu zj7wBRy1KA}T{O`O*b_&=BVvIey%x^yxEHN84`1x6N&H)cl%gjDip^|@==rMvPUo(K zt97pwxjunC07m`m^Gf~o7Y{jz@?Du*iv6@Kc2a*@#m`&o(yIVhAOAmA{}cQhab|?& zxP;p!$-0z_O**9{0E#?Gs-@C~?Lueg26-csaR@;gS#mhnk|=&u(n9uZCYqp2z@vps zRDDj(r$|4KVv&@wF^!fh!xinRDRkUEy;V3Rjqat7k z4l4sqNfRC+rhs(=5UCrVaef?^2sS+UO?hrsvo$xw4m9vnrbrrlZR$+mV~y|_Ram!0 z8o?amW?RCu6x)!M<^43m?T|URg>Z#pBVZ(@vem6=5}K$WEv(`&rcnz|ka-mHNsC~F zyX}V`aJyfheD440pZz&9J;%5ha#MU-XQjt_emP#c3P_8iZ3>lA9!=JiGKrB6g}(w~ z8VBPta3e9rW1#fi1iV!PLno!l){GEkKY+z9 z;Upv?7#?A@6oG1@ICnBDGoi-YQ`)>9Xc#uwr1JosjiIvDo5YLGv_IFf)a1%2f|V13 z<>N%AQY|!mcbC{+&+@S=ai&56E6GwVNqR|efiI}=+;6ogMxoUt?c)DnH87SfpC(M$ zBOlGyQn_*uMs*0%;J%A1=W#`;^9V)P{Av^&>_9t$wP)9+@h+{;((>8C_h{q^8$$b| zKy&+}XRPOL7)had8nh2&H+0GrS)p7TaQDDvHq~YeZN$LhFapWY=>!DDSOjjFcvd@I zlZPVwQi(2$mCyVu3%hv`e*ptyTPPfvJ_W*VoTvU=impFFa8odLal4t5b9@KIMR+tM@kJ;055kncu6@z<>39$Xmh zkmYyS)>?a4&~_~SOMHPhDQ-C)K6xx_A3c-`JRJEZn`GBGyP0%Tkg#-9>Ih>Ez)j@a zEM#^L;_U`uoB8zuz5vScm@hv09Z>cusHL!IXEL}mM5yX^6i$%FLZaXy*QAiM{hW>y zC*rJz&a=~7`nO9gYA*Hn+)N$oFiDxQ^V~Dg0x6&ddlRw{D`-{f zNw&wBKXloiA^T#GU#3`Z=MS&M!PW;Aih*2p18X&fxHIw9ZY4bVZ$Xh=hzf!bbD}Y( z+iuNQ395(uitZMJC4Pp=TNt69%9FEc6C*MR6qs0ND;n(Hx_Ejy^$=g{g^8y?FSMpx z%@&R}^N%Aia(@ycBS=S;_MVTszy8RzF9D2QJCM^d-tsfQsr*s6G2t|0WyI%jyiq1c z7Ltan-PorQ#X33*YB9wIm|U$lm2;0wtiXs(s_FzKG_{Sg%_25Yh{p_e#_26J++oL@g(zW0$M zZ3Qpao0h)9(T!ELd13R zV+zWvRfWq$1-l^^Bcb-lueyZGoz61JUO-7`gXpRvd#yM)twy5MhE_N=Uc!+cZM)Fz z*C$^-xO5CXmtF|?$=d+RC`J6`>#-{z;OX>1<7^MvslA_$V>y!qay00a01mD- zPsHdGKjec#Y-SMGS7v<;#p;np$RsGsoaIvZ+!#i$#nMB^zFtg&uj+4MY3TVDVk4y1P_`%kh*C6~H-Z$y856 z8Y|?X8`A6YL3Xv=gOk2~b~!Y5I4YdK3UIm5&$vfquGXG)|5^IKn)|mh<#%u2%<(V& z@a;K)v-*#W6VB5w#jh^?pBFeR0Ey?1{~u*g=JC~(Va(8aK5=w8`bZjngqa0g zQL|%WOPsT1U`4VLEv^y)jnsAM5Sz|KGN>y_0?jg5Vvqo-f?s*#yKKbMXpEB2_QE`0f6OALh8Dh1KT^`NOEhh zif@(yim3#x;E8o`53&#bsNuOlf}VwGQ8P?iU@9T_2CT&KE(V2lk?dnAh8sfWNC^~s zw1yVt6DpuZvM0&4*X$B7Ck0RG(US*!%m;bkcG4+^qor_A6yqZUHGDpA&Qm#}0y8cg ztysF83ZDgXLqG(N9N-^uBlexR^{+J8Qw5kXB@g^HiG+I5JTjzHAfpN0E zn8GMg+B07Vfy4OZ%?ZIc{DzHeHo#hcXLw{q##3H7p%WgsZSa8a2S2{=?-sPc3kKqu zqsY=fPxH)|b=WaUDhD~aph2P6`09Q90%0VF-}rI=BT*A zenau<(tm_Y+bscXWHh#v_nYOx>E9N)v)>7(cT7J75~9jS1wahN^I$_K1X=KBqQj8~ z0m^fv&<%_kONE0Y?RJcN;2=o?^eTgJ!?ReaD&R``%rxwN=U{fHiJ&LO(Bd8XW0b_{ zV5wv&r)?r17Xq&$KNeWPN;O!B zW?Vrp;I}Ma+#Uk$9>G-98itafK1IvCqis~92Zphh*+DK%hgt17B#cAw^yv!WbleCb zxC^We!<3Q8VWhmY*g6Aj*EXZnxy&7LOA}~$@H#3CsFiQOQ)Ra$P!XMqVik<=@)R_w z7qEtP9g1W}DZ)OoY9T0E6<7!75AhFBf>+<($j|BToiN8N@bM;OK3umntDq7WTSI8w2e8bRgC zib_~oH1)_(&{ieT}Ma%huwvGrzI` z5ws?sj5*D-1WjG5mm4nD7QO?=G`_)a2uX?U-WCR~opl7M7N2R$GnDY|&b_-2`N3EA zS76n&O&JQN6P7ZLob#bdI?a9?RdDDR99YV5$5uU(IX6*&`BoQzWKG1F{~`lM9pz5a zDz!X+dp4P*2^$Lgp@8Zjv*bu9)#p5AhKB&2gVHp02)tsSC@T_?tN$}?+aBF?nA{m@rX{{5>iLQ1cfa{J_rCxAqu1X( zdH2aLo!#^j050{iYdwoMv~eC(JUfr3JItYjP(a^9Zc1rC)+ufPP|U&xW+%Qz?atu` z9XOw;pe=6H!W$A|*D{fIxZMiVe&up1_#l!Voo`b)XsC zDp`w^BoCaLA|itxASzLmPzaNF2^`mdgpxa55Rb7$6{x~gtNaqvn81li9Wzfq(diaI zn*dr;{BJF3!mH>G0P#zyMwpYWH2F*uQpu%DTuxM3+3J-wCw)_SO_>mvNKoNco70U} zjmnr6$B7AI=!2?LL6XAKN&rznuD=HC#zZci$5)?M0ho1+t9-}xO z`M+B6mv{-_YAYX^@&qybeBr~Br{}=f12_)SQM&WoOYv(T{HKf}T+zb(bG4gh^OAZviUumRu)sWl8P5b)^1d$jk#V<-Bq zO!6&aly&rm?0IaHVW!71_>g(u91x8$9K;y;Tp96~b7onMc29CAdT1$VU~t)QV2AQP z!z$K?8EU~nFwL7D@{r+mQ-yF(l&wgqYmim=8_C5IX;|LXkNron+23eS+i)Dum?lRP$Qse&10F zfYV2Uof5Hpm#B}Z}#uCi+>yj3XaJVn#yAVq3mDsWChO|i;rRi zQhbb__k~%3^wD?wn5Lnt6&ap^^P@YHKoi~2A{pBluy7d)5*z@A$>+fIigE+ne&RY(YfeN3p z_X}OI2;h>|Pi47z;0L$*sn=SFg^L>+Ub|PZ3`2QOUHHSMh&=IAJKV!XHm>X^`==g~ zzZ?nVA}K9FHPB^>xfx(D&|s3Q%E33BZv%GuUPv0Z_U3s3ne?`@Q*1vwGVJ^|K}^cwX~ z&9&)B1xM-nRN$8R*f84w>zuYCj&o>gYfdzfG^l1QlC0=$IEZz&?%WWXHLx;eg3(y! zx_^^Iw@{8v6_;ZW@>r5cQvBTqen>#0dwx88a_=~9BFwL-^-h#*1kmttB!N1^68NoV zgtfdk3_ugJ0P)y#??(MmW@9ED|NLTNZo>M^z_6J!}>GT7WCga{3=8{BfaFqK(y000^ za8JRhg9HgJ@moOB3d(3*4eOp8+S33sERMKN!)ADlvQ))7G+g@5GaLO4+<+YP@dUK3 zvO|-LVbNu^fl(KLR4~;D`nC*Gz)``aEavm|$Wi!s8U77Ad1^f<+iPa}$JnpoWpL&C z3i=Ws5gxjuvubJQ$JARGA)odjQNs{_x#*953JS6JM|1ynpll3#OsYs^I;w-p=M@NOA+5rAO1@Dt?ys4_`Qalj21O%T?7oTU0dqzeVkQ7$nn6M^_N=C9V4#xJ5 zzQ}ZFFA`lM`M66#MoSez{zjg&7^A}CybP$wDU9S!Dx~R(SXF1;@JKBF-zXrIH`n24M6!)%_f?=WoBb zW$FKOwD30-#=D2t_r=ijqYwV8+GpYX@qZSWCdW@JoP{lnOUl%GChKG07cfQ1Kg~l* zg86VULQBF3q_#6$_#(fL4f+@$-x2ns#(py>M*%%n+($=FqqB+nD+;4J(^xXH>(g>s zE&Z0JRjNb?WuXLxJpxyat@;WOEKnN|dLpz)1#Au_u^0dm{FxJAn}N#am7ijiYL1b! z&`73fl9VFct(6T_0u zkwEW3SwSEK>$^bcLAiydaRn@%I*az6zKat=7_JQahdrd&CXL%A{LkvY9S&$ENP(p) zXd{CTJmMkpK(^yu;P!!EJNS44I=}uvsMR=ku zy-ONm1rzaBe&6@eY`Fkts1dcq%Q?!OZ}&ba`W4hR;}T%$v1QwkcpKwv3)1D#r1XZ3 zY$(G*W{6Lk!>NUM$54S#o^P$3`q#q1fgoJu7G(eq(iWt7IN7?YgEVut=>jMl^V0f- z(&GQ>BTx=?;7-7Ej(-=hcL zy_r25TZJhs#`)RSoUWVBcwz*xxft+gCLxqA=HaOxj|C_Z%;z}6LMc~D5+`L;sZwf) zc}^)v#O&iE!3uU{d^Db3;ReNYkH)bDt#@?jQo!Q+5$0?8ynLZ44?}6U}Ldxh$9$VpP!7VL~xt3&^a1Mo8dzc>bB)Y@14*1qX*!^T#J+- z_`V%)NVHOnaB1wgQJ5K+du@eOARxGppFDp4!aDoRGOpf8ASY7d9cONp)64-8ZtYb-+gWaX z5GRGooV9$XMyI5ps$wfd>;Q1X{&TBknCX?H1eqZKG+!;ULY+n=7A}g&!GlO>_%;*W z9I3*zz^4V!S0iG}jHI0bE^?650h8q|#gtMIOA3(`7WaKepdKK#;Eh2!C19x#1YaEQ zt%@x2a1g`|;H??GIoy8)BQA!zr*X~EEhut|_GMyyU`HBEt`Q(uu+lbbTr7n&6)&lr_11?e)?*5gX> zr;tgYBx6OWLX-x$|0CaUYG`hO$YpPq645`g;o^FH`< zwC@;owr)_TClt$3Oy=zQghsI;u4z@YbpWif#B+4h5pM}jl@nTu;+>`ls9WNcga9W| zqy`cPR%}lzodj-*3Ir8chrpH3ba4cc8x6adRZTT2Ed5o^Jy7t(c``k(at;J@H`ILp z=GB-NJQs#ct&Hlf*_nn#H6|6YE=Y!P5pPAm#B`tAYAk)*7Ayxrhf6O&cL6P0dNkYs z#xPT89}!yppK>u{I0Ae8G^joVUU%Nd7eDYjNj%Tj^8{Kbdv*7SBO*HNAS2c>dr!vN#c-2BXOs4pEUhrO=?Rk;|Jj|i}sdAYS+F>%ztNRapv zY-%8glSS+uaMpJnaaZJ5oJ4+Vg2#HU{LaMS_A}4y1h5Uj@iB0&@6nH`d6aqa-7Drg zbIfc-_ZvO$!L`>f-*NoQ|Mh?Wi~r?+JF5Jg2x9Q^?d#L=>eT^_InNQ#yBt+ZY(}c- z6{W~-L!Kr=6-0)!Sy`33+dY8wEIeQLcDVwLr-~0yAtpF{%`q7_M$i-kg6=-Cq(F~| zrt*7XGzVFTslMXuUkR&V$;vJ1Q`v;GmTruY!zmRQX~e`KT;npL#LJSVD3Z3cM1X1w z6^(2L?Zjab=Kwd;!)m(oL0@7*olmvUpf$~&+K|tyDbX`Mw5m-MCUVyJPM?KTvV{k^*{-tCFj zE&*CQ`cc=%Z{8ipM^*SMFZB1G@SE&^{ozAz2wlSCrU(BiHiB@e{7tv#tN+g58mE=8 zgc03GT9j{=(zsE^IUIDxW-PU0{*%dMKq7Mll+`?}AL7T;Ua2Xr0INLs0?rXp?-nUE z1WBsDfC^;LpAl#lnN%oSC0RX_5+qq_ zCXs$!b|#E15uYeC5rBxNHSHP=k+bC$G*JN`XyPZ$Hof?S_>EUA1n?^eeBYE*b0igL zZ3=*=vO0+@>(^`D0bE;{XX6AzG9n-t=9WdOEU?+(jBF6q=#UH<>wH7z#H}eyoGJ#1 zpXwW7a6bY$Do(wV)FHX}=)MQwLN*_lyZiLnV-A4K>i<`K5oUjb!l@aU$EwwS4MV$Y+)L* zVf0W{EQ@3e0#Q&_B~kBIFvtCKY%MT&!ycM&6gLP%?7JBhh_;g360nm>xK(9;rpyuA z1en-J4a%Z2s7bv&sMHZrIF0av2Yw5m%V(L9FHZQiuzBw&wGm;G^rLlUSgYb74uI*q zVS;^4D-+&}iJ_3hlaTPy;1gGO)u0O(h1L?se|% z%u2mWi|MD4jaVW)a%XxV-vX{m0oKE1K{(NNj8v<1V@yO0y5%z$C{4VL(wF15B&A}q zHUM~Ro&6kZIi6)wNQLMFa3$;SFeynB-*Az5ya@@_~85-qeSxrndV@`K*=5$;FHLnSlZD__vIOpEaVuD5v%f+>dSXo%-q)C8djT5z`}bOi37d;i+QCf~+sX z7!bJZi(kO$caPa6dHn1dzgG9`>GLQ2zBGFSKzG~5ZGE3=lCiv{_r|WFbr$(CS5Lm= z=K^R9lOsQ{04)FW3)Nr!$(PTcJ!996l6J&n)bA;f=kfpbt^G$2XWd_MISc>MfAx>g z?yifD?Sh>MMdQ5dgiR&XAG=qv(T?o`amp-vzy62OV0NH z+yMqx!MYACrnDq6CPn8Y(*R-7F!(nfqJSuL7Q zIS{T#rn=AzA|`}|%}U)D-}Csf@XM|KGerGZ<12rL?xV0zDE<)#J)U1~>E8|=u}k*4 zJxNZYkqy~qMB!Kx&Q)n?ngIXGsDkl1Mv$sdB~#HJ#6Gu|>Wr~wt2Jv6iCe5h`mTB7 zKR+R%&EL@QC5Kd@FaZ5SMO{`g!4siefSm~|@sV@;TlG2xZ?!Z6pHYRB(9n&v^)Wt1 z8kjbXLz7tOYjqgM@B_z^I-h#Yx(VY8=TQqqxMCt74YWRyk32ua@lj9nMWra#hqgY3 zv-sSJ_&a?Py3x)Xo7j*xv}FnbjAm6~2*kH)vs{L1ZN?4jJPmHnN@+n-R)-jsJo!e5 zLOaD?F=1wxu?7`xvW^kO@X2hPGns6yU);e#Z`_8_F4AC-_hZ-A1rQ z(OdtlX;K4RHHTz>@5r+&bOjY~eV3zUg#3V1M&}{vV$T|Juj@M+7c|at;>D z%a}a?q}{?JmPA~Aut!OulsRsWxl)q0k>y8ze4gJ)DN|T`Q3z1yoP@{jc*TLqHl96o zM%3JDF}08{)^&p&6;|Bvb`K%YwZ&neFyz=MZq;u?EyfAD`AI!3ai-K&rP zAFKa}Eyqb;RP%nov&A$-e1@DR%*q(zFZ>b5F)BGy@f6~8nM51HRsleT6$p7CFs_D9TYejfJGaUfGeR9~gSBQj zuX->=U`&zI&lcE-jOm$n^CK2pNYM<9B?>!Er!Zz`83vOzIAbld3}T}Xs$p=;yofne zTwniyQcCH-K`}%PlJa6ST*efv9K7yK^_WsbVAYg6ofqRy31U|rF9S`h;hn*ha3d~k zV3uOvvHojQZk&uor?53cDY`rntgGR%x>N-!_70C%e=g%lIhvIpR`t{+Wkd2{dI(#6B)wWsC2)Cr-MWB5M9LbY zh6!|qjSF!Q&LxE&T3AOp6=|_&3zj6inB9}ZZvZf1_5dc%C&zimj-TFPSe}>d`uN@m zF32f85Rw3?5%HC&fI}DZ91G}0M=t&yx(Z@9;<;{X4I|Kl+v*xsdj!vwNO!5DKJ0Y+?|x925J+#cK&?L(=0#ke;uRJA%>$1C7Y0uhCT_ILxy9_JVe6cb2cr4_x& z^03A&T)NI_g+0i)&Bua(l*h%x6coUl@@cA^A|Cwbiok|I#bzDvPeb@_$<3sMv-U{ z_{1{|3aa*ma`NnhZ$nWuCj@S=FT*Qq_mOzT{voT;tR3rTvJy`dya!T0l0r;z-3#N2 zLRbOJhu52#3_wz(g^`PPnL^7(8n?V*wxV-~=@z@2=k?vY@moCz^Lz-BrT^D_=I1r* z{;yy24Ip-);6CCP9F+#i;L}We=>LZgzN5nWIFh+6eC>gL(rTkHU`CA)10@u|-gGLF zoU>q$OwRzA+#}_nE%%~rIh{grMT7k>$l||?0yxlyDKtw`Bde8_x_SsU^0EFlqGTHn z?8ESLz65##72=fT{p5I-9C<0}S{pWUV5dx+Q5mcIH-nHU|I{ z)1`4>0wn?`5S}K8gSn|_5-jwvgas3hB{YqRl#_kbP-)0k*J!#oy>X1%>*Y3>wR;UG z|Kor1-%jdm1I+on9DT$s;-s8vUY3#o5WtGgpgC9W2V3$~d@dbwj>EN|2pOlq-l;Z5 z(0m)Rb7UTR!Z)0BIc^Wxm#ak_Nzm1_MLV#7rrZlNnhtkqSj-l?2_i3JD_fU9mt7@= zL$Q5gIIB`eXg&zEXo#fBtC^nSx-C1wbQt_IpD` z=|}yom~W|>$p3WA#nyqdcEgL9Yrs-5;~csT;KN;EwO>iwEN~IRp=MeJ5;&gRe?aCa z-6}z`h7aUjgqKh5;OOl@wBdnn%r=Ju5C2!;?w}{El4?hJQGN+tA_u+taQ5&Ub@}+K zv(Qtuiet}PXpcbMK~fn6*})&glWhb8@jO4i{r!vM7&Jcb`Ieo4L!p04i%i#~??RB) z1Jf3hqf`R$}M1JWrRRQ1&Ku(I4ibxb@ELg9J1y=-MW(Tf(TpK~)ScV&P1qso+@j zRGbQE!W@84Z8?cS(;%%@H&_OtiAa7qcp0(5-CS}yBDM(=DMNQ?At#e$0AdeB^G z!yGXOa5X&>20B+Fg_CYLw9L<=iO{G45kU|_f2ve>fCZCNn5lBL7P<@Pjl1pDzHP@B zHE=q~^sxX(836}D$aBaz4s!~08`}W;?(DkpqrcBmFGSze(0NkGoF}aKvFK0an(Y67 zCtdmhfZLgIz724-B%M7Hvpt2YMNTQK{?EEU=Tqv$n(1YcSyOX(OLbAxv~C9b=Evju zj0LxGB#Ye%f7kR4cPzM27hAJLTi}knE!Am*MjZ7hDB-+#M9P(mOiJssdlVTF1^~tg z0<$-V>}#NafV5)1Mkm0T#5t6Bplb}Y9@-g|5@j95)Lvni8qA#T589*LgVd-k@vVeL z0P5|`S3!xtqX12=qQ+FZm0}mwO+|`vj~5{VAA)C4#;(i=cw|ffKvKQml zJOVWf;RBz}b0;px47NcEpk#0CnhaCuF}ydXUheM1MM~zwQCP~Oe$W_r5O6WWpO^5!Rz&zT%TVD zpdS)Bdy`L03Vc=@kBg;HTnIm3()TnNPW!P7P_q{W=@@~uTSt23XG@00cX z%dIk~hmtUwhr|X?mTY|!Jl?}z;Exs0>2nO#8b6DQ)gHtVlTU%xsVJG zA0;M*!mxTuqLmyhpQ#{WI1>a!Q4;)xVLH()-H?cqXov@+0u}9Hv0V{)qOP$j-SekB zu>9aYzg*gPfO2N>E^Ob4NchMYYb8R02bp9N%v>tPXpmoG-Axgf{H&6WlqEmm8>VI~ zkE?!RMKLkSjnRzhPP=WwhZ}jwTyC@)Xz$u90C8IdoZz7kg8Sx!4&FA=W2mn=fB&z3 zBWAo)(l)@=oq)hkk;`Yi^GV7@G%A)d6*8ri0IOY9mi2WaZd8?5eVu!9nH)>A@Z z5X=lnwcJ}$D(FfNI7TCn`2E-xh86qAkDq<%N;Hp)yI{>vBhYs|LhiO$JpmW!H!P|z z($Ie_2kUbJfP<|A9y3R6K%3W%*@9|ftTC`tF&7A0c7lNn-pGz<-xI{6PY~zydXZTcVv0D_gWU&g(}?Jp14tq$@9SRz6|@{AMoYWoAqz zcgA8Lu--9K6}pd{tx-6DX^gOhb^~>2bNP)AR9O4 zL|m0{#|}-F3*t7%MQZ~2*YT{8|1^@EicvqFpoP)&WeO%ekpRyG zI6?$*B`UDSGd@19FAp82H}x!pX~H^`$twYd?b431*UM-}DoXS2lOG9WD|Ggu6*vvi*doQu!(9P82KK?; zXr#C83sIfp)G?)xp4CGd=UI!CtZ12TIO8X%L%U&7mvqaJ{wR5|$}U|$f`MPbMYdEe zF(f6ds%DET$XJ6|>~dm(2-x9-g~c=&684GaraaFE8(4va^kRWr@;%(~Y#6d_($IOL z-H(_7aF8w{e2%e8s}%Pu#B{--5or`Gt|6hWG6)4R_^Di77o2%t7k;_N|F3K9qtcMT zk1F@qROtDaPwxHOfA5!D`rlH5Nm&BVAh{$^p)E1@hTcc`msB7O9LT%^sO9yRYy)Sd z7Qt5KbsN<0WZCSXF33NmT*{Y<+;p$CX-$Ry9{I+Dh_wYl8@8=HdJtDQxhx`9vE5{K z)ONGI@gLix`0nuPhqpshPzAceQY=YRgEi&aM5-)FBjmBeXXM7IW&`2Q6U@bX<7zLvMZ>3NM=2R==bOIp{+`&3NL(N7#P~Lm2aB3pj zIT2<=vD0Lag+bA0Cw-JDz>SPEK7xNkn61Uc)m%7F&kHhOx-0sC%}K94|L!;69*1pz z)^K$v;1ID-ZU;B$#yXqfKm6ujOc_{*?wrai$C)jpTnEmi^!Jqk( z(MoM{&s2rE%{s6SEenvlgdjOvxYQ8hMN7&FxXkP=ohLIjYA4NDlcjbV7JAeHPyHT& zJ5g{d=q%6)Mlz!waA-x+3g-Yi(_pOL6KFdElIhS$SQV_$$%Y3@hOIyqTgI-5iuil4 z7q0ekD5kRZ2u4ldPdzjuLoz-khbDTf=1f0|tw05$>ZyJHYhBVXO`6n*i-D-5 z$|w`pS#(p-fyzx3tZT)N6pNTLz_^*9otjqG{m$Sj31>oe{T=}2s-G>oejDKG9>7^6 zcaC-c^TfY3@z47^z@Nkx7X1j_lW|tDD4X~@VJSG^~@iHcPn~JGn zfn`{TRlK%q(pHbe6W}S9QL$?lvCum1g-QC^GiK*$(x=0PP2rh&q&eHsByz3E4BjBt zki==O;|S=PDOW4dJ`EZ~*X7=j(&;HD63AIcmW`6#4!fej?vi ze|^y}hXS~d2s@ba0p(r===WmT6;OQL24l3L8NL10Rx7IP*u#KX{clR(r_xm=(eZs) z*^DQuBIYj)^7EGQXeXSb7*#-asZ!6eQjc`Kc9$Ns8$8i@*UyBw^vP(1TkJ2|(mTLz z{Tc{ntNZ#ns+>@hlrLP7=ecjF!@GRw$MGRerdwcjSUs$CHC%HM8bw@~7B^_i;Q=RX zh0h%D8ZRsXJD)~h&+=2wLAd2?3i#=2-b@G-J6`*}d7dr*K^kri-~RJ|b2Xnm02zNVC__8I&-0+2E-*`(h(x*2-|9Kv#(^N8 z{rAN$I$8mPDRS8-Ifx>nb%o{tmc^^ZEql!`av)0#C@L$Af)AkJ1~K-h&7rACBBBI9 zmi7H?{8P8X{ESmSK2M8u7;WfnDm-og@TnOdU1tk{tpf0Q`|9nB?_R$6mLJK|BrNR| zO=&_`=pPrT-O|#_)qrrYMMr4wfId{AswpM%#1;G$!A^u0bUvj}%@eEilB_$t7N8$a zNGT*zQl*PE2sl8yg*7>13nnEMl8}L~b4egpC&Df&D?h%8o1D-Gq=~!chni)Ne9m{4 z>JqJ)ISxB05*=KI{9o2uuJ*$ z%g2wN@{RyMUd^Kao0ohj>AUY=eE0qL-?4?_7hd=z5gV9bN&v=#C-l^9hde4A&;GL; z!GR1sW$~mF?Ev8UryH4cM;wYf$Z5TQFXPqG`vW1+h-{0c&Jo;U<==I#s791+}r( z9Qpek2x^VmwBxnT(hjo?Ai$mSV^^q-tWB9cG<7B!E~s1_*lM+m2eIe9jX^S-Nd@RZ zM%^38cIkjg49IIPl=IVsbcX)5In5@xf?N3h+ZPbpuCk! zFrtA>CvEyqrXM|OKV+EH4<%sMIZ9HUB9lI_Mx1R?N)r_!2YYa#m7P9lbf#6W3o)9K&_nXWfy4yg>%XeUjLqeacnPS05iW5{yY#Y?K@? zOa3c{{Af87#+{2OnOIp3$Oux^t<8Th)$|Sof12DEidyV3HZ8^0q-Wn8AAwvsU?65y z9K1M(fo+^ZNkF5P)rQ7Vs!_O#iqh5q6KHlL^Whc0@+2N(Vccwnre@fOovh)}C~FG~ z;A6g=2v5LL67N|DXBRP29LPmO_>Ui2f}zo2)Z-xyB z`J%tvW8Q$Za4g`85`(Y!+b^T$i*k5k+VtQUUYH=>6cBBXCLaQy{tg-?mesMWyzm(I zPAzYzRU0ONfRGJJi*7z#&=J6^LQrI-Y$1qdqY`nU>$tAk0GE+qB{?=&J!{vBOaGU& z;NExNPS$Y-m}CpIprK2#=1$u%W>AwYdYlwdypSv1 zA)K`4hKiZpGwq$V8ExEegr#%1Du))U?3(*`A5MP>Jh0>R0Ts}kCo*x))0AN2*05k$ zAr*kcTZY5etw(KSE?keDfFp7t`)Ax7I|2B3KPBJ+-(F3L{mXxq6vc1nC&>N^)J?4I zQJJoMC38CDX4xf$Yg_rJ%Fe0emIT`XNKlAkj))WW4stToW)%XafP$KVs_`J4gi2$>-GJT{QITVsJAAcht5Bp&PuNJpU<>OAeHsOPi!#>XPoPp~lW{aQ zz$y7dC><0gOp+u>{tj}h?iaworJ_~)_e2S+*!Z~Tl1Z8}fizQqcj`FL9>Doa0KQ!M zl82TJp8a#0W4mKJ-M0B{tp*0N6+Ylk9 zzi-n`o;6t?*shzU`obE@lsO*%Uyx;w0rpM=K~Y3hDc8fn$!Q527c%bkVx7^q@n@P|SgJ9tw=?o_(t zpyYX2gnYD2#X^1H6h~}Q#-JH~c`6L|f*SkHrc`?570$5E&KkWe%4&~D^8x`bd~cQb zatW_2V}*FAn$Kyu|HTg;@QVj8>DmwQlSlp^J!JtHr^27khEDKs>+Z3yB+&{5o;-WZ zI|DQXeE9t0g^T|$U%ljACq>upbs*q{45j5G!hibT|JRO__wLQQKj*2WCMaYp05fJN zc=Rnc2O)&ecqOeONY_$h4+QW~r0?|(#HjB~ScY}=G`w$!bDGdG5zZ5U=m9U57_Ff# zEl@5!$kUE#a@LN5SP@3*fiy7e^9myy19lWO?RR~j0-n<^U=q!lG3tBU3de(={fb6vTM`?P~rBG+kK4tS+YbB9BaEl{ zuF;B${eq_8*rHfWqg{)K$3|van zfArzf(*OHE`6^pUU$+>K0kp1^Up` z04U7;as%0i>siw)?5_MQ-Jflc39j z8)45i7U;w~UfL1b|BmT{m@BO56D`l3yN~QJ3w1F%l^TC!V?ojgF`|B46jmIHG4K_! zyrq=j6&wjpb@AASJpnU)+j7~uc9q7a%5h;hZygZsdsXGe$NwictRMriI*s#6p)^M4 zB6f=JbCg>rt0)hx5f2c!ENy&N{v`^sYRTbC>)j+vFIb0$V;S$&2Nm^HbHk|M3}n|v z>_j1}q~h7o&;%{_lV*e!P0}`iM|T$VMWd})kTSWj&KULmbpKwzddIP8{)FqX6F}q> zs@+`lWb$q~%pk}fV;OY%*7Z)zYxX}ubWLI-aYZ7*sX~?qs>|ids2ozaC zD{4i6Itz6IyMwXRlnTm$0wjzP6zFP2o`IT)2r~y41y}+rjI8i1k8+Grpo+DVCID%1 zNF>=~( zR}XOgDker>D+E+E#(zbb+P1;Xm>12H2g5PO5#x}DagyZJDs)8AU_Ero-zOBfTHv_l zA`vFSme55%bhb2&NS0w<{=2Et&!B@X-QEMZ6swR;Db@+&Biw-V?}TCK9Y3B{Wk%X_GU5BF<4`3zUt? zsKI~0gb%3!5uUlLj0~%d)r6IYZJ;dHLj_p3!eH-3i)BuYh}jN6vycdjPWyFiZajFg5^ufZvnf!e>yI6WVvX zw_m(W{AeW_&Go;oqS3~i=}2^>EdkeDP(~pKdprc91v#d-Kx01bLh|(eVkyMfJq>Vn zJ$eH@J_k^jf`+%WtDhl!ekb6aPj)lYQQ(zAhi|l-Wn4GI;$0|H*=_=YM5t%7kqd*- z7#<{foChB6?&~fZMIUEo6@i6&TXer9?z`9*F*-9k4DiL29zo>?jijBY7<@QO4!Q!O zHv)cO0W0XU@mC<0L@~E@FK97NAO{LOK_v^x`z?klo7pDF_W^POUxoKaRCTVkSfui! z2ylr`VPXCK9q4%e<+HE&!PMtZ*p|R4!<>>{P~PM@ZXp~YE2}hlm(I7W{!G)9QcHYe%^?tG5Qs^dSMzoa-*8NgwX?z}kC$l0h@;E1`A+ z0|Z^n5-o2DaD4D-IMj^B_@KYeCtvRkEc|f;;1yp-iV^SwhWS7~z34Zc6d|OF+6hb@ z*^kWol$?_d_FNEP_{LHZO(*I}H`vQcgObfZx5HtF0{e+JC_nl~M^UIv23MmMdxF9# z2b{($J#Z8df^yJM&pPXYgSCpJSywQe1^L=R@LhlR?SpDql@1mi*{kVRQ)WaP0%=tp zS~6|FSz}%X?==WzG>N3Vy#YIY>i?lHOt`zm?u9=`JhKA`q-9@b;5QEt#@BC|{J(th zilu*k=(s2MU$MDHKLHfNX$yAIzYq?FAT5{t%>(r=gh!3;0+~-I0Zo=%7wE_9l0P90 zqe^KQt*M}u_S!)cd%&Sw$pW_l=(AxMxAYpqAcuB<5N&`)6|qv8DQ&0DHhl~wu^yiJ zY!Ieeijzjrb@X`h)b~`CcJKo=I}|3!2O9!Id1 zaR!2m-y*ongBcw_n7|%D7>IxnZU_T&0iPyj0313}`31nHhcuB4tOg23Gl}zT9EN&O zLg#K|-k;KTZ`G~MhG(mPafgq6xx;kBfh=*vj#-ahX(ZZ2sLXd zAvG(80IM9>oT5}B`BFH*uRQMMe{!if$sIW*{P-}Z;^t45&564LUr_c%Q*4%q2y)$u zaHx3cMlRX}fqU%RO1*dyCc4wEA@XxE(>wP7{_NL?+|{hllEUu;eHJ*M1<23;0f1{C z{6EKy{^U4PM(>W>2GCRPNY;^iYh;`REa3>i^n4?Ovg@#j^k6)*2{}qYr~5Uh1dDVi zMUHo=gr`G#6ITo?V#jto84TJ@M?E{ZVr^)iHnB(!1C0x)e4{rCKB5Q}Hn>0wzotfN zJ+Dlg7Dy>usJYvc$XdUtU)*`~0Vh*kz_jQAlfhp@`q&!>9RN8Zgu|k9G=wwiIjs+a zMJcLLHaKQr2)E-@6}>W%Lc0P7#N+tY*I)hVpM3N8fA#A>`{q|1|M1WL^xymU|6PuM z>mU3BK)<>8{xJhLiR=M9V7mGkm)DU1Jm7{SK7VypqyIY|bn!W3A7Vf}TuKmuh02N! z_TV;yg6IL#!Gai>!@G^HcM{@1rv<|WMB#9f{ijM(mV5gy!BKXch3HUC4^qJ_U3>Yr z_;^HizqiFAFBcpPU7(gs*s8qkimUg<-QSTH7rjAwxTNctsF0$Y;qXPQ5i@}Z@kRTBD??NgZx=HB8WaFU zq^D1u7fFYtMTi~1EnrI-p#mP*RHSaiQHxgQc=_Tj$Ay}oa&x{JF!4{Ry~-+g zpAiuv>Y%`Bn2*U*94Ewh}MO${8G}$2<6c=p0u+^7dhT6a6ADw z?<-;Zluu~Wxx(H$9q}FQN4&-B%$}))q)(VVfMp{PB^x}UvP5uH3rS1`WEzL@K`m8H z&J^eHRZT`2xa^8aDpjpFy+eF%Nm@qJSnVBZBce2Cml|S=%$bxaHnJZ@ z;$^8BVX9oCgUoTJmGmz1PMio6u`x0w2J`NLM#d&>k~+sJ>)iG#0NHH=oYgb>_1^rv zl>Q6d^0?hE1o^KX>?i#Iz%A&ZG)l~m1w4#filn^)VOHgNzW(2q6}L%|mI6^#XJ>iF zr)AOE$Neziv!_p=qQ8u`C_WN}3XevB8wO-nQf5(9QERzGH-+HxoQqk61Yad_#Eqy_ zO{GRh^N?EGadAR@vJSOyFcNOsnsgwyB;=FGAcN3nL$tw^p_Md96``US4<^h&{Z;e! zJ;28RNjM`O7Jd!%y9Y5^3qdoo8`wt^;Qlui$Aip>Zbs*|K)$?`WP)(%q1 zrG#wanTlGdCTvAAx?PZfRm^tQ5oS}tvwVj0p(p_90StkaiwVohnpK6)maIH?&?*_k z3^uflS-7~EWW`k@AEmnG2DF%UALU zYSKi3O432Rg=uVnTItbBCCxDFt1%x6Hok9JvLQXUMR#JF0g?75Sg!UfoH9^YA~`&Q za1zlNH5v)5KPiYhs0;j{F6j7Kb&;mSm|3vg46=~qe2Iri5nv3$y}SG{GQUX52VhwJ z=XZSh6ue(}SuX;}fXHg~7i3auhy{%h!1JJkS^DJh6P|za!!B=l+?fSpTB2RP_VX5Z z-cAP}2uFMXilF2?FjsN%CN^nqo~=?ORiu#1T5Z0K9!?rZ$G~^c5;yIXTR5!#eqi?W z_6+Wm-yyJ7ZuX*XgXRhQGKMcUm!9$)d_w@)G!PN69B)`Z1iYL?AIC;QR=Z~K#C7`Br z?CQ3kZ+i8@Z}$`EaaXIy}X-#WkDc3W7CBZN5G;?+gw2DY_RikS_Z&|G=C}z`~ z+&3WRS=#BA1k=Jkdgl#~*Q90+0|TV(aHk{Cr#ym(3kN-{hyH@z54^4N;`^5`zIP8m zHL=Xw*ROe%g<1Z)H!s2bozhqzN^cwRQa#us?KlRI`Q|jc<9k-3cqP1fdE3W`DgHnI z5C7wpN-H5A)2|w2+KYd7lKXQF;xJCOH3lL)K612piR2DDUgnP(@|o z7owatuLD3;#+{m|(mt)$ZG#%NAl_OfE$2cFNE;~hdpOL+h}aT-!VbAXO`l{C+_}T0 z1d2YRv4Sn`BNDN5j&L(v-tZm(LPJ{%!rA5BH{Wo`Dl6KA>rKD#djMzc|47s|pMtK) zA3?bE;Qu*B@4k7i$M$hc|67=@>5+4o6CcyE(yNhdnXu%IdmV{P9Vj42N|uXO4vHz4 zlH#$$Xb)%VDXhsWvZ=l0GnQ1G5!_K%GoxM6^k|w6tZJ38@w~HF!3Eq#$ke5=ppM+ zExAN#-R!(>MhL<;Uwz4e5{pjZ`SS}OfcpCHuRVbCZGhPW0Hj8Mmoo8jbdY?SflXZe zg#4HB5a6+q{0how>WAhbxjAr8u?)d>mh`OLhQGKzbc13YV2NzL{AEmy1;*_GJE6X? zrOj(Hw zg%UN*gW7Z-EZe%N63P7fcKVlo?U060TW7TgPVJBu4(gJS#ztvam_%3{wg(8DC7V#s z7MmP%Gnv;2d7QG?jh_Ru_8ngZ2rf(if5of+wf}dgYdFB-7su5MbZQcBTKykonKCoc zBEDAt^T4=GeiXd1BnpsXo_yg)=#1RuW54VGpuVUP6GGMqsOQXDbKhsJ0pNU;TDFEh zq!E}LO(D89imL4Ah9qZ-%&u6hS++qGe3c1vIOQ$zwQ{ zrS(b`Wy%qjHR1jgtBDAV$jWMX=>!0oF@IJnvlLk-`-gRTHYIEln%m;GpSbJXmG6XgL|u^GN(PAS78>nT&NjKL4VDn&Gudt{7ul#+2` zkZKpI6FlADWvz!K(Ge38mB1B99h@U`XexpH!Ij~e$oU?CknY{%J7055G0T9Kc@htz z&S7S4(k9iXV5(3!YOM7|xoMk=rdWSYF|hGMkoo{lkOq#l;Wg;Qvpg+9h^lhxN1L5M z>EiP^wtj#2r8vD3Ej=00xN{F5Lre!ZK6C`D;lG05kD)3&)13odmLPI!^m}^4{Q=nL zvkKCFpEm+qvgErp=nHvT1|^1CGNn)zP9Tiy1FAf34|J9_brdW$y~bVx>;&Q0FZhh~ zTkuo>C>a~&Xj`5*tfa?kekL_JL1g@r5X%&jlFr(%VgmBgEmoZK-rWYkND}(B+Hs$C zzCZ_TEJUw@svihqA=}TaaOTq(ngcx?_yFPg%d8tiiaQ0h$f~RNc9ea37T5_mySpX| ze%GYlxpQ?J020r`@%X=q!GKZ5S>@$hMshlZhtXh*S)29twpN)sV3X}ce)IO-2biF@ zmkfXp>Bz0>c>kVngtDMH8$udM-`mh#^f7;57HQ`I0E!CIMGqpZNCFRO@=g`JUue)2 zzp32p)D5f=>4aSLQwT*}RpyAB$vPt38v`l=L1+>Qb_Um#zzw|25mE+CaTMl2Ko8p0 zh)r}ezi|tE0FO7WV~%{PKg_dx^j<_p{@|XPp!ou*+FZjE$%e@*#vM!e@9;<^kc6Y6 zXs$1&5Tk&*FtWBNnE2EYbBg92bkovCnuHwEMGUEOm@@Xx&&<1z0A+0nyx<2Y-qMF| z)4X}dhl2cF z22-FS3a_^UF{{vZ4N?PcYFJn^tiwQ0ufjc42im@NV!xAI`--OZu7;=29&wzf19%}) zDvcz~g3^x38kzxk=9p(`-}=?2Ip}l_%|4S;iK6*A#8zwSnBlRwIm(pUNDLvv)|Ae> z7;=Z-h!}R=a)#TtA5a4{Y3qo%5^4tdmz@g}8=j`;Y+<1r>XFqwb{2_Tra6iV3FcxGue5tNYA1SA0r9D724;Kvxi z14gU{94Y4!aO2h~1iQiom;QJ7^MCq(6YaU5t90)|H(YrccXDuhCUVQq0KkhI!2IIL zKj-oPAARuu9DAL+8@}~lmv1>buX9~o^Wk`&I_>iqy`;#Ka?3(Wet6zd0}OnHjbEM#|8^N2$y}ty8Q>#~kfn?Vj0#v!0tgH;tM#Q@iyp+- z25XWg)S8Pyj7XV6L@F@FLiNL2{WjArLQ>5;OwM5AS@TYwM9k!{Wbu506F`!zHd55d$UaV?Olo9`728XcKH4U=KD=HxB3Ih@%@tVGu{gLLs37mB> zf)Nr|PM>8PV4$9F2Hf&~z{QEq6@<)!(Ve)J9E584xel%IyZ3 z0JBL%d$3RRX9==WK8^y_8%OI-_%5dW>)-zV$h{PCX3N7>&g1pO=ow|k{!K~jV&ff? z)e0H+NkOWtx3LjfeU@meLiC_z0fS7Snh>Q8ZD3D`C021v^2y+V;4G2P;Pk+rle!L{ z-P4Wb**^XCr7X0R=@@;nJs^UkTu|m{Um`}|Q!~dI4yA0t7>uZDNkaH2$(AzEHO>n1 zajg@w60~3_r_d>x9(0<*JBO*{ffa>F@=g}pf%UdM9@_^-x|Ql!O`zT!0gANUf-=vT z^;UCYFMB7WOZE4?Rmj)yY1*`I*M#fkydM1GM_vW^D}V6+9R2O=ou~a>Tn^l{4RF)y z|G~A9z`4D&`mZ7@nI4%21rm+Jj*Q+R*RNmjNo#)(!hwaKrhNMY523#Jj&(synFC~l zt_rNyZXFo~0T$CkT?L^xQN&|&oetl<6$DD;4WOau-E5N(29_fiklp>a5|H&IPd zb=8z?tVGxZZKQ{6vx8fTF&d^a&nP8S3Z|D_K}|}1e_w+FGeyiMry=b_w#$VW;!BNd zCu(<_8S@#`wWOG0c1rl@2fkBZOOO$TsRekk_iSWvwT~9Q<(IPv9h~%x43^ws^_{M+ zN#s&?IhOHAPFe?wz*f%4L+s6|T>)}$TeXKPV4?VAd&|mNOwP$LEA*eo95Bslc*b5u zVs5Q9JhzzD1S8uAzyj-SfJwE5$f?le>;@~e(4cAu#p-@!D>7($kGxhMKX0el<+i_q zA_Fp3(Sz}sGCEom?W@T>E4*sa6~qL-LVO?Mb`nl4Zw8u`fo?KCN69tLIrSWwGQ2`&