Decompiled source of Cult of QoL Collection v2.4.4

plugins/CultOfQoL.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using CultOfQoL.Core;
using CultOfQoL.Patches.Followers;
using CultOfQoL.Patches.Gameplay;
using CultOfQoL.Patches.Systems;
using CultOfQoL.Patches.UI;
using DG.Tweening;
using DG.Tweening.Core;
using FMOD.Studio;
using HarmonyLib;
using I2.Loc;
using KnuckleBones;
using Lamb.UI;
using Lamb.UI.FollowerInteractionWheel;
using Lamb.UI.FollowerSelect;
using Lamb.UI.KitchenMenu;
using Lamb.UI.MainMenu;
using Lamb.UI.Menus.PlayerMenu;
using Lamb.UI.PauseMenu;
using Lamb.UI.RefineryMenu;
using LeTai.Asset.TranslucentImage;
using MMTools;
using Map;
using Microsoft.CodeAnalysis;
using MonoMod.Utils;
using Newtonsoft.Json;
using Shared;
using Spine.Unity;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using src.UI;
using src.UI.Menus;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")]
[assembly: AssemblyCompany("p1xel8ted")]
[assembly: AssemblyConfiguration("Release-Thunderstore")]
[assembly: AssemblyDescription("CultOfQoL")]
[assembly: AssemblyFileVersion("2.4.4.0")]
[assembly: AssemblyInformationalVersion("2.4.4+95fc6408218884d27d07ca9393506834c665975e")]
[assembly: AssemblyProduct("CultOfQoL")]
[assembly: AssemblyTitle("CultOfQoL")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.4.4.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class ExtensionMarkerAttribute : Attribute
	{
		public ExtensionMarkerAttribute(string name)
		{
		}
	}
}
internal sealed class ConfigurationManagerAttributes
{
	public delegate void CustomHotkeyDrawerFunc(ConfigEntryBase setting, ref bool isCurrentlyAcceptingInput);

	public bool? ShowRangeAsPercent;

	public Action<ConfigEntryBase> CustomDrawer;

	public CustomHotkeyDrawerFunc CustomHotkeyDrawer;

	public bool? Browsable;

	public string Category;

	public object DefaultValue;

	public bool? HideDefaultButton;

	public bool? HideSettingName;

	public string Description;

	public string DispName;

	public int? Order;

	public bool? ReadOnly;

	public bool? IsAdvanced;

	public Func<object, string> ObjToStr;

	public Func<string, object> StrToObj;
}
internal class PopupManager : MonoBehaviour
{
	internal bool ShowPopup;

	private string _title = "";

	private string _popupMessage = "";

	private Rect _popupRect = new Rect((float)Screen.width / 2f - 250f, (float)Screen.height / 2f - 100f, 500f, 300f);

	private GUIStyle _messageStyle;

	private GUIStyle _windowStyle;

	private GUIStyle _titleStyle;

	private bool _dontShowAgainThisSession;

	private bool _ignoreDontShow;

	private bool _isConfirmation;

	private Action _onConfirm;

	internal string Title { get; set; } = "";


	private void Start()
	{
		//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_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Expected O, but got Unknown
		//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_003e: 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_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Expected O, but got Unknown
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: 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_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Expected O, but got Unknown
		//IL_00a7: Expected O, but got Unknown
		GUIStyle val = new GUIStyle
		{
			alignment = (TextAnchor)4,
			wordWrap = true,
			fontSize = 22
		};
		val.normal.textColor = Color.black;
		_titleStyle = val;
		GUIStyle val2 = new GUIStyle
		{
			alignment = (TextAnchor)4,
			wordWrap = true,
			fontSize = 20
		};
		val2.normal.textColor = Color.black;
		_messageStyle = val2;
		GUIStyle val3 = new GUIStyle();
		val3.normal.background = Texture2D.whiteTexture;
		val3.normal.textColor = Color.black;
		val3.richText = true;
		val3.padding = new RectOffset(10, 10, 10, 10);
		_windowStyle = val3;
	}

	private void OnGUI()
	{
		//IL_000b: 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_002c: Expected O, but got Unknown
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		if (ShowPopup)
		{
			_popupRect = GUI.ModalWindow(0, _popupRect, new WindowFunction(DrawPopup), string.Empty, _windowStyle);
		}
	}

	private void DrawPopup(int windowID)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		GUILayout.FlexibleSpace();
		GUI.Label(new Rect(10f, 10f, ((Rect)(ref _popupRect)).width - 20f, 30f), _title, _titleStyle);
		GUILayout.FlexibleSpace();
		GUILayout.Label(_popupMessage, _messageStyle, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		if (_isConfirmation)
		{
			if (GUILayout.Button("Confirm", (GUILayoutOption[])(object)new GUILayoutOption[2]
			{
				GUILayout.Width(120f),
				GUILayout.Height(40f)
			}))
			{
				ShowPopup = false;
				_onConfirm?.Invoke();
				_onConfirm = null;
			}
			if (GUILayout.Button("Cancel", (GUILayoutOption[])(object)new GUILayoutOption[2]
			{
				GUILayout.Width(120f),
				GUILayout.Height(40f)
			}))
			{
				ShowPopup = false;
				_onConfirm = null;
			}
		}
		else
		{
			if (GUILayout.Button("OK", (GUILayoutOption[])(object)new GUILayoutOption[2]
			{
				GUILayout.Width(100f),
				GUILayout.Height(40f)
			}))
			{
				ShowPopup = false;
			}
			if (!_ignoreDontShow && GUILayout.Button("Close & Don't Show Again This Session", (GUILayoutOption[])(object)new GUILayoutOption[2]
			{
				GUILayout.Width(250f),
				GUILayout.Height(40f)
			}))
			{
				_dontShowAgainThisSession = true;
				ShowPopup = false;
			}
		}
		GUILayout.FlexibleSpace();
		GUILayout.EndHorizontal();
		GUILayout.FlexibleSpace();
	}

	public void ShowPopupDlg(string message, bool showCloseAndDontShowAgain)
	{
		ShowPopupDlg(Title, message, showCloseAndDontShowAgain);
	}

	public void ShowPopupDlg(string title, string message, bool showCloseAndDontShowAgain)
	{
		_ignoreDontShow = !showCloseAndDontShowAgain;
		if (!(_dontShowAgainThisSession && showCloseAndDontShowAgain))
		{
			_title = title;
			_popupMessage = message;
			_isConfirmation = false;
			_onConfirm = null;
			ShowPopup = true;
		}
	}

	public void ShowConfirmation(string title, string message, Action onConfirm)
	{
		_title = title;
		_popupMessage = message;
		_isConfirmation = true;
		_onConfirm = onConfirm;
		ShowPopup = true;
	}
}
namespace CultOfQoL
{
	public enum MassWolfTrapMode
	{
		Disabled,
		FillOnly,
		CollectOnly,
		Both
	}
	public enum ElderWorkMode
	{
		Disabled,
		AllWork,
		LightWorkOnly
	}
	public enum MassActionCostMode
	{
		PerMassAction,
		PerObject
	}
	[BepInPlugin("p1xel8ted.cotl.CultOfQoLCollection", "The Cult of QoL Collection", "2.4.4")]
	[BepInDependency("com.bepis.bepinex.configurationmanager", "18.4.1")]
	public class Plugin : BaseUnityPlugin
	{
		public enum LogType
		{
			Error,
			Info,
			Warning
		}

		private const string PluginGuid = "p1xel8ted.cotl.CultOfQoLCollection";

		internal const string PluginName = "The Cult of QoL Collection";

		private const string PluginVer = "2.4.4";

		private const string RestartGameMessage = "You must restart the game for these changes to take effect, as in totally exit to desktop and restart the game.\n\n** indicates a restart is required if the setting is changed.";

		private const string BackupSaveMessage = "IMPORTANT: Please back up your save files before enabling this option.\n\nThis feature will attempt to repair missing lore tablets on your next visit to the base. While it should be safe, backing up your saves first is recommended.";

		private const string GeneralSection = "── General ──";

		private const string AnimalsSection = "── Animals ──";

		private const string AutoInteractSection = "── Auto-Interact (Chests) ──";

		private const string CapacitySection = "── Capacities ──";

		private const string CollectionSection = "── Collection ──";

		private const string FarmSection = "── Farm ──";

		private const string FollowersSection = "── Followers ──";

		private const string GameMechanicsSection = "── Game Mechanics ──";

		private const string GameSpeedSection = "── Game Speed ──";

		private const string GoldenFleeceSection = "── Golden Fleece ──";

		private const string KnucklebonesSection = "── Knucklebones ──";

		private const string LootSection = "── Loot ──";

		private const string MassActionCostsSection = "── Mass Action Costs ──";

		private const string MassAnimalSection = "── Mass Animal ──";

		private const string MassCollectSection = "── Mass Collect ──";

		private const string MassFarmSection = "── Mass Farm ──";

		private const string MassFollowerSection = "── Mass Follower ──";

		private const string MenuCleanupSection = "── Menu Cleanup ──";

		private const string MinesSection = "── Mines ──";

		private const string NotificationsSection = "── Notifications ──";

		private const string PlayerSection = "── Player ──";

		private const string PostProcessingSection = "── Post Processing ──";

		private const string RitualSection = "── Rituals ──";

		private const string SavesSection = "── Saves ──";

		private const string SoundSection = "── Sound ──";

		private const string StructureSection = "── Structures ──";

		private const string TarotSection = "── Tarot ──";

		private const string WeatherSection = "── Weather ──";

		private const string FixesSection = "── Fixes ──";

		private const string ResetAllSettingsSection = "── Reset All Settings ──";

