Decompiled source of Mirage v1.15.5

Mirage.Compatibility.dll

Decompiled 3 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using <StartupCode$Mirage-Compatibility>.$Mirage;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using LethalConfig;
using LethalConfig.AutoConfig;
using LethalConfig.ConfigItems;
using LethalSettings.UI;
using LethalSettings.UI.Components;
using LobbyCompatibility.Enums;
using LobbyCompatibility.Features;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("LethalConfig")]
[assembly: IgnoresAccessChecksTo("LethalSettings")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("Mirage.Compatibility")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+c5b8afd03d0e99913c60b7097d7f3f7c0c448c13")]
[assembly: AssemblyProduct("Mirage.Compatibility")]
[assembly: AssemblyTitle("Mirage.Compatibility")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[CompilationMapping(/*Could not decode attribute arguments.*/)]
public static class AssemblyInfo
{
}
namespace <StartupCode$Mirage-Compatibility>
{
	internal static class $AssemblyInfo
	{
	}
}
namespace Mirage
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Compatibility
	{
		[Serializable]
		internal sealed class initGeneralLethalConfig@22 : FSharpFunc<Unit, Unit>
		{
			public Assembly assembly;

			public ConfigFile configFile;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal initGeneralLethalConfig@22(Assembly assembly, ConfigFile configFile)
			{
				this.assembly = assembly;
				this.configFile = configFile;
			}

			public override Unit Invoke(Unit unitVar)
			{
				//IL_001f: Unknown result type (might be due to invalid IL or missing references)
				List<ConfigFileAssemblyPair> customConfigFiles = LethalConfigManager.CustomConfigFiles;
				ConfigFileAssemblyPair item = default(ConfigFileAssemblyPair);
				((ConfigFileAssemblyPair)(ref item)).ConfigFile = configFile;
				((ConfigFileAssemblyPair)(ref item)).Assembly = assembly;
				customConfigFiles.Add(item);
				return null;
			}
		}

		[Serializable]
		internal sealed class initEnemiesLethalConfig@33 : FSharpFunc<Unit, Unit>
		{
			public Assembly assembly;

			public FSharpList<ConfigEntry<bool>> enemies;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal initEnemiesLethalConfig@33(Assembly assembly, FSharpList<ConfigEntry<bool>> enemies)
			{
				this.assembly = assembly;
				this.enemies = enemies;
			}

			public override Unit Invoke(Unit unitVar)
			{
				//IL_0030: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Expected O, but got Unknown
				enemiesInitialized = enemies.TailOrNull != null;
				FSharpList<ConfigEntry<bool>> val = enemies;
				for (FSharpList<ConfigEntry<bool>> tailOrNull = val.TailOrNull; tailOrNull != null; tailOrNull = val.TailOrNull)
				{
					ConfigEntry<bool> headOrDefault = val.HeadOrDefault;
					BoolCheckBoxConfigItem val2 = new BoolCheckBoxConfigItem(headOrDefault);
					bool flag = LethalConfigManager.AddConfigItemForAssembly((BaseConfigItem)(object)val2, assembly);
					val = tailOrNull;
				}
				return null;
			}
		}

		[Serializable]
		internal sealed class initLobbyCompatibility@42 : FSharpFunc<Unit, Unit>
		{
			public string pluginName;

			public string pluginVersion;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal initLobbyCompatibility@42(string pluginName, string pluginVersion)
			{
				this.pluginName = pluginName;
				this.pluginVersion = pluginVersion;
			}

			public override Unit Invoke(Unit unitVar)
			{
				PluginHelper.RegisterPlugin(pluginName, Version.Parse(pluginVersion), (CompatibilityLevel)2, (VersionStrictness)2);
				return null;
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class LethalSettingsArgs
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string pluginName@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string pluginId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string pluginVersion@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<Unit, float> getLocalPlayerVolume@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<float, Unit> setLocalPlayerVolume@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<Unit, bool> getNeverDeleteRecordings@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<bool, Unit> setNeverDeleteRecordings@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<Unit, bool> getAllowRecordVoice@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<bool, Unit> setAllowRecordVoice@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public string pluginName
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return pluginName@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public string pluginId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return pluginId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public string pluginVersion
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return pluginVersion@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<Unit, float> getLocalPlayerVolume
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return getLocalPlayerVolume@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<float, Unit> setLocalPlayerVolume
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return setLocalPlayerVolume@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<Unit, bool> getNeverDeleteRecordings
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return getNeverDeleteRecordings@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<bool, Unit> setNeverDeleteRecordings
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return setNeverDeleteRecordings@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<Unit, bool> getAllowRecordVoice
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return getAllowRecordVoice@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<bool, Unit> setAllowRecordVoice
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return setAllowRecordVoice@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(LethalSettingsArgs))]
			public LethalSettingsArgs(string pluginName, string pluginId, string pluginVersion, FSharpFunc<Unit, float> getLocalPlayerVolume, FSharpFunc<float, Unit> setLocalPlayerVolume, FSharpFunc<Unit, bool> getNeverDeleteRecordings, FSharpFunc<bool, Unit> setNeverDeleteRecordings, FSharpFunc<Unit, bool> getAllowRecordVoice, FSharpFunc<bool, Unit> setAllowRecordVoice)
			{
				pluginName@ = pluginName;
				pluginId@ = pluginId;
				pluginVersion@ = pluginVersion;
				getLocalPlayerVolume@ = getLocalPlayerVolume;
				setLocalPlayerVolume@ = setLocalPlayerVolume;
				getNeverDeleteRecordings@ = getNeverDeleteRecordings;
				setNeverDeleteRecordings@ = setNeverDeleteRecordings;
				getAllowRecordVoice@ = getAllowRecordVoice;
				setAllowRecordVoice@ = setAllowRecordVoice;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<LethalSettingsArgs, string>>((PrintfFormat<FSharpFunc<LethalSettingsArgs, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<LethalSettingsArgs, string>, Unit, string, string, LethalSettingsArgs>("%+A")).Invoke(this);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class initLethalSettings@77-1
		{
			public LethalSettingsArgs settings;

			public initLethalSettings@77-1(LethalSettingsArgs settings)
			{
				this.settings = settings;
				base..ctor();
			}

			internal void Invoke(SliderComponent _arg1, float value)
			{
				settings.setLocalPlayerVolume@.Invoke(value);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class initLethalSettings@82-2
		{
			public LethalSettingsArgs settings;

			public initLethalSettings@82-2(LethalSettingsArgs settings)
			{
				this.settings = settings;
				base..ctor();
			}

			internal void Invoke(ToggleComponent _arg2, bool value)
			{
				settings.setNeverDeleteRecordings@.Invoke(value);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class initLethalSettings@87-3
		{
			public LethalSettingsArgs settings;

			public initLethalSettings@87-3(LethalSettingsArgs settings)
			{
				this.settings = settings;
				base..ctor();
			}

			internal void Invoke(ToggleComponent _arg3, bool value)
			{
				settings.setAllowRecordVoice@.Invoke(value);
			}
		}

		[Serializable]
		internal sealed class initLethalSettings@65 : FSharpFunc<Unit, Unit>
		{
			public LethalSettingsArgs settings;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal initLethalSettings@65(LethalSettingsArgs settings)
			{
				this.settings = settings;
			}

			public override Unit Invoke(Unit unitVar)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Expected O, but got Unknown
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: Expected O, but got Unknown
				//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b5: Expected O, but got Unknown
				//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0101: Expected O, but got Unknown
				//IL_0140: Unknown result type (might be due to invalid IL or missing references)
				ModSettingsConfig val = new ModSettingsConfig();
				val.Name = settings.pluginName@;
				val.Id = settings.pluginId@;
				val.Version = settings.pluginVersion@;
				val.Description = "The preferences below only affect yourself. These values are not synced from the host.";
				MenuComponent[] array = new MenuComponent[3];
				SliderComponent val2 = new SliderComponent();
				val2.Value = settings.getLocalPlayerVolume@.Invoke((Unit)null);
				val2.MinValue = 0f;
				val2.MaxValue = 100f;
				val2.Text = "Volume when a monster is mimicking your own voice:";
				val2.OnValueChanged = new initLethalSettings@77-1(settings).Invoke;
				array[0] = (MenuComponent)val2;
				ToggleComponent val3 = new ToggleComponent();
				val3.Text = "Never delete recordings";
				val3.Value = settings.getNeverDeleteRecordings@.Invoke((Unit)null);
				val3.OnValueChanged = new initLethalSettings@82-2(settings).Invoke;
				array[1] = (MenuComponent)val3;
				val3 = new ToggleComponent();
				val3.Text = "Allow record voice";
				val3.Value = settings.getAllowRecordVoice@.Invoke((Unit)null);
				val3.OnValueChanged = new initLethalSettings@87-3(settings).Invoke;
				array[2] = (MenuComponent)val3;
				val.MenuComponents = (MenuComponent[])(object)array;
				ModMenu.RegisterMod(val, true, true);
				return null;
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static bool enemiesInitialized
		{
			get
			{
				return <StartupCode$Mirage-Compatibility>.$Mirage.Compatibility.enemiesInitialized@30;
			}
			set
			{
				<StartupCode$Mirage-Compatibility>.$Mirage.Compatibility.enemiesInitialized@30 = value;
			}
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static void initGeneralLethalConfig(Assembly assembly, ConfigFile configFile)
		{
			if (Chainloader.PluginInfos.ContainsKey("ainavt.lc.lethalconfig"))
			{
				_ = LazyExtensions.Create<Unit>((FSharpFunc<Unit, Unit>)new initGeneralLethalConfig@22(assembly, configFile)).Value;
			}
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static void initEnemiesLethalConfig(Assembly assembly, FSharpList<ConfigEntry<bool>> enemies)
		{
			if (Chainloader.PluginInfos.ContainsKey("ainavt.lc.lethalconfig") && !enemiesInitialized)
			{
				_ = LazyExtensions.Create<Unit>((FSharpFunc<Unit, Unit>)new initEnemiesLethalConfig@33(assembly, enemies)).Value;
			}
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static void initLobbyCompatibility(string pluginName, string pluginVersion)
		{
			if (Chainloader.PluginInfos.ContainsKey("BMX.LobbyCompatibility"))
			{
				_ = LazyExtensions.Create<Unit>((FSharpFunc<Unit, Unit>)new initLobbyCompatibility@42(pluginName, pluginVersion)).Value;
			}
		}

		public static void initLethalSettings(LethalSettingsArgs settings)
		{
			if (Chainloader.PluginInfos.ContainsKey("com.willis.lc.lethalsettings"))
			{
				_ = LazyExtensions.Create<Unit>((FSharpFunc<Unit, Unit>)new initLethalSettings@65(settings)).Value;
			}
		}
	}
}
namespace <StartupCode$Mirage-Compatibility>.$Mirage
{
	internal static class Compatibility
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static bool enemiesInitialized@30;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal static int init@;

		static Compatibility()
		{
			enemiesInitialized@30 = false;
		}
	}
}
namespace <StartupCode$Mirage-Compatibility>.$.NETStandard,Version=v2.1
{
	internal static class AssemblyAttributes
	{
	}
}
namespace <StartupCode$Mirage-Compatibility>.$Compatibility
{
	internal static class AssemblyInfo
	{
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[Serializable]
	[Flags]
	[CompilerGenerated]
	[DebuggerNonUserCode]
	internal enum DynamicallyAccessedMemberTypes
	{
		All = -1,
		None = 0,
		PublicParameterlessConstructor = 1,
		PublicConstructors = 3,
		NonPublicConstructors = 4,
		PublicMethods = 8,
		NonPublicMethods = 0x10,
		PublicFields = 0x20,
		NonPublicFields = 0x40,
		PublicNestedTypes = 0x80,
		NonPublicNestedTypes = 0x100,
		PublicProperties = 0x200,
		NonPublicProperties = 0x400,
		PublicEvents = 0x800,
		NonPublicEvents = 0x1000,
		Interfaces = 0x2000
	}
	[CompilerGenerated]
	internal class DynamicDependencyAttribute : Attribute
	{
		[CompilerGenerated]
		[DebuggerNonUserCode]
		private DynamicallyAccessedMemberTypes MemberType@;

		[CompilerGenerated]
		[DebuggerNonUserCode]
		private Type Type@;

		[CompilerGenerated]
		[DebuggerNonUserCode]
		public DynamicallyAccessedMemberTypes MemberType
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return MemberType@;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		public Type Type
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Type@;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		public DynamicDependencyAttribute(DynamicallyAccessedMemberTypes MemberType, Type Type)
		{
			MemberType@ = MemberType;
			Type@ = Type;
		}
	}
}

Mirage.Core.dll

Decompiled 3 days ago
using System;
using System.Buffers;
using System.Collections;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Threading;
using System.Threading.Channels;
using System.Threading.Tasks;
using <StartupCode$Mirage-Core>.$Mirage.Core.Audio.Microphone;
using Collections.Pooled;
using Concentus;
using Concentus.Enums;
using Concentus.Oggfile;
using Concentus.Structs;
using FSharpPlus;
using FSharpPlus.Control;
using IcedTasks;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;
using Mirage.Core.Audio;
using Mirage.Core.Audio.Opus;
using Mirage.Core.Task;
using NAudio.Dsp;
using OpusDotNet;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: IgnoresAccessChecksTo("NAudio.Core")]
[assembly: IgnoresAccessChecksTo("NAudio")]
[assembly: IgnoresAccessChecksTo("OpusDotNet")]
[assembly: AssemblyCompany("Mirage.Core")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+c5b8afd03d0e99913c60b7097d7f3f7c0c448c13")]
[assembly: AssemblyProduct("Mirage.Core")]
[assembly: AssemblyTitle("Mirage.Core")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[CompilationMapping(/*Could not decode attribute arguments.*/)]
public static class AssemblyInfo
{
}
namespace <StartupCode$Mirage-Core>
{
	internal static class $AssemblyInfo
	{
	}
}
namespace Mirage.Core.Audio.Microphone
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Recognition
	{
	}
}
namespace <StartupCode$Mirage-Core>.$Mirage.Core.Audio.Microphone
{
	internal static class Recognition
	{
	}
}
namespace Mirage.Core.Audio.Microphone
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Recorder
	{
		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class Recorder<State> : IEquatable<Recorder<State>>, IStructuralEquatable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Mirage.Core.Task.Channel.Channel<(State, Detection.DetectAction)> channel@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Mirage.Core.Task.Channel.Channel<(State, Detection.DetectAction)> channel
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return channel@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(Recorder<>))]
			public Recorder(Mirage.Core.Task.Channel.Channel<(State, Detection.DetectAction)> channel)
			{
				channel@ = channel;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<Recorder<Recorder<State>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<Recorder<State>, string>>((PrintfFormat<FSharpFunc<Recorder<State>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<Recorder<FSharpFunc<Recorder<State>, string>>, string>, Unit, string, string, Recorder<FSharpFunc<Recorder<State>, string>>>("%+A"))).Invoke((Recorder<Recorder<State>>)(object)this);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					return -1640531527 + (channel@.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(Recorder<State> obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj != null)
					{
						Mirage.Core.Task.Channel.Channel<(State, Detection.DetectAction)> channel = channel@;
						Mirage.Core.Task.Channel.Channel<(State, Detection.DetectAction)> obj2 = obj.channel@;
						return channel.Equals(obj2, comp);
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is Recorder<State> obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(Recorder<State> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						return channel@.Equals(obj.channel@);
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is Recorder<State> obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class RecorderArgs<State>
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int minAudioDurationMs@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string directory@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<State, bool> allowRecordVoice@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public int minAudioDurationMs
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return minAudioDurationMs@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public string directory
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return directory@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<State, bool> allowRecordVoice
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return allowRecordVoice@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(RecorderArgs<>))]
			public RecorderArgs(int minAudioDurationMs, string directory, FSharpFunc<State, bool> allowRecordVoice)
			{
				minAudioDurationMs@ = minAudioDurationMs;
				directory@ = directory;
				allowRecordVoice@ = allowRecordVoice;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<RecorderArgs<RecorderArgs<State>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<RecorderArgs<State>, string>>((PrintfFormat<FSharpFunc<RecorderArgs<State>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<RecorderArgs<FSharpFunc<RecorderArgs<State>, string>>, string>, Unit, string, string, RecorderArgs<FSharpFunc<RecorderArgs<State>, string>>>("%+A"))).Invoke((RecorderArgs<RecorderArgs<State>>)(object)this);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@31-7<a> : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public RecorderArgs<a> args;

			public Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel;

			public ValueTaskAwaiter<(a, Detection.DetectAction)> awaiter;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
						awaiter = channel.reader@.ReadAsync(channel.cancellationToken@).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_0076;
					case 1:
						{
							num = 1;
							goto IL_0076;
						}
						IL_0076:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (!flag)
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
						goto IL_01f9;
					}
					var (val, detectAction) = awaiter.GetResult();
					if (detectAction.Tag == 1)
					{
						Detection.DetectEnd detectEnd = detectAction.detectEnd;
						if (detectEnd.audioDurationMs@ >= args.minAudioDurationMs@ && args.allowRecordVoice@.Invoke(val))
						{
							Guid guid = Guid.NewGuid();
							Writer.OpusWriter opusWriter = Writer.OpusWriter(new Writer.OpusWriterArgs(Path.Join((ReadOnlySpan<char>)args.directory@, (ReadOnlySpan<char>)(string?)PrintfModule.PrintFormatToStringThen<object>((PrintfFormat<object, Unit, string, string>)(object)new PrintfFormat<object, object, object, object, Guid>("%P().opus", new object[1] { guid }, (Type[])null))), detectEnd.fullAudio@.original@.format@));
							flag2 = false;
							flag2 = flag2 || flag2;
							try
							{
								Writer.writeOpusSamples(opusWriter, detectEnd.fullAudio@.original@.samples@);
								Writer.closeOpusWriter(opusWriter);
								bool flag3 = true;
								flag2 = flag3;
							}
							catch (object obj)
							{
								ex = (Exception)obj;
								compensation@1-1(detectEnd, opusWriter, null);
								bool flag3 = true;
								throw;
							}
							if (flag2)
							{
								compensation@1-1(detectEnd, opusWriter, null);
								bool flag3 = true;
							}
							num2 = (flag2 ? 1 : 0);
							goto IL_01f9;
						}
					}
					goto IL_01fb;
					IL_01f9:
					if (num2 != 0)
					{
						goto IL_01fb;
					}
					goto end_IL_0019;
					IL_01fb:
					ValueTaskAwaiter<(a, Detection.DetectAction)> valueTaskAwaiter = default(ValueTaskAwaiter<(a, Detection.DetectAction)>);
					awaiter = valueTaskAwaiter;
					if (true)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
					end_IL_0019:;
				}
				catch (object obj2)
				{
					ex = (Exception)obj2;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@31-8<a> : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public RecorderArgs<a> args;

			public Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					bool flag3;
					int num2;
					int num3;
					bool flag4;
					switch (resumptionPoint)
					{
					default:
						flag = true;
						goto IL_00db;
					case 1:
						{
							num = 1;
							goto IL_0075;
						}
						IL_00db:
						if (flag)
						{
							awaiter = program@7-3(args, channel, null).GetAwaiter();
							flag2 = true;
							if (awaiter.IsCompleted)
							{
								goto IL_007f;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_0075;
						}
						if (flag)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
						break;
						IL_0075:
						flag3 = (byte)num != 0;
						flag2 = flag3;
						goto IL_007f;
						IL_007f:
						if (flag2)
						{
							awaiter.GetResult();
							_ = null;
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						if (num2 != 0)
						{
							awaiter = default(ValueTaskAwaiter<Unit>);
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						flag4 = (byte)num3 != 0;
						flag = flag4;
						resumptionPoint = 0;
						goto IL_00db;
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class consumer@31-6<a> : FSharpFunc<Unit, ValueTask<Unit>>
		{
			public RecorderArgs<a> args;

			public Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal consumer@31-6(RecorderArgs<a> args, Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel)
			{
				this.args = args;
				this.channel = channel;
			}

			public override ValueTask<Unit> Invoke(Unit unitVar0)
			{
				consumer@31-8<a> stateMachine = default(consumer@31-8<a>);
				stateMachine.args = args;
				stateMachine.channel = channel;
				stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct Recorder@51-2 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				//IL_012b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0130: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex3 = default(Exception);
				Exception ex = default(Exception);
				try
				{
					bool flag2 = default(bool);
					bool flag = default(bool);
					switch (resumptionPoint)
					{
					default:
						flag = false;
						flag2 = false;
						ex = null;
						flag = flag || flag;
						break;
					case 1:
						break;
					}
					try
					{
						bool flag3;
						int num;
						bool flag4;
						switch (resumptionPoint)
						{
						default:
							awaiter = program.Invoke((Unit)null).GetAwaiter();
							flag3 = true;
							if (awaiter.IsCompleted)
							{
								break;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_008c;
						case 1:
							{
								num = 1;
								goto IL_008c;
							}
							IL_008c:
							flag4 = (byte)num != 0;
							flag3 = flag4;
							break;
						}
						int num2;
						if (flag3)
						{
							awaiter.GetResult();
							_ = null;
							FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewOk((Unit)null);
							ValueTask valueTask = channel.writer@.WriteAsync(item, channel.cancellationToken@);
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						int num3;
						if (num2 != 0)
						{
							ValueTaskAwaiter<Unit> valueTaskAwaiter = default(ValueTaskAwaiter<Unit>);
							awaiter = valueTaskAwaiter;
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						bool flag5 = (byte)num3 != 0;
						flag = flag5;
					}
					catch (object obj)
					{
						Exception ex2 = (Exception)obj;
						flag2 = true;
						ex = ex2;
					}
					int num4;
					if (flag2)
					{
						Exception ex2 = ex;
						FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewError(ex2);
						ValueTask valueTask = channel.writer@.WriteAsync(item, channel.cancellationToken@);
						num4 = 1;
					}
					else
					{
						num4 = (flag ? 1 : 0);
					}
					if (num4 != 0)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
				}
				catch (object obj2)
				{
					ex = (Exception)obj2;
					ex3 = ex;
				}
				ex = ex3;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class Recorder@51-3
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, ValueTask<Unit>> program;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel;

			public Recorder@51-3(FSharpFunc<Unit, ValueTask<Unit>> program, Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel)
			{
				this.program = program;
				this.channel = channel;
				base..ctor();
			}

			internal ValueTask<Unit> Invoke()
			{
				return thread@12-5(program, channel, null);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct Recorder@51-1 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public CancellationToken cancellationToken;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public ValueTaskAwaiter<FSharpResult<Unit, Exception>> awaiter;

			public override void MoveNext()
			{
				//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: 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)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
					{
						Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel = Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>>(cancellationToken);
						Task<ValueTask<Unit>> task = System.Threading.Tasks.Task.Run((Func<ValueTask<Unit>>)new Recorder@51-3(program, channel).Invoke, cancellationToken);
						awaiter = channel.reader@.ReadAsync(channel.cancellationToken@).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_009d;
					}
					case 1:
						{
							num = 1;
							goto IL_009d;
						}
						IL_009d:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						FSharpResult<Unit, Exception> result = awaiter.GetResult();
						FSharpResult<Unit, Exception> val = result;
						if (val.Tag != 0)
						{
							throw val.ErrorValue;
						}
						_ = val.ResultValue;
						Data.Result = null;
						num2 = 1;
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						ValueTaskAwaiter<FSharpResult<Unit, Exception>> valueTaskAwaiter = default(ValueTaskAwaiter<FSharpResult<Unit, Exception>>);
						awaiter = valueTaskAwaiter;
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class Recorder@51-4 : FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public CancellationToken cancellationToken;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Recorder@51-4(CancellationToken cancellationToken)
			{
				this.cancellationToken = cancellationToken;
			}

			public override Unit Invoke(FSharpFunc<Unit, ValueTask<Unit>> x)
			{
				ValueTask<Unit> valueTask = func1@1-2(cancellationToken, x);
				return null;
			}
		}

		[Serializable]
		internal sealed class Recorder@51 : FSharpFunc<CancellationToken, FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>>
		{
			internal static readonly Recorder@51 @_instance = new Recorder@51();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Recorder@51()
			{
			}

			public override FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit> Invoke(CancellationToken cancellationToken)
			{
				return new Recorder@51-4(cancellationToken);
			}
		}

		[Serializable]
		internal sealed class writeRecorder@54<a> : FSharpFunc<(a, Detection.DetectAction), Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal writeRecorder@54(Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel)
			{
				((FSharpFunc<((a, Detection.DetectAction), Detection.DetectAction), Unit>)(object)this)..ctor();
				this.channel = channel;
			}

			public override Unit Invoke((a, Detection.DetectAction) element)
			{
				ValueTask valueTask = channel.writer@.WriteAsync(element, channel.cancellationToken@);
				return null;
			}
		}

		[CompilerGenerated]
		internal static void compensation@1-1(Detection.DetectEnd payload, Writer.OpusWriter opusWriter, Unit unitVar)
		{
			ArrayPool<float>.Shared.Return(payload.fullAudio@.original@.samples@.data@);
			ArrayPool<float>.Shared.Return(payload.fullAudio@.resampled@.samples@.data@);
			Operators.dispose((IDisposable)opusWriter);
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> program@7-3<a>(RecorderArgs<a> args, Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel, Unit unitVar0)
		{
			consumer@31-7<a> stateMachine = default(consumer@31-7<a>);
			stateMachine.args = args;
			stateMachine.channel = channel;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> thread@12-5(FSharpFunc<Unit, ValueTask<Unit>> program, Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel, Unit unitVar0)
		{
			Recorder@51-2 stateMachine = default(Recorder@51-2);
			stateMachine.program = program;
			stateMachine.channel = channel;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> func1@1-2(CancellationToken cancellationToken, FSharpFunc<Unit, ValueTask<Unit>> program)
		{
			Recorder@51-1 stateMachine = default(Recorder@51-1);
			stateMachine.cancellationToken = cancellationToken;
			stateMachine.program = program;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		public static Recorder<a> Recorder<a>(RecorderArgs<a> args)
		{
			Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel = Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)>(CancellationToken.None);
			FSharpFunc<Unit, ValueTask<Unit>> val = new consumer@31-6<a>(args, channel);
			FSharpFunc<CancellationToken, FSharpFunc<Unit, ValueTask<Unit>>>.InvokeFast<Unit>((FSharpFunc<CancellationToken, FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>>)Recorder@51.@_instance, CancellationToken.None, val);
			return new Recorder<a>(channel);
		}

		public static FSharpFunc<(a, Detection.DetectAction), Unit> writeRecorder<a>(Recorder<a> recorder)
		{
			Mirage.Core.Task.Channel.Channel<(a, Detection.DetectAction)> channel@ = recorder.channel@;
			return new writeRecorder@54<a>(channel@);
		}
	}
}
namespace <StartupCode$Mirage-Core>.$Mirage.Core.Audio.Microphone
{
	internal static class Recorder
	{
	}
}
namespace Mirage.Core.Audio.Microphone
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Detection
	{
		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct VADFrame : IEquatable<VADFrame>, IStructuralEquatable, IComparable<VADFrame>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int elapsedTime@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal float probability@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly int elapsedTime
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return elapsedTime@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly float probability
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return probability@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(VADFrame))]
			public VADFrame(int elapsedTime, float probability)
			{
				elapsedTime@ = elapsedTime;
				probability@ = probability;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<VADFrame, string>>((PrintfFormat<FSharpFunc<VADFrame, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<VADFrame, string>, Unit, string, string, VADFrame>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(VADFrame obj)
			{
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				int num = elapsedTime@;
				int num2 = obj.elapsedTime@;
				int num3 = ((num > num2) ? 1 : 0) - ((num < num2) ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				float num4 = probability@;
				float num5 = obj.probability@;
				if (num4 < num5)
				{
					return -1;
				}
				if (num4 > num5)
				{
					return 1;
				}
				if (num4 == num5)
				{
					return 0;
				}
				return HashCompare.GenericComparisonWithComparerIntrinsic<float>(genericComparer, num4, num5);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((VADFrame)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				VADFrame vADFrame = (VADFrame)obj;
				int num = elapsedTime@;
				int num2 = vADFrame.elapsedTime@;
				int num3 = ((num > num2) ? 1 : 0) - ((num < num2) ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				float num4 = probability@;
				float num5 = vADFrame.probability@;
				if (num4 < num5)
				{
					return -1;
				}
				if (num4 > num5)
				{
					return 1;
				}
				if (num4 == num5)
				{
					return 0;
				}
				return HashCompare.GenericComparisonWithComparerIntrinsic<float>(comp, num4, num5);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<float>(comp, probability@) + ((num << 6) + (num >> 2)));
				return -1640531527 + (elapsedTime@ + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(VADFrame obj, IEqualityComparer comp)
			{
				if (elapsedTime@ == obj.elapsedTime@)
				{
					return probability@ == obj.probability@;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is VADFrame obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(VADFrame obj)
			{
				if (elapsedTime@ == obj.elapsedTime@)
				{
					float num = probability@;
					float num2 = obj.probability@;
					if (num == num2)
					{
						return true;
					}
					if (num != num)
					{
						return num2 != num2;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is VADFrame)
				{
					return Equals((VADFrame)obj);
				}
				return false;
			}
		}

		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct DetectStart : IEquatable<DetectStart>, IStructuralEquatable, IComparable<DetectStart>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PCM.WaveFormat originalFormat@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PCM.WaveFormat resampledFormat@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly PCM.WaveFormat originalFormat
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return originalFormat@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly PCM.WaveFormat resampledFormat
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return resampledFormat@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(DetectStart))]
			public DetectStart(PCM.WaveFormat originalFormat, PCM.WaveFormat resampledFormat)
			{
				originalFormat@ = originalFormat;
				resampledFormat@ = resampledFormat;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<DetectStart, string>>((PrintfFormat<FSharpFunc<DetectStart, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<DetectStart, string>, Unit, string, string, DetectStart>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(DetectStart obj)
			{
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				PCM.WaveFormat waveFormat = originalFormat@;
				PCM.WaveFormat waveFormat2 = obj.originalFormat@;
				int num = waveFormat.CompareTo(waveFormat2, genericComparer);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				waveFormat = resampledFormat@;
				waveFormat2 = obj.resampledFormat@;
				return waveFormat.CompareTo(waveFormat2, genericComparer);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((DetectStart)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				DetectStart detectStart = (DetectStart)obj;
				PCM.WaveFormat waveFormat = originalFormat@;
				PCM.WaveFormat waveFormat2 = detectStart.originalFormat@;
				int num = waveFormat.CompareTo(waveFormat2, comp);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				waveFormat = resampledFormat@;
				waveFormat2 = detectStart.resampledFormat@;
				return waveFormat.CompareTo(waveFormat2, comp);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				PCM.WaveFormat waveFormat = resampledFormat@;
				num = -1640531527 + (waveFormat.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				waveFormat = originalFormat@;
				return -1640531527 + (waveFormat.GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(DetectStart obj, IEqualityComparer comp)
			{
				PCM.WaveFormat waveFormat = originalFormat@;
				PCM.WaveFormat obj2 = obj.originalFormat@;
				if (waveFormat.Equals(obj2, comp))
				{
					waveFormat = resampledFormat@;
					obj2 = obj.resampledFormat@;
					return waveFormat.Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is DetectStart obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(DetectStart obj)
			{
				PCM.WaveFormat waveFormat = originalFormat@;
				if (waveFormat.Equals(obj.originalFormat@))
				{
					waveFormat = resampledFormat@;
					return waveFormat.Equals(obj.resampledFormat@);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is DetectStart)
				{
					return Equals((DetectStart)obj);
				}
				return false;
			}
		}

		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct DetectEnd : IEquatable<DetectEnd>, IStructuralEquatable, IComparable<DetectEnd>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int audioDurationMs@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Resampler.ResampledAudio fullAudio@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly int audioDurationMs
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return audioDurationMs@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly Resampler.ResampledAudio fullAudio
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return fullAudio@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(DetectEnd))]
			public DetectEnd(int audioDurationMs, Resampler.ResampledAudio fullAudio)
			{
				audioDurationMs@ = audioDurationMs;
				fullAudio@ = fullAudio;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<DetectEnd, string>>((PrintfFormat<FSharpFunc<DetectEnd, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<DetectEnd, string>, Unit, string, string, DetectEnd>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(DetectEnd obj)
			{
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				int num = audioDurationMs@;
				int num2 = obj.audioDurationMs@;
				int num3 = ((num > num2) ? 1 : 0) - ((num < num2) ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				Resampler.ResampledAudio resampledAudio = fullAudio@;
				Resampler.ResampledAudio resampledAudio2 = obj.fullAudio@;
				return resampledAudio.CompareTo(resampledAudio2, genericComparer);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((DetectEnd)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				DetectEnd detectEnd = (DetectEnd)obj;
				int num = audioDurationMs@;
				int num2 = detectEnd.audioDurationMs@;
				int num3 = ((num > num2) ? 1 : 0) - ((num < num2) ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				Resampler.ResampledAudio resampledAudio = fullAudio@;
				Resampler.ResampledAudio resampledAudio2 = detectEnd.fullAudio@;
				return resampledAudio.CompareTo(resampledAudio2, comp);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				Resampler.ResampledAudio resampledAudio = fullAudio@;
				num = -1640531527 + (resampledAudio.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				return -1640531527 + (audioDurationMs@ + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(DetectEnd obj, IEqualityComparer comp)
			{
				if (audioDurationMs@ == obj.audioDurationMs@)
				{
					Resampler.ResampledAudio resampledAudio = fullAudio@;
					Resampler.ResampledAudio obj2 = obj.fullAudio@;
					return resampledAudio.Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is DetectEnd obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(DetectEnd obj)
			{
				if (audioDurationMs@ == obj.audioDurationMs@)
				{
					Resampler.ResampledAudio resampledAudio = fullAudio@;
					return resampledAudio.Equals(obj.fullAudio@);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is DetectEnd)
				{
					return Equals((DetectEnd)obj);
				}
				return false;
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
		[Struct]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct DetectAction : IEquatable<DetectAction>, IStructuralEquatable, IComparable<DetectAction>, IComparable, IStructuralComparable
		{
			public static class Tags
			{
				public const int DetectStart = 0;

				public const int DetectEnd = 1;
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[field: DebuggerNonUserCode]
			public int Tag
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public bool IsDetectStart
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 0;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public bool IsDetectEnd
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			[field: DebuggerNonUserCode]
			public DetectStart detectStart
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			[field: DebuggerNonUserCode]
			public DetectEnd detectEnd
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static DetectAction NewDetectStart(DetectStart _detectStart)
			{
				DetectAction result = default(DetectAction);
				result.detectStart = _detectStart;
				return result;
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static DetectAction NewDetectEnd(DetectEnd _detectEnd)
			{
				DetectAction result = default(DetectAction);
				result._tag = 1;
				result.detectEnd = _detectEnd;
				return result;
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<DetectAction, string>>((PrintfFormat<FSharpFunc<DetectAction, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<DetectAction, string>, Unit, string, string, string>("%+0.8A")).Invoke(this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<DetectAction, string>>((PrintfFormat<FSharpFunc<DetectAction, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<DetectAction, string>, Unit, string, string, DetectAction>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(DetectAction obj)
			{
				int tag = _tag;
				int tag2 = obj._tag;
				if (tag == tag2)
				{
					IComparer genericComparer;
					if (Tag == 0)
					{
						genericComparer = LanguagePrimitives.GenericComparer;
						DetectStart detectStart = this.detectStart;
						DetectStart detectStart2 = obj.detectStart;
						return detectStart.CompareTo(detectStart2, genericComparer);
					}
					genericComparer = LanguagePrimitives.GenericComparer;
					DetectEnd detectEnd = this.detectEnd;
					DetectEnd detectEnd2 = obj.detectEnd;
					return detectEnd.CompareTo(detectEnd2, genericComparer);
				}
				return tag - tag2;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((DetectAction)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				DetectAction detectAction = (DetectAction)obj;
				int tag = _tag;
				int tag2 = detectAction._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						DetectStart detectStart = this.detectStart;
						DetectStart detectStart2 = detectAction.detectStart;
						return detectStart.CompareTo(detectStart2, comp);
					}
					DetectEnd detectEnd = this.detectEnd;
					DetectEnd detectEnd2 = detectAction.detectEnd;
					return detectEnd.CompareTo(detectEnd2, comp);
				}
				return tag - tag2;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				if (Tag == 0)
				{
					num = 0;
					DetectStart detectStart = this.detectStart;
					return -1640531527 + (detectStart.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				}
				num = 1;
				DetectEnd detectEnd = this.detectEnd;
				return -1640531527 + (detectEnd.GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(DetectAction obj, IEqualityComparer comp)
			{
				int tag = _tag;
				int tag2 = obj._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						DetectStart detectStart = this.detectStart;
						DetectStart obj2 = obj.detectStart;
						return detectStart.Equals(obj2, comp);
					}
					DetectEnd detectEnd = this.detectEnd;
					DetectEnd obj3 = obj.detectEnd;
					return detectEnd.Equals(obj3, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is DetectAction obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(DetectAction obj)
			{
				int tag = _tag;
				int tag2 = obj._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						DetectStart detectStart = this.detectStart;
						return detectStart.Equals(obj.detectStart);
					}
					DetectEnd detectEnd = this.detectEnd;
					return detectEnd.Equals(obj.detectEnd);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is DetectAction)
				{
					return Equals((DetectAction)obj);
				}
				return false;
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class VoiceDetector<State> : IEquatable<VoiceDetector<State>>, IStructuralEquatable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<State>> channel@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<State>> channel
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return channel@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(VoiceDetector<>))]
			public VoiceDetector(Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<State>> channel)
			{
				channel@ = channel;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<VoiceDetector<VoiceDetector<State>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<VoiceDetector<State>, string>>((PrintfFormat<FSharpFunc<VoiceDetector<State>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<VoiceDetector<FSharpFunc<VoiceDetector<State>, string>>, string>, Unit, string, string, VoiceDetector<FSharpFunc<VoiceDetector<State>, string>>>("%+A"))).Invoke((VoiceDetector<VoiceDetector<State>>)(object)this);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					return -1640531527 + (channel@.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(VoiceDetector<State> obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj != null)
					{
						Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<State>> channel = channel@;
						Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<State>> obj2 = obj.channel@;
						return channel.Equals(obj2, comp);
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is VoiceDetector<State> obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(VoiceDetector<State> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						return channel@.Equals(obj.channel@);
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is VoiceDetector<State> obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class VoiceDetectorArgs<State>
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int minSilenceDurationMs@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<State, FSharpValueOption<float>> forcedProbability@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal float startThreshold@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal float endThreshold@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<PCM.Samples, FSharpFunc<int, float>> detectSpeech@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpFunc<State, FSharpFunc<DetectAction, Unit>> onVoiceDetected@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public int minSilenceDurationMs
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return minSilenceDurationMs@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<State, FSharpValueOption<float>> forcedProbability
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return forcedProbability@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public float startThreshold
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return startThreshold@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public float endThreshold
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return endThreshold@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<PCM.Samples, FSharpFunc<int, float>> detectSpeech
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return detectSpeech@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpFunc<State, FSharpFunc<DetectAction, Unit>> onVoiceDetected
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return onVoiceDetected@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(VoiceDetectorArgs<>))]
			public VoiceDetectorArgs(int minSilenceDurationMs, FSharpFunc<State, FSharpValueOption<float>> forcedProbability, float startThreshold, float endThreshold, FSharpFunc<PCM.Samples, FSharpFunc<int, float>> detectSpeech, FSharpFunc<State, FSharpFunc<DetectAction, Unit>> onVoiceDetected)
			{
				minSilenceDurationMs@ = minSilenceDurationMs;
				forcedProbability@ = forcedProbability;
				startThreshold@ = startThreshold;
				endThreshold@ = endThreshold;
				detectSpeech@ = detectSpeech;
				onVoiceDetected@ = onVoiceDetected;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<VoiceDetectorArgs<VoiceDetectorArgs<State>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<VoiceDetectorArgs<State>, string>>((PrintfFormat<FSharpFunc<VoiceDetectorArgs<State>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<VoiceDetectorArgs<FSharpFunc<VoiceDetectorArgs<State>, string>>, string>, Unit, string, string, VoiceDetectorArgs<FSharpFunc<VoiceDetectorArgs<State>, string>>>("%+A"))).Invoke((VoiceDetectorArgs<VoiceDetectorArgs<State>>)(object)this);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@83-4<a> : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public VoiceDetectorArgs<a> args;

			public float minSilenceSamples;

			public Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel;

			public <>f__AnonymousType2762740774<PooledList<float>, PooledList<float>> samples;

			public FSharpRef<int> currentIndex;

			public FSharpRef<int> endIndex;

			public FSharpRef<bool> voiceDetected;

			public ValueTaskAwaiter<Resampler.ResamplerOutput<a>> awaiter;

			public override void MoveNext()
			{
				//IL_0231: Unknown result type (might be due to invalid IL or missing references)
				//IL_0236: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
						awaiter = channel.reader@.ReadAsync(channel.cancellationToken@).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_0076;
					case 1:
						{
							num = 1;
							goto IL_0076;
						}
						IL_0076:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						Resampler.ResamplerOutput<a> result = awaiter.GetResult();
						Resampler.ResamplerOutput<a> resamplerOutput = result;
						if (resamplerOutput.Tag != 0)
						{
							samples.original.Clear();
							samples.resampled.Clear();
							currentIndex.contents = 0;
							endIndex.contents = 0;
							voiceDetected.contents = false;
							num2 = 1;
						}
						else
						{
							a item = resamplerOutput.item.Item1;
							Resampler.ResampledAudio item2 = resamplerOutput.item.Item2;
							flag2 = false;
							flag2 = flag2 || flag2;
							try
							{
								ref int contents@ = ref currentIndex.contents@;
								int length@ = item2.original@.samples@.length@;
								contents@ += length@;
								PooledList<float> original = samples.original;
								ArraySegment<float> arraySegment = new ArraySegment<float>(item2.original@.samples@.data@, 0, item2.original@.samples@.length@);
								int num3 = 0;
								length@ = arraySegment.Count - 1;
								if (length@ >= num3)
								{
									do
									{
										original.Add(arraySegment[num3]);
										resumptionPoint = 0;
										num3++;
									}
									while (num3 != length@ + 1);
								}
								original = samples.resampled;
								arraySegment = new ArraySegment<float>(item2.resampled@.samples@.data@, 0, item2.resampled@.samples@.length@);
								num3 = 0;
								length@ = arraySegment.Count - 1;
								if (length@ >= num3)
								{
									do
									{
										original.Add(arraySegment[num3]);
										resumptionPoint = 0;
										num3++;
									}
									while (num3 != length@ + 1);
								}
								FSharpValueOption<float> val = args.forcedProbability@.Invoke(item);
								float num4 = ((val.Tag == 0) ? FSharpFunc<PCM.Samples, int>.InvokeFast<float>(args.detectSpeech@, item2.resampled@.samples@, item2.resampled@.samples@.length@) : val.Item);
								int num5;
								if (num4 >= args.startThreshold@)
								{
									if (endIndex.contents != 0)
									{
										endIndex.contents = 0;
										if (1 == 0)
										{
											num5 = 0;
											goto IL_05c7;
										}
									}
									if (!voiceDetected.contents)
									{
										voiceDetected.contents = true;
										FSharpFunc<DetectAction, Unit> val2 = args.onVoiceDetected@.Invoke(item);
										DetectStart detectStart = new DetectStart(item2.original@.format@, item2.resampled@.format@);
										val2.Invoke(DetectAction.NewDetectStart(detectStart));
										num5 = 1;
									}
									else
									{
										num5 = 1;
									}
								}
								else if (num4 < args.endThreshold@ && voiceDetected.contents)
								{
									if (endIndex.contents == 0)
									{
										endIndex.contents = currentIndex.contents;
										if (1 == 0)
										{
											num5 = 0;
											goto IL_05c7;
										}
									}
									if ((float)(currentIndex.contents - endIndex.contents) >= minSilenceSamples)
									{
										float[] array = ArrayPool<float>.Shared.Rent(samples.original.Count);
										original = samples.original;
										length@ = samples.original.Count;
										int num6 = 0;
										num3 = length@ - 1;
										if (num3 >= num6)
										{
											do
											{
												array[num6] = original[num6];
												num6++;
											}
											while (num6 != num3 + 1);
										}
										float[] data = array;
										float[] array2 = ArrayPool<float>.Shared.Rent(samples.resampled.Count);
										original = samples.resampled;
										length@ = samples.resampled.Count;
										num6 = 0;
										num3 = length@ - 1;
										if (num3 >= num6)
										{
											do
											{
												array2[num6] = original[num6];
												num6++;
											}
											while (num6 != num3 + 1);
										}
										array = array2;
										PCM.WaveFormat format@ = item2.original@.format@;
										Resampler.ResampledAudio fullAudio = new Resampler.ResampledAudio(new Resampler.AudioFrame(new PCM.Samples(data, samples.original.Count), format@), new Resampler.AudioFrame(format: item2.resampled@.format@, samples: new PCM.Samples(array, samples.resampled.Count)));
										endIndex.contents = 0;
										voiceDetected.contents = false;
										FSharpFunc<DetectAction, Unit> val2 = args.onVoiceDetected@.Invoke(item);
										format@ = fullAudio.original@.format@;
										length@ = samples.original.Count;
										DetectEnd detectEnd = new DetectEnd((int)((double)length@ / (double)format@.sampleRate@ / (double)format@.channels@ * 1000.0), fullAudio);
										val2.Invoke(DetectAction.NewDetectEnd(detectEnd));
										samples.original.Clear();
										samples.resampled.Clear();
										num5 = 1;
									}
									else
									{
										num5 = 1;
									}
								}
								else if (!voiceDetected.contents)
								{
									samples.original.Clear();
									samples.resampled.Clear();
									num5 = 1;
								}
								else
								{
									num5 = 1;
								}
								goto IL_05c7;
								IL_05c7:
								bool flag3 = (byte)num5 != 0;
								flag2 = flag3;
							}
							catch (object obj)
							{
								ex = (Exception)obj;
								compensation@1(item2, null);
								bool flag3 = true;
								throw;
							}
							if (flag2)
							{
								compensation@1(item2, null);
								bool flag3 = true;
							}
							num2 = (flag2 ? 1 : 0);
						}
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						ValueTaskAwaiter<Resampler.ResamplerOutput<a>> valueTaskAwaiter = default(ValueTaskAwaiter<Resampler.ResamplerOutput<a>>);
						awaiter = valueTaskAwaiter;
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
				}
				catch (object obj2)
				{
					ex = (Exception)obj2;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@83-5<a> : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public VoiceDetectorArgs<a> args;

			public float minSilenceSamples;

			public Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel;

			public <>f__AnonymousType2762740774<PooledList<float>, PooledList<float>> samples;

			public FSharpRef<int> currentIndex;

			public FSharpRef<int> endIndex;

			public FSharpRef<bool> voiceDetected;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					bool flag3;
					int num2;
					int num3;
					bool flag4;
					switch (resumptionPoint)
					{
					default:
						flag = true;
						goto IL_00f9;
					case 1:
						{
							num = 1;
							goto IL_0093;
						}
						IL_00f9:
						if (flag)
						{
							awaiter = program@7-2(args, minSilenceSamples, channel, samples, currentIndex, endIndex, voiceDetected, null).GetAwaiter();
							flag2 = true;
							if (awaiter.IsCompleted)
							{
								goto IL_009d;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_0093;
						}
						if (flag)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
						break;
						IL_0093:
						flag3 = (byte)num != 0;
						flag2 = flag3;
						goto IL_009d;
						IL_009d:
						if (flag2)
						{
							awaiter.GetResult();
							_ = null;
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						if (num2 != 0)
						{
							awaiter = default(ValueTaskAwaiter<Unit>);
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						flag4 = (byte)num3 != 0;
						flag = flag4;
						resumptionPoint = 0;
						goto IL_00f9;
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class consumer@83-3<a> : FSharpFunc<Unit, ValueTask<Unit>>
		{
			public VoiceDetectorArgs<a> args;

			public float minSilenceSamples;

			public Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel;

			public <>f__AnonymousType2762740774<PooledList<float>, PooledList<float>> samples;

			public FSharpRef<int> currentIndex;

			public FSharpRef<int> endIndex;

			public FSharpRef<bool> voiceDetected;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal consumer@83-3(VoiceDetectorArgs<a> args, float minSilenceSamples, Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel, <>f__AnonymousType2762740774<PooledList<float>, PooledList<float>> samples, FSharpRef<int> currentIndex, FSharpRef<int> endIndex, FSharpRef<bool> voiceDetected)
			{
				this.args = args;
				this.minSilenceSamples = minSilenceSamples;
				this.channel = channel;
				this.samples = samples;
				this.currentIndex = currentIndex;
				this.endIndex = endIndex;
				this.voiceDetected = voiceDetected;
			}

			public override ValueTask<Unit> Invoke(Unit unitVar0)
			{
				consumer@83-5<a> stateMachine = default(consumer@83-5<a>);
				stateMachine.args = args;
				stateMachine.minSilenceSamples = minSilenceSamples;
				stateMachine.channel = channel;
				stateMachine.samples = samples;
				stateMachine.currentIndex = currentIndex;
				stateMachine.endIndex = endIndex;
				stateMachine.voiceDetected = voiceDetected;
				stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct VoiceDetector@147-2 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				//IL_012b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0130: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex3 = default(Exception);
				Exception ex = default(Exception);
				try
				{
					bool flag2 = default(bool);
					bool flag = default(bool);
					switch (resumptionPoint)
					{
					default:
						flag = false;
						flag2 = false;
						ex = null;
						flag = flag || flag;
						break;
					case 1:
						break;
					}
					try
					{
						bool flag3;
						int num;
						bool flag4;
						switch (resumptionPoint)
						{
						default:
							awaiter = program.Invoke((Unit)null).GetAwaiter();
							flag3 = true;
							if (awaiter.IsCompleted)
							{
								break;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_008c;
						case 1:
							{
								num = 1;
								goto IL_008c;
							}
							IL_008c:
							flag4 = (byte)num != 0;
							flag3 = flag4;
							break;
						}
						int num2;
						if (flag3)
						{
							awaiter.GetResult();
							_ = null;
							FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewOk((Unit)null);
							ValueTask valueTask = channel.writer@.WriteAsync(item, channel.cancellationToken@);
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						int num3;
						if (num2 != 0)
						{
							ValueTaskAwaiter<Unit> valueTaskAwaiter = default(ValueTaskAwaiter<Unit>);
							awaiter = valueTaskAwaiter;
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						bool flag5 = (byte)num3 != 0;
						flag = flag5;
					}
					catch (object obj)
					{
						Exception ex2 = (Exception)obj;
						flag2 = true;
						ex = ex2;
					}
					int num4;
					if (flag2)
					{
						Exception ex2 = ex;
						FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewError(ex2);
						ValueTask valueTask = channel.writer@.WriteAsync(item, channel.cancellationToken@);
						num4 = 1;
					}
					else
					{
						num4 = (flag ? 1 : 0);
					}
					if (num4 != 0)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
				}
				catch (object obj2)
				{
					ex = (Exception)obj2;
					ex3 = ex;
				}
				ex = ex3;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class VoiceDetector@147-3
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, ValueTask<Unit>> program;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel;

			public VoiceDetector@147-3(FSharpFunc<Unit, ValueTask<Unit>> program, Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel)
			{
				this.program = program;
				this.channel = channel;
				base..ctor();
			}

			internal ValueTask<Unit> Invoke()
			{
				return thread@12-4(program, channel, null);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct VoiceDetector@147-1 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public CancellationToken cancellationToken;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public ValueTaskAwaiter<FSharpResult<Unit, Exception>> awaiter;

			public override void MoveNext()
			{
				//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: 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)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
					{
						Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel = Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>>(cancellationToken);
						Task<ValueTask<Unit>> task = System.Threading.Tasks.Task.Run((Func<ValueTask<Unit>>)new VoiceDetector@147-3(program, channel).Invoke, cancellationToken);
						awaiter = channel.reader@.ReadAsync(channel.cancellationToken@).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_009d;
					}
					case 1:
						{
							num = 1;
							goto IL_009d;
						}
						IL_009d:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						FSharpResult<Unit, Exception> result = awaiter.GetResult();
						FSharpResult<Unit, Exception> val = result;
						if (val.Tag != 0)
						{
							throw val.ErrorValue;
						}
						_ = val.ResultValue;
						Data.Result = null;
						num2 = 1;
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						ValueTaskAwaiter<FSharpResult<Unit, Exception>> valueTaskAwaiter = default(ValueTaskAwaiter<FSharpResult<Unit, Exception>>);
						awaiter = valueTaskAwaiter;
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class VoiceDetector@147-4 : FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public CancellationToken cancellationToken;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal VoiceDetector@147-4(CancellationToken cancellationToken)
			{
				this.cancellationToken = cancellationToken;
			}

			public override Unit Invoke(FSharpFunc<Unit, ValueTask<Unit>> x)
			{
				ValueTask<Unit> valueTask = func1@1-1(cancellationToken, x);
				return null;
			}
		}

		[Serializable]
		internal sealed class VoiceDetector@147 : FSharpFunc<CancellationToken, FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>>
		{
			internal static readonly VoiceDetector@147 @_instance = new VoiceDetector@147();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal VoiceDetector@147()
			{
			}

			public override FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit> Invoke(CancellationToken cancellationToken)
			{
				return new VoiceDetector@147-4(cancellationToken);
			}
		}

		[Serializable]
		internal sealed class writeDetector@151<a> : FSharpFunc<Resampler.ResamplerOutput<a>, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal writeDetector@151(Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel)
			{
				((FSharpFunc<Resampler.ResamplerOutput<Resampler.ResamplerOutput<a>>, Unit>)(object)this)..ctor();
				this.channel = channel;
			}

			public override Unit Invoke(Resampler.ResamplerOutput<a> element)
			{
				ValueTask valueTask = channel.writer@.WriteAsync(element, channel.cancellationToken@);
				return null;
			}
		}

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal const int SamplingRate = 16000;

		[CompilerGenerated]
		internal static void compensation@1(Resampler.ResampledAudio currentAudio, Unit unitVar)
		{
			ArrayPool<float>.Shared.Return(currentAudio.original@.samples@.data@);
			ArrayPool<float>.Shared.Return(currentAudio.resampled@.samples@.data@);
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> program@7-2<a>(VoiceDetectorArgs<a> args, float minSilenceSamples, Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel, <>f__AnonymousType2762740774<PooledList<float>, PooledList<float>> samples, FSharpRef<int> currentIndex, FSharpRef<int> endIndex, FSharpRef<bool> voiceDetected, Unit unitVar0)
		{
			consumer@83-4<a> stateMachine = default(consumer@83-4<a>);
			stateMachine.args = args;
			stateMachine.minSilenceSamples = minSilenceSamples;
			stateMachine.channel = channel;
			stateMachine.samples = samples;
			stateMachine.currentIndex = currentIndex;
			stateMachine.endIndex = endIndex;
			stateMachine.voiceDetected = voiceDetected;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> thread@12-4(FSharpFunc<Unit, ValueTask<Unit>> program, Mirage.Core.Task.Channel.Channel<FSharpResult<Unit, Exception>> channel, Unit unitVar0)
		{
			VoiceDetector@147-2 stateMachine = default(VoiceDetector@147-2);
			stateMachine.program = program;
			stateMachine.channel = channel;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> func1@1-1(CancellationToken cancellationToken, FSharpFunc<Unit, ValueTask<Unit>> program)
		{
			VoiceDetector@147-1 stateMachine = default(VoiceDetector@147-1);
			stateMachine.cancellationToken = cancellationToken;
			stateMachine.program = program;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		public static VoiceDetector<a> VoiceDetector<a>(VoiceDetectorArgs<a> args)
		{
			float minSilenceSamples = 16000f * (float)args.minSilenceDurationMs@ / 1000f;
			Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel = Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>>(CancellationToken.None);
			var samples = new
			{
				original = new PooledList<float>((ClearMode)2),
				resampled = new PooledList<float>((ClearMode)2)
			};
			FSharpRef<int> currentIndex = new FSharpRef<int>(0);
			FSharpRef<int> endIndex = new FSharpRef<int>(0);
			FSharpRef<bool> voiceDetected = new FSharpRef<bool>(false);
			FSharpFunc<Unit, ValueTask<Unit>> val = new consumer@83-3<a>(args, minSilenceSamples, channel, samples, currentIndex, endIndex, voiceDetected);
			FSharpFunc<CancellationToken, FSharpFunc<Unit, ValueTask<Unit>>>.InvokeFast<Unit>((FSharpFunc<CancellationToken, FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>>)VoiceDetector@147.@_instance, CancellationToken.None, val);
			return new VoiceDetector<a>(channel);
		}

		public static FSharpFunc<Resampler.ResamplerOutput<a>, Unit> writeDetector<a>(VoiceDetector<a> detector)
		{
			Mirage.Core.Task.Channel.Channel<Resampler.ResamplerOutput<a>> channel@ = detector.channel@;
			return new writeDetector@151<a>(channel@);
		}
	}
}
namespace <StartupCode$Mirage-Core>.$Mirage.Core.Audio.Microphone
{
	internal static class Detection
	{
	}
}
namespace Mirage.Core.Audio.Microphone
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Resampler
	{
		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct AudioFrame : IEquatable<AudioFrame>, IStructuralEquatable, IComparable<AudioFrame>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PCM.Samples samples@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PCM.WaveFormat format@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly PCM.Samples samples
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return samples@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly PCM.WaveFormat format
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return format@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AudioFrame))]
			public AudioFrame(PCM.Samples samples, PCM.WaveFormat format)
			{
				samples@ = samples;
				format@ = format;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<AudioFrame, string>>((PrintfFormat<FSharpFunc<AudioFrame, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<AudioFrame, string>, Unit, string, string, AudioFrame>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(AudioFrame obj)
			{
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				PCM.Samples samples = samples@;
				PCM.Samples samples2 = obj.samples@;
				int num = samples.CompareTo(samples2, genericComparer);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				PCM.WaveFormat waveFormat = format@;
				PCM.WaveFormat waveFormat2 = obj.format@;
				return waveFormat.CompareTo(waveFormat2, genericComparer);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((AudioFrame)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				AudioFrame audioFrame = (AudioFrame)obj;
				PCM.Samples samples = samples@;
				PCM.Samples samples2 = audioFrame.samples@;
				int num = samples.CompareTo(samples2, comp);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				PCM.WaveFormat waveFormat = format@;
				PCM.WaveFormat waveFormat2 = audioFrame.format@;
				return waveFormat.CompareTo(waveFormat2, comp);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				PCM.WaveFormat waveFormat = format@;
				num = -1640531527 + (waveFormat.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				PCM.Samples samples = samples@;
				return -1640531527 + (samples.GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(AudioFrame obj, IEqualityComparer comp)
			{
				PCM.Samples samples = samples@;
				PCM.Samples obj2 = obj.samples@;
				if (samples.Equals(obj2, comp))
				{
					PCM.WaveFormat waveFormat = format@;
					PCM.WaveFormat obj3 = obj.format@;
					return waveFormat.Equals(obj3, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is AudioFrame obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(AudioFrame obj)
			{
				PCM.Samples samples = samples@;
				if (samples.Equals(obj.samples@))
				{
					PCM.WaveFormat waveFormat = format@;
					return waveFormat.Equals(obj.format@);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is AudioFrame)
				{
					return Equals((AudioFrame)obj);
				}
				return false;
			}
		}

		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct ResampledAudio : IEquatable<ResampledAudio>, IStructuralEquatable, IComparable<ResampledAudio>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal AudioFrame original@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal AudioFrame resampled@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly AudioFrame original
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return original@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly AudioFrame resampled
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return resampled@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ResampledAudio))]
			public ResampledAudio(AudioFrame original, AudioFrame resampled)
			{
				original@ = original;
				resampled@ = resampled;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ResampledAudio, string>>((PrintfFormat<FSharpFunc<ResampledAudio, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ResampledAudio, string>, Unit, string, string, ResampledAudio>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(ResampledAudio obj)
			{
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				AudioFrame audioFrame = original@;
				AudioFrame audioFrame2 = obj.original@;
				int num = audioFrame.CompareTo(audioFrame2, genericComparer);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				audioFrame = resampled@;
				audioFrame2 = obj.resampled@;
				return audioFrame.CompareTo(audioFrame2, genericComparer);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((ResampledAudio)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				ResampledAudio resampledAudio = (ResampledAudio)obj;
				AudioFrame audioFrame = original@;
				AudioFrame audioFrame2 = resampledAudio.original@;
				int num = audioFrame.CompareTo(audioFrame2, comp);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				audioFrame = resampled@;
				audioFrame2 = resampledAudio.resampled@;
				return audioFrame.CompareTo(audioFrame2, comp);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				AudioFrame audioFrame = resampled@;
				num = -1640531527 + (audioFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
				audioFrame = original@;
				return -1640531527 + (audioFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(ResampledAudio obj, IEqualityComparer comp)
			{
				AudioFrame audioFrame = original@;
				AudioFrame obj2 = obj.original@;
				if (audioFrame.Equals(obj2, comp))
				{
					audioFrame = resampled@;
					obj2 = obj.resampled@;
					return audioFrame.Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is ResampledAudio obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(ResampledAudio obj)
			{
				AudioFrame audioFrame = original@;
				if (audioFrame.Equals(obj.original@))
				{
					audioFrame = resampled@;
					return audioFrame.Equals(obj.resampled@);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is ResampledAudio)
				{
					return Equals((ResampledAudio)obj);
				}
				return false;
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
		[Struct]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct ResamplerInput<State> : IEquatable<ResamplerInput<State>>, IStructuralEquatable, IComparable<ResamplerInput<State>>, IComparable, IStructuralComparable
		{
			public static class Tags
			{
				public const int ResamplerInput = 0;

				public const int Reset = 1;
			}

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal (State, AudioFrame) item;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public int Tag
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public bool IsResamplerInput
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 0;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public static ResamplerInput<State> Reset
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return new ResamplerInput<State>(1);
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public bool IsReset
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public (State, AudioFrame) Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static ResamplerInput<State> NewResamplerInput((State, AudioFrame) item)
			{
				ResamplerInput<State> result = default(ResamplerInput<State>);
				result.item = item;
				return result;
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ResamplerInput<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal ResamplerInput(int _tag)
			{
				this._tag = _tag;
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ((FSharpFunc<ResamplerInput<ResamplerInput<State>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ResamplerInput<State>, string>>((PrintfFormat<FSharpFunc<ResamplerInput<State>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ResamplerInput<FSharpFunc<ResamplerInput<State>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((ResamplerInput<ResamplerInput<State>>)this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<ResamplerInput<ResamplerInput<State>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ResamplerInput<State>, string>>((PrintfFormat<FSharpFunc<ResamplerInput<State>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ResamplerInput<FSharpFunc<ResamplerInput<State>, string>>, string>, Unit, string, string, ResamplerInput<FSharpFunc<ResamplerInput<State>, string>>>("%+A"))).Invoke((ResamplerInput<ResamplerInput<State>>)this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(ResamplerInput<State> obj)
			{
				int tag = _tag;
				int tag2 = obj._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						(State, AudioFrame) tuple = item;
						(State, AudioFrame) tuple2 = obj.item;
						return HashCompare.GenericComparisonWithComparerIntrinsic<(State, AudioFrame)>(genericComparer, tuple, tuple2);
					}
					return 0;
				}
				return tag - tag2;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((ResamplerInput<State>)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				ResamplerInput<State> resamplerInput = (ResamplerInput<State>)obj;
				int tag = _tag;
				int tag2 = resamplerInput._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						(State, AudioFrame) tuple = item;
						(State, AudioFrame) tuple2 = resamplerInput.item;
						return HashCompare.GenericComparisonWithComparerIntrinsic<(State, AudioFrame)>(comp, tuple, tuple2);
					}
					return 0;
				}
				return tag - tag2;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				if (Tag == 0)
				{
					num = 0;
					(State, AudioFrame) tuple = item;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<(State, AudioFrame)>(comp, tuple) + ((num << 6) + (num >> 2)));
				}
				return _tag;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(ResamplerInput<State> obj, IEqualityComparer comp)
			{
				int tag = _tag;
				int tag2 = obj._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						(State, AudioFrame) tuple = item;
						(State, AudioFrame) tuple2 = obj.item;
						return HashCompare.GenericEqualityWithComparerIntrinsic<(State, AudioFrame)>(comp, tuple, tuple2);
					}
					return true;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is ResamplerInput<State> obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(ResamplerInput<State> obj)
			{
				int tag = _tag;
				int tag2 = obj._tag;
				if (tag == tag2)
				{
					if (Tag == 0)
					{
						(State, AudioFrame) tuple = item;
						(State, AudioFrame) tuple2 = obj.item;
						return HashCompare.GenericEqualityERIntrinsic<(State, AudioFrame)>(tuple, tuple2);
					}
					return true;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is ResamplerInput<State>)
				{
					return Equals((ResamplerInput<State>)obj);
				}
				return false;
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
		[Struct]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct ResamplerOutput<State> : IEquatable<ResamplerOutput<State>>, IStructuralEquatable, IComparable<ResamplerOutput<State>>, ICompar

Mirage.dll

Decompiled 3 days ago
using System;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$Mirage>;
using <StartupCode$Mirage>.$Mirage.Domain;
using <StartupCode$Mirage>.$Mirage.Domain.Audio;
using <StartupCode$Mirage>.$Mirage.Hook;
using <StartupCode$Mirage>.$Mirage.Unity;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Concentus.Oggfile;
using Dissonance;
using Dissonance.Audio.Capture;
using Dissonance.Audio.Playback;
using FSharpPlus;
using FSharpPlus.Control;
using FSharpPlus.Internals;
using GameNetcodeStuff;
using IcedTasks;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;
using Mirage;
using Mirage.Core.Audio;
using Mirage.Core.Audio.Microphone;
using Mirage.Core.Audio.Opus;
using Mirage.Core.Task;
using Mirage.Domain;
using Mirage.Domain.Audio;
using Mirage.Hook;
using Mirage.NetcodePatcher;
using Mirage.Unity;
using NAudio.Wave;
using Newtonsoft.Json;
using On;
using On.Dissonance;
using On.GameNetcodeStuff;
using On.Unity.Netcode;
using OpusDotNet;
using Silero;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("LethalConfig")]
[assembly: IgnoresAccessChecksTo("LethalSettings")]
[assembly: IgnoresAccessChecksTo("NAudio.Core")]
[assembly: IgnoresAccessChecksTo("NAudio")]
[assembly: IgnoresAccessChecksTo("NAudio.WinMM")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("Mirage")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+c5b8afd03d0e99913c60b7097d7f3f7c0c448c13")]
[assembly: AssemblyProduct("Mirage")]
[assembly: AssemblyTitle("Mirage")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Mirage
{
	[Serializable]
	[BepInPlugin("qwbarch.Mirage", "Mirage", "1.15.5")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public void Awake()
		{
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			CancellationToken none = CancellationToken.None;
			FSharpFunc<Unit, ValueTask<Unit>> program = new $Plugin.Awake@38-3(executingAssembly);
			ValueTask<Unit> valueTask = $Plugin.func1@1-7(none, program);
		}
	}
}
namespace <StartupCode$Mirage>
{
	internal static class $Plugin
	{
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct Awake@38-1 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public Channel<FSharpResult<Unit, Exception>> channel;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				//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_0147: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
					break;
				}
				Exception ex2 = default(Exception);
				try
				{
					bool flag2 = default(bool);
					bool flag = default(bool);
					switch (resumptionPoint)
					{
					default:
						flag = false;
						flag2 = false;
						ex2 = null;
						flag = flag || flag;
						break;
					case 1:
						break;
					}
					try
					{
						bool flag3;
						int num;
						bool flag4;
						switch (resumptionPoint)
						{
						default:
							awaiter = program.Invoke((Unit)null).GetAwaiter();
							flag3 = true;
							if (awaiter.IsCompleted)
							{
								break;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_008e;
						case 1:
							{
								num = 1;
								goto IL_008e;
							}
							IL_008e:
							flag4 = (byte)num != 0;
							flag3 = flag4;
							break;
						}
						int num2;
						if (flag3)
						{
							awaiter.GetResult();
							_ = null;
							FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewOk((Unit)null);
							ValueTask valueTask = channel.writer.WriteAsync(item, channel.cancellationToken);
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						int num3;
						if (num2 != 0)
						{
							awaiter = default(ValueTaskAwaiter<Unit>);
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						bool flag5 = (byte)num3 != 0;
						flag = flag5;
					}
					catch (object obj)
					{
						Exception ex3 = (Exception)obj;
						flag2 = true;
						ex2 = ex3;
					}
					int num4;
					if (flag2)
					{
						Exception ex3 = ex2;
						FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewError(ex3);
						ValueTask valueTask = channel.writer.WriteAsync(item, channel.cancellationToken);
						num4 = 1;
					}
					else
					{
						num4 = (flag ? 1 : 0);
					}
					if (num4 != 0)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
				}
				catch (object obj2)
				{
					ex2 = (Exception)obj2;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class Awake@38-2
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, ValueTask<Unit>> program;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Channel<FSharpResult<Unit, Exception>> channel;

			public Awake@38-2(FSharpFunc<Unit, ValueTask<Unit>> program, Channel<FSharpResult<Unit, Exception>> channel)
			{
				this.program = program;
				this.channel = channel;
				base..ctor();
			}

			internal ValueTask<Unit> Invoke()
			{
				return thread@1-9(program, channel, null);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct Awake@38 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public CancellationToken cancellationToken;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public ValueTaskAwaiter<FSharpResult<Unit, Exception>> awaiter;

			public override void MoveNext()
			{
				//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
					{
						Channel<FSharpResult<Unit, Exception>> val = Channel.Channel<FSharpResult<Unit, Exception>>(cancellationToken);
						Task<ValueTask<Unit>> task = Task.Run((Func<ValueTask<Unit>>)new Awake@38-2(program, val).Invoke, cancellationToken);
						awaiter = val.reader.ReadAsync(val.cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_009f;
					}
					case 1:
						{
							num = 1;
							goto IL_009f;
						}
						IL_009f:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						FSharpResult<Unit, Exception> result = awaiter.GetResult();
						FSharpResult<Unit, Exception> val2 = result;
						if (val2.Tag != 0)
						{
							throw val2.ErrorValue;
						}
						_ = val2.ResultValue;
						Data.Result = null;
						num2 = 1;
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						awaiter = default(ValueTaskAwaiter<FSharpResult<Unit, Exception>>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
				}
				catch (object obj)
				{
					ex2 = (Exception)obj;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class Awake@54-5
		{
			internal static void Invoke()
			{
				Mirage.Domain.Setting.Settings settings = Mirage.Domain.Setting.getSettings();
				ValueTask<Unit> valueTask = Mirage.Domain.Audio.Recording.deleteRecordings(settings);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct Awake@38-4 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public Assembly assembly;

			public ValueTaskAwaiter<Mirage.Domain.Setting.Settings> awaiter;

			public unsafe override void MoveNext()
			{
				//IL_01e3: Expected O, but got Ref
				//IL_018e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0193: Unknown result type (might be due to invalid IL or missing references)
				//IL_0195: Unknown result type (might be due to invalid IL or missing references)
				//IL_0213: Expected O, but got Ref
				int resumptionPoint = ResumptionPoint;
				Exception ex = default(Exception);
				switch (resumptionPoint)
				{
				default:
					ex = null;
					break;
				case 1:
					break;
				}
				Exception ex2;
				try
				{
					bool flag;
					int num2;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
					{
						Compatibility.initLobbyCompatibility("Mirage", "1.15.5");
						Compatibility.initGeneralLethalConfig(assembly, Mirage.Domain.Config.localConfig.General@);
						FSharpList<ConfigEntry<bool>> enemyConfigEntries = Mirage.Domain.Config.getEnemyConfigEntries();
						int num;
						if (enemyConfigEntries.TailOrNull == null)
						{
							Mirage.Domain.Logger.logWarning.Invoke("Mirage.Enemies.cfg has not been generated yet. Please host a game to create the file.");
							num = 1;
						}
						else
						{
							Compatibility.initEnemiesLethalConfig(assembly, enemyConfigEntries);
							num = 1;
						}
						if (num != 0)
						{
							Mirage.Domain.Netcode.initNetcodePatcher(assembly);
							DirectoryInfo directoryInfo = System.IO.Directory.CreateDirectory(Mirage.Domain.Directory.mirageDirectory);
							awaiter = Mirage.Domain.Setting.initSettings(Path.Join((ReadOnlySpan<char>)Mirage.Domain.Directory.mirageDirectory, (ReadOnlySpan<char>)"settings.json")).GetAwaiter();
							flag = true;
							if (awaiter.IsCompleted)
							{
								break;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num2 = 0;
							goto IL_00f8;
						}
						goto end_IL_001b;
					}
					case 1:
						{
							num2 = 1;
							goto IL_00f8;
						}
						IL_00f8:
						flag2 = (byte)num2 != 0;
						flag = flag2;
						break;
					}
					int num3;
					if (!flag)
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num3 = 0;
						goto IL_0284;
					}
					Mirage.Domain.Setting.Settings result = awaiter.GetResult();
					Mirage.Domain.Setting.Settings settings = result;
					Mirage.Domain.Logger.logInfo.Invoke("Loaded settings: " + JsonConvert.SerializeObject((object)settings));
					ValueTask<Unit> valueTask = Mirage.Domain.Audio.Recording.deleteRecordings(settings);
					Application.quitting += Awake@54-5.Invoke;
					Array values = Enum.GetValues(typeof(LogCategory));
					IEnumerable<LogCategory> enumerable = SeqModule.Cast<LogCategory>((IEnumerable)values);
					IEnumerator<LogCategory> enumerator = enumerable.GetEnumerator();
					bool flag3 = false;
					flag3 = flag3 || flag3;
					IEnumerator<LogCategory> enumerator2;
					try
					{
						enumerator2 = enumerator;
						bool flag4 = true;
						while (flag4 && enumerator2.MoveNext())
						{
							LogCategory current = enumerator2.Current;
							Logs.SetLogLevel(current, (LogLevel)4);
							bool flag5 = true;
							flag4 = flag5;
							resumptionPoint = 0;
						}
						bool flag6 = flag4;
						flag3 = flag6;
					}
					catch (object obj)
					{
						ex2 = (Exception)obj;
						if (enumerator != null)
						{
							enumerator2 = enumerator;
							((IEnumerator<LogCategory>)(&enumerator2)).Dispose();
						}
						bool flag6 = true;
						throw;
					}
					if (flag3)
					{
						if (enumerator != null)
						{
							enumerator2 = enumerator;
							((IEnumerator<LogCategory>)(&enumerator2)).Dispose();
						}
						bool flag6 = true;
					}
					if (flag3)
					{
						Mirage.Hook.Dissonance.cacheDissonance();
						Mirage.Hook.AudioSpatializer.disableAudioSpatializer();
						Mirage.Hook.Prefab.registerPrefab();
						Mirage.Hook.Config.syncConfig();
						Mirage.Hook.Microphone.readMicrophone(Mirage.Domain.Directory.recordingDirectory);
						Mirage.Hook.MaskedPlayerEnemy.hookMaskedEnemy();
						Mirage.Hook.PlayerControllerB.hookPlayerControllerB();
						num3 = 1;
						goto IL_0284;
					}
					goto end_IL_001b;
					IL_0284:
					if (num3 != 0)
					{
						awaiter = default(ValueTaskAwaiter<Mirage.Domain.Setting.Settings>);
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
					end_IL_001b:;
				}
				catch (object obj2)
				{
					ex2 = (Exception)obj2;
					ex = ex2;
				}
				ex2 = ex;
				if (ex2 != null)
				{
					Data.MethodBuilder.SetException(ex2);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class Awake@38-3 : FSharpFunc<Unit, ValueTask<Unit>>
		{
			public Assembly assembly;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Awake@38-3(Assembly assembly)
			{
				this.assembly = assembly;
			}

			public override ValueTask<Unit> Invoke(Unit unitVar0)
			{
				Awake@38-4 stateMachine = default(Awake@38-4);
				stateMachine.assembly = assembly;
				stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> thread@1-9(FSharpFunc<Unit, ValueTask<Unit>> program, Channel<FSharpResult<Unit, Exception>> channel, Unit unitVar0)
		{
			Awake@38-1 stateMachine = default(Awake@38-1);
			stateMachine.program = program;
			stateMachine.channel = channel;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}

		[CompilerGenerated]
		internal static ValueTask<Unit> func1@1-7(CancellationToken cancellationToken, FSharpFunc<Unit, ValueTask<Unit>> program)
		{
			Awake@38 stateMachine = default(Awake@38);
			stateMachine.cancellationToken = cancellationToken;
			stateMachine.program = program;
			stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
			stateMachine.Data.MethodBuilder.Start(ref stateMachine);
			return stateMachine.Data.MethodBuilder.Task;
		}
	}
}
[CompilationMapping(/*Could not decode attribute arguments.*/)]
public static class AssemblyInfo
{
}
namespace <StartupCode$Mirage>
{
	internal static class $AssemblyInfo
	{
	}
}
namespace Mirage.Hook
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Microphone
	{
		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct ProcessingInput : IEquatable<ProcessingInput>, IStructuralEquatable, IComparable<ProcessingInput>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Samples samples@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal WaveFormat format@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool isReady@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool isPlayerDead@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool pushToTalkEnabled@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool isMuted@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool allowRecordVoice@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly Samples samples
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return samples@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly WaveFormat format
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return format@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool isReady
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return isReady@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool isPlayerDead
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return isPlayerDead@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool pushToTalkEnabled
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return pushToTalkEnabled@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool isMuted
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return isMuted@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool allowRecordVoice
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return allowRecordVoice@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ProcessingInput))]
			public ProcessingInput(Samples samples, WaveFormat format, bool isReady, bool isPlayerDead, bool pushToTalkEnabled, bool isMuted, bool allowRecordVoice)
			{
				//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_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0009: Unknown result type (might be due to invalid IL or missing references)
				samples@ = samples;
				format@ = format;
				isReady@ = isReady;
				isPlayerDead@ = isPlayerDead;
				pushToTalkEnabled@ = pushToTalkEnabled;
				isMuted@ = isMuted;
				allowRecordVoice@ = allowRecordVoice;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ProcessingInput, string>>((PrintfFormat<FSharpFunc<ProcessingInput, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ProcessingInput, string>, Unit, string, string, ProcessingInput>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(ProcessingInput obj)
			{
				//IL_0007: 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_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_0049: Unknown result type (might be due to invalid IL or missing references)
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				Samples val = samples@;
				Samples val2 = obj.samples@;
				int num = ((Samples)(ref val)).CompareTo((object)val2, genericComparer);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				WaveFormat val3 = format@;
				WaveFormat val4 = obj.format@;
				int num2 = ((WaveFormat)(ref val3)).CompareTo((object)val4, genericComparer);
				if (num2 < 0)
				{
					return num2;
				}
				if (num2 > 0)
				{
					return num2;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				bool flag = isReady@;
				bool flag2 = obj.isReady@;
				int num3 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				flag = isPlayerDead@;
				flag2 = obj.isPlayerDead@;
				int num4 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num4 < 0)
				{
					return num4;
				}
				if (num4 > 0)
				{
					return num4;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				flag = pushToTalkEnabled@;
				flag2 = obj.pushToTalkEnabled@;
				int num5 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num5 < 0)
				{
					return num5;
				}
				if (num5 > 0)
				{
					return num5;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				flag = isMuted@;
				flag2 = obj.isMuted@;
				int num6 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num6 < 0)
				{
					return num6;
				}
				if (num6 > 0)
				{
					return num6;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				flag = allowRecordVoice@;
				flag2 = obj.allowRecordVoice@;
				return (flag ? 1 : 0) - (flag2 ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((ProcessingInput)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: 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_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_0044: Unknown result type (might be due to invalid IL or missing references)
				ProcessingInput processingInput = (ProcessingInput)obj;
				Samples val = samples@;
				Samples val2 = processingInput.samples@;
				int num = ((Samples)(ref val)).CompareTo((object)val2, comp);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				WaveFormat val3 = format@;
				WaveFormat val4 = processingInput.format@;
				int num2 = ((WaveFormat)(ref val3)).CompareTo((object)val4, comp);
				if (num2 < 0)
				{
					return num2;
				}
				if (num2 > 0)
				{
					return num2;
				}
				bool flag = isReady@;
				bool flag2 = processingInput.isReady@;
				int num3 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num3 < 0)
				{
					return num3;
				}
				if (num3 > 0)
				{
					return num3;
				}
				flag = isPlayerDead@;
				flag2 = processingInput.isPlayerDead@;
				int num4 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num4 < 0)
				{
					return num4;
				}
				if (num4 > 0)
				{
					return num4;
				}
				flag = pushToTalkEnabled@;
				flag2 = processingInput.pushToTalkEnabled@;
				int num5 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num5 < 0)
				{
					return num5;
				}
				if (num5 > 0)
				{
					return num5;
				}
				flag = isMuted@;
				flag2 = processingInput.isMuted@;
				int num6 = (flag ? 1 : 0) - (flag2 ? 1 : 0);
				if (num6 < 0)
				{
					return num6;
				}
				if (num6 > 0)
				{
					return num6;
				}
				flag = allowRecordVoice@;
				flag2 = processingInput.allowRecordVoice@;
				return (flag ? 1 : 0) - (flag2 ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: Unknown result type (might be due to invalid IL or missing references)
				int num = 0;
				num = -1640531527 + ((allowRecordVoice@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((isMuted@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((pushToTalkEnabled@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((isPlayerDead@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((isReady@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				WaveFormat val = format@;
				num = -1640531527 + (((WaveFormat)(ref val)).GetHashCode(comp) + ((num << 6) + (num >> 2)));
				Samples val2 = samples@;
				return -1640531527 + (((Samples)(ref val2)).GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(ProcessingInput obj, IEqualityComparer comp)
			{
				//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_0009: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_0028: Unknown result type (might be due to invalid IL or missing references)
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				Samples val = samples@;
				Samples val2 = obj.samples@;
				if (((Samples)(ref val)).Equals((object)val2, comp))
				{
					WaveFormat val3 = format@;
					WaveFormat val4 = obj.format@;
					if (((WaveFormat)(ref val3)).Equals((object)val4, comp))
					{
						if (isReady@ == obj.isReady@)
						{
							if (isPlayerDead@ == obj.isPlayerDead@)
							{
								if (pushToTalkEnabled@ == obj.pushToTalkEnabled@)
								{
									if (isMuted@ == obj.isMuted@)
									{
										return allowRecordVoice@ == obj.allowRecordVoice@;
									}
									return false;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is ProcessingInput obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(ProcessingInput obj)
			{
				//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_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				Samples val = samples@;
				if (((Samples)(ref val)).Equals(obj.samples@))
				{
					WaveFormat val2 = format@;
					if (((WaveFormat)(ref val2)).Equals(obj.format@))
					{
						if (isReady@ == obj.isReady@)
						{
							if (isPlayerDead@ == obj.isPlayerDead@)
							{
								if (pushToTalkEnabled@ == obj.pushToTalkEnabled@)
								{
									if (isMuted@ == obj.isMuted@)
									{
										return allowRecordVoice@ == obj.allowRecordVoice@;
									}
									return false;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is ProcessingInput)
				{
					return Equals((ProcessingInput)obj);
				}
				return false;
			}
		}

		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct ProcessingState : IEquatable<ProcessingState>, IStructuralEquatable, IComparable<ProcessingState>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpValueOption<float> forcedProbability@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool allowRecordVoice@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly FSharpValueOption<float> forcedProbability
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return forcedProbability@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool allowRecordVoice
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return allowRecordVoice@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ProcessingState))]
			public ProcessingState(FSharpValueOption<float> forcedProbability, bool allowRecordVoice)
			{
				//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)
				forcedProbability@ = forcedProbability;
				allowRecordVoice@ = allowRecordVoice;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ProcessingState, string>>((PrintfFormat<FSharpFunc<ProcessingState, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ProcessingState, string>, Unit, string, string, ProcessingState>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(ProcessingState obj)
			{
				//IL_0007: 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_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				FSharpValueOption<float> val = forcedProbability@;
				FSharpValueOption<float> val2 = obj.forcedProbability@;
				int num = val.CompareTo((object)val2, genericComparer);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				bool flag = allowRecordVoice@;
				bool flag2 = obj.allowRecordVoice@;
				return (flag ? 1 : 0) - (flag2 ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((ProcessingState)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: 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)
				ProcessingState processingState = (ProcessingState)obj;
				FSharpValueOption<float> val = forcedProbability@;
				FSharpValueOption<float> val2 = processingState.forcedProbability@;
				int num = val.CompareTo((object)val2, comp);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				bool flag = allowRecordVoice@;
				bool flag2 = processingState.allowRecordVoice@;
				return (flag ? 1 : 0) - (flag2 ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				//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)
				int num = 0;
				num = -1640531527 + ((allowRecordVoice@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				FSharpValueOption<float> val = forcedProbability@;
				return -1640531527 + (val.GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(ProcessingState obj, IEqualityComparer comp)
			{
				//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_0009: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				FSharpValueOption<float> val = forcedProbability@;
				FSharpValueOption<float> val2 = obj.forcedProbability@;
				if (val.Equals((object)val2, comp))
				{
					return allowRecordVoice@ == obj.allowRecordVoice@;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is ProcessingState obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(ProcessingState obj)
			{
				//IL_0001: 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)
				if (HashCompare.GenericEqualityERIntrinsic<FSharpValueOption<float>>(forcedProbability@, obj.forcedProbability@))
				{
					return allowRecordVoice@ == obj.allowRecordVoice@;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is ProcessingState)
				{
					return Equals((ProcessingState)obj);
				}
				return false;
			}
		}

		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct BufferInput : IEquatable<BufferInput>, IStructuralEquatable, IComparable<BufferInput>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Samples samples@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int sampleRate@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int channels@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly Samples samples
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return samples@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly int sampleRate
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return sampleRate@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly int channels
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return channels@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferInput))]
			public BufferInput(Samples samples, int sampleRate, int channels)
			{
				//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)
				samples@ = samples;
				sampleRate@ = sampleRate;
				channels@ = channels;
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<BufferInput, string>>((PrintfFormat<FSharpFunc<BufferInput, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<BufferInput, string>, Unit, string, string, BufferInput>("%+A")).Invoke(this);
			}

			[CompilerGenerated]
			public sealed int CompareTo(BufferInput obj)
			{
				//IL_0007: 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_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				IComparer genericComparer = LanguagePrimitives.GenericComparer;
				Samples val = samples@;
				Samples val2 = obj.samples@;
				int num = ((Samples)(ref val)).CompareTo((object)val2, genericComparer);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				int num2 = sampleRate@;
				int num3 = obj.sampleRate@;
				int num4 = ((num2 > num3) ? 1 : 0) - ((num2 < num3) ? 1 : 0);
				if (num4 < 0)
				{
					return num4;
				}
				if (num4 > 0)
				{
					return num4;
				}
				genericComparer = LanguagePrimitives.GenericComparer;
				num2 = channels@;
				num3 = obj.channels@;
				return ((num2 > num3) ? 1 : 0) - ((num2 < num3) ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((BufferInput)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: 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)
				BufferInput bufferInput = (BufferInput)obj;
				Samples val = samples@;
				Samples val2 = bufferInput.samples@;
				int num = ((Samples)(ref val)).CompareTo((object)val2, comp);
				if (num < 0)
				{
					return num;
				}
				if (num > 0)
				{
					return num;
				}
				int num2 = sampleRate@;
				int num3 = bufferInput.sampleRate@;
				int num4 = ((num2 > num3) ? 1 : 0) - ((num2 < num3) ? 1 : 0);
				if (num4 < 0)
				{
					return num4;
				}
				if (num4 > 0)
				{
					return num4;
				}
				num2 = channels@;
				num3 = bufferInput.channels@;
				return ((num2 > num3) ? 1 : 0) - ((num2 < num3) ? 1 : 0);
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				int num = 0;
				num = -1640531527 + (channels@ + ((num << 6) + (num >> 2)));
				num = -1640531527 + (sampleRate@ + ((num << 6) + (num >> 2)));
				Samples val = samples@;
				return -1640531527 + (((Samples)(ref val)).GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public bool Equals(BufferInput obj, IEqualityComparer comp)
			{
				//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_0009: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				Samples val = samples@;
				Samples val2 = obj.samples@;
				if (((Samples)(ref val)).Equals((object)val2, comp))
				{
					if (sampleRate@ == obj.sampleRate@)
					{
						return channels@ == obj.channels@;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is BufferInput obj2)
				{
					return Equals(obj2, comp);
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(BufferInput obj)
			{
				//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_000b: Unknown result type (might be due to invalid IL or missing references)
				Samples val = samples@;
				if (((Samples)(ref val)).Equals(obj.samples@))
				{
					if (sampleRate@ == obj.sampleRate@)
					{
						return channels@ == obj.channels@;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is BufferInput)
				{
					return Equals((BufferInput)obj);
				}
				return false;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@62-8 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public ValueTaskAwaiter<BufferInput> awaiter;

			public override void MoveNext()
			{
				//IL_00b3: 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_010b: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
						awaiter = channel@60-6.reader.ReadAsync(channel@60-6.cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_0074;
					case 1:
						{
							num = 1;
							goto IL_0074;
						}
						IL_0074:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						BufferInput result = awaiter.GetResult();
						BufferInput bufferInput = result;
						StartOfRound instance = StartOfRound.Instance;
						if ((object)instance == null)
						{
							goto IL_0147;
						}
						ProcessingInput processingInput = new ProcessingInput(bufferInput.samples@, new WaveFormat(bufferInput.sampleRate@, bufferInput.channels@), isReady, StartOfRound.Instance.localPlayerController.isPlayerDead, IngamePlayerSettings.Instance.settings.pushToTalk, Dissonance.getDissonance().IsMuted, Mirage.Domain.Setting.getSettings().allowRecordVoice@);
						func2@1(FSharpValueOption<ProcessingInput>.NewValueSome(processingInput));
						num2 = 1;
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						goto IL_0147;
					}
					goto end_IL_0019;
					IL_0147:
					ValueTaskAwaiter<BufferInput> valueTaskAwaiter = default(ValueTaskAwaiter<BufferInput>);
					awaiter = valueTaskAwaiter;
					if (true)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
					end_IL_0019:;
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@62-9 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					bool flag3;
					int num2;
					int num3;
					bool flag4;
					switch (resumptionPoint)
					{
					default:
						flag = true;
						goto IL_00cf;
					case 1:
						{
							num = 1;
							goto IL_0069;
						}
						IL_00cf:
						if (flag)
						{
							awaiter = program@1-9(null).GetAwaiter();
							flag2 = true;
							if (awaiter.IsCompleted)
							{
								goto IL_0073;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_0069;
						}
						if (flag)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
						break;
						IL_0069:
						flag3 = (byte)num != 0;
						flag2 = flag3;
						goto IL_0073;
						IL_0073:
						if (flag2)
						{
							awaiter.GetResult();
							_ = null;
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						if (num2 != 0)
						{
							awaiter = default(ValueTaskAwaiter<Unit>);
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						flag4 = (byte)num3 != 0;
						flag = flag4;
						resumptionPoint = 0;
						goto IL_00cf;
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class consumer@62-7 : FSharpFunc<Unit, ValueTask<Unit>>
		{
			internal static readonly consumer@62-7 @_instance = new consumer@62-7();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal consumer@62-7()
			{
			}

			public override ValueTask<Unit> Invoke(Unit unitVar0)
			{
				consumer@62-9 stateMachine = default(consumer@62-9);
				stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct bufferChannel@78-2 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public Channel<FSharpResult<Unit, Exception>> channel;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				//IL_012b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0130: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex3 = default(Exception);
				Exception ex = default(Exception);
				try
				{
					bool flag2 = default(bool);
					bool flag = default(bool);
					switch (resumptionPoint)
					{
					default:
						flag = false;
						flag2 = false;
						ex = null;
						flag = flag || flag;
						break;
					case 1:
						break;
					}
					try
					{
						bool flag3;
						int num;
						bool flag4;
						switch (resumptionPoint)
						{
						default:
							awaiter = program.Invoke((Unit)null).GetAwaiter();
							flag3 = true;
							if (awaiter.IsCompleted)
							{
								break;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_008c;
						case 1:
							{
								num = 1;
								goto IL_008c;
							}
							IL_008c:
							flag4 = (byte)num != 0;
							flag3 = flag4;
							break;
						}
						int num2;
						if (flag3)
						{
							awaiter.GetResult();
							_ = null;
							FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewOk((Unit)null);
							ValueTask valueTask = channel.writer.WriteAsync(item, channel.cancellationToken);
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						int num3;
						if (num2 != 0)
						{
							ValueTaskAwaiter<Unit> valueTaskAwaiter = default(ValueTaskAwaiter<Unit>);
							awaiter = valueTaskAwaiter;
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						bool flag5 = (byte)num3 != 0;
						flag = flag5;
					}
					catch (object obj)
					{
						Exception ex2 = (Exception)obj;
						flag2 = true;
						ex = ex2;
					}
					int num4;
					if (flag2)
					{
						Exception ex2 = ex;
						FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewError(ex2);
						ValueTask valueTask = channel.writer.WriteAsync(item, channel.cancellationToken);
						num4 = 1;
					}
					else
					{
						num4 = (flag ? 1 : 0);
					}
					if (num4 != 0)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
				}
				catch (object obj2)
				{
					ex = (Exception)obj2;
					ex3 = ex;
				}
				ex = ex3;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class bufferChannel@78-3
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, ValueTask<Unit>> program;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Channel<FSharpResult<Unit, Exception>> channel;

			public bufferChannel@78-3(FSharpFunc<Unit, ValueTask<Unit>> program, Channel<FSharpResult<Unit, Exception>> channel)
			{
				this.program = program;
				this.channel = channel;
				base..ctor();
			}

			internal ValueTask<Unit> Invoke()
			{
				return thread@1-7(program, channel, null);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct bufferChannel@78-1 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public CancellationToken cancellationToken;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public ValueTaskAwaiter<FSharpResult<Unit, Exception>> awaiter;

			public override void MoveNext()
			{
				//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: 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)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
					{
						Channel<FSharpResult<Unit, Exception>> val = Channel.Channel<FSharpResult<Unit, Exception>>(cancellationToken);
						Task<ValueTask<Unit>> task = Task.Run((Func<ValueTask<Unit>>)new bufferChannel@78-3(program, val).Invoke, cancellationToken);
						awaiter = val.reader.ReadAsync(val.cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_009d;
					}
					case 1:
						{
							num = 1;
							goto IL_009d;
						}
						IL_009d:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						FSharpResult<Unit, Exception> result = awaiter.GetResult();
						FSharpResult<Unit, Exception> val2 = result;
						if (val2.Tag != 0)
						{
							throw val2.ErrorValue;
						}
						_ = val2.ResultValue;
						Data.Result = null;
						num2 = 1;
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						ValueTaskAwaiter<FSharpResult<Unit, Exception>> valueTaskAwaiter = default(ValueTaskAwaiter<FSharpResult<Unit, Exception>>);
						awaiter = valueTaskAwaiter;
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class bufferChannel@78-4 : FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public CancellationToken cancellationToken;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal bufferChannel@78-4(CancellationToken cancellationToken)
			{
				this.cancellationToken = cancellationToken;
			}

			public override Unit Invoke(FSharpFunc<Unit, ValueTask<Unit>> x)
			{
				ValueTask<Unit> valueTask = func1@1-5(cancellationToken, x);
				return null;
			}
		}

		[Serializable]
		internal sealed class bufferChannel@78 : FSharpFunc<CancellationToken, FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>>
		{
			internal static readonly bufferChannel@78 @_instance = new bufferChannel@78();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal bufferChannel@78()
			{
			}

			public override FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit> Invoke(CancellationToken cancellationToken)
			{
				return new bufferChannel@78-4(cancellationToken);
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public class MicrophoneSubscriber : IMicrophoneSubscriber
		{
			unsafe virtual void IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment<float> buffer, WaveFormat format)
			{
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				float[] array = ArrayPool<float>.Shared.Rent(buffer.Count);
				Buffer.BlockCopy(buffer.Array, buffer.Offset, array, 0, buffer.Count * sizeof(float));
				BufferInput item = new BufferInput(new Samples(array, buffer.Count), format.SampleRate, format.Channels);
				ValueTask valueTask = bufferChannel.writer.WriteAsync(item, bufferChannel.cancellationToken);
			}

			virtual void IMicrophoneSubscriber.Reset()
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0005: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				FSharpValueOption<ProcessingInput> valueNone = FSharpValueOption<ProcessingInput>.ValueNone;
				ValueTask valueTask = processingChannel.writer.WriteAsync(valueNone, processingChannel.cancellationToken);
			}
		}

		[Serializable]
		internal sealed class recorder@99 : FSharpFunc<ProcessingState, bool>
		{
			internal static readonly recorder@99 @_instance = new recorder@99();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal recorder@99()
			{
			}

			public override bool Invoke(ProcessingState _arg1)
			{
				return _arg1.allowRecordVoice@;
			}
		}

		[Serializable]
		internal sealed class voiceDetector@104 : FSharpFunc<ProcessingState, FSharpValueOption<float>>
		{
			internal static readonly voiceDetector@104 @_instance = new voiceDetector@104();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@104()
			{
			}

			public override FSharpValueOption<float> Invoke(ProcessingState _arg2)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				return _arg2.forcedProbability@;
			}
		}

		[Serializable]
		internal sealed class voiceDetector@107-1 : FSharpFunc<float[], int, float>
		{
			public SileroVAD silero;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@107-1(SileroVAD silero)
			{
				this.silero = silero;
			}

			public override float Invoke(float[] pcmData, int pcmLength)
			{
				return API.detectSpeech(silero, pcmData, pcmLength);
			}
		}

		[Serializable]
		internal sealed class voiceDetector@107-2 : FSharpFunc<Samples, FSharpFunc<int, float>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<float[], FSharpFunc<int, float>> func2;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@107-2(FSharpFunc<float[], FSharpFunc<int, float>> func2)
			{
				this.func2 = func2;
			}

			public override FSharpFunc<int, float> Invoke(Samples x)
			{
				return func2.Invoke(((Samples)(ref x)).data);
			}
		}

		[Serializable]
		internal sealed class voiceDetector@108-5 : FSharpFunc<(ProcessingState, DetectAction), Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Channel<(ProcessingState, DetectAction)> channel;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@108-5(Channel<(ProcessingState, DetectAction)> channel)
			{
				this.channel = channel;
			}

			public override Unit Invoke((ProcessingState, DetectAction) element)
			{
				ValueTask valueTask = channel.writer.WriteAsync(element, channel.cancellationToken);
				return null;
			}
		}

		[Serializable]
		internal sealed class voiceDetector@108-4 : FSharpFunc<Recorder<ProcessingState>, FSharpFunc<(ProcessingState, DetectAction), Unit>>
		{
			internal static readonly voiceDetector@108-4 @_instance = new voiceDetector@108-4();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@108-4()
			{
			}

			public override FSharpFunc<(ProcessingState, DetectAction), Unit> Invoke(Recorder<ProcessingState> recorder)
			{
				Channel<(ProcessingState, DetectAction)> channel = recorder.channel;
				return new voiceDetector@108-5(channel);
			}
		}

		[Serializable]
		internal sealed class voiceDetector@108-3 : FSharpFunc<ProcessingState, DetectAction, Unit>
		{
			public Recorder<ProcessingState> recorder;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@108-3(Recorder<ProcessingState> recorder)
			{
				this.recorder = recorder;
			}

			public override Unit Invoke(ProcessingState state, DetectAction action)
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				return FSharpFunc<Recorder<ProcessingState>, (ProcessingState, DetectAction)>.InvokeFast<Unit>((FSharpFunc<Recorder<ProcessingState>, FSharpFunc<(ProcessingState, DetectAction), Unit>>)voiceDetector@108-4.@_instance, recorder, (state, action));
			}
		}

		[Serializable]
		internal sealed class resampler@110 : FSharpFunc<ResamplerOutput<ProcessingState>, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Channel<ResamplerOutput<ProcessingState>> channel;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal resampler@110(Channel<ResamplerOutput<ProcessingState>> channel)
			{
				this.channel = channel;
			}

			public override Unit Invoke(ResamplerOutput<ProcessingState> element)
			{
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				ValueTask valueTask = channel.writer.WriteAsync(element, channel.cancellationToken);
				return null;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@112-11 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public Resampler<ProcessingState> resampler;

			public ValueTaskAwaiter<FSharpValueOption<ProcessingInput>> awaiter;

			public override void MoveNext()
			{
				//IL_008b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: 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_00b9: 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_011c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0123: Unknown result type (might be due to invalid IL or missing references)
				//IL_0128: 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_013f: Unknown result type (might be due to invalid IL or missing references)
				//IL_015e: 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_0184: Unknown result type (might be due to invalid IL or missing references)
				//IL_018b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0190: Unknown result type (might be due to invalid IL or missing references)
				//IL_0199: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
						awaiter = processingChannel.reader.ReadAsync(processingChannel.cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_0074;
					case 1:
						{
							num = 1;
							goto IL_0074;
						}
						IL_0074:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						FSharpValueOption<ProcessingInput> result = awaiter.GetResult();
						FSharpValueOption<ProcessingInput> val = result;
						if (val.Tag != 1)
						{
							Resampler<ProcessingState> val2 = resampler;
							Channel<ResamplerInput<ProcessingState>> channel = val2.channel;
							ResamplerInput<ProcessingState> reset = ResamplerInput<ProcessingState>.Reset;
							ValueTask valueTask = channel.writer.WriteAsync(reset, channel.cancellationToken);
							num2 = 1;
						}
						else
						{
							ProcessingInput item = val.Item;
							if (!item.isReady@ || !Mirage.Domain.Config.isConfigReady() || (!Mirage.Domain.Config.getConfig().enableRecordVoiceWhileDead@ && item.isPlayerDead@))
							{
								goto IL_01da;
							}
							AudioFrame item2 = new AudioFrame(item.samples@, item.format@);
							ProcessingState item3 = new ProcessingState(item.isMuted@ ? FSharpValueOption<float>.NewValueSome(0f) : ((!item.pushToTalkEnabled@) ? FSharpValueOption<float>.ValueNone : FSharpValueOption<float>.NewValueSome(1f)), Mirage.Domain.Setting.getSettings().allowRecordVoice@);
							Channel<ResamplerInput<ProcessingState>> channel = resampler.channel;
							ResamplerInput<ProcessingState> reset = ResamplerInput<ProcessingState>.NewResamplerInput((item3, item2));
							ValueTask valueTask = channel.writer.WriteAsync(reset, channel.cancellationToken);
							num2 = 1;
						}
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						goto IL_01da;
					}
					goto end_IL_0019;
					IL_01da:
					ValueTaskAwaiter<FSharpValueOption<ProcessingInput>> valueTaskAwaiter = default(ValueTaskAwaiter<FSharpValueOption<ProcessingInput>>);
					awaiter = valueTaskAwaiter;
					if (true)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
					end_IL_0019:;
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct consumer@112-12 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public Resampler<ProcessingState> resampler;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					bool flag3;
					int num2;
					int num3;
					bool flag4;
					switch (resumptionPoint)
					{
					default:
						flag = true;
						goto IL_00d5;
					case 1:
						{
							num = 1;
							goto IL_006f;
						}
						IL_00d5:
						if (flag)
						{
							awaiter = program@1-10(resampler, null).GetAwaiter();
							flag2 = true;
							if (awaiter.IsCompleted)
							{
								goto IL_0079;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_006f;
						}
						if (flag)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
						break;
						IL_006f:
						flag3 = (byte)num != 0;
						flag2 = flag3;
						goto IL_0079;
						IL_0079:
						if (flag2)
						{
							awaiter.GetResult();
							_ = null;
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						if (num2 != 0)
						{
							awaiter = default(ValueTaskAwaiter<Unit>);
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						flag4 = (byte)num3 != 0;
						flag = flag4;
						resumptionPoint = 0;
						goto IL_00d5;
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class consumer@112-10 : FSharpFunc<Unit, ValueTask<Unit>>
		{
			public Resampler<ProcessingState> resampler;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal consumer@112-10(Resampler<ProcessingState> resampler)
			{
				this.resampler = resampler;
			}

			public override ValueTask<Unit> Invoke(Unit unitVar0)
			{
				consumer@112-12 stateMachine = default(consumer@112-12);
				stateMachine.resampler = resampler;
				stateMachine.Data.MethodBuilder = AsyncValueTaskMethodBuilder<Unit>.Create();
				stateMachine.Data.MethodBuilder.Start(ref stateMachine);
				return stateMachine.Data.MethodBuilder.Task;
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct readMicrophone@131-2 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public Channel<FSharpResult<Unit, Exception>> channel;

			public ValueTaskAwaiter<Unit> awaiter;

			public override void MoveNext()
			{
				//IL_012b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0130: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex3 = default(Exception);
				Exception ex = default(Exception);
				try
				{
					bool flag2 = default(bool);
					bool flag = default(bool);
					switch (resumptionPoint)
					{
					default:
						flag = false;
						flag2 = false;
						ex = null;
						flag = flag || flag;
						break;
					case 1:
						break;
					}
					try
					{
						bool flag3;
						int num;
						bool flag4;
						switch (resumptionPoint)
						{
						default:
							awaiter = program.Invoke((Unit)null).GetAwaiter();
							flag3 = true;
							if (awaiter.IsCompleted)
							{
								break;
							}
							if (false)
							{
								goto case 1;
							}
							ResumptionPoint = 1;
							num = 0;
							goto IL_008c;
						case 1:
							{
								num = 1;
								goto IL_008c;
							}
							IL_008c:
							flag4 = (byte)num != 0;
							flag3 = flag4;
							break;
						}
						int num2;
						if (flag3)
						{
							awaiter.GetResult();
							_ = null;
							FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewOk((Unit)null);
							ValueTask valueTask = channel.writer.WriteAsync(item, channel.cancellationToken);
							num2 = 1;
						}
						else
						{
							ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
							Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
							num2 = 0;
						}
						int num3;
						if (num2 != 0)
						{
							ValueTaskAwaiter<Unit> valueTaskAwaiter = default(ValueTaskAwaiter<Unit>);
							awaiter = valueTaskAwaiter;
							num3 = 1;
						}
						else
						{
							num3 = 0;
						}
						bool flag5 = (byte)num3 != 0;
						flag = flag5;
					}
					catch (object obj)
					{
						Exception ex2 = (Exception)obj;
						flag2 = true;
						ex = ex2;
					}
					int num4;
					if (flag2)
					{
						Exception ex2 = ex;
						FSharpResult<Unit, Exception> item = FSharpResult<Unit, Exception>.NewError(ex2);
						ValueTask valueTask = channel.writer.WriteAsync(item, channel.cancellationToken);
						num4 = 1;
					}
					else
					{
						num4 = (flag ? 1 : 0);
					}
					if (num4 != 0)
					{
						Data.MethodBuilder.SetResult(Data.Result);
					}
				}
				catch (object obj2)
				{
					ex = (Exception)obj2;
					ex3 = ex;
				}
				ex = ex3;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class readMicrophone@131-3
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, ValueTask<Unit>> program;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Channel<FSharpResult<Unit, Exception>> channel;

			public readMicrophone@131-3(FSharpFunc<Unit, ValueTask<Unit>> program, Channel<FSharpResult<Unit, Exception>> channel)
			{
				this.program = program;
				this.channel = channel;
				base..ctor();
			}

			internal ValueTask<Unit> Invoke()
			{
				return thread@1-8(program, channel, null);
			}
		}

		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilerGenerated]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal struct readMicrophone@131-1 : IAsyncStateMachine, IResumableStateMachine<TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>>>
		{
			public TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> Data;

			public int ResumptionPoint;

			public CancellationToken cancellationToken;

			public FSharpFunc<Unit, ValueTask<Unit>> program;

			public ValueTaskAwaiter<FSharpResult<Unit, Exception>> awaiter;

			public override void MoveNext()
			{
				//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: 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)
				int resumptionPoint = ResumptionPoint;
				switch (resumptionPoint)
				{
				}
				Exception ex2 = default(Exception);
				Exception ex;
				try
				{
					bool flag;
					int num;
					bool flag2;
					switch (resumptionPoint)
					{
					default:
					{
						Channel<FSharpResult<Unit, Exception>> val = Channel.Channel<FSharpResult<Unit, Exception>>(cancellationToken);
						Task<ValueTask<Unit>> task = Task.Run((Func<ValueTask<Unit>>)new readMicrophone@131-3(program, val).Invoke, cancellationToken);
						awaiter = val.reader.ReadAsync(val.cancellationToken).GetAwaiter();
						flag = true;
						if (awaiter.IsCompleted)
						{
							break;
						}
						if (false)
						{
							goto case 1;
						}
						ResumptionPoint = 1;
						num = 0;
						goto IL_009d;
					}
					case 1:
						{
							num = 1;
							goto IL_009d;
						}
						IL_009d:
						flag2 = (byte)num != 0;
						flag = flag2;
						break;
					}
					int num2;
					if (flag)
					{
						FSharpResult<Unit, Exception> result = awaiter.GetResult();
						FSharpResult<Unit, Exception> val2 = result;
						if (val2.Tag != 0)
						{
							throw val2.ErrorValue;
						}
						_ = val2.ResultValue;
						Data.Result = null;
						num2 = 1;
					}
					else
					{
						ICriticalNotifyCompletion criticalNotifyCompletion = (ICriticalNotifyCompletion)(object)awaiter;
						Data.MethodBuilder.AwaitUnsafeOnCompleted(ref criticalNotifyCompletion, ref this);
						num2 = 0;
					}
					if (num2 != 0)
					{
						ValueTaskAwaiter<FSharpResult<Unit, Exception>> valueTaskAwaiter = default(ValueTaskAwaiter<FSharpResult<Unit, Exception>>);
						awaiter = valueTaskAwaiter;
						if (true)
						{
							Data.MethodBuilder.SetResult(Data.Result);
						}
					}
				}
				catch (object obj)
				{
					ex = (Exception)obj;
					ex2 = ex;
				}
				ex = ex2;
				if (ex != null)
				{
					Data.MethodBuilder.SetException(ex);
				}
			}

			void IAsyncStateMachine.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				this.MoveNext();
			}

			public override void SetStateMachine(IAsyncStateMachine state)
			{
				Data.MethodBuilder.SetStateMachine(state);
			}

			void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine state)
			{
				//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
				this.SetStateMachine(state);
			}

			public override int get_ResumptionPoint()
			{
				return ResumptionPoint;
			}

			public override TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> get_Data()
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return Data;
			}

			public override void set_Data(TaskBaseStateMachineData<Unit, AsyncValueTaskMethodBuilder<Unit>> value)
			{
				//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)
				Data = value;
			}
		}

		[Serializable]
		internal sealed class readMicrophone@131-4 : FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public CancellationToken cancellationToken;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@131-4(CancellationToken cancellationToken)
			{
				this.cancellationToken = cancellationToken;
			}

			public override Unit Invoke(FSharpFunc<Unit, ValueTask<Unit>> x)
			{
				ValueTask<Unit> valueTask = func1@1-6(cancellationToken, x);
				return null;
			}
		}

		[Serializable]
		internal sealed class readMicrophone@131 : FSharpFunc<CancellationToken, FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit>>
		{
			internal static readonly readMicrophone@131 @_instance = new readMicrophone@131();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@131()
			{
			}

			public override FSharpFunc<FSharpFunc<Unit, ValueTask<Unit>>, Unit> Invoke(CancellationToken cancellationToken)
			{
				return new readMicrophone@131-4(cancellationToken);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@133-5
		{
			internal static void Invoke(orig_Start orig, DissonanceComms self)
			{
				orig.Invoke(self);
				MicrophoneSubscriber microphoneSubscriber = new MicrophoneSubscriber();
				self.SubscribeToRecordedAudio((IMicrophoneSubscriber)(object)microphoneSubscriber);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@140-6
		{
			internal static void Invoke(orig_StartTrackingAllPlayerVoices orig, StartOfRound self)
			{
				isReady = true;
				orig.Invoke(self);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@146-7
		{
			internal static void Invoke(orig_OnDestroy orig, StartOfRound self)
			{
				isReady = false;
				orig.Invoke(self);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@151-8
		{
			internal static void Invoke(orig_ReviveDeadPlayers orig, StartOfRound self)
			{
				isReady = false;
				orig.Invoke(self);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@156-9
		{
			internal static void Invoke(orig_Awake orig, MenuManager self)
			{
				//IL_0007: 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_0017: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				FSharpValueOption<ProcessingInput> valueNone = FSharpValueOption<ProcessingInput>.ValueNone;
				ValueTask valueTask = processingChannel.writer.WriteAsync(valueNone, processingChannel.cancellationToken);
			}
		}

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const int MinAudioDurationMs = 150;

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const int MinSilenceDurationMs = 2000;

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const int SamplesPerWindow = 2048;

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const float StartThreshold = 0.35f;

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const float EndThreshold = 0.2f;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static bool isReady
		{
			get
			{
				return <StartupCode$Mirage>.$Mirage.Hook.Microphone.isReady@43;
			}
			set
			{
				<StartupCode$Mirage>.$Mirage.Hook.Microphone.isReady@43 = value;
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static Channel<FSharpValueOption<ProcessingInput>> processingChannel => <StartupCode$Mirage>.$Mirage.Hook.Microphone.processingChannel@46;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static Channel<BufferInput> bufferChannel => <StartupCode$Mirage>.$Mirage.Hook.Microphone.bufferChannel@59;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static Channel<BufferInput> channel@60-6 => <StartupCode$Mirage>.$Mirage.Hook.Microphone.channel@60-1;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static FSharpFunc<Unit, ValueTask<Unit>> consumer@61-6 => <StartupCode$Mirage>.$Mirage.Hook.Microphone.consumer@61;

		[CompilerGenerated]
		internal static void func2@1(FSharpValueOption<Pr