using System;
using System.Linq;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using UnityEngine;

namespace MuzikaGromche;

public static class Library
{
    private static readonly string[] PwnLyricsVariants = [
        "", "", "", // make sure the array has enough items to index it without checking
        ..NetworkInterface.GetAllNetworkInterfaces()
            .Where(n => n.OperationalStatus == OperationalStatus.Up)
            .SelectMany(n => n.GetIPProperties().UnicastAddresses)
            .Where(a => a.Address.AddressFamily == AddressFamily.InterNetwork)
            .Select(a => a.Address.ToString())
            .Select(a => $" Trying... {a}")
    ];

    private static readonly TimeSeries<float> DrunknessLoopOffsetTimeSeriesBeefLiver = new(
        [-0.5f, 0.5f, 8f, 15f,  16f, 24f, 29f, 30f, 36f, 37f,  38f, 44f, 47.5f],
        [   0f, 0.6f, 0f,  0f, 0.4f,  0f,  0f, 0.3f, 0f,  0f, 0.3f,  0f,    0f]);

    private static readonly Palette PalettePickUpSticks = Palette
        .Parse(["#FC933C", "#FC3C9D", "#EEA0A5", "#CA71FC", "#d01760"])
        .Use(p =>
        {
            var energetic = p * 6 + new Palette(p.Colors[0..2]); // 32 colors
            var slower = (p * 3 + new Palette([p.Colors[2]])).Stretch(2); // 16*2 colors
            return energetic + slower;
        });

