// Copyright 2022 The Wuffs Authors.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT

pub status "#bad Huffman code (over-subscribed)"
pub status "#bad Huffman code (under-subscribed)"
pub status "#bad block header"
pub status "#bad block length"
pub status "#bad checksum"
pub status "#bad header"
pub status "#bad number of sections"
pub status "#truncated input"
pub status "#unsupported block randomization"

pri status "#internal error: inconsistent Huffman decoder state"

pub const DECODER_DST_HISTORY_RETAIN_LENGTH_MAX_INCL_WORST_CASE : base.u64 = 0
pub const DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE               : base.u64 = 0

pri const CLAMP_TO_5 : roarray[8] base.u8[..= 5] = [0, 1, 2, 3, 4, 5, 5, 5]

pub struct decoder? implements base.io_transformer(
        bits   : base.u32,
        n_bits : base.u32[..= 31],

        // Block size is measured prior to the RLE1 step.
        max_incl_block_size : base.u32[..= 900000],

        block_size               : base.u32[..= 900000],
        decode_huffman_finished  : base.bool,
        decode_huffman_which     : base.u8[..= 5],
        decode_huffman_ticks     : base.u32[..= 50],
        decode_huffman_section   : base.u32,
        decode_huffman_run_shift : base.u32[..= 23],

        flush_pointer      : base.u32[..= 1_048575],
        flush_repeat_count : base.u32[..= 255],
        flush_prev         : base.u8,

        ignore_checksum      : base.bool,
        final_checksum_have  : base.u32,
        block_checksum_have  : base.u32,
        block_checksum_want  : base.u32,
        original_pointer     : base.u32,
        num_symbols          : base.u32[..= 258],
        num_huffman_codes    : base.u32[..= 6],
        num_sections         : base.u32[..= 18001],
        code_lengths_bitmask : base.u32,

        util : base.utility,
) + (
        scratch : base.u32,

        letter_counts : array[256] base.u32,

        // presence[i] being non-zero is whether the byte value i occurs in the
        // block's decompressed output.
        presence : array[256] base.u8,

        // mtft is the Move To Front Transform state.
        mtft : array[256] base.u8,

        // huffman_selectors selects which of the huffman_trees to use for each
        // 50-symbol section.
        huffman_selectors : array[32768] base.u8,

        // Each array[2] base.u16 is a branch node in the Huffman tree. The
        // build_huffman_tree method comment details what the base.u16 values mean.
        //
        // Each Huffman tree has num_symbols leaf nodes and hence (num_symbols - 1)
        // branch nodes, also called internal nodes, as per
        // https://stackoverflow.com/questions/69399994/maximum-number-of-nodes-in-a-huffman-tree/69401083#69401083
        //
        // This can be proven inductively. The base case Huffman code (two symbols)
        // has one branch node (the root node). The inductive case, adding one
        // symbol to a (complete but possibly non-canonical) Huffman code replaces
        // one leaf node with one branch node (and two leaf nodes). The net gain in
        // branch nodes is +1.
        //
        // Since num_symbols' inclusive maximum is 258 (for RUNA, RUNB, 255 × mXYZ,
        // EOB), there are at most 257 branch nodes.
        huffman_trees : array[6] array[257] array[2] base.u16,

        // huffman_tables[which] caches the result of walking huffman_trees[which]
        // for each possible 8-bit input. The base.u16 value decomposes as:
        //  - The low 10 bits are the final node, where finality comes either from
        //    hitting a leaf node or from spending all 8 bits of the input. As per
        //    the build_huffman_tree method, a value of 0x100 = 256 or less means
        //    a branch node and 0x201 = 513 or more means a leaf node.
        //  - The middle 2 bits are unused.
        //  - The high 4 bits are the number of input bits spent.
        huffman_tables : array[6] array[256] base.u16,

        // bwt is the Burrows Wheeler Transform state. Per the README.md file, each
        // entry is a row with the low 8 bits holding the L column and the high 20
        // bits holding the U column. The middle 4 bits are unused.
        //
        // The read_code_lengths and build_huffman_tree methods also re-purpose
        // this buffer to temporarily hold up to 258 symbols' code lengths.
        bwt : array[1_048576] base.u32,
)

pub func decoder.get_quirk(key: base.u32) base.u64 {
    if (args.key == base.QUIRK_IGNORE_CHECKSUM) and this.ignore_checksum {
        return 1
    }
    return 0
}

pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
    if args.key == base.QUIRK_IGNORE_CHECKSUM {
        this.ignore_checksum = args.value > 0
        return ok
    }
    return base."#unsupported option"
}

pub func decoder.dst_history_retain_length() base.optional_u63 {
    return this.util.make_optional_u63(has_value: true, value: 0)
}

pub func decoder.workbuf_len() base.range_ii_u64 {
    return this.util.make_range_ii_u64(
            min_incl: DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE,
            max_incl: DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE)
}

pub func decoder.transform_io?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
    var status : base.status

    while true {
        status =? this.do_transform_io?(dst: args.dst, src: args.src, workbuf: args.workbuf)
        if (status == base."$short read") and args.src.is_closed() {
            return "#truncated input"
        }
        yield? status
    }
}

pri func decoder.do_transform_io?(dst: base.io_writer, src: base.io_reader, workbuf: slice base.u8) {
    var c8                  : base.u8
    var i                   : base.u32
    var tag                 : base.u64
    var status              : base.status
    var final_checksum_want : base.u32

    // Read the header.
    c8 = args.src.read_u8?()
    if c8 <> 0x42 {
        return "#bad header"
    }
    c8 = args.src.read_u8?()
    if c8 <> 0x5A {
        return "#bad header"
    }
    c8 = args.src.read_u8?()
    if c8 <> 0x68 {
        return "#bad header"
    }
    c8 = args.src.read_u8?()
    if (c8 < '1') or ('9' < c8) {
        return "#bad header"
    }
    this.max_incl_block_size = ((c8 - '0') as base.u32) * 100000

    while true {
        // Read the 48-bit tag.
        tag = 0
        i = 0
        while i < 48 {
            if this.n_bits <= 0 {
                c8 = args.src.read_u8?()
                this.bits = (c8 as base.u32) << 24
                this.n_bits = 8
                assert this.n_bits > 0
            }
            tag ~mod<<= 1
            tag |= (this.bits >> 31) as base.u64
            this.bits ~mod<<= 1
            this.n_bits -= 1
            i += 1
        }

        if tag == 0x1772_4538_5090 {
            break
        } else if tag <> 0x3141_5926_5359 {
            return "#bad block header"
        }

        this.prepare_block?(src: args.src)

        this.block_size = 0
        this.decode_huffman_finished = false
        this.decode_huffman_which = CLAMP_TO_5[this.huffman_selectors[0] & 7]
        this.decode_huffman_ticks = 50
        this.decode_huffman_section = 0
        this.decode_huffman_run_shift = 0
        while not this.decode_huffman_finished {
            status = this.decode_huffman_fast!(src: args.src)
            if status.is_error() {
                return status
            } else if this.decode_huffman_finished {
                break
            }
            this.decode_huffman_slow?(src: args.src)
        }

        this.invert_bwt!()

        this.block_checksum_have = 0xFFFF_FFFF
        if this.original_pointer >= this.block_size {
            return "#bad block length"
        }
        assert this.original_pointer < 900000 via "a < b: a < c; c <= b"(c: this.block_size)
        this.flush_pointer = this.bwt[this.original_pointer] >> 12
        this.flush_repeat_count = 0
        this.flush_prev = 0

        while this.block_size > 0 {
            this.flush_fast!(dst: args.dst)
            if this.block_size <= 0 {
                break
            }
            this.flush_slow?(dst: args.dst)
        }

        this.block_checksum_have ^= 0xFFFF_FFFF
        if (not this.ignore_checksum) and (this.block_checksum_have <> this.block_checksum_want) {
            return "#bad checksum"
        }
        this.final_checksum_have = this.block_checksum_have ^ (
                (this.final_checksum_have >> 31) |
                (this.final_checksum_have ~mod<< 1))
    }

    // Read the 32-bit final checksum.
    final_checksum_want = 0
    i = 0
    while i < 32 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        final_checksum_want ~mod<<= 1
        final_checksum_want |= this.bits >> 31
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 1
    }
    if (not this.ignore_checksum) and (this.final_checksum_have <> final_checksum_want) {
        return "#bad checksum"
    }
}

