Decompiled source of BankApp v2.0.2

BankApp.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BankApp;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppScheduleOne.DevUtilities;
using Il2CppScheduleOne.Money;
using MelonLoader;
using MelonLoader.Preferences;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(Core), "BankApp", "2.0.2", "svindler, Lalisa", null)]
[assembly: MelonGame("TVGS", "Schedule I")]
[assembly: MelonColor(0, 255, 0, 249)]
[assembly: MelonAuthorColor(0, 234, 0, 255)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("BankApp")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6610f02bb7b0f9f5a27911328b7bc62b0787a784")]
[assembly: AssemblyProduct("BankApp")]
[assembly: AssemblyTitle("BankApp")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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;
		}
	}
}
namespace BankApp
{
	public static class ColorPalette
	{
		public static readonly Color32 PROGRESSBAR_BG = new Color32((byte)31, (byte)41, (byte)55, byte.MaxValue);

		public static readonly Color32 PROGRESSBAR_FILL = new Color32((byte)8, (byte)145, (byte)178, byte.MaxValue);

		public static readonly Color32 ONLINEBAL = new Color32((byte)34, (byte)211, (byte)238, byte.MaxValue);

		public static readonly Color32 CASHBAL = new Color32((byte)52, (byte)211, (byte)153, byte.MaxValue);

		public static readonly Color32 TABBUTTON_ACTIVE = new Color32((byte)8, (byte)145, (byte)178, byte.MaxValue);

		public static readonly Color32 TABBUTTON_ACTIVE_HOVER = new Color32((byte)14, (byte)116, (byte)144, byte.MaxValue);

		public static readonly Color32 TABBUTTON_DISABLED = new Color32((byte)31, (byte)41, (byte)55, byte.MaxValue);

		public static readonly Color32 TABBUTTON_DISABLED_HOVER = new Color32((byte)55, (byte)65, (byte)81, byte.MaxValue);

		public static readonly Color32 AMOUNTBUTTONS_DEFAULT = new Color32((byte)31, (byte)41, (byte)55, byte.MaxValue);

		public static readonly Color32 AMOUNTBUTTONS_HOVER = new Color32((byte)55, (byte)65, (byte)81, byte.MaxValue);

		public static readonly Color32 AMOUNTBUTTONS_CLICKED = new Color32((byte)20, (byte)24, (byte)29, byte.MaxValue);

		public static readonly Color32 CONFIRMBUTTON_DEFAULT = new Color32((byte)5, (byte)150, (byte)105, byte.MaxValue);

		public static readonly Color32 CONFIRMBUTTON_HOVERED = new Color32((byte)4, (byte)120, (byte)87, byte.MaxValue);
	}
	public class BankingAppBuilder
	{
		private readonly GameObject _container;

		private readonly int[] _amounts = new int[8] { 1, 5, 10, 25, 50, 100, 500, 1000 };

		private readonly Action<int> _onAmountSelected;

		private readonly Action _onConfirm;

		private readonly Action _onMax;

		private readonly Action _onReset;

		private readonly Action _onDepositTab;

		private readonly Action _onWithdrawTab;

		public Text WeeklyAmountText { get; private set; }

		public RectTransform WeeklyProgressFill { get; private set; }

		public Text OnlineBalanceText { get; private set; }

		public Text CashBalanceText { get; private set; }

		public Text SelectedAmountText { get; private set; }

		public Button ConfirmButton { get; private set; }

		public Button MaxButton { get; private set; }

		public Button ResetButton { get; private set; }

		public GameObject WithdrawTab { get; private set; }

		public GameObject DepositTab { get; private set; }

		public BankingAppBuilder(GameObject container, Action<int> onAmountSelected, Action onConfirm, Action onMax, Action onReset, Action onDepositTab, Action onWithdrawTab)
		{
			_container = container;
			_onAmountSelected = onAmountSelected;
			_onConfirm = onConfirm;
			_onMax = onMax;
			_onReset = onReset;
			_onDepositTab = onDepositTab;
			_onWithdrawTab = onWithdrawTab;
		}