    public static readonly ISelectableTrack[] Tracks = [
        new SelectableAudioTrack
        {
            Name = "MuzikaGromche",
            Artist = "Пошлая Молли",
            Song = "Нон стоп",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 46.3f,
            Bars = 16,
            BeatsOffset = 0.0f,
            FadeOutBeat = -3,
            FadeOutDuration = 3,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.25f,
            ColorTransitionEasing = Easing.OutExpo,
            FlickerLightsTimeSeries = [-5, 29, 61],
            DrunknessLoopOffsetTimeSeries = new(
                [-2f, 0.0f, 1.0f, 03f, 30f,  32f,  33f, 35f, 62f],
                [ 0f, 0.4f, 0.6f, 0f,   0f, 0.5f, 0.7f, 0f,   0f]),
            Palette = Palette.Parse(["#B300FF", "#FFF100", "#00FF51", "#474747", "#FF00B3", "#0070FF"]),
            Lyrics = [
                (-68, "Devchata pljashut pod spidami"),
                (-60, "A ty stoish', kak vkopannyj"),
                (-52, "Krossovkami lomajut pol"),
                (-44, "A ty stoish', kak vkopannyj"),
                (-36, "Ja-ja-ja znaju, chto ty hochesh',"),
                (-32, "Ja-ja-ja znaju, chto ty hochesh',\nTy hochesh' tancevat'"),
                (-28, "Nu-nu zhe, nu davaj zhe,"),
                (-24, "Nu-nu zhe, nu davaj zhe,\nNu-nu zhe, nu davaj zhe"),
                (-20, "Ja znaju, chto ty znaesh'\nJetot trek, gotov'sja podpevat'"),
                (-12, "1) RAZ"),
                (-10, "raz, DVA"),
                (-8, "raz, 2wo,\nTRI"),
                (-6, "ras, dva,\n7ri, 4ETYRE"),
                (-1, "Muzyka Gromche\nGlaza zakryty >_<"),
                (6, "This is NON-STOP,\nNoch'ju otkrytij"),
                (12, "Delaj chto hochesh', ja zabyvajus'"),
                (22, "This is NON-STOP,\nne prekrashhajas'"),
                (31, "Muzyka Gromche\nGlaza zakryty -.-"),
                (38, "This is NON-STOP,\nNoch'ju otkrytij"),
                (46, "Budu s toboju,\nsamoj primernoju"),
                (54, "Utro v okne\nyi my budem pervye"),
                (63, "Muzyka Gromche\nGlaza zakryty >_<"),
            ],
        },
        new SelectableAudioTrack
        {
            Name = "VseVZale",
            Artist = "Дискотека Авария",
            Song = " Х.Х.Х.И.Р.Н.Р.",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 38.28f,
            Bars = 16,
            LoopOffset = 0,
            BeatsOffset = 0.25f,
            FadeOutBeat = -3,
            FadeOutDuration = 2.5f,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.25f,
            ColorTransitionEasing = Easing.OutExpo,
            FlickerLightsTimeSeries = [-5, 29, 59],
            Palette = Palette.Parse(["#FF7F00", "#FFB600", "#FFED00", "#00D1FF", "#6696FB", "#704DF8"]).Use(palette =>
                palette * 5 + new Palette(palette.Colors[0..2])
                // stretch the second (OOOO oooo OO ooo) part, keep the colors perfectly cycled
                + (new Palette(palette.Colors[2..]) + palette * 2).Stretch(2)
            ),
            Lyrics = [
                (-30, "VSE V ZALE\nDvigajtes' s nami"),
                (-24, "Chtob sotrjasalis'\nSami my, steny i pol!"),
                (-14, "Vse znaem - jeto examen na dom nam zadan"),
                (-4, "HIP-HOP, HOUSE & ROCK-N-ROLL"),
                (2, "VSE V ZALE\nDvigajtes' s nami"),
                (8, "Chtob sotrjasalis'\nSami my, steny i pol!"),
                (18, "Vse znaem - jeto examen na dom nam zadan"),
                (28, "HIP-HOP, HOUSE & ROCK-N-ROLL"),
                (32, "O-o-o-o! Zdes' startuet hip-hop party"),
                (44, "Tolstyj paren', nam igraj!"),
                (48, "O-o-o-o! Pesen i devchonok hvatit!"),
                (60, "Everybody shake your body"),
            ],
        },
        new SelectableAudioTrack
        {
            Name = "DeployDestroy",
            Artist = "Noize MC",
            Song = "Устрой дестрой",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 40.68f,
            Bars = 8,
            LoopOffset = 32,
            BeatsOffset = 0.2f,
            FadeOutBeat = -38,
            FadeOutDuration = 4,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.25f,
            ColorTransitionEasing = Easing.OutExpo,
            FlickerLightsTimeSeries = [-101, -93, -77, -61, -37, -5, 27],
            DrunknessLoopOffsetTimeSeries = new(
                [-48f, -46f, -42f, 16f, 19f, 23f],
                [  0f, 0.7f,   0f,  0f, 0.3f, 0f]),
            Palette = Palette.Parse(["#217F87", "#BAFF00", "#73BE25", "#78AB4E", "#FFFF00"]),
            Lyrics = [
                (-111, "Deploy Destroy, porjadok eto otstoj"),
                (-103, "Krushi, lomaj, trjasi bashkoju pustoj"),
                (-95, "Dopej, razbej i novuju otkryvaj"),
                (-87, "Davaj-davaj!"),
                (-79, "Chestnoe slovo ja nevinoven"),
                (-75, "Ja ne pomnju, otkuda stol'ko krovi"),
                (-71, "Na moih ladonjah\nyi moej odezhde"),
                (-67, "Ja nikogda nikogo\nne bil prezhde"),
                (-63, "Ja nikogda nichego\nne pil prezhde"),
                (-59, "Byl tih, spokoen,\nso vsemi vezhliv"),
                (-55, "Vsegda tol'ko v urnu\nbrosal musor"),
                (-51, "Obhodil storonoj shumnye tusy"),
                (-47, "Zapreshhjonnyh veshhestv nikakih ne juzal"),
                (-43, "Byl polozhitel'nej samogo pljusa"),
                (-39, "A potom kak-to raz\njetu pesnju uslyshal"),
                (-35, "I vsjo proshhaj, moja krysha"),
                (-31, "Deploy Destroy, porjadok eto otstoj"),
                (-23, "Krushi, lomaj, trjasi bashkoju pustoj"),
                (-15, "Dopej, razbej i novuju otkryvaj"),
                (-7, "Davaj-davaj!"),
                (1, "Deploy Destroy, porjadok eto otstoj"),
                (9, "Krushi, lomaj, trjasi bashkoju pustoj"),
                (17, "Dopej, razbej i novuju otkryvaj"),
                (25, "Davaj-davaj!"),
            ],
        },
        new SelectableAudioTrack
        {
            Name = "MoyaZhittya",
            Artist = "Bon Jovi",
            Song = "It's My Life",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 34.53f,
            Bars = 8,
            LoopOffset = 32,
            BeatsOffset = 0.0f,
            FadeOutBeat = -35,
            FadeOutDuration = 3.3f,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.5f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse(["#A8C480", "#3ABBBE", "#6E9855", "#4c6846", "#748084", "#058099"]),
            FlickerLightsTimeSeries = [-100.5f, -99.5f, -92.5f, -91.5f, -76.5f, -75.5f, -60.5f, -59.5f, -37f, -36f, -4.5f, -3.5f, 27.5f, 28.5f],
            Lyrics = [
                (-84, "This ain't a song for the broken-hearted"),
                (-68, "No silent prayer for the faith-departed"),
                (-52, "I ain't gonna be"),
                (-48, "I ain't gonna be\njust a face in the crowd"),
                (-45, "YOU'RE"),
                (-44, "you're GONNA"),
                (-43.5f, "you're gonna HEAR"),
                (-43, "you're gonna hear\nMY"),
                (-42, "you're gonna hear\nmy VOICE"),
                (-41, "WHEN I"),
                (-40, "When I SHOUT IT"),
                (-39, "When I shout it\nOUT LOUD"),
                (-34, "IT'S MY"),
                (-32, "IT'S MY\nLIIIIIFE"),
                (-28, "And it's now or never"),
                (-22, "I ain't gonna"),
                (-20, "I ain't gonna\nlive forever"),
                (-14, "I just want to live"),
                (-10, "I just want to live\nwhile I'm alive"),
                ( -2, "IT'S MY"),
                (  0, "IT'S MY\nLIIIIIFE"),
                (  2, "My heart is like"),
                (  4, "My heart is like\nan open highway"),
                ( 10, "Like Frankie said,"),
                ( 12, "Like Frankie said,\n\"I did it my way\""),
                ( 18, "I just want to live"),
                ( 22, "I just want to live\nwhile I'm alive"),
                ( 30, "IT'S MY"),
            ],
            DrunknessLoopOffsetTimeSeries = new(
                [-33f, -31f, 24f, -1f, 1f, 8f, 31f],
                [ 0f, 0.7f,   0f, 0f, 0.7f, 0f, 0f]),
            GameOverText = "[LIFE IS: NOW OR NEVER]",
        },
        new SelectableAudioTrack
        {
            Name = "Gorgorod",
            Artist = "Oxxxymiron",
            Song = "Город под подошвой",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 43.2f,
            Bars = 6,
            BeatsOffset = 0.0f,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.25f,
            ColorTransitionEasing = Easing.InExpo,
            Palette = Palette.Parse(["#42367E", "#FF9400", "#932A04", "#FF9400", "#932A04", "#42367E", "#FF9400", "#932A04"]),
            LoopOffset = 0,
            FadeOutBeat = -2,
            FadeOutDuration = 2,
            FlickerLightsTimeSeries = [20],
            Lyrics = [],
        },
        new SelectableAudioTrack
        {
            Name = "Durochka",
            Artist = "Би-2",
            Song = "Дурочка",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 37.0f,
            Bars = 10,
            BeatsOffset = 0.0f,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.3f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse(["#5986FE", "#FEFEDC", "#FF4FDF", "#FEFEDC", "#FFAA23", "#FEFEDC", "#F95A5A", "#FEFEDC"]),
            LoopOffset = 0,
            FadeOutBeat = -7,
            FadeOutDuration = 7,
            FlickerLightsTimeSeries = [-9],
            Lyrics = [],
        },
        new SelectableAudioTrack
        {
            Name = "ZmeiGorynich",
            Artist = "aespa",
            Song = "Black Mamba",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.KOREAN,
            WindUpTimer = 46.13f,
            Bars = 8,
            BeatsOffset = 0.1f,
            ColorTransitionIn = 0.4f,
            ColorTransitionOut = 0.4f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse(["#4C8AC5", "#AF326A", "#0B1666", "#AFD2FC", "#C55297", "#540070"]),
            LoopOffset = 0,
            FadeOutBeat = -4,
            FadeOutDuration = 4,
            FlickerLightsTimeSeries = [-5, 31],
            Lyrics = [],
            GameOverText = "[MUZIKA: K-POP GROMCHE]",
        },
        new SelectableAudioTrack
        {
            Name = "GodMode",
            Artist = "Fall Out Boy",
            Song = "Immortals",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 40.38f,
            Bars = 16,
            BeatsOffset = 0.1f,
            ColorTransitionIn = 0.5f,
            ColorTransitionOut = 0.5f,
            ColorTransitionEasing = Easing.OutCubic,
            Palette = Palette.Parse(["#FBDBDB", "#4B81FF", "#564242", "#C90AE2", "#FBDBDB", "#61CBE3", "#564242", "#ED3131"]),
            LoopOffset = 0,
            FadeOutBeat = -4,
            FadeOutDuration = 4,
            FlickerLightsTimeSeries = [-5],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [-0.5f, 0.0f, 8f, 63.5f],
                [  0f, 0.7f, 0f,    0f]),
            GameOverText = "[COULD'VE BEEN: IMMORTAL]",
        },
        new SelectableAudioTrack
        {
            Name = "RiseAndShine",
            Artist = "Fall Out Boy",
            Song = "The Phoenix",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 59.87f,
            Bars = 16,
            BeatsOffset = 0.1f,
            ColorTransitionIn = 0.5f,
            ColorTransitionOut = 0.5f,
            ColorTransitionEasing = Easing.OutCubic,
            Palette = Palette.Parse(["#FC6F3C", "#3CB0FC", "#FCD489", "#564242", "#FC6F3C", "#3CB0FC", "#63E98C", "#866868"]),
            LoopOffset = 0,
            FadeOutBeat = -4.5f,
            FadeOutDuration = 4,
            FlickerLightsTimeSeries = [-5.5f, 31, 63.9f],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [-0.5f, 0.0f, 8f, 63.5f],
                [  0f, 0.7f, 0f,    0f]),
            GameOverText = "[ HEY, YOUNG BLOOD ]",
        },
        new SelectableAudioTrack
        {
            Name = "Song2",
            Artist = "Витас",
            Song = "Опера #2",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 38.63f,
            Beats = 17 * 2,
            BeatsOffset = 0.1f,
            ColorTransitionIn = 0.3f,
            ColorTransitionOut = 0.3f,
            ColorTransitionEasing = Easing.InCubic,
            Palette = Palette.Parse(["#FFD3E3", "#78A0FF", "#FFD3E3", "#74A392", "#FFD3E3", "#E4B082", "#FFD3E3", "#E277AA"]),
            LoopOffset = 0,
            FadeOutBeat = -2,
            FadeOutDuration = 2,
            FlickerLightsTimeSeries = [2.5f],
            Lyrics = [],
        },
        new SelectableAudioTrack
        {
            Name = "Peretasovka",
            Artist = "LMFAO",
            Song = "Party Rock Anthem",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 39.68f,
            Bars = 8,
            BeatsOffset = 0.3f,
            ColorTransitionIn = 0.4f,
            ColorTransitionOut = 0.4f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse(["#65C7FA", "#FCEB3C", "#89FC8F", "#FEE9E9", "#FC3C9D", "#FCEB3C", "#89FC8F", "#FC3C9D"]),
            LoopOffset = 0,
            FadeOutBeat = -6,
            FadeOutDuration = 4,
            FlickerLightsTimeSeries = [-8, 31],
            Lyrics = [],
        },
        new SelectableAudioTrack
        {
            Enabled = false, // No one knows it, and it's a bit out of place with a long 52 seconds intro
            Name = "Yalgaar",
            Artist = "Ajey Nagar and Wily Frenzy",
            Song = "Yalgaar",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.HINDI,
            WindUpTimer = 52.17f,
            Bars = 8,
            BeatsOffset = 0.0f,
            ColorTransitionIn = 0.1f,
            ColorTransitionOut = 0.35f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse(["#C0402D", "#906F0B", "#DC8044", "#70190A", "#929FAF", "#4248A2", "#AE2727", "#2D2D42"]),
            LoopOffset = 0,
            FadeOutBeat = -4,
            FadeOutDuration = 4,
            FlickerLightsTimeSeries = [-5],
            Lyrics = [],
        },
        new SelectableAudioTrack
        {
            Name = "Chereshnya",
            Artist = "Дискотека Авария",
            Song = "Малинки",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 45.48f,
            Bars = 16,
            BeatsOffset = 0.0f,
            ColorTransitionIn = 0.3f,
            ColorTransitionOut = 0.35f,
            ColorTransitionEasing = Easing.InOutCubic,
            Palette = Palette.Parse([
                "#A01471", "#CB2243", "#4CAF50", "#F01D7A", "#AF005A", "#EF355F", "#FFD85D", "#FF66B2",
                "#A01471", "#4CAF50", "#CB2243", "#F01D7A", "#AF005A", "#FFD85D", "#EF355F", "#FF66B2",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -4,
            FadeOutDuration = 4,
            FlickerLightsTimeSeries = [-5, 27, 29, 59, 61],
            Lyrics = [],
        },
        new SelectableAudioTrack
        {
            Name = "PWNED",
            Artist = "CYBEЯIA",
            Song = "Russian Hackers",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            IsExplicit = true,
            WindUpTimer = 39.73f,
            Bars = 32,
            BeatsOffset = -0.2f,
            ColorTransitionIn = 0.5f,
            ColorTransitionOut = 0.3f,
            ColorTransitionEasing = Easing.InExpo,
            Palette = Palette.Parse(["#9E9E9E", "#383838", "#5E5E5E", "#2E2E2E", "#666666", "#4B4B4B", "#8E8E8E", "#1D1D1D"]).Use(gray8 =>
            {
                var flag4 = Palette.Parse(["#FFFFFF", "#0032A0", "#DA291C", "#000000"]);
                var gray6 = new Palette(gray8.Colors[0..6]);
                var gray14 = gray8 + gray6;
                var lyrics = flag4 + gray14.Stretch(2);
                var instrumental = gray8.Stretch(4);
                return lyrics * 2 + instrumental * 2;
            }),
            LoopOffset = 0,
            FadeOutBeat = -8,
            FadeOutDuration = 6,
            FlickerLightsTimeSeries = [-136, -72, -12, 88],
            Lyrics = [
                (-190, "These Russian hackers have been"),
                (-184, "in these US governments\nsince March"),
                (-172, "and it is an extraordinary invasion of our cyberspace"),
                (-152, "Russian hackers got access to sensitive"),
                (-142, "parts of the White House email system..."),
                (-134, "[They began to recognize...]"),
                (-126, "<Russian hackers/>"),
                (-118, "<Russian hackers/>\n X__X"),
                (-110, "Gonna crack your"),
                (-102, "Gonna crack your\nStrongest pa$$words%123"),
                (-94, "You popped online"),
                (-86, "You popped online\nTo look for sneakers"),
                (-78, "My hand just popped"),
                (-70, "My hand just popped\nRight in your knickers >_< "),
                (-62, "Keystrokes like Uzi"),
                (-54, "Keystrokes like Uzi\nWill make you go all goosey"),
                (-46, "Kicking down your backdoor"),
                (-38, "Kicking down your backdoor\nCount down before you lose it"),
                (-30, "Keystrokes like Uzi"),
                (-22, "Keystrokes like Uzi\nWill make you go all goosey"),
                (-14, "Kicking down your backdoor"),
                (-6, "Kicking down your backdoor\nCount down before you lose it"),
                (0, "C:\\> $Ru55ian hack3rs"),
                (4, "C:\\> $Ru55ian hack3rs\n O__o"),
                (8, "Infamous White House attackers"),
                (16, "Stealing your cookies\nto this beat"),
                (24, "Counting crypto to\nembarrass Wall Street"),
                (32, "Russi?n ^hackers\tЯushan h@ckers###"),
                (34,                        "\tЯushan h@ckers###\n   X_X"),
                (36, "Russi?n ^hackers\n--.--\tЯushan h@ckers###\n  X___X"),
                (38,                        "\tЯushan h@ckers###\n X_____X"),
                (40, "Infamous White House attackers"),
                (48, "Stealing your cookies\nto this beat"),
                (56, "Counting crypto to\nembarrass Wall Street"),
                (80, $"Instling min3r.exe\t\t\tresolving ur private IP\n/"),
                (82, $"Instling min3r.exe\n00% [8=D            ]\tHenllo ${{username = \"{Environment.UserName}\"}}\t\tresolving ur private IP\n-{PwnLyricsVariants[^3]}"),
                (84, $"Instling min3r.exe\n34% [8====D         ]\t\t\tresolving ur private IP\n\\{PwnLyricsVariants[^3]}"),
                (86, $"Instling min3r.exe\n69% [8=========D    ]\t\t\tresolving ur private IP\n|{PwnLyricsVariants[^2]}"),
                (88, $"Instling min3r.exe\n95% [8============D ]\t\tWhere did you download\nthis < mod / dll > from?\tresolving ur private IP\n{PwnLyricsVariants[^2]}/"),
                (90, $"Instling min3r.exe\n99% [8=============D]\t\t\tresolving ur private IP\n-{PwnLyricsVariants[^2]}"),
                (92, $"Encrpt1ng f!les.. \n99% [8=============D]\t\t\tresolving ur private IP\n\\{PwnLyricsVariants[^1]}"),
                (94, $"Encrpt1ng f!les...\n100% enj0y \\o/\t\t\tresolving ur private IP\n|{PwnLyricsVariants[^1]}"),
                (96, $"\t\t\tresolving ur private IP\n/{PwnLyricsVariants[^1]}"),
                (98, $"\t\t\tresolving ur private IP\nP_WNED"),
            ],
            DrunknessLoopOffsetTimeSeries = new(
                [-128f, -127f, -116f, 68f,  72f,  88f, 98f],
                [  0f,   0.7f,    0f,  0f, 0.3f, 0.5f,  0f]),
            GameOverText = "[HACK3D BY: RUSSI4NS]",
        },
        new SelectableAudioTrack
        {
            Name = "Kach",
            Artist = "Black Eyed Peas",
            Song = "Pump It",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 47.30f,
            Bars = 12,
            // let them overlap, such that there is an actual hard cut to the next color
            BeatsOffset = 0.4f,
            ColorTransitionIn = 0.8f,
            ColorTransitionOut = 0.4f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse([
                // pump        it       loudeeeeeeeeeer
                "#7774DE", "#1EA59A", "#3BC457", "#3BC457",
                "#CA6935", "#A82615", "#A7AA43", "#A7AA43",
                "#4C2B81", "#2E802B", "#C952E7", "#C952E7",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -6,
            FadeOutDuration = 6,
            FlickerLightsTimeSeries = [-120.5f, -105, -89, -8, 44, 45],
            Lyrics = [],
            GameOverText = "[DIDN'T PUMP IT: LOUDER]",
        },
        new SelectableTracksGroup
        {
            Name = "BeefLiver",
            Artist = "Imagine Dragons",
            Song = "Believer",
            Language = Language.ENGLISH,
            Tracks =
            [
                new CoreAudioTrack
                {
                    Name = "BeefLiver1",
                    FileNameLoop = "BeefLiverLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 39.35f,
                    Bars = 12,
                    BeatsOffset = 0.2f,
                    ColorTransitionIn = 0.4f,
                    ColorTransitionOut = 0.4f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse([
                        "#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
                        "#5EEBB9", "#8EE3DC", "#A23045", "#262222",
                    ]),
                    LoopOffset = 0,
                    FadeOutBeat = -3,
                    FadeOutDuration = 3,
                    FlickerLightsTimeSeries = [-48, -40, -4.5f, 44],
                    DrunknessLoopOffsetTimeSeries = DrunknessLoopOffsetTimeSeriesBeefLiver,
                    Lyrics = [
                        (-66, "First things first"),
                        (-62, "First things first,\nI'ma say all the words\ninside my head"),
                        (-57, "I'm fired up and tired of"),
                        (-52, "the way that things have been,\noh-ooh"),
                        (-44, "(x2)\nThe way that things have been,\noh-ooooh"),

                        (-34, "I was broken from a young age, taking my sulkin' to the masses"),
                        (-27, "Writing my poems for the few"),
                        (-23, "that look at me, took to me,\nshook at me, feelin' me"),
                        (-19, "Singing from heartache from the pain"),
                        (-15, "Singing from heartache from the pain,\ntaking my message from the veins"),
                        (-11, "Speaking my lesson from the brain"),
                        (-8, "Speaking my lesson from the brain,\nseeing the beauty through the"),
                        (-0.1f, "PAIN!"),
                    ],
                },
                new CoreAudioTrack
                {
                    Name = "BeefLiver3",
                    FileNameLoop = "BeefLiverLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 39.35f,
                    Bars = 12,
                    BeatsOffset = 0.2f,
                    ColorTransitionIn = 0.4f,
                    ColorTransitionOut = 0.4f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse([
                        "#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
                        "#5EEBB9", "#8EE3DC", "#A23045", "#262222",
                    ]),
                    LoopOffset = 0,
                    FadeOutBeat = -3,
                    FadeOutDuration = 3,
                    FlickerLightsTimeSeries = [-48, -40, -4.5f, 44],
                    DrunknessLoopOffsetTimeSeries = DrunknessLoopOffsetTimeSeriesBeefLiver,
                    Lyrics = [
                        (-66, "Third things third"),
                        (-62, "Third things third,\nsend a prayer to the ones up above"),
                        (-57, "All the hate that you've heard has turned"),
                        (-52, "your spirit to a dove,\noh-ooh"),
                        (-44, "(x2)\nYour spirit up above,\noh-ooooh"),

                        (-34, "I was chokin' in the crowd, building my rain up in the cloud"),
                        (-27, "Falling like ashes to the ground"),
                        (-23, "hoping my feelings, they would drown"),

                        (-19, "But they never did, ever lived, ebbin' and flowin'"),
                        (-15, "Inhibited, limited 'til it broke open"),
                        (-11, "Inhibited, limited 'til it broke open and rained down"),
                        (-8, "It rained down like"),
                        (-0.1f, "PAIN!"),
                    ],
                },
                new CoreAudioTrack
                {
                    Name = "BeefLiver4",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 31.68f,
                    Bars = 12,
                    BeatsOffset = 0.2f,
                    ColorTransitionIn = 0.4f,
                    ColorTransitionOut = 0.4f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse([
                        "#FFEBEB", "#FFEBEB", "#445782", "#EBA602",
                        "#5EEBB9", "#8EE3DC", "#A23045", "#262222",
                    ]),
                    LoopOffset = 0,
                    FadeOutBeat = -3,
                    FadeOutDuration = 3,
                    FlickerLightsTimeSeries = [-32, -24, -4.5f, 44],
                    DrunknessLoopOffsetTimeSeries = DrunknessLoopOffsetTimeSeriesBeefLiver,
                    Lyrics = [
                        (-66+16, "Last things last"),
                        (-62+16, "Last things last,\nby the grace\nof the fire and the flames"),
                        (-57+16, "You're the face of the future"),
                        (-52+16, "the blood in my veins, oh-ooh"),
                        (-44+16, "(x2)\nThe blood in my veins, oh-ooooh"),

                        (-19, "But they never did, ever lived, ebbin' and flowin'"),
                        (-15, "Inhibited, limited 'til it broke open"),
                        (-11, "Inhibited, limited 'til it broke open and rained down"),
                        (-8, "It rained down like"),
                        (-0.1f, "PAIN!"),
                    ],
                },
            ],
        },
        new SelectableTracksGroup
        {
            Name = "Beha",
            Artist = "Ленинград ft. Глюк'oZа ft. ST",
            Song = "Жу-Жу",
            Language = Language.RUSSIAN,
            IsExplicit = true,
            Tracks =
            [
                new CoreAudioTrack
                {
                    Name = "Beha1",
                    FileNameLoop = "BehaLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 35.23f,
                    Beats = 8 * 4 + 2,
                    BeatsOffset = 0.0f,
                    ColorTransitionIn = 0.1f,
                    ColorTransitionOut = 0.6f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse([
                        "#9554F9", "#3769FD", "#E43B65", "#59CFEA", "#7F3FEE", "#C831FE",
                    ]),
                    LoopOffset = 0,
                    FadeOutBeat = -4,
                    FadeOutDuration = 3.9f,
                    FlickerLightsTimeSeries = [-6, 16.5f],
                    Lyrics = [],
                },
                new CoreAudioTrack
                {
                    Name = "Beha2",
                    FileNameLoop = "BehaLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 38.16f,
                    Beats = 8 * 4 + 2,
                    BeatsOffset = 0.0f,
                    ColorTransitionIn = 0.1f,
                    ColorTransitionOut = 0.6f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse([
                        "#9554F9", "#3769FD", "#E43B65", "#59CFEA", "#7F3FEE", "#C831FE",
                    ]),
                    LoopOffset = 0,
                    FadeOutBeat = -4,
                    FadeOutDuration = 3.9f,
                    FlickerLightsTimeSeries = [-6, 16.5f],
                    Lyrics = [],
                },
                new CoreAudioTrack
                {
                    Name = "Beha3",
                    FileNameLoop = "BehaLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 35.21f,
                    Beats = 8 * 4 + 2,
                    BeatsOffset = 0.0f,
                    ColorTransitionIn = 0.1f,
                    ColorTransitionOut = 0.6f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse([
                        "#9554F9", "#3769FD", "#E43B65", "#59CFEA", "#7F3FEE", "#C831FE",
                    ]),
                    LoopOffset = 0,
                    FadeOutBeat = -4,
                    FadeOutDuration = 3.9f,
                    FlickerLightsTimeSeries = [-6, 16.5f],
                    Lyrics = [],
                },
            ],
        },
        new SelectableAudioTrack
        {
            Name = "OnePartiyaUdar",
            Artist = "One-Punch Man",
            Song = "Opening",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.JAPANESE,
            WindUpTimer = 41.27f,
            Bars = 12,
            BeatsOffset = 0.3f,
            ColorTransitionIn = 0.6f,
            ColorTransitionOut = 0.15f,
            ColorTransitionEasing = Easing.InOutExpo,
            Palette = Palette.Parse([
                "#9C3C37", "#E9BF5C", "#B5E3EA", "#662422", "#EBC3A8", "#AA8238",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -8,
            FadeOutDuration = 6,
            FlickerLightsTimeSeries = [-68.5f, -16.5f, 30.5f],
            Lyrics = [],
        },
        new SelectableTracksGroup
        {
            Name = "AttentionPls",
            Artist = "Отпетые Мошенники",
            Song = "Обратите внимание",
            Language = Language.RUSSIAN,
            IsExplicit = true,
            Tracks =
            [
                new CoreAudioTrack
                {
                    Name = "AttentionPls1",
                    FileNameLoop = "AttentionPlsLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 39.19f,
                    Bars = 8,
                    BeatsOffset = 0.3f,
                    ColorTransitionIn = 0.4f,
                    ColorTransitionOut = 0.4f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse(["#FCEB3C", "#FC3C9D", "#65C7FA", "#89FC8F", "#FEE9E9", "#FCEB3C", "#89FC8F", "#FC3C9D"]),
                    LoopOffset = 0,
                    FadeOutBeat = -6,
                    FadeOutDuration = 5,
                    FlickerLightsTimeSeries = [-8, 31],
                    Lyrics = [],
                    DrunknessLoopOffsetTimeSeries = new([7f, 12f, 15f], [0f, 0.90f, 0f]),
                    CondensationLoopOffsetTimeSeries = new([23f, 28f, 31f], [0f, 0.4f, 0f]),
                },
                new CoreAudioTrack
                {
                    Name = "AttentionPls2",
                    FileNameLoop = "AttentionPlsLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 39.19f,
                    Bars = 8,
                    BeatsOffset = 0.3f,
                    ColorTransitionIn = 0.4f,
                    ColorTransitionOut = 0.4f,
                    ColorTransitionEasing = Easing.OutExpo,
                    Palette = Palette.Parse(["#FCEB3C", "#FC3C9D", "#65C7FA", "#89FC8F", "#FEE9E9", "#FCEB3C", "#89FC8F", "#FC3C9D"]),
                    LoopOffset = 0,
                    FadeOutBeat = -6,
                    FadeOutDuration = 5,
                    FlickerLightsTimeSeries = [-8, 31],
                    Lyrics = [],
                    DrunknessLoopOffsetTimeSeries = new([7f, 12f, 15f], [0f, 0.90f, 0f]),
                    CondensationLoopOffsetTimeSeries = new([23f, 28f, 31f], [0f, 0.4f, 0f]),
                },
            ],
        },
        new SelectableAudioTrack
        {
            Name = "BbIXODaHET",
            Artist = "Сплин",
            Song = "Выхода нет",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            WindUpTimer = 40.85f,
            Bars = 8,
            BeatsOffset = 0.3f,
            ColorTransitionIn = 0.7f,
            ColorTransitionOut = 0.3f,
            ColorTransitionEasing = Easing.InOutCubic,
            Palette = Palette.Parse([
                "#E6D58F", "#612F7E", "#D9783F", "#C3411C", "#D3B742", "#549BDE",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -6,
            FadeOutDuration = 6,
            FlickerLightsTimeSeries = [-32.5f, -16.5f, 30.5f],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [-1, 2, 7, 31],
                [0, 0.4f, 0, 0]),
        },
        new SelectableAudioTrack
        {
            Name = "Whistle",
            Artist = "Flo Rida",
            Song = "Whistle",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 41.27f,
            Bars = 12,
            BeatsOffset = 0.0f,
            ColorTransitionIn = 0.5f,
            ColorTransitionOut = 0.2f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse([
                "#8DDEDD", "#98DE28", "#E8DB4B", "#F060A8", "#EEC263", "#725DEB",
            ]),
            LoopOffset = 16,
            FadeOutBeat = -22,
            FadeOutDuration = 6,
            FlickerLightsTimeSeries = [-20, 12],
            Lyrics = [
                (-40, "Can you blow my whistle, baby, whistle, baby?"),
                (-36, "Can you blow my whistle, baby, whistle, baby? Let me know"),
                (-33.5f, "Girl, I'm gonna show you how to\ndo it"),
                (-30.5f, "Girl, I'm gonna show you how to\ndo it and we start real slow"),
                (-27, "You just put your lips together"),
                (-24, "You just put your lips together and you come real close"),
                (-21, "Can you blow my whistle, baby, whistle, baby?"),

                (-17, "HERE WE GO"),

                (10, "Yeah, baby, make that whistle"),
                (12, "Yeah, baby, make that whistle\nblow oh oh oh"),

                (15, "Can you blow my whistle, baby, whistle, baby?"),
                (20, "Can you blow my whistle, baby, whistle, baby? Let me know"),
                (23, "Girl, I'm gonna show you how to\ndo it"),
                (28, "Girl, I'm gonna show you how to\ndo it and we start real slow"),
                (32, "You just put your lips together"),
                (36, "You just put your lips together and you come real close"),
                (39, "Can you blow my whistle, baby, whistle, baby?"),

                (46, "HERE"),
                (47, "Here WE"),
                (48, "Here we GO"),
            ],
            DrunknessLoopOffsetTimeSeries = new(
                [-16f, -15.25f, -12f, 9f, 15f, 16f, 18f, 21f],
                [0f, 0.7f, 0f, 0f, 0.4f, 0.7f, 0.4f, 0f]),
        },
        new SelectableAudioTrack
        {
            Name = "ReelGoon",
            Artist = "John Shanks and Sheryl Crow",
            Song = "Real Gone",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 45.15f,
            Bars = 16,
            BeatsOffset = -0.35f,
            ColorTransitionIn = 0.1f,
            ColorTransitionOut = 0.35f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse([
                "#DE1C31", "#F7E26B", "#3D3D3D", "#FBB040",
                "#ED4E4A", "#F0BD37", "#E41E2E", "#2E2D2B",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -2,
            FadeOutDuration = 2,
            FlickerLightsTimeSeries = [-41, 61],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [-0.5f, -0.05f, 6f, 60f, 61f],
                [0f, 0.5f, 0f, 0f, 0.5f]),
            GameOverText = "[LIFE SUPPORT: REAL GONE]",
        },
        new SelectableAudioTrack
        {
            Name = "HighLow",
            Artist = "Nirvana",
            Song = "Smells Like Teen Spirit",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 37.12f,
            Bars = 12,
            BeatsOffset = 0f,
            ColorTransitionIn = 0.75f,
            ColorTransitionOut = 0.25f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse([
                "#2e2e28", "#dfa24d", "#2e2e28", "#dfa24d",
                "#2e2e28", "#dfa24d", "#2e2e28", "#dfa24d",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -1.5f,
            FadeOutDuration = 1.5f,
            FlickerLightsTimeSeries = [-33, 39],
            Lyrics = [
                (-64, "Load up on guns"),
                (-59, """
                Load up on guns,
                  bring your friends
                """),
                (-55, """
                Load up on guns,       It's
                  bring your friends     fun
                                    to lose
                """),
                (-51, """
                          and
                    to
                        pretend
                """),
                (-47, """
                      She's  over-bored
                """),
                (-43, """
                      She's  over-bored
                  and self-assured
                """),
                (-39, """
                Oh no,
                             I know
                """),
                (-35, """
                Oh no,
                             I know
                  a   dirty  word
                """),
                // 1
                (-32, "Hello"),
                (-30, """

                 HE LL O
                """),
                (-28, """
                H  L
                 E    L
                       O
                """),
                (-26, """
                     W  L O  W
                 How  W  W  W
                       W   W
                """),
                // 2
                (-24, "Hello"),
                (-22, """

                     L
                H E L   O
                """),
                (-20, """
                    H   LO
                  H E  H    L
                 H    L   OO
                """),
                (-18, """

                    low
                       How
                """),
                // 3
                (-16, "      Hello"),
                (-14, """
                    L  O
                 He LL
                """),
                (-12, """
                H  H  EEE   L   L    OO
                H<>h  Ee    L   L   O  O
                h  h  EEE   LLL LLL  OO
                """),
                (-10, """
                      W   w     W
                    HOW  w  w  W
                       W  loW
                """),
                // 4
                ( -8, "Hello"),
                ( -6, """

                HE LL O
                """),
                ( -4, """
                  H  L
                     L  O
                    E
                """),
            ],
            DrunknessLoopOffsetTimeSeries = new(
                [-2f,  -1f, 6f],
                [ 0f, 0.5f, 0f]),
            CondensationLoopOffsetTimeSeries = new(
                [-2f,  -1f, 6f],
                [ 0f, 0.5f, 0f]),
            GameOverText = "[LIFE SUPORT: NIRVANA]",
        },
        new SelectableAudioTrack
        {
            Name = "IkWilJe",
            Artist = "My Chemical Romance",
            Song = "All I Want for Christmas Is You",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            Season = Season.NewYear,
            WindUpTimer = 43.03f,
            Beats = 13 * 4 + 2, // = 54
            BeatsOffset = 0f,
            ColorTransitionIn = 0.01f,
            ColorTransitionOut = 0.99f,
            ColorTransitionEasing = Easing.OutExpo,
            Palette = Palette.Parse([
                "#0B6623", "#FF2D2D", "#FFD700",
                "#00BFFF", "#9400D3", "#00FF7F",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -14f,
            FadeOutDuration = 12f,
            FlickerLightsTimeSeries = [31.45f],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [0f, 0.25f, 6f],
                [0f, 0.5f, 0f]),
            GameOverText = "[NEXT YEAR -- DEFINITELY]",
        },
        new SelectableAudioTrack
        {
            Name = "Paarden",
            Artist = "Элизиум",
            Song = "Три белых коня",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            Season = Season.NewYear,
            WindUpTimer = 36.12f,
            Bars = 8,
            BeatsOffset = 0f,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.4f,
            ColorTransitionEasing = Easing.OutCubic,
            Palette = Palette.Parse([
                "#F0FBFF", "#9ED9FF", "#0B95FF",
                "#66C7FF", "#CAE8FF", "#3BB6FF",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -4f,
            FadeOutDuration = 4f,
            FlickerLightsTimeSeries = [31.5f],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [0f, 0.25f, 6f],
                [0f, 0.5f, 0f]),
            GameOverText = "[NEXT YEAR -- DEFINITELY]",
        },
        new SelectableAudioTrack
        {
            Name = "DiscoKapot",
            Artist = "Дискотека Авария",
            Song = "Новогодняя",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.RUSSIAN,
            Season = Season.NewYear,
            WindUpTimer = 30.3f,
            Bars = 8,
            BeatsOffset = 0f,
            ColorTransitionIn = 0.25f,
            ColorTransitionOut = 0.6f,
            ColorTransitionEasing = Easing.InOutExpo,
            Palette = Palette.Parse([
                "#0B6623", "#FF2D2D", "#FFD700",
                "#00BFFF", "#9400D3", "#00FF7F",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -4f,
            FadeOutDuration = 4f,
            FlickerLightsTimeSeries = [-32, -24, -16, 16, 32],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [0f, 0.25f, 6f],
                [0f, 0.5f, 0f]),
            GameOverText = "[NEXT YEAR -- DEFINITELY]",
        },
        new SelectableTracksGroup
        {
            Name = "PickUpSticks",
            Artist = "t.A.T.u.",
            Song = "Show Me Love",
            Language = Language.ENGLISH,
            Tracks =
            [
                new CoreAudioTrack
                {
                    Name = "PickUpSticks1",
                    FileNameLoop = "PickUpSticksLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 38.5f,
                    Bars = 16,
                    BeatsOffset = 0.2f,
                    ColorTransitionIn = 0.6f,
                    ColorTransitionOut = 0.3f,
                    ColorTransitionEasing = Easing.InOutCubic,
                    Palette = PalettePickUpSticks,
                    LoopOffset = 0,
                    FadeOutBeat = -2,
                    FadeOutDuration = 2,
                    FlickerLightsTimeSeries = [-36, -4, 32],
                    Lyrics = [],
                    DrunknessLoopOffsetTimeSeries = new([0f, 0.5f, 3f, 32f, 34f, 40f], [0f, 0.5f, 0f, 0f, 0.3f, 0f]),
                    CondensationLoopOffsetTimeSeries = new([23f, 28f, 31f, 34f, 38f, 52f], [0f, 0.6f, 0f, 0f, 0.7f, 0f]),
                    GameOverText = "[LOVE SUPPORT: OFFLINE]",
                },
                new CoreAudioTrack
                {
                    Name = "PickUpSticks2",
                    FileNameLoop = "PickUpSticksLoop.ogg",
                    AudioType = AudioType.OGGVORBIS,
                    WindUpTimer = 38.47f,
                    Bars = 16,
                    BeatsOffset = 0.2f,
                    ColorTransitionIn = 0.6f,
                    ColorTransitionOut = 0.3f,
                    ColorTransitionEasing = Easing.InOutCubic,
                    Palette = PalettePickUpSticks,
                    LoopOffset = 0,
                    FadeOutBeat = -2,
                    FadeOutDuration = 2,
                    FlickerLightsTimeSeries = [-36, -4, 32],
                    Lyrics = [],
                    DrunknessLoopOffsetTimeSeries = new([0f, 0.5f, 3f, 32f, 34f, 40f], [0f, 0.5f, 0f, 0f, 0.3f, 0f]),
                    CondensationLoopOffsetTimeSeries = new([23f, 28f, 31f, 34f, 38f, 52f], [0f, 0.5f, 0f, 0f, 0.5f, 0f]),
                    GameOverText = "[LOVE SUPPORT: OFFLINE]",
                },
            ],
        },
        new SelectableAudioTrack
        {
            Name = "TwoFastTuFurious",
            Artist = "t.A.T.u.",
            Song = "Not Gonna Get Us / Нас не догонят",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 36.08f,
            Bars = 24, // 24 * 4 = 96 beats
            BeatsOffset = 0f,
            ColorTransitionIn = 0.4f,
            ColorTransitionOut = 0.6f,
            ColorTransitionEasing = Easing.InOutCubic,
            Palette = Palette.Parse([
                "#F0FBFF", "#9ED9FF", "#0B95FF",
                "#66C7FF", "#CAE8FF", "#3BB6FF",
            ]),
            // Allow chorus lyrics to be displayed only the first time, so they don't get too repetitive
            LoopOffset = 48,
            FadeOutBeat = -6f - 48f,
            FadeOutDuration = 6f,
            FlickerLightsTimeSeries = [-80, -14, 34, 82],
            Lyrics = [
                (-126, "Starting from here,\nlet's make a promise"),
                (-110, "You and me, let's just be honest"),
                (-100, "We're gonna run,\nnothing can stop us"),
                (-89, "Even the night,\nthat falls all around us"),
                (-80, "Soon there will be\nlaughter and voices"),
                (-70, "Beyond the clouds,\nover the mountains"),
                (-62, "We'll run away,\non roads that are empty"),
                (-55, "Lights from the airfield,\nshining upon you"),
                (-48, "Nothing can stop this"),
                (-44, "Nothing can stop this,\nnot now, I love you"),
                (-40, "They're not gonna get us"),
                (-36, "They're not gonna get us\nTHEY'RE NOT GONNA GET US"),
            ],
            DrunknessLoopOffsetTimeSeries = new(
                [-48f, -47.75f, -42f, 0f, 0.25f, 6f, 48f, 48.25f, 54f],
                [0f, 0.5f, 0f, 0f, 0.5f, 0f, 0f, 0.5f, 0f]),
            CondensationLoopOffsetTimeSeries = new(
                [-24f, -23.75f, -18f, 24f, 24.25f, 30f, 72f, 72.25f, 78f],
                [0f, 0.5f, 0f, 0f, 0.5f, 0f, 0f, 0.5f, 0f]),
            // GameOverText"[ LOVE  GONNA  GET US ]",
            GameOverText = "[ O NOES, THEY GOT US ]",
        },
        new SelectableAudioTrack
        {
            Name = "Arcane",
            Artist = "Imagine Dragons & J.I.D",
            Song = "Enemy",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.ENGLISH,
            WindUpTimer = 38.28f,
            Bars = 8,
            BeatsOffset = 0f,
            ColorTransitionIn = 0.2f,
            ColorTransitionOut = 0.3f,
            ColorTransitionEasing = Easing.InOutExpo,
            Palette = Palette.Parse([
                "#F0FBFF", "#0B95FF", "#A8F5E2", "#B79BF2", "#fed2e1",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -1.5f,
            FadeOutDuration = 1.5f,
            FlickerLightsTimeSeries = [-48.1f, -44.1f, -16, 15.9f, 31.9f],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [-48f, -47.75f, -44f, -43.75f, -36f, /* 1 */ 0f, 0.25f, 6f, /* 2 */ 8f, 8.25f, 14f, /* 3 */ 16f, 16.25f, 22f, /* 4 */ 24f, 24.25f, 30f],
                [  0f,    0.5f, 0.2f,    0.5f,   0f, /* 1 */ 0f,  0.4f, 0f, /* 2 */ 0f,  0.4f,  0f, /* 3 */  0f,   0.4f,  0f, /* 4 */  0f,   0.4f,  0f]),
            CondensationLoopOffsetTimeSeries = new(
                [24f, 24.25f, 30f],
                [ 0f,   0.5f,  0f]),
            GameOverText = "[LIFE SUPPORT: HEXTECH]",
        },
        new SelectableAudioTrack
        {
            Name = "Yesterday",
            Artist = "BTS",
            Song = "Not Today",
            AudioType = AudioType.OGGVORBIS,
            Language = Language.KOREAN,
            WindUpTimer = 43.63f,
            Bars = 16,
            BeatsOffset = 0f,
            ColorTransitionIn = 0.2f,
            ColorTransitionOut = 0.3f,
            ColorTransitionEasing = Easing.InOutExpo,
            Palette = Palette.Parse([
                "#F0FBFF", "#0B95FF", "#A8F5E2", "#B79BF2", "#fed2e1",
            ]),
            LoopOffset = 0,
            FadeOutBeat = -5f,
            FadeOutDuration = 4f,
            FlickerLightsTimeSeries = [-48.1f, -44.1f, -16, 15.9f, 31.9f],
            Lyrics = [],
            DrunknessLoopOffsetTimeSeries = new(
                [-64, -63.5f,  -58f, -34f, -31.75f, -22f, 0f, 0.25f, 6f],
                [ 0f,   0.4f,    0f,   0f,   0.4f,    0f, 0f, 0.4f,  0f]),
            CondensationLoopOffsetTimeSeries = new(
                [32f, 32.25f, 38f],
                [ 0f,     1f,  0f]),
            GameOverText = "[LIFE SUPPORT: NOT TODAY]",
        },
    ];
}
