using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using Dalamud.Plugin; using Dalamud.Plugin.Services; using Microsoft.Extensions.Logging; namespace Questionable.External; internal sealed class WigglyNavAvailability : IDisposable { private const int SupportedMajorVersion = 1; private const string WigglyNavInternalName = "WigglyNav"; private const long ReprobeIntervalMs = 5000L; private readonly IDalamudPluginInterface _pluginInterface; private readonly WigglyNavIpc _wigglyNavIpc; private readonly IFramework _framework; private readonly ILogger _logger; private readonly object _verdictLock = _206B_206F_202A_202D_200B_202E_206F_200F_206E_206E_200C_202E_206B_200B_202B_202A_206A_202A_200C_200B_200B_206E_206C_200B_206C_200F_206B_206B_202C_200C_206A_206F_202C_200F_206D_206B_202A_200C_206C_202E(); private volatile bool _isCompatible; private long _lastProbeTicks; [CompilerGenerated] private Action? m_CompatibilityChanged; public bool IsCompatible => _isCompatible; public event Action? CompatibilityChanged { [CompilerGenerated] add { Action action = this.m_CompatibilityChanged; int num = 1991447574; while (true) { int num2 = num; int num3 = 1991447575; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: num = 1991447574; break; case 1: { Action action2 = action; Action value2 = (Action)_206F_202D_202C_206D_200D_200D_206A_202A_200E_202A_206C_206C_206C_202C_206E_202E_202A_202B_202C_202C_202D_202C_200B_206C_206F_202B_200E_206E_202D_206A_200D_200C_202E_206C_206E_200F_202D_206B_200B_202B_202E((Delegate)action2, (Delegate)value); action = Interlocked.CompareExchange(ref this.m_CompatibilityChanged, value2, action2); num = (((object)action != action2) ? 1991447574 : 1991447575); break; } case 0: return; } } } [CompilerGenerated] remove { Action action = this.m_CompatibilityChanged; int num = -280781093; while (true) { int num2 = num; int num3 = -280781094; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: num = -280781093; break; case 2: return; case 1: { Action action2 = action; Action value2 = (Action)_202C_200B_206A_206E_206D_202D_206B_206E_206C_206A_200F_200C_200B_206B_206C_206F_200D_200E_202A_202E_202E_206C_206F_200F_202D_206E_200C_206F_202E_206E_202A_200C_200E_202B_200C_200E_202B_202D_206F_200C_202E((Delegate)action2, (Delegate)value); action = Interlocked.CompareExchange(ref this.m_CompatibilityChanged, value2, action2); num = (((object)action != action2) ? (-280781093) : (-280781096)); break; } } } } } [MethodImpl(MethodImplOptions.NoInlining)] public WigglyNavAvailability(IDalamudPluginInterface pluginInterface, WigglyNavIpc wigglyNavIpc, IFramework framework, ILogger logger) { _pluginInterface = pluginInterface; _wigglyNavIpc = wigglyNavIpc; _framework = framework; _logger = logger; TryRefreshVerdict(respectThrottle: false); _206E_206D_206E_200F_202E_206D_206D_200D_200F_202D_202C_200C_200E_206D_202E_206F_200F_200E_200E_200F_206E_202C_200E_202C_206D_202E_202E_206D_202E_202B_200E_200F_206B_206C_202C_206E_206B_202C_202E_202A_202E((ILogger)_logger, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E(65257321), new object[1] { DescribeVerdict(_isCompatible) }); _206B_202D_200B_202C_200F_202D_202D_202B_206B_200F_200C_202B_200F_202E_202D_206A_202D_206F_202E_200B_206B_202C_200F_202C_206A_200B_202C_202A_206F_202E_200D_200D_206B_202D_200F_206A_200E_202B_200E_206E_202E(_pluginInterface, (IDalamudPluginInterface.ActivePluginsChangedDelegate)OnActivePluginsChanged); _200B_206F_206C_202B_206B_200B_200B_202B_202D_206F_206E_200F_202D_206E_206B_202B_206F_202D_206E_206C_202A_206C_206F_200D_202E_202B_206F_202B_200B_200F_206B_200B_206C_202A_200D_200F_202E_206F_200C_206A_202E(_framework, (IFramework.OnUpdateDelegate)OnFrameworkUpdate); } public void Dispose() { _200D_206B_200F_206F_200B_206F_200D_202B_200C_202B_200D_202B_200C_206C_200D_202B_200C_202A_202C_200F_202A_202A_200C_200C_206A_202E_202B_206F_202A_206D_202A_202A_202A_206F_200E_206D_206B_202C_200B_206B_202E(_framework, (IFramework.OnUpdateDelegate)OnFrameworkUpdate); _200E_200C_202C_200B_202C_200F_206B_202C_202D_202D_200D_206C_206C_202C_200B_200D_206E_206E_206B_206D_202B_200D_200B_200C_206F_202E_200D_200C_202B_206B_202A_200E_206D_200C_202C_206D_200D_200C_202E_206B_202E(_pluginInterface, (IDalamudPluginInterface.ActivePluginsChangedDelegate)OnActivePluginsChanged); } void IDisposable.Dispose() { //ILSpy generated this explicit interface implementation from .override directive in Dispose this.Dispose(); } [MethodImpl(MethodImplOptions.NoInlining)] private void OnActivePluginsChanged(IActivePluginsChangedEventArgs args) { int num = (_200D_202D_202C_200E_206A_200E_202B_206A_206A_202B_200F_202B_206E_206D_206C_206B_206A_200C_206B_200E_200F_206D_206B_202A_206E_202D_206A_202E_202E_202A_206B_200E_200B_206A_206A_200F_206E_206C_206D_206C_202E(args).Contains(global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E(1385994134)) ? (-92936946) : (-92936947)); while (true) { int num2 = num; int num3 = -92936946; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: num = -92936947; break; case 3: return; case 1: _206E_206D_206E_200F_202E_206D_206D_200D_200F_202D_202C_200C_200E_206D_202E_206F_200F_200E_200E_200F_206E_202C_200E_202C_206D_202E_202E_206D_202E_202B_200E_200F_206B_206C_202C_206E_206B_202C_202E_202A_202E((ILogger)_logger, global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E(1087087773), new object[2] { DescribeVerdict(_isCompatible), _202B_206B_200B_202C_202B_206D_206C_206E_206E_206D_202B_200E_202B_200E_206E_206E_200B_206D_202E_206E_200C_202E_206C_200D_202C_200F_200F_206D_200E_202B_200C_202C_206E_202C_202C_206B_200F_206C_206F_206B_202E(args) }); this.CompatibilityChanged?.Invoke(); return; case 4: return; case 0: num = (TryRefreshVerdict(respectThrottle: false) ? (-92936945) : (-92936950)); break; } } } [MethodImpl(MethodImplOptions.NoInlining)] private void OnFrameworkUpdate(IFramework framework) { int num = ((!_isCompatible) ? (-1065706762) : (-1065706763)); while (true) { int num2 = num; int num3 = -1065706764; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 4: return; case 1: return; case 0: _206E_206D_206E_200F_202E_206D_206D_200D_200F_202D_202C_200C_200E_206D_202E_206F_200F_200E_200E_200F_206E_202C_200E_202C_206D_202E_202E_206D_202E_202B_200E_200F_206B_206C_202C_206E_206B_202C_202E_202A_202E((ILogger)_logger, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E(1036219173), new object[1] { DescribeVerdict(_isCompatible) }); this.CompatibilityChanged?.Invoke(); return; case 2: num = (TryRefreshVerdict(respectThrottle: true) ? (-1065706764) : (-1065706768)); break; case 3: num = -1065706763; break; } } } private bool TryRefreshVerdict(bool respectThrottle) { object verdictLock = _verdictLock; bool flag = false; try { _202D_206B_202A_206F_202C_202E_202C_200F_202C_200F_202A_206F_202E_206D_206C_206F_202E_206F_206B_200D_202B_202E_200C_202A_200B_200E_202E_202A_206E_206E_202B_200F_200C_206E_200C_202A_200B_202E_202A_202C_202E(verdictLock, ref flag); long num = _200D_206F_206B_202C_206E_206F_206B_206E_200B_200D_202D_202E_202E_202A_200C_200E_200D_206A_202C_200F_202C_202B_202C_202D_200B_202A_202B_200F_206D_206D_206F_206D_202A_202A_206A_206E_206A_202D_206B_202C_202E(); int num2 = ((!respectThrottle) ? 1824469596 : 1824469599); (int, int)? tuple = default((int, int)?); bool flag2 = default(bool); while (true) { int num3 = num2; int num4 = 1824469594; int num5 = num3; int num6 = num5 + num4; int num7 = num5 & num4; int num8; switch (num6 - (num7 + num7)) { case 7: return false; case 1: num8 = 0; goto IL_008c; case 3: num2 = 1824469599; break; case 5: { long lastProbeTicks = _lastProbeTicks; long num9 = num; num2 = ((~(~num9 + lastProbeTicks) >= 5000) ? 1824469596 : 1824469592); break; } case 6: _lastProbeTicks = num; tuple = _wigglyNavIpc.TryGetApiVersion(); num2 = ((!tuple.HasValue) ? 1824469595 : 1824469598); break; case 4: num8 = ((tuple.GetValueOrDefault().Item1 == 1) ? 1 : 0); goto IL_008c; case 2: return false; case 0: { _isCompatible = flag2; return true; } IL_008c: flag2 = (byte)num8 != 0; num2 = ((flag2 != _isCompatible) ? 1824469594 : 1824469597); break; } } } finally { int num2 = ((!flag) ? (-176733866) : (-176733867)); while (true) { int num10 = num2; int num4 = -176733865; int num5 = num10; switch ((num5 | num4) - (num5 & num4)) { case 0: num2 = -176733867; break; case 1: goto end_IL_018f; case 2: _206E_202E_206D_202A_200B_206A_206D_206B_206C_202A_206A_200D_200F_200D_202E_200D_206D_202E_200B_202D_200B_206C_206D_206F_200E_200B_200F_202D_202E_202A_202B_200B_202E_206A_206F_200E_200E_200C_206E_202E(verdictLock); num2 = -176733866; break; } continue; end_IL_018f: break; } } } [MethodImpl(MethodImplOptions.NoInlining)] private static string DescribeVerdict(bool isCompatible) { int num = (isCompatible ? (-1280870548) : (-1280870547)); while (true) { int num2 = num; int num3 = -1280870548; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: goto IL_0041; case 0: return global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E(2037209373); case 1: return global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E(424588411); } continue; IL_0041: num = -1280870547; } } static object _206B_206F_202A_202D_200B_202E_206F_200F_206E_206E_200C_202E_206B_200B_202B_202A_206A_202A_200C_200B_200B_206E_206C_200B_206C_200F_206B_206B_202C_200C_206A_206F_202C_200F_206D_206B_202A_200C_206C_202E() { return new object(); } static void _206E_206D_206E_200F_202E_206D_206D_200D_200F_202D_202C_200C_200E_206D_202E_206F_200F_200E_200E_200F_206E_202C_200E_202C_206D_202E_202E_206D_202E_202B_200E_200F_206B_206C_202C_206E_206B_202C_202E_202A_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogInformation(P_1, P_2); } static void _206B_202D_200B_202C_200F_202D_202D_202B_206B_200F_200C_202B_200F_202E_202D_206A_202D_206F_202E_200B_206B_202C_200F_202C_206A_200B_202C_202A_206F_202E_200D_200D_206B_202D_200F_206A_200E_202B_200E_206E_202E(IDalamudPluginInterface P_0, IDalamudPluginInterface.ActivePluginsChangedDelegate P_1) { P_0.ActivePluginsChanged += P_1; } static void _200B_206F_206C_202B_206B_200B_200B_202B_202D_206F_206E_200F_202D_206E_206B_202B_206F_202D_206E_206C_202A_206C_206F_200D_202E_202B_206F_202B_200B_200F_206B_200B_206C_202A_200D_200F_202E_206F_200C_206A_202E(IFramework P_0, IFramework.OnUpdateDelegate P_1) { P_0.Update += P_1; } static Delegate _206F_202D_202C_206D_200D_200D_206A_202A_200E_202A_206C_206C_206C_202C_206E_202E_202A_202B_202C_202C_202D_202C_200B_206C_206F_202B_200E_206E_202D_206A_200D_200C_202E_206C_206E_200F_202D_206B_200B_202B_202E(Delegate P_0, Delegate P_1) { return Delegate.Combine(P_0, P_1); } static Delegate _202C_200B_206A_206E_206D_202D_206B_206E_206C_206A_200F_200C_200B_206B_206C_206F_200D_200E_202A_202E_202E_206C_206F_200F_202D_206E_200C_206F_202E_206E_202A_200C_200E_202B_200C_200E_202B_202D_206F_200C_202E(Delegate P_0, Delegate P_1) { return Delegate.Remove(P_0, P_1); } static void _200D_206B_200F_206F_200B_206F_200D_202B_200C_202B_200D_202B_200C_206C_200D_202B_200C_202A_202C_200F_202A_202A_200C_200C_206A_202E_202B_206F_202A_206D_202A_202A_202A_206F_200E_206D_206B_202C_200B_206B_202E(IFramework P_0, IFramework.OnUpdateDelegate P_1) { P_0.Update -= P_1; } static void _200E_200C_202C_200B_202C_200F_206B_202C_202D_202D_200D_206C_206C_202C_200B_200D_206E_206E_206B_206D_202B_200D_200B_200C_206F_202E_200D_200C_202B_206B_202A_200E_206D_200C_202C_206D_200D_200C_202E_206B_202E(IDalamudPluginInterface P_0, IDalamudPluginInterface.ActivePluginsChangedDelegate P_1) { P_0.ActivePluginsChanged -= P_1; } static IEnumerable _200D_202D_202C_200E_206A_200E_202B_206A_206A_202B_200F_202B_206E_206D_206C_206B_206A_200C_206B_200E_200F_206D_206B_202A_206E_202D_206A_202E_202E_202A_206B_200E_200B_206A_206A_200F_206E_206C_206D_206C_202E(IActivePluginsChangedEventArgs P_0) { return P_0.AffectedInternalNames; } static PluginListInvalidationKind _202B_206B_200B_202C_202B_206D_206C_206E_206E_206D_202B_200E_202B_200E_206E_206E_200B_206D_202E_206E_200C_202E_206C_200D_202C_200F_200F_206D_200E_202B_200C_202C_206E_202C_202C_206B_200F_206C_206F_206B_202E(IActivePluginsChangedEventArgs P_0) { return P_0.Kind; } static void _202D_206B_202A_206F_202C_202E_202C_200F_202C_200F_202A_206F_202E_206D_206C_206F_202E_206F_206B_200D_202B_202E_200C_202A_200B_200E_202E_202A_206E_206E_202B_200F_200C_206E_200C_202A_200B_202E_202A_202C_202E(object P_0, ref bool P_1) { Monitor.Enter(P_0, ref P_1); } static long _200D_206F_206B_202C_206E_206F_206B_206E_200B_200D_202D_202E_202E_202A_200C_200E_200D_206A_202C_200F_202C_202B_202C_202D_200B_202A_202B_200F_206D_206D_206F_206D_202A_202A_206A_206E_206A_202D_206B_202C_202E() { return Environment.TickCount64; } static void _206E_202E_206D_202A_200B_206A_206D_206B_206C_202A_206A_200D_200F_200D_202E_200D_206D_202E_200B_202D_200B_206C_206D_206F_200E_200B_200F_202D_202E_202A_202B_200B_202E_206A_206F_200E_200E_200C_206E_202E(object P_0) { Monitor.Exit(P_0); } }