pri func decoder.prepare_block?(src: base.io_reader) {
    var c8       : base.u8
    var i        : base.u32
    var j        : base.u32
    var selector : base.u32
    var sel_ff   : base.u32
    var movee    : base.u8
    var status   : base.status

    // Read the 32-bit block checksum.
    this.block_checksum_want = 0
    i = 0
    while i < 32 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        this.block_checksum_want ~mod<<= 1
        this.block_checksum_want |= this.bits >> 31
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 1
    }

    // Read the "block randomized" bit.
    if this.n_bits <= 0 {
        c8 = args.src.read_u8?()
        this.bits = (c8 as base.u32) << 24
        this.n_bits = 8
        assert this.n_bits > 0
    }
    if (this.bits >> 31) <> 0 {
        return "#unsupported block randomization"
    }
    this.bits ~mod<<= 1
    this.n_bits -= 1

    // Read the 24-bit original pointer. The BWT technical report calls this I.
    this.original_pointer = 0
    i = 0
    while i < 24 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        this.original_pointer ~mod<<= 1
        this.original_pointer |= this.bits >> 31
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 1
    }

    // Reset the presence bitmap.
    i = 0
    while i < 256 {
        this.presence[i] = 0
        i += 1
    }

    // Read the 16-bit high-level presence bitmap.
    i = 0
    while i < 256 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        if (this.bits >> 31) <> 0 {
            this.presence[i] = 1
        }
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 16
    }

    // Read the 16-bit low-level presence bitmaps.
    this.scratch = 0
    i = 0
    while i < 256 {
        if this.presence[i] == 0 {
            i += 16
            continue
        }
        while true {
            if this.n_bits <= 0 {
                c8 = args.src.read_u8?()
                this.bits = (c8 as base.u32) << 24
                this.n_bits = 8
                assert this.n_bits > 0
            }
            this.scratch ~mod+= this.bits >> 31
            this.presence[i & 0xFF] = (this.bits >> 31) as base.u8
            this.bits ~mod<<= 1
            this.n_bits -= 1
            i ~mod+= 1
            if (i & 15) == 0 {
                break
            }
        }
    }
    if (this.scratch < 1) or (256 < this.scratch) {
        return "#bad block header"
    }
    this.num_symbols = this.scratch + 2

    // Read the 3-bit number of Huffman codes.
    this.scratch = 0
    i = 0
    while i < 3 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        this.scratch ~mod<<= 1
        this.scratch |= this.bits >> 31
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 1
    }
    if (this.scratch < 2) or (6 < this.scratch) {
        return "#bad block header"
    }
    this.num_huffman_codes = this.scratch

    // Read the 15-bit number of sections.
    this.scratch = 0
    i = 0
    while i < 15 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        this.scratch ~mod<<= 1
        this.scratch |= this.bits >> 31
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 1
    }
    if (this.scratch < 1) or (18001 < this.scratch) {
        return "#bad block header"
    }
    this.num_sections = this.scratch

    // Initialize the MTFT state.
    i = 0
    while i < this.num_huffman_codes {
        assert i < 6 via "a < b: a < c; c <= b"(c: this.num_huffman_codes)
        this.mtft[i] = i as base.u8
        i += 1
    }

    // Read each section's Huffman code selector, applying the MTFT.
    i = 0
    while i < this.num_sections {
        assert i < 18001 via "a < b: a < c; c <= b"(c: this.num_sections)
        selector = 0

        // Read a unary encoded natural number.
        while true,
                inv i < 18001,
        {
            if this.n_bits <= 0 {
                c8 = args.src.read_u8?()
                this.bits = (c8 as base.u32) << 24
                this.n_bits = 8
                assert this.n_bits > 0
            }
            if (this.bits >> 31) == 0 {
                this.bits ~mod<<= 1
                this.n_bits -= 1
                break
            }
            this.bits ~mod<<= 1
            this.n_bits -= 1
            selector ~mod+= 1
            if selector >= this.num_huffman_codes {
                return "#bad block header"
            }
        }

        // Move to front.
        if selector == 0 {
            this.huffman_selectors[i] = this.mtft[0]
        } else {
            sel_ff = selector & 0xFF
            movee = this.mtft[sel_ff]
            this.mtft[1 .. 1 + sel_ff].copy_from_slice!(
                    s: this.mtft[.. sel_ff])
            this.mtft[0] = movee
            this.huffman_selectors[i] = movee
        }

        i += 1
    }

    // Read the Huffman codes.
    i = 0
    while i < this.num_huffman_codes {
        assert i < 6 via "a < b: a < c; c <= b"(c: this.num_huffman_codes)
        this.read_code_lengths?(src: args.src)
        status = this.build_huffman_tree!(which: i)
        if status.is_error() {
            return status
        }
        this.build_huffman_table!(which: i)
        i += 1
    }

    // Initialize the MTFT state.
    i = 0
    j = 0
    while i < 256 {
        if this.presence[i] <> 0 {
            this.mtft[j & 0xFF] = i as base.u8
            j ~mod+= 1
        }
        i += 1
    }

    // Initialize the letter counts.
    i = 0
    while i < 256 {
        this.letter_counts[i] = 0
        i += 1
    }
}

