using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Sockets;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using BepInEx;
using HarmonyLib;
using Jaket.Sam;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json.Linq;
using TMPro;
using ULTRAKILL.Cheats;
using UltraNet;
using UltraNet.Canvas;
using UltraNet.Classes;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("UltraNet")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Description")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: AssemblyInformationalVersion("0.0.1+0567c4962977912536a0fb51291a18e8d41a31d2")]
[assembly: AssemblyProduct("UltraNet")]
[assembly: AssemblyTitle("UltraNet")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
public class BundlesManager : MonoBehaviour
{
public static AssetBundle netBundle;
public void Awake()
{
Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
Assembly executingAssembly = Assembly.GetExecutingAssembly();
string text = "UltraNet.Assets.ultranet.bundle";
using Stream stream = executingAssembly.GetManifestResourceStream(text);
if (stream == null)
{
Plugin.LogError("Embedded resource '" + text + "' not found!");
return;
}
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
netBundle = AssetBundle.LoadFromMemory(array);
if ((Object)(object)netBundle != (Object)null)
{
Plugin.LogInfo("Loaded embedded AssetBundle!");
}
else
{
Plugin.LogError("Failed to load AssetBundle from memory!");
}
}
public void OnDestroy()
{
AssetBundle obj = netBundle;
if (obj != null)
{
obj.Unload(false);
}
}
}
namespace Jaket.Sam
{
public class Buffer
{
private List<int> data = new List<int>();
private int lastTimeTableIndex;
public int Position;
public void Set(int pos, int value)
{
while (pos >= data.Count)
{
data.Add(0);
}
data[pos] = value;
}
public void WriteArray(int index, int[] array)
{
Position += Constants.TimeTable[lastTimeTableIndex, index];
lastTimeTableIndex = index;
for (int i = 0; i < 5; i++)
{
Set(Position / 50 + i, array[i]);
}
}
public void Write(int index, int v)
{
WriteArray(index, new int[5] { v, v, v, v, v });
}
public float[] GetFloats()
{
float[] array = new float[data.Count];
for (int i = 0; i < data.Count; i++)
{
array[i] = (float)(data[i] - 127) / 255f;
}
return array;
}
}
public class Constants
{
public static readonly Dictionary<char, string> ISO9 = new Dictionary<char, string>
{
{ 'А', "A" },
{ 'Б', "B" },
{ 'В', "V" },
{ 'Г', "G" },
{ 'Д', "D" },
{ 'Е', "EE" },
{ 'Ё', "Ë" },
{ 'Ж', "ZH" },
{ 'З', "Z" },
{ 'И', "IE" },
{ 'Й', "Y" },
{ 'К', "K" },
{ 'Л', "L" },
{ 'М', "M" },
{ 'Н', "N" },
{ 'О', "O" },
{ 'П', "P" },
{ 'Р', "R" },
{ 'С', "S" },
{ 'Т', "T" },
{ 'У', "OO" },
{ 'Ф', "F" },
{ 'Х', "H" },
{ 'Ц', "TS" },
{ 'Ч', "CH" },
{ 'Ш', "SH" },
{ 'Щ', "SHCH" },
{ 'Ъ', "'" },
{ 'Ы', "Y'" },
{ 'Ь', "'" },
{ 'Э', "EH" },
{ 'Ю', "YU" },
{ 'Я', "YA" }
};
public static readonly int[] RulesSet1 = new int[4076]
{
93, 193, 32, 40, 65, 46, 41, 61, 69, 72,
52, 89, 46, 160, 40, 65, 41, 32, 61, 65,
200, 32, 40, 65, 82, 69, 41, 32, 61, 65,
65, 210, 32, 40, 65, 82, 41, 79, 61, 65,
88, 210, 40, 65, 82, 41, 35, 61, 69, 72,
52, 210, 32, 94, 40, 65, 83, 41, 35, 61,
69, 89, 52, 211, 40, 65, 41, 87, 65, 61,
65, 216, 40, 65, 87, 41, 61, 65, 79, 181,
32, 58, 40, 65, 78, 89, 41, 61, 69, 72,
52, 78, 73, 217, 40, 65, 41, 94, 43, 35,
61, 69, 89, 181, 35, 58, 40, 65, 76, 76,
89, 41, 61, 85, 76, 73, 217, 32, 40, 65,
76, 41, 35, 61, 85, 204, 40, 65, 71, 65,
73, 78, 41, 61, 65, 88, 71, 69, 72, 52,
206, 35, 58, 40, 65, 71, 41, 69, 61, 73,
72, 202, 40, 65, 41, 94, 37, 61, 69, 217,
40, 65, 41, 94, 43, 58, 35, 61, 65, 197,
32, 58, 40, 65, 41, 94, 43, 32, 61, 69,
89, 180, 32, 40, 65, 82, 82, 41, 61, 65,
88, 210, 40, 65, 82, 82, 41, 61, 65, 69,
52, 210, 32, 94, 40, 65, 82, 41, 32, 61,
65, 65, 53, 210, 40, 65, 82, 41, 61, 65,
65, 53, 210, 40, 65, 73, 82, 41, 61, 69,
72, 52, 210, 40, 65, 73, 41, 61, 69, 89,
180, 40, 65, 89, 41, 61, 69, 89, 181, 40,
65, 85, 41, 61, 65, 79, 180, 35, 58, 40,
65, 76, 41, 32, 61, 85, 204, 35, 58, 40,
65, 76, 83, 41, 32, 61, 85, 76, 218, 40,
65, 76, 75, 41, 61, 65, 79, 52, 203, 40,
65, 76, 41, 94, 61, 65, 79, 204, 32, 58,
40, 65, 66, 76, 69, 41, 61, 69, 89, 52,
66, 85, 204, 40, 65, 66, 76, 69, 41, 61,
65, 88, 66, 85, 204, 40, 65, 41, 86, 79,
61, 69, 89, 180, 40, 65, 78, 71, 41, 43,
61, 69, 89, 52, 78, 202, 40, 65, 84, 65,
82, 73, 41, 61, 65, 72, 84, 65, 65, 52,
82, 73, 217, 40, 65, 41, 84, 79, 77, 61,
65, 197, 40, 65, 41, 84, 84, 73, 61, 65,
197, 32, 40, 65, 84, 41, 32, 61, 65, 69,
212, 32, 40, 65, 41, 84, 61, 65, 200, 40,
65, 41, 61, 65, 197, 93, 194, 32, 40, 66,
41, 32, 61, 66, 73, 89, 180, 32, 40, 66,
69, 41, 94, 35, 61, 66, 73, 200, 40, 66,
69, 73, 78, 71, 41, 61, 66, 73, 89, 52,
73, 72, 78, 216, 32, 40, 66, 79, 84, 72,
41, 32, 61, 66, 79, 87, 52, 84, 200, 32,
40, 66, 85, 83, 41, 35, 61, 66, 73, 72,
52, 218, 40, 66, 82, 69, 65, 75, 41, 61,
66, 82, 69, 89, 53, 203, 40, 66, 85, 73,
76, 41, 61, 66, 73, 72, 52, 204, 40, 66,
41, 61, 194, 93, 195, 32, 40, 67, 41, 32,
61, 83, 73, 89, 180, 32, 40, 67, 72, 41,
94, 61, 203, 94, 69, 40, 67, 72, 41, 61,
203, 40, 67, 72, 65, 41, 82, 35, 61, 75,
69, 72, 181, 40, 67, 72, 41, 61, 67, 200,
32, 83, 40, 67, 73, 41, 35, 61, 83, 65,
89, 180, 40, 67, 73, 41, 65, 61, 83, 200,
40, 67, 73, 41, 79, 61, 83, 200, 40, 67,
73, 41, 69, 78, 61, 83, 200, 40, 67, 73,
84, 89, 41, 61, 83, 73, 72, 84, 73, 217,
40, 67, 41, 43, 61, 211, 40, 67, 75, 41,
61, 203, 40, 67, 79, 77, 77, 79, 68, 79,
82, 69, 41, 61, 75, 65, 65, 52, 77, 65,
72, 68, 79, 72, 210, 40, 67, 79, 77, 41,
61, 75, 65, 72, 205, 40, 67, 85, 73, 84,
41, 61, 75, 73, 72, 212, 40, 67, 82, 69,
65, 41, 61, 75, 82, 73, 89, 69, 217, 40,
67, 41, 61, 203, 93, 196, 32, 40, 68, 41,
32, 61, 68, 73, 89, 180, 32, 40, 68, 82,
46, 41, 32, 61, 68, 65, 65, 52, 75, 84,
69, 210, 35, 58, 40, 68, 69, 68, 41, 32,
61, 68, 73, 72, 196, 46, 69, 40, 68, 41,
32, 61, 196, 35, 58, 94, 69, 40, 68, 41,
32, 61, 212, 32, 40, 68, 69, 41, 94, 35,
61, 68, 73, 200, 32, 40, 68, 79, 41, 32,
61, 68, 85, 215, 32, 40, 68, 79, 69, 83,
41, 61, 68, 65, 72, 218, 40, 68, 79, 78,
69, 41, 32, 61, 68, 65, 72, 53, 206, 40,
68, 79, 73, 78, 71, 41, 61, 68, 85, 87,
52, 73, 72, 78, 216, 32, 40, 68, 79, 87,
41, 61, 68, 65, 215, 35, 40, 68, 85, 41,
65, 61, 74, 85, 215, 35, 40, 68, 85, 41,
94, 35, 61, 74, 65, 216, 40, 68, 41, 61,
196, 93, 197, 32, 40, 69, 41, 32, 61, 73,
89, 73, 89, 180, 35, 58, 40, 69, 41, 32,
189, 39, 58, 94, 40, 69, 41, 32, 189, 32,
58, 40, 69, 41, 32, 61, 73, 217, 35, 40,
69, 68, 41, 32, 61, 196, 35, 58, 40, 69,
41, 68, 32, 189, 40, 69, 86, 41, 69, 82,
61, 69, 72, 52, 214, 40, 69, 41, 94, 37,
61, 73, 89, 180, 40, 69, 82, 73, 41, 35,
61, 73, 89, 52, 82, 73, 217, 40, 69, 82,
73, 41, 61, 69, 72, 52, 82, 73, 200, 35,
58, 40, 69, 82, 41, 35, 61, 69, 210, 40,
69, 82, 82, 79, 82, 41, 61, 69, 72, 52,
82, 79, 72, 210, 40, 69, 82, 65, 83, 69,
41, 61, 73, 72, 82, 69, 89, 53, 211, 40,
69, 82, 41, 35, 61, 69, 72, 210, 40, 69,
82, 41, 61, 69, 210, 32, 40, 69, 86, 69,
78, 41, 61, 73, 89, 86, 69, 72, 206, 35,
58, 40, 69, 41, 87, 189, 64, 40, 69, 87,
41, 61, 85, 215, 40, 69, 87, 41, 61, 89,
85, 215, 40, 69, 41, 79, 61, 73, 217, 35,
58, 38, 40, 69, 83, 41, 32, 61, 73, 72,
218, 35, 58, 40, 69, 41, 83, 32, 189, 35,
58, 40, 69, 76, 89, 41, 32, 61, 76, 73,
217, 35, 58, 40, 69, 77, 69, 78, 84, 41,
61, 77, 69, 72, 78, 212, 40, 69, 70, 85,
76, 41, 61, 70, 85, 72, 204, 40, 69, 69,
41, 61, 73, 89, 180, 40, 69, 65, 82, 78,
41, 61, 69, 82, 53, 206, 32, 40, 69, 65,
82, 41, 94, 61, 69, 82, 181, 40, 69, 65,
68, 41, 61, 69, 72, 196, 35, 58, 40, 69,
65, 41, 32, 61, 73, 89, 65, 216, 40, 69,
65, 41, 83, 85, 61, 69, 72, 181, 40, 69,
65, 41, 61, 73, 89, 181, 40, 69, 73, 71,
72, 41, 61, 69, 89, 180, 40, 69, 73, 41,
61, 73, 89, 180, 32, 40, 69, 89, 69, 41,
61, 65, 89, 180, 40, 69, 89, 41, 61, 73,
217, 40, 69, 85, 41, 61, 89, 85, 87, 181,
40, 69, 81, 85, 65, 76, 41, 61, 73, 89,
52, 75, 87, 85, 204, 40, 69, 41, 61, 69,
200, 93, 198, 32, 40, 70, 41, 32, 61, 69,
72, 52, 198, 40, 70, 85, 76, 41, 61, 70,
85, 72, 204, 40, 70, 82, 73, 69, 78, 68,
41, 61, 70, 82, 69, 72, 53, 78, 196, 40,
70, 65, 84, 72, 69, 82, 41, 61, 70, 65,
65, 52, 68, 72, 69, 210, 40, 70, 41, 70,
189, 40, 70, 41, 61, 198, 93, 199, 32, 40,
71, 41, 32, 61, 74, 73, 89, 180, 40, 71,
73, 86, 41, 61, 71, 73, 72, 53, 214, 32,
40, 71, 41, 73, 94, 61, 199, 40, 71, 69,
41, 84, 61, 71, 69, 72, 181, 83, 85, 40,
71, 71, 69, 83, 41, 61, 71, 74, 69, 72,
52, 211, 40, 71, 71, 41, 61, 199, 32, 66,
35, 40, 71, 41, 61, 199, 40, 71, 41, 43,
61, 202, 40, 71, 82, 69, 65, 84, 41, 61,
71, 82, 69, 89, 52, 212, 40, 71, 79, 78,
41, 69, 61, 71, 65, 79, 53, 206, 35, 40,
71, 72, 41, 189, 32, 40, 71, 78, 41, 61,
206, 40, 71, 41, 61, 199, 93, 200, 32, 40,
72, 41, 32, 61, 69, 89, 52, 67, 200, 32,
40, 72, 65, 86, 41, 61, 47, 72, 65, 69,
54, 214, 32, 40, 72, 69, 82, 69, 41, 61,
47, 72, 73, 89, 210, 32, 40, 72, 79, 85,
82, 41, 61, 65, 87, 53, 69, 210, 40, 72,
79, 87, 41, 61, 47, 72, 65, 215, 40, 72,
41, 35, 61, 47, 200, 40, 72, 41, 189, 93,
201, 32, 40, 73, 78, 41, 61, 73, 72, 206,
32, 40, 73, 41, 32, 61, 65, 89, 180, 40,
73, 41, 32, 61, 65, 217, 40, 73, 78, 41,
68, 61, 65, 89, 53, 206, 83, 69, 77, 40,
73, 41, 61, 73, 217, 32, 65, 78, 84, 40,
73, 41, 61, 65, 217, 40, 73, 69, 82, 41,
61, 73, 89, 69, 210, 35, 58, 82, 40, 73,
69, 68, 41, 32, 61, 73, 89, 196, 40, 73,
69, 68, 41, 32, 61, 65, 89, 53, 196, 40,
73, 69, 78, 41, 61, 73, 89, 69, 72, 206,
40, 73, 69, 41, 84, 61, 65, 89, 52, 69,
200, 40, 73, 39, 41, 61, 65, 89, 181, 32,
58, 40, 73, 41, 94, 37, 61, 65, 89, 181,
32, 58, 40, 73, 69, 41, 32, 61, 65, 89,
180, 40, 73, 41, 37, 61, 73, 217, 40, 73,
69, 41, 61, 73, 89, 180, 32, 40, 73, 68,
69, 65, 41, 61, 65, 89, 68, 73, 89, 53,
65, 200, 40, 73, 41, 94, 43, 58, 35, 61,
73, 200, 40, 73, 82, 41, 35, 61, 65, 89,
210, 40, 73, 90, 41, 37, 61, 65, 89, 218,
40, 73, 83, 41, 37, 61, 65, 89, 218, 73,
94, 40, 73, 41, 94, 35, 61, 73, 200, 43,
94, 40, 73, 41, 94, 43, 61, 65, 217, 35,
58, 94, 40, 73, 41, 94, 43, 61, 73, 200,
40, 73, 41, 94, 43, 61, 65, 217, 40, 73,
82, 41, 61, 69, 210, 40, 73, 71, 72, 41,
61, 65, 89, 180, 40, 73, 76, 68, 41, 61,
65, 89, 53, 76, 196, 32, 40, 73, 71, 78,
41, 61, 73, 72, 71, 206, 40, 73, 71, 78,
41, 32, 61, 65, 89, 52, 206, 40, 73, 71,
78, 41, 94, 61, 65, 89, 52, 206, 40, 73,
71, 78, 41, 37, 61, 65, 89, 52, 206, 40,
73, 67, 82, 79, 41, 61, 65, 89, 52, 75,
82, 79, 200, 40, 73, 81, 85, 69, 41, 61,
73, 89, 52, 203, 40, 73, 41, 61, 73, 200,
93, 202, 32, 40, 74, 41, 32, 61, 74, 69,
89, 180, 40, 74, 41, 61, 202, 93, 203, 32,
40, 75, 41, 32, 61, 75, 69, 89, 180, 32,
40, 75, 41, 78, 189, 40, 75, 41, 61, 203,
93, 204, 32, 40, 76, 41, 32, 61, 69, 72,
52, 204, 40, 76, 79, 41, 67, 35, 61, 76,
79, 215, 76, 40, 76, 41, 189, 35, 58, 94,
40, 76, 41, 37, 61, 85, 204, 40, 76, 69,
65, 68, 41, 61, 76, 73, 89, 196, 32, 40,
76, 65, 85, 71, 72, 41, 61, 76, 65, 69,
52, 198, 40, 76, 41, 61, 204, 93, 205, 32,
40, 77, 41, 32, 61, 69, 72, 52, 205, 32,
40, 77, 82, 46, 41, 32, 61, 77, 73, 72,
52, 83, 84, 69, 210, 32, 40, 77, 83, 46,
41, 61, 77, 73, 72, 53, 218, 32, 40, 77,
82, 83, 46, 41, 32, 61, 77, 73, 72, 52,
83, 73, 88, 218, 40, 77, 79, 86, 41, 61,
77, 85, 87, 52, 214, 40, 77, 65, 67, 72,
73, 78, 41, 61, 77, 65, 72, 83, 72, 73,
89, 53, 206, 77, 40, 77, 41, 189, 40, 77,
41, 61, 205, 93, 206, 32, 40, 78, 41, 32,
61, 69, 72, 52, 206, 69, 40, 78, 71, 41,
43, 61, 78, 202, 40, 78, 71, 41, 82, 61,
78, 88, 199, 40, 78, 71, 41, 35, 61, 78,
88, 199, 40, 78, 71, 76, 41, 37, 61, 78,
88, 71, 85, 204, 40, 78, 71, 41, 61, 78,
216, 40, 78, 75, 41, 61, 78, 88, 203, 32,
40, 78, 79, 87, 41, 32, 61, 78, 65, 87,
180, 78, 40, 78, 41, 189, 40, 78, 79, 78,
41, 69, 61, 78, 65, 72, 52, 206, 40, 78,
41, 61, 206, 93, 207, 32, 40, 79, 41, 32,
61, 79, 72, 52, 215, 40, 79, 70, 41, 32,
61, 65, 72, 214, 32, 40, 79, 72, 41, 32,
61, 79, 87, 181, 40, 79, 82, 79, 85, 71,
72, 41, 61, 69, 82, 52, 79, 215, 35, 58,
40, 79, 82, 41, 32, 61, 69, 210, 35, 58,
40, 79, 82, 83, 41, 32, 61, 69, 82, 218,
40, 79, 82, 41, 61, 65, 79, 210, 32, 40,
79, 78, 69, 41, 61, 87, 65, 72, 206, 35,
40, 79, 78, 69, 41, 32, 61, 87, 65, 72,
206, 40, 79, 87, 41, 61, 79, 215, 32, 40,
79, 86, 69, 82, 41, 61, 79, 87, 53, 86,
69, 210, 80, 82, 40, 79, 41, 86, 61, 85,
87, 180, 40, 79, 86, 41, 61, 65, 72, 52,
214, 40, 79, 41, 94, 37, 61, 79, 87, 181,
40, 79, 41, 94, 69, 78, 61, 79, 215, 40,
79, 41, 94, 73, 35, 61, 79, 87, 181, 40,
79, 76, 41, 68, 61, 79, 87, 52, 204, 40,
79, 85, 71, 72, 84, 41, 61, 65, 79, 53,
212, 40, 79, 85, 71, 72, 41, 61, 65, 72,
53, 198, 32, 40, 79, 85, 41, 61, 65, 215,
72, 40, 79, 85, 41, 83, 35, 61, 65, 87,
180, 40, 79, 85, 83, 41, 61, 65, 88, 211,
40, 79, 85, 82, 41, 61, 79, 72, 210, 40,
79, 85, 76, 68, 41, 61, 85, 72, 53, 196,
40, 79, 85, 41, 94, 76, 61, 65, 72, 181,
40, 79, 85, 80, 41, 61, 85, 87, 53, 208,
40, 79, 85, 41, 61, 65, 215, 40, 79, 89,
41, 61, 79, 217, 40, 79, 73, 78, 71, 41,
61, 79, 87, 52, 73, 72, 78, 216, 40, 79,
73, 41, 61, 79, 89, 181, 40, 79, 79, 82,
41, 61, 79, 72, 53, 210, 40, 79, 79, 75,
41, 61, 85, 72, 53, 203, 70, 40, 79, 79,
68, 41, 61, 85, 87, 53, 196, 76, 40, 79,
79, 68, 41, 61, 65, 72, 53, 196, 77, 40,
79, 79, 68, 41, 61, 85, 87, 53, 196, 40,
79, 79, 68, 41, 61, 85, 72, 53, 196, 70,
40, 79, 79, 84, 41, 61, 85, 72, 53, 212,
40, 79, 79, 41, 61, 85, 87, 181, 40, 79,
39, 41, 61, 79, 200, 40, 79, 41, 69, 61,
79, 215, 40, 79, 41, 32, 61, 79, 215, 40,
79, 65, 41, 61, 79, 87, 180, 32, 40, 79,
78, 76, 89, 41, 61, 79, 87, 52, 78, 76,
73, 217, 32, 40, 79, 78, 67, 69, 41, 61,
87, 65, 72, 52, 78, 211, 40, 79, 78, 39,
84, 41, 61, 79, 87, 52, 78, 212, 67, 40,
79, 41, 78, 61, 65, 193, 40, 79, 41, 78,
71, 61, 65, 207, 32, 58, 94, 40, 79, 41,
78, 61, 65, 200, 73, 40, 79, 78, 41, 61,
85, 206, 35, 58, 40, 79, 78, 41, 61, 85,
206, 35, 94, 40, 79, 78, 41, 61, 85, 206,
40, 79, 41, 83, 84, 61, 79, 215, 40, 79,
70, 41, 94, 61, 65, 79, 52, 198, 40, 79,
84, 72, 69, 82, 41, 61, 65, 72, 53, 68,
72, 69, 210, 82, 40, 79, 41, 66, 61, 82,
65, 193, 94, 82, 40, 79, 41, 58, 35, 61,
79, 87, 181, 40, 79, 83, 83, 41, 32, 61,
65, 79, 53, 211, 35, 58, 94, 40, 79, 77,
41, 61, 65, 72, 205, 40, 79, 41, 61, 65,
193, 93, 208, 32, 40, 80, 41, 32, 61, 80,
73, 89, 180, 40, 80, 72, 41, 61, 198, 40,
80, 69, 79, 80, 76, 41, 61, 80, 73, 89,
53, 80, 85, 204, 40, 80, 79, 87, 41, 61,
80, 65, 87, 180, 40, 80, 85, 84, 41, 32,
61, 80, 85, 72, 212, 40, 80, 41, 80, 189,
40, 80, 41, 83, 189, 40, 80, 41, 78, 189,
40, 80, 82, 79, 70, 46, 41, 61, 80, 82,
79, 72, 70, 69, 72, 52, 83, 69, 210, 40,
80, 41, 61, 208, 93, 209, 32, 40, 81, 41,
32, 61, 75, 89, 85, 87, 180, 40, 81, 85,
65, 82, 41, 61, 75, 87, 79, 72, 53, 210,
40, 81, 85, 41, 61, 75, 215, 40, 81, 41,
61, 203, 93, 210, 32, 40, 82, 41, 32, 61,
65, 65, 53, 210, 32, 40, 82, 69, 41, 94,
35, 61, 82, 73, 217, 40, 82, 41, 82, 189,
40, 82, 41, 61, 210, 93, 211, 32, 40, 83,
41, 32, 61, 69, 72, 52, 211, 40, 83, 72,
41, 61, 83, 200, 35, 40, 83, 73, 79, 78,
41, 61, 90, 72, 85, 206, 40, 83, 79, 77,
69, 41, 61, 83, 65, 72, 205, 35, 40, 83,
85, 82, 41, 35, 61, 90, 72, 69, 210, 40,
83, 85, 82, 41, 35, 61, 83, 72, 69, 210,
35, 40, 83, 85, 41, 35, 61, 90, 72, 85,
215, 35, 40, 83, 83, 85, 41, 35, 61, 83,
72, 85, 215, 35, 40, 83, 69, 68, 41, 61,
90, 196, 35, 40, 83, 41, 35, 61, 218, 40,
83, 65, 73, 68, 41, 61, 83, 69, 72, 196,
94, 40, 83, 73, 79, 78, 41, 61, 83, 72,
85, 206, 40, 83, 41, 83, 189, 46, 40, 83,
41, 32, 61, 218, 35, 58, 46, 69, 40, 83,
41, 32, 61, 218, 35, 58, 94, 35, 40, 83,
41, 32, 61, 211, 85, 40, 83, 41, 32, 61,
211, 32, 58, 35, 40, 83, 41, 32, 61, 218,
35, 35, 40, 83, 41, 32, 61, 218, 32, 40,
83, 67, 72, 41, 61, 83, 203, 40, 83, 41,
67, 43, 189, 35, 40, 83, 77, 41, 61, 90,
85, 205, 35, 40, 83, 78, 41, 39, 61, 90,
85, 205, 40, 83, 84, 76, 69, 41, 61, 83,
85, 204, 40, 83, 41, 61, 211, 93, 212, 32,
40, 84, 41, 32, 61, 84, 73, 89, 180, 32,
40, 84, 72, 69, 41, 32, 35, 61, 68, 72,
73, 217, 32, 40, 84, 72, 69, 41, 32, 61,
68, 72, 65, 216, 40, 84, 79, 41, 32, 61,
84, 85, 216, 32, 40, 84, 72, 65, 84, 41,
61, 68, 72, 65, 69, 212, 32, 40, 84, 72,
73, 83, 41, 32, 61, 68, 72, 73, 72, 211,
32, 40, 84, 72, 69, 89, 41, 61, 68, 72,
69, 217, 32, 40, 84, 72, 69, 82, 69, 41,
61, 68, 72, 69, 72, 210, 40, 84, 72, 69,
82, 41, 61, 68, 72, 69, 210, 40, 84, 72,
69, 73, 82, 41, 61, 68, 72, 69, 72, 210,
32, 40, 84, 72, 65, 78, 41, 32, 61, 68,
72, 65, 69, 206, 32, 40, 84, 72, 69, 77,
41, 32, 61, 68, 72, 65, 69, 206, 40, 84,
72, 69, 83, 69, 41, 32, 61, 68, 72, 73,
89, 218, 32, 40, 84, 72, 69, 78, 41, 61,
68, 72, 69, 72, 206, 40, 84, 72, 82, 79,
85, 71, 72, 41, 61, 84, 72, 82, 85, 87,
180, 40, 84, 72, 79, 83, 69, 41, 61, 68,
72, 79, 72, 218, 40, 84, 72, 79, 85, 71,
72, 41, 32, 61, 68, 72, 79, 215, 40, 84,
79, 68, 65, 89, 41, 61, 84, 85, 88, 68,
69, 217, 40, 84, 79, 77, 79, 41, 82, 82,
79, 87, 61, 84, 85, 77, 65, 65, 181, 40,
84, 79, 41, 84, 65, 76, 61, 84, 79, 87,
181, 32, 40, 84, 72, 85, 83, 41, 61, 68,
72, 65, 72, 52, 211, 40, 84, 72, 41, 61,
84, 200, 35, 58, 40, 84, 69, 68, 41, 61,
84, 73, 88, 196, 83, 40, 84, 73, 41, 35,
78, 61, 67, 200, 40, 84, 73, 41, 79, 61,
83, 200, 40, 84, 73, 41, 65, 61, 83, 200,
40, 84, 73, 69, 78, 41, 61, 83, 72, 85,
206, 40, 84, 85, 82, 41, 35, 61, 67, 72,
69, 210, 40, 84, 85, 41, 65, 61, 67, 72,
85, 215, 32, 40, 84, 87, 79, 41, 61, 84,
85, 215, 38, 40, 84, 41, 69, 78, 32, 189,
40, 84, 41, 61, 212, 93, 213, 32, 40, 85,
41, 32, 61, 89, 85, 87, 180, 32, 40, 85,
78, 41, 73, 61, 89, 85, 87, 206, 32, 40,
85, 78, 41, 61, 65, 72, 206, 32, 40, 85,
80, 79, 78, 41, 61, 65, 88, 80, 65, 79,
206, 64, 40, 85, 82, 41, 35, 61, 85, 72,
52, 210, 40, 85, 82, 41, 35, 61, 89, 85,
72, 52, 210, 40, 85, 82, 41, 61, 69, 210,
40, 85, 41, 94, 32, 61, 65, 200, 40, 85,
41, 94, 94, 61, 65, 72, 181, 40, 85, 89,
41, 61, 65, 89, 181, 32, 71, 40, 85, 41,
35, 189, 71, 40, 85, 41, 37, 189, 71, 40,
85, 41, 35, 61, 215, 35, 78, 40, 85, 41,
61, 89, 85, 215, 64, 40, 85, 41, 61, 85,
215, 40, 85, 41, 61, 89, 85, 215, 93, 214,
32, 40, 86, 41, 32, 61, 86, 73, 89, 180,
40, 86, 73, 69, 87, 41, 61, 86, 89, 85,
87, 181, 40, 86, 41, 61, 214, 93, 215, 32,
40, 87, 41, 32, 61, 68, 65, 72, 52, 66,
85, 76, 89, 85, 215, 32, 40, 87, 69, 82,
69, 41, 61, 87, 69, 210, 40, 87, 65, 41,
83, 72, 61, 87, 65, 193, 40, 87, 65, 41,
83, 84, 61, 87, 69, 217, 40, 87, 65, 41,
83, 61, 87, 65, 200, 40, 87, 65, 41, 84,
61, 87, 65, 193, 40, 87, 72, 69, 82, 69,
41, 61, 87, 72, 69, 72, 210, 40, 87, 72,
65, 84, 41, 61, 87, 72, 65, 72, 212, 40,
87, 72, 79, 76, 41, 61, 47, 72, 79, 87,
204, 40, 87, 72, 79, 41, 61, 47, 72, 85,
215, 40, 87, 72, 41, 61, 87, 200, 40, 87,
65, 82, 41, 35, 61, 87, 69, 72, 210, 40,
87, 65, 82, 41, 61, 87, 65, 79, 210, 40,
87, 79, 82, 41, 94, 61, 87, 69, 210, 40,
87, 82, 41, 61, 210, 40, 87, 79, 77, 41,
65, 61, 87, 85, 72, 205, 40, 87, 79, 77,
41, 69, 61, 87, 73, 72, 205, 40, 87, 69,
65, 41, 82, 61, 87, 69, 200, 40, 87, 65,
78, 84, 41, 61, 87, 65, 65, 53, 78, 212,
65, 78, 83, 40, 87, 69, 82, 41, 61, 69,
210, 40, 87, 41, 61, 215, 93, 216, 32, 40,
88, 41, 32, 61, 69, 72, 52, 75, 211, 32,
40, 88, 41, 61, 218, 40, 88, 41, 61, 75,
211, 93, 217, 32, 40, 89, 41, 32, 61, 87,
65, 89, 180, 40, 89, 79, 85, 78, 71, 41,
61, 89, 65, 72, 78, 216, 32, 40, 89, 79,
85, 82, 41, 61, 89, 79, 72, 210, 32, 40,
89, 79, 85, 41, 61, 89, 85, 215, 32, 40,
89, 69, 83, 41, 61, 89, 69, 72, 211, 32,
40, 89, 41, 61, 217, 70, 40, 89, 41, 61,
65, 217, 80, 83, 40, 89, 67, 72, 41, 61,
65, 89, 203, 35, 58, 94, 40, 89, 41, 61,
73, 217, 35, 58, 94, 40, 89, 41, 73, 61,
73, 217, 32, 58, 40, 89, 41, 32, 61, 65,
217, 32, 58, 40, 89, 41, 35, 61, 65, 217,
32, 58, 40, 89, 41, 94, 43, 58, 35, 61,
73, 200, 32, 58, 40, 89, 41, 94, 35, 61,
65, 217, 40, 89, 41, 61, 73, 200, 93, 218,
32, 40, 90, 41, 32, 61, 90, 73, 89, 180,
40, 90, 41, 61, 218, 234
};
public static readonly int[] RulesSet2 = new int[447]
{
40, 65, 41, 189, 40, 33, 41, 61, 174, 40,
34, 41, 32, 61, 45, 65, 72, 53, 78, 75,
87, 79, 87, 84, 173, 40, 34, 41, 61, 75,
87, 79, 87, 52, 84, 173, 40, 35, 41, 61,
32, 78, 65, 72, 52, 77, 66, 69, 210, 40,
36, 41, 61, 32, 68, 65, 65, 52, 76, 69,
210, 40, 37, 41, 61, 32, 80, 69, 82, 83,
69, 72, 52, 78, 212, 40, 38, 41, 61, 32,
65, 69, 78, 196, 40, 39, 41, 189, 40, 42,
41, 61, 32, 65, 69, 52, 83, 84, 69, 82,
73, 72, 83, 203, 40, 43, 41, 61, 32, 80,
76, 65, 72, 52, 211, 40, 44, 41, 61, 172,
32, 40, 45, 41, 32, 61, 173, 40, 45, 41,
189, 40, 46, 41, 61, 32, 80, 79, 89, 78,
212, 40, 47, 41, 61, 32, 83, 76, 65, 69,
52, 83, 200, 40, 48, 41, 61, 32, 90, 73,
89, 52, 82, 79, 215, 32, 40, 49, 83, 84,
41, 61, 70, 69, 82, 52, 83, 212, 32, 40,
49, 48, 84, 72, 41, 61, 84, 69, 72, 52,
78, 84, 200, 40, 49, 41, 61, 32, 87, 65,
72, 52, 206, 32, 40, 50, 78, 68, 41, 61,
83, 69, 72, 52, 75, 85, 78, 196, 40, 50,
41, 61, 32, 84, 85, 87, 180, 32, 40, 51,
82, 68, 41, 61, 84, 72, 69, 82, 52, 196,
40, 51, 41, 61, 32, 84, 72, 82, 73, 89,
180, 40, 52, 41, 61, 32, 70, 79, 72, 52,
210, 32, 40, 53, 84, 72, 41, 61, 70, 73,
72, 52, 70, 84, 200, 40, 53, 41, 61, 32,
70, 65, 89, 52, 214, 32, 40, 54, 52, 41,
32, 61, 83, 73, 72, 52, 75, 83, 84, 73,
89, 32, 70, 79, 72, 210, 40, 54, 41, 61,
32, 83, 73, 72, 52, 75, 211, 40, 55, 41,
61, 32, 83, 69, 72, 52, 86, 85, 206, 32,
40, 56, 84, 72, 41, 61, 69, 89, 52, 84,
200, 40, 56, 41, 61, 32, 69, 89, 52, 212,
40, 57, 41, 61, 32, 78, 65, 89, 52, 206,
40, 58, 41, 61, 174, 40, 59, 41, 61, 174,
40, 60, 41, 61, 32, 76, 69, 72, 52, 83,
32, 68, 72, 65, 69, 206, 40, 61, 41, 61,
32, 73, 89, 52, 75, 87, 85, 76, 218, 40,
62, 41, 61, 32, 71, 82, 69, 89, 52, 84,
69, 82, 32, 68, 72, 65, 69, 206, 40, 63,
41, 61, 191, 40, 64, 41, 61, 32, 65, 69,
54, 212, 40, 94, 41, 61, 32, 75, 65, 69,
52, 82, 73, 88, 212, 93, 193
};
public static List<char> StressCharTable = new List<char> { '1', '2', '3', '4', '5', '6', '7', '8' };
public static List<string> PhonemeNameTable = new List<string>
{
" *", ".*", "?*", ",*", "-*", "IY", "IH", "EH", "AE", "AA",
"AH", "AO", "UH", "AX", "IX", "ER", "UX", "OH", "RX", "LX",
"WX", "YX", "WH", "R*", "L*", "W*", "Y*", "M*", "N*", "NX",
"DX", "Q*", "S*", "SH", "F*", "TH", "/H", "/X", "Z*", "ZH",
"V*", "DH", "CH", "**", "J*", "**", "**", "**", "EY", "AY",
"OY", "AW", "OW", "UW", "B*", "**", "**", "D*", "**", "**",
"G*", "**", "**", "GX", "**", "**", "P*", "**", "**", "T*",
"**", "**", "K*", "**", "**", "KX", "**", "**", "UL", "UM",
"UN"
};
public static ushort[] PhonemeFlagsTable = new ushort[81]
{
32768, 49408, 49408, 49408, 49408, 164, 164, 164, 164, 164,
164, 132, 132, 164, 164, 132, 132, 132, 132, 132,
132, 132, 68, 4164, 4164, 4164, 4164, 2124, 3148, 2124,
1096, 16460, 9280, 8256, 8256, 9280, 64, 64, 9284, 8260,
8260, 9284, 8264, 8256, 76, 8260, 0, 0, 180, 180,
180, 148, 148, 148, 78, 78, 78, 1102, 1102, 1102,
78, 78, 78, 78, 78, 78, 75, 75, 75, 1099,
1099, 1099, 75, 75, 75, 75, 75, 75, 128, 193,
193
};
public static readonly int[] PhonemeFrequencyTable = new int[80]
{
0, 5980947, 5980947, 5980947, 5980947, 7230474, 6113550, 5980947, 5783320, 5842971,
5712919, 5775125, 5383440, 5844244, 6113550, 4075794, 5383182, 5774866, 4076306, 7218453,
5250317, 6112527, 5904395, 3944978, 7216654, 5904395, 7230217, 5320198, 7943686, 6641158,
7943686, 5980945, 6506758, 6967046, 5315078, 7946758, 6113550, 5383440, 6107913, 6767114,
4990984, 6106890, 6639366, 6639366, 7946758, 6639365, 7958022, 0, 5916691, 5777179,
5775125, 5778203, 5774866, 5382669, 5315078, 5315078, 5315078, 7946758, 7950854, 7946758,
7368198, 7237126, 7237126, 6181894, 6181894, 6181894, 5315078, 5315078, 5315078, 7946758,
7946758, 7946758, 6647046, 6641162, 7367946, 6181894, 6181894, 6181894, 556844, 98067
};
public static readonly int[] PhonemeAmplitudesTable = new int[80]
{
0, 0, 0, 0, 0, 526861, 461581, 527630, 527887, 68879,
68623, 3087, 68367, 2316, 461581, 330508, 68623, 3087, 396301, 67597,
2061, 461838, 2061, 330252, 67597, 2061, 526861, 780, 2313, 198153,
0, 0, 0, 0, 0, 0, 0, 0, 779, 66827,
779, 1035, 0, 0, 1, 66827, 920064, 66050, 593422, 68879,
3087, 68879, 3087, 2061, 2, 260, 0, 2, 260, 0,
1, 260, 0, 1, 260, 0, 0, 0, 0, 0,
0, 0, 0, 461324, 0, 0, 330240, 0, 1245199, 1048591
};
public static readonly short[] PhonemeLengthTable = new short[80]
{
0, 4626, 4626, 4626, 2056, 2824, 2312, 2824, 3592, 3851,
2822, 4108, 3082, 1541, 1541, 3595, 3082, 3594, 3082, 2825,
2056, 2055, 2825, 2567, 2310, 2056, 2054, 2055, 2055, 2055,
770, 1285, 514, 514, 514, 514, 514, 514, 1542, 1542,
2055, 1542, 1542, 514, 2312, 1027, 513, 286, 3597, 3852,
3852, 3852, 3598, 3593, 2054, 513, 514, 1797, 513, 257,
1798, 513, 514, 1798, 513, 514, 2056, 514, 514, 1540,
514, 514, 1798, 513, 1028, 1798, 257, 1028, 1479, 1535
};
public static readonly short[] Sinus = new short[256]
{
0, 3, 6, 9, 12, 16, 19, 22, 25, 28,
31, 34, 37, 40, 43, 46, 49, 51, 54, 57,
60, 63, 65, 68, 71, 73, 76, 78, 81, 83,
85, 88, 90, 92, 94, 96, 98, 100, 102, 104,
106, 107, 109, 111, 112, 113, 115, 116, 117, 118,
120, 121, 122, 122, 123, 124, 125, 125, 126, 126,
126, 127, 127, 127, 127, 127, 127, 127, 126, 126,
126, 125, 125, 124, 123, 122, 122, 121, 120, 118,
117, 116, 115, 113, 112, 111, 109, 107, 106, 104,
102, 100, 98, 96, 94, 92, 90, 88, 85, 83,
81, 78, 76, 73, 71, 68, 65, 63, 60, 57,
54, 51, 49, 46, 43, 40, 37, 34, 31, 28,
25, 22, 19, 16, 12, 9, 6, 3, 0, -3,
-6, -9, -12, -16, -19, -22, -25, -28, -31, -34,
-37, -40, -43, -46, -49, -51, -54, -57, -60, -63,
-65, -68, -71, -73, -76, -78, -81, -83, -85, -88,
-90, -92, -94, -96, -98, -100, -102, -104, -106, -107,
-109, -111, -112, -113, -115, -116, -117, -118, -120, -121,
-122, -122, -123, -124, -125, -125, -126, -126, -126, -127,
-127, -127, -127, -127, -127, -127, -126, -126, -126, -125,
-125, -124, -123, -122, -122, -121, -120, -118, -117, -116,
-115, -113, -112, -111, -109, -107, -106, -104, -102, -100,
-98, -96, -94, -92, -90, -88, -85, -83, -81, -78,
-76, -73, -71, -68, -65, -63, -60, -57, -54, -51,
-49, -46, -43, -40, -37, -34, -31, -28, -25, -22,
-19, -16, -12, -9, -6, -3
};
public static readonly int[,] TimeTable = new int[5, 5]
{
{ 162, 167, 167, 127, 128 },
{ 226, 60, 60, 0, 0 },
{ 225, 60, 59, 0, 0 },
{ 200, 0, 0, 54, 55 },
{ 199, 0, 0, 54, 54 }
};
public static readonly int[] BlendRank = new int[80]
{
0, 31, 31, 31, 31, 2, 2, 2, 2, 2,
2, 2, 2, 2, 5, 5, 2, 10, 2, 8,
5, 5, 11, 10, 9, 8, 8, 160, 8, 8,
23, 31, 18, 18, 18, 18, 30, 30, 20, 20,
20, 20, 23, 23, 26, 26, 29, 29, 2, 2,
2, 2, 2, 2, 26, 29, 27, 26, 29, 27,
26, 29, 27, 26, 29, 27, 23, 29, 23, 23,
29, 23, 23, 29, 23, 23, 29, 23, 23, 23
};
public static readonly int[] InBlend = new int[80]
{
0, 2, 2, 2, 2, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 3, 3,
4, 4, 3, 3, 3, 3, 3, 1, 2, 3,
2, 1, 3, 3, 3, 3, 1, 1, 3, 3,
3, 2, 2, 3, 2, 3, 0, 0, 5, 5,
5, 5, 4, 4, 2, 0, 2, 2, 0, 3,
2, 0, 4, 2, 0, 3, 2, 0, 2, 2,
0, 2, 3, 0, 3, 3, 0, 3, 176, 160
};
public static readonly int[] OutBlend = new int[80]
{
0, 2, 2, 2, 2, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 3, 2,
4, 4, 2, 2, 2, 2, 2, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2, 1, 0, 1, 0, 1, 0, 5, 5, 5,
5, 5, 4, 4, 2, 0, 1, 2, 0, 1,
2, 0, 1, 2, 0, 1, 2, 0, 2, 2,
0, 1, 3, 0, 2, 3, 0, 2, 160, 160
};
public static readonly int[] Tab1 = new int[108]
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 2, 2, 2, 2, 2, 130,
0, 0, 2, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
2, 2, 2, 2, 2, 192, 168, 176, 172, 192,
160, 184, 160, 192, 188, 160, 172, 168, 172, 192,
160, 160, 172, 180, 164, 192, 168, 168, 176, 192,
188, 0, 0, 0, 2, 0, 32, 32, 155, 32,
192, 185, 32, 205, 163, 76, 138, 142
};
public static readonly int[] Tab2 = new int[26]
{
0, 149, 247, 162, 57, 197, 6, 126, 199, 38,
55, 78, 145, 241, 85, 161, 254, 36, 69, 45,
167, 54, 83, 46, 71, 218
};
public static readonly int[] Tab3 = new int[26]
{
125, 126, 126, 127, 128, 129, 130, 130, 130, 132,
132, 132, 132, 132, 133, 135, 135, 136, 136, 137,
138, 139, 139, 140, 140, 140
};
public static readonly int[] Tab4 = new int[11]
{
0, 0, 224, 230, 236, 243, 249, 0, 6, 12,
6
};
public static readonly int[] Tab5 = new int[5] { 24, 26, 23, 23, 23 };
public static readonly int[] AmplitudeRescale = new int[17]
{
0, 1, 2, 2, 2, 3, 3, 4, 4, 5,
6, 8, 9, 11, 13, 15, 0
};
public static readonly int[] SampledConsonantFlags = new int[80]
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 241, 226, 211, 187, 124, 149, 1, 2,
3, 3, 0, 114, 0, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 27, 0, 0,
25, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
public static readonly int[] SampleTable = new int[1280]
{
56, 132, 107, 25, 198, 99, 24, 134, 115, 152,
198, 177, 28, 202, 49, 140, 199, 49, 136, 194,
48, 152, 70, 49, 24, 198, 53, 12, 202, 49,
12, 198, 33, 16, 36, 105, 18, 194, 49, 20,
196, 113, 8, 74, 34, 73, 171, 106, 168, 172,
73, 81, 50, 213, 82, 136, 147, 108, 148, 34,
21, 84, 210, 37, 150, 212, 80, 165, 70, 33,
8, 133, 107, 24, 196, 99, 16, 206, 107, 24,
140, 113, 25, 140, 99, 53, 12, 198, 51, 153,
204, 108, 181, 78, 162, 153, 70, 33, 40, 130,
149, 46, 227, 48, 156, 197, 48, 156, 162, 177,
156, 103, 49, 136, 102, 89, 44, 83, 24, 132,
103, 80, 202, 227, 10, 172, 171, 48, 172, 98,
48, 140, 99, 16, 148, 98, 177, 140, 130, 40,
150, 51, 152, 214, 181, 76, 98, 41, 165, 74,
181, 156, 198, 49, 20, 214, 56, 156, 75, 180,
134, 101, 24, 174, 103, 28, 166, 99, 25, 150,
35, 25, 132, 19, 8, 166, 82, 172, 202, 34,
137, 110, 171, 25, 140, 98, 52, 196, 98, 25,
134, 99, 24, 196, 35, 88, 214, 163, 80, 66,
84, 74, 173, 74, 37, 17, 107, 100, 137, 74,
99, 57, 138, 35, 49, 42, 234, 162, 169, 68,
197, 18, 205, 66, 52, 140, 98, 24, 140, 99,
17, 72, 102, 49, 157, 68, 51, 29, 70, 49,
156, 198, 177, 12, 205, 50, 136, 196, 115, 24,
134, 115, 8, 214, 99, 88, 7, 129, 224, 240,
60, 7, 135, 144, 60, 124, 15, 199, 192, 192,
240, 124, 30, 7, 128, 128, 0, 28, 120, 112,
241, 199, 31, 192, 12, 254, 28, 31, 31, 14,
10, 122, 192, 113, 242, 131, 143, 3, 15, 15,
12, 0, 121, 248, 97, 224, 67, 15, 131, 231,
24, 249, 193, 19, 218, 233, 99, 143, 15, 131,
131, 135, 195, 31, 60, 112, 240, 225, 225, 227,
135, 184, 113, 14, 32, 227, 141, 72, 120, 28,
147, 135, 48, 225, 193, 193, 228, 120, 33, 131,
131, 195, 135, 6, 57, 229, 195, 135, 7, 14,
28, 28, 112, 244, 113, 156, 96, 54, 50, 195,
30, 60, 243, 143, 14, 60, 112, 227, 199, 143,
15, 15, 14, 60, 120, 240, 227, 135, 6, 240,
227, 7, 193, 153, 135, 15, 24, 120, 112, 112,
252, 243, 16, 177, 140, 140, 49, 124, 112, 225,
134, 60, 100, 108, 176, 225, 227, 15, 35, 143,
15, 30, 62, 56, 60, 56, 123, 143, 7, 14,
60, 244, 23, 30, 60, 120, 242, 158, 114, 73,
227, 37, 54, 56, 88, 57, 226, 222, 60, 120,
120, 225, 199, 97, 225, 225, 176, 240, 240, 195,
199, 14, 56, 192, 240, 206, 115, 115, 24, 52,
176, 225, 199, 142, 28, 60, 248, 56, 240, 225,
193, 139, 134, 143, 28, 120, 112, 240, 120, 172,
177, 143, 57, 49, 219, 56, 97, 195, 14, 14,
56, 120, 115, 23, 30, 57, 30, 56, 100, 225,
241, 193, 78, 15, 64, 162, 2, 197, 143, 129,
161, 252, 18, 8, 100, 224, 60, 34, 224, 69,
7, 142, 12, 50, 144, 240, 31, 32, 73, 224,
248, 12, 96, 240, 23, 26, 65, 170, 164, 208,
141, 18, 130, 30, 30, 3, 248, 62, 3, 12,
115, 128, 112, 68, 38, 3, 36, 225, 62, 4,
78, 4, 28, 193, 9, 204, 158, 144, 33, 7,
144, 67, 100, 192, 15, 198, 144, 156, 193, 91,
3, 226, 29, 129, 224, 94, 29, 3, 132, 184,
44, 15, 128, 177, 131, 224, 48, 65, 30, 67,
137, 131, 80, 252, 36, 46, 19, 131, 241, 124,
76, 44, 201, 13, 131, 176, 181, 130, 228, 232,
6, 156, 7, 160, 153, 29, 7, 62, 130, 143,
112, 48, 116, 64, 202, 16, 228, 232, 15, 146,
20, 63, 6, 248, 132, 136, 67, 129, 10, 52,
57, 65, 198, 227, 28, 71, 3, 176, 184, 19,
10, 194, 100, 248, 24, 249, 96, 179, 192, 101,
32, 96, 166, 140, 195, 129, 32, 48, 38, 30,
28, 56, 211, 1, 176, 38, 64, 244, 11, 195,
66, 31, 133, 50, 38, 96, 64, 201, 203, 1,
236, 17, 40, 64, 250, 4, 52, 224, 112, 76,
140, 29, 7, 105, 3, 22, 200, 4, 35, 232,
198, 154, 11, 26, 3, 224, 118, 6, 5, 207,
30, 188, 88, 49, 113, 102, 0, 248, 63, 4,
252, 12, 116, 39, 138, 128, 113, 194, 58, 38,
6, 192, 31, 5, 15, 152, 64, 174, 1, 127,
192, 7, 255, 0, 14, 254, 0, 3, 223, 128,
3, 239, 128, 27, 241, 194, 0, 231, 224, 24,
252, 224, 33, 252, 128, 60, 252, 64, 14, 126,
0, 63, 62, 0, 15, 254, 0, 31, 255, 0,
62, 240, 7, 252, 0, 126, 16, 63, 255, 0,
63, 56, 14, 124, 1, 135, 12, 252, 199, 0,
62, 4, 15, 62, 31, 15, 15, 31, 15, 2,
131, 135, 207, 3, 135, 15, 63, 192, 7, 158,
96, 63, 192, 3, 254, 0, 63, 224, 119, 225,
192, 254, 224, 195, 224, 1, 223, 248, 3, 7,
0, 126, 112, 0, 124, 56, 24, 254, 12, 30,
120, 28, 124, 62, 14, 31, 30, 30, 62, 0,
127, 131, 7, 219, 135, 131, 7, 199, 7, 16,
113, 255, 0, 63, 226, 1, 224, 193, 195, 225,
0, 127, 192, 5, 240, 32, 248, 240, 112, 254,
120, 121, 248, 2, 63, 12, 143, 3, 15, 159,
224, 193, 199, 135, 3, 195, 195, 176, 225, 225,
193, 227, 224, 113, 240, 0, 252, 112, 124, 12,
62, 56, 14, 28, 112, 195, 199, 3, 129, 193,
199, 231, 0, 15, 199, 135, 25, 9, 239, 196,
51, 224, 193, 252, 248, 112, 240, 120, 248, 240,
97, 199, 0, 31, 248, 1, 124, 248, 240, 120,
112, 60, 124, 206, 14, 33, 131, 207, 8, 7,
143, 8, 193, 135, 143, 128, 199, 227, 0, 7,
248, 224, 239, 0, 57, 247, 128, 14, 248, 225,
227, 248, 33, 159, 192, 255, 3, 248, 7, 192,
31, 248, 196, 4, 252, 196, 193, 188, 135, 240,
15, 192, 127, 5, 224, 37, 236, 192, 62, 132,
71, 240, 142, 3, 248, 3, 251, 192, 25, 248,
7, 156, 12, 23, 248, 7, 224, 31, 161, 252,
15, 252, 1, 240, 63, 0, 254, 3, 240, 31,
0, 253, 0, 255, 136, 13, 249, 1, 255, 0,
112, 7, 192, 62, 66, 243, 13, 196, 127, 128,
252, 7, 240, 94, 192, 63, 0, 120, 63, 129,
255, 1, 248, 1, 195, 232, 12, 228, 100, 8,
228, 15, 240, 7, 240, 194, 31, 0, 127, 192,
111, 128, 126, 3, 248, 7, 240, 63, 192, 120,
15, 130, 7, 254, 34, 119, 112, 2, 118, 3,
254, 0, 254, 103, 0, 124, 199, 241, 142, 198,
59, 224, 63, 132, 243, 25, 216, 3, 153, 252,
9, 184, 15, 248, 0, 157, 36, 97, 249, 13,
0, 253, 3, 240, 31, 144, 63, 1, 248, 31,
208, 15, 248, 55, 1, 248, 7, 240, 15, 192,
63, 0, 254, 3, 248, 15, 192, 63, 0, 250,
3, 240, 15, 128, 255, 1, 184, 7, 240, 1,
252, 1, 188, 128, 19, 30, 0, 127, 225, 64,
127, 160, 127, 176, 0, 63, 192, 31, 192, 56,
15, 240, 31, 128, 255, 1, 252, 3, 241, 126,
1, 254, 1, 240, 255, 0, 127, 192, 29, 7,
240, 15, 192, 126, 6, 224, 7, 224, 15, 248,
6, 193, 254, 1, 252, 3, 224, 15, 0, 252
};
public static int FullMatch(char sign1, char sign2)
{
string sum = sign1.ToString() + sign2;
return PhonemeNameTable.FindIndex((string value) => value == sum && value[1] != '*');
}
public static int WildMatch(char sign)
{
return PhonemeNameTable.IndexOf(sign + "*");
}
public static bool HasFlag(int phoneme, ushort flag)
{
return (PhonemeFlagsTable[phoneme] & flag) != 0;
}
}
public class Legacy
{
public Sam Sam;
private int A;
private int X;
private int Y;
private int[] temp;
public int[] StressOutput = new int[256];
public int[] LengthOutput = new int[256];
public int[] IndexOutput = new int[256];
private int[] pitches = new int[256];
private int[] sampledConsonantFlag = new int[256];
private int[,] frequency = new int[3, 256];
private int[,] amplitude = new int[3, 256];
private int mem39;
private int mem44;
private int mem47;
private int mem49;
private int mem50;
private int mem51;
private int mem53;
private int mem56;
public Legacy(Sam sam)
{
Sam = sam;
}
public static void Inc(ref int value)
{
value = ++value & 0xFF;
}
public static void Dec(ref int value)
{
value = --value & 0xFF;
}
public bool Text2Phonemes(ref int[] input)
{
int value = 255;
int value2 = 255;
int num = 0;
temp = new int[256];
temp[0] = 32;
X = 1;
Y = 0;
do
{
A = input[Y] & 0x7F;
if (A >= 112)
{
A &= 95;
}
else if (A >= 96)
{
A &= 79;
}
temp[X] = A;
Inc(ref X);
Inc(ref Y);
}
while (Y != 255);
A = 255;
X = 255;
temp[X] = 27;
while (true)
{
Inc(ref value2);
X = value2;
if (X < temp.Length)
{
num = (A = temp[X]);
if (A == 91)
{
Inc(ref value);
X = value;
A = 155;
input[X] = 155;
Inc(ref X);
int[] array = new int[X];
Array.Copy(input, array, X);
input = array;
return true;
}
if (A == 46)
{
Inc(ref X);
Y = temp[X];
A = Constants.Tab1[Y] & 1;
if (A == 0)
{
Inc(ref value);
X = value;
input[X] = 46;
continue;
}
}
}
A = num;
Y = A;
A = Constants.Tab1[A];
int a = A;
int num2;
if (((uint)A & 2u) != 0)
{
num2 = 37541;
}
else
{
A = a;
if (A == 0)
{
A = 32;
if (X >= temp.Length)
{
return true;
}
temp[X] = 32;
Inc(ref value);
X = value;
if (X <= 120)
{
input[X] = A;
continue;
}
input[X] = 155;
A = value2;
return true;
}
A = a & 0x80;
if (A == 0)
{
break;
}
X = num - 65;
num2 = Constants.Tab2[X] | (Constants.Tab3[X] << 8);
}
int x;
while (true)
{
IL_0377:
Y = 0;
do
{
num2++;
A = GetRuleByte(num2, Y);
}
while ((A & 0x80) == 0);
Inc(ref Y);
while (true)
{
A = GetRuleByte(num2, Y);
if (A == 40)
{
break;
}
Inc(ref Y);
}
int value3 = Y;
do
{
Inc(ref Y);
A = GetRuleByte(num2, Y);
}
while (A != 41);
int y = Y;
do
{
Inc(ref Y);
A = GetRuleByte(num2, Y);
A &= 127;
}
while (A != 61);
num = Y;
X = value2;
x = X;
Y = value3;
Inc(ref Y);
while (true)
{
a = temp[X];
A = GetRuleByte(num2, Y);
if (A != a)
{
break;
}
Inc(ref Y);
if (Y == y)
{
goto IL_051b;
}
Inc(ref X);
x = X;
}
continue;
IL_051b:
A = value2;
int num3 = value2;
while (true)
{
Dec(ref value3);
Y = value3;
A = GetRuleByte(num2, Y);
a = A;
if (((uint)A & 0x80u) != 0)
{
break;
}
X = A & 0x7F;
A = Constants.Tab1[X] & 0x80;
if (A != 0)
{
X = num3 - 1;
A = temp[X];
if (A != a)
{
goto IL_0377;
}
num3 = X;
continue;
}
A = a;
if (A != 32)
{
if (A != 35)
{
if (A != 46)
{
if (A != 38)
{
if (A != 64)
{
if (A != 94)
{
if (A != 43)
{
if (A != 58)
{
return false;
}
while (true)
{
UnknownCode1(num3);
A &= 32;
if (A == 0)
{
break;
}
num3 = X;
}
continue;
}
X = num3;
Dec(ref X);
A = temp[X];
if (A != 69 && A != 73 && A != 89)
{
goto IL_0377;
}
}
else
{
UnknownCode1(num3);
A &= 32;
if (A == 0)
{
goto IL_0377;
}
}
num3 = X;
continue;
}
UnknownCode1(num3);
A &= 4;
if (A == 0)
{
A = temp[X];
if (A != 72 || (A != 84 && A != 67 && A != 83))
{
goto IL_0377;
}
num3 = X;
continue;
}
}
else
{
UnknownCode1(num3);
A &= 16;
if (A == 0)
{
A = temp[X];
if (A != 72)
{
goto IL_0377;
}
Dec(ref X);
A = temp[X];
if (A != 67 && A != 83)
{
goto IL_0377;
}
}
}
}
else
{
UnknownCode1(num3);
A &= 8;
if (A == 0)
{
goto IL_0377;
}
}
num3 = X;
continue;
}
UnknownCode1(num3);
A &= 64;
if (A == 0)
{
goto IL_0377;
}
}
else
{
UnknownCode1(num3);
A &= 128;
if (A != 0)
{
goto IL_0377;
}
}
num3 = X;
}
A = x;
int num4 = A;
while (true)
{
Y = y + 1;
if (Y == num)
{
break;
}
y = Y;
A = GetRuleByte(num2, Y);
a = A;
X = A;
A = Constants.Tab1[X] & 0x80;
if (A != 0)
{
X = num4 + 1;
A = temp[X];
if (A != a)
{
goto IL_0377;
}
num4 = X;
continue;
}
A = a;
if (A != 32)
{
if (A != 35)
{
if (A != 46)
{
if (A != 38)
{
if (A != 64)
{
if (A != 94)
{
if (A != 43)
{
if (A != 58)
{
if (A == 37 || A == 37)
{
X = num4 + 1;
A = temp[X];
if (A == 69)
{
Inc(ref X);
Y = temp[X];
Dec(ref X);
A = Constants.Tab1[Y] & 0x80;
if (A != 0)
{
Inc(ref X);
A = temp[X];
if (A != 82 && A != 83 && A != 68)
{
if (A == 76)
{
Inc(ref X);
A = temp[X];
if (A != 89)
{
goto IL_0377;
}
}
else
{
if (A != 70)
{
goto IL_0377;
}
Inc(ref X);
A = temp[X];
if (A != 85)
{
goto IL_0377;
}
Inc(ref X);
A = temp[X];
if (A != 76)
{
goto IL_0377;
}
}
}
}
}
else
{
if (A != 73)
{
goto IL_0377;
}
Inc(ref X);
A = temp[X];
if (A != 78)
{
goto IL_0377;
}
Inc(ref X);
A = temp[X];
if (A != 71)
{
goto IL_0377;
}
}
num4 = X;
continue;
}
return false;
}
while (true)
{
UnknownCode2(num4);
A &= 32;
if (A == 0)
{
break;
}
num4 = X;
}
continue;
}
X = num4;
Inc(ref X);
A = temp[X];
if (A != 69 && A != 73 && A != 89)
{
goto IL_0377;
}
}
else
{
UnknownCode2(num4);
A &= 32;
if (A == 0)
{
goto IL_0377;
}
}
num4 = X;
continue;
}
UnknownCode2(num4);
A &= 4;
if (A == 0)
{
A = temp[X];
if (A != 72 || (A != 84 && A != 67 && A != 83))
{
goto IL_0377;
}
num4 = X;
continue;
}
}
else
{
UnknownCode2(num4);
A &= 16;
if (A == 0)
{
A = temp[X];
if (A != 72)
{
goto IL_0377;
}
Inc(ref X);
A = temp[X];
if (A != 67 && A != 83)
{
goto IL_0377;
}
}
}
}
else
{
UnknownCode2(num4);
A &= 8;
if (A == 0)
{
goto IL_0377;
}
}
num4 = X;
continue;
}
UnknownCode2(num4);
A &= 64;
if (A == 0)
{
goto IL_0377;
}
}
else
{
UnknownCode2(num4);
A &= 128;
if (A != 0)
{
goto IL_0377;
}
}
num4 = X;
}
break;
}
Y = num;
value2 = x;
while (true)
{
A = GetRuleByte(num2, Y);
a = A;
A &= 127;
if (A != 61)
{
Inc(ref value);
X = value;
input[X] = A;
}
if (((uint)a & 0x80u) != 0)
{
break;
}
Inc(ref Y);
}
}
return false;
static int GetRuleByte(int mem62, int Y)
{
return (mem62 >= 37541) ? Constants.RulesSet2[mem62 - 37541 + Y] : Constants.RulesSet1[mem62 - 32000 + Y];
}
void UnknownCode1(int mem59)
{
A = Constants.Tab1[Y = temp[X = mem59 - 1]];
}
void UnknownCode2(int mem58)
{
X = mem58;
Inc(ref X);
A = Constants.Tab1[Y = temp[X]];
}
}
private void AddInflection(int mem48, int phase1)
{
int num = (mem49 = (A = X));
A -= 30;
if (num <= 30)
{
A = 0;
}
X = A;
while ((A = pitches[X]) == 127)
{
Inc(ref X);
}
while (true)
{
pitches[X] = (phase1 = (A + mem48) & 0xFF);
do
{
Inc(ref X);
if (X == mem49)
{
return;
}
}
while (pitches[X] == 255);
A = phase1;
}
}
private void RenderSample(ref int mem66)
{
int num = 0;
mem49 = Y;
A = mem39 & 7;
mem53 = Constants.Tab5[mem47 = (mem56 = (X = A - 1))];
A = mem39 & 0xF8;
if (A == 0)
{
A = pitches[mem49] >> 4;
int value = A ^ 0xFF;
Y = mem66;
do
{
mem56 = 8;
A = Constants.SampleTable[mem47 * 256 + Y];
do
{
num = A;
A <<= 1;
if (((uint)num & 0x80u) != 0)
{
Sam.Buffer.Write(3, 160);
}
else
{
Sam.Buffer.Write(4, 96);
}
Dec(ref mem56);
}
while (mem56 != 0);
Inc(ref Y);
Inc(ref value);
}
while (value != 0);
A = 1;
mem44 = 1;
mem66 = Y;
Y = mem49;
return;
}
Y = A ^ 0xFF;
do
{
mem56 = 8;
A = Constants.SampleTable[mem47 * 256 + Y];
do
{
num = A;
A <<= 1;
if ((num & 0x80) == 0)
{
X = mem53;
Sam.Buffer.Write(1, (X & 0xF) * 16);
if (X != 0)
{
goto IL_0136;
}
}
Sam.Buffer.Write(2, 80);
goto IL_0136;
IL_0136:
X = 0;
Dec(ref mem56);
}
while (mem56 != 0);
Inc(ref Y);
}
while (Y != 0);
mem44 = 1;
Y = mem49;
}
public void Render()
{
int num = 0;
int mem = 0;
if (IndexOutput[0] == 255)
{
return;
}
A = (X = (mem44 = 0));
int num2;
int value2;
do
{
mem56 = (A = IndexOutput[Y = mem44]);
if (A == 255)
{
break;
}
if (A == 1)
{
AddInflection(num2 = (A = 1), num);
}
if (A == 2)
{
AddInflection(num2 = 255, num);
}
num = Constants.Tab4[StressOutput[Y] + 1];
value2 = LengthOutput[Y];
Y = mem56;
do
{
pitches[X] = Sam.Pitch + num;
sampledConsonantFlag[X] = Constants.SampledConsonantFlags[Y];
frequency[0, X] = Constants.PhonemeFrequencyTable[Y] & 0xFF;
frequency[1, X] = (Constants.PhonemeFrequencyTable[Y] >> 8) & 0xFF;
frequency[2, X] = (Constants.PhonemeFrequencyTable[Y] >> 16) & 0xFF;
amplitude[0, X] = Constants.PhonemeAmplitudesTable[Y] & 0xFF;
amplitude[1, X] = (Constants.PhonemeAmplitudesTable[Y] >> 8) & 0xFF;
amplitude[2, X] = (Constants.PhonemeAmplitudesTable[Y] >> 16) & 0xFF;
Inc(ref X);
Dec(ref value2);
}
while (value2 != 0);
Inc(ref mem44);
}
while (mem44 != 0);
X = (mem44 = (mem49 = 0));
int num3;
int a;
int num4;
while (true)
{
Y = IndexOutput[X];
A = IndexOutput[X + 1];
if (A == 255)
{
break;
}
mem56 = Constants.BlendRank[X = A];
A = Constants.BlendRank[Y];
if (A == mem56)
{
num = Constants.OutBlend[Y];
value2 = Constants.OutBlend[X];
}
else if (A < mem56)
{
num = Constants.InBlend[X];
value2 = Constants.OutBlend[X];
}
else
{
num = Constants.OutBlend[Y];
value2 = Constants.InBlend[Y];
}
Y = mem44;
mem49 = (A = mem49 + LengthOutput[mem44]);
A += value2;
a = A;
mem47 = 168;
num3 = mem49 - num;
num4 = (A = num + value2);
X = A - 2;
if ((X & 0x80) == 0)
{
do
{
int num5 = num4;
if (mem47 == 168)
{
int num6 = LengthOutput[mem44] >> 1;
int num7 = LengthOutput[mem44 + 1] >> 1;
num5 = num6 + num7;
num7 += mem49;
num6 = mem49 - num6;
A = Read(mem47, num7);
Y = num6;
mem53 = A - Read(mem47, num6);
}
else
{
A = Read(mem47, a);
Y = num3;
mem53 = A - Read(mem47, num3);
}
mem50 = mem53 & 0x80;
int num8 = Mathf.Abs(mem53);
mem51 = num8 % num5;
mem53 /= num5;
X = num5;
Y = num3;
mem56 = 0;
while (true)
{
num2 = (A = Read(mem47, Y) + mem53);
Inc(ref Y);
Dec(ref X);
if (X == 0)
{
break;
}
mem56 += mem51;
if (mem56 >= num5)
{
mem56 -= num5;
if ((mem50 & 0x80) == 0)
{
if (num2 != 0)
{
Inc(ref num2);
}
}
else
{
Dec(ref num2);
}
}
Write(mem47, Y, num2);
}
Inc(ref mem47);
}
while (mem47 != 175);
}
Inc(ref mem44);
X = mem44;
}
num2 = mem49 + LengthOutput[mem44];
for (int i = 0; i < 256; i++)
{
pitches[i] -= frequency[0, i] >> 1;
}
num = (value2 = (num3 = (mem49 = 0)));
a = 72;
for (int num9 = 255; num9 >= 0; num9--)
{
amplitude[0, num9] = Constants.AmplitudeRescale[amplitude[0, num9]];
amplitude[1, num9] = Constants.AmplitudeRescale[amplitude[1, num9]];
amplitude[2, num9] = Constants.AmplitudeRescale[amplitude[2, num9]];
}
Y = 0;
mem44 = (A = (X = pitches[0]));
num4 = A - (A >> 2);
bool flag = false;
while (true)
{
mem39 = (A = sampledConsonantFlag[Y]);
A &= 248;
if (A != 0)
{
RenderSample(ref mem);
Y += 2;
num2 -= 2;
}
else
{
int[] array = new int[5];
int num10 = num * 256;
int num11 = value2 * 256;
int num12 = num3 * 256;
for (int j = 0; j < 5; j++)
{
int num13 = Constants.Sinus[0xFF & (num10 >> 8)];
int num14 = Constants.Sinus[0xFF & (num11 >> 8)];
int num15 = ((((num12 >> 8) & 0xFF) <= 127) ? 144 : 112);
int num16 = num13 * (amplitude[0, Y] & 0xF);
int num17 = num14 * (amplitude[1, Y] & 0xF);
int num18 = num15 * (amplitude[2, Y] & 0xF);
array[j] = ((num16 + num17 + num18) / 32 + 128) & 0xFF;
num10 += frequency[0, Y] * 64;
num11 += frequency[1, Y] * 64;
num12 += frequency[2, Y] * 64;
}
Sam.Buffer.WriteArray(0, array);
Dec(ref a);
if (a != 0)
{
goto IL_0953;
}
Inc(ref Y);
Dec(ref num2);
}
if (num2 == 0)
{
break;
}
a = Sam.Speed;
goto IL_0953;
IL_0953:
Dec(ref mem44);
while (true)
{
if (mem44 == 0 || flag)
{
flag = false;
mem44 = (A = pitches[Y]);
num4 = (A -= A >> 2);
num = (value2 = (num3 = 0));
break;
}
Dec(ref num4);
if (num4 != 0 || mem39 == 0)
{
num = (num + frequency[0, Y]) & 0xFF;
value2 = (value2 + frequency[1, Y]) & 0xFF;
num3 = (num3 + frequency[2, Y]) & 0xFF;
break;
}
RenderSample(ref mem);
flag = true;
}
}
int Read(int type, int index)
{
if (1 == 0)
{
}
int result = type switch
{
168 => pitches[index],
169 => frequency[0, index],
170 => frequency[1, index],
171 => frequency[2, index],
172 => amplitude[0, index],
173 => amplitude[1, index],
174 => amplitude[2, index],
_ => 0,
};
if (1 == 0)
{
}
return result;
}
void Write(int type, int index, int value)
{
switch (type)
{
case 168:
pitches[Y] = value;
break;
case 169:
frequency[0, Y] = value;
break;
case 170:
frequency[1, Y] = value;
break;
case 171:
frequency[2, Y] = value;
break;
case 172:
amplitude[0, Y] = value;
break;
case 173:
amplitude[1, Y] = value;
break;
case 174:
amplitude[2, Y] = value;
break;
}
}
}
}
public class Sam
{
private int[] input = new int[256];
private int[] phonemeStress = new int[256];
private int[] phonemeLength = new int[256];
private int[] phonemeIndex = new int[256];
public int Speed;
public int Pitch;
public int Mouth;
public int Throat;
public Buffer Buffer;
public Legacy Legacy;
public Sam(int speed = 64, int pitch = 64, int mouth = 128, int throat = 128)
{
Speed = speed;
Pitch = pitch;
Mouth = mouth;
Throat = throat;
Legacy = new Legacy(this);
}
public string Cyrillic2Latin(string text)
{
StringBuilder stringBuilder = new StringBuilder();
char c = ' ';
foreach (char c2 in text)
{
if (c2 == 'Е' && (c == ' ' || c == 'Ъ' || c == 'Ь'))
{
stringBuilder.Append("YE");
}
else if (Constants.ISO9.ContainsKey(c2))
{
stringBuilder.Append(Constants.ISO9[c2]);
}
else
{
stringBuilder.Append(c2);
}
c = c2;
}
return stringBuilder.ToString();
}
public void Text2Phonemes(string text, out int[] output)
{
byte[] bytes = Encoding.UTF8.GetBytes(Cyrillic2Latin(text.ToUpper()));
output = new int[256];
for (int i = 0; i < bytes.Length; i++)
{
output[i] = bytes[i];
}
Legacy.Text2Phonemes(ref output);
}
public void SetInput(int[] input)
{
int num = Mathf.Min(input.Length, 254);
for (int i = 0; i < num; i++)
{
this.input[i] = input[i];
}
this.input[num] = 255;
this.input[255] = 255;
}
public void Insert(int pos, int phoneme, int length = 0, int stress = -1)
{
for (int num = 253; num >= pos; num--)
{
phonemeIndex[num + 1] = phonemeIndex[num];
phonemeLength[num + 1] = phonemeLength[num];
phonemeStress[num + 1] = phonemeStress[num];
}
phonemeIndex[pos] = phoneme;
phonemeLength[pos] = length;
phonemeStress[pos] = ((stress == -1) ? phonemeStress[pos - 1] : stress);
}
public Buffer GetBuffer()
{
for (int i = 0; i < 256; i++)
{
phonemeStress[i] = (phonemeLength[i] = 0);
}
if (!ParsePhonemes())
{
return null;
}
RewritePhonemes();
SetPhonemeLength();
InsertPauses();
PrepareOutput();
return Buffer;
}
public bool ParsePhonemes()
{
int num = 0;
for (int i = 0; i < input.Length; i++)
{
char c = (char)input[i];
char sign = (char)((i == input.Length - 1) ? 32u : ((uint)input[i + 1]));
if (c == '\u009b')
{
phonemeIndex[num++] = 255;
return true;
}
int num2 = Constants.FullMatch(c, sign);
if (num2 != -1)
{
i++;
phonemeIndex[num++] = num2;
continue;
}
num2 = Constants.WildMatch(c);
if (num2 != -1)
{
phonemeIndex[num++] = num2;
continue;
}
num2 = Constants.StressCharTable.IndexOf(c);
if (num2 != -1)
{
phonemeStress[num - 1] = num2 + 1;
continue;
}
return false;
}
phonemeIndex[255] = 255;
return true;
}
public void RewritePhonemes()
{
int num = 0;
int num2;
while ((num2 = phonemeIndex[++num]) != 255)
{
if (num2 == 0)
{
continue;
}
if (Constants.HasFlag(num2, 16))
{
Insert(num + 1, Constants.HasFlag(num2, 32) ? 21 : 20);
HandleUW_CH_J(num2, num);
continue;
}
switch (num2)
{
case 78:
Change2AX(num, 24);
continue;
case 79:
Change2AX(num, 27);
continue;
case 80:
Change2AX(num, 28);
continue;
}
if (Constants.HasFlag(num2, 128) && phonemeStress[num] != 0 && num <= 253)
{
if (phonemeIndex[num + 1] == 0)
{
num2 = phonemeIndex[num + 2];
if (num2 != 0 && Constants.HasFlag(num2, 128) && phonemeStress[num + 2] != 0)
{
Insert(num + 2, 31, 0, 0);
}
}
}
else if (phonemeIndex[num - 1] == 23)
{
HandleTR_DR_R(phonemeIndex[num - 1], num);
}
else if (Constants.HasFlag(num2, 1))
{
if (phonemeIndex[num - 1] == 32)
{
phonemeIndex[num] = num2 - 12;
}
}
else
{
HandleUW_CH_J(num2, num);
}
}
void Change2AX(int pos, int suffix)
{
phonemeIndex[pos] = 13;
Insert(pos + 1, suffix);
}
void HandleTR_DR_R(int phoneme, int pos)
{
switch (phoneme)
{
case 57:
phonemeIndex[pos - 1] = 44;
break;
case 69:
phonemeIndex[pos - 1] = 42;
break;
default:
if (Constants.HasFlag(phoneme, 128))
{
phonemeIndex[pos] = 18;
}
break;
}
}
void HandleUW_CH_J(int phoneme, int pos)
{
switch (phoneme)
{
case 42:
Insert(pos + 1, 43);
break;
case 44:
Insert(pos + 1, 45);
break;
case 53:
if (Constants.HasFlag(phonemeIndex[pos - 1], 1024))
{
phonemeIndex[pos] = 16;
}
break;
}
}
}
public void SetPhonemeLength()
{
int num = 0;
int num2;
while ((num2 = phonemeIndex[++num]) != 255)
{
int num3 = phonemeStress[num];
if (num3 == 0 || ((uint)num3 & 0x80u) != 0)
{
phonemeLength[num] = Constants.PhonemeLengthTable[num2] & 0xFF;
}
else
{
phonemeLength[num] = Constants.PhonemeLengthTable[num2] >> 8;
}
}
}
public void InsertPauses()
{
int num = 0;
int num2;
while ((num2 = phonemeIndex[++num]) != 255)
{
if (num2 != 254 && Constants.HasFlag(num2, 256))
{
Insert(++num, 254);
}
}
}
public void PrepareOutput()
{
Buffer = new Buffer();
int num = 0;
int num2 = 0;
int num3;
while ((num3 = phonemeIndex[++num]) != 255)
{
switch (num3)
{
case 254:
Legacy.IndexOutput[num2] = 255;
Legacy.Render();
num2 = 0;
break;
default:
Legacy.IndexOutput[num2] = num3;
Legacy.LengthOutput[num2] = phonemeLength[num];
Legacy.StressOutput[num2] = phonemeStress[num];
num2++;
break;
case 0:
break;
}
}
Legacy.IndexOutput[num2] = 255;
Legacy.Render();
}
}
public class SamAPI
{
public static Sam Sam = new Sam();
public static float[] Say(string text)
{
text += "[";
Sam.Text2Phonemes(text, out var output);
Sam.SetInput(output);
return Sam.GetBuffer().GetFloats();
}
public static AudioClip Clip(string text)
{
float[] array = Say(text);
AudioClip val = AudioClip.Create("Sam", array.Length, 1, 22050, false);
val.SetData(array, 0);
return val;
}
public static string CutColors(string original)
{
return Regex.Replace(original, "<.*?>|\\[.*?\\]", string.Empty);
}
public static void TryPlay(string text, AudioSource source)
{
try
{
source.clip = Clip(CutColors(text));
source.Play();
}
catch (Exception)
{
}
}
}
}
namespace UltraNet
{
[BepInPlugin("duviz.UltraNet", "UltraNet", "0.0.11")]
public class Plugin : BaseUnityPlugin
{
public static Plugin instance;
public static bool debugMode;
private GameObject canvasObject;
private GameObject canvasInstance;
private bool lastPlayerActive = false;
private bool openedOnce = false;
public void Awake()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
((Object)this).hideFlags = (HideFlags)61;
instance = this;
new Harmony("duviz.UltraNet").PatchAll();
LogInfo("UltraNet loaded.");
}
public void Start()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
GameObject val = new GameObject("BundlesManager");
GameObject val2 = new GameObject("PlayerFetcher");
val.AddComponent<BundlesManager>();
val2.AddComponent<PlayerFetcher>();
val2.AddComponent<PlayerListener>();
((Component)this).gameObject.AddComponent<Numerators>();
GameObject val3 = Object.Instantiate<GameObject>(BundlesManager.netBundle.LoadAsset<GameObject>("UltraNetNotifications"));
canvasObject = BundlesManager.netBundle.LoadAsset<GameObject>("UltraNetCanvas");
canvasInstance = Object.Instantiate<GameObject>(canvasObject);
canvasInstance.SetActive(false);
canvasInstance.GetComponent<CanvasScaler>().screenMatchMode = (ScreenMatchMode)1;
Object.DontDestroyOnLoad((Object)(object)canvasInstance);
Object.DontDestroyOnLoad((Object)(object)val2);
openedOnce = PlayerPrefs.GetInt("UltraNet_Opened", 0) == 1;
SceneManager.sceneLoaded += SceneLoadDelayed;
}
public void SceneLoadDelayed(Scene _, LoadSceneMode __)
{
((MonoBehaviour)this).Invoke("SceneLoad", 0.1f);
}
public void SceneLoad()
{
if (SceneHelper.CurrentScene == "Main Menu" && (Object)(object)((Component)this).gameObject.GetComponent<CustomBindingsPoCPlugin.InputListener>() == (Object)null)
{
((Component)this).gameObject.AddComponent<CustomBindingsPoCPlugin.InputListener>();
}
}
public void Update()
{
if ((Object)(object)MonoSingleton<NewMovement>.Instance != (Object)null && !openedOnce)
{
if (lastPlayerActive != MonoSingleton<NewMovement>.Instance.activated)
{
MonoSingleton<HudMessageReceiver>.Instance.SendHudMessage("Press <color=#ff66cc>(T)</color> to open <color=#66ff66>UltraNet</color>", "", "", 0, false, false, true);
}
lastPlayerActive = MonoSingleton<NewMovement>.Instance.activated;
}
}
public void PressKey()
{
if (!UIBusy())
{
canvasInstance.SetActive(!canvasInstance.activeSelf);
if (!openedOnce)
{
PlayerPrefs.SetInt("UltraNet_Opened", 1);
openedOnce = true;
}
}
}
public static bool UIBusy()
{
return (Object)(object)EventSystem.current != (Object)null && (Object)(object)EventSystem.current.currentSelectedGameObject != (Object)null && (Object)(object)EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>() != (Object)null && EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>().isFocused && EventSystem.current.currentSelectedGameObject.activeInHierarchy;
}
public void OnApplicationFocus(bool isFocused)
{
if ((Object)(object)MonoSingleton<OptionsManager>.Instance != (Object)null && SceneHelper.CurrentScene != "Main Menu" && !MonoSingleton<OptionsManager>.Instance.paused)
{
MonoSingleton<OptionsManager>.Instance.Pause();
}
}
public static T Ass<T>(string path)
{
//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)
return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion();
}
public static void LogInfo(object msg)
{
((BaseUnityPlugin)instance).Logger.LogInfo(msg);
}
public static void LogWarning(object msg)
{
((BaseUnityPlugin)instance).Logger.LogWarning(msg);
}
public static void LogError(object msg)
{
((BaseUnityPlugin)instance).Logger.LogError(msg);
}
}
public class PluginInfo
{
public const string GUID = "duviz.UltraNet";
public const string Name = "UltraNet";
public const string Version = "0.0.11";
}
}
namespace UltraNet.Patches
{
[HarmonyPatch]
public class CheatFix
{
[HarmonyPrefix]
[HarmonyPatch(typeof(CheatsManager), "HandleCheatBind")]
private static bool Patch1()
{
return !Plugin.UIBusy();
}
[HarmonyPrefix]
[HarmonyPatch(typeof(CheatsController), "Update")]
private static bool Patch2()
{
return !Plugin.UIBusy();
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Noclip), "UpdateTick")]
private static bool Patch3()
{
return !Plugin.UIBusy();
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Flight), "Update")]
private static bool Patch4()
{
return !Plugin.UIBusy();
}
}
}
namespace UltraNet.Classes
{
public static class CustomBindingsPoCPlugin
{
public class InputListener : MonoBehaviour
{
private Inputs inputs;
public void Start()
{
inputs = MonoSingleton<Inputs>.Instance;
}
public void Update()
{
if (!((Object)(object)inputs == (Object)null) && inputs.SomeFirstAction.WasPerformedThisFrame())
{
Plugin.instance.PressKey();
}
}
}
[HarmonyPatch(typeof(InputActions))]
public static class InputActionPatches
{
[HarmonyPostfix]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public static void InputActions_Constructor_Postfix(InputActions __instance)
{
if (__instance.asset.FindActionMap("UltraNet", false) == null)
{
MergeInputActionAssets(__instance);
}
}
private static void MergeInputActionAssets(InputActions ukInputActions)
{
InputActionAsset asset = ukInputActions.asset;
bool enabled = asset.enabled;
if (enabled)
{
asset.Disable();
}
InputActionSetupExtensions.AddActionMap(asset, ActionMap);
if (enabled)
{
asset.Enable();
}
}
}
[ConfigureSingleton(/*Could not decode attribute arguments.*/)]
public class Inputs : MonoSingleton<Inputs>
{
private InputActionMap _actionMap;
public InputAction SomeFirstAction { get; private set; }
public void Awake()
{
_actionMap = MonoSingleton<InputManager>.Instance.InputSource.Actions.asset.FindActionMap("UltraNet", false);
SomeFirstAction = _actionMap.FindAction("Toggle panel", false);
}
}
[HarmonyPatch(typeof(ControlsOptions))]
public static class ControlsOptionsPatches
{
[CompilerGenerated]
private sealed class <Transpiler>d__0 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IEnumerator, IDisposable
{
private int <>1__state;
private CodeInstruction <>2__current;
private int <>l__initialThreadId;
private IEnumerable<CodeInstruction> instructions;
public IEnumerable<CodeInstruction> <>3__instructions;
private List<CodeInstruction> <list>5__1;
private MethodInfo <addMap>5__2;
private FieldInfo <mapField>5__3;
private List<CodeInstruction>.Enumerator <>s__4;
private CodeInstruction <inst>5__5;
private Type <t>5__6;
CodeInstruction IEnumerator<CodeInstruction>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <Transpiler>d__0(int <>1__state)
{
this.<>1__state = <>1__state;
<>l__initialThreadId = Environment.CurrentManagedThreadId;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || (uint)(num - 1) <= 3u)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<list>5__1 = null;
<addMap>5__2 = null;
<mapField>5__3 = null;
<>s__4 = default(List<CodeInstruction>.Enumerator);
<inst>5__5 = null;
<t>5__6 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Expected O, but got Unknown
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0178: Expected O, but got Unknown
try
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<list>5__1 = new List<CodeInstruction>(instructions);
<addMap>5__2 = AccessTools.Method(typeof(ControlsOptionsPatches), "AddMap", (Type[])null, (Type[])null);
<mapField>5__3 = AccessTools.Field(typeof(CustomBindingsPoCPlugin), "ActionMap");
<>s__4 = <list>5__1.GetEnumerator();
<>1__state = -3;
break;
case 1:
<>1__state = -3;
<>2__current = new CodeInstruction(OpCodes.Ldsfld, (object)<mapField>5__3);
<>1__state = 2;
return true;
case 2:
<>1__state = -3;
<>2__current = new CodeInstruction(OpCodes.Call, (object)<addMap>5__2);
<>1__state = 3;
return true;
case 3:
<>1__state = -3;
break;
case 4:
<>1__state = -3;
<t>5__6 = null;
<inst>5__5 = null;
break;
}
if (<>s__4.MoveNext())
{
<inst>5__5 = <>s__4.Current;
if (<inst>5__5.opcode == OpCodes.Newarr)
{
object operand = <inst>5__5.operand;
<t>5__6 = operand as Type;
if ((object)<t>5__6 != null && <t>5__6 == typeof(InputActionMap))
{
<>2__current = <inst>5__5;
<>1__state = 1;
return true;
}
}
<>2__current = <inst>5__5;
<>1__state = 4;
return true;
}
<>m__Finally1();
<>s__4 = default(List<CodeInstruction>.Enumerator);
return false;
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
((IDisposable)<>s__4).Dispose();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
[DebuggerHidden]
IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator()
{
<Transpiler>d__0 <Transpiler>d__;
if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
{
<>1__state = 0;
<Transpiler>d__ = this;
}
else
{
<Transpiler>d__ = new <Transpiler>d__0(0);
}
<Transpiler>d__.instructions = <>3__instructions;
return <Transpiler>d__;
}
[DebuggerHidden]
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<CodeInstruction>)this).GetEnumerator();
}
}
[IteratorStateMachine(typeof(<Transpiler>d__0))]
[HarmonyTranspiler]
[HarmonyPatch(typeof(ControlsOptions), "Rebuild")]
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <Transpiler>d__0(-2)
{
<>3__instructions = instructions
};
}
private static InputActionMap[] AddMap(InputActionMap[] original, InputActionMap extra)
{
if (original == null)
{
return (InputActionMap[])(object)new InputActionMap[1] { extra };
}
InputActionMap[] array = (InputActionMap[])(object)new InputActionMap[original.Length + 1];
Array.Copy(original, array, original.Length);
array[^1] = extra;
return array;
}
}
private const string InputMapName = "UltraNet";
private const string SomeFirstActionName = "Toggle panel";
private static readonly string YourActionMapJson = "{\r\n\t\t\"maps\": [\r\n\t\t\t{\r\n\t\t\t\t\"name\": \"UltraNet\",\r\n\t\t\t\t\"id\": \"6212261a-20ba-4c68-8568-ef2c0f5d770f\",\r\n\t\t\t\t\"actions\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"name\": \"Toggle panel\",\r\n\t\t\t\t\t\t\"type\": \"Button\",\r\n\t\t\t\t\t\t\"id\": \"bc66ba63-9493-499b-8c3d-0cf0992fc6a8\",\r\n\t\t\t\t\t\t\"expectedControlType\": \"Button\",\r\n\t\t\t\t\t\t\"processors\": \"\",\r\n\t\t\t\t\t\t\"interactions\": \"\",\r\n\t\t\t\t\t\t\"initialStateCheck\": false\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"bindings\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"name\": \"\",\r\n\t\t\t\t\t\t\"id\": \"81a50518-0cf2-4bcd-a000-892c93e461e7\",\r\n\t\t\t\t\t\t\"path\": \"<Keyboard>/t\",\r\n\t\t\t\t\t\t\"interactions\": \"\",\r\n\t\t\t\t\t\t\"processors\": \"\",\r\n\t\t\t\t\t\t\"groups\": \"Keyboard & Mouse\",\r\n\t\t\t\t\t\t\"action\": \"Toggle panel\",\r\n\t\t\t\t\t\t\"isComposite\": false,\r\n\t\t\t\t\t\t\"isPartOfComposite\": false\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t]\r\n\t}";
private static readonly InputActionMap ActionMap = InputActionMap.FromJson(YourActionMapJson)[0];
}
public class Numerators : MonoBehaviour
{
[CompilerGenerated]
private sealed class <GetStringFromUrl>d__4 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string url;
public Action<string> callback;
private UnityWebRequest <www>5__1;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GetStringFromUrl>d__4(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<www>5__1 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Invalid comparison between Unknown and I4
try
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<www>5__1 = UnityWebRequest.Get(url);
<>1__state = -3;
<www>5__1.timeout = 10;
<>2__current = <www>5__1.SendWebRequest();
<>1__state = 1;
return true;
case 1:
<>1__state = -3;
if ((int)<www>5__1.result != 1)
{
if (!string.IsNullOrEmpty(<www>5__1.error) && <www>5__1.error.Contains("Unknown Error"))
{
callback?.Invoke("?");
}
Plugin.LogError("Failed to load string: " + <www>5__1.error);
callback?.Invoke(null);
}
else
{
callback?.Invoke(<www>5__1.downloadHandler.text);
}
<>m__Finally1();
<www>5__1 = null;
return false;
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<www>5__1 != null)
{
((IDisposable)<www>5__1).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <PostRequest>d__5 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string url;
public Dictionary<string, string> postData;
public Action<string> callback;
private float <startTime>5__1;
private WWWForm <form>5__2;
private Dictionary<string, string>.Enumerator <>s__3;
private KeyValuePair<string, string> <pair>5__4;
private UnityWebRequest <www>5__5;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <PostRequest>d__5(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<form>5__2 = null;
<>s__3 = default(Dictionary<string, string>.Enumerator);
<pair>5__4 = default(KeyValuePair<string, string>);
<www>5__5 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Invalid comparison between Unknown and I4
try
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<startTime>5__1 = Time.realtimeSinceStartup;
<form>5__2 = new WWWForm();
<>s__3 = postData.GetEnumerator();
try
{
while (<>s__3.MoveNext())
{
<pair>5__4 = <>s__3.Current;
<form>5__2.AddField(<pair>5__4.Key, <pair>5__4.Value);
<pair>5__4 = default(KeyValuePair<string, string>);
}
}
finally
{
((IDisposable)<>s__3).Dispose();
}
<>s__3 = default(Dictionary<string, string>.Enumerator);
<www>5__5 = UnityWebRequest.Post(url, <form>5__2);
<>1__state = -3;
<www>5__5.timeout = 10;
<>2__current = <www>5__5.SendWebRequest();
<>1__state = 1;
return true;
case 1:
<>1__state = -3;
if ((int)<www>5__5.result != 1)
{
if (!string.IsNullOrEmpty(<www>5__5.error) && <www>5__5.error.Contains("Unknown Error"))
{
callback?.Invoke("?");
}
Plugin.LogError("Failed to post request: " + <www>5__5.error);
callback?.Invoke(null);
}
else
{
callback?.Invoke(<www>5__5.downloadHandler.text);
}
<>m__Finally1();
<www>5__5 = null;
return false;
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<www>5__5 != null)
{
((IDisposable)<www>5__5).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <TimerButton>d__3 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public Button button;
public float time;
public Numerators <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <TimerButton>d__3(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSecondsRealtime(time);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if ((Object)(object)button == (Object)null)
{
return false;
}
if (!_busy)
{
((UnityEvent)button.onClick).Invoke();
}
((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.TimerButton(button, time));
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public static Numerators instance;
public static bool _busy;
public void Start()
{
instance = this;
}
[IteratorStateMachine(typeof(<TimerButton>d__3))]
public IEnumerator TimerButton(Button button, float time)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <TimerButton>d__3(0)
{
<>4__this = this,
button = button,
time = time
};
}
[IteratorStateMachine(typeof(<GetStringFromUrl>d__4))]
public static IEnumerator GetStringFromUrl(string url, Action<string> callback)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GetStringFromUrl>d__4(0)
{
url = url,
callback = callback
};
}
[IteratorStateMachine(typeof(<PostRequest>d__5))]
public static IEnumerator PostRequest(string url, Dictionary<string, string> postData, Action<string> callback)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <PostRequest>d__5(0)
{
url = url,
postData = postData,
callback = callback
};
}
}
public class Player : MonoBehaviour
{
public float lerpSpeed = 2f;
private Vector3 targetPos;
private Vector3Lerp lerpPos;
private TMP_Text t;
private string originalText;
private bool lastCheats = false;
public void SetTarget(Vector3 newPos, bool cheats)
{
//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_000e: Unknown result type (might be due to invalid IL or missing references)
targetPos = newPos;
lerpPos.Set(newPos);
if (lastCheats != cheats)
{
t.text = (cheats ? ("<size=0.5>(C)</size>" + originalText) : originalText);
}
lastCheats = cheats;
}
public void CreateName(string text, string id, string url)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(BundlesManager.netBundle.LoadAsset<GameObject>("PlayerName"));
val.transform.localScale = new Vector3(-0.5f, 0.5f, 1f);
val.transform.SetParent(((Component)this).transform, false);
val.GetComponentInChildren<TMP_Text>().text = TextParser.Parse(text);
t = val.GetComponentInChildren<TMP_Text>();
originalText = TextParser.Parse(text);
GetPfp(id, val, url);
}
public async void GetPfp(string id, GameObject obj, string url)
{
if (!string.IsNullOrEmpty(url))
{
obj.GetComponentInChildren<ImageGetter>().imageUrl = url;
obj.GetComponentInChildren<ImageGetter>().SetImg();
}
}
public void Update()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
((Component)this).transform.position = lerpPos.Grab();
((Component)this).transform.LookAt(((Object)(object)Camera.main != (Object)null) ? ((Component)Camera.main).transform.position : Vector3.zero);
}
[Obsolete("Smooth :c")]
public void Lerp()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
float num = Vector3.Distance(((Component)this).transform.position, targetPos);
float num2 = num * lerpSpeed;
float num3 = Time.unscaledDeltaTime * num2;
((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, targetPos, num3);
}
}
public class PlayerFetcher : MonoBehaviour
{
public static PlayerFetcher instance;
public static float syncTime = 0.3f;
private Dictionary<string, GameObject> players = new Dictionary<string, GameObject>();
private string syncUrl = "https://duviz.xyz/ultranet/user/update";
private float timer = 0f;
private bool _busy = false;
private int attempts = 0;
public void Update()
{
timer += Time.unscaledDeltaTime;
if (timer >= syncTime && !(SceneHelper.CurrentScene == "Main Menu") && !((Object)(object)MonoSingleton<NewMovement>.Instance == (Object)null))
{
timer = 0f;
Sync();
}
}
public void Sync()
{
attempts++;
if (attempts >= 10)
{
_busy = false;
}
if (_busy)
{
timer = syncTime;
return;
}
_busy = true;
attempts = 0;
((MonoBehaviour)this).StopAllCoroutines();
((MonoBehaviour)this).StartCoroutine(Numerators.PostRequest(syncUrl, new Dictionary<string, string>
{
{
"token",
ContentManager.GetToken()
},
{
"position",
ContentManager.GetPosition()
},
{
"level",
SceneHelper.CurrentScene
},
{
"cheats",
CheatsActive().ToString()
}
}, delegate(string json)
{
_busy = false;
if (json != null)
{
ParseJson(json);
}
}));
}
public GameObject CreatePlayer(string id, Vector3 pos, string name, string url)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("Player viewer");
val.transform.position = pos;
Player player = val.AddComponent<Player>();
player.CreateName(name, id, url);
players.Add(id, val);
return val;
}
public void ParseJson(string json)
{
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Expected O, but got Unknown
//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: 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_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
JObject val;
try
{
val = JObject.Parse(json);
}
catch (Exception arg)
{
Plugin.LogError($"Failed to parse scene json: {arg}");
return;
}
foreach (KeyValuePair<string, GameObject> item in players.ToList())
{
if ((Object)(object)item.Value == (Object)null)
{
players.Remove(item.Key);
}
}
List<string> list = new List<string>();
foreach (KeyValuePair<string, JToken> item2 in (JObject)val["players"])
{
string id = item2.Key;
JObject val2 = (JObject)item2.Value;
string input = ((object)val2["position"])?.ToString();
string name = ((object)val2["name"])?.ToString();
string url = ((object)val2["pfp"])?.ToString();
string text = ((object)val2["cheats"]).ToString();
bool cheats = text.ToLower() == "true";
Vector3 val3 = ParseVector3(input);
GameObject val4 = players.FirstOrDefault((KeyValuePair<string, GameObject> p) => p.Key == id).Value;
list.Add(id);
if ((Object)(object)val4 == (Object)null)
{
val4 = CreatePlayer(id, val3, name, url);
}
val4.GetComponent<Player>().SetTarget(val3, cheats);
}
foreach (KeyValuePair<string, JToken> item3 in (JObject)val["events"])
{
string key = item3.Key;
DoEvent(key);
}
foreach (KeyValuePair<string, GameObject> item4 in players.ToList())
{
if (!list.Contains(item4.Key))
{
GameObject value = item4.Value;
players.Remove(item4.Key);
if ((Object)(object)value != (Object)null)
{
Object.Destroy((Object)(object)value);
}
}
}
}
private void DoEvent(string e)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: 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_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
if (e == "filth")
{
GameObject val = Plugin.Ass<GameObject>("Assets/Prefabs/Enemies/Zombie.prefab");
GameObject val2 = Object.Instantiate<GameObject>(val, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity);
}
if (e == "stray")
{
GameObject val3 = Plugin.Ass<GameObject>("Assets/Prefabs/Enemies/Projectile Zombie.prefab");
GameObject val4 = Object.Instantiate<GameObject>(val3, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity);
}
if (e == "minos")
{
GameObject val5 = Plugin.Ass<GameObject>("Assets/Prefabs/Enemies/MinosPrime.prefab");
GameObject val6 = Object.Instantiate<GameObject>(val5, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity);
}
if (e == "explosion")
{
GameObject val7 = Plugin.Ass<GameObject>("Assets/Prefabs/Attacks and Projectiles/Explosions/Explosion.prefab");
GameObject val8 = Object.Instantiate<GameObject>(val7, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity);
}
if (e == "gravity")
{
Physics.gravity = new Vector3(0f - Physics.gravity.y, 0f - Physics.gravity.z, 0f - Physics.gravity.x);
}
if (e.StartsWith("custom_"))
{
GameObject val9 = Plugin.Ass<GameObject>("Assets/Prefabs/" + e.Replace("custom_", "") + ".prefab");
GameObject val10 = Object.Instantiate<GameObject>(val9, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity);
}
}
private Vector4 ParseVector4(string input)
{
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
input = input.Trim('(', ')', ' ');
string[] array = input.Split(',');
if (array.Length != 4)
{
Plugin.LogError("Invalid Vector4 format: " + input);
return Vector4.zero;
}
return new Vector4(float.Parse(array[0], CultureInfo.InvariantCulture), float.Parse(array[1], CultureInfo.InvariantCulture), float.Parse(array[2], CultureInfo.InvariantCulture), float.Parse(array[3], CultureInfo.InvariantCulture));
}
public static Vector3 ParseVector3(string input)
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
input = input.Trim('(', ')', ' ');
string[] array = input.Split(',');
if (array.Length != 3)
{
Plugin.LogError("Invalid Vector3 format: " + input);
return Vector3.zero;
}
return new Vector3(float.Parse(array[0], CultureInfo.InvariantCulture), float.Parse(array[1], CultureInfo.InvariantCulture), float.Parse(array[2], CultureInfo.InvariantCulture));
}
public static Vector2 ParseVector2(string input)
{
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
input = input.Trim('(', ')', ' ');
string[] array = input.Split(',');
if (array.Length != 2)
{
Plugin.LogError("Invalid Vector2 format: " + input);
return Vector2.zero;
}
return new Vector2(float.Parse(array[0], CultureInfo.InvariantCulture), float.Parse(array[1], CultureInfo.InvariantCulture));
}
public bool CheatsActive()
{
return MonoSingleton<CheatsController>.Instance.cheatsEnabled || MonoSingleton<StatsManager>.Instance.majorUsed;
}
}
public class PlayerListener : MonoBehaviour
{
private UdpClient udpClient;
private Thread receiveThread;
private string lastReceivedData = "";
private readonly object lockObject = new object();
public int port = 41789;
public void Start()
{
}
private void ReceiveData()
{
IPAddress address = IPAddress.Parse("88.9.11.249");
udpClient = new UdpClient(port);
IPEndPoint remoteEP = new IPEndPoint(address, 0);
while (true)
{
try
{
byte[] bytes = udpClient.Receive(ref remoteEP);
string @string = Encoding.UTF8.GetString(bytes);
lock (lockObject)
{
lastReceivedData = @string;
}
}
catch (Exception ex)
{
Plugin.LogError(ex.ToString());
}
}
}
public void Update()
{
}
private void OnDisable()
{
udpClient?.Close();
}
private void OnApplicationQuit()
{
udpClient?.Close();
}
}
public class SteamAvatarFetcher : MonoBehaviour
{
private static readonly HttpClient client = new HttpClient();
public async Task<string> GetSteamAvatarURL(string steamID64)
{
string xmlUrl = "https://steamcommunity.com/profiles/" + steamID64 + "/?xml=1";
try
{
string xml = await client.GetStringAsync(xmlUrl);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNode avatarFullNode = doc.SelectSingleNode("//avatarFull");
if (avatarFullNode != null)
{
return avatarFullNode.InnerText;
}
Plugin.LogWarning("Not found.");
return null;
}
catch (HttpRequestException ex)
{
HttpRequestException e2 = ex;
Plugin.LogError("HTTP request error: " + e2.Message);
return null;
}
catch (XmlException ex2)
{
XmlException e = ex2;
Plugin.LogError("XML parsing error: " + e.Message);
return null;
}
}
}
public struct Vector3Lerp
{
public Vector3 PreviousValue;
public Vector3 TargetValue;
public float Duration;
public float StartTime;
public Vector3 Grab()
{
//IL_0001: 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_001f: Unknown result type (might be due to invalid IL or missing references)
return Vector3.Lerp(PreviousValue, TargetValue, (Time.realtimeSinceStartup - StartTime) / Duration);
}
public void Set(Vector3 value)
{
//IL_0017: 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)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
PreviousValue = ((StartTime == 0f) ? value : Grab());
TargetValue = value;
Duration = Mathf.Max(Time.realtimeSinceStartup - StartTime, PlayerFetcher.syncTime);
StartTime = Time.realtimeSinceStartup;
}
}
}
namespace UltraNet.Canvas
{
public class ContentManager : MonoBehaviour
{
public Transform content;
public ResetScrollbar resetScrollbar;
public ScrollRect scrollRect;
[Header("Root")]
public TMP_Text titleText;
[Header("Prefabs")]
public GameObject textPrefab;
public GameObject imagePrefab;
public GameObject buttonPrefab;
public GameObject inputFieldPrefab;
public GameObject playerPrefab;
private AudioSource source = null;
public const string mainUrl = "https://duviz.xyz/login";
public const string errorJson = "\r\n {\r\n 'title': 'Error!',\r\n 'elements': [\r\n {\r\n 'type': 'text',\r\n 'name': 'ErrorText',\r\n 'text': 'There was an error when trying to load the site. Try again later.',\r\n 'color': '#FF0000'\r\n },\r\n {\r\n 'type': 'button',\r\n 'name': 'BackButton',\r\n 'text': 'Go back',\r\n 'url': 'https://duviz.xyz/login',\r\n 'action': 'postToken'\r\n }\r\n ]\r\n