Decompiled source of CrowdControl AleAndTaleTavern v1.0.5

BepInEx/plugins/CrowdControl.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Logging;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
using HarmonyLib;
using MyBox;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Steamworks;
using TMPro;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("LethalCompanyCrowdControlMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LethalCompanyCrowdControlMod")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d4f6b961-e8ae-4e4b-950c-37644e42d4ca")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace BepinControl;

public enum TimedType
{
	HIGH_FOV,
	LOW_FOV,
	LIMIT_FPS,
	LIMIT_RENDER,
	THRID_PERSON,
	MODEL_SIZE
}
public class Timed
{
	public TimedType type;

	private float old;

	public static byte originalFOV = 80;

	public static int originalFPSLimit = 0;

	public static float originalRenderLimit = 0f;

	private static Dictionary<string, object> customVariables = new Dictionary<string, object>();

	private static int frames = 0;

	public static T GetCustomVariable<T>(string key)
	{
		if (customVariables.TryGetValue(key, out var value))
		{
			return (T)value;
		}
		throw new KeyNotFoundException("Custom variable with key '" + key + "' not found.");
	}

	public void SetCustomVariables(Dictionary<string, object> variables)
	{
		customVariables = variables;
	}

	public Timed(TimedType t)
	{
		type = t;
	}

	public void addEffect()
	{
		switch (type)
		{
		case TimedType.HIGH_FOV:
		case TimedType.LOW_FOV:
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				AppSettingsManager instance2 = Singleton<AppSettingsManager>.Instance;
				originalFOV = instance2.appSettings.video.fov;
				instance2.appSettings.video.fov = (byte)((type == TimedType.HIGH_FOV) ? 120u : 30u);
				instance2.InvokeSettingsChange();
				CrowdDelegates.callFunc(instance2, "ApplySettings", false);
			});
			break;
		case TimedType.LIMIT_FPS:
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
				originalFPSLimit = instance.appSettings.video.fpsLimit;
				instance.appSettings.video.fpsLimit = 10;
				instance.InvokeSettingsChange();
				CrowdDelegates.callFunc(instance, "ApplySettings", false);
			});
			break;
		case TimedType.LIMIT_RENDER:
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				AppSettingsManager instance3 = Singleton<AppSettingsManager>.Instance;
				originalRenderLimit = instance3.appSettings.video.renderDist;
				instance3.appSettings.video.renderDist = 6f;
				instance3.InvokeSettingsChange();
				CrowdDelegates.callFunc(instance3, "ApplySettings", false);
			});
			break;
		case TimedType.THRID_PERSON:
			CrowdDelegates.EnableThirdPerson();
			break;
		case TimedType.MODEL_SIZE:
			break;
		}
	}

	public static bool removeEffect(TimedType etype)
	{
		try
		{
			switch (etype)
			{
			case TimedType.HIGH_FOV:
			case TimedType.LOW_FOV:
				CrowdControlMod.ActionQueue.Enqueue(delegate
				{
					try
					{
						AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
						instance.appSettings.video.fov = originalFOV;
						instance.InvokeSettingsChange();
						CrowdDelegates.callFunc(instance, "ApplySettings", false);
					}
					catch (Exception ex2)
					{
						CrowdControlMod.mls.LogInfo((object)ex2.ToString());
						removeEffect(etype);
					}
				});
				break;
			case TimedType.LIMIT_FPS:
				CrowdControlMod.ActionQueue.Enqueue(delegate
				{
					try
					{
						AppSettingsManager instance2 = Singleton<AppSettingsManager>.Instance;
						instance2.appSettings.video.fpsLimit = originalFPSLimit;
						instance2.InvokeSettingsChange();
						CrowdDelegates.callFunc(instance2, "ApplySettings", false);
					}
					catch (Exception ex3)
					{
						CrowdControlMod.mls.LogInfo((object)ex3.ToString());
						removeEffect(etype);
					}
				});
				break;
			case TimedType.LIMIT_RENDER:
				CrowdControlMod.ActionQueue.Enqueue(delegate
				{
					try
					{
						AppSettingsManager instance3 = Singleton<AppSettingsManager>.Instance;
						instance3.appSettings.video.renderDist = originalRenderLimit;
						instance3.InvokeSettingsChange();
						CrowdDelegates.callFunc(instance3, "ApplySettings", false);
					}
					catch (Exception ex4)
					{
						CrowdControlMod.mls.LogInfo((object)ex4.ToString());
						removeEffect(etype);
					}
				});
				break;
			case TimedType.MODEL_SIZE:
				break;
			case TimedType.THRID_PERSON:
				CrowdDelegates.DisableThirdPerson();
				break;
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)ex.ToString());
			return false;
		}
		return true;
	}

	public void tick()
	{
		frames++;
		if (type == TimedType.HIGH_FOV)
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
			});
		}
	}
}
public class TimedThread
{
	public static List<TimedThread> threads = new List<TimedThread>();

	public readonly Timed effect;

	public int duration;

	public int remain;

	public int id;

	public bool paused;

	public static bool isRunning(TimedType t)
	{
		foreach (TimedThread thread in threads)
		{
			if (thread.effect.type == t)
			{
				return true;
			}
		}
		return false;
	}

	public static void tick()
	{
		foreach (TimedThread thread in threads)
		{
			if (!thread.paused)
			{
				thread.effect.tick();
			}
		}
	}

	public static void addTime(int duration)
	{
		try
		{
			lock (threads)
			{
				foreach (TimedThread thread in threads)
				{
					Interlocked.Add(ref thread.duration, duration + 5);
					if (!thread.paused)
					{
						int dur = Volatile.Read(ref thread.remain);
						new TimedResponse(thread.id, dur, CrowdResponse.Status.STATUS_PAUSE).Send(ControlClient.Socket);
						thread.paused = true;
					}
				}
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)ex.ToString());
		}
	}

	public static void tickTime(int duration)
	{
		try
		{
			lock (threads)
			{
				foreach (TimedThread thread in threads)
				{
					int num = Volatile.Read(ref thread.remain);
					num -= duration;
					if (num < 0)
					{
						num = 0;
					}
					Volatile.Write(ref thread.remain, num);
				}
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)ex.ToString());
		}
	}

	public static void unPause()
	{
		try
		{
			lock (threads)
			{
				foreach (TimedThread thread in threads)
				{
					if (thread.paused)
					{
						int dur = Volatile.Read(ref thread.remain);
						new TimedResponse(thread.id, dur, CrowdResponse.Status.STATUS_RESUME).Send(ControlClient.Socket);
						thread.paused = false;
					}
				}
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)ex.ToString());
		}
	}

	public TimedThread(int id, TimedType type, int duration, Dictionary<string, object> customVariables = null)
	{
		effect = new Timed(type);
		this.duration = duration;
		remain = duration;
		this.id = id;
		paused = false;
		if (customVariables == null)
		{
			customVariables = new Dictionary<string, object>();
		}
		effect.SetCustomVariables(customVariables);
		try
		{
			lock (threads)
			{
				threads.Add(this);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)ex.ToString());
		}
	}

	public void Run()
	{
		Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
		effect.addEffect();
		bool flag = false;
		try
		{
			do
			{
				flag = false;
				for (int num = Volatile.Read(ref duration); num > 0; num = Volatile.Read(ref duration))
				{
					Interlocked.Add(ref duration, -num);
					Thread.Sleep(num);
				}
				if (Timed.removeEffect(effect.type))
				{
					lock (threads)
					{
						threads.Remove(this);
					}
					new TimedResponse(id, 0, CrowdResponse.Status.STATUS_STOP).Send(ControlClient.Socket);
				}
				else
				{
					flag = true;
				}
			}
			while (flag);
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)ex.ToString());
		}
	}
}
[BepInPlugin("WarpWorld.CrowdControl", "Crowd Control", "1.0.4.0")]
public class CrowdControlMod : BaseUnityPlugin
{
	[HarmonyPatch(typeof(TextChatViewUI), "OnMessage")]
	public class OnMessagePatch
	{
		private static bool Prefix(string pName, string msg, TextChatViewUI __instance)
		{
			try
			{
				string text = ChatComms.DecodeAndDecompress(msg);
				if (text.Contains("_CC"))
				{
					if (ChatComms.IsValidJson(text))
					{
						ChatComms.ProcessMessage(text, pName);
					}
					return false;
				}
			}
			catch (Exception)
			{
				return true;
			}
			return true;
		}
	}

	[HarmonyPatch(typeof(Dishwasher))]
	[HarmonyPatch("MGCancel")]
	public class Patch_Dishwasher_MGCancel
	{
		private static bool Prefix(Dishwasher __instance)
		{
			if (!thirdPerson)
			{
				return true;
			}
			thirdPersonPaused = false;
			DishwasherMG instance = Singleton<DishwasherMG>.Instance;
			instance.OnMinigameEnd();
			PlayerInventory.Instance.SetState((State)0);
			((Behaviour)PlayerCamera.Instance).enabled = true;
			PlayerMovement.Instance.canMove = true;
			CrowdDelegates.EnableThirdPerson();
			return false;
		}
	}

	[HarmonyPatch(typeof(Dishwasher))]
	[HarmonyPatch("MGStart")]
	public class Patch_Dishwasher_MGStart
	{
		private static void Postfix(Dishwasher __instance)
		{
			if (thirdPerson)
			{
				PlayerAvatar instance = Singleton<PlayerAvatar>.Instance;
				instance.SetVisible(false, false);
				thirdPersonPaused = true;
			}
		}
	}