		private const string ResetConfigFlag = "ResetConfig_CultOfQoLCollection_2.3.9";

		private bool _cachedDirectLoadValue;

		private bool _cachedEnableQuickSaveValue;

		private bool _cachedDisableAdsValue;

		private KeyboardShortcut _cachedDirectLoadSkipKey;

		private KeyboardShortcut _cachedSaveShortcut;

		private UIMainMenuController _cachedUIMainMenuController;

		private Component[] _cachedAdComponents;

		private bool _configCacheValid;

		private static bool _showConfirmationDialog;

		private static ConfigFile _configInstance;

		private static ConfigEntry<bool> EnableLogging { get; set; }

		internal static ConfigEntry<bool> EnableQuickSaveShortcut { get; set; }

		internal static ConfigEntry<KeyboardShortcut> SaveKeyboardShortcut { get; set; }

		internal static ConfigEntry<bool> SaveOnQuitToDesktop { get; private set; }

		internal static ConfigEntry<bool> SaveOnQuitToMenu { get; private set; }

		internal static ConfigEntry<bool> DirectLoadSave { get; private set; }

		internal static ConfigEntry<int> SaveSlotToLoad { get; private set; }

		internal static ConfigEntry<KeyboardShortcut> DirectLoadSkipKey { get; set; }

		internal static ConfigEntry<bool> DisableAds { get; set; }

		internal static ConfigEntry<bool> HideNewGameButtons { get; private set; }

		internal static ConfigEntry<bool> EasyFishing { get; private set; }

		internal static ConfigEntry<bool> FastCollecting { get; private set; }

		internal static ConfigEntry<bool> RemoveMenuClutter { get; private set; }

		internal static ConfigEntry<bool> RemoveTwitchButton { get; private set; }

		internal static ConfigEntry<KeyboardShortcut> ResetTimeScaleKey { get; private set; }

		internal static ConfigEntry<KeyboardShortcut> IncreaseGameSpeedKey { get; private set; }

		internal static ConfigEntry<KeyboardShortcut> DecreaseGameSpeedKey { get; private set; }

		internal static ConfigEntry<bool> AllLootMagnets { get; private set; }

		internal static ConfigEntry<float> MagnetRangeMultiplier { get; private set; }

		private static ConfigEntry<bool> MainMenuGlitch { get; set; }

		internal static ConfigEntry<bool> ReverseGoldenFleeceDamageChange { get; private set; }

		internal static ConfigEntry<bool> AdjustRefineryRequirements { get; private set; }

		internal static ConfigEntry<bool> RefineryPoopToRotPoop { get; private set; }

		internal static ConfigEntry<bool> RefineryMassFill { get; private set; }

		internal static ConfigEntry<bool> CookingFireMassFill { get; private set; }

		internal static ConfigEntry<bool> KitchenMassFill { get; private set; }

		internal static ConfigEntry<bool> PubMassFill { get; private set; }

		internal static ConfigEntry<bool> CleanseIllnessAndExhaustionOnLevelUp { get; private set; }

		internal static ConfigEntry<bool> UnlockTwitchItems { get; private set; }

		internal static ConfigEntry<bool> LumberAndMiningStationsDontAge { get; private set; }

		internal static ConfigEntry<float> LumberAndMiningStationsAgeMultiplier { get; private set; }

		internal static ConfigEntry<bool> CollectTitheFromOldFollowers { get; private set; }

		internal static ConfigEntry<bool> IntimidateOldFollowers { get; private set; }

		internal static ConfigEntry<bool> EnableGameSpeedManipulation { get; private set; }

		internal static ConfigEntry<bool> ShortenGameSpeedIncrements { get; private set; }

		internal static ConfigEntry<float> SlowDownTimeMultiplier { get; private set; }

		internal static ConfigEntry<bool> DisableGameOver { get; private set; }

		internal static ConfigEntry<bool> FastRitualSermons { get; private set; }

		internal static ConfigEntry<float> RitualSermonSpeedMultiplier { get; private set; }

		internal static ConfigEntry<bool> TurnOffSpeakersAtNight { get; private set; }

		internal static ConfigEntry<bool> ThriceMultiplyTarotCardLuck { get; private set; }

		internal static ConfigEntry<float> TarotLuckMultiplier { get; private set; }

		internal static ConfigEntry<bool> RareTarotCardsOnly { get; private set; }

		internal static ConfigEntry<bool> EnableAutoCollect { get; private set; }

		internal static ConfigEntry<int> TriggerAmount { get; private set; }

		internal static ConfigEntry<float> AutoInteractRangeMulti { get; private set; }

		internal static ConfigEntry<bool> AutoCollectFromFarmStationChests { get; private set; }

		internal static ConfigEntry<bool> AddExhaustedToHealingBay { get; private set; }

		internal static ConfigEntry<bool> HideHealthyFromHealingBay { get; private set; }

		internal static ConfigEntry<bool> DisableAllNotifications { get; private set; }

		internal static ConfigEntry<bool> AllowCriticalNotifications { get; private set; }

		internal static ConfigEntry<bool> SuppressNotificationsOnLoad { get; private set; }

		internal static ConfigEntry<bool> NotifyOfScarecrowTraps { get; private set; }

		internal static ConfigEntry<bool> NotifyOfNoFuel { get; private set; }

		internal static ConfigEntry<bool> NotifyOfBedCollapse { get; private set; }

		internal static ConfigEntry<bool> GiveFollowersNewNecklaces { get; private set; }

		internal static ConfigEntry<WeatherChangeTrigger> WeatherChangeTrigger { get; private set; }

		internal static ConfigEntry<bool> UnlockAllWeatherTypes { get; private set; }

		internal static ConfigEntry<Color> LightSnowColor { get; private set; }

		internal static ConfigEntry<Color> LightWindColor { get; private set; }

		internal static ConfigEntry<Color> LightRainColor { get; private set; }

		internal static ConfigEntry<Color> MediumRainColor { get; private set; }

		internal static ConfigEntry<Color> HeavyRainColor { get; private set; }

		private static ConfigEntry<Weather.WeatherCombo> WeatherDropDown { get; set; }

		internal static ConfigEntry<bool> ShowPhaseNotifications { get; private set; }

		internal static ConfigEntry<bool> ShowWeatherChangeNotifications { get; private set; }

		internal static ConfigEntry<float> SoulCapacityMulti { get; private set; }

		internal static ConfigEntry<float> SiloCapacityMulti { get; private set; }

		internal static ConfigEntry<bool> ExcludeGrassFromSeedDeposit { get; private set; }

		internal static ConfigEntry<bool> UseMultiplesOf32 { get; private set; }

		internal static ConfigEntry<float> BaseDamageMultiplier { get; private set; }

		internal static ConfigEntry<float> FleeceDamageMulti { get; private set; }

		internal static ConfigEntry<bool> DisableRunSpeedInDungeons { get; private set; }

		internal static ConfigEntry<bool> DisableRunSpeedInCombat { get; private set; }

		internal static ConfigEntry<bool> RemoveHelpButtonInPauseMenu { get; private set; }

		internal static ConfigEntry<bool> RemoveTwitchButtonInPauseMenu { get; private set; }

		internal static ConfigEntry<bool> RemovePhotoModeButtonInPauseMenu { get; private set; }

		internal static ConfigEntry<float> RunSpeedMulti { get; private set; }

		internal static ConfigEntry<float> DodgeSpeedMulti { get; private set; }

		internal static ConfigEntry<float> LungeSpeedMulti { get; private set; }

		internal static ConfigEntry<bool> OnlyShowDissenters { get; private set; }

		internal static ConfigEntry<bool> DisablePropagandaSpeakerAudio { get; private set; }

		internal static ConfigEntry<bool> UncapLevelBenefits { get; private set; }

		internal static ConfigEntry<bool> MassBribe { get; private set; }

		internal static ConfigEntry<MassActionCostMode> MassActionCostModeEntry { get; private set; }

		internal static ConfigEntry<bool> ShowMassActionCostPreview { get; private set; }

		internal static ConfigEntry<float> MassActionGoldCost { get; private set; }

		internal static ConfigEntry<float> MassActionTimeCost { get; private set; }

		internal static ConfigEntry<int> MassFaithReduction { get; private set; }

		internal static ConfigEntry<bool> RotFertilizerDecay { get; private set; }

		internal static ConfigEntry<int> RotFertilizerDuration { get; private set; }

		internal static ConfigEntry<bool> MassFertilize { get; private set; }

		internal static ConfigEntry<bool> MassBless { get; private set; }

		internal static ConfigEntry<bool> MassRomance { get; private set; }

		internal static ConfigEntry<bool> MassBully { get; private set; }

		internal static ConfigEntry<bool> MassReassure { get; private set; }

		internal static ConfigEntry<bool> MassReeducate { get; private set; }

		internal static ConfigEntry<bool> MassExtort { get; private set; }

		internal static ConfigEntry<bool> MassPetFollower { get; private set; }

		internal static ConfigEntry<bool> MassPetAllFollowers { get; private set; }

		internal static ConfigEntry<bool> MassPetAnimals { get; private set; }

		internal static ConfigEntry<bool> MassIntimidate { get; private set; }

		internal static ConfigEntry<bool> MassIntimidateScareAll { get; private set; }

		internal static ConfigEntry<bool> MassInspire { get; private set; }

		internal static ConfigEntry<bool> MassWater { get; private set; }

		internal static ConfigEntry<bool> MassLevelUp { get; private set; }

		internal static ConfigEntry<bool> MassLevelUpInstantSouls { get; private set; }

		internal static ConfigEntry<int> MassNotificationThreshold { get; private set; }

