From ef753b76c3b7b595d6badfa6a44fe9d07b951be8 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 4 Oct 2025 22:18:04 -0500 Subject: [PATCH 1/3] make HuffmanDecoder class and add todos of things to optimize --- src/hpack/hpack.py | 11 ++++++++--- src/hpack/huffman_constants.py | 2 ++ src/hpack/huffman_table.py | 30 +++++++++++++++++++++++++++--- tests/test_huffman.py | 25 +++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 8 deletions(-) diff --git a/src/hpack/hpack.py b/src/hpack/hpack.py index caa018c..90f829a 100644 --- a/src/hpack/hpack.py +++ b/src/hpack/hpack.py @@ -9,7 +9,7 @@ from .exceptions import HPACKDecodingError, InvalidTableSizeError, OversizedHeaderListError from .huffman import HuffmanEncoder from .huffman_constants import REQUEST_CODES, REQUEST_CODES_LENGTH -from .huffman_table import decode_huffman +from .huffman_table import HuffmanDecoder from .struct import HeaderTuple, HeaderWeaklyTyped, NeverIndexedHeaderTuple from .table import HeaderTable, table_entry_size @@ -445,6 +445,11 @@ def __init__(self, max_header_list_size: int = DEFAULT_MAX_HEADER_LIST_SIZE) -> #: to confirm that it fits in this size. self.max_allowed_table_size = self.header_table.maxsize + + #: Threadsafe attribute allowing for multiple threads + #: to share one large huffman-table without extereme lagging. + self.decoder = HuffmanDecoder() + @property def header_table_size(self) -> int: """ @@ -614,7 +619,7 @@ def _decode_literal(self, data: bytes, should_index: bool) -> tuple[HeaderTuple, raise HPACKDecodingError(msg) if data[0] & 0x80: - name = decode_huffman(name) + name = self.decoder.decode(name) total_consumed = consumed + length + 1 # Since we moved forward 1. data = data[consumed + length:] @@ -627,7 +632,7 @@ def _decode_literal(self, data: bytes, should_index: bool) -> tuple[HeaderTuple, raise HPACKDecodingError(msg) if data[0] & 0x80: - value = decode_huffman(value) + value = self.decoder.decode(value) # Updated the total consumed length. total_consumed += length + consumed diff --git a/src/hpack/huffman_constants.py b/src/hpack/huffman_constants.py index 146ee79..429a372 100644 --- a/src/hpack/huffman_constants.py +++ b/src/hpack/huffman_constants.py @@ -4,6 +4,8 @@ """ # flake8: noqa +# TODO: Try Transforming these objects an array.arry objects for better speed since it's constant + REQUEST_CODES = [ 0x1ff8, 0x7fffd8, diff --git a/src/hpack/huffman_table.py b/src/hpack/huffman_table.py index d6b875a..f16e969 100644 --- a/src/hpack/huffman_table.py +++ b/src/hpack/huffman_table.py @@ -75,7 +75,9 @@ # This defines the state machine "class" at the top of the file. The reason we # do this is to keep the terrifing monster state table at the *bottom* of the # file so you don't have to actually *look* at the damn thing. -def decode_huffman(huffman_string: bytes | bytearray | None) -> bytes: + +# TODO: Move decode_huffman function to the new class object +def decode_huffman(huffman_string: bytes | bytearray | None, huffman_table:list[tuple[int, int, int]]) -> bytes: """ Given a bytestring of Huffman-encoded data for HPACK, returns a bytestring of the decompressed data. @@ -98,7 +100,7 @@ def decode_huffman(huffman_string: bytes | bytearray | None) -> bytes: # a bit longer, but that's ok. for input_byte in huffman_string: index = (state * 16) + (input_byte >> 4) - state, flags, output_byte = HUFFMAN_TABLE[index] + state, flags, output_byte = huffman_table[index] if flags & HUFFMAN_FAIL: msg = "Invalid Huffman string" @@ -108,7 +110,7 @@ def decode_huffman(huffman_string: bytes | bytearray | None) -> bytes: decoded_bytes.append(output_byte) index = (state * 16) + (input_byte & 0x0F) - state, flags, output_byte = HUFFMAN_TABLE[index] + state, flags, output_byte = huffman_table[index] if flags & HUFFMAN_FAIL: msg = "Invalid Huffman string" @@ -130,6 +132,9 @@ def decode_huffman(huffman_string: bytes | bytearray | None) -> bytes: HUFFMAN_FAIL = (1 << 2) # This is the monster table. Avert your eyes, children. + +# TODO: (Vizonex) Might transform this into a array.array object +# for better speed and less memory wasted. HUFFMAN_TABLE = [ # Node 0 (Root Node, never emits symbols.) (4, 0, 0), @@ -4739,3 +4744,22 @@ def decode_huffman(huffman_string: bytes | bytearray | None) -> bytes: (0, HUFFMAN_FAIL, 0), (0, HUFFMAN_FAIL, 0), ] + + +class HuffmanDecoder: + """Helps decode huffman-tables without needing to share + a large global variable accross multiple threads""" + def __init__( + self, + huffman_table:list[tuple[int, int, int]] = HUFFMAN_TABLE + ) -> None: + self.huffman_table = huffman_table + + def decode(self, bytes_to_decode: bytes | bytearray | None) -> bytes: + """ + Given a bytestring of Huffman-encoded data for HPACK, returns a bytestring of the decompressed data. + """ + # TODO: Move-Decode-Huffman function over to this function instead... + return decode_huffman(bytes_to_decode, self.huffman_table) + + diff --git a/tests/test_huffman.py b/tests/test_huffman.py index 0ea789f..c821111 100644 --- a/tests/test_huffman.py +++ b/tests/test_huffman.py @@ -1,7 +1,7 @@ from hpack import HPACKDecodingError from hpack.huffman import HuffmanEncoder from hpack.huffman_constants import REQUEST_CODES, REQUEST_CODES_LENGTH -from hpack.huffman_table import decode_huffman +from hpack.huffman_table import decode_huffman, HuffmanDecoder from hypothesis import given, example from hypothesis.strategies import binary @@ -38,7 +38,7 @@ class TestHuffmanDecoder: @example(b'\xff') @example(b'\x5f\xff\xff\xff\xff') @example(b'\x00\x3f\xff\xff\xff') - def test_huffman_decoder_properly_handles_all_bytestrings(self, data): + def test_huffman_decoder_properly_handles_all_bytestrings(self, data: bytes) -> None: """ When given random bytestrings, either we get HPACKDecodingError or we get a bytestring back. @@ -52,3 +52,24 @@ def test_huffman_decoder_properly_handles_all_bytestrings(self, data): result = b'' assert isinstance(result, bytes) + + @given(data=binary()) + @example(b'\xff') + @example(b'\x5f\xff\xff\xff\xff') + @example(b'\x00\x3f\xff\xff\xff') + def test_huffman_class_decoder_properly_handles_all_bytestrings(self, data:bytes) -> None: + """ + When given random bytestrings, either we get HPACKDecodingError or we + get a bytestring back. This new version attempts to do a better + job at being threadsafe and allowing mutliple threads to easily + share the workload under heavier conditions + """ + decoder = HuffmanDecoder() + try: + # will not be as fast as the other function because it isn't fully merged yet. + # This is still a draft and it's not fully merged yet... + result = decoder.decode(data) + except HPACKDecodingError: + result = b'' + + assert isinstance(result, bytes) From d3f8bf9d1abc735f4e9d40f18a90b65815240cc8 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 4 Oct 2025 22:30:58 -0500 Subject: [PATCH 2/3] fix default argument mistake with decode_huffman --- src/hpack/huffman_table.py | 101 ++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/src/hpack/huffman_table.py b/src/hpack/huffman_table.py index f16e969..7f0d91a 100644 --- a/src/hpack/huffman_table.py +++ b/src/hpack/huffman_table.py @@ -72,58 +72,7 @@ from .exceptions import HPACKDecodingError -# This defines the state machine "class" at the top of the file. The reason we -# do this is to keep the terrifing monster state table at the *bottom* of the -# file so you don't have to actually *look* at the damn thing. -# TODO: Move decode_huffman function to the new class object -def decode_huffman(huffman_string: bytes | bytearray | None, huffman_table:list[tuple[int, int, int]]) -> bytes: - """ - Given a bytestring of Huffman-encoded data for HPACK, returns a bytestring - of the decompressed data. - """ - if not huffman_string: - return b"" - - state = 0 - flags = 0 - decoded_bytes = bytearray() - - # Perversely, bytearrays are a lot more convenient across Python 2 and - # Python 3 because they behave *the same way* on both platforms. Given that - # we really do want numerical bytes when we iterate here, let's use a - # bytearray. - huffman_string = bytearray(huffman_string) - - # This loop is unrolled somewhat. Because we use a nibble, not a byte, we - # need to handle each nibble twice. We unroll that: it makes the loop body - # a bit longer, but that's ok. - for input_byte in huffman_string: - index = (state * 16) + (input_byte >> 4) - state, flags, output_byte = huffman_table[index] - - if flags & HUFFMAN_FAIL: - msg = "Invalid Huffman string" - raise HPACKDecodingError(msg) - - if flags & HUFFMAN_EMIT_SYMBOL: - decoded_bytes.append(output_byte) - - index = (state * 16) + (input_byte & 0x0F) - state, flags, output_byte = huffman_table[index] - - if flags & HUFFMAN_FAIL: - msg = "Invalid Huffman string" - raise HPACKDecodingError(msg) - - if flags & HUFFMAN_EMIT_SYMBOL: - decoded_bytes.append(output_byte) - - if not (flags & HUFFMAN_COMPLETE): - msg = "Incomplete Huffman string" - raise HPACKDecodingError(msg) - - return bytes(decoded_bytes) # Some decoder flags to control state transitions. @@ -4763,3 +4712,53 @@ def decode(self, bytes_to_decode: bytes | bytearray | None) -> bytes: return decode_huffman(bytes_to_decode, self.huffman_table) +# NOTE: Temporarly moving here until I merge it with decode above... + +# TODO: Move decode_huffman function to the new class object +def decode_huffman(huffman_string: bytes | bytearray | None, huffman_table:list[tuple[int, int, int]] = HUFFMAN_TABLE) -> bytes: + """ + Given a bytestring of Huffman-encoded data for HPACK, returns a bytestring + of the decompressed data. + """ + if not huffman_string: + return b"" + + state = 0 + flags = 0 + decoded_bytes = bytearray() + + # Perversely, bytearrays are a lot more convenient across Python 2 and + # Python 3 because they behave *the same way* on both platforms. Given that + # we really do want numerical bytes when we iterate here, let's use a + # bytearray. + huffman_string = bytearray(huffman_string) + + # This loop is unrolled somewhat. Because we use a nibble, not a byte, we + # need to handle each nibble twice. We unroll that: it makes the loop body + # a bit longer, but that's ok. + for input_byte in huffman_string: + index = (state * 16) + (input_byte >> 4) + state, flags, output_byte = huffman_table[index] + + if flags & HUFFMAN_FAIL: + msg = "Invalid Huffman string" + raise HPACKDecodingError(msg) + + if flags & HUFFMAN_EMIT_SYMBOL: + decoded_bytes.append(output_byte) + + index = (state * 16) + (input_byte & 0x0F) + state, flags, output_byte = huffman_table[index] + + if flags & HUFFMAN_FAIL: + msg = "Invalid Huffman string" + raise HPACKDecodingError(msg) + + if flags & HUFFMAN_EMIT_SYMBOL: + decoded_bytes.append(output_byte) + + if not (flags & HUFFMAN_COMPLETE): + msg = "Incomplete Huffman string" + raise HPACKDecodingError(msg) + + return bytes(decoded_bytes) \ No newline at end of file From c4874b14d9b2e98eb6810a6b41e20c506aa999c4 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 4 Oct 2025 22:49:40 -0500 Subject: [PATCH 3/3] add __slots__ to some variables and transform some objects to arrays to prevent performance regressions --- src/hpack/__init__.py | 1 + src/hpack/exceptions.py | 4 +- src/hpack/hpack.py | 49 +- src/hpack/huffman.py | 10 +- src/hpack/huffman_constants.py | 804 +++++++++++++++++++++------------ src/hpack/huffman_table.py | 278 +----------- src/hpack/struct.py | 1 + src/hpack/table.py | 133 +++--- 8 files changed, 642 insertions(+), 638 deletions(-) diff --git a/src/hpack/__init__.py b/src/hpack/__init__.py index f4c2d78..4294e9d 100644 --- a/src/hpack/__init__.py +++ b/src/hpack/__init__.py @@ -1,6 +1,7 @@ """ HTTP/2 header encoding for Python. """ + from __future__ import annotations from .exceptions import HPACKDecodingError, HPACKError, InvalidTableIndex, InvalidTableIndexError, InvalidTableSizeError, OversizedHeaderListError diff --git a/src/hpack/exceptions.py b/src/hpack/exceptions.py index 51f5083..fa386c2 100644 --- a/src/hpack/exceptions.py +++ b/src/hpack/exceptions.py @@ -1,6 +1,7 @@ """ Exceptions used in hpack. """ + from __future__ import annotations @@ -10,14 +11,12 @@ class HPACKError(Exception): """ - class HPACKDecodingError(HPACKError): """ An error has been encountered while performing HPACK decoding. """ - class InvalidTableIndexError(HPACKDecodingError): """ An invalid table index was received. @@ -25,6 +24,7 @@ class InvalidTableIndexError(HPACKDecodingError): .. versionadded:: 4.1.0 """ + class InvalidTableIndex(InvalidTableIndexError): # noqa: N818 """ An invalid table index was received. diff --git a/src/hpack/hpack.py b/src/hpack/hpack.py index 90f829a..6d8a87e 100644 --- a/src/hpack/hpack.py +++ b/src/hpack/hpack.py @@ -1,6 +1,7 @@ """ Implements the HPACK header compression algorithm as detailed by RFC 7541. """ + from __future__ import annotations import logging @@ -25,11 +26,11 @@ # Precompute 2^i for 1-8 for use in prefix calcs. # Zero index is not used but there to save a subtraction # as prefix numbers are not zero indexed. -_PREFIX_BIT_MAX_NUMBERS = [(2 ** i) - 1 for i in range(9)] +_PREFIX_BIT_MAX_NUMBERS = [(2**i) - 1 for i in range(9)] # We default the maximum header list we're willing to accept to 64kB. That's a # lot of headers, but if applications want to raise it they can do. -DEFAULT_MAX_HEADER_LIST_SIZE = 2 ** 16 +DEFAULT_MAX_HEADER_LIST_SIZE = 2**16 def _unicode_if_needed(header: HeaderWeaklyTyped, raw: bool) -> HeaderTuple: @@ -90,7 +91,7 @@ def decode_integer(data: bytes, prefix_bits: int) -> tuple[int, int]: max_number = _PREFIX_BIT_MAX_NUMBERS[prefix_bits] index = 1 shift = 0 - mask = (0xFF >> (8 - prefix_bits)) + mask = 0xFF >> (8 - prefix_bits) try: number = data[0] & mask @@ -115,8 +116,7 @@ def decode_integer(data: bytes, prefix_bits: int) -> tuple[int, int]: return number, index -def _dict_to_iterable(header_dict: dict[bytes | str, bytes | str]) \ - -> Iterable[tuple[bytes | str, bytes | str]]: +def _dict_to_iterable(header_dict: dict[bytes | str, bytes | str]) -> Iterable[tuple[bytes | str, bytes | str]]: """ Converts a dictionary to an iterable of key-value tuples. This is a HPACK-specific function because it pulls "special-headers" out first and @@ -152,10 +152,13 @@ class Encoder: HTTP/2 header blocks. """ + __slots__ = ("header_table", "huffman_coder", "table_size_changes") + def __init__(self) -> None: self.header_table = HeaderTable() self.huffman_coder = HuffmanEncoder( - REQUEST_CODES, REQUEST_CODES_LENGTH, + REQUEST_CODES, + REQUEST_CODES_LENGTH, ) self.table_size_changes: list[int] = [] @@ -172,13 +175,12 @@ def header_table_size(self, value: int) -> None: if self.header_table.resized: self.table_size_changes.append(value) - def encode(self, - headers: Iterable[\ - HeaderTuple | \ - tuple[bytes | str, bytes | str] | \ - tuple[bytes | str, bytes | str, bool | None]] | \ - dict[bytes | str, bytes | str], - huffman: bool = True) -> bytes: + def encode( + self, + headers: Iterable[HeaderTuple | tuple[bytes | str, bytes | str] | tuple[bytes | str, bytes | str, bool | None]] + | dict[bytes | str, bytes | str], + huffman: bool = True, + ) -> bytes: """ Takes a set of headers and encodes them into a HPACK-encoded header block. @@ -323,7 +325,10 @@ def add(self, to_add: tuple[bytes, bytes], sensitive: bool, huffman: bool = Fals # indexing since they just take space in the table and # pushed out other valuable headers. encoded = self._encode_indexed_literal( - index, value, indexbit, huffman, + index, + value, + indexbit, + huffman, ) if not sensitive: self.header_table.add(name, value) @@ -391,7 +396,8 @@ def _encode_table_size_change(self) -> bytes: b = encode_integer(size_bytes, 5) b[0] |= 0x20 block += bytes(b) - self.table_size_changes = [] + # use clear instead of adding a new reference + self.table_size_changes.clear() return block @@ -417,6 +423,12 @@ class Decoder: :type max_header_list_size: ``int`` """ + __slots__ = ( + "header_table", + "max_header_list_size", + "max_allowed_table_size", + "decoder" + ) def __init__(self, max_header_list_size: int = DEFAULT_MAX_HEADER_LIST_SIZE) -> None: self.header_table = HeaderTable() @@ -445,7 +457,6 @@ def __init__(self, max_header_list_size: int = DEFAULT_MAX_HEADER_LIST_SIZE) -> #: to confirm that it fits in this size. self.max_allowed_table_size = self.header_table.maxsize - #: Threadsafe attribute allowing for multiple threads #: to share one large huffman-table without extereme lagging. self.decoder = HuffmanDecoder() @@ -613,7 +624,7 @@ def _decode_literal(self, data: bytes, should_index: bool) -> tuple[HeaderTuple, data = data[1:] length, consumed = decode_integer(data, 7) - name = data[consumed:consumed + length] + name = data[consumed : consumed + length] if len(name) != length: msg = "Truncated header block" raise HPACKDecodingError(msg) @@ -622,11 +633,11 @@ def _decode_literal(self, data: bytes, should_index: bool) -> tuple[HeaderTuple, name = self.decoder.decode(name) total_consumed = consumed + length + 1 # Since we moved forward 1. - data = data[consumed + length:] + data = data[consumed + length :] # The header value is definitely length-based. length, consumed = decode_integer(data, 7) - value = data[consumed:consumed + length] + value = data[consumed : consumed + length] if len(value) != length: msg = "Truncated header block" raise HPACKDecodingError(msg) diff --git a/src/hpack/huffman.py b/src/hpack/huffman.py index f5b06c5..3df0cee 100644 --- a/src/hpack/huffman.py +++ b/src/hpack/huffman.py @@ -2,7 +2,9 @@ An implementation of a bitwise prefix tree specially built for decoding Huffman-coded content where we already know the Huffman table. """ + from __future__ import annotations +from array import array class HuffmanEncoder: @@ -11,7 +13,9 @@ class HuffmanEncoder: HPACK specification. """ - def __init__(self, huffman_code_list: list[int], huffman_code_list_lengths: list[int]) -> None: + __slots__ = ("huffman_code_list", "huffman_code_list_lengths") + + def __init__(self, huffman_code_list: array, huffman_code_list_lengths: array) -> None: self.huffman_code_list = huffman_code_list self.huffman_code_list_lengths = huffman_code_list_lengths @@ -32,9 +36,7 @@ def encode(self, bytes_to_encode: bytes | None) -> bytes: # handle this cleanly, just use a single giant integer. for byte in bytes_to_encode: bin_int_len = self.huffman_code_list_lengths[byte] - bin_int = self.huffman_code_list[byte] & ( - 2 ** (bin_int_len + 1) - 1 - ) + bin_int = self.huffman_code_list[byte] & (2 ** (bin_int_len + 1) - 1) final_num <<= bin_int_len final_num |= bin_int final_int_len += bin_int_len diff --git a/src/hpack/huffman_constants.py b/src/hpack/huffman_constants.py index 429a372..5100574 100644 --- a/src/hpack/huffman_constants.py +++ b/src/hpack/huffman_constants.py @@ -4,284 +4,532 @@ """ # flake8: noqa +from array import array + # TODO: Try Transforming these objects an array.arry objects for better speed since it's constant -REQUEST_CODES = [ - 0x1ff8, - 0x7fffd8, - 0xfffffe2, - 0xfffffe3, - 0xfffffe4, - 0xfffffe5, - 0xfffffe6, - 0xfffffe7, - 0xfffffe8, - 0xffffea, - 0x3ffffffc, - 0xfffffe9, - 0xfffffea, - 0x3ffffffd, - 0xfffffeb, - 0xfffffec, - 0xfffffed, - 0xfffffee, - 0xfffffef, - 0xffffff0, - 0xffffff1, - 0xffffff2, - 0x3ffffffe, - 0xffffff3, - 0xffffff4, - 0xffffff5, - 0xffffff6, - 0xffffff7, - 0xffffff8, - 0xffffff9, - 0xffffffa, - 0xffffffb, - 0x14, - 0x3f8, - 0x3f9, - 0xffa, - 0x1ff9, - 0x15, - 0xf8, - 0x7fa, - 0x3fa, - 0x3fb, - 0xf9, - 0x7fb, - 0xfa, - 0x16, - 0x17, - 0x18, - 0x0, - 0x1, - 0x2, - 0x19, - 0x1a, - 0x1b, - 0x1c, - 0x1d, - 0x1e, - 0x1f, - 0x5c, - 0xfb, - 0x7ffc, - 0x20, - 0xffb, - 0x3fc, - 0x1ffa, - 0x21, - 0x5d, - 0x5e, - 0x5f, - 0x60, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6a, - 0x6b, - 0x6c, - 0x6d, - 0x6e, - 0x6f, - 0x70, - 0x71, - 0x72, - 0xfc, - 0x73, - 0xfd, - 0x1ffb, - 0x7fff0, - 0x1ffc, - 0x3ffc, - 0x22, - 0x7ffd, - 0x3, - 0x23, - 0x4, - 0x24, - 0x5, - 0x25, - 0x26, - 0x27, - 0x6, - 0x74, - 0x75, - 0x28, - 0x29, - 0x2a, - 0x7, - 0x2b, - 0x76, - 0x2c, - 0x8, - 0x9, - 0x2d, - 0x77, - 0x78, - 0x79, - 0x7a, - 0x7b, - 0x7ffe, - 0x7fc, - 0x3ffd, - 0x1ffd, - 0xffffffc, - 0xfffe6, - 0x3fffd2, - 0xfffe7, - 0xfffe8, - 0x3fffd3, - 0x3fffd4, - 0x3fffd5, - 0x7fffd9, - 0x3fffd6, - 0x7fffda, - 0x7fffdb, - 0x7fffdc, - 0x7fffdd, - 0x7fffde, - 0xffffeb, - 0x7fffdf, - 0xffffec, - 0xffffed, - 0x3fffd7, - 0x7fffe0, - 0xffffee, - 0x7fffe1, - 0x7fffe2, - 0x7fffe3, - 0x7fffe4, - 0x1fffdc, - 0x3fffd8, - 0x7fffe5, - 0x3fffd9, - 0x7fffe6, - 0x7fffe7, - 0xffffef, - 0x3fffda, - 0x1fffdd, - 0xfffe9, - 0x3fffdb, - 0x3fffdc, - 0x7fffe8, - 0x7fffe9, - 0x1fffde, - 0x7fffea, - 0x3fffdd, - 0x3fffde, - 0xfffff0, - 0x1fffdf, - 0x3fffdf, - 0x7fffeb, - 0x7fffec, - 0x1fffe0, - 0x1fffe1, - 0x3fffe0, - 0x1fffe2, - 0x7fffed, - 0x3fffe1, - 0x7fffee, - 0x7fffef, - 0xfffea, - 0x3fffe2, - 0x3fffe3, - 0x3fffe4, - 0x7ffff0, - 0x3fffe5, - 0x3fffe6, - 0x7ffff1, - 0x3ffffe0, - 0x3ffffe1, - 0xfffeb, - 0x7fff1, - 0x3fffe7, - 0x7ffff2, - 0x3fffe8, - 0x1ffffec, - 0x3ffffe2, - 0x3ffffe3, - 0x3ffffe4, - 0x7ffffde, - 0x7ffffdf, - 0x3ffffe5, - 0xfffff1, - 0x1ffffed, - 0x7fff2, - 0x1fffe3, - 0x3ffffe6, - 0x7ffffe0, - 0x7ffffe1, - 0x3ffffe7, - 0x7ffffe2, - 0xfffff2, - 0x1fffe4, - 0x1fffe5, - 0x3ffffe8, - 0x3ffffe9, - 0xffffffd, - 0x7ffffe3, - 0x7ffffe4, - 0x7ffffe5, - 0xfffec, - 0xfffff3, - 0xfffed, - 0x1fffe6, - 0x3fffe9, - 0x1fffe7, - 0x1fffe8, - 0x7ffff3, - 0x3fffea, - 0x3fffeb, - 0x1ffffee, - 0x1ffffef, - 0xfffff4, - 0xfffff5, - 0x3ffffea, - 0x7ffff4, - 0x3ffffeb, - 0x7ffffe6, - 0x3ffffec, - 0x3ffffed, - 0x7ffffe7, - 0x7ffffe8, - 0x7ffffe9, - 0x7ffffea, - 0x7ffffeb, - 0xffffffe, - 0x7ffffec, - 0x7ffffed, - 0x7ffffee, - 0x7ffffef, - 0x7fffff0, - 0x3ffffee, - 0x3fffffff, -] +REQUEST_CODES = array( + "i", + [ + 0x1FF8, + 0x7FFFD8, + 0xFFFFFE2, + 0xFFFFFE3, + 0xFFFFFE4, + 0xFFFFFE5, + 0xFFFFFE6, + 0xFFFFFE7, + 0xFFFFFE8, + 0xFFFFEA, + 0x3FFFFFFC, + 0xFFFFFE9, + 0xFFFFFEA, + 0x3FFFFFFD, + 0xFFFFFEB, + 0xFFFFFEC, + 0xFFFFFED, + 0xFFFFFEE, + 0xFFFFFEF, + 0xFFFFFF0, + 0xFFFFFF1, + 0xFFFFFF2, + 0x3FFFFFFE, + 0xFFFFFF3, + 0xFFFFFF4, + 0xFFFFFF5, + 0xFFFFFF6, + 0xFFFFFF7, + 0xFFFFFF8, + 0xFFFFFF9, + 0xFFFFFFA, + 0xFFFFFFB, + 0x14, + 0x3F8, + 0x3F9, + 0xFFA, + 0x1FF9, + 0x15, + 0xF8, + 0x7FA, + 0x3FA, + 0x3FB, + 0xF9, + 0x7FB, + 0xFA, + 0x16, + 0x17, + 0x18, + 0x0, + 0x1, + 0x2, + 0x19, + 0x1A, + 0x1B, + 0x1C, + 0x1D, + 0x1E, + 0x1F, + 0x5C, + 0xFB, + 0x7FFC, + 0x20, + 0xFFB, + 0x3FC, + 0x1FFA, + 0x21, + 0x5D, + 0x5E, + 0x5F, + 0x60, + 0x61, + 0x62, + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6A, + 0x6B, + 0x6C, + 0x6D, + 0x6E, + 0x6F, + 0x70, + 0x71, + 0x72, + 0xFC, + 0x73, + 0xFD, + 0x1FFB, + 0x7FFF0, + 0x1FFC, + 0x3FFC, + 0x22, + 0x7FFD, + 0x3, + 0x23, + 0x4, + 0x24, + 0x5, + 0x25, + 0x26, + 0x27, + 0x6, + 0x74, + 0x75, + 0x28, + 0x29, + 0x2A, + 0x7, + 0x2B, + 0x76, + 0x2C, + 0x8, + 0x9, + 0x2D, + 0x77, + 0x78, + 0x79, + 0x7A, + 0x7B, + 0x7FFE, + 0x7FC, + 0x3FFD, + 0x1FFD, + 0xFFFFFFC, + 0xFFFE6, + 0x3FFFD2, + 0xFFFE7, + 0xFFFE8, + 0x3FFFD3, + 0x3FFFD4, + 0x3FFFD5, + 0x7FFFD9, + 0x3FFFD6, + 0x7FFFDA, + 0x7FFFDB, + 0x7FFFDC, + 0x7FFFDD, + 0x7FFFDE, + 0xFFFFEB, + 0x7FFFDF, + 0xFFFFEC, + 0xFFFFED, + 0x3FFFD7, + 0x7FFFE0, + 0xFFFFEE, + 0x7FFFE1, + 0x7FFFE2, + 0x7FFFE3, + 0x7FFFE4, + 0x1FFFDC, + 0x3FFFD8, + 0x7FFFE5, + 0x3FFFD9, + 0x7FFFE6, + 0x7FFFE7, + 0xFFFFEF, + 0x3FFFDA, + 0x1FFFDD, + 0xFFFE9, + 0x3FFFDB, + 0x3FFFDC, + 0x7FFFE8, + 0x7FFFE9, + 0x1FFFDE, + 0x7FFFEA, + 0x3FFFDD, + 0x3FFFDE, + 0xFFFFF0, + 0x1FFFDF, + 0x3FFFDF, + 0x7FFFEB, + 0x7FFFEC, + 0x1FFFE0, + 0x1FFFE1, + 0x3FFFE0, + 0x1FFFE2, + 0x7FFFED, + 0x3FFFE1, + 0x7FFFEE, + 0x7FFFEF, + 0xFFFEA, + 0x3FFFE2, + 0x3FFFE3, + 0x3FFFE4, + 0x7FFFF0, + 0x3FFFE5, + 0x3FFFE6, + 0x7FFFF1, + 0x3FFFFE0, + 0x3FFFFE1, + 0xFFFEB, + 0x7FFF1, + 0x3FFFE7, + 0x7FFFF2, + 0x3FFFE8, + 0x1FFFFEC, + 0x3FFFFE2, + 0x3FFFFE3, + 0x3FFFFE4, + 0x7FFFFDE, + 0x7FFFFDF, + 0x3FFFFE5, + 0xFFFFF1, + 0x1FFFFED, + 0x7FFF2, + 0x1FFFE3, + 0x3FFFFE6, + 0x7FFFFE0, + 0x7FFFFE1, + 0x3FFFFE7, + 0x7FFFFE2, + 0xFFFFF2, + 0x1FFFE4, + 0x1FFFE5, + 0x3FFFFE8, + 0x3FFFFE9, + 0xFFFFFFD, + 0x7FFFFE3, + 0x7FFFFE4, + 0x7FFFFE5, + 0xFFFEC, + 0xFFFFF3, + 0xFFFED, + 0x1FFFE6, + 0x3FFFE9, + 0x1FFFE7, + 0x1FFFE8, + 0x7FFFF3, + 0x3FFFEA, + 0x3FFFEB, + 0x1FFFFEE, + 0x1FFFFEF, + 0xFFFFF4, + 0xFFFFF5, + 0x3FFFFEA, + 0x7FFFF4, + 0x3FFFFEB, + 0x7FFFFE6, + 0x3FFFFEC, + 0x3FFFFED, + 0x7FFFFE7, + 0x7FFFFE8, + 0x7FFFFE9, + 0x7FFFFEA, + 0x7FFFFEB, + 0xFFFFFFE, + 0x7FFFFEC, + 0x7FFFFED, + 0x7FFFFEE, + 0x7FFFFEF, + 0x7FFFFF0, + 0x3FFFFEE, + 0x3FFFFFFF, + ], +) -REQUEST_CODES_LENGTH = [ - 13, 23, 28, 28, 28, 28, 28, 28, 28, 24, 30, 28, 28, 30, 28, 28, - 28, 28, 28, 28, 28, 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 6, 10, 10, 12, 13, 6, 8, 11, 10, 10, 8, 11, 8, 6, 6, 6, - 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 15, 6, 12, 10, - 13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 13, 19, 13, 14, 6, - 15, 5, 6, 5, 6, 5, 6, 6, 6, 5, 7, 7, 6, 6, 6, 5, - 6, 7, 6, 5, 5, 6, 7, 7, 7, 7, 7, 15, 11, 14, 13, 28, - 20, 22, 20, 20, 22, 22, 22, 23, 22, 23, 23, 23, 23, 23, 24, 23, - 24, 24, 22, 23, 24, 23, 23, 23, 23, 21, 22, 23, 22, 23, 23, 24, - 22, 21, 20, 22, 22, 23, 23, 21, 23, 22, 22, 24, 21, 22, 23, 23, - 21, 21, 22, 21, 23, 22, 23, 23, 20, 22, 22, 22, 23, 22, 22, 23, - 26, 26, 20, 19, 22, 23, 22, 25, 26, 26, 26, 27, 27, 26, 24, 25, - 19, 21, 26, 27, 27, 26, 27, 24, 21, 21, 26, 26, 28, 27, 27, 27, - 20, 24, 20, 21, 22, 21, 21, 23, 22, 22, 25, 25, 24, 24, 26, 23, - 26, 27, 26, 26, 27, 27, 27, 27, 27, 28, 27, 27, 27, 27, 27, 26, - 30, -] +REQUEST_CODES_LENGTH = array( + "B", + [ + 13, + 23, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 24, + 30, + 28, + 28, + 30, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 30, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 6, + 10, + 10, + 12, + 13, + 6, + 8, + 11, + 10, + 10, + 8, + 11, + 8, + 6, + 6, + 6, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7, + 8, + 15, + 6, + 12, + 10, + 13, + 6, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 8, + 7, + 8, + 13, + 19, + 13, + 14, + 6, + 15, + 5, + 6, + 5, + 6, + 5, + 6, + 6, + 6, + 5, + 7, + 7, + 6, + 6, + 6, + 5, + 6, + 7, + 6, + 5, + 5, + 6, + 7, + 7, + 7, + 7, + 7, + 15, + 11, + 14, + 13, + 28, + 20, + 22, + 20, + 20, + 22, + 22, + 22, + 23, + 22, + 23, + 23, + 23, + 23, + 23, + 24, + 23, + 24, + 24, + 22, + 23, + 24, + 23, + 23, + 23, + 23, + 21, + 22, + 23, + 22, + 23, + 23, + 24, + 22, + 21, + 20, + 22, + 22, + 23, + 23, + 21, + 23, + 22, + 22, + 24, + 21, + 22, + 23, + 23, + 21, + 21, + 22, + 21, + 23, + 22, + 23, + 23, + 20, + 22, + 22, + 22, + 23, + 22, + 22, + 23, + 26, + 26, + 20, + 19, + 22, + 23, + 22, + 25, + 26, + 26, + 26, + 27, + 27, + 26, + 24, + 25, + 19, + 21, + 26, + 27, + 27, + 26, + 27, + 24, + 21, + 21, + 26, + 26, + 28, + 27, + 27, + 27, + 20, + 24, + 20, + 21, + 22, + 21, + 21, + 23, + 22, + 22, + 25, + 25, + 24, + 24, + 26, + 23, + 26, + 27, + 26, + 26, + 27, + 27, + 27, + 27, + 27, + 28, + 27, + 27, + 27, + 27, + 27, + 26, + 30, + ], +) diff --git a/src/hpack/huffman_table.py b/src/hpack/huffman_table.py index 7f0d91a..9987745 100644 --- a/src/hpack/huffman_table.py +++ b/src/hpack/huffman_table.py @@ -67,22 +67,20 @@ loops at the Python-level is not too expensive. The total number of loop iterations is 4x the number of bytes passed to the decoder. """ + from __future__ import annotations from .exceptions import HPACKDecodingError - - - # Some decoder flags to control state transitions. HUFFMAN_COMPLETE = 1 -HUFFMAN_EMIT_SYMBOL = (1 << 1) -HUFFMAN_FAIL = (1 << 2) +HUFFMAN_EMIT_SYMBOL = 1 << 1 +HUFFMAN_FAIL = 1 << 2 # This is the monster table. Avert your eyes, children. -# TODO: (Vizonex) Might transform this into a array.array object +# TODO: (Vizonex) Might transform this into a array.array object # for better speed and less memory wasted. HUFFMAN_TABLE = [ # Node 0 (Root Node, never emits symbols.) @@ -102,7 +100,6 @@ (49, 0, 0), (57, 0, 0), (64, HUFFMAN_COMPLETE, 0), - # Node 1 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 48), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 49), @@ -120,7 +117,6 @@ (18, 0, 0), (20, 0, 0), (21, 0, 0), - # Node 2 (1, HUFFMAN_EMIT_SYMBOL, 48), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 48), @@ -138,7 +134,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 105), (1, HUFFMAN_EMIT_SYMBOL, 111), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 111), - # Node 3 (2, HUFFMAN_EMIT_SYMBOL, 48), (9, HUFFMAN_EMIT_SYMBOL, 48), @@ -156,7 +151,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 97), (23, HUFFMAN_EMIT_SYMBOL, 97), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 97), - # Node 4 (3, HUFFMAN_EMIT_SYMBOL, 48), (6, HUFFMAN_EMIT_SYMBOL, 48), @@ -174,7 +168,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 49), (41, HUFFMAN_EMIT_SYMBOL, 49), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 49), - # Node 5 (3, HUFFMAN_EMIT_SYMBOL, 50), (6, HUFFMAN_EMIT_SYMBOL, 50), @@ -192,7 +185,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 97), (41, HUFFMAN_EMIT_SYMBOL, 97), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 97), - # Node 6 (2, HUFFMAN_EMIT_SYMBOL, 99), (9, HUFFMAN_EMIT_SYMBOL, 99), @@ -210,7 +202,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 111), (23, HUFFMAN_EMIT_SYMBOL, 111), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 111), - # Node 7 (3, HUFFMAN_EMIT_SYMBOL, 99), (6, HUFFMAN_EMIT_SYMBOL, 99), @@ -228,7 +219,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 101), (41, HUFFMAN_EMIT_SYMBOL, 101), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 101), - # Node 8 (3, HUFFMAN_EMIT_SYMBOL, 105), (6, HUFFMAN_EMIT_SYMBOL, 105), @@ -246,7 +236,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 111), (41, HUFFMAN_EMIT_SYMBOL, 111), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 111), - # Node 9 (1, HUFFMAN_EMIT_SYMBOL, 115), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 115), @@ -264,7 +253,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 55), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 56), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 57), - # Node 10 (2, HUFFMAN_EMIT_SYMBOL, 115), (9, HUFFMAN_EMIT_SYMBOL, 115), @@ -282,7 +270,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 45), (1, HUFFMAN_EMIT_SYMBOL, 46), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 46), - # Node 11 (3, HUFFMAN_EMIT_SYMBOL, 115), (6, HUFFMAN_EMIT_SYMBOL, 115), @@ -300,7 +287,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 116), (41, HUFFMAN_EMIT_SYMBOL, 116), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 116), - # Node 12 (2, HUFFMAN_EMIT_SYMBOL, 32), (9, HUFFMAN_EMIT_SYMBOL, 32), @@ -318,7 +304,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 46), (23, HUFFMAN_EMIT_SYMBOL, 46), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 46), - # Node 13 (3, HUFFMAN_EMIT_SYMBOL, 32), (6, HUFFMAN_EMIT_SYMBOL, 32), @@ -336,7 +321,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 37), (41, HUFFMAN_EMIT_SYMBOL, 37), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 37), - # Node 14 (3, HUFFMAN_EMIT_SYMBOL, 45), (6, HUFFMAN_EMIT_SYMBOL, 45), @@ -354,7 +338,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 46), (41, HUFFMAN_EMIT_SYMBOL, 46), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 46), - # Node 15 (1, HUFFMAN_EMIT_SYMBOL, 47), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 47), @@ -372,7 +355,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 56), (1, HUFFMAN_EMIT_SYMBOL, 57), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 57), - # Node 16 (2, HUFFMAN_EMIT_SYMBOL, 47), (9, HUFFMAN_EMIT_SYMBOL, 47), @@ -390,7 +372,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 53), (23, HUFFMAN_EMIT_SYMBOL, 53), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 53), - # Node 17 (3, HUFFMAN_EMIT_SYMBOL, 47), (6, HUFFMAN_EMIT_SYMBOL, 47), @@ -408,7 +389,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 51), (41, HUFFMAN_EMIT_SYMBOL, 51), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 51), - # Node 18 (3, HUFFMAN_EMIT_SYMBOL, 52), (6, HUFFMAN_EMIT_SYMBOL, 52), @@ -426,7 +406,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 53), (41, HUFFMAN_EMIT_SYMBOL, 53), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 53), - # Node 19 (2, HUFFMAN_EMIT_SYMBOL, 54), (9, HUFFMAN_EMIT_SYMBOL, 54), @@ -444,7 +423,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 57), (23, HUFFMAN_EMIT_SYMBOL, 57), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 57), - # Node 20 (3, HUFFMAN_EMIT_SYMBOL, 54), (6, HUFFMAN_EMIT_SYMBOL, 54), @@ -462,7 +440,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 55), (41, HUFFMAN_EMIT_SYMBOL, 55), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 55), - # Node 21 (3, HUFFMAN_EMIT_SYMBOL, 56), (6, HUFFMAN_EMIT_SYMBOL, 56), @@ -480,7 +457,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 57), (41, HUFFMAN_EMIT_SYMBOL, 57), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 57), - # Node 22 (26, 0, 0), (27, 0, 0), @@ -498,7 +474,6 @@ (61, 0, 0), (65, 0, 0), (68, HUFFMAN_COMPLETE, 0), - # Node 23 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 61), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 65), @@ -516,7 +491,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 117), (38, 0, 0), (39, 0, 0), - # Node 24 (1, HUFFMAN_EMIT_SYMBOL, 61), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 61), @@ -534,7 +508,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 103), (1, HUFFMAN_EMIT_SYMBOL, 104), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 104), - # Node 25 (2, HUFFMAN_EMIT_SYMBOL, 61), (9, HUFFMAN_EMIT_SYMBOL, 61), @@ -552,7 +525,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 98), (23, HUFFMAN_EMIT_SYMBOL, 98), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 98), - # Node 26 (3, HUFFMAN_EMIT_SYMBOL, 61), (6, HUFFMAN_EMIT_SYMBOL, 61), @@ -570,7 +542,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 65), (41, HUFFMAN_EMIT_SYMBOL, 65), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 65), - # Node 27 (3, HUFFMAN_EMIT_SYMBOL, 95), (6, HUFFMAN_EMIT_SYMBOL, 95), @@ -588,7 +559,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 98), (41, HUFFMAN_EMIT_SYMBOL, 98), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 98), - # Node 28 (2, HUFFMAN_EMIT_SYMBOL, 100), (9, HUFFMAN_EMIT_SYMBOL, 100), @@ -606,7 +576,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 104), (23, HUFFMAN_EMIT_SYMBOL, 104), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 104), - # Node 29 (3, HUFFMAN_EMIT_SYMBOL, 100), (6, HUFFMAN_EMIT_SYMBOL, 100), @@ -624,7 +593,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 102), (41, HUFFMAN_EMIT_SYMBOL, 102), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 102), - # Node 30 (3, HUFFMAN_EMIT_SYMBOL, 103), (6, HUFFMAN_EMIT_SYMBOL, 103), @@ -642,7 +610,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 104), (41, HUFFMAN_EMIT_SYMBOL, 104), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 104), - # Node 31 (1, HUFFMAN_EMIT_SYMBOL, 108), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 108), @@ -660,7 +627,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 66), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 67), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 68), - # Node 32 (2, HUFFMAN_EMIT_SYMBOL, 108), (9, HUFFMAN_EMIT_SYMBOL, 108), @@ -678,7 +644,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 112), (23, HUFFMAN_EMIT_SYMBOL, 112), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 112), - # Node 33 (3, HUFFMAN_EMIT_SYMBOL, 108), (6, HUFFMAN_EMIT_SYMBOL, 108), @@ -696,7 +661,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 109), (41, HUFFMAN_EMIT_SYMBOL, 109), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 109), - # Node 34 (3, HUFFMAN_EMIT_SYMBOL, 110), (6, HUFFMAN_EMIT_SYMBOL, 110), @@ -714,7 +678,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 112), (41, HUFFMAN_EMIT_SYMBOL, 112), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 112), - # Node 35 (2, HUFFMAN_EMIT_SYMBOL, 114), (9, HUFFMAN_EMIT_SYMBOL, 114), @@ -732,7 +695,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 67), (1, HUFFMAN_EMIT_SYMBOL, 68), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 68), - # Node 36 (3, HUFFMAN_EMIT_SYMBOL, 114), (6, HUFFMAN_EMIT_SYMBOL, 114), @@ -750,7 +712,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 117), (41, HUFFMAN_EMIT_SYMBOL, 117), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 117), - # Node 37 (2, HUFFMAN_EMIT_SYMBOL, 58), (9, HUFFMAN_EMIT_SYMBOL, 58), @@ -768,7 +729,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 68), (23, HUFFMAN_EMIT_SYMBOL, 68), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 68), - # Node 38 (3, HUFFMAN_EMIT_SYMBOL, 58), (6, HUFFMAN_EMIT_SYMBOL, 58), @@ -786,7 +746,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 66), (41, HUFFMAN_EMIT_SYMBOL, 66), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 66), - # Node 39 (3, HUFFMAN_EMIT_SYMBOL, 67), (6, HUFFMAN_EMIT_SYMBOL, 67), @@ -804,7 +763,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 68), (41, HUFFMAN_EMIT_SYMBOL, 68), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 68), - # Node 40 (44, 0, 0), (45, 0, 0), @@ -822,7 +780,6 @@ (67, 0, 0), (69, 0, 0), (72, HUFFMAN_COMPLETE, 0), - # Node 41 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 69), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 70), @@ -840,7 +797,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 82), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 83), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 84), - # Node 42 (1, HUFFMAN_EMIT_SYMBOL, 69), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 69), @@ -858,7 +814,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 75), (1, HUFFMAN_EMIT_SYMBOL, 76), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 76), - # Node 43 (2, HUFFMAN_EMIT_SYMBOL, 69), (9, HUFFMAN_EMIT_SYMBOL, 69), @@ -876,7 +831,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 72), (23, HUFFMAN_EMIT_SYMBOL, 72), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 72), - # Node 44 (3, HUFFMAN_EMIT_SYMBOL, 69), (6, HUFFMAN_EMIT_SYMBOL, 69), @@ -894,7 +848,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 70), (41, HUFFMAN_EMIT_SYMBOL, 70), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 70), - # Node 45 (3, HUFFMAN_EMIT_SYMBOL, 71), (6, HUFFMAN_EMIT_SYMBOL, 71), @@ -912,7 +865,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 72), (41, HUFFMAN_EMIT_SYMBOL, 72), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 72), - # Node 46 (2, HUFFMAN_EMIT_SYMBOL, 73), (9, HUFFMAN_EMIT_SYMBOL, 73), @@ -930,7 +882,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 76), (23, HUFFMAN_EMIT_SYMBOL, 76), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 76), - # Node 47 (3, HUFFMAN_EMIT_SYMBOL, 73), (6, HUFFMAN_EMIT_SYMBOL, 73), @@ -948,7 +899,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 74), (41, HUFFMAN_EMIT_SYMBOL, 74), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 74), - # Node 48 (3, HUFFMAN_EMIT_SYMBOL, 75), (6, HUFFMAN_EMIT_SYMBOL, 75), @@ -966,7 +916,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 76), (41, HUFFMAN_EMIT_SYMBOL, 76), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 76), - # Node 49 (1, HUFFMAN_EMIT_SYMBOL, 77), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 77), @@ -984,7 +933,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 83), (1, HUFFMAN_EMIT_SYMBOL, 84), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 84), - # Node 50 (2, HUFFMAN_EMIT_SYMBOL, 77), (9, HUFFMAN_EMIT_SYMBOL, 77), @@ -1002,7 +950,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 80), (23, HUFFMAN_EMIT_SYMBOL, 80), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 80), - # Node 51 (3, HUFFMAN_EMIT_SYMBOL, 77), (6, HUFFMAN_EMIT_SYMBOL, 77), @@ -1020,7 +967,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 78), (41, HUFFMAN_EMIT_SYMBOL, 78), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 78), - # Node 52 (3, HUFFMAN_EMIT_SYMBOL, 79), (6, HUFFMAN_EMIT_SYMBOL, 79), @@ -1038,7 +984,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 80), (41, HUFFMAN_EMIT_SYMBOL, 80), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 80), - # Node 53 (2, HUFFMAN_EMIT_SYMBOL, 81), (9, HUFFMAN_EMIT_SYMBOL, 81), @@ -1056,7 +1001,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 84), (23, HUFFMAN_EMIT_SYMBOL, 84), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 84), - # Node 54 (3, HUFFMAN_EMIT_SYMBOL, 81), (6, HUFFMAN_EMIT_SYMBOL, 81), @@ -1074,7 +1018,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 82), (41, HUFFMAN_EMIT_SYMBOL, 82), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 82), - # Node 55 (3, HUFFMAN_EMIT_SYMBOL, 83), (6, HUFFMAN_EMIT_SYMBOL, 83), @@ -1092,7 +1035,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 84), (41, HUFFMAN_EMIT_SYMBOL, 84), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 84), - # Node 56 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 85), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 86), @@ -1110,7 +1052,6 @@ (71, 0, 0), (73, 0, 0), (74, HUFFMAN_COMPLETE, 0), - # Node 57 (1, HUFFMAN_EMIT_SYMBOL, 85), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 85), @@ -1128,7 +1069,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 113), (1, HUFFMAN_EMIT_SYMBOL, 118), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 118), - # Node 58 (2, HUFFMAN_EMIT_SYMBOL, 85), (9, HUFFMAN_EMIT_SYMBOL, 85), @@ -1146,7 +1086,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 89), (23, HUFFMAN_EMIT_SYMBOL, 89), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 89), - # Node 59 (3, HUFFMAN_EMIT_SYMBOL, 85), (6, HUFFMAN_EMIT_SYMBOL, 85), @@ -1164,7 +1103,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 86), (41, HUFFMAN_EMIT_SYMBOL, 86), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 86), - # Node 60 (3, HUFFMAN_EMIT_SYMBOL, 87), (6, HUFFMAN_EMIT_SYMBOL, 87), @@ -1182,7 +1120,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 89), (41, HUFFMAN_EMIT_SYMBOL, 89), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 89), - # Node 61 (2, HUFFMAN_EMIT_SYMBOL, 106), (9, HUFFMAN_EMIT_SYMBOL, 106), @@ -1200,7 +1137,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 118), (23, HUFFMAN_EMIT_SYMBOL, 118), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 118), - # Node 62 (3, HUFFMAN_EMIT_SYMBOL, 106), (6, HUFFMAN_EMIT_SYMBOL, 106), @@ -1218,7 +1154,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 107), (41, HUFFMAN_EMIT_SYMBOL, 107), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 107), - # Node 63 (3, HUFFMAN_EMIT_SYMBOL, 113), (6, HUFFMAN_EMIT_SYMBOL, 113), @@ -1236,7 +1171,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 118), (41, HUFFMAN_EMIT_SYMBOL, 118), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 118), - # Node 64 (1, HUFFMAN_EMIT_SYMBOL, 119), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 119), @@ -1254,7 +1188,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 90), (75, 0, 0), (78, 0, 0), - # Node 65 (2, HUFFMAN_EMIT_SYMBOL, 119), (9, HUFFMAN_EMIT_SYMBOL, 119), @@ -1272,7 +1205,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 122), (23, HUFFMAN_EMIT_SYMBOL, 122), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 122), - # Node 66 (3, HUFFMAN_EMIT_SYMBOL, 119), (6, HUFFMAN_EMIT_SYMBOL, 119), @@ -1290,7 +1222,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 120), (41, HUFFMAN_EMIT_SYMBOL, 120), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 120), - # Node 67 (3, HUFFMAN_EMIT_SYMBOL, 121), (6, HUFFMAN_EMIT_SYMBOL, 121), @@ -1308,7 +1239,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 122), (41, HUFFMAN_EMIT_SYMBOL, 122), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 122), - # Node 68 (1, HUFFMAN_EMIT_SYMBOL, 38), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 38), @@ -1326,7 +1256,6 @@ (77, 0, 0), (79, 0, 0), (81, 0, 0), - # Node 69 (2, HUFFMAN_EMIT_SYMBOL, 38), (9, HUFFMAN_EMIT_SYMBOL, 38), @@ -1344,7 +1273,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 59), (23, HUFFMAN_EMIT_SYMBOL, 59), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 59), - # Node 70 (3, HUFFMAN_EMIT_SYMBOL, 38), (6, HUFFMAN_EMIT_SYMBOL, 38), @@ -1362,7 +1290,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 42), (41, HUFFMAN_EMIT_SYMBOL, 42), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 42), - # Node 71 (3, HUFFMAN_EMIT_SYMBOL, 44), (6, HUFFMAN_EMIT_SYMBOL, 44), @@ -1380,7 +1307,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 59), (41, HUFFMAN_EMIT_SYMBOL, 59), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 59), - # Node 72 (2, HUFFMAN_EMIT_SYMBOL, 88), (9, HUFFMAN_EMIT_SYMBOL, 88), @@ -1398,7 +1324,6 @@ (80, 0, 0), (82, 0, 0), (84, 0, 0), - # Node 73 (3, HUFFMAN_EMIT_SYMBOL, 88), (6, HUFFMAN_EMIT_SYMBOL, 88), @@ -1416,7 +1341,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 90), (41, HUFFMAN_EMIT_SYMBOL, 90), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 90), - # Node 74 (1, HUFFMAN_EMIT_SYMBOL, 33), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 33), @@ -1434,7 +1358,6 @@ (83, 0, 0), (85, 0, 0), (88, 0, 0), - # Node 75 (2, HUFFMAN_EMIT_SYMBOL, 33), (9, HUFFMAN_EMIT_SYMBOL, 33), @@ -1452,7 +1375,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 41), (23, HUFFMAN_EMIT_SYMBOL, 41), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 41), - # Node 76 (3, HUFFMAN_EMIT_SYMBOL, 33), (6, HUFFMAN_EMIT_SYMBOL, 33), @@ -1470,7 +1392,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 34), (41, HUFFMAN_EMIT_SYMBOL, 34), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 34), - # Node 77 (3, HUFFMAN_EMIT_SYMBOL, 40), (6, HUFFMAN_EMIT_SYMBOL, 40), @@ -1488,7 +1409,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 41), (41, HUFFMAN_EMIT_SYMBOL, 41), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 41), - # Node 78 (2, HUFFMAN_EMIT_SYMBOL, 63), (9, HUFFMAN_EMIT_SYMBOL, 63), @@ -1506,7 +1426,6 @@ (87, 0, 0), (89, 0, 0), (90, 0, 0), - # Node 79 (3, HUFFMAN_EMIT_SYMBOL, 63), (6, HUFFMAN_EMIT_SYMBOL, 63), @@ -1524,7 +1443,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 43), (23, HUFFMAN_EMIT_SYMBOL, 43), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 43), - # Node 80 (3, HUFFMAN_EMIT_SYMBOL, 39), (6, HUFFMAN_EMIT_SYMBOL, 39), @@ -1542,7 +1460,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 43), (41, HUFFMAN_EMIT_SYMBOL, 43), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 43), - # Node 81 (2, HUFFMAN_EMIT_SYMBOL, 124), (9, HUFFMAN_EMIT_SYMBOL, 124), @@ -1560,7 +1477,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 126), (91, 0, 0), (92, 0, 0), - # Node 82 (3, HUFFMAN_EMIT_SYMBOL, 124), (6, HUFFMAN_EMIT_SYMBOL, 124), @@ -1578,7 +1494,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 62), (23, HUFFMAN_EMIT_SYMBOL, 62), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 62), - # Node 83 (3, HUFFMAN_EMIT_SYMBOL, 35), (6, HUFFMAN_EMIT_SYMBOL, 35), @@ -1596,7 +1511,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 62), (41, HUFFMAN_EMIT_SYMBOL, 62), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 62), - # Node 84 (1, HUFFMAN_EMIT_SYMBOL, 0), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 0), @@ -1614,7 +1528,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 125), (93, 0, 0), (94, 0, 0), - # Node 85 (2, HUFFMAN_EMIT_SYMBOL, 0), (9, HUFFMAN_EMIT_SYMBOL, 0), @@ -1632,7 +1545,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 91), (23, HUFFMAN_EMIT_SYMBOL, 91), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 91), - # Node 86 (3, HUFFMAN_EMIT_SYMBOL, 0), (6, HUFFMAN_EMIT_SYMBOL, 0), @@ -1650,7 +1562,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 36), (41, HUFFMAN_EMIT_SYMBOL, 36), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 36), - # Node 87 (3, HUFFMAN_EMIT_SYMBOL, 64), (6, HUFFMAN_EMIT_SYMBOL, 64), @@ -1668,7 +1579,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 91), (41, HUFFMAN_EMIT_SYMBOL, 91), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 91), - # Node 88 (2, HUFFMAN_EMIT_SYMBOL, 93), (9, HUFFMAN_EMIT_SYMBOL, 93), @@ -1686,7 +1596,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 96), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 123), (95, 0, 0), - # Node 89 (3, HUFFMAN_EMIT_SYMBOL, 93), (6, HUFFMAN_EMIT_SYMBOL, 93), @@ -1704,7 +1613,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 126), (41, HUFFMAN_EMIT_SYMBOL, 126), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 126), - # Node 90 (2, HUFFMAN_EMIT_SYMBOL, 94), (9, HUFFMAN_EMIT_SYMBOL, 94), @@ -1722,7 +1630,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 123), (96, 0, 0), (110, 0, 0), - # Node 91 (3, HUFFMAN_EMIT_SYMBOL, 94), (6, HUFFMAN_EMIT_SYMBOL, 94), @@ -1740,7 +1647,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 125), (41, HUFFMAN_EMIT_SYMBOL, 125), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 125), - # Node 92 (2, HUFFMAN_EMIT_SYMBOL, 60), (9, HUFFMAN_EMIT_SYMBOL, 60), @@ -1758,7 +1664,6 @@ (101, 0, 0), (111, 0, 0), (133, 0, 0), - # Node 93 (3, HUFFMAN_EMIT_SYMBOL, 60), (6, HUFFMAN_EMIT_SYMBOL, 60), @@ -1776,7 +1681,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 96), (41, HUFFMAN_EMIT_SYMBOL, 96), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 96), - # Node 94 (3, HUFFMAN_EMIT_SYMBOL, 123), (6, HUFFMAN_EMIT_SYMBOL, 123), @@ -1794,7 +1698,6 @@ (119, 0, 0), (134, 0, 0), (153, 0, 0), - # Node 95 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 92), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 195), @@ -1812,7 +1715,6 @@ (142, 0, 0), (154, 0, 0), (169, 0, 0), - # Node 96 (1, HUFFMAN_EMIT_SYMBOL, 92), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 92), @@ -1830,7 +1732,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 226), (108, 0, 0), (109, 0, 0), - # Node 97 (2, HUFFMAN_EMIT_SYMBOL, 92), (9, HUFFMAN_EMIT_SYMBOL, 92), @@ -1848,7 +1749,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 128), (1, HUFFMAN_EMIT_SYMBOL, 130), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 130), - # Node 98 (3, HUFFMAN_EMIT_SYMBOL, 92), (6, HUFFMAN_EMIT_SYMBOL, 92), @@ -1866,7 +1766,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 195), (41, HUFFMAN_EMIT_SYMBOL, 195), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 195), - # Node 99 (3, HUFFMAN_EMIT_SYMBOL, 208), (6, HUFFMAN_EMIT_SYMBOL, 208), @@ -1884,7 +1783,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 130), (23, HUFFMAN_EMIT_SYMBOL, 130), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 130), - # Node 100 (3, HUFFMAN_EMIT_SYMBOL, 128), (6, HUFFMAN_EMIT_SYMBOL, 128), @@ -1902,7 +1800,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 130), (41, HUFFMAN_EMIT_SYMBOL, 130), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 130), - # Node 101 (1, HUFFMAN_EMIT_SYMBOL, 131), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 131), @@ -1920,7 +1817,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 161), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 167), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 172), - # Node 102 (2, HUFFMAN_EMIT_SYMBOL, 131), (9, HUFFMAN_EMIT_SYMBOL, 131), @@ -1938,7 +1834,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 194), (23, HUFFMAN_EMIT_SYMBOL, 194), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 194), - # Node 103 (3, HUFFMAN_EMIT_SYMBOL, 131), (6, HUFFMAN_EMIT_SYMBOL, 131), @@ -1956,7 +1851,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 162), (41, HUFFMAN_EMIT_SYMBOL, 162), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 162), - # Node 104 (3, HUFFMAN_EMIT_SYMBOL, 184), (6, HUFFMAN_EMIT_SYMBOL, 184), @@ -1974,7 +1868,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 194), (41, HUFFMAN_EMIT_SYMBOL, 194), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 194), - # Node 105 (2, HUFFMAN_EMIT_SYMBOL, 224), (9, HUFFMAN_EMIT_SYMBOL, 224), @@ -1992,7 +1885,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 167), (1, HUFFMAN_EMIT_SYMBOL, 172), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 172), - # Node 106 (3, HUFFMAN_EMIT_SYMBOL, 224), (6, HUFFMAN_EMIT_SYMBOL, 224), @@ -2010,7 +1902,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 226), (41, HUFFMAN_EMIT_SYMBOL, 226), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 226), - # Node 107 (2, HUFFMAN_EMIT_SYMBOL, 153), (9, HUFFMAN_EMIT_SYMBOL, 153), @@ -2028,7 +1919,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 172), (23, HUFFMAN_EMIT_SYMBOL, 172), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 172), - # Node 108 (3, HUFFMAN_EMIT_SYMBOL, 153), (6, HUFFMAN_EMIT_SYMBOL, 153), @@ -2046,7 +1936,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 161), (41, HUFFMAN_EMIT_SYMBOL, 161), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 161), - # Node 109 (3, HUFFMAN_EMIT_SYMBOL, 167), (6, HUFFMAN_EMIT_SYMBOL, 167), @@ -2064,7 +1953,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 172), (41, HUFFMAN_EMIT_SYMBOL, 172), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 172), - # Node 110 (114, 0, 0), (115, 0, 0), @@ -2082,7 +1970,6 @@ (162, 0, 0), (170, 0, 0), (180, 0, 0), - # Node 111 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 176), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 177), @@ -2100,7 +1987,6 @@ (129, 0, 0), (131, 0, 0), (132, 0, 0), - # Node 112 (1, HUFFMAN_EMIT_SYMBOL, 176), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 176), @@ -2118,7 +2004,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 227), (1, HUFFMAN_EMIT_SYMBOL, 229), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 229), - # Node 113 (2, HUFFMAN_EMIT_SYMBOL, 176), (9, HUFFMAN_EMIT_SYMBOL, 176), @@ -2136,7 +2021,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 209), (23, HUFFMAN_EMIT_SYMBOL, 209), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 209), - # Node 114 (3, HUFFMAN_EMIT_SYMBOL, 176), (6, HUFFMAN_EMIT_SYMBOL, 176), @@ -2154,7 +2038,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 177), (41, HUFFMAN_EMIT_SYMBOL, 177), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 177), - # Node 115 (3, HUFFMAN_EMIT_SYMBOL, 179), (6, HUFFMAN_EMIT_SYMBOL, 179), @@ -2172,7 +2055,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 209), (41, HUFFMAN_EMIT_SYMBOL, 209), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 209), - # Node 116 (2, HUFFMAN_EMIT_SYMBOL, 216), (9, HUFFMAN_EMIT_SYMBOL, 216), @@ -2190,7 +2072,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 229), (23, HUFFMAN_EMIT_SYMBOL, 229), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 229), - # Node 117 (3, HUFFMAN_EMIT_SYMBOL, 216), (6, HUFFMAN_EMIT_SYMBOL, 216), @@ -2208,7 +2089,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 217), (41, HUFFMAN_EMIT_SYMBOL, 217), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 217), - # Node 118 (3, HUFFMAN_EMIT_SYMBOL, 227), (6, HUFFMAN_EMIT_SYMBOL, 227), @@ -2226,7 +2106,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 229), (41, HUFFMAN_EMIT_SYMBOL, 229), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 229), - # Node 119 (1, HUFFMAN_EMIT_SYMBOL, 230), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 230), @@ -2244,7 +2123,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 169), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 170), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 173), - # Node 120 (2, HUFFMAN_EMIT_SYMBOL, 230), (9, HUFFMAN_EMIT_SYMBOL, 230), @@ -2262,7 +2140,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 136), (1, HUFFMAN_EMIT_SYMBOL, 146), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 146), - # Node 121 (3, HUFFMAN_EMIT_SYMBOL, 230), (6, HUFFMAN_EMIT_SYMBOL, 230), @@ -2280,7 +2157,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 132), (23, HUFFMAN_EMIT_SYMBOL, 132), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 132), - # Node 122 (3, HUFFMAN_EMIT_SYMBOL, 129), (6, HUFFMAN_EMIT_SYMBOL, 129), @@ -2298,7 +2174,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 132), (41, HUFFMAN_EMIT_SYMBOL, 132), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 132), - # Node 123 (2, HUFFMAN_EMIT_SYMBOL, 133), (9, HUFFMAN_EMIT_SYMBOL, 133), @@ -2316,7 +2191,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 146), (23, HUFFMAN_EMIT_SYMBOL, 146), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 146), - # Node 124 (3, HUFFMAN_EMIT_SYMBOL, 133), (6, HUFFMAN_EMIT_SYMBOL, 133), @@ -2334,7 +2208,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 134), (41, HUFFMAN_EMIT_SYMBOL, 134), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 134), - # Node 125 (3, HUFFMAN_EMIT_SYMBOL, 136), (6, HUFFMAN_EMIT_SYMBOL, 136), @@ -2352,7 +2225,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 146), (41, HUFFMAN_EMIT_SYMBOL, 146), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 146), - # Node 126 (1, HUFFMAN_EMIT_SYMBOL, 154), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 154), @@ -2370,7 +2242,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 170), (1, HUFFMAN_EMIT_SYMBOL, 173), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 173), - # Node 127 (2, HUFFMAN_EMIT_SYMBOL, 154), (9, HUFFMAN_EMIT_SYMBOL, 154), @@ -2388,7 +2259,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 163), (23, HUFFMAN_EMIT_SYMBOL, 163), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 163), - # Node 128 (3, HUFFMAN_EMIT_SYMBOL, 154), (6, HUFFMAN_EMIT_SYMBOL, 154), @@ -2406,7 +2276,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 156), (41, HUFFMAN_EMIT_SYMBOL, 156), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 156), - # Node 129 (3, HUFFMAN_EMIT_SYMBOL, 160), (6, HUFFMAN_EMIT_SYMBOL, 160), @@ -2424,7 +2293,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 163), (41, HUFFMAN_EMIT_SYMBOL, 163), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 163), - # Node 130 (2, HUFFMAN_EMIT_SYMBOL, 164), (9, HUFFMAN_EMIT_SYMBOL, 164), @@ -2442,7 +2310,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 173), (23, HUFFMAN_EMIT_SYMBOL, 173), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 173), - # Node 131 (3, HUFFMAN_EMIT_SYMBOL, 164), (6, HUFFMAN_EMIT_SYMBOL, 164), @@ -2460,7 +2327,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 169), (41, HUFFMAN_EMIT_SYMBOL, 169), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 169), - # Node 132 (3, HUFFMAN_EMIT_SYMBOL, 170), (6, HUFFMAN_EMIT_SYMBOL, 170), @@ -2478,7 +2344,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 173), (41, HUFFMAN_EMIT_SYMBOL, 173), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 173), - # Node 133 (137, 0, 0), (138, 0, 0), @@ -2496,7 +2361,6 @@ (174, 0, 0), (181, 0, 0), (190, 0, 0), - # Node 134 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 178), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 181), @@ -2514,7 +2378,6 @@ (149, 0, 0), (151, 0, 0), (152, 0, 0), - # Node 135 (1, HUFFMAN_EMIT_SYMBOL, 178), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 178), @@ -2532,7 +2395,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 190), (1, HUFFMAN_EMIT_SYMBOL, 196), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 196), - # Node 136 (2, HUFFMAN_EMIT_SYMBOL, 178), (9, HUFFMAN_EMIT_SYMBOL, 178), @@ -2550,7 +2412,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 186), (23, HUFFMAN_EMIT_SYMBOL, 186), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 186), - # Node 137 (3, HUFFMAN_EMIT_SYMBOL, 178), (6, HUFFMAN_EMIT_SYMBOL, 178), @@ -2568,7 +2429,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 181), (41, HUFFMAN_EMIT_SYMBOL, 181), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 181), - # Node 138 (3, HUFFMAN_EMIT_SYMBOL, 185), (6, HUFFMAN_EMIT_SYMBOL, 185), @@ -2586,7 +2446,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 186), (41, HUFFMAN_EMIT_SYMBOL, 186), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 186), - # Node 139 (2, HUFFMAN_EMIT_SYMBOL, 187), (9, HUFFMAN_EMIT_SYMBOL, 187), @@ -2604,7 +2463,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 196), (23, HUFFMAN_EMIT_SYMBOL, 196), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 196), - # Node 140 (3, HUFFMAN_EMIT_SYMBOL, 187), (6, HUFFMAN_EMIT_SYMBOL, 187), @@ -2622,7 +2480,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 189), (41, HUFFMAN_EMIT_SYMBOL, 189), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 189), - # Node 141 (3, HUFFMAN_EMIT_SYMBOL, 190), (6, HUFFMAN_EMIT_SYMBOL, 190), @@ -2640,7 +2497,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 196), (41, HUFFMAN_EMIT_SYMBOL, 196), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 196), - # Node 142 (1, HUFFMAN_EMIT_SYMBOL, 198), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 198), @@ -2658,7 +2514,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 140), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 141), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 143), - # Node 143 (2, HUFFMAN_EMIT_SYMBOL, 198), (9, HUFFMAN_EMIT_SYMBOL, 198), @@ -2676,7 +2531,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 233), (23, HUFFMAN_EMIT_SYMBOL, 233), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 233), - # Node 144 (3, HUFFMAN_EMIT_SYMBOL, 198), (6, HUFFMAN_EMIT_SYMBOL, 198), @@ -2694,7 +2548,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 228), (41, HUFFMAN_EMIT_SYMBOL, 228), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 228), - # Node 145 (3, HUFFMAN_EMIT_SYMBOL, 232), (6, HUFFMAN_EMIT_SYMBOL, 232), @@ -2712,7 +2565,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 233), (41, HUFFMAN_EMIT_SYMBOL, 233), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 233), - # Node 146 (1, HUFFMAN_EMIT_SYMBOL, 1), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 1), @@ -2730,7 +2582,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 141), (1, HUFFMAN_EMIT_SYMBOL, 143), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 143), - # Node 147 (2, HUFFMAN_EMIT_SYMBOL, 1), (9, HUFFMAN_EMIT_SYMBOL, 1), @@ -2748,7 +2599,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 138), (23, HUFFMAN_EMIT_SYMBOL, 138), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 138), - # Node 148 (3, HUFFMAN_EMIT_SYMBOL, 1), (6, HUFFMAN_EMIT_SYMBOL, 1), @@ -2766,7 +2616,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 135), (41, HUFFMAN_EMIT_SYMBOL, 135), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 135), - # Node 149 (3, HUFFMAN_EMIT_SYMBOL, 137), (6, HUFFMAN_EMIT_SYMBOL, 137), @@ -2784,7 +2633,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 138), (41, HUFFMAN_EMIT_SYMBOL, 138), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 138), - # Node 150 (2, HUFFMAN_EMIT_SYMBOL, 139), (9, HUFFMAN_EMIT_SYMBOL, 139), @@ -2802,7 +2650,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 143), (23, HUFFMAN_EMIT_SYMBOL, 143), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 143), - # Node 151 (3, HUFFMAN_EMIT_SYMBOL, 139), (6, HUFFMAN_EMIT_SYMBOL, 139), @@ -2820,7 +2667,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 140), (41, HUFFMAN_EMIT_SYMBOL, 140), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 140), - # Node 152 (3, HUFFMAN_EMIT_SYMBOL, 141), (6, HUFFMAN_EMIT_SYMBOL, 141), @@ -2838,7 +2684,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 143), (41, HUFFMAN_EMIT_SYMBOL, 143), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 143), - # Node 153 (157, 0, 0), (158, 0, 0), @@ -2856,7 +2701,6 @@ (185, 0, 0), (191, 0, 0), (207, 0, 0), - # Node 154 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 147), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 149), @@ -2874,7 +2718,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 180), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 182), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 183), - # Node 155 (1, HUFFMAN_EMIT_SYMBOL, 147), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 147), @@ -2892,7 +2735,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 157), (1, HUFFMAN_EMIT_SYMBOL, 158), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 158), - # Node 156 (2, HUFFMAN_EMIT_SYMBOL, 147), (9, HUFFMAN_EMIT_SYMBOL, 147), @@ -2910,7 +2752,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 151), (23, HUFFMAN_EMIT_SYMBOL, 151), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 151), - # Node 157 (3, HUFFMAN_EMIT_SYMBOL, 147), (6, HUFFMAN_EMIT_SYMBOL, 147), @@ -2928,7 +2769,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 149), (41, HUFFMAN_EMIT_SYMBOL, 149), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 149), - # Node 158 (3, HUFFMAN_EMIT_SYMBOL, 150), (6, HUFFMAN_EMIT_SYMBOL, 150), @@ -2946,7 +2786,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 151), (41, HUFFMAN_EMIT_SYMBOL, 151), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 151), - # Node 159 (2, HUFFMAN_EMIT_SYMBOL, 152), (9, HUFFMAN_EMIT_SYMBOL, 152), @@ -2964,7 +2803,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 158), (23, HUFFMAN_EMIT_SYMBOL, 158), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 158), - # Node 160 (3, HUFFMAN_EMIT_SYMBOL, 152), (6, HUFFMAN_EMIT_SYMBOL, 152), @@ -2982,7 +2820,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 155), (41, HUFFMAN_EMIT_SYMBOL, 155), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 155), - # Node 161 (3, HUFFMAN_EMIT_SYMBOL, 157), (6, HUFFMAN_EMIT_SYMBOL, 157), @@ -3000,7 +2837,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 158), (41, HUFFMAN_EMIT_SYMBOL, 158), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 158), - # Node 162 (1, HUFFMAN_EMIT_SYMBOL, 165), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 165), @@ -3018,7 +2854,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 182), (1, HUFFMAN_EMIT_SYMBOL, 183), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 183), - # Node 163 (2, HUFFMAN_EMIT_SYMBOL, 165), (9, HUFFMAN_EMIT_SYMBOL, 165), @@ -3036,7 +2871,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 174), (23, HUFFMAN_EMIT_SYMBOL, 174), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 174), - # Node 164 (3, HUFFMAN_EMIT_SYMBOL, 165), (6, HUFFMAN_EMIT_SYMBOL, 165), @@ -3054,7 +2888,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 166), (41, HUFFMAN_EMIT_SYMBOL, 166), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 166), - # Node 165 (3, HUFFMAN_EMIT_SYMBOL, 168), (6, HUFFMAN_EMIT_SYMBOL, 168), @@ -3072,7 +2905,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 174), (41, HUFFMAN_EMIT_SYMBOL, 174), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 174), - # Node 166 (2, HUFFMAN_EMIT_SYMBOL, 175), (9, HUFFMAN_EMIT_SYMBOL, 175), @@ -3090,7 +2922,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 183), (23, HUFFMAN_EMIT_SYMBOL, 183), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 183), - # Node 167 (3, HUFFMAN_EMIT_SYMBOL, 175), (6, HUFFMAN_EMIT_SYMBOL, 175), @@ -3108,7 +2939,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 180), (41, HUFFMAN_EMIT_SYMBOL, 180), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 180), - # Node 168 (3, HUFFMAN_EMIT_SYMBOL, 182), (6, HUFFMAN_EMIT_SYMBOL, 182), @@ -3126,7 +2956,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 183), (41, HUFFMAN_EMIT_SYMBOL, 183), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 183), - # Node 169 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 188), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 191), @@ -3144,7 +2973,6 @@ (199, 0, 0), (208, 0, 0), (223, 0, 0), - # Node 170 (1, HUFFMAN_EMIT_SYMBOL, 188), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 188), @@ -3162,7 +2990,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 145), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 148), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 159), - # Node 171 (2, HUFFMAN_EMIT_SYMBOL, 188), (9, HUFFMAN_EMIT_SYMBOL, 188), @@ -3180,7 +3007,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 231), (23, HUFFMAN_EMIT_SYMBOL, 231), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 231), - # Node 172 (3, HUFFMAN_EMIT_SYMBOL, 188), (6, HUFFMAN_EMIT_SYMBOL, 188), @@ -3198,7 +3024,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 191), (41, HUFFMAN_EMIT_SYMBOL, 191), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 191), - # Node 173 (3, HUFFMAN_EMIT_SYMBOL, 197), (6, HUFFMAN_EMIT_SYMBOL, 197), @@ -3216,7 +3041,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 231), (41, HUFFMAN_EMIT_SYMBOL, 231), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 231), - # Node 174 (2, HUFFMAN_EMIT_SYMBOL, 239), (9, HUFFMAN_EMIT_SYMBOL, 239), @@ -3234,7 +3058,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 148), (1, HUFFMAN_EMIT_SYMBOL, 159), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 159), - # Node 175 (3, HUFFMAN_EMIT_SYMBOL, 239), (6, HUFFMAN_EMIT_SYMBOL, 239), @@ -3252,7 +3075,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 142), (23, HUFFMAN_EMIT_SYMBOL, 142), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 142), - # Node 176 (3, HUFFMAN_EMIT_SYMBOL, 9), (6, HUFFMAN_EMIT_SYMBOL, 9), @@ -3270,7 +3092,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 142), (41, HUFFMAN_EMIT_SYMBOL, 142), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 142), - # Node 177 (2, HUFFMAN_EMIT_SYMBOL, 144), (9, HUFFMAN_EMIT_SYMBOL, 144), @@ -3288,7 +3109,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 159), (23, HUFFMAN_EMIT_SYMBOL, 159), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 159), - # Node 178 (3, HUFFMAN_EMIT_SYMBOL, 144), (6, HUFFMAN_EMIT_SYMBOL, 144), @@ -3306,7 +3126,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 145), (41, HUFFMAN_EMIT_SYMBOL, 145), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 145), - # Node 179 (3, HUFFMAN_EMIT_SYMBOL, 148), (6, HUFFMAN_EMIT_SYMBOL, 148), @@ -3324,7 +3143,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 159), (41, HUFFMAN_EMIT_SYMBOL, 159), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 159), - # Node 180 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 171), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 206), @@ -3342,7 +3160,6 @@ (216, 0, 0), (224, 0, 0), (238, 0, 0), - # Node 181 (1, HUFFMAN_EMIT_SYMBOL, 171), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 171), @@ -3360,7 +3177,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 207), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 234), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 235), - # Node 182 (2, HUFFMAN_EMIT_SYMBOL, 171), (9, HUFFMAN_EMIT_SYMBOL, 171), @@ -3378,7 +3194,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 225), (23, HUFFMAN_EMIT_SYMBOL, 225), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 225), - # Node 183 (3, HUFFMAN_EMIT_SYMBOL, 171), (6, HUFFMAN_EMIT_SYMBOL, 171), @@ -3396,7 +3211,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 206), (41, HUFFMAN_EMIT_SYMBOL, 206), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 206), - # Node 184 (3, HUFFMAN_EMIT_SYMBOL, 215), (6, HUFFMAN_EMIT_SYMBOL, 215), @@ -3414,7 +3228,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 225), (41, HUFFMAN_EMIT_SYMBOL, 225), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 225), - # Node 185 (2, HUFFMAN_EMIT_SYMBOL, 236), (9, HUFFMAN_EMIT_SYMBOL, 236), @@ -3432,7 +3245,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 234), (1, HUFFMAN_EMIT_SYMBOL, 235), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 235), - # Node 186 (3, HUFFMAN_EMIT_SYMBOL, 236), (6, HUFFMAN_EMIT_SYMBOL, 236), @@ -3450,7 +3262,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 237), (41, HUFFMAN_EMIT_SYMBOL, 237), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 237), - # Node 187 (2, HUFFMAN_EMIT_SYMBOL, 199), (9, HUFFMAN_EMIT_SYMBOL, 199), @@ -3468,7 +3279,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 235), (23, HUFFMAN_EMIT_SYMBOL, 235), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 235), - # Node 188 (3, HUFFMAN_EMIT_SYMBOL, 199), (6, HUFFMAN_EMIT_SYMBOL, 199), @@ -3486,7 +3296,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 207), (41, HUFFMAN_EMIT_SYMBOL, 207), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 207), - # Node 189 (3, HUFFMAN_EMIT_SYMBOL, 234), (6, HUFFMAN_EMIT_SYMBOL, 234), @@ -3504,7 +3313,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 235), (41, HUFFMAN_EMIT_SYMBOL, 235), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 235), - # Node 190 (194, 0, 0), (195, 0, 0), @@ -3522,7 +3330,6 @@ (231, 0, 0), (239, 0, 0), (246, 0, 0), - # Node 191 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 192), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 193), @@ -3540,7 +3347,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 243), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 255), (206, 0, 0), - # Node 192 (1, HUFFMAN_EMIT_SYMBOL, 192), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 192), @@ -3558,7 +3364,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 210), (1, HUFFMAN_EMIT_SYMBOL, 213), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 213), - # Node 193 (2, HUFFMAN_EMIT_SYMBOL, 192), (9, HUFFMAN_EMIT_SYMBOL, 192), @@ -3576,7 +3381,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 201), (23, HUFFMAN_EMIT_SYMBOL, 201), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 201), - # Node 194 (3, HUFFMAN_EMIT_SYMBOL, 192), (6, HUFFMAN_EMIT_SYMBOL, 192), @@ -3594,7 +3398,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 193), (41, HUFFMAN_EMIT_SYMBOL, 193), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 193), - # Node 195 (3, HUFFMAN_EMIT_SYMBOL, 200), (6, HUFFMAN_EMIT_SYMBOL, 200), @@ -3612,7 +3415,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 201), (41, HUFFMAN_EMIT_SYMBOL, 201), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 201), - # Node 196 (2, HUFFMAN_EMIT_SYMBOL, 202), (9, HUFFMAN_EMIT_SYMBOL, 202), @@ -3630,7 +3432,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 213), (23, HUFFMAN_EMIT_SYMBOL, 213), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 213), - # Node 197 (3, HUFFMAN_EMIT_SYMBOL, 202), (6, HUFFMAN_EMIT_SYMBOL, 202), @@ -3648,7 +3449,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 205), (41, HUFFMAN_EMIT_SYMBOL, 205), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 205), - # Node 198 (3, HUFFMAN_EMIT_SYMBOL, 210), (6, HUFFMAN_EMIT_SYMBOL, 210), @@ -3666,7 +3466,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 213), (41, HUFFMAN_EMIT_SYMBOL, 213), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 213), - # Node 199 (1, HUFFMAN_EMIT_SYMBOL, 218), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 218), @@ -3684,7 +3483,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 255), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 203), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 204), - # Node 200 (2, HUFFMAN_EMIT_SYMBOL, 218), (9, HUFFMAN_EMIT_SYMBOL, 218), @@ -3702,7 +3500,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 240), (23, HUFFMAN_EMIT_SYMBOL, 240), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 240), - # Node 201 (3, HUFFMAN_EMIT_SYMBOL, 218), (6, HUFFMAN_EMIT_SYMBOL, 218), @@ -3720,7 +3517,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 219), (41, HUFFMAN_EMIT_SYMBOL, 219), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 219), - # Node 202 (3, HUFFMAN_EMIT_SYMBOL, 238), (6, HUFFMAN_EMIT_SYMBOL, 238), @@ -3738,7 +3534,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 240), (41, HUFFMAN_EMIT_SYMBOL, 240), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 240), - # Node 203 (2, HUFFMAN_EMIT_SYMBOL, 242), (9, HUFFMAN_EMIT_SYMBOL, 242), @@ -3756,7 +3551,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 203), (1, HUFFMAN_EMIT_SYMBOL, 204), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 204), - # Node 204 (3, HUFFMAN_EMIT_SYMBOL, 242), (6, HUFFMAN_EMIT_SYMBOL, 242), @@ -3774,7 +3568,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 243), (41, HUFFMAN_EMIT_SYMBOL, 243), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 243), - # Node 205 (3, HUFFMAN_EMIT_SYMBOL, 255), (6, HUFFMAN_EMIT_SYMBOL, 255), @@ -3792,7 +3585,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 204), (23, HUFFMAN_EMIT_SYMBOL, 204), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 204), - # Node 206 (3, HUFFMAN_EMIT_SYMBOL, 203), (6, HUFFMAN_EMIT_SYMBOL, 203), @@ -3810,7 +3602,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 204), (41, HUFFMAN_EMIT_SYMBOL, 204), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 204), - # Node 207 (211, 0, 0), (212, 0, 0), @@ -3828,7 +3619,6 @@ (243, 0, 0), (247, 0, 0), (250, 0, 0), - # Node 208 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 211), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 212), @@ -3846,7 +3636,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 251), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 252), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 253), - # Node 209 (1, HUFFMAN_EMIT_SYMBOL, 211), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 211), @@ -3864,7 +3653,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 241), (1, HUFFMAN_EMIT_SYMBOL, 244), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 244), - # Node 210 (2, HUFFMAN_EMIT_SYMBOL, 211), (9, HUFFMAN_EMIT_SYMBOL, 211), @@ -3882,7 +3670,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 221), (23, HUFFMAN_EMIT_SYMBOL, 221), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 221), - # Node 211 (3, HUFFMAN_EMIT_SYMBOL, 211), (6, HUFFMAN_EMIT_SYMBOL, 211), @@ -3900,7 +3687,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 212), (41, HUFFMAN_EMIT_SYMBOL, 212), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 212), - # Node 212 (3, HUFFMAN_EMIT_SYMBOL, 214), (6, HUFFMAN_EMIT_SYMBOL, 214), @@ -3918,7 +3704,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 221), (41, HUFFMAN_EMIT_SYMBOL, 221), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 221), - # Node 213 (2, HUFFMAN_EMIT_SYMBOL, 222), (9, HUFFMAN_EMIT_SYMBOL, 222), @@ -3936,7 +3721,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 244), (23, HUFFMAN_EMIT_SYMBOL, 244), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 244), - # Node 214 (3, HUFFMAN_EMIT_SYMBOL, 222), (6, HUFFMAN_EMIT_SYMBOL, 222), @@ -3954,7 +3738,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 223), (41, HUFFMAN_EMIT_SYMBOL, 223), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 223), - # Node 215 (3, HUFFMAN_EMIT_SYMBOL, 241), (6, HUFFMAN_EMIT_SYMBOL, 241), @@ -3972,7 +3755,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 244), (41, HUFFMAN_EMIT_SYMBOL, 244), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 244), - # Node 216 (1, HUFFMAN_EMIT_SYMBOL, 245), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 245), @@ -3990,7 +3772,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 252), (1, HUFFMAN_EMIT_SYMBOL, 253), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 253), - # Node 217 (2, HUFFMAN_EMIT_SYMBOL, 245), (9, HUFFMAN_EMIT_SYMBOL, 245), @@ -4008,7 +3789,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 248), (23, HUFFMAN_EMIT_SYMBOL, 248), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 248), - # Node 218 (3, HUFFMAN_EMIT_SYMBOL, 245), (6, HUFFMAN_EMIT_SYMBOL, 245), @@ -4026,7 +3806,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 246), (41, HUFFMAN_EMIT_SYMBOL, 246), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 246), - # Node 219 (3, HUFFMAN_EMIT_SYMBOL, 247), (6, HUFFMAN_EMIT_SYMBOL, 247), @@ -4044,7 +3823,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 248), (41, HUFFMAN_EMIT_SYMBOL, 248), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 248), - # Node 220 (2, HUFFMAN_EMIT_SYMBOL, 250), (9, HUFFMAN_EMIT_SYMBOL, 250), @@ -4062,7 +3840,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 253), (23, HUFFMAN_EMIT_SYMBOL, 253), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 253), - # Node 221 (3, HUFFMAN_EMIT_SYMBOL, 250), (6, HUFFMAN_EMIT_SYMBOL, 250), @@ -4080,7 +3857,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 251), (41, HUFFMAN_EMIT_SYMBOL, 251), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 251), - # Node 222 (3, HUFFMAN_EMIT_SYMBOL, 252), (6, HUFFMAN_EMIT_SYMBOL, 252), @@ -4098,7 +3874,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 253), (41, HUFFMAN_EMIT_SYMBOL, 253), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 253), - # Node 223 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 254), (227, 0, 0), @@ -4116,7 +3891,6 @@ (249, 0, 0), (251, 0, 0), (252, 0, 0), - # Node 224 (1, HUFFMAN_EMIT_SYMBOL, 254), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 254), @@ -4134,7 +3908,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 16), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 17), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 18), - # Node 225 (2, HUFFMAN_EMIT_SYMBOL, 254), (9, HUFFMAN_EMIT_SYMBOL, 254), @@ -4152,7 +3925,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 6), (1, HUFFMAN_EMIT_SYMBOL, 7), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 7), - # Node 226 (3, HUFFMAN_EMIT_SYMBOL, 254), (6, HUFFMAN_EMIT_SYMBOL, 254), @@ -4170,7 +3942,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 3), (23, HUFFMAN_EMIT_SYMBOL, 3), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 3), - # Node 227 (3, HUFFMAN_EMIT_SYMBOL, 2), (6, HUFFMAN_EMIT_SYMBOL, 2), @@ -4188,7 +3959,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 3), (41, HUFFMAN_EMIT_SYMBOL, 3), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 3), - # Node 228 (2, HUFFMAN_EMIT_SYMBOL, 4), (9, HUFFMAN_EMIT_SYMBOL, 4), @@ -4206,7 +3976,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 7), (23, HUFFMAN_EMIT_SYMBOL, 7), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 7), - # Node 229 (3, HUFFMAN_EMIT_SYMBOL, 4), (6, HUFFMAN_EMIT_SYMBOL, 4), @@ -4224,7 +3993,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 5), (41, HUFFMAN_EMIT_SYMBOL, 5), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 5), - # Node 230 (3, HUFFMAN_EMIT_SYMBOL, 6), (6, HUFFMAN_EMIT_SYMBOL, 6), @@ -4242,7 +4010,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 7), (41, HUFFMAN_EMIT_SYMBOL, 7), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 7), - # Node 231 (1, HUFFMAN_EMIT_SYMBOL, 8), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 8), @@ -4260,7 +4027,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 17), (1, HUFFMAN_EMIT_SYMBOL, 18), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 18), - # Node 232 (2, HUFFMAN_EMIT_SYMBOL, 8), (9, HUFFMAN_EMIT_SYMBOL, 8), @@ -4278,7 +4044,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 14), (23, HUFFMAN_EMIT_SYMBOL, 14), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 14), - # Node 233 (3, HUFFMAN_EMIT_SYMBOL, 8), (6, HUFFMAN_EMIT_SYMBOL, 8), @@ -4296,7 +4061,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 11), (41, HUFFMAN_EMIT_SYMBOL, 11), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 11), - # Node 234 (3, HUFFMAN_EMIT_SYMBOL, 12), (6, HUFFMAN_EMIT_SYMBOL, 12), @@ -4314,7 +4078,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 14), (41, HUFFMAN_EMIT_SYMBOL, 14), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 14), - # Node 235 (2, HUFFMAN_EMIT_SYMBOL, 15), (9, HUFFMAN_EMIT_SYMBOL, 15), @@ -4332,7 +4095,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 18), (23, HUFFMAN_EMIT_SYMBOL, 18), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 18), - # Node 236 (3, HUFFMAN_EMIT_SYMBOL, 15), (6, HUFFMAN_EMIT_SYMBOL, 15), @@ -4350,7 +4112,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 16), (41, HUFFMAN_EMIT_SYMBOL, 16), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 16), - # Node 237 (3, HUFFMAN_EMIT_SYMBOL, 17), (6, HUFFMAN_EMIT_SYMBOL, 17), @@ -4368,7 +4129,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 18), (41, HUFFMAN_EMIT_SYMBOL, 18), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 18), - # Node 238 (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 19), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 20), @@ -4386,7 +4146,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 220), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 249), (253, 0, 0), - # Node 239 (1, HUFFMAN_EMIT_SYMBOL, 19), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 19), @@ -4404,7 +4163,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 26), (1, HUFFMAN_EMIT_SYMBOL, 27), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 27), - # Node 240 (2, HUFFMAN_EMIT_SYMBOL, 19), (9, HUFFMAN_EMIT_SYMBOL, 19), @@ -4422,7 +4180,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 23), (23, HUFFMAN_EMIT_SYMBOL, 23), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 23), - # Node 241 (3, HUFFMAN_EMIT_SYMBOL, 19), (6, HUFFMAN_EMIT_SYMBOL, 19), @@ -4440,7 +4197,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 20), (41, HUFFMAN_EMIT_SYMBOL, 20), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 20), - # Node 242 (3, HUFFMAN_EMIT_SYMBOL, 21), (6, HUFFMAN_EMIT_SYMBOL, 21), @@ -4458,7 +4214,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 23), (41, HUFFMAN_EMIT_SYMBOL, 23), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 23), - # Node 243 (2, HUFFMAN_EMIT_SYMBOL, 24), (9, HUFFMAN_EMIT_SYMBOL, 24), @@ -4476,7 +4231,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 27), (23, HUFFMAN_EMIT_SYMBOL, 27), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 27), - # Node 244 (3, HUFFMAN_EMIT_SYMBOL, 24), (6, HUFFMAN_EMIT_SYMBOL, 24), @@ -4494,7 +4248,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 25), (41, HUFFMAN_EMIT_SYMBOL, 25), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 25), - # Node 245 (3, HUFFMAN_EMIT_SYMBOL, 26), (6, HUFFMAN_EMIT_SYMBOL, 26), @@ -4512,7 +4265,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 27), (41, HUFFMAN_EMIT_SYMBOL, 27), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 27), - # Node 246 (1, HUFFMAN_EMIT_SYMBOL, 28), (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 28), @@ -4530,7 +4282,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 249), (254, 0, 0), (255, 0, 0), - # Node 247 (2, HUFFMAN_EMIT_SYMBOL, 28), (9, HUFFMAN_EMIT_SYMBOL, 28), @@ -4548,7 +4299,6 @@ (9, HUFFMAN_EMIT_SYMBOL, 31), (23, HUFFMAN_EMIT_SYMBOL, 31), (40, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 31), - # Node 248 (3, HUFFMAN_EMIT_SYMBOL, 28), (6, HUFFMAN_EMIT_SYMBOL, 28), @@ -4566,7 +4316,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 29), (41, HUFFMAN_EMIT_SYMBOL, 29), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 29), - # Node 249 (3, HUFFMAN_EMIT_SYMBOL, 30), (6, HUFFMAN_EMIT_SYMBOL, 30), @@ -4584,7 +4333,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 31), (41, HUFFMAN_EMIT_SYMBOL, 31), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 31), - # Node 250 (2, HUFFMAN_EMIT_SYMBOL, 127), (9, HUFFMAN_EMIT_SYMBOL, 127), @@ -4602,7 +4350,6 @@ (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 13), (0, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 22), (0, HUFFMAN_FAIL, 0), - # Node 251 (3, HUFFMAN_EMIT_SYMBOL, 127), (6, HUFFMAN_EMIT_SYMBOL, 127), @@ -4620,7 +4367,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 220), (41, HUFFMAN_EMIT_SYMBOL, 220), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 220), - # Node 252 (3, HUFFMAN_EMIT_SYMBOL, 249), (6, HUFFMAN_EMIT_SYMBOL, 249), @@ -4638,7 +4384,6 @@ (22, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 22), (0, HUFFMAN_FAIL, 0), (0, HUFFMAN_FAIL, 0), - # Node 253 (2, HUFFMAN_EMIT_SYMBOL, 10), (9, HUFFMAN_EMIT_SYMBOL, 10), @@ -4656,7 +4401,6 @@ (0, HUFFMAN_FAIL, 0), (0, HUFFMAN_FAIL, 0), (0, HUFFMAN_FAIL, 0), - # Node 254 (3, HUFFMAN_EMIT_SYMBOL, 10), (6, HUFFMAN_EMIT_SYMBOL, 10), @@ -4674,7 +4418,6 @@ (31, HUFFMAN_EMIT_SYMBOL, 13), (41, HUFFMAN_EMIT_SYMBOL, 13), (56, HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL, 13), - # Node 255 (3, HUFFMAN_EMIT_SYMBOL, 22), (6, HUFFMAN_EMIT_SYMBOL, 22), @@ -4698,10 +4441,10 @@ class HuffmanDecoder: """Helps decode huffman-tables without needing to share a large global variable accross multiple threads""" - def __init__( - self, - huffman_table:list[tuple[int, int, int]] = HUFFMAN_TABLE - ) -> None: + + __slots__ = ("huffman_table",) + + def __init__(self, huffman_table: list[tuple[int, int, int]] = HUFFMAN_TABLE) -> None: self.huffman_table = huffman_table def decode(self, bytes_to_decode: bytes | bytearray | None) -> bytes: @@ -4714,8 +4457,9 @@ def decode(self, bytes_to_decode: bytes | bytearray | None) -> bytes: # NOTE: Temporarly moving here until I merge it with decode above... + # TODO: Move decode_huffman function to the new class object -def decode_huffman(huffman_string: bytes | bytearray | None, huffman_table:list[tuple[int, int, int]] = HUFFMAN_TABLE) -> bytes: +def decode_huffman(huffman_string: bytes | bytearray | None, huffman_table: list[tuple[int, int, int]] = HUFFMAN_TABLE) -> bytes: """ Given a bytestring of Huffman-encoded data for HPACK, returns a bytestring of the decompressed data. @@ -4761,4 +4505,4 @@ def decode_huffman(huffman_string: bytes | bytearray | None, huffman_table:list[ msg = "Incomplete Huffman string" raise HPACKDecodingError(msg) - return bytes(decoded_bytes) \ No newline at end of file + return bytes(decoded_bytes) diff --git a/src/hpack/struct.py b/src/hpack/struct.py index 420c634..ce4af29 100644 --- a/src/hpack/struct.py +++ b/src/hpack/struct.py @@ -1,6 +1,7 @@ """ Contains structures for representing header fields with associated metadata. """ + from __future__ import annotations from typing import TYPE_CHECKING, Any diff --git a/src/hpack/table.py b/src/hpack/table.py index 7b5338b..251b425 100644 --- a/src/hpack/table.py +++ b/src/hpack/table.py @@ -33,6 +33,7 @@ class HeaderTable: See RFC7541 Section 2.3 """ + #: Default maximum size of the dynamic table. See #: RFC7540 Section 6.5.2. DEFAULT_SIZE = 4096 @@ -40,67 +41,67 @@ class HeaderTable: #: Constant list of static headers. See RFC7541 Section #: 2.3.1 and Appendix A STATIC_TABLE = ( - (b':authority' , b'' ), # noqa - (b':method' , b'GET' ), # noqa - (b':method' , b'POST' ), # noqa - (b':path' , b'/' ), # noqa - (b':path' , b'/index.html' ), # noqa - (b':scheme' , b'http' ), # noqa - (b':scheme' , b'https' ), # noqa - (b':status' , b'200' ), # noqa - (b':status' , b'204' ), # noqa - (b':status' , b'206' ), # noqa - (b':status' , b'304' ), # noqa - (b':status' , b'400' ), # noqa - (b':status' , b'404' ), # noqa - (b':status' , b'500' ), # noqa - (b'accept-charset' , b'' ), # noqa - (b'accept-encoding' , b'gzip, deflate'), # noqa - (b'accept-language' , b'' ), # noqa - (b'accept-ranges' , b'' ), # noqa - (b'accept' , b'' ), # noqa - (b'access-control-allow-origin' , b'' ), # noqa - (b'age' , b'' ), # noqa - (b'allow' , b'' ), # noqa - (b'authorization' , b'' ), # noqa - (b'cache-control' , b'' ), # noqa - (b'content-disposition' , b'' ), # noqa - (b'content-encoding' , b'' ), # noqa - (b'content-language' , b'' ), # noqa - (b'content-length' , b'' ), # noqa - (b'content-location' , b'' ), # noqa - (b'content-range' , b'' ), # noqa - (b'content-type' , b'' ), # noqa - (b'cookie' , b'' ), # noqa - (b'date' , b'' ), # noqa - (b'etag' , b'' ), # noqa - (b'expect' , b'' ), # noqa - (b'expires' , b'' ), # noqa - (b'from' , b'' ), # noqa - (b'host' , b'' ), # noqa - (b'if-match' , b'' ), # noqa - (b'if-modified-since' , b'' ), # noqa - (b'if-none-match' , b'' ), # noqa - (b'if-range' , b'' ), # noqa - (b'if-unmodified-since' , b'' ), # noqa - (b'last-modified' , b'' ), # noqa - (b'link' , b'' ), # noqa - (b'location' , b'' ), # noqa - (b'max-forwards' , b'' ), # noqa - (b'proxy-authenticate' , b'' ), # noqa - (b'proxy-authorization' , b'' ), # noqa - (b'range' , b'' ), # noqa - (b'referer' , b'' ), # noqa - (b'refresh' , b'' ), # noqa - (b'retry-after' , b'' ), # noqa - (b'server' , b'' ), # noqa - (b'set-cookie' , b'' ), # noqa - (b'strict-transport-security' , b'' ), # noqa - (b'transfer-encoding' , b'' ), # noqa - (b'user-agent' , b'' ), # noqa - (b'vary' , b'' ), # noqa - (b'via' , b'' ), # noqa - (b'www-authenticate' , b'' ), # noqa + (b":authority", b""), # noqa + (b":method", b"GET"), # noqa + (b":method", b"POST"), # noqa + (b":path", b"/"), # noqa + (b":path", b"/index.html"), # noqa + (b":scheme", b"http"), # noqa + (b":scheme", b"https"), # noqa + (b":status", b"200"), # noqa + (b":status", b"204"), # noqa + (b":status", b"206"), # noqa + (b":status", b"304"), # noqa + (b":status", b"400"), # noqa + (b":status", b"404"), # noqa + (b":status", b"500"), # noqa + (b"accept-charset", b""), # noqa + (b"accept-encoding", b"gzip, deflate"), # noqa + (b"accept-language", b""), # noqa + (b"accept-ranges", b""), # noqa + (b"accept", b""), # noqa + (b"access-control-allow-origin", b""), # noqa + (b"age", b""), # noqa + (b"allow", b""), # noqa + (b"authorization", b""), # noqa + (b"cache-control", b""), # noqa + (b"content-disposition", b""), # noqa + (b"content-encoding", b""), # noqa + (b"content-language", b""), # noqa + (b"content-length", b""), # noqa + (b"content-location", b""), # noqa + (b"content-range", b""), # noqa + (b"content-type", b""), # noqa + (b"cookie", b""), # noqa + (b"date", b""), # noqa + (b"etag", b""), # noqa + (b"expect", b""), # noqa + (b"expires", b""), # noqa + (b"from", b""), # noqa + (b"host", b""), # noqa + (b"if-match", b""), # noqa + (b"if-modified-since", b""), # noqa + (b"if-none-match", b""), # noqa + (b"if-range", b""), # noqa + (b"if-unmodified-since", b""), # noqa + (b"last-modified", b""), # noqa + (b"link", b""), # noqa + (b"location", b""), # noqa + (b"max-forwards", b""), # noqa + (b"proxy-authenticate", b""), # noqa + (b"proxy-authorization", b""), # noqa + (b"range", b""), # noqa + (b"referer", b""), # noqa + (b"refresh", b""), # noqa + (b"retry-after", b""), # noqa + (b"server", b""), # noqa + (b"set-cookie", b""), # noqa + (b"strict-transport-security", b""), # noqa + (b"transfer-encoding", b""), # noqa + (b"user-agent", b""), # noqa + (b"vary", b""), # noqa + (b"via", b""), # noqa + (b"www-authenticate", b""), # noqa ) # noqa STATIC_TABLE_LENGTH = len(STATIC_TABLE) @@ -138,11 +139,7 @@ def get_by_index(self, index: int) -> tuple[bytes, bytes]: raise InvalidTableIndex("Invalid table index %d" % original_index) def __repr__(self) -> str: - return "HeaderTable(%d, %s, %r)" % ( - self._maxsize, - self.resized, - self.dynamic_entries - ) + return "HeaderTable(%d, %s, %r)" % (self._maxsize, self.resized, self.dynamic_entries) def add(self, name: bytes, value: bytes) -> None: """ @@ -183,7 +180,7 @@ def search(self, name: bytes, value: bytes) -> Optional[tuple[int, bytes, Option partial = (header_name_search_result[0], name, None) offset = HeaderTable.STATIC_TABLE_LENGTH + 1 - for (i, (n, v)) in enumerate(self.dynamic_entries): + for i, (n, v) in enumerate(self.dynamic_entries): if n == name: if v == value: return i + offset, n, v @@ -201,7 +198,7 @@ def maxsize(self, newmax: int) -> None: log.debug("Resizing header table to %d from %d", newmax, self._maxsize) oldmax = self._maxsize self._maxsize = newmax - self.resized = (newmax != oldmax) + self.resized = newmax != oldmax if newmax <= 0: self.dynamic_entries.clear() self._current_size = 0