Decompiled source of CrowdControl AleAndTaleTavern v1.0.5
BepInEx/plugins/CrowdControl.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
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 agousing 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
The result has been truncated due to the large size, download it to view full contents!
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