From d1b7830bed6de825cc3f27826495934cdaa1ccc4 Mon Sep 17 00:00:00 2001 From: cailean Date: Thu, 21 Mar 2024 15:33:35 +0000 Subject: [PATCH] init unity --- .vsconfig | 6 + Assets/DreCon.meta | 8 + Assets/DreCon/Editor.meta | 8 + Assets/DreCon/Editor/FindMissingScripts.cs | 46 + .../DreCon/Editor/FindMissingScripts.cs.meta | 11 + Assets/DreCon/_TerrainAutoUpgrade.meta | 8 + ....000,0.000,0.000),0.000,0.460.terrainlayer | 22 + ...0.000,0.000),0.000,0.460.terrainlayer.meta | 8 + Assets/ML-Agents.meta | 8 + Assets/ML-Agents/Timers.meta | 8 + .../ML-Agents/Timers/DreconDemo_timers.json | 1 + .../Timers/DreconDemo_timers.json.meta | 7 + .../ML-Agents/Timers/SampleScene_timers.json | 1 + .../Timers/SampleScene_timers.json.meta | 7 + Assets/MarathonController.meta | 8 + Assets/MarathonController/Editor.meta | 8 + .../Editor/MusclesEditor.cs | 53 + .../Editor/MusclesEditor.cs.meta | 11 + .../Editor/ROMparserSwingTwistEditor.cs | 145 + .../Editor/ROMparserSwingTwistEditor.cs.meta | 11 + .../TrainingEnvironmentGeneratorEditor.cs | 109 + ...TrainingEnvironmentGeneratorEditor.cs.meta | 11 + Assets/MarathonController/Scripts.meta | 8 + .../Scripts/AnimationController.cs | 357 + .../Scripts/AnimationController.cs.meta | 11 + .../Scripts/AnimationMocapController.cs | 50 + .../Scripts/AnimationMocapController.cs.meta | 11 + .../Scripts/DebugArticulationBody.cs | 88 + .../Scripts/DebugArticulationBody.cs.meta | 11 + .../Scripts/DefaultAnimationController.cs | 60 + .../DefaultAnimationController.cs.meta | 11 + .../Scripts/IAnimationController.cs | 9 + .../Scripts/IAnimationController.cs.meta | 11 + .../Scripts/IgnoreColliderForObservation.cs | 14 + .../IgnoreColliderForObservation.cs.meta | 11 + .../Scripts/IgnoreColliderForReward.cs | 8 + .../Scripts/IgnoreColliderForReward.cs.meta | 11 + .../Scripts/MapAnim2Ragdoll.cs | 594 + .../Scripts/MapAnim2Ragdoll.cs.meta | 11 + .../Scripts/MapRagdoll2Anim.cs | 66 + .../Scripts/MapRagdoll2Anim.cs.meta | 11 + .../Scripts/MarConObservations2Learn.cs | 148 + .../Scripts/MarConObservations2Learn.cs.meta | 11 + .../Scripts/MarConObservationsStats.cs | 363 + .../Scripts/MarConObservationsStats.cs.meta | 11 + Assets/MarathonController/Scripts/Muscles.cs | 702 + .../Scripts/Muscles.cs.meta | 11 + .../Scripts/Observations2Learn.cs | 344 + .../Scripts/Observations2Learn.cs.meta | 11 + .../Scripts/ObservationsStats.cs | 347 + .../Scripts/ObservationsStats.cs.meta | 11 + .../Scripts/ProcRagdollAgent.cs | 566 + .../Scripts/ProcRagdollAgent.cs.meta | 11 + .../Scripts/ROMparserSwingTwist.cs | 479 + .../Scripts/ROMparserSwingTwist.cs.meta | 11 + .../Scripts/RangeOfMotionValues.cs | 91 + .../Scripts/RangeOfMotionValues.cs.meta | 11 + .../MarathonController/Scripts/RewardStats.cs | 385 + .../Scripts/RewardStats.cs.meta | 11 + .../Scripts/Rewards2Learn.cs | 432 + .../Scripts/Rewards2Learn.cs.meta | 11 + .../Scripts/TrainingEnvironmentGenerator.cs | 960 ++ .../TrainingEnvironmentGenerator.cs.meta | 11 + Assets/MarathonController/Scripts/Utils.cs | 132 + .../MarathonController/Scripts/Utils.cs.meta | 11 + Assets/MarathonEnvs.meta | 8 + Assets/MarathonEnvs/Agents.meta | 8 + Assets/MarathonEnvs/Agents/Characters.meta | 8 + .../Agents/Characters/MarathonMan004.meta | 8 + .../MarathonMan004/AgentMove-outcome.prefab | 2520 ++++ .../AgentMove-outcome.prefab.meta | 7 + .../MarathonMan004/AgentMove-source.prefab | 2560 ++++ .../AgentMove-source.prefab.meta | 7 + .../Characters/MarathonMan004/BlueJoints.mat | 135 + .../MarathonMan004/BlueJoints.mat.meta | 8 + .../Characters/MarathonMan004/BlueSurface.mat | 135 + .../MarathonMan004/BlueSurface.mat.meta | 8 + .../Agents/Characters/MarathonMan004/Idle.fbx | 3 + .../Characters/MarathonMan004/Idle.fbx.meta | 896 ++ .../MarathonMan004/MarathonMan004.prefab | 4850 +++++++ .../MarathonMan004/MarathonMan004.prefab.meta | 7 + .../Characters/MarathonMan004/RedJoints.mat | 138 + .../MarathonMan004/RedJoints.mat.meta | 8 + .../Characters/MarathonMan004/RedSurface.mat | 138 + .../MarathonMan004/RedSurface.mat.meta | 8 + .../Characters/MarathonMan004/T-Pose.fbx | 3 + .../Characters/MarathonMan004/T-Pose.fbx.meta | 914 ++ .../Characters/MarathonMan004/TargetDebug.mat | 135 + .../MarathonMan004/TargetDebug.mat.meta | 8 + Assets/MarathonEnvs/Agents/Models.meta | 8 + .../MarathonEnvs/Agents/Models/DReCon-v0.onnx | Bin 0 -> 635093 bytes .../Agents/Models/DReCon-v0.onnx.meta | 13 + Assets/MarathonEnvs/Animations.meta | 8 + .../Animations/Locomotion Pack.meta | 8 + .../Animations/Locomotion Pack/idle.fbx | 3 + .../Animations/Locomotion Pack/idle.fbx.meta | 767 ++ .../Animations/Locomotion Pack/jump.fbx | 3 + .../Animations/Locomotion Pack/jump.fbx.meta | 705 + .../Animations/Locomotion Pack/running.fbx | 3 + .../Locomotion Pack/running.fbx.meta | 647 + .../Animations/Locomotion Pack/walking.fbx | 3 + .../Locomotion Pack/walking.fbx.meta | 647 + .../Animations/MarathonManBackflip.fbx | 3 + .../Animations/MarathonManBackflip.fbx.meta | 760 ++ .../Animations/MocapAnimator.controller | 544 + .../Animations/MocapAnimator.controller.meta | 8 + Assets/MarathonEnvs/Environments.meta | 8 + .../Environments/DReCon-v0.prefab | 821 ++ .../Environments/DReCon-v0.prefab.meta | 7 + .../Environments/TrackEnv-v0.prefab | 410 + .../Environments/TrackEnv-v0.prefab.meta | 7 + Assets/MarathonEnvs/PhysicsMaterials.meta | 8 + .../PhysicsMaterials/Actor.physicMaterial | 13 + .../Actor.physicMaterial.meta | 10 + .../PhysicsMaterials/Ground.physicMaterial | 13 + .../Ground.physicMaterial.meta | 10 + Assets/MarathonEnvs/Scripts.meta | 8 + .../MarathonEnvs/Scripts/OriginalAgents.meta | 8 + .../OriginalAgents/DeepMindHopperAgent.cs | 99 + .../DeepMindHopperAgent.cs.meta | 11 + .../OriginalAgents/DeepMindWalkerAgent.cs | 82 + .../DeepMindWalkerAgent.cs.meta | 11 + .../OriginalAgents/MarathonManAgent.cs | 197 + .../OriginalAgents/MarathonManAgent.cs.meta | 11 + .../OriginalAgents/MarathonTestBedDecision.cs | 51 + .../MarathonTestBedDecision.cs.meta | 11 + .../Scripts/OriginalAgents/OpenAIAntAgent.cs | 81 + .../OriginalAgents/OpenAIAntAgent.cs.meta | 11 + .../OriginalAgents/SparceMarathonManAgent.cs | 216 + .../SparceMarathonManAgent.cs.meta | 11 + .../Scripts/OriginalAgents/TerrainAntAgent.cs | 152 + .../OriginalAgents/TerrainAntAgent.cs.meta | 11 + .../OriginalAgents/TerrainGenerator.cs | 229 + .../OriginalAgents/TerrainGenerator.cs.meta | 11 + .../OriginalAgents/TerrainHopperAgent.cs | 167 + .../OriginalAgents/TerrainHopperAgent.cs.meta | 11 + .../OriginalAgents/TerrainMarathonManAgent.cs | 183 + .../TerrainMarathonManAgent.cs.meta | 11 + .../OriginalAgents/TerrainWalkerAgent.cs | 159 + .../OriginalAgents/TerrainWalkerAgent.cs.meta | 11 + Assets/MarathonEnvs/Scripts/Ragdoll002.meta | 8 + .../Scripts/Ragdoll002/BodyConfig.cs | 11 + .../Scripts/Ragdoll002/BodyConfig.cs.meta | 11 + .../Scripts/Ragdoll002/BodyHelper002.cs | 33 + .../Scripts/Ragdoll002/BodyHelper002.cs.meta | 11 + .../Scripts/Ragdoll002/BodyManager002.cs | 594 + .../Scripts/Ragdoll002/BodyManager002.cs.meta | 11 + .../Scripts/Ragdoll002/BodyPart002.cs | 239 + .../Scripts/Ragdoll002/BodyPart002.cs.meta | 11 + .../Scripts/Ragdoll002/DomainRandomization.cs | 18 + .../Ragdoll002/DomainRandomization.cs.meta | 11 + .../Scripts/Ragdoll002/JointHelper002.cs | 107 + .../Scripts/Ragdoll002/JointHelper002.cs.meta | 11 + .../Scripts/Ragdoll002/MarathonHelper.cs | 195 + .../Scripts/Ragdoll002/MarathonHelper.cs.meta | 13 + .../Scripts/Ragdoll002/MarathonJoint.cs | 18 + .../Scripts/Ragdoll002/MarathonJoint.cs.meta | 13 + .../Scripts/Ragdoll002/MarathonSensor.cs | 12 + .../Scripts/Ragdoll002/MarathonSensor.cs.meta | 13 + .../Scripts/Ragdoll002/MarathonSpawner.cs | 1270 ++ .../Ragdoll002/MarathonSpawner.cs.meta | 13 + .../Scripts/Ragdoll002/MarathonSupport.cs | 18 + .../Ragdoll002/MarathonSupport.cs.meta | 11 + .../Scripts/Ragdoll002/Muscle002.cs | 206 + .../Scripts/Ragdoll002/Muscle002.cs.meta | 11 + .../Scripts/Ragdoll002/ProceduralCapsule.cs | 158 + .../Ragdoll002/ProceduralCapsule.cs.meta | 13 + .../Scripts/Ragdoll002/RagDoll002.cs | 66 + .../Scripts/Ragdoll002/RagDoll002.cs.meta | 11 + .../Scripts/Ragdoll002/ScoreHistogramData.cs | 48 + .../Ragdoll002/ScoreHistogramData.cs.meta | 11 + .../MarathonEnvs/Scripts/Ragdoll002/Scorer.cs | 50 + .../Scripts/Ragdoll002/Scorer.cs.meta | 11 + .../Ragdoll002/SendOnCollisionTrigger.cs | 19 + .../Ragdoll002/SendOnCollisionTrigger.cs.meta | 11 + .../Scripts/Ragdoll002/TerrainSetup.cs | 20 + .../Scripts/Ragdoll002/TerrainSetup.cs.meta | 11 + Assets/MarathonEnvs/Scripts/Ragdoll004.meta | 8 + .../Ragdoll004/BodyPartDifferenceStats.cs | 14 + .../BodyPartDifferenceStats.cs.meta | 11 + .../Ragdoll004/DReConObservationStats.cs | 357 + .../Ragdoll004/DReConObservationStats.cs.meta | 11 + .../Scripts/Ragdoll004/DReConObservations.cs | 221 + .../Ragdoll004/DReConObservations.cs.meta | 11 + .../Scripts/Ragdoll004/DReConRewardStats.cs | 392 + .../Ragdoll004/DReConRewardStats.cs.meta | 11 + .../Scripts/Ragdoll004/DReConRewards.cs | 217 + .../Scripts/Ragdoll004/DReConRewards.cs.meta | 11 + .../Scripts/Ragdoll004/DebugAddOffset.cs | 29 + .../Scripts/Ragdoll004/DebugAddOffset.cs.meta | 11 + .../Scripts/Ragdoll004/DebugJoints.cs | 177 + .../Scripts/Ragdoll004/DebugJoints.cs.meta | 11 + .../Scripts/Ragdoll004/MappingOffset.cs | 174 + .../Scripts/Ragdoll004/MappingOffset.cs.meta | 11 + .../Ragdoll004/MocapAnimatorController.cs | 344 + .../MocapAnimatorController.cs.meta | 11 + .../Ragdoll004/MocapControllerArtanim.cs | 669 + .../Ragdoll004/MocapControllerArtanim.cs.meta | 11 + .../MocapRangeOfMotionAnimatorController.cs | 43 + ...capRangeOfMotionAnimatorController.cs.meta | 11 + .../Scripts/Ragdoll004/RagDoll004.cs | 79 + .../Scripts/Ragdoll004/RagDoll004.cs.meta | 11 + .../Scripts/Ragdoll004/RagDollAgent.cs | 489 + .../Scripts/Ragdoll004/RagDollAgent.cs.meta | 11 + .../Ragdoll004/RagdollControllerArtanim.cs | 350 + .../RagdollControllerArtanim.cs.meta | 11 + .../Scripts/Ragdoll004/SensorObservations.cs | 51 + .../Ragdoll004/SensorObservations.cs.meta | 11 + .../Ragdoll004/TrackBodyStatesInWorldSpace.cs | 114 + .../TrackBodyStatesInWorldSpace.cs.meta | 11 + Assets/MarathonEnvs/Scripts/Shared.meta | 8 + .../Scripts/Shared/CameraHelper.cs | 124 + .../Scripts/Shared/CameraHelper.cs.meta | 11 + .../MarathonEnvs/Scripts/Shared/DebugMotor.cs | 9 + .../Scripts/Shared/DebugMotor.cs.meta | 11 + .../Scripts/Shared/HandleOverlap.cs | 22 + .../Scripts/Shared/HandleOverlap.cs.meta | 11 + .../Scripts/Shared/IOnSensorCollision.cs | 11 + .../Scripts/Shared/IOnSensorCollision.cs.meta | 11 + .../Scripts/Shared/IOnTerrainCollision.cs | 9 + .../Shared/IOnTerrainCollision.cs.meta | 11 + .../Scripts/Shared/InputController.cs | 210 + .../Scripts/Shared/InputController.cs.meta | 11 + .../Shared/MapRangeOfMotion2Constraints.cs | 199 + .../MapRangeOfMotion2Constraints.cs.meta | 11 + .../Scripts/Shared/MarathonAgent.cs | 802 ++ .../Scripts/Shared/MarathonAgent.cs.meta | 11 + .../Shared/MarathonTestBedController.cs | 141 + .../Shared/MarathonTestBedController.cs.meta | 11 + .../Scripts/Shared/RenderingOptions.cs | 68 + .../Scripts/Shared/RenderingOptions.cs.meta | 11 + .../Scripts/Shared/SensorBehavior.cs | 51 + .../Scripts/Shared/SensorBehavior.cs.meta | 13 + .../Scripts/Shared/SmoothFollow.cs | 62 + .../Scripts/Shared/SmoothFollow.cs.meta | 11 + .../MarathonEnvs/Scripts/StyleTransfer.meta | 8 + .../StyleTransfer/StyleTransfer002Agent.cs | 302 + .../StyleTransfer002Agent.cs.meta | 11 + .../StyleTransfer/StyleTransfer002Animator.cs | 443 + .../StyleTransfer002Animator.cs.meta | 11 + .../StyleTransfer/StyleTransfer002Master.cs | 437 + .../StyleTransfer002Master.cs.meta | 11 + Assets/MarathonEnvs/Terrains.meta | 8 + Assets/MarathonEnvs/Terrains/200x1.asset | Bin 0 -> 2472300 bytes Assets/MarathonEnvs/Terrains/200x1.asset.meta | 8 + Assets/MarathonEnvs/Terrains/200x2.asset | Bin 0 -> 2472300 bytes Assets/MarathonEnvs/Terrains/200x2.asset.meta | 8 + Assets/MarathonEnvs/Terrains/500x1.asset | Bin 0 -> 2472300 bytes Assets/MarathonEnvs/Terrains/500x1.asset.meta | 8 + Assets/MarathonEnvs/Terrains/500x3.asset | Bin 0 -> 2472300 bytes Assets/MarathonEnvs/Terrains/500x3.asset.meta | 8 + Assets/MarathonEnvs/Textures.meta | 8 + Assets/MarathonEnvs/Textures/grid6.jpg | 3 + Assets/MarathonEnvs/Textures/grid6.jpg.meta | 95 + Assets/Readme.asset | 34 + Assets/Readme.asset.meta | 8 + Assets/Scenes.meta | 8 + Assets/Scenes/DreconDemo.unity | 10986 ++++++++++++++++ Assets/Scenes/DreconDemo.unity.meta | 7 + Assets/Settings.meta | 8 + Assets/Settings/SampleSceneProfile.asset | 123 + Assets/Settings/SampleSceneProfile.asset.meta | 8 + Assets/Settings/URP-Balanced-Renderer.asset | 76 + .../Settings/URP-Balanced-Renderer.asset.meta | 8 + Assets/Settings/URP-Balanced.asset | 110 + Assets/Settings/URP-Balanced.asset.meta | 8 + .../Settings/URP-HighFidelity-Renderer.asset | 98 + .../URP-HighFidelity-Renderer.asset.meta | 8 + Assets/Settings/URP-HighFidelity.asset | 110 + Assets/Settings/URP-HighFidelity.asset.meta | 8 + Assets/Settings/URP-Performant-Renderer.asset | 52 + .../URP-Performant-Renderer.asset.meta | 8 + Assets/Settings/URP-Performant.asset | 110 + Assets/Settings/URP-Performant.asset.meta | 8 + Assets/TutorialInfo.meta | 8 + Assets/TutorialInfo/Icons.meta | 9 + Assets/TutorialInfo/Icons/URP.png | 3 + Assets/TutorialInfo/Icons/URP.png.meta | 134 + Assets/TutorialInfo/Layout.wlt | 654 + Assets/TutorialInfo/Layout.wlt.meta | 8 + Assets/TutorialInfo/Scripts.meta | 9 + Assets/TutorialInfo/Scripts/Editor.meta | 9 + .../Scripts/Editor/ReadmeEditor.cs | 242 + .../Scripts/Editor/ReadmeEditor.cs.meta | 12 + Assets/TutorialInfo/Scripts/Readme.cs | 16 + Assets/TutorialInfo/Scripts/Readme.cs.meta | 12 + ...niversalRenderPipelineGlobalSettings.asset | 41 + ...salRenderPipelineGlobalSettings.asset.meta | 8 + Packages/manifest.json | 48 + Packages/packages-lock.json | 458 + ProjectSettings/AudioManager.asset | 19 + .../BurstAotSettings_StandaloneWindows.json | 16 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/CommonBurstAotSettings.json | 6 + ProjectSettings/DynamicsManager.asset | 39 + ProjectSettings/EditorBuildSettings.asset | 11 + ProjectSettings/EditorSettings.asset | 35 + ProjectSettings/GraphicsSettings.asset | 70 + ProjectSettings/InputManager.asset | 487 + ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/NavMeshAreas.asset | 91 + ProjectSettings/PackageManagerSettings.asset | 43 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 920 ++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 136 + ProjectSettings/SceneTemplateSettings.json | 167 + ProjectSettings/ShaderGraphSettings.asset | 16 + ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/URPProjectSettings.asset | 15 + ProjectSettings/UnityConnectSettings.asset | 36 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + 316 files changed, 52822 insertions(+) create mode 100644 .vsconfig create mode 100644 Assets/DreCon.meta create mode 100644 Assets/DreCon/Editor.meta create mode 100644 Assets/DreCon/Editor/FindMissingScripts.cs create mode 100644 Assets/DreCon/Editor/FindMissingScripts.cs.meta create mode 100644 Assets/DreCon/_TerrainAutoUpgrade.meta create mode 100644 Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer create mode 100644 Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer.meta create mode 100644 Assets/ML-Agents.meta create mode 100644 Assets/ML-Agents/Timers.meta create mode 100644 Assets/ML-Agents/Timers/DreconDemo_timers.json create mode 100644 Assets/ML-Agents/Timers/DreconDemo_timers.json.meta create mode 100644 Assets/ML-Agents/Timers/SampleScene_timers.json create mode 100644 Assets/ML-Agents/Timers/SampleScene_timers.json.meta create mode 100644 Assets/MarathonController.meta create mode 100644 Assets/MarathonController/Editor.meta create mode 100644 Assets/MarathonController/Editor/MusclesEditor.cs create mode 100644 Assets/MarathonController/Editor/MusclesEditor.cs.meta create mode 100644 Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs create mode 100644 Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs.meta create mode 100644 Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs create mode 100644 Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs.meta create mode 100644 Assets/MarathonController/Scripts.meta create mode 100644 Assets/MarathonController/Scripts/AnimationController.cs create mode 100644 Assets/MarathonController/Scripts/AnimationController.cs.meta create mode 100644 Assets/MarathonController/Scripts/AnimationMocapController.cs create mode 100644 Assets/MarathonController/Scripts/AnimationMocapController.cs.meta create mode 100644 Assets/MarathonController/Scripts/DebugArticulationBody.cs create mode 100644 Assets/MarathonController/Scripts/DebugArticulationBody.cs.meta create mode 100644 Assets/MarathonController/Scripts/DefaultAnimationController.cs create mode 100644 Assets/MarathonController/Scripts/DefaultAnimationController.cs.meta create mode 100644 Assets/MarathonController/Scripts/IAnimationController.cs create mode 100644 Assets/MarathonController/Scripts/IAnimationController.cs.meta create mode 100644 Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs create mode 100644 Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs.meta create mode 100644 Assets/MarathonController/Scripts/IgnoreColliderForReward.cs create mode 100644 Assets/MarathonController/Scripts/IgnoreColliderForReward.cs.meta create mode 100644 Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs create mode 100644 Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs.meta create mode 100644 Assets/MarathonController/Scripts/MapRagdoll2Anim.cs create mode 100644 Assets/MarathonController/Scripts/MapRagdoll2Anim.cs.meta create mode 100644 Assets/MarathonController/Scripts/MarConObservations2Learn.cs create mode 100644 Assets/MarathonController/Scripts/MarConObservations2Learn.cs.meta create mode 100644 Assets/MarathonController/Scripts/MarConObservationsStats.cs create mode 100644 Assets/MarathonController/Scripts/MarConObservationsStats.cs.meta create mode 100644 Assets/MarathonController/Scripts/Muscles.cs create mode 100644 Assets/MarathonController/Scripts/Muscles.cs.meta create mode 100644 Assets/MarathonController/Scripts/Observations2Learn.cs create mode 100644 Assets/MarathonController/Scripts/Observations2Learn.cs.meta create mode 100644 Assets/MarathonController/Scripts/ObservationsStats.cs create mode 100644 Assets/MarathonController/Scripts/ObservationsStats.cs.meta create mode 100644 Assets/MarathonController/Scripts/ProcRagdollAgent.cs create mode 100644 Assets/MarathonController/Scripts/ProcRagdollAgent.cs.meta create mode 100644 Assets/MarathonController/Scripts/ROMparserSwingTwist.cs create mode 100644 Assets/MarathonController/Scripts/ROMparserSwingTwist.cs.meta create mode 100644 Assets/MarathonController/Scripts/RangeOfMotionValues.cs create mode 100644 Assets/MarathonController/Scripts/RangeOfMotionValues.cs.meta create mode 100644 Assets/MarathonController/Scripts/RewardStats.cs create mode 100644 Assets/MarathonController/Scripts/RewardStats.cs.meta create mode 100644 Assets/MarathonController/Scripts/Rewards2Learn.cs create mode 100644 Assets/MarathonController/Scripts/Rewards2Learn.cs.meta create mode 100644 Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs create mode 100644 Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs.meta create mode 100644 Assets/MarathonController/Scripts/Utils.cs create mode 100644 Assets/MarathonController/Scripts/Utils.cs.meta create mode 100644 Assets/MarathonEnvs.meta create mode 100644 Assets/MarathonEnvs/Agents.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx.meta create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat create mode 100644 Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat.meta create mode 100644 Assets/MarathonEnvs/Agents/Models.meta create mode 100644 Assets/MarathonEnvs/Agents/Models/DReCon-v0.onnx create mode 100644 Assets/MarathonEnvs/Agents/Models/DReCon-v0.onnx.meta create mode 100644 Assets/MarathonEnvs/Animations.meta create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack.meta create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/idle.fbx create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/idle.fbx.meta create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/jump.fbx create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/jump.fbx.meta create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/running.fbx create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/running.fbx.meta create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/walking.fbx create mode 100644 Assets/MarathonEnvs/Animations/Locomotion Pack/walking.fbx.meta create mode 100644 Assets/MarathonEnvs/Animations/MarathonManBackflip.fbx create mode 100644 Assets/MarathonEnvs/Animations/MarathonManBackflip.fbx.meta create mode 100644 Assets/MarathonEnvs/Animations/MocapAnimator.controller create mode 100644 Assets/MarathonEnvs/Animations/MocapAnimator.controller.meta create mode 100644 Assets/MarathonEnvs/Environments.meta create mode 100644 Assets/MarathonEnvs/Environments/DReCon-v0.prefab create mode 100644 Assets/MarathonEnvs/Environments/DReCon-v0.prefab.meta create mode 100644 Assets/MarathonEnvs/Environments/TrackEnv-v0.prefab create mode 100644 Assets/MarathonEnvs/Environments/TrackEnv-v0.prefab.meta create mode 100644 Assets/MarathonEnvs/PhysicsMaterials.meta create mode 100644 Assets/MarathonEnvs/PhysicsMaterials/Actor.physicMaterial create mode 100644 Assets/MarathonEnvs/PhysicsMaterials/Actor.physicMaterial.meta create mode 100644 Assets/MarathonEnvs/PhysicsMaterials/Ground.physicMaterial create mode 100644 Assets/MarathonEnvs/PhysicsMaterials/Ground.physicMaterial.meta create mode 100644 Assets/MarathonEnvs/Scripts.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindHopperAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindHopperAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSpawner.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSpawner.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSupport.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSupport.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/Muscle002.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/Muscle002.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/ProceduralCapsule.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/ProceduralCapsule.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/RagDoll002.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/RagDoll002.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/ScoreHistogramData.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/ScoreHistogramData.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/Scorer.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/Scorer.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/SendOnCollisionTrigger.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/SendOnCollisionTrigger.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/TerrainSetup.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll002/TerrainSetup.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/BodyPartDifferenceStats.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/BodyPartDifferenceStats.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConObservationStats.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConObservationStats.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConObservations.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConObservations.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConRewardStats.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConRewardStats.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConRewards.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DReConRewards.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DebugAddOffset.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DebugAddOffset.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DebugJoints.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/DebugJoints.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MappingOffset.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MappingOffset.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MocapAnimatorController.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MocapAnimatorController.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MocapControllerArtanim.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MocapControllerArtanim.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MocapRangeOfMotionAnimatorController.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/MocapRangeOfMotionAnimatorController.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/RagDoll004.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/RagDoll004.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/RagDollAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/RagDollAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/RagdollControllerArtanim.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/RagdollControllerArtanim.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/SensorObservations.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/SensorObservations.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/TrackBodyStatesInWorldSpace.cs create mode 100644 Assets/MarathonEnvs/Scripts/Ragdoll004/TrackBodyStatesInWorldSpace.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/CameraHelper.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/CameraHelper.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/DebugMotor.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/DebugMotor.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/HandleOverlap.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/HandleOverlap.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/IOnSensorCollision.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/IOnSensorCollision.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/IOnTerrainCollision.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/IOnTerrainCollision.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/InputController.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/InputController.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/MapRangeOfMotion2Constraints.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/MapRangeOfMotion2Constraints.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/MarathonAgent.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/MarathonAgent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/MarathonTestBedController.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/MarathonTestBedController.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/RenderingOptions.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/RenderingOptions.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/SensorBehavior.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/SensorBehavior.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/Shared/SmoothFollow.cs create mode 100644 Assets/MarathonEnvs/Scripts/Shared/SmoothFollow.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer.meta create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer/StyleTransfer002Agent.cs create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer/StyleTransfer002Agent.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer/StyleTransfer002Animator.cs create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer/StyleTransfer002Animator.cs.meta create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer/StyleTransfer002Master.cs create mode 100644 Assets/MarathonEnvs/Scripts/StyleTransfer/StyleTransfer002Master.cs.meta create mode 100644 Assets/MarathonEnvs/Terrains.meta create mode 100644 Assets/MarathonEnvs/Terrains/200x1.asset create mode 100644 Assets/MarathonEnvs/Terrains/200x1.asset.meta create mode 100644 Assets/MarathonEnvs/Terrains/200x2.asset create mode 100644 Assets/MarathonEnvs/Terrains/200x2.asset.meta create mode 100644 Assets/MarathonEnvs/Terrains/500x1.asset create mode 100644 Assets/MarathonEnvs/Terrains/500x1.asset.meta create mode 100644 Assets/MarathonEnvs/Terrains/500x3.asset create mode 100644 Assets/MarathonEnvs/Terrains/500x3.asset.meta create mode 100644 Assets/MarathonEnvs/Textures.meta create mode 100644 Assets/MarathonEnvs/Textures/grid6.jpg create mode 100644 Assets/MarathonEnvs/Textures/grid6.jpg.meta create mode 100644 Assets/Readme.asset create mode 100644 Assets/Readme.asset.meta create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/DreconDemo.unity create mode 100644 Assets/Scenes/DreconDemo.unity.meta create mode 100644 Assets/Settings.meta create mode 100644 Assets/Settings/SampleSceneProfile.asset create mode 100644 Assets/Settings/SampleSceneProfile.asset.meta create mode 100644 Assets/Settings/URP-Balanced-Renderer.asset create mode 100644 Assets/Settings/URP-Balanced-Renderer.asset.meta create mode 100644 Assets/Settings/URP-Balanced.asset create mode 100644 Assets/Settings/URP-Balanced.asset.meta create mode 100644 Assets/Settings/URP-HighFidelity-Renderer.asset create mode 100644 Assets/Settings/URP-HighFidelity-Renderer.asset.meta create mode 100644 Assets/Settings/URP-HighFidelity.asset create mode 100644 Assets/Settings/URP-HighFidelity.asset.meta create mode 100644 Assets/Settings/URP-Performant-Renderer.asset create mode 100644 Assets/Settings/URP-Performant-Renderer.asset.meta create mode 100644 Assets/Settings/URP-Performant.asset create mode 100644 Assets/Settings/URP-Performant.asset.meta create mode 100644 Assets/TutorialInfo.meta create mode 100644 Assets/TutorialInfo/Icons.meta create mode 100644 Assets/TutorialInfo/Icons/URP.png create mode 100644 Assets/TutorialInfo/Icons/URP.png.meta create mode 100644 Assets/TutorialInfo/Layout.wlt create mode 100644 Assets/TutorialInfo/Layout.wlt.meta create mode 100644 Assets/TutorialInfo/Scripts.meta create mode 100644 Assets/TutorialInfo/Scripts/Editor.meta create mode 100644 Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs create mode 100644 Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs.meta create mode 100644 Assets/TutorialInfo/Scripts/Readme.cs create mode 100644 Assets/TutorialInfo/Scripts/Readme.cs.meta create mode 100644 Assets/UniversalRenderPipelineGlobalSettings.asset create mode 100644 Assets/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/BurstAotSettings_StandaloneWindows.json create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/CommonBurstAotSettings.json create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/SceneTemplateSettings.json create mode 100644 ProjectSettings/ShaderGraphSettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/URPProjectSettings.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..d70cd98 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/DreCon.meta b/Assets/DreCon.meta new file mode 100644 index 0000000..6928b58 --- /dev/null +++ b/Assets/DreCon.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 776c34a4e6c0e42488823c8f7254c194 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DreCon/Editor.meta b/Assets/DreCon/Editor.meta new file mode 100644 index 0000000..5b80156 --- /dev/null +++ b/Assets/DreCon/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b35c1d2ebfe61f41b1a6e407a37bf66 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DreCon/Editor/FindMissingScripts.cs b/Assets/DreCon/Editor/FindMissingScripts.cs new file mode 100644 index 0000000..559b6c5 --- /dev/null +++ b/Assets/DreCon/Editor/FindMissingScripts.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using UnityEditor; +public class FindMissingScripts : EditorWindow +{ + [MenuItem("Window/FindMissingScripts")] + public static void ShowWindow() + { + EditorWindow.GetWindow(typeof(FindMissingScripts)); + } + + public void OnGUI() + { + if (GUILayout.Button("Find Missing Scripts in selected prefabs")) + { + FindInSelected(); + } + } + private static void FindInSelected() + { + GameObject[] go = Selection.gameObjects; + int go_count = 0, components_count = 0, missing_count = 0; + foreach (GameObject g in go) + { + go_count++; + Component[] components = g.GetComponents(); + for (int i = 0; i < components.Length; i++) + { + components_count++; + if (components[i] == null) + { + missing_count++; + string s = g.name; + Transform t = g.transform; + while (t.parent != null) + { + s = t.parent.name + "/" + s; + t = t.parent; + } + Debug.Log(s + " has an empty script attached in position: " + i, g); + } + } + } + + Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count)); + } +} \ No newline at end of file diff --git a/Assets/DreCon/Editor/FindMissingScripts.cs.meta b/Assets/DreCon/Editor/FindMissingScripts.cs.meta new file mode 100644 index 0000000..9aabee2 --- /dev/null +++ b/Assets/DreCon/Editor/FindMissingScripts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0d934a6bc24a4ccc82186b44f16a343 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DreCon/_TerrainAutoUpgrade.meta b/Assets/DreCon/_TerrainAutoUpgrade.meta new file mode 100644 index 0000000..cace0ec --- /dev/null +++ b/Assets/DreCon/_TerrainAutoUpgrade.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ee34fd637d821c4fad00ba27a0f37d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer b/Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer new file mode 100644 index 0000000..da9d187 --- /dev/null +++ b/Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460 + m_DiffuseTexture: {fileID: 2800000, guid: b6a6551ec416c408e9353670dc7e6635, type: 3} + m_NormalMapTexture: {fileID: 0} + m_MaskMapTexture: {fileID: 0} + m_TileSize: {x: 10, y: 10} + m_TileOffset: {x: 0, y: 0} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0.46 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} diff --git a/Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer.meta b/Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer.meta new file mode 100644 index 0000000..7e0fa03 --- /dev/null +++ b/Assets/DreCon/_TerrainAutoUpgrade/layer_(10.000,10.000)(-8.000,-8.000)(0.000,0.000,0.000),0.000,0.460.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8656354215ef37f4e821bd52c6fad0e2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents.meta b/Assets/ML-Agents.meta new file mode 100644 index 0000000..1e1e9fc --- /dev/null +++ b/Assets/ML-Agents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d909489b885c4f54bb2356c8aea99dec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/Timers.meta b/Assets/ML-Agents/Timers.meta new file mode 100644 index 0000000..96bb1ea --- /dev/null +++ b/Assets/ML-Agents/Timers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a919e5fd77e6ff14a802c5cf62d81a2a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/Timers/DreconDemo_timers.json b/Assets/ML-Agents/Timers/DreconDemo_timers.json new file mode 100644 index 0000000..b779128 --- /dev/null +++ b/Assets/ML-Agents/Timers/DreconDemo_timers.json @@ -0,0 +1 @@ +{"count":1,"self":18.401020799999998,"total":19.0026631,"children":{"InitializeActuators":{"count":1,"self":0.0009998,"total":0.0009998,"children":null},"InitializeSensors":{"count":1,"self":0.0010048,"total":0.0010048,"children":null},"AgentSendState":{"count":1117,"self":0.0080398999999999991,"total":0.1468565,"children":{"CollectObservations":{"count":559,"self":0.1277893,"total":0.1277893,"children":null},"WriteActionMask":{"count":559,"self":0.0005045,"total":0.0005045,"children":null},"RequestDecision":{"count":559,"self":0.010522799999999999,"total":0.010522799999999999,"children":null}}},"DecideAction":{"count":1117,"self":0.28126829999999997,"total":0.28126829999999997,"children":null},"AgentAct":{"count":1117,"self":0.1705073,"total":0.1705073,"children":null}},"gauges":{"DReCon-v0.CumulativeReward":{"count":3,"max":197.241531,"min":70.88822,"runningAverage":143.552612,"value":197.241531,"weightedAverage":119.659027}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1711034456","unity_version":"2022.3.5f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2022.3.5f1\\Editor\\Unity.exe -projectpath C:\\Users\\caile\\Desktop\\Projects\\24_3-Moloch\\2_Unity\\Expeirments\\Upgrade Demo -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-caile -hubSessionId 585fb154-c60e-4d06-858f-da51882ef412 -accessToken uYlRmxZm8yQI0ljQ6TREamLSDSVcPFPnk5wEHmLEyOE005f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"DreconDemo","end_time_seconds":"1711034475"}} \ No newline at end of file diff --git a/Assets/ML-Agents/Timers/DreconDemo_timers.json.meta b/Assets/ML-Agents/Timers/DreconDemo_timers.json.meta new file mode 100644 index 0000000..3a324a0 --- /dev/null +++ b/Assets/ML-Agents/Timers/DreconDemo_timers.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a310a0758fd311245aad0375def7bcc8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/Timers/SampleScene_timers.json b/Assets/ML-Agents/Timers/SampleScene_timers.json new file mode 100644 index 0000000..a01981e --- /dev/null +++ b/Assets/ML-Agents/Timers/SampleScene_timers.json @@ -0,0 +1 @@ +{"count":1,"self":43.5624288,"total":45.140246,"children":{"InitializeActuators":{"count":1,"self":0.0009999,"total":0.0009999,"children":null},"InitializeSensors":{"count":1,"self":0.0009996,"total":0.0009996,"children":null},"AgentSendState":{"count":3201,"self":0.018505999999999998,"total":0.42292569999999996,"children":{"CollectObservations":{"count":1601,"self":0.3853658,"total":0.3853658,"children":null},"WriteActionMask":{"count":1601,"self":0.0055122999999999995,"total":0.0055122999999999995,"children":null},"RequestDecision":{"count":1601,"self":0.013541599999999999,"total":0.013541599999999999,"children":null}}},"DecideAction":{"count":3201,"self":0.6847188,"total":0.6847188,"children":null},"AgentAct":{"count":3201,"self":0.4681722,"total":0.4681722,"children":null}},"gauges":{"DReCon-v0.CumulativeReward":{"count":6,"max":1306.72473,"min":13.3789816,"runningAverage":295.601318,"value":141.747467,"weightedAverage":200.906891}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1711034109","unity_version":"2022.3.5f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2022.3.5f1\\Editor\\Unity.exe -projectpath C:\\Users\\caile\\Desktop\\Projects\\24_3-Moloch\\2_Unity\\Expeirments\\Upgrade Demo -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-caile -hubSessionId 585fb154-c60e-4d06-858f-da51882ef412 -accessToken gjBs-QzUiOMTdyqRQ553oxjojRRpG4-lOs_aadZonB8005f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"SampleScene","end_time_seconds":"1711034154"}} \ No newline at end of file diff --git a/Assets/ML-Agents/Timers/SampleScene_timers.json.meta b/Assets/ML-Agents/Timers/SampleScene_timers.json.meta new file mode 100644 index 0000000..0732b8e --- /dev/null +++ b/Assets/ML-Agents/Timers/SampleScene_timers.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b494e22e3b9efd1439eeb04b86d290ff +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController.meta b/Assets/MarathonController.meta new file mode 100644 index 0000000..06afb7c --- /dev/null +++ b/Assets/MarathonController.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea29cd7abf68e734e9e547f2161e5ed7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Editor.meta b/Assets/MarathonController/Editor.meta new file mode 100644 index 0000000..36c40f1 --- /dev/null +++ b/Assets/MarathonController/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f468a3c0191e6747a78245c2f63de0e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Editor/MusclesEditor.cs b/Assets/MarathonController/Editor/MusclesEditor.cs new file mode 100644 index 0000000..69dce15 --- /dev/null +++ b/Assets/MarathonController/Editor/MusclesEditor.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + + +[CustomEditor(typeof(Muscles))] +public class MusclesEditor : Editor +{ + + [SerializeField] + SerializedProperty Muscles; + + void OnEnable() + { + Muscles = serializedObject.FindProperty("Muscles"); + + } + + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + + GUILayout.Label(""); + + + + + base.OnInspectorGUI(); + + /* + if (GUILayout.Button("Recalculate Center of Masses")) + { + Muscles t = target as Muscles; + t.CenterABMasses(); + }*/ + + + + serializedObject.ApplyModifiedProperties(); + + } + + + + + +} diff --git a/Assets/MarathonController/Editor/MusclesEditor.cs.meta b/Assets/MarathonController/Editor/MusclesEditor.cs.meta new file mode 100644 index 0000000..7d60245 --- /dev/null +++ b/Assets/MarathonController/Editor/MusclesEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f8a6234c58fa4a4abe62d80512988dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs b/Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs new file mode 100644 index 0000000..68d726e --- /dev/null +++ b/Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs @@ -0,0 +1,145 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + +//This script assumes information was stored as SwingTwist +//This means the script goes together with ROMparserSwingTwist + +//we assume the articulationBodies have a name structure of hte form ANYNAME:something-in-the-targeted-joint + +[CustomEditor(typeof(ROMparserSwingTwist))] +public class ROMparserSwingTwistEditor : Editor +{ + + [SerializeField] + SerializedProperty ROMparserSwingTwist; + + //NOT USED ANYMORE + //[SerializeField] + //string keyword4prefabs = "Constrained-procedurally"; + //[SerializeField] + //RangeOfMotion004 theRagdollPrefab; + + + + void OnEnable() + { + ROMparserSwingTwist = serializedObject.FindProperty("ROMparserSwingTwist"); + + } + + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + + GUILayout.Label(""); + + + + + base.OnInspectorGUI(); + + /* + if (GUILayout.Button("0.Debug: Set Joints To Max ROM")) + { + ROMparserSwingTwist t = target as ROMparserSwingTwist; + t.SetJointsToMaxROM(); + } + + + + if (GUILayout.Button("1.Store ROM info ")) + { + ROMparserSwingTwist t = target as ROMparserSwingTwist; + EditorUtility.SetDirty(t.info2store); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + + + GUILayout.Label("Prefab Ragdoll:"); + + + + GUILayout.Label("How to use:"); + + GUILayout.TextArea( + "Step 1: execute in play mode until the values in the Range Of Motion Preview do not change any more" + + // " \n Step 2: click on button 1 to apply the constraints to check if the ragdoll looks reasonable" + + // " \n Step 3: in edit mode, click on button 1, and then on button 2, to generate a new constrained ragdoll. If a template for a SpawnableEnv is provided, also a new environment for training"); + " \n Step 2: open the Ragdoll on which you want to apply the range of motion, and use the script ApplyRangeOfMotion004"); + */ + + serializedObject.ApplyModifiedProperties(); + + } + + + + void storeNewPrefabWithROM(ProcRagdollAgent rda, ManyWorlds.SpawnableEnv envPrefab = null) + { + ROMparserSwingTwist t = target as ROMparserSwingTwist; + + //ROMinfoCollector infoStored = t.info2store; + + Transform targetRoot = t.targetRagdollRoot.transform; + + + //string add2prefabs = keyword4prefabs; + + + + // Set the path, + // and name it as the GameObject's name with the .Prefab format + string localPath = "Assets/MarathonEnvs/Agents/Characters/MarathonMan004/" + targetRoot.name + ".prefab"; + + // Make sure the file name is unique, in case an existing Prefab has the same name. + string uniqueLocalPath = AssetDatabase.GenerateUniqueAssetPath(localPath); + + + if (PrefabUtility.IsAnyPrefabInstanceRoot(targetRoot.gameObject)) + //We want to store it independently from the current prefab. Therefore: + PrefabUtility.UnpackPrefabInstance(targetRoot.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction); + + + // Create the new Prefab. + PrefabUtility.SaveAsPrefabAsset(targetRoot.gameObject, uniqueLocalPath); + + Debug.Log("Saved new CharacterPrefab at: " + uniqueLocalPath); + + + if (envPrefab != null) + { + Transform targetEnv = envPrefab.transform; + + targetEnv.name = "ControllerMarathonManEnv"; + + string localEnvPath = "Assets/MarathonController/Environments/" + targetEnv.name + ".prefab"; + + // Make sure the file name is unique, in case an existing Prefab has the same name. + string uniqueLocalEnvPath = AssetDatabase.GenerateUniqueAssetPath(localEnvPath); + + if (PrefabUtility.IsAnyPrefabInstanceRoot(targetEnv.gameObject)) + //We want to store it independently from the current prefab. Therefore: + PrefabUtility.UnpackPrefabInstance(targetEnv.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction); + + + // Create the new Prefab. + PrefabUtility.SaveAsPrefabAsset(targetEnv.gameObject, uniqueLocalEnvPath); + + Debug.Log("Saved new Environment Prefab at: " + uniqueLocalEnvPath); + + } + + + + } + + +} diff --git a/Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs.meta b/Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs.meta new file mode 100644 index 0000000..99cfd4e --- /dev/null +++ b/Assets/MarathonController/Editor/ROMparserSwingTwistEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c871e0208cc70214e856b80d03e2025c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs b/Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs new file mode 100644 index 0000000..0afef26 --- /dev/null +++ b/Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs @@ -0,0 +1,109 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + +[CustomEditor(typeof(TrainingEnvironmentGenerator))] +public class TrainingEnvironmentGeneratorEditor : Editor +{ + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + + + + + if (GUILayout.Button("1.Generate training environment ")) + { + TrainingEnvironmentGenerator t = target as TrainingEnvironmentGenerator; + t.GenerateTrainingEnv(); + } + + + + + + if (GUILayout.Button("2 (optional) Generate ROM values")) + { + TrainingEnvironmentGenerator t = target as TrainingEnvironmentGenerator; + t.GenerateRangeOfMotionParser(); + + t.Prepare4RangeOfMotionParsing(); + + + + } + GUILayout.Label("If (2), press play until the values in the ROM file do not change. Then press stop."); + + if (GUILayout.Button("3.Configure and Store")) { + TrainingEnvironmentGenerator t = target as TrainingEnvironmentGenerator; + + //"3.We Configure Ragdoll and learning agent" + t.Prepare4EnvironmentStorage(); + + t.ApplyROMasConstraintsAndConfigure(); + + + + //instructions below stores them, it can only be done in an editor script + + storeEnvAsPrefab(t.Outcome); + //once stored we can destroy them to keep the scene clean + //DestroyImmediate(t.Outcome.gameObject); + + + EditorUtility.SetDirty(t.info2store); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + } + //GUILayout.Label("After (3), activate the Ragdoll game object within the hierarchy of the training environment generated."); + + + GUILayout.Label(""); + + base.OnInspectorGUI(); + + + + + + serializedObject.ApplyModifiedProperties(); + + } + + + + void storeEnvAsPrefab(ManyWorlds.SpawnableEnv env) + { + + + // Set the path, + // and name it as the GameObject's name with the .Prefab format + string localPath = "Assets/MarathonController/GeneratedEnvironments/" + env.name + ".prefab"; + + // Make sure the file name is unique, in case an existing Prefab has the same name. + string uniqueLocalPath = AssetDatabase.GenerateUniqueAssetPath(localPath); + + + if (PrefabUtility.IsAnyPrefabInstanceRoot(env.gameObject)) + //We want to store it independently from the current prefab. Therefore: + PrefabUtility.UnpackPrefabInstance(env.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction); + + + // Create the new Prefab. + PrefabUtility.SaveAsPrefabAsset(env.gameObject, uniqueLocalPath); + + Debug.Log("Saved new Training Environment at: " + uniqueLocalPath); + + + + } + + +} diff --git a/Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs.meta b/Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs.meta new file mode 100644 index 0000000..3ffc520 --- /dev/null +++ b/Assets/MarathonController/Editor/TrainingEnvironmentGeneratorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f334119640072547b9ed56881d813da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts.meta b/Assets/MarathonController/Scripts.meta new file mode 100644 index 0000000..dee619e --- /dev/null +++ b/Assets/MarathonController/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b14787b743d2b0144ae2b3106595f5ac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/AnimationController.cs b/Assets/MarathonController/Scripts/AnimationController.cs new file mode 100644 index 0000000..ab5fdbe --- /dev/null +++ b/Assets/MarathonController/Scripts/AnimationController.cs @@ -0,0 +1,357 @@ + +using UnityEngine; + + +public class AnimationController : MonoBehaviour, IAnimationController +{ + public float MaxForwardVelocity = 1f; // Max run speed. + public float MinTurnVelocity = 400f; // Turn velocity when moving at maximum speed. + public float MaxTurnVelocity = 1400f; // Turn velocity when stationary. + public float JumpSpeed = 5f; // + public bool debugForceJump; + + + [SerializeField] + Animator _anim; + + + [SerializeField] + CharacterController _characterController; + + + [SerializeField] + InputController _inputController; + + bool _isGrounded; + bool _previouslyGrounded; + const float kAirborneTurnSpeedProportion = 5.4f; + const float kGroundTurnSpeedProportion = 200f / 2; + const float kGroundedRayDistance = 1f; + const float kJumpAbortSpeed = 10f; + + const float kInverseOneEighty = 1f / 180f; + const float kStickingGravityProportion = 0.3f; + + float _forwardVelocity; + Vector3 _lastGroundForwardVelocity; + float _desiredForwardSpeed; + float _verticalVelocity = -1f; + + Quaternion _targetDirection; // direction we want to move towards + float _angleDiff; // delta between targetRotation and current roataion + Quaternion _targetRotation; + bool _readyToJump; + bool _inCombo; + + [SerializeField] + Material materialUnderFoot; + + public LayerMask IgnoreLayers; + + + [Tooltip("for debugging, we disable this when setTpose in MarathonTestBedController is on")] + public bool doFixedUpdate = true; + + protected bool IsMoveInput + { + get { return !Mathf.Approximately(_inputController.MovementVector.sqrMagnitude, 0f); } + } + + public void OnEnable() + { + + OnAgentInitialize(); + } + + + //TODO: this is also called from RagdollAgent004. Dependency should be removed, somehow. + public void OnAgentInitialize() + { + if (!_anim) + _anim = GetComponent(); + + if (!_characterController) + _characterController = GetComponent(); + + + if (!_inputController) //if it is used without a ragdoll agent (for example, for ROM extraction), we still need to initialize it + _inputController = GetComponent(); + + + _targetDirection = Quaternion.Euler(0, 90, 0); + + + + //Moved to Training Environment Generator + /* + var ragDoll = _spawnableEnv.GetComponentInChildren( true);//we include inactive childs + if (ragDoll)//in the ROM extraction case we do not have any ragdoll agent + { + _layerMask = 1 << ragDoll.gameObject.layer; + _layerMask |= 1 << this.gameObject.layer; + _layerMask = ~(_layerMask); + } + + */ + } + public Vector3 GetDesiredVelocity() + { + Vector3 desiredVelocity = new Vector3( + _inputController.DesiredHorizontalVelocity.x, + 0f, + _inputController.DesiredHorizontalVelocity.y); + return desiredVelocity; + } + + void FixedUpdate() + { + OnFixedUpdate(); + } + + + void OnFixedUpdate() + { + // RotateTarget(Time.fixedDeltaTime); + SetTargetFromMoveInput(); + CalculateForwardMovement(Time.fixedDeltaTime); + CalculateVerticalMovement(Time.fixedDeltaTime); + + if (this.IsMoveInput) + SetTargetRotation(); + + UpdateOrientation(Time.fixedDeltaTime); + + // PlayAudio(); + + // TimeoutToIdle(); + + _previouslyGrounded = _isGrounded; + } + + public void OnReset() + { + } + void OldOnReset() + { + _isGrounded = true; + _previouslyGrounded = true; + _inCombo = false; + _readyToJump = false; + _forwardVelocity = 0f; + _lastGroundForwardVelocity = Vector3.zero; + _desiredForwardSpeed = 0f; + _verticalVelocity = 0f; + _angleDiff = 0f; + + if (!doFixedUpdate) + return; + + _anim.SetBool("onGround", _isGrounded); + // _anim.SetFloat("verticalVelocity", _verticalVelocity); + _anim.SetFloat("angleDeltaRad", _angleDiff * Mathf.Deg2Rad); + _anim.SetFloat("forwardVelocity", _forwardVelocity); + _anim.SetBool("backflip", false); + _anim.Rebind(); + _anim.SetBool("onGround", _isGrounded); + // _anim.SetFloat("verticalVelocity", _verticalVelocity); + _anim.SetFloat("angleDeltaRad", _angleDiff * Mathf.Deg2Rad); + _anim.SetFloat("forwardVelocity", _forwardVelocity); + _anim.SetBool("backflip", false); + + + OnFixedUpdate(); + _anim.Update(0f); + } + + + // Called each physics step (so long as the Animator component is set to Animate Physics) after FixedUpdate to override root motion. + void OnAnimatorMove() + { + if (_anim == null) + return; + Vector3 movement; + float verticalVelocity = _verticalVelocity; + if (_isGrounded) + { + // find ground + RaycastHit hit; + var rayStart = transform.position + ((Vector3.up * kGroundedRayDistance) * 0.5f); + Ray ray = new Ray(rayStart, -Vector3.up); + if (Physics.Raycast(ray, out hit, kGroundedRayDistance, ~IgnoreLayers, QueryTriggerInteraction.Ignore)) + { + // project velocity on plane + movement = _anim.deltaPosition; + movement.y = 0f; + movement = Vector3.ProjectOnPlane(_anim.deltaPosition, hit.normal); + + // store material under foot + Renderer groundRenderer = hit.collider.GetComponentInChildren(); + materialUnderFoot = groundRenderer ? groundRenderer.sharedMaterial : null; + } + else + { + // fail safe incase ray does not collide + movement = _anim.deltaPosition; + materialUnderFoot = null; + } + _lastGroundForwardVelocity = movement / Time.fixedDeltaTime; + } + else + { + movement = _lastGroundForwardVelocity * Time.fixedDeltaTime; + } + // Rotate the transform of the character controller by the animation's root rotation. + _characterController.transform.rotation *= _anim.deltaRotation; + // print ($"delta:{_anim.deltaPosition.magnitude} movement:{movement.magnitude} delta:{_anim.deltaPosition} movement:{movement}"); + + // Add to the movement with the calculated vertical speed. + movement += verticalVelocity * Vector3.up * Time.fixedDeltaTime; + + // Move the character controller. + _characterController.Move(movement); + + // After the movement store whether or not the character controller is grounded. + _isGrounded = _characterController.isGrounded; + + // If Ellen is not on the ground then send the vertical speed to the animator. + // This is so the vertical speed is kept when landing so the correct landing animation is played. + + if (!_isGrounded) + _anim.SetFloat("verticalVelocity", verticalVelocity); + + // Send whether or not Ellen is on the ground to the animator. + _anim.SetBool("onGround", _isGrounded); + } + + void RotateTarget(float deltaTime) + { + if (!Mathf.Approximately(_inputController.CameraRotation.x * _inputController.CameraRotation.x, 0f)) + { + float roation = _targetDirection.eulerAngles.y; + float delta = _inputController.CameraRotation.x * kGroundTurnSpeedProportion * deltaTime; + roation += delta; + // print($"{_targetDirection.eulerAngles.y} delta:{delta}, {roation}"); + _targetDirection = Quaternion.Euler(0f, roation, 0f); + } + } + void SetTargetFromMoveInput() + { + if (!_inputController) //if it is used without a ragdoll agent (for example, for ROM extraction), we still need to initialize it + OnAgentInitialize(); + + Vector2 moveInput = _inputController.MovementVector; + Vector3 localMovementDirection = new Vector3(moveInput.x, 0f, moveInput.y).normalized; + _targetDirection = Quaternion.Euler(localMovementDirection); + } + + void SetTargetRotation() + { + // Create three variables, move input local to the player, flattened forward direction of the camera and a local target rotation. + Vector2 moveInput = _inputController.MovementVector; + Vector3 localMovementDirection = new Vector3(moveInput.x, 0f, moveInput.y).normalized; + + Vector3 forward = _targetDirection * Vector3.forward; + forward.y = 0f; + forward.Normalize(); + + Quaternion targetRotation; + + // // If the local movement direction is the opposite of forward then the target rotation should be towards the camera. + // if (Mathf.Approximately(Vector3.Dot(localMovementDirection, Vector3.forward), -1.0f)) + // { + // targetRotation = Quaternion.LookRotation(-forward); + // } + // else + // { + // // Otherwise the rotation should be the offset of the input from the camera's forward. + // Quaternion cameraToInputOffset = Quaternion.FromToRotation(Vector3.forward, localMovementDirection); + // targetRotation = Quaternion.LookRotation(cameraToInputOffset * forward); + // } + // targetRotation = Quaternion.LookRotation(-forward); + Quaternion cameraToInputOffset = Quaternion.FromToRotation(Vector3.forward, localMovementDirection); + targetRotation = Quaternion.LookRotation(cameraToInputOffset * forward); + + + // The desired forward direction. + Vector3 resultingForward = targetRotation * Vector3.forward; + + // Find the difference between the current rotation of the player and the desired rotation of the player in radians. + float angleCurrent = Mathf.Atan2(transform.forward.x, transform.forward.z) * Mathf.Rad2Deg; + float targetAngle = Mathf.Atan2(resultingForward.x, resultingForward.z) * Mathf.Rad2Deg; + + _angleDiff = Mathf.DeltaAngle(angleCurrent, targetAngle); + _targetRotation = targetRotation; + } + void UpdateOrientation(float deltaTime) + { + _anim.SetFloat("angleDeltaRad", _angleDiff * Mathf.Deg2Rad); + + Vector3 localInput = new Vector3(_inputController.MovementVector.x, 0f, _inputController.MovementVector.y); + float groundedTurnSpeed = Mathf.Lerp(MaxTurnVelocity, MinTurnVelocity, _forwardVelocity / _desiredForwardSpeed); + float actualTurnSpeed = _isGrounded ? groundedTurnSpeed : Vector3.Angle(transform.forward, localInput) * kInverseOneEighty * kAirborneTurnSpeedProportion * groundedTurnSpeed; + _targetRotation = Quaternion.RotateTowards(transform.rotation, _targetRotation, actualTurnSpeed * deltaTime); + bool hasNan = float.IsNaN(_targetRotation.x) || float.IsNaN(_targetRotation.y) || float.IsNaN(_targetRotation.z); + if (!hasNan) + transform.rotation = _targetRotation; + } + + void CalculateForwardMovement(float deltaTime) + { + // Cache the move input and cap it's magnitude at 1. + Vector2 moveInput = _inputController.MovementVector; + if (moveInput.sqrMagnitude > 1f) + moveInput.Normalize(); + + // Calculate the speed intended by input. + _desiredForwardSpeed = moveInput.magnitude * MaxForwardVelocity; + + // Note: acceleration is handle in InputController + _forwardVelocity = _desiredForwardSpeed; + + // Set the animator parameter to control what animation is being played. + _anim.SetFloat("forwardVelocity", _forwardVelocity); + } + void CalculateVerticalMovement(float deltaTime) + { + // If jump is not currently held and is on the ground then ready to jump. + if (!_inputController.Jump && _isGrounded) + _readyToJump = true; + + _anim.SetBool("backflip", _inputController.Backflip); + + if (_isGrounded) + { + // When grounded we apply a slight negative vertical speed to make Ellen "stick" to the ground. + _verticalVelocity = Physics.gravity.y * kStickingGravityProportion; + + // If jump is held, Ellen is ready to jump and not currently in the middle of a melee combo... + if (_inputController.Jump && _readyToJump && !_inCombo) + { + // ... then override the previously set vertical speed and make sure she cannot jump again. + _verticalVelocity = JumpSpeed; + _isGrounded = false; + _readyToJump = false; + _anim.SetBool("onGround", false); + } + } + else + { + // If Ellen is airborne, the jump button is not held and Ellen is currently moving upwards... + if (!_inputController.Jump && _verticalVelocity > 0.0f) + { + // ... decrease Ellen's vertical speed. + // This is what causes holding jump to jump higher that tapping jump. + _verticalVelocity -= kJumpAbortSpeed * deltaTime; + } + + // If a jump is approximately peaking, make it absolute. + if (Mathf.Approximately(_verticalVelocity, 0f)) + { + _verticalVelocity = 0f; + } + + // If Ellen is airborne, apply gravity. + _verticalVelocity += Physics.gravity.y * deltaTime; + } + } +} \ No newline at end of file diff --git a/Assets/MarathonController/Scripts/AnimationController.cs.meta b/Assets/MarathonController/Scripts/AnimationController.cs.meta new file mode 100644 index 0000000..9d1870b --- /dev/null +++ b/Assets/MarathonController/Scripts/AnimationController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83f0f0517c63942fcb11f8a22d799597 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/AnimationMocapController.cs b/Assets/MarathonController/Scripts/AnimationMocapController.cs new file mode 100644 index 0000000..78479d4 --- /dev/null +++ b/Assets/MarathonController/Scripts/AnimationMocapController.cs @@ -0,0 +1,50 @@ +using UnityEngine; + + +public class AnimationMocapController : MonoBehaviour, IAnimationController +{ + Animator _anim; + + CharacterController _characterController; + + Quaternion _targetDirection; // direction we want to move towards + + public Vector3 MovementVelocity; + + public void OnEnable() + { + OnAgentInitialize(); + } + + public void OnAgentInitialize() + { + if (!_anim) + _anim = GetComponent(); + + if (!_characterController) + _characterController = GetComponent(); + + _targetDirection = Quaternion.Euler(0, 90, 0); + MovementVelocity = Vector3.zero; + } + public void OnReset() + { + _targetDirection = Quaternion.Euler(0, 90, 0); + // MovementVelocity = Vector3.zero; + // _anim.Rebind(); + // _anim.Update(0f); + } + void OnAnimatorMove() + { + if (_anim == null) + return; + var movement = _anim.deltaPosition; + movement.y = 0f; + MovementVelocity = movement / Time.deltaTime; + this.transform.position += movement; + } + public Vector3 GetDesiredVelocity() + { + return MovementVelocity; + } +} \ No newline at end of file diff --git a/Assets/MarathonController/Scripts/AnimationMocapController.cs.meta b/Assets/MarathonController/Scripts/AnimationMocapController.cs.meta new file mode 100644 index 0000000..0c30bb6 --- /dev/null +++ b/Assets/MarathonController/Scripts/AnimationMocapController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fda6ef4d268493b4db068ca6e63c3b45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/DebugArticulationBody.cs b/Assets/MarathonController/Scripts/DebugArticulationBody.cs new file mode 100644 index 0000000..5dc65d3 --- /dev/null +++ b/Assets/MarathonController/Scripts/DebugArticulationBody.cs @@ -0,0 +1,88 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class DebugArticulationBody : MonoBehaviour +{ + public Vector3 jointAcceleration; + public Vector3 jointForce; + public Vector3 jointPosition; + public Vector3 jointVelocity; + public ArticulationJacobian jacobian; + public List dofStartIndices; + public List driveTargets; + public List driveTargetVelocities; + public List jointAccelerations; + public List jointForces; + public List jointPositions; + public List jointVelocities; + ArticulationBody _articulationBody; + // Start is called before the first frame update + void Start() + { + _articulationBody = GetComponent(); + foreach (var ab in this.GetComponentsInChildren()) + { + if (ab.GetComponent() == null) + { + ab.gameObject.AddComponent(); + } + } + } + + // Update is called once per frame + void Update() + { + if (_articulationBody == null) + return; + if (_articulationBody.isRoot) + { + if (dofStartIndices == null) + { + dofStartIndices = Enumerable.Range(0,_articulationBody.dofCount).ToList(); + driveTargets = Enumerable.Range(0,_articulationBody.dofCount) + .Select(x=>0f).ToList(); + driveTargetVelocities = Enumerable.Range(0,_articulationBody.dofCount) + .Select(x=>0f).ToList(); + jointAccelerations = Enumerable.Range(0,_articulationBody.dofCount) + .Select(x=>0f).ToList(); + jointForces = Enumerable.Range(0,_articulationBody.dofCount) + .Select(x=>0f).ToList(); + jointPositions = Enumerable.Range(0,_articulationBody.dofCount) + .Select(x=>0f).ToList(); + jointVelocities = Enumerable.Range(0,_articulationBody.dofCount) + .Select(x=>0f).ToList(); + } + // _articulationBody.GetDenseJacobian(ref jacobian); + _articulationBody.GetDofStartIndices(dofStartIndices); + _articulationBody.GetDriveTargets(driveTargets); + _articulationBody.GetDriveTargetVelocities(driveTargetVelocities); + _articulationBody.GetJointAccelerations(jointAccelerations); + _articulationBody.GetJointForces(jointForces); + _articulationBody.GetJointPositions(jointPositions); + _articulationBody.GetJointVelocities(jointVelocities); + } + if (_articulationBody.dofCount > 0) + { + jointAcceleration.x = _articulationBody.jointAcceleration[0]; + jointForce.x = _articulationBody.jointForce[0]; + jointPosition.x = _articulationBody.jointPosition[0]; + jointVelocity.x = _articulationBody.jointVelocity[0]; + } + if (_articulationBody.dofCount > 1) + { + jointAcceleration.y = _articulationBody.jointAcceleration[1]; + jointForce.y = _articulationBody.jointForce[1]; + jointPosition.y = _articulationBody.jointPosition[1]; + jointVelocity.y = _articulationBody.jointVelocity[1]; + } + if (_articulationBody.dofCount > 2) + { + jointAcceleration.z = _articulationBody.jointAcceleration[2]; + jointForce.z = _articulationBody.jointForce[2]; + jointPosition.z = _articulationBody.jointPosition[2]; + jointVelocity.z = _articulationBody.jointVelocity[2]; + } + } +} diff --git a/Assets/MarathonController/Scripts/DebugArticulationBody.cs.meta b/Assets/MarathonController/Scripts/DebugArticulationBody.cs.meta new file mode 100644 index 0000000..54d4d92 --- /dev/null +++ b/Assets/MarathonController/Scripts/DebugArticulationBody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3ff624b5f0d04045a1c2fe7658c3fdf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/DefaultAnimationController.cs b/Assets/MarathonController/Scripts/DefaultAnimationController.cs new file mode 100644 index 0000000..25e7014 --- /dev/null +++ b/Assets/MarathonController/Scripts/DefaultAnimationController.cs @@ -0,0 +1,60 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + + +//This is a very simple animation controller that does nothing. +//We will use it when we generate a physics ragdoll from an animated character +//that has no specific animationController (i.e., a component that implements the IAnimaitonController interface) +public class DefaultAnimationController : MonoBehaviour, IAnimationController +{ + + + [SerializeField] + Animator _anim; + + + + public void OnEnable() + { + + OnAgentInitialize(); + } + + + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + + public void OnAgentInitialize() { + + if (!_anim) + _anim = GetComponent(); + + + } + public void OnReset() { + + + + } + public Vector3 GetDesiredVelocity() { + //TODO: check if this is really what we want, we may need the root velocity + return _anim.angularVelocity; + + + } + + +} diff --git a/Assets/MarathonController/Scripts/DefaultAnimationController.cs.meta b/Assets/MarathonController/Scripts/DefaultAnimationController.cs.meta new file mode 100644 index 0000000..3328e11 --- /dev/null +++ b/Assets/MarathonController/Scripts/DefaultAnimationController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 483dd03a765994d47aa7b4c23af4636e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/IAnimationController.cs b/Assets/MarathonController/Scripts/IAnimationController.cs new file mode 100644 index 0000000..9ebdd8d --- /dev/null +++ b/Assets/MarathonController/Scripts/IAnimationController.cs @@ -0,0 +1,9 @@ +using UnityEngine; + + +public interface IAnimationController +{ + void OnAgentInitialize(); + void OnReset(); + Vector3 GetDesiredVelocity(); +} \ No newline at end of file diff --git a/Assets/MarathonController/Scripts/IAnimationController.cs.meta b/Assets/MarathonController/Scripts/IAnimationController.cs.meta new file mode 100644 index 0000000..a4d9c0d --- /dev/null +++ b/Assets/MarathonController/Scripts/IAnimationController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a031743a3ca1c084da6715804ea7f77d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs b/Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs new file mode 100644 index 0000000..b753871 --- /dev/null +++ b/Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class IgnoreColliderForObservation : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + +} diff --git a/Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs.meta b/Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs.meta new file mode 100644 index 0000000..f40ad59 --- /dev/null +++ b/Assets/MarathonController/Scripts/IgnoreColliderForObservation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eebc76d5f8d6545e2a99489d15e426be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/IgnoreColliderForReward.cs b/Assets/MarathonController/Scripts/IgnoreColliderForReward.cs new file mode 100644 index 0000000..1552974 --- /dev/null +++ b/Assets/MarathonController/Scripts/IgnoreColliderForReward.cs @@ -0,0 +1,8 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class IgnoreColliderForReward : MonoBehaviour +{ + +} diff --git a/Assets/MarathonController/Scripts/IgnoreColliderForReward.cs.meta b/Assets/MarathonController/Scripts/IgnoreColliderForReward.cs.meta new file mode 100644 index 0000000..0bf0beb --- /dev/null +++ b/Assets/MarathonController/Scripts/IgnoreColliderForReward.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28433c7e35a934e9993f0337e2aacd4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs b/Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs new file mode 100644 index 0000000..4042513 --- /dev/null +++ b/Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs @@ -0,0 +1,594 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.AI; +using System.Linq.Expressions; + +public class MapAnim2Ragdoll : MonoBehaviour, IOnSensorCollision +{//previously Mocap Controller Artanim + public List SensorIsInTouch; + List _sensors; + + internal Animator anim; + + [Range(0f,1f)] + public float NormalizedTime; + public float Lenght; + public bool IsLoopingAnimation; + + [SerializeField] + Rigidbody _rigidbodyRoot; + + List _animTransforms; + + public List _ragdollTransforms; + List _ragDollRigidbody; + + + // private List _rigidbodies; + // private List _transforms; + + public bool RequestCamera; + public bool CameraFollowMe; + public Transform CameraTarget; + + Vector3 _resetPosition; + Quaternion _resetRotation; + + [Space(20)] + [Header("Stats")] + public Vector3 CenterOfMassVelocity; + public float CenterOfMassVelocityMagnitude; + public Vector3 CenterOfMassVelocityInRootSpace; + public float CenterOfMassVelocityMagnitudeInRootSpace; + public Vector3 LastCenterOfMassInWorldSpace; + public Vector3 LastRootPositionInWorldSpace; + public Vector3 LastHeadPositionInWorldSpace; + public Vector3 HorizontalDirection; + + public List LastPosition; + public List LastRotation; + public List Velocities; + public List AngularVelocities; + + + //TODO: find a way to remove this dependency (otherwise, not fully procedural) + private bool _usingMocapAnimatorController = false; + + IAnimationController _mocapAnimController; + + // [SerializeField] + // float _debugDistance = 0.0f; + + private List _offsetsSource2RB = null; + + //for debugging, we disable this when setTpose in MarathonTestBedController is on + [HideInInspector] + public bool doFixedUpdate = true; + + bool _hasLazyInitialized; + + bool _hackyNavAgentMode; + + Collider _root; + Collider _head; + + public void OnAgentInitialize() + { + LazyInitialize(); + } + void LazyInitialize() + { + if (_hasLazyInitialized) + return; + + // check if we need to create our ragdoll + var ragdoll4Mocap = GetComponentsInChildren() + .Where(x=>x.name == "RagdollForMocap") + .FirstOrDefault(); + if (ragdoll4Mocap == null) + DynamicallyCreateRagdollForMocap(); + + _mocapAnimController = GetComponent(); + _usingMocapAnimatorController = _mocapAnimController != null; + if (!_usingMocapAnimatorController) + { + Debug.LogWarning("Mocap Controller is working WITHOUT AnimationController"); + } + + var ragdollTransforms = + GetComponentsInChildren() + .Where(x=>x.name.StartsWith("articulation")) + .ToList(); + var ragdollNames = ragdollTransforms + .Select(x=>x.name) + .ToList(); + var animNames = ragdollNames + .Select(x=>x.Replace("articulation:","")) + .ToList(); + var animTransforms = animNames + .Select(x=>GetComponentsInChildren().FirstOrDefault(y=>y.name == x)) + .Where(x=>x!=null) + .ToList(); + _animTransforms = new List(); + _ragdollTransforms = new List(); + // first time, copy position and rotation + foreach (var animTransform in animTransforms) + { + var ragdollTransform = ragdollTransforms + .First(x=>x.name == $"articulation:{animTransform.name}"); + ragdollTransform.position = animTransform.position; + ragdollTransform.rotation = animTransform.rotation; + _animTransforms.Add(animTransform); + _ragdollTransforms.Add(ragdollTransform); + } + _ragDollRigidbody = _ragdollTransforms + .Select(x=>x.GetComponent()) + .Where(x=> x != null) + .ToList(); + + SetupSensors(); + + if (RequestCamera && CameraTarget != null) + { + var instances = FindObjectsOfType().ToList(); + if (instances.Count(x=>x.CameraFollowMe) < 1) + CameraFollowMe = true; + } + if (CameraFollowMe){ + var camera = FindObjectOfType(); + var follow = camera.GetComponent(); + follow.target = CameraTarget; + } + var navAgent = GetComponent(); + if (navAgent) + { + var radius = 16f; + Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * radius; + NavMeshHit hit; + Vector3 finalPosition = Vector3.zero; + if (NavMesh.SamplePosition(randomDirection, out hit, radius, 1)) + { + finalPosition = hit.position; + } + transform.position = finalPosition; + _hackyNavAgentMode = true; + } + _resetPosition = transform.position; + _resetRotation = transform.rotation; + + _hasLazyInitialized = true; + + // NOTE: do after setting _hasLazyInitialized as can trigger infinate loop + anim = GetComponent(); + if (_usingMocapAnimatorController) + { + anim.Update(0f); + } + var colliders = GetComponentsInChildren().ToList(); + _root = colliders.FirstOrDefault(); + _head = colliders.FirstOrDefault(x=>x.name.ToLower().Contains("head")); + if (_head == null) + { + Debug.LogWarning($"{nameof(MapAnim2Ragdoll)}.{nameof(LazyInitialize)}() can not find the head. "); + } + + } + + public void DynamicallyCreateRagdollForMocap() + { + // Find Ragdoll in parent + Transform parent = this.transform.parent; + ProcRagdollAgent[] ragdolls = parent.GetComponentsInChildren(true); + Assert.AreEqual(ragdolls.Length, 1, "code only supports one RagDollAgent"); + ProcRagdollAgent ragDoll = ragdolls[0]; + var ragdollForMocap = new GameObject("RagdollForMocap"); + ragdollForMocap.transform.SetParent(this.transform, false); + Assert.AreEqual(ragDoll.transform.childCount, 1, "code only supports 1 child"); + var ragdollRoot = ragDoll.transform.GetChild(0); + // clone the ragdoll root + var clone = Instantiate(ragdollRoot); + // remove '(clone)' from names + foreach (var t in clone.GetComponentsInChildren()) + { + t.name = t.name.Replace("(Clone)", ""); + } + + + // swap ArticulatedBody for RidgedBody + List bodiesNamesToDelete = new List(); + foreach (var abody in clone.GetComponentsInChildren()) + { + var bodyGameobject = abody.gameObject; + var rb = bodyGameobject.AddComponent(); + rb.mass = abody.mass; + rb.useGravity = abody.useGravity; + // it makes no sense but if i do not set the layer here, then some objects dont have the correct layer + rb.gameObject.layer = this.gameObject.layer; + bodiesNamesToDelete.Add(abody.name); + } + foreach (var name in bodiesNamesToDelete) + { + var abody = clone + .GetComponentsInChildren() + .First(x=>x.name == name); + DestroyImmediate(abody); + + } + // make Kinematic + foreach (var rb in clone.GetComponentsInChildren()) + { + rb.isKinematic = true; + } + + + //we do this after removing the ArticulationBody, since moving the root in the articulationBody creates TROUBLE + clone.transform.SetParent(ragdollForMocap.transform, false); + + + // setup HandleOverlap + foreach (var rb in clone.GetComponentsInChildren()) + { + // remove cloned HandledOverlap + var oldHandleOverlap = rb.GetComponent(); + if (oldHandleOverlap != null) + { + DestroyImmediate(oldHandleOverlap); + } + var handleOverlap = rb.gameObject.AddComponent(); + handleOverlap.Parent = clone.gameObject; + } + + // set the root + this._rigidbodyRoot = clone.GetComponent(); + // set the layers + ragdollForMocap.layer = this.gameObject.layer; + foreach (Transform child in ragdollForMocap.GetComponentInChildren()) + { + child.gameObject.layer = this.gameObject.layer; + } + var triggers = ragdollForMocap + .GetComponentsInChildren() + .Where(x=>x.isTrigger); + foreach (var trigger in triggers) + { + trigger.gameObject.SetActive(false); + trigger.gameObject.SetActive(true); + } + } + void SetupSensors() + { + _sensors = GetComponentsInChildren() + .Select(x=>x.gameObject) + .ToList(); + SensorIsInTouch = Enumerable.Range(0,_sensors.Count).Select(x=>0f).ToList(); + } + + public void OnStep(float timeDelta) { + LazyInitialize(); + + if (_lastPositionTime == Time.time) + return; + + //if (!_usesMotionMatching) + { + AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0); + AnimatorClipInfo[] clipInfo = anim.GetCurrentAnimatorClipInfo(0); + Lenght = stateInfo.length; + NormalizedTime = stateInfo.normalizedTime; + IsLoopingAnimation = stateInfo.loop; + var timeStep = stateInfo.length * stateInfo.normalizedTime; + } + MimicAnimation(); + // get Center Of Mass velocity in f space + var newCOM = GetCenterOfMass(); + var lastCOM = LastCenterOfMassInWorldSpace; + LastCenterOfMassInWorldSpace = newCOM; + var velocity = newCOM - lastCOM; + velocity -= _snapOffset; + velocity /= timeDelta; + CenterOfMassVelocity = velocity; + CenterOfMassVelocityMagnitude = CenterOfMassVelocity.magnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(velocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + HorizontalDirection = new Vector3(0f, transform.eulerAngles.y, 0f); + LastRootPositionInWorldSpace = _root.transform.position; + LastHeadPositionInWorldSpace = _head.transform.position; + + var newPosition = _ragDollRigidbody + .Select(x=>x.position) + .ToList(); + var newRotation = _ragDollRigidbody + .Select(x=>x.transform.localRotation) + .ToList(); + Velocities = LastPosition + // .Zip(newPosition, (last, cur)=> (cur-last)/timeDelta) + .Zip(newPosition, (last, cur)=> (cur-last-_snapOffset)/timeDelta) + .ToList(); + AngularVelocities = LastRotation + .Zip(newRotation, (last, cur)=> Utils.GetAngularVelocity(cur, last, timeDelta)) + .ToList(); + LastPosition = newPosition; + LastRotation = newRotation; + _snapOffset = Vector3.zero; + _lastPositionTime = Time.time; + } + + float _lastPositionTime = float.MinValue; + Vector3 _snapOffset = Vector3.zero; + void MimicAnimation() { + if (!anim.enabled) + return; + // copy position for root (assume first target is root) + _ragdollTransforms[0].position = _animTransforms[0].position; + // copy rotation + for (int i = 0; i < _animTransforms.Count; i++) + { + _ragdollTransforms[i].rotation = _animTransforms[i].rotation; + } + } + + + public Vector3 GetCenterOfMass() + { + var centerOfMass = Vector3.zero; + float totalMass = 0f; + foreach (Rigidbody ab in _ragDollRigidbody) + { + centerOfMass += ab.worldCenterOfMass * ab.mass; + totalMass += ab.mass; + } + centerOfMass /= totalMass; + // centerOfMass -= _spawnableEnv.transform.position; + return centerOfMass; + } + + + public void OnReset(Quaternion resetRotation) + { + LazyInitialize(); + + if (!doFixedUpdate) + return; + + if (!_hackyNavAgentMode) + { + transform.position = _resetPosition; + // handle character controller skin width + var characterController = GetComponent(); + if (characterController != null) + { + var pos = transform.position; + pos.y += characterController.skinWidth; + transform.position = pos; + } + transform.rotation = resetRotation; + } + MimicAnimation(); + _snapOffset = Vector3.zero; + LastCenterOfMassInWorldSpace = GetCenterOfMass(); + LastRootPositionInWorldSpace = _root.transform.position; + LastHeadPositionInWorldSpace = _head.transform.position; + LastPosition = _ragDollRigidbody + .Select(x=>x.position) + .ToList(); + LastRotation = _ragDollRigidbody + .Select(x=>x.transform.localRotation) + .ToList(); + } + + public void OnSensorCollisionEnter(Collider sensorCollider, GameObject other) + { + LazyInitialize(); + + //if (string.Compare(other.name, "Terrain", true) !=0) + if (other.layer != LayerMask.NameToLayer("Ground")) + return; + var sensor = _sensors + .FirstOrDefault(x=>x == sensorCollider.gameObject); + if (sensor != null) { + var idx = _sensors.IndexOf(sensor); + SensorIsInTouch[idx] = 1f; + } + } + public void OnSensorCollisionExit(Collider sensorCollider, GameObject other) + { + LazyInitialize(); + + if (other.layer != LayerMask.NameToLayer("Ground")) + return; + var sensor = _sensors + .FirstOrDefault(x=>x == sensorCollider.gameObject); + if (sensor != null) { + var idx = _sensors.IndexOf(sensor); + SensorIsInTouch[idx] = 0f; + } + } + public void CopyStatesTo(GameObject target) + { + LazyInitialize(); + + + var targets = target.GetComponentsInChildren().ToList(); + if (targets?.Count == 0) + return; + var root = targets.First(x=>x.isRoot); + // root.gameObject.SetActive(false); + var rstat = _ragDollRigidbody.First(x=>x.name == root.name); + root.TeleportRoot(rstat.position, rstat.rotation); + root.transform.position = rstat.position; + root.transform.rotation = rstat.rotation; + // root.gameObject.SetActive(true); + foreach (var targetRb in targets) + { + var stat = _ragDollRigidbody.First(x=>x.name == targetRb.name); + if (targetRb.isRoot) + continue; + // bool shouldDebug = targetRb.name == "articulation:mixamorig:RightArm"; + // bool didDebug = false; + + if (targetRb.jointType == ArticulationJointType.SphericalJoint) + { + float stiffness = 0f; + float damping = float.MaxValue; + float forceLimit = 0f; + // if (shouldDebug) + // didDebug = true; + Vector3 decomposedRotation = Utils.GetSwingTwist(stat.transform.localRotation); + int j=0; + List thisJointPosition = Enumerable.Range(0,targetRb.dofCount).Select(x=>0f).ToList(); + + if (targetRb.twistLock == ArticulationDofLock.LimitedMotion) + { + var drive = targetRb.xDrive; + var deg = decomposedRotation.x; + thisJointPosition[j++] = deg * Mathf.Deg2Rad; + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = forceLimit; + drive.target = deg; + targetRb.xDrive = drive; + } + if (targetRb.swingYLock == ArticulationDofLock.LimitedMotion) + { + var drive = targetRb.yDrive; + var deg = decomposedRotation.y; + thisJointPosition[j++] = deg * Mathf.Deg2Rad; + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = forceLimit; + drive.target = deg; + targetRb.yDrive = drive; + } + if (targetRb.swingZLock == ArticulationDofLock.LimitedMotion) + { + var drive = targetRb.zDrive; + var deg = decomposedRotation.z; + thisJointPosition[j++] = deg * Mathf.Deg2Rad; + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = forceLimit; + drive.target = deg; + targetRb.zDrive = drive; + } + switch (targetRb.dofCount) + { + case 1: + targetRb.jointPosition = new ArticulationReducedSpace(thisJointPosition[0]); + break; + case 2: + targetRb.jointPosition = new ArticulationReducedSpace( + thisJointPosition[0], + thisJointPosition[1]); + break; + case 3: + targetRb.jointPosition = new ArticulationReducedSpace( + thisJointPosition[0], + thisJointPosition[1], + thisJointPosition[2]); + break; + default: + break; + } + } + } + foreach (var childAb in root.GetComponentsInChildren()) + { + childAb.angularVelocity = Vector3.zero; + childAb.velocity = Vector3.zero; + } + } + public void CopyVelocityTo(GameObject targetGameObject, Vector3 velocity) + { + LazyInitialize(); + + var targets = targetGameObject.GetComponentsInChildren().ToList(); + if (targets?.Count == 0) + return; + var root = targets.First(x=>x.isRoot); + + if (Velocities == null || Velocities.Count == 0) + return; + + Vector3 aveVelocity = Vector3.zero; + Vector3 aveAngularVelocity = Vector3.zero; + for (int i = 0; i < _ragDollRigidbody.Count; i++) + { + var source = _ragDollRigidbody[i]; + var target = targets.First(x=>x.name == source.name); + var vel = Velocities[i]; + var angVel = AngularVelocities[i]; + foreach (var childAb in target.GetComponentsInChildren()) + { + if (childAb == target) + continue; + childAb.transform.localPosition = Vector3.zero; + childAb.transform.localEulerAngles = Vector3.zero; + childAb.angularVelocity = Vector3.zero; + childAb.velocity = Vector3.zero; + } + if (target.jointType == ArticulationJointType.SphericalJoint && !target.isRoot) + { + int j=0; + List thisJointVelocity = Enumerable.Range(0, target.dofCount).Select(x=>0f).ToList(); + + if (target.twistLock == ArticulationDofLock.LimitedMotion) + { + thisJointVelocity[j++] = angVel.x; + } + if (target.swingYLock == ArticulationDofLock.LimitedMotion) + { + thisJointVelocity[j++] = angVel.y; + } + if (target.swingZLock == ArticulationDofLock.LimitedMotion) + { + thisJointVelocity[j++] = angVel.z; + } + switch (target.dofCount) + { + case 1: + target.jointVelocity = new ArticulationReducedSpace(thisJointVelocity[0]); + break; + case 2: + target.jointVelocity = new ArticulationReducedSpace( + thisJointVelocity[0], + thisJointVelocity[1]); + break; + case 3: + target.jointVelocity = new ArticulationReducedSpace( + thisJointVelocity[0], + thisJointVelocity[1], + thisJointVelocity[2]); + break; + default: + break; + } + + } + target.velocity = vel; + aveVelocity += Velocities[i]; + aveAngularVelocity += AngularVelocities[i]; + } + var c = (float)_ragDollRigidbody.Count; + aveVelocity = aveVelocity / c; + aveAngularVelocity = aveAngularVelocity / c; + c = c; + } + public Vector3 SnapTo(Vector3 snapPosition) + { + snapPosition.y = transform.position.y; + var snapDistance = snapPosition-transform.position; + transform.position = snapPosition; + _snapOffset += snapDistance; + return snapDistance; + } + public List GetRigidBodies() + { + LazyInitialize(); + return GetComponentsInChildren().ToList(); + } +} \ No newline at end of file diff --git a/Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs.meta b/Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs.meta new file mode 100644 index 0000000..d63bdb4 --- /dev/null +++ b/Assets/MarathonController/Scripts/MapAnim2Ragdoll.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efc73e620e6b44de198ad1fc443291bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/MapRagdoll2Anim.cs b/Assets/MarathonController/Scripts/MapRagdoll2Anim.cs new file mode 100644 index 0000000..c2b2120 --- /dev/null +++ b/Assets/MarathonController/Scripts/MapRagdoll2Anim.cs @@ -0,0 +1,66 @@ +using System; +using System.Linq; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class MapRagdoll2Anim : MonoBehaviour + +//this class does exactly the symetrical of MocapControllerArtanim: it maps animations from a ragdoll to a rigged character +{ + + [SerializeField] + ArticulationBody _articulationBodyRoot; + + List _animTransforms; + List _ragdollTransforms; + + //to generate an environment automatically from a rigged character and an animation (see folder ROM-extraction) + public ArticulationBody ArticulationBodyRoot + { + set => _articulationBodyRoot = value; + get => _articulationBodyRoot; + } + + // use LateUpdate as physics runs at 2x and we only need to run once per render + private void LateUpdate() + { + // MimicAnimationArtanim(); + if (_animTransforms == null) + { + var ragdollTransforms = + _articulationBodyRoot.GetComponentsInChildren() + .Where(x=>x.name.StartsWith("articulation")) + .ToList(); + var ragdollNames = ragdollTransforms + .Select(x=>x.name) + .ToList(); + var animNames = ragdollNames + .Select(x=>x.Replace("articulation:","")) + .ToList(); + var animTransforms = animNames + .Select(x=>GetComponentsInChildren().FirstOrDefault(y=>y.name == x)) + .Where(x=>x!=null) + .ToList(); + _animTransforms = new List(); + _ragdollTransforms = new List(); + // first time, copy position and rotation + foreach (var animTransform in animTransforms) + { + var ragdollTransform = ragdollTransforms + .First(x=>x.name == $"articulation:{animTransform.name}"); + animTransform.position = ragdollTransform.position; + animTransform.rotation = ragdollTransform.rotation; + _animTransforms.Add(animTransform); + _ragdollTransforms.Add(ragdollTransform); + } + } + // copy position for root (assume first target is root) + _animTransforms[0].position = _ragdollTransforms[0].position; + // copy rotation + for (int i = 0; i < _animTransforms.Count; i++) + { + _animTransforms[i].rotation = _ragdollTransforms[i].rotation; + } + } +} diff --git a/Assets/MarathonController/Scripts/MapRagdoll2Anim.cs.meta b/Assets/MarathonController/Scripts/MapRagdoll2Anim.cs.meta new file mode 100644 index 0000000..452cf65 --- /dev/null +++ b/Assets/MarathonController/Scripts/MapRagdoll2Anim.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66999d97560d741a482b847c01b03a33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/MarConObservations2Learn.cs b/Assets/MarathonController/Scripts/MarConObservations2Learn.cs new file mode 100644 index 0000000..d537457 --- /dev/null +++ b/Assets/MarathonController/Scripts/MarConObservations2Learn.cs @@ -0,0 +1,148 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; +using ManyWorlds; +using UnityEngine.Assertions; +using Unity.Collections; + +public class MarConObservations2Learn : MonoBehaviour +{ + public string[] JointNames; + [Header("Observations")] + + [Tooltip("Kinematic character center of mass velocity, Vector3")] + public Vector3 MocapCOMVelocity; + + [Tooltip("RagDoll character center of mass velocity, Vector3")] + public Vector3 RagDollCOMVelocity; + + [Tooltip("User-input desired horizontal CM velocity. Vector2")] + public Vector2 InputDesiredHorizontalVelocity; + + [Tooltip("User-input requests jump, bool")] + public bool InputJump; + + [Tooltip("User-input requests backflip, bool")] + public bool InputBackflip; + + [Tooltip("User-input requests stand, bool")] + public bool InputStand; + + [Tooltip("User-input requests walk or run, bool")] + public bool InputWalkOrRun; + [Tooltip("Difference between RagDoll character horizontal CM velocity and user-input desired horizontal CM velocity. Vector2")] + public Vector2 HorizontalVelocityDifference; + + [Tooltip("Positions and velocities for subset of bodies")] + public Vector3[] DifferenceInPositions; + public Vector3[] DifferenceInVelocities; + public float[] DifferenceInDofRotationWithinRangeOfMotion; + public float[] DifferenceInDofAngularVelocity; + public float[] DifferenceInDofRotationInRad; + + + [Tooltip("Smoothed actions produced in the previous step of the policy are collected in t −1")] + public float[] PreviousActions; + + + MarConObservationsStats _mocapStats; + MarConObservationsStats _ragdollStats; + ArticulationBody[] _joints; + InputController _inputController; + SpawnableEnv _spawnableEnv; + public void OnAgentInitialize(GameObject ragdoll, MapAnim2Ragdoll mocap, ArticulationBody[] joints) + { + joints = joints + .Where(x => x.jointType == ArticulationJointType.SphericalJoint) + .Where(x => !x.isRoot) + .Distinct() + .ToArray(); + JointNames = joints + .Select(x=>x.name) + .Select(x=>x.Replace("articulation:", "")) + .Select(x=>x.Replace("mixamorig:", "")) + .ToArray(); + var articulationRoot = GetComponentsInChildren() + .First(x=>x.isRoot); + + _spawnableEnv = GetComponentInParent(); + _inputController = _spawnableEnv.GetComponentInChildren(); + + _joints = joints; + _mocapStats = new GameObject("MocapObservationStats").AddComponent(); + _ragdollStats = new GameObject("RagdollObservationStats").AddComponent(); + _mocapStats.transform.SetParent(_spawnableEnv.transform); + _ragdollStats.transform.SetParent(_spawnableEnv.transform); + _mocapStats.OnAgentInitialize(mocap.transform, _joints, articulationRoot); + _ragdollStats.OnAgentInitialize(ragdoll.transform, _joints, articulationRoot); + + + int dof = 0; + foreach (var m in joints) + { + if (m.twistLock == ArticulationDofLock.LimitedMotion) + dof++; + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + dof++; + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + dof++; + } + PreviousActions = Enumerable.Range(0,dof).Select(x=>0f).ToArray(); + DifferenceInPositions = Enumerable.Range(0,_mocapStats.Positions.Length).Select(x=>Vector3.zero).ToArray(); + DifferenceInVelocities = Enumerable.Range(0,_mocapStats.Positions.Length).Select(x=>Vector3.zero).ToArray(); + DifferenceInDofRotationWithinRangeOfMotion = Enumerable.Range(0,dof).Select(x=>0f).ToArray(); + DifferenceInDofAngularVelocity = Enumerable.Range(0,dof).Select(x=>0f).ToArray(); + DifferenceInDofRotationInRad = Enumerable.Range(0,dof).Select(x=>0f).ToArray(); + } + public void OnStep(float timeDelta) + { + _mocapStats.OnStep(timeDelta); + _ragdollStats.OnStep(timeDelta); + MocapCOMVelocity = _mocapStats.CenterOfMassVelocity; + RagDollCOMVelocity = _ragdollStats.CenterOfMassVelocity; + InputDesiredHorizontalVelocity = new Vector2( + _ragdollStats.DesiredCenterOfMassVelocity.x, + _ragdollStats.DesiredCenterOfMassVelocity.z); + if (_inputController != null) + { + InputJump = _inputController.Jump; + InputBackflip = _inputController.Backflip; + InputStand = _inputController.Stand; + InputWalkOrRun = _inputController.WalkOrRun; + } + HorizontalVelocityDifference = new Vector2( + _ragdollStats.CenterOfMassVelocityDifference.x, + _ragdollStats.CenterOfMassVelocityDifference.z); + for (int i = 0; i < _mocapStats.Positions.Length; i++) + { + DifferenceInPositions[i] = _mocapStats.Positions[i] - _ragdollStats.Positions[i]; + DifferenceInVelocities[i] = _mocapStats.Velocities[i] - _ragdollStats.Velocities[i]; + } + for (int i = 0; i < _mocapStats.DofRotationWithinRangeOfMotion.Length; i++) + { + DifferenceInDofRotationWithinRangeOfMotion[i] = + _mocapStats.DofRotationWithinRangeOfMotion[i] - _ragdollStats.DofRotationWithinRangeOfMotion[i]; + DifferenceInDofAngularVelocity[i] = + _mocapStats.DofAngularVelocity[i] - _ragdollStats.DofAngularVelocity[i]; + DifferenceInDofRotationInRad[i] = + _mocapStats.DofRotationInRad[i] - _ragdollStats.DofRotationInRad[i]; + } + } + public void OnReset() + { + // _mocapStats.OnReset(); + // _RagdollStats.OnReset(); + _ragdollStats.transform.position = _mocapStats.transform.position; + _ragdollStats.transform.rotation = _mocapStats.transform.rotation; + var timeDelta = float.MinValue; + OnStep(timeDelta); + } + public MarConObservationsStats GetRagdollStats() => _ragdollStats; + public Transform GetRagDollCOM() + { + return _ragdollStats.transform; + } + +} diff --git a/Assets/MarathonController/Scripts/MarConObservations2Learn.cs.meta b/Assets/MarathonController/Scripts/MarConObservations2Learn.cs.meta new file mode 100644 index 0000000..64a6c58 --- /dev/null +++ b/Assets/MarathonController/Scripts/MarConObservations2Learn.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9af1acc9cb24942f18be90d74f309aa7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/MarConObservationsStats.cs b/Assets/MarathonController/Scripts/MarConObservationsStats.cs new file mode 100644 index 0000000..9f50a15 --- /dev/null +++ b/Assets/MarathonController/Scripts/MarConObservationsStats.cs @@ -0,0 +1,363 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + + +using ManyWorlds; +using Unity.Collections; +using UnityEngine; + +public class MarConObservationsStats : MonoBehaviour +{ + [Header("Anchor stats")] + public Vector3 HorizontalDirection; // Normalized vector in direction of travel (assume right angle to floor) + public Vector3 AngualrVelocity; + + [Header("Stats, relative to HorizontalDirection & Center Of Mass")] + public Vector3 CenterOfMassVelocity; + public Vector3 CenterOfMassHorizontalVelocity; + public float CenterOfMassVelocityMagnitude; + public Vector3 CenterOfMassVelocityInRootSpace; + public float CenterOfMassVelocityMagnitudeInRootSpace; + public float CenterOfMassHorizontalVelocityMagnitude; + public Vector3 DesiredCenterOfMassVelocity; + public Vector3 CenterOfMassVelocityDifference; + [HideInInspector] public Vector3 LastCenterOfMassInWorldSpace; + [HideInInspector] public Quaternion LastRotation; + [Header("Stats, in local joint space")] + public float[] DofRotationWithinRangeOfMotion; + public float[] DofAngularVelocity; + public float[] DofRotationInRad; + [HideInInspector] public float[] DofLastRotationInRad; + + ArticulationBody[] _articulationBodyJoints; + Rigidbody[] _rigidBodyJoints; + GameObject[] _jointsToTrack; + Collider[] _collidersToTrack; + GameObject[] _jointForTrackedColliders; + public Vector3[] Positions; + public Quaternion[] Rotations; + public Vector3[] Velocities; + public Vector3[] AngualrVelocities; + [HideInInspector] + public Vector3[] LastLocalPositions; + [HideInInspector] + public Quaternion[] LastLocalRotations; + bool LastIsSet; + MapAnim2Ragdoll _mapAnim2Ragdoll; + GameObject _root; + IAnimationController _animationController; + SpawnableEnv _spawnableEnv; + + public void OnAgentInitialize( + Transform defaultTransform, + ArticulationBody[] articulationBodyJoints, + ArticulationBody articulationBodyRoot) + { + _mapAnim2Ragdoll = defaultTransform.GetComponent(); + _spawnableEnv = GetComponentInParent(); + _animationController = _spawnableEnv.GetComponentInChildren(); + + var jointNames = articulationBodyJoints + .Select(x=>x.name) + .Select(x=>x.Replace("articulation:", "")) + .Select(x=>x.Replace("mixamorig:", "")) + .ToArray(); + _articulationBodyJoints = articulationBodyJoints; + _rigidBodyJoints = GetComponentsInChildren(); + if (_rigidBodyJoints.Length > 0) + { + _jointsToTrack = jointNames + .Select(x=>_rigidBodyJoints.First(y => y.name.EndsWith(x))) + .Select(x=>x.gameObject) + .ToArray(); + } + else + { + _jointsToTrack = jointNames + .Select(x=>articulationBodyJoints.First(y => y.name.EndsWith(x))) + .Select(x=>x.gameObject) + .ToArray(); + } + _collidersToTrack = _jointsToTrack + .SelectMany(x=>x.GetComponentsInChildren()) + .Where(x => x.enabled) + .Where(x => !x.isTrigger) + .Where(x=> { + var ignoreCollider = x.GetComponent(); + if (ignoreCollider == null) + return true; + return !ignoreCollider.enabled;}) + .Distinct() + .ToArray(); + + if (_rigidBodyJoints.Length > 0) + { + _jointForTrackedColliders = _collidersToTrack + .Select(x=>x.GetComponentsInParent().First()) + .Select(x=>x.gameObject) + .ToArray(); + } + else + { + _jointForTrackedColliders = _collidersToTrack + .Select(x=>x.GetComponentsInParent().First()) + .Select(x=>x.gameObject) + .ToArray(); + } + Positions = Enumerable.Range(0, _collidersToTrack.Length).Select(x=>Vector3.zero).ToArray(); + Rotations = Enumerable.Range(0, _collidersToTrack.Length).Select(x=>Quaternion.identity).ToArray(); + Velocities = Enumerable.Range(0, _collidersToTrack.Length).Select(x=>Vector3.zero).ToArray(); + AngualrVelocities = Enumerable.Range(0, _collidersToTrack.Length).Select(x=>Vector3.zero).ToArray(); + LastLocalPositions = Enumerable.Range(0, _collidersToTrack.Length).Select(x=>Vector3.zero).ToArray(); + LastLocalRotations = Enumerable.Range(0, _collidersToTrack.Length).Select(x=>Quaternion.identity).ToArray(); + + int dof = 0; + foreach (var m in _articulationBodyJoints) + { + if (m.twistLock == ArticulationDofLock.LimitedMotion) + dof++; + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + dof++; + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + dof++; + } + DofRotationWithinRangeOfMotion = Enumerable.Range(0, dof).Select(x=>0f).ToArray(); + DofAngularVelocity = Enumerable.Range(0, dof).Select(x=>0f).ToArray(); + DofRotationInRad = Enumerable.Range(0, dof).Select(x=>0f).ToArray(); + DofLastRotationInRad = Enumerable.Range(0, dof).Select(x=>0f).ToArray(); + + if (_root == null) + { + Debug.Log("in game object: " + name + "my rootname is: " + articulationBodyRoot.name); + if (_rigidBodyJoints.Length > 0) + _root = _rigidBodyJoints.First(x => x.name == articulationBodyRoot.name).gameObject; + else + _root = articulationBodyRoot.gameObject; + } + transform.position = defaultTransform.position; + transform.rotation = defaultTransform.rotation; + LastIsSet = false; + } + public void OnStep(float timeDelta) + { + // get Center Of Mass velocity in f space + Vector3 newCOM; + // if Moocap, then get from anim2Ragdoll + if (_mapAnim2Ragdoll != null) + { + newCOM = _mapAnim2Ragdoll.LastCenterOfMassInWorldSpace; + var newHorizontalDirection = _mapAnim2Ragdoll.HorizontalDirection; + HorizontalDirection = newHorizontalDirection / 180f; + if (!LastIsSet) + { + LastCenterOfMassInWorldSpace = newCOM; + } + transform.position = newCOM; + transform.rotation = Quaternion.Euler(newHorizontalDirection); + CenterOfMassVelocity = _mapAnim2Ragdoll.CenterOfMassVelocity; + CenterOfMassVelocityMagnitude = _mapAnim2Ragdoll.CenterOfMassVelocityMagnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(CenterOfMassVelocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + } + else + { + newCOM = GetCenterOfMass(); + var newHorizontalDirection = new Vector3(0f, _root.transform.eulerAngles.y, 0f); + HorizontalDirection = newHorizontalDirection / 180f; + if (!LastIsSet) + { + LastCenterOfMassInWorldSpace = newCOM; + } + transform.position = newCOM; + transform.rotation = Quaternion.Euler(newHorizontalDirection); + var velocity = newCOM - LastCenterOfMassInWorldSpace; + velocity /= timeDelta; + CenterOfMassVelocity = velocity; + CenterOfMassVelocityMagnitude = CenterOfMassVelocity.magnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(CenterOfMassVelocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + } + LastCenterOfMassInWorldSpace = newCOM; + + // get Center Of Mass horizontal velocity in f space + var comHorizontalDirection = new Vector3(CenterOfMassVelocity.x, 0f, CenterOfMassVelocity.z); + CenterOfMassHorizontalVelocity = transform.InverseTransformVector(comHorizontalDirection); + CenterOfMassHorizontalVelocityMagnitude = CenterOfMassHorizontalVelocity.magnitude; + + // get Desired Center Of Mass horizontal velocity in f space + Vector3 desiredCom = _animationController.GetDesiredVelocity(); + DesiredCenterOfMassVelocity = transform.InverseTransformVector(desiredCom); + + // get Desired Center Of Mass horizontal velocity in f space + CenterOfMassVelocityDifference = DesiredCenterOfMassVelocity - CenterOfMassHorizontalVelocity; + + if (!LastIsSet) + { + LastRotation = transform.rotation; + } + AngualrVelocity = Utils.GetAngularVelocity(LastRotation, transform.rotation, timeDelta); + LastRotation = transform.rotation; + + TrackUsingColliders(timeDelta); + // TrackUsingJointsForTrackedColliders(timeDelta); + TrackUsingDof(timeDelta); + + LastIsSet = true; + } + + void TrackUsingJointsForTrackedColliders(float timeDelta) + { + // track in local space + for (int i = 0; i < _jointForTrackedColliders.Length; i++) + { + Transform joint = _jointForTrackedColliders[i].transform; + Vector3 worldPosition = joint.position; + Quaternion worldRotation = transform.rotation; + Vector3 localPosition = transform.InverseTransformPoint(worldPosition); + Quaternion localRotation = Utils.FromToRotation(transform.rotation, worldRotation); + if (!LastIsSet) + { + LastLocalPositions[i] = localPosition; + LastLocalRotations[i] = localRotation; + } + + Positions[i] = localPosition; + Rotations[i] = localRotation; + Velocities[i] = (localPosition - LastLocalPositions[i]) / timeDelta; + AngualrVelocities[i] = Utils.GetAngularVelocity(LastLocalRotations[i], localRotation, timeDelta); + LastLocalPositions[i] = localPosition; + LastLocalRotations[i] = localRotation; + } + } + void TrackUsingColliders(float timeDelta) + { + // track in local space + for (int i = 0; i < _collidersToTrack.Length; i++) + { + Vector3 c = Vector3.zero; + CapsuleCollider capsule = _collidersToTrack[i] as CapsuleCollider; + BoxCollider box = _collidersToTrack[i] as BoxCollider; + SphereCollider sphere = _collidersToTrack[i] as SphereCollider; + Bounds b = new Bounds(c, c); + if (capsule != null) + { + c = capsule.center; + var r = capsule.radius * 2; + var h = capsule.height; + h = Mathf.Max(r, h); // capsules height is clipped at r + if (capsule.direction == 0) + b = new Bounds(c, new Vector3(h, r, r)); + else if (capsule.direction == 1) + b = new Bounds(c, new Vector3(r, h, r)); + else if (capsule.direction == 2) + b = new Bounds(c, new Vector3(r, r, h)); + else throw new NotImplementedException(); + } + else if (box != null) + { + c = box.center; + b = new Bounds(c, box.size); + } + else if (sphere != null) + { + c = sphere.center; + var r = sphere.radius * 2; + b = new Bounds(c, new Vector3(r, r, r)); + } + else + throw new NotImplementedException(); + + Vector3 worldPosition = _collidersToTrack[i].transform.TransformPoint(c); + + Quaternion worldRotation = _collidersToTrack[i].transform.rotation; + Vector3 localPosition = transform.InverseTransformPoint(worldPosition); + Quaternion localRotation = Utils.FromToRotation(transform.rotation, worldRotation); + if (!LastIsSet) + { + LastLocalPositions[i] = localPosition; + LastLocalRotations[i] = localRotation; + } + + Positions[i] = localPosition; + Rotations[i] = localRotation; + Velocities[i] = (localPosition - LastLocalPositions[i]) / timeDelta; + AngualrVelocities[i] = Utils.GetAngularVelocity(LastLocalRotations[i], localRotation, timeDelta); + LastLocalPositions[i] = localPosition; + LastLocalRotations[i] = localRotation; + } + } + + void TrackUsingDof(float timeDelta) + { + // track in local space + int i = 0; + for (int j = 0; j < _jointForTrackedColliders.Length; j++) + { + var joint = _jointsToTrack[j]; + var reference = _articulationBodyJoints[j]; + Vector3 decomposedRotation = Utils.GetSwingTwist(joint.transform.localRotation); + if (reference.twistLock == ArticulationDofLock.LimitedMotion) + { + var drive = reference.xDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var deg = decomposedRotation.x; + var pos = (deg - midpoint) / scale; + DofRotationInRad[i] = deg * Mathf.Deg2Rad; + DofRotationWithinRangeOfMotion[i++] = pos; + } + if (reference.swingYLock == ArticulationDofLock.LimitedMotion) + { + var drive = reference.yDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var deg = decomposedRotation.y; + var pos = (deg - midpoint) / scale; + DofRotationInRad[i] = deg * Mathf.Deg2Rad; + DofRotationWithinRangeOfMotion[i++] = pos; + } + if (reference.swingZLock == ArticulationDofLock.LimitedMotion) + { + var drive = reference.zDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var deg = decomposedRotation.z; + var pos = (deg - midpoint) / scale; + DofRotationInRad[i] = deg * Mathf.Deg2Rad; + DofRotationWithinRangeOfMotion[i++] = pos; + } + } + + for (i = 0; i < DofRotationInRad.Length; i++) + { + if (!LastIsSet) + { + DofLastRotationInRad[i] = DofRotationInRad[i]; + } + DofAngularVelocity[i] = DofRotationInRad[i] - DofLastRotationInRad[i]; + DofAngularVelocity[i] /= timeDelta; + DofLastRotationInRad[i] = DofRotationInRad[i]; + } + } + + public void OnReset() + { + OnStep(float.Epsilon); + LastIsSet = false; + } + Vector3 GetCenterOfMass() + { + var centerOfMass = Vector3.zero; + float totalMass = 0f; + foreach (ArticulationBody ab in _articulationBodyJoints) + { + centerOfMass += ab.worldCenterOfMass * ab.mass; + totalMass += ab.mass; + } + centerOfMass /= totalMass; + // centerOfMass -= _spawnableEnv.transform.position; + return centerOfMass; + } +} \ No newline at end of file diff --git a/Assets/MarathonController/Scripts/MarConObservationsStats.cs.meta b/Assets/MarathonController/Scripts/MarConObservationsStats.cs.meta new file mode 100644 index 0000000..13f058e --- /dev/null +++ b/Assets/MarathonController/Scripts/MarConObservationsStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbb599f18ba7f4970aa9c0f7f9b87046 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/Muscles.cs b/Assets/MarathonController/Scripts/Muscles.cs new file mode 100644 index 0000000..6f76673 --- /dev/null +++ b/Assets/MarathonController/Scripts/Muscles.cs @@ -0,0 +1,702 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +using System; + +public class Muscles : MonoBehaviour +{ + + + + [SerializeField] + public MotorMode MotorUpdateMode; + + + + [System.Serializable] + public class MusclePower + { + public string Muscle; + public Vector3 PowerVector; + } + + + + [Header("Parameters for Legacy and PD:")] + public List MusclePowers; + + // public float MotorScale = 1f; + public float Stiffness = 50f; + public float Damping = 100f; + public float ForceLimit = float.MaxValue; + public float DampingRatio = 1.0f; + + + [Header("Extra Parameters for PD:")] + + public float NaturalFrequency = 40f; + public float ForceScale = .3f; + + + + + [Header("Parameters for StablePD:")] + public float KP_Stiffness = 50; + public float ForceScaleSPD = .3f; + + + + + + + [Header("Debug Collisions")] + [SerializeField] + bool skipCollisionSetup; + + + + [Header("Debug Values, Read Only")] + public bool updateDebugValues; + + + [SerializeField] + Vector3[] jointVelocityInReducedSpace; + List _motors; + + + + private class LastPos + { + public string name; + //public ArticulationReducedSpace pos; + public ArticulationReducedSpace vel; + } + + + List _lastPos = new List(); + + + public enum MotorMode { + + legacy, + PD, + stablePD, + force, + PDopenloop //this is a PD combined with the kinematic input processed as an openloop, see in DReCon + + } + + //for the PDopenloop case: + public List _referenceTransforms; + + + public delegate void MotorDelegate(ArticulationBody joint, Vector3 targetNormalizedRotation, float actionTimeDelta); + + public MotorDelegate UpdateMotor; + + //only used in PDopenloop + public void SetKinematicReference(MapAnim2Ragdoll kinematicRoot) + { + + _referenceTransforms = kinematicRoot._ragdollTransforms; + + + } + + + // Use this for initialization + void Start() + { + Setup(); + + _motors = GetComponentsInChildren() + .Where(x => x.jointType == ArticulationJointType.SphericalJoint) + .Where(x => !x.isRoot) + .Distinct() + .ToList(); + + foreach (ArticulationBody m in _motors) + { + LastPos l = new LastPos(); + + l.name = m.name; + //l.pos = m.jointPosition; + l.vel = m.jointVelocity; + + _lastPos.Add(l); + } + + + + + + if (updateDebugValues) + { + + + + jointVelocityInReducedSpace = new Vector3[_motors.Count]; + + + } + + + + + + + + switch (MotorUpdateMode) { + + case (MotorMode.force): + UpdateMotor = DirectForce; + break; + + case (MotorMode.PD): + UpdateMotor = UpdateMotorPDWithVelocity; + break; + + case (MotorMode.legacy): + UpdateMotor = LegacyUpdateMotor; + break; + + case (MotorMode.stablePD): + UpdateMotor = null; + + //UpdateMotor = StablePD; + //NOTE: this is not yet working, the implementaiton is in progress + + break; + + case (MotorMode.PDopenloop): + UpdateMotor = UpdateMotorPDopenloop; + break; + + + } + + + + + } + + // Update is called once per frame + void Update() + { + + if (updateDebugValues) { + + int i = 0; + foreach(ArticulationBody m in _motors) { + //DEBUG: to keep track of the values, and see if they seem reasonable + + + Vector3 temp = Utils.GetArticulationReducedSpaceInVector3(m.jointVelocity); + + jointVelocityInReducedSpace[i] = temp; + i++; + } + + + } + + + } + + void Setup() + { + + if (!skipCollisionSetup) + { + + // handle collision overlaps + IgnoreCollision("articulation:Spine2", new[] { "LeftArm", "RightArm" }); + IgnoreCollision("articulation:Hips", new[] { "RightUpLeg", "LeftUpLeg" }); + + IgnoreCollision("LeftForeArm", new[] { "LeftArm" }); + IgnoreCollision("RightForeArm", new[] { "RightArm" }); + IgnoreCollision("RightLeg", new[] { "RightUpLeg" }); + IgnoreCollision("LeftLeg", new[] { "LeftUpLeg" }); + + IgnoreCollision("RightLeg", new[] { "RightFoot" }); + IgnoreCollision("LeftLeg", new[] { "LeftFoot" }); + + } + + // + var joints = GetComponentsInChildren().ToList(); + foreach (var joint in joints) + joint.enablePreprocessing = false; + } + void IgnoreCollision(string first, string[] seconds) + { + foreach (var second in seconds) + { + IgnoreCollision(first, second); + } + } + void IgnoreCollision(string first, string second) + { + var rigidbodies = GetComponentsInChildren().ToList(); + var colliderOnes = rigidbodies.FirstOrDefault(x => x.name.Contains(first))?.GetComponents(); + var colliderTwos = rigidbodies.FirstOrDefault(x => x.name.Contains(second))?.GetComponents(); + if (colliderOnes == null || colliderTwos == null) + return; + foreach (var c1 in colliderOnes) + foreach (var c2 in colliderTwos) + Physics.IgnoreCollision(c1, c2); + } + + //this is a simple way to center the masses + public void CenterABMasses() + { + ArticulationBody[] abs = GetComponentsInChildren(); + foreach (ArticulationBody ab in abs) + { + if (!ab.isRoot) + { + Vector3 currentCoF = ab.centerOfMass; + + Vector3 newCoF = Vector3.zero; + //generally 1, sometimes 2: + foreach (Transform child in ab.transform) { + newCoF += child.localPosition; + + } + newCoF /= ab.transform.childCount; + + ArticulationBody ab2 = ab.GetComponentInChildren(); + + newCoF = (ab.transform.parent.localPosition + newCoF) / 2.0f; + ab.centerOfMass = newCoF; + Debug.Log("AB: " + ab.name + " old CoF: " + currentCoF + " new CoF: " + ab.centerOfMass); + } + } + + } + + + + private static Vector3 GetTargetVelocity(ArticulationBody joint, Vector3 targetNormalizedRotation, float timeDelta) + { + + Vector3 targetVelocity = new Vector3(0, 0, 0); + + Vector3 currentRotationValues = Utils.GetSwingTwist(joint.transform.localRotation); + + + Vector3 target = new Vector3(); + if (joint.twistLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.xDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + target.x = midpoint + (targetNormalizedRotation.x * scale); + + } + + if (joint.swingYLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.yDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + target.y = midpoint + (targetNormalizedRotation.y * scale); + + + } + + if (joint.swingZLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.zDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + target.z = midpoint + (targetNormalizedRotation.z * scale); + + } + + //this is how you calculate the angular velocity in MapAnim2Ragdoll + //Utils.GetAngularVelocity(cur, last, timeDelta) + + //Utils.GetArticulationReducedSpaceInVector3(joint.jointVelocity) + + + + targetVelocity = Utils.AngularVelocityInReducedCoordinates(Utils.GetSwingTwist(joint.transform.localRotation), target, timeDelta); + + targetVelocity = Vector3.ClampMagnitude(targetVelocity, joint.maxAngularVelocity); + + + return targetVelocity; + + + + } + + + void UpdateMotorPDWithVelocity(ArticulationBody joint, Vector3 targetNormalizedRotation, float actionTimeDelta) + { + + var m = joint.mass; + var d = DampingRatio; // d should be 0..1. + var n = NaturalFrequency; // n should be in the range 1..20 + var k = Mathf.Pow(n, 2) * m; + var c = d * (2 * Mathf.Sqrt(k * m)); + var stiffness = k; + var damping = c; + + + + Vector3 power = Vector3.zero; + try + { + power = MusclePowers.First(x => x.Muscle == joint.name).PowerVector; + + } + catch + { + Debug.Log("there is no muscle for joint " + joint.name); + + } + + classicPD(joint, targetNormalizedRotation, actionTimeDelta, power); + + } + + void classicPD(ArticulationBody joint, Vector3 targetNormalizedRotation, float actionTimeDelta, Vector3 power) { + + + var m = joint.mass; + var d = DampingRatio; // d should be 0..1. + var n = NaturalFrequency; // n should be in the range 1..20 + var k = Mathf.Pow(n, 2) * m; + var c = d * (2 * Mathf.Sqrt(k * m)); + var stiffness = k; + var damping = c; + + + //why do you never set up the targetVelocity? + // F = stiffness * (currentPosition - target) - damping * (currentVelocity - targetVelocity) + + + Vector3 targetVel = GetTargetVelocity(joint, targetNormalizedRotation, actionTimeDelta); + + + + if (joint.twistLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.xDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.x * scale); + drive.target = target; + + drive.targetVelocity = targetVel.x; + + + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = power.x * ForceScale; + joint.xDrive = drive; + } + + if (joint.swingYLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.yDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.y * scale); + drive.target = target; + // drive.targetVelocity = (target - currentRotationValues.y) / (_decisionPeriod * Time.fixedDeltaTime); + drive.targetVelocity = targetVel.y; + + + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = power.y * ForceScale; + joint.yDrive = drive; + } + + if (joint.swingZLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.zDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.z * scale); + + drive.target = target; + //drive.targetVelocity = (target - currentRotationValues.z) / (_decisionPeriod * Time.fixedDeltaTime); + drive.targetVelocity = targetVel.z; + + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = power.z * ForceScale; + joint.zDrive = drive; + } + + + + } + + + + void UpdateMotorPDopenloop(ArticulationBody joint, Vector3 targetRot, float actionTimeDelta) + { + + + Vector3 refRot = Mathf.Deg2Rad * Utils.GetSwingTwist( _referenceTransforms.First(x => x.name == joint.name).localRotation); + + Vector3 power = 40* Vector3.one; + + + Vector3 targetNormalizedRotation = refRot + targetRot; + + //From the DReCon paper: (not implemented) + // Velocity basedconstraints are used to simulate PD servo motors at the joints, + // withmotor constraint torques clamped to 200 Nm.All coeicients of fric-tion + // are given a value of 1, except rolling friction which is disabled. + + + classicPD(joint, targetNormalizedRotation, actionTimeDelta, power); + } + + + + + + + void LegacyUpdateMotor(ArticulationBody joint, Vector3 targetNormalizedRotation, float actionTimeDelta) + { + + + + Vector3 power = Vector3.zero; + try + { + power = MusclePowers.First(x => x.Muscle == joint.name).PowerVector; + + } + catch + { + Debug.Log("there is no muscle for joint " + joint.name); + + } + + + + power *= Stiffness; + float damping = Damping; + float forceLimit = ForceLimit; + + if (joint.twistLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.xDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.x * scale); + drive.target = target; + drive.stiffness = power.x; + drive.damping = damping; + drive.forceLimit = forceLimit; + joint.xDrive = drive; + } + + if (joint.swingYLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.yDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.y * scale); + drive.target = target; + drive.stiffness = power.y; + drive.damping = damping; + drive.forceLimit = forceLimit; + joint.yDrive = drive; + } + + if (joint.swingZLock == ArticulationDofLock.LimitedMotion) + { + var drive = joint.zDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.z * scale); + drive.target = target; + drive.stiffness = power.z; + drive.damping = damping; + drive.forceLimit = forceLimit; + joint.zDrive = drive; + } + } + + + + //NOT TESTED + void DirectForce(ArticulationBody joint, Vector3 targetNormalizedRotation, float actionTimeDelta) + { + + + Vector3 result = 0.05f * targetNormalizedRotation; + joint.AddRelativeTorque(result); + + } + + + + static ArticulationReducedSpace AccelerationInReducedSpace(ArticulationReducedSpace currentVel, ArticulationReducedSpace lastVel, float deltaTime) + { + ArticulationReducedSpace result = new ArticulationReducedSpace(); + + + result.dofCount = currentVel.dofCount; + + for(int i = 0; i< result.dofCount; i++) + result[i] = (currentVel[i] - lastVel[i]) / deltaTime; + + return result; + + } + + + void StablePD(ArticulationBody joint, Vector3 input, float actionTimeDelta) + { + + + Vector3 targetNormalizedRotation = input; + + + //A PD controller uses: + // F = stiffness * (currentPosition - target) - damping * (currentVelocity - targetVelocity) + + //A stable PD controller, instead: + //f = - Kp (pos + dt* v -targetPos)- Kd(v + dt*a ) + + //kd towards infinity + //kd = kp * dt + //Kd >= Kp * dt to ensure stability + + //example in video: KP = 30.000, KD 600, update 1/60 + + + //float Kp = 30000; + + + LastPos lastPos = null; + try + { + lastPos = _lastPos.First(x => x.name.Equals(joint.name)); + } + + catch + { + Debug.Log("there is no lastPos for joint " + joint.name); + + } + + + + + + float Kp = KP_Stiffness; + + + float Kd = Kp * actionTimeDelta; + + //Vector3 currentSwingTwist = Utils.GetSwingTwist(joint.transform.localRotation); + //Vector3 targetVelocity = Utils.AngularVelocityInReducedCoordinates(currentSwingTwist, targetNormalizedRotation, actionTimeDelta); + //Vector3 currentVelocity = Utils.GetArticulationReducedSpaceInVector3(joint.jointVelocity); + // Vector3 targetAcceleration = Utils.AngularVelocityInReducedCoordinates(currentVelocity, targetVelocity, actionTimeDelta); + + + + ArticulationReducedSpace forceInReducedSpace = new ArticulationReducedSpace(); + forceInReducedSpace.dofCount = joint.dofCount; + + ArticulationReducedSpace acceleration = AccelerationInReducedSpace(joint.jointVelocity, lastPos.vel, actionTimeDelta); + + + + + if (joint.twistLock == ArticulationDofLock.LimitedMotion) { + //f = - Kp (pos + dt* v -targetPos)- Kd(v + dt*a ) + + //forceInReducedSpace[0] = -Kp * (currentSwingTwist.x + actionTimeDelta * currentVelocity.x - targetNormalizedRotation.x) - Kd * (currentVelocity.x + actionTimeDelta * targetAcceleration.x); + var drive = joint.xDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.x * scale); + + + + + + forceInReducedSpace[0] = -Kp * (joint.jointPosition[0] + actionTimeDelta * joint.jointVelocity[0] - target) - Kd * (joint.jointVelocity[0] + actionTimeDelta * acceleration[0]); + + forceInReducedSpace[0] *= ForceScaleSPD; + + } + + if (joint.swingYLock == ArticulationDofLock.LimitedMotion) + { + //f = - Kp (pos + dt* v -targetPos)- Kd(v + dt*a ) + // forceInReducedSpace[1] = -Kp * (currentSwingTwist.y + actionTimeDelta * currentVelocity.y - targetNormalizedRotation.y) - Kd * (currentVelocity.y + actionTimeDelta * targetAcceleration.y); + + var drive = joint.yDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.y * scale); + + + if(joint.dofCount == 1) { + // forceInReducedSpace[0] = -Kp * (Mathf.Deg2Rad * joint.jointPosition[0] + actionTimeDelta * Mathf.Deg2Rad * joint.jointVelocity[0] - target) - Kd * (Mathf.Deg2Rad * joint.jointVelocity[0] + actionTimeDelta * Mathf.Deg2Rad * acceleration[0]); + // forceInReducedSpace[0] *= ForceScaleSPD; + + + } + else { + forceInReducedSpace[1] = -Kp * (Mathf.Deg2Rad * joint.jointPosition[1] + actionTimeDelta * Mathf.Deg2Rad * joint.jointVelocity[1] - target) - Kd * (Mathf.Deg2Rad * joint.jointVelocity[1] + actionTimeDelta * Mathf.Deg2Rad * acceleration[1]); + forceInReducedSpace[1] *= ForceScaleSPD; + } + + + } + + if (joint.swingZLock == ArticulationDofLock.LimitedMotion) + { + //f = - Kp (pos + dt* v -targetPos)- Kd(v + dt*a ) + // forceInReducedSpace[2] = -Kp * (currentSwingTwist.z + actionTimeDelta * currentVelocity.z - targetNormalizedRotation.z) - Kd * (currentVelocity.z + actionTimeDelta * targetAcceleration.z); + + var drive = joint.zDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var target = midpoint + (targetNormalizedRotation.z * scale); + + + forceInReducedSpace[2] = -Kp * (Mathf.Deg2Rad * joint.jointPosition[2] + actionTimeDelta * Mathf.Deg2Rad * joint.jointVelocity[2] - target) - Kd * (Mathf.Deg2Rad * joint.jointVelocity[2] + actionTimeDelta * Mathf.Deg2Rad * acceleration[2]); + + forceInReducedSpace[2] *= ForceScaleSPD; + + } + + // Vector3 result = Utils.GetArticulationReducedSpaceInVector3(forceInReducedSpace); + Vector3 result =KP_Stiffness* input; + + if (joint.dofCount < 3) + { + result = Vector3.zero; + } + + joint.AddRelativeTorque(result); + //joint.AddRelativeTorque(Vector3.zero); + + // joint.jointForce = forceInReducedSpace; + + + lastPos.vel = joint.jointVelocity; + //lastPos.pos = joint.jointPosition; + + } + + + +} diff --git a/Assets/MarathonController/Scripts/Muscles.cs.meta b/Assets/MarathonController/Scripts/Muscles.cs.meta new file mode 100644 index 0000000..cb538d3 --- /dev/null +++ b/Assets/MarathonController/Scripts/Muscles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 652394cd365ee4cd0b8f8318777d8161 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/Observations2Learn.cs b/Assets/MarathonController/Scripts/Observations2Learn.cs new file mode 100644 index 0000000..f74dbbe --- /dev/null +++ b/Assets/MarathonController/Scripts/Observations2Learn.cs @@ -0,0 +1,344 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; +using ManyWorlds; +using UnityEngine.Assertions; + +public class Observations2Learn : MonoBehaviour +{ + [Header("Observations")] + + [Tooltip("Kinematic character center of mass velocity, Vector3")] + public Vector3 MocapCOMVelocity; + + [Tooltip("RagDoll character center of mass velocity, Vector3")] + public Vector3 RagDollCOMVelocity; + + [Tooltip("User-input desired horizontal CM velocity. Vector2")] + public Vector2 InputDesiredHorizontalVelocity; + + [Tooltip("User-input requests jump, bool")] + public bool InputJump; + + [Tooltip("User-input requests backflip, bool")] + public bool InputBackflip; + + [Tooltip("Difference between RagDoll character horizontal CM velocity and user-input desired horizontal CM velocity. Vector2")] + public Vector2 HorizontalVelocityDifference; + + [Tooltip("Positions and velocities for subset of bodies")] + public List BodyPartDifferenceStats; + public List MocapBodyStats; + public List RagDollBodyStats; + + [Tooltip("Smoothed actions produced in the previous step of the policy are collected in t −1")] + public float[] PreviousActions; + + //[Tooltip("RagDoll ArticulationBody joint positions in reduced space")] + //public float[] RagDollJointPositions; +// [Tooltip("RagDoll ArticulationBody joint velocity in reduced space")] +// public float[] RagDollJointVelocities; + + + // [Tooltip("RagDoll ArticulationBody joint accelerations in reduced space")] + // public float[] RagDollJointAccelerations; + [Tooltip("RagDoll ArticulationBody joint forces in reduced space")] + public float[] RagDollJointForces; + + + [Tooltip("Macap: ave of joint angular velocity")] + public float EnergyAngularMocap; + [Tooltip("RagDoll: ave of joint angular velocity")] + public float EnergyAngularRagDoll; + [Tooltip("RagDoll-Macap: ave of joint angular velocity")] + public float EnergyDifferenceAngular; + + [Tooltip("Macap: ave of joint velocity in local space")] + public float EnergyPositionalMocap; + [Tooltip("RagDoll: ave of joint velocity in local space")] + public float EnergyPositionalRagDoll; + [Tooltip("RagDoll-Macap: ave of joint velocity in local space")] + public float EnergyDifferencePositional; + + + [Header("Gizmos")] + public bool VelocityInWorldSpace = true; + public bool PositionInWorldSpace = true; + + + public string targetedRootName = "articulation:Hips"; + + + + InputController _inputController; + SpawnableEnv _spawnableEnv; + ObservationStats _mocapBodyStats; + ObservationStats _ragDollBodyStats; + bool _hasLazyInitialized; + List _motors; + + public void OnAgentInitialize() + { + Assert.IsFalse(_hasLazyInitialized); + _hasLazyInitialized = true; + + _spawnableEnv = GetComponentInParent(); + _inputController = _spawnableEnv.GetComponentInChildren(); + + _mocapBodyStats = new GameObject("MocapDReConObservationStats").AddComponent(); + _mocapBodyStats.setRootName(targetedRootName); + + + + _mocapBodyStats.ObjectToTrack = _spawnableEnv.GetComponentInChildren(); + + _mocapBodyStats.transform.SetParent(_spawnableEnv.transform); + _mocapBodyStats.OnAgentInitialize(_mocapBodyStats.ObjectToTrack.transform); + + _ragDollBodyStats = new GameObject("RagDollDReConObservationStats").AddComponent(); + _ragDollBodyStats.setRootName(targetedRootName); + + _ragDollBodyStats.ObjectToTrack = this; + _ragDollBodyStats.transform.SetParent(_spawnableEnv.transform); + _ragDollBodyStats.OnAgentInitialize(transform); + + BodyPartDifferenceStats = _mocapBodyStats.Stats + .Select(x => new BodyPartDifferenceStats { Name = x.Name }) + .ToList(); + + int numJoints = 0; + _motors = GetComponentsInChildren() + .Where(x => x.jointType == ArticulationJointType.SphericalJoint) + .Where(x => !x.isRoot) + .Distinct() + .ToList(); + foreach (var m in _motors) + { + if (m.twistLock == ArticulationDofLock.LimitedMotion) + numJoints++; + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + numJoints++; + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + numJoints++; + } + PreviousActions = Enumerable.Range(0,numJoints).Select(x=>0f).ToArray(); + //RagDollJointPositions = Enumerable.Range(0,numJoints).Select(x=>0f).ToArray(); + // RagDollJointVelocities = Enumerable.Range(0,numJoints).Select(x=>0f).ToArray(); + // RagDollJointAccelerations = Enumerable.Range(0,numJoints).Select(x=>0f).ToArray(); + RagDollJointForces = Enumerable.Range(0,numJoints).Select(x=>0f).ToArray(); + } + + public List EstimateBodyPartsForObservation() + { + var colliders = GetComponentsInChildren() + .Where(x => x.enabled) + .Where(x => !x.isTrigger) + .Where(x=> { + var ignoreCollider = x.GetComponent(); + if (ignoreCollider == null) + return true; + return !ignoreCollider.enabled;}) + .Distinct() + .ToList(); + return colliders; + } + public List EstimateBodyPartsForReward() + { + var colliders = GetComponentsInChildren() + .Where(x => x.enabled) + .Where(x => !x.isTrigger) + .Where(x=> { + var ignoreCollider = x.GetComponent(); + if (ignoreCollider == null) + return true; + return !ignoreCollider.enabled;}) + .Distinct() + .ToList(); + return colliders; + } + + + public void OnStep(float timeDelta) + { + Assert.IsTrue(_hasLazyInitialized); + _mocapBodyStats.SetStatusForStep(timeDelta); + _ragDollBodyStats.SetStatusForStep(timeDelta); + UpdateObservations(timeDelta); + } + public void OnReset() + { + Assert.IsTrue(_hasLazyInitialized); + _mocapBodyStats.OnReset(); + _ragDollBodyStats.OnReset(); + _ragDollBodyStats.transform.position = _mocapBodyStats.transform.position; + _ragDollBodyStats.transform.rotation = _mocapBodyStats.transform.rotation; + var timeDelta = float.MinValue; + UpdateObservations(timeDelta); + } + + public void UpdateObservations(float timeDelta) + { + + MocapCOMVelocity = _mocapBodyStats.CenterOfMassVelocity; + RagDollCOMVelocity = _ragDollBodyStats.CenterOfMassVelocity; + InputDesiredHorizontalVelocity = new Vector2( + _ragDollBodyStats.DesiredCenterOfMassVelocity.x, + _ragDollBodyStats.DesiredCenterOfMassVelocity.z); + if (_inputController != null) + { + InputJump = _inputController.Jump; + InputBackflip = _inputController.Backflip; + } + HorizontalVelocityDifference = new Vector2( + _ragDollBodyStats.CenterOfMassVelocityDifference.x, + _ragDollBodyStats.CenterOfMassVelocityDifference.z); + + MocapBodyStats = _mocapBodyStats.Stats.ToList(); + RagDollBodyStats = MocapBodyStats + .Select(x => _ragDollBodyStats.Stats.First(y => y.Name == x.Name)) + .ToList(); + // BodyPartStats = + foreach (var differenceStats in BodyPartDifferenceStats) + { + var mocapStats = _mocapBodyStats.Stats.First(x => x.Name == differenceStats.Name); + var ragDollStats = _ragDollBodyStats.Stats.First(x => x.Name == differenceStats.Name); + + differenceStats.Position = mocapStats.Position - ragDollStats.Position; + differenceStats.Velocity = mocapStats.Velocity - ragDollStats.Velocity; + differenceStats.AngualrVelocity = mocapStats.AngularVelocity - ragDollStats.AngularVelocity; + differenceStats.Rotation = ObservationStats.GetAngularVelocity(mocapStats.Rotation, ragDollStats.Rotation, timeDelta); + } + int i = 0; + foreach (var m in _motors) + { + int j = 0; + if (m.twistLock == ArticulationDofLock.LimitedMotion) + { + //RagDollJointPositions[i] = m.jointPosition[j]; + // RagDollJointVelocities[i] = m.jointVelocity[j]; + // RagDollJointAccelerations[i] = m.jointAcceleration[j]; + RagDollJointForces[i++] = m.jointForce[j++]; + } + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + { + // RagDollJointPositions[i] = m.jointPosition[j]; + // RagDollJointVelocities[i] = m.jointVelocity[j]; + // RagDollJointAccelerations[i] = m.jointAcceleration[j]; + RagDollJointForces[i++] = m.jointForce[j++]; + } + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + { + // RagDollJointPositions[i] = m.jointPosition[j]; + // RagDollJointVelocities[i] = m.jointVelocity[j]; + // RagDollJointAccelerations[i] = m.jointAcceleration[j]; + RagDollJointForces[i++] = m.jointForce[j++]; + } + } + EnergyAngularMocap = MocapBodyStats + .Select(x=>x.AngularVelocity.magnitude) + .Average(); + EnergyAngularRagDoll = RagDollBodyStats + .Select(x=>x.AngularVelocity.magnitude) + .Average(); + EnergyDifferenceAngular = RagDollBodyStats + .Zip(MocapBodyStats, (x,y) => x.AngularVelocity.magnitude-y.AngularVelocity.magnitude) + .Average(); + EnergyPositionalMocap = MocapBodyStats + .Select(x=>x.Velocity.magnitude) + .Average(); + EnergyPositionalRagDoll = RagDollBodyStats + .Select(x=>x.Velocity.magnitude) + .Average(); + EnergyDifferencePositional = RagDollBodyStats + .Zip(MocapBodyStats, (x,y) => x.Velocity.magnitude-y.Velocity.magnitude) + .Average(); + + } + public Transform GetRagDollCOM() + { + return _ragDollBodyStats.transform; + } + public Vector3 GetMocapCOMVelocityInWorldSpace() + { + var velocity = _mocapBodyStats.CenterOfMassVelocity; + var velocityInWorldSpace = _mocapBodyStats.transform.TransformVector(velocity); + return velocityInWorldSpace; + } + void OnDrawGizmos() + { + if (_mocapBodyStats == null) + return; + // MocapCOMVelocity + Vector3 pos = new Vector3(transform.position.x, .3f, transform.position.z); + Vector3 vector = MocapCOMVelocity; + if (VelocityInWorldSpace) + vector = _mocapBodyStats.transform.TransformVector(vector); + DrawArrow(pos, vector, Color.grey); + + // RagDollCOMVelocity; + vector = RagDollCOMVelocity; + if (VelocityInWorldSpace) + vector = _ragDollBodyStats.transform.TransformVector(vector); + DrawArrow(pos, vector, Color.blue); + Vector3 actualPos = pos + vector; + + // InputDesiredHorizontalVelocity; + vector = new Vector3(InputDesiredHorizontalVelocity.x, 0f, InputDesiredHorizontalVelocity.y); + if (VelocityInWorldSpace) + vector = _ragDollBodyStats.transform.TransformVector(vector); + DrawArrow(pos, vector, Color.green); + + // HorizontalVelocityDifference; + vector = new Vector3(HorizontalVelocityDifference.x, 0f, HorizontalVelocityDifference.y); + if (VelocityInWorldSpace) + vector = _ragDollBodyStats.transform.TransformVector(vector); + DrawArrow(actualPos, vector, Color.red); + + for (int i = 0; i < RagDollBodyStats.Count; i++) + { + var stat = RagDollBodyStats[i]; + var differenceStat = BodyPartDifferenceStats[i]; + pos = stat.Position; + vector = stat.Velocity; + if (PositionInWorldSpace) + pos = _ragDollBodyStats.transform.TransformPoint(pos); + if (VelocityInWorldSpace) + vector = _ragDollBodyStats.transform.TransformVector(vector); + DrawArrow(pos, vector, Color.cyan); + Vector3 velocityPos = pos + vector; + + pos = stat.Position; + vector = differenceStat.Position; + if (PositionInWorldSpace) + pos = _ragDollBodyStats.transform.TransformPoint(pos); + if (VelocityInWorldSpace) + vector = _ragDollBodyStats.transform.TransformVector(vector); + Gizmos.color = Color.magenta; + Gizmos.DrawRay(pos, vector); + Vector3 differencePos = pos + vector; + + vector = differenceStat.Velocity; + if (VelocityInWorldSpace) + vector = _ragDollBodyStats.transform.TransformVector(vector); + DrawArrow(velocityPos, vector, Color.red); + } + + } + void DrawArrow(Vector3 start, Vector3 vector, Color color) + { + float headSize = 0.25f; + float headAngle = 20.0f; + Gizmos.color = color; + Gizmos.DrawRay(start, vector); + + if (vector.magnitude > 0f) + { + Vector3 right = Quaternion.LookRotation(vector) * Quaternion.Euler(0, 180 + headAngle, 0) * new Vector3(0, 0, 1); + Vector3 left = Quaternion.LookRotation(vector) * Quaternion.Euler(0, 180 - headAngle, 0) * new Vector3(0, 0, 1); + Gizmos.DrawRay(start + vector, right * headSize); + Gizmos.DrawRay(start + vector, left * headSize); + } + } +} diff --git a/Assets/MarathonController/Scripts/Observations2Learn.cs.meta b/Assets/MarathonController/Scripts/Observations2Learn.cs.meta new file mode 100644 index 0000000..2c1e8cd --- /dev/null +++ b/Assets/MarathonController/Scripts/Observations2Learn.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ee2847361b53424aab5705f58c521d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/ObservationsStats.cs b/Assets/MarathonController/Scripts/ObservationsStats.cs new file mode 100644 index 0000000..953292f --- /dev/null +++ b/Assets/MarathonController/Scripts/ObservationsStats.cs @@ -0,0 +1,347 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; +using ManyWorlds; +using UnityEngine.Assertions; + +public class ObservationStats : MonoBehaviour +{ + [System.Serializable] + public class Stat + { + public string Name; + public Vector3 Position; + public Quaternion Rotation; + public Vector3 Velocity; + public Vector3 AngularVelocity; + [HideInInspector] + public Vector3 LastLocalPosition; + [HideInInspector] + public Quaternion LastLocalRotation; + [HideInInspector] + public bool LastIsSet; + } + + public MonoBehaviour ObjectToTrack; + + [Header("Anchor stats")] + public Vector3 HorizontalDirection; // Normalized vector in direction of travel (assume right angle to floor) + // public Vector3 CenterOfMassInWorldSpace; + public Vector3 AngualrVelocity; + + [Header("Stats, relative to HorizontalDirection & Center Of Mass")] + public Vector3 CenterOfMassVelocity; + public Vector3 CenterOfMassHorizontalVelocity; + public float CenterOfMassVelocityMagnitude; + public Vector3 CenterOfMassVelocityInRootSpace; + public float CenterOfMassVelocityMagnitudeInRootSpace; + public float CenterOfMassHorizontalVelocityMagnitude; + public Vector3 DesiredCenterOfMassVelocity; + public Vector3 CenterOfMassVelocityDifference; + public List Stats; + + // [Header("... for debugging")] + [Header("Gizmos")] + public bool VelocityInWorldSpace = true; + public bool HorizontalVelocity = true; + + [HideInInspector] + public Vector3 LastCenterOfMassInWorldSpace; + [HideInInspector] + public Quaternion LastRotation; + [HideInInspector] + public bool LastIsSet; + + + SpawnableEnv _spawnableEnv; + List _bodyParts; + internal List _rigidbodyParts; + internal List _articulationBodyParts; + GameObject _root; + IAnimationController _animationController; + bool _hasLazyInitialized; + MapAnim2Ragdoll _mapAnim2Ragdoll; + + string rootName = "articulation:Hips"; + + public void setRootName(string s) + { + rootName = s; + + } + + public void OnAgentInitialize(Transform defaultTransform) + { + Assert.IsFalse(_hasLazyInitialized); + _hasLazyInitialized = true; + + _mapAnim2Ragdoll = defaultTransform.GetComponent(); + _spawnableEnv = GetComponentInParent(); + _animationController = _spawnableEnv.GetComponentInChildren(); + _rigidbodyParts = ObjectToTrack.GetComponentsInChildren().ToList(); + _articulationBodyParts = ObjectToTrack.GetComponentsInChildren().ToList(); + + if (_rigidbodyParts?.Count > 0) + _bodyParts = _rigidbodyParts + .SelectMany(x=>x.GetComponentsInChildren()) + .Distinct() + .ToList(); + else + _bodyParts = _articulationBodyParts + .SelectMany(x=>x.GetComponentsInChildren()) + .Distinct() + .ToList(); + + + _bodyParts = _bodyParts + .Where(x => x.enabled) + .Where(x => !x.isTrigger) + .Where(x=> { + var ignoreCollider = x.GetComponent(); + if (ignoreCollider == null) + return true; + return !ignoreCollider.enabled;}) + .Distinct() + .ToList(); + + + + Stats = _bodyParts + .Select(x => new Stat { Name = x.name }) + .ToList(); + + //TODO: this is quite sketchy, we should have a better way to deal with this + if (_root == null) + { + // Debug.Log("in game object: " + name + " my rootname is: " + rootName); + if (_rigidbodyParts?.Count > 0) + _root = _rigidbodyParts.First(x => x.name == rootName).gameObject; + else + _root = _articulationBodyParts.First(x => x.name == rootName).gameObject; + } + transform.position = defaultTransform.position; + transform.rotation = defaultTransform.rotation; + } + + public void OnReset() + { + Assert.IsTrue(_hasLazyInitialized); + ResetStatus(); + LastIsSet = false; + } + void ResetStatus() + { + LastIsSet = false; + var timeDelta = float.MinValue; + SetStatusForStep(timeDelta); + } + + + // Return rotation from one rotation to another + public static Quaternion FromToRotation(Quaternion from, Quaternion to) + { + if (to == from) return Quaternion.identity; + + return to * Quaternion.Inverse(from); + } + + // Adjust the value of an angle to lie within [-pi, +pi]. + public static float NormalizedAngle(float angle) + { + if (angle < 180) + { + return angle * Mathf.Deg2Rad; + } + return (angle - 360) * Mathf.Deg2Rad; + } + + // Calculate rotation between two rotations in radians. Adjusts the value to lie within [-pi, +pi]. + public static Vector3 NormalizedEulerAngles(Vector3 eulerAngles) + { + var x = NormalizedAngle(eulerAngles.x); + var y = NormalizedAngle(eulerAngles.y); + var z = NormalizedAngle(eulerAngles.z); + return new Vector3(x, y, z); + } + + // Find angular velocity. The delta rotation is converted to radians within [-pi, +pi]. + public static Vector3 GetAngularVelocity(Quaternion from, Quaternion to, float timeDelta) + { + var rotationVelocity = FromToRotation(from, to); + var angularVelocity = NormalizedEulerAngles(rotationVelocity.eulerAngles) / timeDelta; + return angularVelocity; + } + + public void SetStatusForStep(float timeDelta) + { + // get Center Of Mass velocity in f space + Vector3 newCOM; + // if Moocap, then get from anim2Ragdoll + if (_mapAnim2Ragdoll != null) + { + newCOM = _mapAnim2Ragdoll.LastCenterOfMassInWorldSpace; + var newHorizontalDirection = _mapAnim2Ragdoll.HorizontalDirection; + HorizontalDirection = newHorizontalDirection / 180f; + if (!LastIsSet) + { + LastCenterOfMassInWorldSpace = newCOM; + } + transform.position = newCOM; + transform.rotation = Quaternion.Euler(newHorizontalDirection); + CenterOfMassVelocity = _mapAnim2Ragdoll.CenterOfMassVelocity; + CenterOfMassVelocityMagnitude = _mapAnim2Ragdoll.CenterOfMassVelocityMagnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(CenterOfMassVelocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + } + else + { + newCOM = GetCenterOfMass(); + var newHorizontalDirection = new Vector3(0f, _root.transform.eulerAngles.y, 0f); + HorizontalDirection = newHorizontalDirection / 180f; + if (!LastIsSet) + { + LastCenterOfMassInWorldSpace = newCOM; + } + transform.position = newCOM; + transform.rotation = Quaternion.Euler(newHorizontalDirection); + var velocity = newCOM - LastCenterOfMassInWorldSpace; + velocity /= timeDelta; + CenterOfMassVelocity = velocity; + CenterOfMassVelocityMagnitude = CenterOfMassVelocity.magnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(CenterOfMassVelocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + } + LastCenterOfMassInWorldSpace = newCOM; + + // get Center Of Mass horizontal velocity in f space + var comHorizontalDirection = new Vector3(CenterOfMassVelocity.x, 0f, CenterOfMassVelocity.z); + CenterOfMassHorizontalVelocity = transform.InverseTransformVector(comHorizontalDirection); + CenterOfMassHorizontalVelocityMagnitude = CenterOfMassHorizontalVelocity.magnitude; + + // get Desired Center Of Mass horizontal velocity in f space + Vector3 desiredCom = _animationController.GetDesiredVelocity(); + DesiredCenterOfMassVelocity = transform.InverseTransformVector(desiredCom); + + // get Desired Center Of Mass horizontal velocity in f space + CenterOfMassVelocityDifference = DesiredCenterOfMassVelocity - CenterOfMassHorizontalVelocity; + + if (!LastIsSet) + { + LastRotation = transform.rotation; + } + AngualrVelocity = GetAngularVelocity(LastRotation, transform.rotation, timeDelta); + LastRotation = transform.rotation; + + // get bodyParts stats in local space + foreach (var bodyPart in _bodyParts) + { + Stat bodyPartStat = Stats.First(x => x.Name == bodyPart.name); + + Vector3 c = Vector3.zero; + CapsuleCollider capsule = bodyPart as CapsuleCollider; + BoxCollider box = bodyPart as BoxCollider; + SphereCollider sphere = bodyPart as SphereCollider; + if (capsule != null) + c = capsule.center; + else if (box != null) + c = box.center; + else if (sphere != null) + c = sphere.center; + Vector3 worldPosition = bodyPart.transform.TransformPoint(c); + + Quaternion worldRotation = bodyPart.transform.rotation; + Vector3 localPosition = transform.InverseTransformPoint(worldPosition); + Quaternion localRotation = FromToRotation(transform.rotation, worldRotation); + if (!bodyPartStat.LastIsSet || !LastIsSet) + { + bodyPartStat.LastLocalPosition = localPosition; + bodyPartStat.LastLocalRotation = localRotation; + } + + bodyPartStat.Position = localPosition; + bodyPartStat.Rotation = localRotation; + bodyPartStat.Velocity = (localPosition - bodyPartStat.LastLocalPosition) / timeDelta; + bodyPartStat.AngularVelocity = GetAngularVelocity(bodyPartStat.LastLocalRotation, localRotation, timeDelta); + bodyPartStat.LastLocalPosition = localPosition; + bodyPartStat.LastLocalRotation = localRotation; + bodyPartStat.LastIsSet = true; + } + LastIsSet = true; + } + + Vector3 GetCenterOfMass() + { + var centerOfMass = Vector3.zero; + float totalMass = 0f; + foreach (ArticulationBody ab in _articulationBodyParts) + { + centerOfMass += ab.worldCenterOfMass * ab.mass; + totalMass += ab.mass; + } + centerOfMass /= totalMass; + // centerOfMass -= _spawnableEnv.transform.position; + return centerOfMass; + } + + void OnDrawGizmosSelected() + { + if (_bodyParts == null || _bodyParts.Count ==0) + return; + // draw arrow for desired input velocity + // Vector3 pos = new Vector3(transform.position.x, transform.position.y, transform.position.z); + Vector3 pos = new Vector3(transform.position.x, .3f, transform.position.z); + Vector3 vector = DesiredCenterOfMassVelocity; + if (VelocityInWorldSpace) + vector = transform.TransformVector(vector); + DrawArrow(pos, vector, Color.green); + Vector3 desiredInputPos = pos + vector; + + if (HorizontalVelocity) + { + // arrow for actual velocity + vector = CenterOfMassHorizontalVelocity; + if (VelocityInWorldSpace) + vector = transform.TransformVector(vector); + DrawArrow(pos, vector, Color.blue); + Vector3 actualPos = pos + vector; + + // arrow for actual velocity difference + vector = CenterOfMassVelocityDifference; + if (VelocityInWorldSpace) + vector = transform.TransformVector(vector); + DrawArrow(actualPos, vector, Color.red); + } + else + { + vector = CenterOfMassVelocity; + if (VelocityInWorldSpace) + vector = transform.TransformVector(vector); + DrawArrow(pos, vector, Color.blue); + Vector3 actualPos = pos + vector; + + // arrow for actual velocity difference + vector = DesiredCenterOfMassVelocity - CenterOfMassVelocity; + if (VelocityInWorldSpace) + vector = transform.TransformVector(vector); + DrawArrow(actualPos, vector, Color.red); + + } + } + void DrawArrow(Vector3 start, Vector3 vector, Color color) + { + float headSize = 0.25f; + float headAngle = 20.0f; + Gizmos.color = color; + Gizmos.DrawRay(start, vector); + + if (vector.magnitude > 0f) + { + Vector3 right = Quaternion.LookRotation(vector) * Quaternion.Euler(0, 180 + headAngle, 0) * new Vector3(0, 0, 1); + Vector3 left = Quaternion.LookRotation(vector) * Quaternion.Euler(0, 180 - headAngle, 0) * new Vector3(0, 0, 1); + Gizmos.DrawRay(start + vector, right * headSize); + Gizmos.DrawRay(start + vector, left * headSize); + } + } +} diff --git a/Assets/MarathonController/Scripts/ObservationsStats.cs.meta b/Assets/MarathonController/Scripts/ObservationsStats.cs.meta new file mode 100644 index 0000000..943f9f1 --- /dev/null +++ b/Assets/MarathonController/Scripts/ObservationsStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87e306564e6a646399aa6640e5e7447c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/ProcRagdollAgent.cs b/Assets/MarathonController/Scripts/ProcRagdollAgent.cs new file mode 100644 index 0000000..5878ef8 --- /dev/null +++ b/Assets/MarathonController/Scripts/ProcRagdollAgent.cs @@ -0,0 +1,566 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using UnityEngine; +using ManyWorlds; +using UnityEngine.Assertions; + +using System; + +public class ProcRagdollAgent : Agent +{ + [Header("Settings")] + public float FixedDeltaTime = 1f / 60f; + public float ActionSmoothingBeta = 0.2f; + public bool ReproduceDReCon = true; + + + [Header("Camera")] + + public bool RequestCamera; + public bool CameraFollowMe; + public Transform CameraTarget; + + [Header("... debug")] + public bool SkipActionSmoothing; + public bool debugCopyMocap; + public bool ignorActions; + public bool dontResetOnZeroReward; + public bool dontSnapMocapToRagdoll = true; + public bool DebugPauseOnReset; + public bool dontResetWhenOutOfBounds; + + + + + + + + //List _mocapBodyParts; + SpawnableEnv _spawnableEnv; + Observations2Learn _observations2Learn; + Rewards2Learn _rewards2Learn; + Muscles _ragDollMuscles; + List _motors; + + + + MarathonTestBedController _debugController; + InputController _inputController; + SensorObservations _sensorObservations; + DecisionRequester _decisionRequester; + IAnimationController _controllerToMimic; + + + + bool _hasLazyInitialized; + //float[] _smoothedActions; + float[] _mocapTargets; + + [Space(16)] + [SerializeField] + bool _hasAwake = false; + MapAnim2Ragdoll _mapAnim2Ragdoll; + + + + + + float observationTimeDelta; + float actionTimeDelta; + void Awake() + { + if (RequestCamera && CameraTarget != null) + { + // Will follow the last object to be spawned + var camera = FindObjectOfType(); + if (camera != null) + { + var follow = camera.GetComponent(); + if (follow != null) + follow.target = CameraTarget; + } + } + + + _hasAwake = true; + } + void Update() + { + if (debugCopyMocap) + { + EndEpisode(); + } + + Assert.IsTrue(_hasLazyInitialized); + + // hadle mocap going out of bounds + bool isOutOfBounds = !_spawnableEnv.IsPointWithinBoundsInWorldSpace(_mapAnim2Ragdoll.transform.position+new Vector3(0f, .1f, 0f)); + bool reset = isOutOfBounds && dontResetWhenOutOfBounds == false; + if (reset) + { + _mapAnim2Ragdoll.transform.position = _spawnableEnv.transform.position; + EndEpisode(); + } + } + override public void CollectObservations(VectorSensor sensor) + { + Assert.IsTrue(_hasLazyInitialized); + + observationTimeDelta = Time.fixedDeltaTime * _decisionRequester.DecisionPeriod; + _mapAnim2Ragdoll.OnStep(observationTimeDelta); + _observations2Learn.OnStep(observationTimeDelta); + + + if (ReproduceDReCon) + { + AddDReConObservations(sensor); + return; + } + + sensor.AddObservation(_observations2Learn.MocapCOMVelocity); + sensor.AddObservation(_observations2Learn.RagDollCOMVelocity); + sensor.AddObservation(_observations2Learn.RagDollCOMVelocity - _observations2Learn.MocapCOMVelocity); + sensor.AddObservation(_observations2Learn.InputDesiredHorizontalVelocity); + sensor.AddObservation(_observations2Learn.InputJump); + sensor.AddObservation(_observations2Learn.InputBackflip); + sensor.AddObservation(_observations2Learn.HorizontalVelocityDifference); + // foreach (var stat in _dReConObservations.MocapBodyStats) + // { + // sensor.AddObservation(stat.Position); + // sensor.AddObservation(stat.Velocity); + // } + foreach (var stat in _observations2Learn.RagDollBodyStats) + { + sensor.AddObservation(stat.Position); + sensor.AddObservation(stat.Velocity); + } + foreach (var stat in _observations2Learn.BodyPartDifferenceStats) + { + sensor.AddObservation(stat.Position); + sensor.AddObservation(stat.Velocity); + } + sensor.AddObservation(_observations2Learn.PreviousActions); + + // add sensors (feet etc) + sensor.AddObservation(_sensorObservations.SensorIsInTouch); + } + void AddDReConObservations(VectorSensor sensor) + { + sensor.AddObservation(_observations2Learn.MocapCOMVelocity); + sensor.AddObservation(_observations2Learn.RagDollCOMVelocity); + sensor.AddObservation(_observations2Learn.RagDollCOMVelocity - _observations2Learn.MocapCOMVelocity); + sensor.AddObservation(_observations2Learn.InputDesiredHorizontalVelocity); + sensor.AddObservation(_observations2Learn.InputJump); + sensor.AddObservation(_observations2Learn.InputBackflip); + sensor.AddObservation(_observations2Learn.HorizontalVelocityDifference); + // foreach (var stat in _dReConObservations.MocapBodyStats) + // { + // sensor.AddObservation(stat.Position); + // sensor.AddObservation(stat.Velocity); + // } + foreach (var stat in _observations2Learn.RagDollBodyStats) + { + sensor.AddObservation(stat.Position); + sensor.AddObservation(stat.Velocity); + } + foreach (var stat in _observations2Learn.BodyPartDifferenceStats) + { + sensor.AddObservation(stat.Position); + sensor.AddObservation(stat.Velocity); + } + sensor.AddObservation(_observations2Learn.PreviousActions); + } + + //adapted from previous function (Collect Observations) + public int calculateDreConObservationsize() + { + int size = 0; + + size += + 3 //sensor.AddObservation(_dReConObservations.MocapCOMVelocity); + + 3 //sensor.AddObservation(_dReConObservations.RagDollCOMVelocity); + + 3 //sensor.AddObservation(_dReConObservations.RagDollCOMVelocity - _dReConObservations.MocapCOMVelocity); + + 2 //sensor.AddObservation(_dReConObservations.InputDesiredHorizontalVelocity); + + 1 //sensor.AddObservation(_dReConObservations.InputJump); + + 1 //sensor.AddObservation(_dReConObservations.InputBackflip); + + 2;//sensor.AddObservation(_dReConObservations.HorizontalVelocityDifference); + + + Observations2Learn _checkDrecon = GetComponent(); + + + //foreach (var stat in _dReConObservations.RagDollBodyStats) + + foreach (var collider in _checkDrecon.EstimateBodyPartsForObservation()) + + { + size += + 3 //sensor.AddObservation(stat.Position); + + 3; //sensor.AddObservation(stat.Velocity); + } + //foreach (var stat in _dReConObservations.BodyPartDifferenceStats) + foreach (var collider in _checkDrecon.EstimateBodyPartsForObservation()) + + { + size += + +3 // sensor.AddObservation(stat.Position); + + 3; // sensor.AddObservation(stat.Velocity); + } + + //action size and sensor size are calculated separately, we do not use: + //sensor.AddObservation(_dReConObservations.PreviousActions); + //sensor.AddObservation(_sensorObservations.SensorIsInTouch); + + return size; + } + + public override void OnActionReceived(ActionBuffers actionBuffers) + { + Assert.IsTrue(_hasLazyInitialized); + float[] vectorAction = actionBuffers.ContinuousActions.Select(x=>x).ToArray(); + + actionTimeDelta = Time.fixedDeltaTime; + if (!_decisionRequester.TakeActionsBetweenDecisions) + actionTimeDelta = actionTimeDelta*_decisionRequester.DecisionPeriod; + _mapAnim2Ragdoll.OnStep(actionTimeDelta); + _rewards2Learn.OnStep(actionTimeDelta); + + bool shouldDebug = _debugController != null; + bool dontUpdateMotor = false; + if (_debugController != null) + { + dontUpdateMotor = _debugController.DontUpdateMotor; + dontUpdateMotor &= _debugController.isActiveAndEnabled; + dontUpdateMotor &= _debugController.gameObject.activeInHierarchy; + shouldDebug &= _debugController.isActiveAndEnabled; + shouldDebug &= _debugController.gameObject.activeInHierarchy; + } + if (shouldDebug) + { + vectorAction = GetDebugActions(vectorAction); + } + + if (!SkipActionSmoothing) + vectorAction = SmoothActions(vectorAction); + + + int i = 0;//keeps track of hte number of actions + + int j = 0;//keeps track of the number of motoros + foreach (var m in _motors) + { + if (m.isRoot) + continue; + if (dontUpdateMotor) + continue; + Vector3 targetNormalizedRotation = Vector3.zero; + if (m.jointType != ArticulationJointType.SphericalJoint) + continue; + if (m.twistLock == ArticulationDofLock.LimitedMotion) + targetNormalizedRotation.x = vectorAction[i++]; + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + targetNormalizedRotation.y = vectorAction[i++]; + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + targetNormalizedRotation.z = vectorAction[i++]; + if (!ignorActions) + { + + _ragDollMuscles.UpdateMotor(m, targetNormalizedRotation, actionTimeDelta); + } + + + + j++; + + } + + _observations2Learn.PreviousActions = vectorAction; + + AddReward(_rewards2Learn.Reward); + + if (ReproduceDReCon) + { + // DReCon Logic + if (_rewards2Learn.HeadHeightDistance > 1f || _rewards2Learn.Reward <= 0f) + { + if (!dontResetOnZeroReward) + EndEpisode(); + } + else if (_rewards2Learn.Reward <= 0.1f && !dontSnapMocapToRagdoll) + { + Transform ragDollCom = _observations2Learn.GetRagDollCOM(); + Vector3 snapPosition = ragDollCom.position; + // snapPosition.y = 0f; + var snapDistance = _mapAnim2Ragdoll.SnapTo(snapPosition); + // AddReward(-.5f); + } + } + else + { + // Our Logic + bool terminate = false; + terminate = terminate || _rewards2Learn.PositionReward < 1E-5f; + if (StepCount > 4) // HACK + terminate = terminate || _rewards2Learn.ComVelocityReward < 1E-50f; + // terminate = terminate || _dReConRewards.ComDirectionReward < .01f; + if (_rewards2Learn.VelDifferenceReward > 0f && StepCount > 4) // HACK + terminate = terminate || _rewards2Learn.VelDifferenceReward < 1E-10f; + terminate = terminate || _rewards2Learn.LocalPoseReward < 1E-5f; + // terminate = terminate || _dReConRewards.PositionReward < .01f; + // // terminate = terminate || _dReConRewards.ComVelocityReward < .01f; + // terminate = terminate || _dReConRewards.ComDirectionReward < .01f; + // if (_dReConRewards.VelDifferenceReward > 0f) // HACK + // terminate = terminate || _dReConRewards.VelDifferenceReward < .01f; + // terminate = terminate || _dReConRewards.LocalPoseReward < .01f; + if (dontResetOnZeroReward) + terminate = false; + if (terminate) + { + EndEpisode(); + } + else if (!dontSnapMocapToRagdoll) + { + Transform ragDollCom = _observations2Learn.GetRagDollCOM(); + Vector3 snapPosition = ragDollCom.position; + // snapPosition.y = 0f; + var snapDistance = _mapAnim2Ragdoll.SnapTo(snapPosition); + // AddReward(-.5f); + } + } + } + float[] GetDebugActions(float[] vectorAction) + { + var debugActions = new List(); + foreach (var m in _motors) + { + if (m.isRoot) + continue; + DebugMotor debugMotor = m.GetComponent(); + if (debugMotor == null) + { + debugMotor = m.gameObject.AddComponent(); + } + // clip to -1/+1 + debugMotor.Actions = new Vector3( + Mathf.Clamp(debugMotor.Actions.x, -1f, 1f), + Mathf.Clamp(debugMotor.Actions.y, -1f, 1f), + Mathf.Clamp(debugMotor.Actions.z, -1f, 1f) + ); + Vector3 targetNormalizedRotation = debugMotor.Actions; + + if (m.jointType != ArticulationJointType.SphericalJoint) + continue; + if (m.twistLock == ArticulationDofLock.LimitedMotion) + debugActions.Add(targetNormalizedRotation.x); + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + debugActions.Add(targetNormalizedRotation.y); + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + debugActions.Add(targetNormalizedRotation.z); + } + + debugActions = debugActions.Select(x => Mathf.Clamp(x, -1f, 1f)).ToList(); + if (_debugController.ApplyRandomActions) + { + debugActions = debugActions + .Select(x => UnityEngine.Random.Range(-_debugController.RandomRange, _debugController.RandomRange)) + .ToList(); + } + + _debugController.Actions = debugActions.ToArray(); + return debugActions.ToArray(); + } + + float[] SmoothActions(float[] vectorAction) + { + // yt =β at +(1−β)yt−1 + var smoothedActions = vectorAction + .Zip(_observations2Learn.PreviousActions, (a, y) => ActionSmoothingBeta * a + (1f - ActionSmoothingBeta) * y) + .ToArray(); + return smoothedActions; + } + float[] GetActionsFromRagdollState() + { + var vectorActions = new List(); + foreach (var m in _motors) + { + if (m.isRoot) + continue; + int i = 0; + if (m.jointType != ArticulationJointType.SphericalJoint) + continue; + if (m.twistLock == ArticulationDofLock.LimitedMotion) + { + var drive = m.xDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var deg = m.jointPosition[i++] * Mathf.Rad2Deg; + var target = (deg - midpoint) / scale; + vectorActions.Add(target); + } + if (m.swingYLock == ArticulationDofLock.LimitedMotion) + { + var drive = m.yDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var deg = m.jointPosition[i++] * Mathf.Rad2Deg; + var target = (deg - midpoint) / scale; + vectorActions.Add(target); + } + if (m.swingZLock == ArticulationDofLock.LimitedMotion) + { + var drive = m.zDrive; + var scale = (drive.upperLimit - drive.lowerLimit) / 2f; + var midpoint = drive.lowerLimit + scale; + var deg = m.jointPosition[i++] * Mathf.Rad2Deg; + var target = (deg - midpoint) / scale; + vectorActions.Add(target); + } + } + return vectorActions.ToArray(); + } + public override void Initialize() + { + Assert.IsTrue(_hasAwake); + Assert.IsFalse(_hasLazyInitialized); + _hasLazyInitialized = true; + + _decisionRequester = GetComponent(); + _debugController = FindObjectOfType(); + Time.fixedDeltaTime = FixedDeltaTime; + _spawnableEnv = GetComponentInParent(); + + if (_debugController != null) + { + dontResetOnZeroReward = true; + dontSnapMocapToRagdoll = true; + } + + _mapAnim2Ragdoll = _spawnableEnv.GetComponentInChildren(); + //_mocapBodyParts = _mapAnim2Ragdoll.GetRigidBodies(); + + _observations2Learn = GetComponent(); + _rewards2Learn = GetComponent(); + + _ragDollMuscles = GetComponent(); + + + + + _inputController = _spawnableEnv.GetComponentInChildren(); + _sensorObservations = GetComponent(); + + + _motors = GetComponentsInChildren() + .Where(x => x.jointType == ArticulationJointType.SphericalJoint) + .Where(x => !x.isRoot) + .Distinct() + .ToList(); + //var individualMotors = new List(); + + + + + + + _observations2Learn.PreviousActions = GetActionsFromRagdollState(); + + _controllerToMimic = _mapAnim2Ragdoll.GetComponent(); + + + + _mapAnim2Ragdoll.OnAgentInitialize(); + //it can only be used AFTER _mapAnim2Ragdoll is initialzed. + _ragDollMuscles.SetKinematicReference(_mapAnim2Ragdoll);//only used in mode PDopenloop + + _observations2Learn.OnAgentInitialize(); + _rewards2Learn.OnAgentInitialize(ReproduceDReCon); + _controllerToMimic.OnAgentInitialize(); + + + _hasLazyInitialized = true; + } + public override void OnEpisodeBegin() + { + Assert.IsTrue(_hasAwake); + //_smoothedActions = null; + debugCopyMocap = false; + + Vector3 resetVelocity = Vector3.zero; + if (_inputController != null) + { + // _inputController.OnReset(); + _controllerToMimic.OnReset(); + // resets to source anim + // var angle = Vector3.SignedAngle(Vector3.forward, _inputController.HorizontalDirection, Vector3.up); + // var rotation = Quaternion.Euler(0f, angle, 0f); + var rotation = _mapAnim2Ragdoll.transform.rotation; + _mapAnim2Ragdoll.OnReset(rotation); + _mapAnim2Ragdoll.CopyStatesTo(this.gameObject); + resetVelocity = _controllerToMimic.GetDesiredVelocity(); + _mapAnim2Ragdoll.CopyVelocityTo(this.gameObject, resetVelocity); + } + else + { + _controllerToMimic.OnReset(); + // source anim is continious + var rotation = _mapAnim2Ragdoll.transform.rotation; + _mapAnim2Ragdoll.OnReset(rotation); + resetVelocity = _controllerToMimic.GetDesiredVelocity(); + _mapAnim2Ragdoll.CopyStatesTo(this.gameObject); + _mapAnim2Ragdoll.CopyVelocityTo(this.gameObject, resetVelocity); + } + + _observations2Learn.OnReset(); + _rewards2Learn.OnReset(); + // float timeDelta = float.Epsilon; + // _dReConObservations.OnStep(timeDelta); + // _dReConRewards.OnStep(timeDelta); +#if UNITY_EDITOR + if (DebugPauseOnReset) + { + UnityEditor.EditorApplication.isPaused = true; + } +#endif + if (_debugController != null && _debugController.isActiveAndEnabled) + { + _debugController.OnAgentEpisodeBegin(); + } + _observations2Learn.PreviousActions = GetActionsFromRagdollState(); + } + + + void FixedUpdate() + { + if (debugCopyMocap) + { + EndEpisode(); + } + } + void OnDrawGizmos() + { + if (_rewards2Learn == null || _inputController == null) + return; + var comTransform = _rewards2Learn._ragDollBodyStats.transform; + var vector = new Vector3(_inputController.MovementVector.x, 0f, _inputController.MovementVector.y); + var pos = new Vector3(comTransform.position.x, 0.001f, comTransform.position.z); + DrawArrow(pos, vector, Color.black); + } + void DrawArrow(Vector3 start, Vector3 vector, Color color) + { + float headSize = 0.25f; + float headAngle = 20.0f; + Gizmos.color = color; + Gizmos.DrawRay(start, vector); + if (vector != Vector3.zero) + { + Vector3 right = Quaternion.LookRotation(vector) * Quaternion.Euler(0, 180 + headAngle, 0) * new Vector3(0, 0, 1); + Vector3 left = Quaternion.LookRotation(vector) * Quaternion.Euler(0, 180 - headAngle, 0) * new Vector3(0, 0, 1); + Gizmos.DrawRay(start + vector, right * headSize); + Gizmos.DrawRay(start + vector, left * headSize); + } + } +} diff --git a/Assets/MarathonController/Scripts/ProcRagdollAgent.cs.meta b/Assets/MarathonController/Scripts/ProcRagdollAgent.cs.meta new file mode 100644 index 0000000..65ad203 --- /dev/null +++ b/Assets/MarathonController/Scripts/ProcRagdollAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80fc21710754c439fb9c67d9e4e30294 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/ROMparserSwingTwist.cs b/Assets/MarathonController/Scripts/ROMparserSwingTwist.cs new file mode 100644 index 0000000..75fdc10 --- /dev/null +++ b/Assets/MarathonController/Scripts/ROMparserSwingTwist.cs @@ -0,0 +1,479 @@ +using System.Collections; +using System.Collections.Generic; +using System; + +using UnityEngine; +using System.Linq; + + +public class ROMparserSwingTwist : MonoBehaviour +{ + + //we assume a decomposition where the twist is in the X axis. + //This seems consistent with how ArticulationBody works (see constraints in the inspector and definition of ReducedCoordinates) + + public + Animator theAnimator; + + public + Transform skeletonRoot; + + Transform[] joints; + + + float duration; + + + [SerializeField] + //public ROMinfoCollector info2store; + public RangeOfMotionValues info2store; + + + //those are to generate a prefab from a bunch of articulated bodies and the constraints parsed + + //[SerializeField] + public ArticulationBody targetRagdollRoot; + + + [Tooltip("Learning Environment where to integrate the constrained ragdoll. Leave blanc if you do not want to generate any training environment")] + public + ManyWorlds.SpawnableEnv trainingEnv; + + + + [Tooltip("Leave blanc if you want to apply on all the children of targetRoot")] + [SerializeField] + ArticulationBody[] targetJoints; + + string animationEndMessage = "First animation played.If there are no more animations, the constraints have been stored.If there are, wait until the ROM info collector file does not update anymore"; + + + +// [SerializeField] + + // public RangeOfMotionValue[] RangeOfMotionPreview; + + MapAnim2Ragdoll _mocapControllerArtanim; + Vector3 _rootStartPosition; + Quaternion _rootStartRotation; + + public bool MimicMocap; + [Range(0, 359)] + public int MaxROM = 180; + + [Range(0, 500)] + public int MimicSkipPhysicsSteps = 50; + int _physicsStepsToNextMimic = 0; + public float stiffness = 40000f; + public float damping = 0f; + public float forceLimit = float.MaxValue; + + + + // Start is called before the first frame update + void Start() + { + + + + joints = skeletonRoot.GetComponentsInChildren(); + + + foreach (Transform j in joints) { + info2store.addJoint(j); + + } + + + try + { + + AnimatorClipInfo[] info = theAnimator.GetCurrentAnimatorClipInfo(0); + AnimationClip theClip = info[0].clip; + duration = theClip.length; + Debug.Log("The animation " + theClip.name + " has a duration of: " + duration); + + } + catch { + Debug.Log("the character does not seem to have an animator. Make sure it is moving in some way to extract the Range of Motion"); + + } + + + _mocapControllerArtanim = theAnimator.GetComponent(); + + // get root start position and rotation + var articulationBodies = targetRagdollRoot.GetComponentsInChildren(true); + if (articulationBodies.Length == 0) + return; + var root = articulationBodies.First(x => x.isRoot); + _rootStartPosition = root.transform.position; + _rootStartRotation = root.transform.rotation; + + // if no joints specified get joints using + // not root (is static), begins with 'articulation:' + if (targetJoints.Length == 0) + { + targetJoints = targetRagdollRoot + .GetComponentsInChildren(true) + .Where(x => x.isRoot == false) + .Where(x => x.name.StartsWith("articulation:")) + .ToArray(); + SetJointsToMaxROM(); + } + } + + + void CopyMocap() + { + if (_mocapControllerArtanim != null && + targetRagdollRoot != null && + _mocapControllerArtanim.enabled) + { + var atriculationBodies = targetRagdollRoot.GetComponentsInChildren(); + if (atriculationBodies.Length == 0) + return; + var root = atriculationBodies.First(x => x.isRoot); + CopyMocapStatesTo(root.gameObject, _rootStartPosition); + // teleport back to start position + // var curRotation = root.transform.rotation; + // root.TeleportRoot(_rootStartPosition, curRotation); + // Vector3 offset = _rootStartPosition - root.transform.position; + // root.gameObject.SetActive(false); + // foreach (var t in root.GetComponentsInChildren()) + // { + // t.position = t.position + offset; + // } + // root.transform.position = _rootStartPosition; + // root.gameObject.SetActive(true); + + // foreach (var body in atriculationBodies) + // { + // if (body.twistLock == ArticulationDofLock.LimitedMotion) + // { + // var xDrive = body.xDrive; + // List targets = new List(); + // var bb = body.GetDriveTargets(targets); + // var cc = 22; + // } + // } + } + } + void CopyMocapStatesTo(GameObject target, Vector3 rootPosition) + { + + var targets = target.GetComponentsInChildren().ToList(); + if (targets?.Count == 0) + return; + var root = targets.First(x => x.isRoot); + root.gameObject.SetActive(false); + var mocapRoot = _mocapControllerArtanim.GetComponentsInChildren().First(x => x.name == root.name); + Vector3 offset = rootPosition - mocapRoot.transform.position; + foreach (var body in targets) + { + var stat = _mocapControllerArtanim.GetComponentsInChildren().First(x => x.name == body.name); + body.transform.position = stat.position + offset; + body.transform.rotation = stat.rotation; + if (body.isRoot) + { + body.TeleportRoot(stat.position + offset, stat.rotation); + } + } + root.gameObject.SetActive(true); + foreach (var body in targets) + { + // body.AddForce(new Vector3(0.1f, -200f, 3f)); + // body.AddTorque(new Vector3(0.1f, 200f, 3f)); + body.velocity = (new Vector3(0.1f, 4f, .3f)); + body.angularVelocity = (new Vector3(0.1f, 20f, 3f)); + } + } + + + + + void FixedUpdate() + { + for (int i = 0; i < joints.Length; i++) + { + + + Quaternion localRotation = joints[i].localRotation; + + Vector3 candidates4storage = Utils.GetSwingTwist(localRotation); + + + + if (info2store.Values[i].upper.x < candidates4storage.x) + info2store.Values[i].upper.x = candidates4storage.x; + if (info2store.Values[i].upper.y < candidates4storage.y) + info2store.Values[i].upper.y = candidates4storage.y; + if (info2store.Values[i].upper.z < candidates4storage.z) + info2store.Values[i].upper.z = candidates4storage.z; + + + if (info2store.Values[i].lower.x > candidates4storage.x) + info2store.Values[i].lower.x = candidates4storage.x; + if (info2store.Values[i].lower.y > candidates4storage.y) + info2store.Values[i].lower.y = candidates4storage.y; + if (info2store.Values[i].lower.z > candidates4storage.z) + info2store.Values[i].lower.z = candidates4storage.z; + + + + } + + if (duration < Time.time) + { + if(animationEndMessage.Length > 0) { + Debug.Log(animationEndMessage); + animationEndMessage = ""; + } + + } + + // CalcPreview();//this only stores the ROM value? + + + CalculateOscillatorParameters(); + + + } + // void FixedUpdate() + void OnRenderObject() + { + if (MimicMocap) + { + if (_physicsStepsToNextMimic-- < 1) + { + CopyMocap(); + _physicsStepsToNextMimic = MimicSkipPhysicsSteps; + } + } + } + + // preview range of motion + + /* + void CalcPreview() + { + ArticulationBody[] articulationBodies = targetJoints; + //we want them all: + if (articulationBodies.Length == 0) + articulationBodies = targetRagdollRoot.GetComponentsInChildren(true); + + List preview = new List(); + + //List jNames = new List(info2store.jointNames); + List jNames = new List(info2store.getNames()); + for (int i = 0; i < articulationBodies.Length; i++) + { + string s = articulationBodies[i].name; + string[] parts = s.Split(':'); + //we assume the articulationBodies have a name structure of hte form ANYNAME:something-in-the-targeted-joint + + int index = -1; + + index = jNames.FindIndex(x => x.Contains(parts[1])); + + if (index < 0) + Debug.Log("Could not find a joint name matching " + s + " and specifically: " + parts[1]); + else + { + preview.Add(info2store.Values[index]); + } + } + // RangeOfMotionPreview = preview.ToArray(); + } + */ + + //Not needed, the previous function already does that + //public void WriteRangeOfMotion() + //{ + // if (RangeOfMotion2Store == null) + // RangeOfMotion2Store = RangeOfMotion004.CreateInstance(); + // RangeOfMotion2Store.Values = RangeOfMotionPreview; + //} + + // Make all joints use Max Range of Motion + public void SetJointsToMaxROM() + { + //these are the articulationBodies that we want to parse and apply the constraints to + ArticulationBody[] articulationBodies; + + ArticulationBody[] joints = targetJoints; + //we want them all: + if (joints.Length == 0) + joints = targetRagdollRoot.GetComponentsInChildren(); + + articulationBodies = joints.ToArray(); + + foreach (var body in articulationBodies) + { + // root has no DOF + if (body.isRoot) + continue; + body.jointType = ArticulationJointType.SphericalJoint; + body.twistLock = ArticulationDofLock.LimitedMotion; + body.swingYLock = ArticulationDofLock.LimitedMotion; + body.swingZLock = ArticulationDofLock.LimitedMotion; + + var drive = new ArticulationDrive(); + drive.lowerLimit = -(float)MaxROM; + drive.upperLimit = (float)MaxROM; + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = forceLimit; + body.xDrive = drive; + + drive = new ArticulationDrive(); + drive.lowerLimit = -(float)MaxROM; + drive.upperLimit = (float)MaxROM; + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = forceLimit; + body.yDrive = drive; + + drive = new ArticulationDrive(); + drive.lowerLimit = -(float)MaxROM; + drive.upperLimit = (float)MaxROM; + drive.stiffness = stiffness; + drive.damping = damping; + drive.forceLimit = forceLimit; + body.zDrive = drive; + + // body.useGravity = false; + } + } + + + + + public void CalculateOscillatorParameters() { + + + + + } + + + + //we assume the constraints have been well applied + //This function is called from an Editor Script + public void Prepare4PrefabStorage(out ProcRagdollAgent rda, out ManyWorlds.SpawnableEnv envPrefab) + { + + + ArticulationBody targetRagdollPrefab = GameObject.Instantiate(targetRagdollRoot); + + //if there is a spawnableEnv, there is a ragdollAgent: + rda = targetRagdollPrefab.GetComponent(); + + if (rda != null) + Debug.Log("Setting up the ragdoll agent"); + + envPrefab = null; + + + + + + //these are all the articulationBodies in the ragdoll prefab + ArticulationBody[] articulationBodies; + + Transform[] joints = targetRagdollPrefab.GetComponentsInChildren(); + + + List temp = new List(); + for (int i = 0; i < joints.Length; i++) + { + ArticulationBody a = joints[i].GetComponent(); + if (a != null) + temp.Add(a); + } + + articulationBodies = temp.ToArray(); + + + //We also prepare everything inside the ragdoll agent : + for (int i = 0; i < articulationBodies.Length; i++) + { + articulationBodies[i].transform.localRotation = Quaternion.identity; + if (articulationBodies[i].isRoot) + { + articulationBodies[i].immovable = false; + if (rda != null) + rda.CameraTarget = articulationBodies[i].transform; + + + if (trainingEnv) + { + envPrefab = GameObject.Instantiate(trainingEnv); + + Animator target = envPrefab.transform.GetComponentInChildren(); + + + + //we assume the environment has an animated character, and in this there is a son which is the root of a bunch of rigidBodies forming a humanoid. + //TODO: replace this function with something that creates the rigidBody humanoid such a thing procedurally + activateMarathonManTarget(target); + + //we also need our target animation to have this: + TrackBodyStatesInWorldSpace tracker = target.GetComponent(); + if (tracker == null) + target.gameObject.AddComponent(); + + + + if (rda != null) + { + rda.transform.parent = envPrefab.transform; + rda.name = targetRagdollRoot.name; + rda.enabled = true;//this should already be the case, but just ot be cautious + } + + MapRagdoll2Anim agentOutcome = envPrefab.GetComponentInChildren(true); + if (agentOutcome != null) + { + agentOutcome.gameObject.SetActive(true); + //agentOutcome.enabled = true; + agentOutcome.ArticulationBodyRoot = articulationBodies[i]; + } + } + } + + } + + } + + + + static void activateMarathonManTarget(Animator target) + { + + Transform[] rbs = target.GetComponentsInChildren(true); + + + //Rigidbody[] rbs = target.GetComponentsInChildren(true); + for (int i = 0; i < rbs.Length; i++) + { + rbs[i].gameObject.SetActive(true); + + } + + + + //the animation source is a son of the SpawnableEnv, or it does not find the MocapControllerArtanim when it initializes + MapAnim2Ragdoll mca = target.GetComponent(); + mca.enabled = true; + + + + + + + } + + + +} diff --git a/Assets/MarathonController/Scripts/ROMparserSwingTwist.cs.meta b/Assets/MarathonController/Scripts/ROMparserSwingTwist.cs.meta new file mode 100644 index 0000000..063d8be --- /dev/null +++ b/Assets/MarathonController/Scripts/ROMparserSwingTwist.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ab97429936402d4b8e61f401f945174 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/RangeOfMotionValues.cs b/Assets/MarathonController/Scripts/RangeOfMotionValues.cs new file mode 100644 index 0000000..8628898 --- /dev/null +++ b/Assets/MarathonController/Scripts/RangeOfMotionValues.cs @@ -0,0 +1,91 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using Unity.Barracuda; + +[System.Serializable] +public class RangeOfMotionValue +{ + // [HideInInspector] + public string name; + public Vector3 lower; + public Vector3 upper; + public Vector3 rangeOfMotion { get { + var diff = upper - lower; + var rom = new Vector3( + Mathf.Abs(diff.x), + Mathf.Abs(diff.y), + Mathf.Abs(diff.z) + ); + return rom; + }} +} + + +public class OscillationParameters +{ + public string name; + + public float dampingRatio; + public float natFreq; + + +} + +[CreateAssetMenu(fileName = "RangeOfMotion", menuName = "Parser/CreateRangeOfMotionFile")] +public class RangeOfMotionValues : ScriptableObject +{ + public RangeOfMotionValue[] Values { get { return _values.ToArray(); } } + + + //[HideInInspector] + [SerializeField] + List _values = new List(); + + + List _osc = new List(); + + + public void addJoint(Transform joint) + { + RangeOfMotionValue r = new RangeOfMotionValue(); + r.name = joint.name; + + _values.Add(r); + + + OscillationParameters o = new OscillationParameters(); + o.name = joint.name; + _osc.Add(o); + + + } + + //public + //a model trained with these constraints + //NNModel InferenceModel; + + public string[] getNames() + { + + + string[] temp = new string[Values.Length]; + + for (int i = 0; i < Values.Length; i++) + { + temp[i] = (Values[i].name); + + + } + return temp; + + } + + + + + + +} + diff --git a/Assets/MarathonController/Scripts/RangeOfMotionValues.cs.meta b/Assets/MarathonController/Scripts/RangeOfMotionValues.cs.meta new file mode 100644 index 0000000..cba5e74 --- /dev/null +++ b/Assets/MarathonController/Scripts/RangeOfMotionValues.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2774db094247c4810922f4534abbb6a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/RewardStats.cs b/Assets/MarathonController/Scripts/RewardStats.cs new file mode 100644 index 0000000..c402296 --- /dev/null +++ b/Assets/MarathonController/Scripts/RewardStats.cs @@ -0,0 +1,385 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; +using UnityEngine.Assertions; +using ManyWorlds; + +public class RewardStats : MonoBehaviour +{ + [Header("Settings")] + + public MonoBehaviour ObjectToTrack; + + [Header("Stats")] + public Vector3 CenterOfMassVelocity; + public float CenterOfMassVelocityMagnitude; + public Vector3 CenterOfMassVelocityInRootSpace; + public float CenterOfMassVelocityMagnitudeInRootSpace; + + [HideInInspector] public Vector3 LastCenterOfMassInWorldSpace; + [HideInInspector] public Vector3 HeadPositionInWorldSpace; + [HideInInspector] public Vector3 RootPositionInWorldSpace; + [HideInInspector] public bool LastIsSet; + + SpawnableEnv _spawnableEnv; + List _colliders; + List _rigidbodyParts; + List _articulationBodyParts; + List _bodyParts; + GameObject _root; + GameObject _head; + MapAnim2Ragdoll _mapAnim2Ragdoll; + List _trackRotations; + public List Rotations; + public Vector3[] Points; + Vector3[] _lastPoints; + public Vector3[] PointVelocity; + + [Header("Stats")] + public List ColliderNames; + public List RotationNames; + public List BodyPartNames; + bool _hasLazyInitialized; + + + string rootName = "articulation:Hips"; + string headName = ""; + + public void setRootName(string s) + { + rootName = s; + } + public void setHeadName(string s) + { + headName = s; + } + + + public void OnAgentInitialize(Transform defaultTransform, RewardStats orderToCopy = null) + { + Assert.IsFalse(_hasLazyInitialized); + _hasLazyInitialized = true; + + _mapAnim2Ragdoll = defaultTransform.GetComponent(); + _spawnableEnv = GetComponentInParent(); + _articulationBodyParts = ObjectToTrack + .GetComponentsInChildren() + .Distinct() + .ToList(); + _rigidbodyParts = ObjectToTrack + .GetComponentsInChildren() + .Distinct() + .ToList(); + if (_rigidbodyParts?.Count > 0) + _bodyParts = _rigidbodyParts.Select(x => x.gameObject).ToList(); + else + _bodyParts = _articulationBodyParts.Select(x => x.gameObject).ToList(); + _trackRotations = _bodyParts + .SelectMany(x => x.GetComponentsInChildren()) + .Select(x => x.gameObject) + .Distinct() + .Where(x => x.GetComponent() != null || x.GetComponent() != null) + .Where(x=>x.name.StartsWith("articulation:")) + .ToList(); + _colliders = _bodyParts + .SelectMany(x => x.GetComponentsInChildren()) + .Where(x => x.enabled) + .Where(x => !x.isTrigger) + .Where(x=> { + var ignoreCollider = x.GetComponent(); + if (ignoreCollider == null) + return true; + return !ignoreCollider.enabled;}) + .Distinct() + .ToList(); + if (orderToCopy != null) + { + _bodyParts = orderToCopy._bodyParts + .Select(x => _bodyParts.First(y => y.name == x.name)) + .ToList(); + _trackRotations = orderToCopy._trackRotations + .Select(x => _trackRotations.First(y => y.name == x.name)) + .ToList(); + _colliders = orderToCopy._colliders + .Select(x => _colliders.First(y => y.name == x.name)) + .ToList(); + } + Points = Enumerable.Range(0, _colliders.Count * 6) + .Select(x => Vector3.zero) + .ToArray(); + _lastPoints = Enumerable.Range(0, _colliders.Count * 6) + .Select(x => Vector3.zero) + .ToArray(); + PointVelocity = Enumerable.Range(0, _colliders.Count * 6) + .Select(x => Vector3.zero) + .ToArray(); + Rotations = Enumerable.Range(0, _trackRotations.Count) + .Select(x => Quaternion.identity) + .ToList(); + _root = _bodyParts.First(x => x.name == rootName); + _head = _bodyParts.First(x => x.name == headName); + transform.position = defaultTransform.position; + transform.rotation = defaultTransform.rotation; + LastCenterOfMassInWorldSpace = transform.position; + HeadPositionInWorldSpace = _head.transform.position; + RootPositionInWorldSpace = _root.transform.position; + ColliderNames = _colliders + .Select(x => x.name) + .ToList(); + RotationNames = _trackRotations + .Select(x => x.name) + .ToList(); + BodyPartNames = _bodyParts + .Select(x => x.name) + .ToList(); + } + public void OnReset() + { + Assert.IsTrue(_hasLazyInitialized); + ResetStatus(); + LastIsSet = false; + } + public void ResetStatus() + { + LastIsSet = false; + var timeDelta = float.MinValue; + SetStatusForStep(timeDelta); + } + + public void SetStatusForStep(float timeDelta) + { + // get Center Of Mass velocity in f space + Vector3 newCOM; + // if Moocap, then get from anim2Ragdoll + if (_mapAnim2Ragdoll != null) + { + newCOM = _mapAnim2Ragdoll.LastCenterOfMassInWorldSpace; + var newHorizontalDirection = _mapAnim2Ragdoll.HorizontalDirection; + if (!LastIsSet) + { + LastCenterOfMassInWorldSpace = newCOM; + } + transform.position = newCOM; + transform.rotation = Quaternion.Euler(newHorizontalDirection); + CenterOfMassVelocity = _mapAnim2Ragdoll.CenterOfMassVelocity; + CenterOfMassVelocityMagnitude = _mapAnim2Ragdoll.CenterOfMassVelocityMagnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(CenterOfMassVelocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + HeadPositionInWorldSpace = _mapAnim2Ragdoll.LastHeadPositionInWorldSpace; + RootPositionInWorldSpace = _mapAnim2Ragdoll.LastRootPositionInWorldSpace; + } + else + { + newCOM = GetCenterOfMass(); + var newHorizontalDirection = new Vector3(0f, _root.transform.eulerAngles.y, 0f); + if (!LastIsSet) + { + LastCenterOfMassInWorldSpace = newCOM; + } + transform.position = newCOM; + transform.rotation = Quaternion.Euler(newHorizontalDirection); + var velocity = newCOM - LastCenterOfMassInWorldSpace; + velocity /= timeDelta; + CenterOfMassVelocity = velocity; + CenterOfMassVelocityMagnitude = CenterOfMassVelocity.magnitude; + CenterOfMassVelocityInRootSpace = transform.InverseTransformVector(CenterOfMassVelocity); + CenterOfMassVelocityMagnitudeInRootSpace = CenterOfMassVelocityInRootSpace.magnitude; + HeadPositionInWorldSpace = _head.transform.position; + RootPositionInWorldSpace = _root.transform.position; + } + LastCenterOfMassInWorldSpace = newCOM; + + GetAllPoints(Points); + if (!LastIsSet) + { + Array.Copy(Points, 0, _lastPoints, 0, Points.Length); + } + for (int i = 0; i < Points.Length; i++) + { + PointVelocity[i] = (Points[i] - _lastPoints[i]) / timeDelta; + } + Array.Copy(Points, 0, _lastPoints, 0, Points.Length); + + for (int i = 0; i < _trackRotations.Count; i++) + { + Quaternion localRotation = _trackRotations[i].transform.localRotation; + if (_trackRotations[i].gameObject == _root) + localRotation = Quaternion.Inverse(transform.rotation) * _trackRotations[i].transform.rotation; + Rotations[i] = localRotation; + } + + LastIsSet = true; + } + + public List GetPointDistancesFrom(RewardStats target) + { + List distances = new List(); + for (int i = 0; i < Points.Length; i++) + { + float distance = (Points[i] - target.Points[i]).magnitude; + distances.Add(distance); + } + return distances; + } + + public List GetPointVelocityDistancesFrom(RewardStats target) + { + List distances = new List(); + for (int i = 0; i < PointVelocity.Length; i++) + { + float distance = (PointVelocity[i] - target.PointVelocity[i]).magnitude; + distances.Add(distance); + } + return distances; + } + + public void AssertIsCompatible(RewardStats target) + { + Assert.AreEqual(Points.Length, target.Points.Length); + Assert.AreEqual(_lastPoints.Length, target._lastPoints.Length); + Assert.AreEqual(PointVelocity.Length, target.PointVelocity.Length); + Assert.AreEqual(Points.Length, _lastPoints.Length); + Assert.AreEqual(Points.Length, PointVelocity.Length); + Assert.AreEqual(_colliders.Count, target._colliders.Count); + for (int i = 0; i < _colliders.Count; i++) + { + string debugStr = $" _colliders.{_colliders[i].name} vs target._colliders.{target._colliders[i].name}"; + Assert.AreEqual(_colliders[i].name, target._colliders[i].name, $"name:{debugStr}"); + // Assert.AreEqual(_colliders[i].direction, target._colliders[i].direction, $"direction:{debugStr}"); + // Assert.AreEqual(_colliders[i].height, target._colliders[i].height, $"height:{debugStr}"); + // Assert.AreEqual(_colliders[i].radius, target._colliders[i].radius, $"radius:{debugStr}"); + } + Assert.AreEqual(ColliderNames.Count, target.ColliderNames.Count); + Assert.AreEqual(RotationNames.Count, target.RotationNames.Count); + Assert.AreEqual(BodyPartNames.Count, target.BodyPartNames.Count); + for (int i = 0; i < ColliderNames.Count; i++) + Assert.AreEqual(ColliderNames[i], target.ColliderNames[i]); + for (int i = 0; i < RotationNames.Count; i++) + Assert.AreEqual(RotationNames[i], target.RotationNames[i]); + for (int i = 0; i < BodyPartNames.Count; i++) + Assert.AreEqual(BodyPartNames[i], target.BodyPartNames[i]); + } + + void GetAllPoints(Vector3[] pointBuffer) + { + int idx = 0; + foreach (var collider in _colliders) + { + CapsuleCollider capsule = collider as CapsuleCollider; + BoxCollider box = collider as BoxCollider; + SphereCollider sphere = collider as SphereCollider; + Vector3 c = Vector3.zero; + Bounds b = new Bounds(c, c); + + if (collider.name == "head") + { + c = c; + } + + if (capsule != null) + { + c = capsule.center; + var r = capsule.radius * 2; + var h = capsule.height; + h = Mathf.Max(r, h); // capsules height is clipped at r + if (capsule.direction == 0) + b = new Bounds(c, new Vector3(h, r, r)); + else if (capsule.direction == 1) + b = new Bounds(c, new Vector3(r, h, r)); + else if (capsule.direction == 2) + b = new Bounds(c, new Vector3(r, r, h)); + else throw new NotImplementedException(); + } + else if (box != null) + { + c = box.center; + b = new Bounds(c, box.size); + } + else if (sphere != null) + { + c = sphere.center; + var r = sphere.radius * 2; + b = new Bounds(c, new Vector3(r, r, r)); + } + else + throw new NotImplementedException(); + + Vector3 point1, point2, point3, point4, point5, point6; + point1 = new Vector3(b.max.x, c.y, c.z); + point2 = new Vector3(b.min.x, c.y, c.z); + point3 = new Vector3(c.x, b.max.y, c.z); + point4 = new Vector3(c.x, b.min.y, c.z); + point5 = new Vector3(c.x, c.y, b.max.z); + point6 = new Vector3(c.x, c.y, b.min.z); + // from local collider space to world space + point1 = collider.transform.TransformPoint(point1); + point2 = collider.transform.TransformPoint(point2); + point3 = collider.transform.TransformPoint(point3); + point4 = collider.transform.TransformPoint(point4); + point5 = collider.transform.TransformPoint(point5); + point6 = collider.transform.TransformPoint(point6); + // transform from world space, into local space + point1 = this.transform.InverseTransformPoint(point1); + point2 = this.transform.InverseTransformPoint(point2); + point3 = this.transform.InverseTransformPoint(point3); + point4 = this.transform.InverseTransformPoint(point4); + point5 = this.transform.InverseTransformPoint(point5); + point6 = this.transform.InverseTransformPoint(point6); + + pointBuffer[idx++] = point1; + pointBuffer[idx++] = point2; + pointBuffer[idx++] = point3; + pointBuffer[idx++] = point4; + pointBuffer[idx++] = point5; + pointBuffer[idx++] = point6; + } + } + Vector3 GetCenterOfMass() + { + var centerOfMass = Vector3.zero; + float totalMass = 0f; + foreach (ArticulationBody ab in _articulationBodyParts) + { + centerOfMass += ab.worldCenterOfMass * ab.mass; + totalMass += ab.mass; + } + centerOfMass /= totalMass; + // centerOfMass -= _spawnableEnv.transform.position; + return centerOfMass; + } + public void DrawPointDistancesFrom(RewardStats target, int objIdex) + { + int start = 0; + int end = Points.Length - 1; + if (objIdex >= 0) + { + start = objIdex * 6; + end = (objIdex * 6) + 6; + } + for (int i = start; i < end; i++) + { + Gizmos.color = Color.white; + var from = Points[i]; + var to = target.Points[i]; + var toTarget = target.Points[i]; + // transform to this object's world space + from = this.transform.TransformPoint(from); + to = this.transform.TransformPoint(to); + // transform to target's world space + toTarget = target.transform.TransformPoint(toTarget); + Gizmos.color = Color.white; + Gizmos.DrawLine(from, toTarget); + // show this objects velocity + Vector3 velocity = PointVelocity[i]; + Gizmos.color = Color.blue; + Gizmos.DrawRay(from, velocity); + // show targets velocity + Vector3 velocityTarget = target.PointVelocity[i]; + Gizmos.color = Color.green; + Gizmos.DrawRay(toTarget, velocityTarget); + } + } +} diff --git a/Assets/MarathonController/Scripts/RewardStats.cs.meta b/Assets/MarathonController/Scripts/RewardStats.cs.meta new file mode 100644 index 0000000..7c446f3 --- /dev/null +++ b/Assets/MarathonController/Scripts/RewardStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96614916e0da54eff9656e7271dac845 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/Rewards2Learn.cs b/Assets/MarathonController/Scripts/Rewards2Learn.cs new file mode 100644 index 0000000..51adba2 --- /dev/null +++ b/Assets/MarathonController/Scripts/Rewards2Learn.cs @@ -0,0 +1,432 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; +using UnityEngine.Assertions; +using ManyWorlds; + +public class Rewards2Learn : MonoBehaviour +{ + [Header("Reward")] + public float SumOfSubRewards; + public float Reward; + + [Header("Position Reward")] + public float SumOfDistances; + public float SumOfSqrDistances; + public float PositionReward; + + [Header("Velocity Reward")] + public float PointsVelocityDifferenceSquared; + public float PointsVelocityReward; + + [Header("Local Pose Reward")] + public List RotationDifferences; + public float SumOfRotationDifferences; + public float SumOfRotationSqrDifferences; + public float LocalPoseReward; + + + + [Header("Center of Mass Velocity Reward")] + public Vector3 MocapCOMVelocity; + public Vector3 RagDollCOMVelocity; + + public float COMVelocityDifference; + public float ComVelocityReward; + public float ComReward; + + [Header("Center of Mass Direction Reward")] + public float ComDirectionDistance; + public float ComDirectionReward; + + [Header("Center of Mass Position Reward")] + public float ComDistance; + public float DistanceFactor; + public float ComPositionReward; + + // [Header("Direction Factor")] + // public float DirectionDistance; + // public float DirectionFactor; + [Header("Velocity Difference Reward")] + public float VelDifferenceError; + public float VelAvDiffTwoStepsError; + public float VelAvDiffFourStepsError; + public float VelDifferenceReward; + public float VelDiffTwoStepsReward; + public float VelDiffFourStepsReward; + float [][] _velHistoryTwoSteps; + float [][] _velHistoryFourSteps; + + + [Header("Minimize Energy Reward")] + public float KineticEnergyMetric; + public float EnergyMinimReward; + + + + [Header("Misc")] + public float HeadHeightDistance; + + [Header("Gizmos")] + public int ObjectForPointDistancesGizmo; + + SpawnableEnv _spawnableEnv; + MapAnim2Ragdoll _mocap; + GameObject _ragDoll; + InputController _inputController; + + internal RewardStats _mocapBodyStats; + internal RewardStats _ragDollBodyStats; + + // List _mocapBodyParts; + // List _ragDollBodyParts; + Transform _mocapHead; + Transform _ragDollHead; + + bool _hasLazyInitialized; + bool _reproduceDReCon; + + [Header("Things to check for rewards")] + public string headname = "head"; + + public string targetedRootName = "articulation:Hips"; + + + public void OnAgentInitialize(bool reproduceDReCon) + { + Assert.IsFalse(_hasLazyInitialized); + + _hasLazyInitialized = true; + _reproduceDReCon = reproduceDReCon; + + _spawnableEnv = GetComponentInParent(); + Assert.IsNotNull(_spawnableEnv); + + _mocap = _spawnableEnv.GetComponentInChildren(); + + _ragDoll = _spawnableEnv.GetComponentInChildren().gameObject; + Assert.IsNotNull(_mocap); + Assert.IsNotNull(_ragDoll); + _inputController = _spawnableEnv.GetComponentInChildren(); + // _mocapBodyParts = _mocap.GetComponentsInChildren().ToList(); + // _ragDollBodyParts = _ragDoll.GetComponentsInChildren().ToList(); + // Assert.AreEqual(_mocapBodyParts.Count, _ragDollBodyParts.Count); + _mocapHead = _mocap + .GetComponentsInChildren() + .First(x => x.name == headname); + _ragDollHead = _ragDoll + .GetComponentsInChildren() + .First(x => x.name == headname); + _mocapBodyStats = new GameObject("MocapDReConRewardStats").AddComponent(); + _mocapBodyStats.setRootName(targetedRootName); + _mocapBodyStats.setHeadName(headname); + + _mocapBodyStats.ObjectToTrack = _mocap; + + _mocapBodyStats.transform.SetParent(_spawnableEnv.transform); + _mocapBodyStats.OnAgentInitialize(_mocapBodyStats.ObjectToTrack.transform); + + _ragDollBodyStats = new GameObject("RagDollDReConRewardStats").AddComponent(); + _ragDollBodyStats.setRootName(targetedRootName); + _ragDollBodyStats.setHeadName(headname); + + + _ragDollBodyStats.ObjectToTrack = this; + _ragDollBodyStats.transform.SetParent(_spawnableEnv.transform); + _ragDollBodyStats.OnAgentInitialize(transform, _mocapBodyStats); + + _velHistoryTwoSteps = new float[][]{ + _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => x.magnitude-y.magnitude) + .ToArray(), + _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => x.magnitude-y.magnitude) + .ToArray() + }; + _velHistoryFourSteps = new float[][]{ + _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => x.magnitude-y.magnitude) + .ToArray(), + _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => x.magnitude-y.magnitude) + .ToArray(), + _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => x.magnitude-y.magnitude) + .ToArray(), + _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => x.magnitude-y.magnitude) + .ToArray() + }; + + _mocapBodyStats.AssertIsCompatible(_ragDollBodyStats); + } + + // Update is called once per frame + public void OnStep(float timeDelta) + { + _mocapBodyStats.SetStatusForStep(timeDelta); + _ragDollBodyStats.SetStatusForStep(timeDelta); + + if (_reproduceDReCon) + { + DReConRewards(timeDelta); + return; + } + + // deep sort scales + float num_points = _ragDollBodyStats.Points.Length; + float num_joints = num_points / 6f; + float pose_scale = 2.0f / 15f * num_joints; + float vel_scale = 0.1f / 15f * num_joints; + // note is 10 in code, but 40 in paper. + const float position_scale = 10f; // was end_eff_scale + // const float root_scale = 5f; + const float com_scale = 5f; + + // DeepMimic + // const float pose_w = 0.5f; + // const float vel_w = 0.05f; + // const float position_w = 0.15f; // was end_eff_w + // // const float root_w = 0.2f; + // const float com_w = 0.2f; // * 2 + // const float energy_w = 0.2f; + + // // UniCon + // const float pose_w = 0.4f; + // const float vel_w = 0.1f; + // const float position_w = 0.1f; + // // const float com_direction_w = 0.1f; + // const float com_direction_w = 0.2f; + // const float com_velocity_w = 0.1f; + // const float energy_w = 0.2f; + + // MarCon + const float pose_w = 0.2f; + const float position_w = 0.2f; + const float com_direction_w = 0.1f; + const float com_velocity_w = 0.3f; + const float energy_w = 0.2f; + + // position reward + List distances = _mocapBodyStats.GetPointDistancesFrom(_ragDollBodyStats); + List sqrDistances = distances.Select(x=> x*x).ToList(); + SumOfDistances = distances.Sum(); + SumOfSqrDistances = sqrDistances.Sum(); + var deepMimicScaledDistance = SumOfSqrDistances / (num_points / 4); + PositionReward = Mathf.Exp(-position_scale * (deepMimicScaledDistance)); + if (PositionReward == 0f) + { + PositionReward = 0f; + } + + // center of mass velocity reward + MocapCOMVelocity = _mocapBodyStats.CenterOfMassVelocity; + RagDollCOMVelocity = _ragDollBodyStats.CenterOfMassVelocity; + COMVelocityDifference = (MocapCOMVelocity-RagDollCOMVelocity).magnitude; + ComVelocityReward = Mathf.Pow(COMVelocityDifference,2); + ComVelocityReward = Mathf.Exp(-com_scale*ComVelocityReward); + + // points velocity + List velocityDistances = _mocapBodyStats.GetPointVelocityDistancesFrom(_ragDollBodyStats); + List sqrVelocityDistances = velocityDistances.Select(x=> x*x).ToList(); + PointsVelocityDifferenceSquared = sqrVelocityDistances.Sum(); + var deepMimicScaledVelocityDistanceSquared = PointsVelocityDifferenceSquared / (num_points / 4); + PointsVelocityReward = Mathf.Exp(-vel_scale * deepMimicScaledVelocityDistanceSquared); + + // local pose reward + if (RotationDifferences == null || RotationDifferences.Count < _mocapBodyStats.Rotations.Count) + RotationDifferences = Enumerable.Range(0,_mocapBodyStats.Rotations.Count) + .Select(x=>0f) + .ToList(); + SumOfRotationDifferences = 0f; + SumOfRotationSqrDifferences = 0f; + for (int i = 0; i < _mocapBodyStats.Rotations.Count; i++) + { + var angle = Quaternion.Angle(_mocapBodyStats.Rotations[i], _ragDollBodyStats.Rotations[i]); + Assert.IsTrue(angle <= 180f); + angle = DReConObservationStats.NormalizedAngle(angle); + angle = Mathf.Abs(angle); + angle = angle / Mathf.PI; + var sqrAngle = angle * angle; + RotationDifferences[i] = angle; + SumOfRotationDifferences += angle; + SumOfRotationSqrDifferences += sqrAngle; + } + LocalPoseReward = Mathf.Exp(-pose_scale * SumOfRotationSqrDifferences); + + // center of mass direction reward (from 0f to 1f) + ComDirectionDistance = Vector3.Dot( + _mocapBodyStats.transform.forward, + _ragDollBodyStats.transform.forward); + ComDirectionDistance = 1f-((ComDirectionDistance + 1f)/2f); + ComDirectionReward = ComDirectionDistance; + ComDirectionReward = Mathf.Exp(-com_scale*ComDirectionReward); + + // // COM velocity factor + // var comVelocityFactor = COMVelocityDifference; + // comVelocityFactor = comVelocityFactor / 2f; + // comVelocityFactor = 1.01f - comVelocityFactor; + // comVelocityFactor = Mathf.Clamp(comVelocityFactor, 0f, 1f); + + // Calc Velocity difference Error + VelDifferenceError = _ragDollBodyStats.PointVelocity + .Zip(_mocapBodyStats.PointVelocity, (x,y) => (x-y).magnitude) + .Average(); + VelDifferenceError = Mathf.Abs(VelDifferenceError); + VelDifferenceReward = Mathf.Exp(-10f * VelDifferenceError); + VelDifferenceReward = Mathf.Clamp(VelDifferenceReward, 0f, 1f); + // roll history + var oldestTwoSteps = _velHistoryTwoSteps[1]; + _velHistoryTwoSteps[1] = _velHistoryTwoSteps[0]; + _velHistoryTwoSteps[0] = oldestTwoSteps; + var oldestFourSteps = _velHistoryFourSteps[3]; + _velHistoryFourSteps[3] = _velHistoryFourSteps[2]; + _velHistoryFourSteps[2] = _velHistoryFourSteps[1]; + _velHistoryFourSteps[1] = _velHistoryFourSteps[0]; + _velHistoryFourSteps[0] = oldestFourSteps; + int velRows = _ragDollBodyStats.PointVelocity.Length; + for (int i = 0; i < velRows; i++) + { + var diff = _ragDollBodyStats.PointVelocity[i]-_mocapBodyStats.PointVelocity[i]; + var sqDiff = diff.magnitude*diff.magnitude; + var absDiff = Mathf.Abs(diff.magnitude); + oldestTwoSteps[i] = absDiff; + oldestFourSteps[i] = absDiff; + // oldestTwoSteps[i] = sqDiff; + // oldestFourSteps[i] = sqDiff; + } + VelAvDiffTwoStepsError = + _velHistoryTwoSteps[0].Sum() + + _velHistoryTwoSteps[1].Sum(); + VelAvDiffTwoStepsError /= velRows*2f; + VelAvDiffFourStepsError = + _velHistoryFourSteps[0].Sum() + + _velHistoryFourSteps[1].Sum() + + _velHistoryFourSteps[2].Sum() + + _velHistoryFourSteps[3].Sum(); + VelAvDiffFourStepsError /= velRows*4f; + VelDiffTwoStepsReward = Mathf.Exp(-10 * VelAvDiffTwoStepsError); + VelDiffFourStepsReward = Mathf.Exp(-10 * VelAvDiffFourStepsError); + + // calculate energy: + //we obviate the masses, we want this to be important all across + List es = _ragDollBodyStats.PointVelocity.Select(x => x.magnitude * x.magnitude).ToList(); + KineticEnergyMetric = es.Sum() / es.Count; + //a quick run suggests the input values range between 0 and 10, with most values near 0, so a simple way to get a reward value between 0 and 1 seems: + EnergyMinimReward = Mathf.Exp(-KineticEnergyMetric); + + + // misc + HeadHeightDistance = (_mocapHead.position.y - _ragDollHead.position.y); + HeadHeightDistance = Mathf.Abs(HeadHeightDistance); + + // reward + // SumOfSubRewards = ComPositionReward+ComVelocityReward+ComDirectionReward+PositionReward+LocalPoseReward+PointsVelocityReward+VelDifferenceReward; + SumOfSubRewards = ComVelocityReward+ComDirectionReward+PositionReward+LocalPoseReward+VelDifferenceReward; + Reward = 0f + + (ComVelocityReward * com_velocity_w) + // com_w) + + (ComDirectionReward * com_direction_w) + // com_w) + + (PositionReward * position_w) + + (LocalPoseReward * pose_w) + + // (PointsVelocityReward * vel_w) + + (VelDifferenceReward * energy_w); + + + // Reward = Reward + EnergyMinimReward; + + // var sqrtComVelocityReward = Mathf.Sqrt(ComVelocityReward); + // var sqrtComDirectionReward = Mathf.Sqrt(ComDirectionReward); + // Reward *= (sqrtComVelocityReward*sqrtComDirectionReward); + } + + void DReConRewards(float timeDelta) + { + // position reward + List distances = _mocapBodyStats.GetPointDistancesFrom(_ragDollBodyStats); + PositionReward = -7.37f / (distances.Count / 6f); + List sqrDistances = distances.Select(x => x * x).ToList(); + SumOfDistances = distances.Sum(); + SumOfSqrDistances = sqrDistances.Sum(); + PositionReward *= SumOfSqrDistances; + PositionReward = Mathf.Exp(PositionReward); + + // center of mass velocity reward + MocapCOMVelocity = _mocapBodyStats.CenterOfMassVelocity; + RagDollCOMVelocity = _ragDollBodyStats.CenterOfMassVelocity; + COMVelocityDifference = (MocapCOMVelocity - RagDollCOMVelocity).magnitude; + ComReward = -Mathf.Pow(COMVelocityDifference, 2); + ComReward = Mathf.Exp(ComReward); + + // points velocity + List velocityDistances = _mocapBodyStats.GetPointVelocityDistancesFrom(_ragDollBodyStats); + List sqrVelocityDistances = velocityDistances.Select(x => x * x).ToList(); + PointsVelocityDifferenceSquared = sqrVelocityDistances.Sum(); + PointsVelocityReward = (-1f / _mocapBodyStats.PointVelocity.Length) * PointsVelocityDifferenceSquared; + PointsVelocityReward = Mathf.Exp(PointsVelocityReward); + + // local pose reward + if (RotationDifferences == null || RotationDifferences.Count < _mocapBodyStats.Rotations.Count) + RotationDifferences = Enumerable.Range(0, _mocapBodyStats.Rotations.Count) + .Select(x => 0f) + .ToList(); + SumOfRotationDifferences = 0f; + SumOfRotationSqrDifferences = 0f; + for (int i = 0; i < _mocapBodyStats.Rotations.Count; i++) + { + var angle = Quaternion.Angle(_mocapBodyStats.Rotations[i], _ragDollBodyStats.Rotations[i]); + Assert.IsTrue(angle <= 180f); + angle = ObservationStats.NormalizedAngle(angle); + var sqrAngle = angle * angle; + RotationDifferences[i] = angle; + SumOfRotationDifferences += angle; + SumOfRotationSqrDifferences += sqrAngle; + } + LocalPoseReward = -6.5f / RotationDifferences.Count; + LocalPoseReward *= SumOfRotationSqrDifferences; + LocalPoseReward = Mathf.Exp(LocalPoseReward); + + // distance factor + ComDistance = (_mocapBodyStats.LastCenterOfMassInWorldSpace - _ragDollBodyStats.LastCenterOfMassInWorldSpace).magnitude; + HeadHeightDistance = (_mocapHead.position.y - _ragDollHead.position.y); + HeadHeightDistance = Mathf.Abs(HeadHeightDistance); + var headDistance = (_mocapBodyStats.HeadPositionInWorldSpace - _ragDollBodyStats.HeadPositionInWorldSpace).magnitude; + DistanceFactor = Mathf.Pow(headDistance, 2); + DistanceFactor = 1.4f * DistanceFactor; + DistanceFactor = 1.3f - DistanceFactor; + DistanceFactor = Mathf.Clamp(DistanceFactor, 0f, 1f); + + // // direction factor + // Vector3 desiredDirection = _inputController.HorizontalDirection; + // var curDirection = _ragDollBodyStats.transform.forward; + // // cosAngle + // var directionDifference = Vector3.Dot(desiredDirection, curDirection); + // DirectionDistance = (1f + directionDifference) /2f; // normalize the error + // DirectionFactor = Mathf.Pow(DirectionDistance,2); + // DirectionFactor = Mathf.Clamp(DirectionFactor, 0f, 1f); + + // misc + + // reward + SumOfSubRewards = PositionReward + ComReward + PointsVelocityReward + LocalPoseReward; + Reward = DistanceFactor * SumOfSubRewards; + // Reward = (DirectionFactor*SumOfSubRewards) * DistanceFactor; + } + public void OnReset() + { + Assert.IsTrue(_hasLazyInitialized); + + _mocapBodyStats.OnReset(); + _ragDollBodyStats.OnReset(); + } + void OnDrawGizmos() + { + if (_ragDollBodyStats == null) + return; + var max = (_ragDollBodyStats.Points.Length / 6) - 1; + ObjectForPointDistancesGizmo = Mathf.Clamp(ObjectForPointDistancesGizmo, -1, max); + // _mocapBodyStats.DrawPointDistancesFrom(_ragDollBodyStats, ObjectForPointDistancesGizmo); + _ragDollBodyStats.DrawPointDistancesFrom(_mocapBodyStats, ObjectForPointDistancesGizmo); + } +} diff --git a/Assets/MarathonController/Scripts/Rewards2Learn.cs.meta b/Assets/MarathonController/Scripts/Rewards2Learn.cs.meta new file mode 100644 index 0000000..0f7fabd --- /dev/null +++ b/Assets/MarathonController/Scripts/Rewards2Learn.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30315637017c648e4966045b4e088c22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs b/Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs new file mode 100644 index 0000000..231890d --- /dev/null +++ b/Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs @@ -0,0 +1,960 @@ +using System.Collections; +using System.Collections.Generic; +//using System; + +using UnityEngine; + + +using Unity.MLAgents.Policies; +using Unity.MLAgents; +using System.Linq; +using Unity.Barracuda; +using System.ComponentModel; + +public class TrainingEnvironmentGenerator : MonoBehaviour +{ + + + + [Header("The animated character:")] + + + [SerializeField] + Animator characterReference; + + [SerializeField] + Transform characterReferenceHead; + + [SerializeField] + Transform characterReferenceRoot; + + [Tooltip("do not include the root nor the neck")] + [SerializeField] + Transform[] characterSpine; + + + [Tooltip("fingers will be excluded from physics-learning")] + [SerializeField] + Transform[] characterReferenceHands; + + //we assume here is the end-effector, but feet have an articulaiton (sensors will be placed on these and their immediate parents) + //strategy to be checked: if for a quadruped we add the 4 feet here, does it work? + [Tooltip("same as above but not taking into account fingers. Put the last joint")] + [SerializeField] + Transform[] characterReferenceFeet; + + + [Header("How we want the generated assets stored:")] + + [SerializeField] + string AgentName; + + [SerializeField] + string TrainingEnvName; + + + + [Header("Configuration options:")] + [SerializeField] + string LearningConfigName; + + [Range(0, 359)] + public int MinROMNeededForJoint = 0; + + + [Tooltip("body mass in grams/ml")] + [SerializeField] + float massdensity = 1.01f; + + + + [SerializeField] + string trainingLayerName = "marathon"; + + //[SerializeField] + //ROMparserSwingTwist ROMparser; + + [SerializeField] + public RangeOfMotionValues info2store; + + + [Header("Prefabs to generate training environment:")] + [SerializeField] + ManyWorlds.SpawnableEnv referenceSpawnableEnvironment; + + [SerializeField] + Material trainerMaterial; + + [SerializeField] + PhysicMaterial colliderMaterial; + + + + //things generated procedurally that we store to configure after the generation of the environment: + [HideInInspector] + [SerializeField] + Animator character4training; + + [HideInInspector] + [SerializeField] + Animator character4synthesis; + + [HideInInspector][SerializeField] + ManyWorlds.SpawnableEnv _outcome; + + + + + + [HideInInspector] + [SerializeField] + List articulatedJoints; + + [HideInInspector] + [SerializeField] + Muscles muscleteam; + + public ManyWorlds.SpawnableEnv Outcome{ get { return _outcome; } } + + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + + public void GenerateTrainingEnv() { + + character4training = Instantiate(characterReference.gameObject).GetComponent(); + character4training.gameObject.SetActive(true); + + //we assume there is an animated controller + // + // + //possibly, we will need to add controllers): + + + + if (character4training.GetComponent() == null) + character4training.gameObject.AddComponent(); + + + + MapAnim2Ragdoll mca =character4training.gameObject.AddComponent(); + //mca.IsGeneratedProcedurally = true; + + character4training.gameObject.AddComponent(); + character4training.name = "Source:" + AgentName; + + SkinnedMeshRenderer[] renderers = character4training.GetComponentsInChildren(); + foreach (SkinnedMeshRenderer r in renderers) { + + Material[] mats = r.sharedMaterials; + for (int i =0; i < mats.Length; i++) { + mats[i] = trainerMaterial; + } + r.sharedMaterials = mats; + } + + + + + + character4synthesis = Instantiate(characterReference.gameObject).GetComponent(); + character4synthesis.gameObject.SetActive(true); + + character4synthesis.name = "Result:" + AgentName ; + + + //we remove everything except the transform + UnityEngine.Component[] list = character4synthesis.GetComponents(typeof(UnityEngine.Component)); + foreach (UnityEngine.Component c in list) + { + + if (c is Transform || c is Animator || c is CharacterController) + { + } + else + { + DestroyImmediate(c); + + } + + } + + character4synthesis.GetComponent().runtimeAnimatorController = null; + + + + + MapRagdoll2Anim rca = character4synthesis.gameObject.AddComponent(); + + + _outcome = Instantiate(referenceSpawnableEnvironment).GetComponent(); + _outcome.name = TrainingEnvName; + + + ProcRagdollAgent ragdollMarathon = generateRagDollFromAnimatedSource(rca, _outcome); + + + Transform[] ts= ragdollMarathon.transform.GetComponentsInChildren(); + foreach (Transform t in ts) { + t.gameObject.layer = LayerMask.NameToLayer(trainingLayerName); + } + + + + + + + + addTrainingParameters(rca, ragdollMarathon); + + + //UNITY BUG + //This below seems to make it crash. My guess is that: + /* + ArticulationBody is a normal component, but it also does some odd thing: it affects the physical simluation, since it is a rigidBody plus an articulatedJoint. The way it is defined is that it has the properties of a rigidBody, but it ALSO uses the hierarchy of transforms to define a chain of articulationJoints, with their rotation constraints, etc. Most notably, the ArticulationBody that is highest in the root gets assigned a property automatically, "isRoot", which means it's physics constraints are different.My guess is that when you change the hierarchy in the editor, at some point in the future the chain of ArticulationBody recalculates who is the root, and changes its properties. However since this relates to physics, it is not done in the same thread. +If the script doing this is short, it works because this is finished before the update of the ArticulationBody chain is triggered. But when I add more functionality, the script lasts longer, and then it crashes. This is why I kept getting those Physx errors, and why it kept happening in a not-so-reliable way, because we do not have any way to know when this recalculation is done.The fact that ArticulationBody is a fairly recent addition to Unity also makes me suspect they did not debug it properly.The solution seems to be to do all the setup while having the game objects that have articulationBody components with no hierarchy changes, and also having the rootgameobject inactive. When I do this, I am guessing it does not trigger the update of the ArticulationBody chain. + + I seem to have a reliable crash: + + 1.if I use ragdollroot.gameObject.SetActive(true) at the end of my configuration script, it crashes. + 2.if I comment that line, it does not. + 3.if I set it to active manually, through the editor, after running the script with that line commented, it works. + + */ + //ragdoll4training.gameObject.SetActive(true); + + + _outcome.GetComponent().ragdollcontroller = ragdollMarathon.gameObject; + + + character4training.transform.SetParent(_outcome.transform); + _outcome.GetComponent().movementsource = character4training.gameObject; + + character4synthesis.transform.SetParent(_outcome.transform); + + + //ragdoll4training.gameObject.SetActive(true); + + + + + } + + + /* + public void activateRagdoll() { + + RagDollAgent ragdoll4training = _outcome.GetComponentInChildren(true); + if(ragdoll4training!=null) + ragdoll4training.gameObject.SetActive(true); + + + } + */ + + +ProcRagdollAgent generateRagDollFromAnimatedSource( MapRagdoll2Anim target, ManyWorlds.SpawnableEnv trainingenv) { + + + GameObject temp = GameObject.Instantiate(target.gameObject); + + + //1. we remove everything we do not need: + + //1.1 we remove meshes + SkinnedMeshRenderer[] renderers = temp.GetComponentsInChildren(); + foreach (SkinnedMeshRenderer rend in renderers) + { + + if(rend.gameObject != null) + DestroyImmediate(rend.gameObject); + + } + + + //1.2 we remove everything except the transforms + UnityEngine.Component[] list = temp.GetComponents(typeof(UnityEngine.Component)); + foreach (UnityEngine.Component c in list) { + + if (c is Transform) + { + } + else { + DestroyImmediate(c); + + } + + } + + //1.3 we also remove any renderers from the ragdoll + var meshNamesToDelete = temp.GetComponentsInChildren() + .Select(x=>x.name) + .ToArray(); + foreach (var name in meshNamesToDelete) + { + var toDel = temp.GetComponentsInChildren().First(x=>x.name == name); + toDel.transform.parent = null; + GameObject.DestroyImmediate(toDel.gameObject); + } + + + temp.name = "Ragdoll:" + AgentName ; + muscleteam= temp.AddComponent(); + temp.transform.position = target.transform.position; + temp.transform.rotation = target.transform.rotation; + + + //1.4 we drop the sons of the limbs (to avoid including fingers in the following procedural steps) + + Transform[] pack = temp.GetComponentsInChildren(); + Transform root = pack.First(x => x.name == characterReferenceRoot.name); + Transform[] joints = root.transform.GetComponentsInChildren(); + List childstodelete = new List(); + + foreach (Transform t in characterReferenceHands) { + string limbname = t.name;// + "(Clone)"; + //Debug.Log("checking sons of: " + limbname); + Transform limb = joints.First(x => x.name == limbname); + + Transform[] sons = limb.GetComponentsInChildren(); + foreach (Transform t2 in sons) + { + if(t2.name != limb.name) + childstodelete.Add(t2); + + } + } + + Transform headJoint = joints.First(x => x.name == characterReferenceHead.name); + //if there are eyes or head top, we also remove them + foreach (Transform child in headJoint) + { + childstodelete.Add(child); + + } + + + + + + + + List listofjoints = new List(joints); + foreach (Transform t2 in childstodelete) + { + listofjoints.Remove(t2); + t2.DetachChildren();//otherwise, it tries to destroy the children later, and fails. + DestroyImmediate(t2.gameObject); + } + + + + //2. We add articulationBody and Collider components + + //2.1 for each remaining joint we add an articulationBody and a collider for each bone + joints = listofjoints.ToArray(); + articulatedJoints = new List(); + + List colliders = new List(); + + List hos = new List(); + + foreach (Transform j in joints) { + + + ArticulationBody ab = j.gameObject.AddComponent(); + ab.anchorRotation = Quaternion.identity; + ab.mass = 0.1f; + ab.jointType = ArticulationJointType.FixedJoint; + articulatedJoints.Add(ab); + + string namebase = j.name.Replace("(Clone)", "");//probably not needed + + j.name = "articulation:" + namebase; + + GameObject go = new GameObject(); + go.transform.position = j.gameObject.transform.position; + go.transform.parent = j.gameObject.transform; + go.name = "collider:" + namebase; + CapsuleCollider c = go.AddComponent(); + c.material = colliderMaterial; + c.height = .06f; + c.radius = c.height; + colliders.Add(c); + + + HandleOverlap ho= go.AddComponent(); + hos.Add(ho); + + go.AddComponent(); + + } + + + //2.1bis we also handle the Parents in HandleOverlap: + foreach (HandleOverlap ho in hos) { + + + + //the dad is the articulationBody, the grandDad is the articulationBody's parent + string nameDadRef = ho.transform.parent.parent.name; + + if (nameDadRef == null) { + //Debug.Log("my name is: " + ho.name + "and I have no granddad"); + continue; + } + + + string nameColliderDadRef = "collider:" + nameDadRef.Replace("articulation:", ""); + + + + Collider colliderDad = colliders.FirstOrDefault(c => c.name.Equals(nameColliderDadRef)); + if (colliderDad == null) + { + //Debug.Log("my name is: " + ho.name + " and I have no collider Dad named " + nameColliderDadRef); + //this should happen only with the hips collider, because the granddad is not part of the articulationBody hierarchy + continue; + + } + + ho.Parent = colliderDad.gameObject; + //Debug.Log("set up " + ho.name + " with dad: " + colliderDad.name); + + } + + + + + //CAUTION! it is important to deactivate the hierarchy BEFORE we add ArticulationBody members, + // Doing it afterwards, and having it active, makes the entire thing crash + temp.transform.parent = trainingenv.transform; + temp.gameObject.SetActive(false); + + + //2.2 we configure the colliders, in general + + // List colliderNamesToDelete = new List(); + foreach (CapsuleCollider c in colliders) + { + string namebase = c.name.Replace("collider:", ""); + Transform j = joints.First(x=>x.name=="articulation:" + namebase); + // if not ArticulationBody, skip + var articulatedDad = j.GetComponent(); + if (articulatedDad == null) + continue; + + + //this works when childCount = 1 + j = joints.FirstOrDefault(x=>x.transform.parent.name=="articulation:" + namebase); + if (j==null) //these are the end points: feets and hands and head + + { + if (namebase == characterReferenceHead.name) + { + //neck displacement, relative to spine2: + Vector3 displacement = c.transform.parent.position - c.transform.parent.parent.position; + c.transform.position += displacement; + c.radius = 2 * c.radius; + + } + + //Debug.Log("no joint found associated with: " + "articulation:" + namebase); + // mark to delete as is an end point + //colliderNamesToDelete.Add(c.name); + continue; + } + + ArticulationBody ab = j.GetComponent(); + if (ab == null || ab.transform == joints[0]) + continue; + Vector3 dadPosition = articulatedDad.transform.position; + + Vector3 sonPosition = j.transform.position; + + if (articulatedDad.transform.childCount > 2) //2 is the next AB plus the collider + { + sonPosition = Vector3.zero; + int i = 0; + foreach (ArticulationBody tmp in articulatedDad.GetComponentsInChildren()) { + sonPosition += tmp.transform.position; + i++; + } + sonPosition /= i; + } + + + + + //ugly but it seems to work. + Vector3 direction = (dadPosition - sonPosition).normalized; + float[] directionarray = new float[3] { Mathf.Abs(direction.x), Mathf.Abs(direction.y), Mathf.Abs(direction.z) }; + float maxdir = Mathf.Max(directionarray); + List directionlist = new List(directionarray); + c.direction = directionlist.IndexOf(maxdir); + + if(namebase != characterReferenceRoot.name) + c.center = (sonPosition - dadPosition) / 2.0f; + + //to calculate the weight + c.height = Vector3.Distance(dadPosition, sonPosition); + c.radius = c.height / 7; + ab = c.transform.parent.GetComponent(); + ab.mass = massdensity * Mathf.PI * c.radius *c.radius *c.height * Mathf.Pow(10,3); //we are aproximating as a cylinder, assuming it wants it in kg + + + + + + } + // we do not delete end colliders as seams to delete feet + // foreach (var name in colliderNamesToDelete) + // { + // var toDel = colliders.First(x=>x.name == name); + // colliders.Remove(toDel); + // GameObject.DestroyImmediate(toDel); + // } + + + //2.3 we add a special treatment for the elements in the spine to have larger colliders: + + + //we estimate the width of the character: + float bodyWidth = 0; + + foreach (Transform spineJoint in characterSpine) { + + int childCount = spineJoint.childCount; + + + if (childCount > 1)//so, shoulders plus neck + { + int testIndex = 0; + + Vector2 range = Vector2.zero; + foreach (Transform child in spineJoint) + { + + if (child.localPosition.x < range[0]) + range[0] = child.localPosition.x; + if (child.localPosition.x > range[1]) + range[1] = child.localPosition.x; + + testIndex++; + } + + bodyWidth = 2.5f * (range[1] - range[0]); + + Debug.Log("spineJoint " + spineJoint.name + "has " + childCount + "childs and iterates" + testIndex + "which gives a body width estimated at: " + bodyWidth); + + //TODO: remove colliders in shoulders. + + } + + + } + + + //we put the right orientation and size: + foreach (CapsuleCollider c in colliders) + { + + string namebase = c.name.Replace("collider:", ""); + + Transform spineJoint = characterSpine.FirstOrDefault(x => x.name == namebase); + if (spineJoint == null) { + if (namebase == characterReferenceRoot.name)//we check if it is the root + spineJoint = characterReferenceRoot; + else + continue; + + } + + Transform j = joints.First(x => x.name == "articulation:" + namebase); + // if not ArticulationBody, skip + var aDad = j.GetComponent(); + Vector3 dadPosition = aDad.transform.position; + + + + //we put it horizontal + c.direction = 0;// direction.x; + + + float wide = c.height;//the height was previously calculated as a distance between successors + c.radius = wide / 2; + + + //c.height = 2 * wide; + c.height = bodyWidth; + + + + + aDad.mass = massdensity * Mathf.PI * c.radius * c.radius * c.height * Mathf.Pow(10, 3); //we are aproximating as a cylinder, assuming it wants it in kg + + + } + + + + //we remove colliders from the shoulders, since they interfer with the collision structure + foreach (Transform spineJoint in characterSpine) + { + + int childCount = spineJoint.childCount; + + + if (childCount > 1)//so, shoulders plus neck + { + + foreach (Transform child in spineJoint) + { + + //a.we find the corresponding collider + + string nameRef = child.name; + + + string nameColliderRef = "collider:" + nameRef; + + Collider C2delete = colliders.FirstOrDefault(x => x.name.Equals(nameColliderRef)); + + + //b.we find the collider corresponding to its child, update the Parent chain to skip the reference cllider + Transform t = child.GetChild(0); + Collider Cson = colliders.FirstOrDefault(x => x.name.Equals("collider:" + t.name)); + + Cson.GetComponent().Parent = C2delete.GetComponent().Parent; + + //c.we destruct the corresponding collider + colliders.Remove(C2delete); + DestroyImmediate(C2delete.gameObject); + + } + + } + + + } + + + + + + + + + + //2.4 we add sensors in feet to detect collisions + addSensorsInFeet(root); + + //since we replaced 2 capsulecollider by two box collideR: + colliders = new List(root.GetComponentsInChildren()); + + + + //2.5 we make sure the key elements are added in the observations: + + + foreach (Collider c in colliders) + { + + string namebase = c.name.Replace("collider:", ""); + + List stuff2observe = new List(characterReferenceHands); + stuff2observe.AddRange(characterReferenceFeet); + stuff2observe.Add(characterReferenceHead); + stuff2observe.Add(characterReferenceRoot); + Transform observationJoint = stuff2observe.FirstOrDefault(x => x.name == namebase); + if (observationJoint == null) + { + continue; + + } + + IgnoreColliderForObservation ig = c.GetComponent(); + if (ig != null) + DestroyImmediate(ig); + + } + + + + //I add reference to the ragdoll, the articulationBodyRoot: + target.ArticulationBodyRoot = root.GetComponent(); + + foreach (var articulationBody in root.GetComponentsInChildren()) + { + var overlap = articulationBody.gameObject.AddComponent(); + overlap.Parent = target.ArticulationBodyRoot.gameObject; + } + + + + + //at this stage, every single articulatedBody is root. Check it out with the script below + /* + foreach (Transform j in joints) + { + ArticulationBody ab = j.transform.GetComponent(); + if (ab.isRoot) + { + Debug.Log(ab.name + "is root "); + } + } + */ + + + + + ProcRagdollAgent _ragdoll4training = temp.AddComponent(); + // _ragdoll4training.transform.parent = trainingenv.transform; + //_ragdoll4training.transform.SetParent(trainingenv.transform); + + _ragdoll4training.CameraTarget = root; + + + // add the muscles. WE DID EARLIER + //generateMuscles(); + + + // center the articulationBody masses: + + muscleteam.CenterABMasses(); + + // choose the motor update mode + //muscleteam.MotorUpdateMode = Muscles.MotorMode.PDopenloop; + muscleteam.MotorUpdateMode = Muscles.MotorMode.PD; + + + return _ragdoll4training; + + } + + + void addSensorsInFeet(Transform root) { + + //I add the sensors in the feet: + Transform[] pack2 = root.GetComponentsInChildren(); + foreach (Transform t in characterReferenceFeet) + { + + Transform footDadRef = t.parent; + Transform footDad = pack2.First(x => x.name == "articulation:" + footDadRef.name); + Collider[] footColliders = footDad.GetComponentsInChildren(); + + + Transform foot = pack2.First(x => x.name == "articulation:" + t.name); + + // the sensor is based on the collider + //Collider[] footColliders = foot.GetComponentsInChildren(); + Collider footCollider = footColliders.First(x => x.name.Contains(t.name)); + + BoxCollider myBox = footCollider.gameObject.AddComponent(); + myBox.size = new Vector3(0.08f, 0.03f, 0.08f);//these is totally adjusted by hand + + + myBox.name = footCollider.name; + DestroyImmediate(footCollider); + + + addSensor2FootCollider(myBox); + + //we update the list: + footColliders = footDad.GetComponentsInChildren(); + + //we also add it to its father: + Collider footColliderDad = footColliders.First(x => x.name.Contains(footDadRef.name)); + + BoxCollider myBoxDad = footColliderDad.gameObject.AddComponent(); + myBoxDad.size = new Vector3(0.08f, 0.05f, 0.15f);//these is totally adjusted by hand + + + myBoxDad.transform.position = new Vector3(myBoxDad.transform.position.x, myBox.transform.position.y, myBoxDad.transform.position.z); + + myBoxDad.name = footColliderDad.name; + DestroyImmediate(footColliderDad); + + + addSensor2FootCollider(myBoxDad); + + + + } + } + + + void addSensor2FootCollider(Collider footCollider) { + + GameObject sensorGameObject = GameObject.Instantiate(footCollider.gameObject); + + sensorGameObject.name = sensorGameObject.name.Replace("(Clone)", ""); + sensorGameObject.name += "_sensor"; + Collider sensor = sensorGameObject.GetComponent(); + sensor.isTrigger = true; + // sensorGameObject.AddComponent(); + sensorGameObject.AddComponent(); + sensorGameObject.transform.parent = footCollider.transform.parent; + sensorGameObject.transform.position = footCollider.transform.position; + sensorGameObject.transform.rotation = footCollider.transform.rotation; + + + } + + + //it needs to go after adding ragdollAgent or it automatically ads an Agent, which generates conflict + void addTrainingParameters(MapRagdoll2Anim target, ProcRagdollAgent temp) { + + + + BehaviorParameters bp = temp.gameObject.GetComponent(); + + bp.BehaviorName = LearningConfigName; + + + + DecisionRequester dr =temp.gameObject.AddComponent(); + dr.DecisionPeriod = 2; + dr.TakeActionsBetweenDecisions = true; + + + + Rewards2Learn dcrew = temp.gameObject.AddComponent(); + dcrew.headname = "articulation:" + characterReferenceHead.name; + dcrew.targetedRootName = "articulation:" + characterReferenceRoot.name; //it should be it's son, but let's see + + + + temp.MaxStep = 2000; + temp.FixedDeltaTime = 0.0125f; + temp.RequestCamera = true; + + + temp.gameObject.AddComponent(); + Observations2Learn dcobs = temp.gameObject.AddComponent(); + dcobs.targetedRootName = characterReferenceRoot.name; // target.ArticulationBodyRoot.name; + + dcobs.targetedRootName = "articulation:" + characterReferenceRoot.name; //it should be it's son, but let's see + + MapRangeOfMotion2Constraints rom = temp.gameObject.AddComponent(); + + //used when we do not parse + rom.info2store = info2store; + + + } + + + + + + + public void GenerateRangeOfMotionParser() { + + + ROMparserSwingTwist rom = gameObject.GetComponentInChildren(); + if (rom == null) { + GameObject go = new GameObject(); + go.name = "ROM-parser"; + go.transform.parent = gameObject.transform; + rom = go.AddComponent(); + + + + } + + + rom.info2store = info2store; + rom.theAnimator = characterReference; + rom.skeletonRoot = characterReferenceRoot; + + rom.targetRagdollRoot = character4synthesis.GetComponent().ArticulationBodyRoot; + + rom.trainingEnv = _outcome; + + } + + void generateMuscles() { + + //muscles + + foreach(ArticulationBody ab in articulatedJoints) { + + Muscles.MusclePower muscle = new Muscles.MusclePower(); + muscle.PowerVector = new Vector3(40, 40, 40); + + + muscle.Muscle = ab.name; + + if (muscleteam.MusclePowers == null) + muscleteam.MusclePowers = new List(); + + muscleteam.MusclePowers.Add(muscle); + + } + + + + + } + + + + + + + public void Prepare4RangeOfMotionParsing() + { + _outcome.gameObject.SetActive(false); + characterReference.gameObject.SetActive(true); + + } + + + public void Prepare4EnvironmentStorage() + { + + characterReference.gameObject.SetActive(false); + + _outcome.gameObject.SetActive(true); + + // RagDollAgent ra = _outcome.GetComponentInChildren(true); + // ra.gameObject.SetActive(true); + + + + + + } + + public void ApplyROMasConstraintsAndConfigure() { + + MapRangeOfMotion2Constraints ROMonRagdoll = Outcome.GetComponentInChildren(true); + //ROMonRagdoll.MinROMNeededForJoint = MinROMNeededForJoint; + + if (ROMonRagdoll.info2store == null) { + ROMonRagdoll.info2store = this.info2store; + + } + + ROMonRagdoll.ConfigureTrainingForRagdoll(MinROMNeededForJoint); + + + generateMuscles(); + + ROMonRagdoll.GetComponent().DecisionPeriod = 2; + + ROMonRagdoll.gameObject.SetActive(true); + } +} diff --git a/Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs.meta b/Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs.meta new file mode 100644 index 0000000..d372f81 --- /dev/null +++ b/Assets/MarathonController/Scripts/TrainingEnvironmentGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1898a29c838a8f445af23e017c73e97a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonController/Scripts/Utils.cs b/Assets/MarathonController/Scripts/Utils.cs new file mode 100644 index 0000000..15ad659 --- /dev/null +++ b/Assets/MarathonController/Scripts/Utils.cs @@ -0,0 +1,132 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public static class Utils +{ + + + + // Find angular velocity. The delta rotation is converted to radians within [-pi, +pi]. + // Vector3 OldGetAngularVelocity(Quaternion from, Quaternion to, float timeDelta) + // { + // var rotationVelocity = FromToRotation(from, to); + // var angularVelocityInDeg = NormalizedEulerAngles(rotationVelocity.eulerAngles) / timeDelta; + // var angularVelocity = angularVelocityInDeg * Mathf.Deg2Rad; + // return angularVelocity; + // } + + + public static Vector3 GetAngularVelocity(Quaternion from, Quaternion to, float timeDelta = 1f) + { + Vector3 fromInDeg = Utils.GetSwingTwist(from); + Vector3 toInDeg = Utils.GetSwingTwist(to); + + return AngularVelocityInReducedCoordinates(fromInDeg, toInDeg, timeDelta); + } + + + //you can also use this to calculate acceleration, right? + public static Vector3 AngularVelocityInReducedCoordinates(Vector3 fromIn, Vector3 toIn, float timeDelta = 1f) + { + Vector3 diff = (fromIn - toIn)*Mathf.Deg2Rad; + Vector3 angularVelocity = diff / timeDelta; + return angularVelocity; + } + + + + public static Vector3 GetSwingTwist(Quaternion localRotation) + { + + + Quaternion a = new Quaternion(); + Quaternion b = new Quaternion(); + + + return GetSwingTwist(localRotation, out a, out b); + + } + + + + + + + public static Vector3 GetSwingTwist(Quaternion localRotation, out Quaternion swing, out Quaternion twist) + { + + //the decomposition in swing-twist, typically works like this: + + swing = new Quaternion(0.0f, localRotation.y, localRotation.z, localRotation.w); + swing = swing.normalized; + + //Twist: assuming q_localRotation = q_swing * q_twist + + twist = Quaternion.Inverse(swing) * localRotation; + + + //double check: + Quaternion temp = swing * twist; + + bool isTheSame = (Mathf.Abs(Quaternion.Angle(temp, localRotation)) < 0.001f); + + + if (!isTheSame) + Debug.LogError("I have: " + temp + "which does not match: " + localRotation + "because their angle is: " + Quaternion.Angle(temp, localRotation)); + + + Vector3 InReducedCoord = new Vector3(twist.eulerAngles.x, swing.eulerAngles.y, swing.eulerAngles.z); //this is consistent with how the values are stored in ArticulationBody: + + + //we make sure we keep the values nearest to 0 (with a modulus) + if (Mathf.Abs(InReducedCoord.x - 360) < Mathf.Abs(InReducedCoord.x)) + InReducedCoord.x = (InReducedCoord.x - 360); + if (Mathf.Abs(InReducedCoord.y - 360) < Mathf.Abs(InReducedCoord.y)) + InReducedCoord.y = (InReducedCoord.y - 360); + if (Mathf.Abs(InReducedCoord.z - 360) < Mathf.Abs(InReducedCoord.z)) + InReducedCoord.z = (InReducedCoord.z - 360); + + return InReducedCoord; + + + + } + + + public static ArticulationReducedSpace GetReducedSpaceFromTargetVector3(Vector3 target) { + + ArticulationReducedSpace ars = new ArticulationReducedSpace(); + ars.dofCount = 3; + ars[0] = target.x; + ars[1] = target.y; + ars[2] = target.z; + + return ars; + + } + + + public static Vector3 GetArticulationReducedSpaceInVector3(ArticulationReducedSpace ars) + { + Vector3 result = Vector3.zero;// new Vector3(); + + if (ars.dofCount > 0) + result.x = ars[0]; + if (ars.dofCount > 1) + result.y = ars[1]; + if (ars.dofCount > 2) + result.z = ars[2]; + + return result; + } + // Return rotation from one rotation to another + public static Quaternion FromToRotation(Quaternion from, Quaternion to) + { + if (to == from) return Quaternion.identity; + + return to * Quaternion.Inverse(from); + } + + +} diff --git a/Assets/MarathonController/Scripts/Utils.cs.meta b/Assets/MarathonController/Scripts/Utils.cs.meta new file mode 100644 index 0000000..4bc516b --- /dev/null +++ b/Assets/MarathonController/Scripts/Utils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b67d65de35f2748819254ca104721cac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs.meta b/Assets/MarathonEnvs.meta new file mode 100644 index 0000000..159fc64 --- /dev/null +++ b/Assets/MarathonEnvs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44d80858b3698f643b3645028b1d9f6b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents.meta b/Assets/MarathonEnvs/Agents.meta new file mode 100644 index 0000000..6759b52 --- /dev/null +++ b/Assets/MarathonEnvs/Agents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73fe48d040d7678408c5ec479120ef9f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters.meta b/Assets/MarathonEnvs/Agents/Characters.meta new file mode 100644 index 0000000..7b2ba47 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: adefb1536f25634478a6f7b9819d02de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004.meta new file mode 100644 index 0000000..fb041d3 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6709a25fd276d6a42885e29ad59a2183 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab new file mode 100644 index 0000000..536696c --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab @@ -0,0 +1,2520 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &161227863359003662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8600940905037178393} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8600940905037178393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161227863359003662} + serializedVersion: 2 + m_LocalRotation: {x: -0.036095407, y: 0.034940347, z: -0.21942091, w: 0.9743361} + m_LocalPosition: {x: 0.029509215, y: -0.000000003113245, z: -0.0000000030340255} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 454720939049401084} + m_Father: {fileID: 4188289388191304861} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &212026845543190845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218731300768487097} + m_Layer: 3 + m_Name: mixamorig:RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1218731300768487097 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212026845543190845} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.2784152, y: -0.00000033079218, z: 0.000000116763104} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2675050577185743141} + m_Father: {fileID: 3192857308659796769} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &247433028873884665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 723381811665153623} + m_Layer: 3 + m_Name: mixamorig:LeftEye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &723381811665153623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247433028873884665} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.030675607, y: 0.06409507, z: 0.09283554} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6858170280566243505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &306696037656357132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6877447306015196480} + m_Layer: 3 + m_Name: mixamorig:RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6877447306015196480 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 306696037656357132} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000009644582, y: -0.4442773, z: -0.02983789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 761318265474940137} + m_Father: {fileID: 9192183071538891233} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &380778450955083824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2209666220319531871} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2209666220319531871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380778450955083824} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000063313275, y: 0.01609932, z: -0.13261928, w: 0.9910363} + m_LocalPosition: {x: 0.028830625, y: -0.00000049601215, z: 0.00000040448975} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1669420649433881162} + m_Father: {fileID: 8081789266139957499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &392232339659560021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3686799810742117958} + - component: {fileID: 6746435283200658236} + - component: {fileID: 8009678217738464586} + - component: {fileID: 8490727564501632366} + m_Layer: 3 + m_Name: AgentMove-outcome + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3686799810742117958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4828823746749587089} + - {fileID: 421823017497324388} + - {fileID: 3805812208281142464} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &6746435283200658236 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Enabled: 1 + m_Avatar: {fileID: 9000000, guid: 322dd9329a42ba34b9b08e13d7098017, type: 3} + m_Controller: {fileID: 0} + m_CullingMode: 1 + m_UpdateMode: 0 + m_ApplyRootMotion: 1 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!143 &8009678217738464586 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Height: 1.5 + m_Radius: 0.2 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0.75, z: 0} +--- !u!114 &8490727564501632366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cf757e03aeee494fb67ce8859dc8590, type: 3} + m_Name: + m_EditorClassIdentifier: + _articulationBodyRoot: {fileID: 0} + _debugDistance: 0 + _isGeneratedProcedurally: 0 + _debugWithRigidBody: 0 + _rigidbodyRoot: {fileID: 0} +--- !u!1 &444617061942146252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3735778438020533013} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3735778438020533013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444617061942146252} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000154596, y: -0.025943844, z: 0.21579821, w: 0.9760933} + m_LocalPosition: {x: -0.029376723, y: -0.00000045458617, z: -0.00000006864757} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7177790093131442537} + m_Father: {fileID: 1958849286551222787} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &724470905308507085 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4828823746749587089} + - component: {fileID: 8788194693339964004} + m_Layer: 3 + m_Name: Beta_Joints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4828823746749587089 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 724470905308507085} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3686799810742117958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &8788194693339964004 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 724470905308507085} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4f5046ec1d1fb3d4696fd5f2f91b12d7, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 2497106002754787046, guid: d67d76a0f1d165e439c33842a4e6d829, type: 3} + m_Bones: + - {fileID: 3805812208281142464} + - {fileID: 3816809303915888998} + - {fileID: 61719458373122324} + - {fileID: 3424731480843698993} + - {fileID: 2475311671635326929} + - {fileID: 6858170280566243505} + - {fileID: 7288190062760050595} + - {fileID: 3956686809651453} + - {fileID: 1780579492469979430} + - {fileID: 4798817816114295550} + - {fileID: 7364871531713363585} + - {fileID: 5783046257887648325} + - {fileID: 2049863306711867418} + - {fileID: 2326447331854836237} + - {fileID: 7843489935681131426} + - {fileID: 3247648011332746829} + - {fileID: 7220185058596356659} + - {fileID: 240765491400414561} + - {fileID: 5089762581670983761} + - {fileID: 7426597033592169978} + - {fileID: 1958849286551222787} + - {fileID: 3735778438020533013} + - {fileID: 3139645161957259186} + - {fileID: 4513844269592712687} + - {fileID: 4368280097208132861} + - {fileID: 7601562289139286854} + - {fileID: 3192857308659796769} + - {fileID: 1218731300768487097} + - {fileID: 2675050577185743141} + - {fileID: 6823969981923611242} + - {fileID: 5114058502360463468} + - {fileID: 3814908135962981319} + - {fileID: 1143666513682358808} + - {fileID: 8090734985734702672} + - {fileID: 5207799685715001297} + - {fileID: 8315411906559011575} + - {fileID: 4188289388191304861} + - {fileID: 8600940905037178393} + - {fileID: 8387281877113627033} + - {fileID: 8081789266139957499} + - {fileID: 2209666220319531871} + - {fileID: 6377256832505512678} + - {fileID: 8701100832392348522} + - {fileID: 4418331433281850283} + - {fileID: 5264828162436470825} + - {fileID: 3426563212883501225} + - {fileID: 6985435197592493118} + - {fileID: 6971595779586446085} + - {fileID: 1883103756443790753} + - {fileID: 9192183071538891233} + - {fileID: 6877447306015196480} + - {fileID: 761318265474940137} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 3805812208281142464} + m_AABB: + m_Center: {x: -0.029226333, y: -0.23296213, z: 0.006073512} + m_Extent: {x: 0.28855243, y: 0.7848079, z: 0.17378044} + m_DirtyAABB: 0 +--- !u!1 &1081226756411146176 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9192183071538891233} + m_Layer: 3 + m_Name: mixamorig:RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9192183071538891233 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1081226756411146176} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.435572e-10, y: -0.44370535, z: 0.0028615638} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6877447306015196480} + m_Father: {fileID: 1883103756443790753} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1104816053762190129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5783046257887648325} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5783046257887648325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104816053762190129} + serializedVersion: 2 + m_LocalRotation: {x: 0.034243487, y: -0.06583692, z: -0.009060019, w: 0.9972015} + m_LocalPosition: {x: -0.032298036, y: -0.018646907, z: 0.018646812} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2049863306711867418} + m_Father: {fileID: 7364871531713363585} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1291939702580505375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 761318265474940137} + m_Layer: 3 + m_Name: mixamorig:RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &761318265474940137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1291939702580505375} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.00000002360438, y: -0.08728669, z: 0.107105605} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2241869972018169020} + m_Father: {fileID: 6877447306015196480} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1662035981661035203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6985435197592493118} + m_Layer: 3 + m_Name: mixamorig:LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6985435197592493118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662035981661035203} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000047163935, y: -0.44427872, z: -0.029821906} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6971595779586446085} + m_Father: {fileID: 3426563212883501225} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1696944734262636515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4418331433281850283} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4418331433281850283 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696944734262636515} + serializedVersion: 2 + m_LocalRotation: {x: -0.018880373, y: -0.05791284, z: -0.018992314, w: 0.9979624} + m_LocalPosition: {x: 0.02652605, y: -0.015314492, z: 0.015314456} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1399220495936973381} + m_Father: {fileID: 8701100832392348522} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1746651327064696276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4400746077549366836} + m_Layer: 3 + m_Name: mixamorig:HeadTop_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4400746077549366836 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746651327064696276} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0000000065082415, y: 0.17815155, z: 0.025849855} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6858170280566243505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1928419221442771365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240765491400414561} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &240765491400414561 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928419221442771365} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000083408274, y: -0.014846245, z: 0.123489566, w: 0.9922348} + m_LocalPosition: {x: -0.036982365, y: 0.00000001961359, z: 0.00000017916967} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5089762581670983761} + m_Father: {fileID: 7220185058596356659} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2578412409195557823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3816809303915888998} + m_Layer: 3 + m_Name: mixamorig:Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3816809303915888998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2578412409195557823} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.00000009234152, y: 0.10181588, z: 0.0013152092} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 61719458373122324} + m_Father: {fileID: 3805812208281142464} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2792710561182766282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7177790093131442537} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7177790093131442537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2792710561182766282} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.026474526, y: -0.00000049804413, z: 7.0705153e-10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3735778438020533013} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2854151855260882899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4809394055445825325} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4809394055445825325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2854151855260882899} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.023927199, y: 0.00000037025907, z: 0.00000033554434} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3247648011332746829} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2900455889734779221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5264828162436470825} + m_Layer: 3 + m_Name: mixamorig:LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5264828162436470825 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2900455889734779221} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.082077816, y: -0.06751714, z: -0.015995556} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3426563212883501225} + m_Father: {fileID: 3805812208281142464} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2907376412662452474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3247648011332746829} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3247648011332746829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2907376412662452474} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000030632222, y: -0.016264305, z: 0.13528493, w: 0.99067324} + m_LocalPosition: {x: -0.028830625, y: 0.00000038511968, z: -0.00000042764816} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4809394055445825325} + m_Father: {fileID: 7843489935681131426} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3013217516278236914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2475311671635326929} + m_Layer: 3 + m_Name: mixamorig:Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2475311671635326929 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3013217516278236914} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000063342855, y: 0.16671668, z: -0.025161678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6858170280566243505} + m_Father: {fileID: 3424731480843698993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3122352407652995055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6971595779586446085} + m_Layer: 3 + m_Name: mixamorig:LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6971595779586446085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3122352407652995055} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000029609879, y: -0.087286696, z: 0.1071056} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1098406920803643505} + m_Father: {fileID: 6985435197592493118} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3293136439187358539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143666513682358808} + m_Layer: 3 + m_Name: mixamorig:RightHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1143666513682358808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3293136439187358539} + serializedVersion: 2 + m_LocalRotation: {x: 0.00037377691, y: 0.022988131, z: -0.17173363, w: 0.98487514} + m_LocalPosition: {x: 0.09103588, y: -0.00043914348, z: -0.018650724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8090734985734702672} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3917772976201597546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3424731480843698993} + m_Layer: 3 + m_Name: mixamorig:Spine2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3424731480843698993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3917772976201597546} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000034574863, y: 0.09100011, z: -0.013734171} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7288190062760050595} + - {fileID: 2475311671635326929} + - {fileID: 7601562289139286854} + m_Father: {fileID: 61719458373122324} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3962680521647541795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6377256832505512678} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6377256832505512678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3962680521647541795} + serializedVersion: 2 + m_LocalRotation: {x: -0.012513812, y: 0.07155021, z: 0.12621665, w: 0.9893398} + m_LocalPosition: {x: 0.024648061, y: -0.015727142, z: 0.026826264} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8701100832392348522} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4025274283745166823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2049863306711867418} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2049863306711867418 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4025274283745166823} + serializedVersion: 2 + m_LocalRotation: {x: -0.08035521, y: -0.03169351, z: 0.03012685, w: 0.9958067} + m_LocalPosition: {x: -0.02652565, y: -0.015314929, z: 0.015314716} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3587699784822628112} + m_Father: {fileID: 5783046257887648325} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4117469313355784630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3814908135962981319} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3814908135962981319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4117469313355784630} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000002017436, y: 0.023305127, z: -0.19197693, w: 0.9811227} + m_LocalPosition: {x: 0.021142116, y: 0.00000015137925, z: 0.00000014793768} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 890191578504795341} + m_Father: {fileID: 5114058502360463468} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4363621251177238990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1669420649433881162} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1669420649433881162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4363621251177238990} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.023927199, y: 0.000000268147, z: 0.00000028020133} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2209666220319531871} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4596267223529255526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7364871531713363585} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7364871531713363585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4596267223529255526} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.024661401, y: -0.015750492, z: 0.026824135} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5783046257887648325} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4758716929184199912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3192857308659796769} + m_Layer: 3 + m_Name: mixamorig:RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3192857308659796769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4758716929184199912} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.105928436, y: -0.0052479836, z: -0.022320986} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1218731300768487097} + m_Father: {fileID: 7601562289139286854} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4768597898316900781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 61719458373122324} + m_Layer: 3 + m_Name: mixamorig:Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &61719458373122324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4768597898316900781} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000002519403, y: 0.10083451, z: -0.010008043} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3424731480843698993} + m_Father: {fileID: 3816809303915888998} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4957717358231367155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4368280097208132861} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4368280097208132861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4957717358231367155} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000006974694, y: -0.01088136, z: 0.090509206, w: 0.9958362} + m_LocalPosition: {x: -0.021142116, y: 0.00000019538281, z: -0.00000002864415} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4637356422106919981} + m_Father: {fileID: 4513844269592712687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5293427872956757107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890191578504795341} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890191578504795341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293427872956757107} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.019756826, y: -0.00000018521958, z: -0.000000009839841} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3814908135962981319} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5336639211969966393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8315411906559011575} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8315411906559011575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5336639211969966393} + serializedVersion: 2 + m_LocalRotation: {x: -0.00012333371, y: 0.013151798, z: -0.11697145, w: 0.9930482} + m_LocalPosition: {x: 0.09532503, y: -0.00000016312302, z: 0.00000016791842} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4188289388191304861} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5441213614762409711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8387281877113627033} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8387281877113627033 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5441213614762409711} + serializedVersion: 2 + m_LocalRotation: {x: 0.0019225597, y: 0.032910965, z: -0.1896791, w: 0.98129255} + m_LocalPosition: {x: 0.09108281, y: -0.0051678894, z: 0.022601163} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8081789266139957499} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5459023565741966369 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6858170280566243505} + m_Layer: 3 + m_Name: mixamorig:Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6858170280566243505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5459023565741966369} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0000000042423185, y: 0.09617875, z: 0.016850075} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4400746077549366836} + - {fileID: 723381811665153623} + - {fileID: 1847373816753268944} + m_Father: {fileID: 2475311671635326929} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5569334918067133812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3426563212883501225} + m_Layer: 3 + m_Name: mixamorig:LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3426563212883501225 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569334918067133812} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000004110158, y: -0.44370472, z: 0.0028464263} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6985435197592493118} + m_Father: {fileID: 5264828162436470825} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5651953071623678070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3139645161957259186} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3139645161957259186 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5651953071623678070} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.08077778, y: -0.004886682, z: -0.03806067} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4513844269592712687} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5676151649762533924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8081789266139957499} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8081789266139957499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5676151649762533924} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000015226174, y: 0.010892153, z: -0.08972404, w: 0.9959071} + m_LocalPosition: {x: 0.036764093, y: 0.00000019227156, z: 0.0000003235567} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2209666220319531871} + m_Father: {fileID: 8387281877113627033} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5801069702607921655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5207799685715001297} + m_Layer: 3 + m_Name: mixamorig:RightHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5207799685715001297 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5801069702607921655} + serializedVersion: 2 + m_LocalRotation: {x: -0.10274525, y: 0.03787521, z: -0.16529457, w: 0.9801462} + m_LocalPosition: {x: 0.029376723, y: -0.00000041600654, z: -0.00000039660634} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3912600874599212585} + m_Father: {fileID: 8090734985734702672} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5872363739066950147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847373816753268944} + m_Layer: 3 + m_Name: mixamorig:RightEye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1847373816753268944 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5872363739066950147} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.030675504, y: 0.064095, z: 0.09283547} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6858170280566243505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5974174787270471391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6823969981923611242} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6823969981923611242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5974174787270471391} + serializedVersion: 2 + m_LocalRotation: {x: 0.0005596059, y: 0.019995429, z: -0.12958263, w: 0.99136686} + m_LocalPosition: {x: 0.080766745, y: -0.0048845927, z: -0.038060103} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5114058502360463468} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5979837354695625278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8090734985734702672} + m_Layer: 3 + m_Name: mixamorig:RightHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8090734985734702672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5979837354695625278} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016135926, y: 0.011741795, z: -0.09672358, w: 0.99524206} + m_LocalPosition: {x: 0.031540267, y: 0.00000023997296, z: 0.0000004885121} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5207799685715001297} + m_Father: {fileID: 1143666513682358808} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6010239916914329564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3956686809651453} + m_Layer: 3 + m_Name: mixamorig:LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3956686809651453 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6010239916914329564} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1059237, y: -0.005245829, z: -0.0223212} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1780579492469979430} + m_Father: {fileID: 7288190062760050595} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6044068824342469848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1780579492469979430} + m_Layer: 3 + m_Name: mixamorig:LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1780579492469979430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6044068824342469848} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2784152, y: -0.0000008942865, z: 0.0000003745891} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4798817816114295550} + m_Father: {fileID: 3956686809651453} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6097283951273913703 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5089762581670983761} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5089762581670983761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6097283951273913703} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000059060614, y: -0.017707754, z: 0.14729121, w: 0.9889347} + m_LocalPosition: {x: -0.029509215, y: -0.00000039376084, z: 0.0000001644796} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7794264093985034514} + m_Father: {fileID: 240765491400414561} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6102496864276470840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5114058502360463468} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5114058502360463468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6102496864276470840} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000017364068, y: 0.015117919, z: -0.124647975, w: 0.9920859} + m_LocalPosition: {x: 0.036000345, y: 0.00000039676655, z: 0.0000005081442} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3814908135962981319} + m_Father: {fileID: 6823969981923611242} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6198220811016572574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1883103756443790753} + m_Layer: 3 + m_Name: mixamorig:RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1883103756443790753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6198220811016572574} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.08207796, y: -0.06751662, z: -0.015995594} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9192183071538891233} + m_Father: {fileID: 3805812208281142464} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6308702033820786464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7288190062760050595} + m_Layer: 3 + m_Name: mixamorig:LeftShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7288190062760050595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6308702033820786464} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.045704465, y: 0.10945985, z: -0.02627988} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3956686809651453} + m_Father: {fileID: 3424731480843698993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6518549214661000384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1958849286551222787} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1958849286551222787 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6518549214661000384} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012804522, y: -0.01702194, z: 0.14158715, w: 0.9897794} + m_LocalPosition: {x: -0.031540267, y: -0.00000006553468, z: 0.00000010425744} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3735778438020533013} + m_Father: {fileID: 7426597033592169978} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6542974291887257375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7843489935681131426} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7843489935681131426 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6542974291887257375} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013486236, y: -0.013445388, z: 0.111837275, w: 0.9936356} + m_LocalPosition: {x: -0.036764093, y: -0.00000006939138, z: 0.00000029242517} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3247648011332746829} + m_Father: {fileID: 2326447331854836237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6712799453818868151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399220495936973381} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1399220495936973381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6712799453818868151} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.019545805, y: -0.011284617, z: 0.01128507} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4418331433281850283} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6745280359009486461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7794264093985034514} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7794264093985034514 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6745280359009486461} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.028339025, y: -0.0000003893482, z: -0.00000009504223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5089762581670983761} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6829629720762085909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7220185058596356659} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7220185058596356659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6829629720762085909} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.095334016, y: -0.00000033924047, z: 0.00000013937026} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 240765491400414561} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7089348582567304270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 421823017497324388} + - component: {fileID: 7778793721715045614} + m_Layer: 3 + m_Name: Beta_Surface + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &421823017497324388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7089348582567304270} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3686799810742117958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &7778793721715045614 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7089348582567304270} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2357ec65c9eceb94a98f3916931656d0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 6796121518194019630, guid: d67d76a0f1d165e439c33842a4e6d829, type: 3} + m_Bones: + - {fileID: 3805812208281142464} + - {fileID: 3816809303915888998} + - {fileID: 61719458373122324} + - {fileID: 3424731480843698993} + - {fileID: 2475311671635326929} + - {fileID: 6858170280566243505} + - {fileID: 7288190062760050595} + - {fileID: 3956686809651453} + - {fileID: 1780579492469979430} + - {fileID: 4798817816114295550} + - {fileID: 7364871531713363585} + - {fileID: 5783046257887648325} + - {fileID: 2049863306711867418} + - {fileID: 2326447331854836237} + - {fileID: 7843489935681131426} + - {fileID: 3247648011332746829} + - {fileID: 7220185058596356659} + - {fileID: 240765491400414561} + - {fileID: 5089762581670983761} + - {fileID: 7426597033592169978} + - {fileID: 1958849286551222787} + - {fileID: 3735778438020533013} + - {fileID: 3139645161957259186} + - {fileID: 4513844269592712687} + - {fileID: 4368280097208132861} + - {fileID: 3192857308659796769} + - {fileID: 1218731300768487097} + - {fileID: 2675050577185743141} + - {fileID: 6823969981923611242} + - {fileID: 5114058502360463468} + - {fileID: 3814908135962981319} + - {fileID: 1143666513682358808} + - {fileID: 8090734985734702672} + - {fileID: 5207799685715001297} + - {fileID: 8315411906559011575} + - {fileID: 4188289388191304861} + - {fileID: 8600940905037178393} + - {fileID: 8387281877113627033} + - {fileID: 8081789266139957499} + - {fileID: 2209666220319531871} + - {fileID: 6377256832505512678} + - {fileID: 8701100832392348522} + - {fileID: 4418331433281850283} + - {fileID: 3426563212883501225} + - {fileID: 6985435197592493118} + - {fileID: 6971595779586446085} + - {fileID: 1883103756443790753} + - {fileID: 9192183071538891233} + - {fileID: 6877447306015196480} + - {fileID: 761318265474940137} + - {fileID: 7601562289139286854} + - {fileID: 5264828162436470825} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 3805812208281142464} + m_AABB: + m_Center: {x: -0.038425133, y: -0.1257366, z: 0.0028004125} + m_Extent: {x: 0.31848902, y: 0.9007354, z: 0.19759041} + m_DirtyAABB: 0 +--- !u!1 &7110939478451486097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4513844269592712687} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4513844269592712687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110939478451486097} + serializedVersion: 2 + m_LocalRotation: {x: 0.004209028, y: 0.021044666, z: 0.12154534, w: 0.99235386} + m_LocalPosition: {x: -0.036000345, y: -0.000000022522151, z: -0.00000026238794} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4368280097208132861} + m_Father: {fileID: 3139645161957259186} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7279326562145781845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3587699784822628112} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3587699784822628112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7279326562145781845} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019545669, y: -0.0112850005, z: 0.011284921} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2049863306711867418} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7463559024257613972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3805812208281142464} + m_Layer: 3 + m_Name: mixamorig:Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3805812208281142464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7463559024257613972} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.05, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5264828162436470825} + - {fileID: 1883103756443790753} + - {fileID: 3816809303915888998} + m_Father: {fileID: 3686799810742117958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7613912752943233747 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2326447331854836237} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2326447331854836237 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613912752943233747} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.09109301, y: -0.005170834, z: 0.02260073} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7843489935681131426} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7765160336623160502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2241869972018169020} + m_Layer: 3 + m_Name: mixamorig:RightToe_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2241869972018169020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7765160336623160502} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000020942645, y: -0.000006763694, z: 0.0927812} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 761318265474940137} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7804154089244218065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7601562289139286854} + m_Layer: 3 + m_Name: mixamorig:RightShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7601562289139286854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7804154089244218065} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.045699697, y: 0.10946176, z: -0.026280174} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3192857308659796769} + m_Father: {fileID: 3424731480843698993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8037975242611709879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7426597033592169978} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7426597033592169978 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8037975242611709879} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.091045275, y: -0.00043939505, z: -0.018650847} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1958849286551222787} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8127525394544048877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8701100832392348522} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8701100832392348522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8127525394544048877} + serializedVersion: 2 + m_LocalRotation: {x: 0.04307745, y: 0.19562133, z: 0.042173576, w: 0.9788248} + m_LocalPosition: {x: 0.03229772, y: -0.018647088, z: 0.018647185} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4418331433281850283} + m_Father: {fileID: 6377256832505512678} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8254005159064179398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3912600874599212585} + m_Layer: 3 + m_Name: mixamorig:RightHandRing4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3912600874599212585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8254005159064179398} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026474526, y: 0.00000024608212, z: -0.000000022949234} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5207799685715001297} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8388813412827367547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1098406920803643505} + m_Layer: 3 + m_Name: mixamorig:LeftToe_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1098406920803643505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8388813412827367547} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000025080618, y: -0.0000067668298, z: 0.09278136} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6971595779586446085} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8521703566600512502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4798817816114295550} + m_Layer: 3 + m_Name: mixamorig:LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4798817816114295550 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8521703566600512502} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2832884, y: -0.00000017440718, z: 0.00000037804523} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2326447331854836237} + - {fileID: 7220185058596356659} + - {fileID: 3139645161957259186} + - {fileID: 7426597033592169978} + - {fileID: 7364871531713363585} + m_Father: {fileID: 1780579492469979430} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8602321274763542817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 454720939049401084} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &454720939049401084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8602321274763542817} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.028339025, y: 0.00000008053241, z: 0.00000053787704} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8600940905037178393} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9032816581713627685 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188289388191304861} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188289388191304861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9032816581713627685} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000012622392, y: 0.0141155105, z: -0.11627735, w: 0.9931165} + m_LocalPosition: {x: 0.036982365, y: 0.00000015066959, z: -0.00000022545524} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8600940905037178393} + m_Father: {fileID: 8315411906559011575} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9126847540449310610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4637356422106919981} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4637356422106919981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9126847540449310610} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019756826, y: 0.00000012405657, z: -0.00000044301405} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4368280097208132861} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9161153345938391024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2675050577185743141} + m_Layer: 3 + m_Name: mixamorig:RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2675050577185743141 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9161153345938391024} + serializedVersion: 2 + m_LocalRotation: {x: 0.14572193, y: -0.010789281, z: -0.0033966785, w: 0.9892609} + m_LocalPosition: {x: 0.2832884, y: -0.0000000015814171, z: 0.00000055816014} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8387281877113627033} + - {fileID: 8315411906559011575} + - {fileID: 6823969981923611242} + - {fileID: 1143666513682358808} + - {fileID: 6377256832505512678} + m_Father: {fileID: 1218731300768487097} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab.meta new file mode 100644 index 0000000..aaa8170 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-outcome.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c4813c0eb838d1b4fa513c76f6b99f5f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab new file mode 100644 index 0000000..3d3cbe8 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab @@ -0,0 +1,2560 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &161227863359003662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8600940905037178393} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8600940905037178393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161227863359003662} + serializedVersion: 2 + m_LocalRotation: {x: -0.036095407, y: 0.034940347, z: -0.21942091, w: 0.9743361} + m_LocalPosition: {x: 0.029509215, y: -0.000000003113245, z: -0.0000000030340255} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 454720939049401084} + m_Father: {fileID: 4188289388191304861} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &212026845543190845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218731300768487097} + m_Layer: 3 + m_Name: mixamorig:RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1218731300768487097 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212026845543190845} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.2784152, y: -0.00000033079218, z: 0.000000116763104} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2675050577185743141} + m_Father: {fileID: 3192857308659796769} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &247433028873884665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 723381811665153623} + m_Layer: 3 + m_Name: mixamorig:LeftEye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &723381811665153623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247433028873884665} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.030675607, y: 0.06409507, z: 0.09283554} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6858170280566243505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &306696037656357132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6877447306015196480} + m_Layer: 3 + m_Name: mixamorig:RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6877447306015196480 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 306696037656357132} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000009644582, y: -0.4442773, z: -0.02983789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 761318265474940137} + m_Father: {fileID: 9192183071538891233} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &380778450955083824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2209666220319531871} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2209666220319531871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380778450955083824} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000063313275, y: 0.01609932, z: -0.13261928, w: 0.9910363} + m_LocalPosition: {x: 0.028830625, y: -0.00000049601215, z: 0.00000040448975} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1669420649433881162} + m_Father: {fileID: 8081789266139957499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &392232339659560021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3686799810742117958} + - component: {fileID: 8009678217738464586} + - component: {fileID: 6746435283200658236} + - component: {fileID: 9078412577694927551} + - component: {fileID: 4224271577064884915} + - component: {fileID: 555854875840444148} + m_Layer: 3 + m_Name: AgentMove-source + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3686799810742117958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4828823746749587089} + - {fileID: 421823017497324388} + - {fileID: 3805812208281142464} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!143 &8009678217738464586 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Height: 1.68 + m_Radius: 0.15 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0.86, z: 0} +--- !u!95 &6746435283200658236 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Enabled: 1 + m_Avatar: {fileID: 9000000, guid: 65a3c32d6ec98fc479df350fa87900c7, type: 3} + m_Controller: {fileID: 9100000, guid: 302de0a71ea44470782418460ee6b832, type: 2} + m_CullingMode: 0 + m_UpdateMode: 1 + m_ApplyRootMotion: 1 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &9078412577694927551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ddcd176a32835474d9ddbce9eb0273af, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxForwardVelocity: 1 + MinTurnVelocity: 400 + MaxTurnVelocity: 1200 + JumpSpeed: 5 + debugForceJump: 0 + doFixedUpdate: 1 + _isGeneratedProcedurally: 0 +--- !u!114 &4224271577064884915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f59f726c3dcc1c4287d40a0e3156276, type: 3} + m_Name: + m_EditorClassIdentifier: + SensorIsInTouch: [] + NormalizedTime: 0 + Lenght: 0 + IsLoopingAnimation: 0 + _rigidbodyRoot: {fileID: 0} + RequestCamera: 0 + CameraFollowMe: 0 + CameraTarget: {fileID: 0} + _isGeneratedProcedurally: 0 + _debugDistance: 0 + doFixedUpdate: 1 +--- !u!114 &555854875840444148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392232339659560021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 25f24ef536e54416c9c95e2d222138e5, type: 3} + m_Name: + m_EditorClassIdentifier: + Stats: [] +--- !u!1 &444617061942146252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3735778438020533013} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3735778438020533013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444617061942146252} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000154596, y: -0.025943844, z: 0.21579821, w: 0.9760933} + m_LocalPosition: {x: -0.029376723, y: -0.00000045458617, z: -0.00000006864757} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7177790093131442537} + m_Father: {fileID: 1958849286551222787} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &724470905308507085 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4828823746749587089} + - component: {fileID: 8788194693339964004} + m_Layer: 3 + m_Name: Beta_Joints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4828823746749587089 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 724470905308507085} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3686799810742117958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &8788194693339964004 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 724470905308507085} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7c75b8d76b8c90345b5654cf72a22ec9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 2497106002754787046, guid: d67d76a0f1d165e439c33842a4e6d829, type: 3} + m_Bones: + - {fileID: 3805812208281142464} + - {fileID: 3816809303915888998} + - {fileID: 61719458373122324} + - {fileID: 3424731480843698993} + - {fileID: 2475311671635326929} + - {fileID: 6858170280566243505} + - {fileID: 7288190062760050595} + - {fileID: 3956686809651453} + - {fileID: 1780579492469979430} + - {fileID: 4798817816114295550} + - {fileID: 7364871531713363585} + - {fileID: 5783046257887648325} + - {fileID: 2049863306711867418} + - {fileID: 2326447331854836237} + - {fileID: 7843489935681131426} + - {fileID: 3247648011332746829} + - {fileID: 7220185058596356659} + - {fileID: 240765491400414561} + - {fileID: 5089762581670983761} + - {fileID: 7426597033592169978} + - {fileID: 1958849286551222787} + - {fileID: 3735778438020533013} + - {fileID: 3139645161957259186} + - {fileID: 4513844269592712687} + - {fileID: 4368280097208132861} + - {fileID: 7601562289139286854} + - {fileID: 3192857308659796769} + - {fileID: 1218731300768487097} + - {fileID: 2675050577185743141} + - {fileID: 6823969981923611242} + - {fileID: 5114058502360463468} + - {fileID: 3814908135962981319} + - {fileID: 1143666513682358808} + - {fileID: 8090734985734702672} + - {fileID: 5207799685715001297} + - {fileID: 8315411906559011575} + - {fileID: 4188289388191304861} + - {fileID: 8600940905037178393} + - {fileID: 8387281877113627033} + - {fileID: 8081789266139957499} + - {fileID: 2209666220319531871} + - {fileID: 6377256832505512678} + - {fileID: 8701100832392348522} + - {fileID: 4418331433281850283} + - {fileID: 5264828162436470825} + - {fileID: 3426563212883501225} + - {fileID: 6985435197592493118} + - {fileID: 6971595779586446085} + - {fileID: 1883103756443790753} + - {fileID: 9192183071538891233} + - {fileID: 6877447306015196480} + - {fileID: 761318265474940137} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 3805812208281142464} + m_AABB: + m_Center: {x: -0.029226333, y: -0.23296213, z: 0.006073512} + m_Extent: {x: 0.28855243, y: 0.7848079, z: 0.17378044} + m_DirtyAABB: 0 +--- !u!1 &1081226756411146176 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9192183071538891233} + m_Layer: 3 + m_Name: mixamorig:RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9192183071538891233 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1081226756411146176} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.435572e-10, y: -0.44370535, z: 0.0028615638} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6877447306015196480} + m_Father: {fileID: 1883103756443790753} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1104816053762190129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5783046257887648325} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5783046257887648325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104816053762190129} + serializedVersion: 2 + m_LocalRotation: {x: 0.034243487, y: -0.06583692, z: -0.009060019, w: 0.9972015} + m_LocalPosition: {x: -0.032298036, y: -0.018646907, z: 0.018646812} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2049863306711867418} + m_Father: {fileID: 7364871531713363585} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1291939702580505375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 761318265474940137} + m_Layer: 3 + m_Name: mixamorig:RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &761318265474940137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1291939702580505375} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.00000002360438, y: -0.08728669, z: 0.107105605} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2241869972018169020} + m_Father: {fileID: 6877447306015196480} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1662035981661035203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6985435197592493118} + m_Layer: 3 + m_Name: mixamorig:LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6985435197592493118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662035981661035203} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000047163935, y: -0.44427872, z: -0.029821906} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6971595779586446085} + m_Father: {fileID: 3426563212883501225} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1696944734262636515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4418331433281850283} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4418331433281850283 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696944734262636515} + serializedVersion: 2 + m_LocalRotation: {x: -0.018880373, y: -0.05791284, z: -0.018992314, w: 0.9979624} + m_LocalPosition: {x: 0.02652605, y: -0.015314492, z: 0.015314456} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1399220495936973381} + m_Father: {fileID: 8701100832392348522} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1746651327064696276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4400746077549366836} + m_Layer: 3 + m_Name: mixamorig:HeadTop_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4400746077549366836 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746651327064696276} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0000000065082415, y: 0.17815155, z: 0.025849855} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6858170280566243505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1928419221442771365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240765491400414561} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &240765491400414561 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928419221442771365} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000083408274, y: -0.014846245, z: 0.123489566, w: 0.9922348} + m_LocalPosition: {x: -0.036982365, y: 0.00000001961359, z: 0.00000017916967} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5089762581670983761} + m_Father: {fileID: 7220185058596356659} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2578412409195557823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3816809303915888998} + m_Layer: 3 + m_Name: mixamorig:Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3816809303915888998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2578412409195557823} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.00000009234152, y: 0.10181588, z: 0.0013152092} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 61719458373122324} + m_Father: {fileID: 3805812208281142464} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2792710561182766282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7177790093131442537} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7177790093131442537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2792710561182766282} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.026474526, y: -0.00000049804413, z: 7.0705153e-10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3735778438020533013} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2854151855260882899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4809394055445825325} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4809394055445825325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2854151855260882899} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.023927199, y: 0.00000037025907, z: 0.00000033554434} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3247648011332746829} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2900455889734779221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5264828162436470825} + m_Layer: 3 + m_Name: mixamorig:LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5264828162436470825 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2900455889734779221} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.082077816, y: -0.06751714, z: -0.015995556} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3426563212883501225} + m_Father: {fileID: 3805812208281142464} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2907376412662452474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3247648011332746829} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3247648011332746829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2907376412662452474} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000030632222, y: -0.016264305, z: 0.13528493, w: 0.99067324} + m_LocalPosition: {x: -0.028830625, y: 0.00000038511968, z: -0.00000042764816} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4809394055445825325} + m_Father: {fileID: 7843489935681131426} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3013217516278236914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2475311671635326929} + m_Layer: 3 + m_Name: mixamorig:Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2475311671635326929 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3013217516278236914} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000063342855, y: 0.16671668, z: -0.025161678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6858170280566243505} + m_Father: {fileID: 3424731480843698993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3122352407652995055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6971595779586446085} + m_Layer: 3 + m_Name: mixamorig:LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6971595779586446085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3122352407652995055} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000029609879, y: -0.087286696, z: 0.1071056} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1098406920803643505} + m_Father: {fileID: 6985435197592493118} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3293136439187358539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143666513682358808} + m_Layer: 3 + m_Name: mixamorig:RightHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1143666513682358808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3293136439187358539} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.09103588, y: -0.00043914348, z: -0.018650724} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8090734985734702672} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3917772976201597546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3424731480843698993} + m_Layer: 3 + m_Name: mixamorig:Spine2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3424731480843698993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3917772976201597546} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000034574863, y: 0.09100011, z: -0.013734171} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7288190062760050595} + - {fileID: 2475311671635326929} + - {fileID: 7601562289139286854} + m_Father: {fileID: 61719458373122324} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3962680521647541795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6377256832505512678} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6377256832505512678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3962680521647541795} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.024648061, y: -0.015727142, z: 0.026826264} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8701100832392348522} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4025274283745166823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2049863306711867418} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2049863306711867418 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4025274283745166823} + serializedVersion: 2 + m_LocalRotation: {x: -0.08035521, y: -0.03169351, z: 0.03012685, w: 0.9958067} + m_LocalPosition: {x: -0.02652565, y: -0.015314929, z: 0.015314716} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3587699784822628112} + m_Father: {fileID: 5783046257887648325} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4117469313355784630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3814908135962981319} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3814908135962981319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4117469313355784630} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000002017436, y: 0.023305127, z: -0.19197693, w: 0.9811227} + m_LocalPosition: {x: 0.021142116, y: 0.00000015137925, z: 0.00000014793768} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 890191578504795341} + m_Father: {fileID: 5114058502360463468} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4363621251177238990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1669420649433881162} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1669420649433881162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4363621251177238990} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.023927199, y: 0.000000268147, z: 0.00000028020133} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2209666220319531871} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4596267223529255526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7364871531713363585} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7364871531713363585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4596267223529255526} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.024661401, y: -0.015750492, z: 0.026824135} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5783046257887648325} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4758716929184199912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3192857308659796769} + m_Layer: 3 + m_Name: mixamorig:RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3192857308659796769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4758716929184199912} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.105928436, y: -0.0052479836, z: -0.022320986} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1218731300768487097} + m_Father: {fileID: 7601562289139286854} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4768597898316900781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 61719458373122324} + m_Layer: 3 + m_Name: mixamorig:Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &61719458373122324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4768597898316900781} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000002519403, y: 0.10083451, z: -0.010008043} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3424731480843698993} + m_Father: {fileID: 3816809303915888998} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4957717358231367155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4368280097208132861} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4368280097208132861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4957717358231367155} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000006974694, y: -0.01088136, z: 0.090509206, w: 0.9958362} + m_LocalPosition: {x: -0.021142116, y: 0.00000019538281, z: -0.00000002864415} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4637356422106919981} + m_Father: {fileID: 4513844269592712687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5293427872956757107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890191578504795341} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890191578504795341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293427872956757107} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.019756826, y: -0.00000018521958, z: -0.000000009839841} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3814908135962981319} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5336639211969966393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8315411906559011575} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8315411906559011575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5336639211969966393} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.09532503, y: -0.00000016312302, z: 0.00000016791842} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4188289388191304861} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5441213614762409711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8387281877113627033} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8387281877113627033 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5441213614762409711} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.09108281, y: -0.0051678894, z: 0.022601163} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8081789266139957499} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5459023565741966369 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6858170280566243505} + m_Layer: 3 + m_Name: mixamorig:Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6858170280566243505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5459023565741966369} + serializedVersion: 2 + m_LocalRotation: {x: -0.08819713, y: 0.010719821, z: -0.004734955, w: 0.99603415} + m_LocalPosition: {x: 0.0000000042423185, y: 0.09617875, z: 0.016850075} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4400746077549366836} + - {fileID: 723381811665153623} + - {fileID: 1847373816753268944} + m_Father: {fileID: 2475311671635326929} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5569334918067133812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3426563212883501225} + m_Layer: 3 + m_Name: mixamorig:LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3426563212883501225 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5569334918067133812} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000004110158, y: -0.44370472, z: 0.0028464263} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6985435197592493118} + m_Father: {fileID: 5264828162436470825} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5651953071623678070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3139645161957259186} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3139645161957259186 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5651953071623678070} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.08077778, y: -0.004886682, z: -0.03806067} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4513844269592712687} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5676151649762533924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8081789266139957499} + m_Layer: 3 + m_Name: mixamorig:RightHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8081789266139957499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5676151649762533924} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000015226174, y: 0.010892153, z: -0.08972404, w: 0.9959071} + m_LocalPosition: {x: 0.036764093, y: 0.00000019227156, z: 0.0000003235567} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2209666220319531871} + m_Father: {fileID: 8387281877113627033} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5801069702607921655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5207799685715001297} + m_Layer: 3 + m_Name: mixamorig:RightHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5207799685715001297 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5801069702607921655} + serializedVersion: 2 + m_LocalRotation: {x: -0.10274525, y: 0.03787521, z: -0.16529457, w: 0.9801462} + m_LocalPosition: {x: 0.029376723, y: -0.00000041600654, z: -0.00000039660634} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3912600874599212585} + m_Father: {fileID: 8090734985734702672} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5872363739066950147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847373816753268944} + m_Layer: 3 + m_Name: mixamorig:RightEye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1847373816753268944 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5872363739066950147} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.030675504, y: 0.064095, z: 0.09283547} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6858170280566243505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5974174787270471391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6823969981923611242} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6823969981923611242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5974174787270471391} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.080766745, y: -0.0048845927, z: -0.038060103} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5114058502360463468} + m_Father: {fileID: 2675050577185743141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5979837354695625278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8090734985734702672} + m_Layer: 3 + m_Name: mixamorig:RightHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8090734985734702672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5979837354695625278} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016135926, y: 0.011741795, z: -0.09672358, w: 0.99524206} + m_LocalPosition: {x: 0.031540267, y: 0.00000023997296, z: 0.0000004885121} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5207799685715001297} + m_Father: {fileID: 1143666513682358808} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6010239916914329564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3956686809651453} + m_Layer: 3 + m_Name: mixamorig:LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3956686809651453 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6010239916914329564} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1059237, y: -0.005245829, z: -0.0223212} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1780579492469979430} + m_Father: {fileID: 7288190062760050595} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6044068824342469848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1780579492469979430} + m_Layer: 3 + m_Name: mixamorig:LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1780579492469979430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6044068824342469848} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2784152, y: -0.0000008942865, z: 0.0000003745891} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4798817816114295550} + m_Father: {fileID: 3956686809651453} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6097283951273913703 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5089762581670983761} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5089762581670983761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6097283951273913703} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000059060614, y: -0.017707754, z: 0.14729121, w: 0.9889347} + m_LocalPosition: {x: -0.029509215, y: -0.00000039376084, z: 0.0000001644796} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7794264093985034514} + m_Father: {fileID: 240765491400414561} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6102496864276470840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5114058502360463468} + m_Layer: 3 + m_Name: mixamorig:RightHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5114058502360463468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6102496864276470840} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000017364068, y: 0.015117919, z: -0.124647975, w: 0.9920859} + m_LocalPosition: {x: 0.036000345, y: 0.00000039676655, z: 0.0000005081442} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3814908135962981319} + m_Father: {fileID: 6823969981923611242} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6198220811016572574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1883103756443790753} + m_Layer: 3 + m_Name: mixamorig:RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1883103756443790753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6198220811016572574} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.08207796, y: -0.06751662, z: -0.015995594} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9192183071538891233} + m_Father: {fileID: 3805812208281142464} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6308702033820786464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7288190062760050595} + m_Layer: 3 + m_Name: mixamorig:LeftShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7288190062760050595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6308702033820786464} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.045704465, y: 0.10945985, z: -0.02627988} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3956686809651453} + m_Father: {fileID: 3424731480843698993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6518549214661000384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1958849286551222787} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1958849286551222787 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6518549214661000384} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012804522, y: -0.01702194, z: 0.14158715, w: 0.9897794} + m_LocalPosition: {x: -0.031540267, y: -0.00000006553468, z: 0.00000010425744} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3735778438020533013} + m_Father: {fileID: 7426597033592169978} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6542974291887257375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7843489935681131426} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7843489935681131426 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6542974291887257375} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.11182449, w: 0.993728} + m_LocalPosition: {x: -0.036764093, y: -0.00000006939138, z: 0.00000029242517} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3247648011332746829} + m_Father: {fileID: 2326447331854836237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 12.841} +--- !u!1 &6712799453818868151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399220495936973381} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1399220495936973381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6712799453818868151} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.019545805, y: -0.011284617, z: 0.01128507} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4418331433281850283} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6745280359009486461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7794264093985034514} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7794264093985034514 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6745280359009486461} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.028339025, y: -0.0000003893482, z: -0.00000009504223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5089762581670983761} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6829629720762085909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7220185058596356659} + m_Layer: 3 + m_Name: mixamorig:LeftHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7220185058596356659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6829629720762085909} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.095334016, y: -0.00000033924047, z: 0.00000013937026} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 240765491400414561} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7089348582567304270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 421823017497324388} + - component: {fileID: 7778793721715045614} + m_Layer: 3 + m_Name: Beta_Surface + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &421823017497324388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7089348582567304270} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3686799810742117958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &7778793721715045614 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7089348582567304270} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2f6fa6aa88fbef742bf021e621193eaf, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 6796121518194019630, guid: d67d76a0f1d165e439c33842a4e6d829, type: 3} + m_Bones: + - {fileID: 3805812208281142464} + - {fileID: 3816809303915888998} + - {fileID: 61719458373122324} + - {fileID: 3424731480843698993} + - {fileID: 2475311671635326929} + - {fileID: 6858170280566243505} + - {fileID: 7288190062760050595} + - {fileID: 3956686809651453} + - {fileID: 1780579492469979430} + - {fileID: 4798817816114295550} + - {fileID: 7364871531713363585} + - {fileID: 5783046257887648325} + - {fileID: 2049863306711867418} + - {fileID: 2326447331854836237} + - {fileID: 7843489935681131426} + - {fileID: 3247648011332746829} + - {fileID: 7220185058596356659} + - {fileID: 240765491400414561} + - {fileID: 5089762581670983761} + - {fileID: 7426597033592169978} + - {fileID: 1958849286551222787} + - {fileID: 3735778438020533013} + - {fileID: 3139645161957259186} + - {fileID: 4513844269592712687} + - {fileID: 4368280097208132861} + - {fileID: 3192857308659796769} + - {fileID: 1218731300768487097} + - {fileID: 2675050577185743141} + - {fileID: 6823969981923611242} + - {fileID: 5114058502360463468} + - {fileID: 3814908135962981319} + - {fileID: 1143666513682358808} + - {fileID: 8090734985734702672} + - {fileID: 5207799685715001297} + - {fileID: 8315411906559011575} + - {fileID: 4188289388191304861} + - {fileID: 8600940905037178393} + - {fileID: 8387281877113627033} + - {fileID: 8081789266139957499} + - {fileID: 2209666220319531871} + - {fileID: 6377256832505512678} + - {fileID: 8701100832392348522} + - {fileID: 4418331433281850283} + - {fileID: 3426563212883501225} + - {fileID: 6985435197592493118} + - {fileID: 6971595779586446085} + - {fileID: 1883103756443790753} + - {fileID: 9192183071538891233} + - {fileID: 6877447306015196480} + - {fileID: 761318265474940137} + - {fileID: 7601562289139286854} + - {fileID: 5264828162436470825} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 3805812208281142464} + m_AABB: + m_Center: {x: -0.038425133, y: -0.1257366, z: 0.0028004125} + m_Extent: {x: 0.31848902, y: 0.9007354, z: 0.19759041} + m_DirtyAABB: 0 +--- !u!1 &7110939478451486097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4513844269592712687} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4513844269592712687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110939478451486097} + serializedVersion: 2 + m_LocalRotation: {x: 0.004209028, y: 0.021044666, z: 0.12154534, w: 0.99235386} + m_LocalPosition: {x: -0.036000345, y: -0.000000022522151, z: -0.00000026238794} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4368280097208132861} + m_Father: {fileID: 3139645161957259186} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7279326562145781845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3587699784822628112} + m_Layer: 3 + m_Name: mixamorig:LeftHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3587699784822628112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7279326562145781845} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019545669, y: -0.0112850005, z: 0.011284921} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2049863306711867418} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7463559024257613972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3805812208281142464} + m_Layer: 3 + m_Name: mixamorig:Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3805812208281142464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7463559024257613972} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.004121775, y: 1.05, z: 0.020950764} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5264828162436470825} + - {fileID: 1883103756443790753} + - {fileID: 3816809303915888998} + m_Father: {fileID: 3686799810742117958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7613912752943233747 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2326447331854836237} + m_Layer: 3 + m_Name: mixamorig:LeftHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2326447331854836237 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7613912752943233747} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.09109301, y: -0.005170834, z: 0.02260073} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7843489935681131426} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7765160336623160502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2241869972018169020} + m_Layer: 3 + m_Name: mixamorig:RightToe_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2241869972018169020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7765160336623160502} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000020942645, y: -0.000006763694, z: 0.0927812} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 761318265474940137} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7804154089244218065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7601562289139286854} + m_Layer: 3 + m_Name: mixamorig:RightShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7601562289139286854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7804154089244218065} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.045699697, y: 0.10946176, z: -0.026280174} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3192857308659796769} + m_Father: {fileID: 3424731480843698993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8037975242611709879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7426597033592169978} + m_Layer: 3 + m_Name: mixamorig:LeftHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7426597033592169978 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8037975242611709879} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.091045275, y: -0.00043939505, z: -0.018650847} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1958849286551222787} + m_Father: {fileID: 4798817816114295550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8127525394544048877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8701100832392348522} + m_Layer: 3 + m_Name: mixamorig:RightHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8701100832392348522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8127525394544048877} + serializedVersion: 2 + m_LocalRotation: {x: 0.04307745, y: 0.19562133, z: 0.042173576, w: 0.9788248} + m_LocalPosition: {x: 0.03229772, y: -0.018647088, z: 0.018647185} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4418331433281850283} + m_Father: {fileID: 6377256832505512678} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8254005159064179398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3912600874599212585} + m_Layer: 3 + m_Name: mixamorig:RightHandRing4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3912600874599212585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8254005159064179398} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026474526, y: 0.00000024608212, z: -0.000000022949234} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5207799685715001297} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8388813412827367547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1098406920803643505} + m_Layer: 3 + m_Name: mixamorig:LeftToe_End + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1098406920803643505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8388813412827367547} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000025080618, y: -0.0000067668298, z: 0.09278136} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6971595779586446085} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8521703566600512502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4798817816114295550} + m_Layer: 3 + m_Name: mixamorig:LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4798817816114295550 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8521703566600512502} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2832884, y: -0.00000017440718, z: 0.00000037804523} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2326447331854836237} + - {fileID: 7220185058596356659} + - {fileID: 3139645161957259186} + - {fileID: 7426597033592169978} + - {fileID: 7364871531713363585} + m_Father: {fileID: 1780579492469979430} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8602321274763542817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 454720939049401084} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &454720939049401084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8602321274763542817} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.028339025, y: 0.00000008053241, z: 0.00000053787704} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8600940905037178393} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9032816581713627685 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188289388191304861} + m_Layer: 3 + m_Name: mixamorig:RightHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188289388191304861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9032816581713627685} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000012622392, y: 0.0141155105, z: -0.11627735, w: 0.9931165} + m_LocalPosition: {x: 0.036982365, y: 0.00000015066959, z: -0.00000022545524} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8600940905037178393} + m_Father: {fileID: 8315411906559011575} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9126847540449310610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4637356422106919981} + m_Layer: 3 + m_Name: mixamorig:LeftHandPinky4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4637356422106919981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9126847540449310610} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.019756826, y: 0.00000012405657, z: -0.00000044301405} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4368280097208132861} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9161153345938391024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2675050577185743141} + m_Layer: 3 + m_Name: mixamorig:RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2675050577185743141 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9161153345938391024} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.2832884, y: -0.0000000015814171, z: 0.00000055816014} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8387281877113627033} + - {fileID: 8315411906559011575} + - {fileID: 6823969981923611242} + - {fileID: 1143666513682358808} + - {fileID: 6377256832505512678} + m_Father: {fileID: 1218731300768487097} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab.meta new file mode 100644 index 0000000..a5807d2 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/AgentMove-source.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0db68a8912718904d967ab56e13a1785 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat new file mode 100644 index 0000000..23c622e --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3821349114274997365 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BlueJoints + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0, g: 0.58620685, b: 1, a: 1} + - _Color: {r: 0, g: 0.58620685, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat.meta new file mode 100644 index 0000000..246e952 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueJoints.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f5046ec1d1fb3d4696fd5f2f91b12d7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat new file mode 100644 index 0000000..e1b8bf8 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6923165206544234797 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BlueSurface + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0, g: 0.42068955, b: 1, a: 1} + - _Color: {r: 0, g: 0.42068952, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat.meta new file mode 100644 index 0000000..1b1261a --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/BlueSurface.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2357ec65c9eceb94a98f3916931656d0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx new file mode 100644 index 0000000..5a11143 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:775ab057f4b92e79407772cb17fdc4841b3ecf27418a523a1456c827235404a9 +size 3246512 diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx.meta new file mode 100644 index 0000000..b0963cd --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/Idle.fbx.meta @@ -0,0 +1,896 @@ +fileFormatVersion: 2 +guid: d67d76a0f1d165e439c33842a4e6d829 +ModelImporter: + serializedVersion: 20101 + internalIDToNameTable: + - first: + 74: -203655887218126122 + second: mixamo.com + externalObjects: {} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + 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 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 0 + humanDescription: + serializedVersion: 3 + human: + - boneName: mixamorig:Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine1 + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftToeBase + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightToeBase + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine2 + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Idle(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Beta_Joints + parentName: Idle(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Beta_Surface + parentName: Idle(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Hips + parentName: Idle(Clone) + position: {x: -0.004121775, y: 1.0720447, z: 0.020950764} + rotation: {x: -0, y: -0, z: -0.000000013460522, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine + parentName: mixamorig:Hips + position: {x: -0.00000009234152, y: 0.10181588, z: 0.0013152092} + rotation: {x: -0.000000005820766, y: -0.0000000029103835, z: 0.000000013096724, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine1 + parentName: mixamorig:Spine + position: {x: -0.000000002519403, y: 0.10083451, z: -0.010008043} + rotation: {x: 0.000000005820766, y: 0.0000000029103835, z: 1.8189894e-10, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine2 + parentName: mixamorig:Spine1 + position: {x: -0.0000000034574863, y: 0.09100011, z: -0.013734171} + rotation: {x: -0.000000002910383, y: 0.000000002910383, z: -0.0000000018189894, + w: 1} + scale: {x: 0.99999994, y: 1, z: 1} + - name: mixamorig:Neck + parentName: mixamorig:Spine2 + position: {x: -0.0000000063342855, y: 0.16671668, z: -0.025161678} + rotation: {x: 0.0000000021827873, y: -0.000000002910383, z: 0.0000000017507773, + w: 1} + scale: {x: 1, y: 0.9999999, z: 1} + - name: mixamorig:Head + parentName: mixamorig:Neck + position: {x: 0.0000000042423185, y: 0.09617875, z: 0.016850075} + rotation: {x: 7.2759576e-10, y: -0, z: 0.0000000017053026, w: 1} + scale: {x: 1, y: 0.99999994, z: 1} + - name: mixamorig:HeadTop_End + parentName: mixamorig:Head + position: {x: 0.0000000065082415, y: 0.17815155, z: 0.025849855} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftEye + parentName: mixamorig:Head + position: {x: -0.030675607, y: 0.06409507, z: 0.09283554} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightEye + parentName: mixamorig:Head + position: {x: 0.030675504, y: 0.064095, z: 0.09283547} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftShoulder + parentName: mixamorig:Spine2 + position: {x: -0.045704465, y: 0.10945985, z: -0.02627988} + rotation: {x: 0.0000000043655746, y: -0.000000002910383, z: -9.094947e-10, w: 1} + scale: {x: 1, y: 0.99999994, z: 0.99999994} + - name: mixamorig:LeftArm + parentName: mixamorig:LeftShoulder + position: {x: -0.1059237, y: -0.005245829, z: -0.0223212} + rotation: {x: -0.0000000014551915, y: 0.0000000014551915, z: 0.000000008367351, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftForeArm + parentName: mixamorig:LeftArm + position: {x: -0.2784152, y: -0.0000008942865, z: 0.0000003745891} + rotation: {x: -0.0000000014551915, y: -0.0000000014551915, z: -0.000000003274181, + w: 1} + scale: {x: 1.0000002, y: 1.0000004, z: 1.0000001} + - name: mixamorig:LeftHand + parentName: mixamorig:LeftForeArm + position: {x: -0.2832884, y: -0.00000017440718, z: 0.00000037804523} + rotation: {x: 0.0000000014551915, y: -0, z: -0.0000000021827873, w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1} + - name: mixamorig:LeftHandThumb1 + parentName: mixamorig:LeftHand + position: {x: -0.024661401, y: -0.015750492, z: 0.026824135} + rotation: {x: -0.11863639, y: 0.08685272, z: -0.118636325, w: 0.9819916} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000001} + - name: mixamorig:LeftHandThumb2 + parentName: mixamorig:LeftHandThumb1 + position: {x: -0.032298036, y: -0.018646907, z: 0.018646812} + rotation: {x: 0.000000029103827, y: -0.000000005820766, z: 0.000000014551915, + w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1} + - name: mixamorig:LeftHandThumb3 + parentName: mixamorig:LeftHandThumb2 + position: {x: -0.02652565, y: -0.015314929, z: 0.015314716} + rotation: {x: -0.00000003201421, y: -0.0000000058207643, z: -0.000000029831426, + w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + - name: mixamorig:LeftHandThumb4 + parentName: mixamorig:LeftHandThumb3 + position: {x: -0.019545669, y: -0.0112850005, z: 0.011284921} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex1 + parentName: mixamorig:LeftHand + position: {x: -0.09109301, y: -0.005170834, z: 0.02260073} + rotation: {x: -0.000000011641532, y: -0.00000001164153, z: 1.6940656e-17, w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1} + - name: mixamorig:LeftHandIndex2 + parentName: mixamorig:LeftHandIndex1 + position: {x: -0.036764093, y: -0.00000006939138, z: 0.00000029242517} + rotation: {x: -0.000000011641532, y: 0.0000000116415295, z: 0.000000011641532, + w: 1} + scale: {x: 1.0000005, y: 1.0000004, z: 1} + - name: mixamorig:LeftHandIndex3 + parentName: mixamorig:LeftHandIndex2 + position: {x: -0.028830625, y: 0.00000038511968, z: -0.00000042764816} + rotation: {x: -0, y: 0.000000005820767, z: -0.000000029103829, w: 1} + scale: {x: 1.0000005, y: 1.0000004, z: 1.0000001} + - name: mixamorig:LeftHandIndex4 + parentName: mixamorig:LeftHandIndex3 + position: {x: -0.023927199, y: 0.00000037025907, z: 0.00000033554434} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle1 + parentName: mixamorig:LeftHand + position: {x: -0.095334016, y: -0.00000033924047, z: 0.00000013937026} + rotation: {x: 0.000000011641534, y: 0.000000011641534, z: -1.6940662e-17, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + - name: mixamorig:LeftHandMiddle2 + parentName: mixamorig:LeftHandMiddle1 + position: {x: -0.036982365, y: 0.00000001961359, z: 0.00000017916967} + rotation: {x: -1.7763568e-15, y: -0.000000011641534, z: 0.000000005820766, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1} + - name: mixamorig:LeftHandMiddle3 + parentName: mixamorig:LeftHandMiddle2 + position: {x: -0.029509215, y: -0.00000039376084, z: 0.0000001644796} + rotation: {x: -0.000000011641532, y: 0.0000000058207656, z: -0.000000014551915, + w: 1} + scale: {x: 1.0000002, y: 1.0000004, z: 1.0000001} + - name: mixamorig:LeftHandMiddle4 + parentName: mixamorig:LeftHandMiddle3 + position: {x: -0.028339025, y: -0.0000003893482, z: -0.00000009504223} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing1 + parentName: mixamorig:LeftHand + position: {x: -0.091045275, y: -0.00043939505, z: -0.018650847} + rotation: {x: -3.330669e-16, y: 0.0000000349246, z: -0.000000005820767, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + - name: mixamorig:LeftHandRing2 + parentName: mixamorig:LeftHandRing1 + position: {x: -0.031540267, y: -0.00000006553468, z: 0.00000010425744} + rotation: {x: 0.000000023283068, y: -0.000000029103834, z: 0.000000005820768, + w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000001} + - name: mixamorig:LeftHandRing3 + parentName: mixamorig:LeftHandRing2 + position: {x: -0.029376723, y: -0.00000045458617, z: -0.00000006864757} + rotation: {x: -0.000000046566132, y: 0.000000010186342, z: 0.00000003274181, + w: 1} + scale: {x: 1, y: 1.0000001, z: 1} + - name: mixamorig:LeftHandRing4 + parentName: mixamorig:LeftHandRing3 + position: {x: -0.026474526, y: -0.00000049804413, z: 7.0705153e-10} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky1 + parentName: mixamorig:LeftHand + position: {x: -0.08077778, y: -0.004886682, z: -0.03806067} + rotation: {x: 0.00000002328306, y: 0.000000011641532, z: -1.6940659e-17, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1} + - name: mixamorig:LeftHandPinky2 + parentName: mixamorig:LeftHandPinky1 + position: {x: -0.036000345, y: -0.000000022522151, z: -0.00000026238794} + rotation: {x: 3.5527137e-15, y: 0.000000005820768, z: -0.0000000029103842, w: 1} + scale: {x: 1.0000004, y: 1.0000004, z: 1} + - name: mixamorig:LeftHandPinky3 + parentName: mixamorig:LeftHandPinky2 + position: {x: -0.021142116, y: 0.00000019538281, z: -0.00000002864415} + rotation: {x: -0.000000023283064, y: -0.000000020372685, z: -0.000000017462298, + w: 1} + scale: {x: 1.0000005, y: 1.0000005, z: 1.0000001} + - name: mixamorig:LeftHandPinky4 + parentName: mixamorig:LeftHandPinky3 + position: {x: -0.019756826, y: 0.00000012405657, z: -0.00000044301405} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightShoulder + parentName: mixamorig:Spine2 + position: {x: 0.045699697, y: 0.10946176, z: -0.026280174} + rotation: {x: 4.440892e-16, y: -0.0000000043655746, z: -0.000000005638867, w: 1} + scale: {x: 1.0000001, y: 0.99999994, z: 0.99999994} + - name: mixamorig:RightArm + parentName: mixamorig:RightShoulder + position: {x: 0.105928436, y: -0.0052479836, z: -0.022320986} + rotation: {x: 0.0000000029103826, y: 0.0000000043655746, z: 0.0000000136424205, + w: 1} + scale: {x: 1, y: 1.0000004, z: 1.0000001} + - name: mixamorig:RightForeArm + parentName: mixamorig:RightArm + position: {x: 0.2784152, y: -0.00000033079218, z: 0.000000116763104} + rotation: {x: -0.0000000029103826, y: 0.000000032014214, z: -1.8189905e-10, + w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: mixamorig:RightHand + parentName: mixamorig:RightForeArm + position: {x: 0.2832884, y: -0.0000000015814171, z: 0.00000055816014} + rotation: {x: 0.0000000145519135, y: -0.00000006984919, z: -0.0000000058207656, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky1 + parentName: mixamorig:RightHand + position: {x: 0.080766745, y: -0.0048845927, z: -0.038060103} + rotation: {x: 2.6645353e-15, y: 0.000000034924597, z: -0.000000005820767, w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000001} + - name: mixamorig:RightHandPinky2 + parentName: mixamorig:RightHandPinky1 + position: {x: 0.036000345, y: 0.00000039676655, z: 0.0000005081442} + rotation: {x: 0.0000000116415295, y: -0.000000011641532, z: -0.000000005820766, + w: 1} + scale: {x: 1.0000006, y: 1.0000005, z: 1} + - name: mixamorig:RightHandPinky3 + parentName: mixamorig:RightHandPinky2 + position: {x: 0.021142116, y: 0.00000015137925, z: 0.00000014793768} + rotation: {x: -0.00000006984919, y: 0.0000000029103822, z: -0.000000014551912, + w: 1} + scale: {x: 0.9999998, y: 0.99999994, z: 1} + - name: mixamorig:RightHandPinky4 + parentName: mixamorig:RightHandPinky3 + position: {x: 0.019756826, y: -0.00000018521958, z: -0.000000009839841} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing1 + parentName: mixamorig:RightHand + position: {x: 0.09103588, y: -0.00043914348, z: -0.018650724} + rotation: {x: -0.000000034924597, y: 0.000000034924597, z: 0.000000005820767, + w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1} + - name: mixamorig:RightHandRing2 + parentName: mixamorig:RightHandRing1 + position: {x: 0.031540267, y: 0.00000023997296, z: 0.0000004885121} + rotation: {x: 0.00000004656613, y: 0.000000005820766, z: 0.0000000029103817, + w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1} + - name: mixamorig:RightHandRing3 + parentName: mixamorig:RightHandRing2 + position: {x: 0.029376723, y: -0.00000041600654, z: -0.00000039660634} + rotation: {x: -0.000000011641529, y: -0.0000000058207665, z: -0.000000011641532, + w: 1} + scale: {x: 1.0000004, y: 1.0000004, z: 1} + - name: mixamorig:RightHandRing4 + parentName: mixamorig:RightHandRing3 + position: {x: 0.026474526, y: 0.00000024608212, z: -0.000000022949234} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle1 + parentName: mixamorig:RightHand + position: {x: 0.09532503, y: -0.00000016312302, z: 0.00000016791842} + rotation: {x: 1.7763568e-15, y: 0.000000023283064, z: 0.000000005820765, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1} + - name: mixamorig:RightHandMiddle2 + parentName: mixamorig:RightHandMiddle1 + position: {x: 0.036982365, y: 0.00000015066959, z: -0.00000022545524} + rotation: {x: -0.000000011641532, y: 0.000000005820766, z: -0.000000017462295, + w: 1} + scale: {x: 1.0000004, y: 1.0000004, z: 1.0000001} + - name: mixamorig:RightHandMiddle3 + parentName: mixamorig:RightHandMiddle2 + position: {x: 0.029509215, y: -0.000000003113245, z: -0.0000000030340255} + rotation: {x: -0, y: 0.000000011641532, z: 0.0000000145519135, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1} + - name: mixamorig:RightHandMiddle4 + parentName: mixamorig:RightHandMiddle3 + position: {x: 0.028339025, y: 0.00000008053241, z: 0.00000053787704} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex1 + parentName: mixamorig:RightHand + position: {x: 0.09108281, y: -0.0051678894, z: 0.022601163} + rotation: {x: -0.00000001164153, y: 0.000000034924597, z: 6.4130506e-17, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex2 + parentName: mixamorig:RightHandIndex1 + position: {x: 0.036764093, y: 0.00000019227156, z: 0.0000003235567} + rotation: {x: -0, y: -0.000000005820766, z: -0.000000011641531, w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: mixamorig:RightHandIndex3 + parentName: mixamorig:RightHandIndex2 + position: {x: 0.028830625, y: -0.00000049601215, z: 0.00000040448975} + rotation: {x: -0.000000023283063, y: -0.000000001455192, z: 0.000000043655746, + w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000001} + - name: mixamorig:RightHandIndex4 + parentName: mixamorig:RightHandIndex3 + position: {x: 0.023927199, y: 0.000000268147, z: 0.00000028020133} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandThumb1 + parentName: mixamorig:RightHand + position: {x: 0.024648061, y: -0.015727142, z: 0.026826264} + rotation: {x: -0.11863704, y: -0.086847514, z: 0.1186371, w: 0.9819919} + scale: {x: 1, y: 1, z: 1.0000001} + - name: mixamorig:RightHandThumb2 + parentName: mixamorig:RightHandThumb1 + position: {x: 0.03229772, y: -0.018647088, z: 0.018647185} + rotation: {x: 0.000000011641534, y: 0.000000020372681, z: -0.000000016734703, + w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: mixamorig:RightHandThumb3 + parentName: mixamorig:RightHandThumb2 + position: {x: 0.02652605, y: -0.015314492, z: 0.015314456} + rotation: {x: -0.000000011641534, y: 0.000000002910383, z: 0.000000016734703, + w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: mixamorig:RightHandThumb4 + parentName: mixamorig:RightHandThumb3 + position: {x: 0.019545805, y: -0.011284617, z: 0.01128507} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightUpLeg + parentName: mixamorig:Hips + position: {x: 0.08207796, y: -0.06751662, z: -0.015995594} + rotation: {x: 0.000000005820767, y: -0.00000001164153, z: 0.000000013460522, + w: 1} + scale: {x: 0.99999994, y: 1, z: 1} + - name: mixamorig:RightLeg + parentName: mixamorig:RightUpLeg + position: {x: -8.435572e-10, y: -0.44370535, z: 0.0028615638} + rotation: {x: -0.000000011641532, y: 0.00000001164153, z: 4.560602e-25, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1} + - name: mixamorig:RightFoot + parentName: mixamorig:RightLeg + position: {x: -0.000000009644582, y: -0.4442773, z: -0.02983789} + rotation: {x: 0.000000005820765, y: 0.000000011641532, z: -1.6408316e-15, w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: mixamorig:RightToeBase + parentName: mixamorig:RightFoot + position: {x: 0.00000002360438, y: -0.08728669, z: 0.107105605} + rotation: {x: -7.275953e-10, y: -0.000000011641532, z: 1.819007e-10, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightToe_End + parentName: mixamorig:RightToeBase + position: {x: 0.000000020942645, y: -0.000006763694, z: 0.0927812} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftUpLeg + parentName: mixamorig:Hips + position: {x: -0.082077816, y: -0.06751714, z: -0.015995556} + rotation: {x: -9.529121e-18, y: 0.0000000029103826, z: 0.000000014915713, w: 1} + scale: {x: 1, y: 1, z: 1.0000001} + - name: mixamorig:LeftLeg + parentName: mixamorig:LeftUpLeg + position: {x: 0.000000004110158, y: -0.44370472, z: 0.0028464263} + rotation: {x: -0.000000011641532, y: -0.0000000029103826, z: 0.0000000014551917, + w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: mixamorig:LeftFoot + parentName: mixamorig:LeftLeg + position: {x: -0.0000000047163935, y: -0.44427872, z: -0.029821906} + rotation: {x: 0.000000011641532, y: -0, z: -0.0000000028876457, w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: mixamorig:LeftToeBase + parentName: mixamorig:LeftFoot + position: {x: 0.000000029609879, y: -0.087286696, z: 0.1071056} + rotation: {x: -0, y: 7.940934e-19, z: 6.82121e-11, w: 1} + scale: {x: 1, y: 0.99999994, z: 1} + - name: mixamorig:LeftToe_End + parentName: mixamorig:LeftToeBase + position: {x: 0.000000025080618, y: -0.0000067668298, z: 0.09278136} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + 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: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab new file mode 100644 index 0000000..8267aea --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab @@ -0,0 +1,4850 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &48886002445976411 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3158603780280599340} + - component: {fileID: 6375075948559094595} + - component: {fileID: 8483029907086489337} + - component: {fileID: 8687440762908259137} + m_Layer: 6 + m_Name: left_foot_toe_senor_r + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3158603780280599340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48886002445976411} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.02, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7200902519591220141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &6375075948559094595 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48886002445976411} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.03 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8483029907086489337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48886002445976411} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d041794481cd24f4d92e5f3da728fe64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &8687440762908259137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48886002445976411} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!1 &963486602752053430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5287265992975624110} + - component: {fileID: 837786529545343070} + - component: {fileID: 4201493407406561921} + m_Layer: 6 + m_Name: articulation:LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5287265992975624110 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963486602752053430} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.1059237, y: -0.005245829, z: -0.0223212} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8726915850983127639} + - {fileID: 982461226543410} + m_Father: {fileID: 1662403427464287594} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &837786529545343070 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963486602752053430} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: -0.10592371, y: -0.005245805, z: -0.022321211} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -39.02838 + upperLimit: 45.707645 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -52.24655 + upperLimit: 84.082306 + stiffness: 10 + damping: 0.8 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -35.551025 + upperLimit: 89.50324 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &4201493407406561921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963486602752053430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &1499194022771185243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6236938740036876889} + - component: {fileID: 2361656389384067892} + - component: {fileID: 7131768230493309819} + - component: {fileID: 5764981685078331935} + m_Layer: 6 + m_Name: LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6236938740036876889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499194022771185243} + serializedVersion: 2 + m_LocalRotation: {x: 0.013965797, y: -0.04032425, z: 0.0061997985, w: 0.99906987} + m_LocalPosition: {x: 0.0012178792, y: -0.051369626, z: 0.009642508} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7244107296329441007} + m_Father: {fileID: 4176204633534038840} + m_LocalEulerAnglesHint: {x: -2.381, y: -4.472, z: 0.342} +--- !u!114 &2361656389384067892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499194022771185243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!65 &7131768230493309819 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499194022771185243} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.08, y: 0.04, z: 0.11} + m_Center: {x: 0, y: -0.008, z: 0.01} +--- !u!171741748 &5764981685078331935 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499194022771185243} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 1 + m_ParentAnchorPosition: {x: -0.0014052682, y: 0.14263964, z: 0.0149619775} + m_ParentAnchorRotation: {x: -0.018638238, y: -0.03838886, z: 0.710833, w: 0.70206517} + m_AnchorPosition: {x: -0.0000000018626451, y: 0.19409993, z: 0.000000044703484} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 0 + m_Twist: 0 + m_XDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -130 + upperLimit: 20 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -2 + upperLimit: 160 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!1 &1994225063198175274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1662403427464287594} + - component: {fileID: 2015231249865073876} + - component: {fileID: 6660338583867514660} + m_Layer: 6 + m_Name: articulation:LeftShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1662403427464287594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994225063198175274} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.045704465, y: 0.10945985, z: -0.02627988} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5287265992975624110} + m_Father: {fileID: 8719916423667245899} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &2015231249865073876 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994225063198175274} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: -0.04570447, y: 0.10945985, z: -0.026279887} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -5.1231995 + upperLimit: 9.474642 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -14.627563 + upperLimit: 37.523808 + stiffness: 10 + damping: 0.8 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -53.567993 + upperLimit: 19.39701 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &6660338583867514660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994225063198175274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &2171824147109647371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1271494809415718833} + - component: {fileID: 1127414539557790481} + - component: {fileID: 3960999987232551125} + m_Layer: 6 + m_Name: articulation:LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1271494809415718833 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2171824147109647371} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527602, y: -0, z: 6.111802e-10, w: 1} + m_LocalPosition: {x: -0.00021497154, y: -0.0833113, z: 0.10032687} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7200902519591220141} + m_Father: {fileID: 4176204633534038840} + m_LocalEulerAnglesHint: {x: 1.904, y: 0, z: 0} +--- !u!171741748 &1127414539557790481 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2171824147109647371} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.43 + m_ParentAnchorPosition: {x: -0.00021497099, y: -0.08331132, z: 0.10032688} + m_ParentAnchorRotation: {x: 0.000000033527602, y: 0, z: 6.111802e-10, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -36.826538 + upperLimit: 6.3134046 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -0.000000035529183 + upperLimit: 0.0000000058857963 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: 0 + upperLimit: 0.00000010677379 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3960999987232551125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2171824147109647371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &2689048127048375752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3209880959380516652} + - component: {fileID: 689695163126716068} + - component: {fileID: 1290925815246772676} + m_Layer: 6 + m_Name: articulation:LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3209880959380516652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2689048127048375752} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000004110158, y: -0.44370472, z: 0.0028464263} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8719785513307943279} + - {fileID: 4176204633534038840} + m_Father: {fileID: 7863943792880575272} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &689695163126716068 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2689048127048375752} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0.000000007450581, y: -0.44370475, z: 0.0028464254} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: 0 + upperLimit: 89.68349 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -34.556 + upperLimit: 20.493767 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -16.610535 + upperLimit: 23.423319 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &1290925815246772676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2689048127048375752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &3618667955577488616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4748051902078584840} + - component: {fileID: 1823160748685434914} + - component: {fileID: 5345799157171613954} + m_Layer: 6 + m_Name: RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4748051902078584840 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3618667955577488616} + serializedVersion: 2 + m_LocalRotation: {x: 0.014421649, y: 0.04016044, z: 0.00506055, w: 0.9990764} + m_LocalPosition: {x: 0.0074659903, y: 0.025514223, z: 0.03958959} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2124878856526149443} + - {fileID: 7975277504178560973} + m_Father: {fileID: 7330895667309991548} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1823160748685434914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3618667955577488616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!65 &5345799157171613954 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3618667955577488616} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.08, y: 0.04, z: 0.04} + m_Center: {x: 0, y: 0, z: -0.000000007450581} +--- !u!1 &3733874705092467647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8014189354646165340} + - component: {fileID: 8544866305300810863} + - component: {fileID: 7190292769614457407} + - component: {fileID: 5084748273341808788} + m_Layer: 6 + m_Name: left_foot_toe_senor_l + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8014189354646165340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3733874705092467647} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.02, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7200902519591220141} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &8544866305300810863 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3733874705092467647} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.03 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7190292769614457407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3733874705092467647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d041794481cd24f4d92e5f3da728fe64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &5084748273341808788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3733874705092467647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!1 &4049109848645304093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4239193890641791696} + - component: {fileID: 6499578195492720033} + - component: {fileID: 2247839371280604527} + m_Layer: 6 + m_Name: articulation:RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4239193890641791696 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4049109848645304093} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.435572e-10, y: -0.44370535, z: 0.0028615638} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8727345808408514215} + - {fileID: 6587772823425485998} + m_Father: {fileID: 5551475452946298458} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &6499578195492720033 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4049109848645304093} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0, y: -0.44370532, z: 0.002861563} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: 0 + upperLimit: 88.329185 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -24.389618 + upperLimit: 32.333534 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -24.646301 + upperLimit: 16.180906 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &2247839371280604527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4049109848645304093} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &4190549850654841206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 982461226543410} + - component: {fileID: 1808420173214174992} + - component: {fileID: 6242672257749564432} + m_Layer: 6 + m_Name: articulation:LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &982461226543410 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4190549850654841206} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2784152, y: -0.0000008942865, z: 0.0000003745891} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8727169760970726795} + - {fileID: 8719610834567201839} + m_Father: {fileID: 5287265992975624110} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &1808420173214174992 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4190549850654841206} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: -0.27841526, y: -0.00000092945993, z: 0.00000036880374} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -39.932983 + upperLimit: 42.126442 + stiffness: 40000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -2.1197205 + upperLimit: 154.17801 + stiffness: 0 + damping: 0 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -37.012787 + upperLimit: 14.80548 + stiffness: 20000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &6242672257749564432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4190549850654841206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &4226232852625651408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7863943792880575272} + - component: {fileID: 2971074736974418861} + - component: {fileID: 7675549159314929443} + m_Layer: 6 + m_Name: articulation:LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7863943792880575272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4226232852625651408} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.082077816, y: -0.06751714, z: -0.015995556} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8727133215876659327} + - {fileID: 3209880959380516652} + m_Father: {fileID: 8719972220993353125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &2971074736974418861 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4226232852625651408} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: -0.082077816, y: -0.06751716, z: -0.015995556} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -87.77893 + upperLimit: 35.09535 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -38.14801 + upperLimit: 15.416456 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -65.19919 + upperLimit: 23.16159 + stiffness: 120000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &7675549159314929443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4226232852625651408} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &4791384792183454201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5551475452946298458} + - component: {fileID: 1279219593241357561} + - component: {fileID: 5371255058742018447} + m_Layer: 6 + m_Name: articulation:RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5551475452946298458 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791384792183454201} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.08207796, y: -0.06751662, z: -0.015995594} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8719625710430969117} + - {fileID: 4239193890641791696} + m_Father: {fileID: 8719972220993353125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &1279219593241357561 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791384792183454201} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0.08207796, y: -0.067516625, z: -0.015995594} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -88.51416 + upperLimit: 35.580242 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -20.447327 + upperLimit: 32.77133 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -28.28543 + upperLimit: 58.45759 + stiffness: 120000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &5371255058742018447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4791384792183454201} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &5607761610354034812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 799287010776281540} + - component: {fileID: 8149641315181257463} + - component: {fileID: 5332134630415139608} + m_Layer: 6 + m_Name: articulation:RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &799287010776281540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5607761610354034812} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.105928436, y: -0.0052479836, z: -0.022320986} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8727146830054938469} + - {fileID: 1198069920422691408} + m_Father: {fileID: 7275751957409819602} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &8149641315181257463 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5607761610354034812} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0.10592845, y: -0.005247958, z: -0.022320991} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -38.633026 + upperLimit: 42.542076 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -69.69336 + upperLimit: 69.44282 + stiffness: 10 + damping: 0.8 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -83.01849 + upperLimit: 16.186922 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &5332134630415139608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5607761610354034812} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &5630317162333729115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7330895667309991548} + - component: {fileID: 2768223422526478394} + - component: {fileID: 3415177543469731393} + m_Layer: 6 + m_Name: articulation:RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7330895667309991548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5630317162333729115} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.00000002360438, y: -0.08728669, z: 0.107105605} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4748051902078584840} + m_Father: {fileID: 6587772823425485998} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &2768223422526478394 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5630317162333729115} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.43 + m_ParentAnchorPosition: {x: 0.0000000253893, y: -0.08728659, z: 0.107105605} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -65.488464 + upperLimit: 37.631844 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -2.1962581e-12 + upperLimit: 4.1454166e-12 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -0.0000000016675266 + upperLimit: 0 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3415177543469731393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5630317162333729115} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &6094053739594975242 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7275751957409819602} + - component: {fileID: 1856326131723110599} + - component: {fileID: 731609966799716163} + m_Layer: 6 + m_Name: articulation:RightShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7275751957409819602 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6094053739594975242} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.045699697, y: 0.10946176, z: -0.026280174} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 799287010776281540} + m_Father: {fileID: 8719916423667245899} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &1856326131723110599 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6094053739594975242} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0.0456997, y: 0.109461755, z: -0.026280178} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -5.1863403 + upperLimit: 8.787041 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -30.036896 + upperLimit: 23.630144 + stiffness: 10 + damping: 0.8 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -22.975433 + upperLimit: 49.699715 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &731609966799716163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6094053739594975242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &6620903151815319636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1073130774394724074} + - component: {fileID: 2854261312110378733} + - component: {fileID: 4961048942146317338} + - component: {fileID: 1340527944349289928} + m_Layer: 6 + m_Name: RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1073130774394724074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6620903151815319636} + serializedVersion: 2 + m_LocalRotation: {x: 0.014421649, y: 0.04016044, z: 0.00506055, w: 0.9990764} + m_LocalPosition: {x: -0.0013827014, y: -0.05172925, z: 0.010792955} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4844628543646996709} + m_Father: {fileID: 6587772823425485998} + m_LocalEulerAnglesHint: {x: 1.628, y: 4.613, z: 0.646} +--- !u!114 &2854261312110378733 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6620903151815319636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!65 &4961048942146317338 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6620903151815319636} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.08, y: 0.04, z: 0.11} + m_Center: {x: 0, y: -0.008, z: 0.01} +--- !u!171741748 &1340527944349289928 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6620903151815319636} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 1 + m_ParentAnchorPosition: {x: -0.003120546, y: 0.14228001, z: 0.016465202} + m_ParentAnchorRotation: {x: 0.038595363, y: 0.018200073, z: 0.71003205, w: 0.7028753} + m_AnchorPosition: {x: -0.0000000018626451, y: 0.19409993, z: 0.000000044703484} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 0 + m_Twist: 0 + m_XDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -130 + upperLimit: 20 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -2 + upperLimit: 160 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!1 &6849119433119751032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6587772823425485998} + - component: {fileID: 4079613823659954323} + - component: {fileID: 2161473540212576310} + m_Layer: 6 + m_Name: articulation:RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6587772823425485998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6849119433119751032} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000009644582, y: -0.4442773, z: -0.02983789} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1073130774394724074} + - {fileID: 7330895667309991548} + m_Father: {fileID: 4239193890641791696} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &4079613823659954323 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6849119433119751032} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: -0.0000000066070234, y: -0.44427726, z: -0.029837893} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -50.36508 + upperLimit: 46.474327 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -18.532745 + upperLimit: 20.546387 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -34.593506 + upperLimit: 18.047752 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &2161473540212576310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6849119433119751032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &6867810242215521029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 582342769611828735} + - component: {fileID: 3770211905496810946} + - component: {fileID: 3411291576965625666} + m_Layer: 6 + m_Name: articulation:Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &582342769611828735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6867810242215521029} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.16671668, z: -0.025161678} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8727036802277262371} + m_Father: {fileID: 8719916423667245899} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &3770211905496810946 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6867810242215521029} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0, y: 0.16671667, z: -0.025161682} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -45.407745 + upperLimit: 32.374496 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -10.113281 + upperLimit: 24.615047 + stiffness: 10 + damping: 0.8 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -36.44565 + upperLimit: 26.645346 + stiffness: 10 + damping: 0.8 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3411291576965625666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6867810242215521029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &7489089680692072573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4844628543646996709} + - component: {fileID: 507438470525538877} + - component: {fileID: 3040214527863831954} + - component: {fileID: 1139824957143500863} + m_Layer: 6 + m_Name: right_foot_heal_senor_l + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4844628543646996709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7489089680692072573} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -0.04} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1073130774394724074} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &507438470525538877 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7489089680692072573} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.03 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3040214527863831954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7489089680692072573} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d041794481cd24f4d92e5f3da728fe64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1139824957143500863 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7489089680692072573} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!1 &7723264387037259005 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124878856526149443} + - component: {fileID: 5092232706459421326} + - component: {fileID: 6564977407413426340} + - component: {fileID: 5230546732845201068} + m_Layer: 6 + m_Name: right_foot_toe_senor_r + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2124878856526149443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723264387037259005} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.02, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4748051902078584840} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5092232706459421326 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723264387037259005} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.03 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6564977407413426340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723264387037259005} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d041794481cd24f4d92e5f3da728fe64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &5230546732845201068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7723264387037259005} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!1 &7922785383300859302 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1198069920422691408} + - component: {fileID: 9173802407982569481} + - component: {fileID: 2896841057666015045} + m_Layer: 6 + m_Name: articulation:RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1198069920422691408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7922785383300859302} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.2784152, y: -0.00000033079218, z: 0.000000116763104} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8727310058112905241} + - {fileID: 8719986123157941757} + m_Father: {fileID: 799287010776281540} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &9173802407982569481 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7922785383300859302} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: 0.2784152, y: -0.0000003320165, z: 0.00000010617077} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -34.16513 + upperLimit: 26.5044 + stiffness: 0 + damping: 0 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -149.99785 + upperLimit: 3.6872184 + stiffness: 20000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -15.978027 + upperLimit: 34.969135 + stiffness: 20000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &2896841057666015045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7922785383300859302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8659199053165400752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7975277504178560973} + - component: {fileID: 4038028182170445727} + - component: {fileID: 4530735733054983234} + - component: {fileID: 305935908308082129} + m_Layer: 6 + m_Name: right_foot_toe_senor_l + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7975277504178560973 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8659199053165400752} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.02, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4748051902078584840} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &4038028182170445727 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8659199053165400752} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.03 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4530735733054983234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8659199053165400752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d041794481cd24f4d92e5f3da728fe64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &305935908308082129 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8659199053165400752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!1 &8721257505423050027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8727133215876659327} + - component: {fileID: 8713267639091722053} + - component: {fileID: 1239497654434244758} + - component: {fileID: 2293727454787031320} + m_Layer: 6 + m_Name: LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8727133215876659327 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721257505423050027} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0.0002762922, w: 1} + m_LocalPosition: {x: 0.005633332, y: -0.20588422, z: 0.0027651554} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7863943792880575272} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -0.032} +--- !u!136 &8713267639091722053 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721257505423050027} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.05 + m_Height: 0.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &1239497654434244758 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721257505423050027} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 9.4 + m_ParentAnchorPosition: {x: 0.005738318, y: -0.015884243, z: 0.0027651545} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.7069114, w: 0.70730215} + m_AnchorPosition: {x: 0, y: 0.19, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -30 + upperLimit: 10 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -20 + upperLimit: 110 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -40 + upperLimit: 20 + stiffness: 120000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &2293727454787031320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721257505423050027} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721382153573412577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719625710430969117} + - component: {fileID: 8712619329714692303} + - component: {fileID: 6032172806317267978} + - component: {fileID: 3512670218709648495} + - component: {fileID: 1672917857352392559} + m_Layer: 6 + m_Name: RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719625710430969117 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721382153573412577} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0.0002762922, w: 1} + m_LocalPosition: {x: 0.0026100948, y: -0.2058847, z: 0.0027651917} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5551475452946298458} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -0.032} +--- !u!136 &8712619329714692303 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721382153573412577} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.05 + m_Height: 0.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &6032172806317267978 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721382153573412577} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 9.4 + m_ParentAnchorPosition: {x: 0.0027150884, y: -0.015884705, z: 0.0027651908} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.7069114, w: 0.70730215} + m_AnchorPosition: {x: 0, y: 0.19, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -10 + upperLimit: 30 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -20 + upperLimit: 110 + stiffness: 40000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -20 + upperLimit: 40 + stiffness: 120000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3512670218709648495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721382153573412577} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cdefdb10ded44c16a6a038694a4f530, type: 3} + m_Name: + m_EditorClassIdentifier: + SphereSize: 0.03 + TargetRotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpaceError: {x: 0, y: 0, z: 0} + RotationInJointSpaceErrorRad: {x: 0, y: 0, z: 0} + JointPositionDeg: {x: 0, y: 0, z: 0} + JointTargetDeg: {x: 0, y: 0, z: 0} + JointPositionRad: {x: 0, y: 0, z: 0} + JointTargetRad: {x: 0, y: 0, z: 0} +--- !u!114 &1672917857352392559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721382153573412577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721563140769238539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8727036802277262371} + - component: {fileID: 260939356137283678} + - component: {fileID: 3604489950590612974} + - component: {fileID: 2572251234220683469} + m_Layer: 6 + m_Name: head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8727036802277262371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721563140769238539} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.1967539, z: 0.003929313} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 582342769611828735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &260939356137283678 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721563140769238539} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 7.5 + m_ParentAnchorPosition: {x: 0, y: 1.2567537, z: 0.003929306} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_AnchorPosition: {x: 0, y: 1.06, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 2 + m_SwingZ: 2 + m_Twist: 2 + m_XDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!136 &3604489950590612974 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721563140769238539} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.09 + m_Height: 0.18 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2572251234220683469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721563140769238539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721655427382561055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8720055471826721631} + - component: {fileID: 8713129793612010291} + - component: {fileID: 7916655283506230889} + - component: {fileID: 3167475662087845531} + m_Layer: 6 + m_Name: articulation:Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8720055471826721631 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721655427382561055} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.1018159, z: 0.001315209} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8726994228778927931} + m_Father: {fileID: 8719972220993353125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8713129793612010291 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721655427382561055} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.12 + m_Height: 0.13 + m_Direction: 0 + m_Center: {x: 0, y: 0.13, z: 0.015} +--- !u!171741748 &7916655283506230889 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721655427382561055} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 7 + m_ParentAnchorPosition: {x: 0, y: 0.10181594, z: 0.001315209} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -6.2253113 + upperLimit: 15.555734 + stiffness: 0 + damping: 0 + forceLimit: 40 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -22.083008 + upperLimit: 25.77473 + stiffness: 40000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -13.635132 + upperLimit: 13.837361 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3167475662087845531 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721655427382561055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721681659342934139 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719916423667245899} + - component: {fileID: 8712313686797083303} + - component: {fileID: 7179770322580443774} + - component: {fileID: 2544420391391284434} + - component: {fileID: 3861834763236872774} + m_Layer: 6 + m_Name: articulation:Spine2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719916423667245899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721681659342934139} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000034574863, y: 0.09100011, z: -0.013734171} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1662403427464287594} + - {fileID: 582342769611828735} + - {fileID: 7275751957409819602} + m_Father: {fileID: 8726994228778927931} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8712313686797083303 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721681659342934139} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.07 + m_Height: 0.4 + m_Direction: 0 + m_Center: {x: 0, y: 0.1, z: -0.05} +--- !u!171741748 &7179770322580443774 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721681659342934139} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 7 + m_ParentAnchorPosition: {x: -0.0000000034574863, y: 0.09100009, z: -0.013734173} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -4.9473267 + upperLimit: 26.336067 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -8.957581 + upperLimit: 10.593676 + stiffness: 0 + damping: 0 + forceLimit: 40 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -12.026062 + upperLimit: 9.640167 + stiffness: 0 + damping: 0 + forceLimit: 40 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &2544420391391284434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721681659342934139} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cdefdb10ded44c16a6a038694a4f530, type: 3} + m_Name: + m_EditorClassIdentifier: + SphereSize: 0.03 + TargetRotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpaceError: {x: 0, y: 0, z: 0} + RotationInJointSpaceErrorRad: {x: 0, y: 0, z: 0} + JointPositionDeg: {x: 0, y: 0, z: 0} + JointTargetDeg: {x: 0, y: 0, z: 0} + JointPositionRad: {x: 0, y: 0, z: 0} + JointTargetRad: {x: 0, y: 0, z: 0} +--- !u!114 &3861834763236872774 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721681659342934139} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721717119359763167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719785513307943279} + - component: {fileID: 8713091803424204879} + - component: {fileID: 4028625926059442890} + - component: {fileID: 4711162523850988799} + m_Layer: 6 + m_Name: LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719785513307943279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721717119359763167} + serializedVersion: 2 + m_LocalRotation: {x: 0.03465261, y: -0.0012203482, z: 0.005413673, w: 0.99938405} + m_LocalPosition: {x: 0.002868019, y: -0.22391981, z: -0.013853559} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3209880959380516652} + m_LocalEulerAnglesHint: {x: 3.972, y: -0.119, z: 0.617} +--- !u!136 &8713091803424204879 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721717119359763167} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.03 + m_Height: 0.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &4028625926059442890 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721717119359763167} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 4.3 + m_ParentAnchorPosition: {x: 0.00075130496, y: -0.030297428, z: -0.0004122276} + m_ParentAnchorRotation: {x: 0.023640178, y: -0.025366012, z: 0.7104993, w: 0.7028432} + m_AnchorPosition: {x: -0.0000000018626451, y: 0.19409993, z: 0.000000044703484} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 0 + m_Twist: 0 + m_XDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -130 + upperLimit: 20 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -2 + upperLimit: 160 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &4711162523850988799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721717119359763167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721736883762993261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719610834567201839} + - component: {fileID: 7641843802677264542} + - component: {fileID: 753357962654151138} + m_Layer: 6 + m_Name: LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719610834567201839 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721736883762993261} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.2832884, y: -0.00000017440718, z: 0.00000037804523} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 982461226543410} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7641843802677264542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721736883762993261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!65 &753357962654151138 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721736883762993261} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.18, y: 0.03, z: 0.1} + m_Center: {x: -0.09, y: -0.008, z: 0.025} +--- !u!1 &8721795517134667573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719986123157941757} + - component: {fileID: 5371229505169230644} + - component: {fileID: 1012036716365501883} + m_Layer: 6 + m_Name: RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719986123157941757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721795517134667573} + serializedVersion: 2 + m_LocalRotation: {x: 0.14572193, y: -0.010789281, z: -0.0033966785, w: 0.9892609} + m_LocalPosition: {x: 0.2832884, y: -0.0000000015814171, z: 0.00000055816014} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1198069920422691408} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &5371229505169230644 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721795517134667573} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.18, y: 0.03, z: 0.1} + m_Center: {x: 0.09, y: -0.008, z: 0.025} +--- !u!114 &1012036716365501883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721795517134667573} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8721806364151867171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719972220993353125} + - component: {fileID: 8712435887441142449} + - component: {fileID: 2819076709843220300} + - component: {fileID: 3411150119855789431} + m_Layer: 6 + m_Name: articulation:Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719972220993353125 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721806364151867171} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.05, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7863943792880575272} + - {fileID: 5551475452946298458} + - {fileID: 8720055471826721631} + m_Father: {fileID: 8719875636317608491} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8712435887441142449 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721806364151867171} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.125 + m_Height: 0.2 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &2819076709843220300 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721806364151867171} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 11 + m_ParentAnchorPosition: {x: 0, y: 0, z: 0} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3411150119855789431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8721806364151867171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8722076229893094739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8719875636317608491} + - component: {fileID: 8690789666678175709} + - component: {fileID: 114263248370519032} + - component: {fileID: 114275564199513312} + - component: {fileID: 4177175816300940728} + - component: {fileID: 4606487679878347701} + - component: {fileID: 6615205430042084611} + - component: {fileID: 6001081406238583533} + m_Layer: 6 + m_Name: MarathonMan004 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8719875636317608491 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000005, y: 1, z: 1.0000005} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8719972220993353125} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8690789666678175709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e2f99f5d487864414a2cc1394839d407, type: 3} + m_Name: + m_EditorClassIdentifier: + MusclePowers: + - Muscle: articulation:Spine + PowerVector: {x: 40, y: 40, z: 40} + - Muscle: articulation:Spine1 + PowerVector: {x: 40, y: 40, z: 40} + - Muscle: articulation:RightUpLeg + PowerVector: {x: 120, y: 40, z: 40} + - Muscle: articulation:Spine2 + PowerVector: {x: 40, y: 40, z: 40} + - Muscle: articulation:RightLeg + PowerVector: {x: 80, y: 80, z: 80} + - Muscle: articulation:RightFoot + PowerVector: {x: 40, y: 20, z: 20} + - Muscle: articulation:LeftUpLeg + PowerVector: {x: 120, y: 40, z: 40} + - Muscle: articulation:LeftLeg + PowerVector: {x: 80, y: 80, z: 80} + - Muscle: articulation:LeftFoot + PowerVector: {x: 40, y: 20, z: 20} + - Muscle: articulation:LeftShoulder + PowerVector: {x: 20, y: 20, z: 20} + - Muscle: articulation:LeftArm + PowerVector: {x: 40, y: 40, z: 40} + - Muscle: articulation:LeftForeArm + PowerVector: {x: 20, y: 20, z: 20} + - Muscle: articulation:LeftToeBase + PowerVector: {x: 40, y: 40, z: 40} + - Muscle: articulation:RightShoulder + PowerVector: {x: 20, y: 20, z: 20} + - Muscle: articulation:RightArm + PowerVector: {x: 20, y: 20, z: 20} + - Muscle: articulation:RightForeArm + PowerVector: {x: 20, y: 20, z: 20} + - Muscle: articulation:RightToeBase + PowerVector: {x: 20, y: 20, z: 20} + - Muscle: articulation:Neck + PowerVector: {x: 20, y: 20, z: 20} + MotorScale: 1 + Stiffness: 50 + Damping: 100 + ForceLimit: 3.4028235e+38 + skipCollisionSetup: 0 +--- !u!114 &114263248370519032 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 303 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 54 + BranchSizes: + VectorActionSize: 36000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 5022602860645237092, guid: 0e791689cf0300c4fbe8be76f09fccff, type: 3} + m_InferenceDevice: 0 + m_BehaviorType: 0 + m_BehaviorName: DReCon-v0 + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_ObservableAttributeHandling: 0 +--- !u!114 &114275564199513312 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3} + m_Name: + m_EditorClassIdentifier: + DecisionPeriod: 2 + TakeActionsBetweenDecisions: 0 +--- !u!114 &4177175816300940728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ddf48037c6c1455a8a163a00e342e36, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 2000 + FixedDeltaTime: 0.0125 + SmoothBeta: 0.2 + RequestCamera: 1 + CameraFollowMe: 0 + CameraTarget: {fileID: 8719972220993353125} + SkipRewardSmoothing: 0 + debugCopyMocap: 0 + ignorActions: 0 + dontResetOnZeroReward: 0 + dontSnapMocapToRagdoll: 0 + DebugPauseOnReset: 0 + UsePDControl: 0 + _hasAwake: 0 +--- !u!114 &4606487679878347701 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ec1e370542a14f3da19024594e4c394, type: 3} + m_Name: + m_EditorClassIdentifier: + SumOfSubRewards: 0 + Reward: 0 + SumOfDistances: 0 + SumOfSqrDistances: 0 + PositionReward: 0 + PointsVelocityDifferenceSquared: 0 + PointsVelocityReward: 0 + RotationDifferences: [] + SumOfRotationDifferences: 0 + SumOfRotationSqrDifferences: 0 + LocalPoseReward: 0 + MocapCOMVelocity: {x: 0, y: 0, z: 0} + RagDollCOMVelocity: {x: 0, y: 0, z: 0} + COMVelocityDifference: 0 + ComReward: 0 + ComDistance: 0 + DistanceFactor: 0 + HeadHeightDistance: 0 + ObjectForPointDistancesGizmo: 12 + headname: head + targetedRootName: articulation:Hips +--- !u!114 &6615205430042084611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ad1013fcfea94c78bd38ee533603b89, type: 3} + m_Name: + m_EditorClassIdentifier: + SensorIsInTouch: [] +--- !u!114 &6001081406238583533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722076229893094739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81f30d0638fe74d3faa981d3a313928f, type: 3} + m_Name: + m_EditorClassIdentifier: + MocapCOMVelocity: {x: 0, y: 0, z: 0} + RagDollCOMVelocity: {x: 0, y: 0, z: 0} + InputDesiredHorizontalVelocity: {x: 0, y: 0} + InputJump: 0 + InputBackflip: 0 + HorizontalVelocityDifference: {x: 0, y: 0} + BodyPartDifferenceStats: [] + MocapBodyStats: [] + RagDollBodyStats: [] + PreviousActions: [] + BodyPartsToTrack: + - articulation:Hips + - articulation:Spine + - articulation:Spine1 + - articulation:Spine2 + - head + - LeftArm + - LeftForeArm + - LeftHand + - RightArm + - RightForeArm + - RightHand + - LeftUpLeg + - LeftLeg + - LeftFoot + - LeftToeBase + - RightUpLeg + - RightLeg + - RightFoot + - RightToeBase + VelocityInWorldSpace: 1 + PositionInWorldSpace: 1 + targetedRootName: articulation:Hips +--- !u!1 &8722159205191571325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8727310058112905241} + - component: {fileID: 8713149678546857583} + - component: {fileID: 7079208600320329709} + - component: {fileID: 3120305894318277066} + - component: {fileID: 7441406051802486673} + m_Layer: 6 + m_Name: RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8727310058112905241 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722159205191571325} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.14068204, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1198069920422691408} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8713149678546857583 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722159205191571325} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.016 + m_Height: 0.3 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &7079208600320329709 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722159205191571325} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 2.07 + m_ParentAnchorPosition: {x: 0.1406821, y: -0.000000001224322, z: -0.000000010592331} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 0 + m_SwingZ: 0 + m_Twist: 1 + m_XDrive: + lowerLimit: -150 + upperLimit: 8 + stiffness: 40000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -140 + upperLimit: 20 + stiffness: 0 + damping: 0 + forceLimit: 40 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -160 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &3120305894318277066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722159205191571325} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cdefdb10ded44c16a6a038694a4f530, type: 3} + m_Name: + m_EditorClassIdentifier: + SphereSize: 0.03 + TargetRotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpaceError: {x: 0, y: 0, z: 0} + RotationInJointSpaceErrorRad: {x: 0, y: 0, z: 0} + JointPositionDeg: {x: 0, y: 0, z: 0} + JointTargetDeg: {x: 0, y: 0, z: 0} + JointPositionRad: {x: 0, y: 0, z: 0} + JointTargetRad: {x: 0, y: 0, z: 0} +--- !u!114 &7441406051802486673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722159205191571325} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8722238855668260183 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8726915850983127639} + - component: {fileID: 8713208573898039469} + - component: {fileID: 348096294373738880} + - component: {fileID: 8388011530406128861} + m_Layer: 6 + m_Name: LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8726915850983127639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722238855668260183} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.143, y: 0, z: 0.0018831305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5287265992975624110} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8713208573898039469 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722238855668260183} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.04 + m_Height: 0.35 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &348096294373738880 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722238855668260183} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 3.67 + m_ParentAnchorPosition: {x: -0.14300004, y: 0.000000024214387, z: 0.0018831305} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 0 + m_XDrive: + lowerLimit: 65 + upperLimit: 210 + stiffness: 0 + damping: 0 + forceLimit: 20 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -60 + upperLimit: 180 + stiffness: 20000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -90 + upperLimit: 0 + stiffness: 20000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &8388011530406128861 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722238855668260183} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8722317409419288527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8727146830054938469} + - component: {fileID: 8712330760681827479} + - component: {fileID: 9218996436316437763} + - component: {fileID: 4610443426903110661} + m_Layer: 6 + m_Name: RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8727146830054938469 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722317409419288527} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.143, y: 0.00016438961, z: -0.004404865} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 799287010776281540} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8712330760681827479 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722317409419288527} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.04 + m_Height: 0.35 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &9218996436316437763 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722317409419288527} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 3.67 + m_ParentAnchorPosition: {x: 0.14300004, y: 0.00016441522, z: -0.004404871} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 0 + m_XDrive: + lowerLimit: 65 + upperLimit: 210 + stiffness: 0 + damping: 0 + forceLimit: 20 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -60 + upperLimit: 180 + stiffness: 20000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: 0 + upperLimit: 90 + stiffness: 20000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &4610443426903110661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722317409419288527} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8722331107733138825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8727345808408514215} + - component: {fileID: 8712459531509080483} + - component: {fileID: 1496666803027742699} + - component: {fileID: 713077432748778641} + m_Layer: 6 + m_Name: RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8727345808408514215 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722331107733138825} + serializedVersion: 2 + m_LocalRotation: {x: 0.034652606, y: -0.0012203482, z: 0.0054136724, w: 0.99938405} + m_LocalPosition: {x: 0.005387321, y: -0.22392002, z: -0.013867458} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4239193890641791696} + m_LocalEulerAnglesHint: {x: 3.972, y: -0.119, z: 0.617} +--- !u!136 &8712459531509080483 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722331107733138825} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.03 + m_Height: 0.5 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &1496666803027742699 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722331107733138825} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 4.3 + m_ParentAnchorPosition: {x: 0.003270612, y: -0.030297607, z: -0.00042612827} + m_ParentAnchorRotation: {x: 0.023640174, y: -0.025366008, z: 0.7104993, w: 0.7028432} + m_AnchorPosition: {x: -0.0000000018626451, y: 0.19409993, z: 0.000000044703484} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 0 + m_Twist: 0 + m_XDrive: + lowerLimit: 0 + upperLimit: 0 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -130 + upperLimit: 20 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -2 + upperLimit: 160 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &713077432748778641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8722331107733138825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8723104234892138299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8726994228778927931} + - component: {fileID: 5211957500806173422} + - component: {fileID: 6567217719409461366} + - component: {fileID: 2284281414075353883} + - component: {fileID: 2217115071777248624} + m_Layer: 6 + m_Name: articulation:Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8726994228778927931 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723104234892138299} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000002519403, y: 0.10083451, z: -0.010008043} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8719916423667245899} + m_Father: {fileID: 8720055471826721631} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &5211957500806173422 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723104234892138299} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.08 + m_Height: 0.25 + m_Direction: 0 + m_Center: {x: 0, y: 0.1, z: 0.04} +--- !u!171741748 &6567217719409461366 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723104234892138299} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 7 + m_ParentAnchorPosition: {x: -0.000000002519403, y: 0.100834526, z: -0.010008043} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -4.947296 + upperLimit: 26.3361 + stiffness: 40000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -8.957581 + upperLimit: 10.593702 + stiffness: 0 + damping: 0 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -12.026093 + upperLimit: 9.640181 + stiffness: 40000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &2284281414075353883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723104234892138299} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cdefdb10ded44c16a6a038694a4f530, type: 3} + m_Name: + m_EditorClassIdentifier: + SphereSize: 0.03 + TargetRotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpace: {x: 0, y: 0, z: 0} + RotationInJointSpaceError: {x: 0, y: 0, z: 0} + RotationInJointSpaceErrorRad: {x: 0, y: 0, z: 0} + JointPositionDeg: {x: 0, y: 0, z: 0} + JointTargetDeg: {x: 0, y: 0, z: 0} + JointPositionRad: {x: 0, y: 0, z: 0} + JointTargetRad: {x: 0, y: 0, z: 0} +--- !u!114 &2217115071777248624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723104234892138299} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8723185548267139965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8727169760970726795} + - component: {fileID: 8712485077113848517} + - component: {fileID: 6114793560261688705} + - component: {fileID: 5846944434897309697} + m_Layer: 6 + m_Name: LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8727169760970726795 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723185548267139965} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.14123856, y: 0.0002654791, z: -0.0020053014} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 982461226543410} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &8712485077113848517 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723185548267139965} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.016 + m_Height: 0.3 + m_Direction: 0 + m_Center: {x: 0, y: 0, z: 0} +--- !u!171741748 &6114793560261688705 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723185548267139965} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 2.07 + m_ParentAnchorPosition: {x: -0.14123863, y: 0.0002654439, z: -0.0020053072} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0.70710677, w: 0.70710677} + m_MatchAnchors: 1 + m_ArticulationJointType: 0 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 0 + m_SwingZ: 0 + m_Twist: 1 + m_XDrive: + lowerLimit: -150 + upperLimit: 8 + stiffness: 40000 + damping: 100 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -180 + upperLimit: -15 + stiffness: 0 + damping: 0 + forceLimit: 40 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -70 + upperLimit: 90 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &5846944434897309697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8723185548267139965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} +--- !u!1 &8957262758816587079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7244107296329441007} + - component: {fileID: 645781955086815288} + - component: {fileID: 7352800360747332016} + - component: {fileID: 2072727049993933493} + m_Layer: 6 + m_Name: left_foot_heal_senor_l + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7244107296329441007 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8957262758816587079} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -0.04} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6236938740036876889} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &645781955086815288 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8957262758816587079} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.03 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7352800360747332016 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8957262758816587079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d041794481cd24f4d92e5f3da728fe64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2072727049993933493 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8957262758816587079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!1 &9031411401833641881 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7200902519591220141} + - component: {fileID: 1323335513679077856} + - component: {fileID: 7864867399915072629} + m_Layer: 6 + m_Name: LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7200902519591220141 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9031411401833641881} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0010333424, y: 0.024781257, z: 0.0452814} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3158603780280599340} + - {fileID: 8014189354646165340} + m_Father: {fileID: 1271494809415718833} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1323335513679077856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9031411401833641881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 0} +--- !u!65 &7864867399915072629 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9031411401833641881} + m_Material: {fileID: 13400000, guid: 38b7ea504254a4fa986e42a7bb16c8df, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.08, y: 0.04, z: 0.04} + m_Center: {x: 0, y: 0, z: -0.000000007450581} +--- !u!1 &9088690635566039525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4176204633534038840} + - component: {fileID: 8208509521937967625} + - component: {fileID: 5042636445878820648} + m_Layer: 6 + m_Name: articulation:LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4176204633534038840 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9088690635566039525} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0000000047163935, y: -0.44427872, z: -0.029821906} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6236938740036876889} + - {fileID: 1271494809415718833} + m_Father: {fileID: 3209880959380516652} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!171741748 &8208509521937967625 +ArticulationBody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9088690635566039525} + m_Enabled: 1 + serializedVersion: 5 + m_Mass: 0.1 + m_ParentAnchorPosition: {x: -0.000000004110158, y: -0.44427872, z: -0.02982191} + m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_AnchorPosition: {x: 0, y: 0, z: 0} + m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1} + m_MatchAnchors: 1 + m_ArticulationJointType: 3 + m_LinearX: 2 + m_LinearY: 2 + m_LinearZ: 2 + m_SwingY: 1 + m_SwingZ: 1 + m_Twist: 1 + m_XDrive: + lowerLimit: -41.13678 + upperLimit: 41.8212 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_YDrive: + lowerLimit: -27.376251 + upperLimit: 16.009623 + stiffness: 0 + damping: 0 + forceLimit: 3.4028235e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_ZDrive: + lowerLimit: -20.541473 + upperLimit: 36.66286 + stiffness: 80000 + damping: 100 + forceLimit: 3.402823e+38 + target: 0 + targetVelocity: 0 + driveType: 0 + m_LinearDamping: 0.05 + m_AngularDamping: 0.05 + m_JointFriction: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_Immovable: 0 + m_UseGravity: 1 + m_CollisionDetectionMode: 0 +--- !u!114 &5042636445878820648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9088690635566039525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da87b37fe0ae0475a99808928afad49b, type: 3} + m_Name: + m_EditorClassIdentifier: + Parent: {fileID: 8721806364151867171} diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab.meta new file mode 100644 index 0000000..f9fd592 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/MarathonMan004.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6a7e84e6b4b64c744857753e3e544b81 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat new file mode 100644 index 0000000..1c34bee --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2464581126296511126 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RedJoints + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _SURFACE_TYPE_TRANSPARENT + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DepthOnly + - SHADOWCASTER + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 1 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _DstBlendAlpha: 10 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 1 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 0.3333333, g: 0.12452885, b: 0.101014696, a: 0.24705882} + - _Color: {r: 0.33333328, g: 0.12452882, b: 0.101014666, a: 0.24705882} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat.meta new file mode 100644 index 0000000..07cc1ff --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedJoints.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c75b8d76b8c90345b5654cf72a22ec9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat new file mode 100644 index 0000000..ee10739 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RedSurface + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _SURFACE_TYPE_TRANSPARENT + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DepthOnly + - SHADOWCASTER + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 1 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _DstBlendAlpha: 10 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 1 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 0.837, g: 0.302308, b: 0.26365498, a: 0.24705882} + - _Color: {r: 0.837, g: 0.30230796, b: 0.26365495, a: 0.24705882} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &229737655439550173 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat.meta new file mode 100644 index 0000000..5dec508 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/RedSurface.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f6fa6aa88fbef742bf021e621193eaf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx new file mode 100644 index 0000000..8bded81 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e716036953a13c17b5c9a06c906efb50569251c294eecefda85dccbecbe524c +size 1871424 diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx.meta new file mode 100644 index 0000000..da84358 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/T-Pose.fbx.meta @@ -0,0 +1,914 @@ +fileFormatVersion: 2 +guid: 65a3c32d6ec98fc479df350fa87900c7 +ModelImporter: + serializedVersion: 20101 + internalIDToNameTable: + - first: + 74: -203655887218126122 + second: mixamo.com + externalObjects: {} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: mixamo.com + takeName: mixamo.com + internalID: 0 + firstFrame: 0 + lastFrame: 1 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 1 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 1 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 1 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: mixamorig:Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine1 + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftToeBase + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightToeBase + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine2 + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: T-Pose(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Beta_Joints + parentName: T-Pose(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Beta_Surface + parentName: T-Pose(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Hips + parentName: T-Pose(Clone) + position: {x: 0.00000007727291, y: 1.0427487, z: 0.015543158} + rotation: {x: 5.5795913e-16, y: 0.00000002135681, z: -0.00000070372965, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine + parentName: mixamorig:Hips + position: {x: -0.00000009234152, y: 0.10181588, z: 0.0013152092} + rotation: {x: -5.5794124e-16, y: -0.00000002135681, z: 0.00000070372874, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine1 + parentName: mixamorig:Spine + position: {x: -0.000000002519403, y: 0.10083451, z: -0.010008043} + rotation: {x: 3.8774097e-26, y: -4.2632574e-14, z: 6.82121e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine2 + parentName: mixamorig:Spine1 + position: {x: -0.0000000034574863, y: 0.09100011, z: -0.013734171} + rotation: {x: 0, y: -0, z: -1.8055514e-34, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Neck + parentName: mixamorig:Spine2 + position: {x: -0.0000000063342855, y: 0.16671668, z: -0.025161678} + rotation: {x: -5.2041704e-18, y: 4.2632927e-14, z: 2.273737e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Head + parentName: mixamorig:Neck + position: {x: 0.0000000042423185, y: 0.09617875, z: 0.016850075} + rotation: {x: 0, y: -0, z: -2.3142172e-36, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:HeadTop_End + parentName: mixamorig:Head + position: {x: 0.0000000065082415, y: 0.17815155, z: 0.025849855} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftEye + parentName: mixamorig:Head + position: {x: -0.030675607, y: 0.06409507, z: 0.09283554} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightEye + parentName: mixamorig:Head + position: {x: 0.030675504, y: 0.064095, z: 0.09283547} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftShoulder + parentName: mixamorig:Spine2 + position: {x: -0.045704465, y: 0.10945985, z: -0.02627988} + rotation: {x: -0.000000044703484, y: 3.8567765e-14, z: -0.00000013563118, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftArm + parentName: mixamorig:LeftShoulder + position: {x: -0.1059237, y: -0.005245829, z: -0.0223212} + rotation: {x: 0.000000044703484, y: 8.4346904e-14, z: -0.0000016602488, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftForeArm + parentName: mixamorig:LeftArm + position: {x: -0.2784152, y: -0.0000008942865, z: 0.0000003745891} + rotation: {x: -0.000000059604645, y: 0.0000000038620516, z: 0.0000017958803, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHand + parentName: mixamorig:LeftForeArm + position: {x: -0.2832884, y: -0.00000017440718, z: 0.00000037804523} + rotation: {x: 0.00022562433, y: 0.000000044703473, z: -1.0083181e-11, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandThumb1 + parentName: mixamorig:LeftHand + position: {x: -0.024661401, y: -0.015750492, z: 0.026824135} + rotation: {x: -0.118723094, y: 0.08687735, z: -0.11875274, w: 0.9819648} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandThumb2 + parentName: mixamorig:LeftHandThumb1 + position: {x: -0.032298036, y: -0.018646907, z: 0.018646812} + rotation: {x: 0.00000010496793, y: -0.000004944398, z: -0.000004780959, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandThumb3 + parentName: mixamorig:LeftHandThumb2 + position: {x: -0.02652565, y: -0.015314929, z: 0.015314716} + rotation: {x: 4.661964e-12, y: 0.00000059509927, z: 0.00000063981753, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandThumb4 + parentName: mixamorig:LeftHandThumb3 + position: {x: -0.019545669, y: -0.0112850005, z: 0.011284921} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex1 + parentName: mixamorig:LeftHand + position: {x: -0.09109301, y: -0.005170834, z: 0.02260073} + rotation: {x: 0.00000007450579, y: -6.7234625e-12, z: -0.000000014901159, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex2 + parentName: mixamorig:LeftHandIndex1 + position: {x: -0.036764093, y: -0.00000006939138, z: 0.00000029242517} + rotation: {x: -0.00000010430811, y: 0.000000014901151, z: -6.7230145e-12, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex3 + parentName: mixamorig:LeftHandIndex2 + position: {x: -0.028830625, y: 0.00000038511968, z: -0.00000042764816} + rotation: {x: 8.452564e-15, y: 0.0000000148742725, z: -0.00000005961137, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex4 + parentName: mixamorig:LeftHandIndex3 + position: {x: -0.023927199, y: 0.00000037025907, z: 0.00000033554434} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle1 + parentName: mixamorig:LeftHand + position: {x: -0.095334016, y: -0.00000033924047, z: 0.00000013937026} + rotation: {x: 0.000000014901157, y: -0.00000004469004, z: 0.00000002982249, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle2 + parentName: mixamorig:LeftHandMiddle1 + position: {x: -0.036982365, y: 0.00000001961359, z: 0.00000017916967} + rotation: {x: -0.0000000149011585, y: 0.000000014901165, z: -6.7261296e-12, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle3 + parentName: mixamorig:LeftHandMiddle2 + position: {x: -0.029509215, y: -0.00000039376084, z: 0.0000001644796} + rotation: {x: 5.594566e-16, y: -6.7223536e-12, z: -0.000000014901161, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle4 + parentName: mixamorig:LeftHandMiddle3 + position: {x: -0.028339025, y: -0.0000003893482, z: -0.00000009504223} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing1 + parentName: mixamorig:LeftHand + position: {x: -0.091045275, y: -0.00043939505, z: -0.018650847} + rotation: {x: 0.000000029802315, y: -0.000000029795597, z: 0.000000014914605, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing2 + parentName: mixamorig:LeftHandRing1 + position: {x: -0.031540267, y: -0.00000006553468, z: 0.00000010425744} + rotation: {x: -0.000000029802314, y: 0.000000029782148, z: -0.000000044716913, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing3 + parentName: mixamorig:LeftHandRing2 + position: {x: -0.029376723, y: -0.00000045458617, z: -0.00000006864757} + rotation: {x: 0.00000005960463, y: -0.0000000148944315, z: 0.000000014907876, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing4 + parentName: mixamorig:LeftHandRing3 + position: {x: -0.026474526, y: -0.00000049804413, z: 7.0705153e-10} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky1 + parentName: mixamorig:LeftHand + position: {x: -0.08077778, y: -0.004886682, z: -0.03806067} + rotation: {x: 0.000000029802317, y: -0.000000014907881, z: -0.000000014894434, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky2 + parentName: mixamorig:LeftHandPinky1 + position: {x: -0.036000345, y: -0.000000022522151, z: -0.00000026238794} + rotation: {x: 0.000000029802315, y: -0.000000014894437, z: 0.000000014907881, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky3 + parentName: mixamorig:LeftHandPinky2 + position: {x: -0.021142116, y: 0.00000019538281, z: -0.00000002864415} + rotation: {x: -0.00000005960463, y: -0.000000029815762, z: -0.000000029788868, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky4 + parentName: mixamorig:LeftHandPinky3 + position: {x: -0.019756826, y: 0.00000012405657, z: -0.00000044301405} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightShoulder + parentName: mixamorig:Spine2 + position: {x: 0.045699697, y: 0.10946176, z: -0.026280174} + rotation: {x: -0.000000014901161, y: 4.3930442e-14, z: 0.000000042395698, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightArm + parentName: mixamorig:RightShoulder + position: {x: 0.105928436, y: -0.0052479836, z: -0.022320986} + rotation: {x: 0.000000014901161, y: -1.2978756e-15, z: -0.000000042395467, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightForeArm + parentName: mixamorig:RightArm + position: {x: 0.2784152, y: -0.00000033079218, z: 0.000000116763104} + rotation: {x: -0.000000059604638, y: 0.0000017611261, z: -1.09214605e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHand + parentName: mixamorig:RightForeArm + position: {x: 0.2832884, y: -0.0000000015814171, z: 0.00000055816014} + rotation: {x: 0.00023261023, y: -0.0000018096918, z: 4.2094897e-10, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky1 + parentName: mixamorig:RightHand + position: {x: 0.080766745, y: -0.0048845927, z: -0.038060103} + rotation: {x: 0.000000074505586, y: 0.0000138888945, z: 0.000000014902197, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky2 + parentName: mixamorig:RightHandPinky1 + position: {x: 0.036000345, y: 0.00000039676655, z: 0.0000005081442} + rotation: {x: -0.000000014900952, y: -0.000013859092, z: -0.00000001491523, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky3 + parentName: mixamorig:RightHandPinky2 + position: {x: 0.021142116, y: 0.00000015137925, z: 0.00000014793768} + rotation: {x: -0.000000089406946, y: -6.1947887e-19, z: -1.3318336e-15, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky4 + parentName: mixamorig:RightHandPinky3 + position: {x: 0.019756826, y: -0.00000018521958, z: -0.000000009839841} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing1 + parentName: mixamorig:RightHand + position: {x: 0.09103588, y: -0.00043914348, z: -0.018650724} + rotation: {x: 0.000000029802315, y: 0.000000029795387, z: -0.00000001491502, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing2 + parentName: mixamorig:RightHandRing1 + position: {x: 0.031540267, y: 0.00000023997296, z: 0.0000004885121} + rotation: {x: -0.000000029802314, y: -0.000000029781521, z: 0.000000044717336, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing3 + parentName: mixamorig:RightHandRing2 + position: {x: 0.029376723, y: -0.00000041600654, z: -0.00000039660634} + rotation: {x: 0.000000059604627, y: 0.0000000148664965, z: -0.00000007451271, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing4 + parentName: mixamorig:RightHandRing3 + position: {x: 0.026474526, y: 0.00000024608212, z: -0.000000022949234} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle1 + parentName: mixamorig:RightHand + position: {x: 0.09532503, y: -0.00000016312302, z: 0.00000016791842} + rotation: {x: 0.000000014901157, y: 0.000000044689624, z: -0.000000029823113, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle2 + parentName: mixamorig:RightHandMiddle1 + position: {x: 0.036982365, y: 0.00000015066959, z: -0.00000022545524} + rotation: {x: -0.0000000149011585, y: -0.000000014901165, z: 6.930773e-12, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle3 + parentName: mixamorig:RightHandMiddle2 + position: {x: 0.029509215, y: -0.000000003113245, z: -0.0000000030340255} + rotation: {x: 0.000000059603845, y: 0.000017673352, z: 0.00000004469067, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle4 + parentName: mixamorig:RightHandMiddle3 + position: {x: 0.028339025, y: 0.00000008053241, z: 0.00000053787704} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex1 + parentName: mixamorig:RightHand + position: {x: 0.09108281, y: -0.0051678894, z: 0.022601163} + rotation: {x: 0.000000014901159, y: 6.934323e-12, z: 0.0000000149011585, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex2 + parentName: mixamorig:RightHandIndex1 + position: {x: 0.036764093, y: 0.00000019227156, z: 0.0000003235567} + rotation: {x: -0.000000044703473, y: -0.000000014901154, z: 6.9321007e-12, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex3 + parentName: mixamorig:RightHandIndex2 + position: {x: 0.028830625, y: -0.00000049601215, z: 0.00000040448975} + rotation: {x: 0.000000029802319, y: 0.000000014915011, z: 0.000000029795393, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex4 + parentName: mixamorig:RightHandIndex3 + position: {x: 0.023927199, y: 0.000000268147, z: 0.00000028020133} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandThumb1 + parentName: mixamorig:RightHand + position: {x: 0.024648061, y: -0.015727142, z: 0.026826264} + rotation: {x: -0.118725814, y: -0.086873986, z: 0.11875655, w: 0.9819644} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandThumb2 + parentName: mixamorig:RightHandThumb1 + position: {x: 0.03229772, y: -0.018647088, z: 0.018647185} + rotation: {x: 0.000000029786868, y: -0.0000065657905, z: -0.0000065806976, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandThumb3 + parentName: mixamorig:RightHandThumb2 + position: {x: 0.02652605, y: -0.015314492, z: 0.015314456} + rotation: {x: 0.000000029804987, y: 0.000010714707, z: 0.000010640214, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandThumb4 + parentName: mixamorig:RightHandThumb3 + position: {x: 0.019545805, y: -0.011284617, z: 0.01128507} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightUpLeg + parentName: mixamorig:Hips + position: {x: 0.08207796, y: -0.06751662, z: -0.015995594} + rotation: {x: -0.0006736767, y: -0.000000022158684, z: 0.0000007132908, w: 0.99999976} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightLeg + parentName: mixamorig:RightUpLeg + position: {x: -8.435572e-10, y: -0.44370535, z: 0.0028615638} + rotation: {x: 0.0013461137, y: 0.00000001453026, z: 0.0000000017475387, w: 0.9999991} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightFoot + parentName: mixamorig:RightLeg + position: {x: -0.000000009644582, y: -0.4442773, z: -0.02983789} + rotation: {x: -0.0006724375, y: 6.846273e-10, z: -0.000000011323817, w: 0.99999976} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightToeBase + parentName: mixamorig:RightFoot + position: {x: 0.00000002360438, y: -0.08728669, z: 0.107105605} + rotation: {x: 0.000000014650141, y: 6.5304206e-11, z: -3.3796616e-12, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightToe_End + parentName: mixamorig:RightToeBase + position: {x: 0.000000020942645, y: -0.000006763694, z: 0.0927812} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftUpLeg + parentName: mixamorig:Hips + position: {x: -0.082077816, y: -0.06751714, z: -0.015995556} + rotation: {x: -0.0007022143, y: -0.000000022163992, z: 0.0000007135213, w: 0.99999976} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftLeg + parentName: mixamorig:LeftUpLeg + position: {x: 0.000000004110158, y: -0.44370472, z: 0.0028464263} + rotation: {x: 0.0014022698, y: -3.3268402e-10, z: -1.3309691e-10, w: 0.99999905} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftFoot + parentName: mixamorig:LeftLeg + position: {x: -0.0000000047163935, y: -0.44427872, z: -0.029821906} + rotation: {x: -0.0007000565, y: 6.3139166e-10, z: -0.000000010605688, w: 0.99999976} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftToeBase + parentName: mixamorig:LeftFoot + position: {x: 0.000000029609879, y: -0.087286696, z: 0.1071056} + rotation: {x: 2.4374452e-10, y: 1.1699966e-10, z: 9.293838e-10, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftToe_End + parentName: mixamorig:LeftToeBase + position: {x: 0.000000025080618, y: -0.0000067668298, z: 0.09278136} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + 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: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat new file mode 100644 index 0000000..76d87c6 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2951126682242351315 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TargetDebug + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.5849056, g: 0.5849056, b: 0.5849056, a: 1} + - _Color: {r: 0.5849056, g: 0.5849056, b: 0.5849056, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat.meta b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat.meta new file mode 100644 index 0000000..5151ed5 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Characters/MarathonMan004/TargetDebug.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 627fb1f9c85d0ab498c358b8ff0d6de6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Models.meta b/Assets/MarathonEnvs/Agents/Models.meta new file mode 100644 index 0000000..834a437 --- /dev/null +++ b/Assets/MarathonEnvs/Agents/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59ac31a5d62fe484ab3049c9aa046883 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Agents/Models/DReCon-v0.onnx b/Assets/MarathonEnvs/Agents/Models/DReCon-v0.onnx new file mode 100644 index 0000000000000000000000000000000000000000..28e097fe693284dd64520e13860a7f7296efed37 GIT binary patch literal 635093 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Ўt#`U$zSB>4jre(-4$RM z?uviz|EBe2;rNd0tN1;02CLzl(8+s2vmeruE20?s>^?ni<;muCR-yLZ z%hW_T4VN!2rw$)a(ElPVaig{=RC8H8N%emu&1VT|b=e2seByX3W~Wj8l5(c|m<}3u z8A0EY$@FTy4W@mngN+=+rYV}^3{GmJf(pXaX}YM@zX|)f`Rp`sw_d~Z|1+By+DBvD zj@kG#g7bPgErI?ytH_H-6RhI42h;4nn3r3`%{fMYkXe$F ztY(rC{nBC%Z4dRqdBQ)gE4kL9v(f?8lmlR_%#Dgit|R`>4w6GJ4Z-`o5C#o2(zB+w zNg*Rl69mOkYOg7by)wqn-1maj#*@VU=U!&}%LGW(Rb%`F-5 z_(EbDarA4Y3U9a!m4ZDy@o&YHPG#`X)1i}6&X7H0TBz`e^Ac_m04=K_Qr=L4@2}hd z)B7v%_%&BZ_TuK94J|D{k9g3QdkgXLc`pc-{YPhb#e!=5Ln=-0Qt3TY;BC+^dQ!*- z%(p3{py@Vp>17XZsB1U-`-TbztqP?}znw?EKm)2Ja0?j@~)YdWpvpAmU z@^n4WUz9>3j?F>AgfN)BN(A`pY*BS#H8^);rc_Id7X-b4H5>ap@qXW+q@okUG`kf}~uhV1i67(DkF%`LXTm>gxu3_nf- zHvD5k#7Z%)|08`oTao?mAGeFyI~7(*h~V0P4)oek0C&=CBr>c6ITtdCtn@L$CC9|r z0`tXCYN!Hb_n%YyX$=^7PZ4Hu&&%sa5qNlu22TBSh53GF8mxTuo<0`aON>-SNUD}D zB%H|xwQu=UV$M`_3kXC}j?61gcVW0zA&=!Mn!KRR4z=$Bq6$9$rx3 zc3ruYHM@z*+|f*WcflHtJ=RGo zR&g_}3n5(UP#;n^3Sd-cGA6oiCkwAe@HTtv(o4HE;70Nd66O_x_j=;!{nA9xHEV#l z@}r~?6Pdf`^`Rs;kL}yXavAk7js0?m^QqJ z6g=hL*Fi~`_xmFxjChhOHcK%$`z6HQ+X$;=%J`~Q&ZPWnJo(hu3J*5e;fl@6*@o^; za%86r<4$O&3XnKc9_s9*u=mJqCg@KEVYvLmbDzzSe9IE1 z#r6?XsU~`6qYKwvno2VRjiIqf5}$c<+?A_>=zEF}-;H;`9uE~vdf|s*+UH^IIU$hy zIt3*5&%_;{2tJ%&OOKg|gWeaeKlA4wjR?(zms2Os$_N;RR!0<2->#ZEk6o(#ET zhoDj?hK-GmMN9d6WF%xVKHgPH3jH^LOuimHv*iq_Jh}vP^_20=tiv=xY%ZykAEtu! zmvF(dKXA%3mJWRo!-C_J=%n_;sAnxkzdhcG#e5E87P?@R@oW<~g^a9;$)n$9BecmKaP~v4~B& z{E4-lT*wL^|4sJ%=D`D{GHPnR1ZqA^#*c<|XnewjT0dS-%I=6XuRL6Uqg8#haYZRu zHyvg(95v{ljEj^plOlJsMo}(A41%(ZF@0Vt?tIQ?p2k09W5T1@<<;SkWRV2x1-)^o zU?VcJLNFN2XFU#W!8KQfS~sj!p?#nQsuQ!|$htB#mp6bF;aBOk4cA%a1Zm(2$^A(IO1|De{||05R2vIF$)t2d0YYcy-o zkipzv%_pgSDtPp0F>9PF4!fJbkzu@o`!W?V!&?f+Bz6~*MhZgb=+W@r+gOA0Lx z!s!qejD4T&3xsTCr}+ za}to4jJhE7Df?P1pp!7ha_!SGq8HiW!ZY<%zx` zQ*q_vt>lIOC04`Si!OaM6BdXy5q{tyv}oAHe7Y@*FCK>A#C~gfU$dOhhgD!#T21;S zTtGnD4L=^P#mkny=wGLY8~R_dnIke_;gt#r`y#;F zDud{}vJ_P3>#-p_eqops!M&ln=peKS_t(!M=KTjzJfww9{4!4S5(njp22aI zVR~#A;E$gZ!B{Q;e`K$uB*zMWUwubsR^P$KzmoXPM<2Y-c+vgIrtqGh4&@iS@%!O) zUbC1a?kJLhivopEb}$iit|}uj5W_hWP4Ep4lYh1j_+eTt7-n&Q_i7r<{kei@YbY=tk1HA)~5sHl8-ljjBOyQM@-@BiOr-&@eBXIpGi#V z+VwCLSb|3f3!%SfE4=dVrC!%KCS5@+YdK>Hf8jbaX4!>Z#5^*INZfeOsMznO5?)>8 z3izU(>UXxTxddD^4Dd>vJ!D?LPfC4%GKR0Y-bY0|9bY1i_7&;m2gB`?_j=P+T(38D zNiCRKSkPzXkJzY^Dx9}Oi!{0@GY9+HX~|#&o`wyu$gmOqI=0Z)YAhZpSH=i0Q3q>u@tSdle?d`Cv zZZ`Ul_CdS(6cEg9X4BpEVbR6_P1=!Yq$_dZWBDs`yzLSZi8@W}7A>NW|DGU4 zHwrQT%5!qGOo@Hcy%TOHbIhVcDVXtiDr~7AW);kPd9mjeA>L3QY`ip~Xv+-7ywQ?# zt4P73JNt;AemxsrT0!QPzNO(|nRvMII39W1N*_;PSx-?FUPp92T;DSbcOH#Go!*P& zW7QezI3|purk!NL(ye65`5>Y!Hl1uccALn@xk6pcGdg1}_ntps*x|_%*yR3`oENu- zZ%!$Ud}|(z6h0;ww`>C?`x}hN9}j4LI}Wv`J7}uEH|^1_hsAw7FjBn^_Hz5+16xUh zXFB1Z_nzQ;3ZVIBBHZ2folYoe<@NuQg@bqX`TN#S#e!}*5E$J|jnC-e`FS?f#;23> zydA@Xwl#D*O2Z6)Nn9il2SrX|u<*?#YU%Tl?Y$>QN)9^{rL*g}j8!p;y|-fW^`ju* zWCq)N<}NNC_(p60`r#hmM4~hK0{09>V{C>hY*M@kLcf30^%mJQU*!j_yg3<%7G%@^ zULPki`*`@8*wPh!*>ultP27C#8JoOi8@a4?lX~l1qsK0q68F9gEJ|0$;phkS%`y#C z?J{EW3)5iCuYfD{u^oHP&OOp?}#gw#llSED|C0GF70Wr$ydJ?x?^|=5&JvJSYB?U z*3;VHnu$97&V3I}x+xBmS0xZf{$BP&zz}P}M*x@2* z~R`s2hAtoXwI+cd`{78%f7RO|B1l zd=-7$C`_%C6(N{^0q}4b=XleFyuis2d0vh>T5jtS4c^dB=jdm`*N+`>v$sl(Hi{}?d?H<&jf$>=%$;!hMFq2156V4c`&>U|^` z8`o}zCzEoB!7VX5_TNhQF|JH5e{KQ636iZfQd0EQfG!GucI8bqcZ8dFj{!<%(&_c* zG4itlY5SQ)gtTLrt>?DGri@@*c=!T*@U8)0IRmI)w+ELP#Dl!96fT$P1&vd6jI$#5 z`^k5MPi~4ZeVrD1S}&mPiZ7A>Rtt{TM}lP%(4WU8tqjDTTV8E2$31srIUmqm>TLCv zxpyd^s9(NHqGf=TuiQ`~1M!3LT}!oc2t#3AQ3+4A`t(Gdab4-Svc zlZ!u1!Q|2sMp6D7z022uM%^{U`~4c&$`j!Blqc!I{;fFv*AqlyMXfX{d?0VBJb4-X zg#PF#B`unBNmlU`Ue6tAOY8ij(2_1g^JLtaYe7C}E$gOSUY9iX2YvtaAt2FohliMOZOcDjq!f^P9u|ZI@w{L!%?~;F9(K} zDbU%TrXW_VhgB-lxJ+juI)z5^20!1VsaLNM>!x&4yKjg*Njyb#IQWI^q0hhOqTHcavTBAkw4PQ2t&kGpcd3m`n(v5(ySvC6 z%{Hh$`3$cPmy+br2l#YoI`(MFz|f-?B(iHIzH2bWr!hMig|%&%79UL5skxwPT7up0 z+UUcT%OJvClU+S!HBq^hLA!qn!Q0d{()v`Atd+2*J`ZHk`uzj;_NQUAUL}QUyB^S* z{8Vgn+(N-L78X?MVpsD7R4Dz9AFDpI67HcW@6OW0VbkHX-6srMZNfP7^GU^dTXamn zL|e|rk-P1IkW>DVSl<|B)-TouoRUPH3ZmhU|2a}{N)*m)wTI3tGVt)PDms0gfDcw0 z;foEI!S$9Mw0k!ach&`-cwJ-0TYpoF>C4gaMQy(7{9`;Y>0M0Rmpk?oBfwUP5(ODI(UjCN9&QirxVDV#-nh#Ad6T@K4Ln=7crUb z+b~~66!3!qEHAx{<>zJ*?eToej0H=`yuZ#^qESwheXQt@d|B9f&j{ZARl$I7ANi#( zRxmFdGhyZGUU)S|$NuDo1Hp?Pl0LP$khW$C9yWMKE?K5P+p#ai@naxV_(|h_l}A)0 zUyC+*-G-XQF{D%wY2uG9)YZ;5X7UGjuj#D^3Lifwe#Az^Q9ouBRWnZ%IJbvO&`Hp@)3jtA1M zCFtBO4Pt2vslanf*i;wDf0&;_lsdaeNVX@6&su_~m#t=I24!+eJrNv?;hf_(Dac>v z2NDAliN!!XbuR0p&c93Pfl)EO$-5M4xQTnN2OAmnql)n1`b-i(tA?6+Zh#<3&adrx zgQ~rXAVI1I@LTjEb7w2(EN;^vajx9n+i5L*yhx2-cKQ{6gvaF-;u^?7s}_3d?o8;; z&Zfd9mQ?9ZHA$+;rlp(I;8#f$37n}Sqj~uSaVs;+#fa>;%++0HrU)4bY2T@a8VDvfxe{0oMg!4xDB0m`Ab=3po#a z(E;|)kRH91JCm4>-=IGntik421=qu#gVN81Vc_jbI$zx$rY$hXfOc+nJwXb}VgqT4 zgbj=@?m+D)9oWKg7Lv&m*X*?!k#VT>fTTJXyD>3{U!eBqDS7knzKHAkb&Qu02r8^Wn~-?{6lOkr^+U z7xFbUzRwnm@0}u7V>7WKJRhz;RKz3WduXC@B?^?Rr+25@5}n5t^zc${&yd|mZXbTk zv7BW&H+B{77ObLKss>nVltVj0m0;ejUJ}n`VZTZ_@K4!&Atz0J(8qq5q)Sglg%uvG z%(~^ASdmBHulhssFY1G>Ry>uv!tHkM@Ib98hadi06`X$5(#><`K=`sju#tA4jUN*+ z@#q!OSLDtv;TS5$j$dH@Cr@Hp?8ok(bd<{IXi%Xhdv?+}ZvQ>47GID0ai05NCRz6x z>}kEu7S&I|rN#|(nP~*;S$&PVV+r}56G|h3p3;q5vM{8UW2pX}1=bHe@!E-A91T+h z)kmFpX15xZxWt`}0b3@Nv-C=e95f0}$EVZP$o21rB+cv${^GnJS#hz{^r{O~p81b% zb5w?1Xbw*bpR(?NKjC_06lB&Qb%;*(wCn89&= zwDXhT%;Jqi;MEeSn|%O#4o}8o^+(aZs*4`kVaJ!@`SO^rMr3(G3R!0F&K?rBpv8lT zv4PpJ%~=idu!Tul32V=h@PRD)M@SJbyIp2Kc;CW@z1z{` z&tFC_>ou7i*a0(NtU#TW5geaM7UR}>;WK^;TVs)gkF#^YJZhB2Syi_ZYcxXgPh5;2`$v*oI3g^s92S$O5&Zt z0BDhZMK6UOz*K2bJhHMH_RMvo>t-6jLy4*I?UFIJ?s~)Cnrw&h33r*+qhc_BejNV( zDh`K@d7wOvfk~Qru*KgPUS(*&z?btlloLoeK4&+iUnNK8BtsNZniQ43Y0_Nx{{0`_Pwutu2iCHzz3^o3vp?7Me!pI) z>7n8nR(bR=6WjWj5GMobA&5c|gJ;aqG$)!r;KKEDHOVWw1zy)LAqBnD@#nm2G*NQ~ z`2unHVewkB@Ol`8|GP|c`)6Zy+&Mfn5<&|bRdLhuScv%ghkcYSfj_(#;`&Y5ut=s3 zb7gAC?NKuGpmf22jSvnYRO5AeMRgw2?NtYRs>{-B!iTO|k0$+4(A^q2HlH$a6A$5bo5 zL&krffI0&s?EGD-cw(|Ol-QoeCx%o|#m$2CWX{hTqNv(SOumQV!P(34{E6QrK4uv# zwAUtScZ~&U2It9@SwcAebPf*t@$seZD4DDfMDNcO7tYqp!2+8%RN?GK^6L3LYBf6? zpB>{|kjuQ`wBAGJzeXAOrC|*U*Ak(r^)_vFabqo&!(r7t7xr8JJ&;wsz$$xv0SAvZ zQ$f}Oay9W9JYU^OMegaL<@^HbaQiIYfM;|9HNX{Pz6mycSp;u7E`AZLbxn*0H11Qppc2jJS^J#C+=J*h$<*Q^?{4qI5yWV^;ceHdJr6LgRoP z%zM#WrkfJtVUtA!su=Luo|5hKhJGjRy3{}ir21L)u*sl#N)w{Rrox4)+a&eB8&DE^ zoOD+y(8)VIVa2^vwtrb3eES#zp+6L`Q}q<%6DEp#i`+24{0jTxs}1-!hAjog{>u1WPwn^2hZiJnh&An{L{J(Q+~V^ZxUsY?27QdZ0=WGu?uk%#p#L>AIwu z<6U~qUG~2-7^}N-Ir#FHfXy-;-1BQA1{WMDEosk5mPZQk`dZnUM^9t#7Xzp- ze?c0L?Pa4!+CXIV4pIEe<&UI#N!-<)I7N(mw>Tz-AIv|IBO)dA#^!fS#_YN9-;D*V zm!TXuDTLEa4_<-xkw)6dagrj{R*<36ba?y33Z|WHrV`RI@bANT+|8aRZw<21{F^cc zP8>u3)3b)a-Wx>4`T)$WjAIOCW3YVk0^B`W1LjJ$!0?pi0aruMEyCk(_o$;>{$8nsd3+2nGPoFy8d74aDSQ~wU2a5M9!LfZ4 z*m?Hb$@$gMxOj9Me%P`Tmps^ug(nT5Q&*V}q4n@dGZhVon`!#mMDQAlhVyU?MmkiX z=rs4nMEPOzt!w&^e-p=ZdqU1q$WeV^%xU#0N=QzFUgFn}?csTl7c ziu2A)hu%r%^g`?|?CZWx%u?Ferl(r?@%aX<9^T09#gbuxRtXuo@`QX;n@(pHf1}Di zHT2J>baJa%ipyyIfaFqH2;I8{s%05C!^o&M;Wd|o@u=UOcT=q{4sxFqXmy*Ltp4e>Iaa)D#IP-Z-KILk&tleCK)E zJtX3XKe2?*2i1Tsj{E6!V?OII(^0(oe!5y?$R32aTKcHW8 z7LogJ*2BJ@PvqHSE-yA|lo^PyL!HA(WP05=9K0Vw+Vn*s>xUjWx-gHfIOPvf`VnAL zwu%)U=Aq5AVlKy`0s4yiaBOxMd;Gqepl3oXnstmYw$%iz3d*UIy*yZqu7k>h{WMe| z65h>u#Oicdfv%nvD>z(kKX)!e%=rq`*P(<}B7^;NsnohU^4eAa zc6ak|VAWQd{Ng0>Sa^!JQdh|O?z%*4-wqLHRUR!Z;nO!dJ$0|vEP~x@ljymXv7~Vp zA2a5DCwt#a#N|?AuzXTJsWo~;^DSbjjcGNr(%>?==&u9ojkKV7>`U@^&vcw<7suM9 zFJ)~=G#xeBg`XO2(0-~q##o6%IyYX~o`Ogf95PKIZ%$vlSd*_EZP>NQ6{uZaFVniAP?y zkC4kd?0Dm^?Z+SGN6_XdlGc+JcO0x2BbCE3lGkS(K-BUr%S8^_^aoZumubRYlPZX-nQp1gmFI%zC53L$SP*pRN zG7=N<=f5%FwO~#^zd!8J^sW$7zxCttoE$WoA|_-!!x)K+YuW4<>ri8l06p`o*r%=D=zHf7 zCW;2r&_ZMUnH&TMbnMV`=Y0J8DI1?ox`TckcW&41V%)@K_(bmLV^V=4k!umMvH{1) zoehyx&DEc(N_24Er9^!HQ5Rm_?;veHWrB~+ns_kO6B`%&BN03N@nl^eN}kh$gsME^ z!13Og?Zb-|vusdLk^rkM$z!=3=gir0_&cEuCiQapHNiqycJvbCnifs;GtQBQIuS~C zao!>mWFL=BXQzE@g*|_6vJc1uDk=zPTJ{VOm0oH560C~lg4?*{jXJL9>kE6W7GbB@ zC0sR4hN6Q#s*IaV5}t`O4d=Lh#ZFVK+mu2dZuk$6iz~rRE+3KeUnPd+c``e$T*4mC z8@0E{7SrwK(Z2!ri1g0_X7IWxY6}`krkXdTw3RbE&6?4s&kXV#nI`YV#7gbnxZj4~r-HYV4E+Joj&w`a-CNS2c ziHwQGJ$BGp8FgMCVY}wOp=nE2qIdQqW}J*OzL<7{T={K=?E~v!>D(J+mc&AGwEqa* zGsyuxcYi0P-P*zrkM!~B$YHEoejEnH>tS&~0M^U*!@t_!(B0Mry!1JwaqLAHdEpNR zr+ZP-`3mk^dzVTWl+v3$#`Njed~#bh1@yn%V?BEJK;&n4{I%AJ91xcwir%&OxAZ%6 zq%sk@)`dZiY%F+=@Ps$^u0$o_C!W%D&J)5hH#SRK!?`g%-zpkos} zK`7Qnz5BO=;h4?%qrnB1c_h=DRh#JDKbF*Z`aJl}@l@t8E5MiY$)tU5CELHtk^3iq zF2*uzhuK_bSu#>|8G$sI@jvsrK>tp+bWvx3pl4NTL+0x~({DN(c2g+Dp8x1JKgeG zf*<;63u*k5#*}P$LsOqc(+g$ARF>;8zgg*u=K_wB&1nhP{>}>K_(bpyzDzp6#>gBd(imL0`hI>5h>rO1cnj}{l)Adfsyevv40|2 z^70Y=(>s9I-{w1F+24 zj6>cnXfivUZs;u{2|u2ZUiSsq+Z#Ym7l?BAPbn!&QRaA2mvIKiFnE1Q!28Jy#gF$B zz&AVzKdyhqzUe(o%f>AtNww#&IBg|Osk#acS7k6U+k&}nzlARI_(nf{Ish{j@1plz zdGaCt4eC8u1?0;Yx^ZAHqx$+JlR5SQp0K$9J3Lw5>rZd5d#^LP z6%MGMAVrh!(CvG5;2D1lwLD@18XPO5m*dtL{>Y}YXJ5ui#;4%nhExduqfZ9cO@~TZ zmdiZ)lPKfs=q!hbZ^ z8a#Z%1pD86(Y-1%@K<=4cy8N9$KT#YR!)t_+VHWMJ(`G{LeJsXlf$${(v*bX(4f;M zm7$l-p}K8tOJTB-Gqz7ho5nJ;HrybGPwk@8 zXExys`}cIx%ou9Tbvoi*zLID;ecZ!wn{Qg5!84s%gp-9*aS2cl-|NU z%?c2fo=VobsG_0oB>v|wk2 zfc$F-qu;`;iOj-lbYn&$w7fBZ_~o(8lX6*lcd`#}{^$p)*YO=SWrb{F;YOVLasi#Z zJ)f)z-$?a*GRVbw&4hLO$1~x35VPS8Yn?#wHs|q35cOCZW<>Aj_d0F%5a z@^wWoiaoHvidmhsXU%(@v-ce><#?dV5ued`M)kuof! z593TxM&T<}X-#GIH+S<6jZCLyo9@uK-Y?9p)5X+ffify;rLp2OPT{!KDKJedNpN7< zW?W{LhrAWP2xF!VPYV~rw>_0)erp3ymAy!-%-b2=v?5Y-QxzpnTS2#aGU)3Jl2huX zRIMeF7uEHg8ct(ixm+9u&x(XUKZeLF?FHDN&v|nbEqH>8Pc$WT9+!zVr=PQ?kb!q| zsH0C)78^YiG^(DbJ2@8%uWl78x8^W54rQ1bw4B-ZrkC;*-;(ylo3ZnbB%hS; zz>(@L*mY-!+`hhz%r;YoohJ8*yJ8aByKRD9OF5tFs5-Vj7RPhE(@cljcv@E~OT+FY zF=sS?a68VW>}ub0?B}Ll4s803n|+I5)XQ9Wy2P2%HG4SL$UivTQbCFh`)JoIGx*dL z&5rD9Ac40`X|sVNPO6#)k-G!A?ne<>TT;V}edB}0&zgCWb6Tm&#HCox^Mj3_D9&H# zjmEpjP@h}VsQiD4L}F4nwu2Mitjwp|t+7SUo3whII=1VC zLDkWNf?UHoD&`~(A!6gmwJ*m|-=+w5mi(dBVgsbA!UXo!XOSsJE!6AqJ)#ra1cy5n z;cjOrF%)}Emz`BXYbTaGRnI5C6xYKg{aBos+bwY3KLzuu&a>iwv+3E=KTKVfENb~i zVc5rVdSrDQ`()k{YAogiVQHs`+ooqUbdEB$43MI`;@8pMyKbn={oKpR3@4qcq2*Fv z$b7CNJsMzuTfg>z@6t|kl(&r@PYa{@kib^k7}6!*yWC-qvU1MMzD4S z444r@E6&E?riG>;vEdc%nl1&n_zn~PkB}Sh++dcbFDU(PV`qO}h*|qenG8RB=+))U zggbY@v@bJI?RW|K#v3A6d6`5#vYnWzR1z=C8f-Ohz4 zpMozE(^VqGy2q9Dbxb0n>*wIpZ_DwQIS-^w4dC(gEVR^VBj)c)nM><8&=Y->J`0?O z=h8VJSMndC*V#j_hFw8b=@Ynb-7s$%&w+^S=pcuW+=77>*wS7zh4((raSrnE|Kwc>csgn*P z2uWpFHzN+6{gzQr-HpUIJ_fsAO(yNLU2xyD7x?G0I-U{rqo-qEpu)#7LOn-Q?719` z7PGoBu4=0AR3uNh^rCTpBdH|JRQ`k>qAJ2Eh3)uf z=p^-(OQy&7e8=}fCEo)oMyrn%R$U6mGPiUTc#Ri2 z?0Cr5oZBKax*3ECQYARP_B)0-J;beNigCexEp%&GDKsxO#$W&Bgzu82gmE?o!t|tf z7;5t#FXY>xit|%kIk*jXM~9GbcMT-(MyZ{$DsJ79g;!=eVM;_f`u-F_qqecMq$v}k zCr%QsS+0TIv-4>1ML%k4(}G{uYYWxs013$v5%%(Bh1dV9K>zie_Qc>d%H*uTI|~n^ z(K{~ozHSMscYnh><0XV?X+bzvZUoCXRMqSQVR+wMN$68if%E>GgD2*mLhlu|crc)d z-aXcXrvCA`!R{X&(|evK?)Zl;iLIzLQ&KpO$_O8Y8lZ}K4ZS(x8g2|tV)7={BDK`R zTsDInJx#&7uQ|9wX}nOb|2fVwv8To-tI9UpnrTm6hqbyDIH>%Te%vo7Ol=IqMu~;kDjiElI1G0jZy4{@WunDvL!ryb z6S(S@I4h@^_?i~ zega>XMWELm8<;muOsH7xf~&77U~-$_JojaEQ)+7<~1E`DN6}d-;RMr2U9)|zFpB{nk9=mq?TZMdAyqWzQs~#SKUco&6 zEcZQ3!Gm*nZ0<4gd-_#c-5-U*oJm5*+PT6u3svF025B&~F#~;zAj~-)A~d;`0?VCU zsHx@!d>j89*F22@jmk=FG&)FDy`Bt(aY7U`6u?S21s+d0&+sJ`rpibGXN*xH_xt={ zWyucE_LxXVu7$uts|=X)p&f1--C_?IYf#O1-(mHaP*BN>#B()HFweW3z3m)=vjkU} zDUvR<#WMu>McXl=x{&#ECmu|f%JP5A{Rr0fr^))0m+{n?gCPID9IeV7NvxebKXaKV z>P@_ivPE2u=;{Hqv=7Aj_X&Itia-%bMG!kLK%Me7+;QzZkyz8t3RmfYwv?FAb7ls3 zTVAFc#n0pJ2bY=lgQaw4fQE4Y7fD!K6GnG`v#?wO zU5zQt*i}uGzg57u`X0C$VNS@{vrG+llW?>z%(*H9>O<$L@Lwso8GOKX!2^VM`Vbbh z#>3E*5Gu9+sa>JEP&MHoTwQBR$`@GUO2sSaabY_Qp#c=Ha3xgmP{8b-!#uptrytj@ zCkAU|=((Ccs$Z6f=kAT-j#s^O8=H(5{u)^Fa25%H|}o6l7(Y1 zcPfJ!#&4*3uL51a=OV~OU%>Arnbgx_8Yt$+1FvorEmp+BP^22#b7#StdTE+>$Qddx z{=kCfMy66E0iPvsv&czYN9NsaX!+I4oH%BJ3mYEbB9Uq`CMXnnrq|fL$5Ny?H8#q}PjW+;t|&sDy*&bF>^R1Tml;}_`;Z0r zmmGBS1v+yBnnN3`e0&z=Qs04X=O<_xmnWEf=M;@{qL8kU!?XNw2H4?L*y&#d6BA-F zVZ~CqottyC{_;XYj!hY#ehTON6q50}(ahlN_dH@4|ra|*?J)ALJMMf=Bag#8a+%ca<7rs>DT+(ki2ghOzezX<;g{q?3vDdh* zP6w9k$-^D-hvBa4dEj}Nf#3bj@N!EpJNC(6GT>~B2dF9X*32T_;}=7Dwg%4JmJQnV z5AmhvDq(K*5ELlRqizjF^!}V%VCG_iXK#oLoxYvGcVj1W53g9V?&ft`7;BHVSzJ%< zZWul=S%D$ZEf64D#hy{(-oeKWQ`7Bl*njU%5v4h~MD=nK_hQFo4yJ{`Bm)*+Z9NW` zI>!;`S%sv>aykk8R!zG8y}*0BbQxmB@jvhVB9p%kv8M-4(Vr_HqK0f3-MaB7g3tyF zhZaL__Aj`YuS=@rd~tWTK5FkzhhV!S*z@iValB&5SNfWSQmf)1YxN=c<+PALFW*Wy z=hQ7Im2TvEQ7P=2r5!lkbSyclmMT~uI-Varqm8ckv>IaPCqVhvR0^C9Mn05e1G(QuYOwdtT*){V;FVz>`VWmucV<>jr*7fIx<2IE*? zL9N4QqWhc2Wh0Joo%>Muk!S$_Ee<9L`>*1L_}6ggN<0K3=WUV=qRQE$G~xI@=!#uM zBoAxCL66P!pN>1My|+u?wZNV64{N1m_pH!rpl@sw)%$S-!resq@UIL4FWsZ2<>FYz^~f6U29p=Jow#mdK7PO6EjZ`8 z6Enh7;9yxlX}O~TCnrpX_9suk|C0`uL`w*}vJMg_i%sZyhWkwOeTYeALv((YCgg`+ zr^Y`k@MuXO@)I7=f~IZotZW*te(1u=ILn~G#QD0j@ z41GKu*OE)EfM4-&_H~2R>8On|C!j?EAY{!|Tv2F^-TwcKgCGMPQwnmk_a}C7PI%zOz zivfHMu*17ki`eKNI&9L_!-$C=fY`7q5EwObF3>iCQFA(2el5obPP2t} z&t-(iJ^wJf&px5G3=2(y50E;bkN-G^-o>0#cxYfUzjc!+S-I{W^YVHY(0g7uK3bMk z1A2 z{jbX@KMxf}tAtfa3rS`3a&Wzzg+8BRIF`B+-{>XBIv;I^rS~$)_m*0!G2;SXM$7{~ z%}l1H@f*=UVjlUq%@zaHs^}gX0&D#BSed=c;B2ZH&2PJba`R772lErA8d{BTd#Mdp zeQBf;O6_!7k_;-Y8Nl8%(b$-tT%zLM??8r$t_t=~& zC-FhL>K=I@s{lRY#9_JET#S=%Mu&<0RNiG8-I&sj8DGxh`a>P0I4&E-@32&ARtGfQ zpACnnUWAT-CG6R@5xOdB3{Lwki`UOzq}I)Ifsx-1O{u%_VJMe@_|gMge1>R|eHV&} z7r?3ldAvS9V~|P?ES2`-aN6-tG;$a)B-=w7bv?>E>+gmLsG<<}av> zKfw%slZNT7&9t85w!Esyr@68^{B_$+>56jB%gq?WrH!T#RAWdU&l)8Yjjv+=j_)LI zl{)`JuN^E}A`L&~OCeqL7M!>pFR*$p!jImQ30cZD@Vt7E2rlHpR$V1}^4wcEhZ&%H zeJq%UOhn<=dyI#%9L@Wu!wLd0$ovAIqb#8QNe`?tY+!0cP0``+Z76D0 z;UC*=0?)+~QBu%ERvYXF6t80T?|DNtrbIz*!x`ZCS~#jNiwE^G;H6-`z;~`021JHo zrNvt|IP@>Rk6g@UI!i!TmE+vc<+2cJBkY1xXJMds11NKzG9~pe@>S(K8D8%R{OT8sJinbd=AH-nw`db~{<9L^cz>N}GmFVz zPYN63t%Xz8pToC%D5K=rfd8F(K^sJ7ftM`zY(6R_eB$~Uj`_|NYBaqd%sX^I0@35IKSy8!PD0 z87um?&7XH}L=H>1&%PZ+S!kP|gEs39LVxbR2p=E*rW0&t)~#rHgqzPvkjko^R9j6SAD)}Sx5O^cEi6Nu zeK#=s)p(rtFABZfy0Q54VW#iOPN+D)8Sd>q!ExfV2rpxbFwxIn7-#z#9}M~vsd1u0 z*+6k&gvv}5U7f-|v1OQTJY7a(v-QCLS0DfJ$zssf`bIzOQpTE+>+fuKK5u-GAicZQTFK>{90Q}!fl?_xn&lSMF&-=wP*`wCZ5Bs#UjjS5q+>P z=p}2|R$QQ50B5&y10y?cTHt1Z%NCu4&qp0_M&bd`H|e0!`JAKp^#HT+`zI=HzKuT6 z_`~88OFW{n98N1&gOu$|xG+44Ul?P^58Zp41WK<1y*(u?u$Sm=zsum45XY#wKZ9}g zo6#$14J6p>k)}pH{&2!ku&qy2FdZhVNW-ln zZ@ARgieXE%u%>em7HHguO|?s)XQmbm$&2E`j%6@iEC)xDGY<@}2MH85!=VSSGrnWe?vzPS$?51%smaO|0518?K5&gouLx{*T zlw-#6jTgt`e3x(N8skm`sR<Heu3*iQT{TWd2=olmObQV4a@Mq9ADh`b3Vu~KR|u9*W%>$m$3ix5B77|V!W_S zKuZ3!l8wnLVDg0pe7n5+oLgzPaE!w@n71U4^uOVQPsvm2l)n#S90r)n&3$0=Z7N^F zZ7%BW*~s*1wzEa&r6Ax7H&FaO5njAiqWAx1fz`i6Q16<7A0x)_-}Q)tLH}5=FxDqR z&TVcyKZ-iKe1)Z7eq&cE3z8j|8By5?dhuZvTYr5AcbyzuN?XOZuMEd2uOzTz@^~yN znSdQPh1hvPhTNK8hIWc-tb^ijGO*wQ{8Nr3rk}#$v4t@-ons-@sUHtc6-6g<4SpD3 z!xLG_yn7y&q-4W!xV27B7^GMPhj%@PrB8Kn+&~eX{?Q)wxASRn{|6e^(gijmemHty z2&X!>!`Fv0c;RX*jQOw@hIlO~qiifZvbhMyzE~-&f2Bs2PqKw6Ipc-DR-Ymh4Obvv zJQR0zP2$VXn2EVp8VQ63;hZ^R`Qs7*hH}E#spq<>@!%FTY`R5{$8MlzU)I6hqm8&= zoeC5gcrp&1DY$m&TT~Y~kqYCvkTkECo;N*8-CA#Ac2^O^DE||b)VET%3FCz+Q~?Hp z_R;Hi=HT)b_0V9ljJLt83Co(fSxcTjUY1ZKvu13ki~gI2OU%L2duQ}tRvHHTB;|zuU3*S*U#bowK_h$0xR2lT3cCuGe zhreWN3rrO)fEf}^0*s>=>9?Cd#XqogMd*&P;7tffA;~F**L%TPGAKp$#+hqRHpdli7 zq5&OSTS&rT9cDqr9WtM1$WJ|c3nzPv^4qti0&cQ{+STW2$D7meJyDV4R4YKEe;VC% z`Vhn&OBLQd`VRM6?1wS8K9Odd-@I=5al#p!m0`GhiojOx0Ev>h1{)$Shg_ z@={R!aXob$7Q@Ef<*={tK3;g^jbW|^*xY`Oj;_CsiZ3h#PmW)po-^BF+_kf?Vu}L9 zd9{)meN${7N3|dx>Uj z9jsxWgYDuQ!3S>c z>uQh!E5bK(F4_C^V8Z}j{4Rt&4%+6ODt9YGl!1-R*XmhYz9U7_pkQRx`jT} z)oCGSriG*X#B>^DBE`>`mPfb#(ZdP*Pm((AMvGUe(Yaejh*;lwdhGgA;Vu<( z>VAsjyr)LvF<0a|fN_v#VvGOT^kZg=44nVA9oCME0O#wo>Ry}|fRa@jo(?j{?q>sZ zE4M$`b})y=t?z`UoKS3j+W^lGI}yt%+b}k>h`tPSfpsYrWQfZr?kbj~2a4*5jM+ly zO4G!^1A{QTM2g>EAWe3TTY}_!51RQ~;T{(QYU!yCO;duQB=9}!RGi2zZQ~I;#i>x) zqr^ts_{wfJUkJC7|IstHR^+*i8C1oI2qSZ6sn^07NNB8qoLn1n>Td{G>Q1HJ zTM{rg#GJnHQo&`9kHB+(Q~rZT9WZ*`i=KD$DNRu45$_ z(eRIyiWQQ7Iazo{vJS5u(nXhPQ{kaa4eki%oM6jcaqVIW+&d?N9PqP-iSqI2R!M2@ z0)42j3*%xJ94C3?1UcWL3@)$EPzP&i{`%0>@O6;EhTAc0_0(p%SIrZmXIGFPyLH&K zsQ2{sR%yER!U1}0t_cbq)L`oOe>nNbXPl^D4I(y(wV`8$R-+Szf2!6o*|vcwb|wuZ zK6>N)H9v{`ofa5xc9O?LrQ%xUQ?T)(7#`SZ4~)qe+ImD1S1MV+zf3Wq@v2hZy#XnH zr*i>@eVB!7kA{Fqosp2J?FAQYPgXi6419g%;cr9{F>K$2lLde9$djLpc@&ospHqk{ z#w`F()`_O=IY~6f9w#HM2C&z6GyN-lpDA0%xhm?)A=6Qlzv^Ezf4BdBtVlKEPfHHt z|4IG8^wp)Km0px^{a7*K^VD!u-p~SzD$9k=f{ntWL#{a7d4jy!Z9tZ7*~)RvUoxTx z5T+>g((MoAaORIe>RITHBOML!YROa9LQfK0hpeI4ct4jr)x^-rpNLb%QY5c$fl0SE zm_6K%1>Qi87YShT41EldHX*_G_lc%P7PfXUpj9w|e{JGC)b6aJM)Qu6LUB>N-P=o* zVngAIxEHLw@Rz2pt%ZjnPsvy=ZQPm=g(ojpP(N}Lw%Uu}pPX7+KPM0levhDP$0zaU z5{X?Y_WdxEI{%~gYFpe;# z7!lmct~t|8BzscOKW_$Vj|rlcvn|l`Ts6(QIfkERZUzTE6|iGc9B8jiA{IY(px4G> zn)yW)(%(7L9Mpq4C@KSSR}uKOS#^_Onw+;N>`2 zW%(PDG|muR|0gtCTpaBzBk|gJf4FnF0lYl#2tMr9!bbllY}vaG9!wO_Gw#Rm*x^F5 zzAcCt4RG_FY!eLHe;k%ss*-sP+_T-jlR6y8!S#V}iR|f#_&sz9Dv0Ofp+9x_v}!pv zOGSh5>oHhzPz&#BaJ;;O_rdbfB8)PNg)}==3NQ!jCFQuDhYvc;Q-e9iv(PX6Gsm2X zh9%|uVDnu~p^Ho(oY)%#Y2mqafBrVu3YLETe<(T+ zf3E&7jz?A~vr?f@NGNIGzRy)5NzqU$3DMBj7L^o2vdhfg%AWUqE{cqb5|y;KlzdBj z_}$+h(4)x5J@=f~>-qGf@d2e+<=ssJ(l6tR3TNE7*O1S0OyLiZbUatTn15QngpM@) z17d#z*n@Z)XFE*5k~_2Dm*^?B|D6b*c}huO&&XpFGgYu!^`odm2$!WBfG?iB;_On3 zh^SdK#6C5~`QtcxO;Lg^d8EdxdNxq~d7|uDXFrDC3nd}{JfV7eJbf4+PAbmqLdQ0B z*z-^y7pJsyn|_XjV>>?5`^v%S@;4YygpT6pH7^qOb6uoF=^QO?H~_NYC8*GDfUC7M zspPrqpkSuXK4kLovr#VX_jyD1H3VRk78POeAm2mDQce-9inDY;e z=8IoQ^Buh=7?Wj#S#b%>FA~5=Wjuo;9==p1tD3oAupEx+9mn(g3aQea*D!D4Vl3ZG zA#c%Z7{A{XTrO{h!CG6mS&$Em@&Y32Hklm~7a_B>XK*^P+u+H|0=ViNLq@K+2pxw< zv)tQX!UnS|cL{hnpCVViUvfnw z1TR6@;x*@EeKksR>A$J#bhf3x6L8#}C)G zkP?#%bV{QS_ueQ0^KH(9@6|HwyDf!|JNwbp-wqAleZt%RBiV;a60rM4mN1jX(M#>y zpvb)oE82>%a3BDCi8XmU?+Wx^-UvhWcD&eN2Yza}$7Gi~nx62lAV#Z8xn0wKawnV` zP_AbgaHA>b0kXWo%By&MWdICkmSK*x9xL|bAAS0O$BE(B>5aFdKz0ahuSY!Cj&s5X zRnu^}moD_`0|Ys5$M^5|z{@g@`1c+M%kT26$IOMWLFg$K>gn^ZD$e7O<2*d#6^gS= zO5jAh26}$GfDy;sap1T-w9H7vr&Sj~VuA>${xu~bS!b}kA+<(ocoeP=nTCM{)^OcJ zAIy!!X;EGjO*?3WDWccO$psGh{kjC{&su`;bszrRWCp7{0@1J_8G^!vo6@=_Ja{t# zCV9JJfK@x3;a8ykUm9!mhWfbt>ziQO?rda><)sTs#oCL%geAj ztpQXw{UVJc)=*VF1%Ce12pIg^fDzyJ^2Ogo`F|QAtoEW6WNvpbxMlUBuhB8q(!PPJ znaYC3w}ZeX9ibn)XM$PfC>GXbaXh+xBYDtnpTVOBlb)u zYZI>EUVC-&U}qWmdyz+-$F~KRWH8+`&K1hLPT=m)K#WybQ4{3mLS}7KM>VHfblD&a zRijs;ilQ^kj~oq(Prs6HuI~_zj>8SUX(V3i87IA96Bc>7gIaMs)G8X#q@!Z++OLR6 zYvz-w5pj5B(IyCUNG3!3sv$D#A}C#PgmtpAysF7QC$}xO4P)0mAs06L;R5G)db;8>_oG}K9yk>vU!g(RAq}89v6wz}B-&cE zFs9F+z+YQg_MY`;#=l1lKaWmDrSM{~{&0;8^O1vD=^bEhzn8v@)d1sT2kB1H6c~Jx z13Qz?P@ASpa3bnBtoSw?rCnRW=1V#Rd5p%+88PJFgHkx}b`;mWo{U>`7vRUTZc>^p zi{38&_-@`=wAL_$5B3ZmR=$W<@fu)jn#;V&)Q9@Jr$BMO6$Gwv2B(X{pBL@|rpvdW z_s!)vBkU(pt&+jdQhv~R!Wm!Zh0fn^K8C1#EWi~aXQ}at_cZaHk>G}3OO6e6GS3d* zr*G;CDJK>Lf$Q6e_t!f3BCiX4?`de6@QI%9ATSW(3$y=C0F{_%k}&x!R%b^;#$|6} zJMlZ3Zx{RwQ?8KL8UiDFPA5&cnS%IaExO+|;5W{@LKZJm0$qcPM5XIG?)st2mMS`c zxwS4y7QYCemX3uxL%V^StjJpVUL&q1(tO6b?=-|i7hiWtp;O{{+Jv4^oTLfI_I#$s z`MYREgd66FTGOjx!#RxM>soDK#p+hY2Wv;E82#59N)=D}Q z&~NGg$jsSI%pRS!G^hM4vg>z%+njcEu#td_XW`VZQG=cJd=0%k-wK@~-@x7X?i{1z zK`MQJ2z~q-3~$uIYE@q%;j@qiX4jK>Wi$EMg^MJ!_4sp4ukI(KIo$XW)H zs@2(WX>l#xthX6W55J)rT93i7Ns*0N%VSjbW2l=w6rX%HaJ_c4MH63@sBe2 z@h%O&Y*l9c4HKzh_zohL*1<_7o`Y_K6bu=w;t3G9J{RT{LTWf}Ha_zPJN z1FqWU6*YG8gz=Y}x#z8c-23UNIQG`x+5*v+oMgci>=CkuF@IlRGeg)dR#gJiE}!bg zN`jgAD7@DtjVl%3k?eJoFy;FNES=Q}Ey8<^?rAmHd20k7J$#LRExm-jTkkT(T3<<= z=ppWoZ4U9oIMm*`0>=6zkt^#B83ob?9GRDO-*o*K1F z6XsA8NBBv!KskF429z4|zs7$gw*C_!z$c4r>+HfF&nDPA;y#@)zKlLx??4L!I^ef& z4e*u>OwY1H$FJKkUEPAGON~(BU^AMH3ui{HS_46&>oF|;F8V7qG0)cv{W-e^eBqu- zT!%d2rF;kO-!qYYowyX0j?jP^=e)3{?v21l--T0sV(>|JIYwmaVT4R4+P37Q%dO4i zcojz?~9n&BGC!gYd+?6=qGjLH5f=$!|nxb?AR)70IeI$S5!|=OY^l5Q$E54$_`q1!TpXxVLtOY0s1TBJjWmk%mG-wI1j z6xo~3PvJfNO0y;N1y)=b9C~F6Tig6lG2k)rIFm~KLZV5>)mXx={0Ke!9|GZjlCb}eS?&|Ot`S%6}p-@<3Q5_l*JZI z&uOMBEk?u5Y)vLRRg~2?vK9VGcd%=`Jilbx4f6Ty1DbenJ9tE7!cy;B zgODlfxvh^(Kz8q1f&DFy*~Tw%ijoK&yE&8owHl)0T2t7S#g;YG-2L&ega{s2{Z58w zDZ+8i9EVMgb1FAP*<(A!@oB;xlB!?<=VKz_?2|O~F;HRK@18=P@5;C>d>*Rrz6Os} zRuf~1T)3Ak@KsEBI(KaroxXYp<6N@^?HhVQUUVOM!&PHxyCwvwSu#n7ChB{JQmpKgYqbos8++ni_(gNh(hGhQ&{@dkAE?bh>JttriAH$O>>_jJ zoC;sPu%5L2SPD)unlRm0__}1aphJ5hdd^G*zxjIf*OSNG=k!S^9vY3leOFLkPYJ{p zgUQ}aIgl7Gf^p8HFitj}&TeRch5wxZ-ZOyi(e#8JH3%u2XW;SncwD=(f>Y}-!=t5Q zRL|%U?%g$k-8USJ?@tRI3$<^|FTY(()U763eKHmP93)H!e%E)sCy;w5DQMh-IMd_xz&oSgTO(^lPhIb4QvF_t>XN@ zbDrcIGm_nDyM}U`O1U+Ks@VLoz;utZE4Qpf4>MLxqn|g)u#KWIurw%w_3g<<5${!W zl;VB($O|RCpkP@3Q-LjA+(!R-MiZ4^G2qdfj$*tl@0sxpO(WW&OeQcN;C*7fmNbD_*_&*;KmuF)Q?%XC8-^*ZJdX%y6(|la-P;5 z684*(vasDb67raxsI6=W<8KS>wX!MDYAr7Gj2@5;31?6zC5I|}ZDW={5VC7WpHPWi z0I9qpzjssw-ZD^yq3^5dvFobP!_?6)UX92!B{RkTngq|ggGbjOVJkyWCTu;aiAsj+ z<~~?$0%Swc`r5X}W+paD8eDe8V)mv`aCBIP*=^I29ng`6EM~*aT z7eluPU!;a?4SqhDD(sF-am`{AVNTW-au~a4)#6ev=AJm45!gaY-q?UdZx~~Lv=`6T zi=%F-42a~EQIEUtsnwfVc&A3VwLVa%{vDY#cGiDpV;c8^gT+8V$bA#W#A3sDafgR7otsJBLN^LUb0{qZ3HwbvEP2 zhfhF$pqy;{JDPoEc?jKWIWkzb80xID$ zpC!ppNG7X;%gD=*ZIHe{8y>zoh-2MWVCb_+aN+G)ypg;TT8iso*Q6_S>##gyka-82 zcPB%-eloc$xPa3=McMDpBeA1!41eHr6?Xed;PnDS?0ED5E}4jc*X#S}Pa{E9do9dO zAA`NkCUmIcuW*aGN_w2lP((BkrkDAX$<8roR2c#qw=IbQ7tK7#@5f62cp9?qI^At1 z%66P-pofxN&{MvXH1D_Iqf1zLtk{k#T&6%RKb!unlw?)=FtklQ z$bB~__#s3T-z{s!4ys8e?}$fZwX^U+c>fW5rOavj=F?-6PFP$#7HmES(J^}$vHYMM zKX@RDrY7uV44=jl=~JHQVz?0s!whhfHb=di{DCec#I5BhsR#(fSK4>DwYjC_X!2}$ zD7%I}c<_>b5HdGcW;=o7v?nn3#a=QqU_2W?SDC+ZOqxA>Hx+-#Pl3~!%D78UlD^tk zjA84dz~*ldjeRG{F3_FLAN-{U*~^7pjNNnCBBI7`OIe7eJ`wP4QxYw1yoj1nx5?EV zGW?v#BXHNcfVrR$iCQ`z1$ILf)JVy&2Co`uU2r0H&3OVl*EGSE6Hh4db)}XYCy>`3 zvJiFpE^#~_f!Xu($Uvt4&BtE=MAX~J_QO(7MgWD{)6MzcrfO=1ilPp!lzPM zehU8^PF}hLq2}Qg4PUfj+ExoRdHft-Y}*7bEq+)wWD#o?(?o>GSkH=Cil*E^WH@ir0DO2pHvoymd2pD=Y!H%>~?WX)A# zX~)d&GDANL46mGz8ya=d})52n-EXDgt|M2g*!BaI_Yo}jPqkL8zT zt-%lLW!b$icf)1jv(j-v0hHHLvj0IJe9<~7Fr5U3*LF^DB(8!QeNXIP{vNJs*5YWF z?R45QBkVdMaCOC^pmF*zER*|ytImo*ao_}gvEXcu>O2a6y-vZ`xGbt>rOrNav}0EC zzc|~9lb~{Tg}_yD#v4;@1SfVh*TFE*>aq)BovLvAt`A7UMZvCCxNirR6Bqk27`;lH z#i)^Xqt_T5G)mm#8XJDB_P=Pzv&4Zs!u^_vZ~ zgqW=l96{rgI#7RV7Hx-#P$(Y)RW8HyTzD4llZz&vBIEFdoITO``KR`Z;Mn?lV+_`1 z4l>>~v5;0bmc|MD&F-9+;IQWe=+=m$ZBY>YkoOEsU-&WdXU7xorao}^Q_JAyBXDQ9 z5Vmcc$V6|?hs#4Vh5lnQ9=M~*obXbI4Mk5uY?(Z~*UI3Ym3W}>b{qKpUIb^Xc|b>r zpQUehXc9leD$eVpAEX~HC2_gsF#1(2D6|@}50p0%zb`Y<=D`g7doE7kVzx7~Guml; zqyzT+QRL6B-^I>Vc_3t2OTo?LI$b2e;r;(A$+H9d@rr&Q9Ma%PT)8kq8T_K!@^;|3 z@dobw&s~5y=1`r%?P%g7O4e3b(lME;0-Lj?nt9F%{MG4LnD&o)CVs&K&J!{0SOC6S z*~&T0xrk9M$3Z(+0?RZ?Y5VK%BrYSJhV>dif%p}4woza&37HtzN0Y%-DG_!ZmF4eB zzBbz^wE^}d{lM8$MJST(497$wXta7KQ#AE9SsP7gMl**#_5o0R{sCMpHG@um?hlEbXrx@rn+Xw$_gK>7` zDzaR35wsrsOg+kGn3?6L5}f^lL@1=7$@vAsl{_9Qj(Os~fPSIlMWI_$ow=XTPgjmB z1i=apIh%OSX}YN3p2@@^bHSxCb`YL~DVsi(6y8l*vtiMna4c))$eHw9NT1kBX1>mZ z)X5E4^j{3FsJ&hr(7sUc|4yN|{s8ecP(uknf2a-hz-#?|=y}>0Qd9Ea&ci$CtN4)6 zc@8*o?-_JER7QWFIK#YLENaHK-zH{Jis)c2$|Z(O;Xc$&gE_~i@pVfUp-F-Q9!QO1 z9*qqoacRro<2otyJ9`E?c3j2!XGx%DQ4E{w&cj?IfAsSTg3e7J(0k%dvj1Tjj6c)@ zuXHakd6!c_=Cbg6QunmLIrf1;$6N4AS_5v{o`Z+R5zLsEX6Ps6KW^Ecf`r^jh%jbXN^22y* zC)C#NFgu4IxW#j{Y22)8^y#{RL7|u6YKK4We?AsWKiR^R0AJ=8n*a;bCGpPcr?^Pz z2eoM%iR&NAqt9ZY#Ghs?ba2F(Oh2K#Tv$V1Uk!o@9|^cSWiwS*zL0aqKbi3+Wmxhf z9?v>gft}4ZFf7x?tGN-(lHL!d&nH@N(!xC|>N!tuxUGYNQBPoMp%{GN>#*_97bazf zCi|{L3i}>!1c^JN`0tf2IGAD&j}k1Y>rV+XRB;5loj(w%GDUDX9}EjDE#SJQD9jKQ zIHUFB!Jc1@<+BIC=&d{i_x5w4!#7C4+&R><>kjCo-KO40GReob!|)U31dr$wL`HL>Gh80I2)kgTc;OJ^? z-r|?ON!=DrzG6fXU6i&HbZ3O1(otdNx~a#;ZF$Wt7k7Rr{UkCdJmG|3e0p=Uza+7DIX^;u2{jHFSBfJg>5A8}?O2QvJbbY}^wI z_n+EAz4Ib)Z5@Rh+l%q=tzB?up*SR~3R$G6R#KE03k6C-mr}@ZS$`=b7c+*SQ%`{| zm}L*|_O+0-xA(y8#$2YbOn5dIX(D6V4KvO(fXKo&c)cN5xIG=m8`5_%;hW%W-Dk|$ z-;Tk@?UuNAk~f%%=HQ9_y>MVPC86J z*A3osX(*fXf($wQ;hq#p)|TYe!1ie~0H%54y_#btoS%fgH;u_(k((ITW@xrU z^&W}*EU>i{1a_gcFst9bLqBgECh4tipwn7}yY_j3;^j-G!E1h#-dBzScQhCrm(ApZ z*ICdAfw8%CbTsbi(ZJas!(g;xkJ+zHx2Vj}A{@QuCb!}W3x&Eh%*1!wurxdg<|{VA zz0*l}XegQcnRcB{YnH|KMjnpjb>f9!9T>mtDxDPg2YWVU<26lLdfQZr+ck0uE{}gs zh6JwUsq#du9BIjq>h}WKSXHP~(_pKn=8%-%F7W=DIL`TU03Qg?qs@QiP*&L*swP`d zr^XyrqUYreFYpWd-=%&H(?+U(YAn#nFw=D==ME;8qs@#Jv&j;J&DuR7CH9ZY_Jz zy1S7ViyjYy$3*z?O6}bC6Nz=gBhm{l$Jx*Yq@{-}{-*0;Hp5LOty7k^xsP7;ma> z2bH5`V1I8D(D~P(SLX;fuUZ*qI4W}%)dz9@Aw5jl_Lyi``GM_k3y5@$!y{d%aL(3d z+!GOmUT1jvA9s+Bm9K(!{S1h5Rs;|{o5nk%AY)|`X)~|m%=UF*Sf&~luQ6s4*OtTQ zwn8jqr_mJ`Okn1lEASxgFie*DLQeb|%^z$?!MY7E3BP#(RDO_PFV(JCUA7a;52s3^!wJM#6&z}l& zV^j!PD&#Cq&)fqhAt7jbG9NRF0x(?16CXsM0J`ZH&KoWkm;up{T42HW{<}yM`c9CY zxk&z=pG12_#*-SGP$qI*Gu+WC;c9D6f~6^g>uR#V`nooJaUCKzj3~ZvQ(#O&yU0&r zN1PVYg9XuId^2+pUyV)y&GL8X^J6ZoduC4WY8@u`cOQWx_Exx9UlWcWbEeCSiqUpi zBKf^}D~y%hOKNS5=)(Q-yjYAV$nWaHXAhP^)hU+I9G;JzcMEL**15TV| z;MY9`{@@#J+#e%BH@e=cI_GW7BfAjIcPE-^ySl=H3=Wqx`$3|eDMa<2$4Qn!=&+4K zV&xl55OQJDrizlhdlzxpwyEs3+Jgf346Vc7PH7y+Y1s82;N-f__)Tp*$xXMn2HT@~e-b%)S{8yFS59Nowrm z&T(vV_dNP%mI+#E$*^;>rW5P$7m2l}B0D1f07TD>hsYSgYoj8|o_#ryU%W*eHF`z( zng}iUJEYG44jT(@=`y^-R%yQMUmxBz8AtTOOWDI(y;#)fj7Nmr$eZ4U?1jqlY;s~9 zS(n*_-meAs)2&a2hO*n~*Gbh29 zg?^~L+7u&0%YgXhpvUo0^j}Gy_!9>oO*YcLK{4p5 zmcb5r9mq|JLzn9DWUQ+_DjSKQ=j9GE{$deqWWJE_S3jX<{4w0MB$2pOm{IrP3*>a& zFj=>!p6+W)hIK{KY}n3~+|Hm$Fv4U7RhI{U7EC-&504 zS=h2_fUc0Jr#cgLaPhF6=9EF{-lr^pE0A(MzNqZ zN%;AS<;ZNsSj?1&Mul(M@Ly{N$V@Rs{oM~i`f)m@j;+MfrDr*Hx&{@6jAeuBbat;+ zIDR^uSQ~iX2>tx;l8lrH=9}F;7=7$8y18)V)TAtMd@h1IA5Ozcvj=qF3W}ed6G38u z3KbL4sLk zrgxEoz+jvOgXe_Iwz*mlvAEJry=NDq_mU&{-`NT5y~Q(W zs^K9_-gpOIXT67}&1$UFNf{RWyuk5uJAsf)W_VRK{%1G|YXYXROUga5NAD?fC_IK7 zYIj7t5y|k`TAj%~rVi3?^`L5n47*3p7?F+w4GHVlLC9d86RK)yK%) zxreyoESP@Gq8eH8*mCPEH(thuI!!slEYA?~6fRX{_G){y*WC%N&J_6jHb<^N_ zdz^4tot!qW71%droO5XeR;&mB#aqhQ=)W0^4xdBI?oMK7@Q}V>o`c_p%W(K42e+O} z;n>@D_<5QtD=y^8*Gubw!HV%XPw17sD+>ahD<5g#?w_DR=Lv4RMjY`zgM_`kM^egU zA-%GZX`GT#Z8oqPqeNrqrQA-MbutF?_q1ZhorIeIv|@=?)@ZgWO$Pq^V@MK9>lx1r zj}Ky3vfaS3jW}NJ9DrG1|21Bw3`l z0;AgH_)%77AU?W{t7^RkI$;7oTFD<&0?l}**Hh4fmP47ZB+yad4x}knU7X)`~#ZAt>sBy^oR0>_H<6;=$&eY;K;D-%67h?vIJjF1=M*b~-I9mY?QUD`f^idY z<)vcg(cb`=s9!^K{_rUuQ`1r`cx2% zG&_XtCnAYaM-@f4ERv&s7luCULT2|f#;YKTd|zZjWxuvyg^DO|_FA9izly{C$u;m` zpbE-2#A7UxGT7qJh0Iyu4<*$nF{$1X9U~`lN8j(m9a~r7jny7p z@tLzUzI_JP3|=Dc^CR(dzb#D=i6Yh8$3uH}1Ub9d1rvSG)H)Yzqi-_`h*Ihm)MzND z(>$`!&NL5hKWRaSb^j>-O~t!%~_g@KK`p{28r(2Vg{YyaS z<7D*sD0n7q3}Mt`UkvX30;hk>13B3+SfuAxUwG?9bXB5F0Y5$@KOB6n%QtfMgwn| z3*4CL88j~UJ~>n{lHWO)4ddoqg4G+li2a=X5GW=I$0TZS0UM2}muxXJ>>^q17|N|q z8W46EvI6sE65kj42F|8W=1&|3nKy|GIL>UazL(0x@Dt8m+s7__sv=1cj**REa^MS5i)eLbb zG8m5ux8TKZBe=Dr6)YVE?!_SjyXsPCccv8RU2?!E?|2y5sD+w$H&KhJvl$&;$T!CI zqU`Q;Y&%nkT?1M8eCRFxxo$a0zaY!pEAOWX7o%{_lE?H_lNG*lTY{1I_Lyb5J!I-YR6d@lU67#3<>{d4uZ;qfpgM@`9gl|tLSLTg}dfPt6Lm>iEx@W_WzCzfta3nh%6-pjD0X9nZ;n3{M;2pmT z9KQcXuNgZr^rsBJS74mnh%=(WTQkUkF&F9FT)@3YA3)#N3%H|BiAtC^;w>!|@@G~m z>3>>9ETVE~!M|lt`@$Dgc7;QunU*eW?hPmk z&LBq9KGcc{{iA&)^-NZwC!OygNeoZ;W8^<6HfVsSRaTb-Ze$340(JDfR6$p9zpzik zmv~S32PrM?)G}iV{MK~`sq2Npe%Tn6?zrRbw$nJ{#t0Y=Jb@NA_wgVfh)XwFUcN_~_FW_6E}3EV))K3+ zz4n&TJbWKAtBrW(NGepfHE>5Be#Nv=)zth*F?0l*;9_?(^;52IJlyd+bir*rFn<>Ho`a$w>Xg*qSy^ql=1()BZXE^GC2kG+O1fu!oPSc++Mh+;?k+B!Nkk%^bkM^A#X9QIs!I zR0b;rZ%`b42>kl)a}CQM33-bj`2Cx(qfiTiu*LqMnxYT#N7F#^Y!(Fc=;0g-Wqw)(WO`ZuX&TkK%;EE&4_~zFR z{>#*ST$tB{(%Wv(Yu^u|XKO#6{GovbCx^-5pDs`#q9!BMc{A;pe;VF!mHXhDMJ|c-j|3P-d0=RbQ5SG_W!q+ng zsk_ZfoI3S6Xnbe!hl-r| zhSQ9l@%tfy@7%+QLDEci?VLOC@1!;V*)>>TMF0~-t_p-CrrhO(}pSF^E9SJhCj56jrl18#^t)0xsZ&q-kEeP*qJtQk< z@8D97_mPng?vvdk_Ta+VF|b@Wh>AFcQ8@!qu_e@U3;`q5+6+ptKk}6qHdAUY34?ud5}Bj znRpCB1MiT|)-$-eK7|h3?81f`Wmb94Z)RclOD;{(9>>(*BRAc);G?-V(Ea5y&O05) z#9s@=saNZuebq$#bC$5%wzh%efGqC#Pm)zAYoTA8<*4zKy_mFo9lRcqPMzjOkXe-+ zUQ#*4j8lGx-xfZEpxhFo@B0tFzF3Q4eb2DQIE+#43nSuA938sGLX<}aj-8~0vMU#$ zLBRsp(y|Dj{}lX`dUZHnR~$j;1~5`9Nw36P`dX=y4t_{QpN^&2{lXO!*1f5M9ljOu6ZO0jZ$&c{9`zB9aCBJye-_PXJoz#7^ckEO|*VA5JY!Od$=q%X@*O(uojuo{DFzPN+I2Qju}$7Ha2tc1}Ho~W0g z#M=n`TbrLYm=-vU3mTlDBU~Gli=L8L#v5B|c0n^uhRgd@*d&ccGEXpdHp`}Bok=|@ zA1}rq_&FP*h50n8R~CY+tBLw+OM!dm4t~=OPqtn^`C@UYw14?zK2NQ-a7XGJ_)JOvqW;hTopIVfol9vmBQZ>~Z^W zh!+@ykF3U!YqAk2@&Ng} zG!mCheMo<92HfRVN%!6;#YF{)OjD#7+alaj4mRBf37@sV2KvysTLiwzvF{kOI|bt& zpCitKpyBb;wGj1kA{tj0!_L{)|*>6P6?M!Fuat*wM7!P3aib%Y=Gy8KJujlA_? zB;)Fms6$u;HUFl`yRA8mXQpl>X-NkBJL3k}-K&7(rYpeoyoYpFp(`v|I3GO>EIa)I#C8(q?F^_W`3L zr!eZ_Ff*!CmhJBJH@lYi5N>S$ZdN1kIaX^_a!00C&?xf}{OYN~Ugy_(e3X?#(Ekjy zn*Syahb3_5md)^YLMP6uenVSNKZNm562NNBJ^JA4YwDkJi%e7f!IXatr#Yr;!B*Xk z+&#FJZWVrZ2SvxSA@1=wK}7@`_XpCq1uL<*bpxFD(Z_<8VoJ|_C*Ot_3;xjMxMYMa z4VFKRa=x*QgV0MhVeMg4|5gml-c%bO5=nd_<*8MS44XGl$_%>83HK&1I<@>LJ@+n< z)aB0LuHG?+XwW57cNM^!vE72J-3~*|4@3_ry%4ugEh0_W<12is@xNiAnMKcism z)*Qp<&a|cvmX>kHB6TrPLnwlqQ10JS%Gp0ihc`+Jm@vqb@u72|^h+%Lt1aBHZ+YNi zxfm?bc@1l(FGsDVJe_snBXvkF}fJla}@1;tS{}e}l*GciyC4O<|k_B#sN23DAE7%>*qy5IOMVYix$e)zzho{e`brjdYZ-v=vEw-B-d7ShTAN6c z>w;5Go>>#DL$rtWU}mQtZ{eH4Jy-FEKMg%NFGU@bM0DVt!3VH=+eV*1eup*7K2nWn zf|ZxYlV69W@NcU$d(0sl|LL}qd6F-o!pRE*R&_!}fD?>t*^C3hD%@NbW!^4xlb~yS zKws;-;sNuEa9K$keLjw6L+YNc>z9%%hN#H}jTe!KT6Svyk!^Cq> z=%XItbCUBviq1Tos`rcHlA%HPUp8dRF4@@+EDgcLF*Q)DLM zzWYc@RH8D43K1n~E<^d9-@l&6bGi52bN0K}TAwuw?->ihmyH^1$gV&dH|H)qYu^Of zs~^(^6|C>KAURUaVSe%`+<^ZWp|y$R;qA8Mp=-iN78)C8_n zMvr=`T9IdpqeRB_D0Okvqm8b$9JAk>_PeTp+&ojfo0~%Q{&IWbO9upE9A|EpKof*d z*ppFbWmwgbM(%}PCLhNZ63e^a1&$$)NW6U}{0+81Gn+!3`)@pso9A2_<6wokhI=9D zQZ)E`e&;d;v4Zgj1L^&^c~rVM6HB*lBC$TpDZO?Ad@7FP$H^|xQE>(A*Bu1b#slvj z5T|J;yz!7qONs59jl{C-0iGMX$@}nqjEF72L)8_$>5h;LFd4Xr_gX)d1+vzlYH-tqaQp;cJ(GbrMB~+C5}T<`lX&HVcX$AvtXtgP-NP z$&M%uEI#@eB`@WGt!Ws&pZ^T6O@CPS$5xU4u8oD}s6Nm=@D>Js6`{#Tt}mqSA5Uaf zEjhDOjcBV?LWP+ynR0zS@wz3+q>X&X2OEA9@y~kDe0LtypZ`otoI3e3D{f)z8Zq2c z{+pzWT^6K#E5L1Tr}(;G+i||F75b>9(FF$_V4jj2=e-=IH?P^S{nbmb?^hCxCdY!b zU?I%h@dK~U86d|@7SdErKb}TcE|IgCjj2^jN$BShI=c(G8S@f!<{rnwnu*l-!ELZw znL+ILD&s}2^W@K1FDX2K1)X9uq30L(9;~3$HvK2T%QKj+^yyUg+CEg$yNw%fWzheu z5sfr$@SB zR+C3P&Ct5x6Md!a#brHO1=+LKL}GxKyQyIdiy7jzWZfIUUU3Y z+kAhr+G!7>^?as(ZxHU*E5gSY$FYsW7O+yd3AHM9aGY)g{o7#2n5+4dVTl=nIUVP* z(YhNiZk-QCZ-uZd7R~wMKtw zIByF~S`bLKR#~9kLJ8J>@d_-FHwODqTlTm31a`|K7sS6V6YiPii;*tKBHT)w`M z>!<&RgI{WhW8gQMRAR!=XFO*6k|o4yts-9D__=h_Uq9yaDhDR2(St-9{>L+#5VZt#7Bn2}c)%B1h6Md=nDS1mnuuY8ok&3Fp-3fyFUTYzUh`#>Up+ z8m_}mt*?N;pj`ybJEr59T7Ic>S^~o8Y&`fdoo21%Y6ul3qNr{qGWWjo633r}oZ0d4 zx@`mlpJ}pr^P^x&rh7J!@V9QEbcG!L!mx0v+rx7na?7Lbp zYfKA@YilsO#1CbX3;8y4bV2KqG&MT)sjM{51=zj8L}Ydyy_xZaY}qY@y>4egZ&d+R zOg3cmyCdM}R(rZ|awcwOta1H~Pbk&p3)LnKu%K@pKG?b!Mrx(W`yE;EZ}5oV&B9|K zh&+kfd(8!VLY>Hv+cJ{0E(`vi3xG*s;*9yGN-#LwiQQ)ew83i{RzD8~wYfc{?3ot* ze9#zm)LB8@tY(fCEe;cc0{AzlmVxl=9G*g?DXuO3L;Ax#G2uiPINGXXafSx;M26u& z(|O{v{~22CYJ)$%;iQ%|w z-WOuz@svcI+Q8qS8_qwxyozLg>c%fV7s=8o>A34v3SMBl1vN&)_~ILP9v(f1_Cfaq zQ|gYAjSUG@b7wDk+tkTd30=Z@PzI^=({8fiRUmO_amPvX%c1k9C@WHb2Tik+z&IfY z`JHFs!PRfLccCdf6I}ttDwepvBm*5%R??PEFZ?_IG;ZvS1G1@{OzKLbqGi8nzK&_*a`Ct+%-vduCsuzFZ2Z|y7yN98K%GI@ z(2ZtawrP@6hJ!d`S{UZ+$j6AEYfxXQ9PXZzWERNAV7QPkb9Js2>|P+mrm)c{q|pZt z*JrR_Uq+KdvLA@g@ir{=r)=>YGdk~S0M#qWL!O*@*_4Q9bp7HuaQ_sP%B9ieS}t#9vnvq_bD-{9Ip5H@V(7VY0u!De#hh1hypzt)smMez zESR+(tlZa-+GYzFbRHxrw~@rD1VX!x9kJ3qNWBWPpy29#eDB4vl27b|N8jW?LX{x{ zXYY_VJKs>nvxji{h!YG?TaIULUjdUMPyVA01&-}%N~{{1pmBZ^eZ+i%*6ILoomn9G z#xXqhiaA5vHf8*`WQdylW~dy{NA^v__^ybIHq{Rp_6fRvvVfY z_zjTzQ;a}oj|f~GzXCnB{-*IublDpm=jr6JL@o`)4qp%si-g?+GG3ZxdR46~nP%)3WO00ib&@6Pxoz znMUlXUnj48={B?I62wufD{%t68Z#M&f$=h)It_DrmJ{x!4+kyMdX2R&*YCPM; z?HGP%L!K7})-G_UF| zO)BT~>yJf zYpbT4xC~ zzW#23s>V$A?A%(K>#PV`mRq1YX%iJGZ3e%ljri(MHL;9%L&rB1!_2e~^yI(OAU*pO z@!hH{P(EbHeB%1G{*$>$dpUo@;;-G*r!N;36A9eWd`Y$E-9(?Udm!@22#iO%aP=WE z5ZWN1i@4mvb8gl;(Rcya3K`lYn?{$q6yuc{lbL<4rttE$5-dF=iPQ7^X>HkRh#3}T zl)6mV?>!f&f0HaK?eZ1qNy*{z3~xx!J_~4YmrPaGU|rXIgsmpqX{opek*Nt2w1+K+ zh-M2^z7$K_gC-H@mJPI{_C0YGsv|Exi^22MByvrn0}~hlw%?e85Bzoi&oHHUbvu?` zE5Z9~6Y*muA;+)+W(34D_l2L~%*~wdK~Eo8W{7-y+l8*Xp23ciM$k3=NaI#*ViQhE zqg8q@>G3*GW$d-dT{lr?d4@Q1d?<fFz?U)lB!=n8IM| z4G65Ah3p(7xH|1FxW*pD@d_hkMejpG&Zx1k9#?Yb`#2CWj-*D{&!Oyp>p|LJ6aMp5 zBuA&JG1v7D;{=N>sAe||pN}^Rlx!w4ZuP^^`cR%(VE>Wt`(F*n#r`IzJb+&s)e6I_ zufxm!Q+Xbm@$+LJ2x8>(G})o=^I_ha^FWP4RiQA^oQubP0_?U z=ssRKX2ak9LI>^c3qj(RLbR2#$IPIGV9479r)!!qRC0ta<+3nAn&Pb6v?}P*o5;L* zIe_ka#?bS;5Pi21(czypyZu)f%7^gy|8c%C6|qi!MCe(vyRRAfne*6Q?ipbcw2`fQ ze;B-8Pln26jrhwZi=H=phhA3N>_WO6_$q34{Aqka=m3VNv!>GE%jkTpkvovhqQA`p;P` zkthX+nLTiH*>P;}ngW(}5j5TPK3{y{Bl2JGRovG2fd6Oed6@O|HZChtgLii#V7S~8 z-!1Ki^?h89^}90;rtg8rl9y>=$pQ2m+XWr(g32NiN{Qkm5k~!_G}-h!mMnVc03(A* zbor4QZZCKf!hdpeh{<|zKI$jv35X<*#UE0K;bc5L<%?kZkSE;~9ZxfqoCHgMmB8(; zZMY&a4l1n)dZ}Kzl~b9YuWmwlS09-$;~st3DoekwlETUyOPsMr z9(8s)ppe>;-~0KT|(PI^a z8446czPQGZp3}{bdn3oUS9hcm2MIH8p$28&xp0OBXL4Hx-EPy<9axw*1|T2P}tTx4R;&OVvJ4=!1=AynPKlH z$j2zytT9OPcPn#@VLj&6LN!>R^b#j$E@XR?Z{gVC8}xVXT(ZDi72bczM%|7jP!}7D zIsMP+^ZsGn9vXr!F7f=@<1&oPwqR=b_6o_lB@ZXP1|fQ^4z?_nL5Y=Rn6maU?w9{c zVpMF{`Hmqp!l#fN{*Vma+NQK=;1ZPxH#VghE@}Zk1D2I ztOrL{&BF&u=|sv%1C07=VZ=p_uJdjtkM9c+?cEkIw?+&lWVOIh@f*#F{7mujHI8+A z1Fl`*?%(6?gNL~WD=jyZzdh|QE*@BodvxTmeaT#&7E<`ic=OL)ke~hty{&U0W@{w<>*R>Kd(V-DaZAaIjs*;3 z%n^)Vn!;q2bkfq13g$Co&}Cg63IBTznXOqcbF>@J8SCNgv`(l@D1k$E0sIrjc_g5H zHeGXglx`cb2Z?jH$tUY#jCS3I>Q$#OjXUpN7&Tz5&l_QeT@8KjzW}zj?1e4bod5o* z3UyG~L_cnr%`CqXj+yRT>3+o+bmDTzVn&Jh#F*=?Jgv``6c3>M!;Pq!KAA4t+g}=$ zas>^2IJUaQ3Y=Z^jEs)6rA5m|kUi&53r&@wZDA!!KHz+bQx(PTwF4Ki4DQZf?3o*_%fJ$b_0P--wPQW8!?7H7_}p35C_!+?&5Mp)ucYQ1EUDVW z4}5FA#h6m(OP%lK!eQap^hk#k4d-%EdcSx?wZInUYI7^JV|U<-pC%1|yA&4JJ>ng4 z{04U)s9?}Q2r1b42=`SO;7uzbX7@gA%-=i4kK#W@gQl1C#HzhyjTNVbI;k^#ejQ|B zQ7(q)ZwB_%3u4xjN0!&rqs=$&8nYF~*lVlkf+K~HH&YI;?dYQp`+`w+a}McsX_$f>Ekfym)HsT}cSiS<^1)RmZoh#TWbr&hwS4v-Qze!r&z9HG3>5z2qnn1T3 zQS44IIdAk2g5+)BYeF?||2&p<^Ze0l;40*&rt{?=rqCOKYEX7_6soM3QInL#xN_1h z%s(EFCx2_OJfFunVyn!kIDWv=)XCsy+)XFcx5D?TY@D~u1E%ZSKtbDGIC#DorUr+T z!1y=#mE$uciOj{7hb`GE-#GGOLJYhK8;>D(4cRX`m1M%q(B!=SOBp>`D%qg%%>+xoV6%7gY z2E9CKf&0i2@+)i>Os@*!h_^gE_o4@d=RG5_snRrRTn@er{>x)6j=}YHChR`N5i*ze zmOS-%gI}_y@yi_sK&ILRe-uuDur?o%5~{@?d4C1Q6S+)I{WA!js6wt}y(eCE8G?Ul zO|<{^IL0qMf(Bbh(l*AOEhshBVXxczJPfcfaKK`VOJElW#f+U;zt%ro? z5s(cWM@~Prqm7bLWY&W_Xf?P3O;+6Dzfg6gcBMAxF)1Fp*5AVuwkBB21`9TRu7l(6 zXA$e(d|L9;5YF8;16z~3MC`m7$l^V^e}@yOEla{DTqlOY+90BztpFC!RhiQp%W1G# zF_d%X0$gbb&o>nbX1z@YCF>Lr3!9BISI(nLmVbjIVSg#8C!(|1SD1cxfk2weFc~lA z_|{6AXr`q>;u1DO?BgqZVcq+vq9V@DoO~YAp7au()0aT}PXbJhze3|?Ugk6-FPJv$ zL$#LJki6AuR4PswQ28dTIX@W&MC?h~ag&)(5euL;qX}v+9)^8$rNAOL8Z?s%alU6T z@61pcwEdKV_rG1>%=~xsdHFXo_Q;=1+F?gFUOq~#x5dz;i(>F1!-zTCwVs`|KNylc zPvJ)2e*V+V?_o-*7ewG!yf-cgU1xB;gUh+Dw8@f;%!R#RI=2LLi;D4rjwAR*#tTB7 zZTY*THQ7bp+90v;3a#jPio2v=W6Bysk}P5lwi=hv`>YT2Pe>yUN7j=fFKd{wTN}bY z=2I_aQRdho72wq$p!3$q@h?gE0Xu&Zm45G{aE;H z(upUkImSSW6Fw?DA((a7gTJp;mC-L>2F6F;p^tSw?03ll(corsYk~<4SbVGOuv+T?HHYUTCs#JKUKC`UFt%r8r5QR9$Vz9QIN!DH1$xr+)3=uY~_?v6GVUEEg;&QeJ z_I!?`79|0Y+abZDsZC^9(}!Gb6KC|Z#&D;}7rcJtHc|=%E&t z(=2|V@py<u}8~31(+mm(EBv#dF)9@;eS2;eYrBuvnc5NzBG5gDd!b zT^01&haoRj7qj|jkljCPd9k;a@#oeofQs-;{GqE3N{Yp>K2V(9^y~*#X=w0EmO7!& z^iUAHY7BdGF7rGUc4Oly3-b6$7UWN|!=aW6RQcPDv)9VPGpSxQKCK7xA+G53DH-Q? zM5DcCKlW5SMYz~ck7OJp22VQh;hzvX_U;VN#>ox4#r9HJ7e9zLO2Fe&7JztkCTI#x z#~}FuQY{|@dB+!{@h%_wlf`dxISv*224L#-nszPfq=N>9 z*v9#>hdJN7Z~G!#tFA}!eK{_8U`;{RNp6H;EkmF2IFN_rOcTl=BklL%YmZ z&W~~oBm+|+=*Mr++V-6+zHV1G^+P|ctun$p1_gM-^C`VvvIaEEjZnP5l+4u@@P#`# zfM@I^8Xm9$%+tOKaxXRDQXMJ0%Rh{6HJ8XU?i?nk8qTlYCx!D5Z^y&&MR0b2^HvV5 zf%{U=Ann^!2*2nhFgUmg44+rQKl=xmo3@#m*qRFOjyIC5AQy;j$Od!qcKUgfF}~bx z2|rGaqn`c-?CxLdLG#`tyteW*In-%^s}3gc?Ux;-0V?Kvss29xYksxhb^L1}ZUmRP z+LQ6Ys%R<|0EBNQ0q5qc;=rXKJUkG|Zd;B4A|WK z4imF9vF5lUh^oJap+=JS$J`&4pA-vvo1C}csL{;%P zNLjoew+@NoFRNQ+GgUH4{*)=WR(6;?8ovcCPy0czl^lqzkK-~W6{N1!2YCx5hxNw4fg(1*A$%=Yf$HFg;*VS-rDw{1cNZx37gTqdJ=)5*k z7Nk@!Sah@jy;d8e=J-Ka{$;%2^qr-AUe;7pNe&?@qm!_Dz@M9Ax50%+mhgtw?-50nDwDZ6)WasS0M<$ywqjMF;obkciZnMyg%NLc_+M%;+JRCXm5(dZmvG1Qb z@@8EEoi_pG-B*rXctfI8Z9+BQ`2shGf0&K?iVSHgr_XM3d;qcTmoVAM1$IoRqhF4P z(aMSXti<)F&{B2{?9eTqrIJ?2aJx^VCyAi#wJIo$n*`^3RY`sN zEI58yivPZJDi!$>4(=86XtSyraWnM7n7WswqCOLrik!o(FE3-8urj>rlV$(*DBz1F zA#gQ(Ej+eX!8MkKa4Kp7Z%vCQ+1J}A=yerBnf~=u&Ax|p<|R{ea|smH-pZIR+zof_ z!|~Lr7HX-Mh2pJO;k%wHI2bO0uB0t!Bgtp-&DEe}>^avvD#Tbe1;M#nsaQBQ9GDxv z*mqhR;=bAADccs}L;`7nXcTG>2P0pq7sf`X;(_lIp-lH7_-+1b!kK(vOo2NrfQz3;hE9g_^<^pAF zs`qXuF*_Jaw~P^RCkM&VozKv2gAf>xKH!g?4JMjKp|mEC>+~Ap1%K{ZMlV zjhYQZYjeK3kXH6j)&qQD0 z*9a@IiApEoo2@=BaBaoYcOr@X1$79K3B=xW10~~f2-^1;5fM#kcAeu7D$q*8 zHR^$|qLJfAt+(WuFHvyd{2|_<`f5^6{Ho2)#t-?4LGe*8S5R~YryE6qrLjAmwoHSS z%FM>Qo4=yBr78rRE(ew04bFbNDnlQ7=i|w;+0*h#0WX>mIT7F~y`dY{bD2SIYr;Rf z6GZbkT?1w?qb0S-x30%O4+vW*alUNYW*8;-xMg-45gF#S~mD98ol;24*0*6M-Nd;v|{OTepZ z3WSy`0F8V~9&z`@?Q7dWp?@JZU#WmrkbwS3BW(F2$t2!&fYPp+_`SMMAa800N3<^E z%T=F1c~%Qq8XJVGE6Ql>P#_uJ6~b5CzZ~vHPh&=|9Hu$3>J0ylE+)vz5F-OgvTZ;J zK3Zg8^&gJzqx}WutF}Yz(gFPK+(@205~mTqs(8=9n?|Sy&_mU0>83FWI9mIhZj{Oq z9Jw(8AEv64gNfInc;r9+*&~zKcb6xFFQ>y7hCPFOJ!xELg$ec+e4}HIKjA~F7?bpK z3+KOe7bra5#&!E#;aCWAFkN#PMDO2$8$SYR^Jf__@mj*Z{jLweqQ6mLUN=NdI!qX? zMA&zBHMBdiP#vU-&$1T-??5tEb3I@ilyX6b+x65Zn_zci1lZ{`o4InagRvVL0=dbY zPkh~Dko@u%-NLWZbKi3X!OR=bi*}%)X^K#VoA4n`yvMCWgwoVopsj zPP27IZ_g{>c}}71M!y()K}nhc^+BAs+?e?C`uWB(AsGHQmxdeZG8$=e;Bn#%==0Kv zddeu|>lop~4EM6&y+}4z=0HKM6s{kh#LPVsg~t}(r=uCkG{5Z@kNq7wY zWIiAhycrkz&cWE@JMh!%Ly&zn3X7lCKvaDmI8=|492+}mj4`8k&apV^EGFQKuEuuN zPk8*43Eh;F1Hucp1Dw^w&HTggW_CIFRcNtu&Q77M9*h18FSs1vQY=0ChU8F1#zKBF zWA>KgC_agYWFk)uJPzTlhuyHG;F!Q`)_Zz=O%+|{ehk;C3Zd*?S@LQ|0))hgGHTAh zOYa9wgk8IX@W#k2n)ol6%T2Gvhm$!S&+;X1tvUxzox7mrlMY>SKLs0BIT8bxH(Gz%ADH5YnZc?s7FI(OC4Kn)H`E}1GzD9qbs|1S$BpQYMns&ADkB2z=K)SgX!UU5*VH!1m6FN;cSj~ChPx1u-dQ;@6*d9=kP|H zq`#JAa(*poZJNvu{HHk{l{f4-Mx6YCtX`R!9$qxX~lW5*Px z=&BU|?Xt@>;=ydPB2p99{-f|mM;I!n^l_i{X_Qs{iW38r!0JRc9{ux~ww_uE0e=Hg zyxxHI<}?b07ioBKQyf+-i=>}c2h!4Ue{qFDJqa%|5G+rXLTg5qpZW3%S?XR*2FsR$ zjg}5yn=!@NEApVP-UCnHy-F`H=XL6)PmEjP4rY42~C z=DC6JWu~IYg9~)%xDXCD?xJ>vSIAD6VG^D{%+uk%-`r1$zl{X;mA)nV-%?@E#~tK# zNDwGZE5tQNDyiE`f7o5nk9)aU{8v>S+I8L_;X@->qP2$>%8cNvy&mA_(TBN<*U)7R|iRrW6llzn9*@%+0M1teftVvofg)HF^e4R8E9e)yHIf z$#wcM;vMyRdxUHsE`rArA~>;h0%N#D29=fuL%>d5Tv`{*U#HUq&Z}48tV(HSx8-xt z=7qs#!xy{PNU_}wVnVE*S&YEM!fAM7h6$4C9ISdbG=27VxAp)CTR^XH1 z4-T(d%I>x80C7)6rcjm39v-+x+#CXN+2{_KCfi5y{e9uibX#nQ5=AlQ54QaE!uR6b z-@exu>TE9Zq)*)jd*&Frv{pKD4I(2GrckG^)RH& zyu|lZy$au)CxW^O$F3QwB%6|7lhG-mWU-zn-hC2@71koe&N#;GW%XkyczGHf_c!p> zGUS+V4Lu}i)@D?)^+V0?Tfu%@IFuNs!Q=K}I<+Aa#%&r$`=+mh=uSyE>YKzdN@AdM zy*+OF=1*qVgrMmB^;i}2h@_mwkNOYfrR}K6Y5F- zgvVj<)?=`;eJQzA_Y>z#HU+;QDdhN2F1l5zv)Y#85La4|TyV4DS1|NDM_pFkEqkqRM}s0G;i_^5J-*Kaoj1qRhI6|F_Y=mGprSUxJ=y(8 zxobaeVgfo%(`8>f<^wZ80n_Ze9HJky?S#n(Yd&+m6yOV zA@`HltrsBvk|(+NHwG0HLTKxkN`WxPD*1RSAFU6yK-VM*xTX7<xXw_t|g9&}ro(x0xL7+H(F8(LhSo$Pc}H;u)W za|+;ySu8m<`2u`*`GNhX4pFrw|KM!7347_)20GP!7*5+4L4s>4rvW~JNBUBzV3|%g z=$*iEZIUQrVM(oqRM1OF0>$_Jz`D8}G{cf$V0IO~l02PyaCumfXXUuCe~^w7@})aB zi$mMo&uBn1V6XdZP)X6oq0Qx7zIrm`Z2u3;c4ot;+r{9ps~cpdaAQF4ME309W_bTp zlmDxsn}q5vDT8kx1tR|QAoj>Jz7EHox!==6<~%QlTMk0N#e;B3+#?d_x1G6OHIFFB z9KfBrDd1Rnnl;z@ME^lMIz^bk$9t35t2aJD%fS-jGj}mKuc{E_MENEC!D}4t)3_k z`;yccLvGJB3OgDm@P4>WWVR*vnhj?r!h#(PuHBc85$QWYJ?|`jte(nbcF#w%32Q-V zUo>^-Jx+rs&14My_QLSTFbdBkFg<-5n|Aa8-K@0+oUB4ocHVNFAo7MNn@CUvqnBjY zma5WunI}+GK7clJGxS>cg}py#@rCOZP<^I4yT0%oIVZdyg08rcF9UJtH|Z!&IopUI zdc(o`AlGeoR1%7=TH%!(TWtB^i;Mf6(R<`Q{e1r!xoF4v?iVGKda<2l@mcHG#ec>@ z^zT%nmJtE@)2_hhZ(`(&-!?%}avSHdTLO!wX){Ux0Nqy>V3({6j+fzfp&gOjEE)v2 zvXsDc+5NI!X%Bj2_5(WnFoOC|D@L<|bGSULp8k}OVI`#F(aih?asRvpd#2vTn&d!w z^lu$)QVhop$=RfJ^X)Qij;k=%6bU){If9;ODYoya3+!~Qp)y-9!@nc@K(F8zmMQI{ z`2)&q@~;-++IRxy?__DI)(CEGU?FLBDUphFD{Zh_%L~!278v^sldSZ0kn*okpfjdH zm;dIN`X?u|RR#*=r{zx|m&3?`MpKR<@etF;J;NT!FM_~_YM{}%lm-`!2ieL>`jrIG ztFvQC$GQWcUspy(oSh)-#S*aMy3HN;57Lp}!QgaaBi<;fA~y0%r7h%*a2Si`{=S25je5q4Q3gY)A+SA zBz!ax?+v-&>Ehj(qIiuwdtoHlGgL|E?slMMuNzT&S|RPYHWB_US_QuS3s8E-cj~_8 z5iJvX%;h+y<7n4*{?78{5c{eeR!2FZ!oz)}@Om_ij?`eiG&dt25u@kQf8jvOcmB>@ zA>gujA#NIu#TOZXoApwNNxvw1AF3frN%>Hln-52FvS{mX1-#7dvNpcuyw~Sd;CIe# zvO2(@THg>yv&J~|?ujMWcUaMfa#x^`{SWV~PDJB@P+S--%^X=<3ryE!8t@|wPs-S$ zn5_)c8S{Vc&p&Xq>n7L#9!Hb!54dw46y^Jh@K^l@9pG4m-sp<2ZF;%)!Ub}sB*8(E3MxF-L(Si+ z;wMLKTxz6fGuV)n z8W!V>i-%Dlb(qW*9}h+^s-S+QK31NciT>->;mw!5IBvc;yT>z!ztPGP+V}g@wI9W4 z-6AsIeh)r3ONhn1t#)biM&EMULt*hFD1=_1A)n4 z^RXGbC%ccsRRgaCkusr_%FEFcil1Om+7o9~ z*uji=1dX(NoM&DWJ%ZFw;u+_)8d709E;W%%BM<(sA|W>EumKEc27>X?0*uqV3-dc0 zfqn3fUXT2P9b_ha5!A!&leUcb+$OMaJ;d_XN1)BFJakDhU}r5T=Q@G=#O;o_^BYxj|Ckx_>Vw?+K;X4%AUW%>`I=^$A_|xtxR=-GNC3$uLXo zDChOtjcs;{G`{{8cZNPC2vVNP% zVgoN>PpKaNNw+%xLi=1Q_f$oY^~y~!WspU=wMAs*KUrLwrpX@vl1GlbSjOzhuBTb1 zBCKWwl2fx^k<-1w$n)xiZK7k?`_!HkS{G8D@h%8DxeVF2`JmM$z@_|uXnW*3dVdtq zWkTh!3o=lk6^5xNz7SELaEx2rMs~e-7H9~C;bW^9I6tLZuru;4-tX$;Z}>NnEw7s+ zD2R;(**{LO`Edc1oVkEuSv$)%PW!?!fFF@FL5Y0%>`rK|I7RXzr;~(DE=<4=T~@Is z5zf5457CPmtUl3C86`7NxpGaAzG602-D(XQF0F7OK?HYl=abQY`d9f?ry3t2Mw)le6{x}j5B*cjCs3&jx`0V<#W?0MhS`-JkVDE}v{*YcW zuidj8Hiu7T{}m6s+^+5=2eyXN*^YzcRQFH#^j!k8??lqP z`n7P4w$XZ@7BXBDj@l>m;ZfKC1gh_1e)22mP{tT>jEl1>EdG0tPK1~2s(v$r{4%G!88e#g8kIHGYB^0$V;%EI^L)8eaOY$L$c z8p=$^?QgUwc(WihbUX~?sx!hNM$E09HSjmloAhoU<`>$(CPzmL310U`&C4dRO}&=; zEDMNZv_HN+U;$gki?gSj67fZz7<*4ghk<(wsA9oqken5cA#DM$VR{thnRUTA*%_$* zO&Mx$gmCA5PLs)$V18Jr!Q1j;d|}T+r`&@$L##pY=t3zhZogC3D;|Sh)hSe@iV?LDzJXM2Ldsc%`(Mdsn zQHVgOOPxRMK&YUo^a00RsUXkjVrEv`49qoCVtK>i@U=vZ+uK@D$*Fqed87=6y$wK& z&7sG#ro)tFE>JV0U*Ii$6P~Q_!PLs@uzt^Cxc@63kH>P~Nl7nEa*<;twwuxzK_S@P z1bDF99~X)FqBbkRI$hXIRg#v{Gy^ZF)ea(BHg8B@GUt!=mLwrzI-tj~xmL_eBD;?H zV5omCjGup0Q1?uW_f*S;S0uQN1GI+MB(e<8?oeb?oPGysf9BTPSS+y^EXoy8p<#fk1WSTho;sXg7=#{@ z4P-oZqh4wL_@HwfMBXigPK~eVCC&B3$iE}|CW_;)J-W=KIA#9m@IFC@!)qwJ6wfdA zyNs^t79j1O2V)luabc_)?7J`@*<9x`gFXqI?$e6BE6wrcg?pfoSW2F3jHTX>{n7IZ zOTLajOsbl9(EMpnpVy$GvIlJv_J%oX@w}^-o?uS&c2YX>OYrV3 z#fBH0_ei>pum@5hbKDcy6m1VG&U3(T=?faC6G8f9HbC}43mTpBf?CmZc)616PTOw_ z|IM1h93Sk#g_8!LLp=_6t6zXO>L<{p;|ulL)rENnf{2*P)cz>jl>Dr!&I$_7Ew18(#ZPQFi#; zN%~^bNx@eCAo$?fDG1ygh&>C-Fly>&_z^gj++P0}XY1F)+?+&k&DxIHs(fU>ND)W% z^$_M}icb$8LjNNo_+7_>k!pK{ZnyGa{}E5ZoI1-t^4JL2@F%3j-A3T28H*ntuAo(N zTBzIQ2mAaUQ+17Tj2Fk!wu<;wR;+X#i?YIT zr~eur!})D@IbQh^zIlcy^R9(EuWerk_dT3I;=~3}JX1(aHEwa;C~6oRGzE4rZ^tJEF3jZBH zgo?%eblYneco%mTxO)Km?)%*TQFI>uSiNr?msy08m6S3Hg$jx1zK%+06QQ9Zni@(= zMabT(5EU7bnVoZAPZCigR6-e1wCmf@5Ps+P4|u&i&vVYX&vku1?>D>LH43Mnzk*hV ztuU?D9G3QUV^}o<_HVMVwN-UCSh*kq z=Na3;j&mOPZ+1QYmQSM6P zx*P{blu+YZJO=4M!zKU1*>ihR;HZrPzg$+H?EUu!Hp(i%f9hd)WW{&#?T;F|9R7*T zV*6lIf-^2`+==BK5g4a>8XI!VP=&bw49}8z&~I+CHlQ3lW!_QyhCul8G#Ji{DKSbX zgt6-Ta`-VN5LoGKj_W2>)$rymnX2Lhfls-P=9OByTfH5_dEL-eC`OKp=;O?NGZ_29 z+qCYY0IQTZ1B}a`@J2HUVJmBKBF@Id6%|z5WdL9OwdTh+J%VYgxK3W!YLmC~6v$Qg zY?JUXbN;Ir9H13!P-0CudA0K+nJy>5J~Ywb>p5Si`|N*{0=+Kk{@^R-7B<4M>S}uV zkv-2zrI!5s5Km7()?~gJO<>ecGU&ZBf^=VyCKnT<@x{0hiL6sZoh_r7=6w<$4L=~S z#FY6d&JXFTKNpC$*)`T>;dzM4IRxkD01~0;s26k%D!=K$0950~6L}EW@*B&vh44$F zHJx&@4g>akoBVux0h{kmfa_dV!J;yqy}it(%GDqfO8<%R?>Bp}Ms)*lQ}741?~`Y1 z?|y~z&U5(RlHcLCR34QJkOHe#eLUQJkDN7sN*AA)PTfz-F)mKr$mpIB+8XFW@t1Wp zqE3VNqOh3?9GAo&!{5NTxD5toT>F zo>pIzLvfS&JKWFFi*HQu)U{5YWrruWu{-gw1ULKG{vXTC-j08FpTPW@Al%3VqGvtl za!=}IC!di*DaIN0b+m)&a?z?e$uTr$f;ej)-Ujne`xE1){UAU66J6bx1QVt1aeM$> zc-z))Jf&L~-3pI^Zp$+w`*w&N*v9c1r@p0%YKidK>H%@I%D|d^`*3x_0J_c6#BKli z@H_@);EIV&@ZggHG3gLuuBzNLX+OxFqh3ie7?A=;uKh*10tqHTSb!flAjp19sKB!Q z3wUp|xy;y&V>J4X5(>o_@GqY|RT)yP4bmGIf3Yr#j*O7t@B$uqkWBUa7jS3lbt=j_F*Z7o7RJl_X z(Q}>lDj+_+8wgVAqxAPNW%kW82J~XQiJg5Cxl#}fQPYy>-@ed! z`PXpz&1HJo{Xg2e_&G*D(qy89{JEK34_q1hgKa}+3{#n5PfT5kD{NWs7%-u_!M7(o42{)*aIbaDzXj@ z#C*WPKMI`-_OtRCQdq$4Bv#Juq3vP!iJQ77x$@!zhCL3%^S5S_$n$diS8>_kc=99+ z|NaaYN9NJjoFnj2|7BiN8P_A@cm;0bs+@C88X{^cp+u2~$_ASJ+`d>Ml%hk0o)5#e zYs+xSMn5Q>aD^undjVrkjlk&XyXfe13KrclL*aH`v@KPD8h7q*CG&7uo)C5?7qaSq zLg}w#Zm4rjm}%FJM>zig_IsD$%j&hb`Aif|-mi#LV`|vA(RSYZ(KDc)9Ys$hwZZSd z(p3|GEGE+m!eODk5@X5D_E#BM;W(=>1yGoF;vD<>vt>wX? zk(-k!=77$x3SJ7c6z9}&xvHm4G^*|pm9hGW2CeGoFF74lO%H+U)mFM+u?Ob+Y$GA= z4={VlUGk~o5#6F^O1Fz-6OY~qnDAN|`L{QM^?@7Qedr>r2=k>?H&0^b`BbVe^B)W! zJxKggiZHoxGV7qzj7geyxFx_84=;MhvCEsd_aPe)I;28MFV~}2mmL_MOh;AOr(ks? zhoq)yGCy*JF=n+L?-Bh(wqF7q?h(V7Ih@b6X){&7=SO~iSAf9!i?Fb3F|2ASgBiOz z=&XBDC?N6_=UI0{+kbyi$MzZhl;ec4QX`Z--Vd?N4d{CjjPC+ZQm1WGI1iTvn(eHI zce7OS>+?LQ{27TYF30ix>`Nf$HHbF?<3Uv=i)>e$Ncru$WZB-{s?P@|Vc+H-Z0c=Q zA`-Kk$FAH3TieB$_LEmhKIezd3Q#73*S+xm8Ed$1%I!^~1HfZ^8vh#CW6{(M#O<4c zXwU6;v}`~eA8;;}7i$IhhHd^B^3Mo<^Jm~i^V@XYt%p$eauXQF&E=a`E@!3YI`ijQ z$Dx4RV*2K{AO0M_e%me69EH}sA`w^*^Dbe0Ayj+QYmlw~|zjlMw{`E!*)$AE{wo>+m0T?|}oHR9E|8{(EhOVIHV=C5-1 zqVXy6urTR0Jbp&OG)V{=_ME}ZT^w`ip&=3c{SP5^EciUXl}mJo1bHZzy=40znl#QcN8uxnxn@Ct5X=zuh| zz9b%Lk>TFnC~=L+ZUm>Es`4z+ZyPC3&#qub>pX|5!uS zYo$oqsUccCp&y=ADKc+f5;Ah^4bVxd%-laG2{T=Zxnt5#GS(VG*OrPKvDG=y9xL>c^R zmqDQG0B*jx6a0TLaQAO1x~Hf?&TS#))MF>iOEzT=l>dRcf5y-*co*ze6w#eY7a-C9 z6m-9?0fR;h7^(e8)+$;vozGUntp5a<9|}SAjc^`pI$%azTGh}A9bqF8W0J+z@Z~EG z!^y=6(y~XO^vG{od1)#fcHvxo{d%Buaw~cHky=7xmW8O|;nsXVe&9h-#XbtV&d;z{3$fF$`OSZ;oh<7s12ii5taKrFi+~9s5 zE0+1wNAh}TsWTn?U;f!7Et9Wn{b*&jD}BXN*+yL8lf~%ybfh^p%oeG_)2b zjr@m8OP|n3`j=3=VU(V)%?7WDCUoM3esccsbIy4&5z`KN@b~STgLc6_7&YVwp9b?V zVX``ey+i6l~5o`4>^W1;)*E>K?a zmWr4BC7){)*!9ACboax@cxRJ4W_~yfv;WyZdBi0CzO*vB;m>ir5VIR)%b(L?t0Hn* z@+o{(^MJv=GnkpI%{M={6XOK_@K$ZS%+ql6BI!5H!SyGf@YVXsM+F{q+sfcHdp-W( zu|FhtLjq-=4gm3rhsTb}Aiv%cN7T1tow_MCewPWpcO+2e+&9Q+o(PkQH^XHkKDJ!G zW|G9sWcB8W!Vw*D_}Z-vs~Ii6_>5ziaK9Rs)n$+4J=L|At zolVNtDljX)XAy_+7Fc9f4v*WGVCHJB%fI(BIo7Ai^V~j-(LN;xX+^eRPCwvD;T*{8 z-A95-3Sn2yOSZYlgge}SByNl!>_`@5EO&f{rL{?T{d*=H<%{F1-BU2jl0pC0`EXQ3 zlz-%l6vi&ngB8)!xZIE`sk@s5B|>M3oopB>by|-P4n@O5-BfT|7J-k1hp6^Nt|z_k zGAZ@2h9)lOFgET)igYf+;p-w8v}`IwDt{-vpRYkeN<&}9jd7evDF&u;CWCh^c$Z?`9?J? zI2niQg@(!Jh7vYTgUiBxyvyYXf1#fFb@*u#K@4tu!vzzoP{}17?1eMnQ-~to`gatZ zcNd`PDob#bSPh?@RzuN3DZZ8012lT0h=l>(SkEy`N$?DQhL1Sye!mF!y-J~zYPzZP z6Gx7BeII$7`-thVH>!SrN0#Qr(Fcvc=*C;M#!?|+}B!7g(GchI1U_XhCTM{qrISUh_KforFHh`0U2z(j_41JONKX55^A}c|_MWlPJGO zn7GCab=(v%LA;6X=dFfMhmj0>UnH9*$&i{(ZjT`Ip7y3lfM90^sAUO}XeVy=vDO(T z`y7IpM?x^?XAvm57Qo9(EGP_a!Lh)4;-*qU1D0~WbzgPZ9U}_mc6%V+Z5AW{!htV% zum;YzaIPHfW03yp8cj4yuG%2Fi+ri<$HeqDlMRl)u;khUbdQ~b^Bp<2#?BTLGT(w) z?gcR18ww$Ra0Gne=vE{QdNs})jM;srK zw7G>aS*a6WZr%w8ryt-=()fxG#bi;YLIgGkRHC31=QYXR&HEZ@f!5r)N?@WW&c6Kx zm^@*$kq*HL&mPhJ-rT%4elpzBFNU^AL(Dy(#UH8-Mq9Bj)bDc#_|JR*0Ruu<|6u|K z4RLwN4}YkJA z>L*IP2tvOL@wn=YHY#r|#6+DGOrPyaJ-E)Nqn9k2D{xu)7r)30&nU9P+8XxVw8Xtn z0W{&Z5;u6dGK8#(9HCV|c9CF#I23VdMdkeC zp!542JaxK4QUt6}?uIDMIUtF3FY00I(#dohH^1XccbPoxlLT4eU5B z!07Z}s9GKo!TY-QzpAR;0?fTCZYP^2$(LW-h5dO2ptrdUzcqNln}1`}+wm((J)8~U zn;T%UR4jgb6$_3=HMBu5gj718N69E{M($_`mOeR718@GN;RV{zCMv?*n>iEQ71XPw zzAVNSY0DtoU=b8eI)P`E*Px)ADF(z`V`*tLF;0=73l$^L;L;TS2-8B9hPCj7=XG>H zY(|#u55@XHYb-q-4w(;DfOBpNddxQGKV??ah+-!?t=64%YYD@Zl&u)?Xdb3L2{ry) z7sxR?!nu4a=WSeHK(1STp?A`^;5qwTTwl;e+x-T}^G;c&HS-8+pO}Syx-5PTreJ*a zBl*{+j2FrZc{!TVu);bNcTW++rKU6a3d1o}$UhUUPE~;Llp^wb|9o;|UkR33Z6R+* zCNq&MLqUkS2iux6S&`B>%=qsPez3dD`9&_#mJ=pa%Q1$Yx-=D6YmQ*kTU!Pv95Qq#ddI9(|Z*Jjqk{y!P`M52_{DqF-qabYFrXnsql zPG3@`^pBh65A8v&E>8$pb2VF z@Si0n*AlM(;s7a&f+0ua6WZ)Zz!rJ}j_UuVCv%>m)u(0>o>)dZeTz}g_9RqEAsuaK zr^>$*Nn%zH{FTf>xr{5|J$VXK^!6F49(3So=B{FQ{!OHdH47oPV=jd8pOc1z`E;>j zFg-W2lCEXUA#HCQDm1U5>6Z#{??xMb{J#PGa4MfvfBZ*QnT?VDdC?dbD+s3(_VNZc zJ*W0oqRh!$K7AaX#`y{}=&bxPOfrjvhlL^F>#xi#HspGG4b$MI@oE6C5HNZ8f@k(b z1{Z58Lra|?f4)~?)jNiQT+eFoO4g^E+lJ9Db`#9#F{iN(Q<&XL6ClaDk}`|8@V>_x z;XjkxU^adS^kkPpHP>~0p)rfkqgyeI>j+Fjp>H4v;CC_Bdp%!QS8di~O-N z!@iJq`Y3uI7ID9=()lgC1JmA-i5iWZYv3*J9|im%^8pv!K&nr5@Mli~&InGy<6i{0 zUR@>UJ5=KRmiGa^Nekx1MbmTFGsx1tLd>q>C)6%E4&SR}vL8!cf-T3VQd{s5-fcXN zr4zYlCBFzp@}I-KE)Dqjd@+&8AK*CLZ;?M912X(c@GPes64SW%h@+29;skw3PM#}j zdp5w*Sa0AFbDbr7}r2=41OL8@>m z-rs)$tf%DCkhhP}Z(0UBV6hG~gU;iU18dOpZ#;;c3&(Hevmm4QI38R(PNR%=gTu?S z*fh+|6UKCChC~BT?$v43NKwTwF%3+=bAWm+X)rn1`qJ>$4G#>;iKJ_UxeoooF*038 zo}ZzxksMdBLZ8PG;CA~4?Mw89`M<=;jksZyoSsEz-B<&?@6++(6j7Md(8il-A48lR zl;|@VJ)GiD1bfw!px=BQ?wanw&Q9~DN1_GrT+0*KDz$}IbN3S(Tuk6OsH^ZM+xb#0 zHUM((RpTuZ0`m@SXT+CE^HZaKn6zeCa-E+)H0_5G{c=+qjmIVV?uVLa9>*DY=9hz_ zQ>Fo`9Kh!ar*L=TAGWS%9sQyiL}f-xAk4CW+~IP;d;iqp5I!c~-|v7Zfyw;Mmhxcq z%N;j}`Ow=(-oTLzf4a7;0d>D~>;OAu{-R_v7)z@MzxK1>zN!>wDjP!7i^eL`4~sDW z)EpG#I*r=z(@Uqqx8+%Rn_ml-szWED0ZLd`?K*UD_**=WS#*BBng8hpmj-6fD( zJPV(%xrVAyF%T~RM6x{z^^S3lM1$S1b|L5Ay(-0&CDehLtO)D*&kDTMW4Qd@YTiP_ z#k^dHsf7KWz)W_RTT&b9vwZ-}rMXJiDWhy({1IdIg^0)~rl2@?HYY zY26?(@zN-g+Rvu^SO&l11W~7$yB^bS!j+jU&vH>a#(FD2=;=%7Bpi;y?!WN8X)5}s zN@H=!ANt127POC5;=&7cbUb<$bra!uW*7NXTkRZg=}8xwAitXxeYl3KF)*exik1`a z{Ym&|FUM;f5y2lzgt`1>G>TZ~-5y)`9y7CEV1T*=d&d70)v!p$u#!on_U&xuMfiFg zdT)yo7EYkDKpa~mIrhd{Et7jkL&z4pU-ZX%E;`bZg`e`nuvA6^w)p6ii@HNpF?SNg zeBaM^z3GbLdrHvb(Ff>II)S>SuAnri1TBY4@$Q3O((p`>+BTmj<{Np~oKgnUSEzs} z>yMY77nropiKXEo31}I80akYBgD*_r>unGLvtb_y-ku9X-Fi@BdyV>TFyOBWg^KT% ziS&`99VS(4Fsf5pxo4&d0gXjWhkqqLx|u;FOe|m^Cy#elM+#5-dBMm@d7kMnjx`?i z8wZt^5Yx>2)UkRLjs$JT1J*uJ=}^t>Rh&>!Jq{&9mqL$w6s^~cM#scec%nxfe@$4A zJH!vMEBlOarH&2WoBbQMXFW%Uacw;3J4P!D{qT#+IIna5E}GQK@$L%?P(8j7!Wut; zMxZ>A;C7GG8WdqLYc5R@n}$LqLd+G>L_Ed0TuauCg5-u`s#O3mkbjPvT#V;EyY6i= zx?=(qnI}SGoC@P~PYUHj_w%guL(whaA=zZ^hc%%uY5Z+59GWrCyHcDDFxdoal!et-R2)UZ^wGiTCaMQ~G%DYgJjw8fac;NOHG?bGwov z(io@$f$uo>Pl-01oN7VytiQpxD;x1t@lT=`DuFA`JOg5@0ol9u;d+lrx4#~-=F9I; z#9w~|als1}&@Bk#I--hDKmM1@lT~8WC+E@&4?{@1UlhtoX27wJqp-rHo0^MvkX4gH zP_00d$a8+e1p-{&&2f~M7xovAUb;sQKb7Ln#NxCdubABN=9~@b%kf|V59%7cp*+0{ zR*k;F1+v|+ao`%}-ChkGCZAusCy`yqb>fRSE??ogNEnW5g>{Z+@oDE2ChO1|+Gf8D zPGo$={inGzQsi@9(U1m{-YSfAp#=X)%Q|>C7(s-a=Uc1mAOUqtAb2zh*4M8^ z&E%bAN=OyV7PJTFC)#+RW*DOCtJvxBg81p?4Vdsvjx1fI31^rxBHn!yUmU+eCb+~C z^<#qkJgyUVqdb%buKh{t_5HDD^+Ncowu8(rQNwgw1w3IAgGYilqfT`_yWyTL{WUio z&y`GvVizvI{ZxoQ?XD+TZs$n$ihc(_K|vb(Jc%6e_(on;mcy2?G{m}P^fOV!N869V znX|5FB`V1Kk!yfaT%T}n$zdpR`%0bKk+*I<9d$i#piMwGo|R95=(=hw zm?sHWoE7+MF%Vyx$idf6Ax2bMl{R!0v!nfmC~tC@^Nwmmqi7ism5(Pf{Ws8K;2ci; zSq`_)S%aqObU6LsJU#gE0L-(v3Txw&V5ylS>wPwpT5&FfrjgY+B~1XA?^l78c7{=q zNQJ%IQ|VWSy=bmWAhAaS%7Rkq^||xt)F2zkmK3CalKFT&5Kuu}96KNPlYWCFYI)k0 z9KSIi>-*x6_B4~ePAB{^xeUg4+T+z_rZDwkFm$>`5Q%51#tY)55l>tMFTFc|&5L_f&Brn#4VU?G>0@nh6!TVy7fXQ|UfuVr|>Fptce zbOvWlnFj|i=rZkd5@6Y&JYP$yfbBT8k67t-lJ`eNP-DkrO#8JQ?j6<#&*TBpZ19VU z-@M6v|HbqyuZqM*H=no#tSF# z;XxrdCjFBP8gqOFL21VJQe(x|!9!>vwFUJ&r13>f46bY{fYvWtadY5#Oq4?0-02T_ zyY53t_j)#C&orhec@LG$5~aqT;c)D506i!;3R@#LfgXtB#=>JHxsR*tJ<7%PuQShQipo z2N3AC9^Z#JVpaZ89B9y?ACw*uhppVb@7+x(98{zZs%uGYT`_eUn-0sVIzMxlB;Ql6 zf=+u>Rh92;1U_^3;iaMh>Xqnivi?^(jxFv7(K+9tDA$YhOHE+x#P8t4<*#6_t}l$m zzQIS40=%&!AJDhl8nT}6=3AZq1}+c28=oFHfYo*9_{#=6!2Hy1-lmmDiBWGYuF3F0 z^V3&(wuWl>r0gMf{mbE%T1bMNpB|_ReCN4a^XWyd1A5Ul04AwU2dmCi#+jq_WSN5> zm1{CaAGhz|QnV4ym0rU0E~%_#??#@-&;%MZqywTaI(fwh!(a+>jE^NV*#GYMVXKiB zmiWwK_``SU_d`;!JzEic?_P)C#C({!=ozfoMNvm}9+T!ff*+OMz~cUCWJY&9&Xrxy zoBrB{+?2P$$>r_%^K=<#J*>n0<>T~u=Xx}n69#MiPU8fwGhO-gF0GoD%Huiw2UUlx zfswdR#R~4A#ti{*&9|gCKh?pVtqt%YZVP=RA&(z62JzgT-N}LVxuiko8vBu(NeyBc zM9x%$y0_D@;a&<+u`Pi4>!093IffVdQW|Z3?1pznEyO^Sz_shc|edIsd5Ga{k{n)3}-4Sva=v6L~l*6QwLm zS*bmZiP35{@S!3M2{%Z(;))PZxbJQ&{u(-jryeYOmJ0W-F|Xp z@dX+kJ)JpytCQy=(oBLIXW*jXQtZ6Ixx*XhgGG2ATo)OmVPE6%^~7g%tYLsAJAMS) zZTCTR-e*isR3m1GW67+CoZ}{|6%MG6kUedAu>V~+$X)qL9qkU`9iIopdxksMMJP}s z1uh@%Dh8KiZ^Dy3yXhm@Zy?xgjc;bWA|f7Na9`~StpB|Z42Ra?{fZB$cH$MyF?K?U z#!O(Jsp9i;VKOU91BD0cATd^pOj3IQ$+pp;@KFFfA8==bH7azDzz8)SUIsQX=|uFT z6qMF?;q_y2Jg2d@yqg^p`Oxu~jLI}&m9{rN(Tc-@a6SIj=q!wkOlRdc%i?AqOI$1R z5Zlu@#^`-bzT4#b0vKU&<1d;k_KQZ_R;ECl^ zSz9ijKk?W#`1aR|shr}>|FCEeT;3UmeJ@v%cvW9mU*OHZ-*g((cP@duHDcH`l){NKRq!K_rRm=V_(c(!*tO@e z$)cB%9FH*&lPoqvRO@xr8VMx2f*zpqiKSEZPa#Y7Gzd#wdrcq1FYE$vlA_@Tq9#_>Dq_P=?p7?!%A?bO1 zi8=>NVP*!{0Yv7ZaAXm0=BGFG^l}0I{I^;da_9(-&1BK{vm#)~5IEiRp?9__P;n<= z_Gi91ZW6pewA=`qNCcB5*BZ%{$*p8R^q|7>`!usIfn*$%gP=(lAei0-w}=%OT&#>* zLNXBWwiJ~&pMn_+i^1V(3K(8^0rPm}9G>(M-RQTM9187W3(_B8)CK|GZ`*O$xiE{^ zrK-ZtKMNq^9mgZEKZm!MECK!P+t4K-m>S=9!r^l<@czR%N-t<;XL0;bcd>j}rZj-t z?zGaM-}BkvH)8l)QJe(r&!HVm8GJX0rrj~Kcna?ppsj^D>=lf|9ZNc?Xyg^vC1)D0 ztvCaN8;`@I{F^XtDGH8H9dZ96P4Ylp-QY(;c2|O0NaE`k(xJq=8L>b64 zdtJ-PtaFW=zfqKVb-s)ijARm*P1hk;rF=<0$zN_x84eB#?$|u%J-zQ;3tm`ErYo0#?L|d; zM%IaJ)5^hSrMvXynqZic6@h<44-@lmb&%^V%r7WRBI^&@VcLF<{h>cXW<9Qf-j+Ui zf9DsgYy6kkFWQI-DN&HMz5?Pr^GN>UJJkD8AW1xP2gQz0Kl?O7R6e;Hzb+3W_utop{r}mexgESO$cOE+)5#rYKGwVPnA1*aB&BT=tR1f=Gkez% zIRg*0S4kpw^X5W;TnPBtJf|{#!pws`fhcx|%h*m+LXo3wILu`#17@dVkfk-&2R-NV zlbfiz_&m(Mc^~Z8yrAp;?S^Y--eBBbT~gB4k6j@(q+qm%bMHjpaK{S1&A1}edTR2Q zdztW!p9hg?+fL&7mM|y?Fs%A7ssMcbHWRj2kSRGLh)q?SaCChj_DTa&!*!lFHB0cH zJqaa3zW&&xn1x!spJ@8Z1=tlMhn^%H_K{?8D}RZ}OL<`Un}_Fg4+4LJEaiU=;pT>a zG4N6$EVH?Vu+1JD{{Cfmx~_&9ub1Hy4+m}@HAeSX*3h~Z3ygo0gw^{>>7@-^&Rcm3 z{TCdHr|-Tcr9O@%Ae(b_L1ZQxFGYK$2ZSJqowjxj?0Pqc2V@-dmQinEOOxm>oO4tsNIO&Q?>-u5sC1>in z$)=3yCL#}DTXiDLLPSm|^SH@#iNgbTO8;ypUN+pB%xbD;sA_-`ehnr2ZY zB>jU{>4Sx1;UjWd|Gs|`1uNre_uHyTnhR;3>7je$$Pkln*qISx%fN%R>Y0`iUdidE=i=zi}aEn{1?P#u?Lae zyB+0Qu2KK5zwozQ6b^q+mivtMqV|$j z`mpa5+?UINj220B=R6WWLn zak%17{?lGc|6Py8PJ3sth0V2gfV7<^ z#-)RZ(=pt-MU+__vz7BPErAIK6-YYg;5_~81`78|F;aU*NJ>}~YbkaM{(YB$b#GVU z%Z({;@%0&KvPyyPAxC+^Pg?Q)LuvlPvT>5XLkn7kyW&q0;R*oVSHRi`^<Th?>`G?dPgBg1F15MKCw!d( zU5}?zE(J;@b_wxoXaTQVD41CL#U}i;p%`4&foHqJ1WIARlc5Hn0L`OApe7c6E>rFvQ8J!SLj%6n(d13oyyD zv@>f9=sB3+Tsd9PTNnn;M;=qJT*_*_WN_E+g;0IuAZB(IQ02#K;PTH~pm=!#5wC0p zR=JG49(~RuJx?ioe2VkDoN@kuq1s$DsB0B3E8FZDy*HgBGh453*HhBUQ>=%RR zh$j)2+{8hu{)2_@d-1MS2s8xrp}lV(ZLVXNsQx(aUg-kDxB98=4oOBuy%Zdl zOvmn@2bP}iYy_WYyI^A?z_K0LFp$0i`tM1Cy76+>5N3dup*6qxh!nL?&ZK{TK7l7E zyrIis2XMk+sQwX*G0~P_;p&7>Rg_W9Ux@CI*#gCuip~Mb%LQ=r4qpe6fP&mNb-{^qQ8ZT0l@x1kZnJ6V}Y| zhclP||M&tpY;SDOK-u4LBgP!W`pCEWstFd9axwy z+NvS%b209$JpeskzL1eOm&hC!#^fmr_?zzkAjAJo z!<86Qe(u2na<$3YbVp6dA5>H;nk%s70(C*YV9OLO2`GW&s)nx|%1@44xF=pJo*bk=%acme* z&h0lXo&FwtLrubiz;Z$f^a^>?s4+h>p4?5=eQAO4oaqqIdz9x9;}35grlMmVH5p=4 z$kknxoYhak9civu8}3Th&3(r8AsS3#6gSbLM@F=x-Vxt!QXoR91l~tq#A^+2Na|l3 z@H`!f=WA_YLewy|-6D&6?ON1U(FNa$--2J)B4EC2B7Ged2Ga%(;p22i^2^c{d*^46 zEt2Ep%I|1;V!|-BxbKd8x(nz)U>)rpw85EizF;MkiB~jK2^s5OYX0szHhBfZe}=kT zSMn^!k&DMW9isesT;BO+Yyi)8${^UQRq*EJ8^DrQeSToI1cpr#!6Scr;D>}Q$BEsG zeGRHOJF0{?Y^Q<_eP_6LzHr!H>B?IbY6FrNFTmy1>1gUqY~jd7TKAjA$4rDaU4}Wm#DjM`<2YR{c8heFrc>seAphdQ*U&xJ9pi(i zqh(_#(K#|i9Y1b`s&`7nw1t~ttA#-Om?h;s8GsY7QbBdK0WusLK`CDrTFSp+?(s7u z*?t|YUHzJxXX?S*#X@}J1)}^ZuO{)SzduVQ{<12^vq{LYdVD^33dr6-Ja=B1jQO9! zt%?EICzykk+Y~^0t~<1N39}lUS7PCgHx*?A%i+rLMNqHExxmwUVe5oXG<3lveo$@= zJQNV8z12K8sQ(0=vQ7DAYdI&#-Z329o`AQ8OW5(-{$$F7UCUX71~#ht0R`;i&(l>7?WIp;CrBgX|9&BR(C4H%MSFbijU#5d*$%oZb2xC3`Nxg|DgQRCj4U=Ph7g@p|?^!JFoXWJ^f}4O!yN5f^U_W zhANgM6y$T)cODL>bb?Y)Hu|xCxPJW%X6K5>^x278(EP_a(z$o_VeVPA>2xCGC`1tm zo&x(8u;i5bWlWo*L;m;_P}BHTIEAM|*`Ky#zilgubqaya##=OF+8W%=M8lidU4Zwm zGxeg~=#sn*s(xPM#aWgyvxe@nx>;c~YTE($H*AC-9SXSbREKVJ(?h#QgXGDTK0K(J z53-R5L1#&O)x+19K@x6UGHXo501_<_K1>+i;2~Main2#fi$JRJ zV$`>l#B_H(h$pg`t;>-8s`nt|SThy2{f$Fi^;p060`_oO&X!y&c%G<$hZG9nH}4kD z+aL%VFUMkTAD7Wio)5W~6Ue#EllepC|B*(M&$o|e--R*%i?Bpe1p+b;VQ?15j@f1l zxqdTI`8^Ahcz&=g%mT*)>|yxqPnwXVj-4BoxQ-mccEevdaY-iW_|yk(%dKH@aTWfV zE(BK1zacSGk39G^O1@oeCL?d8$pg<#^zMd*%;0(%kZ3cckJ&EL{ap#S8Kwe%Uogm~ zE$7FJUq$^^0f?xW$bYRLO~f73;b5mP-S%>nt=#5m(h#)*?T`E+e@*Ye)R1EQH%XJ@ z82h4A=T&mcWds%E4x{izPxPG1^$ofr*z);X;pQbjoN^!lstp2(SJ^qZFtiLOGDo4x zbsMq2oDUCfTfnUoZ)lcU1)TL8hr*y`=$D!ZKRMReiMbDVEGBpHuwmhWaiskS?%z|Fm=X%O616A4T>13Pb zQ`o_AWJM0@Ggsb4kUuk|81paDls7+weC$pDc1)L7bxaPQ9Gya;`T49UBKc&VMr};~tsuD+8wn z+QX(LZ*d??4|HEf7la4>@ur(F z|3%vhEIg2hIV)9h;+ArBeQg3(DmO8~?HTwymu9W~?^YRHs0Ee!B={IA%(onv1=}41_dWOA!695gBC>ew}C$yLG7ji-rX@Ja(v@7I4?Pg(Rxuv z8miKW{^vB_J#Wsh=zIy`>=Ewl=7%aC13Y7;5_X|Dg zeV^}7=N~xFy{`BB^^#-XZa=a8rVZ~8!SMAe&_Q*Ug%^vVx;~IA?F9VXSDcftMaU+< zQY?=ViGa<>B)>N%C6x8p&vT3uRMO@z1sk7_1Qn?@Ab=66cMb1(IB9>;{2T zgYciXE8LuziCJ?$;i0q?GAPl9YN^TK@yZ#my7y2i{WsxHy-5trejt12x%1& zV-_U4kg+3y#BccrvMMKp6v{}W!LN%roxLm1o3a74O+)F>_b0SGauGbb(PjSLYtY;x zNstyQm*Qc66aEHkXL8bGG90?w27}H`5TuYuPplThzl&IBQz{?S-)G_8%3us(`FK-! z{rKoqBuISkBcqqn@yFd+oPX1c$guiLbm=RCM=6V7#hp*)7C#<n>xU*CpB> zV2!j=7j2}!b6&RCVU3;zUh+_be*OmNm6AlVyNy;p9mZulZ&5jm<5>Pw0V^B@F)_1~ zx?0_YBjPP+wDlZ*^tpj9)AY#kCOtCI?Sai=t6=hEOWZy82zInL;PN?IF?;A zW1o=F=C|;;S{b)I*#ZvJqRG>_vwJTi6%7#LjIaL$a}I>i{l}K# z@<3fsup;d2IsleF+6A*lenPjFJag>O4(NXR9~c_1qBjowp|gd%+4c4%?&_9hv~<}F zm7E~*y2Ih(S_kYIP~ejIGq`$44_c!_@l%pEcnT~aL*8e=VKf=sX4TR=nO>+=%j|1vHJz#Twkc9tYeeHTZMCF|W$V`7jly0$i?N(J9{&qU|Q(8R4d-Y=obBS67 zRPa;_1h}qS3TS~-A#@0MLSXQ8^t>`3S8IuLWj!V{Pi)n|f&T;#c9*bk(}C1pVmmL> zqyd(25;5Z35svxMCi*JxI4E99hlYO>w7l^tl~yeP$=9E$xVJan%(>5BmMFm0QqbT& z*b@l~(*!}{Z#%pTDS{IN8|k52e)LVbC;4T)2Uj-Eg~yw{abbkrY?&l|NUcK zag!q8)VoIblAA*}>ds((NM6L@i7fP;mW=b;%BV3(gbgiC7BV`N|B0 zva(5ZdMoBig~Lzz-+29R0~(}?D@Xguef11r`9QWg6;^o({TnrYHFcU?FB<2cZSOTWpZZ!V17 zvuHSES4qEo_`zT8QAZD6d44F9%d(n}7Pc-~ji;vtV!_zm1VX?6ivrp52 z_Pl?}S+-r1e{fGU&flL7y?Hq(x6zh%UEfFN3FxBF=|CidEf8#U5%d&yvfOTK?qk+N zIh|#9x`ft&*2sDizVQ?B%l}Faq^07IsVY4EZK|YweKmsbRCMolhppm4G)UA1AJy1n zcJCx+PkA=!?=j>WJaOc#PJM~SGmJ=ibsp}~wxV@#I8_-3PvpbrX)3IjhTshLoLLgc#S@uns2A{>oYmh51-fRo#(a}Ni zwqfd_Z;nwFqrB?)cyrdZ!qz~w#P3DkZwgCBNMcCYT2`*J9ag0)*q0OBk@*3wuUBxT(_P7am*n3_{ zixQW)Gat5Fw}9)#9UPwN6s9?RC5qhngxnqn*lyDX^4Srz(di#4n=_61eQ5;VNOr)_ z;TtG?p%RB$YqlO9XABoxLB`~*pfbUTF47D!^GiOg_;>HDE`Fmgye^2rs80sE` z$y&nr<=s4h>~zre?E>GxI&^<4$q3|3Wj+h0z%7l*+z;a|cz&%714BP59Q$G z{)QuTdpD|Qt|2wy5oBw`WQdvNf^*idXZEkW{4VvIzkQc7ouMQJ1IcFiqpihs zYr!R|cSn~0pUZRT415FAO({r3dr<#FGGt+o7*8+3m*$&9q571Eq$zj+%8;W=)L>!jNK6IFY3nryL}Aa~-=W9(TQ!aqKnD@dwH zgzf~?1y1na4V{9kuY+-XXc;(v6ULp+%Tc2B3=Wk%B3s*PSkChllu=9MJh4>9j81#Z z|MUzSnJ@fPzl51gV>A57-f!JgVlZ$U4?4C^V;=t+!K)1haA$EkEUHb#=_60@`9Uej z8Cs8svA9zr) zaI;t!XLD{MIiKK7SIhsT&FW`aUX?ujH?@iES7Nib`=xQ%Vi6p1^T&h_x4?Hv7UuT5 zQjrCePO7*GQ+~|iB;FClxX5he`%eOwhlio;Z2-B_!p@ubC!t$E>ok$@AhmnkVb2jq z>bvb1}|i7 z)y-&&l^`~ZN(0Zx78eAI^G004@%5=P`c*s?K9r4vp3VdEU;Iwi!NaNv`NhN;1h^0D zZ(_mKLR9G~p>$Rq?5_8KKo9m_-yVsv!H3{rpD=`YrLsKuejGEJ%Zx3*4eh$Mn3k9f zpBg&o=KUdHvgZKS#?*)UzUK%|ABid*d)29n(6Ptyl zQ0x^za^)I8X54^0IUY-%9#5euFFin6Xa=rt~m7*oeCw)&yL1XUr%rvdPuJ1-6e6>u@GgVO7-m>(dGIw zuIr!}Ty%}#9}o8C=6gyLG4FHyO`6;2cg4G~OmZRTmoCddNfZXB7EP#mc^Gtx-7(L0 z8EQ_KW0pUwC9BGQVaPfK?yl7x~cSTQ?8 zx3C@6FnYU628P4LxQDi~Q6XHDPSM3b{D+r~Nwl^i_uHY{)FikTI#m}i&ObA7 zPl5$FF4@TyAGH8a>(gXskTT{={sZ|_1K=9n0YP7m@y9J9$XJ@GTbD-0 zWGZ1|jUx(u{S9%e&qL>*tMISrDaZd}1d3e{#mL-!_^&|#+AFT}ubq5{VOKA*9o}ke zEY)J1z1Y0U(N-#ByOQ(i)hBe4or~%2J7I~~XDXsp3C|{8ae~TNX8+n)Fxt-}HjmcQ zPXhuNy3n}F^76x_f5JQxqor}lyC0%Wo3zYNLPHG?H z#N?Xd&BN?lsLTscXBMK~At5T@q=?s(s&P%`6cnVtd8-RtIiu3vxVNbpW3)P8G*KQ5 z##L2ke2ai?ew#*95KOg|JHn~A}Dtyc2kx+*GDCGkHS0;NtTN^2_Gh}1@GDC z@Yio!yqa_Y-)4z$-_@-r-25UqZI)=B-nJdg731L01lpO?=A= zHyYQEbYe~mj`nnuF+m+>O<^ohc5xFDASeSt~DQr&@hpec{j)~}#bZWwTnCQZj1%k8P*T^XqGDxiCi z<$ilt5@~%l|B|;6|Ev5;Zs{RZCQ5LB`f+f(qByf&M3AZUD8hg(pJ~LWGW;*Q1CEtB zvF_0nER}Fz?jKX&21$r{14K{l^;jt@Omx9x-IxK@Ss6WiaWGE=U!LF$v9Ccs$1jEr)qD zC_A1L-Txa-Gd}1M5sfu1VGw7>dI#8dY`mHc-enAMd=|rk&Ljv8i6uolqwvY;TbyRd zC0o`DP*1_DI5e`FdfePprN#DV%MSX}cYb^M$Mikm$&`IWOhy6|r#z-l^Sk(0+1WB* zEsI+Jb2qD4_nSC5EQe!@UeVrr+AQnf2i?-$W?oqL3ZFI{!5Ec6nrO3?hzHu!Uw@0C zU8M`H#$Q9pb8$@WaV2R9=P=t+9natUPFCI$VlG(bfOf1rhP=0-nTgUkYh4AJ4nD>w z^P@4IH-p=$UIxmR^~7!aN-`S%1A1@s$nU-}G=CZZIUX)-9@Lm@zA%6aY5Ao1mNn(c zyoF!0HOYr+0b&>SkX(@aN<~7O;m4T-8Ylf3O}0u9_hrHG(jkc04Z9OhBQ@sPR4L|; zcP*NCzrcMPt)O$kZ_N3ViDy>tg#GThP_W|y-G3?>hh=8syr>MaZP_Doc-mZS+O39x z?_$ii7j)sJB|&gmNY#9NRtw8C1D0>w1-cnk;Li-RJe@u0wqqDqKxkjRGt=0pKrWK6(yIL4rUnBG}A*k`YwcIKGfz0UzCT&&?b}| z+6u!T{v+e>6zI#aSoA%b4O_!&K+t3}$i_KwD$2i*`2PJUrk6-3wLPZEt;*c=hlt%f z-jh?36eq%G{OIg-n^Ol)-u(A?AESLlT=FbNu_siys z4sS!Qj~aB$>>%pt(byspi?3&HC9S{W!Q??OXQSZ{IIv_RK9gF6J0>-Q>dFkvQDkSy z|E6*OZc9U>Sr%}|s~d(ihxjMkSAtPaDSkFwN~&Ib$E=0-!8c19imD$%#oi!V_Yv8C zi4apWR}A_NC!@?!BQWwmO?GsMbM24H)4oZ;Sb8f8OvAh3x4tmdW8EA*Yq(JHG7k&= z((&=io3M7yXI!7h!_cg5V2&7aBe$2b-#!OV&s+{|(Jhe4IxA#89s%nxwwuE&CQkG7 z=m*&rtRHEib-4=MU}Zjk!#*<058C;%(8p?JY zz`&}-B<6=Kvm;B5V^Xw=`cq5zD)NIG^nJoW!66iW_Jb@E93@Uab9nWqSs(0;eK=*N zB$(X2hFkxOB*%9Y(}(wTuwFnBUWa>9`)#h&@W2^(^!Pqm@puyRJ8e0howxwGuoxGt z{A1p1_XgJoR1rN@HAeQa1IGHjVb{1ec&o6UJNx@X_;O+hZF2vB@e5ygWV(>CJ?+lf z8GDiK1Zkqcj%)bI{Vq;<8p7=y5rFm6A7S94V)9_e4xm~xIF+-k`fmjn`EQg+ZQ*fx z$h`%O`+Vq?_YdLpnOKZh5Jn?yF%%qMN|&ngNI+sBS$ahgexDr2Pib|W{E@Iqj6z!T~Q|&f|(h z7_>r)j=m_srLp0h^CcpjwuvburS3PKYvcfjPPgFC&1dMH%|}TC%MQ7R>>gPbjK}ii zNU-k)_WO(BmloH;y!YkgyYo&w60(&psW-qriEr@d)eUz2Qw5<538XRSF8X_yW8_7a zFLd0FS+`FXUaIzxQSWM8rSXi$6t;rrLwD9W%z8+^=)({Ak2oECh7!J+{8_Qd@N*L% zBJYf|EWRng5zXPqv6`7T z@1^0h!e*3SoJ>luZ{c*z*I~9REF)L@1-Qz7*6`ZIfZnzEg}+KZle6Jw$@`UNk&|k-vS8jE;rC^xow#PcWP8^p#}yi@9e0^Y)^^vO~oC$6dZe zlL+_UwG;3$Tn6);e$Xm!9;{l{h#9rwT(5@tNJ@UflnH0lvi|~$#6*}PvWUBW+eLib zT1g(wmxINcm+|h?Tx^gOqJP3%k)HL$;;6l3qEik2Y`B3B_5HD;@fAsR%;I$JEQRjj zNMODhfaEb_C{EDl3YykIQ=vKp9A3satQ)2V9uiEa&o-)^@QFBS+@o6>2=UDBBQ=w4 zQTk;Z=048j`?;m#^>Q^vW8(|5Tj({0Jl1BsJoV{Gap2FGKa9d#TH*L98RmIsFg~|( zz{dMu@TJQLS(LB_yT;YYL){O!pvwnTczdDvQ#ihg;^EdCy`-@rg43ve8aE1Oz~;k! zIP>;pYWw>zK9rcvUot12W_Q)XQl^75;%r7b>W@I+jdjFh?G?IZ_%RLgS;pLC=Uyp4 zGO%Ws99msA!Nff+r1j`aaN+-@qF1IcS4yRrcC!yeEklvz^PUE7xeCU8*#IN5U2rJy zI;rTCUTF*6pLwr7B!!)Mm_dQg;xrKW+{tIk5unk^EbfNL<(B<=Eyj1Fp-fV~YGHfB`l57V~|0iZQq|*28^KshqMELH&?meMwW?9P~ zOWD0beP27rY9NNFd7Z~Q*ODP4SO{0B zO-Bsieb*`W{qib`GpmrMb`bBz-9+5)3_7|s6Q1i2vTczo&DG8atyPEVrs;Db)US>f z@(tmXO#_^|cNkhfb@R5#%W<7=Ugezl{tk_vxq^1OJAnOVoW{Ef5%=3k-|cG5o6S&j zw+J#J$MW(noW*-JDX3?ij%O=-iR@kze06|NMeeV{kE#tsSobo$x2%Jmi5$V1tg}S+ zTM}K~zJQ%M+3;rhT?a?sx&`%c2PH45FVmRk`QD-ywS$@=d?vIWuvz%AEpgy9Bus2ioXI+qH1# zx;&hERYd0wuf%mVgJibUA>QG0Q*r;lpBVT$f*8;+EV{lHlJrc-XP6*dwmac16#^wJ zvsBqVl>Rfx0C9^l@^x$*q|JB_;3USS{MqPvNexc1Z0JXK{2?>s2o1ZNN5I3pb6pSwY&gbtp6wjOLX6)wa4@Ye-HL~$1em{b)7>1TI?k}XN`9?*1@(f$4CevM!+5s@ z8eb>Cs~ZNixA-}gJ7l0Ce+g(58}T1&$^)-8jDF@6Lty3@+}cx$H>#6q z?9>!`?yx8mS|Y*3r&hp-qAY#4_d3~S{)!aZN5Y}+X}Br856YHsFuG$iY?R(d{N(4d zZ`oS-v!VjL*KwH!>h*1*OVQKtN119h9UlJ2y&<$2DZ#Wk05phBXT zn+rn7W&aB7VfkVK4>RDU+9KF^=rw$dR$>YSr*ZH5rh)sP1hUP=3$wkm$rF)WI(vOM znRdXK?r)g_A`g==^-KgTo?S$bSIs3$U6YU--b9^Ce$xHR+(7G#J@##RgUOYr5o+~O z`VE(gDyVX4rX}pO_(|JTrQzM$blNJr18n!dB>I|@xpO$|94qmN%C9+ zP_aTSoY2)O?;&Y%nviI-V6q?=hO-hNw&Q`kLe zO2PBDoCYZiSL*fo1##xw9yn>y%kbkc-dh)GuqaS|vYvP}}u>aPH;mlwjo#S;*&YFE_zb2D6ZMib^9PdQ_Ge=B37Xe2n zH`95qcT<&~W`6nOeYkIR1n>OZ3@SVJh+`WqOC0n?!17}-?pV?WT&pzbVLrkXmakH; z_JmBDp#}RYS7Pqn?RYb0233xTL9MCZN&KyC-1m}caKwg#+>%ewG$aCI&DtQPc^g!0 zvvAhIN}O?C501r$pm(}5qY=K1b0NnZ?%1Eg;ln;m$3IJ|JEe*k>o~w|izl#OaxJDT z;bKf0YjRyZm$V)5z$UG~wDQAy4D-GVPVyxnKwWTG?gFm4-8#jK@!FL7Ib^;Z1WydcjBBEM&1nWf@b?d z_-f)xrFVBiwBiCdcX})1wyPK}hTfs>^TKIWRvlQhU!tuGrZFe-fAHPj%|ZJlGw3wX z1>LW=$i>RJ+~T22usc{1hZES2ap)C%-5EyX`_EzWc?G)SVKA}(m=0rGmqPMbGq~YO zI;`T0#`0RAdaZ%uA0fr$Y+w*;)$z)HDO}RJk7&I~0DtzsK6QsTnZ?t9Z`wf+mUxh# z86--E0#DF^8TaVvBlDrMemiD5%W~sKFPZzDwBltC=2C@E^303~38vusGZc5aN46ho zK83@W`IqnLqtF3Eu5zpc@!iY;8Dm-a zxA7GTSuY4V7Y~BHswG@_5C-?3{NdjoQz6Ah0!+K9F`O(G;To9_6KRacUq=-2vb8I2 z|I!F?t}2`%)

nSu7T`_a~t%St07aU0xWL`9Gr&*$_nJe8kF!pvT@u{%HX(Mbtpf3S>jM#S~ z^GEQs`4XthpJ6#RYjGp96ijW-n8#*#(EBV$TJL8WjkNYcr7fA@ZhDSd=!*~P)St~99J)`oFKGvEvM(0?BUodj z0E_2MkVD4BXzh^=#rE%^fM?D~D>P91Ip0u3R~c@;?4|MLU)hfGO}N^_L!mSwIHr>h zKU?N=qn=yRZ*dR6qQ8#pXp4iZFKuDUJblQDUP?^ad~8wj4905h9ByKF1f<4Oj&4>F zUHFN|7UZ6iiLViCS8ftq8Dtr64>JjyoP@0PZ;8@5)=JN)(0Vq{n^oOP+6PKODlh=W zjiz!PWuJp%R5{J5Wjz&c4tV&D7F0cS=SGi(;f?EWXx8OPFw0mGHkBi!gae2Uh~O;e z@38KJ1lw~+1KXS`Ame;|6R-qwgr{;t+fT#nKawz6Itj*RWrH1?>s$NsE|mG7fCm2y zSa)=swB5Z#&V*jT%sfNbxUY`%U0cLW{@zHV^IAav$`s5K^CrrQ$|yK`+;nboHR^|W z;hrsD$ijO~Bt-N%?Bk{~J)Z(`q4+%Rte9&w;_d)RDW3r2tbf#CaFkQEHUdvp9He?b z4574875O?hQQ?UkE>TfH;jDY$J1o!famdHd%cLmDlp#DHdo0sU;y>0ILW@&fuoR*ry!{1jH-5x>vCGKF*yn0mqag$U>%-}9>?V>l&#Guqj0PZXI1KWu8q}b6Gj#gAr zaZOZi`&61kzzhj7_q6PWpXD;Y0$gd6WK z;mTuDpi(EzIJ0jgZ2>E(V9+{1!CVMSsptPKPD3}TIW+Ir3vx-xAJlA)(kIpJB=2Je z+0zjRPsXx{?Y1RkB45-zD>wtJvu9$>BUx_q*B{h8{4;zom#gz|(g#WZr#5 zog&^q?z3S2=COa|)ZB37J!nJ!O)T5(xFYn#Plva=6=$JT&XVFund7UI5%9HgHcSK&G>WhuzD19ap>3t>Ck$Qv6B-9{FbsMwDZyM9q=E&~*S!nzHG2P)|#y$S{05rBH zz=!X#bVKYZezm>cO6}a_l*L!79x|e8vbK5rQ$se)HCxsKY3M#nf$>r+8H`ds(L(F&qNfCjtjsIxs$M^ z#GAZZCl6!0;z-taL+12_Mbv8}%TtzWhQJ;xnCdu*+fBTPo!4Eg_Sb_$?w*kS^&FFa zVijEe9*@2`j+|eoCX=j}>3EU7bDvz20@ps-;L6Q$RLANwnrqI*KQa`96b|!xH-y4W ztxg)1a}cKAe~6Eoec`S3ILa<`Vf?;-!LpaRICDag&6;^o!cAt2n%z$n16U|pO3(e3L5|ZM&^yEaXZGL2B=5_3`ZvoU zd-syQu4^|tFl`w``1TNMT_xsxza6aTI|uo%&f=dH>F~F44n)O>aDS$6MMaSrWZsTZ z2r1uyN~_p;)LfQt?-_t^{AXh2>|1o!?P=ilUK@fhAc1;2_|vhIo1B&or_!~_vAbhf z$9u_NCvqRP-iG3auMB$E_L&)-+{Nai?9k_;GdBD-=Bf-%#m_8aaWr5W)`#wa5$Aqt zB4vZOn-gKO!A!JW^nh5LJB;_Qr4gU++u1(+7cyL#LAHBw(Y`W@`)Qd8ma|=iiWTWp zA~TI^Kcy1-olCK|!4w0!o5_f9Hk$aSl8(+_oW*H+^mbnmC*+6{7>HPshS7Ft_DG^M zGMBSje+6WuoB=C;W7w`$P9j~RiJD0+t@Zs)c?UJ9?G;H7eY%iwXi`UcO(ptw*BZQX zSepvo6@k~I!nmO*6(4UI;h_5&9GqW(mG5kc)$#-6zw$wTU? zIcBk630*v3{l=Bb7@A_hW#c&t2pB`1@OZg9h6;d2#Y4z zZ)6gW{A9i15<9K&fLkaWEYrqY!QZLh9}jZNKN5}`@%SqbiG!-hYH+b!$TFS)dhFAn z>(*bs>uGOz$CEbqv3m$^ZXTeR_ZKxx>dm(&o+I%;v`Jt=8|jStK{FzzfJA8>T;<*% zt8Aoz^U0DfcK-xP1zYj1JVC_(cAe!pLFsWz{LniCg@b(2CSe22ik;wHGVUj}^QH0Z z`LF1{;5RXDjVH5}$B5`YS2D`YrJoC(uzATS$vB)3msZO`yYU=UwCq5aw_Nb9D8jrx z*6ViZ8oO4{gLU(tQ@y<@5V0o*w@r#C^Ixn1C(~*uZ5hO6Pu_8|ZVXp@tLWqHn`@wI zP?_odn~Xw}ortE`J#0Izi-S9+!XG7h#wA^Z>uTD|+nrXx?j`croH`vER>a}$t5@jI zp*~En`p%I(bsC$#grN3{Slm^^Lii3%#eJB-vZJ5U2fbN1@J=6!RsWh^K7n+m@Ik`c zW(3LOl0>+58TMJIh?%{!Z4Aij17yD zS@-sD>V0PqymS4=ua|ZNlahM+>$1=yPgi5rIDHvw?qsM>W_CudzToj^50JID;6> z7BgWptPOB)NC8gdR+DVjAJp!piv2SWbCPP~pl2D&Y|&_>0_O5ybXS6DUicl2q9f2~ zuO>Gsob4UU*3#&KWLnx8$Y#zoK}xt0Vg+9DxooG~bHE5cN0);A4J*7{vmQ>-yJ)_x zo~A_vk@@!Z5E+sJYu9ywS9vmRmAC_$!hYn_hBjOkFb=75*D!(zLHvbtQ2Ap%?7GV4 zkG!h*#W!_f>ZmAuUc4R1@u&QjgkZdUn&pB2EyojQzkuKy3s@ZC$L#u%0tTL5UrGmfy_-8^{x%n@Y2`|xvb{-Nu7L-D?>Cd#!UI&KL@ z=E)hl?Tix3NRePxtrNjsmbqWO{V#dBF`Op7KMRuU!{~zE7OF4#foPo+VCpmOpuB>?d16|J-iK)>jz%wCbj zOttR=%(BmhdoE6JDlL{SKA(ohaSzd#C&i?355A;nanA|xz<;k9UcGFD)+cqUH#doc#H0}V+jc55 z*Rg|6GVFwiPFEP66oqXiR`}(47g@Ez7sI57Go!ibrSMPW7S>rM( zQCNb5Yeo68g1PjmVIm3}i^B#nLwf$cEm%|+5a%23;nkeau=j*KM1?3aS1iOp!*3e+ z?NEje1%N#QE2&aaES7jI=MFsQkpGV5fYbC5T3&abIYHc z$$O5#r9Ye#W!pf$UkI;cgu{s~Ysrn|3{D3-t6p|Y92Tf7LDPG+FfQ22lj~C?jm4_w zvmRvN0ss57b;Sn=voJyHrgacj$h48KP>ig;5L8hIghjnVRT>Fw(e- zzWcDZ+AjGM$9VoR6gsNIb-H4SK_+1^Yw9I3nzkMNM?+y<{0E2%pF;{VR&kQHl$l$2 zt_5RRA8tjE8MgjRV>x%@^vhK%=+PUXvgdEY`iXPIG_@4Qwk;wD6T|t{ZvsK5p$!(R z%)pB*i#0{Z8(K>uKvc7t^K5(snoSfL-@poZ>K09sO-_RF#m)u{&(~1X7jH)G9;486sqI*FNlvU?4btOl^>2@W*WQi6YXWxM}Z3e*M#1q(_ z8I8NPM&KGjw|MWO(_rn+mPUCZG6%%#NcGnB#g9J65OB>Z)*fDRGbEF`^CY&--FZ z^%b0I)C7JihIqR}5Ck{4;O~eb@HtBGEy$7~n-^GW!MJiindY?# zrvFO8pVoJQsZ60!m(S8ortKV~#1In4i9(%iY&M1~10Q?r&|L5o2>$&FZ6n&GV~#7B z&Jo81)@`c3&5Hinc?AZw*28X*MC`i#o8nLvwVYl^o0J}a$SoZ-8nGrpl?I%e!cgGb zrqamFXt;hy9+FhqUigUwe3H9}#zYsx>GAz&@H!LIW5l>}SHd}~S(M(px51fSXN^xYyMYWuDn3U5|%epU~nwqO_e+I<4Q{ZVI3+g8ALr2yE~ zt4LpKw8F0_ReT)vj4U|)oxeMZGWYVme%+-ltJTd47ai1o`6qhH!HM4+|u|?GK;z#U$ z-vrB7%i@R8WFpDi0wPPYQ8ugq>oViOPKgVhCI3jig9ALO_(B^U_*BErcmUGp&%xn+wV=OA8>*uQsqv94@@uId9F%IMI@oVX(YXU zYdtI;TL6-WUr^s5BW%dFq(=oZ2)k*~WC=;;<}^2Osg~wyRQ#qQEr!gF?n9{GeTkOj z8!;hA(+JKF#r|b`a1u`&_U%;SmV|0BFJc;St4Jx^S>FlQ%si;6Z3|Rd>cYYk8vOia z3XJ5UuPWFdog7Cs|Dkqr$a?}r1_0E&E4e=l#JRfq{Ywe_IUuen8QexF5 z&arS+f^F}DVC%Yn*sR+MF>(9wz=jXlv#pkT{}5#iU5&By!9p-{ya|7drsBc}hiHgt zHK~xu!?}W$@S3|9boaz!Za^$3rpIzWo(o}_NO|C8ca?6?aOLVaS>dH|bxwX-Asp+u zhRZ)$GDr0_abJG|oqc67D860ITl}>V3|3`x_#Sd>KlUNV=gc?ixO5%dICmAj-;WcW zq70&)dxi#zPeQ4st8je07rX`~=(#CeaJN$69?>@gzh*+;cs7w8YxmMs^0qYExUwl{ndNHMTmmktvzt%zsU@AxM|Y71<%#z1XY0AdXXjgq%jHn`1ctgyb!Z zcoYGRD8<}6mW$guPl4-`RcO`d@rDpS}b8$Rx&8BmBNaP7!l)nJ=h0oLL zO=lqD6d_J_?3+o+9Bx^|3m7+y}$tt&bOo+GxEQp>UXEP(=Q|du#x9=F)FPw%WmybZ= zx)40+u@-~Ybdu$@o~Uyq7{%RK7u#?Md!9;x@nME9zxgEoU{dG>buOmzTN=NxE%j%UF+tvVJ_w*zIXghq&wr29NMW&d;$PI1uoicutn)O<#2qywB@%bY2K@6BF{G%xnRi61Ylx zmUVH`C&u7_tO>Zyd_yb`bU^2qCeB|E1>DB=-79?vCj3x_q`8vZb8fR3OP>}xudNQ= z*rcJS!5mQfZw<^FyG<_M?ZMqwj-zp{Hnzp<(Cbov&}{rWZh><|%lbU5@l+)pX2OiM zq6$-4ABj@ORnTrd%ONd!O1Hy7+~B6d6gg-!da7q}2B#2TSbc;Ov(@nVSwa+-S|SJp z(@arYsaQOI zrthB9&EMs@$8ME_LD&J@`%oJX*r|cc;B7ppcm=qD>sTDj04VqSVVJ%F_6KF-+t=cZ zueC8e?g#$t#sbLNwH!Y0^@ZsEeB|YcGF9cda4oFBT+CRE`&8Ep8g?DRSQAC=lD4T# zQn~`O_v9GaDWnI(TuGb~U(1J~~T<;3LlV&m=QAX~N! zY^oA)LNEaX#LvQvb=Ua|r{(hfZ>po?%azDg{!Gg#!!Kxe#CrG5ytK4POjTg}0!y<< zL0S;>iMoKGfCO4yt0DId#F*KlFQBVD1!d-CR&(U1b3c4-f%cpdJVrdR#)ozAt@OY- zD8ps{yd-Vf9k4ZdgnI<0b1}mKZTE~cx2gTX9ZJi+!merj@xU&zn}JrN{T^*-Gr z5KdOI`QIAb1(^3?2-jvI>+zxRJNthWop(G|?;FR>LXtg8DikUu70!JfLS?kHB(y|B zT1tD^LT1?{qaq2}=e~|erG!dK8I_c@i}sg(=l8GI%O5=Fd7k^euFvQF&S3KPHglVk zE#c_rGx#+y4~$QSL*4G{ob?n7+}P^O&Hj`|8h4K7e`yCpt8C&@!^$lf{=Ty5x2>dmuBM_w&qY<6R} z%_yAvG2CKUNAPDi`apH2@Vy}(Othp-A$EA!B5_|VggWhoXkm|kvu+m+JsM1MzR$u> zlaAwo1;JF|LnyX9Z6xusWB8pi?Vu;BiYkgK{PbI;G`=;7ySKWDF`m90FL|qgdvv+r zlA8rTv)-csMup`o=A&->7`pb%8Z?|bnsqvJ1Xafw!N170XwY|#@Vj)_Laa& zvxQuth2a8tHFw|J8uK+=Nu)7YFS6niW1r;qHX_R=#*W?C_- zR|J7{lCa0lAB*h3etIovCT!H~BuW|#C?xk$)<06{WD4A_b|Yx?=>}=&8{%QjcQ<-wejQPZ{Ysv!RmNf) zgmu4NiMHYf%-tbP=Y5Kzn>XzyZX?g)_Nh@AcG?Md^-95#h#pd_BZ3XJ&*)6)?Lz;* ziiXQ3ph&tJxj4&&-RNF{_hwc@WaK6+U`~>C{o&B6WDK{q*D?#GdpOI|De&>^G}OFw zpXqIkfn0$>=cD_8i}U&k!B*+m92!V>xN4J#WjUn&^*`uvv%x<9OC+he4wR>ErBBk5 zxlL0lK;x3&rv7-ndZb4j?(lYHUo7=Qu_@KS#2$x*Lf>_?%Va*baTN2p^E`cI`hX~; zX+l!NZW!Nhf54=I&7?q0FSve7Gu}X41`mql`d8qiRy6uLjAq#%sZ8BK5;;Gm6V!9X*yoGXSp8a|ZxVkQ zu6#(K@m&EhkuAhK8>HCDhZlm#6DhEfMKt<(0SEOxaKJX22CdqKtJ>t*r2+@@OI;Zr z?m7>B9|gw2bazznwxH^&1GvtTK#_2s`q(JPer(nwtA+i<%Nu{uNY9g(Xq!t<7d*nG zUx9dLyfyC|fE1#$IqZ^^bkC*E!b$7&>&WAuS^Twk5T#7!H?+_vB`9w)GBD<;6t z{24U7SKty&oDWQN9QdCOpr`)3$VsI3F#)OKd{jpYNNDrqUQHSH_T*p*Q_l6|`r~#! z1l-iGFz3hDaZ80=%Jdo+>eVlg8P~?Ly_3x01lW?6rCaH-wA1L`paI2amchzcd&n3& z0TN8?$YrA;ZsDAGT8i`Whi#+a$1@^64kB#7#ePy89ft32&B2D|SUMtsWl~)$iS{ll z{F&fGFZ_If-E$^llKW^}XnoVd&g&t3PdZIxE-l8Y2I0FR`7Qna)g0~F66S7DBsBFH zR&O{!u{gsKukL+}5eB1Ku2`Lw&*_GWeMdq3@iGW$-$-BWivgp$7@*8tSh!Ua6dqPW z{kItOKj4E4-z35QbXi<+a2xaFg)J;-^#qOl9GG&*oG3TcQl;k`;p@&B_-@Bpp$B~# zo0}G)Y=Gd?y0)L(`SJ$6ocGb-_3F%{@d5{DFbx&%xx@8|Cvb&t9fag90nN&@_`(3m z$vwKfyYq7{p!p6B*1d_=jcHV8Q$8d8>m!XhcpDu>-olZge){aBGhLpc3u|T@z?HTd z>^k(aD%7KgoaxPl=gM1gmAwjIQLae5*I&e4^4hRw?szs|!I6Yry2emVNBEF&SjEyR?ye2d2pP#s`4tL|M=Dt90e}B>B<;fHBg8L`r9#n+Yf5MCKCBLY3lai8o0YwL*3RI zl$sESy7l!C`ZXMvxE-RCXO+`^lhoO;_dEFzri0t`pbTHg=)%pVmNcnAj3_9^W3F&t zXr6Wn;=_{g_x%|7^nEH1+J ziY~$hzjsuuC0V!M-d2E0)aUmA;;4hPSGMWb_wO zr;-U`T3vWjq?4R&RN+?jE0I)rbN97z>BXI@ z)1ZK)LGaTgc8uvbNVRy5*L*eDEJ;~B@=2MWe!79SZYUtdS4WzE(^f#cd(pT>;1!u& z4k3BTRp7CPlC|$;>1dIsXizALTE4<=ZSV-*^;$qjSd~GQza?X{T;Se5+rzX7+3m+m z1@Iy!;|KrwB=>j&*V{D}`3@xzUC)!d-C+6}$?KhZh&mXl256pS0U5(Y&&$fuFl z;ZDquZZ#H1GD&SzjwrZ?s7WL+XbT5@Nn;Y z1TItjNVVDkPOX<=(>)w<)rcK1D?)JK~Fga z+Fjad=}#%@&^-<^yDkDAFN2vUb0OZx8x#Cp(ehmg1lgQ{(IPkCPv3P;d$KjuoEN3W z`Kl0CEDAkCAA=le2% z&rXvSZyr$x%{t64b_N$)34Yt$ZW?`aGd>AShjZyCVC95DBCnAL3pP1Im{bql@hVVo zAcc@83A@mxX%3z<`$>$Z1i@BkbyU8(1g`$bhxs30X#Y>iDN6 zfP7LH<$p{zv&ejU8SHglS0A+)&(}(H(TetFjMz}h3}-tF-8v20KFJx)CrHsno*p2G zK0xV>aO%h!!R|AuA?}YtfUcHg_iBftgJK3MUlY!GvoC=4P#B)tJ_;6$2q!&_y6j8L zz#rR7iKUb*yU$Y|m1`biQ8uDBA0l*A4^xQ&fmbDDkm87 z?PWS0;M2(A8A+7=HW4LirlZfXBXIj+2&Ag%LWR0EsE;gVPP8w?|2j^=9h-t`sRJY6 z<||6eQ{I#2^1b+RU>voaD&#AB`{BvB7tketm+YwMvv3|bOU`YaNgN|u>CDqdQDTG- zc3)kM6}D&a#zkA~Fm#6hwn(G?{zqhc^k!=8zLb105oR-+4nUu>9UgmGg_q1Ns9m)V zySN||${&gH>4ph{vqz2{edQ=dcKd?Cb9sxrYJqPo6-4v`N=U;$8F4WIK3JGau6`!x+)QRIJYU1Ez_4@Ka$r%A1a5 zJLF67O~zKJRBeL&h5qPg7(`bmUi3xMrAx^KnkMxdvOFdEr46H;kY*-ybL{A?hJJyM@1z(rr%uOwL zvR0YRO^6b@Sy52)ZUU>+p#fq7XNt&76si>CapCPy_?8<1@46!~YgPjNS5{wLkfKgM zkDU)&^=GqdU9LdJq_ODt`#f!3dJTP~d?B;2mu~LQ!Y{I~QOqX`R*?zdq>>HSNBQC! ze;r)GgwTC2?!yeZ8_=h#irGrz@r?33uG{e!wk|$L&lmk*&bfPowCM@De)L~DXOj+} zC+uqSWtYLLmB+zEBo*t%De}|KW#AjZ>w1(lP>+O4;DYX1{4Oy9h2D=s2F?oa7EOY~ z39DgdbvoMK6Lx0rBS?hoG8}MErQRbHv3W??3{HFcY$v z2SC5AqH2d^Q8B}sn0nnJUxd!&o6j<&CV+$Trjc0N7fnu`TuE-a4^gjwu@G|NGW>VJ zpE&NffcYwJ;BfsOIL;lW4|B?^uY9|Jo@FN>v0j@V{Tf0;?PDq#&0lTh=m@$|NyRU`7(?Wd=NxcA4{glP2F?EX6mb79bO>&eh7T!{Oi- zB7O8Meb{WsAMSjF0e%5+Jf#d{7KSm$gzTDQsuX@w@B+oVhX9TxZv z>ehu!s_YJONx}vKUS`6&9&t$DwHE4Jis1EnOIH8tQ^GkdKCZznV=i+gpI@-n}q$^Hf-4@sRZS9;a%_O61Chf1H893X(ag%KEO} z3)ce9;`gY1*!<0kVNZ6`b64ciKA{v=3wzv`mgV@wUpYfnV=fRr3Oi)PBK&vS~ z8CZW3dN0q!s-9BpmbpP+YiRIe-M29FQIfseeu_MrqJrV22dKm9BFw!~gkD`vP>{BY zoXe;9d#D0^=Z)c&7S0j!ch|}6B{!kjqKZuMNrL{*Q5H?>-ow(aX-rR)EGuTKVWI|`4 zM6&{nG!_`VhL6BKeHCfCkp^;8m3eKgSvdF03Eb`#froyd#fv)~ z{V@^M>bAor|KFtECj^b=>#-%ZTOsPFJl*o|4lUVw4fq6SXgwx)qGzUI{Q{&LmW1M> zEO$=XtdJ?AX=I7cFwEdD(3zJ@ao^hAWMD-M+F86rc7~78=SwGTTmKU{v>Rd58(p60 zsG-}zXK-oWRoI%8g|^4#q0)W?yM1XlygOz~scZsSF!D4==Iy3u)}EqenV*Tv6yiSX`y6X~8!o?!lW1H_n2B^pWEB(z$MzjC6M?s)hg?9CX%r$tR7!^5vgZ^;PW zCazuJ-3No^`(j4L^$K`M7Ln0cM)S@mu9F%eA9&6>9M#68fI;GBfgAS-qn|lKz{c?; zs{ACFTyCT1QdhuH&FQ3FAwcK_&fxNIkK;#vw*l?fUj-J-U7?4Tz_r)KLiC#+Vmx4p zjrC^yg1L7Hd%%jUyYhv`>{*HDJiKX`BHG*tI{I1nrBW)%WCJLGFJXteg&p{riX!9|gxl zY+;1wRASP11mEfepvu=3@2{S8&%%Jp+0* zOF`MZ3CBt%5sgneu;73!L6^Vq>i_w^{6jQFw}V;iq|WZ2qRs}%dslDDGQdS6MzAS4 zV{m9p5#49=g{a8Lvs#-ap=8WS=FZlYwA}dinIDHxlv=?CfTo1hWcLOH7xuXCP zCs$8evA>UH;pnMh;BPN<(IQ7!o;|t(7w08Hu%i{}XlP)4Pbly)NB!aZAA9;Y-hw=y z*$DTi7URy=(Rgs)P28|KnEv9d@o|#?m9!oP!ypH2+UkiBhD~5l0sOn;R#;>x0WAxj zphLVrohamtDs?GL(G!8mU+2Pn662UzmIE;=X%5ia<1g?E4ye!1TGDKIT^16{5)kOe?52(mTG#zwrwlO zH|G_Q|92iH=-oFOciLXd(ggZyBW%5`0PkP5GMC(HX~?fA7%R0JpI+Y}@D8fT_KYaTsA1pRvfOIs>v)wy`k z%K8aD+YQjGKa{ba(m;|W0?5i$>2&E}Hr$+GL|oEk`Mk<^7{AaI_oeuw>-#A9?%ghU zRE}^P+d>6aoH6g;=?^;|Y=c$#q2z>T2<(*iMbB+Fxw%Je>G@I_e&!Q<@NN-2d#y--su9-~#F0dxs+;N?bG2NFx370(U72K{vD0_A~ z+WY*#+w+CzZ^L@pZfb?sk1WCpg=bv(yAafT`k#e#P7eII7KOb#bMVr!4h(8~1Xqvb zfa$P2?tS?h|Nb*zcZ9^U`@F}nfxj4f?Q|%_SjFSG-IL(Kng|#ge*n&I7Pu21q;OK5 zFILF^qZhuO#>)0&vh7PI^IV~dt~k4tCa)8Id9w_x^%CyRp>x9s>w(}Pq=!j#=tlYmRS&*7OH+i=t4uR>Qb82CFW_)VBhtGu{Rf+om= z&3qvzuNg;PrEQ06&y#TexFj^R>alp_y%)#)I}F$7%)=XUB7Chj&s2X25?oX5WW4=v zyrriDj-O_tru`jyFKr>jWL={jH#bA^y<&W<7)C^zWv z7coJYMffvP(;LxR?Hh4-p9LnNyYb3-4RYn|ai~-jW}s6CV762%QJI)PwMZQJWg9}l z*HU6OV-#~UaXehwHkJFm;4;nGCgg!$2GM_xW2+5nCRX7zE%UfWYie*P3@<&*fYbig z*zPx$963?|WzM@ufRa6~U#KW1pTfwg&X}s znYC<7!o&WT;VQEi^v49_{=rIo;3v-xx4i^yUIX5^kEiir=fQuY2cNn4h2XzC4%4kZ z5}z;y?2egB$IL5)j8%Pt+uI*=XDx<5RUUM3`g}6P;@C?TA70Z#D-r+P*X8HOY`vdIDswCqVNW3!b_+QJ)oq_-D^psM7H# z2V!r48+Z+c+^nWm_gYzN#xCtECC&Sw%h;cDNEUZ-BMJw$^_=&5S2|FDR2Yy<6x4757BoN+DBqw8ieU6V?6X4uK;rlguBwK1Dyr<>_k$nlnH0EJ2 zp1;>8cvV7S&g^G2c4&~keUJwxlU2zK{rfOWIfWK@7Q%!^9duPmB4#6`dF8u3@BkkZ z_f!!~)`(=58J6MVs}j8GreKi!0SG!j>zi zF-mI}x(dBY?Vveu@9k4k$C=?9Z3htfb(tG?XCl4*GY!PmrdPWazk-^Ig+hmB0o+ds z;T*$Dh`#nM!Kb{2?~*$W15zguh!h*UU4~zEZ6l4EFbb-KY}PW>Zu~OvgjoG*fyocW ztF4DcS;L>&?4QpXeD>G>sBLLDM2i=JgQP#U-1!N&sy}mcdZ$64%58zmXG5a&A7ioa zRDR~^X2^T*hndmm@bjNtbcM|TDkwdnFLUJ~`GnxDALM~Mc?Q-VkR}JKrTO;lLhdO1 zJAM?{3@a0NKiGp>xZ2{nhEGLauN+(IT?{_iPe5t$6}qi| zGw$F1ndtIYp=e1fB)&QW>H#b9JRblZ5JV2T*&!5U!?nXN;q}~XESwYo&kF@EqDD3J zzv<HAWdy&4#Mq@Y|9B$U%}+p?eUAA1VLXOE z8>Wd7TDWdqK6iN4S6n6HNhR~VX}a+!TBtt~LSuZmc}3$fe3Bt#PIF*aRmtLXUWa`) zYb~c41ln9b9}{0Zsl+;1yS93p_#{rt(k@{WfL>_w?NZaN8qQ z{i*2&$<=0|Sxyr=Z}Z%yw-?9!R4y$X7!C=!%azx-Kttbrz zHdxpJ>|95mmSnkO{T`YhA@LL{5TFT zZw6NGr6X}U3ut%v5FLH*CvgiZLgUC8&@-kDe%9Y2&k9G9+<`~5qKt#cTbJn7p@~o_ za}|o8UBt>0ttiRW;Dp2SDBC=Rl!xXL&hrEOS;4`a-EZjS+#K)}{TMnnDyKM%L7UH>2exMCkeZbc|o+K<3I4T#Ir{a6ySDpqeyKF#w4|L;jK@z95ya){z zg<#z_;r*n%l64v-&ShxtLyu!ipd%p$^e?5MVr@1PH)T3lYAa#3rv_QI^)}+SJJ8>B z7sdLdaQ=UDAVYmT>$)!rz0IZAFG^1Yo>wWRto6s;y*RN(gNdM2Q;M=3e4l}oF1N5c+t_> z$UJCY^%La;ujj00GrFLy7?UsqwCi-CW;rNsqt~Y2js&{!}z=4bKvBHwpw44_9K<{Y$jLDes#hbiN*5ti4esMO& z$xJ0Gumy)iamEQ*cCkqSRT4`B^N|dw6iV=~<2%5N{v!hu9+Be8LL6@xjMoM)pvo}~ z_QfFzn_jHqM1=YJj29QV=kw#xOW_YFF3Dk<;#FY1+bBN#ju^Xn$poxld=mZi*I|-# zB!+7#fyCu{k|yNaSo1nuZ5j`aA8*pK4n1^yokn$qXL0!Q1iUx25o^QegXHQ);;|>l zLgk$@>@u_C4~5Q$aXXw~=^(2|IO5J|`}YZerh~Zq6M{j4)#ZWhP># z>1&dGwG2ceSAd;IJ-QJs?sJwE&AoFQI=|IpIKLl=SIn2B(xGO*mvx{p$%Ug^MEfK}2j2=82dKssGn1ZJB=aA|{ z!|)~a7!2L#=*&P7cK7i}#-S^WK3X1))`nTs+jTXd#!0OGz!OnXb^hp33A49vBlH_h z$AGj7`mxaoHNq`X;#xa0UB2vC(N}mv*eflTErnl)t4LPQFY`UGJ6m{` zoY-!K&lFQIa@=QPwX=vebGD$q-VbJFY#@5?%;}1wp~ADCK@^zfuylkbOc~6Buj|)9 z_+wF~^Th>hQVz#DYk^mgc$1m!yb|tZ-b3xu2Q$JKehK~8yTUwaab7;=DQTEePYMes@IUgU__agHBtYjB-b`~NB}I`yf4gCL zo&)t!^2d!4S>$EBI5~Oc6JumN2erpn33ss9Xd~f3+^mx@dS(iiHO_?MYISy!?gi$< ztpqY{_5+%_-UAz5!-?5fF}7zyGJW!i!Uqcpe%1aGk`j0oo4t@+U-}51WtE}NtU1uX zV;;x~d`|QG$Dn%R8M zc0F?_MA72Y_y_Q2pow|R&llXd%h5mUJALj{LK-XmAv&u7t-FuB`I9FoUjVjammnOqYIs z`x|tbuY9|Jh zbg1BOSN?jxkRCP_$A!z}u%&wf{wP=oOZ37Z;guN%Y+1}_`aZzMW+&WqC>Y`d4u{&L zrNXmYgwCTH>B5)*Dq3>|x?~T7^NM<=?`JCQFOx1ayryj z2m{t@8NJg_ISqj!a=ZTxnizDD33X?=_Cqyv*OA0=Sox-2d+lc5dCH79952M4@W4VxHdS7vov!AR6IyjG29}a~-c#%oGX9-is ztONeSdDIpvd@tH0Lo#{TD8VH2b%lUu6T7Ntba?gtKY1h$9SXhrv^w z6L{-B_jHJ)N zS;6rkc_4=9Ze4`WfAoXboilW!vfxW;m1fxklhJ15d@}35C`kO)4|j(`Fi5A+B4pNC z8aDSTIoDJSAu|N7h{Oam=aLsNtpk_~d~(LV;raeHC?w-uah`~?hFuK;tO zSkgxxGI<47O!NxjOmf%+R{Y2(DM@O0AlinUG`lBs|7y@0m!o&bIaF=A0IDV`aIx(+ zo+FLq;Gt;j@!bpNilg!SR1>^3ULW?@^usO3GH5Y9B={_gsjKD&h!Q`8)RV;u9LM_# z+~cA+1=L7Bj{Cn&hRS!vFk*zQ#c=#Vob4us**$Iec3>VqJL5T6>ZSev`K8Mfw!`Oj zr*N@%4XrqF0Sv>W&{E zicRe+!{hlX?0CPc^zOMrxVAHpy7pNiOJ_67_X^Hkzqhn}wJ#2LU7~L<&%<*O4s=|r8a#ik z!gsN$s8YEWheVaxHx8K=V{R=$D!8X&WWNjV(R4a&{gJRogq^XABv9E#3sND*Ryzq@ zQ>!h|JkQ_4)#zXK&xudS%j09|g{g%roM=cnVhV9YC=@hMe?gT4#=Mr;~*SLS? zW(=@aWW(k!gh$R<0;^GuleGVcj;$T!n@%tzAA6K~-MRrWN>0qf+)!#X6ocNM58?g9 zBM|zm1sn5>F;@RNdaiqo@qTHzN>Pfn%3jCJbnu3P=y?3X)G!xU|1q~YFqf~GdLABH zM1W@1LvH`Lsr02|1@Rl#g}J`^bmwLb5P|!+J1K%Wv*;KT=6e~N=E#6Y#xU7*(;Moa zXrkT;b=cf|2v1m>@DAtBft2S=7$a$mb`_z_%B0z3UVxC94eNtvnTk}Q=9l11*$rm5 z8tBP_d7PU?0`|FXCzL~Mwm-Z5CsLU3)R>ARTdnQ_Foc-nkwVkootc_+LYNk%*SDANi9vI7vA`4VG z^H~eJ(7S6twEw$}y-EX2X3Z3goc)OA|Eol z(&cTh;A3z7Oz@Z zp~vG(7}|OoIu4FP*Rx`*r}%kNEci#npMd@t1=5{}3s6}CnWgq^zvJYPheT*G`&+%ooz?$EkKsIM5!i$7t zqN`Ae(x&EAZ@m}UnOz9hY7A$7_n-iCD#2J=c`_}|5nL=+ReNvOM%$tysw96NTYd^Z zJ11n8^fX|#i4yKVD7d#kRs^A+$L*oU&wt{C8H#CnbBU|vq~g8k=zpU2(7!T#SZ34P!eE@dn4>w zqx+AMepN&HukYxLdFNTq(?)R>lDkPrH&(kkZo;Pu67bh+1vGgH zp7)q4T3(w*FgzXuKjmSL*m>%&b(kist)OEs8DrM5X~IlAmc)$^80)WO(V-$yVDHYs zuHcrVNB<%JFsu2EJ z*k@?NkIWEkNpHbNb_=0b=v#@)JST6sKU8AJZmL>5kvBd(59dx!X7+|;!x}S5h;Wky zh3V_C;ChBITYF6HsUmb=lB7*>GEgVeLNnG0{5AbJ3=*HjPrn;0Aeds6`| zl~-}ZUcoWGs~4`c?}c~km&2Ju3J~FYj5xo}thU%b3%09xz;T;Ah$%k-JJMn?`o;*H zBM7l}iB9C;kNaZni zIkN?hs(qogj}&RfUOo5#TY;WGNOKH!b6b5@!=7pG@S$@&MAbE*#MECnfo5=yW>?Hd zIcN#Ljw@ls zquu1-VmI36bCO;;GlK2ea1(n&Kcb0s4(h*}>j{D$zZ!AuA&}NcB)xHD zJErMs;jp3xJF#doKhP$LH|p1uZL=kLsmLGrOnB`(LWTU$*xPvPL?lielH?BzcjLR3 zeArec?1;ZD6u2mUP#}60H#v+J9NNpkVIzkLDm>{vx}M(n#)E|DJ(Pb?$-P_b&s}+% z2eW!OFqn6Z%pM6K7rB%-`;Mrpj`2_cS;;IIxb%)J=CjK*|nJKD5ifIh4h-mB+tk_pStQaf8&$o(S8T7?^d$O~Wk zp=ul`eQ06Ux0%E3qq*Q*Fd00}&Vyl`;E{6D5d7wruN& zsUB#cDp74Wc_NC9JSyzrIIbz=1fI@MA^r(*lnHXftZkvyrA~I_v4lJPJy;G;Xetf- z&?K-FOCcv-16#(<0MC8}TB|b~{Nl!-R(&qM>OG6rLhp31WCU)Ev}Wl0mvoeEKb^G0 zgs8aXz>Yts810YsST#NphDL@l(`SmZ`xU$KLB#@iF!w7_S@@K`%2lBWl{wsdG7^+p z0b^ZugZ-7?q$d-EKIKu!+1iLr!8~(1;~o?GDg`ULPgjrK`;OW_@W;2qEf}2JfHF_R zNpM;cu@^c__f0&A8(}ay?Vzy3Pa}c9bLp#wQT(BG6JW7q2aPcOh8bqhsOnaV_4Ptd zxo{lkl&D80H0qRF&95kO|?jTw{0(yH1$syZ{Yd zPQk_h1TL1^Jm9luvDb_Q2j7tkba@I-t<9wIxO^57f~KS_Igi}Ax&-t16}Yy%j(pe= z2J-hdkeHF*$=On8)^9)!JYOth5@+s$jb`b%U$ndWMBGKeqw$-Ya9Vz{{HvFX*jw)S}xN)H|G2TPLdBJy_J|&2To(o}GIv3#m zDe3h2>MLmaw4c*iCB}DIogz=ie8%4C*O^1(vtYl{W(Jn&v)s%zs9}E=ml+D?n~&8(F1Ug#F1#>>?{ z!Jy}|tf*`-YK?pc3U*IW?0p=$Z7u_S$uSVP=L0~K6+U#8p^L`OVx5N*@aFwp5aA?; zC*$YP7r*6%yx@6yCcceI8lQ$DgG7PxC5wIwg*?G+gX)shm)yUVnE-D)N%k*5mwujh zlMf_->=KyU?d068L%1{C5EiX}PA9G#h4=lMh`88d^g0}jQD?=l-7)~vC-Rt4^1$Lv zdNno3ET>@)M0j(blBy?WWps{^X$=Vt=XxCSn99!@7$l-d!!Ko+`|TK_+BGI{^K?F~ zHdJ6wKdHnQLg!HOe-xdEKUVJ>$7N*inUTmYA!R-Hbwnj8rJ*QIrM*Z)Dy2|1*@Vby zkWilIzK)TKP@$wHl9D0~t#9dfe*Zwx>vYb2U)SgJekYqz8^3E{T{|7F1l7SuZgxl` zIKQ=|E=+hoAJ?2Hz?5U@C>k*f?ycy9W$%B}La&QBqB{?+hC~wHr(kZEZ%@BjRYPUb zO!zxbj{UZ_fgC)N;9&7`JbPbKjM-fBjY{1;3&$2kQst~Oyp#GFSUMI#n`A?<BXn* z-BY8Xt!fhc%CZz4_Ud8Jw-<1sejIaQ=sfJ|(jqad_YefszM6N9f zb$@KfO^#XcrP7-w^gBWS)wL+Ee3$DUuVG`i{lI>&n`3`~mLH z9Z;NN#qx||VO#hu9PYgcIU+{He2*O2=rx|su#JUt>qBwp8%LCBQbV6@qP$14tL1#=lULxnch)#*umXbZJ8>lEJihdK0_z6j(0J_& zOkgFjq5KyfJ~oJ*xi0W5bUB;Wm_Vke8lk3?C#$HZ%nSSVjv}|4S!6s7{&4-9+C~8c zmZpIC8y$31Is&3&14KIc7R+iGg*MLP(eCNRJ>#3mvbt=jowW~|ycdI?h%y=$FJzOh z%!6HV*68A_>(KsqHJ_YWML+&7+{a5{dp^?`}o0#Gto7C%pVNb85f z@q;zN)ZkM1d9{(+Se`-!tv-$mcL-W7Kl9wj^vGA$o3Q`+7_5z}z`Dkz*c~51R6Le~ z&90Sj>!v-9w^@#bX%(QnGZlS(w76aMQm)4l2K%oT;J@-H3^f%&gH0dd=Ql(4+#Lb< z{OiCqnRZ}yrU9LFchR?FPSp{dKc%906@JN*LJ#?P_<2ejrm}-{QS}LEsTXEehP|Lu zG(S0X&hJOReOaW=<7U;VVtKaeQ!n&QolWvZcH%^?ci=#R;rwPfX4v%t{?L4kZL3G< z-%o`g_w5nS@suRTeVRs9WY=RqcVB<7q5_{u7Ski98T5BXH!Qjv2OqcE(T-QeD6%|{ zckG`Cvq#33?iy`{fxCl{5-dXgi+e{~UYI%bTD8*IX%;wK`wXhbZqU}T8k)oP5+~K) z0MSz~z-21|k%oyR(OnuwLuZ01*$Qv+#hKXOT)twy5Sc7aagS0r8Ib&s2DO}ql|l;e zdr=guo@xw(+tZ2Y9S!J-m@xc|4i;CH<(U3S}tKs@Ku z{iH%1;xvE}pNp$IKharU`PJjT>*0pRJl>pRo%lds7Y|Nm;2AF$=e_)o42hkDmvdL( z`dljn>w5ffM-<*$RN|xi6{uR^gIC{bz;=#r|MPhgsqBA`YIO$m^|N)5d-osik+}s+ zBDCO$br}6JQb3!M!r{V6Etqgg75{r;%g%pv5)`d%VaYrTC|8Q4`3HAE_3QzlAw0~|@%Q71gdOL%8kb9dd`t#d zI!eBYb94=1|=U(z|D|De!7g2cW!gM+EB>FDK6xFbB8WLO*Gol{&^ zq{AQA_QcR^+f|UTS_+$U63AwQFM`-7QSfW;eR#jT5hwePhyHYDyw#PB$9ELrkHwF8 zibEWeWU&j@AC_hg-buo?^W1F1DjL$4N-}rP?&ElqZv{z`74UC9H=FQXk1r$i(e!LA z-2UprRQBB=q0^=^ng*ANQ-c=iSYScY_iK^LvX3N)`+Z+cDU#$j;Q4QpJz!+{kRF6XIqM&7gIcu>v zlX}>y!>NEgbeMYslK#n)U!_}7M6MF@hP$X=!9QB=FT_s#atue6EOA<_JKlfYh>8v4 z@bH->f`URD_ahkQxAl4A@Z2BAPx8fyZ8flG zz9NL;Q!r9BWQNwu@fHnx6OB_IFs1AS{RStg!|Kz}m&SPuBo^bz8}Q%u15~t#^XEvq@^1fK3kIngI9V!%^LbkkGb35DeqS%SBYlqOJ657_ z{z~wu$fY7vAJEXINQ&N-P$J&UcZqBwO(pVZX(+_3$nfNx62~FDAeDH|%^;`dou!-h z9p`0M3Zb{~DU!YHFwI(H4uekdxOC_S4i;sTyvL59^>ZP;teA)~wyikXgO3wFl#!6m zdT{O+K;1|g=zURPJ%8rI9O?6biQ(98{R!+F7|_@+j{GWpMkZPb#vDJh(99Z`kzx@F| zoI|AVQy{uH3A4eH5^VKp17_FtP~N-|M~B{(@%*-5OK2f48h^)G5gUz{xNf>1kq#4u z>v@y#-&0|{xNRalb{Z5&zNmyA?&mLh^Av5}oXEr?BeH%`Je{hVM>;Hi(mk7gLU&1$ zU~a)O&TFL%a;k;AsjiQxouUP>=3L(Cv=S)`_(O_47lYfYU-nJg#F)9hQmo09^UzY7 zfDipoqLrgJUb*&!e!q2xZnx%`_=_wcHP;?`V@yf7mm9EgDflt?q2T$6AQ=l^Jg{X$-zO(?#PzJPC|qKN*BvvBU82%dM_52>d+(QmGv zKvq)}QNob(In9TA=hx%2CAIX$@dzw?Y=*wCj^Ouke3Y3TL*n+=fZy%O7~OIKLR)ls z>;GloQ;wlConuivX;p*m?~SmgH-v84P`nOphW*< z{PkIz=pW$t#&e!y5adJB*9e?E&6oQ6rNAkVFQjPUE)=`tiX->a2tU~bd*e>Pbmv~) zOp|ux?@Y$7?MCq6N;2Hex=3x;hCoa@$J0LFPei7xL&2&7?0u<2M%QjZ#b+zfBPEyk z4h@5N(+{*XN`mg|)(|(oMIim4hPd_ahKH)_FudFg#cz*e-+Y#57+Xcg$zdzikEHM_ zB@;THoJODWy)-EA96B7eC(|Z-LS%m_o(uHhShB0ZxPAhevHl`ySg;JzA29GmWC)Jl zRffPQdwODb4>n@~y8FqpGEcNXC7cDLy=ibVx0x=PyoP3vi4m#3&2SQ5@Kj$cV!zbc zV~zQHc(ySdB)I>-il!X@tLPDuPcb;6?+Bl$6=>-S;jh6$tk@NbVT)PNqx^IE@5ALPDhGt=Z`py1a_!Rn_gX;0}Ua%%HwI^}HhY;%)!Q-YfDx{x`h32b#SO}*0{a*ob3K9@~jp>50sb6_vzS*`9AeghkRTm1&g+v^!;G1Y`I93AeAk%^N$(K4%y)+J=% z_UyOBi7(Gux^a2Yz(frDQI=2So2;LqVGM!W4fC7Qo;;gPM(dz#pTp*<#Z-b zxSR&O*oV$_J(%oR0}VY7VCJ|T5E3NJ#*7s5jKdT$fI7V0>T<-gl8 z9=(5jCbkQfkl*FIF{~mAQlzKD{K-$qr=VNJ$z(kinEVnv-lNP zjZ#jK3g6F!p-l5HTH6;U_{?#NlMX9Eq1*x3aAyy1Pl_*|X$5*Es|ki*_+s&QD^|K# zj$IaFiUsl@R6=Jtod0a$VWAAa;TXJ$lj9lh>HAiZuE zJ*?hIx)c_H|Ac6)b(Lf$UrdLsT3cB0pWVbKIGyY57ej88A!B4RgG`P1D;WOJAaL*- z&$dNv<1LfDz`Jm}kT%F05)Y?v&}jWfSo$0idpBdnX=CQf{IhK0!>O!o`BIer8ps+S zvSzCioAIFfPUhn_IrfcQ8eV^#Mt*OrWEw17FzQ+WbT55?N~y8vTH8dtCYF*qPig8i zGYb=vW2(n%DFQttjC0Gm7~CyK_Kk-v`(^niny~Ex?v=?F$e;6twz){87Az-Huetun zXf#N_;COPO2jHROE1J|az`MjOq35{$oBi$_bdSFY`h{c2bm!7D)9>&O&c9C@RA1xy zN4dB?Jq_FD#?yq_b|^{w#PyKgV!7y1{I%r~@A0}c-jG_m!^G#+cy;dtE^9YU@OOO& zvACfNX-l<1C@B#R2v_l5evQLVxpnl2d;`unpoz2I2xC~tB=ml>6phYW;BTczXt{Tc zw?I4}l;Y2Lc)LxPRBJ!l4lPsufJ~m!s>gApF-bpDt{0;0e!LPm7k9((Pkwaa!#@xF6#Ilj0;; zH~(NCs( zH4MI5J|o@>!tu^GX;2paOjpStpqJ$tIz04^M7Z35VcQ5gx0%K4T}8y6V*Z2x))dB*1*S^b(woogd^!wW%iXFADz zr^GaUKPDI&$)TV5@-}t7_o<{F$1yaSf)~S5Q1w;|^}bU;MZTSZDXGJB-x_h)RN@X> z2DW07&vxkD6$px5Cb(sNG#;pq#iE1L1Qro395dYzoOZ{+R+H0Edz8x@?MjDt5eHDT zkdG!=^Xc6UrSQep6gw)?1rhtikX^Y4WbIdRoX-~C6ZyU1I2c9k7be0_?tYl^W*1Sd zJq>oNxQ_O=GpHtWmhKAW&ehiIq43Ba@Jr5;{UR`d^){<;{D)*HXo_-F87cQC|LgRog zh%4O=;gkAks%|{_ZlucOSco%uIte^$=d1L--85kMLU{3TBC1R=XJ6dej72@&@X}ty zUQT-wd)vT|^HZ!tNe?wz6}<`hMXRw!`9HxoH#N3P?-8CAT>;(YE^x5)C>~EJ<8sF0 zG*lo22bfC!x#@+pJ>v_0>{N%{$GYL<(GL2Y+c90};K9hhtq^pv9-dC9fQ}<)py&5A zG~cWZiXL2lMD7w?3go&~HIexDZYh+9)d>dQA*nuAM{!rebp<{3Q54GB1-Xw8piArrdIQ#AAlG$~ z{}q+b-v zx6VgMze2U-v*Ay}2~;~6fJ(>oAu~u7S|Fa7vN6YFw;*0H7il0SwAc%0|e?K+Ik3gtKCzvpS63P9z@CRm~)#JX-i4dpq;jOYIGY|zugSZQ_> zmrVhpFhz;cTbj;`aumXw_fEsyU=j9y-zXih?sf=r2*u4-)q<>337C2*msdK4aL&VW z@+E4x`bC8k9KYa)pD#7i&&QhuU#~0%;pH04Rp)nDvAB`+l&WyEjF`}D}F#GQo7>WYwET2T*3{D~OKPTdN*A4jWz&E(inMA6M z0*EWut7f)Fz&3|*7${i|hn0Pav2q>+JG>#5>!wk$b?)qWD|KeYyE8O*poV%pmEv~& zQGD~PFtp0PE@%ok0Y-NFLHx2LJEAXzG4iM2M%PsG)1!$uv-U92@Rwn&M9*N*VK-PW zctLHQuA|756c|%}g?c3`G5WADL?#MD-tPZM)u%yl6%HpE*NWh)=W)F8eil1vVy?p~ zrXM$6(;|biZIH!(LT1j5#JuC1aAoRb)~jz0u0Ih$OO3@qdnGGS^je8FegyC4bLWa$ zaf~b01DmvL_}S0$>=WBEM_;&3*mj%PQ;fjkuJBOU!=_{JHj*2Q>? zne~|(2Th^ZGnGI&^EzhSm_*>19^suwhFSOyW2fe3y7M-rN8y-b`fotTcq6IYO-U z$^eXt48$V~*W&O^CmLT^Nph8@q0)UHbYD9Q=O`*McNN3%#VbuZeoza7MHD$A+C>aE z?(w|c_;Qa&xV!$J zGm1>SLLSVScL6?y)L^8p4DNh)8r7u<%ycZk>?;{~ujdji^|s?#CW;eyF^Rl&SqC~@ zJE3!9JBd2eL^~gI>`keuOy5{A8R+StMJL@^>&ml`=+jCZ^Mt_5vK747*1=Q1cDl2d z>wj{tN3U0DaBJo#5|C+6HBWB_xla>mWA7hK6OJU$YwIvAeIqQtcLGhtib=G~Bl>IT zH&Pdlc_3*(!h=6UlX3`*=Wj=+9ggr=Sst{KWJ#(}2xe_zdCNHNj`GKPfkNAUeE!4( z_wOsj%d30ovP0_hmy8Vckc~%KD=k>o!FAcza;)z6S9vFbDnNezU1;(DOfI`H7^Z4W zpAUV(Jxc-X}=+hMR{r{ zf9@`Q&YgoN(wX4trvRqT<}jiu!dt_X2+#6b4X?x?W~`CU z-#Zzf#&?n*zm#Fw13z3TVU51VKCmun3(s702H&o5FS@I>qO^|(FY)6q2PvL7quXG` zs?_cw$bUygmM(#?k>?f|4mI_)hr>9MTw1o~dzO=X>LL zU({6a;3s)@eD6t8ala0XIp>s~!VYjQslS=+D1+aQE8+D%b9k-QMCoTPpWJ*Nn_6Na zKKC+S&&x-t5LbA(`zf3gizF9Cn&GikAU>D1#Z1kq==UHGCJ;AVBqae_my8KtaT2U# z_2EiPHzX{s#S&Csx<3KbXR z^06WfE6qco`u8cc6tbnFL3y0xHrv6;rIL1sSCR>Kx~x-DA_fY-ft`VTyy!K6^9oGx z;`dM#KDZhKQ@P#5ob%YQPMrxmXv`QT`oZd>_i^-OCB67-fc_i511_ko!*fXqL_YTf zHdIW+2T{53bKn8T#4W}43AYH1m@KHO{fcK7%^~Y<6M8`>5}OS^LWx!kE}Nc!#z~Q6 zs8NqR*Gu7f=W6klB+?-5PXO=B=Qt3zoCy~*V({6U7BWzD20p1YV=$N7UB!)U^Sm>0 zYVmGJ|CUXXPw;v9`MJ<}FAmyxErPtG*<^p@O)$K}-Mt&1lhztT2yT0i9_`7{EOMGw zug`=feG#~L+YM;4422ze6?Dm;UO4++4*i)ZP})!q3oDPoVt*C*BeW0NkNw5%)*_52 zm!C2G(FYzuEQU$Q(e&jySUb!kf6M2Qj7?6s;d2{Rx*&uz&-B5f!u^6ik!0AK)KA*` z5(Ub^mwCLU8t}3w7@9joP-V1>9#LyUwWmS6$DP{DIWcE!9MYv%P9zG-)S6LU#hr2K zkKpzLA$YU1m;}UFpk9+9G>f+3xU9*rP0}3AEoGSgpZz#7ubc>#IpfCwd0zILpIj&O z5e6G=B>&yc2JKomv@Y}~Cq)m!Gz&R0@L_=F7nMj3nsv3Fsj&mI@xDK1_lOZd@gNZ(-Ndw{y zt9QCg$1m08q zY46Ah{M)DkB4Jn1=iV@#>X(C>8Z6EIbBp>&R$#((2d1*!4@@7`J6uw%gY_n#sG@Hu z7EBz+ylz^AN#?t7;#6s-e0(<9YO)kHb*gamdmdcdRYJe|Cz0DZvvISFI$2acinUFv zX#JQreZ80KmAf*m{%+3Wm^BBrHGg5B!dlq*`7CUE=*DIz@}O3E0*vgoqneRf5TVsV zJR4RaJ=={Z*%u($m`u%1+M&Dqb-4d&Dcq{;Ls=CM5;SB$#WJqpv<(5o{+%?FSG$e zC20*)QSoLE4zE6i5i@FVUq&IUZO!EN>?Tkd-9kMl4+}1C+>a+kvv?zkC2---Rr!?E3>akqdtH9%CD?%I_VggUSLLMG_ zvUF$8FW9S=N{h-aLS|he$z6IAKQ(>kjlL)W?=S|PpH6}46Z7%ggk`|R8mVn%JgPbl zk?DHkI}8_uo^ei` zXo11O1bW3$joHX=BIt8T@NLIy%&r=NbwSF^U!mnxI4>HG@}qIuyli^&ssc!F6lZRo z`ijvWMnvoKC~dy*gUA^B(sLhW$#Z5H@=G?->svvwBZ1E8Ie-)Y$`KdoCG^-F zadujWfJl{aOz8GuP`A8CAD_ymPPUv!;p-_-eo}^Cy;Q(DlDjWA*1#9fB9u|+!cVI% z!7Q&Xa)3NQQLiCt`b!di{0rlJ>IQ5|RR@@49)t}V8Q|S?3_Fwb*yyX)z?XDjf0lPa z%=jYQ8Q_a1p(Xg0Vzr^z(fBnaj%J`!5iKQhMx~sYdegQ zX>||j!H}OIcb(*ZbazXH|@ZRL1{O@hlNaoDa|4x!h@@ZFFs8!B6Y zi~M(yuG@!jtT~RyE^=ip-rc9W{FZSnqmN|PW<5s7Y&|^ z8Wl@2Df44UVaf{Xks*##g|@+l=3asNTX9CUei8Yx_7zm0qcnB=8{$$m9j~N?U^Dk# zQ$GGza6{ODtr4k#MSBTpO^O7S&Jdot$205-y|0!SE1vm0_#?9gnFA~Vae-wyX=dnE2T9)|3}N;!Io|Xg`o4M{m!T=f{$>TROPb62 zW?iPQKX#If5^Cg^t2BFH{$DsP#hqVINnnT;HzUrBfkP(^z(g(`EQKZ6Ro=0vvEL1> z59tXS0*g_To3*KK;c^jjGx2W}$A%rh1bJDy^w6dy`~bf??mMBy3O=2oQg4>gMRXS4 zm6pWgDat6Ed|2RAdjSo-l^Dx6;k2pT8KOVl7YG-1;>^)%xVWXBitW6{7izKu>qQ0} zzbyu+zuzZg3&SdeSShz16@#xV;^pAyF$8JPk{VIYy9+0A62y;VdAZYY}o??^nPWJdLB=xcKZfY z-!=iP{B+n!CBhh*R0N9WCSgu|D)&j7OZIPnh;hFaaqO@(UqeTkt;_A@uk)CM;#tzD zvs(!>$4?V?+6>GJtu`z4uRq_9b{Z4!I{XXL|rErFD8AZj@t7fQCF8e5cdP- zOCou;SOsPH(#)@`UhuvABx)Z=_|kEM==607KFv!Jh;~FmrOjhFsjkGB>we~S4HaX> zKLv355Dzo)D=d8QRG@M8EUDNwnRARyg6-e4Y055Lf%A`UvMq2N<9%Ngk9?T{gBQl( zk(d6E^jjXJ`nkS@mnnSD z^uaUubYcJ_g@sr*8*|#bCkd72NWj!E2~gBNL*~tS2e#iQQG4}P$oy8ykLr|$kX;ox z+bM&x{e19R{19ez?8a`kmNtwyzBxpW~12G-T>Xp zxlEhEACy>f2(_#C3&`vpn6G#a!wk;RheM_)!V3p~vkKgO)Rt5AWW%UgBfT?wFNvPe z4H2n#;ZXV$!A*7?pr(NTCM%H|&v;6Tdii)iSq+`SBY^A=fE!mWz(3*^j%3QS2eU)S zntvKNVv-1QmMR?c;U=X2+71WOTw#>Gk0Vz{c~|F6#b~o0h;?yeqh|>-2O`zrYyD0# zq%0SeDT=|CQzz6Fl#k<7hk9&Z$UKe!R}oHEH% zS<&mw=q~hx+;|p)=Pz`_#wk}Q z_1lj%eRpu|c|HbD&c^(^UifPB43N@&2cF*CU3}~WJbc1+TNg~>TsT7@)HHyr^RqdJ zN(s;AV*$;znT#Ve3a0+Kg<^8!nAp9K$)`slXmR~Fx^<=DD|;JkMzmM3-~_tp&*)@u;F0LG;Qi@aH>gI`f?aIq+%@yIG0R2mc;rh1ssNcDgZZKN{QO)OI z>-_)Fr^6XsmU&Uzf^c4^x+y$czXW=ly2+cESSa{=4P8@@(*EU1IIk=oZe&)IG}Avg zxhaL3aM|(2-80CT9}79F)X`Jk17`OaaPPPyV3jCAuGfTHbJp@&du`$Ie?zpxqk*_>t*7`|l6@+) z?ndlO2{J2PVSa@y_4c}e#aS-&l;&oWsJHDVQvn#K=dVg#sHn zh`sy@d|R$VmE2q2*QXsIXKu|(4GzJ~X=lOm9?P4xpSzbGnhMj_X|o=04sb>93M}^$ zWADz%g7=L&bSLh_*QXP}QdOAw9Z*E4wf>++ZBB4#wgvmmOch<`dcvCVudo3X!T*>c zQ4+I*hDddAOv)i!D?FH}CN+ZRGC*PSVKi_HhMI5z&M1w869La)`KP%!H&%yfOtWN~ zxNl6jmOW3#a~nN;xDn46N`P<8IA-YzapvUiAav=RgmbQB(Ap)R@WhmK)QdMGFO44w zG(@B6`!^cwmz#%as=_8#vg{r&qtBA5Uv!SYlKW2YRF&ZNX*{YCX}}zq_n5r?GF9*~ z%nN1=CemjvHuyy9JO68P4Tc=KjFD@dnLm#zQSOyA7ERK{{YDp|U}Ou*2V4a=X>+3C zJ{!KyNTBb<#2ClhiRiHY5Z>qZ_^pQyVOVJbJzQJ_n=He~zUZrDgGh?tnF|Ms{PhiM z4UFJljTT)hu@X1?>>)p{8j@|hlELt2IO;{`lhh9vFsXAKyP>a#>%2aIUGpdL;v#r( z&!dJ~2N1$P#S(sVe|L-N5`1>u7xx@mg8kgQ|377burXJdHf*ql zgU&Z;SV{rOU2g+tp8W*fo8w5WY#4o${fhjxFz4pTQy^B?m<>^|0t2rII^HA{l8@C0 zo{wC^@gXA~-E4*`L6<*@Fdzp97LF?7R z8>-d$SUGG@HB7`gCdmNLk#p2*Ot8jT^*dqJY=zl7mkd^&jSGX1=<1ceh4 zV7usFlnYj1GzK)NtFaV&{>5&Tt`=jrk9R@kk!$45HBlzz$_EG0cLa2$yU|xt6kc$- zxSnhioEjQU8<(epKvs@@wj-X7^f-a&oe>hz!97FqONr^5JiH>NLl=KcPP$XwlhRE7G4?I3Yx+v6rn8XRr66!H zx5J0rx8g<&VXJ!VxEy&Z1WoMYt(i23&e&7|>o%LRS1m3Bt2Bvm)bWM;Wn;u(QVC4* z6UGNi=8>>#-w7^L26-)ARESo>x@bFkz3c+C^t4vrmNJ2BwF6ia6bI6`|M0{gQo?&! zLyxSk#4r9=@N%&-lNTEZO3min{{0D5c99f31-7MK+KhDXKlL})T3%hf&FHM>MjLzS15$Y~| zr=B(2(7L7zPK(6ic-wpAdE8BMV#OKw$1#qz|EnN()YW0O`#35HGh}RgJ8^^lOh&tK zGdAdGu&CaT(vO8v^wSCq5H%;$1DB#u>@)CvaURu`F5&dW8{mGW5ezui^CD8rQQY)C zyxTjOja9sb=Re+u9T^WGZ{I@fi(Z8df40D?$+lSi{x4T9;6* zGnuq!&qdX_XYog`F_GSFNpB|;+`jxVxw~g4ZcPrtm#?T`sre``V8|YX1LWXfMF%ak z`A7XeUx%SRDolAE14T_jY#~!e4y61?X0*rP)U#4@DXo)IgnNGRgZH2a!$+guMf%usi)A z@6hr*dh3?;atk*q0 z?O62`?493}!9jVH5FRFN!CLV8p#*a$(w(F~yo|qB{lTVtUNqUZocOMsho!!{X!kN2 z>d6z#eAs|zN_WF^lU_W^F*u!f_`-_iC(ypfny&k=9J+=6qx$=Gh-&L;lJ=_v&2L&_ zXSEmTby(r4IVpmW^;6m7C&d%v2TfqkNENRV0t*)xns?2=P66 zlx(ReA^CB#FxX45^q>bRcq#|u)L-Duo92)ql1ggNr{f|2Kk&J76*l*p(I;9}Sg^g3 z7Ioxf^|KbTWKRUTjpH1p^2+2{D~02(>Wp9J7T%`0Lu8-!7^&E_3J=cW+?>+Od51pM z;k~Kv>2&LVbm6TlM0d@8ZeO|tZvPyHw=!8|=)V#aI`am}yZ}7+brF6%QwNuauVb+0 zRbsN#hFty}~yVT*_X z(@2Hx9!K3v7F1)g7^~0m|7v`1!1MJ@_|5M!s*m{*+XFV(b@3V9DVt0FejLSYk3>OJ zeLn8?4(E4U3Uk?l8+1=XE^c_$z&kJ5gH>-z@y(m}w8i>9wYt3q>iW(LN+Y(@g^>pE zy`o@3KneJXU}W2n@b*yM1jiCOI#Fm z4u}8qr?A)N0 zXf(2iQ8g2Ssh#<_^Z9s?zfjH8kDkZ1w~k%Rb`Jv}Pk@T;cNSJwtH#a12^(iNT7e>)~ry5ww+ZOxX`x1iRedlfFVB z+EGvl+F#=-e+HLd`N=WwpPePzpIuJrNojp#OSt@>so)&f|mgl0el+|C^D4FaW<{r&@!+~% z3mrW244ryk(4qy?NN$uaJl;A3+hc+RDa*ash9+r@+$)8T@2tc_Hw%c=kQb0L2>-Pt6T{zC?exCdNe!Uu~`;~>r>>k7Z@ZE$_v-Q{;H}8NfIPUd z3o5lVSyN7*9J{)NOmlRE`c7#+GC&ls#DwFkuB&kScqWz7Nw7^%Eg_9Bt=TCvS3~bZ z4g+3|#PF2k@V)9BS{FFtMa}_-wE-bwG#Ps52F*J)F!_4~Xv|v(8sd#m5?cmwLoMX% zd{Ovqv5vl9S5J&=$Kc9&l?a`Y2v{bKQo2N7@7B7zH|J_8Dq4BskF_NqrEzWPP z5@)aXo6|M#KY_SQ7PIzE2zlF|2hIhGyna_W%6~V(wbLc}LihK;YtDwx5Qa_9+L`w+ z+M)361?ED{40ihuP1fqg0GX$$#!gPqBl+_?;m~ml8l+xAO@D-wXla27W1#_4CTd~g zyi^FIGVttT8~Hj>hOf9=Of7vX;mEsAY+aZMH9G={%?(-TOsJ(N%J-v@p)Iq!@HB4L zR)(~p-8gpbAiZuX?5oWU>F#Ik#9m>DMpa9IlFL49ydDqr*2cW@{6ny4{vZvW7bJ9w zzYzDCJodHalHePvF!1a$DVTW*x}{Ul=MDpIyF$@+z@JzSW`c)GDK5Qm7tU;*jrG~P zs7awe=*CV(k4C{2_?Cluv2lFwaT$2@xeO+Z@Z&#i3c@`S>ag!;BY|Up-NrzbJI6!WxKt zyd#n5)L|Q^w1ZW%1=#8d3@pJ5`0${r;GxaOjK#4$4Zv~b2vNlN_wss1P$?Vr$P`;4=v3-h;&+TZJ{a<(&_m$-Igfl-%rvi~} zp<_h0LA16i`2420x7+{=Ud7^wO%^0IaSRr3bA$!gUX$aJ=fSvqt8IZy1eWzU(44y? z!M8SyNQApEl06?`qoo@@Ti*u=wLKIzZ`OuaC5PeRpb`!(d{4b6nxV`2Rz@egj}%v(!KK3NCL!uCbm%D_ z@yunONNu7Ehg`YkCW@?is*tO6zk(4);sTG;5Wb~c!#8K-Sk>6WAnGIVs=D9NpDvQ@ z#ULqWg%*WdI9num}4 zN@@7Z<9KxUdRk&-PcqJmg2eg>=peotul%}+doJC;E@F?DCL9Ng1=SFd<&3t!9>UkX zGYQki;HW3zl)Ynyj^2krzS|s1&oUrt9ZhG9%OI-9SJ9kf=8SmB3|hc%;2ujqrUwFN z(53Rj$*vv#UrwzawHeySp|NXO}J=T7m2Sr?~ zAvr$O*7HFc9CLhZ>u@X$!)j#sBjTmx=KDxkcp(YZ+jYQw)P1~}5rk_eijmWqBZz41 zJn$K<&(5DH%jac1qdAbqXjB)Wf^Zj`_3R_`byOmLy2#BB3xgGY3Vh)}FFw&Y&72ii zK_%O-WXFojpxH8v6Bs4(^+6uoIb6mic8?{+c>?!b=*gbi9EGD(`?+u12)LdTA%A4* z@pil#ZhJa~XIIX^$ctmyVA&Kp!GAHDz5$FdE2Yctc;o0JzD(b26H+=;hQDo92-`xm zFkswxSaoe8^-258z03&3gR?JF*IsMbCF%`R9z28(2IJsu#AO=Mn2wLY6a5#4lC?WT z*iUh?f=iKwY13WF?2tL|t+5A}4PGY0QI8Da}Xn^$DVvLh&1pduB zeD@@UWM6Qyk+4_b)#l{V@j^$ty~CXSwcHbBMvmk;c@O9midWb6=%Y!n9Gez)j(Brc zxWoAy4D7cf@0(}wX{kxLar|TQz19=2N*A#+Qw&JJ86VJKJaES87}lt63~Rn7A16*Y z0e&|w!cJ#pZ1%bYN_iD@+FU(m%3wNubTb>rUsQ+m1ul?yS%e+2!4g-G520U*?+ctc z1>Q&4`8mgQp!&KMc+iLF$*7YaBA~> zG_cCRANL(`S>!)BcHbdL`5}BZ7yj2tGurP|j^LH0<=C$3Ko{f>vH3=kik_r*Q%^ zuREGP8Yy(gqNMqkE38q&E|$Lkz8S@Y-SqE~E0}F3=Yf>oH_~HYKvjZOkR5QNn^pv3 zx^fFSY90l>HGweZ@bl{$f4|XW){q+H9>JG0$|>)@k395I$IxlF$g$)$x_yl)z8u4W zmZS{KvQuSs?`?#}j-&8wpWQj||0>CUD;fv4 z++>Pd|I=i)AKnFcd;;&YZUJB9Md|QxJX*ah!p(ZWsntk#`0=3<^A9_MN3%Jzx zmL%h>uK_Uj5?Ay<_-4)AI0QT?VF>&x21nKS4I1Lx=tnm{+UFcezfg`tC4?nbvWd zsJUstP>T#$R%C$nGs4)V9Iouvcmtw+nykUHL^KT&x^lC_Fn&odNed1@?W^*<;#PC^ zLq;sj>$*)cgrC2`J)C4GUco zXNZ0JeBnL67Cc-(6SItb;(F{N>R#N56Ow1a%!E=@z2JZ*DmH9l)+JhcKaW^7NDzas zcc8E{1T4JddHIs7Bx1WFz@CwO%DQNB`GqqK-HQZ=T?eqTXfM{j6Xwh{XRt;5I$5^l z3=!vJNb+Dh^I-2&oV08`Hv3Cq;LtLN@YBU4hXhz<+6Avhmy>5-!!;+I1c7--6P!DJOEDQ0F*{3 zlW&_;QF7{2$Tiptg?-!Mwaau`daja)J4G-jx<|mAyKCUQBulKDVz`@|PC>@+R;ZSH z2##7^c*!P%)QbvS=7K4h{L=we73z|%5}zkBk%UupJA@QHLSz*&f_}IGf9xkpQ<+dvMc3 zXCmMEnr2t6ffC6)x<=L!wKPNMe}Si}PVU@_;xBY*rdcTN|K~#XUMgZd*r^TkRwL%{u6HRI>$opmSwqkep!pG#hpGoJvW-(f^t2=n z2B(uF>V9}J-~ifGrvO#mNc5MErc2`=lZX1xxito&7!@ZDHG8M?qxCz9OOOO;Ufe=O zsTRwb81X|Ql#Y0-gWajq`25QjWWm=f+>MZGYA{0*-5+=`Pq+y}Z(%x3`qYNHOLS=1 z^GV!f$!3^U-%tcu`N8so;l$-*>#wi5|T|Ne8%$YUam!rS?&1W zQBUr#<{)mlvxdwqDxvdFe54@_7r^uAGzfXQ62BIeg5eA!xcl)*)$~$n?$OyqdfpRo z{l?E^qr(uD{8$g)4gGNNLblNNzJfniQ(UcQi}O|PW3S$GT5P?DcW^R?gt{7TMg1Lm zG|w8vFBL$>+O0yb#E_qOc^hVInF2?4U&Vm<3-s!{_ZViXh`Nuo(75^}7IHI@ ziAxJ{9X}IyF5geu)>#p6;eKjm;6!GL-X+@g@)Rz%o=;}PZzevu6X@H|V_A#LP@skK zeC44yqBi?DPD-i7>uvdfn<(`?g0L^Hkx3ghP2dtg!H?bExOVUt{jV^ej(T!Q-~c7# zhW>nNyk$JbRg3ah^8;YY{6tdy!GQ2{*6+Xy zn;JMLm19%(LxoHVRL8QoL^^N1H{LC%qf4|LFibs;8Z2Fb+Cu)bb88S`6!Spo;29`8 z;X~rZqha^@MN}dsmTvUW0zKm;bRb9^wLD*QU&gT*zHTITCfz5Ge?R8jQ?7zbxDK1E zX^91c0(-dX6gX~PP7?K$S&Oi4I35v4BNRMH%hN+JaJtFn+G;&)N>(EO6^p@~-P7r1 zBgC)|gUBSf2z($8bazEnT@&`6_PzKbQbpK$vH%udG)MRIpJ+yt;KuUr zNB{K;Ah%~2&XqpmE+^l`#m$FNZr^{n&!?OW%$~+e$aRvPLuRly;jG|Fz5!pH9y76b zexr~CpwnHNxuNny^tzfFyq9%>nCy^`twQTS`B7PND!_{dPuGeH4^3Bu5egu0>7UqvD4Pb z^W#sQ#LKG^=#n&THo?mYJ`_sxZ(pe6h_W`S}|%nS{K-$#={$G9BE zS?r;qsXRKW>#%dJd+Cj@41~hvrKKla^W|UT0n&xvzeN_P+{6?-z>1A)*B) zTc3u}vdN5OhA3E!8As;}ZmFOC>mevd6XY(jxbZZ7`}W>IIrulo(wHH*L<)0dp) zlk2!*tUoM||3%BB^>Ix8MH=0H7hZmK!bbl@E_HoAJnmo2Wh{z-HA}tdy{a6t?(_-b z{z47E49la!w`rWyga(+E6v`Mp_93~AqI|XCXgDt-bhU!7!H4P#ux$M^jF~iocuvWK z3#WA17t3pLoiq!p_J+ao_H;bC)19BDyO8eRcLyp&D^SYUo?ogi?1`FE@&4L;(li_l zWSk}1kN8T;D_=sWx!{Rx7G}7Q9K$^qauefyP)_?Q{QM||P=SyENH)$5f;OKKyx!3$ zGRt5$4GFBL$8z7}!}xumHS!ji+_`{XdOy+tt9dX=eKNOc|5k`S8%5{&>Cwx_`mkYh zyl@^^3P<(6;jHOrv1897+`m5>pYAOnn?wH*&zH(XcjG90tuFz6%dgVjloA|0ibc-l zK7F|lAa7WUT`MmR2OeGmH#P>^g!yEXRwjtF)S{E?Q+lAKlMD-UNrHwKe)Lm;`lTFE zPdmir?%zs|ESp8PX&Y@L|Wurckxh03&m>)Q(>W^0r&ZRoCfSQJm*pwAXvRAQW zc=ajTV;;|Ft`jE`x5{wys!-_q?TbA>Zqm0?_1W^;*I1k`3&ZbcbLj8Hoqyws!wrtK zDYvug*83RDPJKmw9$YDOB)3-jX}z*_bCc$GN;qQ5#s#<}Sr?xc=%B+@Z*URGKpS~c zx-~ZoRF}>otqb+R|7jDpR@Z^jX@QBX%;QeWSo-?wXWH)dlknRLAt^!>zx@7<3k`^-xB~gtoCqmaZ@JjRzwlyfqQLF$LBj<+O)*#FRh*qc&PdpM`n}}TGsBst zU;mhn7rwACP6Io&e8EFtKo@`bh~3BZ_<=%UuWUSzTzfkmJ~Ml9g;xO)t((ScS{y`= zi$W)8Y7SjZo#5QEZ}{Vo0)KvyCVUxIpg$h%#l|Nx{HBAm!0hW?s(zsWOhi`G-jBKL zRhJ;{YH0^uqca6R>YibDjGV}uM6Se2wg?L5oW%Q@uWc3i2>5CCMwr3RbE6lWfi*S9 z$fN~hF~udDj53)I4+_k=r40z?2J;xd*`=VJ$icVGETkl!r{3EXSwH1v;E_C@;WkZy z`|f?5$Dfm+Q*49Q*CKH31YtJdv*4-2Pa-0)T#XJqhJTe8@zlJR__^jONH&~@vJbDx z8%KH8V!ac*8#$d{Hl3AN4s0KeA=2WCvBy;E+%61Rtt z{b!ZX2{6YkPbY(3`Ch!N$U~%Y2l%g&L+dg(oWCX%lGV*2<> zWw-IwWF1KLenq5@&Ep?>$Dv)^VVb&-FiXQ_Xk&^B``mClFEimfWNe?#1S~TpB{w)~ zW1I#uM}EM#fPai@@Nx(?alqGi3c2?O;4%@#?2QeQtOy>(0Ex- zZUt_Ezg?@?29Y_K7M(O(wK%`IB$F(=cLf8FhS5!rO1OeTU%WY1 z7cZR1M1J#I%<@!Xn_R0ge%UZBUGWPSWQJpj*=?A1&6)ntIfbonj)A|m2H!C|0FREi zOGj}FuvTscxSTe@DTy6;q*ou~1Mf3ub|~}9))+ymTL~8PArLNA2@&hW(7E9iN(5SP z{)S$}K`a+!uJ+LJ8J2kFmJKN^9|7$4rEnX21SZT9Toz*j*5fUpHuf&r5FCgJ|6PFP zroV`ZW*Ao2=fUSJb3WF1HCbC%g@?a{P>D~AF^vhQGtDjds6uXAH7dVU?~wpM?KgaJ_rA@v`QTXggss53d87lnaUV&?Gh^_N zFej~7#<3rwPzvcEh}# z4{*gVC#cm>=ihgTz`Hd!aYIHTy)>Z)R>-b|QX?^b{m){?-}4;J!V$FjwwcZ57s)uC z3BnWm73juXe`sDR!WOP=rr-WMg72=&u}XarQ0^NK%Ts<3sRBEG>WOlE{>{Sn(wOb! zmVG;Z{bPhi>&~I1dLgMZ9;8MNKd8#vDQrELNs66|a8Z~$`Zix9o+&(x7`=yk04wpA zYcOY2eUHvD$R*a&A4rh#Md*B=f+HFhL7Jf_#;ASAj39wIw8oW&+v^kK8Ikk|4aV@h z9CcjyoJ<@Xro7z?62hpWVQ>_rj;u!C6;0%BhaEl`-$tsMkK^|RA4zAEaz9 zV8iSqWL4NbTqzw-w206{-SM0ZSml#?vkDk~Itxb~8$q`@B81xtJcZlpkak23p2of) z5k(jpU$Rn)w7ZAgdnP7aVh zdYDMtreNl~xo}QTpI(lR!GGGq4);Y3T`#o>lb@Wi-EZm!lMH`Big_RjKBhrar%(R3fNJcMAmYfU#I#ntQ0#CgF?Q3(%ruBCrv)U8Ytu*O9Q+ud>lz^6N4-=P=BPedE z1MgoegV%<0pqsFYd=R2A$0fb0QeTaNq0h6xbc+Ui^8!WJZSIubD}p^-D{ON}!Z*od zU}u^a{!=7izd&H<)kor#XbW!T%?y&H{SCH+J3_SN8>-NM0zU5UV*VaIiN$MjP%Juy zt9sE-!waMZmQe$Fvn3L)T&<*A;uet=U5e0lT#;SWe#y3a#&uw3-o!DoQ(*l07j&g* z75G-fRFe0mB7 zK;^+M>iNVR12QI&>}ox}Tt62k1)iQ^<+TX^k<*-V#v`~NbOI$tEu@~ea-r+z16aQ| z9sWL6qr#OfS}%A`KkYIRd_fkV^2-5Li#*7Yr}A*>tUe~)J%w?ehtap#2dDk5=Bo0d ziQ|SG98x$%t=$qpHfb5Qe^~_^%Ky+e78#7)cqd|5!_pV}mO=--5!BDSfkM0-JaXKF zS?9FCa#RGS>r7@E1Xf1VXmN1xYsDeI6jT}5ATav`4@+AH5sw(6SC>8@Hi3qazR4Um zT#m$3HQsRhNfFkjKE=oGpUBNg`cV0&2GawU;ivV&=c90rmwT5)U)hH+UyT>wo;ZI_ zeJ~nxJ9+RDKL5tlf1!8vh1}Dnq^iOxEkf^jF1VcBMkg1jum_wkA_R!>HaBu;(yR@j zHP}zr{BD{Mt7u`UCcCKZ2dGv@fyJV5JT=*Xo2?Z|`<}&8+mDmE zr=8K@6C-rPCAEpK%MK)}uZ3RtSJE%zNmAvP;}yP+lE!gZ_BJ0E^aT-%FcbLu>?)V| zQJ!5sFOfErY4G;IKRA3&4w5e0!-ZYDaZPn7{CK^&YTYMm5F0*)y=IaEPsN1PY!P7< z%?{(R=ox&pWje2JlffBhMpLS62@3iqxc%S{c&;{zmz#DSoK=ijlhp~3J=&PQwLJ+D z`ELA!y-r-!uO=!HqE59nNAkNo#_&5%SfPkWzA!TyVeYH_Rd$7^(0BVzQsi7tzkP2Z z^Wskmcj6NKem50LJXLwg5LxhpgGP_M^;qezYaNTgW zVFupZugp76^#J)D4@hjPI8`%oU}I+{p|fHTF`>UFhmx6Nw9)OjF)kEx+_{k#n5u|s9Hk?H?n)Dh?9?JobK7T{dtMTYG7l49 z4+mnV8UpIK>M?f9TF(5!MGVlHWBWSS9oh`4@x)_ix-d-!k_NKyl6?|dZ|H;(mrCg4 z6_vQ+{cUjBoDXI8)4^dz2|f}p06$4jdVHS_IkVyjJU@J##QIrc+nrk^dA%tfY7Qi2 z(^lfW#?NrQJ0AM=dzg1M`@l-c7)mRGk=Ca}?lpmf{OS@@>wf}MKD^hvu6P-s=)n~T!nLWVz6ON6zuzU6%TY6v5RVjy>w|mte2t*sPg)YIBCu)R(RYJ+%q%NWoL6RmF)A%|)3(KUVV{ zPY@U&ZA(BUXf|G5euA1MHbKnpyYR439dzO}AZ*cgn$vKK7>K3Owz@(b63wJ*SGdC0 zvvG7=`6&MHcMCLAQ{_I-SwJji+d#WoIeJI*qR+-0^l=En-pfm&;$%8mkW&oxvvh&A zyG_Z;)p$$DlD=QoN~YAvfn2K=-?1};%(XAUO06rDn`{QVmrU8ys5$3C)+fKgn01+^{O$ndxGSUq+w`adls9p^sa-#H>Q zJ$4;xPin&Oi@xxxx*8__9?R?e_(Jv{X(F$8jo{1YU%OsVv=ErZCuy6FIN313VR6+| zwxlJP>6Vh_i$7Hhj&y0(C@UBA9|Xe6m@V{BjSDsj+%%I#Z7@yi49ZW4B|9`l@q-(} zr7>=hHm9M=lBROKqNR}eX#~))rCjMPN7|R314GAFgN>XrOme>?{IA%-+Wytpv?Yq{ zewl<{42AbqfhrXD7NF5VV?39b1!2>Ah~&dQvPezX-=BZMWCUNww?-8x`dSM=vxRWl z&4`BN7NNd*5sGsd^etPp~>iVLQR?iWEQ?G8}g4?FJYP=a9E!Bas=iK3GZ!wiHl7vman@QeWw<^o( z`+m>jcLEJ(-S=vs`BjiE$dA98y)l>NQW(~dkjiArYL-e`cD438m3g+yo!20c{ zahBy|f$z$5+3`JerNC3!SI#lchc&UJWD#V@dEv#0)*VgMleJRPxyo z$Qc-G+x^K8oSUz~9Wi}A`^0OI`mdVYy6lF{D>Y&E*oA_&FCN#a-==Zve?sY-^|-cE zlH7UROH)m%>A^j2IP^hhhUr{WOpz#r6SpN`ZuUuh(^Er_P0NKZruT43wh>HBv18^J zBvnm)G8qf&WDWtTiZ4fV6~*|txXIw& zZ$gxI{DlwyWs|A!1awrc3jFG`H15?nOuZ0|&25R?uiHK3oY+q&>q{mld&BTwP79nZ zYh*lyJ06i>A6R>54*pORrHc0=P$^56+0^u$hBG^9`A7@wxVnyCYP!xwA*Y+{;G@v# zXFZCpTn^_%mczzC5nw(wlKu8mAvL%bZ!N1MJ6l6g*Ju*aSgg(-8aCymd-C5;<}#{;EBPGDi0`OS{GN6Iwfs5dc~5;Q^E7QtcwO1E@7tgk;F{t zAZ_(*g0GP zBkT%`rrR)G_}=$+U*JPk{(~$BC+aQN0%jstuh99QU;FXj>>bD=_ zBo-@R+GI^U{a_2(=2U{!nU}GprU-BR$|MWk#bQR03vB85$h5~D!kRG}{LQxuF@BaW zrKU?Tq3#)3^Rg1;5?vYbnTDVvIT~j;_!C3kf_%}JgW9A(NStyJ3X4yGRl+?yAAS-$ z3d@*D%XCPN(9Jgr{S9u14??q$J-l4`kwzC3U|MMfoMBGm*H|UEe`P;;Qe#WrTpOYd zH{4-Gu`yWL8NdfuFU;}!M3fW;ab1Iy@cye4GSr`#Uv-%zs&yCY2K`um=Ef~H*XO=DDT=xnb_S}_pxh@Mm zfpHl2%nl~rZXp><5}; zg=N%-$&)R^ORrB7>BnxEHNFPFIR0jg#vdm#8dBW*W+is)yV>OTI%H;fpMW2;Yq^ZH z4y_w%np*Z9yp<+kn7#^T-^{@amXXkwPz-S&2I!9@4V3)zf<_%4 z$zE-i0kv{{I&u9k>b@cl&s$%!ZLCee2KZAoAD>7ytbS+7qVZY(+ahDCPnQdaw@8vBj`A zT#Wtv<|aN6cDK(qIN;w6XR$7xp!$X+*y>tD{QY&& z%m$xZ59qFK_E;x7mD?Rrh04B(;5kkozbGDoCBZ95;`wu+8a0kR-~X2S*r;(crR+dL z&lq&Kieq|Z45`ul&Pg!`$%C9C?9I)f{eNocXoq9yV5rX=X>FTY&o5I!UUscY6ExqFq};L{OA37#tFmI}gue7Hc{bWr4O)&SVu@8L z$o{=VwOW3HwDw45rA;K}?!1a$-_+sYPZ6j{6@`)GEZ}wNCB}Er7h!)|4H^!AsIu-P z{%X})c&n+!4=uZ98`Dt$da^=hPE1_r;oDT{3z@OhuQ_0B@2`U-H;Bk=}8yQCjyy)t~ZxS-LH&=fmj}k`F z89j6Pz6B%b{n)W6@BWL-oA{oN*`|eUvdTC?BO27?10l&p+xB*QI>To!giS*u@T}J< zkeR#;>TjH-HMXUoe_50(DyTujq*f635Ccw6f>wAPL&=@-5Zk*3bkuxF*SAtCw$2$( zo~nk@B^vbBwLpP=SpxlyCm4li=I~vA63q2D3pe7;aLJZM;Iw8c?1{S$y;go`xjzEC z{q^u=yEGlY=OPU>9>*rHy+b#x3B#yYoAAxT1LW9`A?D+`5a?=TvA!n+m%3dL7?P^| zzmJponwE69E?YrW5B6bBL>E&mWJ@#5N8sSwermZ>n7i+JV%ZXT{z!uyK0dn_jUW5K z`5_Uuc%co-OU=iN^A&jOFFc+S|Bgyq7vXbfLy(OO1j`5u{BwRSxoPjiy!dEO^Cfby z)wToXt7MYIPdapQo{;f5&u)ex$fiSyP<@iV%n;`8!K@@IV;j2^UNgV%?l;VUQX%6&+F zpd_xTY!Uc_(ZWoAmYzQ*hPf%3VDlsn&R$c7$}v*x=JCVSELt6G7kYxE(rD08k|cL+ z-!L5|NAcATXYyX>Jmg%Qh|!~m(IB9jd<}0Vjd}}F=HpyQc&G;F`a;0-h!V>bN29K6 zKZ)_QV0G=4cvJIH824BmzK8s?T^%4s=RC>7s$b5y^xt{x_9}qF-!@>ipqSJNXQ7{x zbI8>Pli`l%d6=~7Aox#EL-mj@)bAZ8PMrnB^ou=yaSuf8-c)A%w>g-w_JA-G<%8~2 zS$L+nm8?uRWy`d(QF6BmOgj9MMmA1{uhC9b-xsuU>?sYpi{?P8kgd=z_JeorieTEZ z9F$!LiOby?Ab)lhCW$P={pB4n(rh*)SS%(V#OlCdybDQsHqYkAwM5vKGF|YqV_3#S8O=-T%|OjWxP?7mnAUL}JxYC)vHh+8IbIj=C9`!5l8X)1DKg3-`=4Zd61 zNWJeBLdxJ{%rkO@0BtkaG-$!nx~I&YQOd|iLkKJ7uwM~ksB%9Htm>-nG<6)tde9Fe(oj?P>h#yq_z&9MB@{~Qi$F8*E2dw43EFTLrIVh}3$_$a z2#!C~QSDVBimebE7lB&Ws>zE|11z5Ci#6+_agxSD3|c#u-?(ZfjJq_zOyrayvK2A$ zKZdk=1yKF}(zxNm5%5+u1^ahO!uJ)f+?fZ)AX|Ep=HFEU=HVy8hKz&`Jb)$ zBT;C||4u)-MiTXfqWstH$=sX0&*(q9MG*U3aFk5G1}j&33Gd{eH0Pq6z=8@wk?qmU zg||VL=0$RC>+oSw9`eTnA)#^>epU+S+^)aC zC$&PRNXUz&3tl_B*J<$X@ja^D{D%3IRu7lMOvq!+qntY_Bqlw!L_IZ*PTW=w|5-l6 zHJ))KynZ%3n_EpCJ8!`+r<17N{1``zl%UC4IX3@PI(a|dgR!xzfv4k(Xt&B<>hns1 zOe}nj@hLNiea$Vn-NUl?Jq*|w$pjn<7=+l@abR^m2LDd|&W-HZ3Cjzrh{GU-$yUv9 zRx6Ek{)(po0aNhQAWu)+2!!<;P0a`(j+c}!< zHck`v>N@cHkRhg?kbrZ)MfkR#;@}za09%^6p|bx98UNrFSKw+uyHCeJ=jkmpY||)Q zIy#j}X$Z$(e`Z3mzbHKHD`MQcQgC|ET&&3aOV}AVps=ixoEXq$k%6#gQFu0f1O1l12NwQ8ba8x1<{#frk2`*#W(93vc)W*u zcPA8D6(j!dFWl_nOawR`v7WLG95uINroab$lRF=z)RdT~!hMIvqj4D99D=O}4Cwud zcZuxGLUJ|kCh2|ol<~Z<7IvAexTYub=ovF3VrlO@ZNiE@Y&bf=s3li8ubjI)bwe@Axr|lNj{-#f=kG&H4!v# zdL4@HH^s%VqU27Y34W^xf>~cjLA#3zE@;qaV?!?!?H9J(p0rO?%cPMkxbm3n3RhbKg;U zNey^)aOCwpG4Hu;e+%G*i4=X&I|?dVgP`o59|S%ARkcfd4Q$^&8Dccluwngp6{%XgE4-nTn50c{qJtolN=BPj^mAhMAe>xTm@pPv1TW zB0Jl0vq~0hz5D_6$13y9eS#N4Tauq|{tcz`1z&IW8D@%ykSk}B!9)BcXb5|&{Zpm* zYh@}dWbY?(OJ56|e-54gy+Zq$ON)agoWY_jZ`|f4DIfF6CdSaZquIK7!gr}sza4{BX|MTtW)O8R#@RP zoewBu@d0EO_F??BK0MO)6b6HW>GwsV{FdBtSktoyCVev{2OPHIeV0PmeOB17I9FrA z_&#bUaBL!~A8}JP-^0i1Wmw#Lnd?|vL!|B-;gdry1E)O{R;^ z#g28?K+>)Sg`^R79=BuHYZbzQyWz}#dq-f}ju!6mgIc&^6AS0HBABb^$B~^+k3v&V z3w(R%0^A{K`g#8cnw=hqO=s+(byX_;xqlmKP22z)w`;L+du-MDV`ivzcoX{jujCaM zo8p<%+tF22$ec)z)6hAXv9F!ui(MNXCjQ6h)DEEq}s=0Im=VAjG&nN)(fI(Vz<~QBF zc#zaD6$Q`n0GUTZnN#bEY-+Mq*seRj8Jl+(FzIq2%oThckK9)j{FhV1}+4s!gO2kicXPznFa5)t8 za@LdW4o_?wEd+LVqB=X^?FniAMYKWXCCXbrfa7!a)3`(LVbz^$uyK15wQSJAkp~d6 z4GQpc+;0*va36+@W%=-yKU_lhTiXM51sM88lH?5e@s|Huq2Ro5JF|2#zRVY=ijm7O zZO;{&o8kqD7mIGuqp=qz}|BCk{b8&`1C^)tv$W8t;#0&FD9l9~+VUfq$u)qM?1bt)8NJ5c(|tdj|$^H)ff^kp`*^gY54)*0~g%Sd$DcnKaWC($lbUHaH!ITU#A1qFe{U6rsJ z{1uPGzqqd${pK%C>X+h6Ta3{E#z?kw{AP6YkOAksb#%{?zxe3z8FFb*3_e;Rplv2h zUi^tDM9aXQbHn8H`cGA(H0(*BNg1gw7{QM%4@6zb0QhmgnKr zUYJN8RZ7xLR+nJ!m%ysIzl3h4!6f#vS_A5x&V&fjPcS`7ihu4?Le7yW_?0ULS|;`w zuY4T#mRMtKg)xqQe3Q}0%*ODOR=|DTL+1LFaJK2z{QaT|?7drr10ADzjoOQZ{m!A= zHy$-KYf!UY1*_5x`Clm}F!#d-ivOeNJp8%(zc_9dSt)x~XxT#Xd7mppGTYK3B`PXS zZDh|xl9`dcLd55NF3D>5O{FbGl(eU)-~Igs9y~su>z;F7ujjKX8kM|iAbv^)-|1g5 zW@~*X-{u|T&ymxHxR6~=cf7=l*pYn#U)+8T`GV)%n9wz+E3SM{4M6wQ)*p;CGNvEC@i!BSG z9aQLxy~vw58b-38HKL=?QZ%!>MFnPV$4uG3-0t%)zF7R5;|6U9-?U9M?deYvRPF|+ zJ5Ipa$^@#gubFC#-@*)+XtXdo0PkM5@M6bq(KCrwbo5dy8D3}3lfJD>r;1#IO)-Ns z)%F944hjaFY+;PwIuG3xZe!w_Y>?!8K$U(VzT=n;=RGXYdzC+UTzG-ndCn9ncVPPV z5i;rbJaD}3ieGk`V$q8%kZq_X!(!ezQFJ!*x{zbk6lY`beO=~4%UL|mF^-Cy(;+Rw z8XEs{ys;Y+u;X12N!fjcyZ0v0I#(m6^ymzR=5ZOJrzJGQJB8PhH~}vDpMrG<(_xo& z60L*nct>L%sdbnL^FB60DwnG_kny5lHzgCX`)R;F2%<%lhwmC2uwdCk@+H&{4+?U9 z?cPgN>g5G+^t7VPfDN(K*^Sp)<`ID-GVI@Jm#I;hDm#Av9VjWirglEc?6QVAxFdnf z%hy!V@Vg3(gZya-Kg5Tr90%M9XqMsi3Nmeh2p)p!&q5k1BKy}Nl8l_Y%2YXFGDzAOR5UnnE4bQ z1T6yd*gBBc8$+dkcbcYtn#FN-?a7ffbCB70=+INg{wpGt+8a2bzh zSm|qpDjga4Je-?*ua1F{`eoF9qepbBBFWRwHRNNh62po17^`s|Q1_nF$D;T?>b!7LmvelW3T-C|_q52#p zP21>Vu4hS0wb>GmD+2-RoSbGOtf={4C;5hk@ z+a;O`MWe@zl{gSoZ0WX67hZ53^q1!)VPL{(bowlU+iD{%Z(A>cu~T!weCjSJ`8gd| z-^vHKmtEv|M*~mx#b#KxGal=Hn8GZ@sbH>w59BnLV8h2h39YX4oVM1 zA+~%vdqnIu|G;g|-}TLn2+taz#}r@DUG=HljXDCR-Z@J?yk3CDj+;nvtSzk5Ifmms z+-zG@N56l~;#(h3hPht~$?tv7`5Kno4!zC+PFg#l%W+fuIn^1=|0Urw?w$8;5jXd> zH4;YCoEYBdLaUwx93DHuW!&}IC@x>7{O=4-U+9FrZ*SrOy)PhtHWrz;9oR9mju&Kd zjc=~|n=G@Hg!9}yC)Rd^T9p3=%LzKPzWOdLJWz|R*|#BgBIi?|b^xyIv49m5?o#pW z8r;?>W;wT>+w&etq=g01WbBUsBe6pjj}lAp{?bVtg{}~@%y=>-U?QA3DbJJz-sUS7 zDxvxue-x>!h5m#=-fs7|&}NW?UYFa+$S>}ux-JH6A4Q|f5ixu?e+p&{=Yh*!b9!Z| z7%YD`o87wn3ed!G)Sh^ef8*IxcrQ>0o#OKBM)L=-zCNEQXa^Gcb!pTT1@YUpUUEtQ zGEL(+>CPew4mk^`qDm`{)lKG?YUIO( z+g!fTIRwQQJ>_>YkrhF%D`^$&|*RQ|c zqY1)uwqT)1C5}a!vH$d(f&XkN#@7>+O$$U4oroC{1bhVyn7$-yX6M3BmhImnz+c4; zmn+P`maZS*$Y@%-fo5Mamg`@;Ve|iLD3q(!cc06Bg@dXV8@R7_uzggJV=L167+w zsyNQVzU_JR+@%0eKOq4;lT31FeG2?4TSNULzra-XBBUCpQUmT@c$=pQmnNH1-E+C1 z^s66~_<^+7ubf{0X~E<>t-(KkccJFK8nWN!8^`NAj_H$Dpifj4tT;%pHbaSN(v62D zl{d)rZ6;K8dJmpI(}A(e;6=kN;d^zkA8N;q}N`w!3eis6b;9W*icMhgWO0@Dmlj>1?BJ^xPPN7 z9SszKs4HAwtoJ&IXXVrIYfZTCupqcJsKN2a)u8iVJ@J!1g9{iFl-;Nd8h*x{OTmWC zTsXvQsSAMJm%Gt;zd1j=^vmSo}QqfL^MEs1#lR@8Y`1zNF6X#ZY>6_PoNHLnEO z!Wn)p0wr{pa|RI~X| zw6YQ3tX+-q9_O$nR1f8URnvd`z09|z`IgsGXW;%_**v9QTaGa+4z6Vx@RCl05y4b? zP;Uy14s!3WDq_61R?YY?=rrDV&-GhfF2P=fJ>2gTje=48$+U-n4?~XO#nxOpbI~4H ztYps4mGOjzcs_l(yd12~yW#pqA55$$M}dG)$hj)P^1kapRAB_kmi-9H=daK!h1*DR zjXlPAZpJM}8_6zs0Oy7rX=G_5jTL@MHiJJpddS1^klmIm#(YqJvk^wt$}o$DDv%m9 zlZ+FwIG@(TeW@P4+Xe#R-7)xohOSSMEtqob!@}&PsOY{NSDmZEud&LgxI>KS{;Pta zniAae+y&#{GMr49&PF-jA(mC!(R?hAuHSwcEUIVYKD{iOxI3HZKmQE28Zqq~~vzyU1?x48!a!k0j!zl?l1a2#3~ z?pEu0ft;TeL+9O;!@pY;dE3o%q0;{}&Ml3g@ZeYZCef+;TJLQo;bwrIYkWa zDIn8rK~e?}L!LVUkKMar_t;wa;;soV=56I=MFr4TOMlaX6fvgNN{yMS`xC6TaQpdI z6MCT424@JKfUo;a(B|3zS>hr|3WK5T6!S&(qF zqd^-S;5g^K8eUO>Ew2;7X#Wpt6R?2kE4%?Ra_h08=`?XpIDmZ5N%&r;!BS^l9&K|8 zBJVMh*mAuU*WM^99jFN7YUk;j%bTElU+d)=*5d4u;!_Ysqr5z89cZWgNFnQz3fiRMB85=aDNip#j-{i0@2-TH`lB zu1l2((fe&FqS*#5<149LOc%ZVa27MWyOtJtq)>rOEjX~5!eyT;*s5j z%a=Q_Z`CaJx*d0)@)m>LC+?CHt)?I_eK%Hd3^G}bVmP#192zn#$$jS*(wJjFCMU?^ z2SYP*@uVQ{t7!!CXk=U)5HD@g>}R zSnG**%WLsc*CYr$8O^x|MTo0`A&J=`guCNPcz;KbgvxipKCVl$XJ|Hh+o{6S!p*=j)$%Z(5 zI+Q+pkxj18yhN2keL1ecX6zO?N{SDQ^CY*2;lsrTVff}(NbLMa`+^QKyqua z?S*l#TLIDRDIvWb`^h7DA)LDCE?M>PJq-;dbdu;ZOe@O54X3r>or4O`RC58lV^o&p zkE}wwhhC`RHxH_Qd4YWAL`=%-pt0#QL8Ks`ZoZfXywxVm_K}MaKr+as2eORGf&=jM zNIE^_6hTTdG(l*Y1k4XkfuVD!P%-BtO88uZz9ag?pkWSak-N#ir=^57$L)!Gogy5& zagMiaNhNQ%aVrK(+cPAn3M06@yGLImeoN#seDAjsGUX8P!eSx7ZY`RS9;kB3BMAq+ z(frp2pt`fz^+gZK;-z^!eW>M6To`H*{$3Mqe~F`Fdjy!ZngUGg)*SS&NWqUcBT0OX z0vyqvi(vy{@a>W^Ju*#&o}3@dj(W9$kd`6ireBA(emAIsSO_*BHDLRK9dSa29)`D# z&_lYejQ7$qe&3HqE?0G(>%8yg?$+`6lhbraokdLVAg z0G7+7Y5^^qV-H@D#M0zrtB{z&$7yqO%OZ7_^U@aO1h zG%4nKpfS^!U*c0Z2ZA1W>K5|tCtfGQd#zwf-)wku{5o;Dw*d6wl3@2l7IfDwg8;5$ zWfAq8eEwKr`8{(A=0Bf_4F_x>Brp|*1rqsoR|Fy90%5$4PGSz5nxKAW0mxN9<7td5 zW2gRf#_?hX{wdNWp-Z=u+h5g~W+gS!csdF?4(!6f@mcWNa~atm;=mYe9wIA-r!YRp zWSKqg^H8Te02GN0sh=Yc##0CA6+?S49^#%0D@)0vJ;P*A!7FP2p#nHdFR}_ZdHuC= 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 z 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 rw5 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 RewardHackingVector; + + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + // set to true this to show monitor while training + //Monitor.SetActive(true); + + StepRewardFunction = StepRewardHopper101; + TerminateFunction = TerminateOnNonFootHitTerrain; + ObservationsFunction = ObservationsDefault; + + BodyParts["pelvis"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "torso"); + BodyParts["foot"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "foot"); + SetupBodyParts(); + } + + void ObservationsDefault(VectorSensor sensor) + { + if (ShowMonitor) + { + } + + var pelvis = BodyParts["pelvis"]; + Vector3 normalizedVelocity = this.GetNormalizedVelocity(pelvis.velocity); + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.transform.forward); // gyroscope + sensor.AddObservation(pelvis.transform.up); + + sensor.AddObservation(SensorIsInTouch); + JointRotations.ForEach(x => sensor.AddObservation(x)); + sensor.AddObservation(JointVelocity); + var foot = BodyParts["foot"]; + Vector3 normalizedFootPosition = this.GetNormalizedPosition(foot.transform.position); + sensor.AddObservation(normalizedFootPosition.y); + } + + float GetRewardOnEpisodeComplete() + { + return FocalPoint.transform.position.x; + } + + void UpdateRewardHackingVector() + { + // float uprightBonus = GetForwardBonus("pelvis"); + float uprightBonus = GetDirectionBonus("pelvis", Vector3.forward, 1f); + uprightBonus = Mathf.Clamp(uprightBonus, 0f, 1f); + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + float position = Mathf.Clamp(GetNormalizedPosition("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + if (RewardHackingVector?.Count == 0) + RewardHackingVector = Enumerable.Range(0, 6).Select(x => 0f).ToList(); + RewardHackingVector[0] = velocity; + RewardHackingVector[1] = position; + RewardHackingVector[2] = effort; + RewardHackingVector[3] = uprightBonus; + } + + float StepRewardHopper101() + { + UpdateRewardHackingVector(); + float uprightBonus = GetDirectionBonus("pelvis", Vector3.forward, 1f); + uprightBonus = Mathf.Clamp(uprightBonus, 0f, 1f); + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + // float position = Mathf.Clamp(GetNormalizedPosition("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + uprightBonus *= 0.05f; + velocity *= 0.7f; + if (velocity >= .25f) + effort *= 0.25f; + else + effort *= velocity; + + var reward = velocity + + uprightBonus + + effort; + if (ShowMonitor) + { + //var hist = new[] {reward, velocity, uprightBonus, effort}; + //Monitor.Log("rewardHist", hist, displayType: Monitor.DisplayType.Independent); + } + + return reward; + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindHopperAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindHopperAgent.cs.meta new file mode 100644 index 0000000..87002d6 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindHopperAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8e0e8a6cb2e04a0b89d72c85942082d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs new file mode 100644 index 0000000..bbea7cc --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class DeepMindWalkerAgent : MarathonAgent +{ + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + // set to true this to show monitor while training + //Monitor.SetActive(true); + + StepRewardFunction = StepRewardWalker106; + TerminateFunction = TerminateOnNonFootHitTerrain; + ObservationsFunction = ObservationsDefault; + + BodyParts["pelvis"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "torso"); + BodyParts["left_thigh"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "left_thigh"); + BodyParts["right_thigh"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "right_thigh"); + BodyParts["right_foot"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "right_foot"); + BodyParts["left_foot"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "left_foot"); + SetupBodyParts(); + } + + void ObservationsDefault(VectorSensor sensor) + { + if (ShowMonitor) + { + } + + var pelvis = BodyParts["pelvis"]; + Vector3 normalizedVelocity = this.GetNormalizedVelocity(pelvis.velocity); + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.transform.forward); // gyroscope + sensor.AddObservation(pelvis.transform.up); + + sensor.AddObservation(SensorIsInTouch); + JointRotations.ForEach(x => sensor.AddObservation(x)); + sensor.AddObservation(JointVelocity); + sensor.AddObservation(new []{ + this.GetNormalizedPosition(BodyParts["left_foot"].transform.position).y, + this.GetNormalizedPosition(BodyParts["right_foot"].transform.position).y + }); + } + + float StepRewardWalker106() + { + float heightPenality = 1f-GetHeightPenality(1.1f); + heightPenality = Mathf.Clamp(heightPenality, 0f, 1f); + float uprightBonus = GetDirectionBonus("pelvis", Vector3.forward, 1f); + uprightBonus = Mathf.Clamp(uprightBonus, 0f, 1f); + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + //if (ShowMonitor) + //{ + // var hist = new[] {velocity, uprightBonus, heightPenality, effort}.ToList(); + // Monitor.Log("rewardHist", hist.ToArray(), displayType: Monitor.DisplayType.Independent); + //} + + heightPenality *= 0.05f; + uprightBonus *= 0.05f; + velocity *= 0.4f; + if (velocity >= .4f) + effort *= 0.4f; + else + effort *= velocity; + + var reward = velocity + + uprightBonus + + heightPenality + + effort; + + return reward; + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs.meta new file mode 100644 index 0000000..26a0073 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/DeepMindWalkerAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9077dc2f53ed9427e995a11ce8489a1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs new file mode 100644 index 0000000..f6a6e2e --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs @@ -0,0 +1,197 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using System.Linq; +using static BodyHelper002; + +public class MarathonManAgent : Agent, IOnTerrainCollision +{ + BodyManager002 _bodyManager; + bool _isDone; + bool _hasLazyInitialized; + + public static BodyConfig BodyConfig = new BodyConfig + { + GetBodyPartGroup = (name) => + { + name = name.ToLower(); + if (name.Contains("mixamorig")) + return BodyPartGroup.None; + + if (name.Contains("butt")) + return BodyPartGroup.Hips; + if (name.Contains("torso")) + return BodyPartGroup.Torso; + if (name.Contains("head")) + return BodyPartGroup.Head; + if (name.Contains("waist")) + return BodyPartGroup.Spine; + + if (name.Contains("thigh")) + return BodyPartGroup.LegUpper; + if (name.Contains("shin")) + return BodyPartGroup.LegLower; + if (name.Contains("right_right_foot") || name.Contains("left_left_foot")) + return BodyPartGroup.Foot; + if (name.Contains("upper_arm")) + return BodyPartGroup.ArmUpper; + if (name.Contains("larm")) + return BodyPartGroup.ArmLower; + if (name.Contains("hand")) + return BodyPartGroup.Hand; + + return BodyPartGroup.None; + }, + GetMuscleGroup = (name) => + { + name = name.ToLower(); + if (name.Contains("mixamorig")) + return MuscleGroup.None; + if (name.Contains("butt")) + return MuscleGroup.Hips; + if (name.Contains("lower_waist") + || name.Contains("abdomen_y")) + return MuscleGroup.Spine; + if (name.Contains("thigh") + || name.Contains("hip")) + return MuscleGroup.LegUpper; + if (name.Contains("shin")) + return MuscleGroup.LegLower; + if (name.Contains("right_right_foot") + || name.Contains("left_left_foot") + || name.Contains("ankle_x")) + return MuscleGroup.Foot; + if (name.Contains("upper_arm")) + return MuscleGroup.ArmUpper; + if (name.Contains("larm")) + return MuscleGroup.ArmLower; + if (name.Contains("hand")) + return MuscleGroup.Hand; + + return MuscleGroup.None; + }, + GetRootBodyPart = () => BodyPartGroup.Hips, + GetRootMuscle = () => MuscleGroup.Hips + }; + + + + override public void CollectObservations(VectorSensor sensor) + { + if (!_hasLazyInitialized) + { + OnEpisodeBegin(); + } + + Vector3 normalizedVelocity = _bodyManager.GetNormalizedVelocity(); + var pelvis = _bodyManager.GetFirstBodyPart(BodyPartGroup.Hips); + var shoulders = _bodyManager.GetFirstBodyPart(BodyPartGroup.Torso); + + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.Rigidbody.transform.forward); // gyroscope + sensor.AddObservation(pelvis.Rigidbody.transform.up); + + sensor.AddObservation(shoulders.Rigidbody.transform.forward); // gyroscope + sensor.AddObservation(shoulders.Rigidbody.transform.up); + + sensor.AddObservation(_bodyManager.GetSensorIsInTouch()); + foreach (var bodyPart in _bodyManager.BodyParts) + { + bodyPart.UpdateObservations(); + sensor.AddObservation(bodyPart.ObsLocalPosition); + sensor.AddObservation(bodyPart.ObsRotation); + sensor.AddObservation(bodyPart.ObsRotationVelocity); + sensor.AddObservation(bodyPart.ObsVelocity); + } + sensor.AddObservation(_bodyManager.GetSensorObservations()); + + // _bodyManager.OnCollectObservationsHandleDebug(GetInfo()); + } + + public override void OnActionReceived(ActionBuffers actions) + { + float[] vectorAction = actions.ContinuousActions.Select(x=>x).ToArray(); + + if (!_hasLazyInitialized) + { + return; + } + _isDone = false; + // apply actions to body + _bodyManager.OnAgentAction(vectorAction); + + // manage reward + float velocity = Mathf.Clamp(_bodyManager.GetNormalizedVelocity().x, 0f, 1f); + var actionDifference = _bodyManager.GetActionDifference(); + var actionsAbsolute = vectorAction.Select(x=>Mathf.Abs(x)).ToList(); + var actionsAtLimit = actionsAbsolute.Select(x=> x>=1f ? 1f : 0f).ToList(); + float actionaAtLimitCount = actionsAtLimit.Sum(); + float notAtLimitBonus = 1f - (actionaAtLimitCount / (float) actionsAbsolute.Count); + float reducedPowerBonus = 1f - actionsAbsolute.Average(); + + // velocity *= 0.85f; + // reducedPowerBonus *=0f; + // notAtLimitBonus *=.1f; + // actionDifference *=.05f; + // var reward = velocity + // + notAtLimitBonus + // + reducedPowerBonus + // + actionDifference; + var pelvis = _bodyManager.GetFirstBodyPart(BodyPartGroup.Hips); + if (pelvis.Transform.position.y<0){ + EndEpisode(); + } + + var reward = velocity; + + AddReward(reward); + _bodyManager.SetDebugFrameReward(reward); + } + + public override void OnEpisodeBegin() + { + if (!_hasLazyInitialized) + { + _bodyManager = GetComponent(); + _bodyManager.BodyConfig = MarathonManAgent.BodyConfig; + _bodyManager.OnInitializeAgent(); + _hasLazyInitialized = true; + } + _isDone = true; + _bodyManager.OnAgentReset(); + } + public virtual void OnTerrainCollision(GameObject other, GameObject terrain) + { + // if (string.Compare(terrain.name, "Terrain", true) != 0) + if (terrain.GetComponent() == null) + return; + // if (!_styleAnimator.AnimationStepsReady) + // return; + // HACK - for when agent has not been initialized + if (_bodyManager == null) + return; + var bodyPart = _bodyManager.BodyParts.FirstOrDefault(x=>x.Transform.gameObject == other); + if (bodyPart == null) + return; + switch (bodyPart.Group) + { + case BodyHelper002.BodyPartGroup.None: + case BodyHelper002.BodyPartGroup.Foot: + // case BodyHelper002.BodyPartGroup.LegUpper: + case BodyHelper002.BodyPartGroup.LegLower: + case BodyHelper002.BodyPartGroup.Hand: + // case BodyHelper002.BodyPartGroup.ArmLower: + // case BodyHelper002.BodyPartGroup.ArmUpper: + break; + default: + // AddReward(-100f); + if (!_isDone){ + EndEpisode(); + } + break; + } + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs.meta new file mode 100644 index 0000000..161606f --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonManAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92cfc2ffe17d245ee822312e5451327c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs new file mode 100644 index 0000000..adaa152 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.Linq; +using Unity.MLAgents; +using UnityEngine; + +public class MarathonTestBedDecision //: Decision +{ + // Brain _brain; + + // MarathonTestBedController _controller; + + + // // [Tooltip("Lock the top most element")] + // // /**< \brief Lock the top most element*/ + // // public bool FreezeTop = false; + // // bool _lastFreezeTop; + + // public override float[] Decide( + // List vectorObs, + // List visualObs, + // float reward, + // bool done, + // List memory) + // { + // // lazy init + // if (_controller == null) + // { + // _controller = FindObjectOfType(); + // // _brain = GetComponent(); + // // Actions = Enumerable.Repeat(0f, _brain.brainParameters.vectorActionSize[0]).ToArray(); + // // Actions = Enumerable.Repeat(0f, 100).ToArray(); + // } + // if (_controller.ApplyRandomActions) + // { + // for (int i = 0; i < _controller.Actions.Length; i++) + // _controller.Actions[i] = Random.value * 2 - 1; + // } + + // return _controller.Actions; + // } + + // public override List MakeMemory( + // List vectorObs, + // List visualObs, + // float reward, + // bool done, + // List memory) + // { + // return new List(); + // } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs.meta new file mode 100644 index 0000000..903ef74 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/MarathonTestBedDecision.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fae7c31d3f13347d1bc0aab79eb5bf1f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs new file mode 100644 index 0000000..18ddf40 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class OpenAIAntAgent : MarathonAgent +{ + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + // set to true this to show monitor while training + //Monitor.SetActive(true); + + StepRewardFunction = StepRewardAnt101; + TerminateFunction = TerminateAnt; + ObservationsFunction = ObservationsDefault; + + BodyParts["pelvis"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "torso_geom"); + SetupBodyParts(); + } + + void ObservationsDefault(VectorSensor sensor) + { + if (ShowMonitor) + { + } + + var pelvis = BodyParts["pelvis"]; + Vector3 normalizedVelocity = GetNormalizedVelocity(pelvis.velocity); + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.transform.forward); // gyroscope + sensor.AddObservation(pelvis.transform.up); + + sensor.AddObservation(SensorIsInTouch); + JointRotations.ForEach(x => sensor.AddObservation(x)); + sensor.AddObservation(JointVelocity); + Vector3 normalizedFootPosition = this.GetNormalizedPosition(pelvis.transform.position); + sensor.AddObservation(normalizedFootPosition.y); + + } + + bool TerminateAnt() + { + var pelvis = BodyParts["pelvis"]; + if (pelvis.transform.position.y<0){ + return true; + } + + var angle = GetForwardBonus("pelvis"); + bool endOnAngle = (angle < .2f); + return endOnAngle; + } + + float StepRewardAnt101() + { + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + velocity *= 0.7f; + if (velocity >= .3f) + effort *= 0.3f; + else + effort *= velocity; + + + var reward = velocity + + effort; + //if (ShowMonitor) + //{ + // var hist = new[] {reward, velocity}.ToList(); + // Monitor.Log("rewardHist", hist.ToArray(), displayType: Monitor.DisplayType.Independent); + //} + + return reward; + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs.meta new file mode 100644 index 0000000..1e544db --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/OpenAIAntAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b072f3c2a55bd48149bbbd9701c7c6af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs new file mode 100644 index 0000000..fa9086b --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs @@ -0,0 +1,216 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using System.Linq; +using static BodyHelper002; +using System; + +public class RollingAverage +{ + List _window; + int _size; + int _count; + double _sum; + double _sumOfSquares; + public double Mean; + public double StandardDeviation; + + public RollingAverage(int size) + { + _window = new List(size); + _size = size; + _count = 0; + _sum = 0; + _sumOfSquares = 0; + } + public double Normalize(double val) + { + Add(val); + double normalized = val; + if (StandardDeviation != 0) + normalized = (val - Mean) / StandardDeviation; + return normalized; + } + void Add (double val) + { + if (_count >= _size) + { + var removedVal = _window[0]; + _window.RemoveAt(0); + _count--; + _sum -= removedVal; + _sumOfSquares -= removedVal * removedVal; + } + _window.Add(val); + _count++; + _sum += val; + _sumOfSquares += val * val; + // set Mean to Sum / Count, + Mean = _sum / _count; + // set StandardDeviation to Math.Sqrt(SumOfSquares / Count - Mean * Mean). + StandardDeviation = Math.Sqrt(_sumOfSquares / _count - Mean * Mean); + } +} + +public class SparceMarathonManAgent : Agent, IOnTerrainCollision +{ + BodyManager002 _bodyManager; + public float _heightReward; + public float _torsoUprightReward; + public float _torsoForwardReward; + public float _hipsUprightReward; + public float _hipsForwardReward; + public float _notAtLimitBonus; + public float _reducedPowerBonus; + public float _episodeMaxDistance; + + static RollingAverage rollingAverage; + + bool _isDone; + bool _hasLazyInitialized; + + override public void CollectObservations(VectorSensor sensor) + { + if (!_hasLazyInitialized) + { + OnEpisodeBegin(); + } + + Vector3 normalizedVelocity = _bodyManager.GetNormalizedVelocity(); + var pelvis = _bodyManager.GetFirstBodyPart(BodyPartGroup.Hips); + var shoulders = _bodyManager.GetFirstBodyPart(BodyPartGroup.Torso); + + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.Rigidbody.transform.forward); // gyroscope + sensor.AddObservation(pelvis.Rigidbody.transform.up); + + sensor.AddObservation(shoulders.Rigidbody.transform.forward); // gyroscope + sensor.AddObservation(shoulders.Rigidbody.transform.up); + + sensor.AddObservation(_bodyManager.GetSensorIsInTouch()); + foreach (var bodyPart in _bodyManager.BodyParts) + { + bodyPart.UpdateObservations(); + sensor.AddObservation(bodyPart.ObsLocalPosition); + sensor.AddObservation(bodyPart.ObsRotation); + sensor.AddObservation(bodyPart.ObsRotationVelocity); + sensor.AddObservation(bodyPart.ObsVelocity); + } + sensor.AddObservation(_bodyManager.GetSensorObservations()); + + sensor.AddObservation(_notAtLimitBonus); + sensor.AddObservation(_reducedPowerBonus); + // _bodyManager.OnCollectObservationsHandleDebug(GetInfo()); + } + + public override void OnActionReceived(ActionBuffers actions) + { + float[] vectorAction = actions.ContinuousActions.Select(x=>x).ToArray(); + + if (!_hasLazyInitialized) + { + return; + } + _isDone = false; + // apply actions to body + _bodyManager.OnAgentAction(vectorAction); + + // manage reward + var actionDifference = _bodyManager.GetActionDifference(); + var actionsAbsolute = vectorAction.Select(x=>Mathf.Abs(x)).ToList(); + var actionsAtLimit = actionsAbsolute.Select(x=> x>=1f ? 1f : 0f).ToList(); + float actionaAtLimitCount = actionsAtLimit.Sum(); + _notAtLimitBonus = 1f - (actionaAtLimitCount / (float) actionsAbsolute.Count); + _reducedPowerBonus = 1f - actionsAbsolute.Average(); + _heightReward = _bodyManager.GetHeightNormalizedReward(1.2f); + _torsoUprightReward = _bodyManager.GetUprightNormalizedReward(BodyPartGroup.Torso); + _torsoForwardReward = _bodyManager.GetDirectionNormalizedReward(BodyPartGroup.Torso, Vector3.forward); + _hipsUprightReward = _bodyManager.GetUprightNormalizedReward(BodyPartGroup.Hips); + _hipsForwardReward = _bodyManager.GetDirectionNormalizedReward(BodyPartGroup.Hips, Vector3.forward); + _torsoUprightReward = Mathf.Clamp(_torsoUprightReward, 0f, 1f); + _torsoForwardReward = Mathf.Clamp(_torsoForwardReward, 0f, 1f); + _hipsUprightReward = Mathf.Clamp(_hipsUprightReward, 0f, 1f); + _hipsForwardReward = Mathf.Clamp(_hipsForwardReward, 0f, 1f); + + var stepCount = StepCount > 0 ? StepCount : 1; + if ((stepCount >= MaxStep) + && (MaxStep > 0)) + { + AddEpisodeEndReward(); + } + else{ + var pelvis = _bodyManager.GetFirstBodyPart(BodyPartGroup.Hips); + if (pelvis.Transform.position.y<0){ + AddEpisodeEndReward(); + EndEpisode(); + } + } + } + + public override void OnEpisodeBegin() + { + if (!_hasLazyInitialized) + { + _bodyManager = GetComponent(); + _bodyManager.BodyConfig = MarathonManAgent.BodyConfig; + _bodyManager.OnInitializeAgent(); + _hasLazyInitialized = true; + } + _isDone = true; + _bodyManager.OnAgentReset(); + _episodeMaxDistance = 0f; + if (rollingAverage == null) + rollingAverage = new RollingAverage(100); + } + public virtual void OnTerrainCollision(GameObject other, GameObject terrain) + { + // if (string.Compare(terrain.name, "Terrain", true) != 0) + if (terrain.GetComponent() == null) + return; + // if (!_styleAnimator.AnimationStepsReady) + // return; + // HACK - for when agent has not been initialized + if (_bodyManager == null) + return; + var bodyPart = _bodyManager.BodyParts.FirstOrDefault(x=>x.Transform.gameObject == other); + if (bodyPart == null) + return; + switch (bodyPart.Group) + { + case BodyHelper002.BodyPartGroup.Foot: + _episodeMaxDistance = _bodyManager.GetNormalizedPosition().x; + break; + case BodyHelper002.BodyPartGroup.None: + // case BodyHelper002.BodyPartGroup.LegUpper: + case BodyHelper002.BodyPartGroup.LegLower: + case BodyHelper002.BodyPartGroup.Hand: + // case BodyHelper002.BodyPartGroup.ArmLower: + // case BodyHelper002.BodyPartGroup.ArmUpper: + break; + default: + // AddReward(-100f); + if (!_isDone){ + AddEpisodeEndReward(); + EndEpisode(); + } + break; + } + } + + void AddEpisodeEndReward() + { + var reward = _episodeMaxDistance; + + AddReward(reward); + _bodyManager.SetDebugFrameReward(reward); + + // # normalized reward + // float normalizedReward = (float)rollingAverage.Normalize(reward); + // normalizedReward += (float)rollingAverage.Mean; + // AddReward(normalizedReward); + // _bodyManager.SetDebugFrameReward(normalizedReward); + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs.meta new file mode 100644 index 0000000..f5d4820 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/SparceMarathonManAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ab14e49bdf8644ca9c2a67e85f3a11e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs new file mode 100644 index 0000000..6691f1f --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class TerrainAntAgent : MarathonAgent { + + TerrainGenerator _terrainGenerator; + int _lastXPosInMeters; + int _stepCountAtLastMeter; + float _pain; + Vector3 _centerOfMass; + + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + BodyParts["pelvis"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "torso_geom"); + + SetCenterOfMass(); + + if (_terrainGenerator == null) + _terrainGenerator = GetComponent(); + _lastXPosInMeters = (int) BodyParts["pelvis"].transform.position.x; + _terrainGenerator.Reset(); + + // set to true this to show monitor while training + //Monitor.SetActive(true); + + StepRewardFunction = StepRewardAnt101; + TerminateFunction = LocalTerminate; + ObservationsFunction = ObservationsDefault; + OnTerminateRewardValue = 0f; + // OnTerminateRewardValue = -100f; + _pain = 0f; + + base.SetupBodyParts(); + SetCenterOfMass(); + } + + bool LocalTerminate() + { + int newXPosInMeters = (int) BodyParts["pelvis"].transform.position.x; + if (newXPosInMeters > _lastXPosInMeters) { + _lastXPosInMeters = newXPosInMeters; + _stepCountAtLastMeter = this.StepCount; + } + + SetCenterOfMass(); + var xpos = _centerOfMass.x; + var terminate = false; + if (_terrainGenerator.IsPointOffEdge(BodyParts["pelvis"].transform.position)){ + terminate = true; + AddReward(-1f); + } + if (this.StepCount-_stepCountAtLastMeter >= (200*5)) + terminate = true; + else if (xpos < 4f && _pain > 1f) + terminate = true; + else if (xpos < 2f && _pain > 0f) + terminate = true; + + return terminate; + } + public override void OnTerrainCollision(GameObject other, GameObject terrain) { + if (terrain.GetComponent() == null) + return; + + switch (other.name.ToLowerInvariant().Trim()) + { + case "pelvis": // dm_hopper + _pain += 5f; + NonFootHitTerrain = true; + break; + case "left_ankle_geom": // oai_ant + case "right_ankle_geom": // oai_ant + case "third_ankle_geom": // oai_ant + case "fourth_ankle_geom": // oai_ant + FootHitTerrain = true; + break; + default: + _pain += 5f; + NonFootHitTerrain = true; + break; + } + } + + void ObservationsDefault(VectorSensor sensor) + { + var pelvis = BodyParts["pelvis"]; + Vector3 normalizedVelocity = GetNormalizedVelocity(pelvis.velocity); + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.transform.forward); // gyroscope + sensor.AddObservation(pelvis.transform.up); + + sensor.AddObservation(SensorIsInTouch); + JointRotations.ForEach(x => sensor.AddObservation(x)); + sensor.AddObservation(JointVelocity); + // Vector3 normalizedFootPosition = this.GetNormalizedPosition(pelvis.transform.position); + // sensor.AddObservation(normalizedFootPosition.y); + + (List distances, float fraction) = + _terrainGenerator.GetDistances2d( + pelvis.transform.position, ShowMonitor); + + sensor.AddObservation(distances); + sensor.AddObservation(fraction); + } + + + void SetCenterOfMass() + { + _centerOfMass = Vector3.zero; + float c = 0f; + var bodyParts = this.gameObject.GetComponentsInChildren(); + + foreach (var part in bodyParts) + { + _centerOfMass += part.worldCenterOfMass * part.mass; + c += part.mass; + } + _centerOfMass /= c; + } + + float StepRewardAnt101() + { + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + // velocity *= 0.7f; + // if (velocity >= .25f) + // effort *= 0.25f; + // else + // effort *= velocity; + + // var reward = velocity + // + effort; + // if (ShowMonitor) + // { + // var hist = new[] {reward, velocity, effort}; + // Monitor.Log("rewardHist", hist, displayType: Monitor.DisplayType.Independent); + // } + _pain = 0f; + var reward = velocity; + return reward; + // return 0f; + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs.meta new file mode 100644 index 0000000..8eb3c0e --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainAntAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01dc2865764654ce99be0a7f7842997f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs new file mode 100644 index 0000000..c9d881a --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs @@ -0,0 +1,229 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using System.Linq; +using ManyWorlds; + +public class TerrainGenerator : MonoBehaviour +{ + + Terrain terrain; + Agent _agent; + DecisionRequester _decisionRequester; + public int posXInTerrain; + public int posYInTerrain; + float[,] _heights; + float[,] _rowHeight; + + public int heightIndex; + public float curHeight; + public float actionReward; + + internal const float _minHeight = 0f; + internal const float _maxHeight = 10f; + internal const float _minSpawnHeight = 0f;//2f; + internal const float _maxSpawnHeight = 10f;//8f; + const float _midHeight = 5f; + float _mapScaleY; + float[,] _heightMap; + public List debugLastHeights; + public List debugLastNormHeights; + public float debugLastFraction; + + PhysicsScene physicsScene; + + // Start is called before the first frame update + void Start() + { + physicsScene = (GetComponentInParent().GetPhysicsScene()); + } + + // Update is called once per frame + void Update() + { + + } + + public void Reset() + { + if (this.terrain == null) + { + var parent = gameObject.transform.parent; + terrain = parent.GetComponentInChildren(); + var sharedTerrainData = terrain.terrainData; + terrain.terrainData = new TerrainData(); + terrain.terrainData.heightmapResolution = sharedTerrainData.heightmapResolution; + terrain.terrainData.baseMapResolution = sharedTerrainData.baseMapResolution; + terrain.terrainData.SetDetailResolution(sharedTerrainData.detailResolution, sharedTerrainData.detailResolutionPerPatch); + terrain.terrainData.size = sharedTerrainData.size; + //terrain.terrainData.thickness = sharedTerrainData.thickness; + // terrain.terrainData.splatPrototypes = sharedTerrainData.splatPrototypes; + terrain.terrainData.terrainLayers = sharedTerrainData.terrainLayers; + var collider = terrain.GetComponent(); + collider.terrainData = terrain.terrainData; + _rowHeight = new float[terrain.terrainData.heightmapResolution,1]; + } + if (this._agent == null) + { + _agent = GetComponent(); + _decisionRequester = GetComponent(); + } + //print($"HeightMap {this.terrain.terrainData.heightmapWidth}, {this.terrain.terrainData.heightmapHeight}. + // Scale {this.terrain.terrainData.heightmapScale}. Resolution {this.terrain.terrainData.heightmapResolution}"); + _mapScaleY = this.terrain.terrainData.heightmapScale.y; + // get the normalized position of this game object relative to the terrain + Vector3 tempCoord = (transform.position - terrain.gameObject.transform.position); + Vector3 coord; + tempCoord.x = Mathf.Clamp(tempCoord.x,0f, terrain.terrainData.size.x-0.000001f); + tempCoord.z = Mathf.Clamp(tempCoord.z,0f, terrain.terrainData.size.z-0.000001f); + coord.x = (tempCoord.x-1) / terrain.terrainData.size.x; + coord.y = tempCoord.y / terrain.terrainData.size.y; + coord.z = tempCoord.z / terrain.terrainData.size.z; + // get the position of the terrain heightmap where this game object is + posXInTerrain = (int) (coord.x * terrain.terrainData.heightmapResolution); + posYInTerrain = (int) (coord.z * terrain.terrainData.heightmapResolution); + // we set an offset so that all the raising terrain is under this game object + int offset = 0 / 2; + // get the heights of the terrain under this game object + _heights = terrain.terrainData.GetHeights(posXInTerrain-offset,posYInTerrain-offset, 100,1); + curHeight = _midHeight; + heightIndex = posXInTerrain; + actionReward = 0f; + + ResetHeights(); + } + void ResetHeights() + { + if (_heightMap == null){ + _heightMap = new float [terrain.terrainData.heightmapResolution, terrain.terrainData.heightmapResolution]; + } + heightIndex = 0; + while(heightIndex _maxSpawnHeight) + { + curHeight = _maxSpawnHeight; + actionSize = 0; + } + } + + float height = curHeight / _mapScaleY; + // var unit = terrain.terrainData.heightmapWidth / (int)_mapScaleY; + int unit = 1; + int startH = heightIndex * unit; + for (int h = startH; h < startH+unit; h++) + { + for (int w = 0; w < terrain.terrainData.heightmapResolution; w++){ + _heightMap[w,h] = height; + } + height += 1/300f/_mapScaleY; + } + heightIndex++; + } + + public List GetDistances2d(IEnumerable points) + { + List distances = points + .Select(x=> GetDistance2d(x)) + .ToList(); + return distances; + } + float GetDistance2d(Vector3 point) + { + int layerMask = ~(1 << 14); + RaycastHit hit; + if (!physicsScene.Raycast(point, Vector3.down, out hit,_maxHeight,layerMask)) + return 1f; + float distance = hit.distance; + distance = Mathf.Clamp(distance, -1f, 1f); + return distance; + } + + public bool IsPointOffEdge(Vector3 point) + { + Vector3 localPos = (point - terrain.gameObject.transform.position); + bool isOffEdge = false; + isOffEdge |= (localPos.z < 0f); + isOffEdge |= (localPos.z >= terrain.terrainData.size.z); + return isOffEdge; + } + + public (List, float) GetDistances2d(Vector3 pos, bool showDebug) + { + int layerMask = ~(1 << 14); + var xpos = pos.x; + xpos -= 2f; + float fraction = (xpos - (Mathf.Floor(xpos*5)/5)) * 5; + float ypos = pos.y; + List rays = Enumerable.Range(0, 5*7).Select(x => new Ray(new Vector3(xpos+(x*.2f), TerrainGenerator._maxHeight, pos.z), Vector3.down)).ToList(); + RaycastHit hit; + List distances = rays.Select + ( ray=> { + if (!physicsScene.Raycast(ray.origin, ray.direction, out hit,_maxHeight,layerMask)) + return _maxHeight; + return ypos - (_maxHeight - hit.distance); + }).ToList(); + if (Application.isEditor && showDebug) + { + var view = distances.Skip(10).Take(20).Select(x=>x).ToList(); + //Monitor.Log("distances", view.ToArray()); + var time = Time.deltaTime; + if (_decisionRequester?.DecisionPeriod > 1) + time *= _decisionRequester.DecisionPeriod; + for (int i = 0; i < rays.Count; i++) + { + var distance = distances[i]; + var origin = new Vector3(rays[i].origin.x, ypos,0f); + var direction = distance > 0 ? Vector3.down : Vector3.up; + var color = distance > 0 ? Color.yellow : Color.red; + Debug.DrawRay(origin, direction*Mathf.Abs(distance), color, time, false); + } + } + List normalizedDistances = distances + .Select(x => Mathf.Clamp(x, -10f, 10f)) + .Select(x => x/10f) + .ToList(); + ; + debugLastNormHeights = normalizedDistances; + debugLastHeights = distances; + debugLastFraction = fraction; + + return (normalizedDistances, fraction); + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs.meta new file mode 100644 index 0000000..ae60741 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4da94542694fa499d98d191423809c64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs new file mode 100644 index 0000000..9d54c80 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class TerrainHopperAgent : MarathonAgent { + + TerrainGenerator _terrainGenerator; + int _lastXPosInMeters; + int _stepCountAtLastMeter; + float _pain; + Vector3 _centerOfMass; + + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + BodyParts["pelvis"] = GetComponentsInChildren().FirstOrDefault(x=>x.name=="torso"); + BodyParts["foot"] = GetComponentsInChildren().FirstOrDefault(x=>x.name=="foot"); + + SetCenterOfMass(); + + if (_terrainGenerator == null) + _terrainGenerator = GetComponent(); + _lastXPosInMeters = (int) BodyParts["foot"].transform.position.x; + _terrainGenerator.Reset(); + _stepCountAtLastMeter = 0; + + // set to true this to show monitor while training + //Monitor.SetActive(true); + + StepRewardFunction = StepRewardHopper101; + TerminateFunction = LocalTerminate; + ObservationsFunction = ObservationsDefault; + OnTerminateRewardValue = 0f; + _pain = 0f; + + base.SetupBodyParts(); + SetCenterOfMass(); + } + + bool LocalTerminate() + { + int newXPosInMeters = (int) BodyParts["foot"].transform.position.x; + if (newXPosInMeters > _lastXPosInMeters) { + _lastXPosInMeters = newXPosInMeters; + _stepCountAtLastMeter = this.StepCount; + } + + SetCenterOfMass(); + var xpos = _centerOfMass.x; + var terminate = false; + if (this.StepCount-_stepCountAtLastMeter >= (100*5)) + terminate = true; + else if (xpos < 2f && _pain > 0f) + terminate = true; + else if (_pain > 1f) + terminate = true; + + return terminate; + } + public override void OnTerrainCollision(GameObject other, GameObject terrain) { + if (terrain.GetComponent() == null) + return; + + switch (other.name.ToLowerInvariant().Trim()) + { + // case "torso": // dm_hopper + // _pain += 5f; + // NonFootHitTerrain = true; + // break; + case "foot": // dm_hopper + case "calf": // dm_hopper + FootHitTerrain = true; + break; + default: + case "thigh": // dm_hopper + case "pelvis": // dm_hopper + case "torso": // dm_hopper + _pain += .5f; + NonFootHitTerrain = true; + break; + } + } + + void ObservationsDefault(VectorSensor sensor) + { + // var pelvis = BodyParts["pelvis"]; + // sensor.AddObservation(pelvis.velocity); + // sensor.AddObservation(pelvis.transform.forward); // gyroscope + // sensor.AddObservation(pelvis.transform.up); + + // sensor.AddObservation(SensorIsInTouch); + // JointRotations.ForEach(x=>sensor.AddObservation(x)); + // sensor.AddObservation(JointVelocity); + // var foot = BodyParts["foot"]; + // sensor.AddObservation(foot.transform.position.y); + + var pelvis = BodyParts["pelvis"]; + Vector3 normalizedVelocity = this.GetNormalizedVelocity(pelvis.velocity); + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.transform.forward); // gyroscope + sensor.AddObservation(pelvis.transform.up); + + sensor.AddObservation(SensorIsInTouch); + JointRotations.ForEach(x => sensor.AddObservation(x)); + sensor.AddObservation(JointVelocity); + var foot = BodyParts["foot"]; + Vector3 normalizedFootPosition = this.GetNormalizedPosition(foot.transform.position); + sensor.AddObservation(normalizedFootPosition.y); + + (List distances, float fraction) = + _terrainGenerator.GetDistances2d( + pelvis.transform.position, ShowMonitor); + + sensor.AddObservation(distances); + sensor.AddObservation(fraction); + } + + + void SetCenterOfMass() + { + _centerOfMass = Vector3.zero; + float c = 0f; + var bodyParts = this.gameObject.GetComponentsInChildren(); + + foreach (var part in bodyParts) + { + _centerOfMass += part.worldCenterOfMass * part.mass; + c += part.mass; + } + _centerOfMass /= c; + } + + float StepRewardHopper101() + { + float uprightBonus = GetDirectionBonus("pelvis", Vector3.forward, 1f); + uprightBonus = Mathf.Clamp(uprightBonus, 0f, 1f); + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + // float position = Mathf.Clamp(GetNormalizedPosition("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + // uprightBonus *= 0.05f; + // velocity *= 0.7f; + // if (velocity >= .25f) + // effort *= 0.25f; + // else + // effort *= velocity; + + // var reward = velocity + // + uprightBonus + // + effort; + // if (ShowMonitor) + // { + // var hist = new[] {reward, velocity, uprightBonus, effort}; + // Monitor.Log("rewardHist", hist, displayType: Monitor.DisplayType.Independent); + // } + var reward = velocity; + + _pain = 0f; + return reward; + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs.meta new file mode 100644 index 0000000..9cdb6e4 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainHopperAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 152acbc2f18ab45f7a82449fec55784e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs new file mode 100644 index 0000000..a7263b5 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs @@ -0,0 +1,183 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using System.Linq; +using static BodyHelper002; +using ManyWorlds; + +public class TerrainMarathonManAgent : Agent, IOnTerrainCollision +{ + BodyManager002 _bodyManager; + + TerrainGenerator _terrainGenerator; + SpawnableEnv _spawnableEnv; + int _stepCountAtLastMeter; + public int lastXPosInMeters; + public int maxXPosInMeters; + float _pain; + + List distances; + float fraction; + bool _hasLazyInitialized; + + override public void CollectObservations(VectorSensor sensor) + { + if (!_hasLazyInitialized) + { + OnEpisodeBegin(); + } + + Vector3 normalizedVelocity = _bodyManager.GetNormalizedVelocity(); + var pelvis = _bodyManager.GetFirstBodyPart(BodyPartGroup.Hips); + var shoulders = _bodyManager.GetFirstBodyPart(BodyPartGroup.Torso); + + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.Rigidbody.transform.forward); // gyroscope + sensor.AddObservation(pelvis.Rigidbody.transform.up); + + sensor.AddObservation(shoulders.Rigidbody.transform.forward); // gyroscope + sensor.AddObservation(shoulders.Rigidbody.transform.up); + + sensor.AddObservation(_bodyManager.GetSensorIsInTouch()); + foreach (var bodyPart in _bodyManager.BodyParts) + { + bodyPart.UpdateObservations(); + sensor.AddObservation(bodyPart.ObsLocalPosition); + sensor.AddObservation(bodyPart.ObsRotation); + sensor.AddObservation(bodyPart.ObsRotationVelocity); + sensor.AddObservation(bodyPart.ObsVelocity); + } + sensor.AddObservation(_bodyManager.GetSensorObservations()); + + (distances, fraction) = + _terrainGenerator.GetDistances2d( + pelvis.Rigidbody.transform.position, _bodyManager.ShowMonitor); + + sensor.AddObservation(distances); + sensor.AddObservation(fraction); + // _bodyManager.OnCollectObservationsHandleDebug(GetInfo()); + } + + public override void OnActionReceived(ActionBuffers actions) + { + float[] vectorAction = actions.ContinuousActions.Select(x=>x).ToArray(); + + if (!_hasLazyInitialized) + { + return; + } + // apply actions to body + _bodyManager.OnAgentAction(vectorAction); + + // manage reward + float velocity = Mathf.Clamp(_bodyManager.GetNormalizedVelocity().x, 0f, 1f); + var actionDifference = _bodyManager.GetActionDifference(); + var actionsAbsolute = vectorAction.Select(x=>Mathf.Abs(x)).ToList(); + var actionsAtLimit = actionsAbsolute.Select(x=> x>=1f ? 1f : 0f).ToList(); + float actionaAtLimitCount = actionsAtLimit.Sum(); + float notAtLimitBonus = 1f - (actionaAtLimitCount / (float) actionsAbsolute.Count); + float reducedPowerBonus = 1f - actionsAbsolute.Average(); + + // velocity *= 0.85f; + // reducedPowerBonus *=0f; + // notAtLimitBonus *=.1f; + // actionDifference *=.05f; + // var reward = velocity + // + notAtLimitBonus + // + reducedPowerBonus + // + actionDifference; + var reward = velocity; + AddReward(reward); + _bodyManager.SetDebugFrameReward(reward); + + var pelvis = _bodyManager.GetFirstBodyPart(BodyPartGroup.Hips); + float xpos = + _bodyManager.GetBodyParts(BodyPartGroup.Foot) + .Average(x=>x.Transform.position.x); + int newXPosInMeters = (int) xpos; + if (newXPosInMeters > lastXPosInMeters) { + lastXPosInMeters = newXPosInMeters; + _stepCountAtLastMeter = this.StepCount; + } + if (newXPosInMeters > maxXPosInMeters) + maxXPosInMeters = newXPosInMeters; + var terminate = false; + // bool isInBounds = _spawnableEnv.IsPointWithinBoundsInWorldSpace(pelvis.Transform.position); + // if (!isInBounds) + // if (pelvis.Rigidbody.transform.position.y < 0f) + if (_terrainGenerator.IsPointOffEdge(pelvis.Transform.position)){ + terminate = true; + AddReward(-1f); + } + if (this.StepCount-_stepCountAtLastMeter >= (200*5)) + terminate = true; + else if (xpos < 4f && _pain > 1f) + terminate = true; + else if (xpos < 2f && _pain > 0f) + terminate = true; + else if (_pain > 2f) + terminate = true; + if (terminate){ + EndEpisode(); + } + _pain = 0f; + } + + public override void OnEpisodeBegin() + { + if (!_hasLazyInitialized) + { + _bodyManager = GetComponent(); + _bodyManager.BodyConfig = MarathonManAgent.BodyConfig; + _bodyManager.OnInitializeAgent(); + _hasLazyInitialized = true; + } + + if (_bodyManager == null) + _bodyManager = GetComponent(); + _bodyManager.OnAgentReset(); + if (_terrainGenerator == null) + _terrainGenerator = GetComponent(); + if (_spawnableEnv == null) + _spawnableEnv = GetComponentInParent(); + _terrainGenerator.Reset(); + lastXPosInMeters = (int) + _bodyManager.GetBodyParts(BodyPartGroup.Foot) + .Average(x=>x.Transform.position.x); + _pain = 0f; + } + public virtual void OnTerrainCollision(GameObject other, GameObject terrain) + { + // if (string.Compare(terrain.name, "Terrain", true) != 0) + if (terrain.GetComponent() == null) + return; + // if (!_styleAnimator.AnimationStepsReady) + // return; + // HACK - for when agent has not been initialized + if (_bodyManager == null) + return; + var bodyPart = _bodyManager.BodyParts.FirstOrDefault(x=>x.Transform.gameObject == other); + if (bodyPart == null) + return; + switch (bodyPart.Group) + { + case BodyHelper002.BodyPartGroup.None: + case BodyHelper002.BodyPartGroup.Foot: + case BodyHelper002.BodyPartGroup.LegLower: + break; + case BodyHelper002.BodyPartGroup.LegUpper: + case BodyHelper002.BodyPartGroup.Hand: + case BodyHelper002.BodyPartGroup.ArmLower: + case BodyHelper002.BodyPartGroup.ArmUpper: + _pain += .1f; + break; + default: + // AddReward(-100f); + _pain += 5f; + break; + } + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs.meta new file mode 100644 index 0000000..12761da --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainMarathonManAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf9d05032146a423c9add69cc32051f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs new file mode 100644 index 0000000..fef91d7 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; + +public class TerrainWalkerAgent : MarathonAgent { + + TerrainGenerator _terrainGenerator; + + int _lastXPosInMeters; + int _stepCountAtLastMeter; + float _pain; + Vector3 _centerOfMass; + + public override void OnEpisodeBegin() + { + base.OnEpisodeBegin(); + + BodyParts["pelvis"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "torso"); + BodyParts["left_thigh"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "left_thigh"); + BodyParts["right_thigh"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "right_thigh"); + BodyParts["right_foot"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "right_foot"); + BodyParts["left_foot"] = GetComponentsInChildren().FirstOrDefault(x => x.name == "left_foot"); + + SetCenterOfMass(); + + if (_terrainGenerator == null) + _terrainGenerator = GetComponent(); + _lastXPosInMeters = (int) BodyParts["pelvis"].transform.position.x; + _terrainGenerator.Reset(); + _stepCountAtLastMeter = 0; + + // set to true this to show monitor while training + //Monitor.SetActive(true); + + StepRewardFunction = StepRewardWalker106; + TerminateFunction = LocalTerminate; + ObservationsFunction = ObservationsDefault; + OnTerminateRewardValue = 0f; + _pain = 0f; + + base.SetupBodyParts(); + SetCenterOfMass(); + } + + bool LocalTerminate() + { + int newXPosInMeters = (int) BodyParts["pelvis"].transform.position.x; + if (newXPosInMeters > _lastXPosInMeters) { + _lastXPosInMeters = newXPosInMeters; + _stepCountAtLastMeter = this.StepCount; + } + + SetCenterOfMass(); + var xpos = _centerOfMass.x; + var terminate = false; + if (this.StepCount-_stepCountAtLastMeter >= (100*5)) + terminate = true; + else if (xpos < 4f && _pain > 1f) + terminate = true; + else if (xpos < 2f && _pain > 0f) + terminate = true; + + return terminate; + } + public override void OnTerrainCollision(GameObject other, GameObject terrain) { + if (terrain.GetComponent() == null) + return; + + switch (other.name.ToLowerInvariant().Trim()) + { + case "pelvis": // dm_hopper + _pain += 5f; + NonFootHitTerrain = true; + break; + case "right_leg": // dm_walker + case "left_leg": // dm_walker + case "right_foot": // dm_walker + case "left_foot": // dm_walker + FootHitTerrain = true; + break; + default: + _pain += 5f; + NonFootHitTerrain = true; + break; + } + } + + void ObservationsDefault(VectorSensor sensor) + { + var pelvis = BodyParts["pelvis"]; + Vector3 normalizedVelocity = this.GetNormalizedVelocity(pelvis.velocity); + sensor.AddObservation(normalizedVelocity); + sensor.AddObservation(pelvis.transform.forward); // gyroscope + sensor.AddObservation(pelvis.transform.up); + + sensor.AddObservation(SensorIsInTouch); + JointRotations.ForEach(x => sensor.AddObservation(x)); + sensor.AddObservation(JointVelocity); + // sensor.AddObservation(new []{ + // this.GetNormalizedPosition(BodyParts["left_foot"].transform.position).y, + // this.GetNormalizedPosition(BodyParts["right_foot"].transform.position).y + // }); + + (List distances, float fraction) = + _terrainGenerator.GetDistances2d( + pelvis.transform.position, ShowMonitor); + + sensor.AddObservation(distances); + sensor.AddObservation(fraction); + } + + + void SetCenterOfMass() + { + _centerOfMass = Vector3.zero; + float c = 0f; + var bodyParts = this.gameObject.GetComponentsInChildren(); + + foreach (var part in bodyParts) + { + _centerOfMass += part.worldCenterOfMass * part.mass; + c += part.mass; + } + _centerOfMass /= c; + } + + float StepRewardWalker106() + { + float uprightBonus = GetDirectionBonus("pelvis", Vector3.forward, 1f); + uprightBonus = Mathf.Clamp(uprightBonus, 0f, 1f); + float velocity = Mathf.Clamp(GetNormalizedVelocity("pelvis").x, 0f, 1f); + float effort = 1f - GetEffortNormalized(); + + //if (ShowMonitor) + //{ + // var hist = new[] {velocity, uprightBonus, effort}.ToList(); + // Monitor.Log("rewardHist", hist.ToArray(), displayType: Monitor.DisplayType.Independent); + //} + + // uprightBonus *= 0.1f; + // velocity *= 0.45f; + // if (velocity >= .45f) + // effort *= 0.45f; + // else + // effort *= velocity; + + // var reward = velocity + // + uprightBonus + // + effort; + var reward = velocity; + _pain = 0f; + return reward; + } +} diff --git a/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs.meta b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs.meta new file mode 100644 index 0000000..cfa3d32 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/OriginalAgents/TerrainWalkerAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c5a501017f084d2682727a59b227fe8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002.meta new file mode 100644 index 0000000..fe6bcd4 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdc7ea2698158f74b9e797210e567d04 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs new file mode 100644 index 0000000..601bd69 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs @@ -0,0 +1,11 @@ +using System; +using static BodyHelper002; + +public class BodyConfig +{ + public Func GetBodyPartGroup; + public Func GetMuscleGroup; + public Func GetRootBodyPart; + public Func GetRootMuscle; + +} diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs.meta new file mode 100644 index 0000000..49fa941 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03e1cab076cd94a488d1decc5d843de7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs new file mode 100644 index 0000000..2f8b192 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs @@ -0,0 +1,33 @@ + +public static class BodyHelper002 +{ + [System.Serializable] + public enum BodyPartGroup { + None, + Hips, + Torso, + Spine, + Head, + ArmUpper, + ArmLower, + Hand, + LegUpper, + LegLower, + Foot, + } + + [System.Serializable] + public enum MuscleGroup { + None, + Hips, + Torso, + Spine, + Head, + ArmUpper, + ArmLower, + Hand, + LegUpper, + LegLower, + Foot, + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs.meta new file mode 100644 index 0000000..d71779d --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyHelper002.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf75e597c351b12498957c0ec1d646fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs new file mode 100644 index 0000000..7ceb355 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs @@ -0,0 +1,594 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using System.Linq; +using static BodyHelper002; +using System; +using ManyWorlds; + +public class BodyManager002 : MonoBehaviour, IOnSensorCollision +{ + // Options / Configurables global properties + public Transform CameraTarget; + public float FixedDeltaTime = 0.005f; + public bool ShowMonitor = false; + public bool DebugDisableMotor; + public bool DebugShowWithOffset; + + + // Observations / Read only global properties + public List Muscles; + public List BodyParts; + public List SensorIsInTouch; + public List Observations; + public int ObservationNormalizedErrors; + public int MaxObservationNormalizedErrors; + public List Sensors; + public float FrameReward; + public float AverageReward; + + + // private properties + Vector3 startPosition; + + Dictionary transformsPosition; + Dictionary transformsRotation; + + Agent _agent; + SpawnableEnv _spawnableEnv; + TerrainGenerator _terrainGenerator; + DecisionRequester _decisionRequester; + + static int _startCount; + + float[] lastVectorAction; + float[] vectorDifference; + List mphBuffer; + + [Tooltip("Max distance travelled across all episodes")] + /**< \brief Max distance travelled across all episodes*/ + public float MaxDistanceTraveled; + + [Tooltip("Distance travelled this episode")] + /**< \brief Distance travelled this episode*/ + public float DistanceTraveled; + + List sensorColliders; + static int _spawnCount; + + // static ScoreHistogramData _scoreHistogramData; + + + // void FixedUpdate() + // { + // foreach (var muscle in Muscles) + // { + // // var i = Muscles.IndexOf(muscle); + // // muscle.UpdateObservations(); + // // if (!DebugShowWithOffset && !DebugDisableMotor) + // // muscle.UpdateMotor(); + // // if (!muscle.Rigidbody.useGravity) + // // continue; // skip sub joints + // // } + // } + + public BodyConfig BodyConfig; + + // Start is called before the first frame update + void Start() + { + } + + // Update is called once per frame + void Update() + { + } + + public void OnInitializeAgent() + { + _spawnableEnv = GetComponentInParent(); + _terrainGenerator = GetComponentInParent(); + SetupBody(); + DistanceTraveled = float.MinValue; + } + + public void OnAgentReset() + { + if (DistanceTraveled != float.MinValue) + { + var scorer = FindObjectOfType(); + scorer?.ReportScore(DistanceTraveled, "Distance Traveled"); + } + HandleModelReset(); + Sensors = _agent.GetComponentsInChildren() + .Select(x=>x.gameObject) + .ToList(); + sensorColliders = Sensors + .Select(x=>x.GetComponent()) + .ToList(); + SensorIsInTouch = Enumerable.Range(0,Sensors.Count).Select(x=>0f).ToList(); + // HACK first spawned agent should grab the camera + var smoothFollow = GameObject.FindObjectOfType(); + if (smoothFollow != null && smoothFollow.target == null) { + if (_spawnCount == 0) // HACK follow nth agent + { + smoothFollow.target = CameraTarget; + ShowMonitor = true; + } + else + _spawnCount++; + } + lastVectorAction = null; + vectorDifference = null; + mphBuffer = new List(); + } + + public void OnAgentAction(float[] vectorAction) + { + if (lastVectorAction == null){ + lastVectorAction = vectorAction.Select(x=>0f).ToArray(); + vectorDifference = vectorAction.Select(x=>0f).ToArray(); + } + int i = 0; + foreach (var muscle in Muscles) + { + // if(muscle.Parent == null) + // continue; + if (muscle.ConfigurableJoint.angularXMotion != ConfigurableJointMotion.Locked){ + vectorDifference[i] = Mathf.Abs(vectorAction[i]-lastVectorAction[i]); + muscle.TargetNormalizedRotationX = vectorAction[i++]; + } + if (muscle.ConfigurableJoint.angularYMotion != ConfigurableJointMotion.Locked){ + vectorDifference[i] = Mathf.Abs(vectorAction[i]-lastVectorAction[i]); + muscle.TargetNormalizedRotationY = vectorAction[i++]; + } + if (muscle.ConfigurableJoint.angularZMotion != ConfigurableJointMotion.Locked){ + vectorDifference[i] = Mathf.Abs(vectorAction[i]-lastVectorAction[i]); + muscle.TargetNormalizedRotationZ = vectorAction[i++]; + } + if (!DebugDisableMotor) + muscle.UpdateMotor(); + } + + if (ShowMonitor) + { + // var hist = new[] {velocity, uprightBonus, heightPenality, effort}.ToList(); + // Monitor.Log("rewardHist", hist.ToArray(), displayType: Monitor.DisplayType.Independent); + } + } + + public BodyPart002 GetFirstBodyPart(BodyPartGroup bodyPartGroup) + { + var bodyPart = BodyParts.FirstOrDefault(x=>x.Group == bodyPartGroup); + return bodyPart; + } + public List GetBodyParts() + { + return BodyParts; + } + public List GetBodyParts(BodyPartGroup bodyPartGroup) + { + return BodyParts.Where(x=>x.Group == bodyPartGroup).ToList(); + } + + public float GetActionDifference() + { + float actionDifference = 1f - vectorDifference.Average(); + actionDifference = Mathf.Clamp(actionDifference, 0, 1); + actionDifference = Mathf.Pow(actionDifference,2); + return actionDifference; + } + + void SetupBody() + { + _agent = GetComponent(); + _decisionRequester = GetComponent(); + Time.fixedDeltaTime = FixedDeltaTime; + + BodyParts = new List (); + BodyPart002 root = null; + foreach (var t in GetComponentsInChildren()) + { + if (BodyConfig.GetBodyPartGroup(t.name) == BodyHelper002.BodyPartGroup.None) + continue; + + var bodyPart = new BodyPart002{ + Rigidbody = t.GetComponent(), + Transform = t, + Name = t.name, + Group = BodyConfig.GetBodyPartGroup(t.name), + }; + if (bodyPart.Group == BodyConfig.GetRootBodyPart()) + root = bodyPart; + bodyPart.Root = root; + bodyPart.Init(); + BodyParts.Add(bodyPart); + } + var partCount = BodyParts.Count; + + Muscles = new List (); + var muscles = GetComponentsInChildren(); + ConfigurableJoint rootConfigurableJoint = null; + var ragDoll = GetComponent(); + foreach (var m in muscles) + { + var maximumForce = ragDoll.MusclePowers.First(x=>x.Muscle == m.name).PowerVector; + maximumForce *= ragDoll.MotorScale; + var muscle = new Muscle002{ + Rigidbody = m.GetComponent(), + Transform = m.GetComponent(), + ConfigurableJoint = m, + Name = m.name, + Group = BodyConfig.GetMuscleGroup(m.name), + MaximumForce = maximumForce + }; + if (muscle.Group == BodyConfig.GetRootMuscle()) + rootConfigurableJoint = muscle.ConfigurableJoint; + muscle.RootConfigurableJoint = rootConfigurableJoint; + muscle.Init(); + + Muscles.Add(muscle); + } + _startCount++; + } + + + + void HandleModelReset() + { + Transform[] allChildren = _agent.GetComponentsInChildren(); + if (transformsPosition != null) + { + foreach (var child in allChildren) + { + child.position = transformsPosition[child.gameObject]; + child.rotation = transformsRotation[child.gameObject]; + var childRb = child.GetComponent(); + if (childRb != null) + { + childRb.angularVelocity = Vector3.zero; + childRb.velocity = Vector3.zero; + } + } + + } + else + { + startPosition = _agent.transform.position; + transformsPosition = new Dictionary(); + transformsRotation = new Dictionary(); + foreach (Transform child in allChildren) + { + transformsPosition[child.gameObject] = child.position; + transformsRotation[child.gameObject] = child.rotation; + } + } + } + + public float GetHeightNormalizedReward(float maxHeight) + { + var height = GetHeight(); + var heightPenality = maxHeight - height; + heightPenality = Mathf.Clamp(heightPenality, 0f, maxHeight); + var reward = 1f - heightPenality; + reward = Mathf.Clamp(reward, 0f, 1f); + return reward; + } + internal float GetHeight() + { + var feetYpos = BodyParts + .Where(x => x.Group == BodyPartGroup.Foot) + .Select(x => x.Transform.position.y) + .OrderBy(x => x) + .ToList(); + float lowestFoot = 0f; + if (feetYpos != null && feetYpos.Count != 0) + lowestFoot = feetYpos[0]; + var height = GetFirstBodyPart(BodyPartGroup.Head).Transform.position.y - lowestFoot; + return height; + } + public float GetDirectionNormalizedReward(BodyPartGroup bodyPartGroup, Vector3 direction) + { + BodyPart002 bodyPart = GetFirstBodyPart(bodyPartGroup); + float maxBonus = 1f; + var toFocalAngle = bodyPart.ToFocalRoation * bodyPart.Transform.right; + var angle = Vector3.Angle(toFocalAngle, direction); + var qpos2 = (angle % 180) / 180; + var bonus = maxBonus * (2 - (Mathf.Abs(qpos2) * 2) - 1); + return bonus; + } + + public float GetUprightNormalizedReward(BodyPartGroup bodyPartGroup) + { + BodyPart002 bodyPart = GetFirstBodyPart(bodyPartGroup); + float maxBonus = 1f; + var toFocalAngle = bodyPart.ToFocalRoation * -bodyPart.Transform.forward; + var angleFromUp = Vector3.Angle(toFocalAngle, Vector3.up); + var qpos2 = (angleFromUp % 180) / 180; + var uprightBonus = maxBonus * (2 - (Mathf.Abs(qpos2) * 2) - 1); + return uprightBonus; + } + public float GetEffortNormalized(string[] ignorJoints = null) + { + double effort = 0; + double jointEffort = 0; + double joints = 0; + foreach (var muscle in Muscles) + { + if(muscle.Parent == null) + continue; + var name = muscle.Name; + if (ignorJoints != null && ignorJoints.Contains(name)) + continue; + if (muscle.ConfigurableJoint.angularXMotion != ConfigurableJointMotion.Locked) { + jointEffort = Mathf.Pow(Mathf.Abs(muscle.TargetNormalizedRotationX),2); + effort += jointEffort; + joints++; + } + if (muscle.ConfigurableJoint.angularYMotion != ConfigurableJointMotion.Locked) { + jointEffort = Mathf.Pow(Mathf.Abs(muscle.TargetNormalizedRotationY),2); + effort += jointEffort; + joints++; + } + if (muscle.ConfigurableJoint.angularZMotion != ConfigurableJointMotion.Locked) { + jointEffort = Mathf.Pow(Mathf.Abs(muscle.TargetNormalizedRotationZ),2); + effort += jointEffort; + joints++; + } + } + + return (float) (effort / joints); + } + public void OnSensorCollisionEnter(Collider sensorCollider, GameObject other) { + // if (string.Compare(other.name, "Terrain", true) !=0) + if (other.GetComponent() == null) + return; + var sensor = Sensors + .FirstOrDefault(x=>x == sensorCollider.gameObject); + if (sensor != null) { + var idx = Sensors.IndexOf(sensor); + SensorIsInTouch[idx] = 1f; + } + } + public void OnSensorCollisionExit(Collider sensorCollider, GameObject other) + { + // if (string.Compare(other.gameObject.name, "Terrain", true) !=0) + if (other.GetComponent() == null) + return; + var sensor = Sensors + .FirstOrDefault(x=>x == sensorCollider.gameObject); + if (sensor != null) { + var idx = Sensors.IndexOf(sensor); + SensorIsInTouch[idx] = 0f; + } + } + public Vector3 GetLocalCenterOfMass() + { + var centerOfMass = GetCenterOfMass(); + centerOfMass -= transform.position; + return centerOfMass; + } + public Vector3 GetCenterOfMass() + { + var centerOfMass = Vector3.zero; + float totalMass = 0f; + var bodies = BodyParts + .Select(x=>x.Rigidbody) + .Where(x=>x!=null) + .ToList(); + foreach (Rigidbody rb in bodies) + { + centerOfMass += rb.worldCenterOfMass * rb.mass; + totalMass += rb.mass; + } + centerOfMass /= totalMass; + return centerOfMass; + } + + public Vector3 GetNormalizedVelocity() + { + var pelvis = GetFirstBodyPart(BodyConfig.GetRootBodyPart()); + Vector3 metersPerSecond = pelvis.Rigidbody.velocity; + var n = GetNormalizedVelocity(metersPerSecond); + return n; + } + + public Vector3 GetNormalizedPosition() + { + // var position = GetCenterOfMass(); + var pelvis = GetFirstBodyPart(BodyConfig.GetRootBodyPart()); + var position = pelvis.Transform.position; + var normalizedPosition = GetNormalizedPosition(position - startPosition); + return normalizedPosition; + } + public void SetDebugFrameReward(float reward) + { + FrameReward = reward; + var stepCount = _agent.StepCount > 0 ? _agent.StepCount : 1; + if (_decisionRequester?.DecisionPeriod > 1) + stepCount /= _decisionRequester.DecisionPeriod; + AverageReward = _agent.GetCumulativeReward() / (float) stepCount; + } + + + public List GetSensorIsInTouch() + { + return SensorIsInTouch; + } + // public List GetBodyPartsObservations() + // { + // List vectorObservation = new List(); + // foreach (var bodyPart in BodyParts) + // { + // bodyPart.UpdateObservations(); + // // _agent.sensor.AddObservation(bodyPart.ObsRotation); + // vectorObservation.Add(bodyPart.ObsRotation.x); + // vectorObservation.Add(bodyPart.ObsRotation.y); + // vectorObservation.Add(bodyPart.ObsRotation.z); + // vectorObservation.Add(bodyPart.ObsRotation.w); + + // // _agent.sensor.AddObservation(bodyPart.ObsRotationVelocity); + // vectorObservation.Add(bodyPart.ObsRotationVelocity.x); + // vectorObservation.Add(bodyPart.ObsRotationVelocity.y); + // vectorObservation.Add(bodyPart.ObsRotationVelocity.z); + + // // _agent.sensor.AddObservation(GetNormalizedVelocity(bodyPart.ObsVelocity)); + // var normalizedVelocity = GetNormalizedVelocity(bodyPart.ObsVelocity); + // vectorObservation.Add(normalizedVelocity.x); + // vectorObservation.Add(normalizedVelocity.y); + // vectorObservation.Add(normalizedVelocity.z); + // } + // return vectorObservation; + // } + public List GetMusclesObservations() + { + List vectorObservation = new List(); + foreach (var muscle in Muscles) + { + muscle.UpdateObservations(); + if (muscle.ConfigurableJoint.angularXMotion != ConfigurableJointMotion.Locked) + vectorObservation.Add(muscle.TargetNormalizedRotationX); + if (muscle.ConfigurableJoint.angularYMotion != ConfigurableJointMotion.Locked) + vectorObservation.Add(muscle.TargetNormalizedRotationY); + if (muscle.ConfigurableJoint.angularZMotion != ConfigurableJointMotion.Locked) + vectorObservation.Add(muscle.TargetNormalizedRotationZ); + } + return vectorObservation; + } + [Obsolete("use GetSensorObservations()")] + public List GetSensorYPositions() + { + var sensorYpositions = Sensors + .Select(x=> this.GetNormalizedPosition(x.transform.position - startPosition)) + .Select(x=>x.y) + .ToList(); + return sensorYpositions; + } + [Obsolete("use GetSensorObservations()")] + public List GetSensorZPositions() + { + var sensorYpositions = Sensors + .Select(x=> this.GetNormalizedPosition(x.transform.position - startPosition)) + .Select(x=>x.z) + .ToList(); + return sensorYpositions; + } + + public List GetSensorObservations() + { + var localSensorsPos = new Vector3[Sensors.Count]; + var globalSensorsPos = new Vector3[Sensors.Count]; + for (int i = 0; i < Sensors.Count; i++) { + globalSensorsPos[i] = sensorColliders[i].transform.TransformPoint(sensorColliders[i].center); + localSensorsPos[i] = globalSensorsPos[i] - startPosition; + } + + // get heights based on global senor position + var sensorsPos = Sensors + .Select(x=>x.transform.position).ToList(); + var senorHeights = _terrainGenerator != null + ? _terrainGenerator.GetDistances2d(globalSensorsPos) + : Enumerable.Range(0, globalSensorsPos.Length).Select(x=>0f).ToList(); + for (int i = 0; i < Sensors.Count; i++) { + senorHeights[i] -= sensorColliders[i].radius; + if (senorHeights[i] >= 1f) + senorHeights[i] = 1f; + } + + // get z positions based on local positions + var bounds = _spawnableEnv.bounds; + var normalizedZ = localSensorsPos + .Select(x=>x.z / (bounds.extents.z)) + .ToList(); + var observations = senorHeights + .Concat(normalizedZ) + .ToList(); + return observations; + } + + // public void OnCollectObservationsHandleDebug(AgentInfo info) + // { + // if (Observations?.Count != info.vectorObservation.Count) + // Observations = Enumerable.Range(0, info.vectorObservation.Count).Select(x => 0f).ToList(); + // ObservationNormalizedErrors = 0; + // for (int i = 0; i < Observations.Count; i++) + // { + // Observations[i] = info.vectorObservation[i]; + // var x = Mathf.Abs(Observations[i]); + // var e = Mathf.Epsilon; + // bool is1 = Mathf.Approximately(x, 1f); + // if ((x > 1f + e) && !is1) + // ObservationNormalizedErrors++; + // } + // if (ObservationNormalizedErrors > MaxObservationNormalizedErrors) + // MaxObservationNormalizedErrors = ObservationNormalizedErrors; + + // var pelvis = GetFirstBodyPart(BodyPartGroup.Hips); + // DistanceTraveled = pelvis.Transform.position.x; + // MaxDistanceTraveled = Mathf.Max(MaxDistanceTraveled, DistanceTraveled); + // Vector3 metersPerSecond = pelvis.Rigidbody.velocity; + // Vector3 mph = metersPerSecond * 2.236936f; + // mphBuffer.Add(mph); + // if (mphBuffer.Count > 100) + // mphBuffer.RemoveAt(0); + // var aveMph = new Vector3( + // mphBuffer.Select(x=>x.x).Average(), + // mphBuffer.Select(x=>x.y).Average(), + // mphBuffer.Select(x=>x.z).Average() + // ); + // if (ShowMonitor) + // { + // Monitor.Log("MaxDistance", MaxDistanceTraveled.ToString()); + // Monitor.Log("NormalizedPos", GetNormalizedPosition().ToString()); + // Monitor.Log("MPH: ", (aveMph).ToString()); + // } + // } + + float NextGaussian(float mu = 0, float sigma = 1) + { + var u1 = UnityEngine.Random.value; + var u2 = UnityEngine.Random.value; + + var rand_std_normal = Mathf.Sqrt(-2.0f * Mathf.Log(u1)) * + Mathf.Sin(2.0f * Mathf.PI * u2); + + var rand_normal = mu + sigma * rand_std_normal; + + return rand_normal; + } + public Vector3 GetNormalizedVelocity(Vector3 metersPerSecond) + { + var maxMetersPerSecond = _spawnableEnv.bounds.size + / _agent.MaxStep + / Time.fixedDeltaTime; + var maxXZ = Mathf.Max(maxMetersPerSecond.x, maxMetersPerSecond.z); + maxMetersPerSecond.x = maxXZ; + maxMetersPerSecond.z = maxXZ; + maxMetersPerSecond.y = 53; // override with + float x = metersPerSecond.x / maxMetersPerSecond.x; + float y = metersPerSecond.y / maxMetersPerSecond.y; + float z = metersPerSecond.z / maxMetersPerSecond.z; + // clamp result + x = Mathf.Clamp(x, -1f, 1f); + y = Mathf.Clamp(y, -1f, 1f); + z = Mathf.Clamp(z, -1f, 1f); + Vector3 normalizedVelocity = new Vector3(x,y,z); + return normalizedVelocity; + } + public Vector3 GetNormalizedPosition(Vector3 pos) + { + var maxPos = _spawnableEnv.bounds.size; + float x = pos.x / maxPos.x; + float y = pos.y / maxPos.y; + float z = pos.z / maxPos.z; + // clamp result + x = Mathf.Clamp(x, -1f, 1f); + y = Mathf.Clamp(y, -1f, 1f); + z = Mathf.Clamp(z, -1f, 1f); + Vector3 normalizedPos = new Vector3(x,y,z); + return normalizedPos; + } +} diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs.meta new file mode 100644 index 0000000..4e08368 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyManager002.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 776799f55314f4500bc35f859c94e2fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs new file mode 100644 index 0000000..cc29f26 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs @@ -0,0 +1,239 @@ +// A class that describes a body part of an Agent or an Animator. The object +// stores the rigid body associated with an Agent's body part. Along with some +// important data like root bone, i. e. 'butt' for a marathonMan. Implments methods +// to calculate distance to the characteristics of an animation being mimiced. + +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.MLAgents; + + +[System.Serializable] +public class BodyPart002 +{ + + public string Name; + public BodyHelper002.BodyPartGroup Group; + + public Vector3 ObsLocalPosition; + public Quaternion ObsRotation; + public Quaternion ObsRotationFromBase; + public Vector3 ObsRotationVelocity; + public Vector3 ObsVelocity; + public float ObsAngleDeltaFromAnimationRotation; + public Vector3 ObsDeltaFromAnimationPosition; + + public Vector3 ObsDeltaFromAnimationVelocity; + public Vector3 ObsDeltaFromAnimationAngularVelocity; + public Vector3 ObsDeltaFromAnimationAngularVelocityWorld; + public Vector3 DebugMaxRotationVelocity; + public Vector3 DebugMaxVelocity; + + public Quaternion DefaultLocalRotation; + public Quaternion ToJointSpaceInverse; + public Quaternion ToJointSpaceDefault; + + public Rigidbody Rigidbody; + public Transform Transform; + public BodyPart002 Root; + public Quaternion InitialRootRotation; + public Vector3 InitialRootPosition; + + // base = from where to measure rotation and position from + public Quaternion BaseRotation; + public Vector3 BasePosition; + // + public Quaternion ToFocalRoation; + + + Quaternion _lastObsRotation; + Quaternion _lastWorldRotation; + Vector3 _lastLocalPosition; + Vector3 _lastWorldPosition; + Vector3 _animationAngularVelocity; + Vector3 _animationAngularVelocityWorld; + Vector3 _animationVelocityWorld; + + DecisionRequester _decisionRequester; + + float _lastUpdateObsTime; + bool _firstRunComplete; + bool _hasRanVeryFirstInit; + private Vector3 _animationPositionWorld; + private Quaternion _animationRotation; + + static Vector3 Vector3Max (Vector3 a, Vector3 b) + { + var answer = new Vector3( + Mathf.Max(Mathf.Abs(a.x), Mathf.Abs(b.x)), + Mathf.Max(Mathf.Abs(a.y), Mathf.Abs(b.y)), + Mathf.Max(Mathf.Abs(a.z), Mathf.Abs(b.z))); + return answer; + } + + // Initialize + public void Init() + { + _decisionRequester = GameObject.Find("MarathonMan").GetComponent(); + + _firstRunComplete = false; + if (Rigidbody != null){ + Rigidbody.angularVelocity = Vector3.zero; + Rigidbody.velocity = Vector3.zero; + } + + if (!_hasRanVeryFirstInit) { + + InitialRootRotation = Root.Transform.transform.rotation; + InitialRootPosition = Root.Transform.transform.position; + BaseRotation = Root.Transform.transform.rotation; + BasePosition = Root.Transform.transform.position; + + DefaultLocalRotation = LocalRotation; + Vector3 forward = this.Transform.forward; + Vector3 up = this.Transform.up; + Quaternion toJointSpace = Quaternion.LookRotation(forward, up); + + ToJointSpaceInverse = Quaternion.Inverse(toJointSpace); + ToJointSpaceDefault = DefaultLocalRotation * toJointSpace; + + // set body part direction + Vector3 focalOffset = new Vector3(10,0,0); + if (Rigidbody != null){ + var focalPoint = Rigidbody.position + focalOffset; + ToFocalRoation = Rigidbody.rotation; + ToFocalRoation.SetLookRotation(focalPoint - Rigidbody.position); + } + + _hasRanVeryFirstInit = true; + + } + } + + // Update values like ObsLocalPosition, ObsRotation, ... that will be accessed + // by the agent as observations for the neural network. Also calculates distances + // to an animation being mimicked + public void UpdateObservations() + { + Quaternion rotation; + Vector3 position; + if (this == Root) { + rotation = Quaternion.Inverse(InitialRootRotation) * Transform.rotation; + position = Transform.position - InitialRootPosition; + } + else { + rotation = Quaternion.Inverse(Root.Transform.rotation) * Transform.rotation; + position = Transform.position - Root.Transform.position; + } + + if (_firstRunComplete == false){ + _lastUpdateObsTime = Time.time; + _lastLocalPosition = position; + _lastWorldPosition = Transform.position; + _lastObsRotation = rotation; + _lastWorldRotation = Transform.rotation; + } + + var dt = Time.fixedDeltaTime * _decisionRequester.DecisionPeriod; + + var velocity = (position - _lastLocalPosition)/dt; + var velocityWorld = (Transform.position - _lastWorldPosition)/dt; + var angularVelocity = JointHelper002.CalcDeltaRotationNormalizedEuler(_lastObsRotation, rotation)/dt; + var angularVelocityWorld = JointHelper002.CalcDeltaRotationNormalizedEuler(_lastWorldRotation, Transform.rotation)/dt; + + // old calulation for observation vector + //angularVelocity = NormalizedEulerAngles(rotationVelocity.eulerAngles); + //angularVelocity /= 128f; + // old calculation end + + _lastUpdateObsTime = Time.time; + _lastLocalPosition = position; + _lastWorldPosition = Transform.position; + _lastObsRotation = rotation; + _lastWorldRotation = Transform.rotation; + + //if (Name == "right_right_foot") { + // Debug.Log("^^^^^^^^^^^^"); + // Debug.Log("body part name: " + Name); + // Debug.Log("animation angular velocity:" + _animationAngularVelocity); + // Debug.Log("angular velocity:" + angularVelocity); + // Debug.Log("animation angular velocity world:" + _animationAngularVelocityWorld); + // Debug.Log("angular velocity world:" + angularVelocityWorld); + // Debug.Log("rotation local:" + rotation.eulerAngles); + // Debug.Log("animation rotation local: " + _animationRotation.eulerAngles); + // Debug.Log("velocity world: " + velocityWorld); + // Debug.Log("animation velocity world:" + _animationVelocityWorld); + // Debug.Log("transform position:" + Transform.position); + // Debug.Log("animation position world: " + _animationPositionWorld); + // Debug.Log("dt:" + dt); + //} + + ObsLocalPosition = position; + ObsRotation = rotation; + ObsRotationVelocity = angularVelocity; + ObsVelocity = velocity; + + ObsDeltaFromAnimationPosition = _animationPositionWorld - Transform.position; + + ObsAngleDeltaFromAnimationRotation = Quaternion.Angle(_animationRotation, rotation); + ObsAngleDeltaFromAnimationRotation = JointHelper002.NormalizedAngle(ObsAngleDeltaFromAnimationRotation); + + ObsDeltaFromAnimationVelocity = _animationVelocityWorld - velocityWorld; + ObsDeltaFromAnimationAngularVelocity = (_animationAngularVelocity - angularVelocity); + ObsDeltaFromAnimationAngularVelocityWorld = (_animationAngularVelocityWorld - angularVelocityWorld); + + DebugMaxRotationVelocity = Vector3Max(DebugMaxRotationVelocity, angularVelocity); + DebugMaxVelocity = Vector3Max(DebugMaxVelocity, velocity); + + _firstRunComplete = true; + } + + // returns local rotation + public Quaternion LocalRotation { + get { + return Quaternion.Inverse(RootRotation) * Transform.rotation; + } + } + + // retuns root rotation + public Quaternion RootRotation{ + get { + return InitialRootRotation; + } + } + + // Set the position, rotation of a body part to match animation's position and + // rotation. Also sets the rigid body's position and velocity, which is used + // in angular momentum calculation + public void MoveToAnim(Vector3 animPosition, Quaternion animRotation, Vector3 angularVelocity, Vector3 velocity) + { + Transform.position = animPosition; + Transform.rotation = animRotation; + if (Rigidbody != null){ + foreach (var childRb in Rigidbody.GetComponentsInChildren()) + { + if (childRb == Rigidbody) + continue; + childRb.transform.localPosition = Vector3.zero; + childRb.transform.localEulerAngles = Vector3.zero; + childRb.angularVelocity = Vector3.zero; + childRb.velocity = Vector3.zero; + } + Rigidbody.angularVelocity = angularVelocity; + Rigidbody.velocity = velocity; + } + } + + // Set the position of the animation being mimicked + public void SetAnimationPosition(Vector3 animPositionWorld, Quaternion animRotationLocal, Vector3 animVelocityWorld, Vector3 animAngularVelocityLocal, Vector3 animAngularVelocityWorld) + { + _animationPositionWorld = animPositionWorld; + _animationRotation = animRotationLocal; + + _animationVelocityWorld = animVelocityWorld; + _animationAngularVelocity = animAngularVelocityLocal; + _animationAngularVelocityWorld = animAngularVelocityWorld; + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs.meta new file mode 100644 index 0000000..6998c1b --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/BodyPart002.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6e9d3ad85936e6459222f0017b88b80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs new file mode 100644 index 0000000..f0cd080 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.MLAgents; +using UnityEngine; + +public class DomainRandomization : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs.meta new file mode 100644 index 0000000..85e011c --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/DomainRandomization.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e04e2081c5c5647a9993dcdc05765cd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs new file mode 100644 index 0000000..696f279 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs @@ -0,0 +1,107 @@ +// Helper Utilities to work with agent's rigid bodies charateristics. Allows to +// calculate Angles between rotations in radians, find center of mass of an agent, +// and find Angular Momentum of an agent. + +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System; + +public static class JointHelper002 { + + // Return rotation from one rotation to another + public static Quaternion FromToRotation(Quaternion from, Quaternion to) { + if (to == from) return Quaternion.identity; + + return to * Quaternion.Inverse(from); + } + + // Calculate rotation between two rotations in radians. Adjusts the value to lie within [-pi, +pi]. + public static Vector3 NormalizedEulerAngles(Vector3 eulerAngles) { + var x = eulerAngles.x < 180f ? + eulerAngles.x : + -360 + eulerAngles.x; + var y = eulerAngles.y < 180f ? + eulerAngles.y : + -360 + eulerAngles.y; + var z = eulerAngles.z < 180f ? + eulerAngles.z : + -360 + eulerAngles.z; + x = x * Mathf.Deg2Rad; + y = y * Mathf.Deg2Rad; + z = z * Mathf.Deg2Rad; + return new Vector3(x, y, z); + } + + // Adjust the value of an angle to lie within [-pi, +pi]. + public static float NormalizedAngle(float angle) { + if (angle < 180) { + return angle * Mathf.Deg2Rad; + } + return (angle - 360) * Mathf.Deg2Rad; + } + + // Find rotation and convert to radians within [-pi, +pi]. + public static Vector3 CalcDeltaRotationNormalizedEuler(Quaternion from, Quaternion to) { + var rotationVelocity = FromToRotation(from, to); + var angularVelocity = NormalizedEulerAngles(rotationVelocity.eulerAngles); + return angularVelocity; + } + + // Find the center of mass of a list of Body Parts beloning to an agent. Relative to the root bone, i. e. "butt" for humanoid. + public static Vector3 GetCenterOfMassRelativeToRoot(List BodyParts) { + var centerOfMass = Vector3.zero; + float totalMass = 0f; + var bodies = BodyParts + .Select(x => x.Rigidbody) + .Where(x => x != null) + .ToList(); + var rootBone = BodyParts[0]; + foreach (Rigidbody rb in bodies) { + centerOfMass += rb.worldCenterOfMass * rb.mass; + totalMass += rb.mass; + } + centerOfMass /= totalMass; + centerOfMass -= rootBone.InitialRootPosition; + return centerOfMass; + } + + // Find the center of mass of a List of Body Parts relative to the world coordinate system. + public static Vector3 GetCenterOfMassWorld(List BodyParts) { + var centerOfMass = GetCenterOfMassRelativeToRoot(BodyParts) + BodyParts[0].InitialRootPosition; + return centerOfMass; + } + + // Calculate Angular Momentum of a List of Body Parts. In the world coordinate system about the center + // of mass of the Body Parts. Formulas at https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-07-dynamics-fall-2009/lecture-notes/MIT16_07F09_Lec11.pdf + public static Vector3 GetAngularMoment(List BodyParts) { + var centerOfMass = GetCenterOfMassWorld(BodyParts); + var bodies = BodyParts + .Select(x => x.Rigidbody) + .Where(x => x != null) + .ToList(); + Vector3 totalAngularMoment = Vector3.zero; + foreach (Rigidbody rb in bodies) { + + var w_local = rb.transform.rotation * rb.angularVelocity; + var w_inertiaFrame = rb.inertiaTensorRotation * w_local; + + Vector3 L_inertiaFrame = Vector3.zero; + L_inertiaFrame[0] = w_inertiaFrame[0] * rb.inertiaTensor[0]; + L_inertiaFrame[1] = w_inertiaFrame[1] * rb.inertiaTensor[1]; + L_inertiaFrame[2] = w_inertiaFrame[2] * rb.inertiaTensor[2]; + + Vector3 L_world = Quaternion.Inverse(rb.transform.rotation) * Quaternion.Inverse(rb.inertiaTensorRotation) * L_inertiaFrame; + + Vector3 bodyPartCenterOfMassRelativeTobodyPartsCenterOfMass = rb.worldCenterOfMass - centerOfMass; + Vector3 LofBodyPartCenterOfMass = rb.mass * Vector3.Cross(bodyPartCenterOfMassRelativeTobodyPartsCenterOfMass, rb.velocity); + + totalAngularMoment += L_world + LofBodyPartCenterOfMass; + + } + return totalAngularMoment; + } +} + + diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs.meta new file mode 100644 index 0000000..a2bd4e4 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/JointHelper002.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 168784be71eb147fd92601f19593c1b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs new file mode 100644 index 0000000..b80fea5 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs @@ -0,0 +1,195 @@ +using System.Linq; +using UnityEngine; + +namespace Unity.MLAgents +{ + public static class MarathonHelper + { + static readonly bool FlipMarathonX = false; + + public static Vector3 RightToLeft(Vector3 rightHanded, bool hackFlipZ = false) + { + if (FlipMarathonX) + return new Vector3(rightHanded.x, rightHanded.z, + rightHanded.y); // use if fliping marathon's X direction + return new Vector3(-rightHanded.x, rightHanded.z, -rightHanded.y); // use to maintain marathon's X direction + } + + static char[] _delimiterChars = {' ', ',', ':', '\t'}; + + static string RemoveDuplicateWhitespace(string input) + { + while (input.Contains(" ")) + input = input.Replace(" ", " "); + while (input.Contains("\t\t")) + input = input.Replace("\t\t", "\t"); + return input; + } + + static float Evaluate(string expression) + { + var doc = new System.Xml.XPath.XPathDocument(new System.IO.StringReader("")); + var nav = doc.CreateNavigator(); + var newString = expression; + newString = (new System.Text.RegularExpressions.Regex(@"([\+\-\*])")).Replace(newString, " ${1} "); + newString = newString.Replace("/", " div ").Replace("%", " mod "); + var res = nav.Evaluate("number(" + newString + ")"); + double d = (double) res; + return (float) d; + } + + + static public Vector3 ParseVector3NoFlipYZ(string str) + { + str = RemoveDuplicateWhitespace(str); + string[] words = str.Split(_delimiterChars); + float x = Evaluate(words[0]); + float y = Evaluate(words[1]); + float z = Evaluate(words[2]); + var vec3 = new Vector3(x, y, z); + return vec3; + } + + static public Quaternion ParseQuaternion(string str) + { + str = RemoveDuplicateWhitespace(str); + string[] words = str.Split(_delimiterChars); + float w = Evaluate(words[0]); + float x = Evaluate(words[1]); + float y = Evaluate(words[2]); + float z = Evaluate(words[3]); + var q = new Quaternion(x, y, z, w); + return q; + } + + static public Vector3 ParseAxis(string str) + { + var axis = MarathonHelper.ParseVector3NoFlipYZ(str); + if (FlipMarathonX) + axis = new Vector3(-axis.x, -axis.z, -axis.y); // use if fliping marathon's X direction + else + axis = new Vector3(axis.x, -axis.z, axis.y); // use to maintain marathon's X direction + return axis; + } + + static public Vector3 JointParsePosition(string str, bool hackFlipZ) + { + str = RemoveDuplicateWhitespace(str); + string[] words = str.Split(_delimiterChars); + float x = Evaluate(words[0]); + float y = Evaluate(words[1]); + float z = Evaluate(words[2]); + Vector3 vec3 = new Vector3(x, y, z); + return RightToLeft(vec3, hackFlipZ); + } + + public static Vector3 ParsePosition(string str) + { + str = RemoveDuplicateWhitespace(str); + string[] words = str.Split(_delimiterChars); + float x = Evaluate(words[0]); + float y = Evaluate(words[1]); + float z = Evaluate(words[2]); + Vector3 vec3 = new Vector3(x, y, z); + return RightToLeft(vec3); + } + + public static Vector3 ParseFrom(string fromTo) + { + return ParseVector3NoFlipYZ(fromTo); + } + + public static Vector3 ParseTo(string fromTo) + { + fromTo = RemoveDuplicateWhitespace(fromTo); + string[] words = fromTo.Split(_delimiterChars); + float x = Evaluate(words[3]); + float y = Evaluate(words[4]); + float z = Evaluate(words[5]); + Vector3 vec3 = new Vector3(x, y, z); + return vec3; + } + + public static Vector2 ParseVector2(string str) + { + str = RemoveDuplicateWhitespace(str); + string[] words = str.Split(_delimiterChars); + float x = Evaluate(words[0]); + float y = Evaluate(words[1]); + var vec2 = new Vector2(x, y); + return vec2; + } + + public static float ParseGetMin(string rangeAsText) + { + rangeAsText = RemoveDuplicateWhitespace(rangeAsText); + string[] words = rangeAsText.Split(_delimiterChars); + var range = words.Select(x => Evaluate(x)); + return range.Min(); + } + + public static float ParseGetMax(string rangeAsText) + { + rangeAsText = RemoveDuplicateWhitespace(rangeAsText); + string[] words = rangeAsText.Split(_delimiterChars); + var range = words.Select(x => Evaluate(x)); + return range.Max(); + } + + + public static GameObject CreateBetweenPoints(this GameObject parent, Vector3 start, Vector3 end, float width, + bool useWorldSpace, GameObject root) + { + start = RightToLeft(start); + end = RightToLeft(end); + var instance = new GameObject(); + var procCap = instance.AddComponent(); + var handleOverlap = instance.AddComponent(); + handleOverlap.Parent = root; + var collider = instance.AddComponent(); + var offset = start - end; + var position = start - (offset / 2.0f); + var height = offset.magnitude; + collider.height = height + (width * 2) * .90f; + collider.radius = width * .90f; + procCap.height = height + (width); + procCap.radius = width; + procCap.CreateMesh(); + + instance.transform.parent = root.transform; + instance.transform.up = offset; + if (useWorldSpace) + { + instance.transform.position = position; + } + else + { + instance.transform.position = position + parent.transform.position; + instance.transform.rotation = instance.transform.rotation * parent.transform.rotation; + } + + // UnityEngine.GameObject.Destroy(handleOverlap); + return instance; + } + + public static GameObject CreateAtPoint(this GameObject parent, Vector3 position, float width, + bool useWorldSpace, GameObject root) + { + var scale = new Vector3(width, width, width); + var instance = GameObject.CreatePrimitive(PrimitiveType.Sphere); + instance.transform.parent = root.transform; + instance.transform.localScale = scale * 2; + if (useWorldSpace) + { + instance.transform.position = position; + } + else + { + instance.transform.position = position + parent.transform.position; + instance.transform.rotation = instance.transform.rotation * parent.transform.rotation; + } + + return instance; + } + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs.meta new file mode 100644 index 0000000..07191fd --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonHelper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: badf427d082e546a0b2b91e0b251f39d +timeCreated: 1515352351 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs new file mode 100644 index 0000000..203070a --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace Unity.MLAgents +{ + [System.Serializable] + public class MarathonJoint + { + public Joint Joint; + public string Name; + public string JointName; + public Vector2 CtrlRange; + public bool? CtrlLimited; + public float? Gear; + public ConfigurableJoint TrueBase; + public Transform TrueTarget; + public float MaximumForce; + } +} diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs.meta new file mode 100644 index 0000000..de81495 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonJoint.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7e8c7f9aa73bc4a34bb844acd8d4dc68 +timeCreated: 1515741765 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs new file mode 100644 index 0000000..96ebd21 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace Unity.MLAgents +{ + [System.Serializable] + public class MarathonSensor + { + public Collider SiteObject; + public string Name; + public string SiteName; + } +} \ No newline at end of file diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs.meta b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs.meta new file mode 100644 index 0000000..e0e8fd8 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSensor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c363fa98af67a4ed8b4ce15b4baefc8d +timeCreated: 1520405313 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSpawner.cs b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSpawner.cs new file mode 100644 index 0000000..7d58221 --- /dev/null +++ b/Assets/MarathonEnvs/Scripts/Ragdoll002/MarathonSpawner.cs @@ -0,0 +1,1270 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Linq; +using UnityEngine; + +namespace Unity.MLAgents +{ + public class MarathonSpawner : MonoBehaviour + { + [Tooltip("The MuJoCo xml file to parse")] + /**< \brief The MuJoCo xml file to parse*/ + public TextAsset Xml; + + public Material Material; + public PhysicMaterial PhysicMaterial; + + [Tooltip("When True, UnityEngine.Time.fixedDeltaTime is set by

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%0A32B?asr;B0WLw~aAY(2i2 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