text: // Autogenerated from CppHeaderCreator
  // Created by Sc2ad
  // =========================================================================
  #pragma once
  // Begin includes
  #include "extern/beatsaber-hook/shared/utils/typedefs.h"
  #include "extern/beatsaber-hook/shared/utils/byref.hpp"
  // Including type: RootMotion.FinalIK.IKMapping
  #include "RootMotion/FinalIK/IKMapping.hpp"
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-properties.hpp"
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-fields.hpp"
  #include "extern/beatsaber-hook/shared/utils/utils.h"
  // Completed includes
  // Begin forward declares
  // Forward declaring namespace: RootMotion::FinalIK
  namespace RootMotion::FinalIK {
    // Forward declaring type: IKSolverFullBody
    class IKSolverFullBody;
    // Forward declaring type: IKSolver
    class IKSolver;
  }
  // Forward declaring namespace: UnityEngine
  namespace UnityEngine {
    // Forward declaring type: Transform
    class Transform;
    // Forward declaring type: Vector3
    struct Vector3;
  }
  // Completed forward declares
  // Type namespace: RootMotion.FinalIK
  namespace RootMotion::FinalIK {
    // Forward declaring type: IKMappingLimb
    class IKMappingLimb;
  }
  #include "extern/beatsaber-hook/shared/utils/il2cpp-type-check.hpp"
  NEED_NO_BOX(RootMotion::FinalIK::IKMappingLimb);
  DEFINE_IL2CPP_ARG_TYPE(RootMotion::FinalIK::IKMappingLimb*, "RootMotion.FinalIK", "IKMappingLimb");
  // Type namespace: RootMotion.FinalIK
  namespace RootMotion::FinalIK {
    // Size: 0x60
    #pragma pack(push, 1)
    // Autogenerated type: RootMotion.FinalIK.IKMappingLimb
    // [TokenAttribute] Offset: FFFFFFFF
    class IKMappingLimb : public RootMotion::FinalIK::IKMapping {
      public:
      // Nested type: RootMotion::FinalIK::IKMappingLimb::BoneMapType
      struct BoneMapType;
      #ifdef USE_CODEGEN_FIELDS
      public:
      #else
      protected:
      #endif
      // public UnityEngine.Transform parentBone
      // Size: 0x8
      // Offset: 0x10
      UnityEngine::Transform* parentBone;
      // Field size check
      static_assert(sizeof(UnityEngine::Transform*) == 0x8);
      // public UnityEngine.Transform bone1
      // Size: 0x8
      // Offset: 0x18
      UnityEngine::Transform* bone1;
      // Field size check
      static_assert(sizeof(UnityEngine::Transform*) == 0x8);
      // public UnityEngine.Transform bone2
      // Size: 0x8
      // Offset: 0x20
      UnityEngine::Transform* bone2;
      // Field size check
      static_assert(sizeof(UnityEngine::Transform*) == 0x8);
      // public UnityEngine.Transform bone3
      // Size: 0x8
      // Offset: 0x28
      UnityEngine::Transform* bone3;
      // Field size check
      static_assert(sizeof(UnityEngine::Transform*) == 0x8);
      // [RangeAttribute] Offset: 0xEF2C98
      // public System.Single maintainRotationWeight
      // Size: 0x4
      // Offset: 0x30
      float maintainRotationWeight;
      // Field size check
      static_assert(sizeof(float) == 0x4);
      // [RangeAttribute] Offset: 0xEF2CB0
      // public System.Single weight
      // Size: 0x4
      // Offset: 0x34
      float weight;
      // Field size check
      static_assert(sizeof(float) == 0x4);
      // public System.Boolean updatePlaneRotations
      // Size: 0x1
      // Offset: 0x38
      bool updatePlaneRotations;
      // Field size check
      static_assert(sizeof(bool) == 0x1);
      // Padding between fields: updatePlaneRotations and: boneMapParent
      char __padding6[0x7] = {};
      // private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMapParent
      // Size: 0x8
      // Offset: 0x40
      RootMotion::FinalIK::IKMapping::BoneMap* boneMapParent;
      // Field size check
      static_assert(sizeof(RootMotion::FinalIK::IKMapping::BoneMap*) == 0x8);
      // private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMap1
      // Size: 0x8
      // Offset: 0x48
      RootMotion::FinalIK::IKMapping::BoneMap* boneMap1;
      // Field size check
      static_assert(sizeof(RootMotion::FinalIK::IKMapping::BoneMap*) == 0x8);
      // private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMap2
      // Size: 0x8
      // Offset: 0x50
      RootMotion::FinalIK::IKMapping::BoneMap* boneMap2;
      // Field size check
      static_assert(sizeof(RootMotion::FinalIK::IKMapping::BoneMap*) == 0x8);
      // private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMap3
      // Size: 0x8
      // Offset: 0x58
      RootMotion::FinalIK::IKMapping::BoneMap* boneMap3;
      // Field size check
      static_assert(sizeof(RootMotion::FinalIK::IKMapping::BoneMap*) == 0x8);
      public:
      // Get instance field reference: public UnityEngine.Transform parentBone
      UnityEngine::Transform*& dyn_parentBone();
      // Get instance field reference: public UnityEngine.Transform bone1
      UnityEngine::Transform*& dyn_bone1();
      // Get instance field reference: public UnityEngine.Transform bone2
      UnityEngine::Transform*& dyn_bone2();
      // Get instance field reference: public UnityEngine.Transform bone3
      UnityEngine::Transform*& dyn_bone3();
      // Get instance field reference: public System.Single maintainRotationWeight
      float& dyn_maintainRotationWeight();
      // Get instance field reference: public System.Single weight
      float& dyn_weight();
      // Get instance field reference: public System.Boolean updatePlaneRotations
      bool& dyn_updatePlaneRotations();
      // Get instance field reference: private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMapParent
      RootMotion::FinalIK::IKMapping::BoneMap*& dyn_boneMapParent();
      // Get instance field reference: private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMap1
      RootMotion::FinalIK::IKMapping::BoneMap*& dyn_boneMap1();
      // Get instance field reference: private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMap2
      RootMotion::FinalIK::IKMapping::BoneMap*& dyn_boneMap2();
      // Get instance field reference: private RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap boneMap3
      RootMotion::FinalIK::IKMapping::BoneMap*& dyn_boneMap3();
      // public System.Void .ctor(UnityEngine.Transform bone1, UnityEngine.Transform bone2, UnityEngine.Transform bone3, UnityEngine.Transform parentBone)
      // Offset: 0x1E7F248
      template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
      static IKMappingLimb* New_ctor(UnityEngine::Transform* bone1, UnityEngine::Transform* bone2, UnityEngine::Transform* bone3, UnityEngine::Transform* parentBone) {
        static auto ___internal__logger = ::Logger::get().WithContext("RootMotion::FinalIK::IKMappingLimb::.ctor");
        return THROW_UNLESS((::il2cpp_utils::New<IKMappingLimb*, creationType>(bone1, bone2, bone3, parentBone)));
      }
      // public RootMotion.FinalIK.IKMapping/RootMotion.FinalIK.BoneMap GetBoneMap(RootMotion.FinalIK.IKMappingLimb/RootMotion.FinalIK.BoneMapType boneMap)
      // Offset: 0x1E7ED18
      RootMotion::FinalIK::IKMapping::BoneMap* GetBoneMap(RootMotion::FinalIK::IKMappingLimb::BoneMapType boneMap);
      // public System.Void SetLimbOrientation(UnityEngine.Vector3 upper, UnityEngine.Vector3 lower)
      // Offset: 0x1E7EDEC
      void SetLimbOrientation(UnityEngine::Vector3 upper, UnityEngine::Vector3 lower);
      // public System.Void SetBones(UnityEngine.Transform bone1, UnityEngine.Transform bone2, UnityEngine.Transform bone3, UnityEngine.Transform parentBone)
      // Offset: 0x1E7F37C
      void SetBones(UnityEngine::Transform* bone1, UnityEngine::Transform* bone2, UnityEngine::Transform* bone3, UnityEngine::Transform* parentBone);
      // public System.Void StoreDefaultLocalState()
      // Offset: 0x1E7F388
      void StoreDefaultLocalState();
      // public System.Void FixTransforms()
      // Offset: 0x1E7F430
      void FixTransforms();
      // public System.Void ReadPose()
      // Offset: 0x1E7F758
      void ReadPose();
      // public System.Void WritePose(RootMotion.FinalIK.IKSolverFullBody solver, System.Boolean fullBody)
      // Offset: 0x1E7F810
      void WritePose(RootMotion::FinalIK::IKSolverFullBody* solver, bool fullBody);
      // public System.Void .ctor()
      // Offset: 0x1E7F140
      // Implemented from: RootMotion.FinalIK.IKMapping
      // Base method: System.Void IKMapping::.ctor()
      // Base method: System.Void Object::.ctor()
      template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
      static IKMappingLimb* New_ctor() {
        static auto ___internal__logger = ::Logger::get().WithContext("RootMotion::FinalIK::IKMappingLimb::.ctor");
        return THROW_UNLESS((::il2cpp_utils::New<IKMappingLimb*, creationType>()));
      }
      // public override System.Boolean IsValid(RootMotion.FinalIK.IKSolver solver, ref System.String message)
      // Offset: 0x1E7EC94
      // Implemented from: RootMotion.FinalIK.IKMapping
      // Base method: System.Boolean IKMapping::IsValid(RootMotion.FinalIK.IKSolver solver, ref System.String message)
      bool IsValid(RootMotion::FinalIK::IKSolver* solver, ByRef<::Il2CppString*> message);
      // public override System.Void Initiate(RootMotion.FinalIK.IKSolverFullBody solver)
      // Offset: 0x1E7F4E8
      // Implemented from: RootMotion.FinalIK.IKMapping
      // Base method: System.Void IKMapping::Initiate(RootMotion.FinalIK.IKSolverFullBody solver)
      void Initiate(RootMotion::FinalIK::IKSolverFullBody* solver);
    }; // RootMotion.FinalIK.IKMappingLimb
    #pragma pack(pop)
    static check_size<sizeof(IKMappingLimb), 88 + sizeof(RootMotion::FinalIK::IKMapping::BoneMap*)> __RootMotion_FinalIK_IKMappingLimbSizeCheck;
    static_assert(sizeof(IKMappingLimb) == 0x60);
  }
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::New_ctor
  // Il2CppName: .ctor
  // Cannot get method pointer of value based method overload from template for constructor!
  // Try using FindMethod instead!
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::GetBoneMap
  // Il2CppName: GetBoneMap
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<RootMotion::FinalIK::IKMapping::BoneMap* (RootMotion::FinalIK::IKMappingLimb::*)(RootMotion::FinalIK::IKMappingLimb::BoneMapType)>(&RootMotion::FinalIK::IKMappingLimb::GetBoneMap)> {
    static const MethodInfo* get() {
      static auto* boneMap = &::il2cpp_utils::GetClassFromName("RootMotion.FinalIK", "IKMappingLimb/BoneMapType")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "GetBoneMap", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{boneMap});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::SetLimbOrientation
  // Il2CppName: SetLimbOrientation
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)(UnityEngine::Vector3, UnityEngine::Vector3)>(&RootMotion::FinalIK::IKMappingLimb::SetLimbOrientation)> {
    static const MethodInfo* get() {
      static auto* upper = &::il2cpp_utils::GetClassFromName("UnityEngine", "Vector3")->byval_arg;
      static auto* lower = &::il2cpp_utils::GetClassFromName("UnityEngine", "Vector3")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "SetLimbOrientation", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{upper, lower});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::SetBones
  // Il2CppName: SetBones
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)(UnityEngine::Transform*, UnityEngine::Transform*, UnityEngine::Transform*, UnityEngine::Transform*)>(&RootMotion::FinalIK::IKMappingLimb::SetBones)> {
    static const MethodInfo* get() {
      static auto* bone1 = &::il2cpp_utils::GetClassFromName("UnityEngine", "Transform")->byval_arg;
      static auto* bone2 = &::il2cpp_utils::GetClassFromName("UnityEngine", "Transform")->byval_arg;
      static auto* bone3 = &::il2cpp_utils::GetClassFromName("UnityEngine", "Transform")->byval_arg;
      static auto* parentBone = &::il2cpp_utils::GetClassFromName("UnityEngine", "Transform")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "SetBones", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{bone1, bone2, bone3, parentBone});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::StoreDefaultLocalState
  // Il2CppName: StoreDefaultLocalState
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)()>(&RootMotion::FinalIK::IKMappingLimb::StoreDefaultLocalState)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "StoreDefaultLocalState", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::FixTransforms
  // Il2CppName: FixTransforms
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)()>(&RootMotion::FinalIK::IKMappingLimb::FixTransforms)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "FixTransforms", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::ReadPose
  // Il2CppName: ReadPose
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)()>(&RootMotion::FinalIK::IKMappingLimb::ReadPose)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "ReadPose", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::WritePose
  // Il2CppName: WritePose
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)(RootMotion::FinalIK::IKSolverFullBody*, bool)>(&RootMotion::FinalIK::IKMappingLimb::WritePose)> {
    static const MethodInfo* get() {
      static auto* solver = &::il2cpp_utils::GetClassFromName("RootMotion.FinalIK", "IKSolverFullBody")->byval_arg;
      static auto* fullBody = &::il2cpp_utils::GetClassFromName("System", "Boolean")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "WritePose", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{solver, fullBody});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::New_ctor
  // Il2CppName: .ctor
  // Cannot get method pointer of value based method overload from template for constructor!
  // Try using FindMethod instead!
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::IsValid
  // Il2CppName: IsValid
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<bool (RootMotion::FinalIK::IKMappingLimb::*)(RootMotion::FinalIK::IKSolver*, ByRef<::Il2CppString*>)>(&RootMotion::FinalIK::IKMappingLimb::IsValid)> {
    static const MethodInfo* get() {
      static auto* solver = &::il2cpp_utils::GetClassFromName("RootMotion.FinalIK", "IKSolver")->byval_arg;
      static auto* message = &::il2cpp_utils::GetClassFromName("System", "String")->this_arg;
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "IsValid", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{solver, message});
    }
  };
  // Writing MetadataGetter for method: RootMotion::FinalIK::IKMappingLimb::Initiate
  // Il2CppName: Initiate
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (RootMotion::FinalIK::IKMappingLimb::*)(RootMotion::FinalIK::IKSolverFullBody*)>(&RootMotion::FinalIK::IKMappingLimb::Initiate)> {
    static const MethodInfo* get() {
      static auto* solver = &::il2cpp_utils::GetClassFromName("RootMotion.FinalIK", "IKSolverFullBody")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(RootMotion::FinalIK::IKMappingLimb*), "Initiate", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{solver});
    }
  };
  