	[HarmonyPatch(typeof(PlayerInventory))]
	[HarmonyPatch("OnSelectedSlotChanged")]
	public class Patch_OnSelectedSlotChanged
	{
		private static void Postfix(byte p, byte n, PlayerInventory __instance)
		{
			if (!thirdPerson)
			{
				return;
			}
			PlayerCamera instance = Singleton<PlayerCamera>.Instance;
			Transform parent = ((Component)instance).transform.parent;
			Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true);
			foreach (Transform val in componentsInChildren)
			{
				if (CrowdDelegates.ToolNames.Contains(((Object)val).name))
				{
					((Component)val).gameObject.SetActive(false);
					if (((Component)val).gameObject.layer == 0)
					{
						((Component)val).gameObject.SetActive(true);
					}
				}
			}
		}
	}

	[HarmonyPatch(typeof(SwitchLights))]
	[HarmonyPatch("InteractServerRpc")]
	public class Patch_SwitchLights_InteractServerRpc
	{
		private static void Postfix(SwitchLights __instance)
		{
			if ((Object)(object)__instance != (Object)null && lightsOut)
			{
				ChatComms.SendMessage("LightsOn", "BST", 0);
			}
		}
	}

	[HarmonyPatch(typeof(Master))]
	[HarmonyPatch("OnApplicationQuit")]
	public class OnApplicationQuitPatch
	{
		private static bool Prefix()
		{
			try
			{
				if (ControlClient.Socket != null && ControlClient.Socket.Connected)
				{
					ControlClient.Socket.Shutdown(SocketShutdown.Both);
					ControlClient.Socket.Close();
					ControlClient.Socket.Dispose();
				}
				ControlClient.connected = false;
				ControlClient controlClient = new ControlClient();
				controlClient.Stop();
				mls.LogInfo((object)"ControlClient stopped successfully.");
			}
			catch (Exception arg)
			{
				mls.LogError((object)$"Error during application quit: {arg}");
			}
			return true;
		}
	}

	[HarmonyPatch(typeof(SaveManager), "SaveGameData")]
	public class SaveGameDataPatch
	{
		private static void Postfix(ref SaveData saveData)
		{
			if (saveData != null && !string.IsNullOrEmpty(saveData.tavernName))
			{
				saveData.tavernName = saveData.tavernName.Replace(" [CC]", string.Empty);
			}
		}
	}

	[HarmonyPatch]
	public static class SteamManagerPatch
	{
		[HarmonyPatch(typeof(SteamManager), "OnHostReady")]
		[HarmonyPostfix]
		public static void OnHostReady_Postfix()
		{
			//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_001c: Unknown result type (might be due to invalid IL or missing references)
			EffectType effectType = (EffectType)Enum.Parse(typeof(EffectType), "Light", ignoreCase: true);
			CrowdDelegates.SendStatusEffect(effectType, 1, 1);
			ControlClient.SetTavernName();
		}
	}

	[HarmonyPatch(typeof(Interactive), "Interact")]
	private class Patch_Interactive_Interact
	{
		private static void Prefix(Event e, ushort itemDataId, uint itemId, Interactive __instance)
		{
			try
			{
				NetworkObject component = ((Component)__instance).GetComponent<NetworkObject>();
				if (((object)(Event)(ref e)).ToString() == "LookOver")
				{
					if ((Object)(object)component != (Object)null)
					{
						if (netIdToViewerName.TryGetValue((int)component.NetworkObjectId, out var value))
						{
							lookingOver = true;
							spawnName = value;
						}
						else
						{
							spawnName = "";
							lookingOver = false;
						}
					}
				}
				else
				{
					lookingOver = false;
				}
			}
			catch (Exception)
			{
				lookingOver = false;
			}
		}
	}

	[HarmonyPatch(/*Could not decode attribute arguments.*/)]
	private class Patch_Interactive_ObjectTitle
	{
		private static void Postfix(ref string __result)
		{
			if (lookingOver && !string.IsNullOrEmpty(spawnName))
			{
				__result = spawnName;
			}
		}
	}

	[HarmonyPatch(typeof(CustomerNameManager), "OnNameIdentifierChanged")]
	public class OnNameIdentifierChangedPatch
	{
		private static bool Prefix(int prevValue, int newValue, CustomerNameManager __instance)
		{
			if (newValue == -1)
			{
				return false;
			}
			object obj = AccessTools.Field(typeof(CustomerNameManager), "customer")?.GetValue(__instance);
			if (obj == null)
			{
				return false;
			}
			PropertyInfo property = obj.GetType().GetProperty("NetworkObjectId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (property != null)
			{
				try
				{
					object value = property.GetValue(obj);
					int key;
					if (value is ulong num)
					{
						if (num > int.MaxValue)
						{
							return false;
						}
						key = (int)num;
					}
					else
					{
						if (!(value is string s) || !int.TryParse(s, out var result))
						{
							return false;
						}
						key = result;
					}
					if (netIdToViewerName.TryGetValue(key, out var value2))
					{
						object obj2 = AccessTools.Field(typeof(CustomerNameManager), "interactive")?.GetValue(__instance);
						if (obj2 != null)
						{
							PropertyInfo property2 = obj2.GetType().GetProperty("ObjectTitle", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
							if (property2 != null)
							{
								property2.SetValue(obj2, value2);
								return false;
							}
						}
					}
				}
				catch (Exception ex)
				{
					mls.LogInfo((object)("Error accessing NetworkObjectId: " + ex.Message));
				}
			}
			return true;
		}
	}

	[HarmonyPatch(typeof(CustomerNameManager), "OnNetworkDespawn")]
	public class OnNetworkDespawnPatch
	{
		private static void Prefix(CustomerNameManager __instance)
		{
			object obj = null;
			FieldInfo fieldInfo = AccessTools.Field(typeof(CustomerNameManager), "customer");
			if (fieldInfo != null)
			{
				obj = fieldInfo.GetValue(__instance);
			}
			if (obj == null)
			{
				return;
			}
			PropertyInfo property = obj.GetType().GetProperty("NetworkObjectId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (!(property != null))
			{
				return;
			}
			try
			{
				object value = property.GetValue(obj);
				if (!(value is ulong))
				{
					return;
				}
				ulong num = (ulong)value;
				if (true && num <= int.MaxValue)
				{
					int key = (int)num;
					try
					{
						netIdToViewerName.Remove(key);
						return;
					}
					catch (Exception)
					{
						return;
					}
				}
			}
			catch (Exception)
			{
			}
		}
	}

	[HarmonyPatch(typeof(MainMenu), "Start")]
	public static class MainMenu_Start_Patch
	{
		private static void Postfix(MainMenu __instance)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			//IL_006f: 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_008b: Unknown result type (might be due to invalid IL or missing references)
			FieldInfo field = typeof(MainMenu).GetField("versionText", BindingFlags.Instance | BindingFlags.NonPublic);
			if (!(field != null))
			{
				return;
			}
			TextMeshProUGUI val = (TextMeshProUGUI)field.GetValue(__instance);
			if ((Object)(object)val != (Object)null)
			{
				((TMP_Text)val).text = ((TMP_Text)val).text + " | CrowdControl: 1.0.4.0";
				RectTransform component = ((Component)val).GetComponent<RectTransform>();
				if ((Object)(object)component != (Object)null)
				{
					component.sizeDelta = new Vector2(component.sizeDelta.x + 100f, component.sizeDelta.y);
				}
			}
		}
	}

	[HarmonyPatch(typeof(StatusUI))]
	[HarmonyPatch("OnTavernNameEdit")]
	public class Patch_StatusUI_OnTavernNameEdit
	{
		private static bool Prefix(StatusUI __instance, string s)
		{
			if (s.EndsWith(" [CC]"))
			{
				GameStatus.Instance.SetNameServerRpc(s);
			}
			else
			{
				GameStatus.Instance.SetNameServerRpc(s + " [CC]");
			}
			return false;
		}
	}

	private const string modGUID = "WarpWorld.CrowdControl";

	private const string modName = "Crowd Control";

	private const string modVersion = "1.0.4.0";

	private readonly Harmony harmony = new Harmony("WarpWorld.CrowdControl");

	public static ManualLogSource mls;

	internal static CrowdControlMod Instance = null;

	private ControlClient client = null;

	public static bool isFocused = true;

	public const string MESSAGE_TAG = "_CC";

	public static bool lightsOut = false;

	public static bool thirdPerson = false;

	public static bool thirdPersonPaused = false;

	public static bool modActivated = false;

	public static string spawnName = "";

	public static bool lookingOver = false;

	public static float sizeValue = 1f;

	public static Dictionary<int, string> netIdToViewerName = new Dictionary<int, string>();

	public static Queue<Action> ActionQueue = new Queue<Action>();

	private void Awake()
	{
		Instance = this;
		mls = Logger.CreateLogSource("Crowd Control");
		mls.LogInfo((object)"Loaded WarpWorld.CrowdControl. Patching.");
		harmony.PatchAll(typeof(CrowdControlMod));
		harmony.PatchAll();
		mls.LogInfo((object)"Initializing Crowd Control");
		try
		{
			client = new ControlClient();
			new Thread(client.NetworkLoop).Start();
			new Thread(client.RequestLoop).Start();
		}
		catch (Exception ex)
		{
			mls.LogInfo((object)("CC Init Error: " + ex.ToString()));
		}
		mls.LogInfo((object)"Crowd Control Initialized");
		mls = ((BaseUnityPlugin)this).Logger;
	}

	[HarmonyPatch(typeof(EffectsController), "ChangePlayerScaleClientRpc")]
	[HarmonyPrefix]
	public static bool ChangePlayerScaleClientRpc_Prefix(ref float newValue)
	{
		if (sizeValue != 1f)
		{
			newValue = sizeValue;
		}
		return true;
	}

	[HarmonyPatch(typeof(EffectsController), "ChangePlayerScaleClientRpc")]
	[HarmonyPostfix]
	public static void ChangePlayerScaleClientRpc_Postfix(float newValue)
	{
		if (sizeValue != 1f)
		{
			sizeValue = 1f;
		}
	}

	[HarmonyPatch(typeof(PlayerCamera), "Update")]
	[HarmonyPrefix]
	private static void RunEffects()
	{
		//IL_001f: 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)
		if (!ControlClient.connected)
		{
			FixedString64Bytes value = GameStatus.Instance.tavernName.Value;
			string tavernName = ((object)(FixedString64Bytes)(ref value)).ToString();
			if (CrowdDelegates.IsHost() && !ControlClient.resetName && ControlClient.setName && tavernName.EndsWith(" [CC]"))
			{
				ControlClient.setName = false;
				ControlClient.resetName = true;
				ActionQueue.Enqueue(delegate
				{
					GameStatus.Instance.SetNameServerRpc(tavernName.Replace(" [CC]", string.Empty));
					modActivated = false;
				});
			}
		}
		while (ActionQueue.Count > 0)
		{
			Action action = ActionQueue.Dequeue();
			action();
		}
		lock (TimedThread.threads)
		{
			foreach (TimedThread thread in TimedThread.threads)
			{
				if (!thread.paused)
				{
					thread.effect.tick();
				}
			}
		}
	}
}
public class ControlClient
{
	public static readonly string CV_HOST = "127.0.0.1";

	public static readonly int CV_PORT = 51337;

	private bool paused = false;

	public static bool connected = false;

	public static bool setName = false;

	public static bool resetName = false;

	public static bool disableLogging = true;

	public bool inGame = true;

	public bool questMessage = false;

	private Dictionary<string, CrowdDelegate> Delegate { get; set; }

	private IPEndPoint Endpoint { get; set; }

	private Queue<CrowdRequest> Requests { get; set; }

	private bool Running { get; set; }

	public static Socket Socket { get; set; }

	public ControlClient()
	{
		Endpoint = new IPEndPoint(IPAddress.Parse(CV_HOST), CV_PORT);
		Requests = new Queue<CrowdRequest>();
		Running = true;
		Socket = null;
		Delegate = new Dictionary<string, CrowdDelegate>
		{
			{
				"spawnmess_Puddle",
				CrowdDelegates.SpawnMess
			},
			{
				"spawnmess_Hay",
				CrowdDelegates.SpawnMess
			},
			{
				"spawnmess_Footsteps",
				CrowdDelegates.SpawnMess
			},
			{
				"spawnmess_DirtDecal",
				CrowdDelegates.SpawnMess
			},
			{
				"spawnmess_Fire",
				CrowdDelegates.SpawnMess
			},
			{
				"spawnmess_Soot",
				CrowdDelegates.SpawnMess
			},
			{
				"spawnmess_Web",
				CrowdDelegates.SpawnMess
			},
			{
				"clearmesses",
				CrowdDelegates.ClearMess
			},
			{
				"givemoney_100",
				CrowdDelegates.GiveMoney
			},
			{
				"givemoney_1000",
				CrowdDelegates.GiveMoney
			},
			{
				"givemoney_10000",
				CrowdDelegates.GiveMoney
			},
			{
				"takemoney_100",
				CrowdDelegates.TakeMoney
			},
			{
				"takemoney_1000",
				CrowdDelegates.TakeMoney
			},
			{
				"takemoney_10000",
				CrowdDelegates.TakeMoney
			},
			{
				"addtime_1",
				CrowdDelegates.ChangeTime
			},
			{
				"addtime_6",
				CrowdDelegates.ChangeTime
			},
			{
				"addtime_12",
				CrowdDelegates.ChangeTime
			},
			{
				"highFOV",
				CrowdDelegates.HighFOV
			},
			{
				"lowFOV",
				CrowdDelegates.LowFOV
			},
			{
				"limitFPS",
				CrowdDelegates.LimitFPS
			},
			{
				"limitRender",
				CrowdDelegates.LimitRender
			},
			{
				"thirdPerson",
				CrowdDelegates.ThirdPersonMode
			},
			{
				"player_shake",
				CrowdDelegates.ShakePlayerScreen
			},
			{
				"toggle_tavern",
				CrowdDelegates.ToggleTavern
			},
			{
				"player_Speed_200",
				CrowdDelegates.StatusEffect
			},
			{
				"player_ModelSize_200",
				CrowdDelegates.StatusEffect
			},
			{
				"player_ModelSize_50",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Poison",
				CrowdDelegates.StatusEffect
			},
			{
				"player_HealthRegeneration",
				CrowdDelegates.StatusEffect
			},
			{
				"player_ResistPoison",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Slow",
				CrowdDelegates.StatusEffect
			},
			{
				"player_ResistSlow",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Physical",
				CrowdDelegates.StatusEffect
			},
			{
				"player_ResistPhysical",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Stun",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Drunk",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Feather",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Light",
				CrowdDelegates.StatusEffect
			},
			{
				"player_MaxHealthIncrease",
				CrowdDelegates.StatusEffect
			},
			{
				"player_HealthRestore",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Teleportation",
				CrowdDelegates.TeleportPlayer
			},
			{
				"player_Damage",
				CrowdDelegates.DamagePlayer
			},
			{
				"player_Wormhole",
				CrowdDelegates.StatusEffect
			},
			{
				"player_Kill",
				CrowdDelegates.KillPlayer
			},
			{
				"drophelditem",
				CrowdDelegates.DropHeldItem
			},
			{
				"dropallitems",
				CrowdDelegates.DropAllItems
			},
			{
				"spawnenemy_Boar",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Wolf",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Bear",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Hornet",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Turtle",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Crab",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Toad",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_RangedHornet",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_PoisonedWolf",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_PoisonedBear",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_OrcMelee",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_UnarmedZombie",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Spider",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_RangedSpider",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_ZombieHound",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_Ghoul",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_LootCrate",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawnenemy_LootBarrel",
				CrowdDelegates.SpawnEnemy
			},
			{
				"spawn_customer",
				CrowdDelegates.SpawnCustomer
			},
			{
				"spawn_vip",
				CrowdDelegates.SpawnCustomer
			},
			{
				"breakfurniture",
				CrowdDelegates.BreakFurniture
			},
			{
				"enable_fog",
				CrowdDelegates.EnableFog
			},
			{
				"enable_fog_all",
				CrowdDelegates.EnableFogAll
			},
			{
				"turnoutlights",
				CrowdDelegates.TurnOutLights
			},
			{
				"fliptables",
				CrowdDelegates.FlipTables
			},
			{
				"event-hype-train",
				CrowdDelegates.SpawnHypeTrain
			},
			{
				"spawnitem_Money",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WaterBucket",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FreshCrucian",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FreshTrout",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Egg",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AppleCore",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Barley",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarleyWort",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_RawPork",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_RawRibs",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ChickenBreast",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Carrot",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Potato",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Corn",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Grape",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ToadLeg",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CrabMeat",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BoarPorkRaw",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WineWort",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_EmeraldMushroom",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AmanitaMushroom",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AzureMushroom",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WhiteMushroom",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CornWort",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CornWash",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarleyWash",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Honey",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Hop",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Apple",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WolfFang",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BearLiver",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TurtleShell",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SpiderVenomGland",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_GhoulEye",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_HoundClaw",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PufferFish",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PigInCage",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ChickenInCage",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Barrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Mug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_MugDirty",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Plate",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PlateDirty",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Bucket",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SmallHealthPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SpeedPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ResistPhysicalPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ResistPoisonPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FeatherPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_RegenerationPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SmallHealthIncreasePotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BigHealthIncreasePotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BigHealthPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TeleportationPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SlopPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SizePotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WormholePotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_LightPotion",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Grindstone",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ReviveStone",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Compost",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Bullet",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CrossbowBolt",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Broom",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Hoe",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WateringCan",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FishingRod",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Hammer",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BroomPro",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_HoePro",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Torch",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Axe",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Sword",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Crossbow",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Musket",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_OnePunchStick",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CrucianSoup",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ChickenSoup",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarleyPorridge",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TroutSoup",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_MushroomSoup",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ToadSoup",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedCrucian",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedChicken",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BoiledChickenEggs",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedPigRibs",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedPigSteak",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedPotatoes",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BoiledCorn",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedBoarSteak",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CrabSalad",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CornCake",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarleyBread",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedTrout",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedToadLegs",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Cupcake",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PotatoesMushroom",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ApplePie",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedEggs",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedEggsWithMushrooms",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedEggsWithBacon",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_EggyBread",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_FriedChickenWings",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_MeatPlate",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_SweetPopcorn",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BakedPigWithApples",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AssortedSeafood",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AleMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WineMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BeerMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CiderMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BourbonMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_GrapeJuiceMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CarrotJuiceMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AppleJuiceMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WhiskeyMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AleBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WineBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BeerBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CiderBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BourbonBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_GrapeJuiceBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CarrotJuiceBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AppleJuiceBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_WhiskeyBarrel",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_RectangularTable",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_RoundTable",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarrelDispencer",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Dishwasher",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Chest",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Oven",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CompostBin",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AutoDishwasher",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_StoveSingle",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_StoveDouble",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Fermenter",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Brew",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Press",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ShelfMug",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ShelfPlate",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Grill",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_GrillPro",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ChestLarge",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Alembic",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarrelHolderStand",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ServingTable",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Jukebox",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AlchemicalLab",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_OrderStickersDesk",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingWorldMap",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_HelperWaiterHouse",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_HelperCleanerHouse",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_BarleySeeds",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CarrotSeeds",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PotatoSeeds",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_CornSeeds",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_GrapeSeeds",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_StatueWarrior",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_StatueHamster",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyFishHead",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyWolfHead",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyBearHead",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyBoarHead",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyWaspHead",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyAxeShield",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_AlchemistStand",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_Globe",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_JugsStand",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_StatueBoss",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyTrout",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_TrophyCrucian",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ChristmasPine",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_ChristmasSocks",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingAncestor",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingVampire",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingDarkForest",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingElvinForest",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingGod",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingDrunkard",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingDrunkenness",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingKnights",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingKitten",
				CrowdDelegates.SpawnItem
			},
			{
				"spawnitem_PaintingUnequalBattle",
				CrowdDelegates.SpawnItem
			}
		};
	}

	public bool isReady()
	{
		//IL_0123: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Invalid comparison between Unknown and I4
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0194: Invalid comparison between Unknown and I4
		//IL_0330: 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)
		try
		{
			if (!Object.op_Implicit((Object)(object)GameStatus.Instance))
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: GameStatus.Instance is null");
				}
				return false;
			}
			Master instance = Singleton<Master>.Instance;
			try
			{
				if (!Object.op_Implicit((Object)(object)instance))
				{
					if (!disableLogging)
					{
						CrowdControlMod.mls.LogInfo((object)"Fail: Master instance is null");
					}
					return false;
				}
				if (!((Behaviour)instance).isActiveAndEnabled)
				{
					if (!disableLogging)
					{
						CrowdControlMod.mls.LogInfo((object)"Fail: Master is not active and enabled");
					}
					return false;
				}
				if (CrowdDelegates.IsHost() && !instance.isHostReady)
				{
					if (!disableLogging)
					{
						CrowdControlMod.mls.LogInfo((object)"Fail: Host is not ready");
					}
					return false;
				}
				if (instance.HasConnectingClients())
				{
					if (!disableLogging)
					{
						CrowdControlMod.mls.LogInfo((object)"Fail: There are connecting clients");
					}
					return false;
				}
				if ((int)instance.state != 3)
				{
					if (!disableLogging)
					{
						CrowdControlMod.mls.LogInfo((object)"Fail: Master state is not Game");
					}
					return false;
				}
			}
			catch
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: Exception in master validation");
				}
				return false;
			}
			PlayerInventory instance2 = Singleton<PlayerInventory>.Instance;
			if ((int)instance2.state == 100)
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: PlayerInventory state is Dead");
				}
				return false;
			}
			PlayerNet instance3 = Singleton<PlayerNet>.Instance;
			if (!Object.op_Implicit((Object)(object)instance3))
			{
				if (!disableLogging && !disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: PlayerNet instance is null");
				}
				return false;
			}
			if (instance3.hp.Value < 1)
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: PlayerNet HP is less than 1");
				}
				return false;
			}
			QuestManager instance4 = Singleton<QuestManager>.Instance;
			if (!Object.op_Implicit((Object)(object)instance4))
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: QuestManager instance is null");
				}
				return false;
			}
			if (!instance4.completedQuests.Contains((ushort)2))
			{
				if (!questMessage)
				{
					CrowdDelegates.SendUIMessage("Must complete starting quest before Crowd Control can be used.");
					if (!disableLogging)
					{
						CrowdControlMod.mls.LogInfo((object)"Fail: Starting quest not completed");
					}
				}
				questMessage = true;
				return false;
			}
			if (questMessage)
			{
				CrowdDelegates.SendUIMessage("Crowd Control can now be used!", "NewLevel");
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Info: Starting quest completed, Crowd Control can now be used");
				}
				questMessage = false;
			}
			FixedString64Bytes value = GameStatus.Instance.tavernName.Value;
			string text = ((object)(FixedString64Bytes)(ref value)).ToString();
			if (connected && CrowdDelegates.IsHost() && !setName && !text.EndsWith(" [CC]"))
			{
				SetTavernName();
			}
			if (!CrowdControlMod.modActivated && text.EndsWith(" [CC]"))
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Info: Mod activated based on tavern name");
				}
				CrowdControlMod.modActivated = true;
			}
			if (!CrowdControlMod.modActivated)
			{
				if (!disableLogging)
				{
					CrowdControlMod.mls.LogInfo((object)"Fail: Mod is not activated");
				}
				return false;
			}
		}
		catch (Exception arg)
		{
			if (!disableLogging)
			{
				CrowdControlMod.mls.LogError((object)$"Exception caught: {arg}");
			}
			return false;
		}
		if (!disableLogging)
		{
			CrowdControlMod.mls.LogInfo((object)"Success: All checks passed");
		}
		return true;
	}

	public static void SetTavernName()
	{
		//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)
		FixedString64Bytes value = GameStatus.Instance.tavernName.Value;
		string tavernName = ((object)(FixedString64Bytes)(ref value)).ToString();
		if (connected && CrowdDelegates.IsHost() && !setName && !tavernName.EndsWith(" [CC]"))
		{
			setName = true;
			resetName = false;
			if (!disableLogging)
			{
				CrowdControlMod.mls.LogInfo((object)"Info: Updating tavern name to include [CC]");
			}
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				GameStatus.Instance.SetNameServerRpc(tavernName + " [CC]");
				CrowdControlMod.modActivated = true;
			});
		}
	}

	public static void HideEffect(string code)
	{
		CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_NOTVISIBLE);
		crowdResponse.type = 1;
		crowdResponse.code = code;
		crowdResponse.Send(Socket);
	}

	public static void ShowEffect(string code)
	{
		CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_VISIBLE);
		crowdResponse.type = 1;
		crowdResponse.code = code;
		crowdResponse.Send(Socket);
	}

	public static void DisableEffect(string code)
	{
		CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_NOTSELECTABLE);
		crowdResponse.type = 1;
		crowdResponse.code = code;
		crowdResponse.Send(Socket);
	}

	public static void EnableEffect(string code)
	{
		CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_SELECTABLE);
		crowdResponse.type = 1;
		crowdResponse.code = code;
		crowdResponse.Send(Socket);
	}

	private void ClientLoop()
	{
		CrowdControlMod.mls.LogInfo((object)"Connected to Crowd Control");
		Timer timer = new Timer(timeUpdate, null, 0, 200);
		try
		{
			while (Running)
			{
				try
				{
					if (Socket == null || !Socket.Connected)
					{
						break;
					}
					connected = true;
					CrowdRequest crowdRequest = CrowdRequest.Recieve(this, Socket);
					if (crowdRequest != null && !crowdRequest.IsKeepAlive())
					{
						lock (Requests)
						{
							Requests.Enqueue(crowdRequest);
						}
					}
					continue;
				}
				catch (ObjectDisposedException)
				{
					break;
				}
				catch (SocketException)
				{
					break;
				}
				catch (ThreadAbortException)
				{
					Thread.ResetAbort();
					break;
				}
				catch (Exception)
				{
				}
			}
		}
		catch (Exception arg)
		{
			CrowdControlMod.mls.LogInfo((object)$"Critical Error: {arg}");
		}
		finally
		{
			CrowdControlMod.mls.LogInfo((object)"Disconnected from Crowd Control.");
			connected = false;
			try
			{
				if (Socket != null)
				{
					Socket.Dispose();
				}
				timer.Dispose();
			}
			catch (Exception)
			{
			}
		}
	}

	public void timeUpdate(object state)
	{
		inGame = true;
		if (!isReady())
		{
			inGame = false;
		}
		if (!inGame)
		{
			TimedThread.addTime(200);
			paused = true;
		}
		else if (paused)
		{
			paused = false;
			TimedThread.unPause();
			TimedThread.tickTime(200);
		}
		else
		{
			TimedThread.tickTime(200);
		}
	}

	public bool IsRunning()
	{
		return Running;
	}

	public void NetworkLoop()
	{
		Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
		while (Running)
		{
			CrowdControlMod.mls.LogInfo((object)"Attempting to connect to Crowd Control");
			connected = false;
			try
			{
				Socket = new Socket(Endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
				Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, optionValue: true);
				if (Socket.BeginConnect(Endpoint, null, null).AsyncWaitHandle.WaitOne(10000, exitContext: true) && Socket.Connected)
				{
					ClientLoop();
				}
				else
				{
					CrowdControlMod.mls.LogInfo((object)"Failed to connect to Crowd Control");
					connected = false;
				}
				Socket.Close();
			}
			catch (Exception ex)
			{
				CrowdControlMod.mls.LogInfo((object)ex.GetType().Name);
				CrowdControlMod.mls.LogInfo((object)"Failed to connect to Crowd Control");
				connected = false;
			}
			Thread.Sleep(10000);
		}
	}

	public void RequestLoop()
	{
		Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
		while (Running)
		{
			try
			{
				CrowdRequest crowdRequest = null;
				lock (Requests)
				{
					if (Requests.Count == 0)
					{
						continue;
					}
					crowdRequest = Requests.Dequeue();
					goto IL_0060;
				}
				IL_0060:
				string reqCode = crowdRequest.GetReqCode();
				try
				{
					CrowdResponse crowdResponse = (isReady() ? Delegate[reqCode](this, crowdRequest) : new CrowdResponse(crowdRequest.GetReqID(), CrowdResponse.Status.STATUS_RETRY));
					if (crowdResponse == null)
					{
						new CrowdResponse(crowdRequest.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Request error for '" + reqCode + "'").Send(Socket);
					}
					crowdResponse.Send(Socket);
				}
				catch (KeyNotFoundException)
				{
					new CrowdResponse(crowdRequest.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Request error for '" + reqCode + "'").Send(Socket);
				}
			}
			catch (Exception)
			{
				CrowdControlMod.mls.LogInfo((object)"Disconnected from Crowd Control.");
				connected = false;
				Socket.Close();
			}
		}
	}

	public void Stop()
	{
		Running = false;
	}
}
public delegate CrowdResponse CrowdDelegate(ControlClient client, CrowdRequest req);
public static class CustomerChatNames
{
	private static Dictionary<int, string> chatNames = new Dictionary<int, string>();

	public static void SetChatName(int customerId, string name)
	{
		chatNames[customerId] = name;
	}

	public static string GetChatName(int customerId)
	{
		if (chatNames.TryGetValue(customerId, out var value))
		{
			return value;
		}
		return null;
	}
}
public class CrowdDelegates
{
	public class Flippable : MonoBehaviour
	{
		public bool IsFlipped { get; set; } = false;

	}

	public static Random rnd = new Random();

	public static readonly TimeSpan SERVER_TIMEOUT = TimeSpan.FromSeconds(5.0);

	public static Dictionary<string, uint> items = new Dictionary<string, uint>
	{
		{ "Money", 1u },
		{ "WaterBucket", 5u },
		{ "FreshCrucian", 6u },
		{ "FreshTrout", 7u },
		{ "Egg", 8u },
		{ "AppleCore", 9u },
		{ "Barley", 10u },
		{ "BarleyWort", 11u },
		{ "RawPork", 12u },
		{ "RawRibs", 13u },
		{ "ChickenBreast", 14u },
		{ "Carrot", 15u },
		{ "Potato", 16u },
		{ "Corn", 17u },
		{ "Grape", 18u },
		{ "ToadLeg", 19u },
		{ "CrabMeat", 20u },
		{ "BoarPorkRaw", 21u },
		{ "WineWort", 22u },
		{ "EmeraldMushroom", 23u },
		{ "AmanitaMushroom", 24u },
		{ "AzureMushroom", 25u },
		{ "WhiteMushroom", 26u },
		{ "CornWort", 27u },
		{ "CornWash", 28u },
		{ "BarleyWash", 29u },
		{ "Honey", 32u },
		{ "Hop", 34u },
		{ "Apple", 35u },
		{ "WolfFang", 50u },
		{ "BearLiver", 51u },
		{ "TurtleShell", 52u },
		{ "SpiderVenomGland", 53u },
		{ "GhoulEye", 55u },
		{ "HoundClaw", 56u },
		{ "PufferFish", 57u },
		{ "PigInCage", 95u },
		{ "ChickenInCage", 96u },
		{ "Barrel", 101u },
		{ "Mug", 102u },
		{ "MugDirty", 103u },
		{ "Plate", 106u },
		{ "PlateDirty", 107u },
		{ "Bucket", 108u },
		{ "SmallHealthPotion", 200u },
		{ "SpeedPotion", 201u },
		{ "ResistPhysicalPotion", 204u },
		{ "ResistPoisonPotion", 205u },
		{ "FeatherPotion", 206u },
		{ "RegenerationPotion", 207u },
		{ "SmallHealthIncreasePotion", 208u },
		{ "BigHealthIncreasePotion", 209u },
		{ "BigHealthPotion", 210u },
		{ "TeleportationPotion", 211u },
		{ "SlopPotion", 212u },
		{ "SizePotion", 213u },
		{ "WormholePotion", 214u },
		{ "LightPotion", 215u },
		{ "Grindstone", 220u },
		{ "ReviveStone", 221u },
		{ "Compost", 280u },
		{ "Bullet", 290u },
		{ "CrossbowBolt", 291u },
		{ "Broom", 301u },
		{ "Hoe", 302u },
		{ "WateringCan", 303u },
		{ "FishingRod", 304u },
		{ "Hammer", 305u },
		{ "BroomPro", 306u },
		{ "HoePro", 307u },
		{ "Torch", 310u },
		{ "Axe", 350u },
		{ "Sword", 351u },
		{ "Crossbow", 355u },
		{ "Musket", 360u },
		{ "OnePunchStick", 390u },
		{ "CrucianSoup", 502u },
		{ "ChickenSoup", 503u },
		{ "BarleyPorridge", 504u },
		{ "TroutSoup", 505u },
		{ "MushroomSoup", 506u },
		{ "ToadSoup", 507u },
		{ "FriedCrucian", 602u },
		{ "FriedChicken", 603u },
		{ "BoiledChickenEggs", 604u },
		{ "FriedPigRibs", 605u },
		{ "FriedPigSteak", 606u },
		{ "FriedPotatoes", 607u },
		{ "BoiledCorn", 608u },
		{ "FriedBoarSteak", 609u },
		{ "CrabSalad", 610u },
		{ "CornCake", 611u },
		{ "BarleyBread", 612u },
		{ "FriedTrout", 613u },
		{ "FriedToadLegs", 614u },
		{ "Cupcake", 615u },
		{ "PotatoesMushroom", 616u },
		{ "ApplePie", 617u },
		{ "FriedEggs", 618u },
		{ "FriedEggsWithMushrooms", 619u },
		{ "FriedEggsWithBacon", 620u },
		{ "EggyBread", 621u },
		{ "FriedChickenWings", 622u },
		{ "MeatPlate", 623u },
		{ "SweetPopcorn", 624u },
		{ "BakedPigWithApples", 625u },
		{ "AssortedSeafood", 626u },
		{ "AleMug", 701u },
		{ "WineMug", 702u },
		{ "BeerMug", 703u },
		{ "CiderMug", 704u },
		{ "BourbonMug", 705u },
		{ "GrapeJuiceMug", 706u },
		{ "CarrotJuiceMug", 707u },
		{ "AppleJuiceMug", 708u },
		{ "WhiskeyMug", 709u },
		{ "AleBarrel", 751u },
		{ "WineBarrel", 752u },
		{ "BeerBarrel", 753u },
		{ "CiderBarrel", 754u },
		{ "BourbonBarrel", 755u },
		{ "GrapeJuiceBarrel", 756u },
		{ "CarrotJuiceBarrel", 757u },
		{ "AppleJuiceBarrel", 758u },
		{ "WhiskeyBarrel", 759u },
		{ "RectangularTable", 1101u },
		{ "RoundTable", 1102u },
		{ "BarrelDispencer", 1103u },
		{ "Dishwasher", 1104u },
		{ "Chest", 1105u },
		{ "Oven", 1106u },
		{ "CompostBin", 1107u },
		{ "AutoDishwasher", 1108u },
		{ "StoveSingle", 1109u },
		{ "StoveDouble", 1110u },
		{ "Fermenter", 1111u },
		{ "Brew", 1112u },
		{ "Press", 1113u },
		{ "ShelfMug", 1114u },
		{ "ShelfPlate", 1115u },
		{ "Grill", 1116u },
		{ "GrillPro", 1117u },
		{ "ChestLarge", 1118u },
		{ "Alembic", 1119u },
		{ "BarrelHolderStand", 1120u },
		{ "ServingTable", 1121u },
		{ "Jukebox", 1150u },
		{ "AlchemicalLab", 1151u },
		{ "OrderStickersDesk", 1153u },
		{ "PaintingWorldMap", 1154u },
		{ "HelperWaiterHouse", 1155u },
		{ "HelperCleanerHouse", 1156u },
		{ "BarleySeeds", 1201u },
		{ "CarrotSeeds", 1202u },
		{ "PotatoSeeds", 1203u },
		{ "CornSeeds", 1204u },
		{ "GrapeSeeds", 1205u },
		{ "StatueWarrior", 1301u },
		{ "StatueHamster", 1302u },
		{ "TrophyFishHead", 1303u },
		{ "TrophyWolfHead", 1304u },
		{ "TrophyBearHead", 1305u },
		{ "TrophyBoarHead", 1306u },
		{ "TrophyWaspHead", 1307u },
		{ "TrophyAxeShield", 1308u },
		{ "AlchemistStand", 1309u },
		{ "Globe", 1310u },
		{ "JugsStand", 1311u },
		{ "StatueBoss", 1312u },
		{ "TrophyTrout", 1313u },
		{ "TrophyCrucian", 1314u },
		{ "ChristmasPine", 1315u },
		{ "ChristmasSocks", 1316u },
		{ "PaintingAncestor", 1350u },
		{ "PaintingVampire", 1351u },
		{ "PaintingDarkForest", 1352u },
		{ "PaintingElvinForest", 1354u },
		{ "PaintingGod", 1355u },
		{ "PaintingDrunkard", 1356u },
		{ "PaintingDrunkenness", 1357u },
		{ "PaintingKnights", 1358u },
		{ "PaintingKitten", 1359u },
		{ "PaintingUnequalBattle", 1360u }
	};

	public static readonly string[] ToolNames = new string[4] { "Axe", "Repair_Hammer", "Hammer", "Broom" };

	public AssetBundle bundle;

	private static GameObject hypetrainPrefab;

	private static bool assetsLoaded = false;

	public static string AddSpacesBeforeUppercase(string input)
	{
		return Regex.Replace(input, "(?<!^)([A-Z])", " $1");
	}

	public static bool IsHost()
	{
		NetworkBehaviour instance = Singleton<NetworkBehaviour>.Instance;
		return instance.IsHost || instance.IsServer;
	}

	public static void SendUIMessage(string message)
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			GameEventLogUI instance = Singleton<GameEventLogUI>.Instance;
			callFunc(instance, "OnGameEventText", message);
		});
	}

	public static void SendUIMessage(string message, string soundFX)
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			GameEventLogUI instance = Singleton<GameEventLogUI>.Instance;
			PlaySoundFX(soundFX);
			callFunc(instance, "OnGameEventText", message);
		});
	}

	public static void PlaySoundFX(string soundFX)
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			//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_0024: Unknown result type (might be due to invalid IL or missing references)
			SoundManager instance = Singleton<SoundManager>.Instance;
			SoundEvent val = (SoundEvent)Enum.Parse(typeof(SoundEvent), soundFX, ignoreCase: true);
			instance.Play(val);
		});
	}

	public void LoadAssetsFromBundle()
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Expected O, but got Unknown
		if (assetsLoaded)
		{
			return;
		}
		HypeTrainBoxData val = new HypeTrainBoxData();
		string text = Path.Combine(Paths.PluginPath, "CrowdControl", "warpworld.hypetrain");
		string text2 = Path.Combine(Paths.PluginPath, "warpworld.hypetrain");
		if (File.Exists(text))
		{
			bundle = AssetBundle.LoadFromFile(text);
		}
		else if (File.Exists(text2))
		{
			bundle = AssetBundle.LoadFromFile(text2);
		}
		else
		{
			bundle = null;
		}
		if ((Object)(object)bundle == (Object)null)
		{
			CrowdControlMod.mls.LogInfo((object)"Failed to load AssetBundle.");
			return;
		}
		hypetrainPrefab = bundle.LoadAsset<GameObject>("HypeTrain");
		if ((Object)(object)hypetrainPrefab == (Object)null)
		{
			CrowdControlMod.mls.LogInfo((object)"HypeTrain Prefab not found in AssetBundle.");
		}
		assetsLoaded = true;
	}

	public static Vector3 GetGroundPosition(Vector3 position)
	{
		//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_001c: 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_003d: 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_0036: 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_0042: Unknown result type (might be due to invalid IL or missing references)
		Vector3 result = Vector3.zero;
		int num = ~LayerMask.GetMask(new string[1] { "Player" });
		RaycastHit val = default(RaycastHit);
		if (Physics.Raycast(position, Vector3.down, ref val, float.PositiveInfinity, num))
		{
			result = ((RaycastHit)(ref val)).point;
		}
		return result;
	}

	public static string GetGroundTexture(Vector3 position)
	{
		//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_0022: 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)
		Vector3 zero = Vector3.zero;
		int num = ~LayerMask.GetMask(new string[1] { "Player" });
		string result = "";
		RaycastHit val = default(RaycastHit);
		if (Physics.Raycast(position, Vector3.down, ref val, float.PositiveInfinity, num))
		{
			result = ((Object)((Component)((RaycastHit)(ref val)).collider).gameObject).name;
		}
		return result;
	}

	public static Color ConvertUserNameToColor(string userName)
	{
		//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_0054: Unknown result type (might be due to invalid IL or missing references)
		using SHA256 sHA = SHA256.Create();
		byte[] array = sHA.ComputeHash(Encoding.UTF8.GetBytes(userName));
		float num = (float)(int)array[0] / 255f;
		float num2 = (float)(int)array[1] / 255f;
		float num3 = (float)(int)array[2] / 255f;
		return new Color(num, num2, num3);
	}

	public void ExecuteHypeTrain(ulong steamID, CrowdRequest.SourceDetails sourceDetails)
	{
		//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_005a: 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_00b4: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: 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_019f: 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_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: 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_01d2: 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_01f2: Expected O, but got Unknown
		//IL_0167: Expected O, but got Unknown
		PlayerNet val = PlayerManager.Instance.players[steamID];
		Transform transform = ((Component)val).gameObject.transform;
		if ((Object)(object)hypetrainPrefab == (Object)null || sourceDetails.top_contributions.Length == 0)
		{
			return;
		}
		HypeTrain component = Object.Instantiate<GameObject>(hypetrainPrefab, GetGroundPosition(transform.position), transform.rotation).GetComponent<HypeTrain>();
		if (!((Object)null == (Object)(object)component))
		{
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(-14.5f, 0f, 0f);
			Vector3 val3 = default(Vector3);
			((Vector3)(ref val3))..ctor(24.5f, 0f, 0f);
			Vector3 val4 = GetGroundPosition(transform.position) + transform.TransformDirection(val2);
			Vector3 val5 = GetGroundPosition(transform.position) + transform.TransformDirection(val3);
			float num = 0.12f;
			val4.y += num;
			val5.y += num;
			List<HypeTrainBoxData> list = new List<HypeTrainBoxData>();
			CrowdRequest.SourceDetails.Contribution[] top_contributions = sourceDetails.top_contributions;
			foreach (CrowdRequest.SourceDetails.Contribution contribution in top_contributions)
			{
				list.Add(new HypeTrainBoxData
				{
					name = contribution.user_name,
					box_color = ConvertUserNameToColor(contribution.user_name),
					bit_amount = ((contribution.type == "bits") ? contribution.total : 0)
				});
			}
			float num2 = 1f;
			float num3 = (float)sourceDetails.level * 0.1f;
			float value = Mathf.Min(num2 + num3, 2f);
			component.StartHypeTrain(val4, val5, list.ToArray(), transform, new HypeTrainOptions
			{
				train_layer = LayerMask.NameToLayer(""),
				max_bits_per_car = 100,
				volume = 100f,
				distance_per_second = value
			});
		}
	}

	public static CrowdResponse SpawnMess(ControlClient client, CrowdRequest req)
	{
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ef: 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_015f: 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)
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		string text = ((req.code.Split(new char[1] { '_' }).Length > 1) ? req.code.Split(new char[1] { '_' })[1] : string.Empty);
		if (text == null)
		{
			status = CrowdResponse.Status.STATUS_FAILURE;
			message = "Unable to spawn that type of mess.";
			return new CrowdResponse(req.GetReqID(), status, message);
		}
		try
		{
			PlayerCamera instance = Singleton<PlayerCamera>.Instance;
			string groundTexture = GetGroundTexture(((Component)instance).transform.position);
			CrowdControlMod.mls.LogInfo((object)("textureName: " + groundTexture));
			if (!groundTexture.Contains("House") && text != "Fire" && text != "Web")
			{
				return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
			}
			Vector3 groundPosition = GetGroundPosition(((Component)instance).transform.position);
			if (IsHost())
			{
				SpawnMess_Host(hostInitiated: true, groundPosition, text);
			}
			else
			{
				TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
				ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
				{
					tcs.SetResult(s);
				});
				ChatComms.SendMessage("SpawnMess", "CMD", req.id, "position", groundPosition, "mess", text);
				status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
				ChatComms.RemoveResponder(req.id);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_RETRY;
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void SpawnMess_Host(bool hostInitiated, Vector3 position, string mess)
	{
		//IL_000e: 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)
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				//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_00f5: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager singleton = NetworkManager.Singleton;
				if ((Object)(object)singleton == (Object)null || !singleton.IsServer)
				{
					CrowdControlMod.mls.LogWarning((object)"SpawnMess_Host called but not server/host.");
				}
				else
				{
					MessManager instance = Singleton<MessManager>.Instance;
					Type result;
					if ((Object)(object)instance == (Object)null)
					{
						CrowdControlMod.mls.LogWarning((object)"MessManager singleton is null.");
					}
					else if (string.Equals(mess, "Web", StringComparison.OrdinalIgnoreCase))
					{
						CrowdControlMod.mls.LogInfo((object)"Skipping spawn: 'Web' is disabled.");
					}
					else if (Enum.TryParse<Type>(mess, ignoreCase: true, out result))
					{
						Mess val = instance.SpawnJunkItem(result, position);
						if ((Object)(object)val == (Object)null)
						{
							CrowdControlMod.mls.LogWarning((object)$"SpawnJunkItem returned null for {result}");
						}
						else
						{
							NetworkObject component = ((Component)val).GetComponent<NetworkObject>();
							CrowdControlMod.mls.LogInfo((object)$"Spawned {result} @ {position}. IsSpawned={Object.op_Implicit((Object)(object)component) && component.IsSpawned}");
							if (string.Equals(mess, "Fire", StringComparison.OrdinalIgnoreCase))
							{
								Object.Destroy((Object)(object)((Component)val).gameObject, 10f);
							}
						}
					}
					else
					{
						CrowdControlMod.mls.LogWarning((object)("Unknown mess '" + mess + "'. Enum parse failed; nothing spawned."));
					}
				}
			});
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Failed to spawn mess: " + ex.Message));
		}
	}

	private static ushort GenJunkIdFromIterator(MessManager mm)
	{
		FieldInfo field = typeof(MessManager).GetField("_messIdIterator", BindingFlags.Instance | BindingFlags.NonPublic);
		if (field == null)
		{
			throw new MissingFieldException("MessManager._messIdIterator not found.");
		}
		ushort it = (ushort)field.GetValue(mm);
		while (mm.activeJunk.Exists((SavedGO j) => j.id == it))
		{
			it++;
			if (it == ushort.MaxValue)
			{
				it = 1;
			}
		}
		field.SetValue(mm, it);
		return it;
	}

	private static byte ResolvePrefabTypeIndexSafe(MessManager mm, Mess targetPrefab)
	{
		try
		{
			if (!(typeof(MessManager).GetField("_messPrefabs", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.GetValue(mm) is Mess[] array) || array.Length == 0)
			{
				CrowdControlMod.mls.LogWarning((object)"Could not read _messPrefabs; defaulting type byte to 0.");
				return 0;
			}
			for (int i = 0; i < array.Length; i++)
			{
				if (!((Object)(object)array[i] == (Object)null) && ((Object)array[i]).name == ((Object)targetPrefab).name)
				{
					return (byte)i;
				}
			}
			CrowdControlMod.mls.LogWarning((object)"Web prefab not found in _messPrefabs; defaulting type byte to 0.");
			return 0;
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogWarning((object)("ResolvePrefabTypeIndexSafe failed: " + ex.Message + ". Defaulting to 0."));
			return 0;
		}
	}

	public static CrowdResponse ClearMess(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		Mess[] array = Object.FindObjectsOfType<Mess>();
		if (array == null || array.Length == 0)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "No messes found to clean.");
		}
		try
		{
			if (IsHost())
			{
				CleanMess_Host(hostInitiated: true);
			}
			else
			{
				TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
				ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
				{
					tcs.SetResult(s);
				});
				ChatComms.SendMessage("ClearMess", "CMD", req.id);
				status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
				ChatComms.RemoveResponder(req.id);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_RETRY;
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void CleanMess_Host(bool hostInitiated)
	{
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				//IL_0048: 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)
				MessManager instance = Singleton<MessManager>.Instance;
				List<Mess> list = new List<Mess>();
				foreach (object value in Enum.GetValues(typeof(Type)))
				{
					Mess[] array = Object.FindObjectsOfType<Mess>();
					Mess[] array2 = array;
					foreach (Mess val in array2)
					{
						if (val.type == (Type)value)
						{
							list.Add(val);
							Object.Destroy((Object)(object)((Component)val).gameObject);
						}
					}
				}
				foreach (Mess item in list)
				{
					instance.OnMessCleared(item);
				}
			});
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Failed to clear mess: " + ex.Message));
		}
	}

	public static CrowdResponse SpawnHypeTrain(ControlClient client, CrowdRequest req)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		ulong value = SteamClient.SteamId.Value;
		ChatComms.SendMessage("HypeTrain", "BST", 0, "steamID", value, "sourceDetails", req.sourceDetails);
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse HighFOV(ControlClient client, CrowdRequest req)
	{
		int num = 30;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		if (TimedThread.isRunning(TimedType.HIGH_FOV))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		if (TimedThread.isRunning(TimedType.LOW_FOV))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to update FOV.");
		}
		new Thread(new TimedThread(req.GetReqID(), TimedType.HIGH_FOV, num * 1000).Run).Start();
		return new TimedResponse(req.GetReqID(), num * 1000);
	}

	public static CrowdResponse LowFOV(ControlClient client, CrowdRequest req)
	{
		int num = 30;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		if (TimedThread.isRunning(TimedType.HIGH_FOV))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		if (TimedThread.isRunning(TimedType.LOW_FOV))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to update FOV.");
		}
		new Thread(new TimedThread(req.GetReqID(), TimedType.LOW_FOV, num * 1000).Run).Start();
		return new TimedResponse(req.GetReqID(), num * 1000);
	}

	public static CrowdResponse LimitFPS(ControlClient client, CrowdRequest req)
	{
		int num = 30;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		if (TimedThread.isRunning(TimedType.LIMIT_FPS))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to update FPS limit.");
		}
		new Thread(new TimedThread(req.GetReqID(), TimedType.LIMIT_FPS, num * 1000).Run).Start();
		return new TimedResponse(req.GetReqID(), num * 1000);
	}

	public static CrowdResponse LimitRender(ControlClient client, CrowdRequest req)
	{
		int num = 30;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		if (TimedThread.isRunning(TimedType.LIMIT_RENDER))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to update limit render distance.");
		}
		new Thread(new TimedThread(req.GetReqID(), TimedType.LIMIT_RENDER, num * 1000).Run).Start();
		return new TimedResponse(req.GetReqID(), num * 1000);
	}

	public static CrowdResponse ThirdPersonMode(ControlClient client, CrowdRequest req)
	{
		int num = 5;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		if (TimedThread.isRunning(TimedType.THRID_PERSON))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_RETRY);
		}
		AppSettingsManager instance = Singleton<AppSettingsManager>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to set to 3rd person.");
		}
		new Thread(new TimedThread(req.GetReqID(), TimedType.THRID_PERSON, num * 1000).Run).Start();
		return new TimedResponse(req.GetReqID(), num * 1000);
	}

	public static void EnableThirdPerson()
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			//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_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_0036: 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_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_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)
			PlayerCamera instance = Singleton<PlayerCamera>.Instance;
			Transform parent = ((Component)instance).transform.parent;
			float num = 1.8f;
			float num2 = 0.3f;
			Vector3 position = parent.position - parent.forward * num;
			position.y += num2;
			((Component)instance).transform.position = position;
			((Component)instance).transform.LookAt(parent.position + Vector3.up * 1f);
			PlayerAvatar instance2 = Singleton<PlayerAvatar>.Instance;
			instance2.SetVisible(true, true);
			PlayerInventory playerInventoryInstanceByOwner = GetPlayerInventoryInstanceByOwner();
			Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true);
			foreach (Transform val in componentsInChildren)
			{
				if (ToolNames.Contains(((Object)val).name))
				{
					((Component)val).gameObject.SetActive(false);
				}
			}
			FieldInfo fieldInfo = AccessTools.Field(typeof(PlayerInventory), "interactiveHitDist");
			if (fieldInfo != null)
			{
				fieldInfo.SetValue(playerInventoryInstanceByOwner, 4.2f);
			}
			byte selectedSlot = playerInventoryInstanceByOwner.selectedSlot;
			byte b = (byte)((selectedSlot < 9) ? ((byte)(selectedSlot + 1)) : 0);
			callFunc(playerInventoryInstanceByOwner, "OnSelectedSlotChanged", new object[2] { selectedSlot, b });
			callFunc(playerInventoryInstanceByOwner, "OnSelectedSlotChanged", new object[2] { b, selectedSlot });
			CrowdControlMod.thirdPerson = true;
		});
	}

	public static void DisableThirdPerson()
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			//IL_0019: 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)
			PlayerCamera instance = Singleton<PlayerCamera>.Instance;
			Transform parent = ((Component)instance).transform.parent;
			((Component)instance).transform.localPosition = Vector3.zero;
			((Component)instance).transform.localRotation = Quaternion.identity;
			PlayerAvatar instance2 = Singleton<PlayerAvatar>.Instance;
			instance2.SetVisible(false, false);
			PlayerInventory playerInventoryInstanceByOwner = GetPlayerInventoryInstanceByOwner();
			Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true);
			foreach (Transform val in componentsInChildren)
			{
				if (ToolNames.Contains(((Object)val).name))
				{
					((Component)val).gameObject.SetActive(true);
				}
			}
			FieldInfo fieldInfo = AccessTools.Field(typeof(PlayerInventory), "interactiveHitDist");
			if (fieldInfo != null)
			{
				fieldInfo.SetValue(playerInventoryInstanceByOwner, 2f);
			}
			CrowdControlMod.thirdPerson = false;
		});
	}

	public static CrowdResponse GiveMoney(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		string text = ((req.code.Split(new char[1] { '_' }).Length > 1) ? req.code.Split(new char[1] { '_' })[1] : string.Empty);
		if (string.IsNullOrEmpty(text) || !ulong.TryParse(text, out var amount))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE);
		}
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				GameStatus instance = Singleton<GameStatus>.Instance;
				instance.AddMoneyServerRpc(amount);
			});
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse TakeMoney(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		GameStatus gameStatus = Singleton<GameStatus>.Instance;
		string text = ((req.code.Split(new char[1] { '_' }).Length > 1) ? req.code.Split(new char[1] { '_' })[1] : string.Empty);
		if (string.IsNullOrEmpty(text) || !ulong.TryParse(text, out var result))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE);
		}
		if (gameStatus.moneyInit - result < 0)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to remove more money than is available.");
		}
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				gameStatus.RemoveMoneyServerRpc(100uL);
			});
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse ShakePlayerScreen(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		int duration = 30;
		if (req.duration > 0)
		{
			duration = req.duration / 1000;
		}
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				PlayerCamera instance = Singleton<PlayerCamera>.Instance;
				instance.DoShake((float)duration, 1f);
			});
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse ToggleTavern(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		GameStatus gameStatus = Singleton<GameStatus>.Instance;
		string message = "";
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				gameStatus.TavernOpenCloseServerRpc(!gameStatus.isTavernOpen.Value);
			});
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		if (status == CrowdResponse.Status.STATUS_SUCCESS)
		{
			string text = "Tavern has been " + (gameStatus.isTavernOpen.Value ? "closed" : "opened") + ".";
			ChatComms.SendMessage("SendUIMessage", "BST", 0, "msg", text);
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse TurnOutLights(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		if (CrowdControlMod.lightsOut)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Lights are already out.");
		}
		try
		{
			TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
			ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
			{
				tcs.SetResult(s);
			});
			ChatComms.SendMessage("TurnOutLights", "CMD", req.id);
			status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
			ChatComms.RemoveResponder(req.id);
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_RETRY;
		}
		if (status == CrowdResponse.Status.STATUS_FAILURE)
		{
			message = "Unable turn out the lights.";
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void TurnOnLights()
	{
		SwitchLights instance = Singleton<SwitchLights>.Instance;
		try
		{
			FieldInfo field = typeof(SwitchLights).GetField("state", BindingFlags.Instance | BindingFlags.NonPublic);
			if (field != null)
			{
				object value = field.GetValue(instance);
				PropertyInfo property = value.GetType().GetProperty("Value");
				if (property != null)
				{
					Type propertyType = property.PropertyType;
					object value2 = Enum.Parse(propertyType, "Lighted");
					property.SetValue(value, value2);
					callFunc(instance, "ToggleLights", true);
					callFunc(instance, "LightUp", null);
					callFunc(instance, "UnsubscribeEvents", null);
					CrowdControlMod.lightsOut = false;
				}
			}
		}
		catch (Exception arg)
		{
			CrowdControlMod.mls.LogError((object)$"Error updating state in Lights: {arg}");
		}
	}

	public static void TurnOutLights_All()
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			try
			{
				SwitchLights instance = Singleton<SwitchLights>.Instance;
				callFunc(instance, "ToggleLights", false);
				callFunc(instance, "SetDark", null);
				callFunc(instance, "SubscribeEvents", null);
				callFunc(instance, "SaveDefaultLightProbes", null);
				FieldInfo field = typeof(SwitchLights).GetField("candleInteractive", BindingFlags.Instance | BindingFlags.NonPublic);
				object? value = field.GetValue(instance);
				Interactive val = (Interactive)((value is Interactive) ? value : null);
				if ((Object)(object)val != (Object)null)
				{
					val.SetInteractParams((Event)1, true, "", 0);
				}
				CrowdControlMod.lightsOut = true;
			}
			catch (Exception ex)
			{
				CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			}
		});
	}

	public static CrowdResponse EnableFog(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		if ((double)RenderSettings.fogDensity > 0.01)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to activate fog at this time.");
		}
		int num = 30;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		try
		{
			TurnOnFog(num);
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse EnableFogAll(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		if ((double)RenderSettings.fogDensity > 0.01)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to activate fog at this time.");
		}
		int num = 30;
		if (req.duration > 0)
		{
			num = req.duration / 1000;
		}
		try
		{
			ChatComms.SendMessage("ServerFog", "BST", 0, "duration", num);
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void TurnOnFog(float duration)
	{
		CrowdControlMod.ActionQueue.Enqueue(delegate
		{
			try
			{
				SwitchLights instance = Singleton<SwitchLights>.Instance;
				callFunc(instance, "EnableDarkNearFog", null);
				callFunc(instance, "DisableDarkFog", duration + 8f);
			}
			catch (Exception ex)
			{
				CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			}
		});
	}

	public static CrowdResponse SpawnBoss(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				try
				{
				}
				catch (Exception ex2)
				{
					CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex2.ToString()));
				}
			});
		}
		catch (Exception ex)
		{
			status = CrowdResponse.Status.STATUS_RETRY;
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static CrowdResponse BreakFurniture(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		Furniture[] array = Object.FindObjectsOfType<Furniture>();
		if (array == null || array.Length == 0)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "No furniture to break!");
		}
		bool flag = false;
		Furniture[] array2 = array;
		foreach (Furniture val in array2)
		{
			if (val.canBeBroken && !val.isBroken.Value)
			{
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "All furniture already broken!");
		}
		try
		{
			if (IsHost())
			{
				BreakFurniture_Host(hostInitiated: true);
			}
			else
			{
				TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
				ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
				{
					tcs.SetResult(s);
				});
				ChatComms.SendMessage("BreakFurniture", "CMD", req.id);
				status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
				ChatComms.RemoveResponder(req.id);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_RETRY;
		}
		if (status == CrowdResponse.Status.STATUS_FAILURE)
		{
			message = "Unable to break any furniture";
		}
		if (status == CrowdResponse.Status.STATUS_SUCCESS)
		{
			string text = "All furniture has been broken!";
			ChatComms.SendMessage("SendUIMessage", "BST", 0, "msg", text, "soundFX", "GunBreak");
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void BreakFurniture_Host(bool hostInitiated)
	{
		try
		{
			Furniture[] array = Object.FindObjectsOfType<Furniture>();
			if (array == null || array.Length == 0)
			{
				return;
			}
			Furniture[] array2 = array;
			foreach (Furniture val in array2)
			{
				if (!((Object)(object)val == (Object)null) && val.canBeBroken && !val.isBroken.Value)
				{
					try
					{
						val.Break();
					}
					catch (Exception)
					{
					}
				}
			}
		}
		catch (Exception ex2)
		{
			CrowdControlMod.mls.LogInfo((object)("Unable to break furniture: " + ex2.Message));
		}
	}

	public static CrowdResponse SpawnItem(ControlClient client, CrowdRequest req)
	{
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0146: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		string text = "Unable to Spawn Item!";
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		string text2 = ((req.code.Split(new char[1] { '_' }).Length > 1) ? req.code.Split(new char[1] { '_' })[1] : string.Empty);
		if (text2 == null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to find that item.");
		}
		uint value;
		bool num = items.TryGetValue(text2, out value);
		uint num2 = value;
		if (!num)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to find that item.");
		}
		try
		{
			Transform transform = ((Component)Singleton<PlayerCamera>.Instance).transform;
			if (IsHost())
			{
				SpawnItem_Host(hostInitiated: true, transform.position, transform.forward, transform.rotation, num2);
			}
			else
			{
				TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
				ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
				{
					tcs.SetResult(s);
				});
				ChatComms.SendMessage("SpawnItem", "CMD", req.id, "position", transform.position, "forward", transform.forward, "rotation", transform.rotation, "itemID", num2);
				status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
				ChatComms.RemoveResponder(req.id);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_RETRY;
		}
		if (status == CrowdResponse.Status.STATUS_SUCCESS)
		{
			SendUIMessage(req.viewer + " sent a " + AddSpacesBeforeUppercase(text2));
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void SpawnItem_Host(bool hostInitiated, Vector3 position, Vector3 forward, Quaternion rotation, uint itemID)
	{
		//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_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_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)
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				//IL_0021: 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_0031: 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_003b: 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_004b: 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)
				ItemData val = default(ItemData);
				if (ItemManager.Instance.GetItemData(itemID, ref val))
				{
					Item val2 = default(Item);
					((Item)(ref val2))..ctor(val);
					Vector3 val3 = position + forward * 3f + Vector3.up;
					CollectibleManager.Instance.Spawn(val2, val3, rotation, 0u);
				}
			});
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Failed to spawn customer: " + ex.Message));
		}
	}

	public static CrowdResponse ChangeTime(ControlClient client, CrowdRequest req)
	{
		string message = "Unable to Change Time!";
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message2 = "";
		string text = ((req.code.Split(new char[1] { '_' }).Length > 1) ? req.code.Split(new char[1] { '_' })[1] : string.Empty);
		if (string.IsNullOrEmpty(text) || !float.TryParse(text, out var result))
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, message);
		}
		DayNight instance = Singleton<DayNight>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, message);
		}
		try
		{
			if (IsHost())
			{
				ChangeTime_Host(hostInitiated: true, result);
			}
			else
			{
				TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
				ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
				{
					tcs.SetResult(s);
				});
				ChatComms.SendMessage("ChangeTime", "CMD", req.id, "hours", result);
				status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
				ChatComms.RemoveResponder(req.id);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_RETRY;
		}
		return new CrowdResponse(req.GetReqID(), status, message2);
	}

	public static void ChangeTime_Host(bool hostInitiated, float hour)
	{
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				DayNight instance = Singleton<DayNight>.Instance;
				instance.AddTime(hour);
			});
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Failed to spawn customer: " + ex.Message));
		}
	}

	public static CrowdResponse SpawnCustomer(ControlClient client, CrowdRequest req)
	{
		CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS;
		string message = "";
		GameStatus instance = Singleton<GameStatus>.Instance;
		if (!instance.isTavernOpen.Value)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to spawn customer while tavern is closed.");
		}
		string text = ((req.code.Split(new char[1] { '_' }).Length > 1) ? req.code.Split(new char[1] { '_' })[1] : string.Empty);
		bool flag = ((text == "vip") ? true : false);
		CustomersManager instance2 = Singleton<CustomersManager>.Instance;
		if ((Object)(object)instance2 == (Object)null)
		{
			return new CrowdResponse(req.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Unable to spawn customer.");
		}
		string viewer = req.viewer;
		try
		{
			string text2 = viewer;
			if (IsHost())
			{
				SpawnCustomer_Host(hostInitiated: true, flag, viewer);
			}
			else
			{
				TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>();
				ChatComms.AddResponder(req.id, delegate(CrowdResponse.Status s)
				{
					tcs.SetResult(s);
				});
				ChatComms.SendMessage("SpawnCustomer", "CMD", req.id, "vip", flag, "viewerName", viewer);
				status = (tcs.Task.Wait(SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY);
				ChatComms.RemoveResponder(req.id);
			}
		}
		catch (Exception ex)
		{
			CrowdControlMod.mls.LogInfo((object)("Crowd Control Error: " + ex.ToString()));
			status = CrowdResponse.Status.STATUS_FAILURE;
		}
		return new CrowdResponse(req.GetReqID(), status, message);
	}

	public static void SpawnCustomer_Host(bool hostInitiated, bool vip, string viewerName)
	{
		try
		{
			CrowdControlMod.ActionQueue.Enqueue(delegate
			{
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0060: Expected O, but got Unknown
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0080: Expected O, but got Unknown
				//IL_009a: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Expected O, but got Unknown
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Expected O, but got Unknown
				//IL_012d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0132: 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_0156: Unknown result type (might be due to invalid IL or missing references)
				CustomersManager instance;
				try
				{
					instance = Singleton<CustomersManager>.Instance;
					if ((Object)(object)instance == (Object)null)
					{
						throw new InvalidOperationException("CustomersManager instance is null.");
					}
				}
				catch (Exception arg)
				{
					Debug.LogError((object)$"Error accessing CustomersManager: {arg}");
					return;
				}
				Customer val;
				ObjectNameManager val2;
				ObjectNameManager val3;
				Transform val4;
				try
				{
					val = (Customer)AccessTools.Field(typeof(CustomersManager), "customerPrefab").GetValue(instance);
					val2 = (ObjectNameManager)AccessTools.Field(typeof(CustomersManager), "femaleNamesManager").GetValue(instance);
					val3 = (ObjectNameManager)AccessTools.Field(typeof(CustomersManager), "maleNamesManager").GetValue(instance);
					val4 = (Transform)AccessTools.Field(typeof(CustomersManager), "tavernEnter").GetValue(instance);
				}
				catch (Exception arg2)
				{
					Debug.LogError((object)$"Error accessing private fields: {arg2}");
					return;
				}
				ushort num;
				try
				{
					MethodInfo methodInfo = AccessTools.Method(typeof(CustomersManager), "GenId", (Type[])null, (Type[])null);
					num = (ushort)methodInfo.Invoke(instance, null);
				}
				catch (Exception arg3)
				{
					Debug.LogError((object)$"Error invoking GenId method: {arg3}");
					return;
				}
				Vector3 position;
				try
				{
					position = instance.debugSpawnPoint.position;
				}
				catch (Exception arg4)
				{
					Debug.LogError((object)$"Error determining spawn position: {arg4}");
					return;
				}
				Customer val5;
				try
				{
					val5 = Object.Instantiate<Customer>(val, position, Quaternion.identity);
				}
				catch (Exception arg5)
				{
					Debug.LogError((object)$"Error instantiating customer: {arg5}");
					return;
				}
				CustomerNavigation component;
				CustomerNameManager component2;
				CustomerSkins component3;
				NetworkObject component4;
				try
				{
					component = ((Component)val5).GetComponent<CustomerNavigation>();
					component2 = ((Component)val5).GetComponent<CustomerNameManager>();
					component3 = ((Component)val5).GetComponent<CustomerSkins>();
					component4 = ((Component)val5).GetComponent<NetworkObject>();
				}
				catch (Exception arg6)
				{
					Debug.LogError((object)$"Error accessing customer components: {arg6}");
					return;
		

BepInEx/plugins/HypeTrain.dll

Decompiled 3 weeks 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 TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
public class HypeTrainTester : MonoBehaviour
{
	[SerializeField]
	private string[] m_names = new string[0];

	[SerializeField]
	private HypeTrain m_hypeTrainPrototype;

	[SerializeField]
	private Transform m_startTransform;

	[SerializeField]
	private Transform m_endTransform;

	[SerializeField]
	private Transform m_playerTransform;

	private HypeTrain m_createdHypeTrain;

	private void Start()
	{
		((MonoBehaviour)this).StartCoroutine(StartTest());
	}

	private IEnumerator StartTest()
	{
		yield return (object)new WaitForSeconds(0.5f);
		m_createdHypeTrain = Object.Instantiate<HypeTrain>(m_hypeTrainPrototype);
		m_createdHypeTrain.OnFinishedEvent.AddListener(new UnityAction(ResetTest));
		HypeTrainBoxData[] array = new HypeTrainBoxData[m_names.Length];
		for (int i = 0; i < m_names.Length; i++)
		{
			array[i] = new HypeTrainBoxData
			{
				name = m_names[i],
				box_color = Color.HSVToRGB(Random.value, 1f, 1f),
				box_color_rate = ((((uint)i & (true ? 1u : 0u)) != 0) ? ((Random.Range(0, 1) == 0) ? (-0.2f) : 1f) : 0f),
				bit_amount = ((i % 4 == 0) ? Random.Range(1, 1000000) : 0),
				name_color = Color.HSVToRGB(Random.value, 1f, 1f)
			};
		}
		m_createdHypeTrain.StartHypeTrain(m_startTransform.position, m_endTransform.position, array, m_playerTransform);
	}

	private void ResetTest()
	{
		if ((Object)null != (Object)(object)m_createdHypeTrain)
		{
			Object.Destroy((Object)(object)((Component)m_createdHypeTrain).gameObject);
			m_createdHypeTrain = null;
		}
		((MonoBehaviour)this).StartCoroutine(StartTest());
	}
}
public class HypeTrainBit : MonoBehaviour
{
	[SerializeField]
	private Animator m_animator;

	[SerializeField]
	private int m_bitValue;

	[SerializeField]
	private Rigidbody m_rigidbody;

	[SerializeField]
	private Collider m_collider;

	[SerializeField]
	private float m_lifeTime = 20f;

	private IEnumerator m_deathCoroutine;

	private static readonly int s_deathTrigger = Animator.StringToHash("Death");

	public int BitValue => m_bitValue;

	public Rigidbody Rigidbody => m_rigidbody;

	public Collider Collider => m_collider;

	public float LifeTime
	{
		get
		{
			return m_lifeTime;
		}
		set
		{
			m_lifeTime = value;
		}
	}

	private void Awake()
	{
		m_animator.StopPlayback();
	}

	public void StartDeathCountdown()
	{
		if (m_deathCoroutine != null)
		{
			((MonoBehaviour)this).StopCoroutine(m_deathCoroutine);
			m_deathCoroutine = null;
		}
		m_deathCoroutine = Death();
		((MonoBehaviour)this).StartCoroutine(m_deathCoroutine);
	}

	private IEnumerator Death()
	{
		yield return (object)new WaitForSeconds(m_lifeTime);
		m_animator.Play(s_deathTrigger, 0, 0f);
	}

	private void Kill()
	{
		Object.Destroy((Object)(object)((Component)this).gameObject);
	}
}
public class HypeTrain : MonoBehaviour
{
	[SerializeField]
	private Rigidbody m_rigidBody;

	[SerializeField]
	private HypeTrainCarAudio m_carWheelsAudio;

	[SerializeField]
	private HypeTrainLocomotive m_locomotive;

	[SerializeField]
	private HypeTrainBox m_boxPrototype;

	[SerializeField]
	private HypeTrainBitBox m_bitboxPrototype;

	[SerializeField]
	private float m_distancePerSecond = 4f;

	[SerializeField]
	private HypeTrainBit[] m_bitPrototypes = new HypeTrainBit[0];

	[SerializeField]
	private bool m_keepAliveOnFinish;

	[SerializeField]
	private Shader m_builtinShader;

	[SerializeField]
	private Shader m_urpShader;

	[SerializeField]
	private Shader m_hdrpShader;

	private UnityEvent m_onFinishedEvent = new UnityEvent();

	private List<HypeTrainBox> m_activeBoxes = new List<HypeTrainBox>();

	private Queue<HypeTrainBox> m_availableBoxes = new Queue<HypeTrainBox>();

	private Queue<HypeTrainBitBox> m_availableBitBoxes = new Queue<HypeTrainBitBox>();

	private Vector3 m_startPosition = Vector3.zero;

	private Vector3 m_stopPosition = Vector3.zero;

	private Vector3 m_direction = Vector3.zero;

	private float m_trackDistance;

	private Transform m_playerRoot;

	private int m_nextBoxIndexToSpawn;

	private float m_nextBoxOffset;

	private HypeTrainBoxData[] m_boxData;

	private bool m_shadersDistributed;

	public UnityEvent OnFinishedEvent => m_onFinishedEvent;

	private void Awake()
	{
		//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)
		m_bitPrototypes = m_bitPrototypes.OrderByDescending((HypeTrainBit bit) => bit.BitValue).ToArray();
		((Component)m_locomotive).transform.localPosition = -m_locomotive.FrontLoc.localPosition;
		((UnityEvent<HypeTrainCar, HypeTrainCar.Visibility>)m_locomotive.OnVisibilityChangedEvent).AddListener((UnityAction<HypeTrainCar, HypeTrainCar.Visibility>)OnLocomotiveFinished);
		StopHypeTrain();
		((Component)m_boxPrototype).gameObject.SetActive(false);
		((Component)m_bitboxPrototype).gameObject.SetActive(false);
	}

	private void FixedUpdate()
	{
		//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_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)
		float num = Time.deltaTime * m_distancePerSecond;
		m_rigidBody.MovePosition(m_rigidBody.position + m_direction * num);
		m_locomotive.UpdateCar(Time.deltaTime, num);
		foreach (HypeTrainBox activeBox in m_activeBoxes)
		{
			activeBox.UpdateCar(Time.deltaTime, num);
		}
		m_carWheelsAudio.UpdateAudio(Time.deltaTime, num, m_locomotive, m_activeBoxes, m_playerRoot);
	}

	public void StartHypeTrain(Vector3 startWorldPosition, Vector3 stopWorldPosition, HypeTrainBoxData[] boxData, Transform playerRoot = null, HypeTrainOptions options = null)
	{
		//IL_0007: 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_000e: 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_0015: 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_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_0036: 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_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_014f: 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_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_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_0175: Unknown result type (might be due to invalid IL or missing references)
		//IL_017c: Unknown result type (might be due to invalid IL or missing references)
		StopHypeTrain();
		m_startPosition = startWorldPosition;
		m_stopPosition = stopWorldPosition;
		Vector3 val = m_stopPosition - m_startPosition;
		m_trackDistance = ((Vector3)(ref val)).magnitude;
		m_direction = ((Vector3)(ref val)).normalized;
		m_boxData = boxData;
		m_playerRoot = playerRoot;
		m_nextBoxIndexToSpawn = 0;
		m_nextBoxOffset = 0f - m_locomotive.CalculateCarLength();
		m_distancePerSecond = ((options != null && options.distance_per_second.HasValue) ? options.distance_per_second.Value : m_distancePerSecond);
		m_keepAliveOnFinish = ((options != null && options.keep_alive_on_finish.HasValue) ? options.keep_alive_on_finish.Value : m_keepAliveOnFinish);
		if (options != null && options.train_layer.HasValue)
		{
			SetLayerRecursive(((Component)this).gameObject, options.train_layer.Value);
			HypeTrainBit[] bitPrototypes = m_bitPrototypes;
			foreach (HypeTrainBit hypeTrainBit in bitPrototypes)
			{
				SetLayerRecursive(((Component)hypeTrainBit).gameObject, options.train_layer.Value);
			}
		}
		if (options != null && options.volume.HasValue)
		{
			SetVolume(options.volume.Value);
		}
		Transform transform = ((Component)this).transform;
		Vector3 position = (m_rigidBody.position = startWorldPosition);
		transform.position = position;
		Transform transform2 = ((Component)this).transform;
		Quaternion rotation = (m_rigidBody.rotation = Quaternion.LookRotation(m_direction));
		transform2.rotation = rotation;
		int num = Mathf.Min(Mathf.CeilToInt((m_trackDistance + m_boxPrototype.CalculateCarLength()) / m_boxPrototype.CalculateCarLength()), boxData.Length);
		for (int j = 0; j < num; j++)
		{
			HypeTrainBox hypeTrainBox = Object.Instantiate<HypeTrainBox>(m_boxPrototype, ((Component)m_boxPrototype).transform.parent, false);
			((UnityEvent<HypeTrainCar, HypeTrainCar.Visibility>)hypeTrainBox.OnVisibilityChangedEvent).AddListener((UnityAction<HypeTrainCar, HypeTrainCar.Visibility>)OnBoxFinished);
			m_availableBoxes.Enqueue(hypeTrainBox);
		}
		num = Mathf.Min(Mathf.CeilToInt((m_trackDistance + m_bitboxPrototype.CalculateCarLength()) / m_bitboxPrototype.CalculateCarLength()), boxData.Length);
		for (int k = 0; k < num; k++)
		{
			HypeTrainBitBox hypeTrainBitBox = Object.Instantiate<HypeTrainBitBox>(m_bitboxPrototype, ((Component)m_bitboxPrototype).transform.parent, false);
			hypeTrainBitBox.Init(m_bitPrototypes, playerRoot, options?.player_collider_radius, options?.max_bits_per_car, options?.bit_lifetime_in_seconds);
			((UnityEvent<HypeTrainCar, HypeTrainCar.Visibility>)hypeTrainBitBox.OnVisibilityChangedEvent).AddListener((UnityAction<HypeTrainCar, HypeTrainCar.Visibility>)OnBoxFinished);
			m_availableBitBoxes.Enqueue(hypeTrainBitBox);
		}
		m_carWheelsAudio.StartPersistentSounds();
		((Component)m_locomotive).gameObject.SetActive(true);
		m_locomotive.Engage(0f, m_trackDistance + m_locomotive.CalculateCarLength(), 0);
		FlushAvailableBoxes();
	}

	public void StopHypeTrain()
	{
		m_carWheelsAudio.StopPersistentSounds();
		foreach (HypeTrainBox availableBox in m_availableBoxes)
		{
			Object.Destroy((Object)(object)((Component)availableBox).gameObject);
		}
		m_availableBoxes.Clear();
		foreach (HypeTrainBitBox availableBitBox in m_availableBitBoxes)
		{
			Object.Destroy((Object)(object)((Component)availableBitBox).gameObject);
		}
		m_availableBitBoxes.Clear();
		foreach (HypeTrainBox activeBox in m_activeBoxes)
		{
			Object.Destroy((Object)(object)((Component)activeBox).gameObject);
		}
		m_activeBoxes.Clear();
		((Component)m_locomotive).gameObject.SetActive(false);
	}

	public void SetDistancePerSecond(float distancePerSecond)
	{
		m_distancePerSecond = distancePerSecond;
	}

	public void SetKeepAliveOnFinish(bool keepAlive)
	{
		m_keepAliveOnFinish = keepAlive;
	}

	public void SetVolume(float volume)
	{
		m_locomotive.SetBaseVolume(volume);
		m_carWheelsAudio.SetBaseVolume(volume);
	}

	private void OnLocomotiveFinished(HypeTrainCar car, HypeTrainCar.Visibility visibility)
	{
		if (visibility == HypeTrainCar.Visibility.Hidden)
		{
			FlushAvailableBoxes();
		}
	}

	private void OnBoxFinished(HypeTrainCar car, HypeTrainCar.Visibility visibility)
	{
		if (visibility == HypeTrainCar.Visibility.Hidden)
		{
			m_activeBoxes.Remove((HypeTrainBox)car);
			if (((object)car).GetType() == typeof(HypeTrainBitBox))
			{
				HypeTrainBitBox item = (HypeTrainBitBox)car;
				m_availableBitBoxes.Enqueue(item);
			}
			else
			{
				m_availableBoxes.Enqueue((HypeTrainBox)car);
			}
			FlushAvailableBoxes();
		}
	}

	private void FlushAvailableBoxes()
	{
		//IL_003e: 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_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_007b: 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)
		while (m_nextBoxIndexToSpawn < m_boxData.Length && m_availableBoxes.Count != 0)
		{
			HypeTrainBoxData hypeTrainBoxData = m_boxData[m_nextBoxIndexToSpawn];
			HypeTrainBox hypeTrainBox = null;
			hypeTrainBox = ((hypeTrainBoxData.bit_amount <= 0) ? m_availableBoxes.Dequeue() : m_availableBitBoxes.Dequeue());
			((Component)hypeTrainBox).transform.localPosition = Vector3.forward * m_nextBoxOffset - hypeTrainBox.FrontLoc.localPosition;
			float num = hypeTrainBox.CalculateCarLength();
			float num2 = Mathf.Abs(m_nextBoxOffset);
			Vector3 val = ((Component)this).transform.position - m_startPosition;
			float num3 = num2 - ((Vector3)(ref val)).magnitude;
			hypeTrainBox.Engage(hypeTrainBoxData, num3, num3 + m_trackDistance + num, m_nextBoxIndexToSpawn + 1);
			m_activeBoxes.Add(hypeTrainBox);
			m_nextBoxIndexToSpawn++;
			m_nextBoxOffset -= num;
		}
		bool flag = false;
		flag |= ((Component)m_locomotive).gameObject.activeSelf;
		foreach (HypeTrainBox activeBox in m_activeBoxes)
		{
			flag |= ((Component)activeBox).gameObject.activeSelf;
		}
		if (!flag)
		{
			OnFinishedEvent.Invoke();
			StopHypeTrain();
			if (!m_keepAliveOnFinish)
			{
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
		}
	}

	private void SetLayerRecursive(GameObject go, int layer)
	{
		go.layer = layer;
		for (int i = 0; i < go.transform.childCount; i++)
		{
			SetLayerRecursive(((Component)go.transform.GetChild(i)).gameObject, layer);
		}
	}
}
public class HypeTrainBitBox : HypeTrainBox
{
	[SerializeField]
	private BoxCollider m_bitSpawnZone;

	[SerializeField]
	private int m_maxBitBreaks = 100;

	[SerializeField]
	private TextMeshPro[] m_bitsTexts = (TextMeshPro[])(object)new TextMeshPro[0];

	[SerializeField]
	private HypeTrainBitBoxPlayerCollider m_playerCollider;

	private List<HypeTrainBit> m_createdBits = new List<HypeTrainBit>();

	private HypeTrainBit[] m_bitPrototypes;

	private int? m_maxBitsToSpawn;

	private float? m_bitLifetimeInSeconds;

	public void Init(HypeTrainBit[] bitPrototypes, Transform playerRoot, float? playerColliderRadius = null, int? maxBitsToSpawn = null, float? bitLifetimeInSeconds = null)
	{
		m_bitPrototypes = bitPrototypes;
		m_maxBitsToSpawn = maxBitsToSpawn;
		m_bitLifetimeInSeconds = bitLifetimeInSeconds;
		m_playerCollider.Init(this, playerRoot, playerColliderRadius);
	}

	public override void Engage(HypeTrainBoxData data, float distanceToStart, float distanceToStop, int index)
	{
		base.Engage(data, distanceToStart, distanceToStop, index);
		TextMeshPro[] bitsTexts = m_bitsTexts;
		for (int i = 0; i < bitsTexts.Length; i++)
		{
			((TMP_Text)bitsTexts[i]).SetText($"BITS: {data.bit_amount}", true);
		}
		SpawnBits(data.bit_amount);
	}

	public void SpawnBits(int amount)
	{
		//IL_008b: 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_00c2: 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_010f: Unknown result type (might be due to invalid IL or missing references)
		RelinquishCreatedBits();
		if (m_bitPrototypes == null)
		{
			return;
		}
		int num = (m_maxBitsToSpawn.HasValue ? m_maxBitsToSpawn.Value : amount);
		int num2 = m_maxBitBreaks;
		Vector3 localPosition = default(Vector3);
		while (amount > 0 && num > 0)
		{
			int num3 = amount;
			if (0 < num2)
			{
				num3 = Random.Range(1, amount + 1);
			}
			amount -= num3;
			while (0 < num3 && num > 0)
			{
				HypeTrainBit[] bitPrototypes = m_bitPrototypes;
				foreach (HypeTrainBit hypeTrainBit in bitPrototypes)
				{
					if (hypeTrainBit.BitValue <= num3)
					{
						num3 -= hypeTrainBit.BitValue;
						num--;
						((Vector3)(ref localPosition))..ctor(Random.Range((0f - m_bitSpawnZone.size.x) * 0.5f, m_bitSpawnZone.size.x * 0.5f), 0f, Random.Range((0f - m_bitSpawnZone.size.z) * 0.5f, m_bitSpawnZone.size.z * 0.5f));
						HypeTrainBit hypeTrainBit2 = Object.Instantiate<HypeTrainBit>(hypeTrainBit, ((Component)m_bitSpawnZone).transform, false);
						((Component)hypeTrainBit2).transform.localPosition = localPosition;
						hypeTrainBit2.Rigidbody.isKinematic = true;
						hypeTrainBit2.Collider.enabled = true;
						m_createdBits.Add(hypeTrainBit2);
					}
				}
			}
			num2--;
		}
	}

	protected override void OnShowFinished()
	{
		base.OnShowFinished();
		if (m_createdBits.Count == 0)
		{
			SpawnBits(100);
		}
	}

	protected override void OnHideFinished()
	{
		base.OnHideFinished();
		foreach (HypeTrainBit createdBit in m_createdBits)
		{
			Object.Destroy((Object)(object)((Component)createdBit).gameObject);
		}
		m_createdBits.Clear();
	}

	public void RelinquishCreatedBits()
	{
		foreach (HypeTrainBit createdBit in m_createdBits)
		{
			createdBit.Rigidbody.isKinematic = false;
			createdBit.Collider.enabled = true;
			((Component)createdBit).transform.SetParent((Transform)null, true);
			if (m_bitLifetimeInSeconds.HasValue)
			{
				createdBit.LifeTime = m_bitLifetimeInSeconds.Value;
			}
			createdBit.StartDeathCountdown();
		}
		m_createdBits.Clear();
	}
}
public class HypeTrainBitBoxPlayerCollider : MonoBehaviour
{
	[SerializeField]
	private SphereCollider m_collider;

	private HypeTrainBitBox m_owner;

	private Transform m_playerRoot;

	public void Init(HypeTrainBitBox owner, Transform playerRoot, float? playerColliderRadius = null)
	{
		m_owner = owner;
		m_playerRoot = playerRoot;
		if (playerColliderRadius.HasValue)
		{
			m_collider.radius = playerColliderRadius.Value;
		}
	}

	private void OnCollisionEnter(Collision other)
	{
		if ((Object)null != (Object)(object)m_owner && (Object)(object)other.transform == (Object)(object)m_playerRoot)
		{
			m_owner.RelinquishCreatedBits();
		}
	}

	private void OnTriggerEnter(Collider other)
	{
		if ((Object)null != (Object)(object)m_owner && (Object)(object)((Component)other).transform == (Object)(object)m_playerRoot)
		{
			m_owner.RelinquishCreatedBits();
		}
	}
}
public class HypeTrainBox : HypeTrainCar
{
	[SerializeField]
	private TextMeshPro[] m_nameTexts;

	private Material m_carMaterial;

	private Color m_carColor;

	private float m_carColorRate;

	private static int s_trimColorMaterialPropertyID = Shader.PropertyToID("_TrimColor");

	public virtual void Engage(HypeTrainBoxData data, float distanceToStart, float distanceToStop, int index)
	{
		//IL_0012: 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)
		Engage(distanceToStart, distanceToStop, index);
		SetName(data.name, data.name_color);
		SetBoxColor(data.box_color, data.box_color_rate);
	}

	public override void UpdateCar(float dt, float delta)
	{
		//IL_0016: 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)
		base.UpdateCar(dt, delta);
		if (m_carColorRate != 0f)
		{
			float num2 = default(float);
			float num3 = default(float);
			float num = default(float);
			Color.RGBToHSV(m_carColor, ref num, ref num2, ref num3);
			for (num += m_carColorRate * delta; num > 1f; num -= 1f)
			{
			}
			for (; num < 0f; num += 1f)
			{
			}
			SetBoxColor(Color.HSVToRGB(num, num2, num3), m_carColorRate);
		}
	}

	public void SetName(string name, Color nameColor)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		TextMeshPro[] nameTexts = m_nameTexts;
		foreach (TextMeshPro obj in nameTexts)
		{
			((TMP_Text)obj).SetText(name, true);
			((Graphic)obj).color = nameColor;
		}
	}

	public void SetBoxColor(Color color, float carColorRate)
	{
		//IL_004a: 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_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Expected O, but got Unknown
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)null == (Object)(object)m_carMaterial)
		{
			m_carMaterial = new Material(((Renderer)base.Meshes[0]).material);
			MeshRenderer[] meshes = base.Meshes;
			for (int i = 0; i < meshes.Length; i++)
			{
				((Renderer)meshes[i]).material = m_carMaterial;
			}
		}
		m_carColor = color;
		if ((Object)null != (Object)(object)m_carMaterial)
		{
			m_carMaterial.SetColor(s_trimColorMaterialPropertyID, color);
		}
		m_carColorRate = carColorRate;
	}
}
[Serializable]
public class HypeTrainBoxData
{
	public string name = "";

	public Color name_color = new Color(1f, 1f, 1f);

	public Color box_color = new Color(0.3803921f, 0.7960785f, 0.545098f);

	public float box_color_rate;

	public int bit_amount;
}
public class HypeTrainCar : MonoBehaviour
{
	public enum Visibility
	{
		Visible,
		Hidden
	}

	public class VisibilityChangedEvent : UnityEvent<HypeTrainCar, Visibility>
	{
	}

	[SerializeField]
	private Animator m_animatorRoot;

	[SerializeField]
	private Animator m_animatorCar;

	[SerializeField]
	private Transform m_frontLoc;

	[SerializeField]
	private Transform m_backLoc;

	[SerializeField]
	private MeshRenderer[] m_meshes = (MeshRenderer[])(object)new MeshRenderer[0];

	private VisibilityChangedEvent m_onVisibilityChangedEvent = new VisibilityChangedEvent();

	private float m_distanceToStart;

	private float m_distanceToStop;

	private static readonly int s_animShowTag = Animator.StringToHash("Show");

	private static readonly int s_animHideTag = Animator.StringToHash("Hide");

	private static readonly int s_animWobbleTag = Animator.StringToHash("Wobble");

	protected MeshRenderer[] Meshes => m_meshes;

	public Transform FrontLoc => m_frontLoc;

	public Transform BackLoc => m_backLoc;

	public VisibilityChangedEvent OnVisibilityChangedEvent => m_onVisibilityChangedEvent;

	public void Engage(float distanceToStart, float distanceToStop, int index)
	{
		m_distanceToStart = distanceToStart;
		m_distanceToStop = distanceToStop;
		if (m_distanceToStart <= 0f)
		{
			Show();
			float num = 5f;
			m_animatorCar.Play(s_animWobbleTag, 0, (float)index % (num + 1f) / num);
		}
		if (m_distanceToStop <= 0f)
		{
			Hide();
		}
	}

	public virtual void UpdateCar(float dt, float delta)
	{
		if (m_distanceToStart > 0f)
		{
			m_distanceToStart -= delta;
			if (m_distanceToStart <= 0f)
			{
				m_distanceToStart = 0f;
				Show();
			}
		}
		if (m_distanceToStop > 0f)
		{
			m_distanceToStop -= delta;
			if (m_distanceToStop <= 0f)
			{
				m_distanceToStop = 0f;
				Hide();
			}
		}
	}

	public virtual void Show()
	{
		((Component)this).gameObject.SetActive(true);
		m_animatorRoot.Play(s_animShowTag, 0, 0f);
	}

	public virtual void Hide()
	{
		m_animatorRoot.Play(s_animHideTag, 0, 0f);
	}

	public float CalculateCarLength()
	{
		//IL_0006: 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_001b: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = m_frontLoc.localPosition - m_backLoc.localPosition;
		return ((Vector3)(ref val)).magnitude;
	}

	protected virtual void OnShowFinished()
	{
		((UnityEvent<HypeTrainCar, Visibility>)m_onVisibilityChangedEvent).Invoke(this, Visibility.Visible);
	}

	protected virtual void OnHideFinished()
	{
		((Component)this).gameObject.SetActive(false);
		((UnityEvent<HypeTrainCar, Visibility>)m_onVisibilityChangedEvent).Invoke(this, Visibility.Hidden);
	}
}
public class HypeTrainCarAudio : MonoBehaviour
{
	[SerializeField]
	private AudioSource m_carWheelsAudio;

	[SerializeField]
	private AudioSource m_carWheelsClankAudio;

	[SerializeField]
	private AudioClip[] m_carWheelsClankAudioClips = (AudioClip[])(object)new AudioClip[0];

	[SerializeField]
	private int m_maxSimultaneousClanks = 3;

	[SerializeField]
	private float m_clankMinInterval = 0.1f;

	[SerializeField]
	private float m_clankMaxInterval = 0.5f;

	private float m_nextClankTimer;

	private float[] m_clankTimers;

	private float m_wheelVolume = 1f;

	private float m_baseVolume = 1f;

	private void Awake()
	{
		m_clankTimers = new float[m_maxSimultaneousClanks];
	}

	public void StartPersistentSounds()
	{
		m_carWheelsAudio.Play();
	}

	public void StopPersistentSounds()
	{
		m_carWheelsAudio.Stop();
	}

	public void UpdateAudio(float dt, float delta, HypeTrainLocomotive locomotive, List<HypeTrainBox> activeBoxes, Transform playerRoot)
	{
		//IL_0006: 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_0012: 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_00d5: 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_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_0052: 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_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_008b: Unknown result type (might be due to invalid IL or missing references)
		Vector3 position = ((Component)locomotive).transform.position;
		float x = ((Component)locomotive).transform.lossyScale.x;
		if ((Object)null != (Object)(object)playerRoot)
		{
			float num = Vector3.SqrMagnitude(playerRoot.position - position);
			foreach (HypeTrainBox activeBox in activeBoxes)
			{
				float num2 = Vector3.SqrMagnitude(playerRoot.position - ((Component)activeBox).transform.position);
				if (num2 < num)
				{
					num = num2;
					position = ((Component)activeBox).transform.position;
					x = ((Component)activeBox).transform.lossyScale.x;
				}
			}
		}
		position.y += 0.75f;
		((Component)this).transform.position = Vector3.MoveTowards(((Component)m_carWheelsAudio).transform.position, position, delta * 4f);
		m_wheelVolume = Mathf.MoveTowards(m_wheelVolume, x, dt * 2f);
		AudioSource carWheelsAudio = m_carWheelsAudio;
		float volume = (m_carWheelsClankAudio.volume = m_baseVolume * m_wheelVolume);
		carWheelsAudio.volume = volume;
		if (m_nextClankTimer > 0f)
		{
			m_nextClankTimer -= dt;
			if (m_nextClankTimer <= 0f)
			{
				for (int i = 0; i < m_maxSimultaneousClanks; i++)
				{
					if (m_clankTimers[i] <= 0f)
					{
						AudioClip val = m_carWheelsClankAudioClips[Random.Range(0, m_carWheelsClankAudioClips.Length)];
						m_clankTimers[i] = val.length;
						m_carWheelsClankAudio.PlayOneShot(val);
						break;
					}
				}
			}
		}
		for (int j = 0; j < m_maxSimultaneousClanks; j++)
		{
			m_clankTimers[j] -= dt;
			if (m_clankTimers[j] <= 0f)
			{
				while (m_nextClankTimer <= 0f)
				{
					m_nextClankTimer += Random.Range(m_clankMinInterval, m_clankMaxInterval);
				}
			}
		}
	}

	public void SetBaseVolume(float volume)
	{
		m_baseVolume = volume;
		AudioSource carWheelsAudio = m_carWheelsAudio;
		float volume2 = (m_carWheelsClankAudio.volume = m_baseVolume * m_wheelVolume);
		carWheelsAudio.volume = volume2;
	}
}
public class HypeTrainLocomotive : HypeTrainCar
{
	[SerializeField]
	private AudioSource m_audioSource;

	private float m_baseVolume = 1f;

	public override void Show()
	{
		base.Show();
		m_audioSource.Play();
	}

	protected override void OnHideFinished()
	{
		base.OnHideFinished();
		m_audioSource.Stop();
	}

	public override void UpdateCar(float dt, float delta)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		base.UpdateCar(dt, delta);
		m_audioSource.volume = m_baseVolume * Mathf.Clamp01(((Component)this).transform.lossyScale.x);
	}

	public void SetBaseVolume(float volume)
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		m_baseVolume = volume;
		m_audioSource.volume = m_baseVolume * Mathf.Clamp01(((Component)this).transform.lossyScale.x);
	}
}
[Serializable]
public class HypeTrainOptions
{
	public int? train_layer;

	public float? distance_per_second;

	public float? player_collider_radius;

	public int? max_bits_per_car;

	public float? bit_lifetime_in_seconds;

	public float? volume;

	public bool? keep_alive_on_finish;
}
[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[572]
		{
			0, 0, 0, 1, 0, 0, 0, 40, 92, 65,
			115, 115, 101, 116, 115, 92, 69, 100, 105, 116,
			111, 114, 67, 111, 110, 116, 101, 110, 116, 92,
			72, 121, 112, 101, 84, 114, 97, 105, 110, 84,
			101, 115, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 38, 92, 65, 115, 115,
			101, 116, 115, 92, 72, 121, 112, 101, 84, 114,
			97, 105, 110, 92, 66, 105, 116, 115, 92, 72,
			121, 112, 101, 84, 114, 97, 105, 110, 66, 105,
			116, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 38, 92, 65, 115, 115, 101, 116, 115, 92,
			72, 121, 112, 101, 84, 114, 97, 105, 110, 92,
			83, 99, 114, 105, 112, 116, 115, 92, 72, 121,
			112, 101, 84, 114, 97, 105, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 44, 92, 65,
			115, 115, 101, 116, 115, 92, 72, 121, 112, 101,
			84, 114, 97, 105, 110, 92, 83, 99, 114, 105,
			112, 116, 115, 92, 72, 121, 112, 101, 84, 114,
			97, 105, 110, 66, 105, 116, 66, 111, 120, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 58,
			92, 65, 115, 115, 101, 116, 115, 92, 72, 121,
			112, 101, 84, 114, 97, 105, 110, 92, 83, 99,
			114, 105, 112, 116, 115, 92, 72, 121, 112, 101,
			84, 114, 97, 105, 110, 66, 105, 116, 66, 111,
			120, 80, 108, 97, 121, 101, 114, 67, 111, 108,
			108, 105, 100, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 41, 92, 65, 115, 115,
			101, 116, 115, 92, 72, 121, 112, 101, 84, 114,
			97, 105, 110, 92, 83, 99, 114, 105, 112, 116,
			115, 92, 72, 121, 112, 101, 84, 114, 97, 105,
			110, 66, 111, 120, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 45, 92, 65, 115, 115, 101,
			116, 115, 92, 72, 121, 112, 101, 84, 114, 97,
			105, 110, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 72, 121, 112, 101, 84, 114, 97, 105, 110,
			66, 111, 120, 68, 97, 116, 97, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 41, 92, 65,
			115, 115, 101, 116, 115, 92, 72, 121, 112, 101,
			84, 114, 97, 105, 110, 92, 83, 99, 114, 105,
			112, 116, 115, 92, 72, 121, 112, 101, 84, 114,
			97, 105, 110, 67, 97, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 46, 92, 65, 115,
			115, 101, 116, 115, 92, 72, 121, 112, 101, 84,
			114, 97, 105, 110, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 72, 121, 112, 101, 84, 114, 97,
			105, 110, 67, 97, 114, 65, 117, 100, 105, 111,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			48, 92, 65, 115, 115, 101, 116, 115, 92, 72,
			121, 112, 101, 84, 114, 97, 105, 110, 92, 83,
			99, 114, 105, 112, 116, 115, 92, 72, 121, 112,
			101, 84, 114, 97, 105, 110, 76, 111, 99, 111,
			109, 111, 116, 105, 118, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 45, 92, 65, 115,
			115, 101, 116, 115, 92, 72, 121, 112, 101, 84,
			114, 97, 105, 110, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 72, 121, 112, 101, 84, 114, 97,
			105, 110, 79, 112, 116, 105, 111, 110, 115, 46,
			99, 115
		};
		result.TypesData = new byte[278]
		{
			0, 0, 0, 0, 16, 124, 72, 121, 112, 101,
			84, 114, 97, 105, 110, 84, 101, 115, 116, 101,
			114, 0, 0, 0, 0, 13, 124, 72, 121, 112,
			101, 84, 114, 97, 105, 110, 66, 105, 116, 0,
			0, 0, 0, 10, 124, 72, 121, 112, 101, 84,
			114, 97, 105, 110, 0, 0, 0, 0, 16, 124,
			72, 121, 112, 101, 84, 114, 97, 105, 110, 66,
			105, 116, 66, 111, 120, 0, 0, 0, 0, 30,
			124, 72, 121, 112, 101, 84, 114, 97, 105, 110,
			66, 105, 116, 66, 111, 120, 80, 108, 97, 121,
			101, 114, 67, 111, 108, 108, 105, 100, 101, 114,
			0, 0, 0, 0, 13, 124, 72, 121, 112, 101,
			84, 114, 97, 105, 110, 66, 111, 120, 0, 0,
			0, 0, 17, 124, 72, 121, 112, 101, 84, 114,
			97, 105, 110, 66, 111, 120, 68, 97, 116, 97,
			0, 0, 0, 0, 13, 124, 72, 121, 112, 101,
			84, 114, 97, 105, 110, 67, 97, 114, 0, 0,
			0, 0, 35, 72, 121, 112, 101, 84, 114, 97,
			105, 110, 67, 97, 114, 124, 86, 105, 115, 105,
			98, 105, 108, 105, 116, 121, 67, 104, 97, 110,
			103, 101, 100, 69, 118, 101, 110, 116, 0, 0,
			0, 0, 18, 124, 72, 121, 112, 101, 84, 114,
			97, 105, 110, 67, 97, 114, 65, 117, 100, 105,
			111, 0, 0, 0, 0, 20, 124, 72, 121, 112,
			101, 84, 114, 97, 105, 110, 76, 111, 99, 111,
			109, 111, 116, 105, 118, 101, 0, 0, 0, 0,
			17, 124, 72, 121, 112, 101, 84, 114, 97, 105,
			110, 79, 112, 116, 105, 111, 110, 115
		};
		result.TotalFiles = 11;
		result.TotalTypes = 12;
		result.IsEditorOnly = false;
		return result;
	}
}

BepInEx/plugins/MyBox.dll

Decompiled 3 weeks ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
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 System.Text.RegularExpressions;
using JetBrains.Annotations;
using MyBox;
using MyBox.Internal;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
public class FPSCounter : MonoBehaviour
{
	private enum Anchor
	{
		LeftTop,
		LeftBottom,
		RightTop,
		RightBottom
	}

	public bool EditorOnly;

	[Separator]
	[SerializeField]
	private float _updateInterval = 1f;

	[SerializeField]
	private int _targetFrameRate = 30;

	[Separator]
	[SerializeField]
	private Anchor _anchor;

	[SerializeField]
	private int _xOffset;

	[SerializeField]
	private int _yOffset;

	private float _idleTime = 2f;

	private float _elapsed;

	private int _frames;

	private int _quantity;

	private float _fps;

	private float _averageFps;

	private Color _goodColor;

	private Color _okColor;

	private Color _badColor;

	private float _okFps;

	private float _badFps;

	private Rect _rect1;

	private Rect _rect2;

	private void Awake()
	{
		//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_003f: 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_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_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: 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)
		if (!EditorOnly || Application.isEditor)
		{
			_goodColor = new Color(0.4f, 0.6f, 0.4f);
			_okColor = new Color(0.8f, 0.8f, 0.2f, 0.6f);
			_badColor = new Color(0.8f, 0.6f, 0.6f);
			int num = _targetFrameRate / 100;
			int num2 = num * 10;
			int num3 = num * 40;
			_okFps = _targetFrameRate - num2;
			_badFps = _targetFrameRate - num3;
			int num4 = 0;
			int num5 = 0;
			int num6 = 40;
			int num7 = 90;
			if (_anchor == Anchor.LeftBottom || _anchor == Anchor.RightBottom)
			{
				num5 = Screen.height - num6;
			}
			if (_anchor == Anchor.RightTop || _anchor == Anchor.RightBottom)
			{
				num4 = Screen.width - num7;
			}
			num4 += _xOffset;
			num5 += _yOffset;
			int num8 = num5 + 18;
			_rect1 = new Rect((float)num4, (float)num5, (float)num7, (float)num6);
			_rect2 = new Rect((float)num4, (float)num8, (float)num7, (float)num6);
			_elapsed = _updateInterval;
		}
	}

	private void Update()
	{
		if (EditorOnly && !Application.isEditor)
		{
			return;
		}
		if (_idleTime > 0f)
		{
			_idleTime -= Time.deltaTime;
			return;
		}
		_elapsed += Time.deltaTime;
		_frames++;
		if (_elapsed >= _updateInterval)
		{
			_fps = (float)_frames / _elapsed;
			_elapsed = 0f;
			_frames = 0;
		}
		_quantity++;
		_averageFps += (_fps - _averageFps) / (float)_quantity;
	}

	private void OnGUI()
	{
		//IL_0010: 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_001b: 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_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: 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_0069: Unknown result type (might be due to invalid IL or missing references)
		if (!EditorOnly || Application.isEditor)
		{
			Color color = GUI.color;
			Color color2 = _goodColor;
			if (_fps <= _okFps || _averageFps <= _okFps)
			{
				color2 = _okColor;
			}
			if (_fps <= _badFps || _averageFps <= _badFps)
			{
				color2 = _badColor;
			}
			GUI.color = color2;
			GUI.Label(_rect1, "FPS: " + (int)_fps);
			GUI.color = color;
		}
	}
}
[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[8296]
		{
			0, 0, 0, 1, 0, 0, 0, 79, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 100, 111, 109, 121, 98, 101,
			115, 116, 46, 109, 121, 98, 111, 120, 64, 101,
			54, 48, 102, 52, 55, 55, 101, 51, 52, 92,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 115,
			92, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			66, 97, 115, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 87, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 115, 92, 65, 117,
			116, 111, 80, 114, 111, 112, 101, 114, 116, 121,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 87,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 100, 111, 109, 121,
			98, 101, 115, 116, 46, 109, 121, 98, 111, 120,
			64, 101, 54, 48, 102, 52, 55, 55, 101, 51,
			52, 92, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 115, 92, 66, 117, 116, 116, 111, 110, 77,
			101, 116, 104, 111, 100, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 90, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 115, 92, 67, 104,
			97, 114, 97, 99, 116, 101, 114, 115, 82, 97,
			110, 103, 101, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 91, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 115, 92, 67, 111, 110, 100,
			105, 116, 105, 111, 110, 97, 108, 70, 105, 101,
			108, 100, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 93, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 115, 92, 67, 111, 110, 115, 116,
			97, 110, 116, 115, 83, 101, 108, 101, 99, 116,
			105, 111, 110, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 88, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 115, 92, 68, 101, 102, 105,
			110, 101, 100, 86, 97, 108, 117, 101, 115, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 91, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			115, 92, 68, 105, 115, 112, 108, 97, 121, 73,
			110, 115, 112, 101, 99, 116, 111, 114, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 82, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 100, 111, 109, 121, 98, 101,
			115, 116, 46, 109, 121, 98, 111, 120, 64, 101,
			54, 48, 102, 52, 55, 55, 101, 51, 52, 92,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 115,
			92, 70, 111, 108, 100, 111, 117, 116, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 94, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 100, 111, 109, 121, 98, 101,
			115, 116, 46, 109, 121, 98, 111, 120, 64, 101,
			54, 48, 102, 52, 55, 55, 101, 51, 52, 92,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 115,
			92, 73, 110, 105, 116, 105, 97, 108, 105, 122,
			97, 116, 105, 111, 110, 70, 105, 101, 108, 100,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 80,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 100, 111, 109, 121,
			98, 101, 115, 116, 46, 109, 121, 98, 111, 120,
			64, 101, 54, 48, 102, 52, 55, 55, 101, 51,
			52, 92, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 115, 92, 76, 97, 121, 101, 114, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 83, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 100, 111, 109, 121, 98, 101,
			115, 116, 46, 109, 121, 98, 111, 120, 64, 101,
			54, 48, 102, 52, 55, 55, 101, 51, 52, 92,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 115,
			92, 77, 97, 120, 86, 97, 108, 117, 101, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 86, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			115, 92, 77, 105, 110, 77, 97, 120, 82, 97,
			110, 103, 101, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 83, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 115, 92, 77, 105, 110, 86,
			97, 108, 117, 101, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 89, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 115, 92, 77, 117, 115,
			116, 66, 101, 65, 115, 115, 105, 103, 110, 101,
			100, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			88, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 115, 92, 79, 118, 101, 114, 114, 105,
			100, 101, 76, 97, 98, 101, 108, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 92, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 115, 92,
			80, 111, 115, 105, 116, 105, 118, 101, 86, 97,
			108, 117, 101, 79, 110, 108, 121, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 86, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 115, 92,
			82, 97, 110, 103, 101, 86, 101, 99, 116, 111,
			114, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			83, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 115, 92, 82, 101, 97, 100, 79, 110,
			108, 121, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 86, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 115, 92, 82, 101, 103, 101, 120,
			83, 116, 114, 105, 110, 103, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 87, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 115, 92, 82,
			101, 113, 117, 105, 114, 101, 76, 97, 121, 101,
			114, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			85, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 115, 92, 82, 101, 113, 117, 105, 114,
			101, 84, 97, 103, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 80, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 115, 92, 83, 99, 101,
			110, 101, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 89, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 115, 92, 83, 101, 97, 114, 99,
			104, 97, 98, 108, 101, 69, 110, 117, 109, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 84, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			115, 92, 83, 101, 112, 97, 114, 97, 116, 111,
			114, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			86, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 115, 92, 83, 112, 114, 105, 116, 101,
			76, 97, 121, 101, 114, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 78, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 115, 92, 84, 97,
			103, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			78, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 77, 121, 65, 108, 103, 111,
			114, 105, 116, 104, 109, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 79, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			77, 121, 67, 111, 108, 108, 101, 99, 116, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 73, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 77, 121, 67,
			111, 108, 111, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 83, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 92, 77, 121,
			67, 111, 109, 109, 111, 110, 67, 111, 110, 115,
			116, 97, 110, 116, 115, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 78, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 77,
			121, 67, 111, 114, 111, 117, 116, 105, 110, 101,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 73, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 77, 121, 68, 101, 98,
			117, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 82, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 92, 77, 121, 68, 101,
			108, 97, 121, 101, 100, 65, 99, 116, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 78, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 92, 77, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 74, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 77, 121, 71, 105, 122, 109, 111, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			73, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 77, 121, 73, 110, 112, 117,
			116, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 74, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 77, 121, 76, 97, 121,
			101, 114, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 72, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 77, 121, 77,
			97, 116, 104, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 75, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 77, 121, 78,
			97, 118, 77, 101, 115, 104, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 86, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			77, 121, 79, 98, 115, 111, 108, 101, 116, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			75, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 77, 121, 80, 104, 121, 115,
			105, 99, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 85, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 77, 121, 80,
			104, 121, 115, 105, 99, 115, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 78, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			77, 121, 82, 101, 102, 108, 101, 99, 116, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 73, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 92, 77, 121, 82, 101,
			103, 101, 120, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 77, 121, 83,
			116, 114, 105, 110, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 75, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 77,
			121, 84, 101, 120, 116, 117, 114, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 70, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 77, 121, 85, 73, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 88, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			77, 121, 85, 110, 105, 116, 121, 69, 118, 101,
			110, 116, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 75, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 92, 77, 121, 86, 101,
			99, 116, 111, 114, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 89, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 84,
			114, 97, 110, 115, 102, 111, 114, 109, 83, 104,
			97, 107, 101, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 85, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 84, 111, 111, 108, 115,
			92, 70, 101, 97, 116, 117, 114, 101, 115, 92,
			73, 80, 114, 101, 112, 97, 114, 101, 70, 101,
			97, 116, 117, 114, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 102, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 111,
			111, 108, 115, 92, 73, 109, 97, 103, 101, 83,
			116, 114, 105, 110, 103, 67, 111, 110, 118, 101,
			114, 116, 101, 114, 92, 73, 109, 97, 103, 101,
			83, 116, 114, 105, 110, 103, 67, 111, 110, 118,
			101, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 85, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 111,
			111, 108, 115, 92, 73, 110, 116, 101, 114, 110,
			97, 108, 92, 67, 111, 110, 100, 105, 116, 105,
			111, 110, 97, 108, 68, 97, 116, 97, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 74, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 84, 111, 111, 108, 115, 92, 77, 121, 83,
			99, 101, 110, 101, 66, 117, 110, 100, 108, 101,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			69, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 84, 111, 111, 108, 115, 92, 84,
			105, 109, 101, 84, 101, 115, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 74, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 100, 111, 109, 121, 98, 101,
			115, 116, 46, 109, 121, 98, 111, 120, 64, 101,
			54, 48, 102, 52, 55, 55, 101, 51, 52, 92,
			84, 111, 111, 108, 115, 92, 85, 110, 100, 111,
			110, 101, 92, 71, 76, 68, 114, 97, 119, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 76,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 100, 111, 109, 121,
			98, 101, 115, 116, 46, 109, 121, 98, 111, 120,
			64, 101, 54, 48, 102, 52, 55, 55, 101, 51,
			52, 92, 84, 111, 111, 108, 115, 92, 85, 110,
			100, 111, 110, 101, 92, 77, 121, 76, 111, 103,
			103, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 73, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 84, 111, 111, 108,
			115, 92, 87, 97, 114, 110, 105, 110, 103, 115,
			80, 111, 111, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 79, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 84, 121, 112,
			101, 115, 92, 65, 99, 116, 105, 118, 101, 83,
			116, 97, 116, 101, 79, 110, 83, 116, 97, 114,
			116, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 84, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 84, 121, 112, 101, 115, 92,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 83,
			116, 97, 116, 101, 82, 101, 102, 101, 114, 101,
			110, 99, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 76, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 84, 121, 112, 101,
			115, 92, 65, 115, 115, 101, 116, 70, 111, 108,
			100, 101, 114, 80, 97, 116, 104, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 70, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 100, 111, 109, 121, 98, 101,
			115, 116, 46, 109, 121, 98, 111, 120, 64, 101,
			54, 48, 102, 52, 55, 55, 101, 51, 52, 92,
			84, 121, 112, 101, 115, 92, 65, 115, 115, 101,
			116, 80, 97, 116, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 70, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 66, 105, 108, 108, 98, 111,
			97, 114, 100, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 78, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 84, 121, 112, 101,
			115, 92, 67, 111, 108, 108, 101, 99, 116, 105,
			111, 110, 87, 114, 97, 112, 112, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 74,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 100, 111, 109, 121,
			98, 101, 115, 116, 46, 109, 121, 98, 111, 120,
			64, 101, 54, 48, 102, 52, 55, 55, 101, 51,
			52, 92, 84, 121, 112, 101, 115, 92, 67, 111,
			108, 108, 105, 100, 101, 114, 71, 105, 122, 109,
			111, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 75, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 84, 121, 112, 101, 115, 92,
			67, 111, 108, 108, 105, 100, 101, 114, 84, 111,
			77, 101, 115, 104, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 80, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 84, 121, 112,
			101, 115, 92, 67, 111, 109, 109, 101, 110, 116,
			97, 114, 121, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 75, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 84, 121, 112, 101, 115,
			92, 67, 111, 114, 111, 117, 116, 105, 110, 101,
			71, 114, 111, 117, 112, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 71, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 70, 80, 83, 67, 111, 117,
			110, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 79, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 84, 121, 112,
			101, 115, 92, 71, 85, 73, 68, 92, 71, 117,
			105, 100, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 77, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 100, 111,
			109, 121, 98, 101, 115, 116, 46, 109, 121, 98,
			111, 120, 64, 101, 54, 48, 102, 52, 55, 55,
			101, 51, 52, 92, 84, 121, 112, 101, 115, 92,
			71, 85, 73, 68, 92, 71, 117, 105, 100, 77,
			97, 110, 97, 103, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 79, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 84,
			121, 112, 101, 115, 92, 71, 85, 73, 68, 92,
			71, 117, 105, 100, 82, 101, 102, 101, 114, 101,
			110, 99, 101, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 67, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 84, 121, 112, 101,
			115, 92, 77, 105, 110, 77, 97, 120, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 69, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 84, 121, 112, 101, 115, 92, 77, 121, 67,
			117, 114, 115, 111, 114, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 77, 121, 68, 105, 99, 116,
			105, 111, 110, 97, 114, 121, 46, 99, 115, 0,
			0, 0, 8, 0, 0, 0, 69, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 84,
			121, 112, 101, 115, 92, 79, 112, 116, 105, 111,
			110, 97, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 75, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 84, 121, 112, 101,
			115, 92, 79, 112, 116, 105, 111, 110, 97, 108,
			77, 105, 110, 77, 97, 120, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 76, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 84,
			121, 112, 101, 115, 92, 80, 108, 97, 121, 101,
			114, 80, 114, 101, 102, 115, 66, 111, 111, 108,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			77, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 100, 111, 109,
			121, 98, 101, 115, 116, 46, 109, 121, 98, 111,
			120, 64, 101, 54, 48, 102, 52, 55, 55, 101,
			51, 52, 92, 84, 121, 112, 101, 115, 92, 80,
			108, 97, 121, 101, 114, 80, 114, 101, 102, 115,
			70, 108, 111, 97, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 75, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 80, 108, 97, 121, 101, 114,
			80, 114, 101, 102, 115, 73, 110, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 78, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 84, 121, 112, 101, 115, 92, 80, 108, 97,
			121, 101, 114, 80, 114, 101, 102, 115, 83, 116,
			114, 105, 110, 103, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 76, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 100, 111, 109, 121, 98, 101, 115, 116, 46,
			109, 121, 98, 111, 120, 64, 101, 54, 48, 102,
			52, 55, 55, 101, 51, 52, 92, 84, 121, 112,
			101, 115, 92, 80, 108, 97, 121, 101, 114, 80,
			114, 101, 102, 115, 84, 121, 112, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 79, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 100, 111, 109, 121, 98,
			101, 115, 116, 46, 109, 121, 98, 111, 120, 64,
			101, 54, 48, 102, 52, 55, 55, 101, 51, 52,
			92, 84, 121, 112, 101, 115, 92, 80, 108, 97,
			121, 101, 114, 80, 114, 101, 102, 115, 86, 101,
			99, 116, 111, 114, 50, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 82, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 80, 108, 97, 121, 101, 114,
			80, 114, 101, 102, 115, 86, 101, 99, 116, 111,
			114, 50, 73, 110, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 79, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 80, 108, 97, 121, 101, 114,
			80, 114, 101, 102, 115, 86, 101, 99, 116, 111,
			114, 51, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 82, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 84, 121, 112, 101, 115,
			92, 80, 108, 97, 121, 101, 114, 80, 114, 101,
			102, 115, 86, 101, 99, 116, 111, 114, 51, 73,
			110, 116, 46, 99, 115, 0, 0, 0, 7, 0,
			0, 0, 72, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 84, 121, 112, 101, 115,
			92, 82, 101, 111, 114, 100, 101, 114, 97, 98,
			108, 101, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 75, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 84, 121, 112, 101, 115,
			92, 83, 99, 101, 110, 101, 82, 101, 102, 101,
			114, 101, 110, 99, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 70, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 83, 105, 110, 103, 108, 101,
			116, 111, 110, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			100, 111, 109, 121, 98, 101, 115, 116, 46, 109,
			121, 98, 111, 120, 64, 101, 54, 48, 102, 52,
			55, 55, 101, 51, 52, 92, 84, 121, 112, 101,
			115, 92, 84, 114, 97, 110, 115, 102, 111, 114,
			109, 68, 97, 116, 97, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 69, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 100, 111, 109, 121, 98, 101, 115, 116,
			46, 109, 121, 98, 111, 120, 64, 101, 54, 48,
			102, 52, 55, 55, 101, 51, 52, 92, 84, 121,
			112, 101, 115, 92, 85, 73, 70, 111, 108, 108,
			111, 119, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 79, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 100,
			111, 109, 121, 98, 101, 115, 116, 46, 109, 121,
			98, 111, 120, 64, 101, 54, 48, 102, 52, 55,
			55, 101, 51, 52, 92, 84, 121, 112, 101, 115,
			92, 85, 73, 73, 109, 97, 103, 101, 66, 97,
			115, 101, 100, 66, 117, 116, 116, 111, 110, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 79,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 100, 111, 109, 121,
			98, 101, 115, 116, 46, 109, 121, 98, 111, 120,
			64, 101, 54, 48, 102, 52, 55, 55, 101, 51,
			52, 92, 84, 121, 112, 101, 115, 92, 85, 73,
			82, 101, 108, 97, 116, 105, 118, 101, 80, 111,
			115, 105, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 69, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 100, 111, 109, 121, 98, 101, 115,
			116, 46, 109, 121, 98, 111, 120, 64, 101, 54,
			48, 102, 52, 55, 55, 101, 51, 52, 92, 84,
			121, 112, 101, 115, 92, 85, 73, 83, 105, 122,
			101, 66, 121, 46, 99, 115
		};
		result.TypesData = new byte[3451]
		{
			0, 0, 0, 0, 28, 77, 121, 66, 111, 120,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 124,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 66,
			97, 115, 101, 0, 0, 0, 0, 27, 77, 121,
			66, 111, 120, 124, 65, 117, 116, 111, 80, 114,
			111, 112, 101, 114, 116, 121, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 0, 0, 0, 0, 27,
			77, 121, 66, 111, 120, 124, 66, 117, 116, 116,
			111, 110, 77, 101, 116, 104, 111, 100, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 0, 0, 0,
			0, 30, 77, 121, 66, 111, 120, 124, 67, 104,
			97, 114, 97, 99, 116, 101, 114, 115, 82, 97,
			110, 103, 101, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 0, 0, 0, 0, 31, 77, 121, 66,
			111, 120, 124, 67, 111, 110, 100, 105, 116, 105,
			111, 110, 97, 108, 70, 105, 101, 108, 100, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 0, 0,
			0, 0, 33, 77, 121, 66, 111, 120, 124, 67,
			111, 110, 115, 116, 97, 110, 116, 115, 83, 101,
			108, 101, 99, 116, 105, 111, 110, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			28, 77, 121, 66, 111, 120, 124, 68, 101, 102,
			105, 110, 101, 100, 86, 97, 108, 117, 101, 115,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 0,
			0, 0, 0, 31, 77, 121, 66, 111, 120, 124,
			68, 105, 115, 112, 108, 97, 121, 73, 110, 115,
			112, 101, 99, 116, 111, 114, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 0, 0, 0, 0, 22,
			77, 121, 66, 111, 120, 124, 70, 111, 108, 100,
			111, 117, 116, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 0, 0, 0, 0, 34, 77, 121, 66,
			111, 120, 124, 73, 110, 105, 116, 105, 97, 108,
			105, 122, 97, 116, 105, 111, 110, 70, 105, 101,
			108, 100, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 0, 0, 0, 0, 20, 77, 121, 66, 111,
			120, 124, 76, 97, 121, 101, 114, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			23, 77, 121, 66, 111, 120, 124, 77, 97, 120,
			86, 97, 108, 117, 101, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 0, 0, 0, 0, 26, 77,
			121, 66, 111, 120, 124, 77, 105, 110, 77, 97,
			120, 82, 97, 110, 103, 101, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 0, 0, 0, 0, 17,
			77, 121, 66, 111, 120, 124, 82, 97, 110, 103,
			101, 100, 70, 108, 111, 97, 116, 0, 0, 0,
			0, 15, 77, 121, 66, 111, 120, 124, 82, 97,
			110, 103, 101, 100, 73, 110, 116, 0, 0, 0,
			0, 22, 77, 121, 66, 111, 120, 124, 82, 97,
			110, 103, 101, 100, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 23, 77,
			121, 66, 111, 120, 124, 77, 105, 110, 86, 97,
			108, 117, 101, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 0, 0, 0, 0, 29, 77, 121, 66,
			111, 120, 124, 77, 117, 115, 116, 66, 101, 65,
			115, 115, 105, 103, 110, 101, 100, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			28, 77, 121, 66, 111, 120, 124, 79, 118, 101,
			114, 114, 105, 100, 101, 76, 97, 98, 101, 108,
			65, 116, 116, 114, 105, 98, 117, 116, 101, 0,
			0, 0, 0, 32, 77, 121, 66, 111, 120, 124,
			80, 111, 115, 105, 116, 105, 118, 101, 86, 97,
			108, 117, 101, 79, 110, 108, 121, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			26, 77, 121, 66, 111, 120, 124, 82, 97, 110,
			103, 101, 86, 101, 99, 116, 111, 114, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 0, 0, 0,
			0, 23, 77, 121, 66, 111, 120, 124, 82, 101,
			97, 100, 79, 110, 108, 121, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 0, 0, 0, 0, 26,
			77, 121, 66, 111, 120, 124, 82, 101, 103, 101,
			120, 83, 116, 114, 105, 110, 103, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			27, 77, 121, 66, 111, 120, 124, 82, 101, 113,
			117, 105, 114, 101, 76, 97, 121, 101, 114, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 0, 0,
			0, 0, 25, 77, 121, 66, 111, 120, 124, 82,
			101, 113, 117, 105, 114, 101, 84, 97, 103, 65,
			116, 116, 114, 105, 98, 117, 116, 101, 0, 0,
			0, 0, 20, 77, 121, 66, 111, 120, 124, 83,
			99, 101, 110, 101, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 0, 0, 0, 0, 29, 77, 121,
			66, 111, 120, 124, 83, 101, 97, 114, 99, 104,
			97, 98, 108, 101, 69, 110, 117, 109, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 0, 0, 0,
			0, 24, 77, 121, 66, 111, 120, 124, 83, 101,
			112, 97, 114, 97, 116, 111, 114, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 0, 0, 0, 0,
			26, 77, 121, 66, 111, 120, 124, 83, 112, 114,
			105, 116, 101, 76, 97, 121, 101, 114, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 0, 0, 0,
			0, 18, 77, 121, 66, 111, 120, 124, 84, 97,
			103, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			0, 0, 0, 0, 18, 77, 121, 66, 111, 120,
			124, 77, 121, 65, 108, 103, 111, 114, 105, 116,
			104, 109, 115, 0, 0, 0, 0, 19, 77, 121,
			66, 111, 120, 124, 77, 121, 67, 111, 108, 108,
			101, 99, 116, 105, 111, 110, 115, 0, 0, 0,
			0, 13, 77, 121, 66, 111, 120, 124, 77, 121,
			67, 111, 108, 111, 114, 0, 0, 0, 0, 23,
			77, 121, 66, 111, 120, 124, 77, 121, 67, 111,
			109, 109, 111, 110, 67, 111, 110, 115, 116, 97,
			110, 116, 115, 0, 0, 0, 0, 18, 77, 121,
			66, 111, 120, 124, 77, 121, 67, 111, 114, 111,
			117, 116, 105, 110, 101, 115, 0, 0, 0, 0,
			29, 77, 121, 66, 111, 120, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 124, 67, 111, 114, 111,
			117, 116, 105, 110, 101, 79, 119, 110, 101, 114,
			0, 0, 0, 0, 13, 77, 121, 66, 111, 120,
			124, 77, 121, 68, 101, 98, 117, 103, 0, 0,
			0, 0, 22, 77, 121, 66, 111, 120, 124, 77,
			121, 68, 101, 108, 97, 121, 101, 100, 65, 99,
			116, 105, 111, 110, 115, 0, 0, 0, 0, 18,
			77, 121, 66, 111, 120, 124, 77, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 39, 77, 121, 66, 111, 120, 46, 77,
			121, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 124, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 79, 102, 73, 110, 116, 101, 114, 102, 97,
			99, 101, 0, 0, 0, 0, 14, 77, 121, 66,
			111, 120, 124, 77, 121, 71, 105, 122, 109, 111,
			115, 0, 0, 0, 0, 13, 77, 121, 66, 111,
			120, 124, 77, 121, 73, 110, 112, 117, 116, 0,
			0, 0, 0, 14, 77, 121, 66, 111, 120, 124,
			77, 121, 76, 97, 121, 101, 114, 115, 0, 0,
			0, 0, 12, 77, 121, 66, 111, 120, 124, 77,
			121, 77, 97, 116, 104, 0, 0, 0, 0, 15,
			77, 121, 66, 111, 120, 124, 77, 121, 78, 97,
			118, 77, 101, 115, 104, 0, 0, 0, 0, 26,
			77, 121, 66, 111, 120, 124, 77, 121, 79, 98,
			115, 111, 108, 101, 116, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			15, 77, 121, 66, 111, 120, 124, 77, 121, 80,
			104, 121, 115, 105, 99, 115, 0, 0, 0, 0,
			25, 77, 121, 66, 111, 120, 124, 77, 121, 80,
			104, 121, 115, 105, 99, 115, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			18, 77, 121, 66, 111, 120, 124, 77, 121, 82,
			101, 102, 108, 101, 99, 116, 105, 111, 110, 0,
			0, 0, 0, 13, 77, 121, 66, 111, 120, 124,
			77, 121, 82, 101, 103, 101, 120, 0, 0, 0,
			0, 14, 77, 121, 66, 111, 120, 124, 77, 121,
			83, 116, 114, 105, 110, 103, 0, 0, 0, 0,
			15, 77, 121, 66, 111, 120, 124, 77, 121, 84,
			101, 120, 116, 117, 114, 101, 0, 0, 0, 0,
			10, 77, 121, 66, 111, 120, 124, 77, 121, 85,
			73, 0, 0, 0, 0, 28, 77, 121, 66, 111,
			120, 124, 77, 121, 85, 110, 105, 116, 121, 69,
			118, 101, 110, 116, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 15, 77,
			121, 66, 111, 120, 124, 77, 121, 86, 101, 99,
			116, 111, 114, 115, 0, 0, 0, 0, 29, 77,
			121, 66, 111, 120, 124, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 83, 104, 97, 107, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 0, 0,
			0, 0, 14, 77, 121, 66, 111, 120, 124, 73,
			80, 114, 101, 112, 97, 114, 101, 0, 0, 0,
			0, 26, 77, 121, 66, 111, 120, 124, 73, 109,
			97, 103, 101, 83, 116, 114, 105, 110, 103, 67,
			111, 110, 118, 101, 114, 116, 101, 114, 0, 0,
			0, 0, 30, 77, 121, 66, 111, 120, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 67, 111,
			110, 100, 105, 116, 105, 111, 110, 97, 108, 68,
			97, 116, 97, 0, 0, 0, 0, 19, 77, 121,
			66, 111, 120, 124, 77, 121, 83, 99, 101, 110,
			101, 66, 117, 110, 100, 108, 101, 0, 0, 0,
			0, 26, 77, 121, 66, 111, 120, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 83, 99, 101,
			110, 101, 66, 117, 110, 100, 108, 101, 0, 0,
			0, 0, 21, 77, 121, 66, 111, 120, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 66, 117,
			110, 100, 108, 101, 0, 0, 0, 0, 14, 77,
			121, 66, 111, 120, 124, 84, 105, 109, 101, 84,
			101, 115, 116, 0, 0, 0, 0, 27, 77, 121,
			66, 111, 120, 46, 84, 105, 109, 101, 84, 101,
			115, 116, 124, 84, 105, 109, 101, 84, 101, 115,
			116, 68, 97, 116, 97, 0, 0, 0, 0, 21,
			77, 121, 66, 111, 120, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 124, 71, 76, 68, 114, 97,
			119, 0, 0, 0, 0, 23, 77, 121, 66, 111,
			120, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			124, 77, 121, 76, 111, 103, 103, 101, 114, 0,
			0, 0, 0, 18, 77, 121, 66, 111, 120, 124,
			87, 97, 114, 110, 105, 110, 103, 115, 80, 111,
			111, 108, 0, 0, 0, 0, 24, 77, 121, 66,
			111, 120, 124, 65, 99, 116, 105, 118, 101, 83,
			116, 97, 116, 101, 79, 110, 83, 116, 97, 114,
			116, 0, 0, 0, 0, 29, 77, 121, 66, 111,
			120, 124, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 83, 116, 97, 116, 101, 82, 101, 102, 101,
			114, 101, 110, 99, 101, 0, 0, 0, 0, 38,
			77, 121, 66, 111, 120, 124, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 83, 116, 97, 116, 101,
			82, 101, 102, 101, 114, 101, 110, 99, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 0, 0,
			0, 0, 21, 77, 121, 66, 111, 120, 124, 65,
			115, 115, 101, 116, 70, 111, 108, 100, 101, 114,
			80, 97, 116, 104, 0, 0, 0, 0, 15, 77,
			121, 66, 111, 120, 124, 65, 115, 115, 101, 116,
			80, 97, 116, 104, 0, 0, 0, 0, 15, 77,
			121, 66, 111, 120, 124, 66, 105, 108, 108, 98,
			111, 97, 114, 100, 0, 0, 0, 0, 23, 77,
			121, 66, 111, 120, 124, 67, 111, 108, 108, 101,
			99, 116, 105, 111, 110, 87, 114, 97, 112, 112,
			101, 114, 0, 0, 0, 0, 36, 77, 121, 66,
			111, 120, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 124, 67, 111, 108, 108, 101, 99, 116, 105,
			111, 110, 87, 114, 97, 112, 112, 101, 114, 66,
			97, 115, 101, 0, 0, 0, 0, 19, 77, 121,
			66, 111, 120, 124, 67, 111, 108, 108, 105, 100,
			101, 114, 71, 105, 122, 109, 111, 0, 0, 0,
			0, 20, 77, 121, 66, 111, 120, 124, 67, 111,
			108, 108, 105, 100, 101, 114, 84, 111, 77, 101,
			115, 104, 0, 0, 0, 0, 33, 77, 121, 66,
			111, 120, 46, 67, 111, 108, 108, 105, 100, 101,
			114, 84, 111, 77, 101, 115, 104, 124, 84, 114,
			105, 97, 110, 103, 117, 108, 97, 116, 111, 114,
			0, 0, 0, 0, 34, 77, 121, 66, 111, 120,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 124,
			67, 111, 109, 109, 101, 110, 116, 97, 114, 121,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 0,
			0, 0, 0, 20, 77, 121, 66, 111, 120, 124,
			67, 111, 114, 111, 117, 116, 105, 110, 101, 71,
			114, 111, 117, 112, 0, 0, 0, 0, 11, 124,
			70, 80, 83, 67, 111, 117, 110, 116, 101, 114,
			0, 0, 0, 0, 19, 77, 121, 66, 111, 120,
			124, 71, 117, 105, 100, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 0, 0, 0, 0, 17, 77,
			121, 66, 111, 120, 124, 71, 117, 105, 100, 77,
			97, 110, 97, 103, 101, 114, 0, 0, 0, 0,
			26, 77, 121, 66, 111, 120, 46, 71, 117, 105,
			100, 77, 97, 110, 97, 103, 101, 114, 124, 71,
			117, 105, 100, 73, 110, 102, 111, 0, 0, 0,
			0, 19, 77, 121, 66, 111, 120, 124, 71, 117,
			105, 100, 82, 101, 102, 101, 114, 101, 110, 99,
			101, 0, 0, 0, 0, 17, 77, 121, 66, 111,
			120, 124, 77, 105, 110, 77, 97, 120, 70, 108,
			111, 97, 116, 0, 0, 0, 0, 15, 77, 121,
			66, 111, 120, 124, 77, 105, 110, 77, 97, 120,
			73, 110, 116, 0, 0, 0, 0, 22, 77, 121,
			66, 111, 120, 124, 77, 105, 110, 77, 97, 120,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 14, 77, 121, 66, 111, 120,
			124, 77, 121, 67, 117, 114, 115, 111, 114, 0,
			0, 0, 0, 18, 77, 121, 66, 111, 120, 124,
			77, 121, 68, 105, 99, 116, 105, 111, 110, 97,
			114, 121, 0, 0, 0, 0, 30, 77, 121, 66,
			111, 120, 46, 77, 121, 68, 105, 99, 116, 105,
			111, 110, 97, 114, 121, 124, 80, 114, 105, 109,
			101, 72, 101, 108, 112, 101, 114, 0, 0, 0,
			0, 29, 77, 121, 66, 111, 120, 46, 77, 121,
			68, 105, 99, 116, 105, 111, 110, 97, 114, 121,
			124, 69, 110, 117, 109, 101, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 19, 77, 121, 66, 111,
			120, 124, 79, 112, 116, 105, 111, 110, 97, 108,
			70, 108, 111, 97, 116, 0, 0, 0, 0, 17,
			77, 121, 66, 111, 120, 124, 79, 112, 116, 105,
			111, 110, 97, 108, 73, 110, 116, 0, 0, 0,
			0, 20, 77, 121, 66, 111, 120, 124, 79, 112,
			116, 105, 111, 110, 97, 108, 83, 116, 114, 105,
			110, 103, 0, 0, 0, 0, 21, 77, 121, 66,
			111, 120, 124, 79, 112, 116, 105, 111, 110, 97,
			108, 75, 101, 121, 67, 111, 100, 101, 0, 0,
			0, 0, 24, 77, 121, 66, 111, 120, 124, 79,
			112, 116, 105, 111, 110, 97, 108, 71, 97, 109,
			101, 79, 98, 106, 101, 99, 116, 0, 0, 0,
			0, 23, 77, 121, 66, 111, 120, 124, 79, 112,
			116, 105, 111, 110, 97, 108, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 0, 0, 0, 0, 23,
			77, 121, 66, 111, 120, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 124, 79, 112, 116, 105, 111,
			110, 97, 108, 0, 0, 0, 0, 29, 77, 121,
			66, 111, 120, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 124, 79, 112, 116, 105, 111, 110, 97,
			108, 80, 97, 114, 101, 110, 116, 0, 0, 0,
			0, 20, 77, 121, 66, 111, 120, 124, 79, 112,
			116, 105, 111, 110, 97, 108, 77, 105, 110, 77,
			97, 120, 0, 0, 0, 0, 21, 77, 121, 66,
			111, 120, 124, 80, 108, 97, 121, 101, 114, 80,
			114, 101, 102, 115, 66, 111, 111, 108, 0, 0,
			0, 0, 22, 77, 121, 66, 111, 120, 124, 80,
			108, 97, 121, 101, 114, 80, 114, 101, 102, 115,
			70, 108, 111, 97, 116, 0, 0, 0, 0, 20,
			77, 121, 66, 111, 120, 124, 80, 108, 97, 121,
			101, 114, 80, 114, 101, 102, 115, 73, 110, 116,
			0, 0, 0, 0, 23, 77, 121, 66, 111, 120,
			124, 80, 108, 97, 121, 101, 114, 80, 114, 101,
			102, 115, 83, 116, 114, 105, 110, 103, 0, 0,
			0, 0, 30, 77, 121, 66, 111, 120, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 80, 108,
			97, 121, 101, 114, 80, 114, 101, 102, 115, 84,
			121, 112, 101, 0, 0, 0, 0, 24, 77, 121,
			66, 111, 120, 124, 80, 108, 97, 121, 101, 114,
			80, 114, 101, 102, 115, 86, 101, 99, 116, 111,
			114, 50, 0, 0, 0, 0, 27, 77, 121, 66,
			111, 120, 124, 80, 108, 97, 121, 101, 114, 80,
			114, 101, 102, 115, 86, 101, 99, 116, 111, 114,
			50, 73, 110, 116, 0, 0, 0, 0, 24, 77,
			121, 66, 111, 120, 124, 80, 108, 97, 121, 101,
			114, 80, 114, 101, 102, 115, 86, 101, 99, 116,
			111, 114, 51, 0, 0, 0, 0, 27, 77, 121,
			66, 111, 120, 124, 80, 108, 97, 121, 101, 114,
			80, 114, 101, 102, 115, 86, 101, 99, 116, 111,
			114, 51, 73, 110, 116, 0, 0, 0, 0, 27,
			77, 121, 66, 111, 120, 124, 82, 101, 111, 114,
			100, 101, 114, 97, 98, 108, 101, 71, 97, 109,
			101, 79, 98, 106, 101, 99, 116, 0, 0, 0,
			0, 31, 77, 121, 66, 111, 120, 124, 82, 101,
			111, 114, 100, 101, 114, 97, 98, 108, 101, 71,
			97, 109, 101, 79, 98, 106, 101, 99, 116, 76,
			105, 115, 116, 0, 0, 0, 0, 26, 77, 121,
			66, 111, 120, 124, 82, 101, 111, 114, 100, 101,
			114, 97, 98, 108, 101, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 0, 0, 0, 0, 30, 77,
			121, 66, 111, 120, 124, 82, 101, 111, 114, 100,
			101, 114, 97, 98, 108, 101, 84, 114, 97, 110,
			115, 102, 111, 114, 109, 76, 105, 115, 116, 0,
			0, 0, 0, 17, 77, 121, 66, 111, 120, 124,
			82, 101, 111, 114, 100, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 21, 77, 121, 66, 111,
			120, 124, 82, 101, 111, 114, 100, 101, 114, 97,
			98, 108, 101, 76, 105, 115, 116, 0, 0, 0,
			0, 30, 77, 121, 66, 111, 120, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 82, 101, 111,
			114, 100, 101, 114, 97, 98, 108, 101, 66, 97,
			115, 101, 0, 0, 0, 0, 20, 77, 121, 66,
			111, 120, 124, 83, 99, 101, 110, 101, 82, 101,
			102, 101, 114, 101, 110, 99, 101, 0, 0, 0,
			0, 39, 77, 121, 66, 111, 120, 46, 83, 99,
			101, 110, 101, 82, 101, 102, 101, 114, 101, 110,
			99, 101, 124, 83, 99, 101, 110, 101, 76, 111,
			97, 100, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 15, 77, 121, 66, 111,
			120, 124, 83, 105, 110, 103, 108, 101, 116, 111,
			110, 0, 0, 0, 0, 19, 77, 121, 66, 111,
			120, 124, 84, 114, 97, 110, 115, 102, 111, 114,
			109, 68, 97, 116, 97, 0, 0, 0, 0, 14,
			77, 121, 66, 111, 120, 124, 85, 73, 70, 111,
			108, 108, 111, 119, 0, 0, 0, 0, 24, 77,
			121, 66, 111, 120, 124, 85, 73, 73, 109, 97,
			103, 101, 66, 97, 115, 101, 100, 66, 117, 116,
			116, 111, 110, 0, 0, 0, 0, 24, 77, 121,
			66, 111, 120, 124, 85, 73, 82, 101, 108, 97,
			116, 105, 118, 101, 80, 111, 115, 105, 116, 105,
			111, 110, 0, 0, 0, 0, 14, 77, 121, 66,
			111, 120, 124, 85, 73, 83, 105, 122, 101, 66,
			121
		};
		result.TotalFiles = 95;
		result.TotalTypes = 125;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace MyBox
{
	[AttributeUsage(AttributeTargets.Field)]
	public class AutoPropertyAttribute : PropertyAttribute
	{
		public readonly AutoPropertyMode Mode;

		public readonly string PredicateMethodName;

		public readonly Type PredicateMethodTarget;

		public readonly bool AllowEmpty;

		public AutoPropertyAttribute(AutoPropertyMode mode = AutoPropertyMode.Children, string predicateMethodName = null, Type predicateMethodTarget = null, bool allowEmpty = false)
		{
			Mode = mode;
			PredicateMethodTarget = predicateMethodTarget;
			PredicateMethodName = predicateMethodName;
			AllowEmpty = allowEmpty;
		}
	}
	public enum AutoPropertyMode
	{
		Children,
		Parent,
		Scene,
		Asset,
		Any
	}
	[AttributeUsage(AttributeTargets.Method)]
	public class ButtonMethodAttribute : PropertyAttribute
	{
		public readonly ButtonMethodDrawOrder DrawOrder;

		public readonly ConditionalData Condition;

		public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder = ButtonMethodDrawOrder.AfterInspector)
		{
			DrawOrder = drawOrder;
		}

		public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, string fieldToCheck, bool inverse = false, params object[] compareValues)
		{
			ConditionalData condition = new ConditionalData(fieldToCheck, inverse, compareValues);
			DrawOrder = drawOrder;
			Condition = condition;
		}

		public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, string[] fieldToCheck, bool[] inverse = null, params object[] compare)
		{
			ConditionalData condition = new ConditionalData(fieldToCheck, inverse, compare);
			DrawOrder = drawOrder;
			Condition = condition;
		}

		public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, params string[] fieldToCheck)
		{
			ConditionalData condition = new ConditionalData(fieldToCheck);
			DrawOrder = drawOrder;
			Condition = condition;
		}

		public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, bool useMethod, string method, bool inverse = false)
		{
			ConditionalData condition = new ConditionalData(useMethod, method, inverse);
			DrawOrder = drawOrder;
			Condition = condition;
		}
	}
	public enum ButtonMethodDrawOrder
	{
		BeforeInspector,
		AfterInspector
	}
	public class CharactersRangeAttribute : PropertyAttribute
	{
		public readonly string Characters;

		public readonly CharacterRangeMode Mode;

		public readonly bool IgnoreCase;

		public CharactersRangeAttribute(string characters, CharacterRangeMode mode = CharacterRangeMode.Allow, bool ignoreCase = true)
		{
			Characters = characters;
			Mode = mode;
			IgnoreCase = ignoreCase;
		}
	}
	public enum CharacterRangeMode
	{
		Allow,
		Disallow,
		WarningIfAny,
		WarningIfNotMatch
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
	public class ConditionalFieldAttribute : PropertyAttribute
	{
		public readonly ConditionalData Data;

		public bool IsSet
		{
			get
			{
				if (Data != null)
				{
					return Data.IsSet;
				}
				return false;
			}
		}

		public ConditionalFieldAttribute(string fieldToCheck, bool inverse = false, params object[] compareValues)
		{
			Data = new ConditionalData(fieldToCheck, inverse, compareValues);
		}

		public ConditionalFieldAttribute(string[] fieldToCheck, bool[] inverse = null, params object[] compare)
		{
			Data = new ConditionalData(fieldToCheck, inverse, compare);
		}

		public ConditionalFieldAttribute(params string[] fieldToCheck)
		{
			Data = new ConditionalData(fieldToCheck);
		}

		public ConditionalFieldAttribute(bool useMethod, string method, bool inverse = false)
		{
			Data = new ConditionalData(useMethod, method, inverse);
		}
	}
	public class ConstantsSelectionAttribute : PropertyAttribute
	{
		public readonly Type SelectFromType;

		public ConstantsSelectionAttribute(Type type)
		{
			SelectFromType = type;
		}
	}
	public class DefinedValuesAttribute : PropertyAttribute
	{
		public readonly object[] ValuesArray;

		public readonly string[] LabelsArray;

		public readonly string UseMethod;

		public DefinedValuesAttribute(params object[] definedValues)
		{
			ValuesArray = definedValues;
		}

		public DefinedValuesAttribute(bool withLabels, params object[] definedValues)
		{
			int num = definedValues.Length / 2;
			ValuesArray = new object[num];
			LabelsArray = new string[num];
			int num2 = 0;
			int num3;
			for (num3 = 0; num3 < definedValues.Length; num3++)
			{
				ValuesArray[num2] = definedValues[num3];
				LabelsArray[num2] = definedValues[++num3].ToString();
				num2++;
			}
		}

		public DefinedValuesAttribute(string method)
		{
			UseMethod = method;
		}
	}
	public class DisplayInspectorAttribute : PropertyAttribute
	{
		public readonly bool DisplayScript;

		public DisplayInspectorAttribute(bool displayScriptField = true)
		{
			DisplayScript = displayScriptField;
		}
	}
	public class FoldoutAttribute : PropertyAttribute
	{
		public readonly string Name;

		public readonly bool FoldEverything;

		public FoldoutAttribute(string name, bool foldEverything = false)
		{
			FoldEverything = foldEverything;
			Name = name;
		}
	}
	public class InitializationFieldAttribute : PropertyAttribute
	{
	}
	public class LayerAttribute : PropertyAttribute
	{
	}
	public class MaxValueAttribute : AttributeBase
	{
		private readonly float _x;

		private readonly float _y;

		private readonly float _z;

		private readonly bool _vectorValuesSet;

		public MaxValueAttribute(float value)
		{
			_x = value;
		}

		public MaxValueAttribute(float x, float y, float z)
		{
			_x = x;
			_y = y;
			_z = z;
			_vectorValuesSet = true;
		}
	}
	public class MinMaxRangeAttribute : PropertyAttribute
	{
		public readonly float Min;

		public readonly float Max;

		public MinMaxRangeAttribute(float min, float max)
		{
			Min = min;
			Max = max;
		}
	}
	[Serializable]
	public struct RangedFloat
	{
		public float Min;

		public float Max;

		public RangedFloat(float min, float max)
		{
			Min = min;
			Max = max;
		}
	}
	[Serializable]
	public struct RangedInt
	{
		public int Min;

		public int Max;

		public RangedInt(int min, int max)
		{
			Min = min;
			Max = max;
		}
	}
	public static class RangedExtensions
	{
		public static float LerpFromRange(this RangedFloat ranged, float t)
		{
			return Mathf.Lerp(ranged.Min, ranged.Max, t);
		}

		public static float LerpFromRangeUnclamped(this RangedFloat ranged, float t)
		{
			return Mathf.LerpUnclamped(ranged.Min, ranged.Max, t);
		}

		public static float LerpFromRange(this RangedInt ranged, float t)
		{
			return Mathf.Lerp((float)ranged.Min, (float)ranged.Max, t);
		}

		public static float LerpFromRangeUnclamped(this RangedInt ranged, float t)
		{
			return Mathf.LerpUnclamped((float)ranged.Min, (float)ranged.Max, t);
		}
	}
	public class MinValueAttribute : AttributeBase
	{
		private readonly float _x;

		private readonly float _y;

		private readonly float _z;

		private readonly bool _vectorValuesSet;

		public MinValueAttribute(float value)
		{
			_x = value;
		}

		public MinValueAttribute(float x, float y, float z)
		{
			_x = x;
			_y = y;
			_z = z;
			_vectorValuesSet = true;
		}
	}
	[AttributeUsage(AttributeTargets.Field)]
	public class MustBeAssignedAttribute : PropertyAttribute
	{
	}
	public class OverrideLabelAttribute : PropertyAttribute
	{
		public readonly string NewLabel;

		public OverrideLabelAttribute(string newLabel)
		{
			NewLabel = newLabel;
		}
	}
	public class PositiveValueOnlyAttribute : PropertyAttribute
	{
	}
	[AttributeUsage(AttributeTargets.Field)]
	public sealed class RangeVectorAttribute : PropertyAttribute
	{
		public readonly Vector3 min = Vector3.zero;

		public readonly Vector3 max = Vector3.zero;

		public bool Valid { get; } = true;


		public RangeVectorAttribute(float[] min, float[] max)
		{
			//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)
			if (min.Length > 3 || max.Length > 3)
			{
				Valid = false;
				return;
			}
			switch (min.Length)
			{
			case 3:
				this.min.x = min[0];
				this.min.y = min[1];
				this.min.z = min[2];
				break;
			case 2:
				this.min.x = min[0];
				this.min.y = min[1];
				break;
			case 1:
				this.min.x = min[0];
				break;
			}
			switch (max.Length)
			{
			case 3:
				this.max.x = max[0];
				this.max.y = max[1];
				this.max.z = max[2];
				break;
			case 2:
				this.max.x = max[0];
				this.max.y = max[1];
				break;
			case 1:
				this.max.x = max[0];
				break;
			}
		}
	}
	public class ReadOnlyAttribute : ConditionalFieldAttribute
	{
		public ReadOnlyAttribute(string fieldToCheck, bool inverse = false, params object[] compareValues)
			: base(fieldToCheck, inverse, compareValues)
		{
		}

		public ReadOnlyAttribute(string[] fieldToCheck, bool[] inverse = null, params object[] compare)
			: base(fieldToCheck, inverse, compare)
		{
		}

		public ReadOnlyAttribute(params string[] fieldToCheck)
			: base(fieldToCheck)
		{
		}

		public ReadOnlyAttribute(bool useMethod, string method, bool inverse = false)
			: base(useMethod, method, inverse)
		{
		}
	}
	public class RegexStringAttribute : PropertyAttribute
	{
		public readonly Regex Regex;

		public readonly RegexStringMode AttributeMode;

		public RegexStringAttribute(string regex, RegexStringMode mode = RegexStringMode.Match, RegexOptions options = RegexOptions.None)
		{
			Regex = new Regex(regex, options);
			AttributeMode = mode;
		}
	}
	public enum RegexStringMode
	{
		Match,
		Replace,
		WarningIfMatch,
		WarningIfNotMatch
	}
	[AttributeUsage(AttributeTargets.Class)]
	public class RequireLayerAttribute : Attribute
	{
		public readonly string LayerName;

		public readonly int LayerIndex = -1;

		public RequireLayerAttribute(string layer)
		{
			LayerName = layer;
		}

		public RequireLayerAttribute(int layer)
		{
			LayerIndex = layer;
		}
	}
	[AttributeUsage(AttributeTargets.Class)]
	public class RequireTagAttribute : Attribute
	{
		public string Tag;

		public RequireTagAttribute(string tag)
		{
			Tag = tag;
		}
	}
	[AttributeUsage(AttributeTargets.Field)]
	public class SceneAttribute : PropertyAttribute
	{
	}
	public class SearchableEnumAttribute : PropertyAttribute
	{
	}
	public class SeparatorAttribute : PropertyAttribute
	{
		public readonly string Title;

		public readonly bool WithOffset;

		public SeparatorAttribute()
		{
			Title = "";
		}

		public SeparatorAttribute(string title, bool withOffset = false)
		{
			Title = title;
			WithOffset = withOffset;
		}
	}
	public class SpriteLayerAttribute : PropertyAttribute
	{
	}
	public class TagAttribute : PropertyAttribute
	{
	}
	[PublicAPI]
	public static class MyAlgorithms
	{
		public static T Cast<T>(this IConvertible source)
		{
			return (T)Convert.ChangeType(source, typeof(T));
		}

		public static bool Is<T>(this object source)
		{
			return source is T;
		}

		public static T As<T>(this object source) where T : class
		{
			return source as T;
		}

		public static T Pipe<T>(this T argument, Action<T> action)
		{
			action(argument);
			return argument;
		}

		public static TResult Pipe<T, TResult>(this T argument, Func<T, TResult> function)
		{
			return function(argument);
		}

		public static T PipeKeep<T, TResult>(this T argument, Func<T, TResult> function)
		{
			function(argument);
			return argument;
		}
	}
	[PublicAPI]
	public static class MyCollections
	{
		public static T[] InsertAt<T>(this T[] array, int index)
		{
			if (index < 0)
			{
				Debug.LogError((object)"Index is less than zero. Array is not modified");
				return array;
			}
			if (index > array.Length)
			{
				Debug.LogError((object)"Index exceeds array length. Array is not modified");
				return array;
			}
			T[] array2 = new T[array.Length + 1];
			int num = 0;
			for (int i = 0; i < array2.Length; i++)
			{
				if (i != index)
				{
					array2[i] = array[num];
					num++;
				}
			}
			return array2;
		}

		public static T[] RemoveAt<T>(this T[] array, int index)
		{
			if (index < 0)
			{
				Debug.LogError((object)"Index is less than zero. Array is not modified");
				return array;
			}
			if (index >= array.Length)
			{
				Debug.LogError((object)"Index exceeds array length. Array is not modified");
				return array;
			}
			T[] array2 = new T[array.Length - 1];
			int num = 0;
			for (int i = 0; i < array.Length; i++)
			{
				if (i != index)
				{
					array2[num] = array[i];
					num++;
				}
			}
			return array2;
		}

		public static T GetRandom<T>(this T[] collection)
		{
			return collection[Random.Range(0, collection.Length)];
		}

		public static T GetRandom<T>(this IList<T> collection)
		{
			return collection[Random.Range(0, collection.Count)];
		}

		public static T GetRandom<T>(this IEnumerable<T> collection)
		{
			return collection.ElementAt(Random.Range(0, collection.Count()));
		}

		public static bool IsNullOrEmpty<T>(this T[] collection)
		{
			if (collection != null)
			{
				return collection.Length == 0;
			}
			return true;
		}

		public static bool IsNullOrEmpty<T>(this IList<T> collection)
		{
			if (collection != null)
			{
				return collection.Count == 0;
			}
			return true;
		}

		public static bool IsNullOrEmpty<T>(this IEnumerable<T> collection)
		{
			if (collection != null)
			{
				return !collection.Any();
			}
			return true;
		}

		public static bool NotNullOrEmpty<T>(this T[] collection)
		{
			return !collection.IsNullOrEmpty();
		}

		public static bool NotNullOrEmpty<T>(this IList<T> collection)
		{
			return !collection.IsNullOrEmpty();
		}

		public static bool NotNullOrEmpty<T>(this IEnumerable<T> collection)
		{
			return !collection.IsNullOrEmpty();
		}

		public static int NextIndexInCircle<T>(this T[] array, int desiredPosition)
		{
			if (array.IsNullOrEmpty())
			{
				Debug.LogError((object)"NextIndexInCircle Caused: source array is null or empty");
				return -1;
			}
			int num = array.Length;
			if (num == 1)
			{
				return 0;
			}
			return (desiredPosition % num + num) % num;
		}

		public static int IndexOfItem<T>(this IEnumerable<T> collection, T item)
		{
			if (collection == null)
			{
				Debug.LogError((object)"IndexOfItem Caused: source collection is null");
				return -1;
			}
			int num = 0;
			foreach (T item2 in collection)
			{
				if (object.Equals(item2, item))
				{
					return num;
				}
				num++;
			}
			return -1;
		}

		public static bool ContentsMatch<T>(this IEnumerable<T> first, IEnumerable<T> second)
		{
			if (first.IsNullOrEmpty() && second.IsNullOrEmpty())
			{
				return true;
			}
			if (first.IsNullOrEmpty() || second.IsNullOrEmpty())
			{
				return false;
			}
			int num = first.Count();
			int num2 = second.Count();
			if (num != num2)
			{
				return false;
			}
			foreach (T item in first)
			{
				if (!second.Contains(item))
				{
					return false;
				}
			}
			return true;
		}

		public static bool ContentsMatchKeys<T1, T2>(this IDictionary<T1, T2> source, IEnumerable<T1> check)
		{
			if (source.IsNullOrEmpty() && check.IsNullOrEmpty())
			{
				return true;
			}
			if (source.IsNullOrEmpty() || check.IsNullOrEmpty())
			{
				return false;
			}
			return source.Keys.ContentsMatch(check);
		}

		public static bool ContentsMatchValues<T1, T2>(this IDictionary<T1, T2> source, IEnumerable<T2> check)
		{
			if (source.IsNullOrEmpty() && check.IsNullOrEmpty())
			{
				return true;
			}
			if (source.IsNullOrEmpty() || check.IsNullOrEmpty())
			{
				return false;
			}
			return source.Values.ContentsMatch(check);
		}

		public static TValue GetOrAddDefault<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key) where TValue : new()
		{
			if (!source.ContainsKey(key))
			{
				source[key] = new TValue();
			}
			return source[key];
		}

		public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, TValue value)
		{
			if (!source.ContainsKey(key))
			{
				source[key] = value;
			}
			return source[key];
		}

		public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, Func<TValue> valueFactory)
		{
			if (!source.ContainsKey(key))
			{
				source[key] = valueFactory();
			}
			return source[key];
		}

		public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, Func<TKey, TValue> valueFactory)
		{
			if (!source.ContainsKey(key))
			{
				source[key] = valueFactory(key);
			}
			return source[key];
		}

		public static TValue GetOrAdd<TKey, TValue, TArg>(this IDictionary<TKey, TValue> source, TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)
		{
			if (!source.ContainsKey(key))
			{
				source[key] = valueFactory(key, factoryArgument);
			}
			return source[key];
		}

		public static IEnumerable<T> ForEach<T>(this IEnumerable<T> source, Action<T> action)
		{
			foreach (T item in source)
			{
				action(item);
			}
			return source;
		}

		public static IEnumerable<T> ForEach<T, R>(this IEnumerable<T> source, Func<T, R> func)
		{
			foreach (T item in source)
			{
				func(item);
			}
			return source;
		}

		public static IEnumerable<T> ForEach<T>(this IEnumerable<T> source, Action<T, int> action)
		{
			int num = 0;
			foreach (T item in source)
			{
				action(item, num);
				num++;
			}
			return source;
		}

		public static IEnumerable<T> ForEach<T, R>(this IEnumerable<T> source, Func<T, int, R> func)
		{
			int num = 0;
			foreach (T item in source)
			{
				func(item, num);
				num++;
			}
			return source;
		}

		public static T MaxBy<T, S>(this IEnumerable<T> source, Func<T, S> selector) where S : IComparable<S>
		{
			if (source.IsNullOrEmpty())
			{
				Debug.LogError((object)"MaxBy Caused: source collection is null or empty");
				return default(T);
			}
			return source.Aggregate((T e, T n) => (selector(e).CompareTo(selector(n)) <= 0) ? n : e);
		}

		public static T MinBy<T, S>(this IEnumerable<T> source, Func<T, S> selector) where S : IComparable<S>
		{
			if (source.IsNullOrEmpty())
			{
				Debug.LogError((object)"MinBy Caused: source collection is null or empty");
				return default(T);
			}
			return source.Aggregate((T e, T n) => (selector(e).CompareTo(selector(n)) >= 0) ? n : e);
		}

		public static IEnumerable<T> SingleToEnumerable<T>(this T source)
		{
			return Enumerable.Empty<T>().Append(source);
		}

		public static int FirstIndex<T>(this IList<T> source, Predicate<T> predicate)
		{
			for (int i = 0; i < source.Count; i++)
			{
				if (predicate(source[i]))
				{
					return i;
				}
			}
			return -1;
		}

		public static int FirstIndex<T>(this IEnumerable<T> source, Predicate<T> predicate)
		{
			int num = 0;
			foreach (T item in source)
			{
				if (predicate(item))
				{
					return num;
				}
				num++;
			}
			return -1;
		}

		public static int LastIndex<T>(this IList<T> source, Predicate<T> predicate)
		{
			for (int num = source.Count - 1; num >= 0; num--)
			{
				if (predicate(source[num]))
				{
					return num;
				}
			}
			return -1;
		}

		public static int GetWeightedRandomIndex<T>(this IEnumerable<T> source, Func<T, double> weightSelector)
		{
			IEnumerable<double> weights = from w in source.Select(weightSelector)
				select (!(w < 0.0)) ? w : 0.0;
			IEnumerable<double> source2 = weights.Select((double w, int i) => weights.Take(i + 1).Sum());
			double roll = MyCommonConstants.SystemRandom.NextDouble() * weights.Sum();
			return source2.FirstIndex((double ws) => ws > roll);
		}

		public static T GetWeightedRandom<T>(this IList<T> source, Func<T, double> weightSelector)
		{
			return source[source.GetWeightedRandomIndex(weightSelector)];
		}

		public static T GetWeightedRandom<T>(this IEnumerable<T> source, Func<T, double> weightSelector)
		{
			return source.ElementAt(source.GetWeightedRandomIndex(weightSelector));
		}

		public static IList<T> FillBy<T>(this IList<T> source, Func<int, T> valueFactory)
		{
			for (int i = 0; i < source.Count; i++)
			{
				source[i] = valueFactory(i);
			}
			return source;
		}

		public static T[] FillBy<T>(this T[] source, Func<int, T> valueFactory)
		{
			for (int i = 0; i < source.Length; i++)
			{
				source[i] = valueFactory(i);
			}
			return source;
		}

		public static T[] ExclusiveSample<T>(this IList<T> source, int sampleNumber)
		{
			if (sampleNumber > source.Count)
			{
				throw new ArgumentOutOfRangeException("Cannot sample more elements than what the source collection contains");
			}
			T[] array = new T[sampleNumber];
			int num = 0;
			for (int i = 0; i < source.Count; i++)
			{
				if (num >= sampleNumber)
				{
					break;
				}
				double num2 = (double)(sampleNumber - num) / (double)(source.Count - i);
				if (MyCommonConstants.SystemRandom.NextDouble() < num2)
				{
					array[num] = source[i];
					num++;
				}
			}
			return array;
		}

		public static IList<T> SwapInPlace<T>(this IList<T> source, int index1, int index2)
		{
			T val = source[index2];
			T val2 = source[index1];
			T val4 = (source[index1] = val);
			val4 = (source[index2] = val2);
			return source;
		}

		public static IList<T> Shuffle<T>(this IList<T> source)
		{
			for (int i = 0; i < source.Count - 1; i++)
			{
				int index = Random.Range(i, source.Count);
				source.SwapInPlace(i, index);
			}
			return source;
		}
	}
	public static class MyColor
	{
		private const float LightOffset = 0.0625f;

		public static Color RandomBright => new Color(Random.Range(0.4f, 1f), Random.Range(0.4f, 1f), Random.Range(0.4f, 1f));

		public static Color RandomDim => new Color(Random.Range(0.4f, 0.6f), Random.Range(0.4f, 0.8f), Random.Range(0.4f, 0.8f));

		public static Color RandomColor => new Color(Random.Range(0.1f, 0.9f), Random.Range(0.1f, 0.9f), Random.Range(0.1f, 0.9f));

		public static Color WithAlphaSetTo(this Color color, float a)
		{
			//IL_0000: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			return new Color(color.r, color.g, color.b, a);
		}

		public static void SetAlpha(this Graphic graphic, float a)
		{
			//IL_0002: 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)
			graphic.color = graphic.color.WithAlphaSetTo(a);
		}

		public static void SetAlpha(this SpriteRenderer renderer, float a)
		{
			//IL_0002: 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)
			renderer.color = renderer.color.WithAlphaSetTo(a);
		}

		public static string ToHex(this Color color)
		{
			//IL_0005: 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_0029: Unknown result type (might be due to invalid IL or missing references)
			return $"#{(int)(color.r * 255f):X2}{(int)(color.g * 255f):X2}{(int)(color.b * 255f):X2}";
		}

		public static Color Lighter(this Color color)
		{
			//IL_0000: 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)
			return color.BrightnessOffset(0.0625f);
		}

		public static Color Darker(this Color color)
		{
			//IL_0000: 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)
			return color.BrightnessOffset(-0.0625f);
		}

		public static Color BrightnessOffset(this Color color, float offset)
		{
			//IL_0000: 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_0010: 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_001e: Unknown result type (might be due to invalid IL or missing references)
			return new Color(color.r + offset, color.g + offset, color.b + offset, color.a);
		}

		public static Color ToUnityColor(this string source)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			Color result = default(Color);
			ColorUtility.TryParseHtmlString(source, ref result);
			return result;
		}
	}
	public class MyCommonConstants
	{
		public static readonly Random SystemRandom = new Random();
	}
	public static class MyCoroutines
	{
		private static CoroutineOwner _coroutineOwner;

		private static CoroutineOwner CoroutineOwner
		{
			get
			{
				//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_0023: Expected O, but got Unknown
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if ((Object)(object)_coroutineOwner != (Object)null)
				{
					return _coroutineOwner;
				}
				GameObject val = new GameObject("Static Coroutine Owner");
				Object.DontDestroyOnLoad((Object)val);
				((Object)val).hideFlags = (HideFlags)61;
				_coroutineOwner = val.AddComponent<CoroutineOwner>();
				return _coroutineOwner;
			}
		}

		public static Coroutine StartCoroutine(this IEnumerator coroutine)
		{
			return ((MonoBehaviour)CoroutineOwner).StartCoroutine(coroutine);
		}

		public static Coroutine StartNext(this Coroutine coroutine, IEnumerator nextCoroutine)
		{
			return StartNextCoroutine(coroutine, nextCoroutine).StartCoroutine();
		}

		public static Coroutine OnComplete(this Coroutine coroutine, Action onComplete)
		{
			return OnCompleteCoroutine(coroutine, onComplete).StartCoroutine();
		}

		public static void StopCoroutine(Coroutine coroutine)
		{
			((MonoBehaviour)CoroutineOwner).StopCoroutine(coroutine);
		}

		public static void StopAllCoroutines()
		{
			((MonoBehaviour)CoroutineOwner).StopAllCoroutines();
		}

		public static CoroutineGroup CreateGroup(MonoBehaviour owner = null)
		{
			return new CoroutineGroup((MonoBehaviour)(object)(((Object)(object)owner != (Object)null) ? ((CoroutineOwner)(object)owner) : CoroutineOwner));
		}

		private static IEnumerator StartNextCoroutine(Coroutine coroutine, IEnumerator nextCoroutine)
		{
			yield return coroutine;
			yield return nextCoroutine.StartCoroutine();
		}

		private static IEnumerator OnCompleteCoroutine(Coroutine coroutine, Action onComplete)
		{
			yield return coroutine;
			onComplete?.Invoke();
		}
	}
	public static class MyDebug
	{
		private static StringBuilder _stringBuilder;

		private static void PrepareStringBuilder()
		{
			if (_stringBuilder == null)
			{
				_stringBuilder = new StringBuilder();
			}
			else
			{
				_stringBuilder.Clear();
			}
		}

		public static void LogArray<T>(T[] toLog)
		{
			PrepareStringBuilder();
			_stringBuilder.Append("Log Array: ").Append(typeof(T).Name).Append(" (")
				.Append(toLog.Length)
				.Append(")\n");
			for (int i = 0; i < toLog.Length; i++)
			{
				_stringBuilder.Append("\n\t").Append(i.ToString().Colored(Colors.brown)).Append(": ")
					.Append(toLog[i]);
			}
			Debug.Log((object)_stringBuilder.ToString());
		}

		public static void LogArray<T>(IList<T> toLog)
		{
			PrepareStringBuilder();
			int count = toLog.Count;
			_stringBuilder.Append("Log Array: ").Append(typeof(T).Name).Append(" (")
				.Append(count)
				.Append(")\n");
			for (int i = 0; i < count; i++)
			{
				_stringBuilder.Append("\n\t" + i.ToString().Colored(Colors.brown) + ": " + toLog[i]);
			}
			Debug.Log((object)_stringBuilder.ToString());
		}

		public static void LogColor(Color color)
		{
			//IL_0005: 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)
			string text = ColorUtility.ToHtmlStringRGB(color);
			Color val = color;
			Debug.Log((object)("<color=#" + text + ">████████████</color> = " + ((object)(Color)(ref val)).ToString()));
		}

		public static void DrawDebugBounds(MeshFilter mesh, Color color)
		{
		}

		public static void DrawDebugBounds(MeshRenderer renderer, Color color)
		{
		}

		public static void DrawDebugBounds(Bounds bounds, Color color)
		{
		}

		public static void DrawString(string text, Vector3 worldPos, Color? colour = null)
		{
		}

		public static void DrawArrowRay(Vector3 position, Vector3 direction, float headLength = 0.25f, float headAngle = 20f)
		{
		}

		public static void DrawDimensionalCross(Vector3 position, float size)
		{
		}
	}
	public static class MyDelayedActions
	{
		public static Coroutine DelayedAction(float waitSeconds, Action action, bool unscaled = false)
		{
			return DelayedActionCoroutine(waitSeconds, action, unscaled).StartCoroutine();
		}

		public static void DelayedAction(Action action)
		{
			Coroutine().StartCoroutine();
			IEnumerator Coroutine()
			{
				yield return null;
				action?.Invoke();
			}
		}

		public static Coroutine DelayedAction(this MonoBehaviour invoker, float waitSeconds, Action action, bool unscaled = false)
		{
			return invoker.StartCoroutine(DelayedActionCoroutine(waitSeconds, action, unscaled));
		}

		public static Coroutine DelayedAction(this MonoBehaviour invoker, Action action)
		{
			return invoker.StartCoroutine(Coroutine());
			IEnumerator Coroutine()
			{
				yield return null;
				action?.Invoke();
			}
		}

		public static IEnumerator DelayedUiSelection(GameObject objectToSelect)
		{
			yield return null;
			EventSystem.current.SetSelectedGameObject((GameObject)null);
			EventSystem.current.SetSelectedGameObject(objectToSelect);
		}

		public static Coroutine DelayedUiSelection(this MonoBehaviour invoker, GameObject objectToSelect)
		{
			return invoker.StartCoroutine(DelayedUiSelection(objectToSelect));
		}

		private static IEnumerator DelayedActionCoroutine(float waitSeconds, Action action, bool unscaled = false)
		{
			if (unscaled)
			{
				yield return (object)new WaitForSecondsRealtime(waitSeconds);
			}
			else
			{
				yield return (object)new WaitForSeconds(waitSeconds);
			}
			action?.Invoke();
		}
	}
	public static class MyExtensions
	{
		public struct ComponentOfInterface<T>
		{
			public readonly Component Component;

			public readonly T Interface;

			public ComponentOfInterface(Component component, T @interface)
			{
				Component = component;
				Interface = @interface;
			}
		}

		public static void Swap<T>(this T[] array, int a, int b)
		{
			T val = array[b];
			T val2 = array[a];
			array[a] = val;
			array[b] = val2;
		}

		public static bool IsWorldPointInViewport(this Camera camera, Vector3 point)
		{
			//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_0007: 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_0015: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = camera.WorldToViewportPoint(point);
			if (val.x > 0f)
			{
				return val.y > 0f;
			}
			return false;
		}

		public static Vector3 WorldPointOffsetByDepth(this Camera camera, Vector3 source, float distanceFromCamera, MonoOrStereoscopicEye eye = 2)
		{
			//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_000a: 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_0012: Unknown result type (might be due to invalid IL or missing references)
			Vector3 vector = camera.WorldToScreenPoint(source, eye);
			return camera.ScreenToWorldPoint(vector.SetZ(distanceFromCamera), eye);
		}

		public static void ResetPosition(this Transform transform)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			transform.position = Vector3.zero;
		}

		public static Transform SetLossyScale(this Transform source, Vector3 targetLossyScale)
		{
			//IL_0002: 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_0012: 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)
			source.localScale = source.lossyScale.Pow(-1f).ScaleBy(targetLossyScale).ScaleBy(source.localScale);
			return source;
		}

		public static T SetLayerRecursively<T>(this T source, string layerName) where T : Component
		{
			((Component)source).gameObject.SetLayerRecursively(LayerMask.NameToLayer(layerName));
			return source;
		}

		public static T SetLayerRecursively<T>(this T source, int layer) where T : Component
		{
			((Component)source).gameObject.SetLayerRecursively(layer);
			return source;
		}

		public static GameObject SetLayerRecursively(this GameObject source, string layerName)
		{
			source.SetLayerRecursively(LayerMask.NameToLayer(layerName));
			return source;
		}

		public static GameObject SetLayerRecursively(this GameObject source, int layer)
		{
			Transform[] componentsInChildren = source.GetComponentsInChildren<Transform>(true);
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Component)componentsInChildren[i]).gameObject.layer = layer;
			}
			return source;
		}

		public static T GetOrAddComponent<T>(this GameObject gameObject) where T : Component
		{
			T component = gameObject.GetComponent<T>();
			if ((Object)(object)component != (Object)null)
			{
				return component;
			}
			return gameObject.AddComponent<T>();
		}

		public static T GetOrAddComponent<T>(this Component component) where T : Component
		{
			return component.gameObject.GetOrAddComponent<T>();
		}

		public static bool HasComponent<T>(this GameObject gameObject)
		{
			return gameObject.GetComponent<T>() != null;
		}

		public static bool HasComponent<T>(this Component component)
		{
			return component.GetComponent<T>() != null;
		}

		public static List<Transform> GetChildsWhere(this Transform transform, Predicate<Transform> match)
		{
			List<Transform> list = new List<Transform>();
			RecursiveCheck(transform);
			return list;
			void RecursiveCheck(Transform parent)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: Expected O, but got Unknown
				foreach (Transform item in parent)
				{
					Transform val = item;
					RecursiveCheck(val);
					if (match(val))
					{
						list.Add(val);
					}
				}
			}
		}

		public static List<Transform> GetObjectsOfLayerInChilds(this GameObject gameObject, int layer)
		{
			return gameObject.transform.GetChildsWhere((Transform t) => ((Component)t).gameObject.layer == layer);
		}

		public static List<Transform> GetObjectsOfLayerInChilds(this GameObject gameObject, string layer)
		{
			return gameObject.GetObjectsOfLayerInChilds(LayerMask.NameToLayer(layer));
		}

		public static List<Transform> GetObjectsOfLayerInChilds(this Component component, string layer)
		{
			return component.GetObjectsOfLayerInChilds(LayerMask.NameToLayer(layer));
		}

		public static List<Transform> GetObjectsOfLayerInChilds(this Component component, int layer)
		{
			return component.gameObject.GetObjectsOfLayerInChilds(layer);
		}

		public static void SetBodyState(this Rigidbody body, bool state)
		{
			body.isKinematic = !state;
			body.detectCollisions = state;
		}

		public static T[] FindObjectsOfInterface<T>() where T : class
		{
			return (from behaviour in Object.FindObjectsOfType<Transform>()
				select ((Component)behaviour).GetComponent(typeof(T))).OfType<T>().ToArray();
		}

		public static ComponentOfInterface<T>[] FindObjectsOfInterfaceAsComponents<T>() where T : class
		{
			return (from c in Object.FindObjectsOfType<Component>()
				where c is T
				select new ComponentOfInterface<T>(c, c as T)).ToArray();
		}

		public static T[] OnePerInstance<T>(this T[] components) where T : Component
		{
			if (components == null || components.Length == 0)
			{
				return null;
			}
			return (from h in components
				group h by ((Object)((Component)h).transform).GetInstanceID() into g
				select g.First()).ToArray();
		}

		public static RaycastHit2D[] OneHitPerInstance(this RaycastHit2D[] hits)
		{
			if (hits == null || hits.Length == 0)
			{
				return null;
			}
			return (from h in hits
				group h by ((Object)((RaycastHit2D)(ref h)).transform).GetInstanceID() into g
				select g.First()).ToArray();
		}

		public static Collider2D[] OneHitPerInstance(this Collider2D[] hits)
		{
			if (hits == null || hits.Length == 0)
			{
				return null;
			}
			return (from h in hits
				group h by ((Object)((Component)h).transform).GetInstanceID() into g
				select g.First()).ToArray();
		}

		public static List<Collider2D> OneHitPerInstanceList(this Collider2D[] hits)
		{
			if (hits == null || hits.Length == 0)
			{
				return null;
			}
			return (from h in hits
				group h by ((Object)((Component)h).transform).GetInstanceID() into g
				select g.First()).ToList();
		}
	}
	public static class MyGizmos
	{
		public static void DrawArrow(Vector3 from, Vector3 direction, float headLength = 0.25f, float headAngle = 20f)
		{
		}
	}
	public static class MyInput
	{
		public static bool GetNumberDown(int num)
		{
			switch (num)
			{
			case 0:
				if (Input.GetKeyDown((KeyCode)48) || Input.GetKeyDown((KeyCode)256))
				{
					return true;
				}
				break;
			case 1:
				if (Input.GetKeyDown((KeyCode)49) || Input.GetKeyDown((KeyCode)257))
				{
					return true;
				}
				break;
			case 2:
				if (Input.GetKeyDown((KeyCode)50) || Input.GetKeyDown((KeyCode)258))
				{
					return true;
				}
				break;
			case 3:
				if (Input.GetKeyDown((KeyCode)51) || Input.GetKeyDown((KeyCode)259))
				{
					return true;
				}
				break;
			case 4:
				if (Input.GetKeyDown((KeyCode)52) || Input.GetKeyDown((KeyCode)260))
				{
					return true;
				}
				break;
			case 5:
				if (Input.GetKeyDown((KeyCode)53) || Input.GetKeyDown((KeyCode)261))
				{
					return true;
				}
				break;
			case 6:
				if (Input.GetKeyDown((KeyCode)54) || Input.GetKeyDown((KeyCode)262))
				{
					return true;
				}
				break;
			case 7:
				if (Input.GetKeyDown((KeyCode)55) || Input.GetKeyDown((KeyCode)263))
				{
					return true;
				}
				break;
			case 8:
				if (Input.GetKeyDown((KeyCode)56) || Input.GetKeyDown((KeyCode)264))
				{
					return true;
				}
				break;
			case 9:
				if (Input.GetKeyDown((KeyCode)57) || Input.GetKeyDown((KeyCode)265))
				{
					return true;
				}
				break;
			}
			return false;
		}

		public static int GetNumberDown(KeyCode key)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Invalid comparison between Unknown and I4
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Invalid comparison between Unknown and I4
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Invalid comparison between Unknown and I4
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Invalid comparison between Unknown and I4
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Invalid comparison between Unknown and I4
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Invalid comparison between Unknown and I4
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Invalid comparison between Unknown and I4
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Invalid comparison between Unknown and I4
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Invalid comparison between Unknown and I4
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Inv