/* GENERATED by test/duckvep/conformance/generate_effect_rules.pl from
 * test/duckvep/conformance/data/so_consequences.tsv (VEP metadata) and
 * test/duckvep/conformance/data/effect_rule_bindings.tsv (ported predicate facts).
 * Do not hand-edit. */
static const duckvep_consequence_rule_t k_rules[] = {
    { DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_ABLATION), 0u, DUCKVEP_SO(DUCKVEP_SO_TRANSCRIPT_ABLATION), 1u, 1u, DUCKVEP_IMPACT_HIGH }, /* transcript_ablation / feature_ablation */
    { DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_AMPLIFICATION), 0u, DUCKVEP_SO(DUCKVEP_SO_TRANSCRIPT_AMPLIFICATION), 1u, 8u, DUCKVEP_IMPACT_HIGH }, /* transcript_amplification / feature_amplification */
    { DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_MATURE_MIRNA), 0u, DUCKVEP_SO(DUCKVEP_SO_MATURE_MIRNA), 2u, 24u, DUCKVEP_IMPACT_MODIFIER }, /* mature_miRNA_variant / within_mature_miRNA */
    { DUCKVEP_PRE(DUCKVEP_PRE_TFBS_ABLATION), 0u, DUCKVEP_SO(DUCKVEP_SO_TFBS_ABLATION), 2u, 34u, DUCKVEP_IMPACT_MODERATE }, /* TFBS_ablation / feature_ablation */
    { DUCKVEP_PRE(DUCKVEP_PRE_TFBS_AMPLIFICATION), 0u, DUCKVEP_SO(DUCKVEP_SO_TFBS_AMPLIFICATION), 2u, 35u, DUCKVEP_IMPACT_MODIFIER }, /* TFBS_amplification / feature_amplification */
    { DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_TFBS), 0u, DUCKVEP_SO(DUCKVEP_SO_TF_BINDING_SITE), 2u, 36u, DUCKVEP_IMPACT_MODIFIER }, /* TF_binding_site_variant / within_motif_feature */
    { DUCKVEP_PRE(DUCKVEP_PRE_REGULATORY_ABLATION), 0u, DUCKVEP_SO(DUCKVEP_SO_REGULATORY_REGION_ABLATION), 2u, 37u, DUCKVEP_IMPACT_MODIFIER }, /* regulatory_region_ablation / feature_ablation */
    { DUCKVEP_PRE(DUCKVEP_PRE_REGULATORY_AMPLIFICATION), 0u, DUCKVEP_SO(DUCKVEP_SO_REGULATORY_REGION_AMPLIFICATION), 2u, 38u, DUCKVEP_IMPACT_MODIFIER }, /* regulatory_region_amplification / feature_amplification */
    { DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_REGULATORY_REGION), 0u, DUCKVEP_SO(DUCKVEP_SO_REGULATORY_REGION), 2u, 39u, DUCKVEP_IMPACT_MODIFIER }, /* regulatory_region_variant / within_regulatory_feature */
    { DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_ACCEPTOR), 0u, DUCKVEP_SO(DUCKVEP_SO_SPLICE_ACCEPTOR), 3u, 2u, DUCKVEP_IMPACT_HIGH }, /* splice_acceptor_variant / acceptor_splice_site */
    { DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_DONOR), 0u, DUCKVEP_SO(DUCKVEP_SO_SPLICE_DONOR), 3u, 3u, DUCKVEP_IMPACT_HIGH }, /* splice_donor_variant / donor_splice_site */
    { DUCKVEP_PRE(DUCKVEP_PRE_STOP_GAINED), 0u, DUCKVEP_SO(DUCKVEP_SO_STOP_GAINED), 3u, 4u, DUCKVEP_IMPACT_HIGH }, /* stop_gained / stop_gained */
    { DUCKVEP_PRE(DUCKVEP_PRE_FRAMESHIFT), 0u, DUCKVEP_SO(DUCKVEP_SO_FRAMESHIFT), 3u, 5u, DUCKVEP_IMPACT_HIGH }, /* frameshift_variant / frameshift */
    { DUCKVEP_PRE(DUCKVEP_PRE_STOP_LOST), 0u, DUCKVEP_SO(DUCKVEP_SO_STOP_LOST), 3u, 6u, DUCKVEP_IMPACT_HIGH }, /* stop_lost / stop_lost */
    { DUCKVEP_PRE(DUCKVEP_PRE_START_LOST), 0u, DUCKVEP_SO(DUCKVEP_SO_START_LOST), 3u, 7u, DUCKVEP_IMPACT_HIGH }, /* start_lost / start_lost */
    { DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_ELONGATION), 0u, DUCKVEP_SO(DUCKVEP_SO_FEATURE_ELONGATION), 3u, 9u, DUCKVEP_IMPACT_HIGH }, /* feature_elongation / feature_elongation */
    { DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_TRUNCATION), 0u, DUCKVEP_SO(DUCKVEP_SO_FEATURE_TRUNCATION), 3u, 10u, DUCKVEP_IMPACT_HIGH }, /* feature_truncation / feature_truncation */
    { DUCKVEP_PRE(DUCKVEP_PRE_INFRAME_INSERTION), 0u, DUCKVEP_SO(DUCKVEP_SO_INFRAME_INSERTION), 3u, 11u, DUCKVEP_IMPACT_MODERATE }, /* inframe_insertion / inframe_insertion */
    { DUCKVEP_PRE(DUCKVEP_PRE_INFRAME_DELETION), 0u, DUCKVEP_SO(DUCKVEP_SO_INFRAME_DELETION), 3u, 12u, DUCKVEP_IMPACT_MODERATE }, /* inframe_deletion / inframe_deletion */
    { DUCKVEP_PRE(DUCKVEP_PRE_MISSENSE), 0u, DUCKVEP_SO(DUCKVEP_SO_MISSENSE), 3u, 13u, DUCKVEP_IMPACT_MODERATE }, /* missense_variant / missense_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_PROTEIN_ALTERING), 0u, DUCKVEP_SO(DUCKVEP_SO_PROTEIN_ALTERING), 3u, 14u, DUCKVEP_IMPACT_MODERATE }, /* protein_altering_variant / protein_altering_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_DONOR_5TH), 0u, DUCKVEP_SO(DUCKVEP_SO_SPLICE_DONOR_5TH_BASE), 3u, 15u, DUCKVEP_IMPACT_LOW }, /* splice_donor_5th_base_variant / splice_donor_5th_base_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_REGION), 0u, DUCKVEP_SO(DUCKVEP_SO_SPLICE_REGION), 3u, 16u, DUCKVEP_IMPACT_LOW }, /* splice_region_variant / splice_region */
    { DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_DONOR_REGION), 0u, DUCKVEP_SO(DUCKVEP_SO_SPLICE_DONOR_REGION), 3u, 17u, DUCKVEP_IMPACT_LOW }, /* splice_donor_region_variant / splice_donor_region_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_PPT), 0u, DUCKVEP_SO(DUCKVEP_SO_SPLICE_POLYPYRIMIDINE), 3u, 18u, DUCKVEP_IMPACT_LOW }, /* splice_polypyrimidine_tract_variant / splice_polypyrimidine_tract_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_PARTIAL_CODON), 0u, DUCKVEP_SO(DUCKVEP_SO_INCOMPLETE_TERMINAL_CODON), 3u, 19u, DUCKVEP_IMPACT_LOW }, /* incomplete_terminal_codon_variant / partial_codon */
    { DUCKVEP_PRE(DUCKVEP_PRE_START_RETAINED), 0u, DUCKVEP_SO(DUCKVEP_SO_START_RETAINED), 3u, 20u, DUCKVEP_IMPACT_LOW }, /* start_retained_variant / start_retained_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_STOP_RETAINED), 0u, DUCKVEP_SO(DUCKVEP_SO_STOP_RETAINED), 3u, 21u, DUCKVEP_IMPACT_LOW }, /* stop_retained_variant / stop_retained */
    { DUCKVEP_PRE(DUCKVEP_PRE_SYNONYMOUS), 0u, DUCKVEP_SO(DUCKVEP_SO_SYNONYMOUS), 3u, 22u, DUCKVEP_IMPACT_LOW }, /* synonymous_variant / synonymous_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_CODING_UNKNOWN), 0u, DUCKVEP_SO(DUCKVEP_SO_CODING_SEQUENCE), 3u, 23u, DUCKVEP_IMPACT_MODIFIER }, /* coding_sequence_variant / coding_unknown */
    { DUCKVEP_PRE(DUCKVEP_PRE_UTR5), 0u, DUCKVEP_SO(DUCKVEP_SO_5_PRIME_UTR), 3u, 25u, DUCKVEP_IMPACT_MODIFIER }, /* 5_prime_UTR_variant / within_5_prime_utr */
    { DUCKVEP_PRE(DUCKVEP_PRE_UTR3), 0u, DUCKVEP_SO(DUCKVEP_SO_3_PRIME_UTR), 3u, 26u, DUCKVEP_IMPACT_MODIFIER }, /* 3_prime_UTR_variant / within_3_prime_utr */
    { DUCKVEP_PRE(DUCKVEP_PRE_NONCODING_EXON), 0u, DUCKVEP_SO(DUCKVEP_SO_NON_CODING_TRANSCRIPT_EXON), 3u, 27u, DUCKVEP_IMPACT_MODIFIER }, /* non_coding_transcript_exon_variant / non_coding_exon_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_INTRON), 0u, DUCKVEP_SO(DUCKVEP_SO_INTRON), 3u, 28u, DUCKVEP_IMPACT_MODIFIER }, /* intron_variant / within_intron */
    { DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_NMD_TRANSCRIPT), 0u, DUCKVEP_SO(DUCKVEP_SO_NMD_TRANSCRIPT), 3u, 29u, DUCKVEP_IMPACT_MODIFIER }, /* NMD_transcript_variant / within_nmd_transcript */
    { DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_NONCODING_GENE), 0u, DUCKVEP_SO(DUCKVEP_SO_NON_CODING_TRANSCRIPT), 3u, 30u, DUCKVEP_IMPACT_MODIFIER }, /* non_coding_transcript_variant / within_non_coding_gene */
    { DUCKVEP_PRE(DUCKVEP_PRE_CODING_TRANSCRIPT), 0u, DUCKVEP_SO(DUCKVEP_SO_CODING_TRANSCRIPT), 3u, 31u, DUCKVEP_IMPACT_MODIFIER }, /* coding_transcript_variant / coding_transcript_variant */
    { DUCKVEP_PRE(DUCKVEP_PRE_UPSTREAM), 0u, DUCKVEP_SO(DUCKVEP_SO_UPSTREAM_GENE), 3u, 32u, DUCKVEP_IMPACT_MODIFIER }, /* upstream_gene_variant / upstream */
    { DUCKVEP_PRE(DUCKVEP_PRE_DOWNSTREAM), 0u, DUCKVEP_SO(DUCKVEP_SO_DOWNSTREAM_GENE), 3u, 33u, DUCKVEP_IMPACT_MODIFIER }, /* downstream_gene_variant / downstream */
};
static const uint64_t k_rule_so_by_pre_bit[DUCKVEP_PRE_BIT_COUNT] = {
    [DUCKVEP_PRE_FEATURE_ABLATION] = DUCKVEP_SO(DUCKVEP_SO_TRANSCRIPT_ABLATION),
    [DUCKVEP_PRE_FEATURE_AMPLIFICATION] = DUCKVEP_SO(DUCKVEP_SO_TRANSCRIPT_AMPLIFICATION),
    [DUCKVEP_PRE_WITHIN_MATURE_MIRNA] = DUCKVEP_SO(DUCKVEP_SO_MATURE_MIRNA),
    [DUCKVEP_PRE_TFBS_ABLATION] = DUCKVEP_SO(DUCKVEP_SO_TFBS_ABLATION),
    [DUCKVEP_PRE_TFBS_AMPLIFICATION] = DUCKVEP_SO(DUCKVEP_SO_TFBS_AMPLIFICATION),
    [DUCKVEP_PRE_WITHIN_TFBS] = DUCKVEP_SO(DUCKVEP_SO_TF_BINDING_SITE),
    [DUCKVEP_PRE_REGULATORY_ABLATION] = DUCKVEP_SO(DUCKVEP_SO_REGULATORY_REGION_ABLATION),
    [DUCKVEP_PRE_REGULATORY_AMPLIFICATION] = DUCKVEP_SO(DUCKVEP_SO_REGULATORY_REGION_AMPLIFICATION),
    [DUCKVEP_PRE_WITHIN_REGULATORY_REGION] = DUCKVEP_SO(DUCKVEP_SO_REGULATORY_REGION),
    [DUCKVEP_PRE_SPLICE_ACCEPTOR] = DUCKVEP_SO(DUCKVEP_SO_SPLICE_ACCEPTOR),
    [DUCKVEP_PRE_SPLICE_DONOR] = DUCKVEP_SO(DUCKVEP_SO_SPLICE_DONOR),
    [DUCKVEP_PRE_STOP_GAINED] = DUCKVEP_SO(DUCKVEP_SO_STOP_GAINED),
    [DUCKVEP_PRE_FRAMESHIFT] = DUCKVEP_SO(DUCKVEP_SO_FRAMESHIFT),
    [DUCKVEP_PRE_STOP_LOST] = DUCKVEP_SO(DUCKVEP_SO_STOP_LOST),
    [DUCKVEP_PRE_START_LOST] = DUCKVEP_SO(DUCKVEP_SO_START_LOST),
    [DUCKVEP_PRE_FEATURE_ELONGATION] = DUCKVEP_SO(DUCKVEP_SO_FEATURE_ELONGATION),
    [DUCKVEP_PRE_FEATURE_TRUNCATION] = DUCKVEP_SO(DUCKVEP_SO_FEATURE_TRUNCATION),
    [DUCKVEP_PRE_INFRAME_INSERTION] = DUCKVEP_SO(DUCKVEP_SO_INFRAME_INSERTION),
    [DUCKVEP_PRE_INFRAME_DELETION] = DUCKVEP_SO(DUCKVEP_SO_INFRAME_DELETION),
    [DUCKVEP_PRE_MISSENSE] = DUCKVEP_SO(DUCKVEP_SO_MISSENSE),
    [DUCKVEP_PRE_PROTEIN_ALTERING] = DUCKVEP_SO(DUCKVEP_SO_PROTEIN_ALTERING),
    [DUCKVEP_PRE_SPLICE_DONOR_5TH] = DUCKVEP_SO(DUCKVEP_SO_SPLICE_DONOR_5TH_BASE),
    [DUCKVEP_PRE_SPLICE_REGION] = DUCKVEP_SO(DUCKVEP_SO_SPLICE_REGION),
    [DUCKVEP_PRE_SPLICE_DONOR_REGION] = DUCKVEP_SO(DUCKVEP_SO_SPLICE_DONOR_REGION),
    [DUCKVEP_PRE_SPLICE_PPT] = DUCKVEP_SO(DUCKVEP_SO_SPLICE_POLYPYRIMIDINE),
    [DUCKVEP_PRE_PARTIAL_CODON] = DUCKVEP_SO(DUCKVEP_SO_INCOMPLETE_TERMINAL_CODON),
    [DUCKVEP_PRE_START_RETAINED] = DUCKVEP_SO(DUCKVEP_SO_START_RETAINED),
    [DUCKVEP_PRE_STOP_RETAINED] = DUCKVEP_SO(DUCKVEP_SO_STOP_RETAINED),
    [DUCKVEP_PRE_SYNONYMOUS] = DUCKVEP_SO(DUCKVEP_SO_SYNONYMOUS),
    [DUCKVEP_PRE_CODING_UNKNOWN] = DUCKVEP_SO(DUCKVEP_SO_CODING_SEQUENCE),
    [DUCKVEP_PRE_UTR5] = DUCKVEP_SO(DUCKVEP_SO_5_PRIME_UTR),
    [DUCKVEP_PRE_UTR3] = DUCKVEP_SO(DUCKVEP_SO_3_PRIME_UTR),
    [DUCKVEP_PRE_NONCODING_EXON] = DUCKVEP_SO(DUCKVEP_SO_NON_CODING_TRANSCRIPT_EXON),
    [DUCKVEP_PRE_WITHIN_INTRON] = DUCKVEP_SO(DUCKVEP_SO_INTRON),
    [DUCKVEP_PRE_WITHIN_NMD_TRANSCRIPT] = DUCKVEP_SO(DUCKVEP_SO_NMD_TRANSCRIPT),
    [DUCKVEP_PRE_WITHIN_NONCODING_GENE] = DUCKVEP_SO(DUCKVEP_SO_NON_CODING_TRANSCRIPT),
    [DUCKVEP_PRE_CODING_TRANSCRIPT] = DUCKVEP_SO(DUCKVEP_SO_CODING_TRANSCRIPT),
    [DUCKVEP_PRE_UPSTREAM] = DUCKVEP_SO(DUCKVEP_SO_UPSTREAM_GENE),
    [DUCKVEP_PRE_DOWNSTREAM] = DUCKVEP_SO(DUCKVEP_SO_DOWNSTREAM_GENE),
};
static const uint64_t k_rule_tier1_pre_mask =
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_ABLATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_AMPLIFICATION);
static const uint64_t k_rule_tier2_pre_mask =
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_MATURE_MIRNA) |
        DUCKVEP_PRE(DUCKVEP_PRE_TFBS_ABLATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_TFBS_AMPLIFICATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_TFBS) |
        DUCKVEP_PRE(DUCKVEP_PRE_REGULATORY_ABLATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_REGULATORY_AMPLIFICATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_REGULATORY_REGION);