pri func decoder.read_code_lengths?(src: base.io_reader) {
    var c8          : base.u8
    var i           : base.u32
    var code_length : base.u32

    this.code_lengths_bitmask = 0

    // Read the 5-bit starting value.
    i = 0
    while i < 5 {
        if this.n_bits <= 0 {
            c8 = args.src.read_u8?()
            this.bits = (c8 as base.u32) << 24
            this.n_bits = 8
            assert this.n_bits > 0
        }
        code_length ~mod<<= 1
        code_length |= this.bits >> 31
        this.bits ~mod<<= 1
        this.n_bits -= 1
        i += 1
    }

    // Read the code lengths.
    i = 0
    while i < this.num_symbols {
        assert i < 258 via "a < b: a < c; c <= b"(c: this.num_symbols)
        while true,
                inv i < 258,
        {
            if (code_length < 1) or (20 < code_length) {
                return "#bad block header"
            }

            if this.n_bits <= 0 {
                c8 = args.src.read_u8?()
                this.bits = (c8 as base.u32) << 24
                this.n_bits = 8
                assert this.n_bits > 0
            }
            if (this.bits >> 31) == 0 {
                this.bits ~mod<<= 1
                this.n_bits -= 1
                break
            }
            this.bits ~mod<<= 1
            this.n_bits -= 1

            if this.n_bits <= 0 {
                c8 = args.src.read_u8?()
                this.bits = (c8 as base.u32) << 24
                this.n_bits = 8
                assert this.n_bits > 0
            }
            if (this.bits >> 31) == 0 {
                code_length ~mod+= 1
            } else {
                code_length ~mod-= 1
            }
            this.bits ~mod<<= 1
            this.n_bits -= 1
        }

        this.code_lengths_bitmask |= (1 as base.u32) << (code_length & 31)
        this.bwt[i] = code_length
        i += 1
    }
}