		internal static ConfigEntry<ElderWorkMode> ElderWorkMode { get; private set; }

		internal static ConfigEntry<bool> MassCollectFromBeds { get; private set; }

		internal static ConfigEntry<bool> MassCollectFromOuthouses { get; private set; }

		internal static ConfigEntry<bool> MassCollectFromOfferingShrines { get; private set; }

		internal static ConfigEntry<bool> MassCollectFromPassiveShrines { get; private set; }

		internal static ConfigEntry<bool> MassCollectFromCompost { get; private set; }

		internal static ConfigEntry<bool> MassCollectFromHarvestTotems { get; private set; }

		internal static ConfigEntry<bool> MassCleanPoop { get; private set; }

		internal static ConfigEntry<bool> MassCleanVomit { get; private set; }

		internal static ConfigEntry<bool> MassOpenScarecrows { get; private set; }

		internal static ConfigEntry<MassWolfTrapMode> MassWolfTraps { get; private set; }

		internal static ConfigEntry<bool> CollectAllGodTearsAtOnce { get; private set; }

		internal static ConfigEntry<bool> MassSinExtract { get; private set; }

		internal static ConfigEntry<bool> MassCleanAnimals { get; private set; }

		internal static ConfigEntry<bool> MassFeedAnimals { get; private set; }

		internal static ConfigEntry<bool> MassMilkAnimals { get; private set; }

		internal static ConfigEntry<bool> MassShearAnimals { get; private set; }

		internal static ConfigEntry<bool> FillTroughToCapacity { get; private set; }

		internal static ConfigEntry<bool> MassFillTroughs { get; private set; }

		internal static ConfigEntry<bool> FillToolshedToCapacity { get; private set; }

		internal static ConfigEntry<bool> MassFillToolsheds { get; private set; }

		internal static ConfigEntry<bool> FillMedicToCapacity { get; private set; }

		internal static ConfigEntry<bool> MassFillMedicStations { get; private set; }

		internal static ConfigEntry<bool> FillSeedSiloToCapacity { get; private set; }

		internal static ConfigEntry<bool> MassFillSeedSilos { get; private set; }

		internal static ConfigEntry<bool> FillFertilizerSiloToCapacity { get; private set; }

		internal static ConfigEntry<bool> MassFillFertilizerSilos { get; private set; }

		internal static ConfigEntry<bool> MassPlantSeeds { get; private set; }

		internal static ConfigEntry<bool> CollectShrineDevotionInstantly { get; private set; }

		internal static ConfigEntry<bool> DisableSoulCameraShake { get; private set; }

		internal static WriteOnce<float> RunSpeed { get; } = new WriteOnce<float>();


		internal static WriteOnce<float> DodgeSpeed { get; } = new WriteOnce<float>();


		internal static UIMainMenuController UIMainMenuController { get; set; }

		public static ConfigEntry<bool> VignetteEffect { get; private set; }

		public static ConfigEntry<bool> ReverseEnrichmentNerf { get; private set; }

		public static ConfigEntry<int> HarvestTotemRange { get; private set; }

		public static ConfigEntry<int> PropagandaSpeakerRange { get; private set; }

		public static ConfigEntry<int> FarmStationRange { get; private set; }

		public static ConfigEntry<int> FarmPlotSignRange { get; private set; }

		public static ConfigEntry<int> LightningRodRangeLvl1 { get; private set; }

		public static ConfigEntry<int> LightningRodRangeLvl2 { get; private set; }

		public static ConfigEntry<int> SinBossLimit { get; private set; }

		public static ConfigEntry<int> MinRangeLifeExpectancy { get; private set; }

		public static ConfigEntry<int> MaxRangeLifeExpectancy { get; private set; }

		public static ConfigEntry<bool> DisableAnimalOldAgeDeath { get; private set; }

		public static ConfigEntry<int> AnimalOldAgeDeathThreshold { get; private set; }

		public static ConfigEntry<int> AnimalGuaranteedDeathAge { get; private set; }

		public static ConfigEntry<float> RitualCooldownTime { get; private set; }

		public static ConfigEntry<float> RitualCostMultiplier { get; private set; }

		public static ConfigEntry<bool> AddSpiderWebsToOfferings { get; set; }

		public static ConfigEntry<bool> AddCrystalShardsToOfferings { get; set; }

		public static ConfigEntry<bool> CookedMeatMealsContainBone { get; set; }

		internal static ConfigEntry<bool> AutoSelectBestMatingPair { get; private set; }

		internal static ConfigEntry<bool> PrioritizeRequestedFollowers { get; private set; }

		public static ConfigEntry<bool> ProduceSpiderWebsFromLumber { get; set; }

		public static ConfigEntry<int> SpiderWebsPerLogs { get; set; }

		public static ConfigEntry<bool> ProduceCrystalShardsFromStone { get; set; }

		public static ConfigEntry<int> CrystalShardsPerStone { get; set; }

		internal static ConfigEntry<bool> EnableRotburnAsShrineFuel { get; set; }

		internal static ConfigEntry<int> RotburnShrineFuelWeight { get; set; }

		internal static ConfigEntry<bool> EnableShrineWarmth { get; set; }

		internal static ConfigEntry<bool> FurnaceHeaterScaling { get; set; }

		internal static ConfigEntry<int> FurnaceHeaterFuelCost { get; set; }

		internal static ConfigEntry<bool> ResourceChestDepositSounds { get; private set; }

		internal static ConfigEntry<bool> ResourceChestCollectSounds { get; private set; }

		internal static ConfigEntry<float> KnucklebonesSpeedMultiplier { get; private set; }

		internal static ConfigEntry<bool> AutoRepairMissingLore { get; private set; }

		internal static ConfigEntry<KeyboardShortcut> DumpTranslationsKey { get; private set; }

		internal static ManualLogSource Log { get; private set; }

		internal static PopupManager PopupManager { get; private set; }

