public static void Run(List<Action> actions, int delay = 10000)
        {
            // ReSharper disable once NotAccessedVariable
            var iteration = 0;
            var publicStash = PublicStashAPI.GetAsync().Result;
            var nextChangeId = publicStash.next_change_id;
            var cachedChangeId = "";

            for (;;)
            {
                if (cachedChangeId != nextChangeId)
                {
                    foreach (var action in actions) action();

                    iteration += 1;
                    cachedChangeId = nextChangeId;
                }
                else
                {
                    publicStash = PublicStashAPI.GetAsync(nextChangeId).Result;
                    nextChangeId = publicStash.next_change_id;
                    Thread.Sleep(delay);
                }
            }
        }
        private static void RunTrader()
        {
            // ReSharper disable once NotAccessedVariable
            var iteration = 0;

            var publicStash = PublicStashAPI.GetAsync().Result;
            var nextChangeId = publicStash.next_change_id;
            var cachedChangeId = "";
            var trader = new PoeTrader();

            for (;;)
            {
                if (cachedChangeId != nextChangeId)
                {
                    var prices = trader.GetCurrencyListings(publicStash);
                    //missing.AddRange(prices.Where(e => e.Buying.Currency == PublicStashExample.Example.Trade.Currency.MISSING_TYPE).ToList
                    iteration++;

                    var lines = File.ReadAllLines("C:/tmp/poe/err.txt");
                    var tmp =
                    (from missing in prices.Where(e =>
                            e.Buying.Currency == PublicStashExample.Example.Trade.Currency.MISSING_TYPE)
                        where !lines.Contains(missing.Buying.Texted)
                        select missing.Buying.Texted).ToList();

                    if (tmp.Contains("port"))
                    {
                    }

                    if (tmp.Any())
                    {
                        File.AppendAllLines("C:/tmp/poe/err.txt", new HashSet<String>(tmp));
                    }

                    cachedChangeId = nextChangeId;
                }
                else
                {
                    publicStash = PublicStashAPI.GetAsync(nextChangeId).Result;
                    nextChangeId = publicStash.next_change_id;
                    Thread.Sleep(5000);
                }
            }
        }
        private static void GatherSocketableItems()
        {
            // ReSharper disable once NotAccessedVariable
            var iteration = 0;

            var publicStash = PublicStashAPI.GetAsync().Result;
            var nextChangeId = publicStash.next_change_id;
            var cachedChangeId = "";

            var armours = new List<(Armour, String)>();
            var weapons = new List<(Weapon, String)>();
            var unspecified = new List<(UnspecifiedItem, String)>();

            for (;;)
            {
                if (armours.Any() || weapons.Any() || unspecified.Any())
                {
                }

                if (cachedChangeId != nextChangeId)
                {
                    //missing.AddRange(prices.Where(e => e.Buying.Currency == PublicStashExample.Example.Trade.Currency.MISSING_TYPE).ToList

                    //(from missing in prices.Where(e =>
                    //        e.Buying.Currency == PublicStashExample.Example.Trade.Currency.MISSING_TYPE)
                    //    where !lines.Contains(missing.Buying.Texted)
                    //    select missing.Buying.Texted).ToList();

                    foreach (var stash in publicStash.stashes)
                    {
                        foreach (var item in stash.items)
                        {
                            var type = item.GetType();
                            if (type == typeof(Armour))
                            {
                                var a = (Armour) item;

                                if (a.socketedItems.Any()) armours.Add((a, cachedChangeId));
                            }
                            else if (type == typeof(Weapon))
                            {
                                var w = (Weapon) item;

                                if (w.socketedItems.Any()) weapons.Add((w, cachedChangeId));
                            }
                            else if (type == typeof(UnspecifiedItem))
                            {
                                // ReSharper disable once UnusedVariable
                                var lines = File.ReadAllLines("C:/tmp/poe/missItem.txt");
                                unspecified.Add(((UnspecifiedItem) item, cachedChangeId));
                                File.AppendAllLines("C:/tmp/poe/missItem.txt",
                                    new[] {$"{item.typeLine} - {cachedChangeId}"});
                            }
                        }
                    }

                    iteration++;
                    cachedChangeId = nextChangeId;
                }
                else
                {
                    publicStash = PublicStashAPI.GetAsync(nextChangeId).Result;
                    nextChangeId = publicStash.next_change_id;
                    Thread.Sleep(10000);
                }
            }
        }