// build_huffman_tree builds a canonical Huffman tree given the symbols' code
// lengths. For the "abraca.txt.bz2" example, the code lengths are:
//  - symbol=0x301 (RUNA)  cl=3
//  - symbol=0x302 (RUNB)  cl=3
//  - symbol=0x201 (m01)   cl=2
//  - symbol=0x202 (m02)   cl=3
//  - symbol=0x203 (m03)   cl=2
//  - symbol=0x300 (EOB)   cl=3
//
// The bitstring mapping is:
//  - "00"   0x201 (m01)
//  - "01"   0x203 (m03)
//  - "100"  0x301 (RUNA)
//  - "101"  0x302 (RUNB)
//  - "110"  0x202 (m02)
//  - "111"  0x300 (EOB)
//
// The Huffman tree has 5 branch nodes (where 5+1 is both the number of leaf
// nodes and the number of symbols). Each branch node has two children,
// represented by a base.u16 value. 0x100 = 256 or less means that the child is
// a branch node. 0x201 ..= 0x2FF means an mNN leaf node. 0x300, 0x301 and
// 0x302 mean EOB, RUNA and RUNB leaf nodes.
//  - node0 = [0x001 (node1), 0x002 (node2)]
//  - node1 = [0x201 (m01)  , 0x203 (m03)  ]
//  - node2 = [0x003 (node3), 0x004 (node4)]
//  - node3 = [0x301 (RUNA) , 0x302 (RUNB) ]
//  - node4 = [0x202 (m02)  , 0x300 (EOB)  ]
//
// For example, the tree walk from node0 right (1) to node2 left (0) to node3
// left (0) to RUNA means that the RUNA bitstring is "100".
//
// The tree is built incrementally by considering symbols in increasing code
// length order, maintaining a stack of nodes that's the path from the root
// (node0) to the latest created-but-unfinished node. Created means that their
// left child is assigned (non-zero). Unfinished means that their right child
// is pending (zero). For example, after adding the 0x201, 0x203 and 0x301
// symbols, we would have this (in-progress) tree:
//  - node0 = [0x001 (node1), 0x002 (node2)]
//  - node1 = [0x201 (m01)  , 0x203 (m03)  ]
//  - node2 = [0x003 (node3), 0            ]
//  - node3 = [0x301 (RUNA) , 0            ]
//
// The stack would be [node0, node2, node3]. The next symbol would fill in the
// top of the stack, node3. If that symbol's code length matches the stack
// height (here, 3) then it would pop the stack. Otherwise it would push new
// nodes onto the stack until the stack height matched that code length.
pri func decoder.build_huffman_tree!(which: base.u32[..= 5]) base.status {
    var code_length      : base.u32
    var symbol_index     : base.u32
    var num_branch_nodes : base.u32[..= 257]
    var stack_height     : base.u32[..= 21]
    var stack_values     : array[21] base.u32[..= 256]
    var node_index       : base.u32[..= 256]
    var leaf_value       : base.u16

    // Push a root node.
    this.huffman_trees[args.which][0][0] = 0
    this.huffman_trees[args.which][0][1] = 0
    num_branch_nodes = 1
    stack_height = 1
    stack_values[0] = 0

    code_length = 1
    while code_length <= 20 {
        if (this.code_lengths_bitmask & ((1 as base.u32) << code_length)) == 0 {
            code_length += 1
            continue
        }
        symbol_index = 0
        while symbol_index < this.num_symbols,
                inv code_length <= 20,
        {
            assert symbol_index < 258 via "a < b: a < c; c <= b"(c: this.num_symbols)
            if this.bwt[symbol_index] <> code_length {
                symbol_index += 1
                continue
            }

            while true,
                    inv code_length <= 20,
                    inv symbol_index < 258,
                    post stack_height > 0,
            {
                if stack_height <= 0 {
                    return "#bad Huffman code (over-subscribed)"
                } else if stack_height >= code_length {
                    break
                }
                assert stack_height < 20 via "a < b: a < c; c <= b"(c: code_length)

                node_index = stack_values[stack_height - 1]
                if this.huffman_trees[args.which][node_index][0] == 0 {
                    this.huffman_trees[args.which][node_index][0] = num_branch_nodes as base.u16
                } else {
                    this.huffman_trees[args.which][node_index][1] = num_branch_nodes as base.u16
                }
                if num_branch_nodes >= 257 {
                    return "#bad Huffman code (under-subscribed)"
                }
                stack_values[stack_height] = num_branch_nodes
                this.huffman_trees[args.which][num_branch_nodes][0] = 0
                this.huffman_trees[args.which][num_branch_nodes][1] = 0
                num_branch_nodes += 1
                stack_height += 1
            }

            node_index = stack_values[stack_height - 1]
            if symbol_index < 2 {
                leaf_value = (0x301 + symbol_index) as base.u16
            } else if (symbol_index + 1) < this.num_symbols {
                leaf_value = (0x1FF + symbol_index) as base.u16
            } else {
                leaf_value = 0x300
            }

            if this.huffman_trees[args.which][node_index][0] == 0 {
                this.huffman_trees[args.which][node_index][0] = leaf_value
            } else {
                this.huffman_trees[args.which][node_index][1] = leaf_value
                stack_height -= 1
                while stack_height > 0,
                        inv code_length <= 20,
                        inv symbol_index < 258,
                {
                    node_index = stack_values[stack_height - 1]
                    if this.huffman_trees[args.which][node_index][1] == 0 {
                        break
                    }
                    stack_height -= 1
                }
            }

            symbol_index += 1
        }
        code_length += 1
    }

    if stack_height <> 0 {
        return "#bad Huffman code (under-subscribed)"
    }
    return ok
}

pri func decoder.build_huffman_table!(which: base.u32[..= 5]) {
    var i      : base.u32
    var bits   : base.u32
    var n_bits : base.u16[..= 8]
    var child  : base.u16

    while i < 256 {
        bits = i << 24
        n_bits = 0
        child = 0
        while (child < 257) and (n_bits < 8),
                inv i < 256,
        {
            child = this.huffman_trees[args.which][child][bits >> 31]
            bits ~mod<<= 1
            n_bits += 1
        }
        this.huffman_tables[args.which][i] = (child | (n_bits << 12)) as base.u16
        i += 1
    }
}