static const uint64_t k_rule_fallback_pre_mask =
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_ACCEPTOR) |
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_DONOR) |
        DUCKVEP_PRE(DUCKVEP_PRE_STOP_GAINED) |
        DUCKVEP_PRE(DUCKVEP_PRE_FRAMESHIFT) |
        DUCKVEP_PRE(DUCKVEP_PRE_STOP_LOST) |
        DUCKVEP_PRE(DUCKVEP_PRE_START_LOST) |
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_ELONGATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_TRUNCATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_INFRAME_INSERTION) |
        DUCKVEP_PRE(DUCKVEP_PRE_INFRAME_DELETION) |
        DUCKVEP_PRE(DUCKVEP_PRE_MISSENSE) |
        DUCKVEP_PRE(DUCKVEP_PRE_PROTEIN_ALTERING) |
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_DONOR_5TH) |
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_REGION) |
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_DONOR_REGION) |
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_PPT) |
        DUCKVEP_PRE(DUCKVEP_PRE_PARTIAL_CODON) |
        DUCKVEP_PRE(DUCKVEP_PRE_START_RETAINED) |
        DUCKVEP_PRE(DUCKVEP_PRE_STOP_RETAINED) |
        DUCKVEP_PRE(DUCKVEP_PRE_SYNONYMOUS) |
        DUCKVEP_PRE(DUCKVEP_PRE_CODING_UNKNOWN) |
        DUCKVEP_PRE(DUCKVEP_PRE_UTR5) |
        DUCKVEP_PRE(DUCKVEP_PRE_UTR3) |
        DUCKVEP_PRE(DUCKVEP_PRE_NONCODING_EXON) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_INTRON) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_NMD_TRANSCRIPT) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_NONCODING_GENE) |
        DUCKVEP_PRE(DUCKVEP_PRE_CODING_TRANSCRIPT) |
        DUCKVEP_PRE(DUCKVEP_PRE_UPSTREAM) |
        DUCKVEP_PRE(DUCKVEP_PRE_DOWNSTREAM);
