Decompiled source of BetterLethalVRM v1.0.0

BepInEx/plugins/FastSpringBone10.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using UniVRM10.FastSpringBones.Blittables;
using Unity.Burst;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Jobs;
using UnityEngine.Profiling;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1312]
		{
			0, 0, 0, 1, 0, 0, 0, 68, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 92, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 115, 92, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 67, 111, 108, 108, 105,
			100, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 72, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			115, 92, 66, 108, 105, 116, 116, 97, 98, 108,
			101, 69, 120, 116, 101, 114, 110, 97, 108, 68,
			97, 116, 97, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 65, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			115, 92, 66, 108, 105, 116, 116, 97, 98, 108,
			101, 74, 111, 105, 110, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 65, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 115, 92, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 76, 111, 103, 105, 99, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 64,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 66, 108, 105,
			116, 116, 97, 98, 108, 101, 115, 92, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 83, 112, 97,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 66, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 115, 92,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 83,
			112, 114, 105, 110, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 69, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 92, 66, 108, 105, 116, 116, 97, 98,
			108, 101, 115, 92, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 84, 114, 97, 110, 115, 102, 111,
			114, 109, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 71, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			73, 110, 112, 117, 116, 80, 111, 114, 116, 115,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 66, 117, 102, 102, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 73, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 73,
			110, 112, 117, 116, 80, 111, 114, 116, 115, 92,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 67, 111, 108, 108, 105, 100,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			73, 110, 112, 117, 116, 80, 111, 114, 116, 115,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 74, 111, 105, 110, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			71, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 73, 110,
			112, 117, 116, 80, 111, 114, 116, 115, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 112, 114, 105, 110, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 76,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 83, 121, 115,
			116, 101, 109, 92, 67, 111, 112, 121, 84, 111,
			78, 97, 116, 105, 118, 101, 65, 114, 114, 97,
			121, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			74, 111, 98, 46, 99, 115, 0, 0, 0, 5,
			0, 0, 0, 75, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 83, 121, 115, 116, 101, 109, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 66, 117, 102, 102, 101, 114, 67, 111,
			109, 98, 105, 110, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 70, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 83, 121, 115, 116, 101, 109,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 68, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 83, 121, 115, 116, 101, 109, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 101, 114, 118, 105, 99, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			63, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 83, 121,
			115, 116, 101, 109, 92, 80, 117, 115, 104, 84,
			114, 97, 110, 115, 102, 111, 114, 109, 74, 111,
			98, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 70, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 83,
			121, 115, 116, 101, 109, 92, 85, 112, 100, 97,
			116, 101, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 74, 111, 98, 46,
			99, 115
		};
		result.TypesData = new byte[1303]
		{
			0, 0, 0, 0, 53, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			67, 111, 108, 108, 105, 100, 101, 114, 0, 0,
			0, 0, 57, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 115, 46, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 115, 124, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 69, 120,
			116, 101, 114, 110, 97, 108, 68, 97, 116, 97,
			0, 0, 0, 0, 50, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			74, 111, 105, 110, 116, 0, 0, 0, 0, 50,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 115, 124, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 76, 111, 103, 105, 99,
			0, 0, 0, 0, 49, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			83, 112, 97, 110, 0, 0, 0, 0, 51, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 115, 46, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 115, 124, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 83, 112, 114, 105, 110, 103,
			0, 0, 0, 0, 54, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 0,
			0, 0, 0, 52, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			121, 115, 116, 101, 109, 124, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			66, 117, 102, 102, 101, 114, 0, 0, 0, 0,
			54, 85, 110, 105, 86, 82, 77, 49, 48, 46,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 115, 46, 83, 121, 115, 116,
			101, 109, 124, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 67, 111, 108,
			108, 105, 100, 101, 114, 0, 0, 0, 0, 51,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 83, 121, 115, 116, 101,
			109, 124, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 74, 111, 105, 110,
			116, 0, 0, 0, 0, 52, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 115,
			46, 83, 121, 115, 116, 101, 109, 124, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 83, 112, 114, 105, 110, 103, 0, 0,
			0, 0, 48, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 115, 46, 83, 121,
			115, 116, 101, 109, 124, 80, 117, 108, 108, 84,
			114, 97, 110, 115, 102, 111, 114, 109, 74, 111,
			98, 0, 0, 0, 0, 60, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 115,
			46, 83, 121, 115, 116, 101, 109, 124, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 66, 117, 102, 102, 101, 114, 67, 111,
			109, 98, 105, 110, 101, 114, 0, 0, 0, 0,
			78, 85, 110, 105, 86, 82, 77, 49, 48, 46,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 115, 46, 83, 121, 115, 116,
			101, 109, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 66, 117, 102,
			102, 101, 114, 67, 111, 109, 98, 105, 110, 101,
			114, 124, 76, 111, 97, 100, 84, 114, 97, 110,
			115, 102, 111, 114, 109, 115, 74, 111, 98, 0,
			0, 0, 0, 75, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			121, 115, 116, 101, 109, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			66, 117, 102, 102, 101, 114, 67, 111, 109, 98,
			105, 110, 101, 114, 124, 76, 111, 97, 100, 83,
			112, 114, 105, 110, 103, 115, 74, 111, 98, 0,
			0, 0, 0, 77, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			121, 115, 116, 101, 109, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			66, 117, 102, 102, 101, 114, 67, 111, 109, 98,
			105, 110, 101, 114, 124, 76, 111, 97, 100, 67,
			111, 108, 108, 105, 100, 101, 114, 115, 74, 111,
			98, 0, 0, 0, 0, 76, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 115,
			46, 83, 121, 115, 116, 101, 109, 46, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 66, 117, 102, 102, 101, 114, 67, 111,
			109, 98, 105, 110, 101, 114, 124, 79, 102, 102,
			115, 101, 116, 76, 111, 103, 105, 99, 115, 74,
			111, 98, 0, 0, 0, 0, 55, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 83, 121, 115, 116, 101, 109, 124, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 99, 104, 101, 100, 117, 108,
			101, 114, 0, 0, 0, 0, 53, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 83, 121, 115, 116, 101, 109, 124, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 101, 114, 118, 105, 99, 101,
			0, 0, 0, 0, 48, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			83, 121, 115, 116, 101, 109, 124, 80, 117, 115,
			104, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			74, 111, 98, 0, 0, 0, 0, 55, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 115, 46, 83, 121, 115, 116, 101, 109, 124,
			85, 112, 100, 97, 116, 101, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			74, 111, 98
		};
		result.TotalFiles = 17;
		result.TotalTypes = 21;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniVRM10.FastSpringBones.System
{
	public class FastSpringBoneBuffer : IDisposable
	{
		private NativeArray<BlittableExternalData> _externalData;

		public NativeArray<BlittableSpring> Springs { get; }

		public NativeArray<BlittableJoint> Joints { get; }

		public NativeArray<BlittableCollider> Colliders { get; }

		public NativeArray<BlittableLogic> Logics { get; }

		public NativeArray<BlittableTransform> BlittableTransforms { get; }

		public Transform[] Transforms { get; }

		public bool IsDisposed { get; private set; }

		public BlittableExternalData ExternalData
		{
			get
			{
				return _externalData[0];
			}
			set
			{
				_externalData[0] = value;
			}
		}

		public unsafe FastSpringBoneBuffer(IReadOnlyList<FastSpringBoneSpring> springs, BlittableExternalData externalData, bool simulateLastBone = false)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0609: Unknown result type (might be due to invalid IL or missing references)
			//IL_060e: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0433: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0407: Unknown result type (might be due to invalid IL or missing references)
			//IL_040c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_041c: Unknown result type (might be due to invalid IL or missing references)
			//IL_041e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0423: Unknown result type (might be due to invalid IL or missing references)
			//IL_0428: Unknown result type (might be due to invalid IL or missing references)
			//IL_045a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0447: Unknown result type (might be due to invalid IL or missing references)
			//IL_045f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0463: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0472: Unknown result type (might be due to invalid IL or missing references)
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_0481: Unknown result type (might be due to invalid IL or missing references)
			//IL_0488: Unknown result type (might be due to invalid IL or missing references)
			//IL_049c: Unknown result type (might be due to invalid IL or missing references)
			//IL_049e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_051c: Unknown result type (might be due to invalid IL or missing references)
			//IL_051e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0525: Unknown result type (might be due to invalid IL or missing references)
			//IL_0527: Unknown result type (might be due to invalid IL or missing references)
			//IL_0530: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_053e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0543: Unknown result type (might be due to invalid IL or missing references)
			Profiler.BeginSample("FastSpringBone.ConstructBuffers");
			_externalData = new NativeArray<BlittableExternalData>(1, (Allocator)4, (NativeArrayOptions)1);
			ExternalData = externalData;
			Profiler.BeginSample("FastSpringBone.ConstructBuffers.ConstructTransformBuffer");
			HashSet<Transform> hashSet = new HashSet<Transform>();
			foreach (FastSpringBoneSpring spring in springs)
			{
				FastSpringBoneJoint[] joints = spring.joints;
				for (int i = 0; i < joints.Length; i++)
				{
					FastSpringBoneJoint fastSpringBoneJoint = joints[i];
					hashSet.Add(fastSpringBoneJoint.Transform);
					if ((Object)(object)fastSpringBoneJoint.Transform.parent != (Object)null)
					{
						hashSet.Add(fastSpringBoneJoint.Transform.parent);
					}
				}
				FastSpringBoneCollider[] colliders = spring.colliders;
				for (int j = 0; j < colliders.Length; j++)
				{
					FastSpringBoneCollider fastSpringBoneCollider = colliders[j];
					hashSet.Add(fastSpringBoneCollider.Transform);
				}
				if ((Object)(object)spring.center != (Object)null)
				{
					hashSet.Add(spring.center);
				}
			}
			Transform[] array = hashSet.ToArray();
			Dictionary<Transform, int> transformIndexDictionary = array.Select((Transform trs, int index) => (trs, index)).ToDictionary<(Transform, int), Transform, int>(((Transform trs, int index) tuple) => tuple.trs, ((Transform trs, int index) tuple) => tuple.index);
			Profiler.EndSample();
			Profiler.BeginSample("FastSpringBone.ConstructBuffers.ConstructBuffers");
			List<BlittableCollider> list = new List<BlittableCollider>();
			List<BlittableJoint> list2 = new List<BlittableJoint>();
			List<BlittableSpring> list3 = new List<BlittableSpring>();
			List<BlittableLogic> list4 = new List<BlittableLogic>();
			Vector3 val3 = default(Vector3);
			foreach (FastSpringBoneSpring spring2 in springs)
			{
				BlittableSpring item = new BlittableSpring
				{
					colliderSpan = new BlittableSpan
					{
						startIndex = list.Count,
						count = spring2.colliders.Length
					},
					logicSpan = new BlittableSpan
					{
						startIndex = list2.Count,
						count = (simulateLastBone ? spring2.joints.Length : (spring2.joints.Length - 1))
					},
					centerTransformIndex = (Object.op_Implicit((Object)(object)spring2.center) ? transformIndexDictionary[spring2.center] : (-1)),
					ExternalData = (BlittableExternalData*)NativeArrayUnsafeUtility.GetUnsafePtr<BlittableExternalData>(_externalData)
				};
				list3.Add(item);
				list.AddRange(spring2.colliders.Select(delegate(FastSpringBoneCollider collider)
				{
					BlittableCollider collider2 = collider.Collider;
					collider2.transformIndex = transformIndexDictionary[collider.Transform];
					return collider2;
				}));
				list2.AddRange(from joint in spring2.joints.Take(simulateLastBone ? spring2.joints.Length : (spring2.joints.Length - 1))
					select joint.Joint);
				for (int k = 0; k < (simulateLastBone ? spring2.joints.Length : (spring2.joints.Length - 1)); k++)
				{
					FastSpringBoneJoint fastSpringBoneJoint2 = spring2.joints[k];
					FastSpringBoneJoint? fastSpringBoneJoint3 = ((k + 1 < spring2.joints.Length) ? new FastSpringBoneJoint?(spring2.joints[k + 1]) : null);
					FastSpringBoneJoint? fastSpringBoneJoint4 = ((k - 1 >= 0) ? new FastSpringBoneJoint?(spring2.joints[k - 1]) : null);
					Vector3 zero = Vector3.zero;
					if (fastSpringBoneJoint3.HasValue)
					{
						zero = fastSpringBoneJoint3.Value.Transform.localPosition;
					}
					else if (fastSpringBoneJoint4.HasValue)
					{
						Vector3 val = fastSpringBoneJoint2.Transform.position - fastSpringBoneJoint4.Value.Transform.position;
						Matrix4x4 worldToLocalMatrix = fastSpringBoneJoint2.Transform.worldToLocalMatrix;
						zero = ((Matrix4x4)(ref worldToLocalMatrix)).MultiplyPoint(fastSpringBoneJoint2.Transform.position + val);
					}
					else
					{
						zero = Vector3.down;
					}
					Vector3 val2 = (fastSpringBoneJoint3.HasValue ? fastSpringBoneJoint3.Value.Transform.lossyScale : fastSpringBoneJoint2.Transform.lossyScale);
					((Vector3)(ref val3))..ctor(zero.x * val2.x, zero.y * val2.y, zero.z * val2.z);
					Vector3 val4 = fastSpringBoneJoint2.Transform.TransformPoint(val3);
					Vector3 val5 = (((Object)(object)spring2.center != (Object)null) ? spring2.center.InverseTransformPoint(val4) : val4);
					Transform parent = fastSpringBoneJoint2.Transform.parent;
					list4.Add(new BlittableLogic
					{
						headTransformIndex = transformIndexDictionary[fastSpringBoneJoint2.Transform],
						parentTransformIndex = (((Object)(object)parent != (Object)null) ? transformIndexDictionary[parent] : (-1)),
						currentTail = val5,
						prevTail = val5,
						localRotation = fastSpringBoneJoint2.DefaultLocalRotation,
						boneAxis = ((Vector3)(ref val3)).normalized,
						length = ((Vector3)(ref val3)).magnitude
					});
				}
			}
			Profiler.EndSample();
			Profiler.BeginSample("FastSpringBone.ConstructBuffers.ConstructNativeArrays");
			Springs = new NativeArray<BlittableSpring>(list3.ToArray(), (Allocator)4);
			Joints = new NativeArray<BlittableJoint>(list2.ToArray(), (Allocator)4);
			Colliders = new NativeArray<BlittableCollider>(list.ToArray(), (Allocator)4);
			Logics = new NativeArray<BlittableLogic>(list4.ToArray(), (Allocator)4);
			BlittableTransforms = new NativeArray<BlittableTransform>(array.Length, (Allocator)4, (NativeArrayOptions)1);
			Transforms = array.ToArray();
			Profiler.EndSample();
			Profiler.EndSample();
		}

		public void Dispose()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			if (!IsDisposed)
			{
				IsDisposed = true;
				Springs.Dispose();
				Joints.Dispose();
				BlittableTransforms.Dispose();
				Colliders.Dispose();
				Logics.Dispose();
				_externalData.Dispose();
			}
		}
	}
	[Serializable]
	public struct FastSpringBoneCollider
	{
		public Transform Transform;

		public BlittableCollider Collider;
	}
	[Serializable]
	public struct FastSpringBoneJoint
	{
		public Transform Transform;

		public BlittableJoint Joint;

		public Quaternion DefaultLocalRotation;
	}
	[Serializable]
	public struct FastSpringBoneSpring
	{
		public Transform center;

		public FastSpringBoneJoint[] joints;

		public FastSpringBoneCollider[] colliders;
	}
	[BurstCompile]
	public struct PullTransformJob : IJobParallelForTransform
	{
		[WriteOnly]
		public NativeArray<BlittableTransform> Transforms;

		public void Execute(int index, TransformAccess transform)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			Transforms[index] = new BlittableTransform
			{
				position = ((TransformAccess)(ref transform)).position,
				rotation = ((TransformAccess)(ref transform)).rotation,
				localPosition = ((TransformAccess)(ref transform)).localPosition,
				localRotation = ((TransformAccess)(ref transform)).localRotation,
				localScale = ((TransformAccess)(ref transform)).localScale,
				localToWorldMatrix = ((TransformAccess)(ref transform)).localToWorldMatrix,
				worldToLocalMatrix = ((TransformAccess)(ref transform)).worldToLocalMatrix
			};
		}
	}
	public sealed class FastSpringBoneBufferCombiner : IDisposable
	{
		[BurstCompile]
		private struct LoadTransformsJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeArray<BlittableTransform> SrcTransforms;

			[WriteOnly]
			public NativeSlice<BlittableTransform> DestTransforms;

			public void Execute(int index)
			{
				DestTransforms[index] = SrcTransforms[index];
			}
		}

		[BurstCompile]
		private struct LoadSpringsJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeArray<BlittableSpring> SrcSprings;

			[WriteOnly]
			public NativeSlice<BlittableSpring> DestSprings;

			public int CollidersOffset;

			public int LogicsOffset;

			public int TransformOffset;

			public void Execute(int index)
			{
				BlittableSpring blittableSpring = SrcSprings[index];
				blittableSpring.colliderSpan.startIndex += CollidersOffset;
				blittableSpring.logicSpan.startIndex += LogicsOffset;
				blittableSpring.transformIndexOffset = TransformOffset;
				DestSprings[index] = blittableSpring;
			}
		}

		[BurstCompile]
		private struct LoadCollidersJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeArray<BlittableCollider> SrcColliders;

			[WriteOnly]
			public NativeSlice<BlittableCollider> DestColliders;

			public void Execute(int index)
			{
				DestColliders[index] = SrcColliders[index];
			}
		}

		[BurstCompile]
		private struct OffsetLogicsJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeSlice<BlittableLogic> SrcLogics;

			[ReadOnly]
			public NativeSlice<BlittableJoint> SrcJoints;

			[WriteOnly]
			public NativeSlice<BlittableLogic> DestLogics;

			[WriteOnly]
			public NativeSlice<BlittableJoint> DestJoints;

			public void Execute(int index)
			{
				DestLogics[index] = SrcLogics[index];
				DestJoints[index] = SrcJoints[index];
			}
		}

		private NativeArray<BlittableSpring> _springs;

		private NativeArray<BlittableTransform> _transforms;

		private NativeArray<BlittableCollider> _colliders;

		private NativeArray<BlittableJoint> _joints;

		private NativeArray<BlittableLogic> _logics;

		private TransformAccessArray _transformAccessArray;

		private readonly LinkedList<FastSpringBoneBuffer> _buffers = new LinkedList<FastSpringBoneBuffer>();

		private FastSpringBoneBuffer[] _batchedBuffers;

		private int[] _batchedBufferLogicSizes;

		private bool _isDirty;

		public NativeArray<BlittableSpring> Springs => _springs;

		public NativeArray<BlittableJoint> Joints => _joints;

		public NativeArray<BlittableTransform> Transforms => _transforms;

		public TransformAccessArray TransformAccessArray => _transformAccessArray;

		public NativeArray<BlittableCollider> Colliders => _colliders;

		public NativeArray<BlittableLogic> Logics => _logics;

		public bool HasBuffer => _batchedBuffers != null && _batchedBuffers.Length != 0;

		public void Register(FastSpringBoneBuffer buffer)
		{
			_buffers.AddLast(buffer);
			_isDirty = true;
		}

		public void Unregister(FastSpringBoneBuffer buffer)
		{
			_buffers.Remove(buffer);
			_isDirty = true;
		}

		public JobHandle ReconstructIfDirty(JobHandle handle)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (_isDirty)
			{
				JobHandle result = ReconstructBuffers(handle);
				_isDirty = false;
				return result;
			}
			return handle;
		}

		private void SaveToSourceBuffer()
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			if (_batchedBuffers == null)
			{
				return;
			}
			int num = 0;
			for (int i = 0; i < _batchedBuffers.Length; i++)
			{
				int num2 = _batchedBufferLogicSizes[i];
				if (!_batchedBuffers[i].IsDisposed && num2 > 0)
				{
					NativeArray<BlittableLogic>.Copy(_logics, num, _batchedBuffers[i].Logics, 0, num2);
				}
				num += num2;
			}
		}

		private JobHandle ReconstructBuffers(JobHandle handle)
		{
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01df: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0272: Unknown result type (might be due to invalid IL or missing references)
			//IL_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_0285: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_0316: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0343: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Unknown result type (might be due to invalid IL or missing references)
			//IL_0352: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_0358: Unknown result type (might be due to invalid IL or missing references)
			//IL_035e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_0373: Unknown result type (might be due to invalid IL or missing references)
			//IL_0378: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_039d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_0426: Unknown result type (might be due to invalid IL or missing references)
			//IL_0445: Unknown result type (might be due to invalid IL or missing references)
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_045b: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0460: Unknown result type (might be due to invalid IL or missing references)
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers");
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.SaveToSourceBuffer");
			SaveToSourceBuffer();
			Profiler.EndSample();
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.DisposeBuffers");
			DisposeAllBuffers();
			Profiler.EndSample();
			int num = 0;
			int num2 = 0;
			int num3 = 0;
			int num4 = 0;
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.CopyToBatchedBuffers");
			_batchedBuffers = _buffers.ToArray();
			_batchedBufferLogicSizes = _batchedBuffers.Select((FastSpringBoneBuffer buffer) => buffer.Logics.Length).ToArray();
			Profiler.EndSample();
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.CountBufferSize");
			foreach (FastSpringBoneBuffer buffer in _buffers)
			{
				num += buffer.Springs.Length;
				num2 += buffer.Colliders.Length;
				num3 += buffer.Logics.Length;
				num4 += buffer.BlittableTransforms.Length;
			}
			Profiler.EndSample();
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.CreateBuffers");
			_springs = new NativeArray<BlittableSpring>(num, (Allocator)4, (NativeArrayOptions)1);
			_joints = new NativeArray<BlittableJoint>(num3, (Allocator)4, (NativeArrayOptions)1);
			_logics = new NativeArray<BlittableLogic>(num3, (Allocator)4, (NativeArrayOptions)1);
			_colliders = new NativeArray<BlittableCollider>(num2, (Allocator)4, (NativeArrayOptions)1);
			_transforms = new NativeArray<BlittableTransform>(num4, (Allocator)4, (NativeArrayOptions)1);
			Profiler.EndSample();
			int num5 = 0;
			int num6 = 0;
			int num7 = 0;
			int num8 = 0;
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.ScheduleLoadBufferJobs");
			for (int i = 0; i < _batchedBuffers.Length; i++)
			{
				FastSpringBoneBuffer fastSpringBoneBuffer = _batchedBuffers[i];
				LoadTransformsJob loadTransformsJob = default(LoadTransformsJob);
				loadTransformsJob.SrcTransforms = fastSpringBoneBuffer.BlittableTransforms;
				loadTransformsJob.DestTransforms = new NativeSlice<BlittableTransform>(_transforms, num8, fastSpringBoneBuffer.BlittableTransforms.Length);
				handle = IJobParallelForExtensions.Schedule<LoadTransformsJob>(loadTransformsJob, fastSpringBoneBuffer.BlittableTransforms.Length, 1, handle);
				LoadSpringsJob loadSpringsJob = default(LoadSpringsJob);
				loadSpringsJob.SrcSprings = fastSpringBoneBuffer.Springs;
				loadSpringsJob.DestSprings = new NativeSlice<BlittableSpring>(_springs, num5, fastSpringBoneBuffer.Springs.Length);
				loadSpringsJob.CollidersOffset = num6;
				loadSpringsJob.LogicsOffset = num7;
				loadSpringsJob.TransformOffset = num8;
				handle = IJobParallelForExtensions.Schedule<LoadSpringsJob>(loadSpringsJob, fastSpringBoneBuffer.Springs.Length, 1, handle);
				LoadCollidersJob loadCollidersJob = default(LoadCollidersJob);
				loadCollidersJob.SrcColliders = fastSpringBoneBuffer.Colliders;
				loadCollidersJob.DestColliders = new NativeSlice<BlittableCollider>(_colliders, num6, fastSpringBoneBuffer.Colliders.Length);
				handle = IJobParallelForExtensions.Schedule<LoadCollidersJob>(loadCollidersJob, fastSpringBoneBuffer.Colliders.Length, 1, handle);
				OffsetLogicsJob offsetLogicsJob = default(OffsetLogicsJob);
				offsetLogicsJob.SrcLogics = NativeSlice<BlittableLogic>.op_Implicit(fastSpringBoneBuffer.Logics);
				offsetLogicsJob.SrcJoints = NativeSlice<BlittableJoint>.op_Implicit(fastSpringBoneBuffer.Joints);
				offsetLogicsJob.DestLogics = new NativeSlice<BlittableLogic>(_logics, num7, fastSpringBoneBuffer.Logics.Length);
				offsetLogicsJob.DestJoints = new NativeSlice<BlittableJoint>(_joints, num7, fastSpringBoneBuffer.Logics.Length);
				handle = IJobParallelForExtensions.Schedule<OffsetLogicsJob>(offsetLogicsJob, fastSpringBoneBuffer.Logics.Length, 1, handle);
				num5 += fastSpringBoneBuffer.Springs.Length;
				num6 += fastSpringBoneBuffer.Colliders.Length;
				num7 += fastSpringBoneBuffer.Logics.Length;
				num8 += fastSpringBoneBuffer.BlittableTransforms.Length;
			}
			JobHandle.ScheduleBatchedJobs();
			Profiler.EndSample();
			Profiler.BeginSample("FastSpringBone.ReconstructBuffers.LoadTransformAccessArray");
			Transform[] array = (Transform[])(object)new Transform[num4];
			int num9 = 0;
			FastSpringBoneBuffer[] batchedBuffers = _batchedBuffers;
			foreach (FastSpringBoneBuffer fastSpringBoneBuffer2 in batchedBuffers)
			{
				Array.Copy(fastSpringBoneBuffer2.Transforms, 0, array, num9, fastSpringBoneBuffer2.Transforms.Length);
				num9 += fastSpringBoneBuffer2.BlittableTransforms.Length;
			}
			_transformAccessArray = new TransformAccessArray(array, -1);
			Profiler.EndSample();
			Profiler.EndSample();
			return handle;
		}

		private void DisposeAllBuffers()
		{
			if (_springs.IsCreated)
			{
				_springs.Dispose();
			}
			if (_joints.IsCreated)
			{
				_joints.Dispose();
			}
			if (_transforms.IsCreated)
			{
				_transforms.Dispose();
			}
			if (((TransformAccessArray)(ref _transformAccessArray)).isCreated)
			{
				((TransformAccessArray)(ref _transformAccessArray)).Dispose();
			}
			if (_colliders.IsCreated)
			{
				_colliders.Dispose();
			}
			if (_logics.IsCreated)
			{
				_logics.Dispose();
			}
		}

		public void Dispose()
		{
			DisposeAllBuffers();
		}
	}
	public sealed class FastSpringBoneScheduler : IDisposable
	{
		private readonly FastSpringBoneBufferCombiner _bufferCombiner;

		public FastSpringBoneScheduler(FastSpringBoneBufferCombiner bufferCombiner)
		{
			_bufferCombiner = bufferCombiner;
		}

		public JobHandle Schedule(float deltaTime)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			JobHandle val = _bufferCombiner.ReconstructIfDirty(default(JobHandle));
			if (!_bufferCombiner.HasBuffer)
			{
				return val;
			}
			PullTransformJob pullTransformJob = default(PullTransformJob);
			pullTransformJob.Transforms = _bufferCombiner.Transforms;
			val = IJobParallelForTransformExtensions.Schedule<PullTransformJob>(pullTransformJob, _bufferCombiner.TransformAccessArray, val);
			UpdateFastSpringBoneJob updateFastSpringBoneJob = default(UpdateFastSpringBoneJob);
			updateFastSpringBoneJob.Colliders = _bufferCombiner.Colliders;
			updateFastSpringBoneJob.Joints = _bufferCombiner.Joints;
			updateFastSpringBoneJob.Logics = _bufferCombiner.Logics;
			updateFastSpringBoneJob.Springs = _bufferCombiner.Springs;
			updateFastSpringBoneJob.Transforms = _bufferCombiner.Transforms;
			updateFastSpringBoneJob.DeltaTime = deltaTime;
			val = IJobParallelForExtensions.Schedule<UpdateFastSpringBoneJob>(updateFastSpringBoneJob, _bufferCombiner.Springs.Length, 1, val);
			PushTransformJob pushTransformJob = default(PushTransformJob);
			pushTransformJob.Transforms = _bufferCombiner.Transforms;
			return IJobParallelForTransformExtensions.Schedule<PushTransformJob>(pushTransformJob, _bufferCombiner.TransformAccessArray, val);
		}

		public void Dispose()
		{
			_bufferCombiner.Dispose();
		}
	}
	[DefaultExecutionOrder(11010)]
	public sealed class FastSpringBoneService : MonoBehaviour
	{
		public enum UpdateTypes
		{
			Manual,
			LateUpdate
		}

		[SerializeField]
		[Header("Runtime")]
		public UpdateTypes UpdateType = UpdateTypes.LateUpdate;

		private FastSpringBoneScheduler _fastSpringBoneScheduler;

		private static FastSpringBoneService _instance;

		public FastSpringBoneBufferCombiner BufferCombiner { get; private set; }

		public static FastSpringBoneService Instance
		{
			get
			{
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Expected O, but got Unknown
				if (Object.op_Implicit((Object)(object)_instance))
				{
					return _instance;
				}
				_instance = Object.FindFirstObjectByType<FastSpringBoneService>();
				if (Object.op_Implicit((Object)(object)_instance))
				{
					return _instance;
				}
				GameObject val = new GameObject("FastSpringBone Service");
				Object.DontDestroyOnLoad((Object)(object)val);
				_instance = val.AddComponent<FastSpringBoneService>();
				return _instance;
			}
		}

		public static void Free()
		{
			Object.Destroy((Object)(object)((Component)_instance).gameObject);
			_instance = null;
		}

		private void OnEnable()
		{
			BufferCombiner = new FastSpringBoneBufferCombiner();
			_fastSpringBoneScheduler = new FastSpringBoneScheduler(BufferCombiner);
		}

		private void OnDisable()
		{
			BufferCombiner.Dispose();
			_fastSpringBoneScheduler.Dispose();
		}

		private void LateUpdate()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (UpdateType == UpdateTypes.LateUpdate)
			{
				JobHandle val = _fastSpringBoneScheduler.Schedule(Time.deltaTime);
				((JobHandle)(ref val)).Complete();
			}
		}

		public void ManualUpdate(float deltaTime)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (UpdateType != 0)
			{
				throw new ArgumentException("require UpdateTypes.Manual");
			}
			JobHandle val = _fastSpringBoneScheduler.Schedule(deltaTime);
			((JobHandle)(ref val)).Complete();
		}
	}
	[BurstCompile]
	public struct PushTransformJob : IJobParallelForTransform
	{
		[ReadOnly]
		public NativeArray<BlittableTransform> Transforms;

		public void Execute(int index, TransformAccess transform)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			((TransformAccess)(ref transform)).rotation = Transforms[index].rotation;
		}
	}
	[BurstCompile]
	public struct UpdateFastSpringBoneJob : IJobParallelFor
	{
		[ReadOnly]
		public NativeArray<BlittableSpring> Springs;

		[ReadOnly]
		public NativeArray<BlittableJoint> Joints;

		[ReadOnly]
		public NativeArray<BlittableCollider> Colliders;

		[NativeDisableParallelForRestriction]
		public NativeArray<BlittableLogic> Logics;

		[NativeDisableParallelForRestriction]
		public NativeArray<BlittableTransform> Transforms;

		public float DeltaTime;

		public unsafe void Execute(int index)
		{
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_0297: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0379: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0365: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_0321: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03de: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0477: Unknown result type (might be due to invalid IL or missing references)
			//IL_047e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0485: Unknown result type (might be due to invalid IL or missing references)
			//IL_048a: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Unknown result type (might be due to invalid IL or missing references)
			//IL_049d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Unknown result type (might be due to invalid IL or missing references)
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_042a: Unknown result type (might be due to invalid IL or missing references)
			//IL_042f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0436: Unknown result type (might be due to invalid IL or missing references)
			//IL_043a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0441: Unknown result type (might be due to invalid IL or missing references)
			//IL_0448: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0452: Unknown result type (might be due to invalid IL or missing references)
			//IL_0457: Unknown result type (might be due to invalid IL or missing references)
			//IL_0465: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			BlittableSpring blittableSpring = Springs[index];
			int transformIndexOffset = blittableSpring.transformIndexOffset;
			BlittableSpan colliderSpan = blittableSpring.colliderSpan;
			BlittableSpan logicSpan = blittableSpring.logicSpan;
			for (int i = logicSpan.startIndex; i < logicSpan.startIndex + logicSpan.count; i++)
			{
				BlittableLogic blittableLogic = Logics[i];
				BlittableJoint joint = Joints[i];
				BlittableTransform blittableTransform = Transforms[blittableLogic.headTransformIndex + transformIndexOffset];
				BlittableTransform? blittableTransform2 = ((blittableLogic.parentTransformIndex >= 0) ? new BlittableTransform?(Transforms[blittableLogic.parentTransformIndex + transformIndexOffset]) : null);
				BlittableTransform? blittableTransform3 = ((blittableSpring.centerTransformIndex >= 0) ? new BlittableTransform?(Transforms[blittableSpring.centerTransformIndex + transformIndexOffset]) : null);
				BlittableTransform value;
				if (blittableTransform2.HasValue)
				{
					value = blittableTransform2.Value;
					blittableTransform.position = ((Matrix4x4)(ref value.localToWorldMatrix)).MultiplyPoint3x4(blittableTransform.localPosition);
					blittableTransform.rotation = blittableTransform2.Value.rotation * blittableTransform.localRotation;
				}
				Vector3 val;
				if (!blittableTransform3.HasValue)
				{
					val = blittableLogic.currentTail;
				}
				else
				{
					value = blittableTransform3.Value;
					val = ((Matrix4x4)(ref value.localToWorldMatrix)).MultiplyPoint3x4(blittableLogic.currentTail);
				}
				Vector3 val2 = val;
				Vector3 val3;
				if (!blittableTransform3.HasValue)
				{
					val3 = blittableLogic.prevTail;
				}
				else
				{
					value = blittableTransform3.Value;
					val3 = ((Matrix4x4)(ref value.localToWorldMatrix)).MultiplyPoint3x4(blittableLogic.prevTail);
				}
				Vector3 val4 = val3;
				Quaternion val5 = blittableTransform2?.rotation ?? Quaternion.identity;
				Vector3 val6 = (joint.gravityDir * joint.gravityPower + blittableSpring.ExternalData->ExternalForce) * DeltaTime;
				Vector3 val7 = val2 + (val2 - val4) * (1f - joint.dragForce) + val5 * blittableLogic.localRotation * blittableLogic.boneAxis * joint.stiffnessForce * DeltaTime + val6;
				Vector3 position = blittableTransform.position;
				Vector3 val8 = val7 - blittableTransform.position;
				val7 = position + ((Vector3)(ref val8)).normalized * blittableLogic.length;
				for (int j = colliderSpan.startIndex; j < colliderSpan.startIndex + colliderSpan.count; j++)
				{
					BlittableCollider collider = Colliders[j];
					BlittableTransform blittableTransform4 = Transforms[collider.transformIndex + transformIndexOffset];
					Vector3 lossyScale = ((Matrix4x4)(ref blittableTransform4.localToWorldMatrix)).lossyScale;
					float maxColliderScale = Mathf.Max(Mathf.Max(Mathf.Abs(lossyScale.x), Mathf.Abs(lossyScale.y)), Mathf.Abs(lossyScale.z));
					Vector3 worldPosition = ((Matrix4x4)(ref blittableTransform4.localToWorldMatrix)).MultiplyPoint3x4(collider.offset);
					Vector3 worldTail = ((Matrix4x4)(ref blittableTransform4.localToWorldMatrix)).MultiplyPoint3x4(collider.tail);
					switch (collider.colliderType)
					{
					case BlittableColliderType.Sphere:
						ResolveSphereCollision(joint, collider, worldPosition, blittableTransform, maxColliderScale, blittableLogic, ref val7);
						break;
					case BlittableColliderType.Capsule:
						ResolveCapsuleCollision(worldTail, worldPosition, blittableTransform, joint, collider, maxColliderScale, blittableLogic, ref val7);
						break;
					}
				}
				Vector3 prevTail;
				if (!blittableTransform3.HasValue)
				{
					prevTail = val2;
				}
				else
				{
					value = blittableTransform3.Value;
					prevTail = ((Matrix4x4)(ref value.worldToLocalMatrix)).MultiplyPoint3x4(val2);
				}
				blittableLogic.prevTail = prevTail;
				Vector3 currentTail;
				if (!blittableTransform3.HasValue)
				{
					currentTail = val7;
				}
				else
				{
					value = blittableTransform3.Value;
					currentTail = ((Matrix4x4)(ref value.worldToLocalMatrix)).MultiplyPoint3x4(val7);
				}
				blittableLogic.currentTail = currentTail;
				Quaternion val9 = val5 * blittableLogic.localRotation;
				blittableTransform.rotation = Quaternion.FromToRotation(val9 * blittableLogic.boneAxis, val7 - blittableTransform.position) * val9;
				if (blittableTransform2.HasValue)
				{
					Matrix4x4 localToWorldMatrix = blittableTransform2.Value.localToWorldMatrix;
					blittableTransform.localRotation = Normalize(Quaternion.Inverse(blittableTransform2.Value.rotation) * blittableTransform.rotation);
					blittableTransform.localToWorldMatrix = localToWorldMatrix * Matrix4x4.TRS(blittableTransform.localPosition, blittableTransform.localRotation, blittableTransform.localScale);
					blittableTransform.worldToLocalMatrix = ((Matrix4x4)(ref blittableTransform.localToWorldMatrix)).inverse;
				}
				else
				{
					blittableTransform.localToWorldMatrix = Matrix4x4.TRS(blittableTransform.position, blittableTransform.rotation, blittableTransform.localScale);
					blittableTransform.worldToLocalMatrix = ((Matrix4x4)(ref blittableTransform.localToWorldMatrix)).inverse;
					blittableTransform.localRotation = blittableTransform.rotation;
				}
				Transforms[blittableLogic.headTransformIndex + transformIndexOffset] = blittableTransform;
				Logics[i] = blittableLogic;
			}
		}

		private static Quaternion Normalize(Quaternion q)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			float num = (float)Math.Sqrt(Quaternion.Dot(q, q));
			return (Quaternion)((num < float.Epsilon) ? Quaternion.identity : new Quaternion(q.x / num, q.y / num, q.z / num, q.w / num));
		}

		private static void ResolveCapsuleCollision(Vector3 worldTail, Vector3 worldPosition, BlittableTransform headTransform, BlittableJoint joint, BlittableCollider collider, float maxColliderScale, BlittableLogic logic, ref Vector3 nextTail)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = worldTail - worldPosition;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			Vector3 val2 = headTransform.position - worldPosition;
			float num = Vector3.Dot(normalized, val2);
			if (num <= 0f)
			{
				ResolveSphereCollision(joint, collider, worldPosition, headTransform, maxColliderScale, logic, ref nextTail);
			}
			float num2 = num / ((Vector3)(ref normalized)).magnitude;
			if (num2 >= 1f)
			{
				ResolveSphereCollision(joint, collider, worldTail, headTransform, maxColliderScale, logic, ref nextTail);
			}
			Vector3 worldPosition2 = worldPosition + normalized * num2;
			ResolveSphereCollision(joint, collider, worldPosition2, headTransform, maxColliderScale, logic, ref nextTail);
		}

		private static void ResolveSphereCollision(BlittableJoint joint, BlittableCollider collider, Vector3 worldPosition, BlittableTransform headTransform, float maxColliderScale, BlittableLogic logic, ref Vector3 nextTail)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			float num = joint.radius + collider.radius * maxColliderScale;
			if (Vector3.SqrMagnitude(nextTail - worldPosition) <= num * num)
			{
				Vector3 val = nextTail - worldPosition;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				Vector3 val2 = worldPosition + normalized * num;
				Vector3 position = headTransform.position;
				val = val2 - headTransform.position;
				nextTail = position + ((Vector3)(ref val)).normalized * logic.length;
			}
		}
	}
}
namespace UniVRM10.FastSpringBones.Blittables
{
	[Serializable]
	public struct BlittableCollider
	{
		public BlittableColliderType colliderType;

		public Vector3 offset;

		public float radius;

		public Vector3 tail;

		public int transformIndex;
	}
	public enum BlittableColliderType
	{
		Sphere,
		Capsule
	}
	public struct BlittableExternalData
	{
		public Vector3 ExternalForce;
	}
	[Serializable]
	public struct BlittableJoint
	{
		public float stiffnessForce;

		public float gravityPower;

		public Vector3 gravityDir;

		public float dragForce;

		public float radius;
	}
	[Serializable]
	public struct BlittableLogic
	{
		public int parentTransformIndex;

		public int headTransformIndex;

		public float length;

		public Vector3 currentTail;

		public Vector3 prevTail;

		public Quaternion localRotation;

		public Vector3 boneAxis;
	}
	[Serializable]
	public struct BlittableSpan
	{
		public int startIndex;

		public int count;
	}
	[Serializable]
	public struct BlittableSpring
	{
		public BlittableSpan colliderSpan;

		public BlittableSpan logicSpan;

		public int centerTransformIndex;

		public int transformIndexOffset;

		public unsafe BlittableExternalData* ExternalData;
	}
	[Serializable]
	public struct BlittableTransform
	{
		public Vector3 position;

		public Quaternion rotation;

		public Vector3 localPosition;

		public Quaternion localRotation;

		public Vector3 localScale;

		public Matrix4x4 localToWorldMatrix;

		public Matrix4x4 worldToLocalMatrix;
	}
}

BepInEx/plugins/MToon.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[383]
		{
			0, 0, 0, 1, 0, 0, 0, 51, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			92, 77, 84, 111, 111, 110, 92, 77, 84, 111,
			111, 110, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 69, 110, 117, 109, 115, 46, 99, 115, 0,
			0, 0, 13, 0, 0, 0, 61, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 86, 82, 77, 92,
			77, 84, 111, 111, 110, 92, 77, 84, 111, 111,
			110, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			77, 84, 111, 111, 110, 68, 101, 102, 105, 110,
			105, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 51, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 86, 82, 77, 92, 77,
			84, 111, 111, 110, 92, 77, 84, 111, 111, 110,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 85,
			116, 105, 108, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 57, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 86, 82, 77, 92, 77, 84,
			111, 111, 110, 92, 77, 84, 111, 111, 110, 92,
			83, 99, 114, 105, 112, 116, 115, 92, 85, 116,
			105, 108, 115, 71, 101, 116, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 57,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 92, 86,
			82, 77, 92, 77, 84, 111, 111, 110, 92, 77,
			84, 111, 111, 110, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 85, 116, 105, 108, 115, 83, 101,
			116, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 58, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 86, 82, 77, 92, 77, 84,
			111, 111, 110, 92, 77, 84, 111, 111, 110, 92,
			83, 99, 114, 105, 112, 116, 115, 92, 85, 116,
			105, 108, 115, 86, 101, 114, 115, 105, 111, 110,
			46, 99, 115
		};
		result.TypesData = new byte[480]
		{
			0, 0, 0, 0, 28, 77, 84, 111, 111, 110,
			124, 82, 101, 110, 100, 101, 114, 81, 117, 101,
			117, 101, 82, 101, 113, 117, 105, 114, 101, 109,
			101, 110, 116, 0, 0, 0, 0, 21, 77, 84,
			111, 111, 110, 124, 77, 84, 111, 111, 110, 68,
			101, 102, 105, 110, 105, 116, 105, 111, 110, 0,
			0, 0, 0, 20, 77, 84, 111, 111, 110, 124,
			77, 101, 116, 97, 68, 101, 102, 105, 110, 105,
			116, 105, 111, 110, 0, 0, 0, 0, 25, 77,
			84, 111, 111, 110, 124, 82, 101, 110, 100, 101,
			114, 105, 110, 103, 68, 101, 102, 105, 110, 105,
			116, 105, 111, 110, 0, 0, 0, 0, 21, 77,
			84, 111, 111, 110, 124, 67, 111, 108, 111, 114,
			68, 101, 102, 105, 110, 105, 116, 105, 111, 110,
			0, 0, 0, 0, 24, 77, 84, 111, 111, 110,
			124, 76, 105, 103, 104, 116, 105, 110, 103, 68,
			101, 102, 105, 110, 105, 116, 105, 111, 110, 0,
			0, 0, 0, 33, 77, 84, 111, 111, 110, 124,
			76, 105, 116, 65, 110, 100, 83, 104, 97, 100,
			101, 77, 105, 120, 105, 110, 103, 68, 101, 102,
			105, 110, 105, 116, 105, 111, 110, 0, 0, 0,
			0, 33, 77, 84, 111, 111, 110, 124, 76, 105,
			103, 104, 116, 105, 110, 103, 73, 110, 102, 108,
			117, 101, 110, 99, 101, 68, 101, 102, 105, 110,
			105, 116, 105, 111, 110, 0, 0, 0, 0, 24,
			77, 84, 111, 111, 110, 124, 69, 109, 105, 115,
			115, 105, 111, 110, 68, 101, 102, 105, 110, 105,
			116, 105, 111, 110, 0, 0, 0, 0, 22, 77,
			84, 111, 111, 110, 124, 77, 97, 116, 67, 97,
			112, 68, 101, 102, 105, 110, 105, 116, 105, 111,
			110, 0, 0, 0, 0, 19, 77, 84, 111, 111,
			110, 124, 82, 105, 109, 68, 101, 102, 105, 110,
			105, 116, 105, 111, 110, 0, 0, 0, 0, 22,
			77, 84, 111, 111, 110, 124, 78, 111, 114, 109,
			97, 108, 68, 101, 102, 105, 110, 105, 116, 105,
			111, 110, 0, 0, 0, 0, 23, 77, 84, 111,
			111, 110, 124, 79, 117, 116, 108, 105, 110, 101,
			68, 101, 102, 105, 110, 105, 116, 105, 111, 110,
			0, 0, 0, 0, 31, 77, 84, 111, 111, 110,
			124, 84, 101, 120, 116, 117, 114, 101, 85, 118,
			67, 111, 111, 114, 100, 115, 68, 101, 102, 105,
			110, 105, 116, 105, 111, 110, 1, 0, 0, 0,
			11, 77, 84, 111, 111, 110, 124, 85, 116, 105,
			108, 115, 1, 0, 0, 0, 11, 77, 84, 111,
			111, 110, 124, 85, 116, 105, 108, 115, 1, 0,
			0, 0, 11, 77, 84, 111, 111, 110, 124, 85,
			116, 105, 108, 115, 1, 0, 0, 0, 11, 77,
			84, 111, 111, 110, 124, 85, 116, 105, 108, 115
		};
		result.TotalFiles = 6;
		result.TotalTypes = 18;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace MToon;

public enum DebugMode
{
	None,
	Normal,
	LitShadeRate
}
public enum OutlineColorMode
{
	FixedColor,
	MixedLighting
}
public enum OutlineWidthMode
{
	None,
	WorldCoordinates,
	ScreenCoordinates
}
public enum RenderMode
{
	Opaque,
	Cutout,
	Transparent,
	TransparentWithZWrite
}
public enum CullMode
{
	Off,
	Front,
	Back
}
public struct RenderQueueRequirement
{
	public int DefaultValue;

	public int MinValue;

	public int MaxValue;
}
public class MToonDefinition
{
	public MetaDefinition Meta;

	public RenderingDefinition Rendering;

	public ColorDefinition Color;

	public LightingDefinition Lighting;

	public EmissionDefinition Emission;

	public MatCapDefinition MatCap;

	public RimDefinition Rim;

	public OutlineDefinition Outline;

	public TextureUvCoordsDefinition TextureOption;
}
public class MetaDefinition
{
	public string Implementation;

	public int VersionNumber;
}
public class RenderingDefinition
{
	public RenderMode RenderMode;

	public CullMode CullMode;

	public int RenderQueueOffsetNumber;
}
public class ColorDefinition
{
	public Color LitColor;

	public Texture2D LitMultiplyTexture;

	public Color ShadeColor;

	public Texture2D ShadeMultiplyTexture;

	public float CutoutThresholdValue;
}
public class LightingDefinition
{
	public LitAndShadeMixingDefinition LitAndShadeMixing;

	public LightingInfluenceDefinition LightingInfluence;

	public NormalDefinition Normal;
}
public class LitAndShadeMixingDefinition
{
	public float ShadingShiftValue;

	public float ShadingToonyValue;

	public float ShadowReceiveMultiplierValue;

	public Texture2D ShadowReceiveMultiplierMultiplyTexture;

	public float LitAndShadeMixingMultiplierValue;

	public Texture2D LitAndShadeMixingMultiplierMultiplyTexture;
}
public class LightingInfluenceDefinition
{
	public float LightColorAttenuationValue;

	public float GiIntensityValue;
}
public class EmissionDefinition
{
	public Color EmissionColor;

	public Texture2D EmissionMultiplyTexture;
}
public class MatCapDefinition
{
	public Texture2D AdditiveTexture;
}
public class RimDefinition
{
	public Color RimColor;

	public Texture2D RimMultiplyTexture;

	public float RimLightingMixValue;

	public float RimFresnelPowerValue;

	public float RimLiftValue;
}
public class NormalDefinition
{
	public Texture2D NormalTexture;

	public float NormalScaleValue;
}
public class OutlineDefinition
{
	public OutlineWidthMode OutlineWidthMode;

	public float OutlineWidthValue;

	public Texture2D OutlineWidthMultiplyTexture;

	public float OutlineScaledMaxDistanceValue;

	public OutlineColorMode OutlineColorMode;

	public Color OutlineColor;

	public float OutlineLightingMixValue;
}
public class TextureUvCoordsDefinition
{
	public Vector2 MainTextureLeftBottomOriginScale;

	public Vector2 MainTextureLeftBottomOriginOffset;

	public Texture2D UvAnimationMaskTexture;

	public float UvAnimationScrollXSpeedValue;

	public float UvAnimationScrollYSpeedValue;

	public float UvAnimationRotationSpeedValue;
}
public static class Utils
{
	public const string ShaderName = "VRM/MToon";

	public const string PropVersion = "_MToonVersion";

	public const string PropDebugMode = "_DebugMode";

	public const string PropOutlineWidthMode = "_OutlineWidthMode";

	public const string PropOutlineColorMode = "_OutlineColorMode";

	public const string PropBlendMode = "_BlendMode";

	public const string PropCullMode = "_CullMode";

	public const string PropOutlineCullMode = "_OutlineCullMode";

	public const string PropCutoff = "_Cutoff";

	public const string PropColor = "_Color";

	public const string PropShadeColor = "_ShadeColor";

	public const string PropMainTex = "_MainTex";

	public const string PropShadeTexture = "_ShadeTexture";

	public const string PropBumpScale = "_BumpScale";

	public const string PropBumpMap = "_BumpMap";

	public const string PropReceiveShadowRate = "_ReceiveShadowRate";

	public const string PropReceiveShadowTexture = "_ReceiveShadowTexture";

	public const string PropShadingGradeRate = "_ShadingGradeRate";

	public const string PropShadingGradeTexture = "_ShadingGradeTexture";

	public const string PropShadeShift = "_ShadeShift";

	public const string PropShadeToony = "_ShadeToony";

	public const string PropLightColorAttenuation = "_LightColorAttenuation";

	public const string PropIndirectLightIntensity = "_IndirectLightIntensity";

	public const string PropRimColor = "_RimColor";

	public const string PropRimTexture = "_RimTexture";

	public const string PropRimLightingMix = "_RimLightingMix";

	public const string PropRimFresnelPower = "_RimFresnelPower";

	public const string PropRimLift = "_RimLift";

	public const string PropSphereAdd = "_SphereAdd";

	public const string PropEmissionColor = "_EmissionColor";

	public const string PropEmissionMap = "_EmissionMap";

	public const string PropOutlineWidthTexture = "_OutlineWidthTexture";

	public const string PropOutlineWidth = "_OutlineWidth";

	public const string PropOutlineScaledMaxDistance = "_OutlineScaledMaxDistance";

	public const string PropOutlineColor = "_OutlineColor";

	public const string PropOutlineLightingMix = "_OutlineLightingMix";

	public const string PropUvAnimMaskTexture = "_UvAnimMaskTexture";

	public const string PropUvAnimScrollX = "_UvAnimScrollX";

	public const string PropUvAnimScrollY = "_UvAnimScrollY";

	public const string PropUvAnimRotation = "_UvAnimRotation";

	public const string PropSrcBlend = "_SrcBlend";

	public const string PropDstBlend = "_DstBlend";

	public const string PropZWrite = "_ZWrite";

	public const string PropAlphaToMask = "_AlphaToMask";

	public const string KeyNormalMap = "_NORMALMAP";

	public const string KeyAlphaTestOn = "_ALPHATEST_ON";

	public const string KeyAlphaBlendOn = "_ALPHABLEND_ON";

	public const string KeyAlphaPremultiplyOn = "_ALPHAPREMULTIPLY_ON";

	public const string KeyOutlineWidthWorld = "MTOON_OUTLINE_WIDTH_WORLD";

	public const string KeyOutlineWidthScreen = "MTOON_OUTLINE_WIDTH_SCREEN";

	public const string KeyOutlineColorFixed = "MTOON_OUTLINE_COLOR_FIXED";

	public const string KeyOutlineColorMixed = "MTOON_OUTLINE_COLOR_MIXED";

	public const string KeyDebugNormal = "MTOON_DEBUG_NORMAL";

	public const string KeyDebugLitShadeRate = "MTOON_DEBUG_LITSHADERATE";

	public const string TagRenderTypeKey = "RenderType";

	public const string TagRenderTypeValueOpaque = "Opaque";

	public const string TagRenderTypeValueTransparentCutout = "TransparentCutout";

	public const string TagRenderTypeValueTransparent = "Transparent";

	public const int DisabledIntValue = 0;

	public const int EnabledIntValue = 1;

	public const string Implementation = "Santarh/MToon";

	public const int VersionNumber = 39;

	public static RenderQueueRequirement GetRenderQueueRequirement(RenderMode renderMode)
	{
		switch (renderMode)
		{
		case RenderMode.Opaque:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = -1;
			result.MinValue = -1;
			result.MaxValue = -1;
			return result;
		}
		case RenderMode.Cutout:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = 2450;
			result.MinValue = 2450;
			result.MaxValue = 2450;
			return result;
		}
		case RenderMode.Transparent:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = 3000;
			result.MinValue = 2951;
			result.MaxValue = 3000;
			return result;
		}
		case RenderMode.TransparentWithZWrite:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = 2501;
			result.MinValue = 2501;
			result.MaxValue = 2550;
			return result;
		}
		default:
			throw new ArgumentOutOfRangeException("renderMode", renderMode, null);
		}
	}

	public static MToonDefinition GetMToonParametersFromMaterial(Material material)
	{
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0299: Unknown result type (might be due to invalid IL or missing references)
		//IL_029e: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		return new MToonDefinition
		{
			Meta = new MetaDefinition
			{
				Implementation = "Santarh/MToon",
				VersionNumber = material.GetInt("_MToonVersion")
			},
			Rendering = new RenderingDefinition
			{
				RenderMode = GetBlendMode(material),
				CullMode = GetCullMode(material),
				RenderQueueOffsetNumber = GetRenderQueueOffset(material, GetRenderQueueOriginMode(material))
			},
			Color = new ColorDefinition
			{
				LitColor = GetColor(material, "_Color"),
				LitMultiplyTexture = GetTexture(material, "_MainTex"),
				ShadeColor = GetColor(material, "_ShadeColor"),
				ShadeMultiplyTexture = GetTexture(material, "_ShadeTexture"),
				CutoutThresholdValue = GetValue(material, "_Cutoff")
			},
			Lighting = new LightingDefinition
			{
				LitAndShadeMixing = new LitAndShadeMixingDefinition
				{
					ShadingShiftValue = GetValue(material, "_ShadeShift"),
					ShadingToonyValue = GetValue(material, "_ShadeToony"),
					ShadowReceiveMultiplierValue = GetValue(material, "_ReceiveShadowRate"),
					ShadowReceiveMultiplierMultiplyTexture = GetTexture(material, "_ReceiveShadowTexture"),
					LitAndShadeMixingMultiplierValue = GetValue(material, "_ShadingGradeRate"),
					LitAndShadeMixingMultiplierMultiplyTexture = GetTexture(material, "_ShadingGradeTexture")
				},
				LightingInfluence = new LightingInfluenceDefinition
				{
					LightColorAttenuationValue = GetValue(material, "_LightColorAttenuation"),
					GiIntensityValue = GetValue(material, "_IndirectLightIntensity")
				},
				Normal = new NormalDefinition
				{
					NormalTexture = GetTexture(material, "_BumpMap"),
					NormalScaleValue = GetValue(material, "_BumpScale")
				}
			},
			Emission = new EmissionDefinition
			{
				EmissionColor = GetColor(material, "_EmissionColor"),
				EmissionMultiplyTexture = GetTexture(material, "_EmissionMap")
			},
			MatCap = new MatCapDefinition
			{
				AdditiveTexture = GetTexture(material, "_SphereAdd")
			},
			Rim = new RimDefinition
			{
				RimColor = GetColor(material, "_RimColor"),
				RimMultiplyTexture = GetTexture(material, "_RimTexture"),
				RimLightingMixValue = GetValue(material, "_RimLightingMix"),
				RimFresnelPowerValue = GetValue(material, "_RimFresnelPower"),
				RimLiftValue = GetValue(material, "_RimLift")
			},
			Outline = new OutlineDefinition
			{
				OutlineWidthMode = GetOutlineWidthMode(material),
				OutlineWidthValue = GetValue(material, "_OutlineWidth"),
				OutlineWidthMultiplyTexture = GetTexture(material, "_OutlineWidthTexture"),
				OutlineScaledMaxDistanceValue = GetValue(material, "_OutlineScaledMaxDistance"),
				OutlineColorMode = GetOutlineColorMode(material),
				OutlineColor = GetColor(material, "_OutlineColor"),
				OutlineLightingMixValue = GetValue(material, "_OutlineLightingMix")
			},
			TextureOption = new TextureUvCoordsDefinition
			{
				MainTextureLeftBottomOriginScale = material.GetTextureScale("_MainTex"),
				MainTextureLeftBottomOriginOffset = material.GetTextureOffset("_MainTex"),
				UvAnimationMaskTexture = GetTexture(material, "_UvAnimMaskTexture"),
				UvAnimationScrollXSpeedValue = GetValue(material, "_UvAnimScrollX"),
				UvAnimationScrollYSpeedValue = GetValue(material, "_UvAnimScrollY"),
				UvAnimationRotationSpeedValue = GetValue(material, "_UvAnimRotation")
			}
		};
	}

	private static float GetValue(Material material, string propertyName)
	{
		return material.GetFloat(propertyName);
	}

	private static Color GetColor(Material material, string propertyName)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		return material.GetColor(propertyName);
	}

	private static Texture2D GetTexture(Material material, string propertyName)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Expected O, but got Unknown
		return (Texture2D)material.GetTexture(propertyName);
	}

	private static RenderMode GetBlendMode(Material material)
	{
		if (material.IsKeywordEnabled("_ALPHATEST_ON"))
		{
			return RenderMode.Cutout;
		}
		if (material.IsKeywordEnabled("_ALPHABLEND_ON"))
		{
			switch (material.GetInt("_ZWrite"))
			{
			case 1:
				return RenderMode.TransparentWithZWrite;
			case 0:
				return RenderMode.Transparent;
			default:
				Debug.LogWarning((object)"Invalid ZWrite Int Value.");
				return RenderMode.Transparent;
			}
		}
		return RenderMode.Opaque;
	}

	private static CullMode GetCullMode(Material material)
	{
		switch ((CullMode)material.GetInt("_CullMode"))
		{
		case CullMode.Off:
			return CullMode.Off;
		case CullMode.Front:
			return CullMode.Front;
		case CullMode.Back:
			return CullMode.Back;
		default:
			Debug.LogWarning((object)"Invalid CullMode.");
			return CullMode.Back;
		}
	}

	private static OutlineWidthMode GetOutlineWidthMode(Material material)
	{
		if (material.IsKeywordEnabled("MTOON_OUTLINE_WIDTH_WORLD"))
		{
			return OutlineWidthMode.WorldCoordinates;
		}
		if (material.IsKeywordEnabled("MTOON_OUTLINE_WIDTH_SCREEN"))
		{
			return OutlineWidthMode.ScreenCoordinates;
		}
		return OutlineWidthMode.None;
	}

	private static OutlineColorMode GetOutlineColorMode(Material material)
	{
		if (material.IsKeywordEnabled("MTOON_OUTLINE_COLOR_FIXED"))
		{
			return OutlineColorMode.FixedColor;
		}
		if (material.IsKeywordEnabled("MTOON_OUTLINE_COLOR_MIXED"))
		{
			return OutlineColorMode.MixedLighting;
		}
		return OutlineColorMode.FixedColor;
	}

	private static RenderMode GetRenderQueueOriginMode(Material material)
	{
		return GetBlendMode(material);
	}

	private static int GetRenderQueueOffset(Material material, RenderMode originMode)
	{
		int renderQueue = material.renderQueue;
		RenderQueueRequirement renderQueueRequirement = GetRenderQueueRequirement(originMode);
		if (renderQueue < renderQueueRequirement.MinValue || renderQueue > renderQueueRequirement.MaxValue)
		{
			return 0;
		}
		return renderQueue - renderQueueRequirement.DefaultValue;
	}

	public static void SetMToonParametersToMaterial(Material material, MToonDefinition parameters)
	{
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_027e: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
		MetaDefinition meta = parameters.Meta;
		SetValue(material, "_MToonVersion", meta.VersionNumber);
		RenderingDefinition rendering = parameters.Rendering;
		SetRenderMode(material, rendering.RenderMode, rendering.RenderQueueOffsetNumber, useDefaultRenderQueue: false);
		SetCullMode(material, rendering.CullMode);
		ColorDefinition color = parameters.Color;
		SetColor(material, "_Color", color.LitColor);
		SetTexture(material, "_MainTex", (Texture)(object)color.LitMultiplyTexture);
		SetColor(material, "_ShadeColor", color.ShadeColor);
		SetTexture(material, "_ShadeTexture", (Texture)(object)color.ShadeMultiplyTexture);
		SetValue(material, "_Cutoff", color.CutoutThresholdValue);
		LightingDefinition lighting = parameters.Lighting;
		LitAndShadeMixingDefinition litAndShadeMixing = lighting.LitAndShadeMixing;
		SetValue(material, "_ShadeShift", litAndShadeMixing.ShadingShiftValue);
		SetValue(material, "_ShadeToony", litAndShadeMixing.ShadingToonyValue);
		SetValue(material, "_ReceiveShadowRate", litAndShadeMixing.ShadowReceiveMultiplierValue);
		SetTexture(material, "_ReceiveShadowTexture", (Texture)(object)litAndShadeMixing.ShadowReceiveMultiplierMultiplyTexture);
		SetValue(material, "_ShadingGradeRate", litAndShadeMixing.LitAndShadeMixingMultiplierValue);
		SetTexture(material, "_ShadingGradeTexture", (Texture)(object)litAndShadeMixing.LitAndShadeMixingMultiplierMultiplyTexture);
		LightingInfluenceDefinition lightingInfluence = lighting.LightingInfluence;
		SetValue(material, "_LightColorAttenuation", lightingInfluence.LightColorAttenuationValue);
		SetValue(material, "_IndirectLightIntensity", lightingInfluence.GiIntensityValue);
		NormalDefinition normal = lighting.Normal;
		SetNormalMapping(material, (Texture)(object)normal.NormalTexture, normal.NormalScaleValue);
		EmissionDefinition emission = parameters.Emission;
		SetColor(material, "_EmissionColor", emission.EmissionColor);
		SetTexture(material, "_EmissionMap", (Texture)(object)emission.EmissionMultiplyTexture);
		MatCapDefinition matCap = parameters.MatCap;
		SetTexture(material, "_SphereAdd", (Texture)(object)matCap.AdditiveTexture);
		RimDefinition rim = parameters.Rim;
		SetColor(material, "_RimColor", rim.RimColor);
		SetTexture(material, "_RimTexture", (Texture)(object)rim.RimMultiplyTexture);
		SetValue(material, "_RimLightingMix", rim.RimLightingMixValue);
		SetValue(material, "_RimFresnelPower", rim.RimFresnelPowerValue);
		SetValue(material, "_RimLift", rim.RimLiftValue);
		OutlineDefinition outline = parameters.Outline;
		SetValue(material, "_OutlineWidth", outline.OutlineWidthValue);
		SetTexture(material, "_OutlineWidthTexture", (Texture)(object)outline.OutlineWidthMultiplyTexture);
		SetValue(material, "_OutlineScaledMaxDistance", outline.OutlineScaledMaxDistanceValue);
		SetColor(material, "_OutlineColor", outline.OutlineColor);
		SetValue(material, "_OutlineLightingMix", outline.OutlineLightingMixValue);
		SetOutlineMode(material, outline.OutlineWidthMode, outline.OutlineColorMode);
		TextureUvCoordsDefinition textureOption = parameters.TextureOption;
		material.SetTextureScale("_MainTex", textureOption.MainTextureLeftBottomOriginScale);
		material.SetTextureOffset("_MainTex", textureOption.MainTextureLeftBottomOriginOffset);
		material.SetTexture("_UvAnimMaskTexture", (Texture)(object)textureOption.UvAnimationMaskTexture);
		material.SetFloat("_UvAnimScrollX", textureOption.UvAnimationScrollXSpeedValue);
		material.SetFloat("_UvAnimScrollY", textureOption.UvAnimationScrollYSpeedValue);
		material.SetFloat("_UvAnimRotation", textureOption.UvAnimationRotationSpeedValue);
		ValidateProperties(material);
	}

	public static void ValidateProperties(Material material, bool isBlendModeChangedByUser = false)
	{
		SetRenderMode(material, (RenderMode)material.GetFloat("_BlendMode"), material.renderQueue - GetRenderQueueRequirement((RenderMode)material.GetFloat("_BlendMode")).DefaultValue, isBlendModeChangedByUser);
		SetNormalMapping(material, material.GetTexture("_BumpMap"), material.GetFloat("_BumpScale"));
		SetOutlineMode(material, (OutlineWidthMode)material.GetFloat("_OutlineWidthMode"), (OutlineColorMode)material.GetFloat("_OutlineColorMode"));
		SetDebugMode(material, (DebugMode)material.GetFloat("_DebugMode"));
		SetCullMode(material, (CullMode)material.GetFloat("_CullMode"));
		Texture texture = material.GetTexture("_MainTex");
		Texture texture2 = material.GetTexture("_ShadeTexture");
		if ((Object)(object)texture != (Object)null && (Object)(object)texture2 == (Object)null)
		{
			material.SetTexture("_ShadeTexture", texture);
		}
	}

	private static void SetDebugMode(Material material, DebugMode debugMode)
	{
		SetValue(material, "_DebugMode", (float)debugMode);
		switch (debugMode)
		{
		case DebugMode.None:
			SetKeyword(material, "MTOON_DEBUG_NORMAL", required: false);
			SetKeyword(material, "MTOON_DEBUG_LITSHADERATE", required: false);
			break;
		case DebugMode.Normal:
			SetKeyword(material, "MTOON_DEBUG_NORMAL", required: true);
			SetKeyword(material, "MTOON_DEBUG_LITSHADERATE", required: false);
			break;
		case DebugMode.LitShadeRate:
			SetKeyword(material, "MTOON_DEBUG_NORMAL", required: false);
			SetKeyword(material, "MTOON_DEBUG_LITSHADERATE", required: true);
			break;
		}
	}

	private static void SetRenderMode(Material material, RenderMode renderMode, int renderQueueOffset, bool useDefaultRenderQueue)
	{
		SetValue(material, "_BlendMode", (float)renderMode);
		switch (renderMode)
		{
		case RenderMode.Opaque:
			material.SetOverrideTag("RenderType", "Opaque");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			material.SetInt("_AlphaToMask", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		case RenderMode.Cutout:
			material.SetOverrideTag("RenderType", "TransparentCutout");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			material.SetInt("_AlphaToMask", 1);
			SetKeyword(material, "_ALPHATEST_ON", required: true);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		case RenderMode.Transparent:
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt("_SrcBlend", 5);
			material.SetInt("_DstBlend", 10);
			material.SetInt("_ZWrite", 0);
			material.SetInt("_AlphaToMask", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: true);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		case RenderMode.TransparentWithZWrite:
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt("_SrcBlend", 5);
			material.SetInt("_DstBlend", 10);
			material.SetInt("_ZWrite", 1);
			material.SetInt("_AlphaToMask", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: true);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		}
		if (useDefaultRenderQueue)
		{
			material.renderQueue = GetRenderQueueRequirement(renderMode).DefaultValue;
			return;
		}
		RenderQueueRequirement renderQueueRequirement = GetRenderQueueRequirement(renderMode);
		material.renderQueue = Mathf.Clamp(renderQueueRequirement.DefaultValue + renderQueueOffset, renderQueueRequirement.MinValue, renderQueueRequirement.MaxValue);
	}

	private static void SetOutlineMode(Material material, OutlineWidthMode outlineWidthMode, OutlineColorMode outlineColorMode)
	{
		SetValue(material, "_OutlineWidthMode", (float)outlineWidthMode);
		SetValue(material, "_OutlineColorMode", (float)outlineColorMode);
		bool required = outlineColorMode == OutlineColorMode.FixedColor;
		bool required2 = outlineColorMode == OutlineColorMode.MixedLighting;
		switch (outlineWidthMode)
		{
		case OutlineWidthMode.None:
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_WORLD", required: false);
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_SCREEN", required: false);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_FIXED", required: false);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_MIXED", required: false);
			break;
		case OutlineWidthMode.WorldCoordinates:
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_WORLD", required: true);
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_SCREEN", required: false);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_FIXED", required);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_MIXED", required2);
			break;
		case OutlineWidthMode.ScreenCoordinates:
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_WORLD", required: false);
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_SCREEN", required: true);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_FIXED", required);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_MIXED", required2);
			break;
		}
	}

	private static void SetNormalMapping(Material material, Texture bumpMap, float bumpScale)
	{
		SetTexture(material, "_BumpMap", bumpMap);
		SetValue(material, "_BumpScale", bumpScale);
		SetKeyword(material, "_NORMALMAP", (Object)(object)bumpMap != (Object)null);
	}

	private static void SetCullMode(Material material, CullMode cullMode)
	{
		SetValue(material, "_CullMode", (float)cullMode);
		switch (cullMode)
		{
		case CullMode.Back:
			material.SetInt("_CullMode", 2);
			material.SetInt("_OutlineCullMode", 1);
			break;
		case CullMode.Front:
			material.SetInt("_CullMode", 1);
			material.SetInt("_OutlineCullMode", 2);
			break;
		case CullMode.Off:
			material.SetInt("_CullMode", 0);
			material.SetInt("_OutlineCullMode", 1);
			break;
		}
	}

	private static void SetValue(Material material, string propertyName, float val)
	{
		material.SetFloat(propertyName, val);
	}

	private static void SetColor(Material material, string propertyName, Color color)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		material.SetColor(propertyName, color);
	}

	private static void SetTexture(Material material, string propertyName, Texture texture)
	{
		material.SetTexture(propertyName, texture);
	}

	private static void SetKeyword(Material mat, string keyword, bool required)
	{
		if (required)
		{
			mat.EnableKeyword(keyword);
		}
		else
		{
			mat.DisableKeyword(keyword);
		}
	}
}

BepInEx/plugins/OomJan.BetterLethalVRM.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using BepInEx;
using GameNetcodeStuff;
using Microsoft.CodeAnalysis;
using UniGLTF;
using UniGLTF.Extensions.VRMC_materials_mtoon;
using UniVRM10;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
using VRMShaders;
using VRMShaders.VRM10.MToon10.Runtime;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("OomJan")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("MIT License")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BetterLethalVRM")]
[assembly: AssemblyTitle("OomJan.BetterLethalVRM")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace OomJan
{
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "OomJan.BetterLethalVRM";

		public const string PLUGIN_NAME = "BetterLethalVRM";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace OomJan.BetterLethalVRM
{
	[BepInPlugin("OomJan.BetterLethalVRM", "BetterLethalVRM", "1.0.0")]
	public class BetterLethalVRMManager : BaseUnityPlugin
	{
		private const string MODEL_PATH = "VRMs";

		private readonly SortedDictionary<ulong, BetterLethalVRMInstance> Instances = new SortedDictionary<ulong, BetterLethalVRMInstance>();

		private readonly SortedDictionary<ulong, PlayerControllerB> PlayersBySteamID = new SortedDictionary<ulong, PlayerControllerB>();

		private Material HDRP_BaseMaterial;

		private GameObject PlayerPrefab;

		private float PlayerPrefabHeight;

		private PlayerControllerB[] PlayerControllers;

		private bool RequirePlayerUpdate;

		public void Awake()
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			AssetBundle val = null;
			try
			{
				UriBuilder uriBuilder = new UriBuilder(Assembly.GetExecutingAssembly().CodeBase);
				string fileName = Uri.UnescapeDataString(uriBuilder.Path);
				string text = Path.Combine(new FileInfo(fileName).Directory.FullName, "bundle.asset");
				if (File.Exists(text))
				{
					val = AssetBundle.LoadFromFile(text);
				}
			}
			catch (Exception)
			{
				val = null;
			}
			if ((Object)(object)val == (Object)null)
			{
				((Behaviour)this).enabled = false;
				Debug.LogError((object)"BetterLethalVRM failed to load it's asset bundle, this mod will not function");
				return;
			}
			HDRPVrm10MToonMaterialImporter.MToonReplacementShader = (Shader)val.LoadAsset("MToonParameterShader");
			if ((Object)(object)HDRPVrm10MToonMaterialImporter.MToonReplacementShader == (Object)null)
			{
				((Behaviour)this).enabled = false;
				Debug.LogError((object)"BetterLethalVRM failed to load the MToon replacement shader, this mod will not function");
				return;
			}
			SceneManager.sceneLoaded += delegate
			{
				SceneLoad();
			};
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			if (!Directory.Exists("VRMs"))
			{
				Directory.CreateDirectory("VRMs");
			}
			if (!Directory.Exists("VRMs"))
			{
				((Behaviour)this).enabled = false;
				Debug.LogError((object)"BetterLethalVRM failed to create directory for models, this mod will not function");
			}
		}

		private void LateUpdate()
		{
			FindUpdatedIDs();
			FindMaskEnemies();
			AnimateBonePairs();
			if (RequirePlayerUpdate)
			{
				FindPlayerControllers();
				RequirePlayerUpdate = false;
			}
		}

		private void SceneLoad()
		{
			GameNetworkManager instance = GameNetworkManager.Instance;
			if (instance == null || !instance.currentLobby.HasValue)
			{
				foreach (BetterLethalVRMInstance value in Instances.Values)
				{
					if ((Object)(object)value.Vrm10Instance != (Object)null && (Object)(object)((Component)value.Vrm10Instance).gameObject != (Object)null)
					{
						Object.Destroy((Object)(object)((Component)value.Vrm10Instance).gameObject);
					}
				}
				PlayersBySteamID.Clear();
				Instances.Clear();
			}
			FindPlayerControllers();
			PreparePrefabs();
			RequirePlayerUpdate = true;
		}

		private void PreparePrefabs()
		{
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Expected O, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02be: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)PlayerPrefab == (Object)null)
			{
				PlayerControllerB val = ((IEnumerable<PlayerControllerB>)PlayerControllers).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB x) => ((Object)x).name == "Player"));
				if ((Object)(object)val != (Object)null)
				{
					((Component)val).gameObject.SetActive(false);
					PlayerPrefab = Object.Instantiate<GameObject>(((Component)val).gameObject);
					((Object)PlayerPrefab).name = "VRM T Pose Match";
					((Object)PlayerPrefab).hideFlags = (HideFlags)61;
					Material material = ((Renderer)GameObject.Find("CatwalkShip").GetComponent<MeshRenderer>()).material;
					HDRP_BaseMaterial = new Material(material);
					HDRP_BaseMaterial.SetFloat("_Smoothness", 0f);
					HDRP_BaseMaterial.SetFloat("_Metallic", 0f);
					HDRP_BaseMaterial.SetTextureScale("_BaseColorMap", Vector2.one);
					((Component)val).gameObject.SetActive(true);
					((Behaviour)PlayerPrefab.GetComponentInChildren<Animator>()).enabled = false;
					UnityExtensions.FindDescendant(PlayerPrefab.transform, "arm.L_upper").localRotation = Quaternion.Euler(0f, 90f, -10f);
					UnityExtensions.FindDescendant(PlayerPrefab.transform, "arm.R_upper").localRotation = Quaternion.Euler(-10f, 0f, 0f);
					UnityExtensions.FindDescendant(PlayerPrefab.transform, "thigh.L").localRotation = Quaternion.Euler(20f, 180f, 180f);
					UnityExtensions.FindDescendant(PlayerPrefab.transform, "thigh.R").localRotation = Quaternion.Euler(20f, 180f, 180f);
					UnityExtensions.FindDescendant(PlayerPrefab.transform, "hand.R").localRotation = Quaternion.Euler(0f, 90f, 0f);
					UnityExtensions.FindDescendant(PlayerPrefab.transform, "hand.L").localRotation = Quaternion.Euler(0f, 270f, 0f);
					Transform val2 = UnityExtensions.FindDescendant(PlayerPrefab.transform, "foot.L");
					Transform val3 = UnityExtensions.FindDescendant(PlayerPrefab.transform, "foot.R");
					Transform val4 = UnityExtensions.FindDescendant(PlayerPrefab.transform, "spine.004_end");
					Vector3 val5 = default(Vector3);
					((Vector3)(ref val5))..ctor(0f, ((val2.position + val3.position) / 2f).y, 0f);
					Vector3 val6 = default(Vector3);
					((Vector3)(ref val6))..ctor(0f, val4.position.y, 0f);
					PlayerPrefabHeight = Vector3.Distance(val5, val6);
					PlayerPrefab.transform.rotation = Quaternion.identity;
					Debug.Log((object)$"BetterLethalVRM base prefab set to {((Object)PlayerPrefab).name}, has a height of {PlayerPrefabHeight:0.###}");
				}
			}
		}

		private void FindPlayerControllers()
		{
			PlayerControllers = Object.FindObjectsOfType<PlayerControllerB>(true);
			Debug.Log((object)$"BetterLethalVRM found {PlayerControllers.Length} player controllers");
		}

		private void FindUpdatedIDs()
		{
			PlayerControllerB[] playerControllers = PlayerControllers;
			foreach (PlayerControllerB val in playerControllers)
			{
				if (val.playerSteamId == 0L)
				{
					continue;
				}
				if (PlayersBySteamID.ContainsKey(val.playerSteamId))
				{
					if (!val.disconnectedMidGame)
					{
						NetworkObject networkObject = ((NetworkBehaviour)val).NetworkObject;
						if (networkObject == null || networkObject.OwnerClientId != 0 || !(((Object)val).name != "Player"))
						{
							goto IL_00b3;
						}
					}
					if (Instances.TryGetValue(val.playerSteamId, out BetterLethalVRMInstance value))
					{
						Object.Destroy((Object)(object)((Component)value.Vrm10Instance).gameObject);
					}
					PlayersBySteamID.Remove(val.playerSteamId);
					Instances.Remove(val.playerSteamId);
					continue;
				}
				goto IL_00b3;
				IL_00b3:
				NetworkObject networkObject2 = ((NetworkBehaviour)val).NetworkObject;
				if ((networkObject2 != null && networkObject2.OwnerClientId == 0 && ((Object)val).name != "Player") || !PlayersBySteamID.TryAdd(val.playerSteamId, val))
				{
					continue;
				}
				if (!File.Exists(string.Format("{0}/{1}_{2}.txt", "VRMs", val.playerSteamId, val.playerUsername)))
				{
					File.WriteAllText(string.Format("{0}/{1}_{2}.txt", "VRMs", val.playerSteamId, val.playerUsername), $"{val.playerSteamId} seen as {val.playerUsername}");
				}
				if (Instances.ContainsKey(val.playerSteamId))
				{
					continue;
				}
				string text = string.Format("{0}/{1}.vrm", "VRMs", val.playerSteamId);
				if (File.Exists(text))
				{
					Debug.Log((object)("BetterLethalVRM trying to load model for path " + text));
					LoadModelToPlayer(text, val);
					continue;
				}
				text = "VRMs/" + val.playerUsername + ".vrm";
				if (File.Exists(text))
				{
					Debug.Log((object)("BetterLethalVRM trying to load model for path " + text));
					LoadModelToPlayer(text, val);
					continue;
				}
				text = "VRMs/fallback.vrm";
				if (File.Exists(text))
				{
					Debug.Log((object)("BetterLethalVRM trying to load fallback model for path " + text));
					LoadModelToPlayer(text, val);
				}
			}
		}

		private void FindMaskEnemies()
		{
			MaskedPlayerEnemy[] array = Object.FindObjectsByType<MaskedPlayerEnemy>((FindObjectsSortMode)0);
			if (!array.Any())
			{
				return;
			}
			MaskedPlayerEnemy[] array2 = array;
			foreach (MaskedPlayerEnemy val in array2)
			{
				if (!((Object)(object)((Component)val).transform == (Object)null) && !((Object)(object)val.mimickingPlayer == (Object)null) && Instances.TryGetValue(val.mimickingPlayer.playerSteamId, out BetterLethalVRMInstance value) && (Object)(object)((Component)val).transform != (Object)(object)((Component)value.PlayerControllerB).transform)
				{
					value.SetSkeletonMimic(((Component)val).transform);
				}
			}
		}

		private async void LoadModelToPlayer(string Path, PlayerControllerB Player)
		{
			Vrm10Instance val = await Vrm10.LoadPathAsync(Path, true, (ControlRigGenerationOption)1, true, (IAwaitCaller)null, (ITextureDeserializer)null, (IMaterialDescriptorGenerator)(object)new HDRPVrm10MaterialDescriptorGenerator(), (VrmMetaInformationCallback)null, default(CancellationToken));
			if ((Object)(object)val == (Object)null)
			{
				((Behaviour)this).enabled = false;
				Debug.LogError((object)("BetterLethalVRM had an error loading the VRM at " + Path + ", this mod will not function"));
				return;
			}
			((Object)val).name = $"BetterLethalVRM Character Model {Player.playerUsername} {Player.playerSteamId}";
			((Component)val).transform.position = ((Component)Player).transform.position;
			BetterLethalVRMInstance betterLethalVRMInstance = new BetterLethalVRMInstance();
			if ((Object)(object)HDRP_BaseMaterial == (Object)null)
			{
				((Behaviour)this).enabled = false;
				Debug.LogError((object)"BetterLethalVRM had some error loading the Lethal Company shader material, this mod will not function");
				return;
			}
			Renderer[] componentsInChildren = ((Component)val).GetComponentsInChildren<Renderer>(true);
			foreach (Renderer val2 in componentsInChildren)
			{
				betterLethalVRMInstance.Renderers.Add(val2);
				val2.receiveShadows = true;
				val2.shadowCastingMode = (ShadowCastingMode)2;
				SkinnedMeshRenderer val3 = (SkinnedMeshRenderer)(object)((val2 is SkinnedMeshRenderer) ? val2 : null);
				if (val3 != null)
				{
					val3.updateWhenOffscreen = true;
				}
				Material[] array = (Material[])(object)new Material[val2.materials.Length];
				for (int j = 0; j < val2.materials.Length; j++)
				{
					Material val4 = val2.materials[j];
					Material val5 = new Material(HDRP_BaseMaterial)
					{
						name = ((Object)val4).name,
						mainTexture = val4.mainTexture
					};
					if (val4.HasProperty("_M_CullMode"))
					{
						val5.SetFloat("_CullMode", val4.GetFloat("_M_CullMode"));
					}
					if (val4.HasProperty("_BumpMap"))
					{
						val5.SetTexture("_NormalMap", val4.GetTexture("_BumpMap"));
					}
					array[j] = val5;
				}
				val2.materials = array;
			}
			Animator controlRigAnimator = val.Runtime.ControlRig.ControlRigAnimator;
			((Behaviour)controlRigAnimator).enabled = false;
			val.Runtime.VrmAnimation = null;
			(string, HumanBodyBones)[] array2 = new(string, HumanBodyBones)[49]
			{
				("spine", (HumanBodyBones)0),
				("spine.001", (HumanBodyBones)7),
				("spine.002", (HumanBodyBones)8),
				("spine.003", (HumanBodyBones)54),
				("spine.004", (HumanBodyBones)9),
				("shoulder.R", (HumanBodyBones)12),
				("arm.R_upper", (HumanBodyBones)14),
				("arm.R_lower", (HumanBodyBones)16),
				("hand.R", (HumanBodyBones)18),
				("shoulder.L", (HumanBodyBones)11),
				("arm.L_upper", (HumanBodyBones)13),
				("arm.L_lower", (HumanBodyBones)15),
				("hand.L", (HumanBodyBones)17),
				("thigh.R", (HumanBodyBones)2),
				("shin.R", (HumanBodyBones)4),
				("foot.R", (HumanBodyBones)6),
				("thigh.L", (HumanBodyBones)1),
				("shin.L", (HumanBodyBones)3),
				("foot.L", (HumanBodyBones)5),
				("finger1.L", (HumanBodyBones)24),
				("finger1.L.001", (HumanBodyBones)25),
				("finger1.L.001_end", (HumanBodyBones)26),
				("finger2.L", (HumanBodyBones)27),
				("finger2.L.001", (HumanBodyBones)28),
				("finger2.L.001_end", (HumanBodyBones)29),
				("finger3.L", (HumanBodyBones)30),
				("finger3.L.001", (HumanBodyBones)31),
				("finger3.L.001_end", (HumanBodyBones)32),
				("finger4.L", (HumanBodyBones)33),
				("finger4.L.001", (HumanBodyBones)34),
				("finger4.L.001_end", (HumanBodyBones)35),
				("finger5.L", (HumanBodyBones)36),
				("finger5.L.001", (HumanBodyBones)37),
				("finger5.L.001_end", (HumanBodyBones)38),
				("finger1.R", (HumanBodyBones)39),
				("finger1.R.001", (HumanBodyBones)40),
				("finger1.R.001_end", (HumanBodyBones)41),
				("finger2.R", (HumanBodyBones)42),
				("finger2.R.001", (HumanBodyBones)43),
				("finger2.R.001_end", (HumanBodyBones)44),
				("finger3.R", (HumanBodyBones)45),
				("finger3.R.001", (HumanBodyBones)46),
				("finger3.R.001_end", (HumanBodyBones)47),
				("finger4.R", (HumanBodyBones)48),
				("finger4.R.001", (HumanBodyBones)49),
				("finger4.R.001_end", (HumanBodyBones)50),
				("finger5.R", (HumanBodyBones)51),
				("finger5.R.001", (HumanBodyBones)52),
				("finger5.R.001_end", (HumanBodyBones)53)
			};
			if ((Object)(object)PlayerPrefab == (Object)null)
			{
				((Behaviour)this).enabled = false;
				Debug.LogError((object)"BetterLethalVRM failed to find the player prefab, this mod will not function");
				return;
			}
			HashSet<(Transform, Transform, Quaternion)> hashSet = new HashSet<(Transform, Transform, Quaternion)>();
			(string, HumanBodyBones)[] array3 = array2;
			for (int k = 0; k < array3.Length; k++)
			{
				(string, HumanBodyBones) tuple = array3[k];
				Transform boneTransform = controlRigAnimator.GetBoneTransform(tuple.Item2);
				if ((Object)(object)boneTransform == (Object)null)
				{
					Debug.Log((object)$"BetterLethalVRM {Path} missing bone {tuple.Item2} ({tuple.Item1})");
					continue;
				}
				Transform val6 = UnityExtensions.FindDescendant(((Component)Player).transform, tuple.Item1);
				Transform val7 = UnityExtensions.FindDescendant(PlayerPrefab.transform, tuple.Item1);
				Transform transform = new GameObject("VRM Rotation Bone").transform;
				transform.parent = val7;
				transform.position = val7.position;
				transform.rotation = boneTransform.rotation;
				Quaternion localRotation = transform.localRotation;
				transform.parent = val6;
				transform.position = val6.position;
				transform.localRotation = localRotation;
				hashSet.Add((boneTransform, transform, localRotation));
			}
			Vector3 val8 = default(Vector3);
			((Vector3)(ref val8))..ctor(0f, val.Humanoid.Head.position.y, 0f);
			Vector3 val9 = default(Vector3);
			((Vector3)(ref val9))..ctor(0f, ((Component)val).transform.position.y, 0f);
			float num = Vector3.Distance(val8, val9);
			float num2 = PlayerPrefabHeight / num;
			((Component)val).transform.localScale = new Vector3(num2, num2, num2);
			Debug.Log((object)$"BetterLethalVRM {Path} has a height of: {num:0.###}, scaling to {num2:0.###}");
			float num3 = Vector3.Distance(val.Humanoid.Hips.position, (val.Humanoid.LeftFoot.position + val.Humanoid.RightFoot.position) / 2f);
			Transform val10 = UnityExtensions.FindDescendant(PlayerPrefab.transform, "spine");
			Transform val11 = UnityExtensions.FindDescendant(PlayerPrefab.transform, "foot.L");
			Transform val12 = UnityExtensions.FindDescendant(PlayerPrefab.transform, "foot.R");
			float num4 = Vector3.Distance(val10.position, (val11.position + val12.position) / 2f);
			((Component)UnityExtensions.FindDescendant(((Component)Player).transform, "LOD1")).gameObject.SetActive(false);
			((Component)UnityExtensions.FindDescendant(((Component)Player).transform, "LOD2")).gameObject.SetActive(false);
			((Component)UnityExtensions.FindDescendant(((Component)Player).transform, "LOD3")).gameObject.SetActive(false);
			((Component)UnityExtensions.FindDescendant(((Component)Player).transform, "LevelSticker")).gameObject.SetActive(false);
			((Component)UnityExtensions.FindDescendant(((Component)Player).transform, "BetaBadge")).gameObject.SetActive(false);
			foreach (Spring spring in val.SpringBone.Springs)
			{
				spring.Center = null;
				foreach (VRM10SpringBoneJoint joint in spring.Joints)
				{
					joint.m_stiffnessForce *= 10f;
				}
			}
			val.Runtime.ReconstructSpringBone();
			betterLethalVRMInstance.Vrm10Instance = val;
			betterLethalVRMInstance.PlayerControllerB = Player;
			betterLethalVRMInstance.HipOffset = num3 - num4;
			betterLethalVRMInstance.BoneTranslation = hashSet;
			Instances.Add(betterLethalVRMInstance.PlayerControllerB.playerSteamId, betterLethalVRMInstance);
			Debug.Log((object)("BetterLethalVRM finished loading " + Path));
		}

		private void AnimateBonePairs()
		{
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			List<BetterLethalVRMInstance> list = new List<BetterLethalVRMInstance>();
			foreach (BetterLethalVRMInstance value in Instances.Values)
			{
				if ((Object)(object)value.Vrm10Instance == (Object)null || (Object)(object)value.PlayerControllerB == (Object)null)
				{
					list.Add(value);
					continue;
				}
				if ((Object)(object)value.DeadBodyRoot == (Object)null)
				{
					value.DeadMap = null;
					value.DeadBodyRoot = null;
				}
				bool flag = false;
				foreach (var item in value.BoneTranslation)
				{
					if ((Object)(object)item.target == (Object)null || (Object)(object)item.source == (Object)null)
					{
						list.Add(value);
						flag = true;
						break;
					}
					if (value.DeadMap != null && (Object)(object)value.DeadMap[item.source] == (Object)null)
					{
						value.DeadMap = null;
						value.DeadBodyRoot = null;
					}
				}
				if (flag)
				{
					continue;
				}
				if (!value.PlayerControllerB.isPlayerDead || (Object)(object)value.DeadBodyRoot == (Object)null)
				{
					value.DeadMap = null;
					value.DeadBodyRoot = null;
				}
				if (value.PlayerControllerB.isPlayerDead && (Object)(object)value.DeadBodyRoot == (Object)null && (Object)(object)value.PlayerControllerB.deadBody != (Object)null)
				{
					value.SetSkeletonMimic(((Component)value.PlayerControllerB.deadBody).transform);
				}
				foreach (var item2 in value.BoneTranslation)
				{
					item2.target.rotation = ((value.DeadMap != null) ? value.DeadMap[item2.source].rotation : item2.source.rotation);
					if (((Object)item2.source.parent).name == "spine")
					{
						item2.target.position = ((value.DeadMap != null) ? value.DeadMap[item2.source].position : item2.source.position);
						var (val, _, _) = item2;
						val.position += item2.target.up * value.HipOffset;
					}
				}
				value.UpdateVisibility();
			}
			if (!list.Any())
			{
				return;
			}
			foreach (BetterLethalVRMInstance item3 in list)
			{
				Instances.Remove(item3.PlayerControllerB.playerSteamId);
				PlayersBySteamID.Remove(item3.PlayerControllerB.playerSteamId);
			}
		}
	}
	internal class BetterLethalVRMInstance
	{
		private const int FirstPersonLayer = 23;

		private const int ThirdPersonLayer = 0;

		public readonly HashSet<Renderer> Renderers = new HashSet<Renderer>();

		public HashSet<(Transform target, Transform source, Quaternion localRotation)> BoneTranslation = new HashSet<(Transform, Transform, Quaternion)>();

		public Transform DeadBodyRoot;

		public Dictionary<Transform, Transform> DeadMap;

		public float HipOffset;

		public PlayerControllerB PlayerControllerB;

		public Vrm10Instance Vrm10Instance;

		public void SetSkeletonMimic(Transform Root)
		{
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			DeadBodyRoot = Root;
			DeadMap = new Dictionary<Transform, Transform>();
			if ((Object)(object)PlayerControllerB.deadBody != (Object)null && (Object)(object)((Component)PlayerControllerB.deadBody).transform == (Object)(object)Root)
			{
				((Object)Root).name = "spine";
			}
			foreach (var item in BoneTranslation)
			{
				Transform val = UnityExtensions.FindDescendant(Root, ((Object)item.source.parent).name);
				Transform transform = new GameObject("VRM Rotation Bone").transform;
				transform.parent = val;
				transform.position = val.position;
				transform.localRotation = item.localRotation;
				DeadMap[item.source] = transform;
			}
			Renderer[] componentsInChildren = ((Component)Root).GetComponentsInChildren<Renderer>();
			foreach (Renderer val2 in componentsInChildren)
			{
				bool flag = (Object)(object)PlayerControllerB.deadBody != (Object)null && (Object)(object)((Component)PlayerControllerB.deadBody).transform == (Object)(object)Root;
				bool flag2 = flag;
				if (!flag2)
				{
					bool flag3;
					switch (((Object)val2).name)
					{
					case "LOD1":
					case "LOD2":
					case "LOD3":
					case "LevelSticker":
					case "BetaBadge":
						flag3 = true;
						break;
					default:
						flag3 = false;
						break;
					}
					flag2 = flag3;
				}
				if (flag2)
				{
					val2.enabled = false;
				}
			}
		}

		public void UpdateVisibility()
		{
			bool enabled = !PlayerControllerB.isPlayerDead || ((Object)(object)DeadBodyRoot != (Object)null && (Object)(object)PlayerControllerB.deadBody != (Object)null);
			bool flag = !((Behaviour)PlayerControllerB.gameplayCamera).enabled;
			foreach (Renderer renderer in Renderers)
			{
				((Component)renderer).gameObject.layer = ((!flag) ? 23 : 0);
				renderer.enabled = enabled;
			}
		}
	}
	public static class HDRPGltfPbrMaterialImporter
	{
		private enum BlendMode
		{
			Opaque,
			Cutout,
			Fade,
			Transparent
		}

		public const string ShaderName = "HDRP/Lit";

		private static readonly int SrcBlend = Shader.PropertyToID("_SrcBlend");

		private static readonly int DstBlend = Shader.PropertyToID("_DstBlend");

		private static readonly int ZWrite = Shader.PropertyToID("_ZWrite");

		private static readonly int Cutoff = Shader.PropertyToID("_Cutoff");

		public static Shader Shader => Shader.Find("HDRP/Lit");

		public static bool TryCreateParam(GltfData Data, int i, out MaterialDescriptor MatDesc)
		{
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0407: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Expected O, but got Unknown
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
			if (i < 0 || i >= Data.GLTF.materials.Count)
			{
				MatDesc = null;
				return false;
			}
			Dictionary<string, TextureDescriptor> dictionary = new Dictionary<string, TextureDescriptor>();
			Dictionary<string, float> dictionary2 = new Dictionary<string, float>();
			Dictionary<string, Color> dictionary3 = new Dictionary<string, Color>();
			Dictionary<string, Vector4> dictionary4 = new Dictionary<string, Vector4>();
			List<Action<Material>> list = new List<Action<Material>>();
			glTFMaterial tSrc = Data.GLTF.materials[i];
			TextureDescriptor? val = null;
			if (tSrc.pbrMetallicRoughness != null || tSrc.occlusionTexture != null)
			{
				SubAssetKey val2 = default(SubAssetKey);
				TextureDescriptor val3 = default(TextureDescriptor);
				if ((tSrc.pbrMetallicRoughness.metallicRoughnessTexture != null || tSrc.occlusionTexture != null) && GltfPbrTextureImporter.TryStandardTexture(Data, tSrc, ref val2, ref val3))
				{
					if (string.IsNullOrEmpty(val3.UnityObjectName))
					{
						throw new ArgumentNullException();
					}
					val = val3;
				}
				if (tSrc.pbrMetallicRoughness.baseColorFactor != null && tSrc.pbrMetallicRoughness.baseColorFactor.Length == 4)
				{
					dictionary3.Add("_BaseColor", ColorConversionExtensions.ToColor4(tSrc.pbrMetallicRoughness.baseColorFactor, (ColorSpace)1, (ColorSpace)0));
				}
				SubAssetKey val4 = default(SubAssetKey);
				TextureDescriptor value = default(TextureDescriptor);
				if (tSrc.pbrMetallicRoughness.baseColorTexture != null && ((glTFTextureInfo)tSrc.pbrMetallicRoughness.baseColorTexture).index != -1 && GltfPbrTextureImporter.TryBaseColorTexture(Data, tSrc, ref val4, ref value))
				{
					dictionary.Add("_BaseMap", value);
				}
				if (tSrc.pbrMetallicRoughness.metallicRoughnessTexture != null && ((glTFTextureInfo)tSrc.pbrMetallicRoughness.metallicRoughnessTexture).index != -1 && val.HasValue)
				{
					list.Add(delegate(Material material)
					{
						material.EnableKeyword("_METALLICSPECGLOSSMAP");
					});
					dictionary.Add("_MetallicGlossMap", val.Value);
					dictionary2.Add("_Metallic", 1f);
					dictionary2.Add("_GlossMapScale", 1f);
					dictionary2.Add("_Smoothness", 1f);
				}
				else
				{
					dictionary2.Add("_Metallic", tSrc.pbrMetallicRoughness.metallicFactor);
					dictionary2.Add("_Smoothness", 1f - tSrc.pbrMetallicRoughness.roughnessFactor);
				}
			}
			if (tSrc.normalTexture != null && ((glTFTextureInfo)tSrc.normalTexture).index != -1)
			{
				list.Add(delegate(Material material)
				{
					material.EnableKeyword("_NORMALMAP");
				});
				SubAssetKey val5 = default(SubAssetKey);
				TextureDescriptor value2 = default(TextureDescriptor);
				if (GltfPbrTextureImporter.TryNormalTexture(Data, tSrc, ref val5, ref value2))
				{
					dictionary.Add("_BumpMap", value2);
					dictionary2.Add("_BumpScale", tSrc.normalTexture.scale);
				}
			}
			if (tSrc.occlusionTexture != null && ((glTFTextureInfo)tSrc.occlusionTexture).index != -1 && val.HasValue)
			{
				dictionary.Add("_OcclusionMap", val.Value);
				dictionary2.Add("_OcclusionStrength", tSrc.occlusionTexture.strength);
			}
			if (tSrc.emissiveFactor != null || (tSrc.emissiveTexture != null && ((glTFTextureInfo)tSrc.emissiveTexture).index != -1))
			{
				list.Add(delegate(Material material)
				{
					//IL_000d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					material.EnableKeyword("_EMISSION");
					material.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)(material.globalIlluminationFlags & -5);
				});
				Color? val6 = GltfMaterialImportUtils.ImportLinearEmissiveFactor(Data, tSrc);
				if (val6.HasValue)
				{
					dictionary3.Add("_EmissionColor", val6.Value);
				}
				SubAssetKey val7 = default(SubAssetKey);
				TextureDescriptor value3 = default(TextureDescriptor);
				if (tSrc.emissiveTexture != null && ((glTFTextureInfo)tSrc.emissiveTexture).index != -1 && GltfPbrTextureImporter.TryEmissiveTexture(Data, tSrc, ref val7, ref value3))
				{
					dictionary.Add("_EmissionMap", value3);
				}
			}
			list.Add(delegate(Material material)
			{
				BlendMode blendMode = BlendMode.Opaque;
				string alphaMode = tSrc.alphaMode;
				if (!(alphaMode == "BLEND"))
				{
					if (alphaMode == "MASK")
					{
						blendMode = BlendMode.Cutout;
						material.SetOverrideTag("RenderType", "TransparentCutout");
						material.SetInt(SrcBlend, 1);
						material.SetInt(DstBlend, 0);
						material.SetInt(ZWrite, 1);
						material.SetFloat(Cutoff, tSrc.alphaCutoff);
						material.EnableKeyword("_ALPHATEST_ON");
						material.DisableKeyword("_ALPHABLEND_ON");
						material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
						material.renderQueue = 2450;
					}
					else
					{
						blendMode = BlendMode.Opaque;
						material.SetOverrideTag("RenderType", "");
						material.SetInt(SrcBlend, 1);
						material.SetInt(DstBlend, 0);
						material.SetInt(ZWrite, 1);
						material.DisableKeyword("_ALPHATEST_ON");
						material.DisableKeyword("_ALPHABLEND_ON");
						material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
						material.renderQueue = -1;
					}
				}
				else
				{
					blendMode = BlendMode.Fade;
					material.SetOverrideTag("RenderType", "Transparent");
					material.SetInt(SrcBlend, 5);
					material.SetInt(DstBlend, 10);
					material.SetInt(ZWrite, 0);
					material.DisableKeyword("_ALPHATEST_ON");
					material.EnableKeyword("_ALPHABLEND_ON");
					material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
					material.renderQueue = 3000;
				}
				material.SetFloat("_Mode", (float)blendMode);
			});
			MatDesc = new MaterialDescriptor(GltfMaterialImportUtils.ImportMaterialName(i, tSrc), Shader, (int?)null, (IReadOnlyDictionary<string, TextureDescriptor>)dictionary, (IReadOnlyDictionary<string, float>)dictionary2, (IReadOnlyDictionary<string, Color>)dictionary3, (IReadOnlyDictionary<string, Vector4>)dictionary4, (IReadOnlyList<Action<Material>>)list);
			return true;
		}
	}
	public sealed class HDRPVrm10MaterialDescriptorGenerator : IMaterialDescriptorGenerator
	{
		public MaterialDescriptor Get(GltfData Data, int i)
		{
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Expected O, but got Unknown
			if (HDRPVrm10MToonMaterialImporter.TryCreateParam(Data, i, out MaterialDescriptor MatDesc) || HDRPVrm10MToonMaterialImporter.TryCreateParam(Data, i, out MatDesc) || HDRPVrm10MToonMaterialImporter.TryCreateParam(Data, i, out MatDesc))
			{
				return MatDesc;
			}
			Debug.LogWarning((object)$"vrm material: {i} out of range. fallback");
			Debug.LogError((object)"BetterLethalVRM fallback materials are not supported, try exporting your VRM again using the MToon shader");
			return new MaterialDescriptor(GltfMaterialImportUtils.ImportMaterialName(i, (glTFMaterial)null), HDRPGltfPbrMaterialImporter.Shader, (int?)null, (IReadOnlyDictionary<string, TextureDescriptor>)new Dictionary<string, TextureDescriptor>(), (IReadOnlyDictionary<string, float>)new Dictionary<string, float>(), (IReadOnlyDictionary<string, Color>)new Dictionary<string, Color>(), (IReadOnlyDictionary<string, Vector4>)new Dictionary<string, Vector4>(), (IReadOnlyList<Action<Material>>)new Action<Material>[0]);
		}

		public MaterialDescriptor GetGltfDefault()
		{
			return UrpGltfDefaultMaterialImporter.CreateParam();
		}
	}
	public static class HDRPVrm10MToonMaterialImporter
	{
		public static Shader MToonReplacementShader;

		public static bool TryCreateParam(GltfData Data, int i, out MaterialDescriptor MatDesc)
		{
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Expected O, but got Unknown
			glTFMaterial val = Data.GLTF.materials[i];
			VRMC_materials_mtoon val2 = default(VRMC_materials_mtoon);
			if (!GltfDeserializer.TryGet(val.extensions, ref val2))
			{
				MatDesc = null;
				return false;
			}
			MatDesc = new MaterialDescriptor(val.name, MToonReplacementShader, (int?)null, (IReadOnlyDictionary<string, TextureDescriptor>)Vrm10MToonTextureImporter.EnumerateAllTextures(Data, val, val2).ToDictionary<(string, (SubAssetKey, TextureDescriptor)), string, TextureDescriptor>(((string key, (SubAssetKey, TextureDescriptor)) tuple) => tuple.key, ((string key, (SubAssetKey, TextureDescriptor)) tuple) => tuple.Item2.Item2), (IReadOnlyDictionary<string, float>)BuiltInVrm10MToonMaterialImporter.TryGetAllFloats(val, val2).ToDictionary<(string, float), string, float>(((string key, float value) tuple) => tuple.key, ((string key, float value) tuple) => tuple.value), (IReadOnlyDictionary<string, Color>)BuiltInVrm10MToonMaterialImporter.TryGetAllColors(val, val2).ToDictionary<(string, Color), string, Color>(((string key, Color value) tuple) => tuple.key, ((string key, Color value) tuple) => tuple.value), (IReadOnlyDictionary<string, Vector4>)BuiltInVrm10MToonMaterialImporter.TryGetAllFloatArrays(val, val2).ToDictionary<(string, Vector4), string, Vector4>(((string key, Vector4 value) tuple) => tuple.key, ((string key, Vector4 value) tuple) => tuple.value), (IReadOnlyList<Action<Material>>)new Action<Material>[1]
			{
				delegate(Material material)
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					new MToonValidator(material).Validate();
				}
			});
			return true;
		}
	}
}

BepInEx/plugins/UniGLTF.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier;
using UniGLTF.MeshUtility;
using UniGLTF.UniUnlit;
using UniGLTF.Utils;
using UniGLTF.Zip;
using UniJSON;
using Unity.Collections;
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEngine;
using UnityEngine.Profiling;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
using VRMShaders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: InternalsVisibleTo("UniGLTF.Tests")]
[assembly: AssemblyVersion("0.0.0.0")]
public static class TriangleUtil
{
	public static IEnumerable<int> FlipTriangle(IEnumerable<byte> src)
	{
		return FlipTriangle(src.Select((Func<byte, int>)((byte x) => x)));
	}

	public static IEnumerable<int> FlipTriangle(IEnumerable<ushort> src)
	{
		return FlipTriangle(src.Select((Func<ushort, int>)((ushort x) => x)));
	}

	public static IEnumerable<int> FlipTriangle(IEnumerable<uint> src)
	{
		return FlipTriangle(src.Select((uint x) => (int)x));
	}

	public static IEnumerable<int> FlipTriangle(IEnumerable<int> src)
	{
		IEnumerator<int> it = src.GetEnumerator();
		while (it.MoveNext())
		{
			int i0 = it.Current;
			if (!it.MoveNext())
			{
				break;
			}
			int i1 = it.Current;
			if (!it.MoveNext())
			{
				break;
			}
			yield return it.Current;
			yield return i1;
			yield return i0;
		}
	}
}
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[11880]
		{
			0, 0, 0, 4, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 65, 114, 114, 97, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 63, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 67, 111, 108, 111, 114, 67,
			111, 110, 118, 101, 114, 115, 105, 111, 110, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 52,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 103, 108, 84, 70, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 53,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 73, 110, 100, 101, 120,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			56, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 92, 78, 117, 109, 101,
			114, 105, 99, 115, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			83, 116, 114, 105, 110, 103, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 85, 110, 105, 116, 121, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 66, 105, 110, 100, 112, 111,
			115, 101, 71, 105, 122, 109, 111, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 55, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 66, 108, 101, 110, 100, 83,
			104, 97, 112, 101, 82, 101, 112, 111, 114, 116,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			53, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 101, 115, 104, 85,
			116, 105, 108, 105, 116, 121, 92, 66, 111, 110,
			101, 77, 101, 115, 104, 69, 114, 97, 115, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 53, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 92, 66, 111,
			110, 101, 78, 111, 114, 109, 97, 108, 105, 122,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 54, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 101, 115,
			104, 85, 116, 105, 108, 105, 116, 121, 92, 71,
			108, 116, 102, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			92, 77, 101, 115, 104, 65, 116, 116, 97, 99,
			104, 73, 110, 102, 111, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 50, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			77, 101, 115, 104, 85, 116, 105, 108, 105, 116,
			121, 92, 77, 101, 115, 104, 69, 120, 99, 108,
			117, 100, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 53, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 92,
			77, 101, 115, 104, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 50, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			92, 77, 101, 115, 104, 70, 114, 101, 101, 122,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 59, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 101, 115,
			104, 85, 116, 105, 108, 105, 116, 121, 92, 77,
			101, 115, 104, 73, 110, 116, 101, 103, 114, 97,
			116, 105, 111, 110, 71, 114, 111, 117, 112, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 60,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 101, 115, 104, 85, 116,
			105, 108, 105, 116, 121, 92, 77, 101, 115, 104,
			73, 110, 116, 101, 103, 114, 97, 116, 105, 111,
			110, 82, 101, 115, 117, 108, 116, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 77, 101, 115, 104, 73, 110,
			116, 101, 103, 114, 97, 116, 111, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 56, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 92, 84, 114, 105, 97, 110,
			103, 108, 101, 83, 101, 112, 97, 114, 97, 116,
			111, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 95, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 70, 111, 114, 109, 97,
			116, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 65, 110, 100, 69, 120, 116, 114, 97,
			115, 92, 69, 109, 105, 115, 115, 105, 118, 101,
			77, 117, 108, 116, 105, 112, 108, 105, 101, 114,
			92, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 46, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 89, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 65, 110, 100, 69, 120,
			116, 114, 97, 115, 92, 69, 109, 105, 115, 115,
			105, 118, 101, 77, 117, 108, 116, 105, 112, 108,
			105, 101, 114, 92, 70, 111, 114, 109, 97, 116,
			46, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 93, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 70, 111, 114, 109, 97,
			116, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 65, 110, 100, 69, 120, 116, 114, 97,
			115, 92, 69, 109, 105, 115, 115, 105, 118, 101,
			77, 117, 108, 116, 105, 112, 108, 105, 101, 114,
			92, 83, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 46, 103, 46, 99, 115, 0, 0, 0, 4,
			0, 0, 0, 75, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 70, 111, 114, 109,
			97, 116, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 65, 110, 100, 69, 120, 116, 114,
			97, 115, 92, 103, 108, 116, 102, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 90, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 70,
			111, 114, 109, 97, 116, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 65, 110, 100, 69,
			120, 116, 114, 97, 115, 92, 103, 108, 116, 102,
			95, 109, 101, 115, 104, 95, 101, 120, 116, 114,
			97, 115, 95, 116, 97, 114, 103, 101, 116, 78,
			97, 109, 101, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 93, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 65, 110, 100, 69, 120, 116,
			114, 97, 115, 92, 75, 72, 82, 95, 109, 97,
			116, 101, 114, 105, 97, 108, 115, 95, 101, 109,
			105, 115, 115, 105, 118, 101, 95, 115, 116, 114,
			101, 110, 103, 116, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 81, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 65, 110, 100, 69, 120,
			116, 114, 97, 115, 92, 75, 72, 82, 95, 109,
			97, 116, 101, 114, 105, 97, 108, 115, 95, 117,
			110, 108, 105, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 80, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 65, 110, 100, 69, 120, 116,
			114, 97, 115, 92, 75, 72, 82, 95, 116, 101,
			120, 116, 117, 114, 101, 95, 98, 97, 115, 105,
			115, 117, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 83, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 70, 111, 114, 109, 97,
			116, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 65, 110, 100, 69, 120, 116, 114, 97,
			115, 92, 75, 72, 82, 95, 116, 101, 120, 116,
			117, 114, 101, 95, 116, 114, 97, 110, 115, 102,
			111, 114, 109, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 50, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 70, 111, 114, 109,
			97, 116, 92, 103, 108, 98, 84, 121, 112, 101,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 48, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 70, 111, 114, 109, 97, 116,
			92, 103, 108, 69, 110, 117, 109, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 46, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 46, 99, 115, 0, 0, 0, 4, 0, 0,
			0, 55, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 70, 111, 114, 109, 97, 116,
			92, 103, 108, 84, 70, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 52, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 65, 115,
			115, 101, 116, 115, 46, 99, 115, 0, 0, 0,
			6, 0, 0, 0, 52, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 66, 117,
			102, 102, 101, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 52, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 67, 97,
			109, 101, 114, 97, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			46, 103, 46, 99, 115, 0, 0, 0, 8, 0,
			0, 0, 54, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 70, 111, 114, 109, 97,
			116, 92, 103, 108, 84, 70, 77, 97, 116, 101,
			114, 105, 97, 108, 46, 99, 115, 0, 0, 0,
			4, 0, 0, 0, 50, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 77, 101,
			115, 104, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 50, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 70, 111, 114, 109, 97,
			116, 92, 103, 108, 84, 70, 78, 111, 100, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			58, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 70, 111, 114, 109, 97, 116, 92,
			71, 108, 116, 102, 83, 101, 114, 105, 97, 108,
			105, 122, 101, 114, 46, 103, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 50, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 70,
			111, 114, 109, 97, 116, 92, 103, 108, 84, 70,
			83, 107, 105, 110, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 84, 101,
			120, 116, 117, 114, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 50, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 73, 83, 116, 111, 114,
			97, 103, 101, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 61, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 70, 111, 114, 109,
			97, 116, 92, 74, 115, 111, 110, 83, 99, 104,
			101, 109, 97, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 71, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 73, 79, 92,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 73,
			109, 112, 111, 114, 116, 101, 114, 85, 116, 105,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 68, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 73, 79, 92, 73,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 69,
			120, 112, 111, 114, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 65, 114, 114, 97, 121, 66, 121,
			116, 101, 66, 117, 102, 102, 101, 114, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 46, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 65, 114, 114, 97, 121, 80,
			105, 110, 46, 99, 115, 0, 0, 0, 4, 0,
			0, 0, 42, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 65, 120,
			101, 115, 46, 99, 115, 0, 0, 0, 3, 0,
			0, 0, 52, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 66, 117,
			102, 102, 101, 114, 65, 99, 99, 101, 115, 115,
			111, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 43, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 66, 121,
			116, 101, 51, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 43, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 66,
			121, 116, 101, 52, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 49, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			66, 121, 116, 101, 115, 82, 101, 97, 100, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 55, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 69, 120, 112,
			111, 114, 116, 105, 110, 103, 71, 108, 116, 102,
			68, 97, 116, 97, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 59, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 83,
			117, 112, 112, 111, 114, 116, 70, 108, 97, 103,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 55, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 70, 105, 108,
			101, 83, 121, 115, 116, 101, 109, 83, 116, 111,
			114, 97, 103, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 49, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			103, 108, 98, 73, 109, 112, 111, 114, 116, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 46, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 71, 108, 116,
			102, 68, 97, 116, 97, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 50, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 103, 108, 116, 102, 69, 120, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 56, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 71,
			108, 116, 102, 69, 120, 112, 111, 114, 116, 83,
			101, 116, 116, 105, 110, 103, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 50, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 71, 108, 116, 102, 74, 115, 111,
			110, 85, 116, 105, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 49, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 71, 108, 116, 102, 85, 116, 105, 108, 105,
			116, 121, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 53, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 73, 109,
			112, 111, 114, 116, 101, 114, 67, 111, 110, 116,
			101, 120, 116, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 63, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 73,
			109, 112, 111, 114, 116, 101, 114, 67, 111, 110,
			116, 101, 120, 116, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 61, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 67, 111,
			110, 116, 101, 120, 116, 83, 112, 101, 101, 100,
			76, 111, 103, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 93, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 79, 92,
			66, 117, 105, 108, 116, 73, 110, 82, 80, 92,
			69, 120, 112, 111, 114, 116, 92, 66, 117, 105,
			108, 116, 73, 110, 71, 108, 116, 102, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 107, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 66, 117, 105, 108, 116, 73, 110, 82, 80,
			92, 69, 120, 112, 111, 114, 116, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 115, 92, 66, 117,
			105, 108, 116, 73, 110, 70, 97, 108, 108, 98,
			97, 99, 107, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 111,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 79, 92, 66, 117, 105, 108,
			116, 73, 110, 82, 80, 92, 69, 120, 112, 111,
			114, 116, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 115, 92, 66, 117, 105, 108, 116, 73, 110,
			71, 101, 110, 101, 114, 105, 99, 85, 110, 108,
			105, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			69, 120, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 107, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 66, 117, 105, 108, 116,
			73, 110, 82, 80, 92, 69, 120, 112, 111, 114,
			116, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 92, 66, 117, 105, 108, 116, 73, 110, 83,
			116, 97, 110, 100, 97, 114, 100, 77, 97, 116,
			101, 114, 105, 97, 108, 69, 120, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 107, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 79, 92,
			66, 117, 105, 108, 116, 73, 110, 82, 80, 92,
			69, 120, 112, 111, 114, 116, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 115, 92, 66, 117, 105,
			108, 116, 73, 110, 85, 110, 105, 85, 110, 108,
			105, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			69, 120, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 104, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 66, 117, 105, 108, 116,
			73, 110, 82, 80, 92, 73, 109, 112, 111, 114,
			116, 92, 66, 117, 105, 108, 116, 73, 110, 71,
			108, 116, 102, 77, 97, 116, 101, 114, 105, 97,
			108, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 71, 101, 110, 101, 114, 97, 116, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			110, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 79, 92, 66, 117, 105,
			108, 116, 73, 110, 82, 80, 92, 73, 109, 112,
			111, 114, 116, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 66, 117, 105, 108, 116, 73,
			110, 71, 108, 116, 102, 68, 101, 102, 97, 117,
			108, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 106, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 66, 117, 105, 108, 116,
			73, 110, 82, 80, 92, 73, 109, 112, 111, 114,
			116, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 92, 66, 117, 105, 108, 116, 73, 110, 71,
			108, 116, 102, 80, 98, 114, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 109, 112, 111, 114, 116,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 108, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 73, 79, 92, 66,
			117, 105, 108, 116, 73, 110, 82, 80, 92, 73,
			109, 112, 111, 114, 116, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 115, 92, 66, 117, 105, 108,
			116, 73, 110, 71, 108, 116, 102, 85, 110, 108,
			105, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 72, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 71, 108, 116, 102, 77,
			97, 116, 101, 114, 105, 97, 108, 69, 120, 112,
			111, 114, 116, 85, 116, 105, 108, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 72, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 71, 108, 116, 102, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 109, 112,
			111, 114, 116, 85, 116, 105, 108, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 77, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 73, 77, 97, 116, 101,
			114, 105, 97, 108, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 66, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 79, 92,
			73, 77, 97, 116, 101, 114, 105, 97, 108, 69,
			120, 112, 111, 114, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 80, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 109, 112, 111, 114, 116, 101, 114,
			80, 97, 114, 97, 109, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 88, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 73,
			79, 92, 82, 101, 110, 100, 101, 114, 80, 105,
			112, 101, 108, 105, 110, 101, 77, 97, 116, 101,
			114, 105, 97, 108, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 85, 116, 105, 108, 105, 116,
			121, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 65, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 79, 92, 84, 101,
			120, 116, 117, 114, 101, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 100, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 85, 82, 80, 92, 73, 109, 112, 111, 114,
			116, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 92, 85, 114, 112, 71, 108, 116, 102, 68,
			101, 102, 97, 117, 108, 116, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 109, 112, 111, 114, 116,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 96, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 73, 79, 92, 85,
			82, 80, 92, 73, 109, 112, 111, 114, 116, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 115, 92,
			85, 114, 112, 71, 108, 116, 102, 80, 98, 114,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 94, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 79, 92, 85, 82, 80, 92, 73, 109, 112,
			111, 114, 116, 92, 85, 114, 112, 71, 108, 116,
			102, 77, 97, 116, 101, 114, 105, 97, 108, 68,
			101, 115, 99, 114, 105, 112, 116, 111, 114, 71,
			101, 110, 101, 114, 97, 116, 111, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 63, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 101, 115, 104, 73, 79,
			92, 66, 108, 101, 110, 100, 83, 104, 97, 112,
			101, 69, 120, 112, 111, 114, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 61,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 101, 115, 104, 73,
			79, 92, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 70, 105, 108, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 59, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 101, 115, 104, 73, 79,
			92, 74, 111, 105, 110, 116, 115, 65, 99, 99,
			101, 115, 115, 111, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 53, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 101, 115, 104, 73, 79, 92, 77, 101,
			115, 104, 68, 97, 116, 97, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 77, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 101, 115, 104, 73, 79, 92, 77,
			101, 115, 104, 69, 120, 112, 111, 114, 116, 101,
			114, 95, 68, 105, 118, 105, 100, 101, 100, 86,
			101, 114, 116, 101, 120, 66, 117, 102, 102, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 76, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 101, 115,
			104, 73, 79, 92, 77, 101, 115, 104, 69, 120,
			112, 111, 114, 116, 101, 114, 95, 83, 104, 97,
			114, 101, 100, 86, 101, 114, 116, 101, 120, 66,
			117, 102, 102, 101, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 59, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 101, 115, 104, 73, 79, 92, 77, 101,
			115, 104, 69, 120, 112, 111, 114, 116, 73, 110,
			102, 111, 46, 99, 115, 0, 0, 0, 3, 0,
			0, 0, 59, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 101,
			115, 104, 73, 79, 92, 77, 101, 115, 104, 69,
			120, 112, 111, 114, 116, 85, 116, 105, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 57,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 101, 115, 104, 73,
			79, 92, 77, 101, 115, 104, 85, 112, 108, 111,
			97, 100, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 56, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 101, 115, 104, 73, 79, 92, 77, 101, 115,
			104, 86, 101, 114, 116, 101, 120, 48, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 56, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 101, 115, 104, 73, 79,
			92, 77, 101, 115, 104, 86, 101, 114, 116, 101,
			120, 49, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 56, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 101,
			115, 104, 73, 79, 92, 77, 101, 115, 104, 86,
			101, 114, 116, 101, 120, 50, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 62, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 101, 115, 104, 73, 79, 92, 77,
			101, 115, 104, 86, 101, 114, 116, 101, 120, 85,
			116, 105, 108, 105, 116, 121, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 62, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 101, 115, 104, 73, 79, 92, 77,
			101, 115, 104, 87, 105, 116, 104, 77, 97, 116,
			101, 114, 105, 97, 108, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 59, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 101, 115, 104, 73, 79, 92, 80,
			111, 115, 105, 116, 105, 111, 110, 77, 105, 110,
			77, 97, 120, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 64, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 77,
			101, 115, 104, 73, 79, 92, 80, 114, 105, 109,
			105, 116, 105, 118, 101, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 57, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 101, 115, 104, 73, 79, 92, 83, 107,
			105, 110, 110, 105, 110, 103, 73, 110, 102, 111,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			57, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 77, 101, 115, 104,
			73, 79, 92, 84, 114, 105, 97, 110, 103, 108,
			101, 85, 116, 105, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 61, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 101, 115, 104, 73, 79, 92, 86, 101,
			114, 116, 101, 120, 67, 111, 108, 111, 114, 83,
			116, 97, 116, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 101, 115, 104, 73, 79, 92, 87, 101, 105,
			103, 104, 116, 115, 65, 99, 99, 101, 115, 115,
			111, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 52, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 70, 108, 97,
			103, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 61, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 111,
			110, 111, 66, 101, 104, 97, 118, 105, 111, 117,
			114, 67, 111, 109, 112, 97, 114, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 56, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 78, 97, 116,
			105, 118, 101, 65, 114, 114, 97, 121, 77, 97,
			110, 97, 103, 101, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 50, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 78, 111, 100, 101, 73, 109, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 63, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 80,
			97, 114, 115, 101, 114, 92, 65, 117, 116, 111,
			71, 108, 116, 102, 70, 105, 108, 101, 80, 97,
			114, 115, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			80, 97, 114, 115, 101, 114, 92, 71, 108, 98,
			66, 105, 110, 97, 114, 121, 80, 97, 114, 115,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 58, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 80, 97,
			114, 115, 101, 114, 92, 71, 108, 98, 70, 105,
			108, 101, 80, 97, 114, 115, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 62, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 80, 97, 114, 115, 101, 114,
			92, 71, 108, 98, 76, 111, 119, 76, 101, 118,
			101, 108, 80, 97, 114, 115, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 76, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 80, 97, 114, 115, 101, 114,
			92, 71, 108, 116, 102, 70, 105, 108, 101, 87,
			105, 116, 104, 82, 101, 115, 111, 117, 114, 99,
			101, 70, 105, 108, 101, 115, 80, 97, 114, 115,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 80, 97,
			114, 115, 101, 114, 92, 90, 105, 112, 65, 114,
			99, 104, 105, 118, 101, 100, 71, 108, 116, 102,
			70, 105, 108, 101, 80, 97, 114, 115, 101, 114,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			50, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 80, 114, 111, 103,
			114, 101, 115, 115, 73, 110, 102, 111, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 53, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 83, 97, 102, 101, 77, 97,
			114, 115, 104, 97, 108, 67, 111, 112, 121, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 44,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 83, 66, 121, 116, 101,
			52, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 47, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 83, 107, 105,
			110, 74, 111, 105, 110, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 70, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 84, 101, 120, 116, 117, 114, 101, 73,
			79, 92, 71, 108, 116, 102, 80, 98, 114, 84,
			101, 120, 116, 117, 114, 101, 73, 109, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 78, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			84, 101, 120, 116, 117, 114, 101, 73, 79, 92,
			71, 108, 116, 102, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 71, 101, 110, 101, 114, 97, 116, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			67, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 84, 101, 120, 116,
			117, 114, 101, 73, 79, 92, 71, 108, 116, 102,
			84, 101, 120, 116, 117, 114, 101, 69, 120, 112,
			111, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 67, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 84, 101, 120, 116, 117, 114, 101, 73, 79,
			92, 71, 108, 116, 102, 84, 101, 120, 116, 117,
			114, 101, 73, 109, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			75, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 84, 101, 120, 116,
			117, 114, 101, 73, 79, 92, 73, 84, 101, 120,
			116, 117, 114, 101, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 66, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 84,
			101, 120, 116, 117, 114, 101, 73, 79, 92, 84,
			101, 120, 116, 117, 114, 101, 83, 97, 109, 112,
			108, 101, 114, 85, 116, 105, 108, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 47, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 85, 110, 105, 116, 121, 80, 97,
			116, 104, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 51, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 85, 114,
			105, 66, 121, 116, 101, 66, 117, 102, 102, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 45, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 85, 83, 104,
			111, 114, 116, 50, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 45, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			85, 83, 104, 111, 114, 116, 51, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 45, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 85, 83, 104, 111, 114, 116, 52,
			46, 99, 115, 0, 0, 0, 6, 0, 0, 0,
			55, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 90, 105, 112, 65,
			114, 99, 104, 105, 118, 101, 83, 116, 111, 114,
			97, 103, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 49, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 80, 97, 99, 107,
			97, 103, 101, 86, 101, 114, 115, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			56, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 80, 97, 99, 107, 97, 103, 101,
			86, 101, 114, 115, 105, 111, 110, 80, 97, 114,
			116, 105, 97, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 71, 108, 116, 102, 73, 110,
			115, 116, 97, 110, 99, 101, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 51, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 85,
			110, 105, 71, 76, 84, 70, 69, 120, 99, 101,
			112, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 49, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 85, 110,
			105, 71, 76, 84, 70, 86, 101, 114, 115, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 57, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 85, 110, 105, 71, 76,
			84, 70, 86, 101, 114, 115, 105, 111, 110, 95,
			112, 97, 114, 116, 105, 97, 108, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			86, 97, 108, 105, 100, 97, 116, 105, 111, 110,
			92, 86, 97, 108, 105, 100, 97, 116, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 45, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 66, 121, 116, 101, 66, 117,
			102, 102, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 67, 111, 110,
			99, 114, 101, 116, 101, 67, 97, 115, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 49,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 67, 111, 110, 99, 114, 101, 116, 101,
			67, 97, 115, 116, 46, 103, 46, 99, 115, 0,
			0, 0, 4, 0, 0, 0, 45, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 69,
			120, 99, 101, 112, 116, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 68,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 65, 114, 114, 97, 121, 83, 101,
			103, 109, 101, 110, 116, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 60, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 66,
			121, 116, 101, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 70, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 74, 83, 79, 78, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 68, 97, 116,
			101, 84, 105, 109, 101, 79, 102, 102, 115, 101,
			116, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 60, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 69, 110, 117, 109, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 62,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 80, 97, 114, 115, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 60,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 84, 121, 112, 101, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 54, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 74, 83, 79, 78, 92,
			70, 111, 114, 109, 97, 116, 116, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 54,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 73, 70, 105, 108, 101, 83, 121, 115,
			116, 101, 109, 65, 99, 99, 101, 115, 115, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 45, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 73, 70, 111, 114, 109, 97,
			116, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 52, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 73, 83, 116,
			111, 114, 101, 92, 66, 121, 116, 101, 115, 83,
			116, 111, 114, 101, 46, 99, 115, 0, 0, 0,
			4, 0, 0, 0, 51, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 73, 83, 116,
			111, 114, 101, 92, 66, 121, 116, 101, 85, 110,
			105, 111, 110, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 48, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 74, 83, 79, 78, 92, 73, 83, 116, 111,
			114, 101, 92, 73, 83, 116, 111, 114, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 53,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 73, 83, 116, 111, 114, 101, 92, 83,
			116, 114, 101, 97, 109, 83, 116, 111, 114, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			60, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 73, 83, 116, 111, 114, 101, 92,
			83, 116, 114, 105, 110, 103, 66, 117, 105, 108,
			100, 101, 114, 83, 116, 111, 114, 101, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 53, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 74, 83, 79, 78,
			92, 74, 115, 111, 110, 92, 74, 115, 111, 110,
			70, 111, 114, 109, 97, 116, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 50,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 74, 115, 111, 110, 92, 74, 115, 111,
			110, 80, 97, 114, 115, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 50, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 74, 83, 79, 78, 92,
			74, 115, 111, 110, 92, 74, 115, 111, 110, 83,
			116, 114, 105, 110, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 49, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 74, 115,
			111, 110, 92, 74, 115, 111, 110, 86, 97, 108,
			117, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 60, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			74, 83, 79, 78, 92, 76, 105, 115, 116, 84,
			114, 101, 101, 78, 111, 100, 101, 92, 76, 105,
			115, 116, 84, 114, 101, 101, 78, 111, 100, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			75, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 76, 105, 115, 116, 84, 114, 101,
			101, 78, 111, 100, 101, 92, 76, 105, 115, 116,
			84, 114, 101, 101, 78, 111, 100, 101, 65, 114,
			114, 97, 121, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 70, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 74, 83, 79, 78, 92, 76, 105, 115, 116,
			84, 114, 101, 101, 78, 111, 100, 101, 92, 76,
			105, 115, 116, 84, 114, 101, 101, 78, 111, 100,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 76, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 76, 105, 115, 116, 84, 114,
			101, 101, 78, 111, 100, 101, 92, 76, 105, 115,
			116, 84, 114, 101, 101, 78, 111, 100, 101, 79,
			98, 106, 101, 99, 116, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 57, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 85, 116,
			102, 56, 83, 116, 114, 105, 110, 103, 92, 73,
			85, 116, 102, 56, 83, 116, 114, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			58, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 85, 116, 102, 56, 83, 116, 114,
			105, 110, 103, 92, 85, 116, 102, 56, 73, 116,
			101, 114, 97, 116, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 92,
			85, 116, 102, 56, 83, 116, 114, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			63, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 85, 116, 102, 56, 83, 116, 114,
			105, 110, 103, 92, 85, 116, 102, 56, 83, 116,
			114, 105, 110, 103, 66, 117, 105, 108, 100, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 66, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 85, 116, 102, 56, 83, 116,
			114, 105, 110, 103, 92, 85, 116, 102, 56, 83,
			116, 114, 105, 110, 103, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 74, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 85, 116,
			102, 56, 83, 116, 114, 105, 110, 103, 92, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 83,
			112, 108, 105, 116, 116, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115
		};
		result.TypesData = new byte[7997]
		{
			1, 0, 0, 0, 11, 85, 110, 105, 71, 76,
			84, 70, 124, 80, 105, 110, 1, 0, 0, 0,
			11, 85, 110, 105, 71, 76, 84, 70, 124, 80,
			105, 110, 0, 0, 0, 0, 23, 85, 110, 105,
			71, 76, 84, 70, 124, 65, 114, 114, 97, 121,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 30, 85, 110, 105, 71, 76,
			84, 70, 124, 65, 114, 114, 97, 121, 83, 101,
			103, 109, 101, 110, 116, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 33,
			85, 110, 105, 71, 76, 84, 70, 124, 67, 111,
			108, 111, 114, 67, 111, 110, 118, 101, 114, 115,
			105, 111, 110, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 22, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 35, 85, 110, 105, 71, 76,
			84, 70, 46, 103, 108, 84, 70, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 124, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 86, 101, 99,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 73, 110, 100, 101, 120, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 26, 85, 110, 105, 71, 76, 84, 70,
			124, 78, 117, 109, 101, 114, 105, 99, 115, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 24, 85, 110, 105, 71, 76, 84,
			70, 124, 83, 116, 114, 105, 110, 103, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 14, 85, 110, 105, 71, 76, 84, 70,
			124, 80, 111, 115, 82, 111, 116, 0, 0, 0,
			0, 18, 85, 110, 105, 71, 76, 84, 70, 124,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 85, 110, 105, 116, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 33, 85, 110, 105, 71, 76, 84, 70,
			46, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 124, 66, 105, 110, 100, 112, 111, 115,
			101, 71, 105, 122, 109, 111, 0, 0, 0, 0,
			36, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 66, 108, 101, 110, 100, 83, 104, 97, 112,
			101, 82, 101, 112, 111, 114, 116, 0, 0, 0,
			0, 51, 85, 110, 105, 71, 76, 84, 70, 46,
			77, 101, 115, 104, 85, 116, 105, 108, 105, 116,
			121, 46, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 82, 101, 112, 111, 114, 116, 124, 66,
			108, 101, 110, 100, 83, 104, 97, 112, 101, 83,
			116, 97, 116, 0, 0, 0, 0, 34, 85, 110,
			105, 71, 76, 84, 70, 46, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 124, 66, 111,
			110, 101, 77, 101, 115, 104, 69, 114, 97, 115,
			101, 114, 0, 0, 0, 0, 51, 85, 110, 105,
			71, 76, 84, 70, 46, 77, 101, 115, 104, 85,
			116, 105, 108, 105, 116, 121, 46, 66, 111, 110,
			101, 77, 101, 115, 104, 69, 114, 97, 115, 101,
			114, 124, 69, 120, 99, 108, 117, 100, 101, 66,
			111, 110, 101, 73, 110, 100, 101, 120, 0, 0,
			0, 0, 44, 85, 110, 105, 71, 76, 84, 70,
			46, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 46, 66, 111, 110, 101, 77, 101, 115,
			104, 69, 114, 97, 115, 101, 114, 124, 69, 114,
			97, 115, 101, 66, 111, 110, 101, 0, 0, 0,
			0, 34, 85, 110, 105, 71, 76, 84, 70, 46,
			77, 101, 115, 104, 85, 116, 105, 108, 105, 116,
			121, 124, 66, 111, 110, 101, 78, 111, 114, 109,
			97, 108, 105, 122, 101, 114, 0, 0, 0, 0,
			35, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 71, 108, 116, 102, 77, 101, 115, 104, 85,
			116, 105, 108, 105, 116, 121, 0, 0, 0, 0,
			34, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 77, 101, 115, 104, 65, 116, 116, 97, 99,
			104, 73, 110, 102, 111, 0, 0, 0, 0, 31,
			85, 110, 105, 71, 76, 84, 70, 46, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 124,
			77, 101, 115, 104, 69, 120, 99, 108, 117, 100,
			101, 0, 0, 0, 0, 34, 85, 110, 105, 71,
			76, 84, 70, 46, 77, 101, 115, 104, 85, 116,
			105, 108, 105, 116, 121, 124, 77, 101, 115, 104,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 31, 85, 110, 105, 71, 76,
			84, 70, 46, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 124, 77, 101, 115, 104, 70,
			114, 101, 101, 122, 101, 114, 0, 0, 0, 0,
			40, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 77, 101, 115, 104, 73, 110, 116, 101, 103,
			114, 97, 116, 105, 111, 110, 71, 114, 111, 117,
			112, 0, 0, 0, 0, 29, 85, 110, 105, 71,
			76, 84, 70, 46, 77, 101, 115, 104, 85, 116,
			105, 108, 105, 116, 121, 124, 68, 114, 97, 119,
			67, 111, 117, 110, 116, 0, 0, 0, 0, 28,
			85, 110, 105, 71, 76, 84, 70, 46, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 124,
			77, 101, 115, 104, 73, 110, 102, 111, 0, 0,
			0, 0, 41, 85, 110, 105, 71, 76, 84, 70,
			46, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 124, 77, 101, 115, 104, 73, 110, 116,
			101, 103, 114, 97, 116, 105, 111, 110, 82, 101,
			115, 117, 108, 116, 0, 0, 0, 0, 34, 85,
			110, 105, 71, 76, 84, 70, 46, 77, 101, 115,
			104, 85, 116, 105, 108, 105, 116, 121, 124, 77,
			101, 115, 104, 73, 110, 116, 101, 103, 114, 97,
			116, 111, 114, 0, 0, 0, 0, 42, 85, 110,
			105, 71, 76, 84, 70, 46, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 46, 77, 101,
			115, 104, 73, 110, 116, 101, 103, 114, 97, 116,
			111, 114, 124, 83, 117, 98, 77, 101, 115, 104,
			0, 0, 0, 0, 45, 85, 110, 105, 71, 76,
			84, 70, 46, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 46, 77, 101, 115, 104, 73,
			110, 116, 101, 103, 114, 97, 116, 111, 114, 124,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			0, 0, 0, 0, 37, 85, 110, 105, 71, 76,
			84, 70, 46, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 124, 84, 114, 105, 97, 110,
			103, 108, 101, 83, 101, 112, 97, 114, 97, 116,
			111, 114, 0, 0, 0, 0, 73, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 109, 97, 116, 101, 114, 105, 97, 108, 115,
			95, 104, 100, 114, 95, 101, 109, 105, 115, 115,
			105, 118, 101, 77, 117, 108, 116, 105, 112, 108,
			105, 101, 114, 124, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 94, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 109,
			97, 116, 101, 114, 105, 97, 108, 115, 95, 104,
			100, 114, 95, 101, 109, 105, 115, 115, 105, 118,
			101, 77, 117, 108, 116, 105, 112, 108, 105, 101,
			114, 124, 86, 82, 77, 67, 95, 109, 97, 116,
			101, 114, 105, 97, 108, 115, 95, 104, 100, 114,
			95, 101, 109, 105, 115, 115, 105, 118, 101, 77,
			117, 108, 116, 105, 112, 108, 105, 101, 114, 0,
			0, 0, 0, 71, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 109, 97,
			116, 101, 114, 105, 97, 108, 115, 95, 104, 100,
			114, 95, 101, 109, 105, 115, 115, 105, 118, 101,
			77, 117, 108, 116, 105, 112, 108, 105, 101, 114,
			124, 71, 108, 116, 102, 83, 101, 114, 105, 97,
			108, 105, 122, 101, 114, 0, 0, 0, 0, 21,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 0, 0, 0, 0, 27, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 69, 120, 112,
			111, 114, 116, 0, 0, 0, 0, 27, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 73,
			109, 112, 111, 114, 116, 0, 0, 0, 0, 40,
			85, 110, 105, 71, 76, 84, 70, 124, 71, 108,
			116, 102, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 70, 111, 114, 109, 97, 116, 116, 101, 114,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 36, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 116, 102, 95, 109, 101,
			115, 104, 95, 101, 120, 116, 114, 97, 115, 95,
			116, 97, 114, 103, 101, 116, 78, 97, 109, 101,
			115, 0, 0, 0, 0, 44, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 95, 75,
			72, 82, 95, 109, 97, 116, 101, 114, 105, 97,
			108, 115, 95, 101, 109, 105, 115, 115, 105, 118,
			101, 95, 115, 116, 114, 101, 110, 103, 116, 104,
			0, 0, 0, 0, 32, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 95, 75, 72,
			82, 95, 109, 97, 116, 101, 114, 105, 97, 108,
			115, 95, 117, 110, 108, 105, 116, 0, 0, 0,
			0, 31, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 84, 70, 95, 75, 72, 82, 95, 116,
			101, 120, 116, 117, 114, 101, 95, 98, 97, 115,
			105, 115, 117, 0, 0, 0, 0, 34, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			95, 75, 72, 82, 95, 116, 101, 120, 116, 117,
			114, 101, 95, 116, 114, 97, 110, 115, 102, 111,
			114, 109, 0, 0, 0, 0, 17, 85, 110, 105,
			71, 76, 84, 70, 124, 71, 108, 98, 72, 101,
			97, 100, 101, 114, 0, 0, 0, 0, 16, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 98,
			67, 104, 117, 110, 107, 0, 0, 0, 0, 11,
			85, 110, 105, 71, 76, 84, 70, 124, 71, 108,
			98, 0, 0, 0, 0, 33, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 84, 121, 112, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 17, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 116, 102, 83, 99, 101, 110,
			101, 0, 0, 0, 0, 12, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 0, 0,
			0, 0, 27, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 84, 70, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 84, 97, 114, 103, 101, 116,
			0, 0, 0, 0, 28, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 67, 104, 97, 110,
			110, 101, 108, 0, 0, 0, 0, 28, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 83,
			97, 109, 112, 108, 101, 114, 0, 0, 0, 0,
			21, 85, 110, 105, 71, 76, 84, 70, 124, 103,
			108, 84, 70, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 18, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 65,
			115, 115, 101, 116, 115, 0, 0, 0, 0, 18,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 66, 117, 102, 102, 101, 114, 0, 0,
			0, 0, 22, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 84, 70, 66, 117, 102, 102, 101,
			114, 86, 105, 101, 119, 0, 0, 0, 0, 25,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 83, 112, 97, 114, 115, 101, 73, 110,
			100, 105, 99, 101, 115, 0, 0, 0, 0, 24,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 83, 112, 97, 114, 115, 101, 86, 97,
			108, 117, 101, 115, 0, 0, 0, 0, 18, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 83, 112, 97, 114, 115, 101, 0, 0, 0,
			0, 20, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 84, 70, 65, 99, 99, 101, 115, 115,
			111, 114, 0, 0, 0, 0, 24, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 79,
			114, 116, 104, 111, 103, 114, 97, 112, 104, 105,
			99, 0, 0, 0, 0, 23, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 80, 101,
			114, 115, 112, 101, 99, 116, 105, 118, 101, 0,
			0, 0, 0, 18, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 84, 70, 67, 97, 109, 101,
			114, 97, 0, 0, 0, 0, 24, 85, 110, 105,
			71, 76, 84, 70, 124, 71, 108, 116, 102, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 0, 0, 0, 0, 23, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 84, 101,
			120, 116, 117, 114, 101, 73, 110, 102, 111, 0,
			0, 0, 0, 40, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 84, 70, 77, 97, 116, 101,
			114, 105, 97, 108, 66, 97, 115, 101, 67, 111,
			108, 111, 114, 84, 101, 120, 116, 117, 114, 101,
			73, 110, 102, 111, 0, 0, 0, 0, 48, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 77, 97, 116, 101, 114, 105, 97, 108, 77,
			101, 116, 97, 108, 108, 105, 99, 82, 111, 117,
			103, 104, 110, 101, 115, 115, 84, 101, 120, 116,
			117, 114, 101, 73, 110, 102, 111, 0, 0, 0,
			0, 37, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 84, 70, 77, 97, 116, 101, 114, 105,
			97, 108, 78, 111, 114, 109, 97, 108, 84, 101,
			120, 116, 117, 114, 101, 73, 110, 102, 111, 0,
			0, 0, 0, 40, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 84, 70, 77, 97, 116, 101,
			114, 105, 97, 108, 79, 99, 99, 108, 117, 115,
			105, 111, 110, 84, 101, 120, 116, 117, 114, 101,
			73, 110, 102, 111, 0, 0, 0, 0, 39, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 77, 97, 116, 101, 114, 105, 97, 108, 69,
			109, 105, 115, 115, 105, 118, 101, 84, 101, 120,
			116, 117, 114, 101, 73, 110, 102, 111, 0, 0,
			0, 0, 32, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 84, 70, 80, 98, 114, 77, 101,
			116, 97, 108, 108, 105, 99, 82, 111, 117, 103,
			104, 110, 101, 115, 115, 0, 0, 0, 0, 20,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 77, 97, 116, 101, 114, 105, 97, 108,
			0, 0, 0, 0, 22, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 115, 0, 0, 0,
			0, 23, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 116, 102, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 0, 0, 0, 0, 22,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 80, 114, 105, 109, 105, 116, 105, 118,
			101, 115, 0, 0, 0, 0, 16, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 77,
			101, 115, 104, 0, 0, 0, 0, 16, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			78, 111, 100, 101, 0, 0, 0, 0, 22, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 116,
			102, 83, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 0, 0, 0, 0, 16, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 83, 107,
			105, 110, 0, 0, 0, 0, 26, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 84,
			101, 120, 116, 117, 114, 101, 83, 97, 109, 112,
			108, 101, 114, 0, 0, 0, 0, 17, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			73, 109, 97, 103, 101, 0, 0, 0, 0, 19,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 84, 101, 120, 116, 117, 114, 101, 0,
			0, 0, 0, 16, 85, 110, 105, 71, 76, 84,
			70, 124, 73, 83, 116, 111, 114, 97, 103, 101,
			0, 0, 0, 0, 31, 85, 110, 105, 71, 76,
			84, 70, 124, 66, 97, 115, 101, 74, 115, 111,
			110, 83, 99, 104, 101, 109, 97, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			27, 85, 110, 105, 71, 76, 84, 70, 124, 74,
			115, 111, 110, 83, 99, 104, 101, 109, 97, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 0, 0,
			0, 0, 31, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 116, 101, 109, 74, 115, 111, 110, 83,
			99, 104, 101, 109, 97, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 0, 0, 0, 0, 29, 85,
			110, 105, 71, 76, 84, 70, 124, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 73, 109, 112, 111,
			114, 116, 101, 114, 85, 116, 105, 108, 0, 0,
			0, 0, 26, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 69, 120, 112, 111, 114, 116, 101, 114, 0,
			0, 0, 0, 23, 85, 110, 105, 71, 76, 84,
			70, 124, 65, 114, 114, 97, 121, 66, 121, 116,
			101, 66, 117, 102, 102, 101, 114, 1, 0, 0,
			0, 16, 85, 110, 105, 71, 76, 84, 70, 124,
			65, 114, 114, 97, 121, 80, 105, 110, 1, 0,
			0, 0, 16, 85, 110, 105, 71, 76, 84, 70,
			124, 65, 114, 114, 97, 121, 80, 105, 110, 0,
			0, 0, 0, 26, 85, 110, 105, 71, 76, 84,
			70, 124, 65, 114, 114, 97, 121, 80, 105, 110,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 21, 85, 110, 105, 71, 76,
			84, 70, 124, 73, 65, 120, 105, 115, 73, 110,
			118, 101, 114, 116, 101, 114, 0, 0, 0, 0,
			16, 85, 110, 105, 71, 76, 84, 70, 124, 82,
			101, 118, 101, 114, 115, 101, 90, 0, 0, 0,
			0, 16, 85, 110, 105, 71, 76, 84, 70, 124,
			82, 101, 118, 101, 114, 115, 101, 88, 0, 0,
			0, 0, 24, 85, 110, 105, 71, 76, 84, 70,
			124, 65, 120, 105, 115, 101, 115, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 34, 85, 110, 105, 71, 76, 84, 70, 124,
			71, 108, 116, 102, 65, 99, 99, 101, 115, 115,
			111, 114, 84, 121, 112, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			35, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 84, 121, 112, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			22, 85, 110, 105, 71, 76, 84, 70, 124, 66,
			117, 102, 102, 101, 114, 65, 99, 99, 101, 115,
			115, 111, 114, 0, 0, 0, 0, 13, 85, 110,
			105, 71, 76, 84, 70, 124, 66, 121, 116, 101,
			51, 0, 0, 0, 0, 13, 85, 110, 105, 71,
			76, 84, 70, 124, 66, 121, 116, 101, 52, 0,
			0, 0, 0, 19, 85, 110, 105, 71, 76, 84,
			70, 124, 66, 121, 116, 101, 115, 82, 101, 97,
			100, 101, 114, 0, 0, 0, 0, 25, 85, 110,
			105, 71, 76, 84, 70, 124, 69, 120, 112, 111,
			114, 116, 105, 110, 103, 71, 108, 116, 102, 68,
			97, 116, 97, 0, 0, 0, 0, 29, 85, 110,
			105, 71, 76, 84, 70, 124, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 83, 117, 112, 112, 111,
			114, 116, 70, 108, 97, 103, 115, 0, 0, 0,
			0, 25, 85, 110, 105, 71, 76, 84, 70, 124,
			70, 105, 108, 101, 83, 121, 115, 116, 101, 109,
			83, 116, 111, 114, 97, 103, 101, 0, 0, 0,
			0, 19, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 98, 73, 109, 112, 111, 114, 116, 101,
			114, 0, 0, 0, 0, 16, 85, 110, 105, 71,
			76, 84, 70, 124, 71, 108, 116, 102, 68, 97,
			116, 97, 0, 0, 0, 0, 20, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 116, 102, 69,
			120, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 26, 85, 110, 105, 71, 76, 84, 70, 124,
			71, 108, 116, 102, 69, 120, 112, 111, 114, 116,
			83, 101, 116, 116, 105, 110, 103, 115, 0, 0,
			0, 0, 20, 85, 110, 105, 71, 76, 84, 70,
			124, 71, 108, 116, 102, 74, 115, 111, 110, 85,
			116, 105, 108, 0, 0, 0, 0, 19, 85, 110,
			105, 71, 76, 84, 70, 124, 71, 108, 116, 102,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 23, 85, 110, 105, 71, 76, 84, 70, 124,
			73, 109, 112, 111, 114, 116, 101, 114, 67, 111,
			110, 116, 101, 120, 116, 0, 0, 0, 0, 33,
			85, 110, 105, 71, 76, 84, 70, 124, 73, 109,
			112, 111, 114, 116, 101, 114, 67, 111, 110, 116,
			101, 120, 116, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 31, 85, 110,
			105, 71, 76, 84, 70, 124, 73, 109, 112, 111,
			114, 116, 101, 114, 67, 111, 110, 116, 101, 120,
			116, 83, 112, 101, 101, 100, 76, 111, 103, 0,
			0, 0, 0, 42, 85, 110, 105, 71, 76, 84,
			70, 46, 73, 109, 112, 111, 114, 116, 101, 114,
			67, 111, 110, 116, 101, 120, 116, 83, 112, 101,
			101, 100, 76, 111, 103, 124, 75, 101, 121, 69,
			108, 97, 112, 115, 101, 100, 0, 0, 0, 0,
			44, 85, 110, 105, 71, 76, 84, 70, 46, 73,
			109, 112, 111, 114, 116, 101, 114, 67, 111, 110,
			116, 101, 120, 116, 83, 112, 101, 101, 100, 76,
			111, 103, 124, 77, 101, 97, 115, 117, 114, 101,
			83, 99, 111, 112, 101, 0, 0, 0, 0, 35,
			85, 110, 105, 71, 76, 84, 70, 124, 66, 117,
			105, 108, 116, 73, 110, 71, 108, 116, 102, 77,
			97, 116, 101, 114, 105, 97, 108, 69, 120, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 39,
			85, 110, 105, 71, 76, 84, 70, 124, 66, 117,
			105, 108, 116, 73, 110, 70, 97, 108, 108, 98,
			97, 99, 107, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 101, 114, 0,
			0, 0, 0, 43, 85, 110, 105, 71, 76, 84,
			70, 124, 66, 117, 105, 108, 116, 73, 110, 71,
			101, 110, 101, 114, 105, 99, 85, 110, 108, 105,
			116, 77, 97, 116, 101, 114, 105, 97, 108, 69,
			120, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 39, 85, 110, 105, 71, 76, 84, 70, 124,
			66, 117, 105, 108, 116, 73, 110, 83, 116, 97,
			110, 100, 97, 114, 100, 77, 97, 116, 101, 114,
			105, 97, 108, 69, 120, 112, 111, 114, 116, 101,
			114, 0, 0, 0, 0, 39, 85, 110, 105, 71,
			76, 84, 70, 124, 66, 117, 105, 108, 116, 73,
			110, 85, 110, 105, 85, 110, 108, 105, 116, 77,
			97, 116, 101, 114, 105, 97, 108, 69, 120, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 46,
			85, 110, 105, 71, 76, 84, 70, 124, 66, 117,
			105, 108, 116, 73, 110, 71, 108, 116, 102, 77,
			97, 116, 101, 114, 105, 97, 108, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 0, 0, 0, 0,
			42, 85, 110, 105, 71, 76, 84, 70, 124, 66,
			117, 105, 108, 116, 73, 110, 71, 108, 116, 102,
			68, 101, 102, 97, 117, 108, 116, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 38, 85, 110,
			105, 71, 76, 84, 70, 124, 66, 117, 105, 108,
			116, 73, 110, 71, 108, 116, 102, 80, 98, 114,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 109,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			40, 85, 110, 105, 71, 76, 84, 70, 124, 66,
			117, 105, 108, 116, 73, 110, 71, 108, 116, 102,
			85, 110, 108, 105, 116, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 109, 112, 111, 114, 116, 101,
			114, 0, 0, 0, 0, 31, 85, 110, 105, 71,
			76, 84, 70, 124, 71, 108, 116, 102, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 85, 116, 105, 108, 115, 0, 0, 0,
			0, 31, 85, 110, 105, 71, 76, 84, 70, 124,
			71, 108, 116, 102, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 109, 112, 111, 114, 116, 85, 116,
			105, 108, 115, 0, 0, 0, 0, 36, 85, 110,
			105, 71, 76, 84, 70, 124, 73, 77, 97, 116,
			101, 114, 105, 97, 108, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 71, 101, 110, 101, 114,
			97, 116, 111, 114, 0, 0, 0, 0, 25, 85,
			110, 105, 71, 76, 84, 70, 124, 73, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 0, 0, 0, 0, 39, 85,
			110, 105, 71, 76, 84, 70, 124, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 80, 97, 114, 97, 109, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 42, 85, 110, 105, 71, 76, 84, 70,
			124, 77, 97, 116, 101, 114, 105, 97, 108, 68,
			101, 115, 99, 114, 105, 112, 116, 111, 114, 71,
			101, 110, 101, 114, 97, 116, 111, 114, 85, 116,
			105, 108, 105, 116, 121, 0, 0, 0, 0, 24,
			85, 110, 105, 71, 76, 84, 70, 124, 84, 101,
			120, 116, 117, 114, 101, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 0, 0, 0, 0, 38, 85,
			110, 105, 71, 76, 84, 70, 124, 85, 114, 112,
			71, 108, 116, 102, 68, 101, 102, 97, 117, 108,
			116, 77, 97, 116, 101, 114, 105, 97, 108, 73,
			109, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 34, 85, 110, 105, 71, 76, 84, 70, 124,
			85, 114, 112, 71, 108, 116, 102, 80, 98, 114,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 109,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			42, 85, 110, 105, 71, 76, 84, 70, 124, 85,
			114, 112, 71, 108, 116, 102, 77, 97, 116, 101,
			114, 105, 97, 108, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 0, 0, 0, 0, 26, 85, 110,
			105, 71, 76, 84, 70, 124, 66, 108, 101, 110,
			100, 83, 104, 97, 112, 101, 69, 120, 112, 111,
			114, 116, 101, 114, 0, 0, 0, 0, 31, 85,
			110, 105, 71, 76, 84, 70, 124, 73, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 69, 120,
			112, 111, 114, 116, 70, 105, 108, 116, 101, 114,
			0, 0, 0, 0, 37, 85, 110, 105, 71, 76,
			84, 70, 124, 68, 101, 102, 117, 97, 108, 116,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			69, 120, 112, 111, 114, 116, 70, 105, 108, 116,
			101, 114, 0, 0, 0, 0, 22, 85, 110, 105,
			71, 76, 84, 70, 124, 74, 111, 105, 110, 116,
			115, 65, 99, 99, 101, 115, 115, 111, 114, 0,
			0, 0, 0, 16, 85, 110, 105, 71, 76, 84,
			70, 124, 77, 101, 115, 104, 68, 97, 116, 97,
			0, 0, 0, 0, 40, 85, 110, 105, 71, 76,
			84, 70, 124, 77, 101, 115, 104, 69, 120, 112,
			111, 114, 116, 101, 114, 95, 68, 105, 118, 105,
			100, 101, 100, 86, 101, 114, 116, 101, 120, 66,
			117, 102, 102, 101, 114, 0, 0, 0, 0, 39,
			85, 110, 105, 71, 76, 84, 70, 124, 77, 101,
			115, 104, 69, 120, 112, 111, 114, 116, 101, 114,
			95, 83, 104, 97, 114, 101, 100, 86, 101, 114,
			116, 101, 120, 66, 117, 102, 102, 101, 114, 0,
			0, 0, 0, 22, 85, 110, 105, 71, 76, 84,
			70, 124, 77, 101, 115, 104, 69, 120, 112, 111,
			114, 116, 73, 110, 102, 111, 0, 0, 0, 0,
			22, 85, 110, 105, 71, 76, 84, 70, 124, 77,
			101, 115, 104, 69, 120, 112, 111, 114, 116, 76,
			105, 115, 116, 0, 0, 0, 0, 22, 85, 110,
			105, 71, 76, 84, 70, 124, 77, 101, 115, 104,
			69, 120, 112, 111, 114, 116, 85, 116, 105, 108,
			0, 0, 0, 0, 39, 85, 110, 105, 71, 76,
			84, 70, 46, 77, 101, 115, 104, 69, 120, 112,
			111, 114, 116, 85, 116, 105, 108, 124, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 66, 117,
			102, 102, 101, 114, 0, 0, 0, 0, 35, 85,
			110, 105, 71, 76, 84, 70, 46, 77, 101, 115,
			104, 69, 120, 112, 111, 114, 116, 85, 116, 105,
			108, 124, 86, 101, 114, 116, 101, 120, 66, 117,
			102, 102, 101, 114, 0, 0, 0, 0, 20, 85,
			110, 105, 71, 76, 84, 70, 124, 77, 101, 115,
			104, 85, 112, 108, 111, 97, 100, 101, 114, 0,
			0, 0, 0, 19, 85, 110, 105, 71, 76, 84,
			70, 124, 77, 101, 115, 104, 86, 101, 114, 116,
			101, 120, 48, 0, 0, 0, 0, 19, 85, 110,
			105, 71, 76, 84, 70, 124, 77, 101, 115, 104,
			86, 101, 114, 116, 101, 120, 49, 0, 0, 0,
			0, 19, 85, 110, 105, 71, 76, 84, 70, 124,
			77, 101, 115, 104, 86, 101, 114, 116, 101, 120,
			50, 0, 0, 0, 0, 25, 85, 110, 105, 71,
			76, 84, 70, 124, 77, 101, 115, 104, 86, 101,
			114, 116, 101, 120, 85, 116, 105, 108, 105, 116,
			121, 0, 0, 0, 0, 25, 85, 110, 105, 71,
			76, 84, 70, 124, 77, 101, 115, 104, 87, 105,
			116, 104, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 0, 0, 0, 0, 23, 85, 110, 105, 71,
			76, 84, 70, 124, 65, 99, 99, 101, 115, 115,
			111, 114, 115, 66, 111, 117, 110, 100, 115, 0,
			0, 0, 0, 27, 85, 110, 105, 71, 76, 84,
			70, 124, 80, 114, 105, 109, 105, 116, 105, 118,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 20, 85, 110, 105, 71,
			76, 84, 70, 124, 83, 107, 105, 110, 110, 105,
			110, 103, 73, 110, 102, 111, 0, 0, 0, 0,
			13, 124, 84, 114, 105, 97, 110, 103, 108, 101,
			85, 116, 105, 108, 0, 0, 0, 0, 26, 85,
			110, 105, 71, 76, 84, 70, 124, 86, 101, 114,
			116, 101, 120, 67, 111, 108, 111, 114, 85, 116,
			105, 108, 105, 116, 121, 0, 0, 0, 0, 23,
			85, 110, 105, 71, 76, 84, 70, 124, 87, 101,
			105, 103, 104, 116, 115, 65, 99, 99, 101, 115,
			115, 111, 114, 0, 0, 0, 0, 22, 85, 110,
			105, 71, 76, 84, 70, 124, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 70, 108, 97, 103, 115,
			0, 0, 0, 0, 31, 85, 110, 105, 71, 76,
			84, 70, 124, 77, 111, 110, 111, 66, 101, 104,
			97, 118, 105, 111, 117, 114, 67, 111, 109, 112,
			97, 114, 97, 116, 111, 114, 0, 0, 0, 0,
			27, 85, 110, 105, 71, 76, 84, 70, 124, 73,
			78, 97, 116, 105, 118, 101, 65, 114, 114, 97,
			121, 77, 97, 110, 97, 103, 101, 114, 0, 0,
			0, 0, 26, 85, 110, 105, 71, 76, 84, 70,
			124, 78, 97, 116, 105, 118, 101, 65, 114, 114,
			97, 121, 77, 97, 110, 97, 103, 101, 114, 0,
			0, 0, 0, 20, 85, 110, 105, 71, 76, 84,
			70, 124, 78, 111, 100, 101, 73, 109, 112, 111,
			114, 116, 101, 114, 0, 0, 0, 0, 38, 85,
			110, 105, 71, 76, 84, 70, 46, 78, 111, 100,
			101, 73, 109, 112, 111, 114, 116, 101, 114, 124,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 87,
			105, 116, 104, 83, 107, 105, 110, 0, 0, 0,
			0, 26, 85, 110, 105, 71, 76, 84, 70, 124,
			65, 117, 116, 111, 71, 108, 116, 102, 70, 105,
			108, 101, 80, 97, 114, 115, 101, 114, 0, 0,
			0, 0, 23, 85, 110, 105, 71, 76, 84, 70,
			124, 71, 108, 98, 66, 105, 110, 97, 114, 121,
			80, 97, 114, 115, 101, 114, 0, 0, 0, 0,
			21, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 98, 70, 105, 108, 101, 80, 97, 114, 115,
			101, 114, 0, 0, 0, 0, 25, 85, 110, 105,
			71, 76, 84, 70, 124, 71, 108, 98, 76, 111,
			119, 76, 101, 118, 101, 108, 80, 97, 114, 115,
			101, 114, 0, 0, 0, 0, 39, 85, 110, 105,
			71, 76, 84, 70, 124, 71, 108, 116, 102, 70,
			105, 108, 101, 87, 105, 116, 104, 82, 101, 115,
			111, 117, 114, 99, 101, 70, 105, 108, 101, 115,
			80, 97, 114, 115, 101, 114, 0, 0, 0, 0,
			33, 85, 110, 105, 71, 76, 84, 70, 124, 90,
			105, 112, 65, 114, 99, 104, 105, 118, 101, 100,
			71, 108, 116, 102, 70, 105, 108, 101, 80, 97,
			114, 115, 101, 114, 0, 0, 0, 0, 22, 85,
			110, 105, 71, 76, 84, 70, 124, 69, 120, 112,
			111, 114, 116, 80, 114, 111, 103, 114, 101, 115,
			115, 0, 0, 0, 0, 20, 85, 110, 105, 71,
			76, 84, 70, 124, 78, 117, 108, 108, 80, 114,
			111, 103, 114, 101, 115, 115, 0, 0, 0, 0,
			23, 85, 110, 105, 71, 76, 84, 70, 124, 83,
			97, 102, 101, 77, 97, 114, 115, 104, 97, 108,
			67, 111, 112, 121, 0, 0, 0, 0, 14, 85,
			110, 105, 71, 76, 84, 70, 124, 83, 66, 121,
			116, 101, 52, 0, 0, 0, 0, 18, 85, 110,
			105, 71, 76, 84, 70, 124, 83, 107, 105, 110,
			74, 111, 105, 110, 116, 115, 0, 0, 0, 0,
			30, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 80, 98, 114, 84, 101, 120, 116,
			117, 114, 101, 73, 109, 112, 111, 114, 116, 101,
			114, 0, 0, 0, 0, 38, 85, 110, 105, 71,
			76, 84, 70, 124, 71, 108, 116, 102, 84, 101,
			120, 116, 117, 114, 101, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 71, 101, 110, 101, 114,
			97, 116, 111, 114, 0, 0, 0, 0, 27, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 116,
			102, 84, 101, 120, 116, 117, 114, 101, 69, 120,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			27, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 84, 101, 120, 116, 117, 114, 101,
			73, 109, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 35, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 84, 101, 120, 116, 117, 114, 101, 68,
			101, 115, 99, 114, 105, 112, 116, 111, 114, 71,
			101, 110, 101, 114, 97, 116, 111, 114, 0, 0,
			0, 0, 26, 85, 110, 105, 71, 76, 84, 70,
			124, 84, 101, 120, 116, 117, 114, 101, 83, 97,
			109, 112, 108, 101, 114, 85, 116, 105, 108, 0,
			0, 0, 0, 17, 85, 110, 105, 71, 76, 84,
			70, 124, 85, 110, 105, 116, 121, 80, 97, 116,
			104, 0, 0, 0, 0, 21, 85, 110, 105, 71,
			76, 84, 70, 124, 85, 114, 105, 66, 121, 116,
			101, 66, 117, 102, 102, 101, 114, 0, 0, 0,
			0, 15, 85, 110, 105, 71, 76, 84, 70, 124,
			85, 83, 104, 111, 114, 116, 50, 0, 0, 0,
			0, 15, 85, 110, 105, 71, 76, 84, 70, 124,
			85, 83, 104, 111, 114, 116, 51, 0, 0, 0,
			0, 15, 85, 110, 105, 71, 76, 84, 70, 124,
			85, 83, 104, 111, 114, 116, 52, 0, 0, 0,
			0, 29, 85, 110, 105, 71, 76, 84, 70, 46,
			90, 105, 112, 124, 90, 105, 112, 80, 97, 114,
			115, 101, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 16, 85, 110, 105, 71,
			76, 84, 70, 46, 90, 105, 112, 124, 69, 79,
			67, 68, 0, 0, 0, 0, 24, 85, 110, 105,
			71, 76, 84, 70, 46, 90, 105, 112, 124, 67,
			111, 109, 109, 111, 110, 72, 101, 97, 100, 101,
			114, 0, 0, 0, 0, 38, 85, 110, 105, 71,
			76, 84, 70, 46, 90, 105, 112, 124, 67, 101,
			110, 116, 114, 97, 108, 68, 105, 114, 101, 99,
			116, 111, 114, 121, 70, 105, 108, 101, 72, 101,
			97, 100, 101, 114, 0, 0, 0, 0, 27, 85,
			110, 105, 71, 76, 84, 70, 46, 90, 105, 112,
			124, 76, 111, 99, 97, 108, 70, 105, 108, 101,
			72, 101, 97, 100, 101, 114, 0, 0, 0, 0,
			29, 85, 110, 105, 71, 76, 84, 70, 46, 90,
			105, 112, 124, 90, 105, 112, 65, 114, 99, 104,
			105, 118, 101, 83, 116, 111, 114, 97, 103, 101,
			1, 0, 0, 0, 22, 85, 110, 105, 71, 76,
			84, 70, 124, 80, 97, 99, 107, 97, 103, 101,
			86, 101, 114, 115, 105, 111, 110, 1, 0, 0,
			0, 22, 85, 110, 105, 71, 76, 84, 70, 124,
			80, 97, 99, 107, 97, 103, 101, 86, 101, 114,
			115, 105, 111, 110, 0, 0, 0, 0, 30, 85,
			110, 105, 71, 76, 84, 70, 46, 80, 97, 99,
			107, 97, 103, 101, 86, 101, 114, 115, 105, 111,
			110, 124, 86, 101, 114, 115, 105, 111, 110, 0,
			0, 0, 0, 27, 85, 110, 105, 71, 76, 84,
			70, 124, 82, 117, 110, 116, 105, 109, 101, 71,
			108, 116, 102, 73, 110, 115, 116, 97, 110, 99,
			101, 0, 0, 0, 0, 24, 85, 110, 105, 71,
			76, 84, 70, 124, 85, 110, 105, 71, 76, 84,
			70, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 36, 85, 110, 105, 71, 76,
			84, 70, 124, 85, 110, 105, 71, 76, 84, 70,
			78, 111, 116, 83, 117, 112, 112, 111, 114, 116,
			101, 100, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 25, 85, 110, 105, 71,
			76, 84, 70, 124, 71, 108, 98, 80, 97, 114,
			115, 101, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 1, 0, 0, 0, 22, 85, 110, 105, 71,
			76, 84, 70, 124, 85, 110, 105, 71, 76, 84,
			70, 86, 101, 114, 115, 105, 111, 110, 1, 0,
			0, 0, 22, 85, 110, 105, 71, 76, 84, 70,
			124, 85, 110, 105, 71, 76, 84, 70, 86, 101,
			114, 115, 105, 111, 110, 0, 0, 0, 0, 25,
			85, 110, 105, 71, 76, 84, 70, 124, 86, 97,
			108, 105, 100, 97, 116, 105, 111, 110, 67, 111,
			110, 116, 101, 120, 116, 0, 0, 0, 0, 18,
			85, 110, 105, 71, 76, 84, 70, 124, 86, 97,
			108, 105, 100, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 18, 85, 110, 105, 74, 83, 79, 78,
			124, 66, 121, 116, 101, 66, 117, 102, 102, 101,
			114, 1, 0, 0, 0, 20, 85, 110, 105, 74,
			83, 79, 78, 124, 67, 111, 110, 99, 114, 101,
			116, 101, 67, 97, 115, 116, 1, 0, 0, 0,
			20, 85, 110, 105, 74, 83, 79, 78, 124, 67,
			111, 110, 99, 114, 101, 116, 101, 67, 97, 115,
			116, 0, 0, 0, 0, 26, 85, 110, 105, 74,
			83, 79, 78, 124, 84, 114, 101, 101, 86, 97,
			108, 117, 101, 69, 120, 99, 101, 112, 116, 105,
			111, 110, 0, 0, 0, 0, 23, 85, 110, 105,
			74, 83, 79, 78, 124, 80, 97, 114, 115, 101,
			114, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 32, 85, 110, 105, 74, 83,
			79, 78, 124, 68, 101, 115, 101, 114, 105, 97,
			108, 105, 122, 97, 116, 105, 111, 110, 69, 120,
			99, 101, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 26, 85, 110, 105, 74, 83, 79, 78, 124,
			70, 111, 114, 109, 97, 116, 116, 101, 114, 69,
			120, 99, 101, 112, 116, 105, 111, 110, 0, 0,
			0, 0, 30, 85, 110, 105, 74, 83, 79, 78,
			124, 65, 114, 114, 97, 121, 83, 101, 103, 109,
			101, 110, 116, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 22, 85, 110,
			105, 74, 83, 79, 78, 124, 66, 121, 116, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 32, 85, 110, 105, 74, 83,
			79, 78, 124, 68, 97, 116, 101, 84, 105, 109,
			101, 79, 102, 102, 115, 101, 116, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 22, 85, 110, 105, 74, 83, 79, 78, 124,
			69, 110, 117, 109, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 24, 85,
			110, 105, 74, 83, 79, 78, 124, 83, 116, 114,
			105, 110, 103, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 22, 85, 110,
			105, 74, 83, 79, 78, 124, 84, 121, 112, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 27, 85, 110, 105, 74, 83,
			79, 78, 124, 70, 111, 114, 109, 97, 116, 116,
			101, 114, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 27, 85, 110, 105,
			74, 83, 79, 78, 124, 73, 70, 105, 108, 101,
			83, 121, 115, 116, 101, 109, 65, 99, 99, 101,
			115, 115, 111, 114, 0, 0, 0, 0, 26, 85,
			110, 105, 74, 83, 79, 78, 124, 70, 105, 108,
			101, 83, 121, 115, 116, 101, 109, 65, 99, 99,
			101, 115, 115, 111, 114, 0, 0, 0, 0, 18,
			85, 110, 105, 74, 83, 79, 78, 124, 73, 70,
			111, 114, 109, 97, 116, 116, 101, 114, 0, 0,
			0, 0, 18, 85, 110, 105, 74, 83, 79, 78,
			124, 66, 121, 116, 101, 115, 83, 116, 111, 114,
			101, 0, 0, 0, 0, 17, 85, 110, 105, 74,
			83, 79, 78, 124, 66, 121, 116, 101, 85, 110,
			105, 111, 110, 0, 0, 0, 0, 27, 85, 110,
			105, 74, 83, 79, 78, 46, 66, 121, 116, 101,
			85, 110, 105, 111, 110, 124, 87, 111, 114, 100,
			86, 97, 108, 117, 101, 0, 0, 0, 0, 28,
			85, 110, 105, 74, 83, 79, 78, 46, 66, 121,
			116, 101, 85, 110, 105, 111, 110, 124, 68, 87,
			111, 114, 100, 86, 97, 108, 117, 101, 0, 0,
			0, 0, 28, 85, 110, 105, 74, 83, 79, 78,
			46, 66, 121, 116, 101, 85, 110, 105, 111, 110,
			124, 81, 87, 111, 114, 100, 86, 97, 108, 117,
			101, 0, 0, 0, 0, 14, 85, 110, 105, 74,
			83, 79, 78, 124, 73, 83, 116, 111, 114, 101,
			0, 0, 0, 0, 24, 85, 110, 105, 74, 83,
			79, 78, 124, 73, 83, 116, 111, 114, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 19, 85, 110, 105, 74, 83, 79,
			78, 124, 83, 116, 114, 101, 97, 109, 83, 116,
			111, 114, 101, 0, 0, 0, 0, 26, 85, 110,
			105, 74, 83, 79, 78, 124, 83, 116, 114, 105,
			110, 103, 66, 117, 105, 108, 100, 101, 114, 83,
			116, 111, 114, 101, 0, 0, 0, 0, 21, 85,
			110, 105, 74, 83, 79, 78, 124, 74, 115, 111,
			110, 70, 111, 114, 109, 97, 116, 116, 101, 114,
			0, 0, 0, 0, 29, 85, 110, 105, 74, 83,
			79, 78, 46, 74, 115, 111, 110, 70, 111, 114,
			109, 97, 116, 116, 101, 114, 124, 67, 111, 110,
			116, 101, 120, 116, 0, 0, 0, 0, 18, 85,
			110, 105, 74, 83, 79, 78, 124, 74, 115, 111,
			110, 80, 97, 114, 115, 101, 114, 0, 0, 0,
			0, 18, 85, 110, 105, 74, 83, 79, 78, 124,
			74, 115, 111, 110, 83, 116, 114, 105, 110, 103,
			0, 0, 0, 0, 17, 85, 110, 105, 74, 83,
			79, 78, 124, 74, 115, 111, 110, 86, 97, 108,
			117, 101, 0, 0, 0, 0, 16, 85, 110, 105,
			74, 83, 79, 78, 124, 74, 115, 111, 110, 78,
			111, 100, 101, 0, 0, 0, 0, 35, 85, 110,
			105, 74, 83, 79, 78, 124, 76, 105, 115, 116,
			84, 114, 101, 101, 78, 111, 100, 101, 65, 114,
			114, 97, 121, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 30, 85, 110,
			105, 74, 83, 79, 78, 124, 76, 105, 115, 116,
			84, 114, 101, 101, 78, 111, 100, 101, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 34, 85, 110, 105, 74, 83, 79, 78,
			124, 73, 86, 97, 108, 117, 101, 78, 111, 100,
			101, 79, 98, 106, 101, 99, 116, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 19, 85, 110, 105, 74, 83, 79, 78, 124,
			73, 85, 116, 102, 56, 83, 116, 114, 105, 110,
			103, 0, 0, 0, 0, 19, 85, 110, 105, 74,
			83, 79, 78, 124, 85, 116, 102, 56, 83, 116,
			114, 105, 110, 103, 52, 0, 0, 0, 0, 20,
			85, 110, 105, 74, 83, 79, 78, 124, 85, 116,
			102, 56, 73, 116, 101, 114, 97, 116, 111, 114,
			0, 0, 0, 0, 18, 85, 110, 105, 74, 83,
			79, 78, 124, 85, 116, 102, 56, 83, 116, 114,
			105, 110, 103, 0, 0, 0, 0, 25, 85, 110,
			105, 74, 83, 79, 78, 124, 85, 116, 102, 56,
			83, 116, 114, 105, 110, 103, 66, 117, 105, 108,
			100, 101, 114, 0, 0, 0, 0, 28, 85, 110,
			105, 74, 83, 79, 78, 124, 85, 116, 102, 56,
			83, 116, 114, 105, 110, 103, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			36, 85, 110, 105, 74, 83, 79, 78, 124, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 83,
			112, 108, 105, 116, 116, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115
		};
		result.TotalFiles = 170;
		result.TotalTypes = 248;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniJSON
{
	public class ByteBuffer
	{
		private byte[] m_buffer;

		private int m_used;

		public ArraySegment<byte> Bytes => new ArraySegment<byte>(m_buffer, 0, Count);

		public int Count => m_used;

		public int Remain
		{
			get
			{
				if (m_buffer == null)
				{
					return 0;
				}
				return m_buffer.Length - m_used;
			}
		}

		public ByteBuffer()
		{
		}

		public ByteBuffer(byte[] buffer)
		{
			m_buffer = buffer;
		}

		private void Ensure(int size)
		{
			if (m_buffer == null || size >= m_buffer.Length - m_used)
			{
				byte[] array = new byte[m_used + size];
				if (m_buffer != null && m_used > 0)
				{
					Buffer.BlockCopy(m_buffer, 0, array, 0, m_used);
				}
				m_buffer = array;
			}
		}

		public void Push(byte b)
		{
			Ensure(1);
			m_buffer[m_used++] = b;
		}

		public void Push(byte[] buffer)
		{
			Push(new ArraySegment<byte>(buffer));
		}

		public void Push(ArraySegment<byte> buffer)
		{
			Ensure(buffer.Count);
			Buffer.BlockCopy(buffer.Array, buffer.Offset, m_buffer, m_used, buffer.Count);
			m_used += buffer.Count;
		}

		public void Unshift(int size)
		{
			if (size > m_used)
			{
				throw new ArgumentException();
			}
			if (m_used - size < size)
			{
				Buffer.BlockCopy(m_buffer, m_used, m_buffer, 0, m_used - size);
				m_used -= size;
			}
			else
			{
				byte[] array = new byte[m_used];
				Buffer.BlockCopy(m_buffer, size, array, 0, m_used - size);
				m_buffer = array;
			}
		}
	}
	public static class ConcreteCast
	{
		private static Type[] s_castTypes = new Type[10]
		{
			typeof(byte),
			typeof(ushort),
			typeof(uint),
			typeof(ulong),
			typeof(sbyte),
			typeof(short),
			typeof(int),
			typeof(long),
			typeof(float),
			typeof(double)
		};

		private const string SOURCE = "/VRM/UniJSON/Scripts/ConcreteCast.g.cs";

		public static string GetMethodName(Type src, Type dst)
		{
			return $"Cast{src.Name}To{dst.Name}";
		}

		public static MethodInfo GetMethod(Type src, Type dst)
		{
			string methodName = GetMethodName(src, dst);
			return typeof(ConcreteCast).GetMethod(methodName, BindingFlags.Static | BindingFlags.Public);
		}

		public static void GenerateGenericCast()
		{
			StringBuilder stringBuilder = new StringBuilder();
			using (StringWriter stringWriter = new StringWriter(stringBuilder))
			{
				stringWriter.WriteLine("\nusing System;\n\nnamespace UniJSON {\n    public static partial class ConcreteCast\n    {\n");
				Type[] array = s_castTypes;
				foreach (Type type in array)
				{
					Type[] array2 = s_castTypes;
					foreach (Type type2 in array2)
					{
						stringWriter.WriteLine("\n        public static $1 $2($0 src)\n        {\n            return ($1)src;\n        }\n".Replace("$0", type.Name).Replace("$1", type2.Name).Replace("$2", GetMethodName(type, type2)));
					}
				}
				stringWriter.WriteLine("\n    }\n}\n");
			}
			string text = Application.dataPath + "/VRM/UniJSON/Scripts/ConcreteCast.g.cs";
			Debug.LogFormat("{0}", new object[1] { text });
			File.WriteAllText(text, stringBuilder.ToString().Replace("\r\n", "\n"), new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
			AssetDatabase.ImportAsset("Assets/VRM/UniJSON/Scripts/ConcreteCast.g.cs");
		}

		public static byte CastByteToByte(byte src)
		{
			return src;
		}

		public static ushort CastByteToUInt16(byte src)
		{
			return src;
		}

		public static uint CastByteToUInt32(byte src)
		{
			return src;
		}

		public static ulong CastByteToUInt64(byte src)
		{
			return src;
		}

		public static sbyte CastByteToSByte(byte src)
		{
			return (sbyte)src;
		}

		public static short CastByteToInt16(byte src)
		{
			return src;
		}

		public static int CastByteToInt32(byte src)
		{
			return src;
		}

		public static long CastByteToInt64(byte src)
		{
			return src;
		}

		public static float CastByteToSingle(byte src)
		{
			return (int)src;
		}

		public static double CastByteToDouble(byte src)
		{
			return (int)src;
		}

		public static byte CastUInt16ToByte(ushort src)
		{
			return (byte)src;
		}

		public static ushort CastUInt16ToUInt16(ushort src)
		{
			return src;
		}

		public static uint CastUInt16ToUInt32(ushort src)
		{
			return src;
		}

		public static ulong CastUInt16ToUInt64(ushort src)
		{
			return src;
		}

		public static sbyte CastUInt16ToSByte(ushort src)
		{
			return (sbyte)src;
		}

		public static short CastUInt16ToInt16(ushort src)
		{
			return (short)src;
		}

		public static int CastUInt16ToInt32(ushort src)
		{
			return src;
		}

		public static long CastUInt16ToInt64(ushort src)
		{
			return src;
		}

		public static float CastUInt16ToSingle(ushort src)
		{
			return (int)src;
		}

		public static double CastUInt16ToDouble(ushort src)
		{
			return (int)src;
		}

		public static byte CastUInt32ToByte(uint src)
		{
			return (byte)src;
		}

		public static ushort CastUInt32ToUInt16(uint src)
		{
			return (ushort)src;
		}

		public static uint CastUInt32ToUInt32(uint src)
		{
			return src;
		}

		public static ulong CastUInt32ToUInt64(uint src)
		{
			return src;
		}

		public static sbyte CastUInt32ToSByte(uint src)
		{
			return (sbyte)src;
		}

		public static short CastUInt32ToInt16(uint src)
		{
			return (short)src;
		}

		public static int CastUInt32ToInt32(uint src)
		{
			return (int)src;
		}

		public static long CastUInt32ToInt64(uint src)
		{
			return src;
		}

		public static float CastUInt32ToSingle(uint src)
		{
			return src;
		}

		public static double CastUInt32ToDouble(uint src)
		{
			return src;
		}

		public static byte CastUInt64ToByte(ulong src)
		{
			return (byte)src;
		}

		public static ushort CastUInt64ToUInt16(ulong src)
		{
			return (ushort)src;
		}

		public static uint CastUInt64ToUInt32(ulong src)
		{
			return (uint)src;
		}

		public static ulong CastUInt64ToUInt64(ulong src)
		{
			return src;
		}

		public static sbyte CastUInt64ToSByte(ulong src)
		{
			return (sbyte)src;
		}

		public static short CastUInt64ToInt16(ulong src)
		{
			return (short)src;
		}

		public static int CastUInt64ToInt32(ulong src)
		{
			return (int)src;
		}

		public s

BepInEx/plugins/UniGLTF.Utils.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[242]
		{
			0, 0, 0, 1, 0, 0, 0, 54, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 116, 105, 108, 115, 92, 67, 97,
			99, 104, 101, 100, 69, 110, 117, 109, 92, 67,
			97, 99, 104, 101, 100, 69, 110, 117, 109, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 58,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 116, 105, 108, 115, 92,
			67, 97, 99, 104, 101, 100, 69, 110, 117, 109,
			92, 67, 97, 99, 104, 101, 100, 69, 110, 117,
			109, 84, 121, 112, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 51, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 116, 105, 108, 115, 92, 69, 117, 99, 108,
			105, 100, 101, 97, 110, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			116, 105, 108, 115, 92, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 83, 116, 97, 116, 101, 46,
			99, 115
		};
		result.TypesData = new byte[132]
		{
			0, 0, 0, 0, 24, 85, 110, 105, 71, 76,
			84, 70, 46, 85, 116, 105, 108, 115, 124, 67,
			97, 99, 104, 101, 100, 69, 110, 117, 109, 0,
			0, 0, 0, 28, 85, 110, 105, 71, 76, 84,
			70, 46, 85, 116, 105, 108, 115, 124, 67, 97,
			99, 104, 101, 100, 69, 110, 117, 109, 84, 121,
			112, 101, 0, 0, 0, 0, 32, 85, 110, 105,
			71, 76, 84, 70, 46, 85, 116, 105, 108, 115,
			124, 69, 117, 99, 108, 105, 100, 101, 97, 110,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 0,
			0, 0, 0, 28, 85, 110, 105, 71, 76, 84,
			70, 46, 85, 116, 105, 108, 115, 124, 84, 114,
			97, 110, 115, 102, 111, 114, 109, 83, 116, 97,
			116, 101
		};
		result.TotalFiles = 4;
		result.TotalTypes = 4;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.Utils;

public static class CachedEnum
{
	public static T Parse<T>(string name, bool ignoreCase = false) where T : struct, Enum
	{
		if (ignoreCase)
		{
			return CachedEnumType<T>.IgnoreCaseMap[name];
		}
		return CachedEnumType<T>.Map[name];
	}

	public static T ParseOrDefault<T>(string name, bool ignoreCase = false, T defaultValue = default(T)) where T : struct, Enum
	{
		try
		{
			return Parse<T>(name, ignoreCase);
		}
		catch (KeyNotFoundException)
		{
			return defaultValue;
		}
	}

	public static T[] GetValues<T>() where T : struct, Enum
	{
		return CachedEnumType<T>.Values;
	}
}
internal static class CachedEnumType<T> where T : struct, Enum
{
	public static IReadOnlyDictionary<string, T> Map { get; } = CreateStringEnumMap(ignoreCase: false);


	public static IReadOnlyDictionary<string, T> IgnoreCaseMap { get; } = CreateStringEnumMap(ignoreCase: true);


	public static T[] Values { get; } = (T[])Enum.GetValues(typeof(T));


	private static Dictionary<string, T> CreateStringEnumMap(bool ignoreCase)
	{
		Dictionary<string, T> dictionary = (ignoreCase ? new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase) : new Dictionary<string, T>());
		foreach (T value in Enum.GetValues(typeof(T)))
		{
			dictionary.Add(value.ToString(), value);
		}
		return dictionary;
	}
}
public readonly struct EuclideanTransform
{
	public readonly Quaternion Rotation;

	public readonly Vector3 Translation;

	public EuclideanTransform(Quaternion rotation, Vector3 translation)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		Rotation = rotation;
		Translation = translation;
	}

	public EuclideanTransform(Quaternion rotation)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		Rotation = rotation;
		Translation = Vector3.zero;
	}

	public EuclideanTransform(Vector3 translation)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		Rotation = Quaternion.identity;
		Translation = translation;
	}

	public EuclideanTransform(Matrix4x4 matrix)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		Rotation = ((Matrix4x4)(ref matrix)).rotation;
		Translation = Vector4.op_Implicit(((Matrix4x4)(ref matrix)).GetColumn(3));
	}
}
public readonly struct TransformState
{
	public Vector3 Position { get; }

	public Vector3 LocalPosition { get; }

	public Quaternion Rotation { get; }

	public Quaternion LocalRotation { get; }

	public Vector3 LocalScale { get; }

	public TransformState(Vector3 position, Vector3 localPosition, Quaternion rotation, Quaternion localRotation, Vector3 localScale)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		Position = position;
		LocalPosition = localPosition;
		Rotation = rotation;
		LocalRotation = localRotation;
		LocalScale = localScale;
	}

	public TransformState(Transform tf)
	{
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)tf == (Object)null)
		{
			Position = Vector3.zero;
			LocalPosition = Vector3.zero;
			Rotation = Quaternion.identity;
			LocalRotation = Quaternion.identity;
			LocalScale = Vector3.one;
		}
		else
		{
			Position = tf.position;
			LocalPosition = tf.localPosition;
			Rotation = tf.rotation;
			LocalRotation = tf.localRotation;
			LocalScale = tf.localScale;
		}
	}
}

BepInEx/plugins/UniHumanoid.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using UniGLTF.Utils;
using UnityEditor;
using UnityEngine;
using UnityEngine.Serialization;
using VRMShaders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1970]
		{
			0, 0, 0, 1, 0, 0, 0, 59, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 65, 110, 105, 109, 97, 116,
			105, 111, 110, 67, 108, 105, 112, 85, 116, 105,
			108, 105, 116, 121, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 56, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 65, 118, 97, 116, 97, 114, 68, 101, 115,
			99, 114, 105, 112, 116, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 54, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 66, 111, 110, 101, 71,
			105, 122, 109, 111, 68, 114, 97, 119, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			50, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 92, 66, 111, 110,
			101, 77, 97, 112, 112, 105, 110, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 46, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 66, 118, 104, 66, 111,
			110, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 64, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			69, 110, 117, 109, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 70, 111, 114, 99, 101, 85, 110, 105, 113,
			117, 101, 78, 97, 109, 101, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 49, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 70, 111, 114, 109, 97, 116, 92,
			66, 118, 104, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 56, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 92,
			70, 111, 114, 109, 97, 116, 92, 66, 118, 104,
			67, 104, 97, 110, 110, 101, 108, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 61, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 70, 111, 114, 109, 97, 116,
			92, 66, 118, 104, 67, 104, 97, 110, 110, 101,
			108, 67, 117, 114, 118, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 70, 111, 114, 109, 97, 116, 92,
			66, 118, 104, 69, 110, 100, 83, 105, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			58, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 92, 70, 111, 114,
			109, 97, 116, 92, 66, 118, 104, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 70, 111, 114, 109, 97, 116, 92,
			66, 118, 104, 78, 111, 100, 101, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 47, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 72, 117, 109, 97, 110, 111,
			105, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 53, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 72,
			117, 109, 97, 110, 111, 105, 100, 76, 111, 97,
			100, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 52, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 92,
			72, 117, 109, 97, 110, 80, 111, 115, 101, 67,
			108, 105, 112, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 56, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 92,
			72, 117, 109, 97, 110, 80, 111, 115, 101, 84,
			114, 97, 110, 115, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 44, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 73, 66, 111, 110, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 58,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 92, 73, 79, 92, 66,
			118, 104, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 67, 108, 105, 112, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 53, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 92, 73, 79, 92, 66, 118, 104, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 60, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 73, 79, 92, 66, 118, 104, 73,
			109, 112, 111, 114, 116, 101, 114, 67, 111, 110,
			116, 101, 120, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 66, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 73, 79, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 66, 118, 104, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 68, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 73, 79, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 85,
			110, 105, 116, 121, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 50, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 77, 117, 115, 99, 108, 101, 68, 101, 98,
			117, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 54, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 77,
			117, 115, 99, 108, 101, 73, 110, 115, 112, 101,
			99, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 80, 111, 115, 101, 77, 111, 100, 105, 102,
			105, 101, 114, 92, 72, 97, 110, 100, 80, 111,
			115, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 59, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 80,
			111, 115, 101, 77, 111, 100, 105, 102, 105, 101,
			114, 92, 72, 97, 110, 100, 82, 105, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 65,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 92, 80, 111, 115, 101,
			77, 111, 100, 105, 102, 105, 101, 114, 92, 73,
			80, 111, 115, 101, 77, 111, 100, 105, 102, 105,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 47, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 83,
			107, 101, 108, 101, 116, 111, 110, 46, 99, 115,
			0, 0, 0, 4, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 83, 107, 101, 108, 101, 116,
			111, 110, 69, 115, 116, 105, 109, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 4, 0, 0,
			0, 58, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 92, 83, 107,
			101, 108, 101, 116, 111, 110, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 46, 99, 115
		};
		result.TypesData = new byte[1491]
		{
			0, 0, 0, 0, 32, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 67, 108, 105, 112,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 21, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 111, 110, 101, 76, 105,
			109, 105, 116, 0, 0, 0, 0, 29, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 124,
			65, 118, 97, 116, 97, 114, 68, 101, 115, 99,
			114, 105, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 27, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 111, 110, 101, 71, 105,
			122, 109, 111, 68, 114, 97, 119, 101, 114, 0,
			0, 0, 0, 23, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 124, 66, 111, 110, 101,
			77, 97, 112, 112, 105, 110, 103, 0, 0, 0,
			0, 19, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 66, 111, 110,
			101, 0, 0, 0, 0, 26, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 124, 69, 110,
			117, 109, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 27, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 70,
			111, 114, 99, 101, 85, 110, 105, 113, 117, 101,
			78, 97, 109, 101, 0, 0, 0, 0, 15, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 66, 118, 104, 0, 0, 0, 0, 32, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			46, 66, 118, 104, 124, 80, 97, 116, 104, 87,
			105, 116, 104, 80, 114, 111, 112, 101, 114, 116,
			121, 0, 0, 0, 0, 32, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 124, 66, 118,
			104, 67, 104, 97, 110, 110, 101, 108, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 27, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 66, 118, 104, 67, 104,
			97, 110, 110, 101, 108, 67, 117, 114, 118, 101,
			0, 0, 0, 0, 22, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 66, 118, 104,
			69, 110, 100, 83, 105, 116, 101, 0, 0, 0,
			0, 24, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 0, 0, 0, 0,
			19, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 66, 118, 104, 78, 111, 100, 101,
			0, 0, 0, 0, 20, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 72, 117, 109,
			97, 110, 111, 105, 100, 0, 0, 0, 0, 31,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 46, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 86, 97, 108, 105, 100, 97, 116, 105, 111,
			110, 0, 0, 0, 0, 26, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 124, 72, 117,
			109, 97, 110, 111, 105, 100, 76, 111, 97, 100,
			101, 114, 0, 0, 0, 0, 25, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 72,
			117, 109, 97, 110, 80, 111, 115, 101, 67, 108,
			105, 112, 0, 0, 0, 0, 29, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 72,
			117, 109, 97, 110, 80, 111, 115, 101, 84, 114,
			97, 110, 115, 102, 101, 114, 0, 0, 0, 0,
			17, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 73, 66, 111, 110, 101, 0, 0,
			0, 0, 27, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 73, 66, 111, 110, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 24, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 66, 118, 104,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 33, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 46, 66, 118, 104, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 124, 67,
			117, 114, 118, 101, 83, 101, 116, 0, 0, 0,
			0, 23, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 73, 109, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 27,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 124, 73, 109, 112, 111, 114, 116, 101, 114,
			67, 111, 110, 116, 101, 120, 116, 0, 0, 0,
			0, 30, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 73, 109, 112,
			111, 114, 116, 101, 114, 67, 111, 110, 116, 101,
			120, 116, 0, 0, 0, 0, 25, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 66,
			118, 104, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 27, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 85,
			110, 105, 116, 121, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 23, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 77, 117, 115, 99, 108, 101, 68, 101, 98,
			117, 103, 0, 0, 0, 0, 30, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 46, 77,
			117, 115, 99, 108, 101, 68, 101, 98, 117, 103,
			124, 77, 117, 115, 99, 108, 101, 0, 0, 0,
			0, 24, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 77, 117, 115, 99, 108, 101,
			68, 114, 97, 119, 101, 114, 0, 0, 0, 0,
			27, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 77, 117, 115, 99, 108, 101, 73,
			110, 115, 112, 101, 99, 116, 111, 114, 0, 0,
			0, 0, 28, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 72, 97, 110, 100, 80,
			111, 115, 101, 77, 111, 100, 105, 102, 105, 101,
			114, 0, 0, 0, 0, 37, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 46, 72, 97,
			110, 100, 80, 111, 115, 101, 77, 111, 100, 105,
			102, 105, 101, 114, 124, 72, 97, 110, 100, 80,
			111, 115, 101, 0, 0, 0, 0, 19, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 124,
			72, 97, 110, 100, 82, 105, 103, 0, 0, 0,
			0, 25, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 73, 80, 111, 115, 101, 77,
			111, 100, 105, 102, 105, 101, 114, 0, 0, 0,
			0, 20, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 83, 107, 101, 108, 101, 116,
			111, 110, 0, 0, 0, 0, 29, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 73,
			83, 107, 101, 108, 101, 116, 111, 110, 68, 101,
			116, 101, 99, 116, 111, 114, 0, 0, 0, 0,
			32, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 66, 118, 104, 83, 107, 101, 108,
			101, 116, 111, 110, 69, 115, 116, 105, 109, 97,
			116, 111, 114, 0, 0, 0, 0, 36, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 46,
			66, 118, 104, 83, 107, 101, 108, 101, 116, 111,
			110, 69, 115, 116, 105, 109, 97, 116, 111, 114,
			124, 65, 114, 109, 0, 0, 0, 0, 36, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			46, 66, 118, 104, 83, 107, 101, 108, 101, 116,
			111, 110, 69, 115, 116, 105, 109, 97, 116, 111,
			114, 124, 76, 101, 103, 0, 0, 0, 0, 31,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 124, 83, 107, 101, 108, 101, 116, 111, 110,
			77, 101, 115, 104, 85, 116, 105, 108, 105, 116,
			121, 0, 0, 0, 0, 38, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 46, 83, 107,
			101, 108, 101, 116, 111, 110, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 124, 84, 83,
			82, 66, 111, 120, 0, 0, 0, 0, 43, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			46, 83, 107, 101, 108, 101, 116, 111, 110, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 77, 101, 115, 104, 66, 117, 105, 108, 100,
			101, 114, 0, 0, 0, 0, 44, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 46, 83,
			107, 101, 108, 101, 116, 111, 110, 77, 101, 115,
			104, 85, 116, 105, 108, 105, 116, 121, 124, 66,
			111, 110, 101, 72, 101, 97, 100, 84, 97, 105,
			108
		};
		result.TotalFiles = 31;
		result.TotalTypes = 46;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniHumanoid;

public static class AnimationClipUtility
{
	private static Dictionary<string, string> TraitPropMap = new Dictionary<string, string>
	{
		{ "Left Thumb 1 Stretched", "LeftHand.Thumb.1 Stretched" },
		{ "Left Thumb Spread", "LeftHand.Thumb Spread" },
		{ "Left Thumb 2 Stretched", "LeftHand.Thumb.2 Stretched" },
		{ "Left Thumb 3 Stretched", "LeftHand.Thumb.3 Stretched" },
		{ "Left Index 1 Stretched", "LeftHand.Index.1 Stretched" },
		{ "Left Index Spread", "LeftHand.Index Spread" },
		{ "Left Index 2 Stretched", "LeftHand.Index.2 Stretched" },
		{ "Left Index 3 Stretched", "LeftHand.Index.3 Stretched" },
		{ "Left Middle 1 Stretched", "LeftHand.Middle.1 Stretched" },
		{ "Left Middle Spread", "LeftHand.Middle Spread" },
		{ "Left Middle 2 Stretched", "LeftHand.Middle.2 Stretched" },
		{ "Left Middle 3 Stretched", "LeftHand.Middle.3 Stretched" },
		{ "Left Ring 1 Stretched", "LeftHand.Ring.1 Stretched" },
		{ "Left Ring Spread", "LeftHand.Ring Spread" },
		{ "Left Ring 2 Stretched", "LeftHand.Ring.2 Stretched" },
		{ "Left Ring 3 Stretched", "LeftHand.Ring.3 Stretched" },
		{ "Left Little 1 Stretched", "LeftHand.Little.1 Stretched" },
		{ "Left Little Spread", "LeftHand.Little Spread" },
		{ "Left Little 2 Stretched", "LeftHand.Little.2 Stretched" },
		{ "Left Little 3 Stretched", "LeftHand.Little.3 Stretched" },
		{ "Right Thumb 1 Stretched", "RightHand.Thumb.1 Stretched" },
		{ "Right Thumb Spread", "RightHand.Thumb Spread" },
		{ "Right Thumb 2 Stretched", "RightHand.Thumb.2 Stretched" },
		{ "Right Thumb 3 Stretched", "RightHand.Thumb.3 Stretched" },
		{ "Right Index 1 Stretched", "RightHand.Index.1 Stretched" },
		{ "Right Index Spread", "RightHand.Index Spread" },
		{ "Right Index 2 Stretched", "RightHand.Index.2 Stretched" },
		{ "Right Index 3 Stretched", "RightHand.Index.3 Stretched" },
		{ "Right Middle 1 Stretched", "RightHand.Middle.1 Stretched" },
		{ "Right Middle Spread", "RightHand.Middle Spread" },
		{ "Right Middle 2 Stretched", "RightHand.Middle.2 Stretched" },
		{ "Right Middle 3 Stretched", "RightHand.Middle.3 Stretched" },
		{ "Right Ring 1 Stretched", "RightHand.Ring.1 Stretched" },
		{ "Right Ring Spread", "RightHand.Ring Spread" },
		{ "Right Ring 2 Stretched", "RightHand.Ring.2 Stretched" },
		{ "Right Ring 3 Stretched", "RightHand.Ring.3 Stretched" },
		{ "Right Little 1 Stretched", "RightHand.Little.1 Stretched" },
		{ "Right Little Spread", "RightHand.Little Spread" },
		{ "Right Little 2 Stretched", "RightHand.Little.2 Stretched" },
		{ "Right Little 3 Stretched", "RightHand.Little.3 Stretched" }
	};

	public static AnimationClip CreateAnimationClipFromHumanPose(HumanPose pose)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Expected O, but got Unknown
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Expected O, but got Unknown
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Expected O, but got Unknown
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Expected O, but got Unknown
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: Expected O, but got Unknown
		//IL_0177: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		//IL_0187: Unknown result type (might be due to invalid IL or missing references)
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0193: Expected O, but got Unknown
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01db: Expected O, but got Unknown
		//IL_020c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0215: Unknown result type (might be due to invalid IL or missing references)
		//IL_021a: Unknown result type (might be due to invalid IL or missing references)
		//IL_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: Expected O, but got Unknown
		AnimationClip val = new AnimationClip();
		AnimationCurve val2 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyPosition.x)
		});
		string text = "RootT.x";
		val.SetCurve((string)null, typeof(Animator), text, val2);
		AnimationCurve val3 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyPosition.y)
		});
		string text2 = "RootT.y";
		val.SetCurve((string)null, typeof(Animator), text2, val3);
		AnimationCurve val4 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyPosition.z)
		});
		string text3 = "RootT.z";
		val.SetCurve((string)null, typeof(Animator), text3, val4);
		AnimationCurve val5 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.x)
		});
		string text4 = "RootQ.x";
		val.SetCurve((string)null, typeof(Animator), text4, val5);
		AnimationCurve val6 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.y)
		});
		string text5 = "RootQ.y";
		val.SetCurve((string)null, typeof(Animator), text5, val6);
		AnimationCurve val7 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.z)
		});
		string text6 = "RootQ.z";
		val.SetCurve((string)null, typeof(Animator), text6, val7);
		AnimationCurve val8 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.w)
		});
		string text7 = "RootQ.w";
		val.SetCurve((string)null, typeof(Animator), text7, val8);
		for (int i = 0; i < HumanTrait.MuscleCount; i++)
		{
			AnimationCurve val9 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
			{
				new Keyframe(0f, pose.muscles[i])
			});
			string text8 = HumanTrait.MuscleName[i];
			if (TraitPropMap.ContainsKey(text8))
			{
				text8 = TraitPropMap[text8];
			}
			val.SetCurve((string)null, typeof(Animator), text8, val9);
		}
		return val;
	}
}
[Serializable]
public struct BoneLimit
{
	public HumanBodyBones humanBone;

	public string boneName;

	public bool useDefaultValues;

	public Vector3 min;

	public Vector3 max;

	public Vector3 center;

	public float axisLength;

	private static readonly Dictionary<HumanBodyBones, string> cachedHumanBodyBonesToBoneTraitNameMap = ((IEnumerable<string>)HumanTrait.BoneName).ToDictionary((Func<string, HumanBodyBones>)((string traitName) => (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), traitName.Replace(" ", ""))), (Func<string, string>)((string traitName) => traitName));

	private static readonly Dictionary<string, HumanBodyBones> cachedBoneTraitNameToHumanBodyBonesMap = ((IEnumerable<string>)HumanTrait.BoneName).ToDictionary((Func<string, string>)((string traitName) => traitName), (Func<string, HumanBodyBones>)((string traitName) => (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), traitName.Replace(" ", ""))));

	public static BoneLimit From(HumanBone bone)
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		BoneLimit result = default(BoneLimit);
		result.humanBone = cachedBoneTraitNameToHumanBodyBonesMap[((HumanBone)(ref bone)).humanName];
		result.boneName = ((HumanBone)(ref bone)).boneName;
		result.useDefaultValues = ((HumanLimit)(ref bone.limit)).useDefaultValues;
		result.min = ((HumanLimit)(ref bone.limit)).min;
		result.max = ((HumanLimit)(ref bone.limit)).max;
		result.center = ((HumanLimit)(ref bone.limit)).center;
		result.axisLength = ((HumanLimit)(ref bone.limit)).axisLength;
		return result;
	}

	public HumanBone ToHumanBone()
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		HumanBone result = default(HumanBone);
		((HumanBone)(ref result)).boneName = boneName;
		((HumanBone)(ref result)).humanName = cachedHumanBodyBonesToBoneTraitNameMap[humanBone];
		HumanLimit limit = default(HumanLimit);
		((HumanLimit)(ref limit)).useDefaultValues = useDefaultValues;
		((HumanLimit)(ref limit)).axisLength = axisLength;
		((HumanLimit)(ref limit)).center = center;
		((HumanLimit)(ref limit)).max = max;
		((HumanLimit)(ref limit)).min = min;
		result.limit = limit;
		return result;
	}
}
[Serializable]
public class AvatarDescription : ScriptableObject
{
	public float armStretch = 0.05f;

	public float legStretch = 0.05f;

	public float upperArmTwist = 0.5f;

	public float lowerArmTwist = 0.5f;

	public float upperLegTwist = 0.5f;

	public float lowerLegTwist = 0.5f;

	public float feetSpacing = 0f;

	public bool hasTranslationDoF;

	public BoneLimit[] human;

	public HumanDescription ToHumanDescription(Transform root)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		Transform[] componentsInChildren = ((Component)root).GetComponentsInChildren<Transform>();
		SkeletonBone[] array = (SkeletonBone[])(object)new SkeletonBone[componentsInChildren.Length];
		int num = 0;
		Transform[] array2 = componentsInChildren;
		foreach (Transform t in array2)
		{
			array[num] = t.ToSkeletonBone();
			num++;
		}
		HumanBone[] array3 = (HumanBone[])(object)new HumanBone[human.Length];
		num = 0;
		BoneLimit[] array4 = human;
		foreach (BoneLimit boneLimit in array4)
		{
			array3[num] = boneLimit.ToHumanBone();
			num++;
		}
		HumanDescription result = default(HumanDescription);
		result.skeleton = array;
		result.human = array3;
		((HumanDescription)(ref result)).armStretch = armStretch;
		((HumanDescription)(ref result)).legStretch = legStretch;
		((HumanDescription)(ref result)).upperArmTwist = upperArmTwist;
		((HumanDescription)(ref result)).lowerArmTwist = lowerArmTwist;
		((HumanDescription)(ref result)).upperLegTwist = upperLegTwist;
		((HumanDescription)(ref result)).lowerLegTwist = lowerLegTwist;
		((HumanDescription)(ref result)).feetSpacing = feetSpacing;
		((HumanDescription)(ref result)).hasTranslationDoF = hasTranslationDoF;
		return result;
	}

	public Avatar CreateAvatar(Transform root)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		ForceUniqueName.Process(root);
		return AvatarBuilder.BuildHumanAvatar(((Component)root).gameObject, ToHumanDescription(root));
	}

	public Avatar CreateAvatarAndSetup(Transform root)
	{
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		Avatar val = CreateAvatar(root);
		((Object)val).name = ((Object)this).name;
		Animator component = ((Component)root).GetComponent<Animator>();
		if ((Object)(object)component != (Object)null)
		{
			Dictionary<Transform, Vector3> dictionary = root.Traverse().ToDictionary((Transform x) => x, (Transform x) => x.position);
			component.avatar = val;
			foreach (Transform item in root.Traverse())
			{
				item.position = dictionary[item];
			}
		}
		HumanPoseTransfer component2 = ((Component)root).GetComponent<HumanPoseTransfer>();
		if ((Object)(object)component2 != (Object)null)
		{
			component2.Avatar = val;
		}
		return val;
	}

	public static AvatarDescription CreateFrom(Avatar avatar)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		HumanDescription des = default(HumanDescription);
		if (!GetHumanDescription((Object)(object)avatar, ref des))
		{
			return null;
		}
		return CreateFrom(des);
	}

	public static AvatarDescription CreateFrom(HumanDescription description)
	{
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		AvatarDescription avatarDescription = ScriptableObject.CreateInstance<AvatarDescription>();
		((Object)avatarDescription).name = "AvatarDescription";
		avatarDescription.armStretch = ((HumanDescription)(ref description)).armStretch;
		avatarDescription.legStretch = ((HumanDescription)(ref description)).legStretch;
		avatarDescription.feetSpacing = ((HumanDescription)(ref description)).feetSpacing;
		avatarDescription.hasTranslationDoF = ((HumanDescription)(ref description)).hasTranslationDoF;
		avatarDescription.lowerArmTwist = ((HumanDescription)(ref description)).lowerArmTwist;
		avatarDescription.lowerLegTwist = ((HumanDescription)(ref description)).lowerLegTwist;
		avatarDescription.upperArmTwist = ((HumanDescription)(ref description)).upperArmTwist;
		avatarDescription.upperLegTwist = ((HumanDescription)(ref description)).upperLegTwist;
		avatarDescription.human = description.human.Select(BoneLimit.From).ToArray();
		return avatarDescription;
	}

	public static AvatarDescription Create(AvatarDescription src = null)
	{
		AvatarDescription avatarDescription = ScriptableObject.CreateInstance<AvatarDescription>();
		((Object)avatarDescription).name = "AvatarDescription";
		if ((Object)(object)src != (Object)null)
		{
			avatarDescription.armStretch = src.armStretch;
			avatarDescription.legStretch = src.legStretch;
			avatarDescription.feetSpacing = src.feetSpacing;
			avatarDescription.upperArmTwist = src.upperArmTwist;
			avatarDescription.lowerArmTwist = src.lowerArmTwist;
			avatarDescription.upperLegTwist = src.upperLegTwist;
			avatarDescription.lowerLegTwist = src.lowerLegTwist;
		}
		else
		{
			avatarDescription.armStretch = 0.05f;
			avatarDescription.legStretch = 0.05f;
			avatarDescription.feetSpacing = 0f;
			avatarDescription.lowerArmTwist = 0.5f;
			avatarDescription.upperArmTwist = 0.5f;
			avatarDescription.upperLegTwist = 0.5f;
			avatarDescription.lowerLegTwist = 0.5f;
		}
		return avatarDescription;
	}

	public static AvatarDescription Create(Transform[] boneTransforms, Skeleton skeleton)
	{
		return Create(skeleton.Bones.Select((KeyValuePair<HumanBodyBones, int> x) => new KeyValuePair<HumanBodyBones, Transform>(x.Key, boneTransforms[x.Value])));
	}

	public static AvatarDescription Create(IEnumerable<KeyValuePair<HumanBodyBones, Transform>> skeleton)
	{
		AvatarDescription avatarDescription = Create();
		avatarDescription.SetHumanBones(skeleton);
		return avatarDescription;
	}

	public void SetHumanBones(IEnumerable<KeyValuePair<HumanBodyBones, Transform>> skeleton)
	{
		human = skeleton.Select(delegate(KeyValuePair<HumanBodyBones, Transform> x)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			BoneLimit result = default(BoneLimit);
			result.humanBone = x.Key;
			result.boneName = ((Object)x.Value).name;
			result.useDefaultValues = true;
			return result;
		}).ToArray();
	}

	public static bool GetHumanDescription(Object target, ref HumanDescription des)
	{
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		if (target != (Object)null)
		{
			AssetImporter atPath = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(target));
			if ((Object)(object)atPath != (Object)null)
			{
				Debug.Log((object)("AssetImporter Type: " + ((object)atPath).GetType()));
				ModelImporter val = (ModelImporter)(object)((atPath is ModelImporter) ? atPath : null);
				if ((Object)(object)val != (Object)null)
				{
					des = val.humanDescription;
					Debug.Log((object)"## Cool stuff data by ModelImporter ##");
					return true;
				}
				Debug.LogWarning((object)"## Please Select Imported Model in Project View not prefab or other things ##");
			}
		}
		return false;
	}

	public static Avatar CreateAvatarForCopyHierarchy(Animator src, GameObject dst, IDictionary<Transform, Transform> boneMap, Action<AvatarDescription> modAvatarDesc = null)
	{
		if ((Object)(object)src == (Object)null)
		{
			throw new ArgumentNullException("src");
		}
		var source = from x in CachedEnum.GetValues<HumanBodyBones>()
			where (int)x != 55
			select new
			{
				Key = x,
				Value = src.GetBoneTransform(x)
			} into x
			where (Object)(object)x.Value != (Object)null
			select x;
		Dictionary<HumanBodyBones, Transform> humanBones = source.Where(x => boneMap.ContainsKey(x.Value)).ToDictionary(x => x.Key, x => boneMap[x.Value]);
		AvatarDescription avatarDescription = Create();
		modAvatarDesc?.Invoke(avatarDescription);
		avatarDescription.SetHumanBones(humanBones);
		Avatar val = avatarDescription.CreateAvatar(dst.transform);
		((Object)val).name = "created";
		return val;
	}

	public static Avatar RecreateAvatar(Animator src)
	{
		if ((Object)(object)src == (Object)null)
		{
			throw new ArgumentNullException("src");
		}
		var source = from x in CachedEnum.GetValues<HumanBodyBones>()
			where (int)x != 55
			select new
			{
				Key = x,
				Value = src.GetBoneTransform(x)
			} into x
			where (Object)(object)x.Value != (Object)null
			select x;
		Dictionary<HumanBodyBones, Transform> humanBones = source.ToDictionary(x => x.Key, x => x.Value);
		AvatarDescription avatarDescription = Create();
		avatarDescription.SetHumanBones(humanBones);
		Avatar val = avatarDescription.CreateAvatar(((Component)src).transform);
		((Object)val).name = "created";
		return val;
	}
}
public class BoneGizmoDrawer : MonoBehaviour
{
	private const float size = 0.03f;

	private readonly Vector3 SIZE = new Vector3(0.03f, 0.03f, 0.03f);

	[SerializeField]
	public bool Draw = true;

	private void OnDrawGizmos()
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		if (Draw && (Object)(object)((Component)this).transform.parent != (Object)null)
		{
			Gizmos.color = Color.yellow;
			Gizmos.DrawCube(((Component)this).transform.position, SIZE);
			Gizmos.DrawLine(((Component)this).transform.parent.position, ((Component)this).transform.position);
			Handles.Label(((Component)this).transform.position, ((Object)this).name);
		}
	}
}
public class BoneMapping : MonoBehaviour
{
	[SerializeField]
	public GameObject[] Bones = (GameObject[])(object)new GameObject[55];

	[SerializeField]
	public AvatarDescription Description;

	private void Reset()
	{
		GetBones();
	}

	private void GetBones()
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Invalid comparison between Unknown and I4
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		Bones = (GameObject[])(object)new GameObject[55];
		Animator component = ((Component)this).GetComponent<Animator>();
		if (!((Object)(object)component != (Object)null) || !((Object)(object)component.avatar != (Object)null))
		{
			return;
		}
		HumanBodyBones[] values = CachedEnum.GetValues<HumanBodyBones>();
		foreach (HumanBodyBones val in values)
		{
			if ((int)val == 55)
			{
				break;
			}
			Transform boneTransform = component.GetBoneTransform(val);
			if ((Object)(object)boneTransform != (Object)null)
			{
				Bones[val] = ((Component)boneTransform).gameObject;
			}
		}
	}

	public void GuessBoneMapping()
	{
		GameObject val = Bones[0];
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogWarning((object)"require hips");
			return;
		}
		BvhSkeletonEstimator bvhSkeletonEstimator = new BvhSkeletonEstimator();
		Skeleton skeleton = bvhSkeletonEstimator.Detect(val.transform);
		Transform[] array = val.transform.Traverse().ToArray();
		for (int i = 0; i < 55; i++)
		{
			int boneIndex = skeleton.GetBoneIndex((HumanBodyBones)i);
			if (boneIndex >= 0)
			{
				Bones[i] = ((Component)array[boneIndex]).gameObject;
			}
		}
	}

	public void EnsureTPose()
	{
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_0108: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Unknown result type (might be due to invalid IL or missing references)
		//IL_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0131: Unknown result type (might be due to invalid IL or missing references)
		Dictionary<HumanBodyBones, Transform> dictionary = (from x in Bones.Select((GameObject x, int i) => new { i, x })
			where (Object)(object)x.x != (Object)null
			select x).ToDictionary(x => (HumanBodyBones)x.i, x => x.x.transform);
		Vector3 val = dictionary[(HumanBodyBones)15].position - dictionary[(HumanBodyBones)13].position;
		Vector3 normalized = ((Vector3)(ref val)).normalized;
		dictionary[(HumanBodyBones)13].rotation = Quaternion.FromToRotation(normalized, Vector3.left) * dictionary[(HumanBodyBones)13].rotation;
		val = dictionary[(HumanBodyBones)16].position - dictionary[(HumanBodyBones)14].position;
		Vector3 normalized2 = ((Vector3)(ref val)).normalized;
		dictionary[(HumanBodyBones)14].rotation = Quaternion.FromToRotation(normalized2, Vector3.right) * dictionary[(HumanBodyBones)14].rotation;
	}

	public static void SetBonesToDescription(BoneMapping mapping, AvatarDescription description)
	{
		Dictionary<HumanBodyBones, Transform> humanBones = (from x in mapping.Bones.Select((GameObject x, int i) => new { i, x })
			where (Object)(object)x.x != (Object)null
			select x).ToDictionary(x => (HumanBodyBones)x.i, x => x.x.transform);
		description.SetHumanBones(humanBones);
	}

	private void Awake()
	{
		if (Bones == null || Bones.All((GameObject x) => (Object)(object)x == (Object)null))
		{
			GetBones();
		}
	}
}
public class BvhBone : IBone
{
	private List<IBone> _children = new List<IBone>();

	public string Name { get; private set; }

	public Vector3 SkeletonLocalPosition { get; private set; }

	public IBone Parent { get; private set; }

	public IList<IBone> Children => _children;

	public BvhBone(string name, Vector3 position)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		Name = name;
		SkeletonLocalPosition = position;
	}

	public override string ToString()
	{
		return $"<BvhBone: {Name}>";
	}

	public void Build(Transform t)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		foreach (Transform item in t)
		{
			Transform val = item;
			BvhBone bvhBone = new BvhBone(((Object)val).name, SkeletonLocalPosition + val.localPosition);
			bvhBone.Parent = this;
			_children.Add(bvhBone);
			bvhBone.Build(val);
		}
	}

	public void Build(BvhNode node)
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		foreach (BvhNode child in node.Children)
		{
			BvhBone bvhBone = new BvhBone(child.Name, SkeletonLocalPosition + child.Offset.ToXReversedVector3());
			bvhBone.Parent = this;
			_children.Add(bvhBone);
			bvhBone.Build(child);
		}
	}

	public IEnumerable<BvhBone> Traverse()
	{
		yield return this;
		foreach (IBone child in Children)
		{
			foreach (IBone x in child.Traverse())
			{
				yield return (BvhBone)x;
			}
		}
	}
}
public static class EnumExtensions
{
	public static string ToStringFromEnum(this HumanBodyBones val, bool compareBoneTrait = false)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: Expected I4, but got Unknown
		return (int)val switch
		{
			0 => "Hips", 
			1 => "LeftUpperLeg", 
			2 => "RightUpperLeg", 
			3 => "LeftLowerLeg", 
			4 => "RightLowerLeg", 
			5 => "LeftFoot", 
			6 => "RightFoot", 
			7 => "Spine", 
			8 => "Chest", 
			9 => "Neck", 
			10 => "Head", 
			11 => "LeftShoulder", 
			12 => "RightShoulder", 
			13 => "LeftUpperArm", 
			14 => "RightUpperArm", 
			15 => "LeftLowerArm", 
			16 => "RightLowerArm", 
			17 => "LeftHand", 
			18 => "RightHand", 
			19 => "LeftToes", 
			20 => "RightToes", 
			21 => "LeftEye", 
			22 => "RightEye", 
			23 => "Jaw", 
			24 => compareBoneTrait ? "Left Thumb Proximal" : "LeftThumbProximal", 
			25 => compareBoneTrait ? "Left Thumb Intermediate" : "LeftThumbIntermediate", 
			26 => compareBoneTrait ? "Left Thumb Distal" : "LeftThumbDistal", 
			27 => compareBoneTrait ? "Left Index Proximal" : "LeftIndexProximal", 
			28 => compareBoneTrait ? "Left Index Intermediate" : "LeftIndexIntermediate", 
			29 => compareBoneTrait ? "Left Index Distal" : "LeftIndexDistal", 
			30 => compareBoneTrait ? "Left Middle Proximal" : "LeftMiddleProximal", 
			31 => compareBoneTrait ? "Left Middle Intermediate" : "LeftMiddleIntermediate", 
			32 => compareBoneTrait ? "Left Middle Distal" : "LeftMiddleDistal", 
			33 => compareBoneTrait ? "Left Ring Proximal" : "LeftRingProximal", 
			34 => compareBoneTrait ? "Left Ring Intermediate" : "LeftRingIntermediate", 
			35 => compareBoneTrait ? "Left Ring Distal" : "LeftRingDistal", 
			36 => compareBoneTrait ? "Left Little Proximal" : "LeftLittleProximal", 
			37 => compareBoneTrait ? "Left Little Intermediate" : "LeftLittleIntermediate", 
			38 => compareBoneTrait ? "Left Little Distal" : "LeftLittleDistal", 
			39 => compareBoneTrait ? "Right Thumb Proximal" : "RightThumbProximal", 
			40 => compareBoneTrait ? "Right Thumb Intermediate" : "RightThumbIntermediate", 
			41 => compareBoneTrait ? "Right Thumb Distal" : "RightThumbDistal", 
			42 => compareBoneTrait ? "Right Index Proximal" : "RightIndexProximal", 
			43 => compareBoneTrait ? "Right Index Intermediate" : "RightIndexIntermediate", 
			44 => compareBoneTrait ? "Right Index Distal" : "RightIndexDistal", 
			45 => compareBoneTrait ? "Right Middle Proximal" : "RightMiddleProximal", 
			46 => compareBoneTrait ? "Right Middle Intermediate" : "RightMiddleIntermediate", 
			47 => compareBoneTrait ? "Right Middle Distal" : "RightMiddleDistal", 
			48 => compareBoneTrait ? "Right Ring Proximal" : "RightRingProximal", 
			49 => compareBoneTrait ? "Right Ring Intermediate" : "RightRingIntermediate", 
			50 => compareBoneTrait ? "Right Ring Distal" : "RightRingDistal", 
			51 => compareBoneTrait ? "Right Little Proximal" : "RightLittleProximal", 
			52 => compareBoneTrait ? "Right Little Intermediate" : "RightLittleIntermediate", 
			53 => compareBoneTrait ? "Right Little Distal" : "RightLittleDistal", 
			54 => "UpperChest", 
			55 => "LastBone", 
			_ => throw new InvalidOperationException(), 
		};
	}
}
internal class ForceUniqueName
{
	private HashSet<string> m_uniqueNameSet = new HashSet<string>();

	private int m_counter = 1;

	public static void Process(Transform root)
	{
		ForceUniqueName forceUniqueName = new ForceUniqueName();
		Transform[] componentsInChildren = ((Component)root).GetComponentsInChildren<Transform>();
		Transform[] array = componentsInChildren;
		foreach (Transform t in array)
		{
			forceUniqueName.RenameIfDupName(t);
		}
	}

	public void RenameIfDupName(Transform t)
	{
		if (!m_uniqueNameSet.Contains(((Object)t).name))
		{
			m_uniqueNameSet.Add(((Object)t).name);
			return;
		}
		if ((Object)(object)t.parent != (Object)null && t.childCount == 0)
		{
			string text = ((Object)t.parent).name + "-" + ((Object)t).name;
			if (!m_uniqueNameSet.Contains(text))
			{
				Debug.LogWarning((object)("force rename !!: " + ((Object)t).name + " => " + text));
				((Object)t).name = text;
				m_uniqueNameSet.Add(text);
				return;
			}
		}
		for (int i = 0; i < 100; i++)
		{
			string text2 = $"{((Object)t).name}{m_counter++}";
			if (!m_uniqueNameSet.Contains(text2))
			{
				Debug.LogWarning((object)("force rename: " + ((Object)t).name + " => " + text2), (Object)(object)t);
				((Object)t).name = text2;
				m_uniqueNameSet.Add(text2);
				return;
			}
		}
		throw new NotImplementedException();
	}
}
public class Bvh
{
	public struct PathWithProperty
	{
		public string Path;

		public string Property;

		public bool IsLocation;
	}

	private int m_frames;

	public BvhNode Root { get; private set; }

	public TimeSpan FrameTime { get; private set; }

	public BvhChannelCurve[] Channels { get; private set; }

	public int FrameCount => m_frames;

	public bool TryGetPathWithPropertyFromChannel(BvhChannelCurve channel, out PathWithProperty pathWithProp)
	{
		int num = Channels.ToList().IndexOf(channel);
		if (num == -1)
		{
			pathWithProp = default(PathWithProperty);
			return false;
		}
		foreach (BvhNode item in Root.Traverse())
		{
			int num2 = 0;
			while (num2 < item.Channels.Length)
			{
				if (num == 0)
				{
					pathWithProp = new PathWithProperty
					{
						Path = GetPath(item),
						Property = item.Channels[num2].ToProperty(),
						IsLocation = item.Channels[num2].IsLocation()
					};
					return true;
				}
				num2++;
				num--;
			}
		}
		throw new BvhException("channel is not found");
	}

	public string GetPath(BvhNode node)
	{
		List<string> list = new List<string> { node.Name };
		BvhNode bvhNode = node;
		while (bvhNode != null)
		{
			bvhNode = GetParent(bvhNode);
			if (bvhNode != null)
			{
				list.Insert(0, bvhNode.Name);
			}
		}
		return string.Join("/", list.ToArray());
	}

	private BvhNode GetParent(BvhNode node)
	{
		foreach (BvhNode item in Root.Traverse())
		{
			if (item.Children.Contains(node))
			{
				return item;
			}
		}
		return null;
	}

	public BvhChannelCurve GetChannel(BvhNode target, BvhChannel channel)
	{
		int num = 0;
		foreach (BvhNode item in Root.Traverse())
		{
			int num2 = 0;
			while (num2 < item.Channels.Length)
			{
				if (item == target && item.Channels[num2] == channel)
				{
					return Channels[num];
				}
				num2++;
				num++;
			}
		}
		throw new BvhException("channel is not found");
	}

	public override string ToString()
	{
		return $"{Root.Traverse().Count()}nodes, {Channels.Length}channels, {m_frames}frames, {(double)m_frames * FrameTime.TotalSeconds:0.00}seconds";
	}

	public Bvh(BvhNode root, int frames, float seconds)
	{
		Root = root;
		FrameTime = TimeSpan.FromSeconds(seconds);
		m_frames = frames;
		int count = (from x in Root.Traverse()
			where x.Channels != null
			select x.Channels.Length).Sum();
		Channels = (from x in Enumerable.Range(0, count)
			select new BvhChannelCurve(frames)).ToArray();
	}

	public void ParseFrame(int frame, string line)
	{
		string[] array = (from x in line.Trim().Split()
			where !string.IsNullOrEmpty(x)
			select x).ToArray();
		if (array.Length != Channels.Length)
		{
			throw new BvhException("frame key count is not match channel count");
		}
		for (int i = 0; i < Channels.Length; i++)
		{
			Channels[i].SetKey(frame, float.Parse(array[i], CultureInfo.InvariantCulture));
		}
	}

	public static Bvh Parse(string src)
	{
		using StringReader stringReader = new StringReader(src);
		string text = stringReader.ReadLine();
		if (text != "HIERARCHY")
		{
			throw new BvhException("not start with HIERARCHY");
		}
		BvhNode bvhNode = ParseNode(stringReader);
		if (bvhNode == null)
		{
			return null;
		}
		int num = 0;
		float seconds = 0f;
		if (stringReader.ReadLine() == "MOTION")
		{
			string[] array = stringReader.ReadLine().Split(':');
			if (array[0] != "Frames")
			{
				throw new BvhException("Frames is not found");
			}
			num = int.Parse(array[1]);
			string[] array2 = stringReader.ReadLine().Split(':');
			if (array2[0] != "Frame Time")
			{
				throw new BvhException("Frame Time is not found");
			}
			seconds = float.Parse(array2[1], CultureInfo.InvariantCulture);
		}
		Bvh bvh = new Bvh(bvhNode, num, seconds);
		for (int i = 0; i < num; i++)
		{
			string line = stringReader.ReadLine();
			bvh.ParseFrame(i, line);
		}
		return bvh;
	}

	private static BvhNode ParseNode(StringReader r, int level = 0)
	{
		string text = r.ReadLine().Trim();
		string[] array = text.Split();
		if (array.Length != 2)
		{
			if (array.Length == 1 && array[0] == "}")
			{
				return null;
			}
			throw new BvhException($"split to {array.Length}({text})");
		}
		BvhNode bvhNode = null;
		if (array[0] == "ROOT")
		{
			if (level != 0)
			{
				throw new BvhException("nested ROOT");
			}
			bvhNode = new BvhNode(array[1]);
		}
		else if (array[0] == "JOINT")
		{
			if (level == 0)
			{
				throw new BvhException("should ROOT, but JOINT");
			}
			bvhNode = new BvhNode(array[1]);
		}
		else
		{
			if (!(array[0] == "End"))
			{
				throw new BvhException("unknown type: " + array[0]);
			}
			if (level == 0)
			{
				throw new BvhException("End in level 0");
			}
			bvhNode = new BvhEndSite();
		}
		if (r.ReadLine().Trim() != "{")
		{
			throw new BvhException("'{' is not found");
		}
		bvhNode.Parse(r);
		while (true)
		{
			BvhNode bvhNode2 = ParseNode(r, level + 1);
			if (bvhNode2 == null)
			{
				break;
			}
			if (!(bvhNode2 is BvhEndSite))
			{
				bvhNode.Children.Add(bvhNode2);
			}
		}
		return bvhNode;
	}
}
public enum BvhChannel
{
	Xposition,
	Yposition,
	Zposition,
	Xrotation,
	Yrotation,
	Zrotation
}
public static class BvhChannelExtensions
{
	public static string ToProperty(this BvhChannel ch)
	{
		return ch switch
		{
			BvhChannel.Xposition => "localPosition.x", 
			BvhChannel.Yposition => "localPosition.y", 
			BvhChannel.Zposition => "localPosition.z", 
			BvhChannel.Xrotation => "localEulerAnglesBaked.x", 
			BvhChannel.Yrotation => "localEulerAnglesBaked.y", 
			BvhChannel.Zrotation => "localEulerAnglesBaked.z", 
			_ => throw new BvhException("no property for " + ch), 
		};
	}

	public static bool IsLocation(this BvhChannel ch)
	{
		switch (ch)
		{
		case BvhChannel.Xposition:
		case BvhChannel.Yposition:
		case BvhChannel.Zposition:
			return true;
		case BvhChannel.Xrotation:
		case BvhChannel.Yrotation:
		case BvhChannel.Zrotation:
			return false;
		default:
			throw new BvhException("no property for " + ch);
		}
	}
}
public class BvhChannelCurve
{
	public float[] Keys { get; private set; }

	public BvhChannelCurve(int frameCount)
	{
		Keys = new float[frameCount];
	}

	public void SetKey(int frame, float value)
	{
		Keys[frame] = value;
	}
}
public class BvhEndSite : BvhNode
{
	public BvhEndSite()
		: base("")
	{
	}

	public override void Parse(StringReader r)
	{
		r.ReadLine();
	}
}
public class BvhException : Exception
{
	public BvhException(string msg)
		: base(msg)
	{
	}
}
public class BvhNode
{
	public string Name { get; private set; }

	public Vector3 Offset { get; private set; }

	public BvhChannel[] Channels { get; private set; }

	public List<BvhNode> Children { get; private set; }

	public BvhNode(string name)
	{
		Name = name;
		Children = new List<BvhNode>();
	}

	public int GetChannelIndex(BvhChannel channel)
	{
		for (int i = 0; i < Channels.Length; i++)
		{
			if (channel == Channels[i])
			{
				return i;
			}
		}
		throw new KeyNotFoundException();
	}

	public virtual void Parse(StringReader r)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		Offset = ParseOffset(r.ReadLine());
		Channels = ParseChannel(r.ReadLine());
	}

	private static Vector3 ParseOffset(string line)
	{
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		string[] array = line.Trim().Split();
		if (array[0] != "OFFSET")
		{
			throw new BvhException("OFFSET is not found");
		}
		float[] array2 = (from x in array.Skip(1)
			where !string.IsNullOrEmpty(x)
			select float.Parse(x, CultureInfo.InvariantCulture)).ToArray();
		return new Vector3(array2[0], array2[1], array2[2]);
	}

	private static BvhChannel[] ParseChannel(string line)
	{
		string[] array = line.Trim().Split();
		if (array[0] != "CHANNELS")
		{
			throw new BvhException("CHANNELS is not found");
		}
		int num = int.Parse(array[1]);
		if (num + 2 != array.Length)
		{
			throw new BvhException("channel count is not match with split count");
		}
		return (from x in array.Skip(2)
			select (BvhChannel)Enum.Parse(typeof(BvhChannel), x)).ToArray();
	}

	public IEnumerable<BvhNode> Traverse()
	{
		yield return this;
		foreach (BvhNode child in Children)
		{
			foreach (BvhNode item in child.Traverse())
			{
				yield return item;
			}
		}
	}
}
[DisallowMultipleComponent]
public class Humanoid : MonoBehaviour
{
	public struct Validation
	{
		public readonly string Message;

		public readonly bool IsError;

		public Validation(string message, bool isError)
		{
			Message = message;
			IsError = isError;
		}
	}

	[SerializeField]
	private Transform m_Hips;

	[SerializeField]
	private Transform m_LeftUpperLeg;

	[SerializeField]
	private Transform m_RightUpperLeg;

	[SerializeField]
	private Transform m_LeftLowerLeg;

	[SerializeField]
	private Transform m_RightLowerLeg;

	[SerializeField]
	private Transform m_LeftFoot;

	[SerializeField]
	private Transform m_RightFoot;

	[SerializeField]
	private Transform m_LeftToes;

	[SerializeField]
	private Transform m_RightToes;

	[SerializeField]
	private Transform m_Spine;

	[SerializeField]
	private Transform m_Chest;

	[SerializeField]
	private Transform m_UpperChest;

	[SerializeField]
	private Transform m_Neck;

	[SerializeField]
	private Transform m_Head;

	[SerializeField]
	private Transform m_LeftEye;

	[SerializeField]
	private Transform m_RightEye;

	[SerializeField]
	private Transform m_Jaw;

	[SerializeField]
	private Transform m_LeftShoulder;

	[SerializeField]
	private Transform m_RightShoulder;

	[SerializeField]
	private Transform m_LeftUpperArm;

	[SerializeField]
	private Transform m_RightUpperArm;

	[SerializeField]
	private Transform m_LeftLowerArm;

	[SerializeField]
	private Transform m_RightLowerArm;

	[SerializeField]
	private Transform m_LeftHand;

	[SerializeField]
	private Transform m_RightHand;

	[SerializeField]
	private Transform m_LeftThumbProximal;

	[SerializeField]
	private Transform m_LeftThumbIntermediate;

	[SerializeField]
	private Transform m_LeftThumbDistal;

	[SerializeField]
	private Transform m_LeftIndexProximal;

	[SerializeField]
	private Transform m_LeftIndexIntermediate;

	[SerializeField]
	private Transform m_LeftIndexDistal;

	[SerializeField]
	private Transform m_LeftMiddleProximal;

	[SerializeField]
	private Transform m_LeftMiddleIntermediate;

	[SerializeField]
	private Transform m_LeftMiddleDistal;

	[SerializeField]
	private Transform m_LeftRingProximal;

	[SerializeField]
	private Transform m_LeftRingIntermediate;

	[SerializeField]
	private Transform m_LeftRingDistal;

	[SerializeField]
	private Transform m_LeftLittleProximal;

	[SerializeField]
	private Transform m_LeftLittleIntermediate;

	[SerializeField]
	private Transform m_LeftLittleDistal;

	[SerializeField]
	private Transform m_RightThumbProximal;

	[SerializeField]
	private Transform m_RightThumbIntermediate;

	[SerializeField]
	private Transform m_RightThumbDistal;

	[SerializeField]
	private Transform m_RightIndexProximal;

	[SerializeField]
	private Transform m_RightIndexIntermediate;

	[SerializeField]
	private Transform m_RightIndexDistal;

	[SerializeField]
	private Transform m_RightMiddleProximal;

	[SerializeField]
	private Transform m_RightMiddleIntermediate;

	[SerializeField]
	private Transform m_RightMiddleDistal;

	[SerializeField]
	private Transform m_RightRingProximal;

	[SerializeField]
	private Transform m_RightRingIntermediate;

	[SerializeField]
	private Transform m_RightRingDistal;

	[SerializeField]
	private Transform m_RightLittleProximal;

	[SerializeField]
	private Transform m_RightLittleIntermediate;

	[SerializeField]
	private Transform m_RightLittleDistal;

	public Transform Hips => m_Hips;

	public Transform LeftUpperLeg => m_LeftUpperLeg;

	public Transform RightUpperLeg => m_RightUpperLeg;

	public Transform LeftLowerLeg => m_LeftLowerLeg;

	public Transform RightLowerLeg => m_RightLowerLeg;

	public Transform LeftFoot => m_LeftFoot;

	public Transform RightFoot => m_RightFoot;

	public Transform LeftToes => m_LeftToes;

	public Transform RightToes => m_RightToes;

	public Transform Spine => m_Spine;

	public Transform Chest => m_Chest;

	public Transform UpperChest => m_UpperChest;

	public Transform Neck => m_Neck;

	public Transform Head => m_Head;

	public Transform LeftEye => m_LeftEye;

	public Transform RightEye => m_RightEye;

	public Transform Jaw => m_Jaw;

	public Transform LeftShoulder => m_LeftShoulder;

	public Transform RightShoulder => m_RightShoulder;

	public Transform LeftUpperArm => m_LeftUpperArm;

	public Transform RightUpperArm => m_RightUpperArm;

	public Transform LeftLowerArm => m_LeftLowerArm;

	public Transform RightLowerArm => m_RightLowerArm;

	public Transform LeftHand => m_LeftHand;

	public Transform RightHand => m_RightHand;

	public Transform LeftThumbProximal => m_LeftThumbProximal;

	public Transform LeftThumbIntermediate => m_LeftThumbIntermediate;

	public Transform LeftThumbDistal => m_LeftThumbDistal;

	public Transform LeftIndexProximal => m_LeftIndexProximal;

	public Transform LeftIndexIntermediate => m_LeftIndexIntermediate;

	public Transform LeftIndexDistal => m_LeftIndexDistal;

	public Transform LeftMiddleProximal => m_LeftMiddleProximal;

	public Transform LeftMiddleIntermediate => m_LeftMiddleIntermediate;

	public Transform LeftMiddleDistal => m_LeftMiddleDistal;

	public Transform LeftRingProximal => m_LeftRingProximal;

	public Transform LeftRingIntermediate => m_LeftRingIntermediate;

	public Transform LeftRingDistal => m_LeftRingDistal;

	public Transform LeftLittleProximal => m_LeftLittleProximal;

	public Transform LeftLittleIntermediate => m_LeftLittleIntermediate;

	public Transform LeftLittleDistal => m_LeftLittleDistal;

	public Transform RightThumbProximal => m_RightThumbProximal;

	public Transform RightThumbIntermediate => m_RightThumbIntermediate;

	public Transform RightThumbDistal => m_RightThumbDistal;

	public Transform RightIndexProximal => m_RightIndexProximal;

	public Transform RightIndexIntermediate => m_RightIndexIntermediate;

	public Transform RightIndexDistal => m_RightIndexDistal;

	public Transform RightMiddleProximal => m_RightMiddleProximal;

	public Transform RightMiddleIntermediate => m_RightMiddleIntermediate;

	public Transform RightMiddleDistal => m_RightMiddleDistal;

	public Transform RightRingProximal => m_RightRingProximal;

	public Transform RightRingIntermediate => m_RightRingIntermediate;

	public Transform RightRingDistal => m_RightRingDistal;

	public Transform RightLittleProximal => m_RightLittleProximal;

	public Transform RightLittleIntermediate => m_RightLittleIntermediate;

	public Transform RightLittleDistal => m_RightLittleDistal;

	public IEnumerable<(Transform, HumanBodyBones)> BoneMap
	{
		get
		{
			if ((Object)(object)Hips != (Object)null)
			{
				yield return (Hips, (HumanBodyBones)0);
			}
			if ((Object)(object)LeftUpperLeg != (Object)null)
			{
				yield return (LeftUpperLeg, (HumanBodyBones)1);
			}
			if ((Object)(object)RightUpperLeg != (Object)null)
			{
				yield return (RightUpperLeg, (HumanBodyBones)2);
			}
			if ((Object)(object)LeftLowerLeg != (Object)null)
			{
				yield return (LeftLowerLeg, (HumanBodyBones)3);
			}
			if ((Object)(object)RightLowerLeg != (Object)null)
			{
				yield return (RightLowerLeg, (HumanBodyBones)4);
			}
			if ((Object)(object)LeftFoot != (Object)null)
			{
				yield return (LeftFoot, (HumanBodyBones)5);
			}
			if ((Object)(object)RightFoot != (Object)null)
			{
				yield return (RightFoot, (HumanBodyBones)6);
			}
			if ((Object)(object)LeftToes != (Object)null)
			{
				yield return (LeftToes, (HumanBodyBones)19);
			}
			if ((Object)(object)RightToes != (Object)null)
			{
				yield return (RightToes, (HumanBodyBones)20);
			}
			if ((Object)(object)Spine != (Object)null)
			{
				yield return (Spine, (HumanBodyBones)7);
			}
			if ((Object)(object)Chest != (Object)null)
			{
				yield return (Chest, (HumanBodyBones)8);
			}
			if ((Object)(object)UpperChest != (Object)null)
			{
				yield return (UpperChest, (HumanBodyBones)54);
			}
			if ((Object)(object)Neck != (Object)null)
			{
				yield return (Neck, (HumanBodyBones)9);
			}
			if ((Object)(object)Head != (Object)null)
			{
				yield return (Head, (HumanBodyBones)10);
			}
			if ((Object)(object)LeftEye != (Object)null)
			{
				yield return (LeftEye, (HumanBodyBones)21);
			}
			if ((Object)(object)RightEye != (Object)null)
			{
				yield return (RightEye, (HumanBodyBones)22);
			}
			if ((Object)(object)Jaw != (Object)null)
			{
				yield return (Jaw, (HumanBodyBones)23);
			}
			if ((Object)(object)LeftShoulder != (Object)null)
			{
				yield return (LeftShoulder, (HumanBodyBones)11);
			}
			if ((Object)(object)RightShoulder != (Object)null)
			{
				yield return (RightShoulder, (HumanBodyBones)12);
			}
			if ((Object)(object)LeftUpperArm != (Object)null)
			{
				yield return (LeftUpperArm, (HumanBodyBones)13);
			}
			if ((Object)(object)RightUpperArm != (Object)null)
			{
				yield return (RightUpperArm, (HumanBodyBones)14);
			}
			if ((Object)(object)LeftLowerArm != (Object)null)
			{
				yield return (LeftLowerArm, (HumanBodyBones)15);
			}
			if ((Object)(object)RightLowerArm != (Object)null)
			{
				yield return (RightLowerArm, (HumanBodyBones)16);
			}
			if ((Object)(object)LeftHand != (Object)null)
			{
				yield return (LeftHand, (HumanBodyBones)17);
			}
			if ((Object)(object)RightHand != (Object)null)
			{
				yield return (RightHand, (HumanBodyBones)18);
			}
			if ((Object)(object)LeftThumbProximal != (Object)null)
			{
				yield return (LeftThumbProximal, (HumanBodyBones)24);
			}
			if ((Object)(object)LeftThumbIntermediate != (Object)null)
			{
				yield return (LeftThumbIntermediate, (HumanBodyBones)25);
			}
			if ((Object)(object)LeftThumbDistal != (Object)null)
			{
				yield return (LeftThumbDistal, (HumanBodyBones)26);
			}
			if ((Object)(object)LeftIndexProximal != (Object)null)
			{
				yield return (LeftIndexProximal, (HumanBodyBones)27);
			}
			if ((Object)(object)LeftIndexIntermediate != (Object)null)
			{
				yield return (LeftIndexIntermediate, (HumanBodyBones)28);
			}
			if ((Object)(object)LeftIndexDistal != (Object)null)
			{
				yield return (LeftIndexDistal, (HumanBodyBones)29);
			}
			if ((Object)(object)LeftMiddleProximal != (Object)null)
			{
				yield return (LeftMiddleProximal, (HumanBodyBones)30);
			}
			if ((Object)(object)LeftMiddleIntermediate != (Object)null)
			{
				yield return (LeftMiddleIntermediate, (HumanBodyBones)31);
			}
			if ((Object)(object)LeftMiddleDistal != (Object)null)
			{
				yield return (LeftMiddleDistal, (HumanBodyBones)32);
			}
			if ((Object)(object)LeftRingProximal != (Object)null)
			{
				yield return (LeftRingProximal, (HumanBodyBones)33);
			}
			if ((Object)(object)LeftRingIntermediate != (Object)null)
			{
				yield return (LeftRingIntermediate, (HumanBodyBones)34);
			}
			if ((Object)(object)LeftRingDistal != (Object)null)
			{
				yield return (LeftRingDistal, (HumanBodyBones)35);
			}
			if ((Object)(object)LeftLittleProximal != (Object)null)
			{
				yield return (LeftLittleProximal, (HumanBodyBones)36);
			}
			if ((Object)(object)LeftLittleIntermediate != (Object)null)
			{
				yield return (LeftLittleIntermediate, (HumanBodyBones)37);
			}
			if ((Object)(object)LeftLittleDistal != (Object)null)
			{
				yield return (LeftLittleDistal, (HumanBodyBones)38);
			}
			if ((Object)(object)RightThumbProximal != (Object)null)
			{
				yield return (RightThumbProximal, (HumanBodyBones)39);
			}
			if ((Object)(object)RightThumbIntermediate != (Object)null)
			{
				yield return (RightThumbIntermediate, (HumanBodyBones)40);
			}
			if ((Object)(object)RightThumbDistal != (Object)null)
			{
				yield return (RightThumbDistal, (HumanBodyBones)41);
			}
			if ((Object)(object)RightIndexProximal != (Object)null)
			{
				yield return (RightIndexProximal, (HumanBodyBones)42);
			}
			if ((Object)(object)RightIndexIntermediate != (Object)null)
			{
				yield return (RightIndexIntermediate, (HumanBodyBones)43);
			}
			if ((Object)(object)RightIndexDistal != (Object)null)
			{
				yield return (RightIndexDistal, (HumanBodyBones)44);
			}
			if ((Object)(object)RightMiddleProximal != (Object)null)
			{
				yield return (RightMiddleProximal, (HumanBodyBones)45);
			}
			if ((Object)(object)RightMiddleIntermediate != (Object)null)
			{
				yield return (RightMiddleIntermediate, (HumanBodyBones)46);
			}
			if ((Object)(object)RightMiddleDistal != (Object)null)
			{
				yield return (RightMiddleDistal, (HumanBodyBones)47);
			}
			if ((Object)(object)RightRingProximal != (Object)null)
			{
				yield return (RightRingProximal, (HumanBodyBones)48);
			}
			if ((Object)(object)RightRingIntermediate != (Object)null)
			{
				yield return (RightRingIntermediate, (HumanBodyBones)49);
			}
			if ((Object)(object)RightRingDistal != (Object)null)
			{
				yield return (RightRingDistal, (HumanBodyBones)50);
			}
			if ((Object)(object)RightLittleProximal != (Object)null)
			{
				yield return (RightLittleProximal, (HumanBodyBones)51);
			}
			if ((Object)(object)RightLittleIntermediate != (Object)null)
			{
				yield return (RightLittleIntermediate, (HumanBodyBones)52);
			}
			if ((Object)(object)RightLittleDistal != (Object)null)
			{
				yield return (RightLittleDistal, (HumanBodyBones)53);
			}
		}
	}

	private void Reset()
	{
		AssignBonesFromAnimator();
	}

	private IEnumerable<Validation> Required(params (string, Transform)[] props)
	{
		for (int i = 0; i < props.Length; i++)
		{
			(string, Transform) prop = props[i];
			if ((Object)(object)prop.Item2 == (Object)null)
			{
				var (name, _) = prop;
				if (name.StartsWith("m_"))
				{
					name = name.Substring(2);
				}
				yield return new Validation(name + " is Required", isError: true);
			}
		}
	}

	private static Vector3 GetForward(Transform l, Transform r)
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)l == (Object)null || (Object)(object)r == (Object)null)
		{
			return Vector3.zero;
		}
		Vector3 val = r.position - l.position;
		Vector3 normalized = ((Vector3)(ref val)).normalized;
		return Vector3.Cross(normalized, Vector3.up);
	}

	public Vector3 GetForward()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		return GetForward(m_LeftUpperLeg, m_RightUpperLeg);
	}

	public IEnumerable<Validation> Validate()
	{
		foreach (Validation item in Required(("m_Hips", m_Hips), ("m_Spine", m_Spine), ("m_Head", m_Head), ("m_LeftUpperLeg", m_LeftUpperLeg), ("m_LeftLowerLeg", m_LeftLowerLeg), ("m_LeftFoot", m_LeftFoot), ("m_RightUpperLeg", m_RightUpperLeg), ("m_RightLowerLeg", m_RightLowerLeg), ("m_RightFoot", m_RightFoot), ("m_LeftUpperArm", m_LeftUpperArm), ("m_LeftLowerArm", m_LeftLowerArm), ("m_LeftHand", m_LeftHand), ("m_RightUpperArm", m_RightUpperArm), ("m_RightLowerArm", m_RightLowerArm), ("m_RightHand", m_RightHand)))
		{
			yield return item;
		}
	}

	public Avatar CreateAvatar()
	{
		return HumanoidLoader.LoadHumanoidAvatar(((Component)this).transform, BoneMap);
	}

	public Transform GetBoneTransform(HumanBodyBones bone)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: Expected I4, but got Unknown
		return (Transform)((int)bone switch
		{
			0 => Hips, 
			1 => LeftUpperLeg, 
			2 => RightUpperLeg, 
			3 => LeftLowerLeg, 
			4 => RightLowerLeg, 
			5 => LeftFoot, 
			6 => RightFoot, 
			19 => LeftToes, 
			20 => RightToes, 
			7 => Spine, 
			8 => Chest, 
			54 => UpperChest, 
			9 => Neck, 
			10 => Head, 
			21 => LeftEye, 
			22 => RightEye, 
			23 => Jaw, 
			11 => LeftShoulder, 
			12 => RightShoulder, 
			13 => LeftUpperArm, 
			14 => RightUpperArm, 
			15 => LeftLowerArm, 
			16 => RightLowerArm, 
			17 => LeftHand, 
			18 => RightHand, 
			24 => LeftThumbProximal, 
			25 => LeftThumbIntermediate, 
			26 => LeftThumbDistal, 
			27 => LeftIndexProximal, 
			28 => LeftIndexIntermediate, 
			29 => LeftIndexDistal, 
			30 => LeftMiddleProximal, 
			31 => LeftMiddleIntermediate, 
			32 => LeftMiddleDistal, 
			33 => LeftRingProximal, 
			34 => LeftRingIntermediate, 
			35 => LeftRingDistal, 
			36 => LeftLittleProximal, 
			37 => LeftLittleIntermediate, 
			38 => LeftLittleDistal, 
			39 => RightThumbProximal, 
			40 => RightThumbIntermediate, 
			41 => RightThumbDistal, 
			42 => RightIndexProximal, 
			43 => RightIndexIntermediate, 
			44 => RightIndexDistal, 
			45 => RightMiddleProximal, 
			46 => RightMiddleIntermediate, 
			47 => RightMiddleDistal, 
			48 => RightRingProximal, 
			49 => RightRingIntermediate, 
			50 => RightRingDistal, 
			51 => RightLittleProximal, 
			52 => RightLittleIntermediate, 
			53 => RightLittleDistal, 
			_ => null, 
		});
	}

	public void AssignBones(IEnumerable<(HumanBodyBones, Transform)> nodes)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Invalid comparison between Unknown and I4
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_012b: Expected I4, but got Unknown
		foreach (var (val, val2) in nodes)
		{
			if ((int)val != 55 && val2 != null)
			{
				HumanBodyBones val3 = val;
				HumanBodyBones val4 = val3;
				switch ((int)val4)
				{
				case 0:
					m_Hips = val2;
					break;
				case 1:
					m_LeftUpperLeg = val2;
					break;
				case 2:
					m_RightUpperLeg = val2;
					break;
				case 3:
					m_LeftLowerLeg = val2;
					break;
				case 4:
					m_RightLowerLeg = val2;
					break;
				case 5:
					m_LeftFoot = val2;
					break;
				case 6:
					m_RightFoot = val2;
					break;
				case 19:
					m_LeftToes = val2;
					break;
				case 20:
					m_RightToes = val2;
					break;
				case 7:
					m_Spine = val2;
					break;
				case 8:
					m_Chest = val2;
					break;
				case 54:
					m_UpperChest = val2;
					break;
				case 9:
					m_Neck = val2;
					break;
				case 10:
					m_Head = val2;
					break;
				case 21:
					m_LeftEye = val2;
					break;
				case 22:
					m_RightEye = val2;
					break;
				case 23:
					m_Jaw = val2;
					break;
				case 11:
					m_LeftShoulder = val2;
					break;
				case 12:
					m_RightShoulder = val2;
					break;
				case 13:
					m_LeftUpperArm = val2;
					break;
				case 14:
					m_RightUpperArm = val2;
					break;
				case 15:
					m_LeftLowerArm = val2;
					break;
				case 16:
					m_RightLowerArm = val2;
					break;
				case 17:
					m_LeftHand = val2;
					break;
				case 18:
					m_RightHand = val2;
					break;
				case 24:
					m_LeftThumbProximal = val2;
					break;
				case 25:
					m_LeftThumbIntermediate = val2;
					break;
				case 26:
					m_LeftThumbDistal = val2;
					break;
				case 27:
					m_LeftIndexProximal = val2;
					break;
				case 28:
					m_LeftIndexIntermediate = val2;
					break;
				case 29:
					m_LeftIndexDistal = val2;
					break;
				case 30:
					m_LeftMiddleProximal = val2;
					break;
				case 31:
					m_LeftMiddleIntermediate = val2;
					break;
				case 32:
					m_LeftMiddleDistal = val2;
					break;
				case 33:
					m_LeftRingProximal = val2;
					break;
				case 34:
					m_LeftRingIntermediate = val2;
					break;
				case 35:
					m_LeftRingDistal = val2;
					break;
				case 36:
					m_LeftLittleProximal = val2;
					break;
				case 37:
					m_LeftLittleIntermediate = val2;
					break;
				case 38:
					m_LeftLittleDistal = val2;
					break;
				case 39:
					m_RightThumbProximal = val2;
					break;
				case 40:
					m_RightThumbIntermediate = val2;
					break;
				case 41:
					m_RightThumbDistal = val2;
					break;
				case 42:
					m_RightIndexProximal = val2;
					break;
				case 43:
					m_RightIndexIntermediate = val2;
					break;
				case 44:
					m_RightIndexDistal = val2;
					break;
				case 45:
					m_RightMiddleProximal = val2;
					break;
				case 46:
					m_RightMiddleIntermediate = val2;
					break;
				case 47:
					m_RightMiddleDistal = val2;
					break;
				case 48:
					m_RightRingProximal = val2;
					break;
				case 49:
					m_RightRingIntermediate = val2;
					break;
				case 50:
					m_RightRingDistal = val2;
					break;
				case 51:
					m_RightLittleProximal = val2;
					break;
				case 52:
					m_RightLittleIntermediate = val2;
					break;
				case 53:
					m_RightLittleDistal = val2;
					break;
				}
			}
		}
	}

	public bool AssignBonesFromAnimator()
	{
		Animator animator = ((Component)this).GetComponent<Animator>();
		if ((Object)(object)animator == (Object)null)
		{
			return false;
		}
		Avatar avatar = animator.avatar;
		if ((Object)(object)avatar == (Object)null)
		{
			return false;
		}
		if (!avatar.isValid)
		{
			return false;
		}
		if (!avatar.isHuman)
		{
			return false;
		}
		HumanBodyBones[] values = CachedEnum.GetValues<HumanBodyBones>();
		AssignBones(values.Select((HumanBodyBones x) => ((HumanBodyBones, Transform))(((int)x == 55) ? ((HumanBodyBones)55, (Transform)null) : ((HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), ((object)(HumanBodyBones)(ref x)).ToString(), ignoreCase: true), animator.GetBoneTransform(x)))));
		return true;
	}

	public bool TryGetBoneForTransform(Transform t, out HumanBodyBones bone)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected I4, but got Unknown
		foreach (var (val, val2) in BoneMap)
		{
			if ((Object)(object)val == (Object)(object)t)
			{
				bone = (HumanBodyBones)(int)val2;
				return true;
			}
		}
		bone = (HumanBodyBones)0;
		return false;
	}
}
public static class HumanoidLoader
{
	private static readonly Dictionary<HumanBodyBones, string> s_humanTranitBoneNameMap = HumanTrait.BoneName.ToDictionary((string x) => TraitToHumanBone(x), (string x) => x);

	public static Avatar LoadHumanoidAvatar(Transform root, IEnumerable<(Transform, HumanBodyBones)> boneMap)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		ForceUniqueName.Process(root);
		HumanDescription val = default(HumanDescription);
		val.skeleton = (from x in ((Component)root).GetComponentsInChildren<Transform>()
			select x.ToSkeletonBone()).ToArray();
		val.human = boneMap.Select(delegate((Transform, HumanBodyBones) x)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			HumanBone result = default(HumanBone);
			((HumanBone)(ref result)).boneName = ((Object)x.Item1).name;
			((HumanBone)(ref result)).humanName = s_humanTranitBoneNameMap[x.Item2];
			HumanLimit limit = default(HumanLimit);
			((HumanLimit)(ref limit)).useDefaultValues = true;
			result.limit = limit;
			return result;
		}).ToArray();
		((HumanDescription)(ref val)).armStretch = 0.05f;
		((HumanDescription)(ref val)).legStretch = 0.05f;
		((HumanDescription)(ref val)).upperArmTwist = 0.5f;
		((HumanDescription)(ref val)).lowerArmTwist = 0.5f;
		((HumanDescription)(ref val)).upperLegTwist = 0.5f;
		((HumanDescription)(ref val)).lowerLegTwist = 0.5f;
		((HumanDescription)(ref val)).feetSpacing = 0f;
		((HumanDescription)(ref val)).hasTranslationDoF = false;
		HumanDescription val2 = val;
		return AvatarBuilder.BuildHumanAvatar(((Component)root).gameObject, val2);
	}

	private static HumanBodyBones TraitToHumanBone(string x)
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		return (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), x.Replace(" ", ""), ignoreCase: true);
	}
}
public class HumanPoseClip : ScriptableObject
{
	public const string TPoseResourcePath = "UniHumanoid/T-Pose.pose";

	public Vector3 bodyPosition;

	public Quaternion bodyRotation;

	public float[] muscles;

	public HumanPose GetPose()
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		HumanPose result = default(HumanPose);
		result.bodyPosition = bodyPosition;
		result.bodyRotation = bodyRotation;
		result.muscles = muscles;
		return result;
	}

	public void ApplyPose(ref HumanPose pose)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		bodyPosition = pose.bodyPosition;
		bodyRotation = pose.bodyRotation;
		muscles = (float[])pose.muscles.Clone();
	}
}
public class HumanPoseTransfer : MonoBehaviour
{
	public enum HumanPoseTransferSourceType
	{
		None,
		HumanPoseTransfer,
		HumanPoseClip
	}

	[SerializeField]
	public HumanPoseTransferSourceType SourceType;

	[SerializeField]
	public Avatar Avatar;

	[SerializeField]
	public HumanPoseTransfer Source;

	[SerializeField]
	public HumanPoseClip PoseClip;

	private HumanPoseHandler m_handler;

	private HumanPose m_pose;

	private int m_lastFrameCount = -1;

	public HumanPose CreatePose()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Expected O, but got Unknown
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		HumanPoseHandler val = new HumanPoseHandler(Avatar, ((Component)this).transform);
		HumanPose result = default(HumanPose);
		val.GetHumanPose(ref result);
		return result;
	}

	public void SetPose(HumanPose pose)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		SetPose(Avatar, ((Component)this).transform, pose);
	}

	public static void SetPose(Avatar avatar, Transform transform, HumanPose pose)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Expected O, but got Unknown
		HumanPoseHandler val = new HumanPoseHandler(avatar, transform);
		val.SetHumanPose(ref pose);
	}

	public static void SetTPose(Avatar avatar, Transform transform)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		HumanPoseClip humanPoseClip = Resources.Load<HumanPoseClip>("UniHumanoid/T-Pose.pose");
		HumanPose pose = humanPoseClip.GetPose();
		SetPose(avatar, transform, pose);
	}

	private void Reset()
	{
		Animator component = ((Component)this).GetComponent<Animator>();
		if ((Object)(object)component != (Object)null)
		{
			Avatar = component.avatar;
		}
	}

	[ContextMenu("Set T-Pose")]
	private void SetTPose()
	{
		if (!((Object)(object)Avatar == (Object)null))
		{
			SetTPose(Avatar, ((Component)this).transform);
		}
	}

	public void OnEnable()
	{
		Animator component = ((Component)this).GetComponent<Animator>();
		if ((Object)(object)component != (Object)null)
		{
			Avatar = component.avatar;
		}
		Setup();
	}

	public void Setup()
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Expected O, but got Unknown
		if (!((Object)(object)Avatar == (Object)null))
		{
			m_handler = new HumanPoseHandler(Avatar, ((Component)this).transform);
		}
	}

	public bool GetPose(int frameCount, ref HumanPose pose)
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)PoseClip != (Object)null)
		{
			pose = PoseClip.GetPose();
			return true;
		}
		if (m_handler == null)
		{
			pose = m_pose;
			return false;
		}
		if (frameCount != m_lastFrameCount)
		{
			m_handler.GetHumanPose(ref m_pose);
			m_lastFrameCount = frameCount;
		}
		pose = m_pose;
		return true;
	}

	private void Update()
	{
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		switch (SourceType)
		{
		case HumanPoseTransferSourceType.None:
			break;
		case HumanPoseTransferSourceType.HumanPoseTransfer:
			if ((Object)(object)Source != (Object)null && m_handler != null && Source.GetPose(Time.frameCount, ref m_pose))
			{
				m_handler.SetHumanPose(ref m_pose);
			}
			break;
		case HumanPoseTransferSourceType.HumanPoseClip:
			if ((Object)(object)PoseClip != (Object)null)
			{
				HumanPose pose = PoseClip.GetPose();
				m_handler.SetHumanPose(ref pose);
			}
			break;
		}
	}
}
public interface IBone
{
	string Name { get; }

	Vector3 SkeletonLocalPosition { get; }

	IBone Parent { get; }

	IList<IBone> Children { get; }
}
public static class IBoneExtensions
{
	public static IEnumerable<IBone> Traverse(this IBone self)
	{
		yield return self;
		foreach (IBone child in self.Children)
		{
			foreach (IBone item in child.Traverse())
			{
				yield return item;
			}
		}
	}

	public static Vector3 CenterOfDescendant(this IBone self)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = Vector3.zero;
		int num = 0;
		foreach (IBone item in self.Traverse())
		{
			val += item.SkeletonLocalPosition;
			num++;
		}
		return val / (float)num;
	}
}
public static class BvhAnimation
{
	private class CurveSet
	{
		private BvhNode Node;

		private Func<float, float, float, Quaternion> EulerToRotation;

		public BvhChannelCurve PositionX;

		public BvhChannelCurve PositionY;

		public BvhChannelCurve PositionZ;

		public BvhChannelCurve RotationX;

		public BvhChannelCurve RotationY;

		public BvhChannelCurve RotationZ;

		public CurveSet(BvhNode node)
		{
			Node = node;
		}

		public Vector3 GetPosition(int i)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			return new Vector3(PositionX.Keys[i], PositionY.Keys[i], PositionZ.Keys[i]);
		}

		public Quaternion GetRotation(int i)
		{
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			if (EulerToRotation == null)
			{
				EulerToRotation = Node.GetEulerToRotation();
			}
			return EulerToRotation(RotationX.Keys[i], RotationY.Keys[i], RotationZ.Keys[i]);
		}

		private static void AddCurve(Bvh bvh, AnimationClip clip, BvhChannelCurve ch, float scaling)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			if (ch != null)
			{
				Bvh.PathWithProperty pathWithProp = default(Bvh.PathWithProperty);
				bvh.TryGetPathWithPropertyFromChannel(ch, out pathWithProp);
				AnimationCurve val = new AnimationCurve();
				for (int i = 0; i < bvh.FrameCount; i++)
				{
					float num = (float)((double)i * bvh.FrameTime.TotalSeconds);
					float num2 = ch.Keys[i] * scaling;
					val.AddKey(num, num2);
				}
				clip.SetCurve(pathWithProp.Path, typeof(Transform), pathWithProp.Property, val);
			}
		}

		public void AddCurves(Bvh bvh, AnimationClip clip, float scaling)
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Expected O, but got Unknown
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			AddCurve(bvh, clip, PositionX, 0f - scaling);
			AddCurve(bvh, clip, PositionY, scaling);
			AddCurve(bvh, clip, PositionZ, scaling);
			Bvh.PathWithProperty pathWithProp = default(Bvh.PathWithProperty);
			bvh.TryGetPathWithPropertyFromChannel(RotationX, out pathWithProp);
			AnimationCurve val = new AnimationCurve();
			AnimationCurve val2 = new AnimationCurve();
			AnimationCurve val3 = new AnimationCurve();
			AnimationCurve val4 = new AnimationCurve();
			for (int i = 0; i < bvh.FrameCount; i++)
			{
				float num = (float)((double)i * bvh.FrameTime.TotalSeconds);
				Quaternion val5 = GetRotation(i).ReverseX();
				val.AddKey(num, val5.x);
				val2.AddKey(num, val5.y);
				val3.AddKey(num, val5.z);
				val4.AddKey(num, val5.w);
			}
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.x", val);
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.y", val2);
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.z", val3);
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.w", val4);
		}
	}

	public static AnimationClip CreateAnimationClip(Bvh bvh, float scaling)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		AnimationClip val = new AnimationClip();
		val.legacy = true;
		Dictionary<BvhNode, CurveSet> dictionary = new Dictionary<BvhNode, CurveSet>();
		int num = 0;
		foreach (BvhNode item in bvh.Root.Traverse())
		{
			CurveSet curveSet2 = (dictionary[item] = new CurveSet(item));
			int num2 = 0;
			while (num2 < item.Channels.Length)
			{
				BvhChannelCurve bvhChannelCurve = bvh.Channels[num];
				switch (item.Channels[num2])
				{
				case BvhChannel.Xposition:
					curveSet2.PositionX = bvhChannelCurve;
					break;
				case BvhChannel.Yposition:
					curveSet2.PositionY = bvhChannelCurve;
					break;
				case BvhChannel.Zposition:
					curveSet2.PositionZ = bvhChannelCurve;
					break;
				case BvhChannel.Xrotation:
					curveSet2.RotationX = bvhChannelCurve;
					break;
				case BvhChannel.Yrotation:
					curveSet2.RotationY = bvhChannelCurve;
					break;
				case BvhChannel.Zrotation:
					curveSet2.RotationZ = bvhChannelCurve;
					break;
				default:
					throw new Exception();
				}
				num2++;
				num++;
			}
		}
		foreach (KeyValuePair<BvhNode, CurveSet> item2 in dictionary)
		{
			item2.Value.AddCurves(bvh, val, scaling);
		}
		val.EnsureQuaternionContinuity();
		return val;
	}
}
public static class BvhImporter
{
	[Obsolete("use BvhImporter.Parse(path), then BvhImporter.Load()")]
	public static void Import(BvhImporterContext context)
	{
		context.Parse(context.Path);
		context.Load();
	}
}
[Obsolete("use BvhImporterContext")]
public class ImporterContext : BvhImporterContext
{
}
public class BvhImporterContext
{
	private string m_path;

	public string Source;

	public Bvh Bvh;

	public GameObject Root;

	public List<Transform> Nodes = new List<Transform>();

	public AnimationClip Animation;

	public AvatarDescription AvatarDescription;

	public Avatar Avatar;

	public Mesh Mesh;

	public Material Material;

	public string Path
	{
		get
		{
			return m_path;
		}
		set
		{
			if (!(m_path == value))
			{
				m_path = value;
			}
		}
	}

	[Obsolete("use Load(path)")]
	public void Parse()
	{
		Parse(Path);
	}

	public void Parse(string path)
	{
		Parse(path, File.ReadAllText(path, Encoding.UTF8));
	}

	public void Parse(string path, string source)
	{
		Path = path;
		Source = source;
		Bvh = Bvh.Parse(Source);
	}

	public void Load()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		Root = new GameObject(System.IO.Path.GetFileNameWithoutExtension(Path));
		Transform val = BuildHierarchy(Root.transform, Bvh.Root, 1f);
		Skeleton skeleton = Skeleton.Estimate(val);
		AvatarDescription avatarDescription = AvatarDescription.Create(val.Traverse().ToArray(), skeleton);
		int channelIndex = Bvh.Root.GetChannelIndex(BvhChannel.Yposition);
		BvhChannelCurve bvhChannelCurve = Bvh.Channels[channelIndex];
		float num = bvhChannelCurve.Keys[0];
		float num2 = 1f;
		num2 = 1f / num;
		foreach (Transform item in Root.transform.Traverse())
		{
			item.localPosition *= num2;
		}
		float num3 = num * num2;
		val.position = new Vector3(0f, num3, 0f

BepInEx/plugins/VRM10.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using MToon;
using UniGLTF;
using UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier;
using UniGLTF.Extensions.VRMC_materials_mtoon;
using UniGLTF.Extensions.VRMC_node_constraint;
using UniGLTF.Extensions.VRMC_springBone;
using UniGLTF.Extensions.VRMC_vrm;
using UniGLTF.Extensions.VRMC_vrm_animation;
using UniGLTF.MeshUtility;
using UniGLTF.Utils;
using UniHumanoid;
using UniJSON;
using UniVRM10.FastSpringBones.Blittables;
using UniVRM10.FastSpringBones.System;
using UniVRM10.Migration;
using Unity.Burst;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEditor;
using UnityEngine;
using UnityEngine.Profiling;
using UnityEngine.Rendering;
using UnityEngine.Serialization;
using VRMShaders;
using VRMShaders.VRM10.MToon10.Runtime;
using VrmLib;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: InternalsVisibleTo("VRM10.Tests")]
[assembly: InternalsVisibleTo("VRM10.Tests.PlayMode")]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[10279]
		{
			0, 0, 0, 1, 0, 0, 0, 61, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 92, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 65, 120, 101, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 68, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 68, 101, 115, 116, 105, 110, 97, 116, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 66, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 92, 67, 111, 110,
			115, 116, 82, 97, 105, 110, 116, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 63, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 83, 111, 117, 114, 99, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 63, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 92, 73, 86, 114, 109, 49, 48, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 49, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 92, 84, 82, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 66, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 67,
			111, 110, 115, 116, 114, 97, 105, 110, 116, 92,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 65,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 67, 111, 110, 115, 116, 114, 97,
			105, 110, 116, 92, 86, 114, 109, 49, 48, 65,
			105, 109, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 66, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 92, 86, 114, 109,
			49, 48, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 85, 116, 105, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 66, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			92, 86, 114, 109, 49, 48, 82, 111, 108, 108,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			70, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 67, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 92, 86, 114, 109, 49, 48,
			82, 111, 116, 97, 116, 105, 111, 110, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 73, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 92, 68, 101, 102, 97, 117, 108, 116,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			86, 97, 108, 105, 100, 97, 116, 111, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 60,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 75, 101, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 63, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 77, 101, 114, 103, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 67, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 92, 73, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 86, 97, 108, 105, 100, 97,
			116, 111, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 115, 92, 69, 120, 112,
			114, 101, 115, 115, 105, 111, 110, 92, 73, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 86,
			97, 108, 105, 100, 97, 116, 111, 114, 70, 97,
			99, 116, 111, 114, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 76, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 92,
			73, 76, 111, 111, 107, 65, 116, 69, 121, 101,
			68, 105, 114, 101, 99, 116, 105, 111, 110, 65,
			112, 112, 108, 105, 99, 97, 98, 108, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 67,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 67, 111, 108, 111, 114, 66, 105, 110,
			100, 105, 110, 103, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 64, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 85, 86, 66,
			105, 110, 100, 105, 110, 103, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 73, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 86,
			97, 108, 117, 101, 66, 105, 110, 100, 105, 110,
			103, 77, 101, 114, 103, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 65, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 92, 77, 111, 114, 112, 104, 84, 97, 114,
			103, 101, 116, 66, 105, 110, 100, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			96, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 92, 77, 111, 114, 112, 104,
			84, 97, 114, 103, 101, 116, 66, 105, 110, 100,
			105, 110, 103, 77, 101, 114, 103, 101, 114, 92,
			77, 111, 114, 112, 104, 84, 97, 114, 103, 101,
			116, 66, 105, 110, 100, 105, 110, 103, 77, 101,
			114, 103, 101, 114, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 93, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 92, 77,
			111, 114, 112, 104, 84, 97, 114, 103, 101, 116,
			66, 105, 110, 100, 105, 110, 103, 77, 101, 114,
			103, 101, 114, 92, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 73, 100, 101, 110, 116,
			105, 102, 105, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 97, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 92,
			77, 111, 114, 112, 104, 84, 97, 114, 103, 101,
			116, 66, 105, 110, 100, 105, 110, 103, 77, 101,
			114, 103, 101, 114, 92, 82, 117, 110, 116, 105,
			109, 101, 77, 111, 114, 112, 104, 84, 97, 114,
			103, 101, 116, 66, 105, 110, 100, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			74, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 92, 80, 114, 101, 118, 105,
			101, 119, 92, 80, 114, 101, 118, 105, 101, 119,
			77, 97, 116, 101, 114, 105, 97, 108, 85, 116,
			105, 108, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 92, 80, 114, 101,
			118, 105, 101, 119, 92, 80, 114, 101, 118, 105,
			101, 119, 77, 101, 115, 104, 73, 116, 101, 109,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			74, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 92, 80, 114, 101, 118, 105,
			101, 119, 92, 80, 114, 101, 118, 105, 101, 119,
			83, 99, 101, 110, 101, 77, 97, 110, 97, 103,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 66, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 92, 80, 114, 101,
			118, 105, 101, 119, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 116, 101, 109, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 62, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			92, 86, 82, 77, 49, 48, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 72, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			70, 105, 114, 115, 116, 80, 101, 114, 115, 111,
			110, 92, 82, 101, 110, 100, 101, 114, 101, 114,
			70, 105, 114, 115, 116, 80, 101, 114, 115, 111,
			110, 70, 108, 97, 103, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 77, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			70, 105, 114, 115, 116, 80, 101, 114, 115, 111,
			110, 92, 86, 114, 109, 49, 48, 70, 105, 114,
			115, 116, 80, 101, 114, 115, 111, 110, 76, 97,
			121, 101, 114, 83, 101, 116, 116, 105, 110, 103,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 54, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 109, 112, 111, 110,
			101, 110, 116, 115, 92, 76, 111, 111, 107, 65,
			116, 92, 67, 117, 114, 118, 101, 77, 97, 112,
			112, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 70, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 115, 92, 76, 111, 111,
			107, 65, 116, 92, 73, 76, 111, 111, 107, 65,
			116, 69, 121, 101, 68, 105, 114, 101, 99, 116,
			105, 111, 110, 80, 114, 111, 118, 105, 100, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 61, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 109, 112, 111, 110,
			101, 110, 116, 115, 92, 76, 111, 111, 107, 65,
			116, 92, 76, 111, 111, 107, 65, 116, 69, 121,
			101, 68, 105, 114, 101, 99, 116, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			77, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 76, 111, 111, 107, 65, 116,
			92, 76, 111, 111, 107, 65, 116, 69, 121, 101,
			68, 105, 114, 101, 99, 116, 105, 111, 110, 65,
			112, 112, 108, 105, 99, 97, 98, 108, 101, 84,
			111, 66, 111, 110, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 83, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 76,
			111, 111, 107, 65, 116, 92, 76, 111, 111, 107,
			65, 116, 69, 121, 101, 68, 105, 114, 101, 99,
			116, 105, 111, 110, 65, 112, 112, 108, 105, 99,
			97, 98, 108, 101, 84, 111, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 54, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			76, 111, 111, 107, 65, 116, 92, 76, 111, 111,
			107, 65, 116, 73, 110, 112, 117, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 62, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 76, 111, 111, 107, 65, 116, 92, 77,
			97, 116, 114, 105, 120, 52, 120, 52, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 65, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 80, 114, 101, 102, 97, 98, 82, 101,
			108, 97, 116, 101, 100, 83, 99, 114, 105, 112,
			116, 97, 98, 108, 101, 79, 98, 106, 101, 99,
			116, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 70, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 109, 112, 111, 110,
			101, 110, 116, 115, 92, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 92, 86, 82, 77, 49,
			48, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 67, 111, 108, 108, 105, 100, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 75,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 86, 82, 77, 49, 48, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 67,
			111, 108, 108, 105, 100, 101, 114, 71, 114, 111,
			117, 112, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 67, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 86, 82, 77,
			49, 48, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 74, 111, 105, 110, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 65, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 86, 82, 77, 49, 48, 83, 112, 114,
			105, 110, 103, 85, 116, 105, 108, 105, 116, 121,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			63, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 114, 109, 49, 48, 73,
			110, 115, 116, 97, 110, 99, 101, 92, 86, 114,
			109, 49, 48, 73, 110, 115, 116, 97, 110, 99,
			101, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 73, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 109, 112, 111, 110,
			101, 110, 116, 115, 92, 86, 114, 109, 49, 48,
			73, 110, 115, 116, 97, 110, 99, 101, 92, 86,
			114, 109, 49, 48, 73, 110, 115, 116, 97, 110,
			99, 101, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 59, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 86, 82, 77, 49,
			48, 79, 98, 106, 101, 99, 116, 92, 86, 82,
			77, 49, 48, 79, 98, 106, 101, 99, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 69,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 86, 82, 77, 49, 48, 79, 98,
			106, 101, 99, 116, 92, 86, 82, 77, 49, 48,
			79, 98, 106, 101, 99, 116, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 70, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			86, 82, 77, 49, 48, 79, 98, 106, 101, 99,
			116, 92, 86, 82, 77, 49, 48, 79, 98, 106,
			101, 99, 116, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 65, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 86, 82,
			77, 49, 48, 79, 98, 106, 101, 99, 116, 92,
			86, 82, 77, 49, 48, 79, 98, 106, 101, 99,
			116, 76, 111, 111, 107, 65, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 63, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 86, 82, 77, 49, 48, 79, 98, 106, 101,
			99, 116, 92, 86, 82, 77, 49, 48, 79, 98,
			106, 101, 99, 116, 77, 101, 116, 97, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 76, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 86, 114, 109, 49, 48, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 110, 116, 114,
			111, 108, 82, 105, 103, 92, 86, 114, 109, 49,
			48, 67, 111, 110, 116, 114, 111, 108, 66, 111,
			110, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 82, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 86, 114, 109, 49,
			48, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 110, 116, 114, 111, 108, 82, 105, 103, 92,
			86, 114, 109, 49, 48, 82, 117, 110, 116, 105,
			109, 101, 67, 111, 110, 116, 114, 111, 108, 82,
			105, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 61, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 86, 114, 109, 49,
			48, 82, 117, 110, 116, 105, 109, 101, 92, 86,
			114, 109, 49, 48, 82, 117, 110, 116, 105, 109,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 71, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 109, 112, 111, 110,
			101, 110, 116, 115, 92, 86, 114, 109, 49, 48,
			82, 117, 110, 116, 105, 109, 101, 92, 86, 114,
			109, 49, 48, 82, 117, 110, 116, 105, 109, 101,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			67, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 114, 109, 49, 48, 82,
			117, 110, 116, 105, 109, 101, 92, 86, 114, 109,
			49, 48, 82, 117, 110, 116, 105, 109, 101, 76,
			111, 111, 107, 65, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 86,
			114, 109, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 73, 110, 115, 116, 97, 110, 99, 101, 92,
			73, 86, 114, 109, 49, 48, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 79, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 86,
			114, 109, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 73, 110, 115, 116, 97, 110, 99, 101, 92,
			86, 114, 109, 49, 48, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 73, 110, 115, 116, 97, 110,
			99, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 72, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 86, 114, 109, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 73, 110,
			115, 116, 97, 110, 99, 101, 92, 86, 114, 109,
			49, 48, 80, 111, 115, 101, 76, 111, 97, 100,
			101, 114, 46, 99, 115, 0, 0, 0, 3, 0,
			0, 0, 67, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 86, 114, 109, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 73, 110,
			115, 116, 97, 110, 99, 101, 92, 86, 114, 109,
			49, 48, 84, 80, 111, 115, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 110, 116, 114, 111, 108, 82, 105, 103,
			92, 65, 110, 105, 109, 97, 116, 111, 114, 80,
			111, 115, 101, 80, 114, 111, 118, 105, 100, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 55, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 110, 116, 114, 111,
			108, 82, 105, 103, 92, 66, 111, 110, 101, 73,
			110, 105, 116, 105, 97, 108, 82, 111, 116, 97,
			116, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 63, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 110,
			116, 114, 111, 108, 82, 105, 103, 92, 73, 110,
			105, 116, 105, 97, 108, 82, 111, 116, 97, 116,
			105, 111, 110, 80, 111, 115, 101, 80, 114, 111,
			118, 105, 100, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 73, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			110, 116, 114, 111, 108, 82, 105, 103, 92, 73,
			110, 105, 116, 105, 97, 108, 82, 111, 116, 97,
			116, 105, 111, 110, 115, 92, 88, 82, 95, 69,
			88, 84, 95, 104, 97, 110, 100, 95, 116, 114,
			97, 99, 107, 105, 110, 103, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 72, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 110, 116, 114, 111, 108, 82, 105, 103, 92,
			73, 110, 105, 116, 105, 97, 108, 82, 111, 116,
			97, 116, 105, 111, 110, 115, 92, 88, 82, 95,
			70, 66, 95, 98, 111, 100, 121, 95, 116, 114,
			97, 99, 107, 105, 110, 103, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 61, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 110, 116, 114, 111, 108, 82, 105, 103, 92,
			73, 78, 111, 114, 109, 97, 108, 105, 122, 101,
			100, 80, 111, 115, 101, 65, 112, 112, 108, 105,
			99, 97, 98, 108, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 59, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			110, 116, 114, 111, 108, 82, 105, 103, 92, 73,
			78, 111, 114, 109, 97, 108, 105, 122, 101, 100,
			80, 111, 115, 101, 80, 114, 111, 118, 105, 100,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 50, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 110, 116, 114,
			111, 108, 82, 105, 103, 92, 73, 84, 80, 111,
			115, 101, 80, 114, 111, 118, 105, 100, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			49, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 110, 116, 114, 111, 108,
			82, 105, 103, 92, 86, 114, 109, 49, 48, 82,
			101, 116, 97, 114, 103, 101, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 43, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			69, 110, 117, 109, 70, 108, 97, 103, 115, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 56, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 92, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			46, 103, 46, 99, 115, 0, 0, 0, 8, 0,
			0, 0, 50, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 92, 70, 111, 114, 109, 97, 116, 46, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			54, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 111, 114, 109, 97, 116, 92,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 92,
			83, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			46, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 58, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 115, 92, 68, 101, 115, 101, 114, 105,
			97, 108, 105, 122, 101, 114, 46, 103, 46, 99,
			115, 0, 0, 0, 5, 0, 0, 0, 52, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 115, 92,
			70, 111, 114, 109, 97, 116, 46, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 56, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 115, 92,
			83, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			46, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 61, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 77, 84, 111, 111, 110, 92, 68, 101, 115,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 46,
			103, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 59, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 111, 114, 109, 97, 116,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 115,
			77, 84, 111, 111, 110, 92, 83, 101, 114, 105,
			97, 108, 105, 122, 101, 114, 46, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 57, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 46, 103, 46, 99, 115, 0, 0, 0, 8,
			0, 0, 0, 51, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 70, 111, 114, 109, 97, 116,
			46, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 55, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 92, 83, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 46, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 50, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 111,
			114, 109, 97, 116, 92, 86, 114, 109, 92, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 46, 103, 46, 99, 115, 0, 0, 0, 15,
			0, 0, 0, 44, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 86, 114, 109, 92, 70, 111, 114,
			109, 97, 116, 46, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 48, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 111,
			114, 109, 97, 116, 92, 86, 114, 109, 92, 83,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 46,
			103, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 75, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 111, 114, 109, 97, 116,
			92, 86, 114, 109, 72, 117, 109, 97, 110, 111,
			105, 100, 66, 111, 110, 101, 115, 92, 86, 114,
			109, 49, 48, 72, 117, 109, 97, 110, 111, 105,
			100, 66, 111, 110, 101, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 79, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 111, 114,
			109, 97, 116, 92, 86, 114, 109, 72, 117, 109,
			97, 110, 111, 105, 100, 66, 111, 110, 101, 115,
			92, 86, 114, 109, 49, 48, 72, 117, 109, 97,
			110, 111, 105, 100, 66, 111, 110, 101, 83, 112,
			101, 99, 105, 102, 105, 99, 97, 116, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 43, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 73, 79, 92, 65, 114, 114,
			97, 121, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 48, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 43, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 73, 110, 100, 101, 120, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 82,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 92, 66, 117, 105, 108, 116, 73,
			110, 82, 80, 92, 69, 120, 112, 111, 114, 116,
			92, 66, 117, 105, 108, 116, 73, 110, 86, 114,
			109, 49, 48, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 97,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 92, 66, 117, 105, 108, 116, 73,
			110, 82, 80, 92, 69, 120, 112, 111, 114, 116,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 115,
			92, 66, 117, 105, 108, 116, 73, 110, 86, 114,
			109, 49, 48, 77, 84, 111, 111, 110, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 93, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 92, 66,
			117, 105, 108, 116, 73, 110, 82, 80, 92, 73,
			109, 112, 111, 114, 116, 92, 66, 117, 105, 108,
			116, 73, 110, 86, 114, 109, 49, 48, 77, 97,
			116, 101, 114, 105, 97, 108, 68, 101, 115, 99,
			114, 105, 112, 116, 111, 114, 71, 101, 110, 101,
			114, 97, 116, 111, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 97, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 92,
			66, 117, 105, 108, 116, 73, 110, 82, 80, 92,
			73, 109, 112, 111, 114, 116, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 115, 92, 66, 117, 105,
			108, 116, 73, 110, 86, 114, 109, 49, 48, 77,
			84, 111, 111, 110, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 109, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			87, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 92, 85, 82, 80, 92, 73,
			109, 112, 111, 114, 116, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 115, 92, 85, 114, 112, 86,
			114, 109, 49, 48, 77, 84, 111, 111, 110, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 109, 112,
			111, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 83, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 92,
			85, 82, 80, 92, 73, 109, 112, 111, 114, 116,
			92, 85, 114, 112, 86, 114, 109, 49, 48, 77,
			97, 116, 101, 114, 105, 97, 108, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 101, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			92, 85, 82, 80, 92, 73, 109, 112, 111, 114,
			116, 92, 86, 82, 77, 49, 48, 82, 101, 110,
			100, 101, 114, 80, 105, 112, 101, 108, 105, 110,
			101, 77, 97, 116, 101, 114, 105, 97, 108, 68,
			101, 115, 99, 114, 105, 112, 116, 111, 114, 71,
			101, 110, 101, 114, 97, 116, 111, 114, 85, 116,
			105, 108, 105, 116, 121, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 61, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 92,
			86, 114, 109, 49, 48, 77, 97, 116, 101, 114,
			105, 97, 108, 69, 120, 112, 111, 114, 116, 85,
			116, 105, 108, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 41, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			77, 105, 103, 114, 97, 116, 105, 111, 110, 68,
			97, 116, 97, 46, 99, 115, 0, 0, 0, 5,
			0, 0, 0, 48, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 77,
			111, 100, 101, 108, 92, 67, 111, 112, 121, 73,
			110, 100, 105, 99, 101, 115, 74, 111, 98, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 59,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 77, 111, 100, 101, 108,
			92, 73, 110, 116, 101, 114, 108, 101, 97, 118,
			101, 77, 101, 115, 104, 86, 101, 114, 116, 105,
			99, 101, 115, 74, 111, 98, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 77, 111, 100, 101, 108, 92, 77, 101,
			115, 104, 73, 109, 112, 111, 114, 116, 101, 114,
			68, 105, 118, 105, 100, 101, 100, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 111, 100, 101, 108, 92, 77,
			101, 115, 104, 73, 109, 112, 111, 114, 116, 101,
			114, 83, 104, 97, 114, 101, 100, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 44, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 111, 100, 101, 108, 92, 77,
			101, 115, 104, 82, 101, 97, 100, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 45,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 77, 111, 100, 101, 108,
			92, 77, 101, 115, 104, 86, 101, 114, 116, 101,
			120, 48, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 45, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 77, 111,
			100, 101, 108, 92, 77, 101, 115, 104, 86, 101,
			114, 116, 101, 120, 49, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 45, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 111, 100, 101, 108, 92, 77, 101, 115,
			104, 86, 101, 114, 116, 101, 120, 50, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 51, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 77, 111, 100, 101, 108, 92,
			77, 101, 115, 104, 86, 101, 114, 116, 101, 120,
			85, 116, 105, 108, 105, 116, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 44, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 111, 100, 101, 108, 92, 77,
			101, 115, 104, 87, 114, 105, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 47,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 77, 111, 100, 101, 108,
			92, 77, 111, 100, 101, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 45, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			77, 111, 100, 101, 108, 92, 77, 111, 100, 101,
			108, 82, 101, 97, 100, 101, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 61, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 84, 101, 120, 116, 117, 114, 101,
			92, 86, 114, 109, 49, 48, 77, 84, 111, 111,
			110, 84, 101, 120, 116, 117, 114, 101, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 67, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			86, 114, 109, 49, 48, 84, 101, 120, 116, 117,
			114, 101, 68, 101, 115, 99, 114, 105, 112, 116,
			111, 114, 71, 101, 110, 101, 114, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 42, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 73, 79, 92, 85, 110, 105,
			116, 121, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 33, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 73, 79, 92, 86, 114, 109,
			49, 48, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 37, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 86, 114,
			109, 49, 48, 68, 97, 116, 97, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 42, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 86, 114, 109, 49, 48, 69, 120,
			99, 101, 112, 116, 105, 111, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 41, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 86, 114, 109, 49, 48, 69, 120,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 43, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 86, 114, 109, 49, 48, 73, 109, 112,
			111, 114, 116, 68, 97, 116, 97, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 41, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 86, 114, 109, 49, 48, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 48, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 86, 114, 109, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 69, 120, 112, 111, 114, 116,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 48, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 86, 114,
			109, 65, 110, 105, 109, 97, 116, 105, 111, 110,
			73, 109, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 44, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 86, 114, 109, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 85, 116, 105, 108,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			53, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 92, 86, 114, 109, 49, 48,
			77, 101, 115, 104, 85, 116, 105, 108, 105, 116,
			121, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 73, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 76, 101, 103, 97, 99, 121, 85,
			110, 108, 105, 116, 77, 97, 116, 101, 114, 105,
			97, 108, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 66, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 115, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 77, 97, 116, 101, 114, 105,
			97, 108, 85, 116, 105, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 67, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 115, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 77, 84,
			111, 111, 110, 77, 97, 116, 101, 114, 105, 97,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 65, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 80, 98, 114, 77, 97, 116, 101,
			114, 105, 97, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 84, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 115, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 85, 110, 108, 105,
			116, 84, 114, 97, 110, 115, 112, 97, 114, 101,
			110, 116, 90, 87, 114, 105, 116, 101, 77, 97,
			116, 101, 114, 105, 97, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 70, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 115, 92, 86,
			114, 109, 48, 88, 77, 84, 111, 111, 110, 84,
			101, 120, 116, 117, 114, 101, 73, 110, 100, 101,
			120, 77, 97, 112, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 115, 92, 86, 114, 109,
			48, 88, 77, 84, 111, 111, 110, 86, 97, 108,
			117, 101, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 46, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 92, 77, 101, 115, 104, 85,
			112, 100, 97, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 49, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 67, 104,
			101, 99, 107, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 53, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 69, 120, 99, 101, 112,
			116, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 77, 97, 116, 101,
			114, 105, 97, 108, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 51, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 92, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 86, 101, 99,
			116, 111, 114, 51, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 86, 114, 109, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 57,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 86, 114, 109, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 67, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 86, 114, 109, 70,
			105, 114, 115, 116, 80, 101, 114, 115, 111, 110,
			65, 110, 100, 76, 111, 111, 107, 65, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 55,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 86, 114, 109, 72, 117, 109, 97, 110, 111,
			105, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 51, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 86, 114, 109, 77, 101, 116,
			97, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 57, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 86, 114, 109, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 43, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 92, 77,
			105, 103, 114, 97, 116, 111, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 45, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			77, 105, 103, 114, 97, 116, 105, 111, 110, 92,
			82, 111, 116, 97, 116, 101, 89, 49, 56, 48,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			43, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 92, 86, 114, 109, 48, 77, 101, 116,
			97, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 47, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 86, 114, 109, 48, 88, 86,
			101, 114, 115, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 38, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 83,
			99, 101, 110, 101, 115, 92, 83, 97, 109, 112,
			108, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 83, 116, 114, 105, 110,
			103, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 40, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 116, 121, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 47,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 86, 101, 114, 115, 105, 111, 110, 92,
			86, 82, 77, 83, 112, 101, 99, 86, 101, 114,
			115, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 86, 101, 114,
			115, 105, 111, 110, 92, 86, 82, 77, 83, 112,
			101, 99, 86, 101, 114, 115, 105, 111, 110, 80,
			97, 114, 116, 105, 97, 108, 46, 99, 115
		};
		result.TypesData = new byte[8045]
		{
			0, 0, 0, 0, 27, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 65, 120, 101, 115, 77, 97,
			115, 107, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 30, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 68, 101, 115, 116,
			105, 110, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 28, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 25, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 67, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 83, 111, 117, 114, 99, 101,
			0, 0, 0, 0, 25, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 73, 86, 114, 109, 49, 48,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			0, 0, 0, 0, 11, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 84, 82, 0, 0, 0, 0,
			28, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 27, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 65, 105,
			109, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 0, 0, 0, 0, 28, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			85, 116, 105, 108, 0, 0, 0, 0, 28, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 86, 114,
			109, 49, 48, 82, 111, 108, 108, 67, 111, 110,
			115, 116, 114, 97, 105, 110, 116, 0, 0, 0,
			0, 32, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 82, 111, 116, 97,
			116, 105, 111, 110, 67, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 0, 0, 0, 0, 35, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 68, 101,
			102, 97, 117, 108, 116, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 86, 97, 108, 105, 100,
			97, 116, 111, 114, 0, 0, 0, 0, 43, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 68, 101,
			102, 97, 117, 108, 116, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 86, 97, 108, 105, 100,
			97, 116, 111, 114, 124, 70, 97, 99, 116, 111,
			114, 121, 0, 0, 0, 0, 22, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 75, 101, 121, 1,
			0, 0, 0, 26, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 124, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			0, 0, 0, 0, 25, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 77, 101, 114, 103, 101, 114,
			0, 0, 0, 0, 29, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 73, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 86, 97, 108, 105, 100,
			97, 116, 111, 114, 0, 0, 0, 0, 36, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 73, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 86,
			97, 108, 105, 100, 97, 116, 111, 114, 70, 97,
			99, 116, 111, 114, 121, 0, 0, 0, 0, 38,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 73,
			76, 111, 111, 107, 65, 116, 69, 121, 101, 68,
			105, 114, 101, 99, 116, 105, 111, 110, 65, 112,
			112, 108, 105, 99, 97, 98, 108, 101, 0, 0,
			0, 0, 29, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 97, 116, 101, 114, 105, 97, 108,
			67, 111, 108, 111, 114, 66, 105, 110, 100, 105,
			110, 103, 0, 0, 0, 0, 26, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 97, 116, 101,
			114, 105, 97, 108, 85, 86, 66, 105, 110, 100,
			105, 110, 103, 0, 0, 0, 0, 35, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 77, 97, 116,
			101, 114, 105, 97, 108, 86, 97, 108, 117, 101,
			66, 105, 110, 100, 105, 110, 103, 77, 101, 114,
			103, 101, 114, 0, 0, 0, 0, 77, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 77, 97, 116,
			101, 114, 105, 97, 108, 86, 97, 108, 117, 101,
			66, 105, 110, 100, 105, 110, 103, 77, 101, 114,
			103, 101, 114, 124, 68, 105, 99, 116, 105, 111,
			110, 97, 114, 121, 75, 101, 121, 77, 97, 116,
			101, 114, 105, 97, 108, 86, 97, 108, 117, 101,
			66, 105, 110, 100, 105, 110, 103, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 50,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 77,
			97, 116, 101, 114, 105, 97, 108, 86, 97, 108,
			117, 101, 66, 105, 110, 100, 105, 110, 103, 77,
			101, 114, 103, 101, 114, 124, 77, 97, 116, 101,
			114, 105, 97, 108, 84, 97, 114, 103, 101, 116,
			0, 0, 0, 0, 27, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 66, 105, 110, 100, 105,
			110, 103, 0, 0, 0, 0, 33, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 111, 114, 112,
			104, 84, 97, 114, 103, 101, 116, 66, 105, 110,
			100, 105, 110, 103, 77, 101, 114, 103, 101, 114,
			0, 0, 0, 0, 30, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 73, 100, 101, 110, 116,
			105, 102, 105, 101, 114, 1, 0, 0, 0, 26,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 124,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 0, 0, 0, 0,
			34, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			82, 117, 110, 116, 105, 109, 101, 77, 111, 114,
			112, 104, 84, 97, 114, 103, 101, 116, 66, 105,
			110, 100, 105, 110, 103, 0, 0, 0, 0, 28,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 80,
			114, 101, 118, 105, 101, 119, 77, 97, 116, 101,
			114, 105, 97, 108, 85, 116, 105, 108, 0, 0,
			0, 0, 24, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 80, 114, 101, 118, 105, 101, 119, 77,
			101, 115, 104, 73, 116, 101, 109, 0, 0, 0,
			0, 28, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 80, 114, 101, 118, 105, 101, 119, 83, 99,
			101, 110, 101, 77, 97, 110, 97, 103, 101, 114,
			0, 0, 0, 0, 17, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 80, 114, 111, 112, 73, 116,
			101, 109, 0, 0, 0, 0, 28, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 80, 114, 101, 118,
			105, 101, 119, 77, 97, 116, 101, 114, 105, 97,
			108, 73, 116, 101, 109, 0, 0, 0, 0, 24,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			82, 77, 49, 48, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 0, 0, 0, 0, 33, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 82, 101,
			110, 100, 101, 114, 101, 114, 70, 105, 114, 115,
			116, 80, 101, 114, 115, 111, 110, 70, 108, 97,
			103, 115, 0, 0, 0, 0, 38, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 70, 105, 114, 115, 116, 80, 101, 114, 115,
			111, 110, 76, 97, 121, 101, 114, 83, 101, 116,
			116, 105, 110, 103, 115, 0, 0, 0, 0, 20,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 67,
			117, 114, 118, 101, 77, 97, 112, 112, 101, 114,
			0, 0, 0, 0, 36, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 73, 76, 111, 111, 107, 65,
			116, 69, 121, 101, 68, 105, 114, 101, 99, 116,
			105, 111, 110, 80, 114, 111, 118, 105, 100, 101,
			114, 0, 0, 0, 0, 27, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 76, 111, 111, 107, 65,
			116, 69, 121, 101, 68, 105, 114, 101, 99, 116,
			105, 111, 110, 0, 0, 0, 0, 43, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 76, 111, 111,
			107, 65, 116, 69, 121, 101, 68, 105, 114, 101,
			99, 116, 105, 111, 110, 65, 112, 112, 108, 105,
			99, 97, 98, 108, 101, 84, 111, 66, 111, 110,
			101, 0, 0, 0, 0, 49, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 76, 111, 111, 107, 65,
			116, 69, 121, 101, 68, 105, 114, 101, 99, 116,
			105, 111, 110, 65, 112, 112, 108, 105, 99, 97,
			98, 108, 101, 84, 111, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 0, 0, 0, 0, 20,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 76,
			111, 111, 107, 65, 116, 73, 110, 112, 117, 116,
			0, 0, 0, 0, 28, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 97, 116, 114, 105, 120,
			52, 120, 52, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 38, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 80, 114, 101,
			102, 97, 98, 82, 101, 108, 97, 116, 101, 100,
			83, 99, 114, 105, 112, 116, 97, 98, 108, 101,
			79, 98, 106, 101, 99, 116, 0, 0, 0, 0,
			32, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 82, 77, 49, 48, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 67, 111, 108, 108, 105,
			100, 101, 114, 0, 0, 0, 0, 37, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 86, 82, 77,
			49, 48, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 67, 111, 108, 108, 105, 100, 101, 114,
			71, 114, 111, 117, 112, 0, 0, 0, 0, 29,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			82, 77, 49, 48, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 74, 111, 105, 110, 116, 0,
			0, 0, 0, 27, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 82, 77, 49, 48, 83, 112,
			114, 105, 110, 103, 85, 116, 105, 108, 105, 116,
			121, 0, 0, 0, 0, 22, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			73, 110, 115, 116, 97, 110, 99, 101, 0, 0,
			0, 0, 32, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 49, 48, 73, 110, 115,
			116, 97, 110, 99, 101, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 0, 0, 0, 0, 39,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 86,
			114, 109, 49, 48, 73, 110, 115, 116, 97, 110,
			99, 101, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 124, 83, 112, 114, 105, 110, 103, 0,
			0, 0, 0, 20, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 82, 77, 49, 48, 79, 98,
			106, 101, 99, 116, 0, 0, 0, 0, 30, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 86, 82,
			77, 49, 48, 79, 98, 106, 101, 99, 116, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 0,
			0, 0, 0, 31, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 82, 77, 49, 48, 79, 98,
			106, 101, 99, 116, 70, 105, 114, 115, 116, 80,
			101, 114, 115, 111, 110, 0, 0, 0, 0, 26,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			82, 77, 49, 48, 79, 98, 106, 101, 99, 116,
			76, 111, 111, 107, 65, 116, 0, 0, 0, 0,
			24, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 82, 77, 49, 48, 79, 98, 106, 101, 99,
			116, 77, 101, 116, 97, 0, 0, 0, 0, 25,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 67, 111, 110, 116, 114, 111,
			108, 66, 111, 110, 101, 0, 0, 0, 0, 31,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 82, 117, 110, 116, 105, 109,
			101, 67, 111, 110, 116, 114, 111, 108, 82, 105,
			103, 0, 0, 0, 0, 21, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			82, 117, 110, 116, 105, 109, 101, 0, 0, 0,
			0, 31, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 82, 117, 110, 116,
			105, 109, 101, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 0, 0, 0, 0, 27, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 86, 114, 109,
			49, 48, 82, 117, 110, 116, 105, 109, 101, 76,
			111, 111, 107, 65, 116, 0, 0, 0, 0, 24,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 73,
			86, 114, 109, 49, 48, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 0, 0, 0, 0, 31, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 86, 114,
			109, 49, 48, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 73, 110, 115, 116, 97, 110, 99, 101,
			0, 0, 0, 0, 24, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 114, 109, 49, 48, 80,
			111, 115, 101, 76, 111, 97, 100, 101, 114, 0,
			0, 0, 0, 19, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 84, 80,
			111, 115, 101, 0, 0, 0, 0, 30, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 86, 114, 109,
			49, 48, 84, 80, 111, 115, 101, 124, 78, 111,
			82, 111, 116, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 28, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 86, 114, 109, 49, 48, 84, 80, 111,
			115, 101, 124, 83, 107, 101, 108, 101, 116, 111,
			110, 0, 0, 0, 0, 29, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 65, 110, 105, 109, 97,
			116, 111, 114, 80, 111, 115, 101, 80, 114, 111,
			118, 105, 100, 101, 114, 0, 0, 0, 0, 28,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 66,
			111, 110, 101, 73, 110, 105, 116, 105, 97, 108,
			82, 111, 116, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 33, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 73, 110, 105, 116, 82, 111, 116, 97,
			116, 105, 111, 110, 80, 111, 115, 101, 80, 114,
			111, 118, 105, 100, 101, 114, 0, 0, 0, 0,
			29, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			88, 82, 95, 69, 88, 84, 95, 104, 97, 110,
			100, 95, 116, 114, 97, 99, 107, 105, 110, 103,
			0, 0, 0, 0, 28, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 88, 82, 95, 70, 66, 95,
			98, 111, 100, 121, 95, 116, 114, 97, 99, 107,
			105, 110, 103, 0, 0, 0, 0, 34, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 73, 78, 111,
			114, 109, 97, 108, 105, 122, 101, 100, 80, 111,
			115, 101, 65, 112, 112, 108, 105, 99, 97, 98,
			108, 101, 0, 0, 0, 0, 32, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 73, 78, 111, 114,
			109, 97, 108, 105, 122, 101, 100, 80, 111, 115,
			101, 80, 114, 111, 118, 105, 100, 101, 114, 0,
			0, 0, 0, 23, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 73, 84, 80, 111, 115, 101, 80,
			114, 111, 118, 105, 100, 101, 114, 0, 0, 0,
			0, 33, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 73, 84, 80, 111, 115, 101, 80, 114, 111,
			118, 105, 100, 101, 114, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 22,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 82, 101, 116, 97, 114, 103,
			101, 116, 0, 0, 0, 0, 27, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 69, 110, 117, 109,
			70, 108, 97, 103, 115, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 0, 0, 0, 0, 54, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 118, 114, 109, 95, 97, 110, 105,
			109, 97, 116, 105, 111, 110, 124, 71, 108, 116,
			102, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 0, 0, 0, 0, 47, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 118, 114, 109, 95, 97, 110, 105, 109,
			97, 116, 105, 111, 110, 124, 72, 117, 109, 97,
			110, 66, 111, 110, 101, 0, 0, 0, 0, 48,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 95, 97, 110,
			105, 109, 97, 116, 105, 111, 110, 124, 72, 117,
			109, 97, 110, 66, 111, 110, 101, 115, 0, 0,
			0, 0, 46, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			95, 97, 110, 105, 109, 97, 116, 105, 111, 110,
			124, 72, 117, 109, 97, 110, 111, 105, 100, 0,
			0, 0, 0, 48, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 118, 114,
			109, 95, 97, 110, 105, 109, 97, 116, 105, 111,
			110, 124, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 0, 0, 0, 0, 44, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 118, 114, 109, 95, 97, 110, 105, 109, 97,
			116, 105, 111, 110, 124, 80, 114, 101, 115, 101,
			116, 0, 0, 0, 0, 49, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 95, 97, 110, 105, 109, 97, 116,
			105, 111, 110, 124, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 44,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 95, 97, 110,
			105, 109, 97, 116, 105, 111, 110, 124, 76, 111,
			111, 107, 65, 116, 0, 0, 0, 0, 56, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 118, 114, 109, 95, 97, 110, 105,
			109, 97, 116, 105, 111, 110, 124, 86, 82, 77,
			67, 95, 118, 114, 109, 95, 97, 110, 105, 109,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 52,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 95, 97, 110,
			105, 109, 97, 116, 105, 111, 110, 124, 71, 108,
			116, 102, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 56, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 110, 111, 100, 101, 95, 99, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 124, 71, 108, 116,
			102, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 0, 0, 0, 0, 54, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 110, 111, 100, 101, 95, 99, 111, 110,
			115, 116, 114, 97, 105, 110, 116, 124, 82, 111,
			108, 108, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 0, 0, 0, 0, 53, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 110, 111, 100, 101, 95, 99, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 124, 65, 105, 109,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			0, 0, 0, 0, 58, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 110,
			111, 100, 101, 95, 99, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 124, 82, 111, 116, 97, 116,
			105, 111, 110, 67, 111, 110, 115, 116, 114, 97,
			105, 110, 116, 0, 0, 0, 0, 50, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 110, 111, 100, 101, 95, 99, 111, 110,
			115, 116, 114, 97, 105, 110, 116, 124, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 0, 0,
			0, 0, 60, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 110, 111, 100,
			101, 95, 99, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 124, 86, 82, 77, 67, 95, 110, 111,
			100, 101, 95, 99, 111, 110, 115, 116, 114, 97,
			105, 110, 116, 0, 0, 0, 0, 54, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 110, 111, 100, 101, 95, 99, 111, 110,
			115, 116, 114, 97, 105, 110, 116, 124, 71, 108,
			116, 102, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 56, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 109, 97, 116, 101, 114, 105, 97, 108, 115,
			95, 109, 116, 111, 111, 110, 124, 71, 108, 116,
			102, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 0, 0, 0, 0, 54, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 109, 97, 116, 101, 114, 105, 97, 108,
			115, 95, 109, 116, 111, 111, 110, 124, 71, 108,
			116, 102, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 51, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 115, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 124, 71, 108, 116, 102, 68, 101, 115, 101,
			114, 105, 97, 108, 105, 122, 101, 114, 0, 0,
			0, 0, 54, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 115, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 124, 67, 111,
			108, 108, 105, 100, 101, 114, 83, 104, 97, 112,
			101, 83, 112, 104, 101, 114, 101, 0, 0, 0,
			0, 55, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 115, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 124, 67, 111, 108,
			108, 105, 100, 101, 114, 83, 104, 97, 112, 101,
			67, 97, 112, 115, 117, 108, 101, 0, 0, 0,
			0, 48, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 115, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 124, 67, 111, 108,
			108, 105, 100, 101, 114, 83, 104, 97, 112, 101,
			0, 0, 0, 0, 43, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 115,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 124,
			67, 111, 108, 108, 105, 100, 101, 114, 0, 0,
			0, 0, 48, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 115, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 124, 67, 111,
			108, 108, 105, 100, 101, 114, 71, 114, 111, 117,
			112, 0, 0, 0, 0, 50, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			115, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			124, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 74, 111, 105, 110, 116, 0, 0, 0, 0,
			41, 85, 110, 105, 71, 76, 84, 70, 46, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			86, 82, 77, 67, 95, 115, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 124, 83, 112, 114, 105,
			110, 103, 0, 0, 0, 0, 50, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 115, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 124, 86, 82, 77, 67, 95, 115, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 0, 0, 0,
			0, 49, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 115, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 124, 71, 108, 116,
			102, 83, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 0, 0, 0, 0, 44, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 124, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 32, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 118,
			114, 109, 124, 77, 101, 116, 97, 0, 0, 0,
			0, 37, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 118, 114, 109, 124,
			72, 117, 109, 97, 110, 66, 111, 110, 101, 0,
			0, 0, 0, 38, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 118, 114,
			109, 124, 72, 117, 109, 97, 110, 66, 111, 110,
			101, 115, 0, 0, 0, 0, 36, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 118, 114, 109, 124, 72, 117, 109, 97, 110,
			111, 105, 100, 0, 0, 0, 0, 42, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 118, 114, 109, 124, 77, 101, 115, 104,
			65, 110, 110, 111, 116, 97, 116, 105, 111, 110,
			0, 0, 0, 0, 39, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 118,
			114, 109, 124, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 0, 0, 0, 0, 42, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 118, 114, 109, 124, 76, 111, 111,
			107, 65, 116, 82, 97, 110, 103, 101, 77, 97,
			112, 0, 0, 0, 0, 34, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 124, 76, 111, 111, 107, 65, 116,
			0, 0, 0, 0, 43, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 118,
			114, 109, 124, 77, 111, 114, 112, 104, 84, 97,
			114, 103, 101, 116, 66, 105, 110, 100, 0, 0,
			0, 0, 45, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			124, 77, 97, 116, 101, 114, 105, 97, 108, 67,
			111, 108, 111, 114, 66, 105, 110, 100, 0, 0,
			0, 0, 48, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			124, 84, 101, 120, 116, 117, 114, 101, 84, 114,
			97, 110, 115, 102, 111, 114, 109, 66, 105, 110,
			100, 0, 0, 0, 0, 38, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 124, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 0, 0, 0, 0, 34, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 118, 114, 109, 124, 80, 114, 101,
			115, 101, 116, 0, 0, 0, 0, 39, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 118, 114, 109, 124, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 36, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 118, 114, 109, 124,
			86, 82, 77, 67, 95, 118, 114, 109, 0, 0,
			0, 0, 42, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			124, 71, 108, 116, 102, 83, 101, 114, 105, 97,
			108, 105, 122, 101, 114, 0, 0, 0, 0, 35,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 72, 117, 109, 97, 110, 111,
			105, 100, 66, 111, 110, 101, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 0, 0, 0, 0, 39,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 72, 117, 109, 97, 110, 111,
			105, 100, 66, 111, 110, 101, 83, 112, 101, 99,
			105, 102, 105, 99, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 24, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 65, 114, 114, 97, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 29, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 24, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 73, 110, 100, 101,
			120, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 37, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 66, 117, 105, 108, 116,
			73, 110, 86, 114, 109, 49, 48, 77, 97, 116,
			101, 114, 105, 97, 108, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 42, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 66, 117, 105,
			108, 116, 73, 110, 86, 114, 109, 49, 48, 77,
			84, 111, 111, 110, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 48, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 66, 117, 105, 108, 116, 73,
			110, 86, 114, 109, 49, 48, 77, 97, 116, 101,
			114, 105, 97, 108, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 0, 0, 0, 0, 42, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 66, 117, 105,
			108, 116, 73, 110, 86, 114, 109, 49, 48, 77,
			84, 111, 111, 110, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 109, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 38, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 85, 114, 112, 86, 114, 109,
			49, 48, 77, 84, 111, 111, 110, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 44, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 85, 114, 112,
			86, 114, 109, 49, 48, 77, 97, 116, 101, 114,
			105, 97, 108, 68, 101, 115, 99, 114, 105, 112,
			116, 111, 114, 71, 101, 110, 101, 114, 97, 116,
			111, 114, 0, 0, 0, 0, 58, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 77, 97, 116, 101, 114, 105, 97, 108, 68,
			101, 115, 99, 114, 105, 112, 116, 111, 114, 71,
			101, 110, 101, 114, 97, 116, 111, 114, 68, 101,
			115, 99, 114, 105, 112, 116, 111, 114, 85, 116,
			105, 108, 105, 116, 121, 0, 0, 0, 0, 33,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 85, 116,
			105, 108, 115, 0, 0, 0, 0, 54, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 86, 114, 109,
			49, 48, 77, 97, 116, 101, 114, 105, 97, 108,
			69, 120, 112, 111, 114, 116, 85, 116, 105, 108,
			115, 124, 69, 109, 112, 116, 121, 71, 108, 116,
			102, 84, 101, 120, 116, 117, 114, 101, 73, 110,
			102, 111, 0, 0, 0, 0, 22, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 68, 97, 116, 97, 0,
			0, 0, 0, 24, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 67, 111, 112, 121, 73, 110, 100,
			105, 99, 101, 115, 74, 111, 98, 115, 0, 0,
			0, 0, 19, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 124, 85, 73, 110, 116, 50, 85, 73,
			110, 116, 0, 0, 0, 0, 21, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 124, 85, 115, 104,
			111, 114, 116, 50, 85, 105, 110, 116, 0, 0,
			0, 0, 23, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 124, 85, 115, 104, 111, 114, 116, 50,
			85, 115, 104, 111, 114, 116, 0, 0, 0, 0,
			21, 85, 110, 105, 86, 82, 77, 49, 48, 46,
			124, 85, 105, 110, 116, 50, 85, 115, 104, 111,
			114, 116, 0, 0, 0, 0, 34, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 73, 110, 116, 101,
			114, 108, 101, 97, 118, 101, 77, 101, 115, 104,
			86, 101, 114, 116, 105, 99, 101, 115, 74, 111,
			98, 0, 0, 0, 0, 28, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 77, 101, 115, 104, 73,
			109, 112, 111, 114, 116, 101, 114, 68, 105, 118,
			105, 100, 101, 100, 0, 0, 0, 0, 27, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 77, 101,
			115, 104, 73, 109, 112, 111, 114, 116, 101, 114,
			83, 104, 97, 114, 101, 100, 0, 0, 0, 0,
			19, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 101, 115, 104, 82, 101, 97, 100, 101, 114,
			0, 0, 0, 0, 20, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 101, 115, 104, 86, 101,
			114, 116, 101, 120, 48, 0, 0, 0, 0, 20,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			101, 115, 104, 86, 101, 114, 116, 101, 120, 49,
			0, 0, 0, 0, 20, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 101, 115, 104, 86, 101,
			114, 116, 101, 120, 50, 0, 0, 0, 0, 26,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			101, 115, 104, 86, 101, 114, 116, 101, 120, 85,
			116, 105, 108, 105, 116, 121, 0, 0, 0, 0,
			19, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 101, 115, 104, 87, 114, 105, 116, 101, 114,
			0, 0, 0, 0, 22, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 111, 100, 101, 108, 69,
			120, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 20, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 111, 100, 101, 108, 82, 101, 97, 100,
			101, 114, 0, 0, 0, 0, 34, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 77, 84, 111, 111, 110, 84, 101, 120, 116,
			117, 114, 101, 73, 109, 112, 111, 114, 116, 101,
			114, 0, 0, 0, 0, 51, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 86, 114, 109, 49, 48,
			77, 84, 111, 111, 110, 84, 101, 120, 116, 117,
			114, 101, 73, 109, 112, 111, 114, 116, 101, 114,
			124, 86, 114, 109, 49, 48, 84, 101, 120, 116,
			117, 114, 101, 73, 110, 102, 111, 0, 0, 0,
			0, 40, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 84, 101, 120, 116,
			117, 114, 101, 68, 101, 115, 99, 114, 105, 112,
			116, 111, 114, 71, 101, 110, 101, 114, 97, 116,
			111, 114, 0, 0, 0, 0, 23, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 85, 110, 105, 116,
			121, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			0, 0, 0, 0, 14, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 114, 109, 49, 48, 0,
			0, 0, 0, 18, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 68, 97,
			116, 97, 0, 0, 0, 0, 23, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 34, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 114, 109, 49, 48, 78,
			111, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			69, 120, 99, 101, 112, 116, 105, 111, 110, 0,
			0, 0, 0, 22, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 69, 120,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			24, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 114, 109, 49, 48, 73, 109, 112, 111, 114,
			116, 68, 97, 116, 97, 0, 0, 0, 0, 22,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 73, 109, 112, 111, 114, 116,
			101, 114, 0, 0, 0, 0, 31, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 86, 114, 109, 49,
			48, 73, 109, 112, 111, 114, 116, 101, 114, 124,
			77, 111, 100, 101, 108, 77, 97, 112, 0, 0,
			0, 0, 29, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 69, 120, 112, 111, 114, 116,
			101, 114, 0, 0, 0, 0, 46, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 86, 114, 109, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 69, 120,
			112, 111, 114, 116, 101, 114, 124, 80, 111, 115,
			105, 116, 105, 111, 110, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 46, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 86, 114, 109,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 69,
			120, 112, 111, 114, 116, 101, 114, 124, 82, 111,
			116, 97, 116, 105, 111, 110, 69, 120, 112, 111,
			114, 116, 101, 114, 0, 0, 0, 0, 29, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 86, 114,
			109, 65, 110, 105, 109, 97, 116, 105, 111, 110,
			73, 109, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 44, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 86, 114, 109, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 73, 109, 112, 111, 114, 116,
			101, 114, 124, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 73, 110, 102, 111, 0, 0, 0,
			0, 25, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 65, 110, 105, 109, 97, 116,
			105, 111, 110, 85, 116, 105, 108, 0, 0, 0,
			0, 25, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 37, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			76, 101, 103, 97, 99, 121, 85, 110, 108, 105,
			116, 77, 97, 116, 101, 114, 105, 97, 108, 0,
			0, 0, 0, 30, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 77, 97, 116, 101, 114, 105, 97, 108,
			85, 116, 105, 108, 0, 0, 0, 0, 31, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 77, 84, 111,
			111, 110, 77, 97, 116, 101, 114, 105, 97, 108,
			0, 0, 0, 0, 29, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 80, 98, 114, 77, 97, 116, 101,
			114, 105, 97, 108, 0, 0, 0, 0, 48, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 85, 110, 108,
			105, 116, 84, 114, 97, 110, 115, 112, 97, 114,
			101, 110, 116, 90, 87, 114, 105, 116, 101, 77,
			97, 116, 101, 114, 105, 97, 108, 0, 0, 0,
			0, 34, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 48, 88, 77, 84, 111, 111,
			110, 84, 101, 120, 116, 117, 114, 101, 73, 110,
			100, 101, 120, 77, 97, 112, 0, 0, 0, 0,
			24, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 114, 109, 48, 88, 77, 84, 111, 111, 110,
			86, 97, 108, 117, 101, 0, 0, 0, 0, 20,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			101, 115, 104, 85, 112, 100, 97, 116, 101, 114,
			0, 0, 0, 0, 34, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 77, 101, 115, 104, 85, 112,
			100, 97, 116, 101, 114, 124, 77, 111, 114, 112,
			104, 65, 99, 99, 101, 115, 115, 111, 114, 0,
			0, 0, 0, 23, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 67, 104, 101, 99, 107, 0, 0, 0,
			0, 42, 85, 110, 105, 86, 82, 77, 49, 48,
			46, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			67, 104, 101, 99, 107, 124, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 69, 120, 99, 101, 112,
			116, 105, 111, 110, 0, 0, 0, 0, 27, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 0, 0, 0, 0,
			27, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 105, 103, 114, 97, 116, 105, 111, 110, 77,
			97, 116, 101, 114, 105, 97, 108, 115, 0, 0,
			0, 0, 23, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 105, 103, 114, 97, 116, 101, 86,
			101, 99, 116, 111, 114, 51, 0, 0, 0, 0,
			21, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 105, 103, 114, 97, 116, 105, 111, 110, 86,
			114, 109, 0, 0, 0, 0, 31, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 86, 114, 109, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 0, 0,
			0, 0, 41, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 86, 114, 109, 76, 111, 111, 107, 65, 116,
			65, 110, 100, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 0, 0, 0, 0, 29, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 86, 114, 109,
			72, 117, 109, 97, 110, 111, 105, 100, 0, 0,
			0, 0, 25, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 86, 114, 109, 77, 101, 116, 97, 0, 0,
			0, 0, 31, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 86, 114, 109, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 0, 0, 0, 0, 55, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 86, 114, 109,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			124, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 71, 114, 111, 117, 112, 77, 105, 103, 114,
			97, 116, 111, 114, 0, 0, 0, 0, 17, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 77, 105,
			103, 114, 97, 116, 111, 114, 0, 0, 0, 0,
			30, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			85, 110, 78, 111, 114, 109, 97, 108, 105, 122,
			101, 100, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 19, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 82, 111, 116, 97, 116,
			101, 89, 49, 56, 48, 0, 0, 0, 0, 27,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 124, 86,
			114, 109, 48, 77, 101, 116, 97, 0, 0, 0,
			0, 21, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 48, 88, 86, 101, 114, 115,
			105, 111, 110, 0, 0, 0, 0, 29, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 86, 114, 109,
			48, 88, 86, 101, 114, 115, 105, 111, 110, 124,
			86, 101, 114, 115, 105, 111, 110, 0, 0, 0,
			0, 22, 85, 110, 105, 86, 82, 77, 49, 48,
			46, 83, 97, 109, 112, 108, 101, 124, 83, 97,
			109, 112, 108, 101, 0, 0, 0, 0, 25, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 83, 116,
			114, 105, 110, 103, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 15, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 80, 111,
			115, 82, 111, 116, 0, 0, 0, 0, 19, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 0, 0,
			0, 0, 24, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 85, 110, 105, 116, 121, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 1, 0, 0,
			0, 25, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 82, 77, 49, 48, 83, 112, 101, 99,
			86, 101, 114, 115, 105, 111, 110, 1, 0, 0,
			0, 25, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 82, 77, 49, 48, 83, 112, 101, 99,
			86, 101, 114, 115, 105, 111, 110, 0, 0, 0,
			0, 33, 85, 110, 105, 86, 82, 77, 49, 48,
			46, 86, 82, 77, 49, 48, 83, 112, 101, 99,
			86, 101, 114, 115, 105, 111, 110, 124, 86, 101,
			114, 115, 105, 111, 110
		};
		result.TotalFiles = 149;
		result.TotalTypes = 210;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.Extensions.VRMC_vrm
{
	public static class GltfDeserializer
	{
		public static readonly Utf8String ExtensionNameUtf8 = Utf8String.From("VRMC_vrm");

		public static bool TryGet(glTFExtension src, out VRMC_vrm extension)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			glTFExtensionImport val = (glTFExtensionImport)(object)((src is glTFExtensionImport) ? src : null);
			if (val != null)
			{
				foreach (KeyValuePair<JsonNode, JsonNode> item in val.ObjectItems())
				{
					if (ListTreeNodeExtensions.GetUtf8String(item.Key) == ExtensionNameUtf8)
					{
						extension = Deserialize(item.Value);
						return true;
					}
				}
			}
			extension = null;
			return false;
		}

		public static VRMC_vrm Deserialize(JsonNode parsed)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			VRMC_vrm vRMC_vrm = new VRMC_vrm();
			foreach (KeyValuePair<JsonNode, JsonNode> item in IValueNodeObjectExtensions.ObjectItems(parsed))
			{
				switch (ListTreeNodeExtensions.GetString(item.Key))
				{
				case "extensions":
					vRMC_vrm.Extensions = (object)new glTFExtensionImport(item.Value);
					break;
				case "extras":
					vRMC_vrm.Extras = (object)new glTFExtensionImport(item.Value);
					break;
				case "specVersion":
					vRMC_vrm.SpecVersion = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "meta":
					vRMC_vrm.Meta = Deserialize_Meta(item.Value);
					break;
				case "humanoid":
					vRMC_vrm.Humanoid = Deserialize_Humanoid(item.Value);
					break;
				case "firstPerson":
					vRMC_vrm.FirstPerson = Deserialize_FirstPerson(item.Value);
					break;
				case "lookAt":
					vRMC_vrm.LookAt = Deserialize_LookAt(item.Value);
					break;
				case "expressions":
					vRMC_vrm.Expressions = Deserialize_Expressions(item.Value);
					break;
				}
			}
			return vRMC_vrm;
		}

		public static Meta Deserialize_Meta(JsonNode parsed)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_037d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			Meta meta = new Meta();
			foreach (KeyValuePair<JsonNode, JsonNode> item in IValueNodeObjectExtensions.ObjectItems(parsed))
			{
				switch (ListTreeNodeExtensions.GetString(item.Key))
				{
				case "extensions":
					meta.Extensions = (object)new glTFExtensionImport(item.Value);
					break;
				case "extras":
					meta.Extras = (object)new glTFExtensionImport(item.Value);
					break;
				case "name":
					meta.Name = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "version":
					meta.Version = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "authors":
					meta.Authors = __meta_Deserialize_Authors(item.Value);
					break;
				case "copyrightInformation":
					meta.CopyrightInformation = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "contactInformation":
					meta.ContactInformation = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "references":
					meta.References = __meta_Deserialize_References(item.Value);
					break;
				case "thirdPartyLicenses":
					meta.ThirdPartyLicenses = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "thumbnailImage":
					meta.ThumbnailImage = ListTreeNodeExtensions.GetInt32(item.Value);
					break;
				case "licenseUrl":
					meta.LicenseUrl = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "avatarPermission":
					meta.AvatarPermission = (AvatarPermissionType)Enum.Parse(typeof(AvatarPermissionType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "allowExcessivelyViolentUsage":
					meta.AllowExcessivelyViolentUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "allowExcessivelySexualUsage":
					meta.AllowExcessivelySexualUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "commercialUsage":
					meta.CommercialUsage = (CommercialUsageType)Enum.Parse(typeof(CommercialUsageType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "allowPoliticalOrReligiousUsage":
					meta.AllowPoliticalOrReligiousUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "allowAntisocialOrHateUsage":
					meta.AllowAntisocialOrHateUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "creditNotation":
					meta.CreditNotation = (CreditNotationType)Enum.Parse(typeof(CreditNotationType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "allowRedistribution":
					meta.AllowRedistribution = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "modification":
					meta.Modification = (ModificationType)Enum.Parse(typeof(ModificationType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "otherLicenseUrl":
					meta.OtherLicenseUrl = ListTreeNodeExtensions.GetString(item.Value);
					break;
				}
			}
			return meta;
		}

		public static List<string> __meta_Deserialize_Authors(JsonNode parsed)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			List<string> list = new List<string>();
			foreach (JsonNode item in ListTreeNodeArrayExtensions.ArrayItems(parsed))
			{
				list.Add(ListTreeNodeExtensions.GetString(item));
			}
			return list;
		}

		public static List<string> __meta_Deserialize_References(JsonNode parsed)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			List<string> list = new List<string>();
			foreach (JsonNode item in ListTreeNodeArrayExtensions.ArrayItems(parsed))
			{
				list.Add(ListTreeNodeExtensions.GetString(item));
			}
			return list;
		}

		public static Humanoid Deserialize_Humanoid(JsonNode parsed)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Expected O, but got Unknown
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			Humanoid humanoid = new Humanoid();
			foreach (KeyValuePair<JsonNode, JsonNode> item in IValueNodeObjectExtensions.ObjectItems(parsed))
			{
				switch (ListTreeNodeExtensions.GetString(item.Key))
				{
				case "extensions":
					humanoid.Extensions = (object)new glTFExtensionImport(item.Value);
					break;
				case "extras":
					humanoid.Extras = (object)new glTFExtensionImport(item.Value);
					break;
				case "humanBones":
					humanoid.HumanBones = __humanoid_Deserialize_HumanBones(item.Value);
					break;
				}
			}
			return humanoid;
		}

		public static HumanBones __humanoid_Deserialize_HumanBones(JsonNode parsed)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invali

BepInEx/plugins/VrmLib.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Text;
using UniGLTF;
using UniGLTF.Utils;
using Unity.Collections;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[896]
		{
			0, 0, 0, 1, 0, 0, 0, 43, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 118, 114, 109, 108, 105, 98, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 111,
			114, 100, 105, 110, 97, 116, 101, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 42, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 118, 114, 109, 108, 105, 98, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 120,
			112, 111, 114, 116, 65, 114, 103, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 57, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 118, 114, 109, 108, 105, 98, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 76,
			105, 115, 116, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 38, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 118, 114,
			109, 108, 105, 98, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 71, 108, 116, 102, 73, 100, 46,
			99, 115, 0, 0, 0, 7, 0, 0, 0, 49,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 118, 114, 109, 108, 105, 98,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 72,
			117, 109, 97, 110, 111, 105, 100, 92, 72, 117,
			109, 97, 110, 111, 105, 100, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 54, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 118, 114, 109, 108, 105, 98, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 72, 117, 109, 97, 110,
			111, 105, 100, 66, 111, 110, 101, 115, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 58, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 118, 114, 109, 108, 105, 98, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 72, 117,
			109, 97, 110, 111, 105, 100, 92, 83, 107, 101,
			108, 101, 116, 111, 110, 69, 115, 116, 105, 109,
			97, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 118,
			114, 109, 108, 105, 98, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 83, 107, 101, 108, 101, 116, 111,
			110, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 118, 114, 109,
			108, 105, 98, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 97, 116, 104, 70, 87, 114, 97,
			112, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 36, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 118, 114, 109, 108,
			105, 98, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 101, 115, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 41, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			118, 114, 109, 108, 105, 98, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 101, 115, 104, 71,
			114, 111, 117, 112, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 37, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 118,
			114, 109, 108, 105, 98, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 111, 100, 101, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 43,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 118, 114, 109, 108, 105, 98,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			111, 114, 112, 104, 84, 97, 114, 103, 101, 116,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			36, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 118, 114, 109, 108, 105,
			98, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			78, 111, 100, 101, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 45, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 118,
			114, 109, 108, 105, 98, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 78, 111, 100, 101, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 36, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 118, 114, 109, 108, 105, 98, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 83, 107, 105,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 44, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 118, 114, 109, 108,
			105, 98, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 86, 101, 114, 116, 101, 120, 66, 117, 102,
			102, 101, 114, 46, 99, 115
		};
		result.TypesData = new byte[748]
		{
			0, 0, 0, 0, 18, 86, 114, 109, 76, 105,
			98, 124, 67, 111, 111, 114, 100, 105, 110, 97,
			116, 101, 115, 0, 0, 0, 0, 17, 86, 114,
			109, 76, 105, 98, 124, 69, 120, 112, 111, 114,
			116, 65, 114, 103, 115, 0, 0, 0, 0, 21,
			86, 114, 109, 76, 105, 98, 124, 76, 105, 115,
			116, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 13, 86, 114, 109, 76,
			105, 98, 124, 71, 108, 116, 102, 73, 100, 0,
			0, 0, 0, 19, 86, 114, 109, 76, 105, 98,
			124, 72, 117, 109, 97, 110, 111, 105, 100, 72,
			101, 97, 100, 0, 0, 0, 0, 18, 86, 114,
			109, 76, 105, 98, 124, 72, 117, 109, 97, 110,
			111, 105, 100, 65, 114, 109, 0, 0, 0, 0,
			18, 86, 114, 109, 76, 105, 98, 124, 72, 117,
			109, 97, 110, 111, 105, 100, 76, 101, 103, 0,
			0, 0, 0, 21, 86, 114, 109, 76, 105, 98,
			124, 72, 117, 109, 97, 110, 111, 105, 100, 70,
			105, 110, 103, 101, 114, 0, 0, 0, 0, 20,
			86, 114, 109, 76, 105, 98, 124, 72, 117, 109,
			97, 110, 111, 105, 100, 84, 104, 117, 109, 98,
			0, 0, 0, 0, 22, 86, 114, 109, 76, 105,
			98, 124, 72, 117, 109, 97, 110, 111, 105, 100,
			70, 105, 110, 103, 101, 114, 115, 0, 0, 0,
			0, 15, 86, 114, 109, 76, 105, 98, 124, 72,
			117, 109, 97, 110, 111, 105, 100, 0, 0, 0,
			0, 28, 86, 114, 109, 76, 105, 98, 124, 66,
			111, 110, 101, 82, 101, 113, 117, 105, 114, 101,
			100, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			0, 0, 0, 0, 24, 86, 114, 109, 76, 105,
			98, 124, 83, 107, 101, 108, 101, 116, 111, 110,
			69, 115, 116, 105, 109, 97, 116, 111, 114, 0,
			0, 0, 0, 28, 86, 114, 109, 76, 105, 98,
			46, 83, 107, 101, 108, 101, 116, 111, 110, 69,
			115, 116, 105, 109, 97, 116, 111, 114, 124, 65,
			114, 109, 0, 0, 0, 0, 28, 86, 114, 109,
			76, 105, 98, 46, 83, 107, 101, 108, 101, 116,
			111, 110, 69, 115, 116, 105, 109, 97, 116, 111,
			114, 124, 76, 101, 103, 0, 0, 0, 0, 17,
			86, 114, 109, 76, 105, 98, 124, 66, 111, 110,
			101, 87, 101, 105, 103, 104, 116, 0, 0, 0,
			0, 18, 86, 114, 109, 76, 105, 98, 124, 77,
			101, 115, 104, 66, 117, 105, 108, 100, 101, 114,
			0, 0, 0, 0, 19, 86, 114, 109, 76, 105,
			98, 124, 66, 111, 110, 101, 72, 101, 97, 100,
			84, 97, 105, 108, 0, 0, 0, 0, 16, 86,
			114, 109, 76, 105, 98, 124, 77, 97, 116, 104,
			70, 87, 114, 97, 112, 0, 0, 0, 0, 15,
			86, 114, 109, 76, 105, 98, 124, 84, 114, 105,
			97, 110, 103, 108, 101, 0, 0, 0, 0, 14,
			86, 114, 109, 76, 105, 98, 124, 83, 117, 98,
			109, 101, 115, 104, 0, 0, 0, 0, 11, 86,
			114, 109, 76, 105, 98, 124, 77, 101, 115, 104,
			0, 0, 0, 0, 16, 86, 114, 109, 76, 105,
			98, 124, 77, 101, 115, 104, 71, 114, 111, 117,
			112, 0, 0, 0, 0, 12, 86, 114, 109, 76,
			105, 98, 124, 77, 111, 100, 101, 108, 0, 0,
			0, 0, 21, 86, 114, 109, 76, 105, 98, 46,
			77, 111, 100, 101, 108, 124, 82, 101, 118, 101,
			114, 115, 101, 114, 0, 0, 0, 0, 18, 86,
			114, 109, 76, 105, 98, 124, 77, 111, 114, 112,
			104, 84, 97, 114, 103, 101, 116, 0, 0, 0,
			0, 11, 86, 114, 109, 76, 105, 98, 124, 78,
			111, 100, 101, 0, 0, 0, 0, 21, 86, 114,
			109, 76, 105, 98, 124, 78, 111, 100, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 19, 86, 114, 109, 76, 105, 98,
			124, 67, 117, 114, 118, 101, 83, 97, 109, 112,
			108, 101, 114, 0, 0, 0, 0, 20, 86, 114,
			109, 76, 105, 98, 124, 78, 111, 100, 101, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 11, 86, 114, 109, 76, 105, 98, 124,
			83, 107, 105, 110, 0, 0, 0, 0, 19, 86,
			114, 109, 76, 105, 98, 124, 86, 101, 114, 116,
			101, 120, 66, 117, 102, 102, 101, 114
		};
		result.TotalFiles = 17;
		result.TotalTypes = 32;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VrmLib;

public enum GeometryCoordinates
{
	Unknown,
	XYZ_RightUpBack_RH,
	XYZ_RightUpForward_RH,
	XYZ_RightUpForward_LH
}
public enum TextureOrigin
{
	Unknown,
	LeftTop,
	LeftBottom
}
public struct Coordinates
{
	public GeometryCoordinates Geometry;

	public TextureOrigin Texture;

	public static Coordinates Vrm0
	{
		get
		{
			Coordinates result = default(Coordinates);
			result.Geometry = GeometryCoordinates.XYZ_RightUpBack_RH;
			result.Texture = TextureOrigin.LeftTop;
			return result;
		}
	}

	public bool IsVrm0 => Equals(Vrm0);

	public static Coordinates Vrm1
	{
		get
		{
			Coordinates result = default(Coordinates);
			result.Geometry = GeometryCoordinates.XYZ_RightUpForward_RH;
			result.Texture = TextureOrigin.LeftTop;
			return result;
		}
	}

	public bool IsVrm1 => Equals(Vrm1);

	public static Coordinates Unity
	{
		get
		{
			Coordinates result = default(Coordinates);
			result.Geometry = GeometryCoordinates.XYZ_RightUpForward_LH;
			result.Texture = TextureOrigin.LeftBottom;
			return result;
		}
	}

	public bool IsUnity => Equals(Unity);
}
[Serializable]
public struct ExportArgs
{
	private bool? m_sparse;

	private bool? m_remove_morph_normal;

	private bool? m_remove_tangent;

	public bool sparse
	{
		get
		{
			if (!m_sparse.HasValue)
			{
				m_sparse = true;
			}
			return m_sparse.Value;
		}
		set
		{
			m_sparse = value;
		}
	}

	public bool removeMorphNormal
	{
		get
		{
			if (!m_remove_morph_normal.HasValue)
			{
				m_remove_morph_normal = false;
			}
			return m_remove_morph_normal.Value;
		}
		set
		{
			m_remove_morph_normal = value;
		}
	}

	public bool removeTangent
	{
		get
		{
			if (!m_remove_tangent.HasValue)
			{
				m_remove_tangent = true;
			}
			return m_remove_tangent.Value;
		}
		set
		{
			m_remove_tangent = value;
		}
	}
}
public static class ListExtensions
{
	public static int IndexOfThrow<T>(this List<T> list, T target)
	{
		int num = list.IndexOf(target);
		if (num == -1)
		{
			throw new KeyNotFoundException();
		}
		return num;
	}

	public static int? IndexOfNullable<T>(this List<T> list, T target)
	{
		int num = list.IndexOf(target);
		if (num == -1)
		{
			return null;
		}
		return num;
	}
}
public class GltfId
{
	public int? GltfIndex;

	public int SortOrder => GltfIndex.GetValueOrDefault(int.MaxValue);
}
public struct HumanoidHead
{
	public Node Head;

	public Node Jaw;

	public Node LeftEye;

	public Node RightEye;

	public bool HasRequiredBones => Head != null;
}
public struct HumanoidArm
{
	public Node Shoulder;

	public Node Upper;

	public Node Lower;

	public Node Hand;

	public bool HasRequiredBones => Upper != null && Lower != null && Hand != null;

	public Vector3 Direction
	{
		get
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			if (Shoulder != null)
			{
				return Vector3.Normalize(Hand.Translation - Shoulder.Translation);
			}
			return Vector3.Normalize(Hand.Translation - Upper.Translation);
		}
	}

	public void DirectTo(Vector3 dir)
	{
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		if (Shoulder != null)
		{
			Shoulder.RotateFromTo(Upper.Translation - Shoulder.Translation, dir);
		}
		Upper.RotateFromTo(Lower.Translation - Upper.Translation, dir);
		Lower.RotateFromTo(Hand.Translation - Lower.Translation, dir);
	}
}
public struct HumanoidLeg
{
	public Node Upper;

	public Node Lower;

	public Node Foot;

	public Node Toe;
}
internal struct HumanoidFinger
{
	public Node Proximal;

	public Node Intermediate;

	public Node Distal;
}
internal struct HumanoidThumb
{
	public Node Metacarpal;

	public Node Proximal;

	public Node Distal;
}
internal struct HumanoidFingers
{
	public HumanoidThumb Thumb;

	public HumanoidFinger Index;

	public HumanoidFinger Middle;

	public HumanoidFinger Ring;

	public HumanoidFinger Little;
}
public class Humanoid : IDictionary<HumanoidBones, Node>, ICollection<KeyValuePair<HumanoidBones, Node>>, IEnumerable<KeyValuePair<HumanoidBones, Node>>, IEnumerable
{
	public Node Hips;

	public Node Spine;

	public Node Chest;

	public Node UpperChest;

	public Node Neck;

	private HumanoidHead Head;

	private HumanoidArm LeftArm;

	private HumanoidFingers LeftFingers;

	private HumanoidArm RightArm;

	private HumanoidFingers RightFingers;

	private HumanoidLeg LeftLeg;

	private HumanoidLeg RightLeg;

	public bool HasRequiredBones
	{
		get
		{
			if (Hips == null)
			{
				return false;
			}
			if (Spine == null)
			{
				return false;
			}
			if (!Head.HasRequiredBones)
			{
				return false;
			}
			if (!LeftArm.HasRequiredBones)
			{
				return false;
			}
			if (!RightArm.HasRequiredBones)
			{
				return false;
			}
			return true;
		}
	}

	ICollection<HumanoidBones> IDictionary<HumanoidBones, Node>.Keys
	{
		get
		{
			throw new NotImplementedException();
		}
	}

	ICollection<Node> IDictionary<HumanoidBones, Node>.Values
	{
		get
		{
			throw new NotImplementedException();
		}
	}

	int ICollection<KeyValuePair<HumanoidBones, Node>>.Count => this.Select((KeyValuePair<HumanoidBones, Node> _) => _).Count();

	bool ICollection<KeyValuePair<HumanoidBones, Node>>.IsReadOnly
	{
		get
		{
			throw new NotImplementedException();
		}
	}

	Node IDictionary<HumanoidBones, Node>.this[HumanoidBones key]
	{
		get
		{
			throw new NotImplementedException();
		}
		set
		{
			throw new NotImplementedException();
		}
	}

	public Node this[HumanoidBones key]
	{
		get
		{
			if (TryGetValue(key, out var value))
			{
				return value;
			}
			throw new KeyNotFoundException();
		}
	}

	public Node this[Node node]
	{
		get
		{
			if (node.HumanoidBone.HasValue && node.HumanoidBone.Value != 0)
			{
				return this[node.HumanoidBone.Value];
			}
			return Hips.Traverse().First((Node x) => x.Name == node.Name);
		}
	}

	public Humanoid()
	{
	}

	public Humanoid(Node root)
	{
		Assign(root);
	}

	public void Assign(Node root)
	{
		foreach (Node item in root.Traverse())
		{
			if (item.HumanoidBone.HasValue)
			{
				Add(item.HumanoidBone.Value, item);
			}
		}
	}

	private void CopyTraverse(Node src, Node dst)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		dst.HumanoidBone = src.HumanoidBone;
		dst.LocalScaling = src.LocalScaling;
		dst.LocalRotation = src.LocalRotation;
		dst.LocalTranslation = src.LocalTranslation;
		foreach (Node child in src.Children)
		{
			Node node = new Node(child.Name);
			dst.Add(node);
			CopyTraverse(child, node);
		}
	}

	public Humanoid CopyNodes()
	{
		Node node = new Node(Hips.Name);
		CopyTraverse(Hips, node);
		return new Humanoid(node);
	}

	public (bool, string) Y180()
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		StringBuilder stringBuilder = new StringBuilder();
		Hips.LocalRotation = Quaternion.Euler(0f, MathFWrap.PI, 0f);
		Hips.CalcWorldMatrix();
		return (true, stringBuilder.ToString());
	}

	public (bool, string) MakeTPose()
	{
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		StringBuilder stringBuilder = new StringBuilder();
		bool item = false;
		Vector3 val = Vector3.Normalize(LeftLeg.Upper.Translation - RightLeg.Upper.Translation);
		Vector3 val2 = Vector3.Cross(val, Vector3.up);
		if (Vector3.Dot(val2, -Vector3.forward) < 0.9f)
		{
			Hips.RotateFromTo(val2, -Vector3.forward);
			item = true;
		}
		if (Vector3.Dot(LeftArm.Direction, -Vector3.right) < 0.9f)
		{
			LeftArm.DirectTo(-Vector3.right);
			stringBuilder.Append("(fix left arm)");
			item = true;
		}
		if (Vector3.Dot(RightArm.Direction, Vector3.right) < 0.9f)
		{
			RightArm.DirectTo(Vector3.right);
			stringBuilder.Append("(fix right arm)");
			item = true;
		}
		Hips.CalcWorldMatrix();
		return (item, stringBuilder.ToString());
	}

	public void RetargetTo(Humanoid srcTPose, Humanoid dst)
	{
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		using (IEnumerator<KeyValuePair<HumanoidBones, Node>> enumerator = GetEnumerator())
		{
			while (enumerator.MoveNext())
			{
				KeyValuePair<HumanoidBones, Node> current = enumerator.Current;
				Node node = srcTPose[current.Key];
				if (dst.TryGetValue(current.Key, out var value))
				{
					Quaternion rotation = node.Rotation;
					value.Rotation = current.Value.Rotation * Quaternion.Inverse(rotation);
				}
				else
				{
					Console.WriteLine($"{current.Key} not found");
				}
			}
		}
		dst.Hips.CalcWorldMatrix();
	}

	public void Add(KeyValuePair<HumanoidBones, Node> item)
	{
		Add(item.Key, item.Value);
	}

	public void Add(HumanoidBones key, Node node)
	{
		if (key == HumanoidBones.unknown)
		{
			throw new ArgumentException();
		}
		node.HumanoidBone = key;
		switch (node.HumanoidBone.Value)
		{
		case HumanoidBones.hips:
			Hips = node;
			break;
		case HumanoidBones.spine:
			Spine = node;
			break;
		case HumanoidBones.chest:
			Chest = node;
			break;
		case HumanoidBones.upperChest:
			UpperChest = node;
			break;
		case HumanoidBones.neck:
			Neck = node;
			break;
		case HumanoidBones.head:
			Head.Head = node;
			break;
		case HumanoidBones.jaw:
			Head.Jaw = node;
			break;
		case HumanoidBones.leftEye:
			Head.LeftEye = node;
			break;
		case HumanoidBones.rightEye:
			Head.RightEye = node;
			break;
		case HumanoidBones.leftShoulder:
			LeftArm.Shoulder = node;
			break;
		case HumanoidBones.leftUpperArm:
			LeftArm.Upper = node;
			break;
		case HumanoidBones.leftLowerArm:
			LeftArm.Lower = node;
			break;
		case HumanoidBones.leftHand:
			LeftArm.Hand = node;
			break;
		case HumanoidBones.rightShoulder:
			RightArm.Shoulder = node;
			break;
		case HumanoidBones.rightUpperArm:
			RightArm.Upper = node;
			break;
		case HumanoidBones.rightLowerArm:
			RightArm.Lower = node;
			break;
		case HumanoidBones.rightHand:
			RightArm.Hand = node;
			break;
		case HumanoidBones.leftUpperLeg:
			LeftLeg.Upper = node;
			break;
		case HumanoidBones.leftLowerLeg:
			LeftLeg.Lower = node;
			break;
		case HumanoidBones.leftFoot:
			LeftLeg.Foot = node;
			break;
		case HumanoidBones.leftToes:
			LeftLeg.Toe = node;
			break;
		case HumanoidBones.rightUpperLeg:
			RightLeg.Upper = node;
			break;
		case HumanoidBones.rightLowerLeg:
			RightLeg.Lower = node;
			break;
		case HumanoidBones.rightFoot:
			RightLeg.Foot = node;
			break;
		case HumanoidBones.rightToes:
			RightLeg.Toe = node;
			break;
		case HumanoidBones.leftThumbMetacarpal:
			LeftFingers.Thumb.Metacarpal = node;
			break;
		case HumanoidBones.leftThumbProximal:
			LeftFingers.Thumb.Proximal = node;
			break;
		case HumanoidBones.leftThumbDistal:
			LeftFingers.Thumb.Distal = node;
			break;
		case HumanoidBones.leftIndexProximal:
			LeftFingers.Index.Proximal = node;
			break;
		case HumanoidBones.leftIndexIntermediate:
			LeftFingers.Index.Intermediate = node;
			break;
		case HumanoidBones.leftIndexDistal:
			LeftFingers.Index.Distal = node;
			break;
		case HumanoidBones.leftMiddleProximal:
			LeftFingers.Middle.Proximal = node;
			break;
		case HumanoidBones.leftMiddleIntermediate:
			LeftFingers.Middle.Intermediate = node;
			break;
		case HumanoidBones.leftMiddleDistal:
			LeftFingers.Middle.Distal = node;
			break;
		case HumanoidBones.leftRingProximal:
			LeftFingers.Ring.Proximal = node;
			break;
		case HumanoidBones.leftRingIntermediate:
			LeftFingers.Ring.Intermediate = node;
			break;
		case HumanoidBones.leftRingDistal:
			LeftFingers.Ring.Distal = node;
			break;
		case HumanoidBones.leftLittleProximal:
			LeftFingers.Little.Proximal = node;
			break;
		case HumanoidBones.leftLittleIntermediate:
			LeftFingers.Little.Intermediate = node;
			break;
		case HumanoidBones.leftLittleDistal:
			LeftFingers.Little.Distal = node;
			break;
		case HumanoidBones.rightThumbMetacarpal:
			RightFingers.Thumb.Metacarpal = node;
			break;
		case HumanoidBones.rightThumbProximal:
			RightFingers.Thumb.Proximal = node;
			break;
		case HumanoidBones.rightThumbDistal:
			RightFingers.Thumb.Distal = node;
			break;
		case HumanoidBones.rightIndexProximal:
			RightFingers.Index.Proximal = node;
			break;
		case HumanoidBones.rightIndexIntermediate:
			RightFingers.Index.Intermediate = node;
			break;
		case HumanoidBones.rightIndexDistal:
			RightFingers.Index.Distal = node;
			break;
		case HumanoidBones.rightMiddleProximal:
			RightFingers.Middle.Proximal = node;
			break;
		case HumanoidBones.rightMiddleIntermediate:
			RightFingers.Middle.Intermediate = node;
			break;
		case HumanoidBones.rightMiddleDistal:
			RightFingers.Middle.Distal = node;
			break;
		case HumanoidBones.rightRingProximal:
			RightFingers.Ring.Proximal = node;
			break;
		case HumanoidBones.rightRingIntermediate:
			RightFingers.Ring.Intermediate = node;
			break;
		case HumanoidBones.rightRingDistal:
			RightFingers.Ring.Distal = node;
			break;
		case HumanoidBones.rightLittleProximal:
			RightFingers.Little.Proximal = node;
			break;
		case HumanoidBones.rightLittleIntermediate:
			RightFingers.Little.Intermediate = node;
			break;
		case HumanoidBones.rightLittleDistal:
			RightFingers.Little.Distal = node;
			break;
		default:
			throw new NotImplementedException();
		}
	}

	public bool ContainsKey(HumanoidBones key)
	{
		Node value;
		return TryGetValue(key, out value);
	}

	public bool Remove(HumanoidBones key)
	{
		if (!ContainsKey(key))
		{
			return false;
		}
		Add(key, null);
		return true;
	}

	public bool TryGetValue(HumanoidBones key, out Node value)
	{
		switch (key)
		{
		case HumanoidBones.hips:
			value = Hips;
			return true;
		case HumanoidBones.spine:
			value = Spine;
			return true;
		case HumanoidBones.chest:
			value = Chest;
			return true;
		case HumanoidBones.upperChest:
			value = UpperChest;
			return true;
		case HumanoidBones.neck:
			value = Neck;
			return true;
		case HumanoidBones.head:
			value = Head.Head;
			return true;
		case HumanoidBones.jaw:
			value = Head.Jaw;
			return true;
		case HumanoidBones.leftEye:
			value = Head.LeftEye;
			return true;
		case HumanoidBones.rightEye:
			value = Head.RightEye;
			return true;
		case HumanoidBones.leftShoulder:
			value = LeftArm.Shoulder;
			return true;
		case HumanoidBones.leftUpperArm:
			value = LeftArm.Upper;
			return true;
		case HumanoidBones.leftLowerArm:
			value = LeftArm.Lower;
			return true;
		case HumanoidBones.leftHand:
			value = LeftArm.Hand;
			return true;
		case HumanoidBones.rightShoulder:
			value = RightArm.Shoulder;
			return true;
		case HumanoidBones.rightUpperArm:
			value = RightArm.Upper;
			return true;
		case HumanoidBones.rightLowerArm:
			value = RightArm.Lower;
			return true;
		case HumanoidBones.rightHand:
			value = RightArm.Hand;
			return true;
		case HumanoidBones.leftUpperLeg:
			value = LeftLeg.Upper;
			return true;
		case HumanoidBones.leftLowerLeg:
			value = LeftLeg.Lower;
			return true;
		case HumanoidBones.leftFoot:
			value = LeftLeg.Foot;
			return true;
		case HumanoidBones.leftToes:
			value = LeftLeg.Toe;
			return true;
		case HumanoidBones.rightUpperLeg:
			value = RightLeg.Upper;
			return true;
		case HumanoidBones.rightLowerLeg:
			value = RightLeg.Lower;
			return true;
		case HumanoidBones.rightFoot:
			value = RightLeg.Foot;
			return true;
		case HumanoidBones.rightToes:
			value = RightLeg.Toe;
			return true;
		case HumanoidBones.leftThumbMetacarpal:
			value = LeftFingers.Thumb.Metacarpal;
			return true;
		case HumanoidBones.leftThumbProximal:
			value = LeftFingers.Thumb.Proximal;
			return true;
		case HumanoidBones.leftThumbDistal:
			value = LeftFingers.Thumb.Distal;
			return true;
		case HumanoidBones.leftIndexProximal:
			value = LeftFingers.Index.Proximal;
			return true;
		case HumanoidBones.leftIndexIntermediate:
			value = LeftFingers.Index.Intermediate;
			return true;
		case HumanoidBones.leftIndexDistal:
			value = LeftFingers.Index.Distal;
			return true;
		case HumanoidBones.leftMiddleProximal:
			value = LeftFingers.Middle.Proximal;
			return true;
		case HumanoidBones.leftMiddleIntermediate:
			value = LeftFingers.Middle.Intermediate;
			return true;
		case HumanoidBones.leftMiddleDistal:
			value = LeftFingers.Middle.Distal;
			return true;
		case HumanoidBones.leftRingProximal:
			value = LeftFingers.Ring.Proximal;
			return true;
		case HumanoidBones.leftRingIntermediate:
			value = LeftFingers.Ring.Intermediate;
			return true;
		case HumanoidBones.leftRingDistal:
			value = LeftFingers.Ring.Distal;
			return true;
		case HumanoidBones.leftLittleProximal:
			value = LeftFingers.Little.Proximal;
			return true;
		case HumanoidBones.leftLittleIntermediate:
			value = LeftFingers.Little.Intermediate;
			return true;
		case HumanoidBones.leftLittleDistal:
			value = LeftFingers.Little.Distal;
			return true;
		case HumanoidBones.rightThumbProximal:
			value = LeftFingers.Thumb.Proximal;
			return true;
		case HumanoidBones.rightThumbMetacarpal:
			value = LeftFingers.Thumb.Metacarpal;
			return true;
		case HumanoidBones.rightThumbDistal:
			value = LeftFingers.Thumb.Distal;
			return true;
		case HumanoidBones.rightIndexProximal:
			value = LeftFingers.Index.Proximal;
			return true;
		case HumanoidBones.rightIndexIntermediate:
			value = LeftFingers.Index.Intermediate;
			return true;
		case HumanoidBones.rightIndexDistal:
			value = LeftFingers.Index.Distal;
			return true;
		case HumanoidBones.rightMiddleProximal:
			value = LeftFingers.Middle.Proximal;
			return true;
		case HumanoidBones.rightMiddleIntermediate:
			value = LeftFingers.Middle.Intermediate;
			return true;
		case HumanoidBones.rightMiddleDistal:
			value = LeftFingers.Middle.Distal;
			return true;
		case HumanoidBones.rightRingProximal:
			value = LeftFingers.Ring.Proximal;
			return true;
		case HumanoidBones.rightRingIntermediate:
			value = LeftFingers.Ring.Intermediate;
			return true;
		case HumanoidBones.rightRingDistal:
			value = LeftFingers.Ring.Distal;
			return true;
		case HumanoidBones.rightLittleProximal:
			value = LeftFingers.Little.Proximal;
			return true;
		case HumanoidBones.rightLittleIntermediate:
			value = LeftFingers.Little.Intermediate;
			return true;
		case HumanoidBones.rightLittleDistal:
			value = LeftFingers.Little.Distal;
			return true;
		default:
			value = null;
			return false;
		}
	}

	public void Clear()
	{
		HumanoidBones[] values = CachedEnum.GetValues<HumanoidBones>();
		foreach (HumanoidBones key in values)
		{
			Add(key, null);
		}
	}

	public IEnumerator<KeyValuePair<HumanoidBones, Node>> GetEnumerator()
	{
		if (Hips != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.hips, Hips);
		}
		if (Spine != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.spine, Spine);
		}
		if (Chest != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.chest, Chest);
		}
		if (UpperChest != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.upperChest, UpperChest);
		}
		if (Neck != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.neck, Neck);
		}
		if (Head.Head != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.head, Head.Head);
		}
		if (LeftArm.Shoulder != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftShoulder, LeftArm.Shoulder);
		}
		if (LeftArm.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftUpperArm, LeftArm.Upper);
		}
		if (LeftArm.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftLowerArm, LeftArm.Lower);
		}
		if (LeftArm.Hand != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftHand, LeftArm.Hand);
		}
		if (RightArm.Shoulder != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightShoulder, RightArm.Shoulder);
		}
		if (RightArm.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightUpperArm, RightArm.Upper);
		}
		if (RightArm.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightLowerArm, RightArm.Lower);
		}
		if (RightArm.Hand != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightHand, RightArm.Hand);
		}
		if (LeftLeg.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftUpperLeg, LeftLeg.Upper);
		}
		if (LeftLeg.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftLowerLeg, LeftLeg.Lower);
		}
		if (LeftLeg.Foot != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftFoot, LeftLeg.Foot);
		}
		if (RightLeg.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightUpperLeg, RightLeg.Upper);
		}
		if (RightLeg.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightLowerLeg, RightLeg.Lower);
		}
		if (RightLeg.Foot != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightFoot, RightLeg.Foot);
		}
	}

	IEnumerator IEnumerable.GetEnumerator()
	{
		return GetEnumerator();
	}

	bool ICollection<KeyValuePair<HumanoidBones, Node>>.Contains(KeyValuePair<HumanoidBones, Node> item)
	{
		throw new NotImplementedException();
	}

	void ICollection<KeyValuePair<HumanoidBones, Node>>.CopyTo(KeyValuePair<HumanoidBones, Node>[] array, int arrayIndex)
	{
		throw new NotImplementedException();
	}

	bool ICollection<KeyValuePair<HumanoidBones, Node>>.Remove(KeyValuePair<HumanoidBones, Node> item)
	{
		throw new NotImplementedException();
	}
}
public class BoneRequiredAttribute : Attribute
{
}
public enum HumanoidBones
{
	unknown,
	[BoneRequired]
	hips,
	[BoneRequired]
	leftUpperLeg,
	[BoneRequired]
	rightUpperLeg,
	[BoneRequired]
	leftLowerLeg,
	[BoneRequired]
	rightLowerLeg,
	[BoneRequired]
	leftFoot,
	[BoneRequired]
	rightFoot,
	[BoneRequired]
	spine,
	chest,
	neck,
	[BoneRequired]
	head,
	leftShoulder,
	rightShoulder,
	[BoneRequired]
	leftUpperArm,
	[BoneRequired]
	rightUpperArm,
	[BoneRequired]
	leftLowerArm,
	[BoneRequired]
	rightLowerArm,
	[BoneRequired]
	leftHand,
	[BoneRequired]
	rightHand,
	leftToes,
	rightToes,
	leftEye,
	rightEye,
	jaw,
	leftThumbMetacarpal,
	leftThumbProximal,
	leftThumbDistal,
	leftIndexProximal,
	leftIndexIntermediate,
	leftIndexDistal,
	leftMiddleProximal,
	leftMiddleIntermediate,
	leftMiddleDistal,
	leftRingProximal,
	leftRingIntermediate,
	leftRingDistal,
	leftLittleProximal,
	leftLittleIntermediate,
	leftLittleDistal,
	rightThumbMetacarpal,
	rightThumbProximal,
	rightThumbDistal,
	rightIndexProximal,
	rightIndexIntermediate,
	rightIndexDistal,
	rightMiddleProximal,
	rightMiddleIntermediate,
	rightMiddleDistal,
	rightRingProximal,
	rightRingIntermediate,
	rightRingDistal,
	rightLittleProximal,
	rightLittleIntermediate,
	rightLittleDistal,
	upperChest
}
public static class SkeletonEstimator
{
	private struct Arm
	{
		public Node Shoulder;

		public Node UpperArm;

		public Node LowerArm;

		public Node Hand;
	}

	private struct Leg
	{
		public Node UpperLeg;

		public Node LowerLeg;

		public Node Foot;

		public Node Toes;
	}

	private static Dictionary<string, HumanoidBones> s_nameBoneMap = new Dictionary<string, HumanoidBones>
	{
		{
			"Spine1",
			HumanoidBones.chest
		},
		{
			"Spine2",
			HumanoidBones.upperChest
		},
		{
			"LeftShoulder",
			HumanoidBones.leftShoulder
		},
		{
			"LeftArm",
			HumanoidBones.leftUpperArm
		},
		{
			"LeftForeArm",
			HumanoidBones.leftLowerArm
		},
		{
			"RightShoulder",
			HumanoidBones.rightShoulder
		},
		{
			"RightArm",
			HumanoidBones.rightUpperArm
		},
		{
			"RightForeArm",
			HumanoidBones.rightLowerArm
		},
		{
			"LeftUpLeg",
			HumanoidBones.leftUpperLeg
		},
		{
			"LeftLeg",
			HumanoidBones.leftLowerLeg
		},
		{
			"LeftToeBase",
			HumanoidBones.leftToes
		},
		{
			"RightUpLeg",
			HumanoidBones.rightUpperLeg
		},
		{
			"RightLeg",
			HumanoidBones.rightLowerLeg
		},
		{
			"RightToeBase",
			HumanoidBones.rightToes
		}
	};

	private static Dictionary<string, HumanoidBones> s_nameBoneMapLA = new Dictionary<string, HumanoidBones>
	{
		{
			"Chest",
			HumanoidBones.spine
		},
		{
			"Chest2",
			HumanoidBones.chest
		},
		{
			"LeftCollar",
			HumanoidBones.leftShoulder
		},
		{
			"LeftShoulder",
			HumanoidBones.leftUpperArm
		},
		{
			"LeftElbow",
			HumanoidBones.leftLowerArm
		},
		{
			"LeftWrist",
			HumanoidBones.leftHand
		},
		{
			"RightCollar",
			HumanoidBones.rightShoulder
		},
		{
			"RightShoulder",
			HumanoidBones.rightUpperArm
		},
		{
			"RightElbow",
			HumanoidBones.rightLowerArm
		},
		{
			"RightWrist",
			HumanoidBones.rightHand
		},
		{
			"LeftHip",
			HumanoidBones.leftUpperLeg
		},
		{
			"LeftKnee",
			HumanoidBones.leftLowerLeg
		},
		{
			"LeftAnkle",
			HumanoidBones.leftFoot
		},
		{
			"RightHip",
			HumanoidBones.rightUpperLeg
		},
		{
			"RightKnee",
			HumanoidBones.rightLowerLeg
		},
		{
			"RightAnkle",
			HumanoidBones.rightFoot
		}
	};

	private static Dictionary<string, HumanoidBones> s_nameBoneMapAccad = new Dictionary<string, HumanoidBones>
	{
		{
			"root",
			HumanoidBones.hips
		},
		{
			"lowerback",
			HumanoidBones.spine
		},
		{
			"upperback",
			HumanoidBones.chest
		},
		{
			"thorax",
			HumanoidBones.upperChest
		},
		{
			"neck",
			HumanoidBones.neck
		},
		{
			"head",
			HumanoidBones.head
		},
		{
			"lshoulderjoint",
			HumanoidBones.leftShoulder
		},
		{
			"lhumerus",
			HumanoidBones.leftUpperArm
		},
		{
			"lradius",
			HumanoidBones.leftLowerArm
		},
		{
			"lhand",
			HumanoidBones.leftHand
		},
		{
			"rshoulderjoint",
			HumanoidBones.rightShoulder
		},
		{
			"rhumerus",
			HumanoidBones.rightUpperArm
		},
		{
			"rradius",
			HumanoidBones.rightLowerArm
		},
		{
			"rhand",
			HumanoidBones.rightHand
		},
		{
			"rfemur",
			HumanoidBones.rightUpperLeg
		},
		{
			"rtibia",
			HumanoidBones.rightLowerLeg
		},
		{
			"rfoot",
			HumanoidBones.rightFoot
		},
		{
			"rtoes",
			HumanoidBones.rightToes
		},
		{
			"lfemur",
			HumanoidBones.leftUpperLeg
		},
		{
			"ltibia",
			HumanoidBones.leftLowerLeg
		},
		{
			"lfoot",
			HumanoidBones.leftFoot
		},
		{
			"ltoes",
			HumanoidBones.leftToes
		}
	};

	private static HumanoidBones[] RequiredBones = new HumanoidBones[15]
	{
		HumanoidBones.hips,
		HumanoidBones.spine,
		HumanoidBones.head,
		HumanoidBones.leftUpperArm,
		HumanoidBones.leftLowerArm,
		HumanoidBones.leftHand,
		HumanoidBones.leftUpperLeg,
		HumanoidBones.leftLowerLeg,
		HumanoidBones.leftFoot,
		HumanoidBones.rightUpperArm,
		HumanoidBones.rightLowerArm,
		HumanoidBones.rightHand,
		HumanoidBones.rightUpperLeg,
		HumanoidBones.rightLowerLeg,
		HumanoidBones.rightFoot
	};

	private static Node GetRoot(IReadOnlyList<Node> bones)
	{
		Node[] array = bones.Where((Node x) => x.Parent == null).ToArray();
		if (array.Length != 1)
		{
			throw new Exception("Require unique root");
		}
		return array[0];
	}

	private static Node SelectBone(Func<Node, Node, bool> pred, Node parent)
	{
		IReadOnlyList<Node> children = parent.Children;
		if (children == null || children.Count == 0)
		{
			throw new Exception("no bones");
		}
		foreach (Node item in children)
		{
			if (pred(item, parent))
			{
				return item;
			}
		}
		throw new Exception("not found");
	}

	private static void GetSpineAndHips(Node hips, out Node spine, out Node leg_L, out Node leg_R)
	{
		if (hips.Children.Count != 3)
		{
			throw new Exception("Hips require 3 children");
		}
		spine = SelectBone((Node l, Node r) => l.CenterOfDescendant().y > r.SkeletonLocalPosition.y, hips);
		Node s = spine;
		try
		{
			leg_L = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().x < r.SkeletonLocalPosition.x, hips);
			leg_R = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().x > r.SkeletonLocalPosition.x, hips);
		}
		catch (Exception)
		{
			leg_L = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().z < r.SkeletonLocalPosition.z, hips);
			leg_R = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().z > r.SkeletonLocalPosition.z, hips);
		}
	}

	private static void GetNeckAndArms(Node chest, out Node neck, out Node arm_L, out Node arm_R, Func<Vector3, Vector3, bool> isLeft)
	{
		if (chest.Children.Count != 3)
		{
			throw new Exception("Chest require 3 children");
		}
		neck = SelectBone((Node l, Node r) => l.CenterOfDescendant().y > r.SkeletonLocalPosition.y, chest);
		Node i = neck;
		arm_L = SelectBone((Node l, Node r) => !l.Equals(i) && isLeft(l.CenterOfDescendant(), r.SkeletonLocalPosition), chest);
		arm_R = SelectBone((Node l, Node r) => !l.Equals(i) && !isLeft(l.CenterOfDescendant(), r.SkeletonLocalPosition), chest);
	}

	private static Arm GetArm(Node shoulder)
	{
		Node[] array = shoulder.Traverse().ToArray();
		switch (array.Length)
		{
		case 0:
		case 1:
		case 2:
			throw new NotImplementedException();
		case 3:
		{
			Arm result = default(Arm);
			result.UpperArm = array[0];
			result.LowerArm = array[1];
			result.Hand = array[2];
			return result;
		}
		default:
		{
			Arm result = default(Arm);
			result.Shoulder = array[0];
			result.UpperArm = array[1];
			result.LowerArm = array[2];
			result.Hand = array[3];
			return result;
		}
		}
	}

	private static Leg GetLeg(Node leg)
	{
		Node[] array = (from x in leg.Traverse()
			where string.IsNullOrEmpty(x.Name) || !x.Name.ToLower().Contains("buttock")
			select x).ToArray();
		switch (array.Length)
		{
		case 0:
		case 1:
		case 2:
			throw new NotImplementedException();
		case 3:
		{
			Leg result = default(Leg);
			result.UpperLeg = array[0];
			result.LowerLeg = array[1];
			result.Foot = array[2];
			return result;
		}
		default:
		{
			Leg result = default(Leg);
			result.UpperLeg = array[^4];
			result.LowerLeg = array[^3];
			result.Foot = array[^2];
			result.Toes = array[^1];
			return result;
		}
		}
	}

	public static Dictionary<HumanoidBones, Node> DetectByName(Node root, Dictionary<string, HumanoidBones> map)
	{
		Dictionary<HumanoidBones, Node> dictionary = new Dictionary<HumanoidBones, Node>();
		foreach (Node item in root.Traverse())
		{
			HumanoidBones result;
			if (map.TryGetValue(item.Name, out var value))
			{
				if (value != 0)
				{
					dictionary.Add(value, item);
				}
			}
			else if (Enum.TryParse<HumanoidBones>(item.Name, ignoreCase: true, out result))
			{
				value = result;
				dictionary.Add(value, item);
			}
		}
		return dictionary;
	}

	public static Dictionary<HumanoidBones, Node> DetectByPosition(Node root)
	{
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		Node node = root.Traverse().First((Node x) => x.Children.Where((Node y) => y.Traverse().Count() >= 3).Count() >= 3);
		GetSpineAndHips(node, out var spine, out var leg_L, out var leg_R);
		if (leg_L.Equals(leg_R))
		{
			throw new Exception();
		}
		Leg leg = GetLeg(leg_L);
		Leg leg2 = GetLeg(leg_R);
		List<Node> list = new List<Node>();
		foreach (Node item in spine.Traverse())
		{
			list.Add(item);
			if (item.Children.Count == 3)
			{
				break;
			}
		}
		Func<Vector3, Vector3, bool> func = null;
		GetNeckAndArms(isLeft: (leg.UpperLeg.SkeletonLocalPosition.z != leg2.UpperLeg.SkeletonLocalPosition.z) ? ((Func<Vector3, Vector3, bool>)((Vector3 l, Vector3 r) => l.z < r.z)) : ((Func<Vector3, Vector3, bool>)((Vector3 l, Vector3 r) => l.x < r.x)), chest: list.Last(), neck: out var neck, arm_L: out var arm_L, arm_R: out var arm_R);
		Arm arm = GetArm(arm_L);
		Arm arm2 = GetArm(arm_R);
		Node[] array = neck.Traverse().ToArray();
		Dictionary<HumanoidBones, Node> skeleton = new Dictionary<HumanoidBones, Node>();
		Action<HumanoidBones, Node> action = delegate(HumanoidBones b, Node t)
		{
			if (t != null)
			{
				t.HumanoidBone = b;
				skeleton[b] = t;
			}
		};
		action(HumanoidBones.hips, node);
		switch (list.Count)
		{
		case 0:
			throw new Exception();
		case 1:
			action(HumanoidBones.spine, list[0]);
			break;
		case 2:
			action(HumanoidBones.spine, list[0]);
			action(HumanoidBones.chest, list[1]);
			break;
		case 3:
			action(HumanoidBones.spine, list[0]);
			action(HumanoidBones.chest, list[1]);
			action(HumanoidBones.upperChest, list[2]);
			break;
		default:
			action(HumanoidBones.spine, list[0]);
			action(HumanoidBones.chest, list[1]);
			action(HumanoidBones.upperChest, list.Last());
			break;
		}
		switch (array.Length)
		{
		case 0:
			throw new Exception();
		case 1:
			action(HumanoidBones.head, array[0]);
			break;
		case 2:
			action(HumanoidBones.neck, array[0]);
			action(HumanoidBones.head, array[1]);
			break;
		default:
			action(HumanoidBones.neck, array[0]);
			action(HumanoidBones.head, array.Where((Node x) => x.Parent.Children.Count == 1).Last());
			break;
		}
		action(HumanoidBones.leftUpperLeg, leg.UpperLeg);
		action(HumanoidBones.leftLowerLeg, leg.LowerLeg);
		action(HumanoidBones.leftFoot, leg.Foot);
		action(HumanoidBones.leftToes, leg.Toes);
		action(HumanoidBones.rightUpperLeg, leg2.UpperLeg);
		action(HumanoidBones.rightLowerLeg, leg2.LowerLeg);
		action(HumanoidBones.rightFoot, leg2.Foot);
		action(HumanoidBones.rightToes, leg2.Toes);
		action(HumanoidBones.leftShoulder, arm.Shoulder);
		action(HumanoidBones.leftUpperArm, arm.UpperArm);
		action(HumanoidBones.leftLowerArm, arm.LowerArm);
		action(HumanoidBones.leftHand, arm.Hand);
		action(HumanoidBones.rightShoulder, arm2.Shoulder);
		action(HumanoidBones.rightUpperArm, arm2.UpperArm);
		action(HumanoidBones.rightLowerArm, arm2.LowerArm);
		action(HumanoidBones.rightHand, arm2.Hand);
		return skeleton;
	}

	private static bool HasAllHumanRequiredBone(Dictionary<HumanoidBones, Node> dict)
	{
		HumanoidBones[] requiredBones = RequiredBones;
		foreach (HumanoidBones key in requiredBones)
		{
			if (!dict.ContainsKey(key))
			{
				return false;
			}
		}
		return true;
	}

	private static Dictionary<HumanoidBones, Node> _Detect(Node root)
	{
		List<Dictionary<HumanoidBones, Node>> list = new List<Dictionary<HumanoidBones, Node>>();
		Dictionary<string, HumanoidBones>[] array = new Dictionary<string, HumanoidBones>[3] { s_nameBoneMap, s_nameBoneMapLA, s_nameBoneMapAccad };
		foreach (Dictionary<string, HumanoidBones> map in array)
		{
			try
			{
				Dictionary<HumanoidBones, Node> dictionary = DetectByName(root, map);
				if (dictionary != null)
				{
					list.Add(dictionary);
				}
			}
			catch (Exception)
			{
			}
		}
		foreach (Dictionary<HumanoidBones, Node> item in list.OrderByDescending((Dictionary<HumanoidBones, Node> x) => x.Count))
		{
			if (HasAllHumanRequiredBone(item))
			{
				return item;
			}
		}
		return DetectByPosition(root);
	}

	public static Dictionary<HumanoidBones, Node> Detect(Node root)
	{
		try
		{
			Dictionary<HumanoidBones, Node> dictionary = _Detect(root);
			foreach (KeyValuePair<HumanoidBones, Node> item in dictionary)
			{
				item.Value.HumanoidBone = item.Key;
			}
			return dictionary;
		}
		catch
		{
			return null;
		}
	}
}
internal struct BoneWeight
{
	public int boneIndex0;

	public int boneIndex1;

	public int boneIndex2;

	public int boneIndex3;

	public float weight0;

	public float weight1;

	public float weight2;

	public float weight3;
}
internal class MeshBuilder
{
	public static BoneHeadTail[] Bones = new BoneHeadTail[21]
	{
		new BoneHeadTail(HumanoidBones.hips, HumanoidBones.spine, 0.1f, 0.06f),
		new BoneHeadTail(HumanoidBones.spine, HumanoidBones.chest),
		new BoneHeadTail(HumanoidBones.chest, HumanoidBones.neck, 0.1f, 0.06f),
		new BoneHeadTail(HumanoidBones.neck, HumanoidBones.head, 0.03f, 0.03f),
		new BoneHeadTail(HumanoidBones.head, new Vector3(0f, 0.1f, 0f), 0.1f, 0.1f),
		new BoneHeadTail(HumanoidBones.leftShoulder, HumanoidBones.leftUpperArm),
		new BoneHeadTail(HumanoidBones.leftUpperArm, HumanoidBones.leftLowerArm),
		new BoneHeadTail(HumanoidBones.leftLowerArm, HumanoidBones.leftHand),
		new BoneHeadTail(HumanoidBones.leftHand, new Vector3(-0.1f, 0f, 0f)),
		new BoneHeadTail(HumanoidBones.leftUpperLeg, HumanoidBones.leftLowerLeg),
		new BoneHeadTail(HumanoidBones.leftLowerLeg, HumanoidBones.leftFoot),
		new BoneHeadTail(HumanoidBones.leftFoot, HumanoidBones.leftToes),
		new BoneHeadTail(HumanoidBones.leftToes, new Vector3(0f, 0f, 0.1f)),
		new BoneHeadTail(HumanoidBones.rightShoulder, HumanoidBones.rightUpperArm),
		new BoneHeadTail(HumanoidBones.rightUpperArm, HumanoidBones.rightLowerArm),
		new BoneHeadTail(HumanoidBones.rightLowerArm, HumanoidBones.rightHand),
		new BoneHeadTail(HumanoidBones.rightHand, new Vector3(0.1f, 0f, 0f)),
		new BoneHeadTail(HumanoidBones.rightUpperLeg, HumanoidBones.rightLowerLeg),
		new BoneHeadTail(HumanoidBones.rightLowerLeg, HumanoidBones.rightFoot),
		new BoneHeadTail(HumanoidBones.rightFoot, HumanoidBones.rightToes),
		new BoneHeadTail(HumanoidBones.rightToes, new Vector3(0f, 0f, 0.1f))
	};

	private List<Vector3> m_positioins = new List<Vector3>();

	private List<int> m_indices = new List<int>();

	private List<BoneWeight> m_boneWeights = new List<BoneWeight>();

	public void Build(List<Node> bones)
	{
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		BoneHeadTail[] bones2 = Bones;
		for (int i = 0; i < bones2.Length; i++)
		{
			BoneHeadTail headTail = bones2[i];
			Node node = bones.FirstOrDefault((Node x) => x.HumanoidBone == headTail.Head);
			if (node != null)
			{
				Node node2 = null;
				if (headTail.Tail != 0)
				{
					node2 = bones.FirstOrDefault((Node x) => x.HumanoidBone == headTail.Tail);
				}
				if (node2 != null)
				{
					AddBone(node.SkeletonLocalPosition, node2.SkeletonLocalPosition, bones.IndexOf(node), headTail.XWidth, headTail.ZWidth);
				}
				else if (headTail.TailOffset != Vector3.zero)
				{
					AddBone(node.SkeletonLocalPosition, node.SkeletonLocalPosition + headTail.TailOffset, bones.IndexOf(node), headTail.XWidth, headTail.ZWidth);
				}
			}
			else
			{
				Console.Error.WriteLine($"{headTail.Head} not found");
			}
		}
	}

	private void AddBone(Vector3 head, Vector3 tail, int boneIndex, float xWidth, float zWidth)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = tail - head;
		Vector3 normalized = ((Vector3)(ref val)).normalized;
		Vector3 val2;
		Vector3 val3;
		if (Vector3.Dot(normalized, Vector3.forward) >= 1f)
		{
			val2 = Vector3.right;
			val3 = -Vector3.up;
		}
		else
		{
			val2 = Vector3.Normalize(Vector3.Cross(normalized, Vector3.forward));
			val3 = Vector3.forward;
		}
		AddBox((head + tail) * 0.5f, val2 * xWidth, (tail - head) * 0.5f, val3 * zWidth, boneIndex);
	}

	private void AddBox(Vector3 center, Vector3 xaxis, Vector3 yaxis, Vector3 zaxis, int boneIndex)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: Unknown result type (might be due to invalid IL or missing references)
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0124: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Unknown result type (might be due to invalid IL or missing references)
		//IL_0126: Unknown result type (might be due to invalid IL or missing references)
		//IL_012b: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0131: Unknown result type (might be due to invalid IL or missing references)
		//IL_0133: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_0139: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0140: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: Unknown result type (might be due to invalid IL or missing references)
		//IL_014c: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_0159: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_016a: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_016d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: Unknown result type (might be due to invalid IL or missing references)
		//IL_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_017e: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0186: Unknown result type (might be due to invalid IL or missing references)
		//IL_0187: Unknown result type (might be due to invalid IL or missing references)
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0192: Unknown result type (might be due to invalid IL or missing references)
		//IL_0193: Unknown result type (might be due to invalid IL or missing references)
		//IL_0195: Unknown result type (might be due to invalid IL or missing references)
		//IL_019a: Unknown result type (might be due to invalid IL or missing references)
		//IL_019b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_01af: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01db: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_0201: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_0209: Unknown result type (might be due to invalid IL or missing references)
		//IL_020e: Unknown result type (might be due to invalid IL or missing references)
		//IL_020f: Unknown result type (might be due to invalid IL or missing references)
		AddQuad(center - yaxis - xaxis - zaxis, center - yaxis + xaxis - zaxis, center - yaxis + xaxis + zaxis, center - yaxis - xaxis + zaxis, boneIndex);
		AddQuad(center + yaxis - xaxis - zaxis, center + yaxis + xaxis - zaxis, center + yaxis + xaxis + zaxis, center + yaxis - xaxis + zaxis, boneIndex, reverse: true);
		AddQuad(center - xaxis - yaxis - zaxis, center - xaxis + yaxis - zaxis, center - xaxis + yaxis + zaxis, center - xaxis - yaxis + zaxis, boneIndex, reverse: true);
		AddQuad(center + xaxis - yaxis - zaxis, center + xaxis + yaxis - zaxis, center + xaxis + yaxis + zaxis, center + xaxis - yaxis + zaxis, boneIndex);
		AddQuad(center - zaxis - xaxis - yaxis, center - zaxis + xaxis - yaxis, center - zaxis + xaxis + yaxis, center - zaxis - xaxis + yaxis, boneIndex, reverse: true);
		AddQuad(center + zaxis - xaxis - yaxis, center + zaxis + xaxis - yaxis, center + zaxis + xaxis + yaxis, center + zaxis - xaxis + yaxis, boneIndex);
	}

	private void AddQuad(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, int boneIndex, bool reverse = false)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_010d: Unknown result type (might be due to invalid IL or missing references)
		int count = m_positioins.Count;
		if (float.IsNaN(v0.x) || float.IsNaN(v0.y) || float.IsNaN(v0.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v0);
		if (float.IsNaN(v1.x) || float.IsNaN(v1.y) || float.IsNaN(v1.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v1);
		if (float.IsNaN(v2.x) || float.IsNaN(v2.y) || float.IsNaN(v2.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v2);
		if (float.IsNaN(v3.x) || float.IsNaN(v3.y) || float.IsNaN(v3.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v3);
		BoneWeight boneWeight = default(BoneWeight);
		boneWeight.boneIndex0 = boneIndex;
		boneWeight.weight0 = 1f;
		BoneWeight item = boneWeight;
		m_boneWeights.Add(item);
		m_boneWeights.Add(item);
		m_boneWeights.Add(item);
		m_boneWeights.Add(item);
		if (reverse)
		{
			m_indices.Add(count + 3);
			m_indices.Add(count + 2);
			m_indices.Add(count + 1);
			m_indices.Add(count + 1);
			m_indices.Add(count);
			m_indices.Add(count + 3);
		}
		else
		{
			m_indices.Add(count);
			m_indices.Add(count + 1);
			m_indices.Add(count + 2);
			m_indices.Add(count + 2);
			m_indices.Add(count + 3);
			m_indices.Add(count);
		}
	}
}
internal struct BoneHeadTail
{
	public HumanoidBones Head;

	public HumanoidBones Tail;

	public Vector3 TailOffset;

	public float XWidth;

	public float ZWidth;

	public BoneHeadTail(HumanoidBones head, HumanoidBones tail, float xWidth = 0.05f, float zWidth = 0.05f)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		Head = head;
		Tail = tail;
		TailOffset = Vector3.zero;
		XWidth = xWidth;
		ZWidth = zWidth;
	}

	public BoneHeadTail(HumanoidBones head, Vector3 tailOffset, float xWidth = 0.05f, float zWidth = 0.05f)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		Head = head;
		Tail = HumanoidBones.unknown;
		TailOffset = tailOffset;
		XWidth = xWidth;
		ZWidth = zWidth;
	}
}
public static class MathFWrap
{
	public static readonly float PI = MathF.PI;

	public static float Clamp(float src, float min, float max)
	{
		return Math.Max(Math.Min(src, min), max);
	}

	public static int Clamp(int src, int min, int max)
	{
		return Math.Max(Math.Min(src, min), max);
	}
}
public enum TopologyType
{
	Points,
	Lines,
	LineLoop,
	LineStrip,
	Triangles,
	TriangleStrip,
	TriangleFan
}
public struct Triangle
{
	public int Vertex0;

	public int Vertex1;

	public int Vertex2;

	public Triangle(int v0, int v1, int v2)
	{
		Vertex0 = v0;
		Vertex1 = v1;
		Vertex2 = v2;
	}
}
public class Submesh
{
	public int Offset;

	public int DrawCount;

	public int Material;

	public override string ToString()
	{
		return $"{Material}({DrawCount})";
	}

	public Submesh(int material)
		: this(0, 0, material)
	{
	}

	public Submesh(int offset, int drawCount, int material)
	{
		Offset = offset;
		DrawCount = drawCount;
		Material = material;
	}
}
public class Mesh
{
	public VertexBuffer VertexBuffer;

	public BufferAccessor IndexBuffer;

	public TopologyType Topology = TopologyType.Triangles;

	public List<MorphTarget> MorphTargets = new List<MorphTarget>();

	public List<Submesh> Submeshes { get; private set; } = new List<Submesh>();


	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		foreach (string item in VertexBuffer.Select((KeyValuePair<string, BufferAccessor> x) => x.Key))
		{
			stringBuilder.Append("[" + item + "]");
		}
		if (IndexBuffer != null)
		{
			TopologyType topology = Topology;
			TopologyType topologyType = topology;
			if (topologyType == TopologyType.Triangles)
			{
				stringBuilder.Append($" {IndexBuffer.Count / 3} tris");
			}
			else
			{
				stringBuilder.Append($" topology: {Topology}");
			}
		}
		if (MorphTargets.Any())
		{
			stringBuilder.Append($", {MorphTargets.Count} morphs");
			foreach (KeyValuePair<string, BufferAccessor> item2 in MorphTargets[0].VertexBuffer)
			{
				stringBuilder.Append("[" + item2.Key + "]");
			}
		}
		int num = VertexBuffer.ByteLength + IndexBuffer.ByteLength + MorphTargets.Sum((MorphTarget x) => x.VertexBuffer.ByteLength);
		stringBuilder.Append($": expected {num / 1000 / 1000} MB");
		return stringBuilder.ToString();
	}

	public Mesh(TopologyType topology = TopologyType.Triangles)
	{
		Topology = topology;
	}

	public void ApplyRotationAndScaling(Matrix4x4 m)
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		((Matrix4x4)(ref m)).SetColumn(3, new Vector4(0f, 0f, 0f, 1f));
		NativeArray<Vector3> val = VertexBuffer.Positions.Bytes.Reinterpret<Vector3>(1);
		NativeArray<Vector3> val2 = VertexBuffer.Normals.Bytes.Reinterpret<Vector3>(1);
		for (int i = 0; i < val.Length; i++)
		{
			val[i] = ((Matrix4x4)(ref m)).MultiplyPoint(val[i]);
			val2[i] = ((Matrix4x4)(ref m)).MultiplyVector(val2[i]);
		}
	}
}
public class MeshGroup : GltfId
{
	public readonly string Name;

	public readonly List<Mesh> Meshes = new List<Mesh>();

	public Skin Skin;

	public bool HasSharedBuffer => Meshes.Count == 1 && Meshes[0].Submeshes.Count > 1;

	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append(Name);
		if (Skin != null)
		{
			stringBuilder.Append("(skinned)");
		}
		bool flag = true;
		foreach (Mesh mesh in Meshes)
		{
			if (flag)
			{
				flag = false;
			}
			else
			{
				stringBuilder.Append(", ");
			}
			stringBuilder.Append(mesh);
		}
		return stringBuilder.ToString();
	}

	public MeshGroup(string name)
	{
		Name = name;
	}
}
public class Model
{
	private struct Reverser
	{
		public Action<BufferAccessor> ReverseBuffer;

		public Func<Vector3, Vector3> ReverseVector3;

		public Func<Matrix4x4, Matrix4x4> ReverseMatrix;
	}

	public Coordinates Coordinates;

	public string AssetVersion = "2.0";

	public string AssetGenerator = "UniVRM-0.122.0";

	public string AssetCopyright;

	public string AssetMinVersion;

	public readonly List<object> Materials = new List<object>();

	public readonly List<Skin> Skins = new List<Skin>();

	public readonly List<MeshGroup> MeshGroups = new List<MeshGroup>();

	private Node m_root = new Node("__root__");

	public List<Node> Nodes = new List<Node>();

	public Node Root => m_root;

	private static Reverser ZReverser
	{
		get
		{
			Reverser result = default(Reverser);
			result.ReverseBuffer = ReverseZ;
			result.ReverseVector3 = (Vector3 v) => UnityExtensions.ReverseZ(v);
			result.ReverseMatrix = (Matrix4x4 m) => UnityExtensions.ReverseZ(m);
			return result;
		}
	}

	private static Reverser XReverser
	{
		get
		{
			Reverser result = default(Reverser);
			result.ReverseBuffer = ReverseX;
			result.ReverseVector3 = (Vector3 v) => UnityExtensions.ReverseX(v);
			result.ReverseMatrix = (Matrix4x4 m) => UnityExtensions.ReverseX(m);
			return result;
		}
	}

	public Model(Coordinates coordinates)
	{
		Coordinates = coordinates;
	}

	public void SetRoot(Node root)
	{
		m_root = root;
		Nodes.Clear();
		Nodes.AddRange(root.Traverse().Skip(1));
	}

	public Dictionary<HumanoidBones, Node> GetBoneMap()
	{
		return (from x in Root.Traverse()
			where x.HumanoidBone.HasValue
			select x).ToDictionary((Node x) => x.HumanoidBone.Value, (Node x) => x);
	}

	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append("[GLTF] generator: " + AssetGenerator + "\n");
		for (int i = 0; i < Materials.Count; i++)
		{
			object arg = Materials[i];
			stringBuilder.Append($"[Material#{i:00}] {arg}\n");
		}
		for (int j = 0; j < MeshGroups.Count; j++)
		{
			MeshGroup arg2 = MeshGroups[j];
			stringBuilder.Append($"[Mesh#{j:00}] {arg2}\n");
		}
		stringBuilder.Append($"[Node] {Nodes.Count} nodes\n");
		foreach (Skin skin in Skins)
		{
			stringBuilder.Append($"[Skin] {skin}\n");
		}
		return stringBuilder.ToString();
	}

	public bool CheckVrmHumanoid()
	{
		HashSet<HumanoidBones> hashSet = new HashSet<HumanoidBones>();
		foreach (Node node in Nodes)
		{
			if (node.HumanoidBone.HasValue)
			{
				if (hashSet.Contains(node.HumanoidBone.Value))
				{
					return false;
				}
				hashSet.Add(node.HumanoidBone.Value);
			}
		}
		IEnumerable<BoneRequiredAttribute[]> source = from bone in CachedEnum.GetValues<HumanoidBones>()
			select bone.GetType().GetField(bone.ToString()) into info
			select info.GetCustomAttributes(typeof(BoneRequiredAttribute), inherit: false) as BoneRequiredAttribute[] into attributes
			where attributes.Length != 0
			select attributes;
		IEnumerable<BoneRequiredAttribute[]> source2 = from humanoid in hashSet
			select humanoid.GetType().GetField(humanoid.ToString()) into info
			select info.GetCustomAttributes(typeof(BoneRequiredAttribute), inherit: false) as BoneRequiredAttribute[] into attributes
			where attributes.Length != 0
			select attributes;
		if (source2.Count() != source.Count())
		{
			return false;
		}
		return true;
	}

	public static Node GetNode(Node root, string path)
	{
		string[] source = path.Split('/');
		IEnumerator<string> it = source.Select((string x) => x).GetEnumerator();
		Node node = root;
		while (it.MoveNext())
		{
			node = node.Children.First((Node x) => x.Name == it.Current);
		}
		return node;
	}

	public void ApplyRotationAndScale()
	{
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		Dictionary<Node, Vector3> dictionary = Nodes.ToDictionary((Node x) => x, (Node x) => x.Translation);
		foreach (Node item in Root.Traverse().Skip(1))
		{
			if (dictionary.TryGetValue(item, out var value))
			{
				Matrix4x4 m = Matrix4x4.Translate(value);
				item.SetMatrix(m, calcWorldMatrix: false);
			}
		}
	}

	public void NodeAdd(Node node, Node parent = null)
	{
		if (parent == null)
		{
			parent = Root;
		}
		parent.Add(node);
		if (Nodes.Contains(node))
		{
			throw new ArgumentException($"Nodes contain {node}");
		}
		Nodes.Add(node);
	}

	public void NodeRemove(Node remove)
	{
		foreach (Node node in Nodes)
		{
			if (node.Parent == remove)
			{
				remove.Remove(node);
			}
			if (remove.Parent == node)
			{
				node.Remove(remove);
			}
		}
		if (Root.Children.Contains(remove))
		{
			Root.Remove(remove);
		}
		Nodes.Remove(remove);
	}

	public string SkinningBake(INativeArrayManager arrayManager)
	{
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		foreach (Node node in Nodes)
		{
			MeshGroup meshGroup = node.MeshGroup;
			if (meshGroup == null)
			{
				continue;
			}
			if (meshGroup.Skin != null)
			{
				foreach (Mesh mesh in meshGroup.Meshes)
				{
					meshGroup.Skin.Skinning(arrayManager, mesh.VertexBuffer);
				}
				meshGroup.Skin.Root = null;
				meshGroup.Skin.InverseMatrices = null;
				continue;
			}
			foreach (Mesh mesh2 in meshGroup.Meshes)
			{
				mesh2.ApplyRotationAndScaling(node.Matrix);
			}
		}
		ApplyRotationAndScale();
		foreach (Node node2 in Nodes)
		{
			MeshGroup meshGroup2 = node2.MeshGroup;
			if (meshGroup2 == null)
			{
				continue;
			}
			foreach (Mesh mesh3 in meshGroup2.Meshes)
			{
				if (meshGroup2.Skin != null)
				{
					meshGroup2.Skin.CalcInverseMatrices(arrayManager);
				}
			}
		}
		return "SkinningBake";
	}

	private static void ReverseX(BufferAccessor ba)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Invalid comparison between Unknown and I4
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Invalid comparison between Unknown and I4
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Invalid comparison between Unknown and I4
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		if ((int)ba.ComponentType != 5126)
		{
			throw new Exception();
		}
		if ((int)ba.AccessorType == 2)
		{
			NativeArray<Vector3> val = ba.Bytes.Reinterpret<Vector3>(1);
			for (int i = 0; i < val.Length; i++)
			{
				val[i] = UnityExtensions.ReverseX(val[i]);
			}
			return;
		}
		if ((int)ba.AccessorType == 6)
		{
			NativeArray<Matrix4x4> val2 = ba.Bytes.Reinterpret<Matrix4x4>(1);
			for (int j = 0; j < val2.Length; j++)
			{
				val2[j] = UnityExtensions.ReverseX(val2[j]);
			}
			return;
		}
		throw new NotImplementedException();
	}

	private static void ReverseZ(BufferAccessor ba)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Invalid comparison between Unknown and I4
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Invalid comparison between Unknown and I4
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Invalid comparison between Unknown and I4
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		if ((int)ba.ComponentType != 5126)
		{
			throw new Exception();
		}
		if ((int)ba.AccessorType == 2)
		{
			NativeArray<Vector3> val = ba.Bytes.Reinterpret<Vector3>(1);
			for (int i = 0; i < val.Length; i++)
			{
				val[i] = UnityExtensions.ReverseZ(val[i]);
			}
			return;
		}
		if ((int)ba.AccessorType == 6)
		{
			NativeArray<Matrix4x4> val2 = ba.Bytes.Reinterpret<Matrix4x4>(1);
			for (int j = 0; j < val2.Length; j++)
			{
				val2[j] = UnityExtensions.ReverseZ(val2[j]);
			}
			return;
		}
		throw new NotImplementedException();
	}

	public void ConvertCoordinate(Coordinates coordinates, bool ignoreVrm = false)
	{
		if (Coordinates.Equals(coordinates))
		{
			return;
		}
		if (Coordinates.IsVrm0 && coordinates.IsUnity)
		{
			ReverseAxisAndFlipTriangle(ZReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		if (Coordinates.IsUnity && coordinates.IsVrm0)
		{
			ReverseAxisAndFlipTriangle(ZReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		if (Coordinates.IsVrm1 && coordinates.IsUnity)
		{
			ReverseAxisAndFlipTriangle(XReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		if (Coordinates.IsUnity && coordinates.IsVrm1)
		{
			ReverseAxisAndFlipTriangle(XReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		throw new NotImplementedException();
	}

	private void UVVerticalFlip()
	{
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		foreach (MeshGroup meshGroup in MeshGroups)
		{
			foreach (Mesh mesh in meshGroup.Meshes)
			{
				BufferAccessor texCoords = mesh.VertexBuffer.TexCoords;
				if (texCoords != null)
				{
					NativeArray<Vector2> val = texCoords.Bytes.Reinterpret<Vector2>(1);
					for (int i = 0; i < val.Length; i++)
					{
						val[i] = UnityExtensions.UVVerticalFlip(val[i]);
					}
				}
			}
		}
	}

	private void ReverseAxisAndFlipTriangle(Reverser reverser, bool ignoreVrm)
	{
		//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_02de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_0108: Unknown result type (might be due to invalid IL or missing references)
		//IL_010d: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Expected I4, but got Unknown
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0151: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_0336: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
		HashSet<NativeArray<byte>> hashSet = new HashSet<NativeArray<byte>>();
		foreach (MeshGroup meshGroup in MeshGroups)
		{
			foreach (Mesh mesh in meshGroup.Meshes)
			{
				foreach (KeyValuePair<string, BufferAccessor> item in mesh.VertexBuffer)
				{
					string key = item.Key;
					BufferAccessor value = item.Value;
					if (key == "POSITION" || key == "NORMAL")
					{
						if (hashSet.Add(value.Bytes))
						{
							reverser.ReverseBuffer(value);
						}
					}
					else if (!(key == "TANGENT"))
					{
					}
				}
				if (hashSet.Add(mesh.IndexBuffer.Bytes))
				{
					AccessorValueType componentType = mesh.IndexBuffer.ComponentType;
					AccessorValueType val = componentType;
					switch (val - 5121)
					{
					case 0:
						FlipTriangle(mesh.IndexBuffer.Bytes);
						break;
					case 2:
						FlipTriangle(mesh.IndexBuffer.Bytes.Reinterpret<ushort>(1));
						break;
					case 4:
						FlipTriangle(mesh.IndexBuffer.Bytes.Reinterpret<uint>(1));
						break;
					default:
						throw new NotImplementedException();
					}
				}
				foreach (MorphTarget morphTarget in mesh.MorphTargets)
				{
					foreach (KeyValuePair<string, BufferAccessor> item2 in morphTarget.VertexBuffer)
					{
						string key2 = item2.Key;
						BufferAccessor value2 = item2.Value;
						if ((key2 == "POSITION" || key2 == "NORMAL") && hashSet.Add(value2.Bytes))
						{
							reverser.ReverseBuffer(value2);
						}
						if (!(key2 == "TANGENT"))
						{
						}
					}
				}
			}
		}
		foreach (Node item3 in Root.Traverse().Skip(1))
		{
			item3.SetMatrix(reverser.ReverseMatrix(item3.Matrix), calcWorldMatrix: false);
		}
		foreach (Skin skin in Skins)
		{
			if (skin.InverseMatrices != null && hashSet.Add(skin.InverseMatrices.Bytes))
			{
				reverser.ReverseBuffer(skin.InverseMatrices);
			}
		}
	}

	private static void FlipTriangle(NativeArray<byte> indices)
	{
		for (int i = 0; i < indices.Length; i += 3)
		{
			byte b = indices[i + 2];
			indices[i + 2] = indices[i];
			indices[i] = b;
		}
	}

	private static void FlipTriangle(NativeArray<ushort> indices)
	{
		for (int i = 0; i < indices.Length; i += 3)
		{
			ushort num = indices[i + 2];
			indices[i + 2] = indices[i];
			indices[i] = num;
		}
	}

	private static void FlipTriangle(NativeArray<uint> indices)
	{
		for (int i = 0; i < indices.Length; i += 3)
		{
			uint num = indices[i + 2];
			indices[i + 2] = indices[i];
			indices[i] = num;
		}
	}
}
public class MorphTarget
{
	public readonly string Name;

	public VertexBuffer VertexBuffer;

	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append(Name);
		foreach (KeyValuePair<string, BufferAccessor> item in VertexBuffer)
		{
			stringBuilder.Append("[" + item.Key + "]");
		}
		return stringBuilder.ToString();
	}

	public MorphTarget(string name)
	{
		Name = name;
	}
}
public enum ChildMatrixMode
{
	KeepLocal,
	KeepWorld
}
public class Node : GltfId, IEnumerable<Node>, IEnumerable
{
	private static int s_nextUniqueId = 1;

	public readonly int UniqueID;

	public Vector3 LocalTranslationWithoutUpdate = Vector3.zero;

	public Quaternion LocalRotationWithoutUpdate = Quaternion.identity;

	public Vector3 LocalScalingWithoutUpdate = Vector3.one;

	private Matrix4x4 m_matrix = Matrix4x4.identity;

	private readonly List<Node> m_children = new List<Node>();

	public MeshGroup MeshGroup;

	private HumanoidBones? m_bone;

	public string Name { get; set; }

	public Vector3 LocalTranslation
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return LocalTranslationWithoutUpdate;
		}
		set
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (!(LocalTranslationWithoutUpdate == value))
			{
				LocalTranslationWithoutUpdate = value;
				CalcWorldMatrix((Parent != null) ? Parent.Matrix : Matrix4x4.identity);
			}
		}
	}

	public Quaternion LocalRotation
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return LocalRotationWithoutUpdate;
		}
		set
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (!(LocalRotationWithoutUpdate == value))
			{
				LocalRotationWithoutUpdate = value;
				CalcWorldMatrix((Parent != null) ? Parent.Matrix : Matrix4x4.identity);
			}
		}
	}

	public Vector3 LocalScaling
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return LocalScalingWithoutUpdate;
		}
		set
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (!(LocalScalingWithoutUpdate == value))
			{
				LocalScalingWithoutUpdate = value;
				CalcWorldMatrix((Parent != null) ? Parent.Matrix : Matrix4x4.identity);
			}
		}
	}

	public Matrix4x4 LocalMatrix => Matrix4x4.Translate(LocalTranslation) * Matrix4x4.Rotate(LocalRotation) * Matrix4x4.Scale(LocalScaling);

	public Matrix4x4 Matrix => m_matrix;

	public Quaternion Rotation
	{
		get
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 matrix = Matrix;
			return ((Matrix4x4)(ref matrix)).rotation;
		}
		set
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			if (Parent == null)
			{
				LocalRotation = value;
			}
			else
			{
				LocalRotation = Quaternion.Inverse(Parent.Rotation) * value;
			}
		}
	}

	public Matrix4x4 InverseMatrix
	{
		get
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 matrix = Matrix;
			return ((Matrix4x4)(ref matrix)).inverse;
		}
	}

	public Vector3 Translation
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 matrix = Matrix;
			return Vector4.op_Implicit(((Matrix4x4)(ref matrix)).GetColumn(3));
		}
		set
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			if (Parent == null)
			{
				LocalTranslation = value;
				return;
			}
			Matrix4x4 inverseMatrix = Parent.InverseMatrix;
			LocalTranslation = ((Matrix4x4)(ref inverseMatrix)).MultiplyPoint(value);
		}
	}

	public Vector3 SkeletonLocalPosition
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return Translation;
		}
		set
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			Translation = value;
		}
	}

	public Node Parent { get; private set; }

	public Mesh Mesh => MeshGroup?.Meshes?[0];

	public HumanoidBones? HumanoidBone
	{
		get
		{
			return m_bone;
		}
		set
		{
			if (m_bone != value && value != HumanoidBones.unknown)
			{
				m_bone = value;
			}
		}
	}

	public IReadOnlyList<Node> Children => m_children;

	public event Action<Matrix4x4> MatrixUpdated;

	public Node(string name)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)

BepInEx/plugins/VRMShaders.GLTF.IO.Runtime.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[2614]
		{
			0, 0, 0, 1, 0, 0, 0, 77, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 73, 79, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 92, 73, 109, 112, 111, 114, 116, 101,
			114, 92, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 67, 108, 105, 112, 70, 97, 99, 116, 111,
			114, 121, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 62, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 65, 119,
			97, 105, 116, 67, 97, 108, 108, 101, 114, 92,
			73, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 65, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 65, 119,
			97, 105, 116, 67, 97, 108, 108, 101, 114, 92,
			73, 109, 109, 101, 100, 105, 97, 116, 101, 67,
			97, 108, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 92, 78, 101, 120, 116, 70, 114, 97,
			109, 101, 84, 97, 115, 107, 83, 99, 104, 101,
			100, 117, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 92, 82, 117, 110, 116, 105, 109, 101,
			79, 110, 108, 121, 65, 119, 97, 105, 116, 67,
			97, 108, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 80, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 92, 82, 117, 110, 116, 105, 109, 101,
			79, 110, 108, 121, 78, 111, 84, 104, 114, 101,
			97, 100, 65, 119, 97, 105, 116, 67, 97, 108,
			108, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 71, 76, 84, 70, 92, 73, 79,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 65,
			119, 97, 105, 116, 67, 97, 108, 108, 101, 114,
			92, 84, 105, 110, 121, 77, 97, 110, 97, 103,
			101, 100, 84, 97, 115, 107, 83, 99, 104, 101,
			100, 117, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 70, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 82, 101, 115, 112, 111, 110, 115, 105,
			98, 105, 108, 105, 116, 121, 70, 111, 114, 68,
			101, 115, 116, 114, 111, 121, 79, 98, 106, 101,
			99, 116, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 71, 76, 84, 70, 92, 73, 79,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 92, 73, 109,
			112, 111, 114, 116, 101, 114, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 71, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 70, 97, 99,
			116, 111, 114, 121, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 48, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 71, 76, 84, 70, 92, 73,
			79, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			80, 97, 116, 104, 79, 98, 106, 101, 99, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			49, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			71, 76, 84, 70, 92, 73, 79, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 83, 117, 98, 65,
			115, 115, 101, 116, 75, 101, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 71, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 73, 79, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 84, 101, 120, 116, 117, 114, 101,
			92, 67, 111, 110, 118, 101, 114, 116, 101, 114,
			92, 78, 111, 114, 109, 97, 108, 67, 111, 110,
			118, 101, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 91, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			67, 111, 110, 118, 101, 114, 116, 101, 114, 92,
			79, 99, 99, 108, 117, 115, 105, 111, 110, 77,
			101, 116, 97, 108, 108, 105, 99, 82, 111, 117,
			103, 104, 110, 101, 115, 115, 67, 111, 110, 118,
			101, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 67,
			111, 110, 118, 101, 114, 116, 101, 114, 92, 84,
			101, 120, 116, 117, 114, 101, 67, 111, 110, 118,
			101, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 71, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 69,
			120, 112, 111, 114, 116, 101, 114, 92, 73, 84,
			101, 120, 116, 117, 114, 101, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 73, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 71, 76, 84, 70, 92, 73,
			79, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			84, 101, 120, 116, 117, 114, 101, 92, 69, 120,
			112, 111, 114, 116, 101, 114, 92, 73, 84, 101,
			120, 116, 117, 114, 101, 83, 101, 114, 105, 97,
			108, 105, 122, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 79, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 69,
			120, 112, 111, 114, 116, 101, 114, 92, 82, 117,
			110, 116, 105, 109, 101, 84, 101, 120, 116, 117,
			114, 101, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 84, 101,
			120, 116, 117, 114, 101, 92, 69, 120, 112, 111,
			114, 116, 101, 114, 92, 84, 101, 120, 116, 117,
			114, 101, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			73, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			71, 76, 84, 70, 92, 73, 79, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 84, 101, 120, 116,
			117, 114, 101, 92, 69, 120, 112, 111, 114, 116,
			101, 114, 92, 84, 101, 120, 116, 117, 114, 101,
			69, 120, 112, 111, 114, 116, 80, 97, 114, 97,
			109, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 79, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 68, 101, 115, 101, 114, 105,
			97, 108, 105, 122, 105, 110, 103, 84, 101, 120,
			116, 117, 114, 101, 73, 110, 102, 111, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 75, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 71, 76,
			84, 70, 92, 73, 79, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 84, 101, 120, 116, 117, 114,
			101, 92, 73, 109, 112, 111, 114, 116, 101, 114,
			92, 73, 84, 101, 120, 116, 117, 114, 101, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 77, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 75, 116, 120, 84, 101, 120,
			116, 117, 114, 101, 68, 101, 115, 101, 114, 105,
			97, 108, 105, 122, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 67, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 83,
			97, 109, 112, 108, 101, 114, 80, 97, 114, 97,
			109, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 72, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 75, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 83, 101, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 69, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 71, 76, 84, 70, 92, 73,
			79, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			84, 101, 120, 116, 117, 114, 101, 92, 73, 109,
			112, 111, 114, 116, 101, 114, 92, 84, 101, 120,
			116, 117, 114, 101, 70, 97, 99, 116, 111, 114,
			121, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 72, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 84, 101, 120, 116, 117, 114,
			101, 73, 109, 112, 111, 114, 116, 78, 97, 109,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 90, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 85, 110, 105, 116, 121, 83,
			117, 112, 112, 111, 114, 116, 101, 100, 73, 109,
			97, 103, 101, 84, 121, 112, 101, 68, 101, 115,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 79,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 92, 71,
			76, 84, 70, 92, 73, 79, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 84, 101, 120, 116, 117,
			114, 101, 92, 73, 109, 112, 111, 114, 116, 101,
			114, 92, 85, 110, 105, 116, 121, 84, 101, 120,
			116, 117, 114, 101, 68, 101, 115, 101, 114, 105,
			97, 108, 105, 122, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 68, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			85, 116, 105, 108, 92, 84, 101, 120, 116, 117,
			114, 101, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 50, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 116,
			105, 108, 92, 83, 121, 109, 98, 111, 108, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			63, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			71, 76, 84, 70, 92, 73, 79, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 116, 105, 108,
			92, 85, 110, 105, 116, 121, 79, 98, 106, 101,
			99, 116, 68, 101, 115, 116, 114, 111, 121, 101,
			114, 46, 99, 115
		};
		result.TypesData = new byte[1274]
		{
			0, 0, 0, 0, 31, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 124, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 67, 108, 105, 112, 70,
			97, 99, 116, 111, 114, 121, 0, 0, 0, 0,
			23, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 73, 65, 119, 97, 105, 116, 67, 97,
			108, 108, 101, 114, 0, 0, 0, 0, 26, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			73, 109, 109, 101, 100, 105, 97, 116, 101, 67,
			97, 108, 108, 101, 114, 0, 0, 0, 0, 33,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			124, 78, 101, 120, 116, 70, 114, 97, 109, 101,
			84, 97, 115, 107, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 0, 0, 0, 0, 56, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 46, 78,
			101, 120, 116, 70, 114, 97, 109, 101, 84, 97,
			115, 107, 83, 99, 104, 101, 100, 117, 108, 101,
			114, 124, 85, 110, 105, 116, 121, 76, 111, 111,
			112, 84, 97, 115, 107, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 0, 0, 0, 0, 33, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			82, 117, 110, 116, 105, 109, 101, 79, 110, 108,
			121, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 0, 0, 0, 0, 41, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 82, 117,
			110, 116, 105, 109, 101, 79, 110, 108, 121, 78,
			111, 84, 104, 114, 101, 97, 100, 65, 119, 97,
			105, 116, 67, 97, 108, 108, 101, 114, 0, 0,
			0, 0, 35, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 84, 105, 110, 121, 77, 97,
			110, 97, 103, 101, 100, 84, 97, 115, 107, 83,
			99, 104, 101, 100, 117, 108, 101, 114, 0, 0,
			0, 0, 43, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 73, 82, 101, 115, 112, 111,
			110, 115, 105, 98, 105, 108, 105, 116, 121, 70,
			111, 114, 68, 101, 115, 116, 114, 111, 121, 79,
			98, 106, 101, 99, 116, 115, 0, 0, 0, 0,
			29, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			0, 0, 0, 0, 26, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 124, 77, 97, 116, 101,
			114, 105, 97, 108, 70, 97, 99, 116, 111, 114,
			121, 0, 0, 0, 0, 43, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 46, 77, 97, 116,
			101, 114, 105, 97, 108, 70, 97, 99, 116, 111,
			114, 121, 124, 77, 97, 116, 101, 114, 105, 97,
			108, 76, 111, 97, 100, 73, 110, 102, 111, 0,
			0, 0, 0, 21, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 124, 80, 97, 116, 104, 79,
			98, 106, 101, 99, 116, 0, 0, 0, 0, 22,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			124, 83, 117, 98, 65, 115, 115, 101, 116, 75,
			101, 121, 0, 0, 0, 0, 26, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 78, 111,
			114, 109, 97, 108, 67, 111, 110, 118, 101, 114,
			116, 101, 114, 0, 0, 0, 0, 46, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 79,
			99, 99, 108, 117, 115, 105, 111, 110, 77, 101,
			116, 97, 108, 108, 105, 99, 82, 111, 117, 103,
			104, 110, 101, 115, 115, 67, 111, 110, 118, 101,
			114, 116, 101, 114, 0, 0, 0, 0, 27, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			84, 101, 120, 116, 117, 114, 101, 67, 111, 110,
			118, 101, 114, 116, 101, 114, 0, 0, 0, 0,
			27, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 73, 84, 101, 120, 116, 117, 114, 101,
			69, 120, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 29, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 73, 84, 101, 120, 116, 117,
			114, 101, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 35, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 82, 117,
			110, 116, 105, 109, 101, 84, 101, 120, 116, 117,
			114, 101, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 26, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 84, 101,
			120, 116, 117, 114, 101, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 29, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 84,
			101, 120, 116, 117, 114, 101, 69, 120, 112, 111,
			114, 116, 80, 97, 114, 97, 109, 0, 0, 0,
			0, 35, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 124, 68, 101, 115, 101, 114, 105, 97,
			108, 105, 122, 105, 110, 103, 84, 101, 120, 116,
			117, 114, 101, 73, 110, 102, 111, 0, 0, 0,
			0, 31, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 124, 73, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 0, 0, 0, 0, 33, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 75,
			116, 120, 84, 101, 120, 116, 117, 114, 101, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 0, 0, 0, 0, 23, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 124, 83, 97, 109,
			112, 108, 101, 114, 80, 97, 114, 97, 109, 0,
			0, 0, 0, 28, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 124, 84, 101, 120, 116, 117,
			114, 101, 68, 101, 115, 99, 114, 105, 112, 116,
			111, 114, 0, 0, 0, 0, 31, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 84, 101,
			120, 116, 117, 114, 101, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 83, 101, 116, 0, 0,
			0, 0, 25, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 84, 101, 120, 116, 117, 114,
			101, 70, 97, 99, 116, 111, 114, 121, 0, 0,
			0, 0, 28, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 84, 101, 120, 116, 117, 114,
			101, 73, 109, 112, 111, 114, 116, 78, 97, 109,
			101, 0, 0, 0, 0, 46, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 124, 85, 110, 105,
			116, 121, 83, 117, 112, 112, 111, 114, 116, 101,
			100, 73, 109, 97, 103, 101, 84, 121, 112, 101,
			68, 101, 115, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 35, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 85, 110,
			105, 116, 121, 84, 101, 120, 116, 117, 114, 101,
			68, 101, 115, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 28, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 84, 101,
			120, 116, 117, 114, 101, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 18,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			124, 83, 121, 109, 98, 111, 108, 115, 0, 0,
			0, 0, 31, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 85, 110, 105, 116, 121, 79,
			98, 106, 101, 99, 116, 68, 101, 115, 116, 114,
			111, 121, 101, 114
		};
		result.TotalFiles = 33;
		result.TotalTypes = 35;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VRMShaders;

public class AnimationClipFactory : IResponsibilityForDestroyObjects, IDisposable
{
	private readonly IReadOnlyDictionary<SubAssetKey, AnimationClip> _externalClips;

	private readonly Dictionary<SubAssetKey, AnimationClip> _runtimeClips = new Dictionary<SubAssetKey, AnimationClip>();

	private readonly List<SubAssetKey> _loadedClipKeys = new List<SubAssetKey>();

	public IReadOnlyDictionary<SubAssetKey, AnimationClip> ExternalClips => _externalClips;

	public IReadOnlyDictionary<SubAssetKey, AnimationClip> RuntimeGeneratedClips => _runtimeClips;

	public IReadOnlyList<SubAssetKey> LoadedClipKeys => _loadedClipKeys;

	public AnimationClipFactory(IReadOnlyDictionary<SubAssetKey, AnimationClip> externalClips)
	{
		_externalClips = externalClips;
	}

	public void Dispose()
	{
		foreach (KeyValuePair<SubAssetKey, AnimationClip> runtimeClip in _runtimeClips)
		{
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)runtimeClip.Value);
		}
		_runtimeClips.Clear();
	}

	public void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take)
	{
		KeyValuePair<SubAssetKey, AnimationClip>[] array = _runtimeClips.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			KeyValuePair<SubAssetKey, AnimationClip> keyValuePair = array[i];
			var (key, obj) = (KeyValuePair<SubAssetKey, AnimationClip>)(ref keyValuePair);
			take(key, (Object)(object)obj);
			_runtimeClips.Remove(key);
		}
	}

	public AnimationClip GetAnimationClip(SubAssetKey key)
	{
		if (_externalClips.TryGetValue(key, out var value))
		{
			return value;
		}
		if (_runtimeClips.TryGetValue(key, out value))
		{
			return value;
		}
		return null;
	}

	public async Task<AnimationClip> LoadAnimationClipAsync(SubAssetKey key, Func<Task<AnimationClip>> loadAnimationClip)
	{
		if (!_loadedClipKeys.Contains(key))
		{
			_loadedClipKeys.Add(key);
		}
		AnimationClip clip2 = GetAnimationClip(key);
		if ((Object)(object)clip2 != (Object)null)
		{
			return clip2;
		}
		clip2 = await loadAnimationClip();
		_runtimeClips.Add(key, clip2);
		return clip2;
	}
}
public interface IAwaitCaller
{
	Task NextFrame();

	Task Run(Action action);

	Task<T> Run<T>(Func<T> action);

	Task NextFrameIfTimedOut();
}
public sealed class ImmediateCaller : IAwaitCaller
{
	public Task NextFrame()
	{
		return Task.FromResult<object>(null);
	}

	public Task Run(Action action)
	{
		action();
		return Task.FromResult<object>(null);
	}

	public Task<T> Run<T>(Func<T> action)
	{
		return Task.FromResult(action());
	}

	public Task NextFrameIfTimedOut()
	{
		return NextFrame();
	}
}
internal sealed class NextFrameTaskScheduler
{
	private sealed class UnityLoopTaskScheduler : MonoBehaviour
	{
		private static UnityLoopTaskScheduler _instance;

		public static UnityLoopTaskScheduler Instance
		{
			get
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				if ((Object)(object)_instance == (Object)null)
				{
					GameObject val = new GameObject("UniGLTF UnityThreadScheduler");
					Object.DontDestroyOnLoad((Object)(object)val);
					_instance = val.AddComponent<UnityLoopTaskScheduler>();
				}
				return _instance;
			}
		}

		public TinyManagedTaskScheduler Scheduler { get; } = new TinyManagedTaskScheduler();


		private void Update()
		{
			Scheduler.ManagedUpdate();
		}
	}

	public bool IsSupported => Application.isPlaying;

	public NextFrameTaskScheduler()
	{
		if (!IsSupported)
		{
			throw new NotSupportedException("NextFrameTaskScheduler is supported at runtime only.");
		}
	}

	public bool Enqueue(Action action)
	{
		int currentFrame = Time.frameCount;
		UnityLoopTaskScheduler.Instance.Scheduler.Enqueue(action, () => Time.frameCount != currentFrame);
		return true;
	}
}
public sealed class RuntimeOnlyAwaitCaller : IAwaitCaller
{
	private readonly NextFrameTaskScheduler _scheduler;

	private readonly float _timeOutInSeconds;

	private float _lastTimeoutBaseTime;

	private bool LastTimeoutBaseTimeNeedsReset => _lastTimeoutBaseTime == 0f;

	public RuntimeOnlyAwaitCaller(float timeOutInSeconds = 0.001f)
	{
		_scheduler = new NextFrameTaskScheduler();
		_timeOutInSeconds = timeOutInSeconds;
		ResetLastTimeoutBaseTime();
	}

	public Task NextFrame()
	{
		ResetLastTimeoutBaseTime();
		TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
		_scheduler.Enqueue(delegate
		{
			tcs.SetResult(null);
		});
		return tcs.Task;
	}

	public Task Run(Action action)
	{
		return Task.Run(action);
	}

	public Task<T> Run<T>(Func<T> action)
	{
		return Task.Run(action);
	}

	public Task NextFrameIfTimedOut()
	{
		return CheckTimeout() ? NextFrame() : Task.CompletedTask;
	}

	private void ResetLastTimeoutBaseTime()
	{
		_lastTimeoutBaseTime = 0f;
	}

	private bool CheckTimeout()
	{
		float realtimeSinceStartup = Time.realtimeSinceStartup;
		if (LastTimeoutBaseTimeNeedsReset)
		{
			_lastTimeoutBaseTime = realtimeSinceStartup;
		}
		return realtimeSinceStartup - _lastTimeoutBaseTime >= _timeOutInSeconds;
	}
}
public sealed class RuntimeOnlyNoThreadAwaitCaller : IAwaitCaller
{
	private readonly NextFrameTaskScheduler _scheduler;

	private readonly float _timeoutInSeconds;

	private float _lastTimeoutBaseTime;

	private bool LastTimeoutBaseTimeNeedsReset => _lastTimeoutBaseTime == 0f;

	public RuntimeOnlyNoThreadAwaitCaller(float timeoutInSeconds = 0.001f)
	{
		_scheduler = new NextFrameTaskScheduler();
		_timeoutInSeconds = timeoutInSeconds;
		ResetLastTimeoutBaseTime();
	}

	public Task NextFrame()
	{
		ResetLastTimeoutBaseTime();
		TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
		_scheduler.Enqueue(delegate
		{
			tcs.SetResult(null);
		});
		return tcs.Task;
	}

	public Task Run(Action action)
	{
		try
		{
			action();
			return Task.FromResult<object>(null);
		}
		catch (Exception exception)
		{
			return Task.FromException(exception);
		}
	}

	public Task<T> Run<T>(Func<T> action)
	{
		try
		{
			return Task.FromResult(action());
		}
		catch (Exception exception)
		{
			return Task.FromException<T>(exception);
		}
	}

	public Task NextFrameIfTimedOut()
	{
		return CheckTimeout() ? NextFrame() : Task.CompletedTask;
	}

	private void ResetLastTimeoutBaseTime()
	{
		_lastTimeoutBaseTime = 0f;
	}

	private bool CheckTimeout()
	{
		float realtimeSinceStartup = Time.realtimeSinceStartup;
		if (LastTimeoutBaseTimeNeedsReset)
		{
			_lastTimeoutBaseTime = realtimeSinceStartup;
		}
		return realtimeSinceStartup - _lastTimeoutBaseTime >= _timeoutInSeconds;
	}
}
internal sealed class TinyManagedTaskScheduler
{
	private readonly ConcurrentQueue<(Action, Func<bool>)> _continuationQueue = new ConcurrentQueue<(Action, Func<bool>)>();

	private readonly ConcurrentQueue<(Action, Func<bool>)> _temporaryQueue = new ConcurrentQueue<(Action, Func<bool>)>();

	public void ManagedUpdate()
	{
		(Action, Func<bool>) result;
		while (_continuationQueue.TryDequeue(out result))
		{
			var (action, func) = result;
			if (func())
			{
				action();
			}
			else
			{
				_temporaryQueue.Enqueue(result);
			}
		}
		(Action, Func<bool>) result2;
		while (_temporaryQueue.TryDequeue(out result2))
		{
			_continuationQueue.Enqueue(result2);
		}
	}

	public void Enqueue(Action continuation, Func<bool> canExecute)
	{
		_continuationQueue.Enqueue((continuation, canExecute));
	}
}
public enum ColorSpace
{
	sRGB,
	Linear
}
public delegate void TakeResponsibilityForDestroyObjectFunc(SubAssetKey key, Object obj);
public interface IResponsibilityForDestroyObjects : IDisposable
{
	void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take);
}
public sealed class MaterialDescriptor
{
	public readonly string Name;

	public readonly Shader Shader;

	public readonly int? RenderQueue;

	public readonly IReadOnlyDictionary<string, TextureDescriptor> TextureSlots;

	public readonly IReadOnlyDictionary<string, float> FloatValues;

	public readonly IReadOnlyDictionary<string, Color> Colors;

	public readonly IReadOnlyDictionary<string, Vector4> Vectors;

	public readonly IReadOnlyList<Action<Material>> Actions;

	public SubAssetKey SubAssetKey => new SubAssetKey(SubAssetKey.MaterialType, Name);

	public MaterialDescriptor(string name, Shader shader, int? renderQueue, IReadOnlyDictionary<string, TextureDescriptor> textureSlots, IReadOnlyDictionary<string, float> floatValues, IReadOnlyDictionary<string, Color> colors, IReadOnlyDictionary<string, Vector4> vectors, IReadOnlyList<Action<Material>> actions)
	{
		Name = name;
		Shader = shader;
		RenderQueue = renderQueue;
		TextureSlots = textureSlots;
		FloatValues = floatValues;
		Colors = colors;
		Vectors = vectors;
		Actions = actions;
	}
}
public delegate Task<Texture> GetTextureAsyncFunc(TextureDescriptor texDesc, IAwaitCaller awaitCaller);
public class MaterialFactory : IResponsibilityForDestroyObjects, IDisposable
{
	public struct MaterialLoadInfo
	{
		public SubAssetKey Key;

		public readonly Material Asset;

		public readonly bool UseExternal;

		public bool IsSubAsset => !UseExternal;

		public MaterialLoadInfo(SubAssetKey key, Material asset, bool useExternal)
		{
			Key = key;
			Asset = asset;
			UseExternal = useExternal;
		}
	}

	private readonly IReadOnlyDictionary<SubAssetKey, Material> m_externalMap;

	private List<MaterialLoadInfo> m_materials = new List<MaterialLoadInfo>();

	public IReadOnlyList<MaterialLoadInfo> Materials => m_materials;

	public MaterialFactory(IReadOnlyDictionary<SubAssetKey, Material> externalMaterialMap)
	{
		m_externalMap = externalMaterialMap;
	}

	private void Remove(Material material)
	{
		int num = m_materials.FindIndex((MaterialLoadInfo x) => (Object)(object)x.Asset == (Object)(object)material);
		if (num >= 0)
		{
			m_materials.RemoveAt(num);
		}
	}

	public void Dispose()
	{
		foreach (MaterialLoadInfo material in m_materials)
		{
			if (!material.UseExternal)
			{
				UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)material.Asset);
			}
		}
	}

	public void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take)
	{
		MaterialLoadInfo[] array = m_materials.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			MaterialLoadInfo item = array[i];
			if (!item.UseExternal)
			{
				take(item.Key, (Object)(object)item.Asset);
				m_materials.Remove(item);
			}
		}
	}

	public Material GetMaterial(int index)
	{
		if (index < 0)
		{
			return null;
		}
		if (index >= m_materials.Count)
		{
			return null;
		}
		return m_materials[index].Asset;
	}

	public async Task<Material> LoadAsync(MaterialDescriptor matDesc, GetTextureAsyncFunc getTexture, IAwaitCaller awaitCaller)
	{
		if (m_externalMap.TryGetValue(matDesc.SubAssetKey, out var material2))
		{
			m_materials.Add(new MaterialLoadInfo(matDesc.SubAssetKey, material2, useExternal: true));
			return material2;
		}
		if (getTexture == null)
		{
			getTexture = (TextureDescriptor x, IAwaitCaller y) => Task.FromResult<Texture>(null);
		}
		if ((Object)(object)matDesc.Shader == (Object)null)
		{
			throw new ArgumentNullException("Shader");
		}
		material2 = new Material(matDesc.Shader);
		((Object)material2).name = matDesc.SubAssetKey.Name;
		foreach (KeyValuePair<string, TextureDescriptor> kv4 in matDesc.TextureSlots)
		{
			Texture texture = await getTexture(kv4.Value, awaitCaller);
			if ((Object)(object)texture != (Object)null)
			{
				material2.SetTexture(kv4.Key, texture);
				SetTextureOffsetAndScale(material2, kv4.Key, kv4.Value.Offset, kv4.Value.Scale);
			}
		}
		foreach (KeyValuePair<string, Color> kv3 in matDesc.Colors)
		{
			material2.SetColor(kv3.Key, kv3.Value);
		}
		foreach (KeyValuePair<string, Vector4> kv2 in matDesc.Vectors)
		{
			material2.SetVector(kv2.Key, kv2.Value);
		}
		foreach (KeyValuePair<string, float> kv in matDesc.FloatValues)
		{
			material2.SetFloat(kv.Key, kv.Value);
		}
		if (matDesc.RenderQueue.HasValue)
		{
			material2.renderQueue = matDesc.RenderQueue.Value;
		}
		foreach (Action<Material> action in matDesc.Actions)
		{
			action(material2);
		}
		m_materials.Add(new MaterialLoadInfo(matDesc.SubAssetKey, material2, useExternal: false));
		return material2;
	}

	public static void SetTextureOffsetAndScale(Material material, string propertyName, Vector2 offset, Vector2 scale)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		material.SetTextureOffset(propertyName, offset);
		material.SetTextureScale(propertyName, scale);
	}
}
public readonly struct PathObject
{
	public string FullPath { get; }

	public string Extension => Path.GetExtension(FullPath);

	public string Stem => Path.GetFileNameWithoutExtension(FullPath);

	public PathObject Parent => FromFullPath(Path.GetDirectoryName(FullPath));

	public bool IsUnderAsset => IsDescendantOf(UnityAssets);

	public bool Exists => File.Exists(FullPath);

	public string UnityAssetPath
	{
		get
		{
			PathObject unityRoot = UnityRoot;
			if (!IsDescendantOf(UnityRoot))
			{
				throw new ArgumentException(FullPath + " is not under UnityAssetPath");
			}
			return FullPath.Substring(unityRoot.FullPath.Length + 1);
		}
	}

	public static PathObject UnityRoot { get; } = FromFullPath(Path.GetDirectoryName(Application.dataPath));


	public static PathObject UnityAssets { get; } = UnityRoot.Child("Assets/");


	private PathObject(string src)
	{
		if (string.IsNullOrEmpty(src))
		{
			throw new ArgumentNullException();
		}
		src = Path.GetFullPath(src).Replace('\\', '/');
		if (src.Length > 1 && src[src.Length - 1] == '/')
		{
			src = src.Substring(0, src.Length - 1);
		}
		if (src[0] == '/')
		{
			FullPath = src;
			return;
		}
		if (src.Length >= 3 && src[1] == ':' && src[2] == '/')
		{
			FullPath = src;
			return;
		}
		throw new ArgumentException(src + " is not fullpath");
	}

	public override string ToString()
	{
		try
		{
			string unityAssetPath = UnityAssetPath;
			return "<unity:" + unityAssetPath + ">";
		}
		catch (ArgumentException)
		{
			return "<file:" + FullPath + ">";
		}
	}

	public static PathObject FromFullPath(string src)
	{
		return new PathObject(src);
	}

	public static PathObject FromUnityAssetPath(string src)
	{
		return UnityRoot.Child(src);
	}

	public static bool TryGetFromEnvironmentVariable(string key, out PathObject dst)
	{
		string environmentVariable = Environment.GetEnvironmentVariable(key);
		if (string.IsNullOrEmpty(environmentVariable))
		{
			dst = default(PathObject);
			return false;
		}
		dst = FromFullPath(environmentVariable);
		return true;
	}

	public PathObject Child(string child)
	{
		return FromFullPath(Path.Combine(FullPath, child));
	}

	public bool IsDescendantOf(PathObject ascendant)
	{
		if (!FullPath.StartsWith(ascendant.FullPath))
		{
			return false;
		}
		if (FullPath.Length <= ascendant.FullPath.Length || FullPath[ascendant.FullPath.Length] != '/')
		{
			return false;
		}
		return true;
	}

	public byte[] ReadAllBytes()
	{
		return File.ReadAllBytes(FullPath);
	}

	public void WriteAllBytes(byte[] data)
	{
		File.WriteAllBytes(FullPath, data);
	}

	public static bool TryGetFromAsset(Object src, out PathObject dst)
	{
		if (src == (Object)null)
		{
			dst = default(PathObject);
			return false;
		}
		string assetPath = AssetDatabase.GetAssetPath(src);
		if (!string.IsNullOrEmpty(assetPath))
		{
			dst = FromUnityAssetPath(assetPath);
			return true;
		}
		string prefabAssetPathOfNearestInstanceRoot = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(src);
		if (!string.IsNullOrEmpty(prefabAssetPathOfNearestInstanceRoot))
		{
			dst = FromUnityAssetPath(prefabAssetPathOfNearestInstanceRoot);
			return true;
		}
		dst = default(PathObject);
		return false;
	}

	public void ImportAsset()
	{
		AssetDatabase.ImportAsset(UnityAssetPath);
	}

	public bool TrySaveDialog(string title, string name, out PathObject dst)
	{
		string text = EditorUtility.SaveFilePanel(title, FullPath, name, "vrm");
		if (string.IsNullOrEmpty(text))
		{
			dst = default(PathObject);
			return false;
		}
		dst = FromFullPath(text);
		return true;
	}
}
public readonly struct SubAssetKey : IEquatable<SubAssetKey>
{
	public static readonly Type TextureType = typeof(Texture);

	public static readonly Type MaterialType = typeof(Material);

	public readonly Type Type;

	public readonly string Name;

	public SubAssetKey(Texture obj)
	{
		if ((Object)(object)obj == (Object)null || string.IsNullOrEmpty(((Object)obj).name))
		{
			throw new ArgumentNullException();
		}
		Type = TextureType;
		Name = ((Object)obj).name;
	}

	public SubAssetKey(Material obj)
	{
		if ((Object)(object)obj == (Object)null || string.IsNullOrEmpty(((Object)obj).name))
		{
			throw new ArgumentNullException();
		}
		Type = MaterialType;
		Name = ((Object)obj).name;
	}

	public static SubAssetKey Create<T>(T obj) where T : Object
	{
		return new SubAssetKey(typeof(T), ((Object)obj).name);
	}

	public SubAssetKey(Type type, string name)
	{
		if (type == null)
		{
			throw new ArgumentNullException("type");
		}
		if (string.IsNullOrEmpty(name))
		{
			throw new ArgumentNullException("name");
		}
		if (!type.IsSubclassOf(typeof(Object)))
		{
			throw new ArgumentException($"{type}:{name}");
		}
		if (type.IsSubclassOf(TextureType))
		{
			type = TextureType;
		}
		Type = type;
		Name = name;
	}

	public override string ToString()
	{
		return $"{Type}:{Name}";
	}

	public override bool Equals(object obj)
	{
		if (obj is SubAssetKey subAssetKey)
		{
			return this == subAssetKey;
		}
		return true;
	}

	public bool Equals(SubAssetKey other)
	{
		return Type == other.Type && Name == other.Name;
	}

	public static bool operator ==(SubAssetKey l, SubAssetKey r)
	{
		return l.Equals(r);
	}

	public static bool operator !=(SubAssetKey l, SubAssetKey r)
	{
		return !(l == r);
	}

	public override int GetHashCode()
	{
		return Name.GetHashCode();
	}
}
public static class NormalConverter
{
	private static Material _exporter;

	private static Material Exporter
	{
		get
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			if ((Object)(object)_exporter == (Object)null)
			{
				_exporter = new Material(Shader.Find("Hidden/UniGLTF/NormalMapExporter"));
			}
			return _exporter;
		}
	}

	public static Texture2D Export(Texture texture)
	{
		return TextureConverter.CopyTexture(texture, ColorSpace.Linear, dstNeedsAlpha: false, Exporter);
	}
}
public static class OcclusionMetallicRoughnessConverter
{
	private static Material _importer;

	private static Material _exporter;

	private static Material Importer
	{
		get
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			if ((Object)(object)_importer == (Object)null)
			{
				_importer = new Material(Shader.Find("Hidden/UniGLTF/StandardMapImporter"));
			}
			return _importer;
		}
	}

	private static Material Exporter
	{
		get
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			if ((Object)(object)_exporter == (Object)null)
			{
				_exporter = new Material(Shader.Find("Hidden/UniGLTF/StandardMapExporter"));
			}
			return _exporter;
		}
	}

	public static Texture2D Import(Texture2D metallicRoughnessTexture, float metallicFactor, float roughnessFactor, Texture2D occlusionTexture, bool isLegacySquaredRoughness)
	{
		if ((Object)(object)metallicRoughnessTexture == (Object)null && (Object)(object)occlusionTexture == (Object)null)
		{
			throw new ArgumentNullException("no texture");
		}
		Texture2D val = (((Object)(object)metallicRoughnessTexture != (Object)null) ? metallicRoughnessTexture : occlusionTexture);
		Importer.mainTexture = (Texture)(object)val;
		Importer.SetTexture("_GltfMetallicRoughnessTexture", (Texture)(object)metallicRoughnessTexture);
		Importer.SetTexture("_GltfOcclusionTexture", (Texture)(object)occlusionTexture);
		Importer.SetFloat("_GltfMetallicFactor", metallicFactor);
		Importer.SetFloat("_GltfRoughnessFactor", roughnessFactor);
		Importer.SetFloat("_IsLegacySquaredRoughness", (float)(isLegacySquaredRoughness ? 1 : 0));
		Texture2D result = TextureConverter.CopyTexture((Texture)(object)val, ColorSpace.Linear, dstNeedsAlpha: true, Importer);
		Importer.mainTexture = null;
		Importer.SetTexture("_GltfMetallicRoughnessTexture", (Texture)null);
		Importer.SetTexture("_GltfOcclusionTexture", (Texture)null);
		Importer.SetFloat("_GltfMetallicFactor", 0f);
		Importer.SetFloat("_GltfRoughnessFactor", 0f);
		Importer.SetFloat("_IsLegacySquaredRoughness", 0f);
		return result;
	}

	public static Texture2D Export(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture)
	{
		if ((Object)(object)metallicSmoothTexture == (Object)null && (Object)(object)occlusionTexture == (Object)null)
		{
			throw new ArgumentNullException("no texture");
		}
		Texture val = (((Object)(object)metallicSmoothTexture != (Object)null) ? metallicSmoothTexture : occlusionTexture);
		Exporter.mainTexture = val;
		Exporter.SetTexture("_UnityMetallicSmoothTexture", metallicSmoothTexture);
		Exporter.SetTexture("_UnityOcclusionTexture", occlusionTexture);
		Exporter.SetFloat("_UnitySmoothness", smoothness);
		Texture2D result = TextureConverter.CopyTexture(val, ColorSpace.Linear, dstNeedsAlpha: true, Exporter);
		Exporter.mainTexture = null;
		Exporter.SetTexture("_UnityMetallicSmoothTexture", (Texture)null);
		Exporter.SetTexture("_UnityOcclusionTexture", (Texture)null);
		Exporter.SetFloat("_UnitySmoothness", 0f);
		return result;
	}

	public static Color32 ExportPixel(Color32 metallicSmooth, float smoothness, Color32 occlusion)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		Color32 result = default(Color32);
		result.r = occlusion.g;
		result.g = (byte)(255f - (float)(int)metallicSmooth.a * smoothness);
		result.b = metallicSmooth.r;
		result.a = byte.MaxValue;
		return result;
	}

	private static void DestroyTexture(Texture obj)
	{
		if (Application.isPlaying)
		{
			Object.Destroy((Object)(object)obj);
		}
		else
		{
			Object.DestroyImmediate((Object)(object)obj);
		}
	}
}
public static class TextureConverter
{
	public static readonly TextureFormat WithAlphaFormat = (TextureFormat)5;

	public static readonly TextureFormat WithoutAlphaFormat = (TextureFormat)3;

	public static Texture2D CreateEmptyTextureWithSettings(Texture src, ColorSpace dstColorSpace, bool dstNeedsAlpha)
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Expected O, but got Unknown
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		TextureFormat val = (dstNeedsAlpha ? WithAlphaFormat : WithoutAlphaFormat);
		Texture2D val2 = new Texture2D(src.width, src.height, val, src.HasMipMap(), dstColorSpace == ColorSpace.Linear);
		((Object)val2).name = ((Object)src).name;
		((Texture)val2).anisoLevel = src.anisoLevel;
		((Texture)val2).filterMode = src.filterMode;
		((Texture)val2).mipMapBias = src.mipMapBias;
		((Texture)val2).wrapMode = src.wrapMode;
		((Texture)val2).wrapModeU = src.wrapModeU;
		((Texture)val2).wrapModeV = src.wrapModeV;
		((Texture)val2).wrapModeW = src.wrapModeW;
		return val2;
	}

	public static Texture2D CopyTexture(Texture src, ColorSpace dstColorSpace, bool dstNeedsAlpha, Material material)
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		RenderTextureReadWrite val = (RenderTextureReadWrite)(dstColorSpace switch
		{
			ColorSpace.sRGB => 2, 
			ColorSpace.Linear => 1, 
			_ => throw new ArgumentOutOfRangeException("dstColorSpace", dstColorSpace, null), 
		});
		RenderTexture val2 = new RenderTexture(src.width, src.height, 0, (RenderTextureFormat)0, val);
		if ((Object)(object)material != (Object)null)
		{
			Graphics.Blit(src, val2, material);
		}
		else
		{
			Graphics.Blit(src, val2);
		}
		Texture2D val3 = CreateEmptyTextureWithSettings(src, dstColorSpace, dstNeedsAlpha);
		val3.ReadPixels(new Rect(0f, 0f, (float)src.width, (float)src.height), 0, 0);
		val3.Apply();
		RenderTexture.active = null;
		if (Application.isEditor)
		{
			Object.DestroyImmediate((Object)(object)val2);
		}
		else
		{
			Object.Destroy((Object)(object)val2);
		}
		return val3;
	}
}
public interface ITextureExporter : IDisposable
{
	int RegisterExportingAsSRgb(Texture src, bool needsAlpha);

	int RegisterExportingAsLinear(Texture src, bool needsAlpha);

	int RegisterExportingAsCombinedGltfPbrParameterTextureFromUnityStandardTextures(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture);

	int RegisterExportingAsNormal(Texture src);
}
public interface ITextureSerializer
{
	bool CanExportAsEditorAssetFile(Texture texture, ColorSpace exportColorSpace);

	(byte[] bytes, string mime) ExportBytesWithMime(Texture2D texture, ColorSpace exportColorSpace);

	void ModifyTextureAssetBeforeExporting(Texture texture);
}
public sealed class RuntimeTextureSerializer : ITextureSerializer
{
	public bool CanExportAsEditorAssetFile(Texture texture, ColorSpace exportColorSpace)
	{
		return false;
	}

	public (byte[] bytes, string mime) ExportBytesWithMime(Texture2D texture, ColorSpace exportColorSpace)
	{
		try
		{
			byte[] array = ImageConversion.EncodeToPNG(texture);
			if (array != null)
			{
				return (array, "image/png");
			}
			return CopyTextureAndGetBytesWithMime(texture, exportColorSpace);
		}
		catch (ArgumentException ex)
		{
			Debug.LogWarning((object)ex);
			return CopyTextureAndGetBytesWithMime(texture, exportColorSpace);
		}
	}

	public void ModifyTextureAssetBeforeExporting(Texture texture)
	{
	}

	private static (byte[] bytes, string mime) CopyTextureAndGetBytesWithMime(Texture2D texture, ColorSpace colorSpace)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Invalid comparison between Unknown and I4
		bool dstNeedsAlpha = (int)texture.format != 3;
		Texture2D val = TextureConverter.CopyTexture((Texture)(object)texture, colorSpace, dstNeedsAlpha, null);
		byte[] item = ImageConversion.EncodeToPNG(val);
		if (Application.isPlaying)
		{
			Object.Destroy((Object)(object)val);
		}
		else
		{
			Object.DestroyImmediate((Object)(object)val);
		}
		return (item, "image/png");
	}
}
public sealed class TextureExporter : ITextureExporter, IDisposable
{
	private readonly ITextureSerializer _textureSerializer;

	private readonly List<TextureExportParam> _exportingList = new List<TextureExportParam>();

	private readonly List<Texture2D> _disposables = new List<Texture2D>();

	public TextureExporter(ITextureSerializer textureSerializer)
	{
		_textureSerializer = textureSerializer;
	}

	public void Dispose()
	{
		foreach (Texture2D disposable in _disposables)
		{
			if (Application.isEditor)
			{
				Object.DestroyImmediate((Object)(object)disposable);
			}
			else
			{
				Object.Destroy((Object)(object)disposable);
			}
		}
	}

	private void PushDisposable(Texture2D disposable)
	{
		_disposables.Add(disposable);
	}

	public List<(Texture2D, ColorSpace)> Export()
	{
		List<(Texture2D, ColorSpace)> list = new List<(Texture2D, ColorSpace)>();
		for (int i = 0; i < _exportingList.Count; i++)
		{
			TextureExportParam textureExportParam = _exportingList[i];
			(Texture2D, bool) tuple = textureExportParam.Creator();
			var (val, _) = tuple;
			if (tuple.Item2)
			{
				PushDisposable(val);
			}
			list.Add((val, textureExportParam.ExportColorSpace));
		}
		return list;
	}

	public int RegisterExportingAsSRgb(Texture src, bool needsAlpha)
	{
		return RegisterExportingSimple(src, needsAlpha, isLinear: false);
	}

	public int RegisterExportingAsLinear(Texture src, bool needsAlpha)
	{
		return RegisterExportingSimple(src, needsAlpha, isLinear: true);
	}

	private int RegisterExportingSimple(Texture src, bool needsAlpha, bool isLinear)
	{
		if ((Object)(object)src == (Object)null)
		{
			return -1;
		}
		TextureExportTypes exportType = (isLinear ? TextureExportTypes.Linear : TextureExportTypes.Srgb);
		ColorSpace colorSpace = (isLinear ? ColorSpace.Linear : ColorSpace.sRGB);
		TextureExportParam textureExportParam = new TextureExportParam(exportType, colorSpace, src, null, 0f, needsAlpha, () => ConvertTextureSimple(src, needsAlpha, colorSpace));
		if (TryGetExistsParam(textureExportParam, out var existsIdx))
		{
			TextureExportParam textureExportParam2 = _exportingList[existsIdx];
			if (needsAlpha && !textureExportParam2.NeedsAlpha)
			{
				_exportingList[existsIdx] = textureExportParam;
				return existsIdx;
			}
			return existsIdx;
		}
		_exportingList.Add(textureExportParam);
		return _exportingList.Count - 1;
	}

	public int RegisterExportingAsCombinedGltfPbrParameterTextureFromUnityStandardTextures(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture)
	{
		if ((Object)(object)metallicSmoothTexture == (Object)null && (Object)(object)occlusionTexture == (Object)null)
		{
			return -1;
		}
		TextureExportParam textureExportParam = new TextureExportParam(TextureExportTypes.OcclusionMetallicRoughness, ColorSpace.Linear, metallicSmoothTexture, occlusionTexture, smoothness, needsAlpha: false, delegate
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(metallicSmoothTexture);
			_textureSerializer.ModifyTextureAssetBeforeExporting(occlusionTexture);
			return (OcclusionMetallicRoughnessConverter.Export(metallicSmoothTexture, smoothness, occlusionTexture), true);
		});
		if (TryGetExistsParam(textureExportParam, out var existsIdx))
		{
			return existsIdx;
		}
		_exportingList.Add(textureExportParam);
		return _exportingList.Count - 1;
	}

	public int RegisterExportingAsNormal(Texture src)
	{
		if ((Object)(object)src == (Object)null)
		{
			return -1;
		}
		TextureExportParam textureExportParam = new TextureExportParam(TextureExportTypes.Normal, ColorSpace.Linear, src, null, 0f, needsAlpha: false, delegate
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(src);
			return (NormalConverter.Export(src), true);
		});
		if (TryGetExistsParam(textureExportParam, out var existsIdx))
		{
			return existsIdx;
		}
		_exportingList.Add(textureExportParam);
		return _exportingList.Count - 1;
	}

	private (Texture2D, bool IsDisposable) ConvertTextureSimple(Texture src, bool needsAlpha, ColorSpace exportColorSpace)
	{
		Texture2D val = (Texture2D)(object)((src is Texture2D) ? src : null);
		bool item = false;
		if (_textureSerializer.CanExportAsEditorAssetFile((Texture)(object)val, exportColorSpace))
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(src);
		}
		else
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(src);
			val = TextureConverter.CopyTexture(src, exportColorSpace, needsAlpha, null);
			item = true;
		}
		return (val, item);
	}

	private bool TryGetExistsParam(TextureExportParam param, out int existsIdx)
	{
		existsIdx = _exportingList.FindIndex(param.EqualsAsKey);
		return existsIdx != -1;
	}
}
internal sealed class TextureExportParam
{
	public TextureExportTypes ExportType { get; }

	public ColorSpace ExportColorSpace { get; }

	public Texture PrimaryTexture { get; }

	public Texture SecondaryTexture { get; }

	public float OptionFactor { get; }

	public bool NeedsAlpha { get; set; }

	public Func<(Texture2D, bool IsDisposable)> Creator { get; set; }

	public TextureExportParam(TextureExportTypes exportType, ColorSpace exportColorSpace, Texture primaryTexture, Texture secondaryTexture, float optionFactor, bool needsAlpha, Func<(Texture2D, bool IsDisposable)> creator)
	{
		ExportType = exportType;
		ExportColorSpace = exportColorSpace;
		PrimaryTexture = primaryTexture;
		SecondaryTexture = secondaryTexture;
		OptionFactor = optionFactor;
		NeedsAlpha = needsAlpha;
		Creator = creator;
	}

	public bool EqualsAsKey(TextureExportParam other)
	{
		if (ExportType != other.ExportType)
		{
			return false;
		}
		switch (ExportType)
		{
		case TextureExportTypes.Srgb:
		case TextureExportTypes.Linear:
		case TextureExportTypes.Normal:
			return (Object)(object)PrimaryTexture == (Object)(object)other.PrimaryTexture;
		case TextureExportTypes.OcclusionMetallicRoughness:
			return (Object)(object)PrimaryTexture == (Object)(object)other.PrimaryTexture && (Object)(object)SecondaryTexture == (Object)(object)other.SecondaryTexture;
		default:
			throw new ArgumentOutOfRangeException();
		}
	}
}
internal enum TextureExportTypes
{
	Srgb,
	Linear,
	OcclusionMetallicRoughness,
	Normal
}
public sealed class DeserializingTextureInfo
{
	public byte[] ImageData { get; }

	public string DataMimeType { get; }

	public ColorSpace ColorSpace { get; }

	public bool UseMipmap { get; }

	public FilterMode FilterMode { get; }

	public TextureWrapMode WrapModeU { get; }

	public TextureWrapMode WrapModeV { get; }

	public TextureImportTypes ImportTypes { get; }

	public DeserializingTextureInfo(byte[] imageData, string dataMimeType, ColorSpace colorSpace, bool useMipmap, FilterMode filterMode, TextureWrapMode wrapModeU, TextureWrapMode wrapModeV)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		ImageData = imageData;
		DataMimeType = dataMimeType;
		ColorSpace = colorSpace;
		UseMipmap = useMipmap;
		FilterMode = filterMode;
		WrapModeU = wrapModeU;
		WrapModeV = wrapModeV;
	}

	public DeserializingTextureInfo(byte[] imageData, string dataMimeType, ColorSpace colorSpace, SamplerParam samplerParam, TextureImportTypes importTypes)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		ImageData = imageData;
		DataMimeType = dataMimeType;
		ColorSpace = colorSpace;
		UseMipmap = samplerParam.EnableMipMap;
		FilterMode = samplerParam.FilterMode;
		WrapModeU = samplerParam.WrapModesU;
		WrapModeV = samplerParam.WrapModesV;
		ImportTypes = importTypes;
	}
}
public interface ITextureDeserializer
{
	Task<Texture2D> LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller);
}
public sealed class KtxTextureDeserializer : ITextureDeserializer
{
	public async Task<Texture2D> LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller)
	{
		return null;
	}
}
public readonly struct SamplerParam
{
	public TextureWrapMode WrapModesU { get; }

	public TextureWrapMode WrapModesV { get; }

	public FilterMode FilterMode { get; }

	public bool EnableMipMap { get; }

	public static SamplerParam Default => new SamplerParam((TextureWrapMode)0, (TextureWrapMode)0, (FilterMode)1, enableMipMap: true);

	public SamplerParam(TextureWrapMode wrapModesU, TextureWrapMode wrapModesV, FilterMode filterMode, bool enableMipMap)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		WrapModesU = wrapModesU;
		WrapModesV = wrapModesV;
		FilterMode = filterMode;
		EnableMipMap = enableMipMap;
	}
}
public delegate Task<(byte[] binary, string mimeType)?> GetTextureBytesAsync();
public readonly struct TextureDescriptor
{
	public readonly string UnityObjectName;

	public readonly Vector2 Offset;

	public readonly Vector2 Scale;

	public readonly SamplerParam Sampler;

	public readonly TextureImportTypes TextureType;

	public readonly float MetallicFactor;

	public readonly float RoughnessFactor;

	public readonly GetTextureBytesAsync Index0;

	public readonly GetTextureBytesAsync Index1;

	public readonly GetTextureBytesAsync Index2;

	public readonly GetTextureBytesAsync Index3;

	public readonly GetTextureBytesAsync Index4;

	public readonly GetTextureBytesAsync Index5;

	public SubAssetKey SubAssetKey => new SubAssetKey(SubAssetKey.TextureType, UnityObjectName);

	public TextureDescriptor(string name, Vector2 offset, Vector2 scale, SamplerParam sampler, TextureImportTypes textureType, float metallicFactor, float roughnessFactor, GetTextureBytesAsync i0, GetTextureBytesAsync i1, GetTextureBytesAsync i2, GetTextureBytesAsync i3, GetTextureBytesAsync i4, GetTextureBytesAsync i5)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		if (string.IsNullOrEmpty(name))
		{
			throw new ArgumentNullException("name");
		}
		UnityObjectName = name;
		Offset = offset;
		Scale = scale;
		Sampler = sampler;
		TextureType = textureType;
		MetallicFactor = metallicFactor;
		RoughnessFactor = roughnessFactor;
		Index0 = i0;
		Index1 = i1;
		Index2 = i2;
		Index3 = i3;
		Index4 = i4;
		Index5 = i5;
	}
}
public sealed class TextureDescriptorSet
{
	private readonly Dictionary<SubAssetKey, TextureDescriptor> _texDescDict = new Dictionary<SubAssetKey, TextureDescriptor>();

	public void Add(TextureDescriptor texDesc)
	{
		if (!_texDescDict.ContainsKey(texDesc.SubAssetKey))
		{
			_texDescDict.Add(texDesc.SubAssetKey, texDesc);
		}
	}

	public IEnumerable<TextureDescriptor> GetEnumerable()
	{
		foreach (KeyValuePair<SubAssetKey, TextureDescriptor> item in _texDescDict)
		{
			yield return item.Value;
		}
	}
}
public class TextureFactory : IResponsibilityForDestroyObjects, IDisposable
{
	private readonly IReadOnlyDictionary<SubAssetKey, Texture> _externalMap;

	private readonly bool _isLegacySquaredRoughness;

	private readonly Dictionary<SubAssetKey, Texture> _textureCache = new Dictionary<SubAssetKey, Texture>();

	public ITextureDeserializer TextureDeserializer { get; }

	public IReadOnlyDictionary<SubAssetKey, Texture> ConvertedTextures => _textureCache;

	public IReadOnlyDictionary<SubAssetKey, Texture> ExternalTextures => _externalMap;

	public TextureFactory(ITextureDeserializer textureDeserializer, IReadOnlyDictionary<SubAssetKey, Texture> externalTextures, bool isLegacySquaredRoughness)
	{
		TextureDeserializer = textureDeserializer;
		_externalMap = externalTextures;
		_isLegacySquaredRoughness = isLegacySquaredRoughness;
	}

	public void Dispose()
	{
		foreach (var (subAssetKey2, o) in _textureCache)
		{
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)o);
		}
		_textureCache.Clear();
	}

	public void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take)
	{
		KeyValuePair<SubAssetKey, Texture>[] array = _textureCache.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			KeyValuePair<SubAssetKey, Texture> keyValuePair = array[i];
			var (key, obj) = (KeyValuePair<SubAssetKey, Texture>)(ref keyValuePair);
			take(key, (Object)(object)obj);
			_textureCache.Remove(key);
		}
	}

	public async Task<Texture> GetTextureAsync(TextureDescriptor texDesc, IAwaitCaller awaitCaller)
	{
		SubAssetKey subAssetKey = texDesc.SubAssetKey;
		if (_externalMap != null && _externalMap.TryGetValue(subAssetKey, out var externalTexture))
		{
			return externalTexture;
		}
		if (_textureCache.TryGetValue(subAssetKey, out var cachedTexture))
		{
			return cachedTexture;
		}
		switch (texDesc.TextureType)
		{
		case TextureImportTypes.NormalMap:
		{
			(byte[] binary, string mimeType)? data = await texDesc.Index0();
			Texture2D rawTexture = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(data?.binary, data?.mimeType, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			((Object)rawTexture).name = subAssetKey.Name;
			_textureCache.Add(subAssetKey, (Texture)(object)rawTexture);
			return (Texture)(object)rawTexture;
		}
		case TextureImportTypes.StandardMap:
		{
			Texture2D metallicRoughnessTexture = null;
			Texture2D occlusionTexture = null;
			if (texDesc.Index0 != null)
			{
				(byte[] binary, string mimeType)? data3 = await texDesc.Index0();
				metallicRoughnessTexture = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(data3?.binary, data3?.mimeType, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			}
			if (texDesc.Index1 != null)
			{
				(byte[] binary, string mimeType)? data4 = await texDesc.Index1();
				occlusionTexture = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(data4?.binary, data4?.mimeType, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			}
			Texture2D combinedTexture = OcclusionMetallicRoughnessConverter.Import(metallicRoughnessTexture, texDesc.MetallicFactor, texDesc.RoughnessFactor, occlusionTexture, _isLegacySquaredRoughness);
			((Object)combinedTexture).name = subAssetKey.Name;
			combinedTexture.SetSampler(in texDesc.Sampler);
			_textureCache.Add(subAssetKey, (Texture)(object)combinedTexture);
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)metallicRoughnessTexture);
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)occlusionTexture);
			return (Texture)(object)combinedTexture;
		}
		case TextureImportTypes.sRGB:
		{
			(byte[] binary, string mimeType)? data2 = await texDesc.Index0();
			Texture2D rawTexture3 = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(data2?.binary, data2?.mimeType, ColorSpace.sRGB, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			((Object)rawTexture3).name = subAssetKey.Name;
			_textureCache.Add(subAssetKey, (Texture)(object)rawTexture3);
			return (Texture)(object)rawTexture3;
		}
		case TextureImportTypes.Linear:
		{
			(byte[] binary, string mimeType)? data0 = await texDesc.Index0();
			Texture2D rawTexture2 = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(data0?.binary, data0?.mimeType, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			((Object)rawTexture2).name = subAssetKey.Name;
			_textureCache.Add(subAssetKey, (Texture)(object)rawTexture2);
			return (Texture)(object)rawTexture2;
		}
		default:
			throw new ArgumentOutOfRangeException();
		}
	}
}
public static class TextureImportName
{
	private const string NORMAL_SUFFIX = ".normal";

	private const string STANDARD_SUFFIX = ".standard";

	private const string LINEAR_SUFFIX = ".linear";

	public static string GetUnityObjectName(TextureImportTypes type, string gltfName, string uri)
	{
		switch (type)
		{
		case TextureImportTypes.StandardMap:
			return gltfName + ".standard";
		case TextureImportTypes.NormalMap:
			return gltfName + ".normal";
		case TextureImportTypes.Linear:
			return gltfName + ".linear";
		default:
			if (!string.IsNullOrEmpty(uri) && !uri.StartsWith("data:", StringComparison.Ordinal))
			{
				return Path.GetFileNameWithoutExtension(uri);
			}
			return gltfName;
		}
	}

	public static string RemoveSuffix(string src)
	{
		if (src.EndsWith(".normal"))
		{
			return src.Substring(0, src.Length - ".normal".Length);
		}
		if (src.EndsWith(".standard"))
		{
			return src.Substring(0, src.Length - ".standard".Length);
		}
		if (src.EndsWith(".linear"))
		{
			return src.Substring(0, src.Length - ".linear".Length);
		}
		return src;
	}
}
public enum TextureImportTypes
{
	sRGB,
	NormalMap,
	StandardMap,
	Linear
}
public sealed class UnitySupportedImageTypeDeserializer : ITextureDeserializer
{
	public async Task<Texture2D> LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller)
	{
		if (textureInfo.ImageData == null)
		{
			return null;
		}
		try
		{
			Texture2D texture = new Texture2D(2, 2, (TextureFormat)5, textureInfo.UseMipmap, textureInfo.ColorSpace == ColorSpace.Linear);
			ImageConversion.LoadImage(texture, textureInfo.ImageData);
			await awaitCaller.NextFrame();
			((Texture)texture).wrapModeU = textureInfo.WrapModeU;
			((Texture)texture).wrapModeV = textureInfo.WrapModeV;
			((Texture)texture).filterMode = textureInfo.FilterMode;
			return texture;
		}
		catch (Exception e)
		{
			Debug.LogException(e);
			return null;
		}
	}
}
public sealed class UnityTextureDeserializer : ITextureDeserializer
{
	private readonly UnitySupportedImageTypeDeserializer _unitySupportedDeserializer = new UnitySupportedImageTypeDeserializer();

	private readonly KtxTextureDeserializer _ktxTextureDeserializer = new KtxTextureDeserializer();

	public async Task<Texture2D> LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller)
	{
		Texture2D texture = null;
		switch (textureInfo.DataMimeType)
		{
		case "image/png":
			texture = await _unitySupportedDeserializer.LoadTextureAsync(textureInfo, awaitCaller);
			break;
		case "image/jpeg":
			texture = await _unitySupportedDeserializer.LoadTextureAsync(textureInfo, awaitCaller);
			break;
		case "image/ktx2":
			texture = await _ktxTextureDeserializer.LoadTextureAsync(textureInfo, awaitCaller);
			break;
		default:
			if (string.IsNullOrEmpty(textureInfo.DataMimeType))
			{
				Debug.Log((object)"Texture image MIME type is empty.");
			}
			else
			{
				Debug.Log((object)("Texture image MIME type `" + textureInfo.DataMimeType + "` is not supported."));
			}
			break;
		}
		if ((Object)(object)texture == (Object)null)
		{
			Debug.Log((object)"Failed to load texture from image data.");
			texture = new Texture2D(2, 2, (TextureFormat)5, textureInfo.UseMipmap, textureInfo.ColorSpace == ColorSpace.Linear);
		}
		return texture;
	}
}
internal static class TextureExtensions
{
	public static bool HasMipMap(this Texture texture)
	{
		Texture2D val = (Texture2D)(object)((texture is Texture2D) ? texture : null);
		if (val != null)
		{
			return ((Texture)val).mipmapCount > 1;
		}
		RenderTexture val2 = (RenderTexture)(object)((texture is RenderTexture) ? texture : null);
		if (val2 != null)
		{
			return val2.useMipMap;
		}
		return false;
	}

	public static void SetSampler(this Texture2D texture, in SamplerParam param)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)texture == (Object)null))
		{
			((Texture)texture).wrapModeU = param.WrapModesU;
			((Texture)texture).wrapModeV = param.WrapModesV;
			((Texture)texture).filterMode = param.FilterMode;
		}
	}
}
public static class Symbols
{
	public static bool VRM_DEVELOP => false;

	public static bool VRM_NORMALIZE_BLENDSHAPE_TANGENT => false;
}
public static class UnityObjectDestroyer
{
	public static void DestroyRuntimeOrEditor(Object o)
	{
		if (Application.isPlaying)
		{
			Object.Destroy(o);
		}
		else
		{
			Object.DestroyImmediate(o);
		}
	}
}

BepInEx/plugins/VRMShaders.GLTF.UniUnlit.Runtime.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[64]
		{
			0, 0, 0, 1, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 85, 110, 105, 85, 110, 108, 105, 116,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 85, 110, 108, 105, 116, 85, 116, 105,
			108, 46, 99, 115
		};
		result.TypesData = new byte[34]
		{
			0, 0, 0, 0, 29, 85, 110, 105, 71, 76,
			84, 70, 46, 85, 110, 105, 85, 110, 108, 105,
			116, 124, 85, 110, 105, 85, 110, 108, 105, 116,
			85, 116, 105, 108
		};
		result.TotalFiles = 1;
		result.TotalTypes = 1;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.UniUnlit;

public enum UniUnlitRenderMode
{
	Opaque,
	Cutout,
	Transparent
}
public enum UniUnlitCullMode
{
	Off = 0,
	Back = 2
}
public enum UniUnlitVertexColorBlendOp
{
	None,
	Multiply
}
public static class UniUnlitUtil
{
	public const string ShaderName = "UniGLTF/UniUnlit";

	public const string PropNameMainTex = "_MainTex";

	public const string PropNameColor = "_Color";

	public const string PropNameCutoff = "_Cutoff";

	public const string PropNameBlendMode = "_BlendMode";

	public const string PropNameCullMode = "_CullMode";

	[Obsolete("Use PropNameVColBlendMode")]
	public const string PropeNameVColBlendMode = "_VColBlendMode";

	public const string PropNameVColBlendMode = "_VColBlendMode";

	public const string PropNameSrcBlend = "_SrcBlend";

	public const string PropNameDstBlend = "_DstBlend";

	public const string PropNameZWrite = "_ZWrite";

	public const string PropNameStandardShadersRenderMode = "_Mode";

	public const string KeywordAlphaTestOn = "_ALPHATEST_ON";

	public const string KeywordAlphaBlendOn = "_ALPHABLEND_ON";

	public const string KeywordVertexColMul = "_VERTEXCOL_MUL";

	public const string TagRenderTypeKey = "RenderType";

	public const string TagRenderTypeValueOpaque = "Opaque";

	public const string TagRenderTypeValueTransparentCutout = "TransparentCutout";

	public const string TagRenderTypeValueTransparent = "Transparent";

	public static void SetRenderMode(Material material, UniUnlitRenderMode mode)
	{
		material.SetInt("_BlendMode", (int)mode);
	}

	public static void SetCullMode(Material material, UniUnlitCullMode mode)
	{
		material.SetInt("_CullMode", (int)mode);
	}

	public static void SetVColBlendMode(Material material, UniUnlitVertexColorBlendOp mode)
	{
		material.SetInt("_VColBlendMode", (int)mode);
	}

	public static UniUnlitRenderMode GetRenderMode(Material material)
	{
		return (UniUnlitRenderMode)material.GetInt("_BlendMode");
	}

	public static UniUnlitCullMode GetCullMode(Material material)
	{
		return (UniUnlitCullMode)material.GetInt("_CullMode");
	}

	public static UniUnlitVertexColorBlendOp GetVColBlendMode(Material material)
	{
		return (UniUnlitVertexColorBlendOp)material.GetInt("_VColBlendMode");
	}

	public static void ValidateProperties(Material material, bool isRenderModeChangedByUser = false)
	{
		SetupBlendMode(material, (UniUnlitRenderMode)material.GetFloat("_BlendMode"), isRenderModeChangedByUser);
		SetupVertexColorBlendOp(material, (UniUnlitVertexColorBlendOp)material.GetFloat("_VColBlendMode"));
	}

	private static void SetupBlendMode(Material material, UniUnlitRenderMode renderMode, bool isRenderModeChangedByUser = false)
	{
		switch (renderMode)
		{
		case UniUnlitRenderMode.Opaque:
			material.SetOverrideTag("RenderType", "Opaque");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			if (isRenderModeChangedByUser)
			{
				material.renderQueue = -1;
			}
			break;
		case UniUnlitRenderMode.Cutout:
			material.SetOverrideTag("RenderType", "TransparentCutout");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			SetKeyword(material, "_ALPHATEST_ON", required: true);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			if (isRenderModeChangedByUser)
			{
				material.renderQueue = 2450;
			}
			break;
		case UniUnlitRenderMode.Transparent:
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt("_SrcBlend", 5);
			material.SetInt("_DstBlend", 10);
			material.SetInt("_ZWrite", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: true);
			if (isRenderModeChangedByUser)
			{
				material.renderQueue = 3000;
			}
			break;
		}
	}

	private static void SetupVertexColorBlendOp(Material material, UniUnlitVertexColorBlendOp vColBlendOp)
	{
		switch (vColBlendOp)
		{
		case UniUnlitVertexColorBlendOp.None:
			SetKeyword(material, "_VERTEXCOL_MUL", required: false);
			break;
		case UniUnlitVertexColorBlendOp.Multiply:
			SetKeyword(material, "_VERTEXCOL_MUL", required: true);
			break;
		}
	}

	private static void SetKeyword(Material mat, string keyword, bool required)
	{
		if (required)
		{
			mat.EnableKeyword(keyword);
		}
		else
		{
			mat.DisableKeyword(keyword);
		}
	}
}

BepInEx/plugins/VRMShaders.VRM.IO.Runtime.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEditor;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[122]
		{
			0, 0, 0, 1, 0, 0, 0, 58, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 80, 114, 101, 83, 104, 97, 100, 101,
			114, 80, 114, 111, 112, 69, 120, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 48, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 86, 82, 77, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 83, 104,
			97, 100, 101, 114, 80, 114, 111, 112, 115, 46,
			99, 115
		};
		result.TypesData = new byte[142]
		{
			0, 0, 0, 0, 48, 85, 110, 105, 71, 76,
			84, 70, 46, 83, 104, 97, 100, 101, 114, 80,
			114, 111, 112, 69, 120, 112, 111, 114, 116, 101,
			114, 124, 80, 114, 101, 83, 104, 97, 100, 101,
			114, 80, 114, 111, 112, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 41, 85, 110,
			105, 71, 76, 84, 70, 46, 83, 104, 97, 100,
			101, 114, 80, 114, 111, 112, 69, 120, 112, 111,
			114, 116, 101, 114, 124, 83, 104, 97, 100, 101,
			114, 80, 114, 111, 112, 101, 114, 116, 121, 0,
			0, 0, 0, 38, 85, 110, 105, 71, 76, 84,
			70, 46, 83, 104, 97, 100, 101, 114, 80, 114,
			111, 112, 69, 120, 112, 111, 114, 116, 101, 114,
			124, 83, 104, 97, 100, 101, 114, 80, 114, 111,
			112, 115
		};
		result.TotalFiles = 2;
		result.TotalTypes = 3;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.ShaderPropExporter;

public static class PreShaderPropExporter
{
	private const string ShaderName = "VRM/MToon";

	private static ShaderProps VRM_MToon = new ShaderProps
	{
		Properties = new ShaderProperty[42]
		{
			new ShaderProperty("_Cutoff", ShaderPropertyType.Range),
			new ShaderProperty("_Color", ShaderPropertyType.Color),
			new ShaderProperty("_ShadeColor", ShaderPropertyType.Color),
			new ShaderProperty("_MainTex", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ShadeTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_BumpScale", ShaderPropertyType.Float),
			new ShaderProperty("_BumpMap", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ReceiveShadowRate", ShaderPropertyType.Range),
			new ShaderProperty("_ReceiveShadowTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ShadingGradeRate", ShaderPropertyType.Range),
			new ShaderProperty("_ShadingGradeTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ShadeShift", ShaderPropertyType.Range),
			new ShaderProperty("_ShadeToony", ShaderPropertyType.Range),
			new ShaderProperty("_LightColorAttenuation", ShaderPropertyType.Range),
			new ShaderProperty("_IndirectLightIntensity", ShaderPropertyType.Range),
			new ShaderProperty("_RimColor", ShaderPropertyType.Color),
			new ShaderProperty("_RimTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_RimLightingMix", ShaderPropertyType.Range),
			new ShaderProperty("_RimFresnelPower", ShaderPropertyType.Range),
			new ShaderProperty("_RimLift", ShaderPropertyType.Range),
			new ShaderProperty("_SphereAdd", ShaderPropertyType.TexEnv),
			new ShaderProperty("_EmissionColor", ShaderPropertyType.Color),
			new ShaderProperty("_EmissionMap", ShaderPropertyType.TexEnv),
			new ShaderProperty("_OutlineWidthTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_OutlineWidth", ShaderPropertyType.Range),
			new ShaderProperty("_OutlineScaledMaxDistance", ShaderPropertyType.Range),
			new ShaderProperty("_OutlineColor", ShaderPropertyType.Color),
			new ShaderProperty("_OutlineLightingMix", ShaderPropertyType.Range),
			new ShaderProperty("_UvAnimMaskTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_UvAnimScrollX", ShaderPropertyType.Float),
			new ShaderProperty("_UvAnimScrollY", ShaderPropertyType.Float),
			new ShaderProperty("_UvAnimRotation", ShaderPropertyType.Float),
			new ShaderProperty("_MToonVersion", ShaderPropertyType.Float),
			new ShaderProperty("_DebugMode", ShaderPropertyType.Float),
			new ShaderProperty("_BlendMode", ShaderPropertyType.Float),
			new ShaderProperty("_OutlineWidthMode", ShaderPropertyType.Float),
			new ShaderProperty("_OutlineColorMode", ShaderPropertyType.Float),
			new ShaderProperty("_CullMode", ShaderPropertyType.Float),
			new ShaderProperty("_OutlineCullMode", ShaderPropertyType.Float),
			new ShaderProperty("_SrcBlend", ShaderPropertyType.Float),
			new ShaderProperty("_DstBlend", ShaderPropertyType.Float),
			new ShaderProperty("_ZWrite", ShaderPropertyType.Float)
		}
	};

	public static ShaderProps GetPropsForMToon()
	{
		return VRM_MToon;
	}
}
public enum ShaderPropertyType
{
	TexEnv,
	Color,
	Range,
	Float,
	Vector
}
public struct ShaderProperty
{
	public string Key;

	public ShaderPropertyType ShaderPropertyType;

	public ShaderProperty(string key, ShaderPropertyType propType)
	{
		Key = key;
		ShaderPropertyType = propType;
	}
}
public class ShaderProps
{
	public ShaderProperty[] Properties;

	private static ShaderPropertyType ConvType(ShaderPropertyType src)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Expected I4, but got Unknown
		return (int)src switch
		{
			4 => ShaderPropertyType.TexEnv, 
			0 => ShaderPropertyType.Color, 
			2 => ShaderPropertyType.Float, 
			3 => ShaderPropertyType.Range, 
			1 => ShaderPropertyType.Vector, 
			_ => throw new NotImplementedException(), 
		};
	}

	public static ShaderProps FromShader(Shader shader)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		List<ShaderProperty> list = new List<ShaderProperty>();
		for (int i = 0; i < ShaderUtil.GetPropertyCount(shader); i++)
		{
			string propertyName = ShaderUtil.GetPropertyName(shader, i);
			ShaderPropertyType propertyType = ShaderUtil.GetPropertyType(shader, i);
			list.Add(new ShaderProperty(propertyName, ConvType(propertyType)));
		}
		return new ShaderProps
		{
			Properties = list.ToArray()
		};
	}
}

BepInEx/plugins/VRMShaders.VRM10.Format.Runtime.dll

Decompiled 2 months ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[74]
		{
			0, 0, 0, 3, 0, 0, 0, 66, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 70, 111, 114, 109, 97, 116, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 115, 77, 84, 111,
			111, 110, 92, 70, 111, 114, 109, 97, 116, 46,
			103, 46, 99, 115
		};
		result.TypesData = new byte[189]
		{
			0, 0, 0, 0, 51, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 109,
			97, 116, 101, 114, 105, 97, 108, 115, 95, 109,
			116, 111, 111, 110, 124, 84, 101, 120, 116, 117,
			114, 101, 73, 110, 102, 111, 0, 0, 0, 0,
			63, 85, 110, 105, 71, 76, 84, 70, 46, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			86, 82, 77, 67, 95, 109, 97, 116, 101, 114,
			105, 97, 108, 115, 95, 109, 116, 111, 111, 110,
			124, 83, 104, 97, 100, 105, 110, 103, 83, 104,
			105, 102, 116, 84, 101, 120, 116, 117, 114, 101,
			73, 110, 102, 111, 0, 0, 0, 0, 60, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 109, 97, 116, 101, 114, 105, 97,
			108, 115, 95, 109, 116, 111, 111, 110, 124, 86,
			82, 77, 67, 95, 109, 97, 116, 101, 114, 105,
			97, 108, 115, 95, 109, 116, 111, 111, 110
		};
		result.TotalFiles = 1;
		result.TotalTypes = 3;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.Extensions.VRMC_materials_mtoon;

public class TextureInfo
{
	public object Extensions;

	public object Extras;

	public int? Index;

	public int? TexCoord;
}
public class ShadingShiftTextureInfo
{
	public object Extensions;

	public object Extras;

	public int? Index;

	public int? TexCoord;

	public float? Scale;
}
public enum OutlineWidthMode
{
	none,
	worldCoordinates,
	screenCoordinates
}
public class VRMC_materials_mtoon
{
	public const string ExtensionName = "VRMC_materials_mtoon";

	public object Extensions;

	public object Extras;

	public string SpecVersion;

	public bool? TransparentWithZWrite;

	public int? RenderQueueOffsetNumber;

	public float[] ShadeColorFactor;

	public TextureInfo ShadeMultiplyTexture;

	public float? ShadingShiftFactor;

	public ShadingShiftTextureInfo ShadingShiftTexture;

	public float? ShadingToonyFactor;

	public float? GiEqualizationFactor;

	public float[] MatcapFactor;

	public TextureInfo MatcapTexture;

	public float[] ParametricRimColorFactor;

	public TextureInfo RimMultiplyTexture;

	public float? RimLightingMixFactor;

	public float? ParametricRimFresnelPowerFactor;

	public float? ParametricRimLiftFactor;

	public OutlineWidthMode OutlineWidthMode;

	public float? OutlineWidthFactor;

	public TextureInfo OutlineWidthMultiplyTexture;

	public float[] OutlineColorFactor;

	public float? OutlineLightingMixFactor;

	public TextureInfo UvAnimationMaskTexture;

	public float? UvAnimationScrollXSpeedFactor;

	public float? UvAnimationScrollYSpeedFactor;

	public float? UvAnimationRotationSpeedFactor;
}

BepInEx/plugins/VRMShaders.VRM10.MToon10.Runtime.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1228]
		{
			0, 0, 0, 1, 0, 0, 0, 73, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 77, 84, 111, 111, 110, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 58, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 86, 82,
			77, 49, 48, 92, 77, 84, 111, 111, 110, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			77, 84, 111, 111, 110, 49, 48, 67, 111, 110,
			116, 101, 120, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 59, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 86, 82, 77, 49, 48, 92,
			77, 84, 111, 111, 110, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 84, 111, 111,
			110, 49, 48, 77, 105, 103, 114, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 58, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 86, 82, 77, 49, 48, 92, 77, 84, 111,
			111, 110, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 84, 111, 111, 110, 86, 97,
			108, 105, 100, 97, 116, 111, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 103, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 77, 84, 111, 111, 110, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 116, 121, 83, 104, 97, 100, 101, 114,
			76, 97, 98, 92, 77, 84, 111, 111, 110, 68,
			101, 102, 105, 110, 101, 100, 86, 97, 108, 117,
			101, 115, 92, 77, 84, 111, 111, 110, 49, 48,
			69, 109, 105, 115, 115, 105, 118, 101, 77, 97,
			112, 75, 101, 121, 119, 111, 114, 100, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 101, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 86, 82,
			77, 49, 48, 92, 77, 84, 111, 111, 110, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 116, 121, 83, 104, 97, 100, 101,
			114, 76, 97, 98, 92, 77, 84, 111, 111, 110,
			68, 101, 102, 105, 110, 101, 100, 86, 97, 108,
			117, 101, 115, 92, 77, 84, 111, 111, 110, 49,
			48, 78, 111, 114, 109, 97, 108, 77, 97, 112,
			75, 101, 121, 119, 111, 114, 100, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 103, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 77, 84, 111, 111, 110, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 116, 121, 83, 104, 97, 100, 101, 114,
			76, 97, 98, 92, 77, 84, 111, 111, 110, 68,
			101, 102, 105, 110, 101, 100, 86, 97, 108, 117,
			101, 115, 92, 77, 84, 111, 111, 110, 49, 48,
			79, 117, 116, 108, 105, 110, 101, 77, 111, 100,
			101, 75, 101, 121, 119, 111, 114, 100, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 104, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 86, 82,
			77, 49, 48, 92, 77, 84, 111, 111, 110, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 116, 121, 83, 104, 97, 100, 101,
			114, 76, 97, 98, 92, 77, 84, 111, 111, 110,
			68, 101, 102, 105, 110, 101, 100, 86, 97, 108,
			117, 101, 115, 92, 77, 84, 111, 111, 110, 49,
			48, 80, 97, 114, 97, 109, 101, 116, 101, 114,
			77, 97, 112, 75, 101, 121, 119, 111, 114, 100,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			98, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			86, 82, 77, 49, 48, 92, 77, 84, 111, 111,
			110, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 116, 121, 83, 104, 97,
			100, 101, 114, 76, 97, 98, 92, 77, 84, 111,
			111, 110, 68, 101, 102, 105, 110, 101, 100, 86,
			97, 108, 117, 101, 115, 92, 77, 84, 111, 111,
			110, 49, 48, 82, 105, 109, 77, 97, 112, 75,
			101, 121, 119, 111, 114, 100, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 81, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 86, 82, 77, 49,
			48, 92, 77, 84, 111, 111, 110, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 116, 121, 83, 104, 97, 100, 101, 114, 76,
			97, 98, 92, 80, 114, 111, 112, 101, 114, 116,
			105, 101, 115, 92, 77, 84, 111, 111, 110, 49,
			48, 77, 101, 116, 97, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 87, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 86, 82, 77, 49, 48,
			92, 77, 84, 111, 111, 110, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			116, 121, 83, 104, 97, 100, 101, 114, 76, 97,
			98, 92, 80, 114, 111, 112, 101, 114, 116, 105,
			101, 115, 92, 77, 84, 111, 111, 110, 49, 48,
			80, 114, 111, 112, 101, 114, 116, 105, 101, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			103, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			86, 82, 77, 49, 48, 92, 77, 84, 111, 111,
			110, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 116, 121, 83, 104, 97,
			100, 101, 114, 76, 97, 98, 92, 83, 104, 97,
			100, 101, 114, 76, 97, 98, 68, 101, 102, 105,
			110, 101, 100, 86, 97, 108, 117, 101, 115, 92,
			85, 110, 105, 116, 121, 65, 108, 112, 104, 97,
			77, 111, 100, 101, 75, 101, 121, 119, 111, 114,
			100, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 96, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 86, 82, 77, 49, 48, 92, 77, 84, 111,
			111, 110, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 116, 121, 83, 104,
			97, 100, 101, 114, 76, 97, 98, 92, 83, 104,
			97, 100, 101, 114, 76, 97, 98, 68, 101, 102,
			105, 110, 101, 100, 86, 97, 108, 117, 101, 115,
			92, 85, 110, 105, 116, 121, 82, 101, 110, 100,
			101, 114, 84, 97, 103, 46, 99, 115
		};
		result.TypesData = new byte[737]
		{
			0, 0, 0, 0, 51, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 46, 86, 82, 77, 49,
			48, 46, 77, 84, 111, 111, 110, 49, 48, 46,
			82, 117, 110, 116, 105, 109, 101, 124, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			47, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 46, 86, 82, 77, 49, 48, 46, 77, 84,
			111, 111, 110, 49, 48, 46, 82, 117, 110, 116,
			105, 109, 101, 124, 77, 84, 111, 111, 110, 49,
			48, 67, 111, 110, 116, 101, 120, 116, 0, 0,
			0, 0, 48, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 46, 86, 82, 77, 49, 48, 46,
			77, 84, 111, 111, 110, 49, 48, 46, 82, 117,
			110, 116, 105, 109, 101, 124, 77, 84, 111, 111,
			110, 49, 48, 77, 105, 103, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 47, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 46, 86, 82, 77,
			49, 48, 46, 77, 84, 111, 111, 110, 49, 48,
			46, 82, 117, 110, 116, 105, 109, 101, 124, 77,
			84, 111, 111, 110, 86, 97, 108, 105, 100, 97,
			116, 111, 114, 0, 0, 0, 0, 58, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 46, 86,
			82, 77, 49, 48, 46, 77, 84, 111, 111, 110,
			49, 48, 46, 82, 117, 110, 116, 105, 109, 101,
			124, 77, 84, 111, 111, 110, 49, 48, 69, 109,
			105, 115, 115, 105, 118, 101, 77, 97, 112, 75,
			101, 121, 119, 111, 114, 100, 0, 0, 0, 0,
			56, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 46, 86, 82, 77, 49, 48, 46, 77, 84,
			111, 111, 110, 49, 48, 46, 82, 117, 110, 116,
			105, 109, 101, 124, 77, 84, 111, 111, 110, 49,
			48, 78, 111, 114, 109, 97, 108, 77, 97, 112,
			75, 101, 121, 119, 111, 114, 100, 0, 0, 0,
			0, 58, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 46, 86, 82, 77, 49, 48, 46, 77,
			84, 111, 111, 110, 49, 48, 46, 82, 117, 110,
			116, 105, 109, 101, 124, 77, 84, 111, 111, 110,
			49, 48, 79, 117, 116, 108, 105, 110, 101, 77,
			111, 100, 101, 75, 101, 121, 119, 111, 114, 100,
			0, 0, 0, 0, 59, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 46, 86, 82, 77, 49,
			48, 46, 77, 84, 111, 111, 110, 49, 48, 46,
			82, 117, 110, 116, 105, 109, 101, 124, 77, 84,
			111, 111, 110, 49, 48, 80, 97, 114, 97, 109,
			101, 116, 101, 114, 77, 97, 112, 75, 101, 121,
			119, 111, 114, 100, 0, 0, 0, 0, 53, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 46,
			86, 82, 77, 49, 48, 46, 77, 84, 111, 111,
			110, 49, 48, 46, 82, 117, 110, 116, 105, 109,
			101, 124, 77, 84, 111, 111, 110, 49, 48, 82,
			105, 109, 77, 97, 112, 75, 101, 121, 119, 111,
			114, 100, 0, 0, 0, 0, 44, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 46, 86, 82,
			77, 49, 48, 46, 77, 84, 111, 111, 110, 49,
			48, 46, 82, 117, 110, 116, 105, 109, 101, 124,
			77, 84, 111, 111, 110, 49, 48, 77, 101, 116,
			97, 0, 0, 0, 0, 50, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 46, 86, 82, 77,
			49, 48, 46, 77, 84, 111, 111, 110, 49, 48,
			46, 82, 117, 110, 116, 105, 109, 101, 124, 77,
			84, 111, 111, 110, 49, 48, 80, 114, 111, 112,
			101, 114, 116, 105, 101, 115, 0, 0, 0, 0,
			54, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 46, 86, 82, 77, 49, 48, 46, 77, 84,
			111, 111, 110, 49, 48, 46, 82, 117, 110, 116,
			105, 109, 101, 124, 85, 110, 105, 116, 121, 65,
			108, 112, 104, 97, 77, 111, 100, 101, 75, 101,
			121, 119, 111, 114, 100, 0, 0, 0, 0, 47,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			46, 86, 82, 77, 49, 48, 46, 77, 84, 111,
			111, 110, 49, 48, 46, 82, 117, 110, 116, 105,
			109, 101, 124, 85, 110, 105, 116, 121, 82, 101,
			110, 100, 101, 114, 84, 97, 103
		};
		result.TotalFiles = 13;
		result.TotalTypes = 13;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VRMShaders.VRM10.MToon10.Runtime;

public static class MaterialExtensions
{
	public static void SetKeyword(this Material mat, string keyword, bool isEnabled)
	{
		if (isEnabled)
		{
			mat.EnableKeyword(keyword);
		}
		else
		{
			mat.DisableKeyword(keyword);
		}
	}

	public static int GetInt(this Material mat, MToon10Prop prop)
	{
		return mat.GetInt(prop.ToUnityShaderLabName());
	}

	public static void SetInt(this Material mat, MToon10Prop prop, int val)
	{
		mat.SetInt(prop.ToUnityShaderLabName(), val);
	}

	public static Texture GetTexture(this Material mat, MToon10Prop prop)
	{
		return mat.GetTexture(prop.ToUnityShaderLabName());
	}

	public static Vector2 GetTextureScale(this Material mat, MToon10Prop prop)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		return mat.GetTextureScale(prop.ToUnityShaderLabName());
	}

	public static Vector2 GetTextureOffset(this Material mat, MToon10Prop prop)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		return mat.GetTextureOffset(prop.ToUnityShaderLabName());
	}

	public static float GetFloat(this Material mat, MToon10Prop prop)
	{
		return mat.GetFloat(prop.ToUnityShaderLabName());
	}

	public static Color GetColor(this Material mat, MToon10Prop prop)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		return mat.GetColor(prop.ToUnityShaderLabName());
	}
}
public sealed class MToon10Context
{
	private readonly Material _material;

	public MToon10AlphaMode AlphaMode => (MToon10AlphaMode)_material.GetInt(MToon10Prop.AlphaMode);

	public MToon10TransparentWithZWriteMode TransparentWithZWriteMode => (MToon10TransparentWithZWriteMode)_material.GetInt(MToon10Prop.TransparentWithZWrite);

	public float AlphaCutoff => _material.GetFloat(MToon10Prop.AlphaCutoff);

	public int RenderQueueOffsetNumber => _material.GetInt(MToon10Prop.RenderQueueOffsetNumber);

	public MToon10DoubleSidedMode DoubleSidedMode => (MToon10DoubleSidedMode)_material.GetInt(MToon10Prop.DoubleSided);

	public Color BaseColorFactorSrgb => _material.GetColor(MToon10Prop.BaseColorFactor);

	public Texture BaseColorTexture => _material.GetTexture(MToon10Prop.BaseColorTexture);

	public Color ShadeColorFactorSrgb => _material.GetColor(MToon10Prop.ShadeColorFactor);

	public Texture ShadeColorTexture => _material.GetTexture(MToon10Prop.ShadeColorTexture);

	public Texture NormalTexture => _material.GetTexture(MToon10Prop.NormalTexture);

	public float NormalTextureScale => _material.GetFloat(MToon10Prop.NormalTextureScale);

	public float ShadingShiftFactor => _material.GetFloat(MToon10Prop.ShadingShiftFactor);

	public Texture ShadingShiftTexture => _material.GetTexture(MToon10Prop.ShadingShiftTexture);

	public float ShadingShiftTextureScale => _material.GetFloat(MToon10Prop.ShadingShiftTextureScale);

	public float ShadingToonyFactor => _material.GetFloat(MToon10Prop.ShadingToonyFactor);

	public float GiEqualizationFactor => _material.GetFloat(MToon10Prop.GiEqualizationFactor);

	public Color EmissiveFactorLinear => _material.GetColor(MToon10Prop.EmissiveFactor);

	public Texture EmissiveTexture => _material.GetTexture(MToon10Prop.EmissiveTexture);

	public Color MatcapColorFactorSrgb => _material.GetColor(MToon10Prop.MatcapColorFactor);

	public Texture MatcapTexture => _material.GetTexture(MToon10Prop.MatcapTexture);

	public Color ParametricRimColorFactorSrgb => _material.GetColor(MToon10Prop.ParametricRimColorFactor);

	public float ParametricRimFresnelPowerFactor => _material.GetFloat(MToon10Prop.ParametricRimFresnelPowerFactor);

	public float ParametricRimLiftFactor => _material.GetFloat(MToon10Prop.ParametricRimLiftFactor);

	public Texture RimMultiplyTexture => _material.GetTexture(MToon10Prop.RimMultiplyTexture);

	public float RimLightingMixFactor => _material.GetFloat(MToon10Prop.RimLightingMixFactor);

	public MToon10OutlineMode OutlineWidthMode => (MToon10OutlineMode)_material.GetInt(MToon10Prop.OutlineWidthMode);

	public float OutlineWidthFactor => _material.GetFloat(MToon10Prop.OutlineWidthFactor);

	public Texture OutlineWidthMultiplyTexture => _material.GetTexture(MToon10Prop.OutlineWidthMultiplyTexture);

	public Color OutlineColorFactorSrgb => _material.GetColor(MToon10Prop.OutlineColorFactor);

	public float OutlineLightingMixFactor => _material.GetFloat(MToon10Prop.OutlineLightingMixFactor);

	public Texture UvAnimationMaskTexture => _material.GetTexture(MToon10Prop.UvAnimationMaskTexture);

	public float UvAnimationScrollXSpeedFactor => _material.GetFloat(MToon10Prop.UvAnimationScrollXSpeedFactor);

	public float UvAnimationScrollYSpeedFactor => _material.GetFloat(MToon10Prop.UvAnimationScrollYSpeedFactor);

	public float UvAnimationRotationSpeedFactor => _material.GetFloat(MToon10Prop.UvAnimationRotationSpeedFactor);

	public Vector2 TextureScale => _material.GetTextureScale(MToon10Prop.BaseColorTexture);

	public Vector2 TextureOffset => _material.GetTextureOffset(MToon10Prop.BaseColorTexture);

	public MToon10Context(Material material)
	{
		_material = material;
	}

	public void Validate()
	{
		new MToonValidator(_material).Validate();
	}
}
public static class MToon10Migrator
{
	public static float MigrateToShadingToony(float shadingToony0X, float shadingShift0X)
	{
		var (num, num2) = GetShadingRange0X(shadingToony0X, shadingShift0X);
		return Mathf.Clamp((2f - (num2 - num)) * 0.5f, 0f, 1f);
	}

	public static float MigrateToShadingShift(float shadingToony0X, float shadingShift0X)
	{
		var (num, num2) = GetShadingRange0X(shadingToony0X, shadingShift0X);
		return Mathf.Clamp((num2 + num) * 0.5f * -1f, -1f, 1f);
	}

	public static float MigrateToGiEqualization(float giIntensity0X)
	{
		return Mathf.Clamp01(1f - giIntensity0X);
	}

	private static (float min, float max) GetShadingRange0X(float shadingToony0X, float shadingShift0X)
	{
		float item = Mathf.Lerp(1f, shadingShift0X, shadingToony0X);
		return (shadingShift0X, item);
	}
}
public sealed class MToonValidator
{
	private readonly Material _material;

	public MToonValidator(Material material)
	{
		_material = material;
	}

	public void Validate()
	{
		MToon10AlphaMode @int = (MToon10AlphaMode)_material.GetInt(MToon10Prop.AlphaMode);
		MToon10TransparentWithZWriteMode int2 = (MToon10TransparentWithZWriteMode)_material.GetInt(MToon10Prop.TransparentWithZWrite);
		int int3 = _material.GetInt(MToon10Prop.RenderQueueOffsetNumber);
		MToon10DoubleSidedMode int4 = (MToon10DoubleSidedMode)_material.GetInt(MToon10Prop.DoubleSided);
		SetUnityShaderPassSettings(_material, @int, int2, int3, int4);
		SetUnityShaderVariants(_material);
	}

	private static void SetUnityShaderPassSettings(Material material, MToon10AlphaMode alphaMode, MToon10TransparentWithZWriteMode zWriteMode, int renderQueueOffset, MToon10DoubleSidedMode doubleSidedMode)
	{
		material.SetInt(MToon10Prop.AlphaMode, (int)alphaMode);
		material.SetInt(MToon10Prop.TransparentWithZWrite, (int)zWriteMode);
		material.SetInt(MToon10Prop.DoubleSided, (int)doubleSidedMode);
		switch (alphaMode)
		{
		case MToon10AlphaMode.Opaque:
			material.SetOverrideTag("RenderType", "Opaque");
			material.SetInt(MToon10Prop.UnitySrcBlend, 1);
			material.SetInt(MToon10Prop.UnityDstBlend, 0);
			material.SetInt(MToon10Prop.UnityZWrite, 1);
			material.SetInt(MToon10Prop.UnityAlphaToMask, 0);
			renderQueueOffset = 0;
			material.renderQueue = 2000;
			break;
		case MToon10AlphaMode.Cutout:
			material.SetOverrideTag("RenderType", "TransparentCutout");
			material.SetInt(MToon10Prop.UnitySrcBlend, 1);
			material.SetInt(MToon10Prop.UnityDstBlend, 0);
			material.SetInt(MToon10Prop.UnityZWrite, 1);
			material.SetInt(MToon10Prop.UnityAlphaToMask, 1);
			renderQueueOffset = 0;
			material.renderQueue = 2450;
			break;
		case MToon10AlphaMode.Transparent:
			if (zWriteMode == MToon10TransparentWithZWriteMode.Off)
			{
				material.SetOverrideTag("RenderType", "Transparent");
				material.SetInt(MToon10Prop.UnitySrcBlend, 5);
				material.SetInt(MToon10Prop.UnityDstBlend, 10);
				material.SetInt(MToon10Prop.UnityZWrite, 0);
				material.SetInt(MToon10Prop.UnityAlphaToMask, 0);
				renderQueueOffset = Mathf.Clamp(renderQueueOffset, -9, 0);
				material.renderQueue = 3000 + renderQueueOffset;
				break;
			}
			if (zWriteMode != MToon10TransparentWithZWriteMode.On)
			{
				goto default;
			}
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt(MToon10Prop.UnitySrcBlend, 5);
			material.SetInt(MToon10Prop.UnityDstBlend, 10);
			material.SetInt(MToon10Prop.UnityZWrite, 1);
			material.SetInt(MToon10Prop.UnityAlphaToMask, 0);
			renderQueueOffset = Mathf.Clamp(renderQueueOffset, 0, 9);
			material.renderQueue = 2501 + renderQueueOffset;
			break;
		default:
			throw new ArgumentOutOfRangeException("alphaMode", alphaMode, null);
		}
		switch (doubleSidedMode)
		{
		case MToon10DoubleSidedMode.Off:
			material.SetInt(MToon10Prop.UnityCullMode, 2);
			break;
		case MToon10DoubleSidedMode.On:
			material.SetInt(MToon10Prop.UnityCullMode, 0);
			break;
		default:
			throw new ArgumentOutOfRangeException("doubleSidedMode", doubleSidedMode, null);
		}
		material.SetInt(MToon10Prop.RenderQueueOffsetNumber, renderQueueOffset);
	}

	private static void SetUnityCullingSettings(Material material, MToon10DoubleSidedMode doubleSidedMode)
	{
	}

	private static void SetUnityShaderVariants(Material material)
	{
		material.SetKeyword("_ALPHATEST_ON", material.GetInt(MToon10Prop.AlphaMode) == 1);
		material.SetKeyword("_ALPHABLEND_ON", material.GetInt(MToon10Prop.AlphaMode) == 2);
		material.SetKeyword("_ALPHAPREMULTIPLY_ON", isEnabled: false);
		material.SetKeyword("_NORMALMAP", (Object)(object)material.GetTexture(MToon10Prop.NormalTexture) != (Object)null);
		material.SetKeyword("_MTOON_EMISSIVEMAP", (Object)(object)material.GetTexture(MToon10Prop.EmissiveTexture) != (Object)null);
		material.SetKeyword("_MTOON_RIMMAP", (Object)(object)material.GetTexture(MToon10Prop.MatcapTexture) != (Object)null || (Object)(object)material.GetTexture(MToon10Prop.RimMultiplyTexture) != (Object)null);
		material.SetKeyword("_MTOON_PARAMETERMAP", (Object)(object)material.GetTexture(MToon10Prop.ShadingShiftTexture) != (Object)null || (Object)(object)material.GetTexture(MToon10Prop.OutlineWidthMultiplyTexture) != (Object)null || (Object)(object)material.GetTexture(MToon10Prop.UvAnimationMaskTexture) != (Object)null);
		material.SetKeyword("_MTOON_OUTLINE_WORLD", material.GetInt(MToon10Prop.OutlineWidthMode) == 1);
		material.SetKeyword("_MTOON_OUTLINE_SCREEN", material.GetInt(MToon10Prop.OutlineWidthMode) == 2);
	}
}
public enum MToon10AlphaMode
{
	Opaque,
	Cutout,
	Transparent
}
public enum MToon10DoubleSidedMode
{
	Off,
	On
}
public static class MToon10EmissiveMapKeyword
{
	public const string On = "_MTOON_EMISSIVEMAP";
}
public static class MToon10NormalMapKeyword
{
	public const string On = "_NORMALMAP";
}
public enum MToon10OutlineMode
{
	None,
	World,
	Screen
}
public static class MToon10OutlineModeKeyword
{
	public const string World = "_MTOON_OUTLINE_WORLD";

	public const string Screen = "_MTOON_OUTLINE_SCREEN";
}
public static class MToon10ParameterMapKeyword
{
	public const string On = "_MTOON_PARAMETERMAP";
}
public static class MToon10RimMapKeyword
{
	public const string On = "_MTOON_RIMMAP";
}
public enum MToon10TransparentWithZWriteMode
{
	Off,
	On
}
public static class MToon10Meta
{
	public static readonly string UnityShaderName = "VRM10/MToon10";

	public static readonly string URPUnityShaderName = "VRM10/Universal Render Pipeline/MToon10";
}
public enum MToon10Prop
{
	AlphaMode,
	TransparentWithZWrite,
	AlphaCutoff,
	RenderQueueOffsetNumber,
	DoubleSided,
	BaseColorFactor,
	BaseColorTexture,
	ShadeColorFactor,
	ShadeColorTexture,
	NormalTexture,
	NormalTextureScale,
	ShadingShiftFactor,
	ShadingShiftTexture,
	ShadingShiftTextureScale,
	ShadingToonyFactor,
	GiEqualizationFactor,
	EmissiveFactor,
	EmissiveTexture,
	MatcapColorFactor,
	MatcapTexture,
	ParametricRimColorFactor,
	ParametricRimFresnelPowerFactor,
	ParametricRimLiftFactor,
	RimMultiplyTexture,
	RimLightingMixFactor,
	OutlineWidthMode,
	OutlineWidthFactor,
	OutlineWidthMultiplyTexture,
	OutlineColorFactor,
	OutlineLightingMixFactor,
	UvAnimationMaskTexture,
	UvAnimationScrollXSpeedFactor,
	UvAnimationScrollYSpeedFactor,
	UvAnimationRotationSpeedFactor,
	UnityCullMode,
	UnitySrcBlend,
	UnityDstBlend,
	UnityZWrite,
	UnityAlphaToMask,
	EditorEditMode
}
public static class MToon10Properties
{
	private static readonly Dictionary<MToon10Prop, string> _unityShaderLabNames = new Dictionary<MToon10Prop, string>
	{
		[MToon10Prop.AlphaMode] = "_AlphaMode",
		[MToon10Prop.TransparentWithZWrite] = "_TransparentWithZWrite",
		[MToon10Prop.AlphaCutoff] = "_Cutoff",
		[MToon10Prop.RenderQueueOffsetNumber] = "_RenderQueueOffset",
		[MToon10Prop.DoubleSided] = "_DoubleSided",
		[MToon10Prop.BaseColorFactor] = "_Color",
		[MToon10Prop.BaseColorTexture] = "_MainTex",
		[MToon10Prop.ShadeColorFactor] = "_ShadeColor",
		[MToon10Prop.ShadeColorTexture] = "_ShadeTex",
		[MToon10Prop.NormalTexture] = "_BumpMap",
		[MToon10Prop.NormalTextureScale] = "_BumpScale",
		[MToon10Prop.ShadingShiftFactor] = "_ShadingShiftFactor",
		[MToon10Prop.ShadingShiftTexture] = "_ShadingShiftTex",
		[MToon10Prop.ShadingShiftTextureScale] = "_ShadingShiftTexScale",
		[MToon10Prop.ShadingToonyFactor] = "_ShadingToonyFactor",
		[MToon10Prop.GiEqualizationFactor] = "_GiEqualization",
		[MToon10Prop.EmissiveFactor] = "_EmissionColor",
		[MToon10Prop.EmissiveTexture] = "_EmissionMap",
		[MToon10Prop.MatcapColorFactor] = "_MatcapColor",
		[MToon10Prop.MatcapTexture] = "_MatcapTex",
		[MToon10Prop.ParametricRimColorFactor] = "_RimColor",
		[MToon10Prop.ParametricRimFresnelPowerFactor] = "_RimFresnelPower",
		[MToon10Prop.ParametricRimLiftFactor] = "_RimLift",
		[MToon10Prop.RimMultiplyTexture] = "_RimTex",
		[MToon10Prop.RimLightingMixFactor] = "_RimLightingMix",
		[MToon10Prop.OutlineWidthMode] = "_OutlineWidthMode",
		[MToon10Prop.OutlineWidthFactor] = "_OutlineWidth",
		[MToon10Prop.OutlineWidthMultiplyTexture] = "_OutlineWidthTex",
		[MToon10Prop.OutlineColorFactor] = "_OutlineColor",
		[MToon10Prop.OutlineLightingMixFactor] = "_OutlineLightingMix",
		[MToon10Prop.UvAnimationMaskTexture] = "_UvAnimMaskTex",
		[MToon10Prop.UvAnimationScrollXSpeedFactor] = "_UvAnimScrollXSpeed",
		[MToon10Prop.UvAnimationScrollYSpeedFactor] = "_UvAnimScrollYSpeed",
		[MToon10Prop.UvAnimationRotationSpeedFactor] = "_UvAnimRotationSpeed",
		[MToon10Prop.UnityCullMode] = "_M_CullMode",
		[MToon10Prop.UnitySrcBlend] = "_M_SrcBlend",
		[MToon10Prop.UnityDstBlend] = "_M_DstBlend",
		[MToon10Prop.UnityZWrite] = "_M_ZWrite",
		[MToon10Prop.UnityAlphaToMask] = "_M_AlphaToMask",
		[MToon10Prop.EditorEditMode] = "_M_EditMode"
	};

	public static IReadOnlyDictionary<MToon10Prop, string> UnityShaderLabNames => _unityShaderLabNames;

	public static string ToUnityShaderLabName(this MToon10Prop prop)
	{
		return UnityShaderLabNames[prop];
	}
}
public static class UnityAlphaModeKeyword
{
	public const string AlphaTest = "_ALPHATEST_ON";

	public const string AlphaBlend = "_ALPHABLEND_ON";

	public const string AlphaPremultiply = "_ALPHAPREMULTIPLY_ON";
}
public enum UnityAlphaToMaskMode
{
	Off,
	On
}
public enum UnityCullMode
{
	Off = 0,
	Back = 2
}
public static class UnityRenderTag
{
	public const string Key = "RenderType";

	public const string OpaqueValue = "Opaque";

	public const string TransparentCutoutValue = "TransparentCutout";

	public const string TransparentValue = "Transparent";
}
public enum UnityZWriteMode
{
	Off,
	On
}