// invert_bwt performs "two passes over the data, and one pass over the
// alphabet", per the BWT technical report, except that the first data pass
// (accumulating this.letter_counts) is integrated into the decode_huffman_etc
// methods.
pri func decoder.invert_bwt!() {
    var i       : base.u32
    var letter  : base.u32[..= 255]
    var sum     : base.u32
    var old_sum : base.u32

    // Alphabet pass.
    sum = 0
    i = 0
    while i < 256 {
        old_sum = sum
        sum ~mod+= this.letter_counts[i]
        this.letter_counts[i] = old_sum
        i += 1
    }

    // Second data pass, but per the README.md file, calculate the U column
    // instead of the BWT technical report's T column.
    i = 0
    while i < this.block_size {
        assert i < 900000 via "a < b: a < c; c <= b"(c: this.block_size)
        letter = this.bwt[i] & 0xFF
        this.bwt[this.letter_counts[letter] & 1_048575] |= i << 12
        this.letter_counts[letter] ~mod+= 1
        i += 1
    }
}

// The table below was created by script/print-crc32-magic-numbers.go with the
// -reverse flag set.

pri const REV_CRC32_TABLE : roarray[256] base.u32 = [
        0x0000_0000, 0x04C1_1DB7, 0x0982_3B6E, 0x0D43_26D9, 0x1304_76DC, 0x17C5_6B6B, 0x1A86_4DB2, 0x1E47_5005,
        0x2608_EDB8, 0x22C9_F00F, 0x2F8A_D6D6, 0x2B4B_CB61, 0x350C_9B64, 0x31CD_86D3, 0x3C8E_A00A, 0x384F_BDBD,
        0x4C11_DB70, 0x48D0_C6C7, 0x4593_E01E, 0x4152_FDA9, 0x5F15_ADAC, 0x5BD4_B01B, 0x5697_96C2, 0x5256_8B75,
        0x6A19_36C8, 0x6ED8_2B7F, 0x639B_0DA6, 0x675A_1011, 0x791D_4014, 0x7DDC_5DA3, 0x709F_7B7A, 0x745E_66CD,
        0x9823_B6E0, 0x9CE2_AB57, 0x91A1_8D8E, 0x9560_9039, 0x8B27_C03C, 0x8FE6_DD8B, 0x82A5_FB52, 0x8664_E6E5,
        0xBE2B_5B58, 0xBAEA_46EF, 0xB7A9_6036, 0xB368_7D81, 0xAD2F_2D84, 0xA9EE_3033, 0xA4AD_16EA, 0xA06C_0B5D,
        0xD432_6D90, 0xD0F3_7027, 0xDDB0_56FE, 0xD971_4B49, 0xC736_1B4C, 0xC3F7_06FB, 0xCEB4_2022, 0xCA75_3D95,
        0xF23A_8028, 0xF6FB_9D9F, 0xFBB8_BB46, 0xFF79_A6F1, 0xE13E_F6F4, 0xE5FF_EB43, 0xE8BC_CD9A, 0xEC7D_D02D,
        0x3486_7077, 0x3047_6DC0, 0x3D04_4B19, 0x39C5_56AE, 0x2782_06AB, 0x2343_1B1C, 0x2E00_3DC5, 0x2AC1_2072,
        0x128E_9DCF, 0x164F_8078, 0x1B0C_A6A1, 0x1FCD_BB16, 0x018A_EB13, 0x054B_F6A4, 0x0808_D07D, 0x0CC9_CDCA,
        0x7897_AB07, 0x7C56_B6B0, 0x7115_9069, 0x75D4_8DDE, 0x6B93_DDDB, 0x6F52_C06C, 0x6211_E6B5, 0x66D0_FB02,
        0x5E9F_46BF, 0x5A5E_5B08, 0x571D_7DD1, 0x53DC_6066, 0x4D9B_3063, 0x495A_2DD4, 0x4419_0B0D, 0x40D8_16BA,
        0xACA5_C697, 0xA864_DB20, 0xA527_FDF9, 0xA1E6_E04E, 0xBFA1_B04B, 0xBB60_ADFC, 0xB623_8B25, 0xB2E2_9692,
        0x8AAD_2B2F, 0x8E6C_3698, 0x832F_1041, 0x87EE_0DF6, 0x99A9_5DF3, 0x9D68_4044, 0x902B_669D, 0x94EA_7B2A,
        0xE0B4_1DE7, 0xE475_0050, 0xE936_2689, 0xEDF7_3B3E, 0xF3B0_6B3B, 0xF771_768C, 0xFA32_5055, 0xFEF3_4DE2,
        0xC6BC_F05F, 0xC27D_EDE8, 0xCF3E_CB31, 0xCBFF_D686, 0xD5B8_8683, 0xD179_9B34, 0xDC3A_BDED, 0xD8FB_A05A,
        0x690C_E0EE, 0x6DCD_FD59, 0x608E_DB80, 0x644F_C637, 0x7A08_9632, 0x7EC9_8B85, 0x738A_AD5C, 0x774B_B0EB,
        0x4F04_0D56, 0x4BC5_10E1, 0x4686_3638, 0x4247_2B8F, 0x5C00_7B8A, 0x58C1_663D, 0x5582_40E4, 0x5143_5D53,
        0x251D_3B9E, 0x21DC_2629, 0x2C9F_00F0, 0x285E_1D47, 0x3619_4D42, 0x32D8_50F5, 0x3F9B_762C, 0x3B5A_6B9B,
        0x0315_D626, 0x07D4_CB91, 0x0A97_ED48, 0x0E56_F0FF, 0x1011_A0FA, 0x14D0_BD4D, 0x1993_9B94, 0x1D52_8623,
        0xF12F_560E, 0xF5EE_4BB9, 0xF8AD_6D60, 0xFC6C_70D7, 0xE22B_20D2, 0xE6EA_3D65, 0xEBA9_1BBC, 0xEF68_060B,
        0xD727_BBB6, 0xD3E6_A601, 0xDEA5_80D8, 0xDA64_9D6F, 0xC423_CD6A, 0xC0E2_D0DD, 0xCDA1_F604, 0xC960_EBB3,
        0xBD3E_8D7E, 0xB9FF_90C9, 0xB4BC_B610, 0xB07D_ABA7, 0xAE3A_FBA2, 0xAAFB_E615, 0xA7B8_C0CC, 0xA379_DD7B,
        0x9B36_60C6, 0x9FF7_7D71, 0x92B4_5BA8, 0x9675_461F, 0x8832_161A, 0x8CF3_0BAD, 0x81B0_2D74, 0x8571_30C3,
        0x5D8A_9099, 0x594B_8D2E, 0x5408_ABF7, 0x50C9_B640, 0x4E8E_E645, 0x4A4F_FBF2, 0x470C_DD2B, 0x43CD_C09C,
        0x7B82_7D21, 0x7F43_6096, 0x7200_464F, 0x76C1_5BF8, 0x6886_0BFD, 0x6C47_164A, 0x6104_3093, 0x65C5_2D24,
        0x119B_4BE9, 0x155A_565E, 0x1819_7087, 0x1CD8_6D30, 0x029F_3D35, 0x065E_2082, 0x0B1D_065B, 0x0FDC_1BEC,
        0x3793_A651, 0x3352_BBE6, 0x3E11_9D3F, 0x3AD0_8088, 0x2497_D08D, 0x2056_CD3A, 0x2D15_EBE3, 0x29D4_F654,
        0xC5A9_2679, 0xC168_3BCE, 0xCC2B_1D17, 0xC8EA_00A0, 0xD6AD_50A5, 0xD26C_4D12, 0xDF2F_6BCB, 0xDBEE_767C,
        0xE3A1_CBC1, 0xE760_D676, 0xEA23_F0AF, 0xEEE2_ED18, 0xF0A5_BD1D, 0xF464_A0AA, 0xF927_8673, 0xFDE6_9BC4,
        0x89B8_FD09, 0x8D79_E0BE, 0x803A_C667, 0x84FB_DBD0, 0x9ABC_8BD5, 0x9E7D_9662, 0x933E_B0BB, 0x97FF_AD0C,
        0xAFB0_10B1, 0xAB71_0D06, 0xA632_2BDF, 0xA2F3_3668, 0xBCB4_666D, 0xB875_7BDA, 0xB536_5D03, 0xB1F7_40B4,
]