		public void BuildUI()
		{
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Expected O, but got Unknown
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01df: Expected O, but got Unknown
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Expected O, but got Unknown
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Unknown result type (might be due to invalid IL or missing references)
			//IL_0307: Expected O, but got Unknown
			//IL_034c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0351: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Unknown result type (might be due to invalid IL or missing references)
			//IL_036f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0382: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_040e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0415: Expected O, but got Unknown
			//IL_043a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_0469: Unknown result type (might be due to invalid IL or missing references)
			//IL_047e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0492: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ce: Expected O, but got Unknown
			//IL_052b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0530: Unknown result type (might be due to invalid IL or missing references)
			//IL_055b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0560: Unknown result type (might be due to invalid IL or missing references)
			//IL_059c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a3: Expected O, but got Unknown
			//IL_0600: Unknown result type (might be due to invalid IL or missing references)
			//IL_0605: Unknown result type (might be due to invalid IL or missing references)
			//IL_0630: Unknown result type (might be due to invalid IL or missing references)
			//IL_0635: Unknown result type (might be due to invalid IL or missing references)
			//IL_0671: Unknown result type (might be due to invalid IL or missing references)
			//IL_0678: Expected O, but got Unknown
			//IL_069c: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_072e: Unknown result type (might be due to invalid IL or missing references)
			//IL_076a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0771: Expected O, but got Unknown
			//IL_0796: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0854: Unknown result type (might be due to invalid IL or missing references)
			//IL_085b: Expected O, but got Unknown
			//IL_0880: Unknown result type (might be due to invalid IL or missing references)
			//IL_0895: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_08db: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_095c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0963: Expected O, but got Unknown
			//IL_0992: Unknown result type (might be due to invalid IL or missing references)
			//IL_0997: Unknown result type (might be due to invalid IL or missing references)
			//IL_09bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a01: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a89: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a90: Expected O, but got Unknown
			//IL_0ab5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0adf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b08: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b44: Expected O, but got Unknown
			//IL_0b73: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bcf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c0b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c4c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c53: Expected O, but got Unknown
			//IL_0c82: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cbd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cd2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cde: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cf4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d04: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d62: Expected O, but got Unknown
			//IL_0d87: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d9c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dc5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0def: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e25: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e2a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e2e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e33: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e52: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e60: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e86: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_container == (Object)null)
			{
				MelonLogger.Error("BankingAppBuilder: Container is null");
				return;
			}
			for (int num = _container.transform.childCount - 1; num >= 0; num--)
			{
				Object.Destroy((Object)(object)((Component)_container.transform.GetChild(num)).gameObject);
			}
			Sprite builtinResource = Resources.GetBuiltinResource<Sprite>("UI/Skin/UISprite.psd");
			Sprite val = GetGameSprite("Rectangle_RoundedEdges") ?? builtinResource;
			GameObject val2 = new GameObject("Card");
			val2.transform.SetParent(_container.transform, false);
			RectTransform obj = val2.AddComponent<RectTransform>();
			obj.anchorMin = new Vector2(0.5f, 0.5f);
			obj.anchorMax = new Vector2(0.5f, 0.5f);
			obj.sizeDelta = new Vector2(400f, 600f);
			obj.pivot = new Vector2(0.5f, 0.5f);
			obj.anchoredPosition = Vector2.zero;
			((Transform)obj).localScale = new Vector3(1.6145f, 2.0618f, 1f);
			Image obj2 = val2.AddComponent<Image>();
			((Graphic)obj2).color = Color32.op_Implicit(new Color32((byte)18, (byte)18, (byte)18, byte.MaxValue));
			((Graphic)obj2).raycastTarget = true;
			obj2.m_PixelsPerUnitMultiplier = 40f;
			GameObject val3 = new GameObject("Header");
			val3.transform.SetParent(val2.transform, false);
			RectTransform obj3 = val3.AddComponent<RectTransform>();
			obj3.anchorMin = new Vector2(0f, 0.7f);
			obj3.anchorMax = new Vector2(1f, 1f);
			Vector2 offsetMin = (obj3.offsetMax = Vector2.zero);
			obj3.offsetMin = offsetMin;
			obj3.pivot = new Vector2(0.5f, 1f);
			VerticalLayoutGroup obj4 = val3.AddComponent<VerticalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj4).spacing = 10f;
			((LayoutGroup)obj4).padding = new RectOffset(20, 20, 20, 20);
			((LayoutGroup)obj4).childAlignment = (TextAnchor)1;
			((HorizontalOrVerticalLayoutGroup)obj4).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj4).childForceExpandHeight = false;
			GameObject val4 = new GameObject("Progress");
			val4.transform.SetParent(val3.transform, false);
			HorizontalLayoutGroup obj5 = val4.AddComponent<HorizontalLayoutGroup>();
			((LayoutGroup)obj5).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj5).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj5).childForceExpandHeight = false;
			Text obj6 = CreateText("ProgressText", val4.transform, 16, Color32.op_Implicit(new Color32((byte)209, (byte)213, (byte)219, byte.MaxValue)));
			obj6.text = "Weekly Progress";
			obj6.alignment = (TextAnchor)3;
			Text val5 = CreateText("ProgressAmount", val4.transform, 16, Color32.op_Implicit(new Color32((byte)209, (byte)213, (byte)219, byte.MaxValue)));
			val5.text = $"${ATM.WeeklyDepositSum} / ${ATM.WEEKLY_DEPOSIT_LIMIT}";
			val5.alignment = (TextAnchor)5;
			WeeklyAmountText = val5;
			GameObject val6 = new GameObject("ProgressBar");
			val6.transform.SetParent(val3.transform, false);
			LayoutElement obj7 = val6.AddComponent<LayoutElement>();
			obj7.minHeight = 8f;
			obj7.preferredHeight = 8f;
			Image obj8 = val6.AddComponent<Image>();
			obj8.sprite = builtinResource;
			obj8.type = (Type)1;
			((Graphic)obj8).color = Color32.op_Implicit(ColorPalette.PROGRESSBAR_BG);
			obj8.m_PixelsPerUnitMultiplier = 40f;
			GameObject val7 = new GameObject("ProgressFill");
			val7.transform.SetParent(val6.transform, false);
			RectTransform val8 = val7.AddComponent<RectTransform>();
			val8.anchorMin = Vector2.zero;
			float num2 = Mathf.Clamp01(ATM.WeeklyDepositSum / ATM.WEEKLY_DEPOSIT_LIMIT);
			val8.anchorMax = new Vector2(num2, 1f);
			offsetMin = (val8.offsetMax = Vector2.zero);
			val8.offsetMin = offsetMin;
			WeeklyProgressFill = val8;
			Image obj9 = val7.AddComponent<Image>();
			obj9.sprite = builtinResource;
			obj9.type = (Type)0;
			((Graphic)obj9).color = Color32.op_Implicit(ColorPalette.PROGRESSBAR_FILL);
			obj9.m_PixelsPerUnitMultiplier = 1f;
			GameObject val9 = new GameObject("Balance");
			val9.transform.SetParent(val3.transform, false);
			RectTransform obj10 = val9.AddComponent<RectTransform>();
			obj10.sizeDelta = new Vector2(0f, 60f);
			Canvas.ForceUpdateCanvases();
			obj10.anchorMin = new Vector2(0.5f, 0.5f);
			obj10.anchorMax = new Vector2(0.5f, 0.5f);
			obj10.pivot = new Vector2(0.5f, 0.5f);
			obj10.anchoredPosition = new Vector2(0f, 40f);
			HorizontalLayoutGroup obj11 = val9.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj11).spacing = 20f;
			((LayoutGroup)obj11).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj11).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj11).childForceExpandHeight = true;
			GameObject val10 = new GameObject("CashBalance");
			val10.transform.SetParent(val9.transform, false);
			VerticalLayoutGroup obj12 = val10.AddComponent<VerticalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj12).spacing = 5f;
			((LayoutGroup)obj12).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj12).childForceExpandWidth = false;
			((HorizontalOrVerticalLayoutGroup)obj12).childForceExpandHeight = false;
			Text obj13 = CreateText("CashLabel", val10.transform, 20, Color32.op_Implicit(new Color32((byte)139, (byte)145, (byte)155, byte.MaxValue)));
			obj13.text = "Cash Balance";
			obj13.alignment = (TextAnchor)4;
			CashBalanceText = CreateText("CashBalanceText", val10.transform, 20, Color32.op_Implicit(ColorPalette.CASHBAL));
			CashBalanceText.text = "$0.00";
			CashBalanceText.alignment = (TextAnchor)4;
			CashBalanceText.fontStyle = (FontStyle)1;
			GameObject val11 = new GameObject("OnlineBalance");
			val11.transform.SetParent(val9.transform, false);
			VerticalLayoutGroup obj14 = val11.AddComponent<VerticalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj14).spacing = 5f;
			((LayoutGroup)obj14).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj14).childForceExpandWidth = false;
			((HorizontalOrVerticalLayoutGroup)obj14).childForceExpandHeight = false;
			Text obj15 = CreateText("OnlineLabel", val11.transform, 20, Color32.op_Implicit(new Color32((byte)139, (byte)145, (byte)155, byte.MaxValue)));
			obj15.text = "Online Balance";
			obj15.alignment = (TextAnchor)4;
			OnlineBalanceText = CreateText("OnlineBalanceText", val11.transform, 20, Color32.op_Implicit(ColorPalette.ONLINEBAL));
			OnlineBalanceText.text = "$0.00";
			OnlineBalanceText.alignment = (TextAnchor)4;
			OnlineBalanceText.fontStyle = (FontStyle)1;
			GameObject val12 = new GameObject("AmountDisplay");
			val12.transform.SetParent(val3.transform, false);
			val12.AddComponent<RectTransform>().sizeDelta = new Vector2(0f, 40f);
			HorizontalLayoutGroup obj16 = val12.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj16).spacing = 10f;
			((LayoutGroup)obj16).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj16).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj16).childForceExpandHeight = true;
			Text obj17 = CreateText("AmountLabel", val12.transform, 14, Color32.op_Implicit(new Color32((byte)209, (byte)213, (byte)219, byte.MaxValue)));
			obj17.text = "Amount";
			obj17.alignment = (TextAnchor)3;
			obj17.fontStyle = (FontStyle)1;
			obj17.fontSize = 18;
			SelectedAmountText = CreateText("AmountText", val12.transform, 18, Color.white);
			SelectedAmountText.text = "$0.00";
			SelectedAmountText.alignment = (TextAnchor)5;
			SelectedAmountText.fontStyle = (FontStyle)1;
			GameObject val13 = new GameObject("Tabs");
			val13.transform.SetParent(val2.transform, false);
			RectTransform obj18 = val13.AddComponent<RectTransform>();
			obj18.anchorMin = new Vector2(0.5f, 1f);
			obj18.anchorMax = new Vector2(0.5f, 1f);
			obj18.pivot = new Vector2(0.5f, 1f);
			obj18.sizeDelta = new Vector2(360f, 35f);
			obj18.anchoredPosition = new Vector2(0f, -165f);
			HorizontalLayoutGroup obj19 = val13.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj19).spacing = 10f;
			((LayoutGroup)obj19).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj19).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj19).childForceExpandHeight = true;
			DepositTab = CreateTabButton(val13, "⇧ Deposit", active: true, _onDepositTab, val);
			WithdrawTab = CreateTabButton(val13, "⇩ Withdraw", active: false, _onWithdrawTab, val);
			GameObject val14 = new GameObject("AmountButtons");
			val14.transform.SetParent(val2.transform, false);
			RectTransform obj20 = val14.AddComponent<RectTransform>();
			obj20.anchorMin = new Vector2(0.0515f, 1f);
			obj20.anchorMax = new Vector2(1f, 1f);
			obj20.offsetMin = Vector2.zero;
			obj20.offsetMax = Vector2.zero;
			obj20.anchoredPosition = new Vector2(0f, -210f);
			GridLayoutGroup obj21 = val14.AddComponent<GridLayoutGroup>();
			obj21.cellSize = new Vector2(174.6f, 50f);
			obj21.spacing = new Vector2(10f, 10f);
			obj21.constraint = (Constraint)1;
			obj21.constraintCount = 2;
			int[] amounts = _amounts;
			foreach (int amt in amounts)
			{
				GameObject val15 = new GameObject($"Amount_{amt}");
				val15.transform.SetParent(val14.transform, false);
				Image val16 = val15.AddComponent<Image>();
				val16.sprite = val;
				val16.type = (Type)1;
				((Graphic)val16).color = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_DEFAULT);
				val16.m_PixelsPerUnitMultiplier = 40f;
				Button obj22 = val15.AddComponent<Button>();
				((Selectable)obj22).targetGraphic = (Graphic)(object)val16;
				ColorBlock colors = ((Selectable)obj22).colors;
				((ColorBlock)(ref colors)).normalColor = Color.white;
				((ColorBlock)(ref colors)).highlightedColor = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_HOVER);
				((ColorBlock)(ref colors)).pressedColor = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_CLICKED);
				((ColorBlock)(ref colors)).selectedColor = ((Graphic)val16).color;
				((Selectable)obj22).colors = colors;
				Text obj23 = CreateText("Text", val15.transform, 16, Color.white);
				obj23.text = $"${amt}";
				obj23.alignment = (TextAnchor)4;
				((UnityEvent)obj22.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
				{
					_onAmountSelected(amt);
				}));
			}
			GameObject val17 = new GameObject("ActionButtons");
			val17.transform.SetParent(val2.transform, false);
			RectTransform obj24 = val17.AddComponent<RectTransform>();
			obj24.anchorMin = new Vector2(0.5f, 0f);
			obj24.anchorMax = new Vector2(0.5f, 0f);
			obj24.pivot = new Vector2(0.5f, 0f);
			obj24.sizeDelta = new Vector2(360f, 50f);
			obj24.anchoredPosition = new Vector2(0f, 100f);
			HorizontalLayoutGroup obj25 = val17.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj25).spacing = 10f;
			((LayoutGroup)obj25).childAlignment = (TextAnchor)4;
			((HorizontalOrVerticalLayoutGroup)obj25).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj25).childForceExpandHeight = true;
			GameObject val18 = new GameObject("ClearButton");
			val18.transform.SetParent(val17.transform, false);
			Image val19 = val18.AddComponent<Image>();
			val19.sprite = val;
			val19.type = (Type)1;
			((Graphic)val19).color = Color.white;
			val19.m_PixelsPerUnitMultiplier = 40f;
			ResetButton = val18.AddComponent<Button>();
			((Selectable)ResetButton).targetGraphic = (Graphic)(object)val19;
			ColorBlock colors2 = ((Selectable)ResetButton).colors;
			((Graphic)val19).color = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_DEFAULT);
			((ColorBlock)(ref colors2)).normalColor = Color.white;
			((ColorBlock)(ref colors2)).highlightedColor = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_HOVER);
			((ColorBlock)(ref colors2)).pressedColor = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_CLICKED);
			((Selectable)ResetButton).colors = colors2;
			Text obj26 = CreateText("Text", val18.transform, 16, Color.white);
			obj26.text = "✕ Clear";
			obj26.alignment = (TextAnchor)4;
			((UnityEvent)ResetButton.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
			{
				_onReset();
			}));
			GameObject val20 = new GameObject("MaxButton");
			val20.transform.SetParent(val17.transform, false);
			Image val21 = val20.AddComponent<Image>();
			val21.sprite = val;
			val21.type = (Type)1;
			((Graphic)val21).color = Color.white;
			val21.m_PixelsPerUnitMultiplier = 40f;
			MaxButton = val20.AddComponent<Button>();
			((Selectable)MaxButton).targetGraphic = (Graphic)(object)val21;
			ColorBlock colors3 = ((Selectable)MaxButton).colors;
			((Graphic)val21).color = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_DEFAULT);
			((ColorBlock)(ref colors3)).normalColor = Color.white;
			((ColorBlock)(ref colors3)).highlightedColor = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_HOVER);
			((ColorBlock)(ref colors3)).pressedColor = Color32.op_Implicit(ColorPalette.AMOUNTBUTTONS_CLICKED);
			((Selectable)MaxButton).colors = colors3;
			Text obj27 = CreateText("Text", val20.transform, 16, Color.white);
			obj27.text = "MAX";
			obj27.alignment = (TextAnchor)4;
			((UnityEvent)MaxButton.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
			{
				_onMax();
			}));
			GameObject val22 = new GameObject("ConfirmButton");
			val22.transform.SetParent(val2.transform, false);
			RectTransform obj28 = val22.AddComponent<RectTransform>();
			obj28.anchorMin = new Vector2(0.05f, 0.05f);
			obj28.anchorMax = new Vector2(0.95f, 0.143f);
			obj28.offsetMin = new Vector2(0f, 4f);
			obj28.offsetMax = new Vector2(0f, 4f);
			Image val23 = val22.AddComponent<Image>();
			val23.sprite = val;
			val23.type = (Type)1;
			((Graphic)val23).color = Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_DEFAULT);
			val23.m_PixelsPerUnitMultiplier = 40f;
			ConfirmButton = val22.AddComponent<Button>();
			((Selectable)ConfirmButton).targetGraphic = (Graphic)(object)val23;
			ColorBlock colors4 = ((Selectable)ConfirmButton).colors;
			((ColorBlock)(ref colors4)).normalColor = Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_DEFAULT);
			((ColorBlock)(ref colors4)).highlightedColor = Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_HOVERED);
			((ColorBlock)(ref colors4)).pressedColor = ((ColorBlock)(ref colors4)).pressedColor;
			((ColorBlock)(ref colors4)).selectedColor = ((Graphic)val23).color;
			((Selectable)ConfirmButton).colors = colors4;
			Text obj29 = CreateText("Text", val22.transform, 18, Color.white);
			obj29.text = "";
			obj29.alignment = (TextAnchor)4;
			obj29.fontStyle = (FontStyle)1;
			((UnityEvent)ConfirmButton.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
			{
				_onConfirm();
			}));
			MelonLogger.Msg("BankingAppBuilder: UI build complete.");
		}

		private GameObject CreateTabButton(GameObject parent, string label, bool active, Action onClick, Sprite buttonSprite)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject(label + "Tab");
			val.transform.SetParent(parent.transform, false);
			val.AddComponent<RectTransform>().sizeDelta = new Vector2(0f, 40f);
			Image val2 = val.AddComponent<Image>();
			val2.sprite = buttonSprite;
			val2.type = (Type)1;
			((Graphic)val2).color = Color32.op_Implicit(active ? new Color32((byte)8, (byte)145, (byte)178, byte.MaxValue) : new Color32((byte)31, (byte)41, (byte)55, byte.MaxValue));
			val2.m_PixelsPerUnitMultiplier = 40f;
			Button obj = val.AddComponent<Button>();
			((Selectable)obj).targetGraphic = (Graphic)(object)val2;
			ColorBlock colors = ((Selectable)obj).colors;
			((ColorBlock)(ref colors)).normalColor = ((Graphic)val2).color;
			((ColorBlock)(ref colors)).highlightedColor = Color32.op_Implicit(active ? new Color32((byte)14, (byte)116, (byte)144, byte.MaxValue) : new Color32((byte)55, (byte)65, (byte)81, byte.MaxValue));
			((ColorBlock)(ref colors)).pressedColor = Color32.op_Implicit(active ? new Color32((byte)7, (byte)89, (byte)110, byte.MaxValue) : new Color32((byte)20, (byte)24, (byte)29, byte.MaxValue));
			((ColorBlock)(ref colors)).selectedColor = ((Graphic)val2).color;
			((Selectable)obj).colors = colors;
			Text obj2 = CreateText(label + "Text", val.transform, 20, Color.white);
			obj2.text = label;
			obj2.alignment = (TextAnchor)4;
			obj2.fontStyle = (FontStyle)1;
			obj2.fontSize = 20;
			((UnityEvent)obj.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
			{
				onClick();
			}));
			return val;
		}

		private Text CreateText(string name, Transform parent, int size, Color col)
		{
			//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_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject(name);
			val.transform.SetParent(parent, false);
			RectTransform obj = val.AddComponent<RectTransform>();
			obj.anchorMin = Vector2.zero;
			obj.anchorMax = Vector2.one;
			Vector2 offsetMin = (obj.offsetMax = Vector2.zero);
			obj.offsetMin = offsetMin;
			Text obj2 = val.AddComponent<Text>();
			obj2.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
			obj2.fontSize = size;
			((Graphic)obj2).color = col;
			obj2.alignment = (TextAnchor)4;
			obj2.fontStyle = (FontStyle)1;
			return obj2;
		}

		private Sprite GetGameSprite(string spriteName)
		{
			Sprite[] array = Il2CppArrayBase<Sprite>.op_Implicit(Resources.FindObjectsOfTypeAll<Sprite>());
			foreach (Sprite val in array)
			{
				if (((Object)val).name.Equals(spriteName, StringComparison.OrdinalIgnoreCase))
				{
					return val;
				}
			}
			MelonLogger.Error("Sprite '" + spriteName + "' not found!");
			return null;
		}
	}
	public class Core : MelonMod
	{
		private enum TabType
		{
			Withdraw,
			Deposit
		}

		[CompilerGenerated]
		private sealed class <AnimateProgressBar>d__51 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public float duration;

			public float from;

			public float to;

			public Core <>4__this;

			private float <elapsed>5__2;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <AnimateProgressBar>d__51(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
				int num = <>1__state;
				Core core = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<elapsed>5__2 = 0f;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (<elapsed>5__2 < duration)
				{
					float num2 = <elapsed>5__2 / duration;
					float num3 = Mathf.Lerp(from, to, num2);
					core._weeklyProgressFill.anchorMax = new Vector2(num3, 1f);
					<elapsed>5__2 += Time.deltaTime;
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				core._weeklyProgressFill.anchorMax = new Vector2(to, 1f);
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <EnsureIconFileExists>d__33 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public Core <>4__this;

			private string <filePath>5__2;

			private UnityWebRequest <uwr>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <EnsureIconFileExists>d__33(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<filePath>5__2 = null;
				<uwr>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				int num = <>1__state;
				Core core = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<filePath>5__2 = Path.Combine("UserData/BankApp", core.iconFileName);
					if (!File.Exists(<filePath>5__2))
					{
						MelonLogger.Msg("Downloading icon from " + core.iconUrl);
						<uwr>5__3 = UnityWebRequest.Get(core.iconUrl);
						<>2__current = <uwr>5__3.SendWebRequest();
						<>1__state = 1;
						return true;
					}
					MelonLogger.Msg("Icon already present at " + <filePath>5__2);
					break;
				case 1:
					<>1__state = -1;
					if (<uwr>5__3.isNetworkError || <uwr>5__3.isHttpError)
					{
						MelonLogger.Error("Icon download failed: " + <uwr>5__3.error);
						<uwr>5__3.Dispose();
						return false;
					}
					File.WriteAllBytes(<filePath>5__2, Il2CppArrayBase<byte>.op_Implicit((Il2CppArrayBase<byte>)(object)<uwr>5__3.downloadHandler.data));
					MelonLogger.Msg("Icon saved to " + <filePath>5__2);
					<uwr>5__3.Dispose();
					<uwr>5__3 = null;
					break;
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <SetActiveIconSprite>d__37 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public Core <>4__this;

			public Image targetImage;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <SetActiveIconSprite>d__37(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_008a: Unknown result type (might be due to invalid IL or missing references)
				int num = <>1__state;
				Core core = <>4__this;
				if (num != 0)
				{
					return false;
				}
				<>1__state = -1;
				string text = Path.Combine("UserData/BankApp", core.iconFileName);
				if (!File.Exists(text))
				{
					MelonLogger.Error("Icon file not found at " + text);
					return false;
				}
				byte[] data = File.ReadAllBytes(text);
				Texture2D val = core.CreatePersistentTexture(data);
				if ((Object)(object)val != (Object)null)
				{
					Sprite sprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
					targetImage.sprite = sprite;
					targetImage.preserveAspect = true;
					((Graphic)targetImage).SetAllDirty();
				}
				else
				{
					MelonLogger.Error("Failed to load icon texture.");
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <UpdateAppIconLabelAndSpriteCoroutine>d__36 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public GameObject iconGO;

			public Core <>4__this;

			private Transform <lbl>5__2;

			private int <i>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <UpdateAppIconLabelAndSpriteCoroutine>d__36(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<lbl>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				int num = <>1__state;
				Core core = <>4__this;
				Transform obj;
				Transform val;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<lbl>5__2 = null;
					<i>5__3 = 0;
					goto IL_007d;
				case 1:
					<>1__state = -1;
					<i>5__3++;
					goto IL_007d;
				case 2:
					{
						<>1__state = -1;
						((Object)iconGO).name = "BankingApp";
						core._iconModified = true;
						return false;
					}
					IL_007d:
					if (<i>5__3 < 10 && (Object)(object)<lbl>5__2 == (Object)null)
					{
						<lbl>5__2 = iconGO.transform.Find("Label");
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					if ((Object)(object)<lbl>5__2 != (Object)null)
					{
						Text component = ((Component)<lbl>5__2).GetComponent<Text>();
						if (component != null)
						{
							component.text = "Bank";
							goto IL_00c9;
						}
					}
					MelonLogger.Error("Icon label text component not found.");
					goto IL_00c9;
					IL_00c9:
					obj = iconGO.transform.Find("Mask");
					val = ((obj != null) ? obj.Find("Image") : null);
					if (!((Object)(object)val == (Object)null))
					{
						Image component2 = ((Component)val).GetComponent<Image>();
						if (component2 != null)
						{
							<>2__current = core.SetActiveIconSprite(component2);
							<>1__state = 2;
							return true;
						}
					}
					MelonLogger.Error("Icon Mask/Image missing.");
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private readonly string iconUrl = "https://i.imgur.com/hsVNqRx.png";

		private readonly string iconFileName = "BankAppIcon.png";

		private GameObject _bankingAppPanel;

		private bool _appSetupAttempted;

		private bool _appCreated;

		private bool _iconModified;

		private float _selectedAmount;

		private int[] amounts = new int[8] { 1, 5, 10, 25, 50, 100, 500, 1000 };

		private int _weeklyDepositLimit = (int)ATM.WEEKLY_DEPOSIT_LIMIT;

		private Text _onlineBalanceText;

		private Text _cashBalanceText;

		private Text _selectedAmountText;

		private Text _weeklyAmountText;

		private RectTransform _weeklyProgressFill;

		private const string TEMPLATE_APP_NAME = "Messages";

		private const string APP_OBJECT_NAME = "BankingApp";

		private const string APP_LABEL_TEXT = "Bank";

		private Button _confirmButton;

		private Button _maxButton;

		private Button _resetButton;

		private GameObject _withdrawTab;

		private GameObject _depositTab;

		private TabType _currentTab = TabType.Deposit;

		private float _lastProgressRatio;

		private MelonPreferences_Entry<bool> _disableWeeklyDepositLimit;

		private MelonPreferences_Entry<int> _WeeklyDepositResetInterval;

		private float _timeSinceLastReset;

		public override void OnInitializeMelon()
		{
			MelonLogger.Msg("BankingApp: Initializing mod...");
			EnsureUserDataFolderExists();
			loadPreferences();
			MelonCoroutines.Start(EnsureIconFileExists());
			ClassInjector.RegisterTypeInIl2Cpp<BankingAppComponent>();
			MelonLogger.Msg("BankingApp: Successfully registered BankingAppComponent type");
		}

		private void loadPreferences()
		{
			MelonLogger.Msg("Loading preferences...");
			MelonPreferences_Category val = MelonPreferences.CreateCategory("BankApp", "Banking App");
			val.SetFilePath("UserData/BankApp/BankApp.cfg", true);
			val.LoadFromFile(true);
			_disableWeeklyDepositLimit = val.CreateEntry<bool>("DisableWeeklyDepositLimit", false, "Disable Weekly Deposit Limit", "Disable the weekly deposit limit for the ATM and BankApp.", false, false, (ValueValidator)null, (string)null);
			_WeeklyDepositResetInterval = val.CreateEntry<int>("WeeklyDepositResetInterval", 10, "Weekly Deposit Reset Interval", "The interval in seconds after which the weekly deposit limit resets.", false, false, (ValueValidator)null, (string)null);
			val.SaveToFile(true);
			MelonLogger.Msg("Preferences loaded.");
		}

		public override void OnSceneWasLoaded(int buildIndex, string sceneName)
		{
			//IL_0048: 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: Expected O, but got Unknown
			if (sceneName.Equals("Main", StringComparison.OrdinalIgnoreCase))
			{
				MelonLogger.Msg("Main scene loaded. Setting up BankingAppComponent.");
				_appSetupAttempted = (_appCreated = (_iconModified = false));
				if ((Object)(object)GameObject.Find("BankingAppComponentHolder") == (Object)null)
				{
					GameObject val = new GameObject("BankingAppComponentHolder");
					Object.DontDestroyOnLoad((Object)val);
					val.AddComponent<BankingAppComponent>();
				}
			}
		}

		public override void OnUpdate()
		{
			if (!_appSetupAttempted && (Object)(object)GameObject.Find("Player_Local/CameraContainer/Camera/OverlayCamera/GameplayMenu/Phone/phone/AppsCanvas") != (Object)null)
			{
				MelonLogger.Msg("AppsCanvas found, creating app and icon.");
				_appSetupAttempted = true;
				CreateOrEnsureAppAndIcon();
			}
			UpdateBalanceText();
			ResetWeeklyDepositSum();
		}

		private void EnsureUserDataFolderExists()
		{
			string text = Path.Combine("UserData", "BankApp");
			if (!Directory.Exists(text))
			{
				Directory.CreateDirectory(text);
				MelonLogger.Msg("Created missing directory at '" + text + "'.");
			}
		}

		[IteratorStateMachine(typeof(<EnsureIconFileExists>d__33))]
		private IEnumerator EnsureIconFileExists()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <EnsureIconFileExists>d__33(0)
			{
				<>4__this = this
			};
		}

		private void ResetWeeklyDepositSum()
		{
			if (_disableWeeklyDepositLimit.Value)
			{
				_timeSinceLastReset += Time.deltaTime;
				int value = _WeeklyDepositResetInterval.Value;
				if (_timeSinceLastReset >= (float)value)
				{
					ATM.WeeklyDepositSum = 0f;
					_timeSinceLastReset = 0f;
					UpdateBalanceText();
				}
			}
		}

		private void CreateOrEnsureAppAndIcon()
		{
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			MelonLogger.Msg("Enter CreateOrEnsureAppAndIcon");
			if (_appCreated && _iconModified)
			{
				MelonLogger.Msg("Already created & icon set—skipping.");
				return;
			}
			GameObject val = GameObject.Find("Player_Local/CameraContainer/Camera/OverlayCamera/GameplayMenu/Phone/phone/AppsCanvas");
			if ((Object)(object)val == (Object)null)
			{
				MelonLogger.Error("AppsCanvas not found.");
				return;
			}
			Transform val2 = val.transform.Find("BankingApp");
			if ((Object)(object)val2 != (Object)null)
			{
				MelonLogger.Msg("Found existing BankingApp—rebuilding UI if needed.");
				_bankingAppPanel = ((Component)val2).gameObject;
				EnsureAppPanelIsSetup(_bankingAppPanel);
			}
			else
			{
				MelonLogger.Msg("Cloning template 'Messages'...");
				Transform val3 = val.transform.Find("Messages");
				if ((Object)(object)val3 == (Object)null)
				{
					MelonLogger.Error("Template 'Messages' missing.");
					return;
				}
				_bankingAppPanel = Object.Instantiate<GameObject>(((Component)val3).gameObject, val.transform);
				((Object)_bankingAppPanel).name = "BankingApp";
				Transform obj = _bankingAppPanel.transform.Find("Container");
				GameObject val4 = ((obj != null) ? ((Component)obj).gameObject : null);
				if ((Object)(object)val4 != (Object)null)
				{
					BankingAppBuilder bankingAppBuilder = new BankingAppBuilder(val4, delegate(int amt)
					{
						OnSelectAmount(amt);
					}, delegate
					{
						OnConfirmPressed();
					}, delegate
					{
						MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
						if (!((Object)(object)instance == (Object)null))
						{
							if (_currentTab == TabType.Withdraw)
							{
								SetSelectedAmount((int)instance.onlineBalance);
							}
							else
							{
								SetSelectedAmount((int)Mathf.Min(instance.cashBalance, (float)DepositMax()));
							}
						}
					}, delegate
					{
						UpdateSelectedAmount(0);
					}, delegate
					{
						SetActiveTab(TabType.Deposit);
					}, delegate
					{
						SetActiveTab(TabType.Withdraw);
					});
					bankingAppBuilder.BuildUI();
					_weeklyAmountText = bankingAppBuilder.WeeklyAmountText;
					_weeklyProgressFill = bankingAppBuilder.WeeklyProgressFill;
					if ((Object)(object)_weeklyProgressFill != (Object)null)
					{
						_lastProgressRatio = _weeklyProgressFill.anchorMax.x;
					}
					_onlineBalanceText = bankingAppBuilder.OnlineBalanceText;
					_cashBalanceText = bankingAppBuilder.CashBalanceText;
					_selectedAmountText = bankingAppBuilder.SelectedAmountText;
					_confirmButton = bankingAppBuilder.ConfirmButton;
					_maxButton = bankingAppBuilder.MaxButton;
					_resetButton = bankingAppBuilder.ResetButton;
					_depositTab = bankingAppBuilder.DepositTab;
					_withdrawTab = bankingAppBuilder.WithdrawTab;
				}
				else
				{
					MelonLogger.Warning("No 'Container' under cloned app panel.");
				}
				GameObject val5 = GameObject.Find("Player_Local/CameraContainer/Camera/OverlayCamera/GameplayMenu/Phone/phone/HomeScreen/AppIcons");
				if ((Object)(object)val5 != (Object)null && val5.transform.childCount > 7)
				{
					GameObject gameObject = ((Component)val5.transform.GetChild(7)).gameObject;
					MelonCoroutines.Start(UpdateAppIconLabelAndSpriteCoroutine(gameObject));
				}
				else
				{
					MelonLogger.Error("Can't find BankingApp icon slot.");
				}
				AttachButtonClickEvent(_bankingAppPanel);
				_appCreated = true;
				MelonLogger.Msg("BankingApp created.");
			}
			MelonLogger.Msg("Exit CreateOrEnsureAppAndIcon");
		}

		[IteratorStateMachine(typeof(<UpdateAppIconLabelAndSpriteCoroutine>d__36))]
		private IEnumerator UpdateAppIconLabelAndSpriteCoroutine(GameObject iconGO)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <UpdateAppIconLabelAndSpriteCoroutine>d__36(0)
			{
				<>4__this = this,
				iconGO = iconGO
			};
		}

		[IteratorStateMachine(typeof(<SetActiveIconSprite>d__37))]
		private IEnumerator SetActiveIconSprite(Image targetImage)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <SetActiveIconSprite>d__37(0)
			{
				<>4__this = this,
				targetImage = targetImage
			};
		}

		private void EnsureAppPanelIsSetup(GameObject appPanel)
		{
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			if (_appCreated)
			{
				return;
			}
			Transform obj = appPanel.transform.Find("Container");
			GameObject val = ((obj != null) ? ((Component)obj).gameObject : null);
			if ((Object)(object)val != (Object)null)
			{
				BankingAppBuilder bankingAppBuilder = new BankingAppBuilder(val, delegate(int amt)
				{
					OnSelectAmount(amt);
				}, delegate
				{
					OnConfirmPressed();
				}, delegate
				{
					MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
					if (!((Object)(object)instance == (Object)null))
					{
						if (_currentTab == TabType.Withdraw)
						{
							SetSelectedAmount((int)instance.onlineBalance);
						}
						else
						{
							SetSelectedAmount((int)Mathf.Min(instance.cashBalance, (float)DepositMax()));
						}
					}
				}, delegate
				{
					UpdateSelectedAmount(0);
				}, delegate
				{
					SetActiveTab(TabType.Deposit);
				}, delegate
				{
					SetActiveTab(TabType.Withdraw);
				});
				bankingAppBuilder.BuildUI();
				_weeklyAmountText = bankingAppBuilder.WeeklyAmountText;
				_weeklyProgressFill = bankingAppBuilder.WeeklyProgressFill;
				if ((Object)(object)_weeklyProgressFill != (Object)null)
				{
					_lastProgressRatio = _weeklyProgressFill.anchorMax.x;
				}
				_onlineBalanceText = bankingAppBuilder.OnlineBalanceText;
				_cashBalanceText = bankingAppBuilder.CashBalanceText;
				_selectedAmountText = bankingAppBuilder.SelectedAmountText;
				_confirmButton = bankingAppBuilder.ConfirmButton;
				_maxButton = bankingAppBuilder.MaxButton;
				_resetButton = bankingAppBuilder.ResetButton;
				_depositTab = bankingAppBuilder.DepositTab;
				_withdrawTab = bankingAppBuilder.WithdrawTab;
			}
			AttachButtonClickEvent(appPanel);
			_appCreated = true;
		}

		private void SetActiveTab(TabType tab)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: 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_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			_currentTab = tab;
			Image component = _withdrawTab.GetComponent<Image>();
			Image component2 = _depositTab.GetComponent<Image>();
			((Graphic)component).color = Color32.op_Implicit((tab == TabType.Withdraw) ? ColorPalette.TABBUTTON_ACTIVE : ColorPalette.TABBUTTON_DISABLED);
			((Graphic)component2).color = Color32.op_Implicit((tab == TabType.Deposit) ? ColorPalette.TABBUTTON_ACTIVE : ColorPalette.TABBUTTON_DISABLED);
			Button component3 = _withdrawTab.GetComponent<Button>();
			Button component4 = _depositTab.GetComponent<Button>();
			ColorBlock colors = ((Selectable)component3).colors;
			((ColorBlock)(ref colors)).normalColor = ((Graphic)component).color;
			((ColorBlock)(ref colors)).highlightedColor = Color32.op_Implicit((tab == TabType.Withdraw) ? ColorPalette.TABBUTTON_ACTIVE_HOVER : ColorPalette.TABBUTTON_DISABLED_HOVER);
			((ColorBlock)(ref colors)).pressedColor = Color32.op_Implicit((tab == TabType.Withdraw) ? ColorPalette.TABBUTTON_ACTIVE_HOVER : ColorPalette.TABBUTTON_DISABLED_HOVER);
			((ColorBlock)(ref colors)).selectedColor = ((ColorBlock)(ref colors)).normalColor;
			((Selectable)component3).colors = colors;
			ColorBlock colors2 = ((Selectable)component4).colors;
			((ColorBlock)(ref colors2)).normalColor = ((Graphic)component2).color;
			((ColorBlock)(ref colors2)).highlightedColor = Color32.op_Implicit((tab == TabType.Deposit) ? ColorPalette.TABBUTTON_ACTIVE_HOVER : ColorPalette.TABBUTTON_DISABLED_HOVER);
			((ColorBlock)(ref colors2)).pressedColor = Color32.op_Implicit((tab == TabType.Deposit) ? ColorPalette.TABBUTTON_ACTIVE_HOVER : ColorPalette.TABBUTTON_DISABLED_HOVER);
			((ColorBlock)(ref colors2)).selectedColor = ((ColorBlock)(ref colors2)).normalColor;
			((Selectable)component4).colors = colors2;
			((Selectable)component3).OnDeselect((BaseEventData)null);
			((Selectable)component4).OnDeselect((BaseEventData)null);
			if ((Object)(object)EventSystem.current != (Object)null)
			{
				EventSystem.current.SetSelectedGameObject((GameObject)null);
			}
			UpdateUIForCurrentTab();
			UpdateConfirmButtonLayout();
		}

		private void UpdateUIForCurrentTab()
		{
			if (_currentTab == TabType.Withdraw)
			{
				_selectedAmountText.text = $"${_selectedAmount:N0}";
			}
			else
			{
				_selectedAmountText.text = $"${_selectedAmount:N0}";
			}
			UpdateSelectedAmount(0);
		}

		private void UpdateConfirmButtonLayout()
		{
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: 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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: 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_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_confirmButton == (Object)null)
			{
				return;
			}
			Text componentInChildren = ((Component)_confirmButton).GetComponentInChildren<Text>();
			MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
			if (!((Object)(object)instance == (Object)null))
			{
				if (_currentTab == TabType.Withdraw)
				{
					componentInChildren.text = "Withdraw";
					bool flag = _selectedAmount > 0f && _selectedAmount <= instance.onlineBalance;
					((Graphic)((Component)_confirmButton).GetComponent<Image>()).color = (flag ? Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_DEFAULT) : Color.gray);
					ColorBlock colors = ((Selectable)_confirmButton).colors;
					((ColorBlock)(ref colors)).normalColor = (flag ? Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_DEFAULT) : Color.gray);
					((ColorBlock)(ref colors)).highlightedColor = (flag ? Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_HOVERED) : Color.gray);
					((ColorBlock)(ref colors)).pressedColor = (flag ? Color32.op_Implicit(new Color32((byte)164, (byte)37, (byte)37, byte.MaxValue)) : Color.gray);
					((ColorBlock)(ref colors)).selectedColor = ((ColorBlock)(ref colors)).normalColor;
					((Selectable)_confirmButton).colors = colors;
					((Selectable)_confirmButton).interactable = flag;
				}
				else
				{
					componentInChildren.text = "Deposit";
					int num = DepositMax();
					bool flag2 = _selectedAmount > 0f && _selectedAmount <= (float)num && _selectedAmount <= instance.cashBalance;
					((Graphic)((Component)_confirmButton).GetComponent<Image>()).color = (flag2 ? Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_DEFAULT) : Color.gray);
					ColorBlock colors2 = ((Selectable)_confirmButton).colors;
					((ColorBlock)(ref colors2)).normalColor = (flag2 ? Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_DEFAULT) : Color.gray);
					((ColorBlock)(ref colors2)).highlightedColor = (flag2 ? Color32.op_Implicit(ColorPalette.CONFIRMBUTTON_HOVERED) : Color.gray);
					((ColorBlock)(ref colors2)).pressedColor = (flag2 ? Color32.op_Implicit(new Color32((byte)3, (byte)89, (byte)64, byte.MaxValue)) : Color.gray);
					((ColorBlock)(ref colors2)).selectedColor = ((ColorBlock)(ref colors2)).normalColor;
					((Selectable)_confirmButton).colors = colors2;
					((Selectable)_confirmButton).interactable = flag2;
				}
			}
		}

		private void OnConfirmPressed()
		{
			if (_currentTab == TabType.Withdraw)
			{
				OnWithdrawPressed();
			}
			else
			{
				OnDepositPressed();
			}
		}

		private void AttachButtonClickEvent(GameObject panel)
		{
			if ((Object)(object)panel == (Object)null)
			{
				return;
			}
			Button val = panel.GetComponent<Button>() ?? panel.AddComponent<Button>();
			if ((Object)(object)((Selectable)val).targetGraphic == (Object)null)
			{
				Image val2 = panel.GetComponent<Image>() ?? panel.GetComponentInChildren<Image>(true);
				if ((Object)(object)val2 != (Object)null)
				{
					((Selectable)val).targetGraphic = (Graphic)(object)val2;
				}
			}
			((UnityEventBase)val.onClick).RemoveAllListeners();
			((UnityEvent)val.onClick).AddListener(UnityAction.op_Implicit((Action)delegate
			{
				panel.SetActive(true);
				panel.transform.SetAsLastSibling();
				MelonLogger.Msg("Bank app opened.");
			}));
		}

		private Texture2D CreatePersistentTexture(byte[] data)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Expected O, but got Unknown
			try
			{
				Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
				if (ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(data)))
				{
					((Object)val).hideFlags = (HideFlags)32;
					return val;
				}
			}
			catch (Exception ex)
			{
				MelonLogger.Msg("Texture error: " + ex);
			}
			return null;
		}

		private void OnSelectAmount(int amt)
		{
			UpdateSelectedAmount(amt);
		}

		private void OnWithdrawPressed()
		{
			if (_selectedAmount <= 0f)
			{
				MelonLogger.Msg("[WITHDRAW] Zero not allowed.");
				return;
			}
			MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
			if ((Object)(object)instance == (Object)null)
			{
				MelonLogger.Error("MoneyManager missing");
			}
			else if (instance.onlineBalance >= _selectedAmount)
			{
				instance.CreateOnlineTransaction("ATM Withdrawal", 0f - _selectedAmount, 1f, "ATM out");
				instance.ChangeCashBalance(_selectedAmount, true, true);
				MelonLogger.Msg($"[WITHDRAW] ${_selectedAmount:N0} done");
				UpdateSelectedAmount(0);
				UpdateBalanceText();
			}
			else
			{
				MelonLogger.Msg($"[WITHDRAW] Attempted withdrawal: {_selectedAmount:N0} | Insufficient Online Balance:{instance.onlineBalance:N0}");
			}
		}

		private void OnDepositPressed()
		{
			if (_selectedAmount <= 0f)
			{
				MelonLogger.Msg("[DEPOSIT] Zero not allowed.");
				return;
			}
			int num = DepositMax();
			if (_selectedAmount > (float)num)
			{
				MelonLogger.Msg($"[DEPOSIT] Exceeds weekly limit. You can only deposit up to ${num:N0} this week.");
				return;
			}
			MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
			if ((Object)(object)instance == (Object)null)
			{
				MelonLogger.Error("MoneyManager missing");
			}
			else if (instance.cashBalance >= _selectedAmount)
			{
				instance.CreateOnlineTransaction("ATM Deposit", _selectedAmount, 1f, "ATM in");
				instance.ChangeCashBalance(0f - _selectedAmount, true, true);
				ATM.WeeklyDepositSum += _selectedAmount;
				MelonLogger.Msg($"[DEPOSIT] ${_selectedAmount:N0} done");
				UpdateSelectedAmount(0);
				UpdateBalanceText();
			}
			else
			{
				MelonLogger.Msg($"[DEPOSIT] Attempted deposit: {_selectedAmount:N0} | Insufficient cash:{instance.cashBalance:N0}");
			}
		}

		private void UpdateSelectedAmount(int amt)
		{
			_selectedAmount = ((amt == 0) ? 0f : (_selectedAmount + (float)amt));
			if (_currentTab == TabType.Deposit)
			{
				_selectedAmount = Mathf.Min(_selectedAmount, (float)DepositMax());
			}
			if ((Object)(object)_selectedAmountText != (Object)null)
			{
				_selectedAmountText.text = $"${_selectedAmount:N0}";
			}
			UpdateConfirmButtonLayout();
		}

		private void SetSelectedAmount(int amt)
		{
			_selectedAmount = amt;
			if ((Object)(object)_selectedAmountText != (Object)null)
			{
				_selectedAmountText.text = $"${_selectedAmount:N0}";
			}
		}

		private void UpdateBalanceText()
		{
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
			if ((Object)(object)instance == (Object)null)
			{
				return;
			}
			if ((Object)(object)_onlineBalanceText != (Object)null)
			{
				_onlineBalanceText.text = $"${instance.onlineBalance:N0}";
			}
			if ((Object)(object)_cashBalanceText != (Object)null)
			{
				_cashBalanceText.text = $"${instance.cashBalance:N0}";
			}
			if ((Object)(object)_weeklyAmountText != (Object)null)
			{
				_weeklyAmountText.text = $"Weekly: ${ATM.WeeklyDepositSum}/{_weeklyDepositLimit}";
			}
			if ((Object)(object)_weeklyProgressFill != (Object)null)
			{
				float num = Mathf.Clamp01(ATM.WeeklyDepositSum / (float)_weeklyDepositLimit);
				float x = _weeklyProgressFill.anchorMax.x;
				if (Mathf.Abs(num - x) > 0.001f)
				{
					MelonCoroutines.Start(AnimateProgressBar(x, num, 0.5f));
				}
			}
			if (_currentTab == TabType.Deposit)
			{
				UpdateConfirmButtonLayout();
			}
		}

		[IteratorStateMachine(typeof(<AnimateProgressBar>d__51))]
		private IEnumerator AnimateProgressBar(float from, float to, float duration)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <AnimateProgressBar>d__51(0)
			{
				<>4__this = this,
				from = from,
				to = to,
				duration = duration
			};
		}

		private int DepositMax()
		{
			return _weeklyDepositLimit - (int)ATM.WeeklyDepositSum;
		}
	}
	[RegisterTypeInIl2Cpp]
	public class BankingAppComponent : MonoBehaviour
	{
		public BankingAppComponent(IntPtr ptr)
			: base(ptr)
		{
		}

		public void Start()
		{
			MelonLogger.Msg("BankingAppComponent: Starting");
		}
	}
}