// @generated by `just cfi-generate` from data/cfi.json — DO NOT EDIT BY HAND.
//
// Derived from the ISO 10962 (CFI) classification *code* structure only: the category, group,
// and attribute-value code letters and which combinations are valid. No ISO descriptive text is
// reproduced here. Regenerate with `just cfi-generate`; `just cfi-check` verifies there is no drift.

/// A single group within a category: its code, plus a bitmask of the permitted code letters for
/// each of the four CFI attribute positions.
///
/// In `attrs[i]`, bit `n` (from the least-significant) is set when the letter `b'A' + n` is a
/// valid code for attribute `i + 1`. Every mask has at least one bit set.
pub(crate) struct GroupEntry {
    pub code: u8,
    pub attrs: [u32; 4],
}

/// One ISO 10962 category: its code and the groups defined under it, both sorted by `code` so the
/// lookup in `super::validation` can binary-search them.
pub(crate) struct CategoryEntry {
    pub code: u8,
    pub groups: &'static [GroupEntry],
}

pub(crate) static CATEGORIES: &[CategoryEntry] = &[
    CategoryEntry {
        code: b'C',
        groups: &[
            // group B: a1=CMO a2=GIJ a3=X a4=QSUY
            GroupEntry {
                code: b'B',
                attrs: [0x00005004, 0x00000340, 0x00800000, 0x01150000],
            },
            // group E: a1=CMO a2=GIJ a3=BCDEFKLMRV a4=SU
            GroupEntry {
                code: b'E',
                attrs: [0x00005004, 0x00000340, 0x00221C3E, 0x00140000],
            },
            // group F: a1=CMO a2=GIJ a3=BEHIMP a4=QSUY
            GroupEntry {
                code: b'F',
                attrs: [0x00005004, 0x00000340, 0x00009192, 0x01150000],
            },
            // group H: a1=ADELMNRS a2=X a3=X a4=X
            GroupEntry {
                code: b'H',
                attrs: [0x00063819, 0x00800000, 0x00800000, 0x00800000],
            },
            // group I: a1=CMO a2=GIJ a3=BCDEFKLMRV a4=QSUY
            GroupEntry {
                code: b'I',
                attrs: [0x00005004, 0x00000340, 0x00221C3E, 0x01150000],
            },
            // group M: a1=X a2=X a3=X a4=QSUY
            GroupEntry {
                code: b'M',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x01150000],
            },
            // group P: a1=CMO a2=GIJ a3=BCDEFKLMRV a4=QSUY
            GroupEntry {
                code: b'P',
                attrs: [0x00005004, 0x00000340, 0x00221C3E, 0x01150000],
            },
            // group S: a1=CMO a2=BGLM a3=BMR a4=SU
            GroupEntry {
                code: b'S',
                attrs: [0x00005004, 0x00001842, 0x00021002, 0x00140000],
            },
        ],
    },
    CategoryEntry {
        code: b'D',
        groups: &[
            // group A: a1=FVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'A',
                attrs: [0x02200020, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group B: a1=CFKVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'B',
                attrs: [0x02200424, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group C: a1=FKVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'C',
                attrs: [0x02200420, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group D: a1=ABCGMNTWY a2=CFVZ a3=CGJNOPQSTU a4=ABCDEFGLPQRT
            GroupEntry {
                code: b'D',
                attrs: [0x01483047, 0x02200024, 0x001DE244, 0x000B887F],
            },
            // group E: a1=ABCDEM a2=DFMVY a3=CMRST a4=BCDIMNST
            GroupEntry {
                code: b'E',
                attrs: [0x0000101F, 0x01201028, 0x000E1004, 0x000C310E],
            },
            // group G: a1=FVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'G',
                attrs: [0x02200020, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group M: a1=BMP a2=X a3=X a4=BMNR
            GroupEntry {
                code: b'M',
                attrs: [0x00009002, 0x00800000, 0x00800000, 0x00023002],
            },
            // group N: a1=FVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'N',
                attrs: [0x02200020, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group S: a1=ABCDM a2=DFMVY a3=FMV a4=BCDIMNST
            GroupEntry {
                code: b'S',
                attrs: [0x0000100F, 0x01201028, 0x00201020, 0x000C310E],
            },
            // group T: a1=FKVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'T',
                attrs: [0x02200420, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group W: a1=FKVZ a2=CGJNOPQSTU a3=ABCDEFGLPQRT a4=BMNR
            GroupEntry {
                code: b'W',
                attrs: [0x02200420, 0x001DE244, 0x000B887F, 0x00023002],
            },
            // group Y: a1=FKVZ a2=CGJNOPQSTU a3=X a4=BMNR
            GroupEntry {
                code: b'Y',
                attrs: [0x02200420, 0x001DE244, 0x00800000, 0x00023002],
            },
        ],
    },
    CategoryEntry {
        code: b'E',
        groups: &[
            // group C: a1=ENRV a2=TU a3=FOP a4=BMNR
            GroupEntry {
                code: b'C',
                attrs: [0x00222010, 0x00180000, 0x0000C020, 0x00023002],
            },
            // group D: a1=CFLMPS a2=BDNR a3=ACDFNPQU a4=BMNR
            GroupEntry {
                code: b'D',
                attrs: [0x00049824, 0x0002200A, 0x0011A02D, 0x00023002],
            },
            // group F: a1=ENRV a2=ACEGNRT a3=ACFNPQU a4=BMNR
            GroupEntry {
                code: b'F',
                attrs: [0x00222010, 0x000A2055, 0x0011A025, 0x00023002],
            },
            // group L: a1=ENRV a2=TU a3=FOP a4=BMNR
            GroupEntry {
                code: b'L',
                attrs: [0x00222010, 0x00180000, 0x0000C020, 0x00023002],
            },
            // group M: a1=X a2=X a3=X a4=BMNR
            GroupEntry {
                code: b'M',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00023002],
            },
            // group P: a1=ENRV a2=ACEGNRT a3=ACFNPQU a4=BMNR
            GroupEntry {
                code: b'P',
                attrs: [0x00222010, 0x000A2055, 0x0011A025, 0x00023002],
            },
            // group S: a1=ENRV a2=TU a3=FOP a4=BMNR
            GroupEntry {
                code: b'S',
                attrs: [0x00222010, 0x00180000, 0x0000C020, 0x00023002],
            },
            // group Y: a1=ABCDEM a2=DMY a3=EFMV a4=BCDGIMNST
            GroupEntry {
                code: b'Y',
                attrs: [0x0000101F, 0x01001008, 0x00201030, 0x000C314E],
            },
        ],
    },
    CategoryEntry {
        code: b'F',
        groups: &[
            // group C: a1=AEHIMNPS a2=CNP a3=NS a4=X
            GroupEntry {
                code: b'C',
                attrs: [0x0004B191, 0x0000A004, 0x00042000, 0x00800000],
            },
            // group F: a1=BCDFIMNOSVW a2=CNP a3=NS a4=X
            GroupEntry {
                code: b'F',
                attrs: [0x0064712E, 0x0000A004, 0x00042000, 0x00800000],
            },
        ],
    },
    CategoryEntry {
        code: b'H',
        groups: &[
            // group C: a1=IMUVW a2=ABCDEFGHI a3=ABDGLMPV a4=CEP
            GroupEntry {
                code: b'C',
                attrs: [0x00701100, 0x000001FF, 0x0020984B, 0x00008014],
            },
            // group E: a1=BFIMORS a2=ABCDEFGHI a3=ABDGLMPV a4=CEP
            GroupEntry {
                code: b'E',
                attrs: [0x00065122, 0x000001FF, 0x0020984B, 0x00008014],
            },
            // group F: a1=BCDEFMQRTUVWY a2=JKL a3=ABDGLMPV a4=CEP
            GroupEntry {
                code: b'F',
                attrs: [0x017B103E, 0x00000E00, 0x0020984B, 0x00008014],
            },
            // group M: a1=MP a2=ABCDEFGHIJKL a3=ABDGLMPV a4=ACENP
            GroupEntry {
                code: b'M',
                attrs: [0x00009000, 0x00000FFF, 0x0020984B, 0x0000A015],
            },
            // group R: a1=ACDEFGHMOR a2=ABCDEFGHI a3=ABCDFGLMPV a4=CEP
            GroupEntry {
                code: b'R',
                attrs: [0x000250FD, 0x000001FF, 0x0020986F, 0x00008014],
            },
            // group T: a1=ABCFGHIJKMNOPRSTW a2=ABCDEFGHI a3=ABDGLMPV a4=CEP
            GroupEntry {
                code: b'T',
                attrs: [0x004EF7E7, 0x000001FF, 0x0020984B, 0x00008014],
            },
        ],
    },
    CategoryEntry {
        code: b'I',
        groups: &[
            // group F: a1=X a2=X a3=X a4=P
            GroupEntry {
                code: b'F',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00008000],
            },
            // group T: a1=AJKMNPST a2=X a3=X a4=X
            GroupEntry {
                code: b'T',
                attrs: [0x000CB601, 0x00800000, 0x00800000, 0x00800000],
            },
        ],
    },
    CategoryEntry {
        code: b'J',
        groups: &[
            // group C: a1=ABCDGIO a2=X a3=CFS a4=CP
            GroupEntry {
                code: b'C',
                attrs: [0x0000414F, 0x00800000, 0x00040024, 0x00008004],
            },
            // group E: a1=BFIOS a2=X a3=CFS a4=CP
            GroupEntry {
                code: b'E',
                attrs: [0x00044122, 0x00800000, 0x00040024, 0x00008004],
            },
            // group F: a1=FJKLNORSTUVW a2=X a3=CFRS a4=CP
            GroupEntry {
                code: b'F',
                attrs: [0x007E6E20, 0x00800000, 0x00060024, 0x00008004],
            },
            // group R: a1=IMO a2=X a3=CFS a4=CP
            GroupEntry {
                code: b'R',
                attrs: [0x00005100, 0x00800000, 0x00040024, 0x00008004],
            },
            // group T: a1=ABCGHIJKMNPST a2=X a3=CFS a4=CP
            GroupEntry {
                code: b'T',
                attrs: [0x000CB7C7, 0x00800000, 0x00040024, 0x00008004],
            },
        ],
    },
    CategoryEntry {
        code: b'K',
        groups: &[
            // group C: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'C',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group E: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'E',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group F: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'F',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group M: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'M',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group R: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'R',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group T: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'T',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group Y: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'Y',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
        ],
    },
    CategoryEntry {
        code: b'L',
        groups: &[
            // group L: a1=ABJKMNPST a2=X a3=X a4=CP
            GroupEntry {
                code: b'L',
                attrs: [0x000CB603, 0x00800000, 0x00800000, 0x00008004],
            },
            // group R: a1=CGS a2=FNOT a3=X a4=DHT
            GroupEntry {
                code: b'R',
                attrs: [0x00040044, 0x00086020, 0x00800000, 0x00080088],
            },
            // group S: a1=CDEGKLMPTW a2=NOT a3=X a4=DFHT
            GroupEntry {
                code: b'S',
                attrs: [0x00489C5C, 0x00086000, 0x00800000, 0x000800A8],
            },
        ],
    },
    CategoryEntry {
        code: b'M',
        groups: &[
            // group C: a1=ABHMSUW a2=TU a3=X a4=BMNR
            GroupEntry {
                code: b'C',
                attrs: [0x00541083, 0x00180000, 0x00800000, 0x00023002],
            },
            // group M: a1=EIMNPRST a2=X a3=X a4=X
            GroupEntry {
                code: b'M',
                attrs: [0x000EB110, 0x00800000, 0x00800000, 0x00800000],
            },
        ],
    },
    CategoryEntry {
        code: b'O',
        groups: &[
            // group C: a1=AE a2=BCDFIMNOSTW a3=CENP a4=NS
            GroupEntry {
                code: b'C',
                attrs: [0x00000011, 0x004C712E, 0x0000A014, 0x00042000],
            },
            // group M: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'M',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group P: a1=ABE a2=BCDFIMNOSTW a3=CENP a4=NS
            GroupEntry {
                code: b'P',
                attrs: [0x00000013, 0x004C712E, 0x0000A014, 0x00042000],
            },
        ],
    },
    CategoryEntry {
        code: b'R',
        groups: &[
            // group A: a1=X a2=X a3=X a4=BMNR
            GroupEntry {
                code: b'A',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00023002],
            },
            // group D: a1=AMPSW a2=X a3=X a4=BMNR
            GroupEntry {
                code: b'D',
                attrs: [0x00449001, 0x00800000, 0x00800000, 0x00023002],
            },
            // group F: a1=BCDIMST a2=MNT a3=CMP a4=ABEM
            GroupEntry {
                code: b'F',
                attrs: [0x000C110E, 0x00083000, 0x00009004, 0x00001013],
            },
            // group M: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'M',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group P: a1=BCFIMPS a2=X a3=X a4=BMNR
            GroupEntry {
                code: b'P',
                attrs: [0x00049126, 0x00800000, 0x00800000, 0x00023002],
            },
            // group S: a1=BCFIMPS a2=X a3=X a4=BMNR
            GroupEntry {
                code: b'S',
                attrs: [0x00049126, 0x00800000, 0x00800000, 0x00023002],
            },
            // group W: a1=BCDIMST a2=CNT a3=BCP a4=ABEM
            GroupEntry {
                code: b'W',
                attrs: [0x000C110E, 0x00082004, 0x00008006, 0x00001013],
            },
        ],
    },
    CategoryEntry {
        code: b'S',
        groups: &[
            // group C: a1=BIMUV a2=CMT a3=CLS a4=ACP
            GroupEntry {
                code: b'C',
                attrs: [0x00301102, 0x00081004, 0x00040804, 0x00008005],
            },
            // group E: a1=BIMS a2=CDLMPTV a3=X a4=CEP
            GroupEntry {
                code: b'E',
                attrs: [0x00041102, 0x0028980C, 0x00800000, 0x00008014],
            },
            // group F: a1=ACM a2=X a3=X a4=CP
            GroupEntry {
                code: b'F',
                attrs: [0x00001005, 0x00800000, 0x00800000, 0x00008004],
            },
            // group M: a1=MP a2=X a3=X a4=CEP
            GroupEntry {
                code: b'M',
                attrs: [0x00009000, 0x00800000, 0x00800000, 0x00008014],
            },
            // group R: a1=ACDGHMZ a2=CDIY a3=CS a4=DN
            GroupEntry {
                code: b'R',
                attrs: [0x020010CD, 0x0100010C, 0x00040004, 0x00002008],
            },
            // group T: a1=ABCGHIJKMNPQST a2=CT a3=X a4=CEP
            GroupEntry {
                code: b'T',
                attrs: [0x000DB7C7, 0x00080004, 0x00800000, 0x00008014],
            },
        ],
    },
    CategoryEntry {
        code: b'T',
        groups: &[
            // group B: a1=CDEFIMT a2=X a3=X a4=X
            GroupEntry {
                code: b'B',
                attrs: [0x0008113C, 0x00800000, 0x00800000, 0x00800000],
            },
            // group C: a1=CLMN a2=X a3=X a4=X
            GroupEntry {
                code: b'C',
                attrs: [0x00003804, 0x00800000, 0x00800000, 0x00800000],
            },
            // group D: a1=CFKLMPS a2=X a3=X a4=X
            GroupEntry {
                code: b'D',
                attrs: [0x00049C24, 0x00800000, 0x00800000, 0x00800000],
            },
            // group I: a1=CDEFMRT a2=CEFMP a3=GMNP a4=X
            GroupEntry {
                code: b'I',
                attrs: [0x000A103C, 0x00009034, 0x0000B040, 0x00800000],
            },
            // group M: a1=X a2=X a3=X a4=X
            GroupEntry {
                code: b'M',
                attrs: [0x00800000, 0x00800000, 0x00800000, 0x00800000],
            },
            // group R: a1=FMNRV a2=ADMNQSW a3=X a4=X
            GroupEntry {
                code: b'R',
                attrs: [0x00223020, 0x00453009, 0x00800000, 0x00800000],
            },
            // group T: a1=AEHIMNPS a2=X a3=X a4=X
            GroupEntry {
                code: b'T',
                attrs: [0x0004B191, 0x00800000, 0x00800000, 0x00800000],
            },
        ],
    },
];
