# vim: set fileencoding=utf-8
from typing import Any, Dict, List, Tuple

from bemani.backend.sdvx.gravitywars import SoundVoltexGravityWars
from bemani.common import ID, Profile
from bemani.data import Score, UserID
from bemani.protocol import Node


class SoundVoltexGravityWarsSeason2(
    SoundVoltexGravityWars,
):

    def _get_skill_analyzer_seasons(self) -> Dict[int, str]:
        return {
            1: 'SKILL ANALYZER 第1回 Aコース',
            2: 'SKILL ANALYZER 第1回 Bコース',
            3: 'SKILL ANALYZER 第1回 Cコース',
            4: 'The 4th KAC コース',
            5: 'SKILL ANALYZER 第2回 Aコース',
            6: 'SKILL ANALYZER 第2回 Bコース',
            7: 'SKILL ANALYZER 第2回 Cコース',
            8: 'SKILL ANALYZER 第3回 Aコース',
            9: 'SKILL ANALYZER 第3回 Bコース',
            10: 'SKILL ANALYZER 第3回 Cコース',
            11: 'SKILL ANALYZER 第4回',
            12: 'SKILL ANALYZER 第5回 Aコース',
            13: 'SKILL ANALYZER 第5回 Bコース',
            14: 'SKILL ANALYZER 第5回 Cコース',
            15: 'SKILL ANALYZER 第6回 Aコース',
            16: 'SKILL ANALYZER 第6回 Bコース',
            17: '天下一コース',
            18: 'The 5th KAC コース',
            19: 'VOLTEXES コース',
            20: 'SKILL ANALYZER 第7回',
            21: 'SKILL ANALYZER 第8回',
        }

    def _get_skill_analyzer_courses(self) -> List[Dict[str, Any]]:
        return [
            {
                'level': 0,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 109,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 283,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 279,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 76,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 196,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 8,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 90,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 228,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 80,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 125,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 201,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 237,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 393,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 352,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 66,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 383,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 511,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 331,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 422,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 445,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 71,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 454,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 158,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 173,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 322,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 63,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 124,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 1,
                'tracks': [
                    {
                        'id': 348,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 73,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 259,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 374,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 84,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 303,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 22,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 274,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 183,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 56,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 244,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 4,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 414,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 209,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 334,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 123,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 403,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 23,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 391,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 239,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 426,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 389,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 89,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 246,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 419,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 299,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 341,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 394,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 466,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 47,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 2,
                'tracks': [
                    {
                        'id': 500,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 247,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 229,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 36,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 189,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 171,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 182,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 3,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 105,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 14,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 120,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 86,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 390,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 243,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 186,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 36,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 423,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 59,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 452,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 262,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 480,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 411,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 70,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 211,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 30,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 72,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 293,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 87,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 117,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 269,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 3,
                'tracks': [
                    {
                        'id': 498,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 437,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 126,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 0,
                'level': -1,
                'skill_name': 'エンジョイ♪ごりらコースA',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 466,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 273,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 470,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 1,
                'level': -1,
                'skill_name': 'エンジョイ♪ごりらコースB',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 194,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 343,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 501,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': -1,
                'skill_name': 'エンジョイ♪ごりらコースC',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 356,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 7,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 472,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 3,
                'level': -1,
                'skill_name': 'エンジョイ♪ごりらコースD',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 299,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 333,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 583,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 4,
                'level': -1,
                'skill_name': 'チャレンジ★ごりらコースA',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 466,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 273,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 470,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 5,
                'level': -1,
                'skill_name': 'チャレンジ★ごりらコースB',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 194,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 343,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 501,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 6,
                'level': -1,
                'skill_name': 'チャレンジ★ごりらコースC',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 356,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 7,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 472,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 7,
                'level': -1,
                'skill_name': 'チャレンジ★ごりらコースD',
                'skill_name_id': 12,
                'season_id': 4,
                'tracks': [
                    {
                        'id': 299,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 333,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 583,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 47,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 334,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 10,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 11,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 224,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 132,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 137,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 336,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 380,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 109,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 308,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 113,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 101,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 200,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 478,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 487,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 254,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 410,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 196,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 170,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 218,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 489,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 519,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 373,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 456,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 263,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 390,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 5,
                'tracks': [
                    {
                        'id': 19,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 116,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 508,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 123,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 231,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 185,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 65,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 386,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 92,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 379,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 225,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 427,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 122,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 249,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 185,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 413,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 157,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 402,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 412,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 323,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 256,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 400,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 368,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 241,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 453,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 442,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 216,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 370,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 244,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 252,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 6,
                'tracks': [
                    {
                        'id': 359,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 214,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 506,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 124,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 446,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 34,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 113,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 309,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 42,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 353,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 246,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 130,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 63,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 219,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 153,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 418,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 369,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 385,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 226,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 301,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 159,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 311,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 255,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 213,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 357,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 268,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 304,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 295,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 36,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 302,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 7,
                'tracks': [
                    {
                        'id': 7,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 208,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 376,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 101,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 219,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 159,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 87,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 337,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 403,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 30,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 596,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 39,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 430,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 561,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 328,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 444,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 618,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 100,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 447,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 545,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 94,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 291,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 2,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 475,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 627,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 624,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 427,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 464,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 122,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 591,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 8,
                'tracks': [
                    {
                        'id': 381,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 463,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 507,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 468,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 243,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 388,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 167,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 486,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 75,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 96,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 557,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 55,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 116,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 520,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 314,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 507,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 567,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 205,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 86,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 488,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 80,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 184,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 130,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 524,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 521,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 576,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 503,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 473,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 125,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 538,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 9,
                'tracks': [
                    {
                        'id': 407,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 472,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 363,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 122,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 209,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 24,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 405,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 554,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 77,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 426,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 262,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 194,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 343,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 564,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 248,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 126,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 471,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 276,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 476,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 120,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 57,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 146,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 622,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 152,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 562,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 531,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 449,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 404,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 123,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 607,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 10,
                'tracks': [
                    {
                        'id': 469,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 496,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 289,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            # Manually specify IDs here since this has more than one level 11.
            {
                'id': 0,
                'level': 0,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 190,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 568,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 191,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 1,
                'level': 1,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 278,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 41,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 18,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': 2,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 15,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 483,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 467,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 3,
                'level': 3,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 585,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 486,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 48,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 4,
                'level': 4,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 103,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 335,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 224,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 5,
                'level': 5,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 275,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 438,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 67,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 6,
                'level': 6,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 202,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 264,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 526,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 7,
                'level': 7,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 131,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 155,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 394,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 8,
                'level': 8,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 396,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 346,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 510,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 9,
                'level': 9,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 326,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 470,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 362,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 10,
                'level': 10,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 339,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 418,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 525,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 11,
                'level': 10,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 36,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 47,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 73,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'id': 12,
                'level': 11,
                'season_id': 11,
                'tracks': [
                    {
                        'id': 126,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 367,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 636,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 507,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 671,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 176,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 27,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 520,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 103,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 478,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 264,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 322,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 107,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 520,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 163,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 408,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 34,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 678,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 481,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 436,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 104,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 55,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 415,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 512,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 483,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 509,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 557,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 497,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 58,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 166,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 12,
                'tracks': [
                    {
                        'id': 581,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 439,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 443,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 250,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 245,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 186,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 13,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 618,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 31,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 436,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 144,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 79,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 489,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 245,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 222,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 556,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 233,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 565,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 354,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 281,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 2,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 14,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 267,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 490,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 467,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 585,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 560,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 599,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 101,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 109,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 13,
                'tracks': [
                    {
                        'id': 630,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 408,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 393,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 63,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 328,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 266,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 23,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 453,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 153,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 458,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 514,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 71,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 392,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 388,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 569,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 508,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 405,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 266,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 50,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 172,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 33,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 210,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 232,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 485,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 457,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 514,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 556,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 534,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 273,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 220,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 14,
                'tracks': [
                    {
                        'id': 420,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 444,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 151,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 117,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 564,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 318,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 93,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 308,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 49,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 317,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 335,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 239,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 439,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 44,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 243,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 158,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 175,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 150,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 5,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 162,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 79,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 386,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 6,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 99,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 22,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 164,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 406,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 344,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 6,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 660,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 378,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 465,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 413,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 221,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 342,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 10,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 125,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 123,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 124,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 11,
                'season_id': 15,
                'tracks': [
                    {
                        'id': 366,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 695,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 692,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 0,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 343,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 144,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 569,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 1,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 515,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 254,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 354,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 2,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 441,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 524,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 187,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'level': 3,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 117,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 446,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 435,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 4,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 180,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 260,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 451,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            # The level 6 course for this version is intentionally missing,
            # as a song that it included was removed and thus the course was
            # as well.
            {
                'level': 6,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 440,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 112,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 401,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 7,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 325,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 387,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 42,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'level': 8,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 676,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 494,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 234,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 9,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 155,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 623,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 329,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 10,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 450,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 634,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 360,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'level': 11,
                'season_id': 16,
                'tracks': [
                    {
                        'id': 116,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 693,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 694,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'id': 0,
                'level': -1,
                'skill_name': '天下一 (梅)コース',
                'skill_name_id': 13,
                'season_id': 17,
                'tracks': [
                    {
                        'id': 625,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 697,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 708,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                ],
            },
            {
                'id': 1,
                'level': -1,
                'skill_name': '天下一 (竹)コース',
                'skill_name_id': 13,
                'season_id': 17,
                'tracks': [
                    {
                        'id': 625,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 697,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 708,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': -1,
                'skill_name': '天下一 (松)コース',
                'skill_name_id': 13,
                'season_id': 17,
                'tracks': [
                    {
                        'id': 625,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 697,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 708,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 0,
                'level': -1,
                'skill_name': '青龍の戯れ',
                'skill_name_id': 14,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 439,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 675,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 692,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 1,
                'level': -1,
                'skill_name': '朱雀の戯れ',
                'skill_name_id': 16,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 587,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 543,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 693,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': -1,
                'skill_name': '玄武の戯れ',
                'skill_name_id': 17,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 696,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 697,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 695,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 3,
                'level': -1,
                'skill_name': '白虎の戯れ',
                'skill_name_id': 15,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 606,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 593,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 694,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 4,
                'level': -1,
                'skill_name': '青龍の戯れ',
                'skill_name_id': 14,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 439,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 675,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 692,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 5,
                'level': -1,
                'skill_name': '朱雀の戯れ',
                'skill_name_id': 16,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 587,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 543,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 693,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 6,
                'level': -1,
                'skill_name': '玄武の戯れ',
                'skill_name_id': 17,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 696,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 697,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 695,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 7,
                'level': -1,
                'skill_name': '白虎の戯れ',
                'skill_name_id': 15,
                'season_id': 18,
                'tracks': [
                    {
                        'id': 606,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 593,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 694,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 0,
                'level': -1,
                'skill_name': 'RANK 名も無き草',
                'skill_name_id': 18,
                'season_id': 19,
                'tracks': [
                    {
                        'id': 783,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 784,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 785,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                ],
            },
            {
                'id': 1,
                'level': -1,
                'skill_name': 'RANK 雪月花',
                'skill_name_id': 18,
                'season_id': 19,
                'tracks': [
                    {
                        'id': 783,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 784,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 785,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': -1,
                'skill_name': 'RANK 金剛雲',
                'skill_name_id': 18,
                'season_id': 19,
                'tracks': [
                    {
                        'id': 783,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 784,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 785,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            # Manually specify IDs here since this has more than one level 11.
            {
                'id': 0,
                'level': 0,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 657,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 285,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 491,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 1,
                'level': 1,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 446,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 588,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 21,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': 2,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 560,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 602,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 88,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 3,
                'level': 3,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 470,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 515,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 65,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 4,
                'level': 4,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 499,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 358,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 72,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 5,
                'level': 5,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 573,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 559,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 602,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 6,
                'level': 6,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 255,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 164,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 783,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 7,
                'level': 7,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 425,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 54,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 771,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 8,
                'level': 8,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 589,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 592,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 776,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 9,
                'level': 9,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 779,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 611,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 670,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 10,
                'level': 10,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 522,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 543,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 610,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 11,
                'level': 10,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 122,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 180,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 214,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'id': 12,
                'level': 11,
                'season_id': 20,
                'tracks': [
                    {
                        'id': 661,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 258,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 791,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            # Manually specify IDs here since this has more than one level 11.
            {
                'id': 0,
                'level': 0,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 697,
                        'type': self.CHART_TYPE_NOVICE,
                    },
                    {
                        'id': 314,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 768,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 1,
                'level': 1,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 16,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 528,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 118,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 2,
                'level': 2,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 330,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 644,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 74,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                ],
            },
            {
                'id': 3,
                'level': 3,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 494,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 294,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 61,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 4,
                'level': 4,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 498,
                        'type': self.CHART_TYPE_ADVANCED,
                    },
                    {
                        'id': 177,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 212,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 5,
                'level': 5,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 319,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 53,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 603,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 6,
                'level': 6,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 688,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 261,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 784,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 7,
                'level': 7,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 777,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 387,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 659,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 8,
                'level': 8,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 518,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 714,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 681,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 9,
                'level': 9,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 529,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 682,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 597,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 10,
                'level': 10,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 600,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 758,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                    {
                        'id': 816,
                        'type': self.CHART_TYPE_EXHAUST,
                    },
                ],
            },
            {
                'id': 11,
                'level': 10,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 829,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 830,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 831,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
            {
                'id': 12,
                'level': 11,
                'season_id': 21,
                'tracks': [
                    {
                        'id': 914,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 913,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                    {
                        'id': 915,
                        'type': self.CHART_TYPE_INFINITE,
                    },
                ],
            },
        ]

    def _get_extra_events(self) -> List[int]:
        return [
            62,  # Navigator select (empty by itself)
            65,  # Navigator crew recruitments bottom half
            66,  # Enable Tenkaichi Mode
            69,  # Season 2 differences
        ]

    def handle_game_3_hiscore_request(self, request: Node) -> Node:
        # Grab location for local scores
        locid = ID.parse_machine_id(request.child_value('locid'))

        # Start the response packet
        game = Node.void('game_3')

        # First, grab hit chart
        playcounts = self.data.local.music.get_hit_chart(self.game, self.version, 1024)

        hitchart = Node.void('hit')
        game.add_child(hitchart)
        for (songid, count) in playcounts:
            info = Node.void('d')
            hitchart.add_child(info)
            info.add_child(Node.u32('id', songid))
            info.add_child(Node.u32('cnt', count))

        # Now, grab global and local scores as well as clear rates
        global_records = self.data.remote.music.get_all_records(self.game, self.version)
        users = {
            uid: prof for (uid, prof) in self.data.local.user.get_all_profiles(self.game, self.version)
        }
        area_users = [
            uid for uid in users
            if users[uid].get_int('loc', -1) == locid
        ]
        area_records = self.data.local.music.get_all_records(self.game, self.version, userlist=area_users)
        clears = self.get_clear_rates()
        records: Dict[int, Dict[int, Dict[str, Tuple[UserID, Score]]]] = {}

        missing_users = (
            [userid for (userid, _) in global_records if userid not in users] +
            [userid for (userid, _) in area_records if userid not in users]
        )
        for (userid, profile) in self.get_any_profiles(missing_users):
            users[userid] = profile

        for (userid, score) in global_records:
            if userid not in users:
                raise Exception('Logic error, missing profile for user!')
            if score.id not in records:
                records[score.id] = {}
            if score.chart not in records[score.id]:
                records[score.id][score.chart] = {}
            records[score.id][score.chart]['global'] = (userid, score)

        for (userid, score) in area_records:
            if userid not in users:
                raise Exception('Logic error, missing profile for user!')
            if score.id not in records:
                records[score.id] = {}
            if score.chart not in records[score.id]:
                records[score.id][score.chart] = {}
            records[score.id][score.chart]['area'] = (userid, score)

        # Output it to the game
        highscores = Node.void('sc')
        game.add_child(highscores)
        for musicid in records:
            for chart in records[musicid]:
                (globaluserid, globalscore) = records[musicid][chart]['global']

                global_profile = users[globaluserid]
                if clears[musicid][chart]['total'] > 0:
                    clear_rate = float(clears[musicid][chart]['clears']) / float(clears[musicid][chart]['total'])
                else:
                    clear_rate = 0.0

                info = Node.void('d')
                highscores.add_child(info)
                info.add_child(Node.u32('id', musicid))
                info.add_child(Node.u32('ty', chart))
                info.add_child(Node.string('a_sq', ID.format_extid(global_profile.extid)))
                info.add_child(Node.string('a_nm', global_profile.get_str('name')))
                info.add_child(Node.u32('a_sc', globalscore.points))
                info.add_child(Node.s32('cr', int(clear_rate * 10000)))

                if 'area' in records[musicid][chart]:
                    (localuserid, localscore) = records[musicid][chart]['area']
                    local_profile = users[localuserid]
                    info.add_child(Node.string('l_sq', ID.format_extid(local_profile.extid)))
                    info.add_child(Node.string('l_nm', local_profile.get_str('name')))
                    info.add_child(Node.u32('l_sc', localscore.points))

        return game

    def handle_game_3_load_r_request(self, request: Node) -> Node:
        refid = request.child_value('dataid')
        game = Node.void('game_3')

        if refid is not None:
            userid = self.data.remote.user.from_refid(self.game, self.version, refid)
        else:
            userid = None

        if userid is not None:
            links = self.data.local.user.get_links(self.game, self.version, userid)
            for index, link in enumerate(links):
                if link.type != 'rival':
                    continue
                other_profile = self.get_profile(link.other_userid)
                if other_profile is None:
                    continue

                # Base information about rival
                rival = Node.void('rival')
                game.add_child(rival)
                rival.add_child(Node.s16('no', index))
                rival.add_child(Node.string('seq', ID.format_extid(other_profile.extid)))
                rival.add_child(Node.string('name', other_profile.get_str('name')))

                # Return scores for this user on random charts
                scores = self.data.remote.music.get_scores(self.game, self.version, link.other_userid)
                for score in scores:
                    music = Node.void('music')
                    rival.add_child(music)
                    music.set_attribute('id', str(score.id))
                    music.set_attribute('type', str(score.chart))
                    music.set_attribute('sc', str(score.points))

        return game

    def format_profile(self, userid: UserID, profile: Profile) -> Node:
        game = Node.void('game_3')

        # Generic profile stuff
        game.add_child(Node.string('name', profile.get_str('name')))
        game.add_child(Node.string('code', ID.format_extid(profile.extid)))
        game.add_child(Node.u32('gamecoin_packet', profile.get_int('packet')))
        game.add_child(Node.u32('gamecoin_block', profile.get_int('block')))
        game.add_child(Node.s16('skill_name_id', profile.get_int('chosen_skill_id', profile.get_int('skill_name_id', -1))))
        game.add_child(Node.s32_array('hidden_param', profile.get_int_array('hidden_param', 20)))
        game.add_child(Node.u32('blaster_energy', profile.get_int('blaster_energy')))
        game.add_child(Node.u32('blaster_count', profile.get_int('blaster_count')))

        # Play statistics
        statistics = self.get_play_statistics(userid)
        game.add_child(Node.u32('play_count', statistics.total_plays))
        game.add_child(Node.u32('daily_count', statistics.today_plays))
        game.add_child(Node.u32('play_chain', statistics.consecutive_days))

        # Last played stuff
        if 'last' in profile:
            lastdict = profile.get_dict('last')
            last = Node.void('last')
            game.add_child(last)
            last.add_child(Node.s32('music_id', lastdict.get_int('music_id', -1)))
            last.add_child(Node.u8('music_type', lastdict.get_int('music_type')))
            last.add_child(Node.u8('sort_type', lastdict.get_int('sort_type')))
            last.add_child(Node.u8('narrow_down', lastdict.get_int('narrow_down')))
            last.add_child(Node.u8('headphone', lastdict.get_int('headphone')))
            last.add_child(Node.u16('appeal_id', lastdict.get_int('appeal_id', 1001)))
            last.add_child(Node.u16('comment_id', lastdict.get_int('comment_id')))
            last.add_child(Node.u8('gauge_option', lastdict.get_int('gauge_option')))

        # Item unlocks
        itemnode = Node.void('item')
        game.add_child(itemnode)

        game_config = self.get_game_config()
        achievements = self.data.local.user.get_achievements(self.game, self.version, userid)

        for item in achievements:
            if item.type[:5] != 'item_':
                continue
            itemtype = int(item.type[5:])

            if game_config.get_bool('force_unlock_songs') and itemtype == self.GAME_CATALOG_TYPE_SONG:
                # Don't echo unlocked songs, we will add all of them later
                continue
            if game_config.get_bool('force_unlock_cards') and itemtype == self.GAME_CATALOG_TYPE_APPEAL_CARD:
                # Don't echo unlocked appeal cards, we will add all of them later
                continue
            if game_config.get_bool('force_unlock_crew') and itemtype == self.GAME_CATALOG_TYPE_CREW:
                # Don't echo unlocked crew, we will add all of them later
                continue

            info = Node.void('info')
            itemnode.add_child(info)
            info.add_child(Node.u8('type', itemtype))
            info.add_child(Node.u32('id', item.id))
            info.add_child(Node.u32('param', item.data.get_int('param')))

        if game_config.get_bool('force_unlock_songs'):
            ids: Dict[int, int] = {}
            songs = self.data.local.music.get_all_songs(self.game, self.version)
            for song in songs:
                if song.id not in ids:
                    ids[song.id] = 0

                if song.data.get_int('difficulty') > 0:
                    ids[song.id] = ids[song.id] | (1 << song.chart)

            for itemid in ids:
                if ids[itemid] == 0:
                    continue

                info = Node.void('info')
                itemnode.add_child(info)
                info.add_child(Node.u8('type', self.GAME_CATALOG_TYPE_SONG))
                info.add_child(Node.u32('id', itemid))
                info.add_child(Node.u32('param', ids[itemid]))

        if game_config.get_bool('force_unlock_cards'):
            catalog = self.data.local.game.get_items(self.game, self.version)
            for unlock in catalog:
                if unlock.type != 'appealcard':
                    continue

                info = Node.void('info')
                itemnode.add_child(info)
                info.add_child(Node.u8('type', self.GAME_CATALOG_TYPE_APPEAL_CARD))
                info.add_child(Node.u32('id', unlock.id))
                info.add_child(Node.u32('param', 1))

        if game_config.get_bool('force_unlock_crew'):
            for crewid in range(1, 781):
                info = Node.void('info')
                itemnode.add_child(info)
                info.add_child(Node.u8('type', self.GAME_CATALOG_TYPE_CREW))
                info.add_child(Node.u32('id', crewid))
                info.add_child(Node.u32('param', 1))

        # Skill courses
        skill = Node.void('skill')
        game.add_child(skill)
        course_all = Node.void('course_all')
        skill.add_child(course_all)
        skill_level = -1

        for course in achievements:
            if course.type != 'course':
                continue

            course_id = course.id % 100
            season_id = int(course.id / 100)

            if course.data.get_int('clear_type') >= 2:
                # The user cleared this, lets take the highest level clear for this
                courselist = [
                    c for c in
                    self._get_skill_analyzer_courses() if
                    c.get('id', c['level']) == course_id and
                    c['season_id'] == season_id
                ]
                if len(courselist) > 0:
                    skill_level = max(skill_level, courselist[0]['level'])

            info = Node.void('d')
            course_all.add_child(info)
            info.add_child(Node.s16('crsid', course_id))
            info.add_child(Node.s16('ct', course.data.get_int('clear_type')))
            info.add_child(Node.s16('ar', course.data.get_int('achievement_rate')))
            info.add_child(Node.s32('ssnid', season_id))

        # Calculated skill level
        game.add_child(Node.s16('skill_level', skill_level))

        # Story mode unlocks
        storynode = Node.void('story')
        game.add_child(storynode)

        for story in achievements:
            if story.type != 'story':
                continue

            info = Node.void('info')
            storynode.add_child(info)
            info.add_child(Node.s32('story_id', story.id))
            info.add_child(Node.s32('progress_id', story.data.get_int('progress_id')))
            info.add_child(Node.s32('progress_param', story.data.get_int('progress_param')))
            info.add_child(Node.s32('clear_cnt', story.data.get_int('clear_cnt')))
            info.add_child(Node.u32('route_flg', story.data.get_int('route_flg')))

        # Game parameters
        paramnode = Node.void('param')
        game.add_child(paramnode)

        for param in achievements:
            if param.type[:6] != 'param_':
                continue
            paramtype = int(param.type[6:])

            info = Node.void('info')
            paramnode.add_child(info)
            info.add_child(Node.s32('id', param.id))
            info.add_child(Node.s32('type', paramtype))
            info.add_child(Node.s32_array('param', param.data['param']))  # This looks to be variable, so no validation on length

        return game

    def unformat_profile(self, userid: UserID, request: Node, oldprofile: Profile) -> Profile:
        newprofile = oldprofile.clone()

        # Update blaster energy and in-game currencies
        earned_gamecoin_packet = request.child_value('earned_gamecoin_packet')
        if earned_gamecoin_packet is not None:
            newprofile.replace_int('packet', newprofile.get_int('packet') + earned_gamecoin_packet)
        earned_gamecoin_block = request.child_value('earned_gamecoin_block')
        if earned_gamecoin_block is not None:
            newprofile.replace_int('block', newprofile.get_int('block') + earned_gamecoin_block)
        earned_blaster_energy = request.child_value('earned_blaster_energy')
        if earned_blaster_energy is not None:
            newprofile.replace_int('blaster_energy', newprofile.get_int('blaster_energy') + earned_blaster_energy)

        # Miscelaneous stuff
        newprofile.replace_int('blaster_count', request.child_value('blaster_count'))
        newprofile.replace_int('chosen_skill_id', request.child_value('skill_name_id'))
        newprofile.replace_int_array('hidden_param', 20, request.child_value('hidden_param'))

        # Update user's unlock status if we aren't force unlocked
        game_config = self.get_game_config()

        if request.child('item') is not None:
            for child in request.child('item').children:
                if child.name != 'info':
                    continue

                item_id = child.child_value('id')
                item_type = child.child_value('type')
                param = child.child_value('param')

                if game_config.get_bool('force_unlock_cards') and item_type == self.GAME_CATALOG_TYPE_APPEAL_CARD:
                    # Don't save back appeal cards because they were force unlocked
                    continue
                if game_config.get_bool('force_unlock_songs') and item_type == self.GAME_CATALOG_TYPE_SONG:
                    # Don't save back songs, because they were force unlocked
                    continue
                if game_config.get_bool('force_unlock_crew') and item_type == self.GAME_CATALOG_TYPE_CREW:
                    # Don't save back crew, because they were force unlocked
                    continue

                self.data.local.user.put_achievement(
                    self.game,
                    self.version,
                    userid,
                    item_id,
                    f'item_{item_type}',
                    {
                        'param': param,
                    },
                )

        # Update story progress
        if request.child('story') is not None:
            for child in request.child('story').children:
                if child.name != 'info':
                    continue

                story_id = child.child_value('story_id')
                progress_id = child.child_value('progress_id')
                progress_param = child.child_value('progress_param')
                clear_cnt = child.child_value('clear_cnt')
                route_flg = child.child_value('route_flg')
                self.data.local.user.put_achievement(
                    self.game,
                    self.version,
                    userid,
                    story_id,
                    'story',
                    {
                        'progress_id': progress_id,
                        'progress_param': progress_param,
                        'clear_cnt': clear_cnt,
                        'route_flg': route_flg,
                    },
                )

        # Update params
        if request.child('param') is not None:
            for child in request.child('param').children:
                if child.name != 'info':
                    continue

                param_id = child.child_value('id')
                param_type = child.child_value('type')
                param_param = child.child_value('param')
                self.data.local.user.put_achievement(
                    self.game,
                    self.version,
                    userid,
                    param_id,
                    f'param_{param_type}',
                    {
                        'param': param_param,
                    },
                )

        # Grab last information.
        lastdict = newprofile.get_dict('last')
        lastdict.replace_int('headphone', request.child_value('headphone'))
        lastdict.replace_int('appeal_id', request.child_value('appeal_id'))
        lastdict.replace_int('comment_id', request.child_value('comment_id'))
        lastdict.replace_int('music_id', request.child_value('music_id'))
        lastdict.replace_int('music_type', request.child_value('music_type'))
        lastdict.replace_int('sort_type', request.child_value('sort_type'))
        lastdict.replace_int('narrow_down', request.child_value('narrow_down'))
        lastdict.replace_int('gauge_option', request.child_value('gauge_option'))

        # Save back last information gleaned from results
        newprofile.replace_dict('last', lastdict)

        # Keep track of play statistics
        self.update_play_statistics(userid)

        return newprofile