		private void Awake()
		{
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Expected O, but got Unknown
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Expected O, but got Unknown
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Expected O, but got Unknown
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Expected O, but got Unknown
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Expected O, but got Unknown
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Expected O, but got Unknown
			//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Expected O, but got Unknown
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_0361: Expected O, but got Unknown
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Expected O, but got Unknown
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Expected O, but got Unknown
			//IL_0478: Unknown result type (might be due to invalid IL or missing references)
			//IL_0482: Expected O, but got Unknown
			//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fc: Expected O, but got Unknown
			//IL_056c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0576: Expected O, but got Unknown
			//IL_05df: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e9: Expected O, but got Unknown
			//IL_0647: Unknown result type (might be due to invalid IL or missing references)
			//IL_0651: Expected O, but got Unknown
			//IL_0686: Unknown result type (might be due to invalid IL or missing references)
			//IL_0690: Expected O, but got Unknown
			//IL_06c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d0: Expected O, but got Unknown
			//IL_0705: Unknown result type (might be due to invalid IL or missing references)
			//IL_070f: Expected O, but got Unknown
			//IL_0744: Unknown result type (might be due to invalid IL or missing references)
			//IL_074e: Expected O, but got Unknown
			//IL_0783: Unknown result type (might be due to invalid IL or missing references)
			//IL_078d: Expected O, but got Unknown
			//IL_07c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07cc: Expected O, but got Unknown
			//IL_0801: Unknown result type (might be due to invalid IL or missing references)
			//IL_080b: Expected O, but got Unknown
			//IL_084b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0855: Expected O, but got Unknown
			//IL_08c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d1: Expected O, but got Unknown
			//IL_0943: Unknown result type (might be due to invalid IL or missing references)
			//IL_094d: Expected O, but got Unknown
			//IL_09b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c0: Expected O, but got Unknown
			//IL_0a1e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a28: Expected O, but got Unknown
			//IL_0a63: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6d: Expected O, but got Unknown
			//IL_0aa2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aac: Expected O, but got Unknown
			//IL_0aec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af6: Expected O, but got Unknown
			//IL_0b14: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4e: Expected O, but got Unknown
			//IL_0b6c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b9c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba6: Expected O, but got Unknown
			//IL_0bc4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bfe: Expected O, but got Unknown
			//IL_0c45: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c4f: Expected O, but got Unknown
			//IL_0cad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb7: Expected O, but got Unknown
			//IL_0cfe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d08: Expected O, but got Unknown
			//IL_0d78: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d82: Expected O, but got Unknown
			//IL_0de0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dea: Expected O, but got Unknown
			//IL_0e65: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e6f: Expected O, but got Unknown
			//IL_0ed8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee2: Expected O, but got Unknown
			//IL_0f40: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f4a: Expected O, but got Unknown
			//IL_0f7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f89: Expected O, but got Unknown
			//IL_0fbe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fc8: Expected O, but got Unknown
			//IL_0ffd: Unknown result type (might be due to invalid IL or missing references)
			//IL_1007: Expected O, but got Unknown
			//IL_103c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1046: Expected O, but got Unknown
			//IL_1086: Unknown result type (might be due to invalid IL or missing references)
			//IL_1090: Expected O, but got Unknown
			//IL_10c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_10cf: Expected O, but got Unknown
			//IL_1104: Unknown result type (might be due to invalid IL or missing references)
			//IL_110e: Expected O, but got Unknown
			//IL_1155: Unknown result type (might be due to invalid IL or missing references)
			//IL_115f: Expected O, but got Unknown
			//IL_11cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_11d9: Expected O, but got Unknown
			//IL_123e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1248: Expected O, but got Unknown
			//IL_127d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1287: Expected O, but got Unknown
			//IL_12bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c6: Expected O, but got Unknown
			//IL_12fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1305: Expected O, but got Unknown
			//IL_133a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1344: Expected O, but got Unknown
			//IL_1379: Unknown result type (might be due to invalid IL or missing references)
			//IL_1383: Expected O, but got Unknown
			//IL_13b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_13c2: Expected O, but got Unknown
			//IL_13f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1401: Expected O, but got Unknown
			//IL_1436: Unknown result type (might be due to invalid IL or missing references)
			//IL_1440: Expected O, but got Unknown
			//IL_1475: Unknown result type (might be due to invalid IL or missing references)
			//IL_147f: Expected O, but got Unknown
			//IL_14b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_14bf: Expected O, but got Unknown
			//IL_14f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_14ff: Expected O, but got Unknown
			//IL_1535: Unknown result type (might be due to invalid IL or missing references)
			//IL_153f: Expected O, but got Unknown
			//IL_1575: Unknown result type (might be due to invalid IL or missing references)
			//IL_157f: Expected O, but got Unknown
			//IL_15c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_15ca: Expected O, but got Unknown
			//IL_1600: Unknown result type (might be due to invalid IL or missing references)
			//IL_160a: Expected O, but got Unknown
			//IL_164a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1654: Expected O, but got Unknown
			//IL_1689: Unknown result type (might be due to invalid IL or missing references)
			//IL_1693: Expected O, but got Unknown
			//IL_16d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_16dd: Expected O, but got Unknown
			//IL_1712: Unknown result type (might be due to invalid IL or missing references)
			//IL_171c: Expected O, but got Unknown
			//IL_175c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1766: Expected O, but got Unknown
			//IL_179b: Unknown result type (might be due to invalid IL or missing references)
			//IL_17a5: Expected O, but got Unknown
			//IL_17da: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e4: Expected O, but got Unknown
			//IL_1819: Unknown result type (might be due to invalid IL or missing references)
			//IL_1823: Expected O, but got Unknown
			//IL_185f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1869: Expected O, but got Unknown
			//IL_18a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_18b0: Expected O, but got Unknown
			//IL_18f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_18fb: Expected O, but got Unknown
			//IL_1965: Unknown result type (might be due to invalid IL or missing references)
			//IL_196f: Expected O, but got Unknown
			//IL_19d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_19e3: Expected O, but got Unknown
			//IL_1a4d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a57: Expected O, but got Unknown
			//IL_1ac1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1acb: Expected O, but got Unknown
			//IL_1b34: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b3e: Expected O, but got Unknown
			//IL_1ba7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1bb1: Expected O, but got Unknown
			//IL_1c1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c24: Expected O, but got Unknown
			//IL_1c8d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c97: Expected O, but got Unknown
			//IL_1d00: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d0a: Expected O, but got Unknown
			//IL_1d73: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d7d: Expected O, but got Unknown
			//IL_1de6: Unknown result type (might be due to invalid IL or missing references)
			//IL_1df0: Expected O, but got Unknown
			//IL_1e30: Unknown result type (might be due to invalid IL or missing references)
			//IL_1e3a: Expected O, but got Unknown
			//IL_1ea3: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ead: Expected O, but got Unknown
			//IL_1eed: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ef7: Expected O, but got Unknown
			//IL_1f55: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f5f: Expected O, but got Unknown
			//IL_1f94: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f9e: Expected O, but got Unknown
			//IL_1fd3: Unknown result type (might be due to invalid IL or missing references)
			//IL_1fdd: Expected O, but got Unknown
			//IL_2028: Unknown result type (might be due to invalid IL or missing references)
			//IL_2032: Expected O, but got Unknown
			//IL_2067: Unknown result type (might be due to invalid IL or missing references)
			//IL_2071: Expected O, but got Unknown
			//IL_20a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_20b0: Expected O, but got Unknown
			//IL_20e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_20ef: Expected O, but got Unknown
			//IL_214d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2157: Expected O, but got Unknown
			//IL_21c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_21d1: Expected O, but got Unknown
			//IL_2259: Unknown result type (might be due to invalid IL or missing references)
			//IL_2263: Expected O, but got Unknown
			//IL_22a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_22ae: Expected O, but got Unknown
			//IL_22e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_22ed: Expected O, but got Unknown
			//IL_2322: Unknown result type (might be due to invalid IL or missing references)
			//IL_232c: Expected O, but got Unknown
			//IL_2361: Unknown result type (might be due to invalid IL or missing references)
			//IL_236b: Expected O, but got Unknown
			//IL_23a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_23aa: Expected O, but got Unknown
			//IL_23df: Unknown result type (might be due to invalid IL or missing references)
			//IL_23e9: Expected O, but got Unknown
			//IL_2447: Unknown result type (might be due to invalid IL or missing references)
			//IL_2451: Expected O, but got Unknown
			//IL_24c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_24cb: Expected O, but got Unknown
			//IL_2534: Unknown result type (might be due to invalid IL or missing references)
			//IL_253e: Expected O, but got Unknown
			//IL_257e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2588: Expected O, but got Unknown
			//IL_25cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_25d9: Expected O, but got Unknown
			//IL_2649: Unknown result type (might be due to invalid IL or missing references)
			//IL_2653: Expected O, but got Unknown
			//IL_26c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_26cd: Expected O, but got Unknown
			//IL_272c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2736: Expected O, but got Unknown
			//IL_2794: Unknown result type (might be due to invalid IL or missing references)
			//IL_279e: Expected O, but got Unknown
			//IL_2819: Unknown result type (might be due to invalid IL or missing references)
			//IL_2823: Expected O, but got Unknown
			//IL_2881: Unknown result type (might be due to invalid IL or missing references)
			//IL_288b: Expected O, but got Unknown
			//IL_28d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_28dc: Expected O, but got Unknown
			//IL_294c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2956: Expected O, but got Unknown
			//IL_29b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_29be: Expected O, but got Unknown
			//IL_29f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_29fd: Expected O, but got Unknown
			//IL_2a32: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a3c: Expected O, but got Unknown
			//IL_2a71: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a7b: Expected O, but got Unknown
			//IL_2aaf: Unknown result type (might be due to invalid IL or missing references)
			//IL_2adf: Unknown result type (might be due to invalid IL or missing references)
			//IL_2ae9: Expected O, but got Unknown
			//IL_2b34: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b3e: Expected O, but got Unknown
			//IL_2b72: Unknown result type (might be due to invalid IL or missing references)
			//IL_2ba2: Unknown result type (might be due to invalid IL or missing references)
			//IL_2bac: Expected O, but got Unknown
			//IL_2c17: Unknown result type (might be due to invalid IL or missing references)
			//IL_2c21: Expected O, but got Unknown
			//IL_2c7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2c89: Expected O, but got Unknown
			//IL_2ce7: Unknown result type (might be due to invalid IL or missing references)
			//IL_2cf1: Expected O, but got Unknown
			//IL_2d50: Unknown result type (might be due to invalid IL or missing references)
			//IL_2d5a: Expected O, but got Unknown
			//IL_2daf: Unknown result type (might be due to invalid IL or missing references)
			//IL_2db9: Expected O, but got Unknown
			//IL_2def: Unknown result type (might be due to invalid IL or missing references)
			//IL_2df9: Expected O, but got Unknown
			//IL_2e2f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2e39: Expected O, but got Unknown
			//IL_2e95: Unknown result type (might be due to invalid IL or missing references)
			//IL_2e9f: Expected O, but got Unknown
			//IL_2ed5: Unknown result type (might be due to invalid IL or missing references)
			//IL_2edf: Expected O, but got Unknown
			//IL_2f15: Unknown result type (might be due to invalid IL or missing references)
			//IL_2f1f: Expected O, but got Unknown
			//IL_2f7e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2f88: Expected O, but got Unknown
			//IL_2fbe: Unknown result type (might be due to invalid IL or missing references)
			//IL_2fc8: Expected O, but got Unknown
			//IL_2ffe: Unknown result type (might be due to invalid IL or missing references)
			//IL_3008: Expected O, but got Unknown
			//IL_303e: Unknown result type (might be due to invalid IL or missing references)
			//IL_3048: Expected O, but got Unknown
			//IL_307e: Unknown result type (might be due to invalid IL or missing references)
			//IL_3088: Expected O, but got Unknown
			//IL_30be: Unknown result type (might be due to invalid IL or missing references)
			//IL_30c8: Expected O, but got Unknown
			//IL_30fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_3108: Expected O, but got Unknown
			//IL_313e: Unknown result type (might be due to invalid IL or missing references)
			//IL_3148: Expected O, but got Unknown
			//IL_317e: Unknown result type (might be due to invalid IL or missing references)
			//IL_3188: Expected O, but got Unknown
			//IL_31be: Unknown result type (might be due to invalid IL or missing references)
			//IL_31c8: Expected O, but got Unknown
			//IL_3227: Unknown result type (might be due to invalid IL or missing references)
			//IL_3231: Expected O, but got Unknown
			//IL_32ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_32b7: Expected O, but got Unknown
			//IL_3333: Unknown result type (might be due to invalid IL or missing references)
			//IL_333d: Expected O, but got Unknown
			//IL_33a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_33ad: Expected O, but got Unknown
			//IL_33ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_33f4: Expected O, but got Unknown
			//IL_3456: Unknown result type (might be due to invalid IL or missing references)
			//IL_3460: Expected O, but got Unknown
			//IL_34d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_34dd: Expected O, but got Unknown
			//IL_353b: Unknown result type (might be due to invalid IL or missing references)
			//IL_3545: Expected O, but got Unknown
			//IL_35a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_35ad: Expected O, but got Unknown
			//IL_360b: Unknown result type (might be due to invalid IL or missing references)
			//IL_3615: Expected O, but got Unknown
			//IL_3673: Unknown result type (might be due to invalid IL or missing references)
			//IL_367d: Expected O, but got Unknown
			//IL_36ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_36f7: Expected O, but got Unknown
			//IL_3755: Unknown result type (might be due to invalid IL or missing references)
			//IL_375f: Expected O, but got Unknown
			//IL_37cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_37d9: Expected O, but got Unknown
			//IL_3837: Unknown result type (might be due to invalid IL or missing references)
			//IL_3841: Expected O, but got Unknown
			//IL_3893: Unknown result type (might be due to invalid IL or missing references)
			//IL_389d: Expected O, but got Unknown
			//IL_38fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_3905: Expected O, but got Unknown
			//IL_393b: Unknown result type (might be due to invalid IL or missing references)
			//IL_3945: Expected O, but got Unknown
			//IL_397b: Unknown result type (might be due to invalid IL or missing references)
			//IL_3985: Expected O, but got Unknown
			//IL_39ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_39d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_39dc: Expected O, but got Unknown
			//IL_3a04: Unknown result type (might be due to invalid IL or missing references)
			//IL_3a29: Unknown result type (might be due to invalid IL or missing references)
			//IL_3a33: Expected O, but got Unknown
			//IL_3a5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_3a80: Unknown result type (might be due to invalid IL or missing references)
			//IL_3a8a: Expected O, but got Unknown
			//IL_3ab2: Unknown result type (might be due to invalid IL or missing references)
			//IL_3ad7: Unknown result type (might be due to invalid IL or missing references)
			//IL_3ae1: Expected O, but got Unknown
			//IL_3b09: Unknown result type (might be due to invalid IL or missing references)
			//IL_3b2e: Unknown result type (might be due to invalid IL or missing references)
			//IL_3b38: Expected O, but got Unknown
			//IL_3b6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_3b77: Expected O, but got Unknown
			//IL_3bd9: Unknown result type (might be due to invalid IL or missing references)
			//IL_3be3: Expected O, but got Unknown
			//IL_3c14: Unknown result type (might be due to invalid IL or missing references)
			//IL_3c1e: Expected O, but got Unknown
			//IL_3ca9: Unknown result type (might be due to invalid IL or missing references)
			//IL_3cb3: Expected O, but got Unknown
			HideBepInEx();
			_configInstance = ((BaseUnityPlugin)this).Config;
			Log = ((BaseUnityPlugin)this).Logger;
			bool flag = IntExtensions.ToBool(PlayerPrefs.GetInt("ResetConfig_CultOfQoLCollection_2.3.9", 0));
			Version version = new Version("2.4.4");
			Version version2 = new Version("2.3.9");
			if (version >= version2 && !flag)
			{
				WriteLog("[Config Reset] Major configuration change detected. Resetting config to defaults.", LogType.Warning);
				string configFilePath = ((BaseUnityPlugin)this).Config.ConfigFilePath;
				if (File.Exists(configFilePath))
				{
					File.Delete(configFilePath);
					WriteLog("[Config Reset] Deleted config file: " + configFilePath, LogType.Warning);
				}
				((BaseUnityPlugin)this).Config.Clear();
				PlayerPrefs.SetInt("ResetConfig_CultOfQoLCollection_2.3.9", 1);
				PlayerPrefs.Save();
			}
			PopupManager = ((Component)this).gameObject.AddComponent<PopupManager>();
			PopupManager.Title = "The Cult of QoL Collection";
			EnableLogging = _configInstance.Bind<bool>("── General ──", "Enable Logging", false, new ConfigDescription("Enable/disable logging.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			EnableLogging.SettingChanged += delegate
			{
				ConfigCache.MarkDirty("EnableLogging");
			};
			DumpTranslationsKey = _configInstance.Bind<KeyboardShortcut>("── General ──", "Dump Translations Key", new KeyboardShortcut((KeyCode)290, Array.Empty<KeyCode>()), new ConfigDescription("When Enable Logging is on, press this key to dump all English translations to a text file in BepInEx/plugins/CultOfQoL/.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4,
					DispName = "    └ Dump Translations Key"
				}
			}));
			UnlockTwitchItems = _configInstance.Bind<bool>("── General ──", "Unlock Twitch Items", false, new ConfigDescription("Unlock pre-order DLC, Twitch plush, and Twitch drops. Paid DLC is excluded on purpose.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			DisableAnimalOldAgeDeath = _configInstance.Bind<bool>("── Animals ──", "Immortal Farm Animals", false, new ConfigDescription("Prevents farm animals from dying of old age.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			AnimalOldAgeDeathThreshold = _configInstance.Bind<int>("── Animals ──", "Animal Old Age Death Threshold", 15, new ConfigDescription("The minimum age (in days) before animals can die of old age. Vanilla default is 15.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(15, 100), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					ShowRangeAsPercent = false,
					Order = 2
				}
			}));
			AnimalGuaranteedDeathAge = _configInstance.Bind<int>("── Animals ──", "Animal Guaranteed Death Age", 100, new ConfigDescription("The age at which old age death becomes certain. Daily death chance scales linearly — at half this age, there's a 50% chance per day. Vanilla default is 100.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(50, 1000), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					ShowRangeAsPercent = false,
					Order = 1
				}
			}));
			EnableAutoCollect = _configInstance.Bind<bool>("── Auto-Interact (Chests) ──", "Enable Auto Collect", false, new ConfigDescription("Makes chests automatically send you the resources when you're nearby.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6,
					DispName = "Enable Auto Collect**"
				}
			}));
			EnableAutoCollect.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			AutoCollectFromFarmStationChests = _configInstance.Bind<bool>("── Auto-Interact (Chests) ──", "Auto Collect From Farm Station Chests", false, new ConfigDescription("Automatically collect from farm station chests.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5,
					DispName = "    └ Auto Collect From Farm Station Chests"
				}
			}));
			TriggerAmount = _configInstance.Bind<int>("── Auto-Interact (Chests) ──", "Trigger Amount", 5, new ConfigDescription("The amount of resources needed to trigger the auto-interact.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4,
					ShowRangeAsPercent = false,
					DispName = "    └ Trigger Amount"
				}
			}));
			AutoInteractRangeMulti = _configInstance.Bind<float>("── Auto-Interact (Chests) ──", "Loot Magnet Range Multiplier", 1f, new ConfigDescription("Enter a multiplier to use for auto-collect range when using custom range.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1,
					DispName = "    └ Loot Magnet Range Multiplier"
				}
			}));
			AutoInteractRangeMulti.SettingChanged += delegate
			{
				AutoInteractRangeMulti.Value = Mathf.Round(AutoInteractRangeMulti.Value * 4f) / 4f;
			};
			UseMultiplesOf32 = _configInstance.Bind<bool>("── Capacities ──", "Use Multiples of 32", true, new ConfigDescription("Use multiples of 32 for silo capacity.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7
				}
			}));
			UseMultiplesOf32.SettingChanged += delegate
			{
				ConfigCache.MarkDirty("UseMultiplesOf32");
			};
			SiloCapacityMulti = _configInstance.Bind<float>("── Capacities ──", "Silo Capacity Multiplier", 1f, new ConfigDescription("Enter a multiplier to use for silo capacity when using custom capacity.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[2]
			{
				null,
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			SiloCapacityMulti.SettingChanged += delegate
			{
				SiloCapacityMulti.Value = Mathf.Round(SiloCapacityMulti.Value * 4f) / 4f;
				ConfigCache.MarkDirty("SiloCapacityMulti");
			};
			SoulCapacityMulti = _configInstance.Bind<float>("── Capacities ──", "Soul Capacity Multiplier", 1f, new ConfigDescription("Enter a multiplier to use for soul capacity when using custom capacity.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[2]
			{
				null,
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			SoulCapacityMulti.SettingChanged += delegate
			{
				SoulCapacityMulti.Value = Mathf.Round(SoulCapacityMulti.Value * 4f) / 4f;
				ConfigCache.MarkDirty("SoulCapacityMulti");
			};
			FastCollecting = _configInstance.Bind<bool>("── Collection ──", "Speed Up Collection", false, new ConfigDescription("Speeds up soul drain from shrines (instant) and beds (2x faster). Also removes delays when collecting from resource chests.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Speed Up Collection**",
					Order = 2
				}
			}));
			FastCollecting.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			CollectShrineDevotionInstantly = _configInstance.Bind<bool>("── Collection ──", "Collect Shrine Devotion Instantly", false, new ConfigDescription("When collecting devotion from the shrine, collect all instantly instead of holding to collect.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			DisableSoulCameraShake = _configInstance.Bind<bool>("── Collection ──", "Disable Soul Camera Shake", false, new ConfigDescription("Disables the camera shake caused by devotion orbs and souls hitting the shrine. Does not affect combat camera shake.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 0
				}
			}));
			PrioritizeRequestedFollowers = _configInstance.Bind<bool>("── Followers ──", "Prioritize Requested Followers", false, new ConfigDescription("Followers with active requests (rituals, missions, mating, etc.) appear at the top of selection lists.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9
				}
			}));
			GiveFollowersNewNecklaces = _configInstance.Bind<bool>("── Followers ──", "Give Followers New Necklaces", false, new ConfigDescription("Followers will be able to receive new necklaces, with the old one being returned to you.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8
				}
			}));
			CleanseIllnessAndExhaustionOnLevelUp = _configInstance.Bind<bool>("── Followers ──", "Cleanse Illness and Exhaustion", false, new ConfigDescription("When a follower 'levels up', if they are sick or exhausted, the status is cleansed.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7
				}
			}));
			CollectTitheFromOldFollowers = _configInstance.Bind<bool>("── Followers ──", "Collect Tithe From Old Followers", false, new ConfigDescription("Enable collecting tithe from the elderly.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6
				}
			}));
			IntimidateOldFollowers = _configInstance.Bind<bool>("── Followers ──", "Intimidate Old Followers", false, new ConfigDescription("Enable intimidating the elderly.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			UncapLevelBenefits = _configInstance.Bind<bool>("── Followers ──", "Uncap Level Benefits", false, new ConfigDescription("Removes the level 10 cap on follower benefits. Productivity, prayer devotion, and sacrifice rewards will scale beyond level 10. (The base game removed the level cap in 1.5.0, but benefits are still capped at level 10.)", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			ElderWorkMode = _configInstance.Bind<ElderWorkMode>("── Followers ──", "Elder Work Mode", CultOfQoL.ElderWorkMode.Disabled, new ConfigDescription("Disabled: Elders don't work (vanilla). All Work: Elders perform all tasks. Light Work Only: Elders only do light tasks like worship, cooking, brewing, and research.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Elder Work Mode**",
					Order = 3
				}
			}));
			ElderWorkMode.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MinRangeLifeExpectancy = _configInstance.Bind<int>("── Followers ──", "Minimum Range Life Expectancy", 40, new ConfigDescription("The lowest possible life expectancy a follower can have. The game will randomly choose a value between this and the maximum value below. This must be less than the maximum.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					ShowRangeAsPercent = false,
					Order = 2
				}
			}));
			MinRangeLifeExpectancy.SettingChanged += delegate
			{
				EnforceRangeSanity();
			};
			MaxRangeLifeExpectancy = _configInstance.Bind<int>("── Followers ──", "Maximum Range Life Expectancy", 55, new ConfigDescription("The highest possible life expectancy a follower can have. The game will randomly choose a value between the minimum above and this value.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					ShowRangeAsPercent = false,
					Order = 0
				}
			}));
			MaxRangeLifeExpectancy.SettingChanged += delegate
			{
				EnforceRangeSanity();
			};
			EasyFishing = _configInstance.Bind<bool>("── Game Mechanics ──", "Easy Fishing", false, new ConfigDescription("Automatically reels in fish without button mashing. Just cast and wait.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Easy Fishing**",
					Order = 5
				}
			}));
			EasyFishing.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			DisableGameOver = _configInstance.Bind<bool>("── Game Mechanics ──", "No More Game-Over", false, new ConfigDescription("Disables the game over function when you have 0 followers for consecutive days.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			SinBossLimit = _configInstance.Bind<int>("── Game Mechanics ──", "Sin Boss Limit", 3, new ConfigDescription("Bishop kills required to unlock Sin. Default is 3.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			EnableGameSpeedManipulation = _configInstance.Bind<bool>("── Game Speed ──", "Enable Game Speed Manipulation", false, new ConfigDescription("Use left/right arrows keys to increase/decrease game speed in 0.25 increments. Up arrow to reset to default.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8
				}
			}));
			ShortenGameSpeedIncrements = _configInstance.Bind<bool>("── Game Speed ──", "Shorten Game Speed Increments", false, new ConfigDescription("When enabled, speed changes in large steps (0.25x, 1x, 2x, 3x, 4x, 5x). When disabled (default), speed changes in fine 0.25x increments (0.25x, 0.5x, 0.75x, 1x, 1.25x... up to 5x).", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7,
					DispName = "    └ Shorten Game Speed Increments"
				}
			}));
			ResetTimeScaleKey = _configInstance.Bind<KeyboardShortcut>("── Game Speed ──", "Reset Time Scale Key", new KeyboardShortcut((KeyCode)273, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to reset the game speed to 1.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6,
					DispName = "    └ Reset Time Scale Key"
				}
			}));
			IncreaseGameSpeedKey = _configInstance.Bind<KeyboardShortcut>("── Game Speed ──", "Increase Game Speed Key", new KeyboardShortcut((KeyCode)275, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to increase the game speed.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5,
					DispName = "    └ Increase Game Speed Key"
				}
			}));
			DecreaseGameSpeedKey = _configInstance.Bind<KeyboardShortcut>("── Game Speed ──", "Decrease Game Speed Key", new KeyboardShortcut((KeyCode)276, Array.Empty<KeyCode>()), new ConfigDescription("The keyboard shortcut to decrease the game speed.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4,
					DispName = "    └ Decrease Game Speed Key"
				}
			}));
			SlowDownTimeMultiplier = _configInstance.Bind<float>("── Game Speed ──", "Slow Down Time Multiplier", 1f, new ConfigDescription("The multiplier to use for slow down time. For example, the default value of 2 is making the day twice as long.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			SlowDownTimeMultiplier.SettingChanged += delegate
			{
				SlowDownTimeMultiplier.Value = Mathf.Round(SlowDownTimeMultiplier.Value * 4f) / 4f;
			};
			ReverseGoldenFleeceDamageChange = _configInstance.Bind<bool>("── Golden Fleece ──", "Reverse Golden Fleece Change", false, new ConfigDescription("Reverts the default damage increase to 10% instead of 5%.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			FleeceDamageMulti = _configInstance.Bind<float>("── Golden Fleece ──", "Fleece Damage Multiplier", 1f, new ConfigDescription("The custom damage multiplier to use. Based off the games default 5%.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			FleeceDamageMulti.SettingChanged += delegate
			{
				FleeceDamageMulti.Value = Mathf.Round(FleeceDamageMulti.Value * 4f) / 4f;
			};
			KnucklebonesSpeedMultiplier = _configInstance.Bind<float>("── Knucklebones ──", "Animation Speed Multiplier", 1f, new ConfigDescription("Speed up Knucklebones animations. 1.0 = normal speed, 2.0 = twice as fast, etc.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			KnucklebonesSpeedMultiplier.SettingChanged += delegate
			{
				KnucklebonesSpeedMultiplier.Value = Mathf.Round(KnucklebonesSpeedMultiplier.Value * 4f) / 4f;
				ConfigCache.MarkDirty("KnucklebonesSpeedMultiplier");
			};
			AllLootMagnets = _configInstance.Bind<bool>("── Loot ──", "All Loot Magnets", false, new ConfigDescription("All loot is magnetized to you.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			AllLootMagnets.SettingChanged += delegate
			{
				UpdateAllMagnets();
			};
			MagnetRangeMultiplier = _configInstance.Bind<float>("── Loot ──", "Magnet Range Multiplier", 1f, new ConfigDescription("Apply a multiplier to the magnet range.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2,
					DispName = "    └ Magnet Range Multiplier"
				}
			}));
			MagnetRangeMultiplier.SettingChanged += delegate
			{
				MagnetRangeMultiplier.Value = Mathf.Round(MagnetRangeMultiplier.Value * 4f) / 4f;
				UpdateCustomMagnet();
			};
			MassPetAnimals = _configInstance.Bind<bool>("── Mass Animal ──", "Mass Pet Animals", false, new ConfigDescription("When petting a farm animal, all farm animals are petted at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Pet Animals**",
					Order = 6
				}
			}));
			MassPetAnimals.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassCleanAnimals = _configInstance.Bind<bool>("── Mass Animal ──", "Mass Clean Animals", false, new ConfigDescription("When cleaning a stinky animal, all stinky animals are cleaned at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			MassFeedAnimals = _configInstance.Bind<bool>("── Mass Animal ──", "Mass Feed Animals", false, new ConfigDescription("When feeding an animal, all hungry animals are fed the same food at once (consumes one item per animal).", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			MassMilkAnimals = _configInstance.Bind<bool>("── Mass Animal ──", "Mass Milk Animals", false, new ConfigDescription("When milking an animal, all animals ready for milking are milked at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			MassShearAnimals = _configInstance.Bind<bool>("── Mass Animal ──", "Mass Shear Animals", false, new ConfigDescription("When shearing an animal, all animals ready for shearing are sheared at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			FillTroughToCapacity = _configInstance.Bind<bool>("── Mass Animal ──", "Fill Trough to Capacity", false, new ConfigDescription("When adding food to a trough, fills it to capacity in one action instead of adding one item at a time.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			MassFillTroughs = _configInstance.Bind<bool>("── Mass Animal ──", "Mass Fill Troughs", false, new ConfigDescription("When filling a trough, all non-full troughs are filled with the same food.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 0,
					DispName = "    └ Mass Fill Troughs"
				}
			}));
			MassActionCostModeEntry = _configInstance.Bind<MassActionCostMode>("── Mass Action Costs ──", "Cost Mode", MassActionCostMode.PerObject, new ConfigDescription("How costs are calculated. Per Mass Action = flat fee regardless of count. Per Object = cost multiplied by number of objects affected.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			ShowMassActionCostPreview = _configInstance.Bind<bool>("── Mass Action Costs ──", "Show Cost Preview", false, new ConfigDescription("Show the estimated cost in the interaction label when highlighting a mass action. Only visible when Cost Mode is set to Per Object.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			MassActionGoldCost = _configInstance.Bind<float>("── Mass Action Costs ──", "Gold Cost", 0f, new ConfigDescription("Gold deducted for a mass action. Set to 0 for free. If you can't afford the total, the mass action is skipped but the original single interaction still works.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 50f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			MassActionGoldCost.SettingChanged += delegate
			{
				MassActionGoldCost.Value = RoundToQuarter(MassActionGoldCost.Value);
			};
			MassActionTimeCost = _configInstance.Bind<float>("── Mass Action Costs ──", "Time Cost (Game Minutes)", 0f, new ConfigDescription("Game minutes that pass for a mass action. Set to 0 for no time cost. 240 minutes = 1 game phase.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 120f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			MassActionTimeCost.SettingChanged += delegate
			{
				MassActionTimeCost.Value = RoundToQuarter(MassActionTimeCost.Value);
			};
			MassFaithReduction = _configInstance.Bind<int>("── Mass Action Costs ──", "Faith Reduction (%)", 0, new ConfigDescription("Reduces faith gained per follower from mass Bless and Inspire. 0 = full faith, 50 = half faith, 100 = no faith. The original single interaction always gives full faith.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			CollectAllGodTearsAtOnce = _configInstance.Bind<bool>("── Mass Collect ──", "Collect All God Tears At Once", false, new ConfigDescription("When collecting god tears from the shrine, collect all available at once instead of one per interaction.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7
				}
			}));
			MassCollectFromBeds = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Collect From Beds", false, new ConfigDescription("When collecting souls from a bed, all beds are collected from at once. Also speeds up the per-soul drain to 2x.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6
				}
			}));
			MassCollectFromOuthouses = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Collect From Outhouses", false, new ConfigDescription("When collecting resources from an outhouse, all outhouses are collected from at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			MassCollectFromOfferingShrines = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Collect From Offering Shrines", false, new ConfigDescription("When collecting resources from an offering shrine, all offering shrines are collected from at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			MassCollectFromPassiveShrines = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Collect From Passive Shrines", false, new ConfigDescription("When collecting resources from a passive shrine, all passive shrines are collected from at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			MassCollectFromCompost = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Collect From Compost", false, new ConfigDescription("When collecting resources from a compost, all composts are collected from at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			MassCollectFromHarvestTotems = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Collect From Harvest Totems", false, new ConfigDescription("When collecting resources from a harvest totem, all harvest totems are collected from at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			MassCleanPoop = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Clean Poop", false, new ConfigDescription("When cleaning a poop pile, all poop piles are cleaned at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 0
				}
			}));
			MassCleanVomit = _configInstance.Bind<bool>("── Mass Collect ──", "Mass Clean Vomit", false, new ConfigDescription("When cleaning a vomit puddle, all vomit puddles are cleaned at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = -1
				}
			}));
			MassPlantSeeds = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Plant Seeds", false, new ConfigDescription("When planting a seed in a farm plot, all other empty farm plots are planted with the same seed.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 14
				}
			}));
			MassFertilize = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Fertilize", false, new ConfigDescription("When fertilizing a plot, all farm plots are fertilized at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 13
				}
			}));
			MassWater = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Water", false, new ConfigDescription("When watering a plot, all farm plots are watered at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 12
				}
			}));
			FillToolshedToCapacity = _configInstance.Bind<bool>("── Mass Farm ──", "Fill Carpentry Station to Capacity", false, new ConfigDescription("When depositing materials into a Carpentry Station, fills it to capacity in one action instead of adding one item at a time.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 11
				}
			}));
			MassFillToolsheds = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Fill Carpentry Stations", false, new ConfigDescription("When filling a Carpentry Station, all non-full Carpentry Stations are filled with the same material.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 10,
					DispName = "    └ Mass Fill Carpentry Stations"
				}
			}));
			FillMedicToCapacity = _configInstance.Bind<bool>("── Mass Farm ──", "Fill Medic Station to Capacity", false, new ConfigDescription("When depositing supplies into a Medic Station, fills it to capacity in one action instead of adding one item at a time.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9
				}
			}));
			MassFillMedicStations = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Fill Medic Stations", false, new ConfigDescription("When filling a Medic Station, all non-full Medic Stations are filled with the same supply.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8,
					DispName = "    └ Mass Fill Medic Stations"
				}
			}));
			FillSeedSiloToCapacity = _configInstance.Bind<bool>("── Mass Farm ──", "Fill Seed Silo to Capacity", false, new ConfigDescription("When depositing seeds into a Seed Silo, fills it to capacity in one action instead of adding one item at a time.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7
				}
			}));
			MassFillSeedSilos = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Fill Seed Silos", false, new ConfigDescription("When filling a Seed Silo, all non-full Seed Silos are filled with the same seed.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6,
					DispName = "    └ Mass Fill Seed Silos"
				}
			}));
			FillFertilizerSiloToCapacity = _configInstance.Bind<bool>("── Mass Farm ──", "Fill Fertiliser Silo to Capacity", false, new ConfigDescription("When depositing fertiliser into a Fertiliser Silo, fills it to capacity in one action instead of adding one item at a time.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			MassFillFertilizerSilos = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Fill Fertiliser Silos", false, new ConfigDescription("When filling a Fertiliser Silo, all non-full Fertiliser Silos are filled with the same fertiliser.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4,
					DispName = "    └ Mass Fill Fertiliser Silos"
				}
			}));
			MassOpenScarecrows = _configInstance.Bind<bool>("── Mass Farm ──", "Mass Open Scarecrows", false, new ConfigDescription("When opening a scarecrow trap, all scarecrow traps with caught birds are opened at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			MassWolfTraps = _configInstance.Bind<MassWolfTrapMode>("── Mass Farm ──", "Mass Wolf Traps", MassWolfTrapMode.Disabled, new ConfigDescription("Fill Only: Fill all empty traps with the same bait. Collect Only: Collect from all traps with caught wolves. Both: Do both actions.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			RotFertilizerDecay = _configInstance.Bind<bool>("── Farm ──", "Rot Fertilizer Decay", false, new ConfigDescription("When enabled, rot fertilizer warming on farm plots expires after a set number of days instead of lasting forever.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			RotFertilizerDuration = _configInstance.Bind<int>("── Farm ──", "Rot Fertilizer Duration (Days)", 5, new ConfigDescription("Number of days before rot fertilizer warming expires. Crops on expired plots will freeze during winter unless near a Thawing Harvest Totem.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 30), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			MassNotificationThreshold = _configInstance.Bind<int>("── Mass Follower ──", "Mass Notification Threshold", 3, new ConfigDescription("When a mass action affects more than this many followers, show a single summary notification instead of one per follower. Set to 0 to always show a summary.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 50), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 14
				}
			}));
			MassBribe = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Bribe", false, new ConfigDescription("When bribing a follower, all followers are bribed at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Bribe**",
					Order = 13
				}
			}));
			MassBribe.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassBless = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Bless", false, new ConfigDescription("When blessing a follower, all followers are blessed at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Bless**",
					Order = 12
				}
			}));
			MassBless.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassExtort = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Extort", false, new ConfigDescription("When extorting a follower, all followers are extorted at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Extort**",
					Order = 11
				}
			}));
			MassExtort.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassIntimidate = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Intimidate", false, new ConfigDescription("When intimidating a follower, all followers are intimidated at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Intimidate**",
					Order = 10
				}
			}));
			MassIntimidate.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassIntimidateScareAll = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Intimidate Scare All", false, new ConfigDescription("When Mass Intimidate is enabled, apply the 5% Scared trait roll to all intimidated followers instead of only the original.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9,
					DispName = "    └ Mass Intimidate Scare All"
				}
			}));
			MassIntimidateScareAll.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassInspire = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Inspire", false, new ConfigDescription("When inspiring a follower, all followers are inspired at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Inspire**",
					Order = 8
				}
			}));
			MassInspire.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassRomance = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Romance", false, new ConfigDescription("When romancing a follower, all followers are romanced at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Romance**",
					Order = 7
				}
			}));
			MassRomance.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassBully = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Bully", false, new ConfigDescription("When bullying a follower, all followers are bullied at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Bully**",
					Order = 6
				}
			}));
			MassBully.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassReassure = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Reassure", false, new ConfigDescription("When reassuring a follower, all followers are reassured at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Reassure**",
					Order = 5
				}
			}));
			MassReassure.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassReeducate = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Reeducate", false, new ConfigDescription("When reeducating a follower, all followers are reeducated at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Reeducate**",
					Order = 4
				}
			}));
			MassReeducate.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassLevelUp = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Level Up", false, new ConfigDescription("When leveling up a follower, all eligible followers are leveled up at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Level Up**",
					Order = 3
				}
			}));
			MassLevelUp.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassLevelUpInstantSouls = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Level Up Instant Souls", true, new ConfigDescription("Instantly collect souls during mass level up instead of having them fly to you.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2,
					DispName = "    └ Mass Level Up Instant Souls"
				}
			}));
			MassPetFollower = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Pet Follower", false, new ConfigDescription("When petting a follower, all eligible followers are petted at once. Which followers qualify depends on the Mass Pet All Followers setting below.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Pet Follower**",
					Order = 1
				}
			}));
			MassPetFollower.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			MassPetAllFollowers = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Pet All Followers", false, new ConfigDescription("When enabled, mass pet applies to all followers regardless of the Pettable trait. When disabled, only followers with the Pettable trait or Dog/Poppy skin are petted.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 0,
					DispName = "    └ Mass Pet All Followers"
				}
			}));
			MassSinExtract = _configInstance.Bind<bool>("── Mass Follower ──", "Mass Sin Extract", false, new ConfigDescription("When extracting sin from a follower, all eligible followers have their sin extracted at once.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					DispName = "Mass Sin Extract**",
					Order = -1
				}
			}));
			MassSinExtract.SettingChanged += delegate
			{
				ShowRestartMessage();
			};
			RemoveMenuClutter = _configInstance.Bind<bool>("── Menu Cleanup ──", "Remove Extra Menu Buttons", false, new ConfigDescription("Removes credits/road-map/discord buttons from the menus.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6
				}
			}));
			RemoveTwitchButton = _configInstance.Bind<bool>("── Menu Cleanup ──", "Remove Twitch Buttons", false, new ConfigDescription("Removes twitch buttons from the menus.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			DisableAds = _configInstance.Bind<bool>("── Menu Cleanup ──", "Hide Ads", false, new ConfigDescription("Hides the promotional ads from the main menu.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			DisableAds.SettingChanged += delegate
			{
				InvalidateConfigCache();
			};
			RemoveHelpButtonInPauseMenu = _configInstance.Bind<bool>("── Menu Cleanup ──", "Remove Help Button In Pause Menu", false, new ConfigDescription("Removes the help button in the pause menu.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			RemoveTwitchButtonInPauseMenu = _configInstance.Bind<bool>("── Menu Cleanup ──", "Remove Twitch Button In Pause Menu", false, new ConfigDescription("Removes the twitch button in the pause menu.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			RemovePhotoModeButtonInPauseMenu = _configInstance.Bind<bool>("── Menu Cleanup ──", "Remove Photo Mode Button In Pause Menu", false, new ConfigDescription("Removes the photo mode button in the pause menu.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			MainMenuGlitch = _configInstance.Bind<bool>("── Menu Cleanup ──", "Main Menu Glitch", true, new ConfigDescription("Controls the sudden dark-mode switch effect.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 0
				}
			}));
			MainMenuGlitch.SettingChanged += delegate
			{
				UpdateMenuGlitch();
			};
			LumberAndMiningStationsDontAge = _configInstance.Bind<bool>("── Mines ──", "Infinite Lumber & Mining Stations", false, new ConfigDescription("Lumber and mining stations should never run out and collapse. Takes 1st priority.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			LumberAndMiningStationsDontAge.SettingChanged += delegate
			{
				ConfigCache.MarkDirty("LumberAndMiningStationsDontAge");
			};
			LumberAndMiningStationsAgeMultiplier = _configInstance.Bind<float>("── Mines ──", "Lumber & Mining Stations Age Multiplier", 1f, new ConfigDescription("How much slower (or faster) the lumber and mining stations age. Default is 1.0f.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			LumberAndMiningStationsAgeMultiplier.SettingChanged += delegate
			{
				ConfigCache.MarkDirty("LumberAndMiningStationsAgeMultiplier");
			};
			LumberAndMiningStationsAgeMultiplier.SettingChanged += delegate
			{
				LumberAndMiningStationsAgeMultiplier.Value = Mathf.Round(LumberAndMiningStationsAgeMultiplier.Value * 4f) / 4f;
			};
			DisableAllNotifications = _configInstance.Bind<bool>("── Notifications ──", "Hide All Notifications", false, new ConfigDescription("Hides all in-game notifications. This also prevents custom notifications below from appearing.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 10
				}
			}));
			AllowCriticalNotifications = _configInstance.Bind<bool>("── Notifications ──", "Allow Critical Notifications", true, new ConfigDescription("When 'Disable All Notifications' is enabled, still show critical notifications (deaths, weapon destruction, dissenters).", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9,
					DispName = "    └ Allow Critical Notifications"
				}
			}));
			SuppressNotificationsOnLoad = _configInstance.Bind<bool>("── Notifications ──", "Suppress Notifications On Load", false, new ConfigDescription("Suppress individual notifications for a few seconds after loading a save, preventing the flood of status updates. Dynamic status indicators (starving, sick, etc.) are not affected.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8
				}
			}));
			NotifyOfScarecrowTraps = _configInstance.Bind<bool>("── Notifications ──", "Notify of Scarecrow Traps", false, new ConfigDescription("Display a notification when the farm scarecrows have caught a trap!", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			NotifyOfNoFuel = _configInstance.Bind<bool>("── Notifications ──", "Notify of No Fuel", false, new ConfigDescription("Display a notification when a structure has run out of fuel.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			NotifyOfBedCollapse = _configInstance.Bind<bool>("── Notifications ──", "Notify of Bed Collapse", false, new ConfigDescription("Display a notification when a bed has collapsed.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			ShowPhaseNotifications = _configInstance.Bind<bool>("── Notifications ──", "Phase Notifications", false, new ConfigDescription("Show a notification when the time of day changes.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			ShowPhaseNotifications.SettingChanged += delegate
			{
				ConfigCache.MarkDirty("ShowPhaseNotifications");
			};
			ShowWeatherChangeNotifications = _configInstance.Bind<bool>("── Notifications ──", "Weather Change Notifications", false, new ConfigDescription("Show a notification when the weather changes.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			ShowWeatherChangeNotifications.SettingChanged += delegate
			{
				ConfigCache.MarkDirty("ShowWeatherChangeNotifications");
			};
			RunSpeedMulti = _configInstance.Bind<float>("── Player ──", "Run Speed Multiplier", 1f, new ConfigDescription("How much faster the player runs.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7
				}
			}));
			RunSpeedMulti.SettingChanged += delegate
			{
				RunSpeedMulti.Value = Mathf.Round(RunSpeedMulti.Value * 4f) / 4f;
			};
			DisableRunSpeedInDungeons = _configInstance.Bind<bool>("── Player ──", "Exclude Dungeons", true, new ConfigDescription("When enabled, the run speed multiplier won't apply in dungeons.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6,
					DispName = "    └ Exclude Dungeons"
				}
			}));
			DisableRunSpeedInCombat = _configInstance.Bind<bool>("── Player ──", "Exclude Combat", true, new ConfigDescription("When enabled, the run speed multiplier won't apply during combat.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5,
					DispName = "    └ Exclude Combat"
				}
			}));
			BaseDamageMultiplier = _configInstance.Bind<float>("── Player ──", "Base Damage Multiplier", 1f, new ConfigDescription("The base damage multiplier to use.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			BaseDamageMultiplier.SettingChanged += delegate
			{
				BaseDamageMultiplier.Value = Mathf.Round(BaseDamageMultiplier.Value * 4f) / 4f;
			};
			DodgeSpeedMulti = _configInstance.Bind<float>("── Player ──", "Dodge Speed Multiplier", 1f, new ConfigDescription("How much faster the player dodges.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			DodgeSpeedMulti.SettingChanged += delegate
			{
				DodgeSpeedMulti.Value = Mathf.Round(DodgeSpeedMulti.Value * 4f) / 4f;
			};
			LungeSpeedMulti = _configInstance.Bind<float>("── Player ──", "Lunge Speed Multiplier", 1f, new ConfigDescription("How much faster the player lunges.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-10f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1
				}
			}));
			LungeSpeedMulti.SettingChanged += delegate
			{
				LungeSpeedMulti.Value = Mathf.Round(LungeSpeedMulti.Value * 4f) / 4f;
			};
			VignetteEffect = _configInstance.Bind<bool>("── Post Processing ──", "Vignette UI Overlay", true, new ConfigDescription("Enable/disable the vignette UI overlay images (separate from the post-processing vignette effect).", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 90
				}
			}));
			VignetteEffect.SettingChanged += delegate
			{
				PostProcessing.ToggleVignette();
			};
			FastRitualSermons = _configInstance.Bind<bool>("── Rituals ──", "Fast Rituals & Sermons", false, new ConfigDescription("Speeds up rituals and sermons.", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5
				}
			}));
			FastRitualSermons.SettingChanged += delegate
			{
				if (!FastRitualSermons.Value)
				{
					RitualSermonSpeed.RitualRunning = false;
					GameManager.SetTimeScale(1f);
				}
			};
			RitualSermonSpeedMultiplier = _configInstance.Bind<float>("── Rituals ──", "Ritual & Sermon Speed Multiplier", 5f, new ConfigDescription("How fast rituals and sermons play when Fast Rituals & Sermons is enabled.\n- 2.0 = Twice as fast\n- 5.0 = Five times as fast (default)\n- 10.0 = Ten times as fast (may cause visual glitches)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1.5f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4,
					DispName = "    └ Speed Multiplier"
				}
			}));
			RitualSermonSpeedMultiplier.SettingChanged += delegate
			{
				RitualSermonSpeedMultiplier.Value = Mathf.Round(RitualSermonSpeedMultiplier.Value * 2f) / 2f;
				ConfigCache.MarkDirty("RitualSermonSpeedMultiplier");
			};
			ReverseEnrichmentNerf = _configInstance.Bind<bool>("── Rituals ──", "Reverse Enrichment Nerf", false, new ConfigDescription("Reverts the nerf to the Ritual of Enrichment. Coins scale with follower level (level * 20 per follower).", (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4
				}
			}));
			RitualCooldownTime = _configInstance.Bind<float>("── Rituals ──", "Ritual Cooldown Time Multiplier", 1f, new ConfigDescription("Scales ritual cooldown duration.\n• 2.0 = Double cooldown (slower)\n• 1.0 = Normal cooldown\n• 0.5 = 50% of normal (faster)\n• 0.25 = 25% of normal (much faster)\n\nDrag left to reduce cooldown time.\nAllowed range: 0.1x to 2.0x.\n\n<i>Note: Applies only to newly performed rituals.</i>", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 2f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3
				}
			}));
			RitualCooldownTime.SettingChanged += delegate
			{
				RitualCooldownTime.Value = Mathf.Round(RitualCooldownTime.Value * 4f) / 4f;
			};
			RitualCostMultiplier = _configInstance.Bind<float>("── Rituals ──", "Ritual Cost Multiplier", 1f, new ConfigDescription("Multiplier for ritual material costs. Values above 1 increase costs, below 1 decrease costs. Stacks with in-game discounts. Does not affect follower requirements or doctrine unlocks.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 4f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2
				}
			}));
			RitualCostMultiplier.SettingChanged += delegate
			{
				RitualCostMultiplier.Value = Mathf.Round(RitualCostMultiplier.Value * 4f) / 4f;
			};
			SaveOnQuitToDesktop = _configInstance.Bind<bool>("── Saves ──", "Sa