static const uint64_t k_rule_structural_pre_mask =
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_ABLATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_AMPLIFICATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_MATURE_MIRNA) |
        DUCKVEP_PRE(DUCKVEP_PRE_TFBS_ABLATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_TFBS_AMPLIFICATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_TFBS) |
        DUCKVEP_PRE(DUCKVEP_PRE_REGULATORY_ABLATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_REGULATORY_AMPLIFICATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_REGULATORY_REGION) |
        DUCKVEP_PRE(DUCKVEP_PRE_FRAMESHIFT) |
        DUCKVEP_PRE(DUCKVEP_PRE_STOP_LOST) |
        DUCKVEP_PRE(DUCKVEP_PRE_START_LOST) |
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_ELONGATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_FEATURE_TRUNCATION) |
        DUCKVEP_PRE(DUCKVEP_PRE_INFRAME_INSERTION) |
        DUCKVEP_PRE(DUCKVEP_PRE_INFRAME_DELETION) |
        DUCKVEP_PRE(DUCKVEP_PRE_SPLICE_PPT) |
        DUCKVEP_PRE(DUCKVEP_PRE_START_RETAINED) |
        DUCKVEP_PRE(DUCKVEP_PRE_CODING_UNKNOWN) |
        DUCKVEP_PRE(DUCKVEP_PRE_UTR5) |
        DUCKVEP_PRE(DUCKVEP_PRE_UTR3) |
        DUCKVEP_PRE(DUCKVEP_PRE_NONCODING_EXON) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_INTRON) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_NMD_TRANSCRIPT) |
        DUCKVEP_PRE(DUCKVEP_PRE_WITHIN_NONCODING_GENE) |
        DUCKVEP_PRE(DUCKVEP_PRE_CODING_TRANSCRIPT) |
        DUCKVEP_PRE(DUCKVEP_PRE_UPSTREAM) |
        DUCKVEP_PRE(DUCKVEP_PRE_DOWNSTREAM);
