internal static StudioListData LoadStudioCSV(Stream stream, string fileName)
        {
            StudioListData data = new StudioListData(fileName);

            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                List <string> Header = reader.ReadLine().Trim().Split(',').ToList();
                data.Headers.Add(Header);
                List <string> Header2 = reader.ReadLine().Trim().Split(',').ToList();

                if (int.TryParse(Header2[0], out int cell))
                {
                    //First cell of the row is a numeric ID, this is a data row
                    data.Entries.Add(Header2);
                }
                else
                {
                    //This is a second header row, as used by maps, animations, and voices
                    data.Headers.Add(Header2);
                }

                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine().Trim();

                    if (!line.Contains(','))
                    {
                        break;
                    }

                    data.Entries.Add(line.Split(',').ToList());
                }
            }
            return(data);
        }
        internal static StudioListData LoadStudioCSV(Stream stream, string fileName, string guid)
        {
            StudioListData data = new StudioListData(fileName);

            string fileNameStripped = fileName.Remove(0, fileName.LastIndexOf('/') + 1);
            string listType         = fileNameStripped.Split('_')[0].ToLower();

            bool CategoryOrGroup = false;

            if (fileNameStripped.Contains("_"))
            {
                if (Sideloader.StudioListResolveBlacklist.Contains(listType))
                {
                    CategoryOrGroup = true;
                }
            }

            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                List <string> Header = reader.ReadLine().Trim().Split(',').ToList();
                data.Headers.Add(Header);
                List <string> Header2 = reader.ReadLine().Trim().Split(',').ToList();

                if (int.TryParse(Header2[0], out int cell))
                {
                    //First cell of the row is a numeric ID, this is a data row
                    data.Entries.Add(FormatList(Header2, CategoryOrGroup));
                }
                else
                {
                    //This is a second header row, as used by maps, animations, and voices
                    data.Headers.Add(Header2);
                }

                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine().Trim();

                    if (!line.Contains(','))
                    {
                        break;
                    }
                    var lineSplit = line.Split(',');

                    data.Entries.Add(FormatList(line.Split(',').ToList(), CategoryOrGroup));
                }
            }
            return(data);

            List <string> FormatList(List <string> line, bool categoryOrGroup)
            {
#if AI || HS2
                //Convert group and category from KK to AI
                if (CategoryOrGroup)
                {
                    if (line.Count == 2)
                    {
                        string temp = line[1];
                        line[1] = line[0];
                        line.Add(temp);
                    }
                }
#endif

                return(line);
            }
        }