/*---------------------------------------------------------*\
| RazerDevices.cpp                                          |
|                                                           |
|   Device list for Razer devices                           |
|                                                           |
|   Adam Honse (CalcProgrammer1)                04 Sep 2021 |
|                                                           |
|   This file is part of the OpenRGB project                |
|   SPDX-License-Identifier: GPL-2.0-only                   |
\*---------------------------------------------------------*/

#include "RazerDevices.h"

/*-------------------------------------------------------------------------*\
|  KEYMAPS                                                                  |
\*-------------------------------------------------------------------------*/
keyboard_keymap_overlay_values razer_blackwidow_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            {
                KEYBOARD_LAYOUT_ANSI_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      4,      1,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Move 'Z' 1 right (Account for ISO key)
                }
            },
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right
        {   0,      0,      2,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'F1' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      1,      14,         0,          KEY_EN_EQUALS,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts most of row)
        {   0,      3,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Enter 1 right
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts most of row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right
        {   0,      5,      10,         0,          KEY_EN_RIGHT_ALT,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert (Another) RGT_ALT (Shifts remainder of row)
        {   0,      5,      11,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap RGT_ALT for 'Logo'
    }
};

keyboard_keymap_overlay_values razer_blackwidow_2019_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT,  },  // Move Space 1 left (Shifts row)
        {   0,      5,      11,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_blackwidow_chroma_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          "Key: M1",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 1 (Shifts row)
        {   0,      2,      0,          0,          "Key: M2",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 2 (Shifts row)
        {   0,      3,      0,          0,          "Key: M3",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 3 (Shifts row)
        {   0,      4,      0,          0,          "Key: M4",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 4 (Shifts row)
        {   0,      5,      0,          0,          "Key: M5",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 5 (Shifts row)
        {   0,      0,      20,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_blackwidow_chroma_v2_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          "Key: M1",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 1 (Shifts row)
        {   0,      2,      0,          0,          "Key: M2",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 2 (Shifts row)
        {   0,      3,      0,          0,          "Key: M3",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 3 (Shifts row)
        {   0,      4,      0,          0,          "Key: M4",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 4 (Shifts row)
        {   0,      5,      0,          0,          "Key: M5",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Inset Macro key 5 (Shifts row)
        {   0,      0,      20,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_blackwidow_chroma_te_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      0,      20,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_blackwidow_elite_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      0,      18,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      21,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT,  },  // Move Space 1 left (Shifts row)
        {   0,      5,      11,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v3_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      5,      6,          0,          KEY_EN_SPACE,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Spacebar @ 5,6
        {   0,      5,      7,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Spacebar @ 5,7
        {   0,      5,     10,          0,          KEY_EN_RIGHT_ALT,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert (another) Right Alt
        {   0,      5,     11,          0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap 'Logo' instead of Right ALt
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v3_mini_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_ESCAPE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap Escape in for Backtick
        {   0,      0,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backspace 1 right (Shifts row)
        {   0,      0,      15,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Delete Key
        {   0,      1,      15,         0,          KEY_EN_PAGE_UP,             KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Page Up Key
        {   0,      2,      15,         0,          KEY_EN_PAGE_DOWN,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Page Down Key
        {   0,      3,      14,         0,          KEY_EN_INSERT,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Insert Key
        {   0,      3,      15,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Up Arrow Key
        {   0,      4,      7,          0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo' key
        {   0,      4,      12,         0,          KEY_EN_RIGHT_CONTROL,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap Right Control in for Right Menu
        {   0,      4,      13,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Arrow
        {   0,      4,      14,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Down Arrow
        {   0,      4,      15,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Right Arrow
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v3_pro_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      18,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      21,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      14,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo'
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v3_tkl_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v4_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Key,                        Alternate Name,             OpCode,                             |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Esc key 1 right (Shifts row)
        {   0,      0,      1,          0,          "Key: M6",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M6 macro key (Shifts row)
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      21,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      22,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      1,      1,          0,          "Key: M5",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M5 macro key (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      2,      1,          0,          "Key: M4",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M4 macro key (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      3,      1,          0,          "Key: M3",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M3 macro key (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      4,      1,          0,          "Key: M2",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M2 macro key (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      5,      1,          0,          "Key: M1",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M1 macro key (Shifts row)
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v4_pro_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode,                             |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      0,      1,          0,          "Key: Dial",                KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert Command Dial (Shifts row)
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      21,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      22,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      1,      1,          0,          "Key: M5",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M5 macro key (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      2,      1,          0,          "Key: M4",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M4 macro key (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      3,      1,          0,          "Key: M3",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M3 macro key (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      4,      1,          0,          "Key: M2",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M2 macro key (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      5,      1,          0,          "Key: M1",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M1 macro key (Shifts row)
    }
};

keyboard_keymap_overlay_values razer_blackwidow_v4_x_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode,                             |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          "Key: M6",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M6 macro key (Shifts row)
        {   0,      1,      0,          0,          "Key: M5",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M5 macro key (Shifts row)
        {   0,      2,      0,          0,          "Key: M4",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M4 macro key (Shifts row)
        {   0,      3,      0,          0,          "Key: M3",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M3 macro key (Shifts row)
        {   0,      4,      0,          0,          "Key: M2",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M2 macro key (Shifts row)
        {   0,      5,      0,          0,          "Key: M1",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert M1 macro key (Shifts row)
    }
};

keyboard_keymap_overlay_values razer_blackwidow_x_chroma_te_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
        {   0,      0,      20,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_blade_pro_2017_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Escape 1 right (Shifts row)
        {   0,      0,      1,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Escape @ 0,1
        {   0,      0,      2,          0,          KEY_EN_ESCAPE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Escape @ 0,2
        {   0,      0,      15,         0,          KEY_EN_INSERT,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Insert' key
        {   0,      0,      17,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Delete key
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Previous track key
        {   0,      0,      20,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Next track key
        {   0,      0,      21,         0,          "Key: Media Volume",        KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Volume key
        {   0,      0,      23,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Play / Pause key
        {   0,      0,      24,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Volume Mute key
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      1,      19,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      1,      20,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      1,      21,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      1,      22,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      1,      23,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      1,      24,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      2,      3,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Q' 1 right (Shifts row)
        {   0,      2,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Back slash 1 right -> 2,17
        {   0,      2,      19,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      2,      24,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      3,      2,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'A' 1 right (Shifts row)
        {   0,      3,      3,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'A' 1 right (Shifts row)
        {   0,      3,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move ANSI Enter 1 right -> 3,18
        {   0,      3,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move ANSI Enter 1 right -> 3,18
        {   0,      3,      19,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      3,      24,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      4,      2,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Z' 1 right (Shifts row)
        {   0,      4,      3,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Z' 1 right (Shifts row)
        {   0,      4,      14,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert Arrow Up and shift row 1 right
        {   0,      4,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Right Shift 1 right -> 4,17
        {   0,      4,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Right Shift 1 right -> 4,18
        {   0,      4,      19,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      4,      24,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Trackpad
        {   0,      5,      1,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Left Windows @ 5,1
        {   0,      5,      2,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Function @ 5,2
        {   0,      5,      3,          0,          KEY_EN_LEFT_WINDOWS,        KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Windows @ 5,3
        {   0,      5,      5,          0,          KEY_EN_LEFT_ALT,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Alt @ 5,5
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Spacebar @ 5,6
        {   0,      5,      7,          0,          KEY_EN_SPACE,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Spacebar @ 5,7
        {   0,      5,      11,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Right Function @ 5,11
        {   0,      5,      12,         0,          KEY_EN_RIGHT_CONTROL,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap Right Control for Right Menu @ 5,12
        {   0,      5,      13,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap Arrow Left for Right Control @ 5,13
        {   0,      5,      14,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert Arrow Down @ 5,14
        {   0,      5,      15,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert Arrow Right @ 5,15
        {   0,      5,      16,         0,          KEY_EN_RIGHT_FUNCTION,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Insert Right Function @ 5,16
        {   0,      5,      19,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Trackpad
        {   0,      5,      20,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Trackpad
        {   0,      5,      21,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Trackpad
        {   0,      5,      22,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Trackpad
        {   0,      5,      23,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Trackpad
        {   0,      5,      24,         0,          "Trackpad",                 KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Trackpad
    }
};

keyboard_keymap_overlay_values razer_blade_15_2021_advanced_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            {
                KEYBOARD_LAYOUT_ISO_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      2,      13,         0,          KEY_EN_ISO_ENTER,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_BACKSLASH
                    {   0,      3,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_ENTER
                }
            },
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      1,          0,          KEY_EN_ESCAPE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backspace 1 right
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      5,          0,          KEY_EN_LEFT_ALT,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      9,          0,          KEY_EN_RIGHT_ALT,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ESC
        {   0,      0,      14,         0,          KEY_EN_INSERT,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap PRTSCN for INS
        {   0,      0,      15,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap SCRLCK for DEL
        {   0,      0,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PSE_BRK
        {   0,      1,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove INSERT
        {   0,      1,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove HOME
        {   0,      1,      18,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PGUP
        {   0,      2,      15,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove DEL
        {   0,      2,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove END
        {   0,      2,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PGDN
        {   0,      4,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove RGT_SHFT
        {   0,      4,      15,         0,          KEY_EN_RIGHT_SHIFT,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWUP for RGT_SHFT
        {   0,      5,      2,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap LFT_WIN for LFT_FNC
        {   0,      5,      3,          0,          KEY_EN_LEFT_WINDOWS,        KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap LFT_ALT for LFT_WIN
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove SPACE
        {   0,      5,      10,         0,          KEY_EN_RIGHT_FUNCTION,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap RGT_ALT for RGT_FNC
        {   0,      5,      11,         0,          KEY_EN_RIGHT_CONTROL,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap RGT_FNC for RGT_CTL
        {   0,      5,      12,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWLFT for RGT_MNU
        {   0,      5,      13,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWUP for RGT_CTL
        {   0,      5,      14,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWRGT for ARWLFT
        {   0,      5,      15,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWDWN for ARWDWN
        {   0,      5,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ARWRGT
    }
};

keyboard_keymap_overlay_values razer_blade_15_2022_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            {
                KEYBOARD_LAYOUT_ANSI_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      4,      1,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Move 'Z' 1 right (Account for ISO key)
                }
            },
            {
                KEYBOARD_LAYOUT_ISO_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      2,      13,         0,          KEY_EN_ISO_ENTER,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_BACKSLASH
                    {   0,      3,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_ENTER
                }
            },
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Escape 1 right
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backspace 1 right
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Back slash 1 right
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move ANSI Enter 1 right
        {   0,      3,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move ANSI Enter 1 right
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      5,          0,          KEY_EN_LEFT_ALT,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Space 1 right
        {   0,      5,      9,          0,          KEY_EN_RIGHT_ALT,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      14,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap PRTSCN for DEL
        {   0,      0,      15,         0,          KEY_EN_POWER,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap SCRLCK for POWER
        {   0,      0,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PSE_BRK
        {   0,      1,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove INSERT
        {   0,      1,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove HOME
        {   0,      1,      18,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PGUP
        {   0,      2,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove DEL
        {   0,      2,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove END
        {   0,      2,      18,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PGDN
        {   0,      4,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove RGT_SHFT
        {   0,      4,      15,         0,          KEY_EN_RIGHT_SHIFT,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWUP for RGT_SHFT
        {   0,      5,      2,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap LFT_WIN for LFT_FNC
        {   0,      5,      3,          0,          KEY_EN_LEFT_WINDOWS,        KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap LFT_ALT for LFT_WIN
        {   0,      5,      10,         0,          KEY_EN_RIGHT_FUNCTION,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap RGT_ALT for RGT_FNC
        {   0,      5,      11,         0,          KEY_EN_RIGHT_CONTROL,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap RGT_FNC for RGT_CTL
        {   0,      5,      12,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWLFT for RGT_MNU
        {   0,      5,      13,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWUP for RGT_CTL
        {   0,      5,      14,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWRGT for ARWLFT
        {   0,      5,      15,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWDWN for ARWDWN
        {   0,      5,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ARWRGT
    }
};

keyboard_keymap_overlay_values razer_blade_17_pro_2021_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Shift all rows right by one          */
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      1,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Rows 1-4 have an empty spot in       */
        {   0,      2,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* 14th column                          */
        {   0,      3,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      4,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      0,      2,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove empty spot between Esc and F1 */
        {   0,      0,      14,         0,          KEY_EN_INSERT,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Swap in Delete after F12             */
        {   0,      0,      15,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Swap in Power after Delete           */
        {   0,      5,      2,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Insert left Fn between Ctrl and Win  */
        {   0,      5,      4,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add empty spot between Win and Alt   */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove Space                         */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove unused                        */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove unused                        */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove unused                        */
        {   0,      5,      11,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove Menu                          */
        {   0,      5,      12,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Left Arrow at the end of row 5   */
        {   0,      5,      13,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Up Arrow at the end of row 5     */
        {   0,      5,      14,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Right Arrow at the end of row 5  */
        {   0,      5,      15,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Down Arrow at the end of row 5   */
    }
};

keyboard_keymap_overlay_values razer_blade_stealth_2016_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Shift rows right by one              */
        {   0,      0,      2,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove empty between Esc and F1      */
        {   0,      0,      14,         0,          KEY_EN_INSERT,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Insert at end of row             */
        {   0,      0,      15,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Delete at end of row             */
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Shift rows right by one              */
        {   0,      1,      15,         0,          KEY_EN_BACKSPACE,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add second Backspace at end of row   */
        {   0,      2,      1,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add empty between tab and Q          */
        {   0,      2,      15,         0,          KEY_EN_ANSI_BACK_SLASH,     KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add second Backslash at end of row   */
        {   0,      3,      1,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add empty between caps and A         */
        {   0,      3,      15,         0,          KEY_EN_ANSI_ENTER,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add second Enter at end of row       */
        {   0,      4,      12,         0,          KEY_EN_RIGHT_SHIFT,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Insert 1st Right Shift               */
        {   0,      4,      13,         0,          KEY_EN_RIGHT_SHIFT,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Insert 2nd Right Shift               */
        {   0,      4,      14,         0,          KEY_EN_RIGHT_SHIFT,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Insert 3rd Right Shift               */
        {   0,      5,      1,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Insert left Fn between Ctrl and Win  */
        {   0,      5,      5,          0,          KEY_EN_SPACE,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Insert 1st Space                     */
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove empty between Space 1 and 2   */
        {   0,      5,      8,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove empty between Space 2 and 3   */
        {   0,      5,      8,          0,          KEY_EN_SPACE,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Insert 3rd Space                     */
        {   0,      5,      11,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove Menu                          */
        {   0,      5,      12,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Left Arrow at the end of row 5   */
        {   0,      5,      13,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Up Arrow at the end of row 5     */
        {   0,      5,      14,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Right Arrow at the end of row 5  */
        {   0,      5,      15,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Down Arrow at the end of row 5   */
    }
};

keyboard_keymap_overlay_values razer_cynosa_chroma_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 1
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 2
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 3
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 4
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 5
        {   0,      0,      20,         0,          "Logo",                     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert 'Logo' key
    }
};

keyboard_keymap_overlay_values razer_cynosa_chroma_v2_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 1
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 2
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 3
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 4
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 5
        {   0,      0,      18,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Previous track key
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Play / Pause key
        {   0,      0,      20,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Next track key
        {   0,      0,      21,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Volume Mute key
        {   0,      4,      15,         0,          KEY_EN_MEDIA_VOLUME_UP,     KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Volume Up
        {   0,      4,      17,         0,          KEY_EN_MEDIA_VOLUME_DOWN,   KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Volume Down
    }
};

keyboard_keymap_overlay_values razer_deathstalker_v2_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            {
                KEYBOARD_LAYOUT_ANSI_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      4,       1,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Move 'Z' 1 right (Account for ISO key)
                }
            },
            {
                KEYBOARD_LAYOUT_ISO_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      2,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_BACKSLASH
                    {   0,      4,       1,         0,          KEY_EN_ISO_BACK_SLASH,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Add ISO_BACK_SLASH
                }
            },
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      1,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backspace 1 right
    }
};

keyboard_keymap_overlay_values razer_deathstalker_v2_pro_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            {
                KEYBOARD_LAYOUT_ANSI_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      4,       1,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Move 'Z' 1 right (Account for ISO key)
                }
            },
            {
                KEYBOARD_LAYOUT_ISO_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      2,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_BACKSLASH
                    {   0,      4,       1,         0,          KEY_EN_ISO_BACK_SLASH,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Add ISO_BACK_SLASH
                }
            },
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
    }
};

keyboard_keymap_overlay_values razer_deathstalker_v2_pro_tkl_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            {
                KEYBOARD_LAYOUT_ANSI_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode,                             |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      4,       1,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Move 'Z' 1 right (Account for ISO key)
                }
            },
            {
                KEYBOARD_LAYOUT_ISO_QWERTY,
                {
                    /*-------------------------------------------------------------------------------------------------------------------------------------*\
                    | Edit Keys                                                                                                                             |
                    |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name              OpCode,                             |
                    \*-------------------------------------------------------------------------------------------------------------------------------------*/
                    {   0,      2,      13,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove ANSI_BACKSLASH
                    {   0,      4,       1,         0,          KEY_EN_ISO_BACK_SLASH,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Add ISO_BACK_SLASH
                }
            },
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode,                             |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PRINT_SCREEN
        {   0,      0,      15,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove SCROLL_LOCK
        {   0,      0,      16,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove PAUSE_BREAK
    }
};

keyboard_keymap_overlay_values razer_full_size_shifted_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 1
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 2
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 3
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 4
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shifts row 5
    }
};

keyboard_keymap_overlay_values razer_huntsman_common_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      18,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      21,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
    }
};

keyboard_keymap_overlay_values razer_huntsman_mini_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shift row 0
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shift row 1
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shift row 2
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shift row 3
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Shift row 4
    }
};

keyboard_keymap_overlay_values razer_huntsman_te_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move 'Esc' 1 right (Shifts row)
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_CTRL 1 right (Shifts row)
    }
};

keyboard_keymap_overlay_values razer_huntsman_v2_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      17,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      18,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      19,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
    }
};

keyboard_keymap_overlay_values razer_huntsman_v2_tkl_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
    }
};

keyboard_keymap_overlay_values razer_huntsman_v3_pro_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Key,                        Alternate Name,             OpCode,                             |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      18,         0,          "Media group",              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          "Media: Volume Dial",       KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT,  },
    }
};

keyboard_keymap_overlay_values razer_huntsman_v3_pro_tkl_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_TKL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Key,                        Alternate Name,             OpCode,                             |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      15,         0,          "Xbox Game Bar",            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },
        {   0,      0,      16,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },
        {   0,      0,      17,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      18,         0,          "Media: Volume Dial",       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
    }
};

keyboard_keymap_overlay_values razer_laptop_common_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Shift all rows right by one          */
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      1,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Rows 1-4 have an empty spot in       */
        {   0,      2,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* 14th column                          */
        {   0,      3,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      4,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /*                                      */
        {   0,      0,      2,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove empty spot between Esc and F1 */
        {   0,      0,      14,         0,          KEY_EN_DELETE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Swap in Delete after F12             */
        {   0,      0,      15,         0,          KEY_EN_POWER,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Swap in Power after Delete           */
        {   0,      5,      2,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Insert left Fn between Ctrl and Win  */
        {   0,      5,      4,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add empty spot between Win and Alt   */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove Space                         */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove unused                        */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove unused                        */
        {   0,      5,      9,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove unused                        */
        {   0,      5,      10,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT   },  /* Remove Right Fn                      */
        {   0,      5,      10,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY           },  /* Remove Menu                          */
        {   0,      5,      12,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Left Arrow at the end of row 5   */
        {   0,      5,      13,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Up Arrow at the end of row 5     */
        {   0,      5,      14,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Right Arrow at the end of row 5  */
        {   0,      5,      15,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT  },  /* Add Down Arrow at the end of row 5   */
    }
};

keyboard_keymap_overlay_values razer_laptop_with_spacebar_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Escape @ 0,0
        {   0,      0,      1,          0,          KEY_EN_ESCAPE,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Escape @ 0,1
        {   0,      0,      15,         0,          KEY_EN_POWER,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Power key
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backtick 1 right (Shifts row)
        {   0,      1,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Backspace 1 right
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Tab 1 right (Shifts row)
        {   0,      2,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Back slash 1 right
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Caps 1 right (Shifts row)
        {   0,      3,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move ANSI Enter 1 right
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move LFT_SHFT 1 right (Shifts row)
        {   0,      4,      14,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },  // Move Right Shift 1 right
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Left Control @ 5,0
        {   0,      5,      1,          0,          KEY_EN_LEFT_CONTROL,        KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Control @ 5,1
        {   0,      5,      2,          0,          KEY_EN_LEFT_FUNCTION,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Function @ 5,2
        {   0,      5,      3,          0,          KEY_EN_LEFT_WINDOWS,        KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Windows @ 5,3
        {   0,      5,      5,          0,          KEY_EN_LEFT_ALT,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Left Alt @ 5,5
        {   0,      5,      6,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Spacebar @ 5,6
        {   0,      5,      7,          0,          KEY_EN_SPACE,               KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Spacebar @ 5,7
        {   0,      5,      9,          0,          KEY_EN_RIGHT_ALT,           KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert Right Alt @ 5,9
        {   0,      5,      10,         0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Remove Right Alt @ 5,10
        {   0,      5,      11,         0,          KEY_EN_RIGHT_CONTROL,       KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap RGT_FNC for RGT_CTL
        {   0,      5,      12,         0,          KEY_EN_LEFT_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWLFT for RGT_MNU
        {   0,      5,      13,         0,          KEY_EN_UP_ARROW,            KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Swap ARWUP for RGT_CTL
        {   0,      5,      14,         0,          KEY_EN_RIGHT_ARROW,         KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert ARWRGT
        {   0,      5,      15,         0,          KEY_EN_DOWN_ARROW,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_SWAP_ONLY,          },  // Insert ARWDWN
    }
};

keyboard_keymap_overlay_values razer_ornata_chroma_v2_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_FULL,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      18,         0,          KEY_EN_MEDIA_PREVIOUS,      KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      19,         0,          KEY_EN_MEDIA_PLAY_PAUSE,    KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      20,         0,          KEY_EN_MEDIA_NEXT,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,      21,         0,          KEY_EN_MEDIA_MUTE,          KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      4,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      5,      0,          0,          KEY_EN_UNUSED,              KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
    }
};

keyboard_keymap_overlay_values razer_tartarus_v2_layout
{
    KEYBOARD_SIZE::KEYBOARD_SIZE_EMPTY,
    {
        {   /* ANSI Value set not used */   },
        {
            /* Add more regional layout fixes here */
        }
    },
    {
        /*-------------------------------------------------------------------------------------------------------------------------------------*\
        | Edit Keys                                                                                                                             |
        |   Zone,   Row,    Column,     Value,      Name,                       Alternate Name,             OpCode                              |
        \*-------------------------------------------------------------------------------------------------------------------------------------*/
        {   0,      0,       0,         0,          "Key: 01",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,       1,         0,          "Key: 02",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,       2,         0,          "Key: 03",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,       3,         0,          "Key: 04",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      0,       4,         0,          "Key: 05",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,       0,         0,          "Key: 06",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,       1,         0,          "Key: 07",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,       2,         0,          "Key: 08",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,       3,         0,          "Key: 09",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      1,       4,         0,          "Key: 10",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,       0,         0,          "Key: 11",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,       1,         0,          "Key: 12",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,       2,         0,          "Key: 13",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,       3,         0,          "Key: 14",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      2,       4,         0,          "Key: 15",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,       0,         0,          "Key: 16",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,       1,         0,          "Key: 17",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,       2,         0,          "Key: 18",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,       3,         0,          "Key: 19",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,       4,         0,          "Key: Scroll Wheel",        KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
        {   0,      3,       5,         0,          "Key: 20",                  KEY_EN_UNUSED,              KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
    }
};

/*-------------------------------------------------------------------------*\
|  KEYBOARDS                                                                |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Blackwidow 2019 1532:0241                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_2019_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_2019_device =
{
    "Razer BlackWidow 2019",
    RAZER_BLACKWIDOW_2019_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    22,
    {
        &blackwidow_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_2019_layout
};

/*-------------------------------------------------------------*\
|  Razer BlackWidow Chroma                                      |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_device =
{
    "Razer BlackWidow Chroma",
    RAZER_BLACKWIDOW_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    22,
    {
        &blackwidow_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_chroma_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow Chroma Overwatch 1532:0211                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_overwatch_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_overwatch_device =
{
    "Razer Blackwidow Chroma Overwatch",
    RAZER_BLACKWIDOW_OVERWATCH_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    22,
    {
        &blackwidow_chroma_overwatch_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer BlackWidow Chroma Tournament Edition                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_te_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_te_device =
{
    "Razer BlackWidow Chroma Tournament Edition",
    RAZER_BLACKWIDOW_CHROMA_TE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    22,
    {
        &blackwidow_chroma_te_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_chroma_te_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow Chroma V2 1532:0221                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_v2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_v2_device =
{
    "Razer BlackWidow Chroma V2",
    RAZER_BLACKWIDOW_CHROMA_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    22,
    {
        &blackwidow_chroma_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_chroma_v2_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow Elite 1532:0228                             |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_elite_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_elite_device =
{
    "Razer BlackWidow Elite",
    RAZER_BLACKWIDOW_ELITE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    22,
    {
        &blackwidow_elite_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_elite_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 1532:024E                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_device =
{
    "Razer Blackwidow V3",
    RAZER_BLACKWIDOW_V3_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &blackwidow_v3_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Pro (Wired) 1532:025A                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_pro_wired_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_pro_wired_device =
{
    "Razer BlackWidow V3 Pro (Wired)",
    RAZER_BLACKWIDOW_V3_PRO_WIRED_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &blackwidow_v3_pro_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Pro (Bluetooth) 1532:025B                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_pro_bluetooth_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_pro_bluetooth_device =
{
    "Razer BlackWidow V3 Pro (Bluetooth)",
    RAZER_BLACKWIDOW_V3_PRO_BLUETOOTH_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &blackwidow_v3_pro_bluetooth_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Pro (Wireless) 1532:025C                 |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_pro_wireless_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_pro_wireless_device =
{
    "Razer BlackWidow V3 Pro (Wireless)",
    RAZER_BLACKWIDOW_V3_PRO_WIRELESS_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &blackwidow_v3_pro_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 TKL 1532:0A24                            |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 18 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_tkl_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    18
};

static const razer_device blackwidow_v3_tkl_device =
{
    "Razer BlackWidow V3 TKL",
    RAZER_BLACKWIDOW_V3_TKL_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    18,
    {
        &blackwidow_v3_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_tkl_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Mini (Wired) 1532:0258                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_mini_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    5,
    16
};

static const razer_device blackwidow_v3_mini_wired_device =
{
    "Razer BlackWidow V3 Mini (Wired)",
    RAZER_BLACKWIDOW_V3_MINI_WIRED_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    5,
    16,
    {
        &blackwidow_v3_mini_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_mini_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Mini (Wireless) 1532:0271                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_device blackwidow_v3_mini_wireless_device =
{
    "Razer BlackWidow V3 Mini (Wireless)",
    RAZER_BLACKWIDOW_V3_MINI_WIRELESS_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x9F,
    5,
    16,
    {
        &blackwidow_v3_mini_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v3_mini_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V4 1532:0287                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 23 Columns                                      |
|                                                               |
|  Zone "Underglow Left"                                        |
|       Linear                                                  |
|       1 Row, 9 Columns                                        |
|                                                               |
|  Zone "Underglow right"                                       |
|       Linear                                                  |
|       1 Row, 9 Columns                                        |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v4_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    23
};

static const razer_zone blackwidow_v4_lbl_zone =
{
    "Underglow Left",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_zone blackwidow_v4_lbr_zone =
{
    "Underglow Right",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device blackwidow_v4_device =
{
    "Razer Blackwidow V4",
    RAZER_BLACKWIDOW_V4_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    8,
    23,
    {
        &blackwidow_v4_zone,
        &blackwidow_v4_lbl_zone,
        &blackwidow_v4_lbr_zone,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v4_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V4 Pro 1532:028D                            |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 23 Columns                                      |
|                                                               |
|  Zone "Underglow Left"                                        |
|       Linear                                                  |
|       1 Row, 9 Columns                                        |
|                                                               |
|  Zone "Underglow right"                                       |
|       Linear                                                  |
|       1 Row, 9 Columns                                        |
|                                                               |
|  Zone "Void" - In testing these LEDs were not connected       |
|       Linear                                                  |
|       1 Row, 5 Columns                                        |
|                                                               |
|  Zone "Underglow Wrist Rest"                                  |
|       Linear                                                  |
|       1 Rows, 20 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v4_pro_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    23
};

static const razer_zone blackwidow_v4_pro_lbl_zone =
{
    "Underglow Left",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_zone blackwidow_v4_pro_lbr_zone =
{
    "Underglow Right",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_zone blackwidow_v4_pro_void_zone =
{
    "Void",
    ZONE_TYPE_LINEAR,
    1,
    5
};

static const razer_zone blackwidow_v4_pro_lbwr_zone =
{
    "Underglow Wrist Rest",
    ZONE_TYPE_LINEAR,
    1,
    20
};

static const razer_device blackwidow_v4_pro_device =
{
    "Razer Blackwidow V4 Pro",
    RAZER_BLACKWIDOW_V4_PRO_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    8,
    23,
    {
        &blackwidow_v4_pro_zone,
        &blackwidow_v4_pro_lbl_zone,
        &blackwidow_v4_pro_lbr_zone,
        &blackwidow_v4_pro_void_zone,
        &blackwidow_v4_pro_lbwr_zone,
        NULL
    },
    &razer_blackwidow_v4_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V4 X 1532:0293                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v4_x_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v4_x_device =
{
    "Razer Blackwidow V4 X",
    RAZER_BLACKWIDOW_V4_X_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    22,
    {
        &blackwidow_v4_x_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_v4_x_layout
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow X Chroma 1532:0216                          |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_x_chroma_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_x_chroma_device =
{
    "Razer BlackWidow X Chroma",
    RAZER_BLACKWIDOW_X_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    22,
    {
        &blackwidow_x_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer BlackWidow X Chroma Tournament Edition 1532:021A       |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_x_chroma_te_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_x_chroma_te_device =
{
    "Razer BlackWidow X Chroma Tournament Edition",
    RAZER_BLACKWIDOW_X_CHROMA_TE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    22,
    {
        &blackwidow_x_chroma_te_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blackwidow_x_chroma_te_layout
};

/*-------------------------------------------------------------*\
|  Razer Cynosa Chroma 1532:022A                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone cynosa_chroma_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device cynosa_chroma_device =
{
    "Razer Cynosa Chroma",
    RAZER_CYNOSA_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &cynosa_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_cynosa_chroma_layout
};

/*-------------------------------------------------------------*\
|  Razer Cynosa v2 1532:025E                                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone cynosa_v2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device cynosa_v2_device =
{
    "Razer Cynosa v2",
    RAZER_CYNOSA_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    22,
    {
        &cynosa_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_cynosa_chroma_v2_layout
};

/*-------------------------------------------------------------*\
|  Razer Cynosa Lite 1532:023F                                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone cynosa_lite_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device cynosa_lite_device =
{
    "Razer Cynosa Lite",
    RAZER_CYNOSA_LITE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &cynosa_lite_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Ornata Chroma                                          |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone ornata_chroma_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device ornata_chroma_device =
{
    "Razer Ornata Chroma",
    RAZER_ORNATA_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &ornata_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_full_size_shifted_layout
};

/*-------------------------------------------------------------*\
|  Razer Ornata Chroma V2 1532:025D                             |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone ornata_chroma_v2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device ornata_chroma_v2_device =
{
    "Razer Ornata Chroma V2",
    RAZER_ORNATA_CHROMA_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    22,
    {
        &ornata_chroma_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_ornata_chroma_v2_layout
};

/*-------------------------------------------------------------*\
|  Razer Ornata V3                                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       10 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone ornata_v3_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    10
};

static const razer_device ornata_v3_device =
{
    "Razer Ornata V3",
    RAZER_ORNATA_V3_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    10,
    {
        &ornata_v3_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Ornata V3 Rev2 1532:02A1                               |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       10 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone ornata_v3_rev2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    10
};

static const razer_device ornata_v3_rev2_device =
{
    "Razer Ornata V3 rev2",
    RAZER_ORNATA_V3_REV2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    10,
    {
        &ornata_v3_rev2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Ornata V3 TKL   1532:02A3                                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone ornata_v3_tkl_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    8
};

static const razer_device ornata_v3_tkl_device =
{
    "Razer Ornata V3 TKL",
    RAZER_ORNATA_V3_TKL_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    8,
    {
        &ornata_v3_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Ornata V3 X                                            |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone ornata_v3_x_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device ornata_v3_x_device =
{
    "Razer Ornata V3 X",
    RAZER_ORNATA_V3_X_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &ornata_v3_x_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Ornata V3 X Rev2   1532:02A2                           |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone ornata_v3_x_v2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device ornata_v3_x_v2_device =
{
    "Razer Ornata V3 X Rev2",
    RAZER_ORNATA_V3_X_REV2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &ornata_v3_x_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer DeathStalker Chroma                                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       12 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_chroma_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    12
};

static const razer_device deathstalker_chroma_device =
{
    "Razer DeathStalker Chroma",
    RAZER_DEATHSTALKER_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    12,
    {
        &deathstalker_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Deathstalker V2 1532:0295                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_v2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device deathstalker_v2_device =
{
    "Razer Deathstalker V2",
    RAZER_DEATHSTALKER_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    22,
    {
        &deathstalker_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_deathstalker_v2_layout
};

/*-------------------------------------------------------------*\
|  Razer DeathStalker V2 Pro TKL (Wired)     1532:0298          |
|                                (Wireless)  1532:0296          |
|                                (Bluetooth) 1532:0297          |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       84 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_v2_pro_tkl_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    17
};

static const razer_device deathstalker_v2_pro_tkl_wired_device =
{
    "Razer DeathStalker V2 Pro TKL (Wired)",
    RAZER_DEATHSTALKER_V2_PRO_TKL_WIRED_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    6,
    17,
    {
        &deathstalker_v2_pro_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_deathstalker_v2_pro_tkl_layout
};

static const razer_device deathstalker_v2_pro_tkl_wireless_device =
{
    "Razer DeathStalker V2 Pro TKL (Wireless)",
    RAZER_DEATHSTALKER_V2_PRO_TKL_WIRELESS_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x9F,
    6,
    17,
    {
        &deathstalker_v2_pro_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_deathstalker_v2_pro_tkl_layout
};

/*-------------------------------------------------------------*\
|  Razer DeathStalker V2 Pro (Wireless) 1532:0290               |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       104 LEDs                                                |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_v2_pro_wireless_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device deathstalker_v2_pro_wireless_device =
{
    "Razer DeathStalker V2 Pro (Wireless)",
    RAZER_DEATHSTALKER_V2_PRO_WIRELESS_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x9F,
    6,
    22,
    {
        &deathstalker_v2_pro_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_deathstalker_v2_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer DeathStalker V2 Pro (Wired) 1532:0292                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       104 LEDs                                                |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_v2_pro_wired_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device deathstalker_v2_pro_wired_device =
{
    "Razer DeathStalker V2 Pro (Wired)",
    RAZER_DEATHSTALKER_V2_PRO_WIRED_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x9F,
    6,
    22,
    {
        &deathstalker_v2_pro_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_deathstalker_v2_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman 1532:0227                                     |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device huntsman_device =
{
    "Razer Huntsman",
    RAZER_HUNTSMAN_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &huntsman_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_full_size_shifted_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman Elite                                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
|                                                               |
| Zone "Underglow"                                              |
|       Matrix                                                  |
|       3 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_elite_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_zone huntsman_elite_underglow_zone =
{
    "Underglow",
    ZONE_TYPE_MATRIX,
    3,
    22
};

static const razer_device huntsman_elite_device =
{
    "Razer Huntsman Elite",
    RAZER_HUNTSMAN_ELITE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    9,
    22,
    {
        &huntsman_elite_keyboard_zone,
        &huntsman_elite_underglow_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_common_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V2 Analog                                     |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
|                                                               |
| Zone "Underglow"                                              |
|       Matrix                                                  |
|       3 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v2_analog_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_zone huntsman_v2_analog_underglow_zone =
{
    "Underglow",
    ZONE_TYPE_MATRIX,
    3,
    22
};

static const razer_device huntsman_v2_analog_device =
{
    "Razer Huntsman V2 Analog",
    RAZER_HUNTSMAN_V2_ANALOG_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    9,
    22,
    {
        &huntsman_v2_analog_keyboard_zone,
        &huntsman_v2_analog_underglow_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_common_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman Mini 1532:0257                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 15 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_mini_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    5,
    15
};

static const razer_device huntsman_mini_device =
{
    "Razer Huntsman Mini",
    RAZER_HUNTSMAN_MINI_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    5,
    15,
    {
        &huntsman_mini_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_mini_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman Mini Analog 1532:0282                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 15 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_mini_analog_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    5,
    15
};

static const razer_device huntsman_mini_analog_device =
{
    "Razer Huntsman Mini Analog",
    RAZER_HUNTSMAN_MINI_ANALOG_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    5,
    15,
    {
        &huntsman_mini_analog_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_mini_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman TE 1532:0243                                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 18 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_te_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    18
};

static const razer_device huntsman_te_device =
{
    "Razer Huntsman Tournament Edition",
    RAZER_HUNTSMAN_TE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    18,
    {
        &huntsman_te_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_te_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V2 TKL 1532:026B                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 17 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v2_tkl_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    17
};

static const razer_device huntsman_v2_tkl_device =
{
    "Razer Huntsman V2 TKL",
    RAZER_HUNTSMAN_V2_TKL_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    17,
    {
        &huntsman_v2_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_v2_tkl_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V2 1532:026C                                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v2_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device huntsman_v2_device =
{
    "Razer Huntsman V2",
    RAZER_HUNTSMAN_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &huntsman_v2_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_v2_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V3 Pro 1532:02A6                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v3_pro_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device huntsman_v3_pro_device =
{
    "Razer Huntsman V3 Pro",
    RAZER_HUNTSMAN_V3_PRO_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    22,
    {
        &huntsman_v3_pro_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_v3_pro_layout
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V3 Pro TKL White 1532:02A7                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 19 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v3_pro_tkl_keyboard_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    19
};

static const razer_device huntsman_v3_pro_tkl_device =
{
    "Razer Huntsman V3 Pro TKL White",
    RAZER_HUNTSMAN_V3_PRO_TKL_WHITE_PID,
    DEVICE_TYPE_KEYBOARD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    6,
    19,
    {
        &huntsman_v3_pro_tkl_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_huntsman_v3_pro_tkl_layout
};

/*-------------------------------------------------------------------------*\
|  LAPTOPS                                                                  |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Blade (2016)                                           |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_2016_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_2016_device =
{
    "Razer Blade (2016)",
    RAZER_BLADE_2016_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade (Late 2016)                                      |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_late_2016_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_late_2016_device =
{
    "Razer Blade (Late 2016)",
    RAZER_BLADE_LATE_2016_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_late_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2018 Advanced)                               |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2018_advanced_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2018_advanced_device =
{
    "Razer Blade 15 (2018 Advanced)",
    RAZER_BLADE_2018_ADVANCED_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2018_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2018 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2018_base_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2018_base_device =
{
    "Razer Blade 15 (2018 Base)",
    RAZER_BLADE_2018_BASE_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2018_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2018 Mercury)                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2018_mercury_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2018_mercury_device =
{
    "Razer Blade 15 (2018 Mercury)",
    RAZER_BLADE_2018_MERCURY_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2018_mercury_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Advanced)                               |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_advanced_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2019_advanced_device =
{
    "Razer Blade 15 (2019 Advanced)",
    RAZER_BLADE_2019_ADVANCED_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2019_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_base_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_15_2019_base_device =
{
    "Razer Blade 15 (2019 Base)",
    RAZER_BLADE_2019_BASE_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    1,
    {
        &blade_15_2019_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Mercury)                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_mercury_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2019_mercury_device =
{
    "Razer Blade 15 (2019 Mercury)",
    RAZER_BLADE_2019_MERCURY_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2019_mercury_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Studio)                                 |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_studio_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2019_studio_device =
{
    "Razer Blade 15 (2019 Studio)",
    RAZER_BLADE_2019_STUDIO_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2019_studio_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2020 Advanced)                               |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2020_advanced_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2020_advanced_device =
{
    "Razer Blade 15 (2020 Advanced)",
    RAZER_BLADE_2020_ADVANCED_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2020_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2020 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       1 Row, 16 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2020_base_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device blade_15_2020_base_device =
{
    "Razer Blade 15 (2020 Base)",
    RAZER_BLADE_2020_BASE_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    16,
    {
        &blade_15_2020_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade (Late 2020)                                      |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_late_2020_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_late_2020_device =
{
    "Razer Blade (Late 2020)",
    RAZER_BLADE_LATE_2020_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_late_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2021 Advanced)                               |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2021_advanced_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2021_advanced_device =
{
    "Razer Blade 15 (2021 Advanced)",
    RAZER_BLADE_2021_ADVANCED_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_2021_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2021 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       1 Row, 16 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2021_base_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device blade_15_2021_base_device =
{
    "Razer Blade 15 (2021 Base)",
    RAZER_BLADE_2021_BASE_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    16,
    {
        &blade_15_2021_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2021 Base) 1532:027A                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       1 Row, 16 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2021_base_v2_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device blade_15_2021_base_v2_device =
{
    "Razer Blade 15 (2021 Base)",
    RAZER_BLADE_2021_BASE_V2_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x1F,
    1,
    16,
    {
        &blade_15_2021_base_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (Late 2021 Advanced) 1532:2067                |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_late_2021_advanced_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_late_2021_advanced_device =
{
    "Razer Blade 15 (Late 2021 Advanced)",
    RAZER_BLADE_LATE_2021_ADVANCED_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_15_late_2021_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blade_15_2021_advanced_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade 14 (2021)                                        |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_14_2021_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_14_2021_device =
{
    "Razer Blade 14 (2021)",
    RAZER_BLADE_14_2021_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_14_2021_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_laptop_common_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade 14 (2022) 1532:028C                              |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_14_2022_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_14_2022_device =
{
    "Razer Blade 14 (2022)",
    RAZER_BLADE_14_2022_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x1F,
    6,
    16,
    {
        &blade_14_2022_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_laptop_with_spacebar_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade 14 (2023) 1532:029D                              |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_14_2023_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_14_2023_device =
{
    "Razer Blade 14 (2023)",
    RAZER_BLADE_14_2023_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x1F,
    6,
    16,
    {
        &blade_14_2023_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_laptop_with_spacebar_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2022) 1532:028A                              |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2022_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2022_device =
{
    "Razer Blade 15 (2022)",
    RAZER_BLADE_15_2022_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x1F,
    6,
    16,
    {
        &blade_15_2022_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blade_15_2022_layout
};

/*-------------------------------------------------------------*\
|  Razer Book 13 (2020)                                         |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone book_13_2020_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device book_13_2020_device =
{
    "Razer Book 13 (2020)",
    RAZER_BOOK_13_2020_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &book_13_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_laptop_common_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2016)                                       |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 25 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2016_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    25
};

static const razer_device blade_pro_2016_device =
{
    "Razer Blade Pro (2016)",
    RAZER_BLADE_PRO_2016_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    25,
    {
        &blade_pro_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2017)                                       |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 25 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2017_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    25
};

static const razer_device blade_pro_2017_device =
{
    "Razer Blade Pro (2017)",
    RAZER_BLADE_PRO_2017_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    25,
    {
        &blade_pro_2017_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blade_pro_2017_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2017 FullHD)                                |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 25 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2017_fullhd_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    25
};

static const razer_device blade_pro_2017_fullhd_device =
{
    "Razer Blade Pro (2017 FullHD)",
    RAZER_BLADE_PRO_2017_FULLHD_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    25,
    {
        &blade_pro_2017_fullhd_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2019)                                       |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2019_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_2019_device =
{
    "Razer Blade Pro (2019)",
    RAZER_BLADE_PRO_2019_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_pro_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (Late 2019)                                  |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_late_2019_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_late_2019_device =
{
    "Razer Blade Pro (Late 2019)",
    RAZER_BLADE_PRO_LATE_2019_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_pro_late_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro 17 (2020)                                    |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_17_2020_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_17_2020_device =
{
    "Razer Blade Pro 17 (2020)",
    RAZER_BLADE_PRO_17_2020_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_pro_17_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro 17 (2021)                                    |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_17_2021_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_17_2021_device =
{
    "Razer Blade Pro 17 (2021)",
    RAZER_BLADE_PRO_17_2021_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_pro_17_2021_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blade_17_pro_2021_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2016)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2016_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_2016_device =
{
    "Razer Blade Stealth (2016)",
    RAZER_BLADE_STEALTH_2016_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_stealth_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_blade_stealth_2016_layout
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2016)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2016_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_late_2016_device =
{
    "Razer Blade Stealth (Late 2016)",
    RAZER_BLADE_STEALTH_LATE_2016_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_stealth_late_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2017)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2017_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_2017_device =
{
    "Razer Blade Stealth (2017)",
    RAZER_BLADE_STEALTH_2017_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_stealth_2017_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2017)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2017_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_late_2017_device =
{
    "Razer Blade Stealth (Late 2017)",
    RAZER_BLADE_STEALTH_LATE_2017_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_stealth_late_2017_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2019)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2019_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_2019_device =
{
    "Razer Blade Stealth (2019)",
    RAZER_BLADE_STEALTH_2019_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    6,
    16,
    {
        &blade_stealth_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2019)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2019_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_stealth_late_2019_device =
{
    "Razer Blade Stealth (Late 2019)",
    RAZER_BLADE_STEALTH_LATE_2019_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    1,
    {
        &blade_stealth_late_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2020)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2020_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_stealth_2020_device =
{
    "Razer Blade Stealth (2020)",
    RAZER_BLADE_STEALTH_2020_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    1,
    {
        &blade_stealth_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2020)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       1 Row, 16 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2020_zone =
{
    ZONE_EN_KEYBOARD,
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device blade_stealth_late_2020_device =
{
    "Razer Blade Stealth (Late 2020)",
    RAZER_BLADE_STEALTH_LATE_2020_PID,
    DEVICE_TYPE_LAPTOP,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    16,
    {
        &blade_stealth_late_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------------------*\
|  MICE                                                                     |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Abyssus Elite DVa Edition 1532:006A                    |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone abyssus_elite_dva_edition_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device abyssus_elite_dva_edition_device =
{
    "Razer Abyssus Elite DVa Edition",
    RAZER_ABYSSUS_ELITE_DVA_EDITION_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &abyssus_elite_dva_edition_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Abyssus Essential 1532:006B                            |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone abyssus_essential_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device abyssus_essential_device =
{
    "Razer Abyssus Essential",
    RAZER_ABYSSUS_ESSENTIAL_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &abyssus_essential_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk 1532:0064                                     |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_device =
{
    "Razer Basilisk",
    RAZER_BASILISK_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &basilisk_logo_zone,
        &basilisk_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk Essential                                     |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_essential_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_essential_device =
{
    "Razer Basilisk Essential",
    RAZER_BASILISK_ESSENTIAL_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &basilisk_essential_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk Ultimate (Wired) 1532:0086                    |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Left LED Strip"                                        |
|       Linear                                                  |
|       8 LED                                                   |
|                                                               |
|  Zone "Right LED Strip"                                       |
|       Linear                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_ultimate_wired_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    4
};

static const razer_zone basilisk_ultimate_wired_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_zone basilisk_ultimate_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_ultimate_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_ultimate_wired_device =
{
    "Razer Basilisk Ultimate",
    RAZER_BASILISK_ULTIMATE_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    14,
    {
        &basilisk_ultimate_wired_scroll_wheel_zone,
        &basilisk_ultimate_wired_logo_zone,
        &basilisk_ultimate_wired_left_zone,
        &basilisk_ultimate_wired_right_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk Ultimate (Wireless) 1532:0088                 |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Left LED Strip"                                        |
|       Linear                                                  |
|       8 LED                                                   |
|                                                               |
|  Zone "Right LED Strip"                                       |
|       Linear                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_ultimate_wireless_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    4
};

static const razer_zone basilisk_ultimate_wireless_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_zone basilisk_ultimate_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_ultimate_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_ultimate_wireless_device =
{
    "Razer Basilisk Ultimate (Wireless)",
    RAZER_BASILISK_ULTIMATE_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    14,
    {
        &basilisk_ultimate_wireless_scroll_wheel_zone,
        &basilisk_ultimate_wireless_logo_zone,
        &basilisk_ultimate_wireless_left_zone,
        &basilisk_ultimate_wireless_right_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V2 1532:0085                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_v2_device =
{
    "Razer Basilisk V2",
    RAZER_BASILISK_V2_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &basilisk_v2_scroll_wheel_zone,
        &basilisk_v2_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 1532:0099                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       9 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device basilisk_v3_device =
{
    "Razer Basilisk V3",
    RAZER_BASILISK_V3_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    11,
    {
        &basilisk_v3_logo_zone,
        &basilisk_v3_scroll_wheel_zone,
        &basilisk_v3_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 35K 1532:00CB                              |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       9 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_35k_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_35k_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_35k_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device basilisk_v3_35k_device =
{
    "Razer Basilisk V3 35K",
    RAZER_BASILISK_V3_35K_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    11,
    {
        &basilisk_v3_35k_logo_zone,
        &basilisk_v3_35k_scroll_wheel_zone,
        &basilisk_v3_35k_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 PRO Wired 1532:00AA                        |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_pro_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_wired_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    11
};

static const razer_device basilisk_v3_pro_wired_device =
{
    "Razer Basilisk V3 Pro (Wired)",
    RAZER_BASILISK_V3_PRO_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    13,
    {
        &basilisk_v3_pro_wired_scroll_wheel_zone,
        &basilisk_v3_pro_wired_logo_zone,
        &basilisk_v3_pro_wired_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 PRO Wireless 1532:00AB                     |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_pro_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_wireless_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    11
};

static const razer_device basilisk_v3_pro_wireless_device =
{
    "Razer Basilisk V3 Pro (Wireless)",
    RAZER_BASILISK_V3_PRO_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    13,
    {
        &basilisk_v3_pro_wireless_scroll_wheel_zone,
        &basilisk_v3_pro_wireless_logo_zone,
        &basilisk_v3_pro_wireless_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};
/*-------------------------------------------------------------*\
|  Razer Basilisk V3 PRO 35K Wired 1532:00CC                    |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_pro_35k_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_35k_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_35k_wired_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    11
};

static const razer_device basilisk_v3_pro_35k_wired_device =
{
    "Razer Basilisk V3 Pro 35K (Wired)",
    RAZER_BASILISK_V3_PRO_35K_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    13,
    {
        &basilisk_v3_pro_35k_wired_scroll_wheel_zone,
        &basilisk_v3_pro_35k_wired_logo_zone,
        &basilisk_v3_pro_35k_wired_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 PRO 35K Wireless 1532:00CD                 |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_pro_35k_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_35k_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_35k_wireless_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    11
};

static const razer_device basilisk_v3_pro_35k_wireless_device =
{
    "Razer Basilisk V3 Pro 35K (Wireless)",
    RAZER_BASILISK_V3_PRO_35K_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    13,
    {
        &basilisk_v3_pro_35k_wireless_scroll_wheel_zone,
        &basilisk_v3_pro_35k_wireless_logo_zone,
        &basilisk_v3_pro_35k_wireless_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 PRO Bluetooth 1532:00AC                    |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_pro_bluetooth_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_bluetooth_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_pro_bluetooth_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    11
};

static const razer_device basilisk_v3_pro_bluetooth_device =
{
    "Razer Basilisk V3 Pro (Bluetooth)",
    RAZER_BASILISK_V3_PRO_BLUETOOTH_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    13,
    {
        &basilisk_v3_pro_bluetooth_scroll_wheel_zone,
        &basilisk_v3_pro_bluetooth_logo_zone,
        &basilisk_v3_pro_bluetooth_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 X HyperSpeed 1532:00B9                     |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_x_hyperspeed_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_v3_x_hyperspeed_device =
{
    "Razer Basilisk V3 X HyperSpeed",
    RAZER_BASILISK_V3_X_HYPERSPEED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &basilisk_v3_x_hyperspeed_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Cobra 1532:00A3                                        |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone cobra_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device cobra_device =
{
    "Razer Cobra",
    RAZER_COBRA_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &cobra_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Cobra Pro Wired 1532:00AF                              |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Underglow"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone cobra_pro_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone cobra_pro_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone cobra_pro_wired_underglow_zone =
{
    "Underglow",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device cobra_pro_wired_device =
{
    "Razer Cobra Pro (Wired)",
    RAZER_COBRA_PRO_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    11,
    {
        &cobra_pro_wired_logo_zone,
        &cobra_pro_wired_scroll_wheel_zone,
        &cobra_pro_wired_underglow_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Cobra Pro Wireless 1532:00B0                           |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Underglow"                                             |
|       Linear                                                  |
|       11 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone cobra_pro_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone cobra_pro_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone cobra_pro_wireless_underglow_zone =
{
    "Underglow",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device cobra_pro_wireless_device =
{
    "Razer Cobra Pro (Wireless)",
    RAZER_COBRA_PRO_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    11,
    {
        &cobra_pro_wireless_logo_zone,
        &cobra_pro_wireless_scroll_wheel_zone,
        &cobra_pro_wireless_underglow_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder Chroma                                      |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_chroma_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_chroma_device =
{
    "Razer DeathAdder Chroma",
    RAZER_DEATHADDER_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_CUSTOM,
    0x1F,
    1,
    2,
    {
        &deathadder_chroma_logo_zone,
        &deathadder_chroma_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Elite                                       |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_elite_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_elite_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_elite_device =
{
    "Razer DeathAdder Elite",
    RAZER_DEATHADDER_ELITE_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &deathadder_elite_logo_zone,
        &deathadder_elite_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Essential 1532:006E                         |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_essential_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_essential_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_essential_device =
{
    "Razer DeathAdder Essential",
    RAZER_DEATHADDER_ESSENTIAL_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &deathadder_essential_logo_zone,
        &deathadder_essential_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Essential V2 1532:0098                      |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_essential_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_essential_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_essential_v2_device =
{
    "Razer DeathAdder Essential V2",
    RAZER_DEATHADDER_ESSENTIAL_V2_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    2,
    {
        &deathadder_essential_v2_logo_zone,
        &deathadder_essential_v2_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Essential White Edition 1532:0071           |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_essential_white_edition_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_essential_white_edition_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_essential_white_edition_device =
{
    "Razer DeathAdder Essential (White Edition)",
    RAZER_DEATHADDER_ESSENTIAL_WHITE_EDITION_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &deathadder_essential_white_edition_logo_zone,
        &deathadder_essential_white_edition_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 1532:0084                                |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_device =
{
    "Razer DeathAdder V2",
    RAZER_DEATHADDER_V2_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    2,
    {
        &deathadder_v2_scroll_wheel_zone,
        &deathadder_v2_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 Mini 1532:008C                           |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_mini_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_mini_device =
{
    "Razer DeathAdder V2 Mini",
    RAZER_DEATHADDER_V2_MINI_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &deathadder_v2_mini_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 Pro (Wired) 1532:007C	                |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_pro_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_pro_wired_device =
{
    "Razer DeathAdder V2 (Wired)",
    RAZER_DEATHADDER_V2_PRO_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &deathadder_v2_pro_wired_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 Pro (Wireless) 1532:007D                 |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_pro_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_pro_wireless_device =
{
    "Razer DeathAdder V2 (Wireless)",
    RAZER_DEATHADDER_V2_PRO_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &deathadder_v2_pro_wireless_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Diamondback Chroma                                     |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       19 LEDs                                                 |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone diamondback_chroma_led_strip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    19
};

static const razer_zone diamondback_chroma_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone diamondback_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device diamondback_chroma_device =
{
    "Razer Diamondback Chroma",
    RAZER_DIAMONDBACK_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    21,
    {
        &diamondback_chroma_led_strip_zone,
        &diamondback_chroma_logo_zone,
        &diamondback_chroma_scroll_wheel_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2017 (Wired)                                 |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2017_wired_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wired_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2017_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2017_wired_device =
{
    "Razer Lancehead 2017 (Wired)",
    RAZER_LANCEHEAD_2017_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    16,
    {
        &lancehead_2017_wired_right_zone,
        &lancehead_2017_wired_left_zone,
        &lancehead_2017_wired_logo_zone,
        &lancehead_2017_wired_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2017 (Wireless)                              |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2017_wireless_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wireless_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2017_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2017_wireless_device =
{
    "Razer Lancehead 2017 (Wireless)",
    RAZER_LANCEHEAD_2017_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    16,
    {
        &lancehead_2017_wireless_right_zone,
        &lancehead_2017_wireless_left_zone,
        &lancehead_2017_wireless_logo_zone,
        &lancehead_2017_wireless_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2019 (Wired)                                 |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2019_wired_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wired_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2019_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2019_wired_device =
{
    "Razer Lancehead 2019 (Wired)",
    RAZER_LANCEHEAD_2019_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    16,
    {
        &lancehead_2019_wired_right_zone,
        &lancehead_2019_wired_left_zone,
        &lancehead_2019_wired_logo_zone,
        &lancehead_2019_wired_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2019 (Wireless)                              |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2019_wireless_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wireless_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2019_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2019_wireless_device =
{
    "Razer Lancehead 2019 (Wireless)",
    RAZER_LANCEHEAD_2019_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    16,
    {
        &lancehead_2019_wireless_right_zone,
        &lancehead_2019_wireless_left_zone,
        &lancehead_2019_wireless_logo_zone,
        &lancehead_2019_wireless_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Lancehead Tournament Edition 1532:0060                 |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_te_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_te_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_te_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_te_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_te_device =
{
    "Razer Lancehead Tournament Edition",
    RAZER_LANCEHEAD_TE_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    16,
    {
        &lancehead_te_scroll_wheel_zone,
        &lancehead_te_logo_zone,
        &lancehead_te_right_zone,
        &lancehead_te_left_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Leviathan V2 1532:0532                                 |
|                                                               |
|  Zone "Speaker Underglow"                                     |
|       Linear                                                  |
|       18 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone leviathan_v2_speaker_zone =
{
    "Speaker Underglow",
    ZONE_TYPE_LINEAR,
    2,
    9
};

static const razer_device leviathan_v2_device =
{
    "Razer Leviathan V2",
    RAZER_LEVIATHAN_V2_PID,
    DEVICE_TYPE_SPEAKER,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    2,
    9,
    {
        &leviathan_v2_speaker_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Leviathan V2X 1532:054A                                |
|                                                               |
|  Zone "Speaker Underglow"                                     |
|       Linear                                                  |
|       14 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone leviathan_v2x_speaker_zone =
{
    "Speaker Underglow",
    ZONE_TYPE_LINEAR,
    1,
    14
};

static const razer_device leviathan_v2x_device =
{
    "Razer Leviathan V2 X",
    RAZER_LEVIATHAN_V2X_PID,
    DEVICE_TYPE_SPEAKER,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    14,
    {
        &leviathan_v2x_speaker_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2012 (Wired)                                     |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2012_wired_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_LINEAR,
    1,
    1
};

static const razer_device mamba_2012_wired_device =
{
    "Razer Mamba 2012 (Wired)",
    RAZER_MAMBA_2012_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_CUSTOM,
    0x3F,
    1,
    15,
    {
        &mamba_2012_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2012 (Wireless)                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2012_wireless_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_LINEAR,
    1,
    1
};

static const razer_device mamba_2012_wireless_device =
{
    "Razer Mamba 2012 (Wireless)",
    RAZER_MAMBA_2012_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_CUSTOM,
    0x3F,
    1,
    15,
    {
        &mamba_2012_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2015 (Wired)                                     |
|                                                               |
|  Zone "Chroma Zone"                                           |
|       Single                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2015_wired_zone =
{
    "Chroma Zone",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device mamba_2015_wired_device =
{
    "Razer Mamba 2015 (Wired)",
    RAZER_MAMBA_2015_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    15,
    {
        &mamba_2015_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2015 (Wireless)                                  |
|                                                               |
|  Zone "Chroma Zone"                                           |
|       Single                                                  |
|       15 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2015_wireless_zone =
{
    "Chroma Zone",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device mamba_2015_wireless_device =
{
    "Razer Mamba (Wireless)",
    RAZER_MAMBA_2015_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    15,
    {
        &mamba_2015_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2018 (Wired)                                     |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2018_wired_logo_zone =
{
    "Logo Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_2018_wired_scroll_wheel_zone =
{
    "Scroll Wheel Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_2018_wired_device =
{
    "Razer Mamba 2018 (Wired)",
    RAZER_MAMBA_2018_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &mamba_2018_wired_scroll_wheel_zone,
        &mamba_2018_wired_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba Wireless (2018) Wireless 1532:0072               |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/

static const razer_zone mamba_2018_wireless_logo_zone =
{
    "Logo Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_2018_wireless_scroll_wheel_zone =
{
    "Scroll Wheel Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_2018_wireless_device =
{
    "Razer Mamba 2018 (Wireless)",
    RAZER_MAMBA_2018_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &mamba_2018_wireless_scroll_wheel_zone,
        &mamba_2018_wireless_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba Elite                                            |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       9 LEDs                                                  |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       9 LEDs                                                  |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone mamba_elite_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_elite_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_elite_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_zone mamba_elite_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device mamba_elite_device =
{
    "Razer Mamba Elite",
    RAZER_MAMBA_ELITE_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    20,
    {
        &mamba_elite_scroll_wheel_zone,
        &mamba_elite_logo_zone,
        &mamba_elite_left_zone,
        &mamba_elite_right_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba Tournament Edition                               |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_te_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone mamba_te_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone mamba_te_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_te_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_te_device =
{
    "Razer Mamba Tournament Edition",
    RAZER_MAMBA_TE_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    16,
    {
        &mamba_te_left_zone,
        &mamba_te_right_zone,
        &mamba_te_logo_zone,
        &mamba_te_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mamba Hyperflux (Wired)                                |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/

static const razer_zone mamba_hyperflux_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_hyperflux_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_hyperflux_device =
{
    "Razer Mamba Hyperflux (Wired)",
    RAZER_MAMBA_HYPERFLUX_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    2,
    {
        &mamba_hyperflux_scroll_wheel_zone,
        &mamba_hyperflux_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Chroma 1532:0053                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_chroma_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_chroma_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_chroma_device =
{
    "Razer Naga Chroma",
    RAZER_NAGA_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    3,
    {
        &naga_chroma_scroll_wheel_zone,
        &naga_chroma_logo_zone,
        &naga_chroma_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Classic 1532:0093                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_classic_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_classic_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_classic_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_classic_device =
{
    "Razer Naga Classic",
    RAZER_NAGA_CLASSIC_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    3,
    {
        &naga_classic_logo_zone,
        &naga_classic_scroll_wheel_zone,
        &naga_classic_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Hex V2 1532:0050                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_hex_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_hex_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_hex_v2_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_hex_v2_device =
{
    "Razer Naga Hex V2",
    RAZER_NAGA_HEX_V2_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    3,
    {
        &naga_hex_v2_logo_zone,
        &naga_hex_v2_scroll_wheel_zone,
        &naga_hex_v2_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Left Handed 1532:008D                             |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_left_handed_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_left_handed_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_left_handed_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_left_handed_device =
{
    "Razer Naga Left Handed",
    RAZER_NAGA_LEFT_HANDED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    3,
    {
        &naga_left_handed_logo_zone,
        &naga_left_handed_scroll_wheel_zone,
        &naga_left_handed_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Trinity 1532:0067                                 |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_trinity_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_trinity_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_trinity_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_trinity_device =
{
    "Razer Naga Trinity",
    RAZER_NAGA_TRINITY_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    3,
    {
        &naga_trinity_scroll_wheel_zone,
        &naga_trinity_logo_zone,
        &naga_trinity_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Pro 1532:008F (wired) 1532:0090 (wireless)        |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_pro_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_pro_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_pro_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_pro_wired_device =
{
    "Razer Naga Pro (Wired)",
    RAZER_NAGA_PRO_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    3,
    {
        &naga_pro_scroll_wheel_zone,
        &naga_pro_logo_zone,
        &naga_pro_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

static const razer_device naga_pro_wireless_device =
{
    "Razer Naga Pro (Wireless)",
    RAZER_NAGA_PRO_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    3,
    {
        &naga_pro_scroll_wheel_zone,
        &naga_pro_logo_zone,
        &naga_pro_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Pro V2   1532:00A7 (wired)   1532:00A8 (wireless) |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_pro_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_pro_v2_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_pro_v2_wired_device =
{
    "Razer Naga Pro V2 (Wired)",
    RAZER_NAGA_PRO_V2_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    2,
    {
        &naga_pro_v2_logo_zone,
        &naga_pro_v2_numpad_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

static const razer_device naga_pro_v2_wireless_device =
{
    "Razer Naga Pro V2 (Wireless)",
    RAZER_NAGA_PRO_V2_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    2,
    {
        &naga_pro_v2_logo_zone,
        &naga_pro_v2_numpad_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Viper 8kHz 1532:0091                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_8khz_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_8khz_device =
{
    "Razer Viper 8kHz",
    RAZER_VIPER_8KHZ_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &viper_8khz_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Viper Mini 1532:008A                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_mini_logo_zone =
{
    "Logo",      //Matrix of one as per https://github.com/openrazer/openrazer/blob/master/daemon/openrazer_daemon/hardware/mouse.py#L27
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_mini_device =
{
    "Razer Viper Mini",
    RAZER_VIPER_MINI_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &viper_mini_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Viper Ultimate Wired 1532:007A                         |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_ultimate_wired_logo_zone =
{
    "Logo",      //Matrix of one as per https://github.com/openrazer/openrazer/blob/master/daemon/openrazer_daemon/hardware/mouse.py#L1690
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_ultimate_wired_device =
{
    "Razer Viper Ultimate (Wired)",
    RAZER_VIPER_ULTIMATE_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &viper_ultimate_wired_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Viper Ultimate Wireless 1532:007B                      |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_ultimate_wireless_logo_zone =
{
    "Logo",      //Matrix of one as per https://github.com/openrazer/openrazer/blob/master/daemon/openrazer_daemon/hardware/mouse.py#L1690
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_ultimate_wireless_device =
{
    "Razer Viper Ultimate (Wireless)",
    RAZER_VIPER_ULTIMATE_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &viper_ultimate_wireless_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Viper 1532:0078                                        |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_device =
{
    "Razer Viper",
    RAZER_VIPER_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &viper_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Naga Epic Chroma                                       |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_epic_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_epic_chroma_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_epic_chroma_device =
{
    "Razer Naga Epic Chroma",
    RAZER_NAGA_EPIC_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_CUSTOM,
    0x1F,
    1,
    2,
    {
        &naga_epic_chroma_scroll_wheel_zone,
        &naga_epic_chroma_numpad_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------------------*\
|  KEYPADS                                                                  |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Orbweaver Chroma                                       |
|                                                               |
|  Zone "Keypad"                                                |
|       Matrix                                                  |
|       4 Rows, 5 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone orbweaver_chroma_zone =
{
    "Keypad",
    ZONE_TYPE_MATRIX,
    4,
    5
};

static const razer_device orbweaver_chroma_device =
{
    "Razer Orbweaver Chroma",
    RAZER_ORBWEAVER_CHROMA_PID,
    DEVICE_TYPE_KEYPAD,
    RAZER_MATRIX_TYPE_CUSTOM,
    0x3F,
    4,
    5,
    {
        &orbweaver_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Tartarus Chroma                                        |
|                                                               |
|  Zone "Keypad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone tartarus_chroma_zone =
{
    "Keypad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device tartarus_chroma_device =
{
    "Razer Tartarus Chroma",
    RAZER_TARTARUS_CHROMA_PID,
    DEVICE_TYPE_KEYPAD,
    RAZER_MATRIX_TYPE_CUSTOM,
    0x1F,
    1,
    1,
    {
        &tartarus_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
| Razer Tartarus Pro 1532:0244                                  |
|                                                               |
|  Zone "Keypad"                                                |
|       Matrix                                                  |
|       4 Rows, 5 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone tartarus_pro_zone =
{
    "Keypad",
    ZONE_TYPE_MATRIX,
    4,
    5
};

static const razer_zone tartarus_pro_K20 =
{
    "Keypad LED 20",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device tartarus_pro_device =
{
    "Razer Tartarus Pro",
    RAZER_TARTARUS_PRO_PID,
    DEVICE_TYPE_KEYPAD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    21,
    {
        &tartarus_pro_zone,
        &tartarus_pro_K20,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
| Razer Tartarus V2 1532:0208                                   |
|                                                               |
|  Zone "Keypad"                                                |
|       Matrix                                                  |
|       4 Rows, 6 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone tartarus_v2_zone =
{
    "Keypad",
    ZONE_TYPE_MATRIX,
    4,
    6
};

static const razer_device tartarus_v2_device =
{
    "Razer Tartarus V2",
    RAZER_TARTARUS_V2_PID,
    DEVICE_TYPE_KEYPAD,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    4,
    6,
    {
        &tartarus_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    &razer_tartarus_v2_layout
};

/*-------------------------------------------------------------------------*\
|  MOUSEMATS                                                                |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Firefly                                                |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone firefly_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device firefly_device =
{
    "Razer Firefly",
    RAZER_FIREFLY_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    15,
    {
        &firefly_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Firefly Hyperflux                                      |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Mousemat"                                              |
|       Linear                                                  |
|       12 LEDs                                                 |
\*-------------------------------------------------------------*/

static const razer_zone firefly_hyperflux_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone firefly_hyperflux_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone firefly_hyperflux_mousemat_zone =
{
    "Mousemat",
    ZONE_TYPE_LINEAR,
    1,
    12
};

static const razer_device firefly_hyperflux_device =
{
    "Razer Firefly Hyperflux",
    RAZER_FIREFLY_HYPERFLUX_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    14,
    {
        &firefly_hyperflux_scroll_wheel_zone,
        &firefly_hyperflux_logo_zone,
        &firefly_hyperflux_mousemat_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Firefly V2                                             |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       19 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone firefly_v2_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    19
};

static const razer_device firefly_v2_device =
{
    "Razer Firefly V2",
    RAZER_FIREFLY_V2_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    19,
    {
        &firefly_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Firefly Pro V2                                         |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       17 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone firefly_v2_pro_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    17
};

static const razer_device firefly_v2_pro_device =
{
    "Razer Firefly V2 Pro",
    RAZER_FIREFLY_V2_PRO_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    17,
    {
        &firefly_v2_pro_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Goliathus                                              |
|                                                               |
|  Zone "LED Strip"                                             |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone goliathus_zone =
{
    "LED Strip",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device goliathus_device =
{
    "Razer Goliathus",
    RAZER_GOLIATHUS_CHROMA_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &goliathus_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Goliathus Chroma 3XL 1532:0C06                         |
|                                                               |
|  Zone "LED Strip"                                             |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone goliathus_chroma_3xl_zone =
{
    "LED Strip",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device goliathus_chroma_3xl_device =
{
    "Razer Goliathus Chroma 3XL",
    RAZER_GOLIATHUS_CHROMA_3XL_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    1,
    {
        &goliathus_chroma_3xl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Goliathus Extended                                     |
|                                                               |
|  Zone "LED Strip"                                             |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone goliathus_extended_zone =
{
    "LED Strip",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device goliathus_extended_device =
{
    "Razer Goliathus Extended",
    RAZER_GOLIATHUS_CHROMA_EXTENDED_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &goliathus_extended_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Strider Chroma                                         |
|                                                               |
|  Zone "LED Strip"                                             |
|       Matrix                                                  |
|       19 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone strider_chroma_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    19
};

static const razer_device strider_chroma_device =
{
    "Razer Strider Chroma",
    RAZER_STRIDER_CHROMA_PID,
    DEVICE_TYPE_MOUSEMAT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    19,
    {
        &strider_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------------------*\
|  HEADSETS                                                                 |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Kraken 7.1 Chroma                                      |
|                                                               |
|  Zone "Headset"                                               |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_chroma_zone =
{
    "Headset",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_chroma_device =
{
    "Razer Kraken 7.1 Chroma",
    RAZER_KRAKEN_PID,
    DEVICE_TYPE_HEADSET,
    RAZER_MATRIX_TYPE_NONE,
    0,
    1,
    1,
    {
        &kraken_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Kraken 7.1 V2                                          |
|                                                               |
|  Zone "Headset"                                               |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_v2_zone =
{
    "Headset",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_v2_device =
{
    "Razer Kraken 7.1 V2",
    RAZER_KRAKEN_V2_PID,
    DEVICE_TYPE_HEADSET,
    RAZER_MATRIX_TYPE_NONE,
    0,
    1,
    1,
    {
        &kraken_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Kraken Ultimate 1532:0527                              |
|                                                               |
|  Zone "Headset"                                               |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_ultimate_zone =
{
    "Headset",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_ultimate_device =
{
    "Razer Kraken Ultimate",
    RAZER_KRAKEN_ULTIMATE_PID,
    DEVICE_TYPE_HEADSET,
    RAZER_MATRIX_TYPE_NONE,
    0,
    1,
    1,
    {
        &kraken_ultimate_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Kraken Kitty Edition 1532:0F19                         |
|                                                               |
|  Zone "Headset"                                               |
|       Matrix                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_kitty_zone =
{
    "Headset",
    ZONE_TYPE_LINEAR,
    1,
    4
};

static const razer_device kraken_kitty_device =
{
    "Razer Kraken Kitty Edition",
    RAZER_KRAKEN_KITTY_EDITION_PID,
    DEVICE_TYPE_HEADSET,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    4,
    {
        &kraken_kitty_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Kraken Kitty Edition V2 1532:0560                      |
|                                                               |
|  Zone "Headset"                                               |
|       Matrix                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_kitty_black_v2_zone =
{
    "Cat ears",
    ZONE_TYPE_LINEAR,
    1,
    2
};

static const razer_zone kraken_kitty_black_v2_headset_left_zone =
{
    "Headset Left",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone kraken_kitty_black_v2_headset_right_zone =
{
    "Headset Right",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_kitty_black_v2_device =
{
    "Razer Kraken Kitty Black Edition V2",
    RAZER_KRAKEN_KITTY_BLACK_EDITION_V2_PID,
    DEVICE_TYPE_HEADSET,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    4,
    {
        &kraken_kitty_black_v2_headset_left_zone,
        &kraken_kitty_black_v2_headset_right_zone,
        &kraken_kitty_black_v2_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Tiamat 7.1 V2                                          |
|                                                               |
|  Zone "Controller"                                            |
|       Linear                                                  |
|       15 LEDs                                                 |
|                                                               |
|  Zone "Headset Left"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Headset Right"                                         |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone tiamat_71_v2_controller_zone =
{
    "Controller",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_zone tiamat_71_v2_headset_left_zone =
{
    "Headset Left",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone tiamat_71_v2_headset_right_zone =
{
    "Headset Right",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device tiamat_71_v2_device =
{
    "Razer Tiamat 7.1 V2",
    RAZER_TIAMAT_71_V2_PID,
    DEVICE_TYPE_HEADSET,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    17,
    {
        &tiamat_71_v2_controller_zone,
        &tiamat_71_v2_headset_left_zone,
        &tiamat_71_v2_headset_right_zone,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------------------*\
|  OTHER                                                                    |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Core                                                   |
|                                                               |
|  Zone "Side Window Lights"                                    |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       8 LEDs                                                  |
\*-------------------------------------------------------------*/
static const razer_zone core_side_zone =
{
    "Side Window Lights",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone core_led_strip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device core_device =
{
    "Razer Core",
    RAZER_CORE_PID,
    DEVICE_TYPE_GPU,
    RAZER_MATRIX_TYPE_STANDARD,
    0x3F,
    1,
    9,
    {
        &core_side_zone,
        &core_led_strip_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Core X                                                 |
|                                                               |
|  Zone "Side Window Lights"                                    |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone core_x_side_zone =
{
    "Side Window Lights",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone core_x_led_strip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device core_x_device =
{
    "Razer Core X",
    RAZER_CORE_X_PID,
    DEVICE_TYPE_GPU,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    16,
    {
        &core_x_side_zone,
        &core_x_led_strip_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Chroma Mug Holder                                      |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone mug_holder_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device mug_holder_device =
{
    "Razer Chroma Mug Holder",
    RAZER_CHROMA_MUG_PID,
    DEVICE_TYPE_ACCESSORY,
    RAZER_MATRIX_TYPE_LINEAR,
    0x3F,
    1,
    15,
    {
        &mug_holder_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Chroma Addressable RGB Controller                      |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone chromaargb_zone_1 =
{
    "Channel 1",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_2 =
{
    "Channel 2",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_3 =
{
    "Channel 3",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_4 =
{
    "Channel 4",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_5 =
{
    "Channel 5",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_6 =
{
    "Channel 6",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_device chromaargb_device =
{
    "Razer Chroma Addressable RGB Controller",
    RAZER_CHROMA_ADDRESSABLE_RGB_CONTROLLER_PID,
    DEVICE_TYPE_LEDSTRIP,
    RAZER_MATRIX_TYPE_EXTENDED_ARGB,
    0x3F,
    6,
    80,
    {
        &chromaargb_zone_1,
        &chromaargb_zone_2,
        &chromaargb_zone_3,
        &chromaargb_zone_4,
        &chromaargb_zone_5,
        &chromaargb_zone_6
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Chroma HDK                                             |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone chromahdk_zone_1 =
{
    "Channel 1",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chromahdk_zone_2 =
{
    "Channel 2",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chromahdk_zone_3 =
{
    "Channel 3",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chromahdk_zone_4 =
{
    "Channel 4",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device chromahdk_device =
{
    "Razer Chroma HDK",
    RAZER_CHROMA_HDK_PID,
    DEVICE_TYPE_LEDSTRIP,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    4,
    16,
    {
        &chromahdk_zone_1,
        &chromahdk_zone_2,
        &chromahdk_zone_3,
        &chromahdk_zone_4,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Chroma PC Case Lighting Kit                            |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone chroma_pc_case_lighting_kit_zone_1 =
{
    "Channel 1",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chroma_pc_case_lighting_kit_zone_2 =
{
    "Channel 2",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device chroma_pc_case_lighting_kit_device =
{
    "Razer Chroma PC Case Lighting Kit",
    RAZER_CHROMA_PC_CASE_LIGHTING_KIT_PID,
    DEVICE_TYPE_LEDSTRIP,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    2,
    16,
    {
        &chroma_pc_case_lighting_kit_zone_1,
        &chroma_pc_case_lighting_kit_zone_2,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Base Station Chroma                                    |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone base_station_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device base_station_device =
{
    "Razer Base Station Chroma",
    RAZER_BASE_STATION_CHROMA_PID,
    DEVICE_TYPE_HEADSET_STAND,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    15,
    {
        &base_station_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mouse Bungee V3 Chroma                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       8 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone mouse_bungee_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device mouse_bungee_device =
{
    "Razer Mouse Bungee V3 Chroma",
    RAZER_MOUSE_BUNGEE_V3_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    8,
    {
        &mouse_bungee_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Base Station V2 Chroma                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       8 LEDs                                                  |
\*-------------------------------------------------------------*/
static const razer_zone base_station_v2_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device base_station_v2_device =
{
    "Razer Base Station V2 Chroma",
    RAZER_BASE_STATION_V2_CHROMA_PID,
    DEVICE_TYPE_HEADSET_STAND,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    8,
    {
        &base_station_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Laptop Stand Chroma 1532:0F0D                          |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone laptop_stand_chroma_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device laptop_stand_chroma_device =
{
    "Razer Laptop Stand Chroma",
    RAZER_LAPTOP_STAND_CHROMA_PID,
    DEVICE_TYPE_LEDSTRIP,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    15,
    {
        &laptop_stand_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Laptop Stand Chroma V2 1532:0F2B                       |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone laptop_stand_chroma_v2_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device laptop_stand_chroma_v2_device =
{
    "Razer Laptop Stand Chroma V2",
    RAZER_LAPTOP_STAND_CHROMA_V2_PID,
    DEVICE_TYPE_LEDSTRIP,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    15,
    {
        &laptop_stand_chroma_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mouse Dock Chroma 1532:007E                            |
|                                                               |
|  Zone "Base"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mouse_dock_chroma_base_zone =
{
    "Base",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mouse_dock_chroma_device =
{
    "Razer Mouse Dock Chroma",
    RAZER_MOUSE_DOCK_CHROMA_PID,
    DEVICE_TYPE_LIGHT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    1,
    {
        &mouse_dock_chroma_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Mouse Dock Pro 1532:00A4                               |
|                                                               |
|  Zone "Base"                                                  |
|       Linear                                                  |
|       9 LEDs                                                  |
\*-------------------------------------------------------------*/
static const razer_zone mouse_dock_pro_base_zone =
{
    "Base",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device mouse_dock_pro_device =
{
    "Razer Mouse Dock Pro",
    RAZER_MOUSE_DOCK_PRO_PID,
    DEVICE_TYPE_LIGHT,
    RAZER_MATRIX_TYPE_EXTENDED,
    0xFF,
    1,
    9,
    {
        &mouse_dock_pro_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Nommo Pro                                              |
|                                                               |
|  Zone "Left Speaker"                                          |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
|  Zone "Right Speaker"                                         |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone nommo_pro_left_zone =
{
    "Left Speaker",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_zone nommo_pro_right_zone =
{
    "Right Speaker",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device nommo_pro_device =
{
    "Razer Nommo Pro",
    RAZER_NOMMO_PRO_PID,
    DEVICE_TYPE_SPEAKER,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    2,
    8,
    {
        &nommo_pro_left_zone,
        &nommo_pro_right_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Nommo Chroma                                           |
|                                                               |
|  Zone "Right Speaker"                                         |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
|  Zone "Left Speaker"                                          |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone nommo_chroma_right_zone =
{
    "Right Speaker",
    ZONE_TYPE_LINEAR,
    1,
    24
};

static const razer_zone nommo_chroma_left_zone =
{
    "Left Speaker",
    ZONE_TYPE_LINEAR,
    1,
    24
};

static const razer_device nommo_chroma_device =
{
    "Razer Nommo Chroma",
    RAZER_NOMMO_CHROMA_PID,
    DEVICE_TYPE_SPEAKER,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    2,
    24,
    {
        &nommo_chroma_right_zone,
        &nommo_chroma_left_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Charging Pad Chroma                                    |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       10 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone charging_pad_chroma_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    10
};

static const razer_device charging_pad_chroma_device =
{
    "Razer Charging Pad Chroma",
    RAZER_CHARGING_PAD_CHROMA_PID,
    DEVICE_TYPE_ACCESSORY,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    1,
    10,
    {
        &charging_pad_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  O11 Dynamic - Razer Edition 1532:0F13                        |
|                                                               |
|  Zone "Case LEDs"                                             |
|       Matrix                                                  |
|       64 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone o11_dynamic_case_zone =
{
    "Case LEDs",
    ZONE_TYPE_LINEAR,
    4,
    16
};

static const razer_device o11_dynamic_device =
{
    "Lian Li O11 Dynamic - Razer Edition",
    RAZER_O11_DYNAMIC_PID,
    DEVICE_TYPE_LEDSTRIP,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x1F,
    4,
    16,
    {
        &o11_dynamic_case_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Seiren Emote 1532:0F1B                                 |
|                                                               |
|  Zone "8-Bit LED Matrix"                                      |
|       Matrix                                                  |
|       64 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone seiren_emote_zone =
{
    "8-Bit LED Matrix",
    ZONE_TYPE_MATRIX,
    8,
    8
};

static const razer_device seiren_emote_device =
{
    "Razer Seiren Emote",
    RAZER_SEIREN_EMOTE_PID,
    DEVICE_TYPE_MICROPHONE,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    4,
    16,
    {
        &seiren_emote_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Thunderbolt 4 Dock Chroma                              |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       12 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone thunderbolt_4_dock_chroma_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    12
};

static const razer_device thunderbolt_4_dock_chroma_device =
{
    "Razer Thunderbolt 4 Dock Chroma",
    RAZER_THUNDERBOLT_4_DOCK_CHROMA_PID,
    DEVICE_TYPE_ACCESSORY,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    12,
    {
        &thunderbolt_4_dock_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------*\
|  Razer Hanbo Chroma                                           |
|                                                               |
|  Zone "Pump"                                                  |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "Fan 1"                                                 |
|       Linear                                                  |
|       18 LEDs                                                 |
|                                                               |
|  Zone "Fan 2"                                                 |
|       Linear                                                  |
|       18 LEDs                                                 |
|                                                               |
|  Zone "Fan 3"                                                 |
|       Linear                                                  |
|       18 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone hanbo_chroma_pump_zone =
{
    "Pump",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone hanbo_chroma_fan_one_zone =
{
    "Fan 1",
    ZONE_TYPE_LINEAR,
    1,
    18
};

static const razer_zone hanbo_chroma_fan_two_zone =
{
    "Fan 2",
    ZONE_TYPE_LINEAR,
    1,
    18
};

static const razer_zone hanbo_chroma_fan_three_zone =
{
    "Fan 3",
    ZONE_TYPE_LINEAR,
    1,
    18
};

static const razer_device hanbo_chroma_device =
{
    "Razer Hanbo Chroma",
    RAZER_HANBO_CHROMA_PID,
    DEVICE_TYPE_COOLER,
    RAZER_MATRIX_TYPE_EXTENDED,
    0x3F,
    1,
    70,
    {
        &hanbo_chroma_pump_zone,
        &hanbo_chroma_fan_one_zone,
        &hanbo_chroma_fan_two_zone,
        &hanbo_chroma_fan_three_zone,
        NULL,
        NULL
    },
    NULL
};

/*-------------------------------------------------------------------------*\
|  DEVICE MASTER LIST                                                       |
\*-------------------------------------------------------------------------*/
const razer_device* razer_device_list[] =
{
/*-----------------------------------------------------------------*\
|  KEYBOARDS                                                        |
\*-----------------------------------------------------------------*/
    &blackwidow_2019_device,
    &blackwidow_chroma_device,
    &blackwidow_chroma_overwatch_device,
    &blackwidow_chroma_te_device,
    &blackwidow_chroma_v2_device,
    &blackwidow_elite_device,
    &blackwidow_v3_device,
    &blackwidow_v3_pro_wired_device,
    &blackwidow_v3_pro_wireless_device,
    &blackwidow_v3_pro_bluetooth_device,
    &blackwidow_v3_tkl_device,
    &blackwidow_v3_mini_wired_device,
    &blackwidow_v3_mini_wireless_device,
    &blackwidow_v4_device,
    &blackwidow_v4_pro_device,
    &blackwidow_v4_x_device,
    &blackwidow_x_chroma_device,
    &blackwidow_x_chroma_te_device,
    &cynosa_chroma_device,
    &cynosa_v2_device,
    &cynosa_lite_device,
    &deathstalker_chroma_device,
    &deathstalker_v2_device,
    &deathstalker_v2_pro_tkl_wired_device,
    &deathstalker_v2_pro_tkl_wireless_device,
    &deathstalker_v2_pro_wired_device,
    &deathstalker_v2_pro_wireless_device,
    &huntsman_device,
    &huntsman_elite_device,
    &huntsman_mini_device,
    &huntsman_mini_analog_device,
    &huntsman_te_device,
    &huntsman_v2_device,
    &huntsman_v2_analog_device,
    &huntsman_v2_tkl_device,
    &huntsman_v3_pro_device,
    &huntsman_v3_pro_tkl_device,
    &ornata_chroma_device,
    &ornata_chroma_v2_device,
    &ornata_v3_device,
    &ornata_v3_rev2_device,
    &ornata_v3_tkl_device,
    &ornata_v3_x_device,
    &ornata_v3_x_v2_device,
/*-----------------------------------------------------------------*\
|  LAPTOPS                                                          |
\*-----------------------------------------------------------------*/
    &blade_2016_device,
    &blade_late_2016_device,
    &blade_15_2018_advanced_device,
    &blade_15_2018_base_device,
    &blade_15_2018_mercury_device,
    &blade_15_2019_advanced_device,
    &blade_15_2019_base_device,
    &blade_15_2019_mercury_device,
    &blade_15_2019_studio_device,
    &blade_15_2020_advanced_device,
    &blade_15_2020_base_device,
    &blade_late_2020_device,
    &blade_15_2021_advanced_device,
    &blade_15_2021_base_device,
    &blade_15_2021_base_v2_device,
    &blade_15_late_2021_advanced_device,
    &blade_14_2021_device,
    &blade_14_2022_device,
    &blade_14_2023_device,
    &blade_15_2022_device,
    &book_13_2020_device,
    &blade_pro_2016_device,
    &blade_pro_2017_device,
    &blade_pro_2017_fullhd_device,
    &blade_pro_2019_device,
    &blade_pro_late_2019_device,
    &blade_pro_17_2020_device,
    &blade_pro_17_2021_device,
    &blade_stealth_2016_device,
    &blade_stealth_late_2016_device,
    &blade_stealth_2017_device,
    &blade_stealth_late_2017_device,
    &blade_stealth_2019_device,
    &blade_stealth_late_2019_device,
    &blade_stealth_2020_device,
    &blade_stealth_late_2020_device,
/*-----------------------------------------------------------------*\
|  MICE                                                             |
\*-----------------------------------------------------------------*/
    &abyssus_elite_dva_edition_device,
    &abyssus_essential_device,
    &basilisk_device,
    &basilisk_essential_device,
    &basilisk_ultimate_wired_device,
    &basilisk_ultimate_wireless_device,
    &basilisk_v2_device,
    &basilisk_v3_device,
    &basilisk_v3_35k_device,
    &basilisk_v3_pro_wired_device,
    &basilisk_v3_pro_wireless_device,
    &basilisk_v3_pro_35k_wired_device,
    &basilisk_v3_pro_35k_wireless_device,
    &basilisk_v3_pro_bluetooth_device,
    &basilisk_v3_x_hyperspeed_device,
    &cobra_device,
    &cobra_pro_wired_device,
    &cobra_pro_wireless_device,
    &deathadder_chroma_device,
    &deathadder_elite_device,
    &deathadder_essential_device,
    &deathadder_essential_v2_device,
    &deathadder_essential_white_edition_device,
    &deathadder_v2_device,
    &deathadder_v2_mini_device,
    &deathadder_v2_pro_wired_device,
    &deathadder_v2_pro_wireless_device,
    &diamondback_chroma_device,
    &lancehead_2017_wired_device,
    &lancehead_2017_wireless_device,
    &lancehead_2019_wired_device,
    &lancehead_2019_wireless_device,
    &lancehead_te_device,
    &mamba_2012_wired_device,
    &mamba_2012_wireless_device,
    &mamba_2015_wired_device,
    &mamba_2015_wireless_device,
    &mamba_2018_wired_device,
    &mamba_2018_wireless_device,
    &mamba_te_device,
    &mamba_elite_device,
    &mamba_hyperflux_device,
    &naga_chroma_device,
    &naga_classic_device,
    &naga_epic_chroma_device,
    &naga_hex_v2_device,
    &naga_left_handed_device,
    &naga_trinity_device,
    &naga_pro_wired_device,
    &naga_pro_wireless_device,
    &naga_pro_v2_wired_device,
    &naga_pro_v2_wireless_device,
    &viper_8khz_device,
    &viper_mini_device,
    &viper_ultimate_wired_device,
    &viper_ultimate_wireless_device,
    &viper_device,
/*-----------------------------------------------------------------*\
|  KEYPADS                                                          |
\*-----------------------------------------------------------------*/
    &orbweaver_chroma_device,
    &tartarus_chroma_device,
    &tartarus_pro_device,
    &tartarus_v2_device,
/*-----------------------------------------------------------------*\
|  MOUSEMATS                                                        |
\*-----------------------------------------------------------------*/
    &firefly_device,
    &firefly_hyperflux_device,
    &firefly_v2_device,
    &firefly_v2_pro_device,
    &goliathus_chroma_3xl_device,
    &goliathus_device,
    &goliathus_extended_device,
    &strider_chroma_device,
/*-----------------------------------------------------------------*\
|  HEADSETS                                                         |
\*-----------------------------------------------------------------*/
    &kraken_chroma_device,
    &kraken_v2_device,
    &kraken_ultimate_device,
    &kraken_kitty_device,
    &kraken_kitty_black_v2_device,
    &tiamat_71_v2_device,
/*-----------------------------------------------------------------*\
|  OTHER                                                            |
\*-----------------------------------------------------------------*/
    &base_station_device,
    &base_station_v2_device,
    &mouse_bungee_device,
    &charging_pad_chroma_device,
    &chromaargb_device,
    &chromahdk_device,
    &chroma_pc_case_lighting_kit_device,
    &core_device,
    &core_x_device,
    &laptop_stand_chroma_device,
    &laptop_stand_chroma_v2_device,
    &leviathan_v2_device,
    &leviathan_v2x_device,
    &mug_holder_device,
    &mouse_dock_chroma_device,
    &mouse_dock_pro_device,
    &nommo_chroma_device,
    &nommo_pro_device,
    &o11_dynamic_device,
    &seiren_emote_device,
    &thunderbolt_4_dock_chroma_device,
    &hanbo_chroma_device
};

const unsigned int RAZER_NUM_DEVICES = (sizeof(razer_device_list) / sizeof(razer_device_list[ 0 ]));
const razer_device** device_list = razer_device_list;
