Showing preview only (6,696K chars total). Download the full file or copy to clipboard to get everything.
Repository: google/brotli
Branch: master
Commit: 1818606d6aae
Files: 383
Total size: 43.0 MB
Directory structure:
gitextract_aus3v66n/
├── .bazelignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── build_test.yml
│ ├── build_test_wasm.yml
│ ├── codeql.yml
│ ├── fuzz.yml
│ ├── lint.yml
│ ├── release.yaml
│ └── scorecard.yml
├── .gitignore
├── BUILD.bazel
├── CHANGELOG.md
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── MODULE.bazel
├── README
├── README.md
├── SECURITY.md
├── c/
│ ├── common/
│ │ ├── constants.c
│ │ ├── constants.h
│ │ ├── context.c
│ │ ├── context.h
│ │ ├── dictionary.c
│ │ ├── dictionary.h
│ │ ├── dictionary_inc.h
│ │ ├── platform.c
│ │ ├── platform.h
│ │ ├── shared_dictionary.c
│ │ ├── shared_dictionary_internal.h
│ │ ├── static_init.h
│ │ ├── transform.c
│ │ ├── transform.h
│ │ └── version.h
│ ├── dec/
│ │ ├── bit_reader.c
│ │ ├── bit_reader.h
│ │ ├── decode.c
│ │ ├── huffman.c
│ │ ├── huffman.h
│ │ ├── prefix.c
│ │ ├── prefix.h
│ │ ├── prefix_inc.h
│ │ ├── state.c
│ │ ├── state.h
│ │ ├── static_init.c
│ │ └── static_init.h
│ ├── enc/
│ │ ├── backward_references.c
│ │ ├── backward_references.h
│ │ ├── backward_references_hq.c
│ │ ├── backward_references_hq.h
│ │ ├── backward_references_inc.h
│ │ ├── bit_cost.c
│ │ ├── bit_cost.h
│ │ ├── bit_cost_inc.h
│ │ ├── block_encoder_inc.h
│ │ ├── block_splitter.c
│ │ ├── block_splitter.h
│ │ ├── block_splitter_inc.h
│ │ ├── brotli_bit_stream.c
│ │ ├── brotli_bit_stream.h
│ │ ├── cluster.c
│ │ ├── cluster.h
│ │ ├── cluster_inc.h
│ │ ├── command.c
│ │ ├── command.h
│ │ ├── compound_dictionary.c
│ │ ├── compound_dictionary.h
│ │ ├── compress_fragment.c
│ │ ├── compress_fragment.h
│ │ ├── compress_fragment_two_pass.c
│ │ ├── compress_fragment_two_pass.h
│ │ ├── dictionary_hash.c
│ │ ├── dictionary_hash.h
│ │ ├── dictionary_hash_inc.h
│ │ ├── encode.c
│ │ ├── encoder_dict.c
│ │ ├── encoder_dict.h
│ │ ├── entropy_encode.c
│ │ ├── entropy_encode.h
│ │ ├── entropy_encode_static.h
│ │ ├── fast_log.c
│ │ ├── fast_log.h
│ │ ├── find_match_length.h
│ │ ├── hash.h
│ │ ├── hash_base.h
│ │ ├── hash_composite_inc.h
│ │ ├── hash_forgetful_chain_inc.h
│ │ ├── hash_longest_match64_inc.h
│ │ ├── hash_longest_match64_simd_inc.h
│ │ ├── hash_longest_match_inc.h
│ │ ├── hash_longest_match_quickly_inc.h
│ │ ├── hash_longest_match_simd_inc.h
│ │ ├── hash_rolling_inc.h
│ │ ├── hash_to_binary_tree_inc.h
│ │ ├── histogram.c
│ │ ├── histogram.h
│ │ ├── histogram_inc.h
│ │ ├── literal_cost.c
│ │ ├── literal_cost.h
│ │ ├── matching_tag_mask.h
│ │ ├── memory.c
│ │ ├── memory.h
│ │ ├── metablock.c
│ │ ├── metablock.h
│ │ ├── metablock_inc.h
│ │ ├── params.h
│ │ ├── prefix.h
│ │ ├── quality.h
│ │ ├── ringbuffer.h
│ │ ├── state.h
│ │ ├── static_dict.c
│ │ ├── static_dict.h
│ │ ├── static_dict_lut.c
│ │ ├── static_dict_lut.h
│ │ ├── static_dict_lut_inc.h
│ │ ├── static_init.c
│ │ ├── static_init.h
│ │ ├── static_init_lazy.cc
│ │ ├── utf8_util.c
│ │ ├── utf8_util.h
│ │ └── write_bits.h
│ ├── fuzz/
│ │ ├── .bazelrc
│ │ ├── BUILD.bazel
│ │ ├── MODULE.bazel
│ │ ├── decode_fuzzer.c
│ │ ├── run_decode_fuzzer.c
│ │ └── test_fuzzer.sh
│ ├── include/
│ │ └── brotli/
│ │ ├── decode.h
│ │ ├── encode.h
│ │ ├── port.h
│ │ ├── shared_dictionary.h
│ │ └── types.h
│ └── tools/
│ ├── brotli.c
│ └── brotli.md
├── csharp/
│ ├── brotlidec.Tests.csproj
│ ├── brotlidec.csproj
│ ├── injected_code.txt
│ ├── org/
│ │ └── brotli/
│ │ └── dec/
│ │ ├── BitReader.cs
│ │ ├── BitReaderTest.cs
│ │ ├── BrotliInputStream.cs
│ │ ├── BrotliRuntimeException.cs
│ │ ├── Context.cs
│ │ ├── Decode.cs
│ │ ├── DecodeTest.cs
│ │ ├── Dictionary.cs
│ │ ├── DictionaryTest.cs
│ │ ├── Huffman.cs
│ │ ├── HuffmanTreeGroup.cs
│ │ ├── IntReader.cs
│ │ ├── Prefix.cs
│ │ ├── RunningState.cs
│ │ ├── State.cs
│ │ ├── SynthTest.cs
│ │ ├── Transform.cs
│ │ ├── TransformTest.cs
│ │ ├── Utils.cs
│ │ └── WordTransformType.cs
│ ├── sharpen.cfg
│ └── transpile.sh
├── docs/
│ ├── brotli.1
│ ├── constants.h.3
│ ├── decode.h.3
│ ├── encode.h.3
│ └── types.h.3
├── fetch-spec/
│ └── shared-brotli-fetch-spec.txt
├── go/
│ ├── BUILD.bazel
│ ├── MODULE.bazel
│ ├── brotli/
│ │ ├── BUILD.bazel
│ │ ├── brotli_test.go
│ │ ├── decode.go
│ │ ├── go.mod
│ │ ├── reader.go
│ │ └── synth_test.go
│ └── cbrotli/
│ ├── BUILD.bazel
│ ├── cbrotli_test.go
│ ├── cgo.go
│ ├── go.mod
│ ├── reader.go
│ ├── synth_test.go
│ └── writer.go
├── java/
│ ├── BUILD.bazel
│ ├── MODULE.bazel
│ └── org/
│ └── brotli/
│ ├── common/
│ │ ├── BUILD.bazel
│ │ └── SharedDictionaryType.java
│ ├── dec/
│ │ ├── BUILD.bazel
│ │ ├── BitReader.java
│ │ ├── BitReaderTest.java
│ │ ├── BrotliError.java
│ │ ├── BrotliInputStream.java
│ │ ├── BrotliRuntimeException.java
│ │ ├── CompoundDictionaryTest.java
│ │ ├── Context.java
│ │ ├── Decode.java
│ │ ├── DecodeTest.java
│ │ ├── Decoder.java
│ │ ├── Dictionary.java
│ │ ├── DictionaryData.java
│ │ ├── DictionaryTest.java
│ │ ├── EagerStreamTest.java
│ │ ├── Huffman.java
│ │ ├── SetDictionaryTest.java
│ │ ├── State.java
│ │ ├── SynthTest.java
│ │ ├── TestUtils.java
│ │ ├── Transform.java
│ │ ├── TransformTest.java
│ │ ├── Utils.java
│ │ ├── build_defs.bzl
│ │ ├── kt/
│ │ │ ├── BUILD.bazel
│ │ │ ├── BrotliInputStream.kt
│ │ │ └── Decode.kt
│ │ ├── pom.xml
│ │ └── proguard.pgcfg
│ ├── enc/
│ │ ├── BUILD.bazel
│ │ ├── PreparedDictionary.java
│ │ └── PreparedDictionaryGenerator.java
│ ├── integration/
│ │ ├── BUILD.bazel
│ │ ├── Benchmark.java
│ │ ├── BrotliJniTestBase.java
│ │ ├── BundleChecker.java
│ │ ├── BundleHelper.java
│ │ └── pom.xml
│ ├── pom.xml
│ └── wrapper/
│ ├── android/
│ │ ├── JniHelper.java
│ │ ├── UseJni.java
│ │ └── UseJniTest.java
│ ├── common/
│ │ ├── BUILD.bazel
│ │ ├── BrotliCommon.java
│ │ ├── CommonJNI.java
│ │ ├── SetRfcDictionaryTest.java
│ │ ├── SetZeroDictionaryTest.java
│ │ └── common_jni.cc
│ ├── dec/
│ │ ├── BUILD.bazel
│ │ ├── BrotliDecoderChannel.java
│ │ ├── BrotliDecoderChannelTest.java
│ │ ├── BrotliInputStream.java
│ │ ├── BrotliInputStreamTest.java
│ │ ├── CornerCasesTest.java
│ │ ├── Decoder.java
│ │ ├── DecoderJNI.java
│ │ ├── DecoderTest.java
│ │ ├── EagerStreamTest.java
│ │ ├── decoder_jni.cc
│ │ ├── decoder_jni.h
│ │ └── decoder_jni_onload.cc
│ └── enc/
│ ├── BUILD.bazel
│ ├── BrotliEncoderChannel.java
│ ├── BrotliEncoderChannelTest.java
│ ├── BrotliOutputStream.java
│ ├── BrotliOutputStreamTest.java
│ ├── EmptyInputTest.java
│ ├── Encoder.java
│ ├── EncoderJNI.java
│ ├── EncoderTest.java
│ ├── UseCompoundDictionaryTest.java
│ └── encoder_jni.cc
├── js/
│ ├── bundle_test.js
│ ├── bundle_test.ts
│ ├── cli.js
│ ├── decode.js
│ ├── decode.ts
│ ├── decode_synth_test.js
│ ├── decode_synth_test.ts
│ ├── decode_test.js
│ ├── decode_test.ts
│ ├── package.json
│ ├── test_data.js
│ └── test_data.ts
├── pyproject.toml
├── python/
│ ├── Makefile
│ ├── README.md
│ ├── _brotli.c
│ ├── brotli.py
│ └── tests/
│ ├── __init__.py
│ ├── _test_utils.py
│ ├── compress_test.py
│ ├── compressor_test.py
│ ├── decompress_test.py
│ └── decompressor_test.py
├── research/
│ ├── BUILD.bazel
│ ├── MODULE.bazel
│ ├── README.md
│ ├── brotli_decoder.c
│ ├── brotlidump.py
│ ├── deorummolae.cc
│ ├── deorummolae.h
│ ├── dictionary_generator.cc
│ ├── draw_diff.cc
│ ├── draw_histogram.cc
│ ├── durchschlag.cc
│ ├── durchschlag.h
│ ├── find_opt_references.cc
│ ├── read_dist.h
│ ├── sieve.cc
│ └── sieve.h
├── sbom.cdx.json
├── scripts/
│ ├── check_typos.sh
│ ├── dictionary/
│ │ ├── README.md
│ │ ├── step-01-download-rfc.py
│ │ ├── step-02-rfc-to-bin.py
│ │ ├── step-03-validate-bin.py
│ │ └── step-04-generate-java-literals.py
│ ├── download_testdata.sh
│ ├── libbrotlicommon.pc.in
│ ├── libbrotlidec.pc.in
│ ├── libbrotlienc.pc.in
│ └── typos.toml
├── setup.cfg
├── setup.py
└── tests/
├── cli_test.sh
├── run-compatibility-test.cmake
├── run-roundtrip-test.cmake
└── testdata/
├── 10x10y
├── 10x10y.compressed
├── 64x
├── 64x.compressed
├── alice29.txt
├── alice29.txt.compressed
├── asyoulik.txt
├── asyoulik.txt.compressed
├── backward65536
├── backward65536.compressed
├── bb.binast
├── compressed_file
├── compressed_file.compressed
├── compressed_repeated
├── compressed_repeated.compressed
├── cp1251-utf16le
├── cp1251-utf16le.compressed
├── cp852-utf8
├── cp852-utf8.compressed
├── empty
├── empty.compressed
├── empty.compressed.00
├── empty.compressed.01
├── empty.compressed.02
├── empty.compressed.03
├── empty.compressed.04
├── empty.compressed.05
├── empty.compressed.06
├── empty.compressed.07
├── empty.compressed.08
├── empty.compressed.09
├── empty.compressed.10
├── empty.compressed.11
├── empty.compressed.12
├── empty.compressed.13
├── empty.compressed.14
├── empty.compressed.15
├── empty.compressed.16
├── empty.compressed.17
├── empty.compressed.18
├── lcet10.txt
├── lcet10.txt.compressed
├── mapsdatazrh
├── mapsdatazrh.compressed
├── monkey
├── monkey.compressed
├── plrabn12.txt
├── plrabn12.txt.compressed
├── quickfox
├── quickfox.compressed
├── quickfox_repeated
├── quickfox_repeated.compressed
├── random_chunks
├── random_org_10k.bin.compressed
├── ukkonooa
├── ukkonooa.compressed
├── x
├── x.compressed
├── x.compressed.00
├── x.compressed.01
├── x.compressed.02
├── x.compressed.03
├── xyzzy
├── xyzzy.compressed
├── zeros
├── zeros.compressed
├── zerosukkanooa
└── zerosukkanooa.compressed
================================================
FILE CONTENTS
================================================
================================================
FILE: .bazelignore
================================================
# Exclude Bazel roots (workspaces)
c/fuzz
go
java
js
research
================================================
FILE: .editorconfig
================================================
# http://editorconfig.org
# Consistent coding style across different editors.
# Top-most file
root = true
# Global styles:
# - indent 2 spaces
# - add final new line
# - trim trailing whitespace
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
# BUILD:
# - indent 4 spaces
[BUILD]
indent_size = 4
# Makefile:
# - indent 1 tab
[Makefile]
indent_size = tab
indent_style = tab
# Markdown:
# - indent 4 spaces
# - trailing whitespace is significant
[*.md]
indent_size = 4
trim_trailing_whitespace = false
# Python
# - indent 4 spaces
[*.py]
indent_size = 4
================================================
FILE: .gitattributes
================================================
tests/testdata/* binary
# Exclude everything
**/** export-ignore
# Allowlist some filenames
.bazelignore !export-ignore
BUILD.bazel !export-ignore
CHANGELOG.md !export-ignore
CMakeLists.txt !export-ignore
CONTRIBUTING.md !export-ignore
LICENSE !export-ignore
MANIFEST.in !export-ignore
MODULE.bazel !export-ignore
README !export-ignore
README.md !export-ignore
SECURITY.md !export-ignore
setup.cfg !export-ignore
setup.py !export-ignore
# Add sources
c !export-ignore
c/** !export-ignore
c/common/dictionary.bin* export-ignore
c/fuzz export-ignore
# Add man pages
docs !export-ignore
docs/** !export-ignore
docs/brotli-comparison-study-2015-09-22.pdf export-ignore
# Add python bindings + tests
python !export-ignore
python/** !export-ignore
# Add go bindings + tests
go !export-ignore
go/** !export-ignore
# Add more build files.
scripts !export-ignore
scripts/download_testdata.sh !export-ignore
scripts/libbrotli*.pc.in !export-ignore
# Add testdata
tests !export-ignore
tests/*.sh !export-ignore
tests/*.cmake !export-ignore
tests/testdata !export-ignore
tests/testdata/empty !export-ignore
tests/testdata/empty.compressed !export-ignore
tests/testdata/ukkonooa !export-ignore
tests/testdata/ukkonooa.compressed !export-ignore
tests/testdata/zerosukkanooa.compressed !export-ignore
# Add JNI wrappers
java !export-ignore
java/org !export-ignore
java/org/brotli !export-ignore
java/org/brotli/wrapper !export-ignore
java/org/brotli/wrapper/** !export-ignore
================================================
FILE: .github/dependabot.yml
================================================
# Copyright 2023 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/build_test.yml
================================================
# Copyright 2021 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
# Workflow for building and running tests under Ubuntu
name: Build/Test
on:
push:
branches:
- master
pull_request:
types: [opened, reopened, labeled, unlabeled, synchronize]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
build_test:
name: Build and test ${{ matrix.name }}
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
include:
- name: cmake:gcc
build_system: cmake
c_compiler: gcc
cxx_compiler: g++
- name: cmake:gcc-old
build_system: cmake
c_compiler: gcc
cxx_compiler: g++
os: ubuntu-22.04
- name: cmake:clang
build_system: cmake
c_compiler: clang
cxx_compiler: clang
- name: cmake:clang-old
build_system: cmake
c_compiler: clang
cxx_compiler: clang
os: ubuntu-22.04
- name: cmake:package
build_system: cmake
cmake_args: -DBROTLI_BUILD_FOR_PACKAGE=ON
- name: cmake:static
build_system: cmake
cmake_args: -DBUILD_SHARED_LIBS=OFF
- name: cmake:clang:asan
build_system: cmake
sanitizer: address
c_compiler: clang
cxx_compiler: clang++
- name: cmake:clang:tsan
build_system: cmake
sanitizer: thread
c_compiler: clang
cxx_compiler: clang++
- name: cmake:clang:ubsan
build_system: cmake
sanitizer: undefined
c_compiler: clang
cxx_compiler: clang++
c_flags: -fno-sanitize-recover=undefined,integer
- name: cmake:qemu-arm-neon-gcc
build_system: cmake
c_compiler: arm-linux-gnueabihf-gcc
cxx_compiler: arm-linux-gnueabihf-g++
c_flags: -march=armv7-a -mfloat-abi=hard -mfpu=neon
extra_apt_pkgs: gcc-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user
- name: cmake-osx:clang
build_system: cmake
c_compiler: clang
cxx_compiler: clang++
os: macos-latest
- name: cmake-osx:gcc
build_system: cmake
c_compiler: gcc
cxx_compiler: g++
os: macos-latest
- name: cmake-ios:clang
build_system: cmake
c_compiler: clang
cxx_compiler: clang++
os: macos-latest
skip_tests: true # TODO(eustas): run tests in a simulator
cmake_args: >-
-DCMAKE_SYSTEM_NAME=iOS
-DCMAKE_OSX_ARCHITECTURES=arm64
- name: cmake-win64:msvc-rel
build_system: cmake
cmake_generator: Visual Studio 17 2022
cmake_config: Release
os: windows-latest
- name: cmake-win64:msvc-dbg
build_system: cmake
cmake_generator: Visual Studio 17 2022
cmake_config: Debug
os: windows-latest
- name: fuzz:clang
build_system: fuzz
c_compiler: clang
cxx_compiler: clang++
- name: python3.10:clang
build_system: python
python_version: "3.10"
c_compiler: clang
cxx_compiler: clang++
- name: python3.14:clang
build_system: python
python_version: "3.14"
c_compiler: clang
cxx_compiler: clang++
- name: python3.14t:clang
build_system: python
python_version: "3.14t"
c_compiler: clang
cxx_compiler: clang++
- name: python3.14-win
build_system: python
python_version: "3.14"
os: windows-latest
- name: maven
build_system: maven
- name: bazel:root
build_system: bazel
bazel_project: .
- name: bazel:go
build_system: bazel
bazel_project: go
- name: bazel:java
build_system: bazel
bazel_project: java
- name: bazel:research
build_system: bazel
bazel_project: research
- name: bazel-osx:root
build_system: bazel
bazel_project: .
os: macos-latest
- name: bazel-osx:go
build_system: bazel
bazel_project: go
os: macos-latest
- name: bazel-osx:java
build_system: bazel
bazel_project: java
os: macos-latest
- name: bazel-osx:research
build_system: bazel
bazel_project: research
os: macos-latest
- name: bazel-win:root
build_system: bazel
bazel_project: .
os: windows-latest
# TODO(eustas): restore when go is fixed
#- name: bazel-win:go
# build_system: bazel
# bazel_project: go
# os: windows-latest
# TODO(eustas): restore when kotlin is fixed
#- name: bazel-win:java
# build_system: bazel
# bazel_project: java
# os: windows-latest
- name: bazel-win:research
build_system: bazel
bazel_project: research
os: windows-latest
env:
CC: ${{ matrix.c_compiler || 'gcc' }}
CXX: ${{ matrix.cxx_compiler || 'gcc' }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Install extra deps @ Ubuntu
if: ${{ runner.os == 'Linux' }}
# Already installed: bazel, clang{13-15}, cmake, gcc{9.5-13.1}, java{8,11,17,21}, maven, python{3.10}
run: |
EXTRA_PACKAGES="${{ matrix.extra_apt_pkgs || '' }}"
sudo apt update
sudo apt install -y ${EXTRA_PACKAGES}
- name: Checkout the source
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: false
fetch-depth: 1
- name: Configure / Build / Test with CMake
if: ${{ matrix.build_system == 'cmake' }}
run: |
export ASAN_OPTIONS=detect_leaks=0
declare -a CMAKE_OPTIONS=(${{ matrix.cmake_args || '' }})
CMAKE_OPTIONS+=("-DCMAKE_VERBOSE_MAKEFILE=ON")
[ ! -z '${{ matrix.c_compiler || '' }}' ] && CMAKE_OPTIONS+=(-DCMAKE_C_COMPILER='${{ matrix.c_compiler }}')
[ ! -z '${{ matrix.cxx_compiler || '' }}' ] && CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER='${{ matrix.cxx_compiler }}')
[ ! -z '${{ matrix.sanitizer || '' }}' ] && CMAKE_OPTIONS+=(-DENABLE_SANITIZER='${{ matrix.sanitizer }}')
[ ! -z '${{ matrix.cmake_generator || '' }}' ] && export CMAKE_GENERATOR='${{ matrix.cmake_generator }}'
declare -a CMAKE_BUILD_OPTIONS=()
[ ! -z '${{ matrix.cmake_config || '' }}' ] && CMAKE_BUILD_OPTIONS+=(--config '${{ matrix.cmake_config }}')
declare -a CMAKE_TEST_OPTIONS=()
[ ! -z '${{ matrix.cmake_config || '' }}' ] && CMAKE_TEST_OPTIONS+=(-C '${{ matrix.cmake_config }}')
cmake -B out . ${CMAKE_OPTIONS[*]} -DCMAKE_C_FLAGS='${{ matrix.c_flags || '' }}'
cmake --build out ${CMAKE_BUILD_OPTIONS[*]}
cd out
[ ! -z '${{ matrix.skip_tests || '' }}' ] || ctest ${CMAKE_TEST_OPTIONS[*]}
cd ..
- name: Quick Fuzz
if: ${{ matrix.build_system == 'fuzz' }}
run: |
mkdir ${RUNNER_TEMP}/decode_corpora
unzip java/org/brotli/integration/fuzz_data.zip -d ${RUNNER_TEMP}/decode_corpora
cd ${GITHUB_WORKSPACE}/c/fuzz
bazelisk build --config=asan-libfuzzer :decode_fuzzer
for f in `ls ${RUNNER_TEMP}/decode_corpora`
do
echo "Testing $f"
./bazel-bin/decode_fuzzer_bin ${RUNNER_TEMP}/decode_corpora/$f
done
- name: Build with Bazel
if: ${{ matrix.build_system == 'bazel' }}
run: |
cd ${GITHUB_WORKSPACE}/${{ matrix.bazel_project }}
bazelisk build -c opt ...:all --java_runtime_version=remotejdk_21
- name: Fix symlinks for Bazel (Windows)
if: ${{ matrix.build_system == 'bazel' && runner.os == 'Windows' && matrix.bazel_project == 'java' }}
shell: python
run: |
import fnmatch
import os
import os.path
from shutil import copyfile
os.chdir('${{ matrix.bazel_project }}')
print('Searching for manifests in ' + os.getcwd())
matches = []
for root, dirnames, filenames in os.walk('bazel-bin\\org\\brotli'):
for filename in fnmatch.filter(filenames, '*.runfiles_manifest'):
matches.append(os.path.join(root, filename))
for match in matches:
print('Scanning manifest ' + match)
runfiles = match[:-len('_manifest')]
with open(match) as manifest:
for entry in manifest:
entry = entry.strip()
if not entry.startswith("_main"):
continue
if entry.startswith("_main/external"):
continue
(alias, space, link) = entry.partition(' ')
if alias.endswith('.jar') or alias.endswith('.exe'):
continue
link = link.replace('/', '\\')
alias = alias.replace('/', '\\')
dst = os.path.join(runfiles, alias)
if not os.path.exists(dst):
print(link + ' -> ' + dst)
parent = os.path.dirname(dst)
if not os.path.exists(parent):
os.makedirs(parent)
copyfile(link, dst)
print('Finished resolving symlinks')
- name: Test with Bazel
if: ${{ matrix.build_system == 'bazel' }}
run: |
cd ${GITHUB_WORKSPACE}/${{ matrix.bazel_project }}
bazelisk query "tests(...)" --output=label > ${RUNNER_TEMP}/tests.lst
[ -s ${RUNNER_TEMP}/tests.lst ] && bazelisk test -c opt ...:all --java_runtime_version=remotejdk_21
bazelisk clean
- name: Build / Test with Maven
if: ${{ matrix.build_system == 'maven' }}
run: |
export MAVEN_OPTS=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
cd java/org/brotli
mvn -B install
# TODO(eustas): nuke maven build?
# cd integration
# mvn -B verify
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
if: ${{ matrix.build_system == 'python' }}
with:
python-version: ${{ matrix.python_version }}
# TODO(eustas): use modern setuptools (split out testing)
- name: Build / Test with Python
if: ${{ matrix.build_system == 'python' }}
run: |
python -VV
pip install "setuptools>=70.0.0" pytest
python setup.py build_ext --inplace
pytest ./python/tests
build_test_dotnet:
name: Build and test with .NET
runs-on: ubuntu-latest
steps:
- name: Checkout the source
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: false
fetch-depth: 1
- name: Build / Test
run: |
cd csharp
dotnet build brotlidec.csproj --configuration Release
dotnet test brotlidec.Tests.csproj
================================================
FILE: .github/workflows/build_test_wasm.yml
================================================
# Copyright 2025 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
# Workflow for building and running tests with WASM
name: Build/Test WASM
on:
push:
branches:
- master
pull_request:
types: [opened, reopened, labeled, unlabeled, synchronize]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
build_test_wasm:
name: Build and test with WASM
runs-on: ubuntu-latest
env:
CCACHE_DIR: ${{ github.workspace }}/.ccache
BUILD_TARGET: wasm32
EM_VERSION: 3.1.51
# As of 28.08.2025 ubuntu-latest is 24.04; it is shipped with node 22.18
NODE_VERSION: 22
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: true
fetch-depth: 1
- name: Install node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{env.NODE_VERSION}}
- name: Get non-EMSDK node path
run: which node >> $HOME/.base_node_path
- name: Install emsdk
uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
with:
version: ${{env.EM_VERSION}}
no-cache: true
- name: Set EMSDK node version
run: |
echo "NODE_JS='$(cat $HOME/.base_node_path)'" >> $EMSDK/.emscripten
emsdk construct_env
- name: Build
run: |
LDFLAGS=" -s ALLOW_MEMORY_GROWTH=1 -s NODERAWFS=1 " emcmake cmake -B out .
cmake --build out
cd out; ctest --output-on-failure; cd ..
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master" ]
schedule:
- cron: '18 15 * * 0'
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
analyze:
name: Analyze
runs-on: 'ubuntu-latest'
timeout-minutes: 360
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'cpp', 'java', 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ]
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Checkout repository
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5
with:
languages: ${{ matrix.language }}
# CodeQL is currently crashing on files with large lists:
# https://github.com/github/codeql/issues/13656
config: |
paths-ignore:
- research
- js/test_data.*
- if: matrix.language == 'cpp'
name: Build CPP
uses: github/codeql-action/autobuild@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5
- if: matrix.language == 'cpp' || matrix.language == 'java'
name: Build Java
run: |
cd ${GITHUB_WORKSPACE}/java
bazelisk build --spawn_strategy=local --nouse_action_cache -c opt ...:all
- if: matrix.language == 'javascript'
name: Build JS
uses: github/codeql-action/autobuild@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5
- if: matrix.language == 'cpp' || matrix.language == 'python'
name: Build Python
run: |
python -VV
pip install "setuptools>=70.0.0"
python setup.py build_ext
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5
with:
category: "/language:${{matrix.language}}"
ref: "${{ github.ref != 'master' && github.ref || '/refs/heads/master' }}"
sha: "${{ github.sha }}"
================================================
FILE: .github/workflows/fuzz.yml
================================================
# Copyright 2020 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
# Workflow for building / running oss-fuzz.
name: CIFuzz
on: [pull_request]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Build Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@3e6a7fd7bcd631647ab9beed1fe0897498e6af39 # 22.09.2025
with:
oss-fuzz-project-name: 'brotli'
dry-run: false
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@3e6a7fd7bcd631647ab9beed1fe0897498e6af39 # 22.09.2025
with:
oss-fuzz-project-name: 'brotli'
fuzz-seconds: 600
dry-run: false
- name: Upload Crash
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: failure()
with:
name: artifacts
path: ./out/artifacts
================================================
FILE: .github/workflows/lint.yml
================================================
# Copyright 2025 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
# Workflow for checking typos and buildifier, formatting, etc.
name: "Lint"
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: '18 15 * * 0'
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
check:
name: Lint
runs-on: 'ubuntu-latest'
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Checkout repository
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- name: Install tools
run: |
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew install buildifier ruff typos-cli
- name: Check typos
run: |
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
./scripts/check_typos.sh
- name: Lint Python code
run: |
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
ruff check --extend-select=C4,C90,PERF,RET,SIM,W
# TODO(eustas): run buildifier
================================================
FILE: .github/workflows/release.yaml
================================================
# Copyright 2023 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
# Workflow for building the release binaries.
name: Release build / deploy
on:
push:
branches:
- master
- v*.*.*
release:
types: [ published ]
pull_request:
types: [opened, reopened, labeled, unlabeled, synchronize]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
windows_build:
name: Windows Build (vcpkg / ${{ matrix.triplet }})
runs-on: ${{ matrix.runs_on }}
strategy:
fail-fast: false
matrix:
include:
- triplet: x86-windows-dynamic
arch: '-A Win32'
build_shared_libs: 'ON'
runs_on: windows-latest
- triplet: x64-windows-dynamic
arch: '-A x64'
build_shared_libs: 'ON'
runs_on: windows-latest
- triplet: arm64-windows-dynamic
arch: '-A ARM64'
build_shared_libs: 'ON'
runs_on: windows-11-arm
- triplet: x86-windows-static
arch: '-A Win32'
build_shared_libs: 'OFF'
runs_on: windows-latest
- triplet: x64-windows-static
arch: '-A x64'
build_shared_libs: 'OFF'
runs_on: windows-latest
- triplet: arm64-windows-static
arch: '-A ARM64'
build_shared_libs: 'OFF'
runs_on: windows-11-arm
env:
VCPKG_VERSION: '2022.11.14'
VCPKG_ROOT: vcpkg
VCPKG_DISABLE_METRICS: 1
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Checkout the source
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: false
fetch-depth: 1
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
id: cache-vcpkg
with:
path: vcpkg
key: release-${{ runner.os }}-vcpkg-${{ env.VCPKG_VERSION }}-${{ matrix.triplet }}
- name: Download vcpkg
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
shell: 'powershell'
run: |
Invoke-WebRequest -Uri "https://github.com/microsoft/vcpkg/archive/refs/tags/${{ env.VCPKG_VERSION }}.zip" -OutFile "vcpkg.zip"
- name: Bootstrap vcpkg
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
shell: 'bash'
run: |
set -x
unzip -q vcpkg.zip
rm -rf ${VCPKG_ROOT}
mv vcpkg-${VCPKG_VERSION} ${VCPKG_ROOT}
${VCPKG_ROOT}/bootstrap-vcpkg.sh
- name: Configure
shell: 'bash'
run: |
set -x
mkdir out
cmake -Bout -H. ${{ matrix.arch }} \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=${{ matrix.build_shared_libs }} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`pwd`/prefix \
-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \
#
- name: Build
shell: 'bash'
run: |
set -x
cmake --build out --config Release
- name: Install
shell: 'bash'
run: |
set -x
cmake --build out --config Release --target install
cp LICENSE prefix/bin/LICENSE.brotli
- name: Package release zip
shell: 'powershell'
run: |
Compress-Archive -Path prefix\bin\* `
-DestinationPath brotli-${{matrix.triplet}}.zip
- name: Upload package
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: brotli-${{matrix.triplet}}
path: brotli-${{matrix.triplet}}.zip
compression-level: 0
testdata_upload:
name: Upload testdata
runs-on: 'ubuntu-latest'
defaults:
run:
shell: bash
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Checkout the source
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: false
fetch-depth: 1
- name: Compress testdata
run: |
tar cvfJ testdata.txz tests/testdata
- name: Upload archive
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: testdata
path: testdata.txz
compression-level: 0
publish_release_assets:
name: Publish release assets
needs: [windows_build, testdata_upload]
if: github.event_name == 'release'
runs-on: [ubuntu-latest]
permissions:
contents: write
steps:
- name: Checkout the source
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: false
fetch-depth: 1
- name: Download all artifacts
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
path: release_assets
merge-multiple: true
- name: Publish assets
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload ${{ github.event.release.tag_name }} ./release_assets/*
archive_build:
needs: publish_release_assets
name: Build and test from archive
runs-on: 'ubuntu-latest'
defaults:
run:
shell: bash
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: Checkout the source
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: false
fetch-depth: 1
- name: Archive
run: |
git archive HEAD -o archive.tgz
- name: Pick tag
run: |
echo "BROTLI_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
- name: Extract
run: |
mkdir archive
cd archive
tar xvzf ../archive.tgz
- name: Download testdata
run: |
cd archive
scripts/download_testdata.sh
- name: Configure and Build
run: |
cd archive
cmake -B out .
cmake --build out
- name: Test
run: |
cd archive
cd out
ctest
================================================
FILE: .github/workflows/scorecard.yml
================================================
# This workflow uses actions that are not certified by GitHub. They are provided
# by a third-party and are governed by separate terms of service, privacy
# policy, and support documentation.
name: Scorecard supply-chain security
on:
# For Branch-Protection check. Only the default branch is supported. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
branch_protection_rule:
# To guarantee Maintained check is occasionally updated. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
schedule:
- cron: '23 21 * * 1'
push:
branches: [ "master" ]
# Declare default permissions as read only.
permissions: read-all
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
# Needed to publish results and get a badge (see publish_results below).
id-token: write
# Uncomment the permissions below if installing in a private repository.
# contents: read
# actions: read
steps:
- name: Harden Runner
uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2
with:
egress-policy: audit
- name: "Checkout code"
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
with:
results_file: results.sarif
results_format: sarif
# (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
# - you want to enable the Branch-Protection check on a *public* repository, or
# - you are installing Scorecard on a *private* repository
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
# repo_token: ${{ secrets.SCORECARD_TOKEN }}
# Public repositories:
# - Publish results to OpenSSF REST API for easy access by consumers
# - Allows the repository to include the Scorecard badge.
# - See https://github.com/ossf/scorecard-action#publishing-results.
# For private repositories:
# - `publish_results` will always be set to `false`, regardless
# of the value entered here.
publish_results: true
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: SARIF file
path: results.sarif
retention-days: 5
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v2.23.3
with:
sarif_file: results.sarif
================================================
FILE: .gitignore
================================================
# C
*.d
*.o
*.obj
bin/
buildfiles/
**/obj/
dist/
**/bazel-*
# Python
__pycache__/
*.py[cod]
*.so
*.egg-info/
# Tests
*.txt.uncompressed
*.br
*.unbr
================================================
FILE: BUILD.bazel
================================================
# Description:
# Brotli is a generic-purpose lossless compression algorithm.
load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
package(
default_visibility = ["//visibility:public"],
)
licenses(["notice"]) # MIT
exports_files(["LICENSE"])
config_setting(
name = "clang-cl",
flag_values = {
"@bazel_tools//tools/cpp:compiler": "clang-cl",
},
visibility = ["//visibility:public"],
)
config_setting(
name = "msvc",
flag_values = {
"@bazel_tools//tools/cpp:compiler": "msvc-cl",
},
visibility = ["//visibility:public"],
)
STRICT_C_OPTIONS = select({
":msvc": [],
":clang-cl": [
"/W4",
"-Wconversion",
"-Wlong-long",
"-Wmissing-declarations",
"-Wmissing-prototypes",
"-Wno-strict-aliasing",
"-Wshadow",
"-Wsign-compare",
"-Wno-sign-conversion",
],
"//conditions:default": [
"--pedantic-errors",
"-Wall",
"-Wconversion",
"-Werror",
"-Wextra",
"-Wlong-long",
"-Wmissing-declarations",
"-Wmissing-prototypes",
"-Wno-strict-aliasing",
"-Wshadow",
"-Wsign-compare",
],
})
filegroup(
name = "public_headers",
srcs = glob(["c/include/brotli/*.h"]),
)
filegroup(
name = "common_headers",
srcs = glob(["c/common/*.h"]),
)
filegroup(
name = "common_sources",
srcs = glob(["c/common/*.c"]),
)
filegroup(
name = "dec_headers",
srcs = glob(["c/dec/*.h"]),
)
filegroup(
name = "dec_sources",
srcs = glob(["c/dec/*.c"]),
)
filegroup(
name = "enc_headers",
srcs = glob(["c/enc/*.h"]),
)
filegroup(
name = "enc_sources",
srcs = glob(["c/enc/*.c"]),
)
cc_library(
name = "brotli_inc",
hdrs = [":public_headers"],
copts = STRICT_C_OPTIONS,
strip_include_prefix = "c/include",
)
cc_library(
name = "brotlicommon",
srcs = [":common_sources"],
hdrs = [":common_headers"],
copts = STRICT_C_OPTIONS,
deps = [":brotli_inc"],
)
cc_library(
name = "brotlidec",
srcs = [":dec_sources"],
hdrs = [":dec_headers"],
copts = STRICT_C_OPTIONS,
deps = [":brotlicommon"],
)
cc_library(
name = "brotlienc",
srcs = [":enc_sources"],
hdrs = [":enc_headers"],
copts = STRICT_C_OPTIONS,
linkopts = select({
":clang-cl": [],
":msvc": [],
"//conditions:default": ["-lm"],
}),
deps = [":brotlicommon"],
)
cc_binary(
name = "brotli",
srcs = ["c/tools/brotli.c"],
copts = STRICT_C_OPTIONS,
linkstatic = 1,
deps = [
":brotlidec",
":brotlienc",
],
)
filegroup(
name = "dictionary",
srcs = ["c/common/dictionary.bin"],
)
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
## [1.2.0] - 2025-10-27
### SECURITY
- python: added `Decompressor::can_accept_more_data` method and optional
`output_buffer_limit` argument `Decompressor::process`;
that allows mitigation of unexpectedly large output;
reported by Charles Chan (https://github.com/charleswhchan)
### Added
- **decoder / encoder: added static initialization to reduce binary size**
- python: allow limiting decoder output (see SECURITY section)
- CLI: `brcat` alias; allow decoding concatenated brotli streams
- kt: pure Kotlin decoder
- cgo: support "raw" dictionaries
- build: Bazel modules
### Removed
- java: dropped `finalize()` for native entities
### Fixed
- java: in `compress` pass correct length to native encoder
### Improved
- build: install man pages
- build: updated / fixed / refined Bazel buildfiles
- encoder: faster encoding
- cgo: link via pkg-config
- python: modernize extension / allow multi-phase module initialization
### Changed
- decoder / encoder: static tables use "small" model (allows 2GiB+ binaries)
## [1.1.0] - 2023-08-28
### Added
- decoder: `BrotliDecoderAttachDictionary`
- decoder: `BrotliDecoderOnFinish` callback behind `BROTLI_REPORTING`
- decoder: `BrotliDecoderSetMetadataCallbacks`
- encoder: `BrotliEncoderPrepareDictionary`,
`BrotliEncoderDestroyPreparedDictionary`,
`BrotliEncoderAttachPreparedDictionary`
- decoder: `BrotliEncoderOnFinish` callback behind `BROTLI_REPORTING`
- common: `BrotliSharedDictionaryCreateInstance`,
`BrotliSharedDictionaryDestroyInstance`,
`BrotliSharedDictionaryAttach`
- CLI: `--dictionary` option
- java: encoder wrapper: `Parameters.mode`
- java: `Brotli{Input|Output}Stream.attachDictionary`
- java: wrapper: partial byte array input
- typescript: decoder (transpiled from Java)
### Removed
- build: `BROTLI_BUILD_PORTABLE` option
### Fixed
- java: JNI decoder failed sometimes on power of 2 payloads
### Improved
- java / js: smaller decoder footprint
- decoder: faster decoding
- encoder: faster encoding
- encoder: smaller stack frames
## [1.0.9] - 2020-08-27
Re-release of 1.0.8.
## [1.0.8] - 2020-08-27
### SECURITY
- CVE-2020-8927: potential overflow when input chunk is >2GiB
### Added
- encoder: `BROTLI_PARAM_STREAM_OFFSET`
### Improved
- CLI: better reporting
- CLI: workaround for "lying feof"
- java: faster decoding
- java: support "large window"
- encoder: use less memory
- release: filter sources for the tarball
## [1.0.7] - 2018-10-23
### Improved
- decoder: faster decoding on ARM CPU
## [1.0.6] - 2018-09-13
### Fixed
- build: AutoMake and CMake build
- java: JDK 8<->9 incompatibility
## [1.0.5] - 2018-06-27
### Added
- scripts: extraction of static dictionary from RFC
### Improved
- encoder: better compression at quality 1
- encoder: better compression with "large window"
## [1.0.4] - 2018-03-29
### Added
- encoder: `BROTLI_PARAM_NPOSTFIX`, `BROTLI_PARAM_NDIRECT`
- CLI: `--large_window` option
### Improved
- encoder: better compression
## [1.0.3] - 2018-03-02
### Added
- decoder: `BROTLI_DECODER_PARAM_LARGE_WINDOW` enum
- encoder: `BROTLI_PARAM_LARGE_WINDOW` enum
- java: `BrotliInputStream.setEager`
### Fixed
- build: AutoMake build in some environments
- encoder: fix one-shot q=10 1-byte input compression
### Improved
- encoder: better font compression
## [1.0.2] - 2017-11-28
### Added
- build: AutoMake
- research: better dictionary generators
## [1.0.1] - 2017-09-22
### Changed
- clarifications in `README.md`
## [1.0.0] - 2017-09-20
### Added
- decoder: `BrotliDecoderSetParameter`
- csharp: decoder (transpiled from Java)
- java: JNI wrappers
- javascript: decoder (transpiled from Java)
- python: streaming decompression
- research: dictionary generator
### Changed
- CLI: rename `bro` to `brotli`
### Removed
- decoder: `BrotliDecoderSetCustomDictionary`
- encoder: `BrotliEncoderSetCustomDictionary`
### Improved
- java: faster decoding
- encoder: faster compression
## [0.6.0] - 2017-04-10
### Added
- CLI: `--no-copy-stat option
- java: pure java decoder
- build: fuzzers
- research: `brotlidump` tool to explore brotli streams
- go: wrapper
### Removed
- decoder: API with plain `Brotli` prefix
### Deprecated
- encoder: `BrotliEncoderInputBlockSize`, `BrotliEncoderCopyInputToRingBuffer`,
`BrotliEncoderWriteData`
### Improved
- encoder: faster compression
- encoder: denser compression
- decoder: faster decompression
- python: release GIL
- python: use zero-copy API
## [0.5.2] - 2016-08-11
### Added
- common: `BROTLI_BOOL`, `BROTLI_TRUE`, `BROTLI_FALSE`
- decoder: API with `BrotliDecoder` prefix instead of plain `Brotli`
- build: Bazel, CMake
### Deprecated
- decoder: API with plain `Brotli` prefix
### Changed
- boolean argument / result types are re-branded as `BROTLI_BOOL`
### Improved
- build: reduced amount of warnings in various build environments
- encoder: faster compression
- encoder: lower memory usage
## [0.5.0] - 2016-06-15
### Added
- common: library has been assembled from shared parts of decoder and encoder
- encoder: C API
### Removed
- encoder: C++ API
## [0.4.0] - 2016-06-14
### Added
- encoder: faster compression modes (quality 0 and 1)
- decoder: `BrotliGetErrorCode`, `BrotliErrorString` and
`BROTLI_ERROR_CODES_LIST`
### Removed
- decoder: deprecated streaming API (using `BrotliInput`)
### Fixed
- decoder: possible pointer underflow
### Improved
- encoder: faster compression
## [0.3.0] - 2015-12-22
### LICENSE
License have been upgraded to more permissive MIT.
### Added
- CLI: `--window` option
- `tools/version.h` file
- decoder: low level streaming API
- decoder: custom memory manager API
### Deprecated
- decoder: streaming API using `BrotliInput` struct
### Fixed
- decoder: processing of uncompressed blocks
- encoder: possible division by zero
### Improved
- encoder: faster decompression
- build: more portable builds for various CPU architectures
## [0.2.0] - 2015-09-01
### Added
- CLI: `--verbose` and `--repeat` options
### Fixed
- decoder: processing of uncompressed blocks
- encoder: block stitching on quality 10 / 11
### Improved
- build: CI/CD integration
- build: better test coverage
- encoder: better compression of UTF-8 content
- encoder: faster decompression
## [0.1.0] - 2015-08-11
Initial release.
================================================
FILE: CMakeLists.txt
================================================
# Available CMake versions:
# - Ubuntu 20.04 LTS : 3.16.3
# - Solaris 11.4 SRU 15 : 3.15
cmake_minimum_required(VERSION 3.15)
# Since this project's version is loaded from other files, this policy
# will help suppress the warning generated by cmake.
# This policy is set because we can't provide "VERSION" in "project" command.
# Use `cmake --help-policy CMP0048` for more information.
cmake_policy(SET CMP0048 NEW)
project(brotli C)
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to Release as none was specified")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build" FORCE)
else()
message(STATUS "Build type is '${CMAKE_BUILD_TYPE}'")
endif()
include(CheckCSourceCompiles)
check_c_source_compiles(
"#if defined(__EMSCRIPTEN__)
int main() {return 0;}
#endif"
BROTLI_EMSCRIPTEN
)
if (BROTLI_EMSCRIPTEN)
message("-- Compiler is EMSCRIPTEN")
else()
message("-- Compiler is not EMSCRIPTEN")
endif()
if (BROTLI_EMSCRIPTEN)
message(STATUS "Switching to static build for EMSCRIPTEN")
set(BUILD_SHARED_LIBS OFF)
endif()
# Reflect CMake variable as a build option.
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
set(BROTLI_BUILD_TOOLS ON CACHE BOOL "Build/install CLI tools")
set(BROTLI_BUILD_FOR_PACKAGE OFF CACHE BOOL "Build/install both shared and static libraries")
if (BROTLI_BUILD_FOR_PACKAGE AND NOT BUILD_SHARED_LIBS)
message(FATAL_ERROR "Both BROTLI_BUILD_FOR_PACKAGE and BUILD_SHARED_LIBS are set")
endif()
# If Brotli is being bundled in another project, we don't want to
# install anything. However, we want to let people override this, so
# we'll use the BROTLI_BUNDLED_MODE variable to let them do that; just
# set it to OFF in your project before you add_subdirectory(brotli).
get_directory_property(BROTLI_PARENT_DIRECTORY PARENT_DIRECTORY)
if (NOT DEFINED BROTLI_BUNDLED_MODE)
# Bundled mode hasn't been set one way or the other, set the default
# depending on whether or not we are the top-level project.
if (BROTLI_PARENT_DIRECTORY)
set(BROTLI_BUNDLED_MODE ON)
else()
set(BROTLI_BUNDLED_MODE OFF)
endif()
endif() # BROTLI_BUNDLED_MODE
mark_as_advanced(BROTLI_BUNDLED_MODE)
include(GNUInstallDirs)
# Reads macro from .h file; it is expected to be a single-line define.
function(read_macro PATH MACRO OUTPUT)
file(STRINGS ${PATH} _line REGEX "^#define +${MACRO} +(.+)$")
string(REGEX REPLACE "^#define +${MACRO} +(.+)$" "\\1" _val "${_line}")
set(${OUTPUT} ${_val} PARENT_SCOPE)
endfunction(read_macro)
# Version information
read_macro("c/common/version.h" "BROTLI_VERSION_MAJOR" BROTLI_VERSION_MAJOR)
read_macro("c/common/version.h" "BROTLI_VERSION_MINOR" BROTLI_VERSION_MINOR)
read_macro("c/common/version.h" "BROTLI_VERSION_PATCH" BROTLI_VERSION_PATCH)
set(BROTLI_VERSION "${BROTLI_VERSION_MAJOR}.${BROTLI_VERSION_MINOR}.${BROTLI_VERSION_PATCH}")
mark_as_advanced(BROTLI_VERSION BROTLI_VERSION_MAJOR BROTLI_VERSION_MINOR BROTLI_VERSION_PATCH)
# ABI Version information
read_macro("c/common/version.h" "BROTLI_ABI_CURRENT" BROTLI_ABI_CURRENT)
read_macro("c/common/version.h" "BROTLI_ABI_REVISION" BROTLI_ABI_REVISION)
read_macro("c/common/version.h" "BROTLI_ABI_AGE" BROTLI_ABI_AGE)
math(EXPR BROTLI_ABI_COMPATIBILITY "${BROTLI_ABI_CURRENT} - ${BROTLI_ABI_AGE}")
mark_as_advanced(BROTLI_ABI_CURRENT BROTLI_ABI_REVISION BROTLI_ABI_AGE BROTLI_ABI_COMPATIBILITY)
if (ENABLE_SANITIZER)
set(CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
endif ()
include(CheckLibraryExists)
set(LIBM_LIBRARY)
set(LIBM_DEP)
CHECK_LIBRARY_EXISTS(m log2 "" HAVE_LIB_M)
if (HAVE_LIB_M)
set(LIBM_LIBRARY "m")
if (NOT BUILD_SHARED_LIBS)
set(LIBM_DEP "-lm")
endif()
endif()
set(BROTLI_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/c/include")
mark_as_advanced(BROTLI_INCLUDE_DIRS)
if (BROTLI_BUILD_FOR_PACKAGE)
set(BROTLI_SHARED_LIBRARIES brotlienc brotlidec brotlicommon)
set(BROTLI_STATIC_LIBRARIES brotlienc-static brotlidec-static brotlicommon-static)
set(BROTLI_LIBRARIES ${BROTLI_SHARED_LIBRARIES} ${LIBM_LIBRARY})
else() # NOT BROTLI_BUILD_FOR_PACKAGE
if (BUILD_SHARED_LIBS)
set(BROTLI_SHARED_LIBRARIES brotlienc brotlidec brotlicommon)
set(BROTLI_STATIC_LIBRARIES)
else() # NOT BUILD_SHARED_LIBS
set(BROTLI_SHARED_LIBRARIES)
set(BROTLI_STATIC_LIBRARIES brotlienc brotlidec brotlicommon)
endif()
set(BROTLI_LIBRARIES ${BROTLI_SHARED_LIBRARIES} ${BROTLI_STATIC_LIBRARIES} ${LIBM_LIBRARY})
endif() # BROTLI_BUILD_FOR_PACKAGE
mark_as_advanced(BROTLI_LIBRARIES)
if (MSVC)
message(STATUS "Defining _CRT_SECURE_NO_WARNINGS to avoid warnings about security")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()
file(GLOB_RECURSE BROTLI_COMMON_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/common/*.c)
file(GLOB_RECURSE BROTLI_DEC_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/dec/*.c)
file(GLOB_RECURSE BROTLI_ENC_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/enc/*.c)
add_library(brotlicommon ${BROTLI_COMMON_SOURCES})
add_library(brotlidec ${BROTLI_DEC_SOURCES})
add_library(brotlienc ${BROTLI_ENC_SOURCES})
if (BROTLI_BUILD_FOR_PACKAGE)
add_library(brotlicommon-static STATIC ${BROTLI_COMMON_SOURCES})
add_library(brotlidec-static STATIC ${BROTLI_DEC_SOURCES})
add_library(brotlienc-static STATIC ${BROTLI_ENC_SOURCES})
endif()
# Older CMake versions does not understand INCLUDE_DIRECTORIES property.
include_directories(${BROTLI_INCLUDE_DIRS})
if (BUILD_SHARED_LIBS)
foreach(lib ${BROTLI_SHARED_LIBRARIES})
target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" )
string(TOUPPER "${lib}" LIB)
set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL "${LIB}_SHARED_COMPILATION")
endforeach()
endif() # BUILD_SHARED_LIBS
foreach(lib ${BROTLI_SHARED_LIBRARIES} ${BROTLI_STATIC_LIBRARIES})
target_link_libraries(${lib} ${LIBM_LIBRARY})
set_property(TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS})
set_target_properties(${lib} PROPERTIES
VERSION "${BROTLI_ABI_COMPATIBILITY}.${BROTLI_ABI_AGE}.${BROTLI_ABI_REVISION}"
SOVERSION "${BROTLI_ABI_COMPATIBILITY}")
if (NOT BROTLI_EMSCRIPTEN)
set_target_properties(${lib} PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
endif()
set_property(TARGET ${lib} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${BROTLI_INCLUDE_DIRS}>")
endforeach() # BROTLI_xxx_LIBRARIES
target_link_libraries(brotlidec brotlicommon)
target_link_libraries(brotlienc brotlicommon)
# For projects stuck on older versions of CMake, this will set the
# BROTLI_INCLUDE_DIRS and BROTLI_LIBRARIES variables so they still
# have a relatively easy way to use Brotli:
#
# include_directories(${BROTLI_INCLUDE_DIRS})
# target_link_libraries(foo ${BROTLI_LIBRARIES})
if (BROTLI_PARENT_DIRECTORY)
set(BROTLI_INCLUDE_DIRS "${BROTLI_INCLUDE_DIRS}" PARENT_SCOPE)
set(BROTLI_LIBRARIES "${BROTLI_LIBRARIES}" PARENT_SCOPE)
endif()
# Build the brotli executable
if (BROTLI_BUILD_TOOLS)
add_executable(brotli c/tools/brotli.c)
target_link_libraries(brotli ${BROTLI_LIBRARIES})
# brotli is a CLI tool
set_target_properties(brotli PROPERTIES MACOSX_BUNDLE OFF)
endif()
# Installation
if (NOT BROTLI_BUNDLED_MODE)
if (BROTLI_BUILD_TOOLS)
install(
TARGETS brotli
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
endif()
install(
TARGETS ${BROTLI_SHARED_LIBRARIES} ${BROTLI_STATIC_LIBRARIES}
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
install(
DIRECTORY ${BROTLI_INCLUDE_DIRS}/brotli
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
endif() # BROTLI_BUNDLED_MODE
# Tests
# Integration tests, those depend on `brotli` binary
if (NOT BROTLI_DISABLE_TESTS AND BROTLI_BUILD_TOOLS)
# If we're targeting Windows but not running on Windows, we need Wine
# to run the tests...
if (WIN32 AND NOT CMAKE_HOST_WIN32)
find_program(BROTLI_WRAPPER NAMES wine)
if (NOT BROTLI_WRAPPER)
message(STATUS "wine not found, disabling tests")
set(BROTLI_DISABLE_TESTS TRUE)
endif()
endif() # WIN32 emulation
if (BROTLI_EMSCRIPTEN)
find_program(BROTLI_WRAPPER NAMES node)
if (NOT BROTLI_WRAPPER)
message(STATUS "node not found, disabling tests")
set(BROTLI_DISABLE_TESTS TRUE)
endif()
endif() # BROTLI_EMSCRIPTEN
endif() # BROTLI_DISABLE_TESTS
# NB: BROTLI_DISABLE_TESTS might have changed.
if (NOT BROTLI_DISABLE_TESTS AND BROTLI_BUILD_TOOLS)
# If our compiler is a cross-compiler that we know about (arm/aarch64),
# then we need to use qemu to execute the tests.
if ("${CMAKE_C_COMPILER}" MATCHES "^.*/arm-linux-gnueabihf-.*$")
message(STATUS "Detected arm-linux-gnueabihf cross-compilation")
set(BROTLI_WRAPPER "qemu-arm")
set(BROTLI_WRAPPER_LD_PREFIX "/usr/arm-linux-gnueabihf")
endif()
if ("${CMAKE_C_COMPILER}" MATCHES "^.*/arm-linux-gnueabi-.*$")
message(STATUS "Detected arm-linux-gnueabi cross-compilation")
set(BROTLI_WRAPPER "qemu-arm")
set(BROTLI_WRAPPER_LD_PREFIX "/usr/arm-linux-gnueabi")
endif()
if ("${CMAKE_C_COMPILER}" MATCHES "^.*/aarch64-linux-gnu-.*$")
message(STATUS "Detected aarch64-linux-gnu cross-compilation")
set(BROTLI_WRAPPER "qemu-aarch64")
set(BROTLI_WRAPPER_LD_PREFIX "/usr/aarch64-linux-gnu")
endif()
include(CTest)
enable_testing()
set(ROUNDTRIP_INPUTS
tests/testdata/alice29.txt
tests/testdata/asyoulik.txt
tests/testdata/lcet10.txt
tests/testdata/plrabn12.txt
c/enc/encode.c
c/common/dictionary.h
c/dec/decode.c)
foreach(INPUT ${ROUNDTRIP_INPUTS})
get_filename_component(OUTPUT_NAME "${INPUT}" NAME)
set(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_NAME}")
set(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}")
if (EXISTS "${INPUT_FILE}")
foreach(quality 1 6 9 11)
add_test(NAME "${BROTLI_TEST_PREFIX}roundtrip/${INPUT}/${quality}"
COMMAND "${CMAKE_COMMAND}"
-DBROTLI_WRAPPER=${BROTLI_WRAPPER}
-DBROTLI_WRAPPER_LD_PREFIX=${BROTLI_WRAPPER_LD_PREFIX}
-DBROTLI_CLI=$<TARGET_FILE:brotli>
-DQUALITY=${quality}
-DINPUT=${INPUT_FILE}
-DOUTPUT=${OUTPUT_FILE}.${quality}
-P ${CMAKE_CURRENT_SOURCE_DIR}/tests/run-roundtrip-test.cmake)
endforeach()
else()
message(NOTICE "Test file ${INPUT} does not exist; OK on tarball builds; consider running scripts/download_testdata.sh before configuring.")
endif()
endforeach()
file(GLOB_RECURSE
COMPATIBILITY_INPUTS
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
tests/testdata/*.compressed*)
foreach(INPUT ${COMPATIBILITY_INPUTS})
string(REGEX REPLACE "([a-zA-Z0-9\\.]+)\\.compressed(\\.[0-9]+)?$" "\\1" UNCOMPRESSED_INPUT "${INPUT}")
if (EXISTS ${UNCOMPRESSED_INPUT})
add_test(NAME "${BROTLI_TEST_PREFIX}compatibility/${INPUT}"
COMMAND "${CMAKE_COMMAND}"
-DBROTLI_WRAPPER=${BROTLI_WRAPPER}
-DBROTLI_WRAPPER_LD_PREFIX=${BROTLI_WRAPPER_LD_PREFIX}
-DBROTLI_CLI=$<TARGET_FILE:brotli>
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}
-P ${CMAKE_CURRENT_SOURCE_DIR}/tests/run-compatibility-test.cmake)
endif()
endforeach()
endif() # BROTLI_DISABLE_TESTS
# Generate a pkg-config files
function(generate_pkg_config_path outvar path)
string(LENGTH "${path}" path_length)
set(path_args ${ARGV})
list(REMOVE_AT path_args 0 1)
list(LENGTH path_args path_args_remaining)
set("${outvar}" "${path}")
while(path_args_remaining GREATER 1)
list(GET path_args 0 name)
list(GET path_args 1 value)
get_filename_component(value_full "${value}" ABSOLUTE)
string(LENGTH "${value}" value_length)
if (path_length EQUAL value_length AND path STREQUAL value)
set("${outvar}" "\${${name}}")
break()
elseif (path_length GREATER value_length)
# We might be in a subdirectory of the value, but we have to be
# careful about a prefix matching but not being a subdirectory
# (for example, /usr/lib64 is not a subdirectory of /usr/lib).
# We'll do this by making sure the next character is a directory
# separator.
string(SUBSTRING "${path}" ${value_length} 1 sep)
if (sep STREQUAL "/")
string(SUBSTRING "${path}" 0 ${value_length} s)
if (s STREQUAL value)
string(SUBSTRING "${path}" "${value_length}" -1 suffix)
set("${outvar}" "\${${name}}${suffix}")
break()
endif()
endif()
endif()
list(REMOVE_AT path_args 0 1)
list(LENGTH path_args path_args_remaining)
endwhile()
set("${outvar}" "${${outvar}}" PARENT_SCOPE)
endfunction(generate_pkg_config_path)
function(transform_pc_file INPUT_FILE OUTPUT_FILE VERSION)
file(READ ${INPUT_FILE} TEXT)
set(PREFIX "${CMAKE_INSTALL_PREFIX}")
string(REGEX REPLACE "@prefix@" "${PREFIX}" TEXT ${TEXT})
string(REGEX REPLACE "@exec_prefix@" "${PREFIX}" TEXT ${TEXT})
string(REGEX REPLACE "@libm@" "${LIBM_DEP}" TEXT ${TEXT})
generate_pkg_config_path(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}" prefix "${PREFIX}")
string(REGEX REPLACE "@libdir@" "${LIBDIR}" TEXT ${TEXT})
generate_pkg_config_path(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}" prefix "${PREFIX}")
string(REGEX REPLACE "@includedir@" "${INCLUDEDIR}" TEXT ${TEXT})
string(REGEX REPLACE "@PACKAGE_VERSION@" "${VERSION}" TEXT ${TEXT})
file(WRITE ${OUTPUT_FILE} ${TEXT})
endfunction()
transform_pc_file("scripts/libbrotlicommon.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc" "${BROTLI_VERSION}")
transform_pc_file("scripts/libbrotlidec.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc" "${BROTLI_VERSION}")
transform_pc_file("scripts/libbrotlienc.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" "${BROTLI_VERSION}")
if (NOT BROTLI_BUNDLED_MODE)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
endif() # BROTLI_BUNDLED_MODE
if (BROTLI_BUILD_TOOLS)
install(FILES "docs/brotli.1"
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
endif()
install(FILES docs/constants.h.3 docs/decode.h.3 docs/encode.h.3 docs/types.h.3
DESTINATION "${CMAKE_INSTALL_MANDIR}/man3")
if (ENABLE_COVERAGE STREQUAL "yes")
setup_target_for_coverage(coverage test coverage)
endif()
================================================
FILE: CONTRIBUTING.md
================================================
Want to contribute? Great! First, read this page (including the small print at
the end).
### Before you contribute
Before we can use your code, you must sign the
[Google Individual Contributor License Agreement]
(https://cla.developers.google.com/about/google-individual)
(CLA), which you can do online. The CLA is necessary mainly because you own the
copyright to your changes, even after your contribution becomes part of our
codebase, so we need your permission to use and distribute your code. We also
need to be sure of various other things—for instance that you'll tell us if you
know that your code infringes on other people's patents. You don't have to sign
the CLA until after you've submitted your code for review and a member has
approved it, but you must do it before we can put your code into our codebase.
Before you start working on a larger contribution, you should get in touch with
us first through the issue tracker with your idea so that we can help out and
possibly guide you. Coordinating up front makes it much easier to avoid
frustration later on.
### Code reviews
All submissions, including submissions by project members, require review. We
use Github pull requests for this purpose.
### Code style
Code should follow applicable formatting and style guides described in
[Google Style Guides](https://google.github.io/styleguide/). C code should be
C89 compatible.
### The small print
Contributions made by corporations are covered by a different agreement than
the one above, the [Software Grant and Corporate Contributor License Agreement]
(https://cla.developers.google.com/about/google-corporate).
================================================
FILE: LICENSE
================================================
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: MANIFEST.in
================================================
include CONTRIBUTING.md
include c/common/*.c
include c/common/*.h
include c/dec/*.c
include c/dec/*.h
include c/enc/*.c
include c/enc/*.h
include c/include/brotli/*.h
include LICENSE
include MANIFEST.in
include python/_brotli.cc
include python/brotli.py
include python/README.md
include python/tests/*
include README.md
include setup.py
include tests/testdata/*
include c/tools/brotli.c
================================================
FILE: MODULE.bazel
================================================
# Copyright 2025 The Brotli Authors. All rights reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
"""Brotli reference implementation"""
module(
name = "brotli",
version = "1.2.0",
repo_name = "org_brotli",
)
bazel_dep(name = "rules_cc", version = "0.2.17")
================================================
FILE: README
================================================
BROTLI DATA COMPRESSION LIBRARY
Brotli is a generic-purpose lossless compression algorithm that compresses data
using a combination of a modern variant of the LZ77 algorithm, Huffman coding
and 2nd order context modeling, with a compression ratio comparable to the best
currently available general-purpose compression methods. It is similar in speed
with deflate but offers more dense compression.
The specification of the Brotli Compressed Data Format is defined in RFC 7932
https://datatracker.ietf.org/doc/html/rfc7932
Brotli is open-sourced under the MIT License, see the LICENSE file.
Brotli mailing list:
https://groups.google.com/g/brotli
================================================
FILE: README.md
================================================
<p align="center">
<img src="https://github.com/google/brotli/actions/workflows/build_test.yml/badge.svg" alt="GitHub Actions Build Status" href="https://github.com/google/brotli/actions?query=branch%3Amaster">
<img src="https://oss-fuzz-build-logs.storage.googleapis.com/badges/brotli.svg" alt="Fuzzing Status" href="https://oss-fuzz-build-logs.storage.googleapis.com/index.html#brotli">
</p>
<p align="center"><img src="https://brotli.org/brotli.svg" alt="Brotli" width="64"></p>
### Introduction
Brotli is a generic-purpose lossless compression algorithm that compresses data
using a combination of a modern variant of the LZ77 algorithm, Huffman coding
and 2nd order context modeling, with a compression ratio comparable to the best
currently available general-purpose compression methods. It is similar in speed
with deflate but offers more dense compression.
The specification of the Brotli Compressed Data Format is defined in
[RFC 7932](https://datatracker.ietf.org/doc/html/rfc7932).
Brotli is open-sourced under the MIT License, see the LICENSE file.
> **Please note:** brotli is a "stream" format; it does not contain
> meta-information, like checksums or uncompressed data length. It is possible
> to modify "raw" ranges of the compressed stream and the decoder will not
> notice that.
### Installation
In most Linux distributions, installing `brotli` is just a matter of using
the package management system. For example in Debian-based distributions:
`apt install brotli` will install `brotli`. On MacOS, you can use
[Homebrew](https://brew.sh/): `brew install brotli`.
[](https://repology.org/project/brotli/versions)
Of course you can also build brotli from sources.
### Build instructions
#### Vcpkg
You can download and install brotli using the
[vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install brotli
The brotli port in vcpkg is kept up to date by Microsoft team members and
community contributors. If the version is out of date, please [create an issue
or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
#### Bazel
See [Bazel](https://www.bazel.build/)
#### CMake
The basic commands to build and install brotli are:
$ mkdir out && cd out
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed ..
$ cmake --build . --config Release --target install
You can use other [CMake](https://cmake.org/) configuration.
#### Python
To install the latest release of the Python module, run the following:
$ pip install brotli
To install the tip-of-the-tree version, run:
$ pip install --upgrade git+https://github.com/google/brotli
See the [Python readme](python/README.md) for more details on installing
from source, development, and testing.
### Contributing
We glad to answer/library related questions in
[brotli mailing list](https://groups.google.com/g/brotli).
Regular issues / feature requests should be reported in
[issue tracker](https://github.com/google/brotli/issues).
For reporting vulnerability please read [SECURITY](SECURITY.md).
For contributing changes please read [CONTRIBUTING](CONTRIBUTING.md).
### Benchmarks
* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)
* [Large Text Compression Benchmark](https://mattmahoney.net/dc/text.html)
* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark)
### Related projects
> **Disclaimer:** Brotli authors take no responsibility for the third party projects mentioned in this section.
Independent [decoder](https://github.com/madler/brotli) implementation
by Mark Adler, based entirely on format specification.
JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js).
Could be used directly via `npm install brotli`
Hand ported [decoder / encoder](https://github.com/dominikhlbg/BrotliHaxe)
in haxe by Dominik Homberger.
Output source code: JavaScript, PHP, Python, Java and C#
7Zip [plugin](https://github.com/mcmilk/7-Zip-Zstd)
Dart compression framework with
[fast FFI-based Brotli implementation](https://pub.dev/documentation/es_compression/latest/brotli/)
with ready-to-use prebuilt binaries for Win/Linux/Mac
================================================
FILE: SECURITY.md
================================================
### Reporting
To report a security issue, please use [https://g.co/vulnz](https://g.co/vulnz).
We use g.co/vulnz for our intake, and do coordination and disclosure here on
GitHub (including using GitHub Security Advisory). The Google Security Team will
respond within 5 working days of your report on g.co/vulnz.
================================================
FILE: c/common/constants.c
================================================
/* Copyright 2013 Google Inc. All Rights Reserved.
Distributed under MIT license.
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
*/
#include "constants.h"
const BROTLI_MODEL("small")
BrotliPrefixCodeRange _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
{1, 2}, {5, 2}, {9, 2}, {13, 2}, {17, 3}, {25, 3},
{33, 3}, {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4},
{113, 5}, {145, 5}, {177, 5}, {209, 5}, {241, 6}, {305, 6},
{369, 7}, {497, 8}, {753, 9}, {1265, 10}, {2289, 11}, {4337, 12},
{8433, 13}, {16625, 24}};
================================================
FILE: c/common/constants.h
================================================
/* Copyright 2016 Google Inc. All Rights Reserved.
Distributed under MIT license.
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
*/
/**
* @file
* Common constants used in decoder and encoder API.
*/
#ifndef BROTLI_COMMON_CONSTANTS_H_
#define BROTLI_COMMON_CONSTANTS_H_
#include "platform.h"
/* Specification: 7.3. Encoding of the context map */
#define BROTLI_CONTEXT_MAP_MAX_RLE 16
/* Specification: 2. Compressed representation overview */
#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
#define BROTLI_NUM_LITERAL_SYMBOLS 256
#define BROTLI_NUM_COMMAND_SYMBOLS 704
#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
BROTLI_CONTEXT_MAP_MAX_RLE)
#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
/* Specification: 3.5. Complex prefix codes */
#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
/* "code length of 8 is repeated" */
#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
/* "Large Window Brotli" */
/**
* The theoretical maximum number of distance bits specified for large window
* brotli, for 64-bit encoders and decoders. Even when in practice 32-bit
* encoders and decoders only support up to 30 max distance bits, the value is
* set to 62 because it affects the large window brotli file format.
* Specifically, it affects the encoding of simple huffman tree for distances,
* see Specification RFC 7932 chapter 3.4.
*/
#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
#define BROTLI_LARGE_MIN_WBITS 10
/**
* The maximum supported large brotli window bits by the encoder and decoder.
* Large window brotli allows up to 62 bits, however the current encoder and
* decoder, designed for 32-bit integers, only support up to 30 bits maximum.
*/
#define BROTLI_LARGE_MAX_WBITS 30
/* Specification: 4. Encoding of distances */
#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
/**
* Maximal number of "postfix" bits.
*
* Number of "postfix" bits is stored as 2 bits in meta-block header.
*/
#define BROTLI_MAX_NPOSTFIX 3
#define BROTLI_MAX_NDIRECT 120
#define BROTLI_MAX_DISTANCE_BITS 24U
#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \
BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
((MAXNBITS) << ((NPOSTFIX) + 1)))
/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
#define BROTLI_NUM_DISTANCE_SYMBOLS \
BROTLI_DISTANCE_ALPHABET_SIZE( \
BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)
/* ((1 << 26) - 4) is the maximal distance that can be expressed in RFC 7932
brotli stream using NPOSTFIX = 0 and NDIRECT = 0. With other NPOSTFIX and
NDIRECT values distances up to ((1 << 29) + 88) could be expressed. */
#define BROTLI_MAX_DISTANCE 0x3FFFFFC
/* ((1 << 31) - 4) is the safe distance limit. Using this number as a limit
allows safe distance calculation without overflows, given the distance
alphabet size is limited to corresponding size
(see kLargeWindowDistanceCodeLimits). */
#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
/* Specification: 4. Encoding of Literal Insertion Lengths and Copy Lengths */
#define BROTLI_NUM_INS_COPY_CODES 24
/* 7.1. Context modes and context ID lookup for literals */
/* "context IDs for literals are in the range of 0..63" */
#define BROTLI_LITERAL_CONTEXT_BITS 6
/* 7.2. Context ID for distances */
#define BROTLI_DISTANCE_CONTEXT_BITS 2
/* 9.1. Format of the Stream Header */
/* Number of slack bytes for window size. Don't confuse
with BROTLI_NUM_DISTANCE_SHORT_CODES. */
#define BROTLI_WINDOW_GAP 16
#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)
typedef struct BrotliDistanceCodeLimit {
uint32_t max_alphabet_size;
uint32_t max_distance;
} BrotliDistanceCodeLimit;
/* This function calculates maximal size of distance alphabet, such that the
distances greater than the given values can not be represented.
This limits are designed to support fast and safe 32-bit decoders.
"32-bit" means that signed integer values up to ((1 << 31) - 1) could be
safely expressed.
Brotli distance alphabet symbols do not represent consecutive distance
ranges. Each distance alphabet symbol (excluding direct distances and short
codes), represent interleaved (for NPOSTFIX > 0) range of distances.
A "group" of consecutive (1 << NPOSTFIX) symbols represent non-interleaved
range. Two consecutive groups require the same amount of "extra bits".
It is important that distance alphabet represents complete "groups".
To avoid complex logic on encoder side about interleaved ranges
it was decided to restrict both sides to complete distance code "groups".
*/
BROTLI_UNUSED_FUNCTION BrotliDistanceCodeLimit BrotliCalculateDistanceCodeLimit(
uint32_t max_distance, uint32_t npostfix, uint32_t ndirect) {
BrotliDistanceCodeLimit result;
/* Marking this function as unused, because not all files
including "constants.h" use it -> compiler warns about that. */
BROTLI_UNUSED(&BrotliCalculateDistanceCodeLimit);
if (max_distance <= ndirect) {
/* This case never happens / exists only for the sake of completeness. */
result.max_alphabet_size = max_distance + BROTLI_NUM_DISTANCE_SHORT_CODES;
result.max_distance = max_distance;
return result;
} else {
/* The first prohibited value. */
uint32_t forbidden_distance = max_distance + 1;
/* Subtract "directly" encoded region. */
uint32_t offset = forbidden_distance - ndirect - 1;
uint32_t ndistbits = 0;
uint32_t tmp;
uint32_t half;
uint32_t group;
/* Postfix for the last dcode in the group. */
uint32_t postfix = (1u << npostfix) - 1;
uint32_t extra;
uint32_t start;
/* Remove postfix and "head-start". */
offset = (offset >> npostfix) + 4;
/* Calculate the number of distance bits. */
tmp = offset / 2;
/* Poor-man's log2floor, to avoid extra dependencies. */
while (tmp != 0) {ndistbits++; tmp = tmp >> 1;}
/* One bit is covered with subrange addressing ("half"). */
ndistbits--;
/* Find subrange. */
half = (offset >> ndistbits) & 1;
/* Calculate the "group" part of dcode. */
group = ((ndistbits - 1) << 1) | half;
/* Calculated "group" covers the prohibited distance value. */
if (group == 0) {
/* This case is added for correctness; does not occur for limit > 128. */
result.max_alphabet_size = ndirect + BROTLI_NUM_DISTANCE_SHORT_CODES;
result.max_distance = ndirect;
return result;
}
/* Decrement "group", so it is the last permitted "group". */
group--;
/* After group was decremented, ndistbits and half must be recalculated. */
ndistbits = (group >> 1) + 1;
/* The last available distance in the subrange has all extra bits set. */
extra = (1u << ndistbits) - 1;
/* Calculate region start. NB: ndistbits >= 1. */
start = (1u << (ndistbits + 1)) - 4;
/* Move to subregion. */
start += (group & 1) << ndistbits;
/* Calculate the alphabet size. */
result.max_alphabet_size = ((group << npostfix) | postfix) + ndirect +
BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
/* Calculate the maximal distance representable by alphabet. */
result.max_distance = ((start + extra) << npostfix) + postfix + ndirect + 1;
return result;
}
}
/* Represents the range of values belonging to a prefix code:
[offset, offset + 2^nbits) */
typedef struct {
uint16_t offset;
uint8_t nbits;
} BrotliPrefixCodeRange;
/* "Soft-private", it is exported, but not "advertised" as API. */
BROTLI_COMMON_API extern const BROTLI_MODEL("small")
BrotliPrefixCodeRange _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
#endif /* BROTLI_COMMON_CONSTANTS_H_ */
================================================
FILE: c/common/context.c
================================================
#include "context.h"
#include "platform.h"
/* Common context lookup table for all context modes. */
const BROTLI_MODEL("small") uint8_t _kBrotliContextLookupTable[2048] = {
/* CONTEXT_LSB6, last byte. */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
/* CONTEXT_LSB6, second last byte, */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* CONTEXT_MSB6, last byte. */
0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
/* CONTEXT_MSB6, second last byte, */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* CONTEXT_UTF8, last byte. */
/* ASCII range. */
0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
/* UTF8 continuation byte range. */
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
/* UTF8 lead byte range. */
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
/* CONTEXT_UTF8 second last byte. */
/* ASCII range. */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
/* UTF8 continuation byte range. */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* UTF8 lead byte range. */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
/* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
/* CONTEXT_SIGNED, second last byte. */
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
};
================================================
FILE: c/common/context.h
================================================
/* Copyright 2013 Google Inc. All Rights Reserved.
Distributed under MIT license.
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
*/
/* Lookup table to map the previous two bytes to a context id.
There are four different context modeling modes defined here:
CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
CONTEXT_SIGNED: second-order context model tuned for signed integers.
If |p1| and |p2| are the previous two bytes, and |mode| is current context
mode, we calculate the context as:
context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
(i.e. < 128), this will be equivalent to
context = 4 * context1(p1) + context2(p2),
where context1 is based on the previous byte in the following way:
0 : non-ASCII control
1 : \t, \n, \r
2 : space
3 : other punctuation
4 : " '
5 : %
6 : ( < [ {
7 : ) > ] }
8 : , ; :
9 : .
10 : =
11 : number
12 : upper-case vowel
13 : upper-case consonant
14 : lower-case vowel
15 : lower-case consonant
and context2 is based on the second last byte:
0 : control, space
1 : punctuation
2 : upper-case letter, number
3 : lower-case letter
If the last byte is ASCII, and the second last byte is not (in a valid UTF8
stream it will be a continuation byte, value between 128 and 191), the
context is the same as if the second last byte was an ASCII control or space.
If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
be a continuation byte and the context id is 2 or 3 depending on the LSB of
the last byte and to a lesser extent on the second last byte if it is ASCII.
If the last byte is a UTF8 continuation byte, the second last byte can be:
- continuation byte: the next byte is probably ASCII or lead byte (assuming
4-byte UTF8 characters are rare) and the context id is 0 or 1.
- lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
- lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
The possible value combinations of the previous two bytes, the range of
context ids and the type of the next byte is summarized in the table below:
|--------\-----------------------------------------------------------------|
| \ Last byte |
| Second \---------------------------------------------------------------|
| last byte \ ASCII | cont. byte | lead byte |
| \ (0-127) | (128-191) | (192-) |
|=============|===================|=====================|==================|
| ASCII | next: ASCII/lead | not valid | next: cont. |
| (0-127) | context: 4 - 63 | | context: 2 - 3 |
|-------------|-------------------|---------------------|------------------|
| cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
| (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
|-------------|-------------------|---------------------|------------------|
| lead byte | not valid | next: ASCII/lead | not valid |
| (192-207) | | context: 0 - 1 | |
|-------------|-------------------|---------------------|------------------|
| lead byte | not valid | next: cont. | not valid |
| (208-) | | context: 2 - 3 | |
|-------------|-------------------|---------------------|------------------|
*/
#ifndef BROTLI_COMMON_CONTEXT_H_
#define BROTLI_COMMON_CONTEXT_H_
#include "platform.h"
typedef enum ContextType {
CONTEXT_LSB6 = 0,
CONTEXT_MSB6 = 1,
CONTEXT_UTF8 = 2,
CONTEXT_SIGNED = 3
} ContextType;
/* "Soft-private", it is exported, but not "advertised" as API. */
/* Common context lookup table for all context modes. */
BROTLI_COMMON_API extern const uint8_t _kBrotliContextLookupTable[2048];
typedef const uint8_t* ContextLut;
/* typeof(MODE) == ContextType; returns ContextLut */
#define BROTLI_CONTEXT_LUT(MODE) (&_kBrotliContextLookupTable[(MODE) << 9])
/* typeof(LUT) == ContextLut */
#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
#endif /* BROTLI_COMMON_CONTEXT_H_ */
================================================
FILE: c/common/dictionary.c
================================================
/* Copyright 2013 Google Inc. All Rights Reserved.
Distributed under MIT license.
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
*/
#include "dictionary.h"
#include "platform.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
#if !defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
/* Embed kBrotliDictionaryData */
#include "dictionary_inc.h"
static const BROTLI_MODEL("small") BrotliDictionary kBrotliDictionary = {
#else
static BROTLI_MODEL("small") BrotliDictionary kBrotliDictionary = {
#endif
/* size_bits_by_length */
{
0, 0, 0, 0, 10, 10, 11, 11,
10, 10, 10, 10, 10, 9, 9, 8,
7, 7, 8, 7, 7, 6, 6, 5,
5, 0, 0, 0, 0, 0, 0, 0
},
/* offsets_by_length */
{
0, 0, 0, 0, 0, 4096, 9216, 21504,
35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
},
/* data_size == sizeof(kBrotliDictionaryData) */
122784,
/* data */
#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
NULL
#else
kBrotliDictionaryData
#endif
};
const BrotliDictionary* BrotliGetDictionary(void) {
return &kBrotliDictionary;
}
void BrotliSetDictionaryData(const uint8_t* data) {
#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
if (!!data && !kBrotliDictionary.data) {
kBrotliDictionary.data = data;
}
#else
BROTLI_UNUSED(data); // Appease -Werror=unused-parameter
#endif
}
#if defined(__cplusplus) || defined(c_plusplus)
} /* extern "C" */
#endif
================================================
FILE: c/common/dictionary.h
================================================
/* Copyright 2013 Google Inc. All Rights Reserved.
Distributed under MIT license.
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
*/
/* Collection of static dictionary words. */
#ifndef BROTLI_COMMON_DICTIONARY_H_
#define BROTLI_COMMON_DICTIONARY_H_
#include "platform.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
typedef struct BrotliDictionary {
/**
* Number of bits to encode index of dictionary word in a bucket.
*
* Specification: Appendix A. Static Dictionary Data
*
* Words in a dictionary are bucketed by length.
* @c 0 means that there are no words of a given length.
* Dictionary consists of words with length of [4..24] bytes.
* Values at [0..3] and [25..31] indices should not be addressed.
*/
uint8_t size_bits_by_length[32];
/* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
uint32_t offsets_by_length[32];
/* assert(data_size == offsets_by_length[31]) */
size_t data_size;
/* Data array is not bound, and should obey to size_bits_by_length values.
Specified size matches default (RFC 7932) dictionary. Its size is
defined by data_size */
const uint8_t* data;
} BrotliDictionary;
BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
/**
* Sets dictionary data.
*
* When dictionary data is already set / present, this method is no-op.
*
* Dictionary data MUST be provided before BrotliGetDictionary is invoked.
* This method is used ONLY in multi-client environment (e.g. C + Java),
* to reduce storage by sharing single dictionary between implementations.
*/
BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
#if defined(__cplusplus) || defined(c_plusplus)
} /* extern "C" */
#endif
#endif /* BROTLI_COMMON_DICTIONARY_H_ */
================================================
FILE: c/common/dictionary_inc.h
================================================
static const BROTLI_MODEL("small") uint8_t kBrotliDictionaryData[] = {
116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,
111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105
,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111
,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,
118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,
110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,
114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,
103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,
104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,
117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,
101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117
,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97
,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108
,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,
101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,
115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,
97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,
105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,
111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,
105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97
,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,
108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,
101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,
108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,
102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,
111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,
111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,
115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,
37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102
,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97
,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,
115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,
101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,
107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,
110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101
,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,
117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111
,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,
114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105
,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116
,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,
116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49
,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,
117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121
,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115
,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105
,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,
112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,
117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,
110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,
115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111
,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107
,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,
120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114
,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,
116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98
,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,
102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,
116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,
111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,
110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,
119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,
46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111
,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,
99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,
101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,
121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,
116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,
101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83
,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,
115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104
,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,
105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,
108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,
108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,
102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,
100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,
104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,
99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,
102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,
101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,
108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,
35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112
,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32
,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116
,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,
97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,
108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,
109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,
111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,
116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,
97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48
,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,
103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110
,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,
108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,
101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,
103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39
,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,
116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,
109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48
,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,
97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,
122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,
99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,
98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,
116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,
115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,
108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,
60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,
114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,
102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,
47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,
115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49
,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,
111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,
56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,
110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41
,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,
100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,
107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,
112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,
115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,
101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,
100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,
72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,
120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53
,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110
,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,
101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101
,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,
119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,
119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,
117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,
111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,
97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,
110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,
10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109
,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115
,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,
116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48
,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,
60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,
45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,
97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48
,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,
47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,
115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,
117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,
49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50
,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48
,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48
,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57
,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49
,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57
,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48
,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,
115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101
,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,
105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116
,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112
,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,
111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,
111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,
116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110
,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,
100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208
,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208
,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209
,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208
,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208
,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208
,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209
,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208
,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208
,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217
,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216
,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217
,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216
,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217
,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216
,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216
,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217
,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101
,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,
101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,
98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,
114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,
97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,
114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,
101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,
101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,
117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,
108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103
,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,
101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,
103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97
,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,
111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,
114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,
114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,
101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111
,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,
108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,
115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,
100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,
115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,
100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,
111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,
108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,
115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,
109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,
116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,
114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,
116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105
,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,
105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,
111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118
,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,
114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,
114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108
,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,
115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,
97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98
,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,
101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101
,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105
,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105
,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100
,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,
117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,
114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,
108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,
99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105
,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,
116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,
116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,
114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115
,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,
112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,
103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,
97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,
110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101
,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,
114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,
101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,
118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120
,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,
105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,
116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,
113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97
,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111
,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,
116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,
114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,
83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101
,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108
,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,
105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,
97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,
105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,
110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,
105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110
,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,
115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102
,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,
105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,
108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115
,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,
105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,
97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,
109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,
101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,
110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,
105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,
109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,
48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,
115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97
,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,
100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,
116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,
108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,
102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115
,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,
121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105
,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114
,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116
,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,
117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,
110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,
118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,
120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,
34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,
107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,
100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97
,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110
,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99
,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111
,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,
111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45
,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,
102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,
101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,
101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101
,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59
,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105
,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,
102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,
115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,
60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116
,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112
,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,
119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,
103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,
117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101
,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48
,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107
,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70
,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,
100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,
101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108
,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,
110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45
,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,
100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,
111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,
101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120
,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,
35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,
112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,
108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,
104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,
114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,
97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,
109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84
,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,
114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,
115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,
111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,
105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98
,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,
118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,
103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104
,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,
101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,
35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,
101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,
116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,
111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,
108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,
60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,
34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110
,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,
97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,
34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,
97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,
104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,
121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,
115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,
102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9
,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,
110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115
,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,
115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,
112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,
104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110
,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,
101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,
195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,
110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,
116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,
111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,
101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,
118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,
101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,
195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97
,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,
115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108
,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,
116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,
105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,
114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,
101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,
114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,
111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114
,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115
,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97
,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,
117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,
99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179
,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,
97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,
114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114
,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,
101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,
97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,
106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110
,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,
103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,
115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97
,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,
195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,
102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,
97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,
116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,
112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,
114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,
115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,
117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,
105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,
97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111
,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,
108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112
,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,
108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,
97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,
97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115
,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,
114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97
,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,
111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,
99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,
116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,
101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,
101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,
116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,
118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105
,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,
117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108
,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,
116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,
114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99
,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,
111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100
,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,
97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,
108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,
104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117
,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,
101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,
101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117
,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,
110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,
111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,
112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104
,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,
102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,
105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,
104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,
104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116
,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105
,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,
108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,
115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,
117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,
101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,
114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,
101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100
,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,
103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,
99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,
116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,
101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,
118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,
114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115
,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,
105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,
101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,
118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,
118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,
121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,
111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,
101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,
111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,
116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,
101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,
110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101
,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,
101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105
,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,
115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,
115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110
,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,
114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,
114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,
105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,
118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,
114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,
110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,
101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,
110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114
,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,
110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,
116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,
115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,
109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,
103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,
104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,
121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,
123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,
101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,
114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,
110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,
66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114
,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,
108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114
,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101
,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,
101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32
,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,
101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,
105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,
101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,
110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110
,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102
,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97
,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,
110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,
101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107
,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,
101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,
111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,
60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,
114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,
100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,
114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,
110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97
,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,
95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62
,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120
,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116
,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,
112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,
107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,
110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,
110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,
114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,
34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97
,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111
,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101
,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,
116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,
105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,
34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111
,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,
101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,
105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,
101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,
114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108
,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,
121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,
114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,
111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,
114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,
117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,
116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46
,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100
,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,
70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,
32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102
,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,
97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,
102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101
,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,
114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,
101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,
103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,
116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104
,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,
115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98
,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,
104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,
115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,
121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,
111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,
112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,
105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,
112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,
109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,
97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97
,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,
104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,
109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,
114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,
115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,
108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,
101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98
,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,
34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115
,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,
101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,
110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,
61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,
112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,
111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,
32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,
106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,
114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,
101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,
120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99
,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,
105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,
103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,
10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,
121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,
136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,
191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,
228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,
155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,
184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,
228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,
187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,
175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,
230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,
175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,
144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,
231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,
145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,
148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,
229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,
131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,
155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,
230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,
143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,
155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,
233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,
150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,
188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,
230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,
161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,
180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,
229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,
149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,
164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,
232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,
133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,
156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,
231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,
183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,
155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,
228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,
154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,
144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,
231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,
174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,
131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,
231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,
144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,
181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,
230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,
189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,
159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,
232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,
183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,
187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,
228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,
186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,
136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,
229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,
139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,
142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,
229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,
140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,
191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,
232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,
186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,
168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,
229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,
142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,
187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,
230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,
186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,
166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,
229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,
162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,
190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,
231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,
144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,
133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,
232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,
179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,
187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,
229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,
128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,
157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,
230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,
165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,
175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,
229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,
143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,
138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,
232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,
183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,
143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,
231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,
142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,
168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,
230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,
148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,
138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,
233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,
145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,
130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,
229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,
162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,
186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,
229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,
187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,
184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,
232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,
131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,
137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,
231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,
139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,
157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,
229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,
186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,
155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,
230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,
154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,
156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,
232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,
183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,
174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,
229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,
129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,
174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,
230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,
186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,
131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,
229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,
154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,
142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,
229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,
142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,
174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,
228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,
176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,
173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,
231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,
136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,
155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,
232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,
161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,
186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,
231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,
140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,
179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,
228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,
151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,
138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,
229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,
141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,
184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,
230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,
189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,
156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,
233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,
137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,
156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,
228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,
169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,
133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,
231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,
154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,
173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,
228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,
138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,
128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,
229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,
182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,
130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,
231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,
174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,
167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,
229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,
179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,
142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,
230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,
179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,
164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,
230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,
133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,
141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,
231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,
156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,
187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,
230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,
155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,
186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,
230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,
147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,
189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,
229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,
133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,
185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,
230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,
165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,
135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,
229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,
135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,
155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,
233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,
191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,
187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,
228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,
161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,
187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,
230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,
182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,
191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,
232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,
152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,
137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,
229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,
150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,
175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,
229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,
166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,
153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,
232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,
147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,
189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,
230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,
140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,
161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,
229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,
129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,
156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,
230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,
150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,
171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,
229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,
165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,
156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,
232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,
147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,
130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,
229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,
183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,
138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,
232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,
161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,
167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,
232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,
151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,
143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,
228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,
159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,
187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,
231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,
159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,
143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,
229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,
170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,
136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,
230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,
182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,
136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,
233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,
155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,
156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,
230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,
160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,
133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,
231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,
167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,
133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,
229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,
136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,
190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,
228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,
144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,
134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,
232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,
185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,
189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,
232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,
145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,
189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,
231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,
154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,
149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,
233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,
142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,
173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,
230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,
176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,
136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,
229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,
141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,
139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,
229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,
175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,
131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,
232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,
139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,
187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,
229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,
138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,
188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,
230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,
187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,
144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,
105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,
116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,
116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,
114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,
112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,
100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115
,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,
103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,
111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,
117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,
105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97
,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114
,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,
118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,
114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,
110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,
101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,
109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101
,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112
,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,
109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108
,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,
109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,
111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,
105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114
,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,
113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,
105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,
116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101
,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,
112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,
118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,
101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,
115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105
,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,
98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101
,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,
110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,
115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,
105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,
111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,
118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,
101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,
161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,
179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108
,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,
195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111
,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105
,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,
190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,
178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,
176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,
186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,
146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,
190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,
130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,
188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,
176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,
190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,
161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,
176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,
186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,
141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,
128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,
143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,
146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,
190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,
128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,
141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,
190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,
190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,
164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,
224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,
135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,
164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,
224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,
185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,
97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,
224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,
190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,
164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,
224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,
128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,
164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,
224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,
139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,
164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,
224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,
178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,
164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,
176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,
137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,
131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,
177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,
133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,
132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,
173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,
175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,
167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,
185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,
134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,
132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,
138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,
176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,
131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,
181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,
138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,
167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,
167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,
138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,
174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,
167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,
181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,
134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,
173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,
168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,
179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,
178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,
135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,
132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,
138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,
131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,
168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,
138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,
133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,
130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,
114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,
101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,
115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,
102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,
97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,
114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,
115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108
,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,
119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109
,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,
101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108
,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,
105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,
105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,
108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,
100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,
111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102
,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115
,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,
117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108
,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,
115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115
,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,
109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,
101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99
,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,
110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110
,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,
116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,
106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,
105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,
108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,
101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,
101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,
97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101
,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,
117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115
,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,
119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,
108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,
114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,
105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,
116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97
,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,
116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,
115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,
115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,
114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,
108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,
111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115
,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,
101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,
110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,
112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,
99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99
,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,
100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,
110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,
101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,
80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,
99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,
99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,
105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,
112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,
101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67
,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98
,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,
105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,
101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,
100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,
101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,
108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97
,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112
,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,
105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100
,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,
45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,
100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100
,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,
71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,
105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,
100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,
98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,
109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,
111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,
101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,
103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,
108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116
,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,
101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,
100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,
116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105
,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97
,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97
,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,
97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97
,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113
,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,
117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,
116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111
,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110
,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109
,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,
97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,
110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,
111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,
100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,
114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,
115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,
108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,
116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,
32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,
100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,
101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,
104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,
101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,
100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,
110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,
97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,
117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111
,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111
,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120
,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,
118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101
,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,
121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,
117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,
41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,
110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,
97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39
,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100
,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,
105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32
,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,
101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,
100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115
,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,
97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117
,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,
104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99
,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,
117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,
104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112
,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,
58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,
95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,
99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,
112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101
,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,
114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110
,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,
112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,
115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,
116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97
,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,
101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,
112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,
101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,
101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,
118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,
116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110
,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,
118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,
104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,
114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101
,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,
115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,
111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,
116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,
101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,
105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,
108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,
114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105
,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,
10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,
111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,
103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10
,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,
108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,
104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108
,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,
97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,
104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,
101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,
115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,
117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,
114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,
104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108
,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,
109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101
,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,
108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,
100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,
105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,
100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,
112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108
,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,
105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,
110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,
32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97
,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,
110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101
,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,
97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59
,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110
,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,
116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110
,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,
101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,
116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,
115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,
105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,
119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,
105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,
107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,
98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,
32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,
99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108
,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,
105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,
99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105
,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112
,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,
100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,
116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,
117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110
,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,
114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115
,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,
114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,
105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99
,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97
,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,
101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,
101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101
,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110
,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,
62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,
103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,
116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,
100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,
103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32
,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,
97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,
108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,
117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115
,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,
114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,
113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,
114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,
97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,
100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,
104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,
103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104
,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,
118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,
104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,
115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,
32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,
108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101
,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,
101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,
112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109
,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,
109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,
109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101
,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,
99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,
116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111
,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,
117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,
116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108
,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,
32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,
105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,
104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,
105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,
118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,
100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,
97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109
,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68
,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,
115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111
,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114
,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,
116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,
108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115
,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,
114,101,4
gitextract_aus3v66n/
├── .bazelignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── build_test.yml
│ ├── build_test_wasm.yml
│ ├── codeql.yml
│ ├── fuzz.yml
│ ├── lint.yml
│ ├── release.yaml
│ └── scorecard.yml
├── .gitignore
├── BUILD.bazel
├── CHANGELOG.md
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── MODULE.bazel
├── README
├── README.md
├── SECURITY.md
├── c/
│ ├── common/
│ │ ├── constants.c
│ │ ├── constants.h
│ │ ├── context.c
│ │ ├── context.h
│ │ ├── dictionary.c
│ │ ├── dictionary.h
│ │ ├── dictionary_inc.h
│ │ ├── platform.c
│ │ ├── platform.h
│ │ ├── shared_dictionary.c
│ │ ├── shared_dictionary_internal.h
│ │ ├── static_init.h
│ │ ├── transform.c
│ │ ├── transform.h
│ │ └── version.h
│ ├── dec/
│ │ ├── bit_reader.c
│ │ ├── bit_reader.h
│ │ ├── decode.c
│ │ ├── huffman.c
│ │ ├── huffman.h
│ │ ├── prefix.c
│ │ ├── prefix.h
│ │ ├── prefix_inc.h
│ │ ├── state.c
│ │ ├── state.h
│ │ ├── static_init.c
│ │ └── static_init.h
│ ├── enc/
│ │ ├── backward_references.c
│ │ ├── backward_references.h
│ │ ├── backward_references_hq.c
│ │ ├── backward_references_hq.h
│ │ ├── backward_references_inc.h
│ │ ├── bit_cost.c
│ │ ├── bit_cost.h
│ │ ├── bit_cost_inc.h
│ │ ├── block_encoder_inc.h
│ │ ├── block_splitter.c
│ │ ├── block_splitter.h
│ │ ├── block_splitter_inc.h
│ │ ├── brotli_bit_stream.c
│ │ ├── brotli_bit_stream.h
│ │ ├── cluster.c
│ │ ├── cluster.h
│ │ ├── cluster_inc.h
│ │ ├── command.c
│ │ ├── command.h
│ │ ├── compound_dictionary.c
│ │ ├── compound_dictionary.h
│ │ ├── compress_fragment.c
│ │ ├── compress_fragment.h
│ │ ├── compress_fragment_two_pass.c
│ │ ├── compress_fragment_two_pass.h
│ │ ├── dictionary_hash.c
│ │ ├── dictionary_hash.h
│ │ ├── dictionary_hash_inc.h
│ │ ├── encode.c
│ │ ├── encoder_dict.c
│ │ ├── encoder_dict.h
│ │ ├── entropy_encode.c
│ │ ├── entropy_encode.h
│ │ ├── entropy_encode_static.h
│ │ ├── fast_log.c
│ │ ├── fast_log.h
│ │ ├── find_match_length.h
│ │ ├── hash.h
│ │ ├── hash_base.h
│ │ ├── hash_composite_inc.h
│ │ ├── hash_forgetful_chain_inc.h
│ │ ├── hash_longest_match64_inc.h
│ │ ├── hash_longest_match64_simd_inc.h
│ │ ├── hash_longest_match_inc.h
│ │ ├── hash_longest_match_quickly_inc.h
│ │ ├── hash_longest_match_simd_inc.h
│ │ ├── hash_rolling_inc.h
│ │ ├── hash_to_binary_tree_inc.h
│ │ ├── histogram.c
│ │ ├── histogram.h
│ │ ├── histogram_inc.h
│ │ ├── literal_cost.c
│ │ ├── literal_cost.h
│ │ ├── matching_tag_mask.h
│ │ ├── memory.c
│ │ ├── memory.h
│ │ ├── metablock.c
│ │ ├── metablock.h
│ │ ├── metablock_inc.h
│ │ ├── params.h
│ │ ├── prefix.h
│ │ ├── quality.h
│ │ ├── ringbuffer.h
│ │ ├── state.h
│ │ ├── static_dict.c
│ │ ├── static_dict.h
│ │ ├── static_dict_lut.c
│ │ ├── static_dict_lut.h
│ │ ├── static_dict_lut_inc.h
│ │ ├── static_init.c
│ │ ├── static_init.h
│ │ ├── static_init_lazy.cc
│ │ ├── utf8_util.c
│ │ ├── utf8_util.h
│ │ └── write_bits.h
│ ├── fuzz/
│ │ ├── .bazelrc
│ │ ├── BUILD.bazel
│ │ ├── MODULE.bazel
│ │ ├── decode_fuzzer.c
│ │ ├── run_decode_fuzzer.c
│ │ └── test_fuzzer.sh
│ ├── include/
│ │ └── brotli/
│ │ ├── decode.h
│ │ ├── encode.h
│ │ ├── port.h
│ │ ├── shared_dictionary.h
│ │ └── types.h
│ └── tools/
│ ├── brotli.c
│ └── brotli.md
├── csharp/
│ ├── brotlidec.Tests.csproj
│ ├── brotlidec.csproj
│ ├── injected_code.txt
│ ├── org/
│ │ └── brotli/
│ │ └── dec/
│ │ ├── BitReader.cs
│ │ ├── BitReaderTest.cs
│ │ ├── BrotliInputStream.cs
│ │ ├── BrotliRuntimeException.cs
│ │ ├── Context.cs
│ │ ├── Decode.cs
│ │ ├── DecodeTest.cs
│ │ ├── Dictionary.cs
│ │ ├── DictionaryTest.cs
│ │ ├── Huffman.cs
│ │ ├── HuffmanTreeGroup.cs
│ │ ├── IntReader.cs
│ │ ├── Prefix.cs
│ │ ├── RunningState.cs
│ │ ├── State.cs
│ │ ├── SynthTest.cs
│ │ ├── Transform.cs
│ │ ├── TransformTest.cs
│ │ ├── Utils.cs
│ │ └── WordTransformType.cs
│ ├── sharpen.cfg
│ └── transpile.sh
├── docs/
│ ├── brotli.1
│ ├── constants.h.3
│ ├── decode.h.3
│ ├── encode.h.3
│ └── types.h.3
├── fetch-spec/
│ └── shared-brotli-fetch-spec.txt
├── go/
│ ├── BUILD.bazel
│ ├── MODULE.bazel
│ ├── brotli/
│ │ ├── BUILD.bazel
│ │ ├── brotli_test.go
│ │ ├── decode.go
│ │ ├── go.mod
│ │ ├── reader.go
│ │ └── synth_test.go
│ └── cbrotli/
│ ├── BUILD.bazel
│ ├── cbrotli_test.go
│ ├── cgo.go
│ ├── go.mod
│ ├── reader.go
│ ├── synth_test.go
│ └── writer.go
├── java/
│ ├── BUILD.bazel
│ ├── MODULE.bazel
│ └── org/
│ └── brotli/
│ ├── common/
│ │ ├── BUILD.bazel
│ │ └── SharedDictionaryType.java
│ ├── dec/
│ │ ├── BUILD.bazel
│ │ ├── BitReader.java
│ │ ├── BitReaderTest.java
│ │ ├── BrotliError.java
│ │ ├── BrotliInputStream.java
│ │ ├── BrotliRuntimeException.java
│ │ ├── CompoundDictionaryTest.java
│ │ ├── Context.java
│ │ ├── Decode.java
│ │ ├── DecodeTest.java
│ │ ├── Decoder.java
│ │ ├── Dictionary.java
│ │ ├── DictionaryData.java
│ │ ├── DictionaryTest.java
│ │ ├── EagerStreamTest.java
│ │ ├── Huffman.java
│ │ ├── SetDictionaryTest.java
│ │ ├── State.java
│ │ ├── SynthTest.java
│ │ ├── TestUtils.java
│ │ ├── Transform.java
│ │ ├── TransformTest.java
│ │ ├── Utils.java
│ │ ├── build_defs.bzl
│ │ ├── kt/
│ │ │ ├── BUILD.bazel
│ │ │ ├── BrotliInputStream.kt
│ │ │ └── Decode.kt
│ │ ├── pom.xml
│ │ └── proguard.pgcfg
│ ├── enc/
│ │ ├── BUILD.bazel
│ │ ├── PreparedDictionary.java
│ │ └── PreparedDictionaryGenerator.java
│ ├── integration/
│ │ ├── BUILD.bazel
│ │ ├── Benchmark.java
│ │ ├── BrotliJniTestBase.java
│ │ ├── BundleChecker.java
│ │ ├── BundleHelper.java
│ │ └── pom.xml
│ ├── pom.xml
│ └── wrapper/
│ ├── android/
│ │ ├── JniHelper.java
│ │ ├── UseJni.java
│ │ └── UseJniTest.java
│ ├── common/
│ │ ├── BUILD.bazel
│ │ ├── BrotliCommon.java
│ │ ├── CommonJNI.java
│ │ ├── SetRfcDictionaryTest.java
│ │ ├── SetZeroDictionaryTest.java
│ │ └── common_jni.cc
│ ├── dec/
│ │ ├── BUILD.bazel
│ │ ├── BrotliDecoderChannel.java
│ │ ├── BrotliDecoderChannelTest.java
│ │ ├── BrotliInputStream.java
│ │ ├── BrotliInputStreamTest.java
│ │ ├── CornerCasesTest.java
│ │ ├── Decoder.java
│ │ ├── DecoderJNI.java
│ │ ├── DecoderTest.java
│ │ ├── EagerStreamTest.java
│ │ ├── decoder_jni.cc
│ │ ├── decoder_jni.h
│ │ └── decoder_jni_onload.cc
│ └── enc/
│ ├── BUILD.bazel
│ ├── BrotliEncoderChannel.java
│ ├── BrotliEncoderChannelTest.java
│ ├── BrotliOutputStream.java
│ ├── BrotliOutputStreamTest.java
│ ├── EmptyInputTest.java
│ ├── Encoder.java
│ ├── EncoderJNI.java
│ ├── EncoderTest.java
│ ├── UseCompoundDictionaryTest.java
│ └── encoder_jni.cc
├── js/
│ ├── bundle_test.js
│ ├── bundle_test.ts
│ ├── cli.js
│ ├── decode.js
│ ├── decode.ts
│ ├── decode_synth_test.js
│ ├── decode_synth_test.ts
│ ├── decode_test.js
│ ├── decode_test.ts
│ ├── package.json
│ ├── test_data.js
│ └── test_data.ts
├── pyproject.toml
├── python/
│ ├── Makefile
│ ├── README.md
│ ├── _brotli.c
│ ├── brotli.py
│ └── tests/
│ ├── __init__.py
│ ├── _test_utils.py
│ ├── compress_test.py
│ ├── compressor_test.py
│ ├── decompress_test.py
│ └── decompressor_test.py
├── research/
│ ├── BUILD.bazel
│ ├── MODULE.bazel
│ ├── README.md
│ ├── brotli_decoder.c
│ ├── brotlidump.py
│ ├── deorummolae.cc
│ ├── deorummolae.h
│ ├── dictionary_generator.cc
│ ├── draw_diff.cc
│ ├── draw_histogram.cc
│ ├── durchschlag.cc
│ ├── durchschlag.h
│ ├── find_opt_references.cc
│ ├── read_dist.h
│ ├── sieve.cc
│ └── sieve.h
├── sbom.cdx.json
├── scripts/
│ ├── check_typos.sh
│ ├── dictionary/
│ │ ├── README.md
│ │ ├── step-01-download-rfc.py
│ │ ├── step-02-rfc-to-bin.py
│ │ ├── step-03-validate-bin.py
│ │ └── step-04-generate-java-literals.py
│ ├── download_testdata.sh
│ ├── libbrotlicommon.pc.in
│ ├── libbrotlidec.pc.in
│ ├── libbrotlienc.pc.in
│ └── typos.toml
├── setup.cfg
├── setup.py
└── tests/
├── cli_test.sh
├── run-compatibility-test.cmake
├── run-roundtrip-test.cmake
└── testdata/
├── 10x10y
├── 10x10y.compressed
├── 64x
├── 64x.compressed
├── alice29.txt
├── alice29.txt.compressed
├── asyoulik.txt
├── asyoulik.txt.compressed
├── backward65536
├── backward65536.compressed
├── bb.binast
├── compressed_file
├── compressed_file.compressed
├── compressed_repeated
├── compressed_repeated.compressed
├── cp1251-utf16le
├── cp1251-utf16le.compressed
├── cp852-utf8
├── cp852-utf8.compressed
├── empty
├── empty.compressed
├── empty.compressed.00
├── empty.compressed.01
├── empty.compressed.02
├── empty.compressed.03
├── empty.compressed.04
├── empty.compressed.05
├── empty.compressed.06
├── empty.compressed.07
├── empty.compressed.08
├── empty.compressed.09
├── empty.compressed.10
├── empty.compressed.11
├── empty.compressed.12
├── empty.compressed.13
├── empty.compressed.14
├── empty.compressed.15
├── empty.compressed.16
├── empty.compressed.17
├── empty.compressed.18
├── lcet10.txt
├── lcet10.txt.compressed
├── mapsdatazrh
├── mapsdatazrh.compressed
├── monkey
├── monkey.compressed
├── plrabn12.txt
├── plrabn12.txt.compressed
├── quickfox
├── quickfox.compressed
├── quickfox_repeated
├── quickfox_repeated.compressed
├── random_chunks
├── random_org_10k.bin.compressed
├── ukkonooa
├── ukkonooa.compressed
├── x
├── x.compressed
├── x.compressed.00
├── x.compressed.01
├── x.compressed.02
├── x.compressed.03
├── xyzzy
├── xyzzy.compressed
├── zeros
├── zeros.compressed
├── zerosukkanooa
└── zerosukkanooa.compressed
SYMBOL INDEX (2139 symbols across 201 files)
FILE: c/common/constants.h
type BrotliDistanceCodeLimit (line 103) | typedef struct BrotliDistanceCodeLimit {
function BROTLI_UNUSED_FUNCTION (line 125) | BROTLI_UNUSED_FUNCTION BrotliDistanceCodeLimit BrotliCalculateDistanceCo...
type BrotliPrefixCodeRange (line 189) | typedef struct {
FILE: c/common/context.h
type ContextType (line 93) | typedef enum ContextType {
FILE: c/common/dictionary.c
function BrotliDictionary (line 48) | const BrotliDictionary* BrotliGetDictionary(void) {
function BrotliSetDictionaryData (line 52) | void BrotliSetDictionaryData(const uint8_t* data) {
FILE: c/common/dictionary.h
type BrotliDictionary (line 18) | typedef struct BrotliDictionary {
FILE: c/common/platform.c
function BrotliDefaultFreeFunc (line 16) | void BrotliDefaultFreeFunc(void* opaque, void* address) {
FILE: c/common/platform.h
type BrotliPackedValue (line 294) | typedef union BrotliPackedValue {
function BROTLI_INLINE (line 301) | static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
function BROTLI_INLINE (line 305) | static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
function BROTLI_INLINE (line 309) | static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
function BROTLI_INLINE (line 313) | static BROTLI_INLINE size_t BrotliUnalignedReadSizeT(const void* p) {
function BROTLI_INLINE (line 317) | static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
function BROTLI_INLINE (line 324) | static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
function BROTLI_INLINE (line 329) | static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
function BROTLI_INLINE (line 334) | static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
function BROTLI_INLINE (line 339) | static BROTLI_INLINE size_t BrotliUnalignedReadSizeT(const void* p) {
function BROTLI_INLINE (line 344) | static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
function BROTLI_INLINE (line 383) | static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
function BROTLI_INLINE (line 387) | static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
function BROTLI_INLINE (line 391) | static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
function BROTLI_INLINE (line 395) | static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
function BROTLI_INLINE (line 401) | static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
function BROTLI_INLINE (line 405) | static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
function BROTLI_INLINE (line 413) | static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
function BROTLI_INLINE (line 425) | static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
function BROTLI_INLINE (line 438) | static BROTLI_INLINE void* BROTLI_UNALIGNED_LOAD_PTR(const void* p) {
function BROTLI_INLINE (line 444) | static BROTLI_INLINE void BROTLI_UNALIGNED_STORE_PTR(void* p, const void...
function BROTLI_INLINE (line 481) | static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* f...
function BROTLI_INLINE (line 497) | static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
function BROTLI_INLINE (line 507) | static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if us...
function BROTLI_INLINE (line 539) | static BROTLI_INLINE uint32_t BrotliBsf64Msvc(uint64_t x) {
function BROTLI_INLINE (line 553) | static BROTLI_INLINE uint32_t BrotliBsr32Msvc(uint32_t x) {
function BROTLI_INLINE (line 568) | static BROTLI_INLINE uint16_t BrotliRotateRight16(uint16_t const value,
function BROTLI_INLINE (line 573) | static BROTLI_INLINE uint32_t BrotliRotateRight32(uint32_t const value,
function BROTLI_INLINE (line 578) | static BROTLI_INLINE uint64_t BrotliRotateRight64(uint64_t const value,
function BROTLI_UNUSED_FUNCTION (line 584) | BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
FILE: c/common/shared_dictionary.c
function BROTLI_BOOL (line 28) | static BROTLI_BOOL ReadBool(const uint8_t* encoded, size_t size, size_t*...
function BROTLI_BOOL (line 41) | static BROTLI_BOOL ReadUint8(const uint8_t* encoded, size_t size, size_t...
function BROTLI_BOOL (line 51) | static BROTLI_BOOL ReadUint16(const uint8_t* encoded, size_t size, size_...
function BROTLI_BOOL (line 63) | static BROTLI_BOOL ReadVarint32(const uint8_t* encoded, size_t size,
function BrotliSizeBitsToOffsets (line 79) | static size_t BrotliSizeBitsToOffsets(const uint8_t* size_bits_by_length,
function BROTLI_BOOL (line 92) | static BROTLI_BOOL ParseWordList(size_t size, const uint8_t* encoded,
function ComputeCutoffTransforms (line 124) | static void ComputeCutoffTransforms(BrotliTransforms* transforms) {
function BROTLI_BOOL (line 140) | static BROTLI_BOOL ParsePrefixSuffixTable(size_t size, const uint8_t* en...
function BROTLI_BOOL (line 182) | static BROTLI_BOOL ParseTransformsList(size_t size, const uint8_t* encoded,
function BROTLI_BOOL (line 236) | static BROTLI_BOOL DryParseDictionary(const uint8_t* encoded,
function BROTLI_BOOL (line 272) | static BROTLI_BOOL ParseDictionary(const uint8_t* encoded, size_t size,
function BROTLI_BOOL (line 418) | static BROTLI_BOOL DecodeSharedDictionary(
function BrotliSharedDictionaryDestroyInstance (line 445) | void BrotliSharedDictionaryDestroyInstance(
function BROTLI_BOOL (line 461) | BROTLI_BOOL BrotliSharedDictionaryAttach(
function BrotliSharedDictionary (line 484) | BrotliSharedDictionary* BrotliSharedDictionaryCreateInstance(
FILE: c/common/shared_dictionary_internal.h
type BrotliSharedDictionaryStruct (line 22) | struct BrotliSharedDictionaryStruct {
type BrotliSharedDictionaryInternal (line 68) | typedef struct BrotliSharedDictionaryStruct BrotliSharedDictionaryInternal;
FILE: c/common/transform.c
function BrotliTransforms (line 175) | const BrotliTransforms* BrotliGetTransforms(void) {
function ToUpperCase (line 179) | static int ToUpperCase(uint8_t* p) {
function Shift (line 196) | static int Shift(uint8_t* word, int word_len, uint16_t parameter) {
function BrotliTransformDictionaryWord (line 238) | int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int...
FILE: c/common/transform.h
type BrotliWordTransformType (line 17) | enum BrotliWordTransformType {
type BrotliTransforms (line 46) | typedef struct BrotliTransforms {
FILE: c/dec/bit_reader.c
function BrotliInitBitReader (line 29) | void BrotliInitBitReader(BrotliBitReader* br) {
function BROTLI_BOOL (line 34) | BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* br) {
function BROTLI_BOOL (line 58) | BROTLI_BOOL BrotliSafeReadBits32Slow(BrotliBitReader* br,
FILE: c/dec/bit_reader.h
function BROTLI_INLINE (line 26) | static BROTLI_INLINE brotli_reg_t BitMask(brotli_reg_t n) {
type BrotliBitReader (line 36) | typedef struct {
type BrotliBitReaderState (line 44) | typedef struct {
function BROTLI_INLINE (line 67) | static BROTLI_INLINE size_t
function BROTLI_INLINE (line 72) | static BROTLI_INLINE void BrotliBitReaderSaveState(
function BROTLI_INLINE (line 80) | static BROTLI_INLINE void BrotliBitReaderSetInput(
function BROTLI_INLINE (line 91) | static BROTLI_INLINE void BrotliBitReaderRestoreState(
function BROTLI_INLINE (line 99) | static BROTLI_INLINE brotli_reg_t BrotliGetAvailableBits(
function BROTLI_INLINE (line 107) | static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {
function BROTLI_INLINE (line 116) | static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(
function BROTLI_INLINE (line 122) | static BROTLI_INLINE brotli_reg_t BrotliBitReaderLoadBits(brotli_reg_t val,
function BROTLI_INLINE (line 136) | static BROTLI_INLINE void BrotliFillBitWindow(
function BROTLI_INLINE (line 190) | static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const b...
function BROTLI_INLINE (line 196) | static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const b...
function BROTLI_INLINE (line 209) | static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(
function BROTLI_INLINE (line 216) | static BROTLI_INLINE brotli_reg_t BrotliGet16BitsUnmasked(
function BROTLI_INLINE (line 224) | static BROTLI_INLINE brotli_reg_t BrotliGetBits(
function BROTLI_INLINE (line 232) | static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(
function BROTLI_INLINE (line 244) | static BROTLI_INLINE void BrotliDropBits(
function BROTLI_INLINE (line 253) | static BROTLI_INLINE void BrotliBitReaderNormalize(BrotliBitReader* br) {
function BROTLI_INLINE (line 260) | static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {
function BROTLI_INLINE (line 271) | static BROTLI_INLINE void BrotliTakeBits(BrotliBitReader* const br,
function BROTLI_INLINE (line 284) | static BROTLI_INLINE brotli_reg_t BrotliReadBits24(
function BROTLI_INLINE (line 304) | static BROTLI_INLINE brotli_reg_t BrotliReadBits32(
function BROTLI_INLINE (line 326) | static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(
function BROTLI_INLINE (line 339) | static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits32(
function BROTLI_INLINE (line 357) | static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReade...
function BROTLI_INLINE (line 367) | static BROTLI_INLINE void BrotliDropBytes(BrotliBitReader* br, size_t nu...
function BROTLI_INLINE (line 377) | static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,
function BROTLI_UNUSED_FUNCTION (line 392) | BROTLI_UNUSED_FUNCTION void BrotliBitReaderSuppressUnusedFunctions(void) {
FILE: c/dec/decode.c
function BROTLI_BOOL (line 63) | BROTLI_BOOL BrotliDecoderSetParameter(
function BrotliDecoderState (line 79) | BrotliDecoderState* BrotliDecoderCreateInstance(
function BrotliDecoderDestroyInstance (line 108) | void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
function BROTLI_NOINLINE (line 120) | static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
function BrotliDecoderErrorCode (line 145) | static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
function BROTLI_INLINE (line 181) | static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
function BROTLI_NOINLINE (line 192) | static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
function BrotliDecoderErrorCode (line 236) | static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
function BROTLI_INLINE (line 361) | static BROTLI_INLINE brotli_reg_t DecodeSymbol(brotli_reg_t bits,
function BROTLI_INLINE (line 379) | static BROTLI_INLINE brotli_reg_t ReadSymbol(const HuffmanCode* table,
function BROTLI_NOINLINE (line 386) | static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
function BROTLI_INLINE (line 426) | static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
function BROTLI_INLINE (line 437) | static BROTLI_INLINE void PreloadSymbol(int safe,
function BROTLI_INLINE (line 453) | static BROTLI_INLINE brotli_reg_t ReadPreloadedSymbol(const HuffmanCode*...
function BROTLI_INLINE (line 477) | static BROTLI_INLINE int BrotliCopyPreloadedSymbolsToU8(const HuffmanCod...
function BROTLI_INLINE (line 521) | static BROTLI_INLINE brotli_reg_t Log2Floor(brotli_reg_t x) {
function BrotliDecoderErrorCode (line 533) | static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
function BROTLI_INLINE (line 576) | static BROTLI_INLINE void ProcessSingleCodeLength(brotli_reg_t code_len,
function BROTLI_INLINE (line 603) | static BROTLI_INLINE void ProcessRepeatedCodeLength(brotli_reg_t code_len,
function BrotliDecoderErrorCode (line 651) | static BrotliDecoderErrorCode ReadSymbolCodeLengths(
function BrotliDecoderErrorCode (line 701) | static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
function BrotliDecoderErrorCode (line 750) | static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderSta...
function BrotliDecoderErrorCode (line 806) | static BrotliDecoderErrorCode ReadHuffmanCode(brotli_reg_t alphabet_size...
function BROTLI_INLINE (line 932) | static BROTLI_INLINE brotli_reg_t ReadBlockLength(const HuffmanCode* table,
function BROTLI_INLINE (line 943) | static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
function BROTLI_NOINLINE (line 983) | static BROTLI_NOINLINE void InverseMoveToFrontTransform(
function BrotliDecoderErrorCode (line 1021) | static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
function BrotliDecoderErrorCode (line 1050) | static BrotliDecoderErrorCode DecodeContextMap(brotli_reg_t context_map_...
function BROTLI_INLINE (line 1179) | static BROTLI_INLINE BrotliDecoderErrorCode DecodeBlockTypeAndLength(
function BROTLI_INLINE (line 1225) | static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
function BROTLI_INLINE (line 1244) | static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
function BROTLI_INLINE (line 1259) | static BROTLI_INLINE BrotliDecoderErrorCode DecodeLiteralBlockSwitchInte...
function BROTLI_NOINLINE (line 1269) | static BROTLI_NOINLINE BrotliDecoderErrorCode
function BROTLI_NOINLINE (line 1274) | static BROTLI_NOINLINE BrotliDecoderErrorCode SafeDecodeLiteralBlockSwitch(
function BROTLI_INLINE (line 1281) | static BROTLI_INLINE BrotliDecoderErrorCode DecodeCommandBlockSwitchInte...
function BROTLI_NOINLINE (line 1291) | static BROTLI_NOINLINE BrotliDecoderErrorCode
function BROTLI_NOINLINE (line 1296) | static BROTLI_NOINLINE BrotliDecoderErrorCode
function BROTLI_INLINE (line 1303) | static BROTLI_INLINE BrotliDecoderErrorCode DecodeDistanceBlockSwitchInt...
function BROTLI_NOINLINE (line 1315) | static BROTLI_NOINLINE BrotliDecoderErrorCode
function BROTLI_BOOL (line 1320) | static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
function UnwrittenBytes (line 1325) | static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wr...
function BrotliDecoderErrorCode (line 1335) | static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
function WrapRingBuffer (line 1380) | static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
function BROTLI_BOOL (line 1394) | static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
function BrotliDecoderErrorCode (line 1423) | static BrotliDecoderErrorCode BROTLI_NOINLINE
function BrotliDecoderErrorCode (line 1475) | static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOut...
function BROTLI_BOOL (line 1526) | static BROTLI_BOOL AttachCompoundDictionary(
function EnsureCompoundDictionaryInitialized (line 1550) | static void EnsureCompoundDictionaryInitialized(BrotliDecoderState* stat...
function BROTLI_BOOL (line 1567) | static BROTLI_BOOL InitializeCompoundDictionaryCopy(BrotliDecoderState* s,
function GetCompoundDictionarySize (line 1586) | static int GetCompoundDictionarySize(BrotliDecoderState* s) {
function CopyFromCompoundDictionary (line 1590) | static int CopyFromCompoundDictionary(BrotliDecoderState* s, int pos) {
function BROTLI_BOOL (line 1616) | BROTLI_BOOL BrotliDecoderAttachDictionary(
function BrotliCalculateRingBufferSize (line 1641) | static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
function BrotliDecoderErrorCode (line 1681) | static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
function BROTLI_INLINE (line 1698) | static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState*...
function BROTLI_INLINE (line 1725) | static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
function BROTLI_INLINE (line 1735) | static BROTLI_INLINE BROTLI_BOOL SafeReadBits32(
function CalculateDistanceLut (line 1812) | static void CalculateDistanceLut(BrotliDecoderState* s) {
function BROTLI_INLINE (line 1847) | static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
function BROTLI_INLINE (line 1885) | static BROTLI_INLINE void ReadDistance(
function BROTLI_INLINE (line 1890) | static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
function BROTLI_INLINE (line 1895) | static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
function BROTLI_INLINE (line 1933) | static BROTLI_INLINE void ReadCommand(
function BROTLI_INLINE (line 1938) | static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
function BROTLI_INLINE (line 1943) | static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
function BROTLI_INLINE (line 1982) | static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
function BROTLI_NOINLINE (line 2371) | static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
function BROTLI_NOINLINE (line 2376) | static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
function BrotliDecoderResult (line 2381) | BrotliDecoderResult BrotliDecoderDecompress(
function BrotliDecoderResult (line 2417) | BrotliDecoderResult BrotliDecoderDecompressStream(
function BROTLI_BOOL (line 2902) | BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
function BROTLI_BOOL (line 2936) | BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
function BROTLI_BOOL (line 2941) | BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
function BrotliDecoderErrorCode (line 2946) | BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderStat...
function BrotliDecoderVersion (line 2962) | uint32_t BrotliDecoderVersion(void) {
function BrotliDecoderSetMetadataCallbacks (line 2966) | void BrotliDecoderSetMetadataCallbacks(
function BROTLI_BOOL (line 2979) | BROTLI_BOOL BrotliSafeReadSymbolForTest(
function BrotliInverseMoveToFrontTransformForTest (line 2985) | void BrotliInverseMoveToFrontTransformForTest(
FILE: c/dec/huffman.c
function BROTLI_INLINE (line 68) | static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {
function BROTLI_INLINE (line 78) | static BROTLI_INLINE void ReplicateValue(HuffmanCode* table,
function BROTLI_INLINE (line 90) | static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
function BrotliBuildCodeLengthsHuffmanTable (line 102) | void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
function BrotliBuildHuffmanTable (line 169) | uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
function BrotliBuildSimpleHuffmanTable (line 261) | uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
FILE: c/dec/huffman.h
type HuffmanCode (line 37) | typedef struct {
function BROTLI_INLINE (line 42) | static BROTLI_INLINE HuffmanCode ConstructHuffmanCode(const uint8_t bits,
type HuffmanCode (line 74) | typedef BROTLI_ALIGNED(4) uint32_t HuffmanCode;
function BROTLI_INLINE (line 76) | static BROTLI_INLINE HuffmanCode ConstructHuffmanCode(const uint8_t bits,
type HuffmanTreeGroup (line 108) | typedef struct {
FILE: c/dec/prefix.c
function BROTLI_COLD (line 24) | BROTLI_COLD BROTLI_BOOL BrotliDecoderInitCmdLut(CmdLutElement* items) {
FILE: c/dec/prefix.h
type CmdLutElement (line 21) | typedef struct CmdLutElement {
FILE: c/dec/state.c
function BROTLI_BOOL (line 32) | BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
function BrotliDecoderStateMetablockBegin (line 112) | void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {
function BrotliDecoderStateCleanupAfterMetablock (line 142) | void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {
function BrotliDecoderStateCleanup (line 151) | void BrotliDecoderStateCleanup(BrotliDecoderState* s) {
function BROTLI_BOOL (line 163) | BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,
FILE: c/dec/state.h
type BrotliRunningState (line 112) | typedef enum {
type BrotliRunningMetablockHeaderState (line 142) | typedef enum {
type BrotliRunningUncompressedState (line 153) | typedef enum {
type BrotliRunningTreeGroupState (line 158) | typedef enum {
type BrotliRunningContextMapState (line 163) | typedef enum {
type BrotliRunningHuffmanState (line 171) | typedef enum {
type BrotliRunningDecodeUint8State (line 180) | typedef enum {
type BrotliRunningReadBlockLengthState (line 186) | typedef enum {
type BrotliDecoderCompoundDictionary (line 192) | typedef struct BrotliDecoderCompoundDictionary {
type BrotliMetablockHeaderArena (line 205) | typedef struct BrotliMetablockHeaderArena {
type BrotliMetablockBodyArena (line 245) | typedef struct BrotliMetablockBodyArena {
type BrotliDecoderStateStruct (line 250) | struct BrotliDecoderStateStruct {
type BrotliDecoderStateInternal (line 367) | typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;
FILE: c/dec/static_init.c
function BROTLI_BOOL (line 22) | static BROTLI_BOOL DoBrotliDecoderStaticInit(void) {
function BrotliDecoderStaticInitEarly (line 31) | static __attribute__((constructor)) void BrotliDecoderStaticInitEarly(vo...
function BrotliDecoderLazyStaticInitInner (line 36) | void BrotliDecoderLazyStaticInitInner(void) {
function BROTLI_BOOL (line 41) | BROTLI_BOOL BrotliDecoderEnsureStaticInit(void) {
FILE: c/enc/backward_references.c
function BROTLI_INLINE (line 25) | static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
function BrotliCreateBackwardReferences (line 189) | void BrotliCreateBackwardReferences(size_t num_bytes,
FILE: c/enc/backward_references_hq.c
function BrotliInitZopfliNodes (line 42) | void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {
function BROTLI_INLINE (line 52) | static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* sel...
function BROTLI_INLINE (line 56) | static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* sel...
function BROTLI_INLINE (line 61) | static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* s...
function BROTLI_INLINE (line 65) | static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* s...
function BROTLI_INLINE (line 72) | static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* ...
type ZopfliCostModelArena (line 77) | typedef struct ZopfliCostModelArena {
type ZopfliCostModel (line 85) | typedef struct ZopfliCostModel {
function InitZopfliCostModel (line 102) | static void InitZopfliCostModel(
function CleanupZopfliCostModel (line 112) | static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* se...
function SetCost (line 117) | static void SetCost(const uint32_t* histogram, size_t histogram_size,
function ZopfliCostModelSetFromCommands (line 149) | static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,
function ZopfliCostModelSetFromLiteralCosts (line 209) | static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,
function BROTLI_INLINE (line 237) | static BROTLI_INLINE float ZopfliCostModelGetCommandCost(
function BROTLI_INLINE (line 242) | static BROTLI_INLINE float ZopfliCostModelGetDistanceCost(
function BROTLI_INLINE (line 247) | static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(
function BROTLI_INLINE (line 252) | static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(
function BROTLI_INLINE (line 260) | static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
type PosData (line 271) | typedef struct PosData {
type StartPosQueue (line 279) | typedef struct StartPosQueue {
function BROTLI_INLINE (line 284) | static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {
function StartPosQueueSize (line 288) | static size_t StartPosQueueSize(const StartPosQueue* self) {
function StartPosQueuePush (line 292) | static void StartPosQueuePush(StartPosQueue* self, const PosData* posdat...
function PosData (line 308) | static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t ...
function ComputeMinimumCopyLength (line 314) | static size_t ComputeMinimumCopyLength(const float start_cost,
function ComputeDistanceShortcut (line 341) | static uint32_t ComputeDistanceShortcut(const size_t block_start,
function ComputeDistanceCache (line 372) | static void ComputeDistanceCache(const size_t pos,
function EvaluateNode (line 393) | static void EvaluateNode(
function UpdateNodes (line 414) | static size_t UpdateNodes(
function ComputeShortestPathFromNodes (line 587) | static size_t ComputeShortestPathFromNodes(size_t num_bytes,
function BrotliZopfliCreateCommands (line 604) | void BrotliZopfliCreateCommands(const size_t num_bytes,
function ZopfliIterate (line 649) | static size_t ZopfliIterate(size_t num_bytes, size_t position,
function MergeMatches (line 689) | static void MergeMatches(BackwardMatch* dst,
function BrotliZopfliComputeShortestPath (line 707) | size_t BrotliZopfliComputeShortestPath(MemoryManager* m, size_t num_bytes,
function BrotliCreateZopfliBackwardReferences (line 797) | void BrotliCreateZopfliBackwardReferences(MemoryManager* m, size_t num_b...
function BrotliCreateHqZopfliBackwardReferences (line 814) | void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, size_t num...
FILE: c/enc/backward_references_hq.h
type ZopfliNode (line 37) | typedef struct ZopfliNode {
FILE: c/enc/backward_references_inc.h
function BROTLI_NOINLINE (line 10) | static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(
FILE: c/enc/bit_cost.c
function BrotliBitsEntropy (line 18) | double BrotliBitsEntropy(const uint32_t* population, size_t size) {
FILE: c/enc/block_splitter.c
function CountLiterals (line 39) | static size_t CountLiterals(const Command* cmds, const size_t num_comman...
function CopyLiteralsToByteArray (line 49) | static void CopyLiteralsToByteArray(const Command* cmds,
function BROTLI_INLINE (line 75) | static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {
function BROTLI_INLINE (line 81) | static BROTLI_INLINE double BitCost(size_t count) {
function BrotliInitBlockSplit (line 107) | void BrotliInitBlockSplit(BlockSplit* self) {
function BrotliDestroyBlockSplit (line 116) | void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {
function BrotliSplitBlock (line 123) | void BrotliSplitBlock(MemoryManager* m,
function BrotliCountLiteralsForTest (line 200) | size_t BrotliCountLiteralsForTest(const Command* cmds, size_t num_comman...
function BrotliCopyLiteralsToByteArrayForTest (line 205) | void BrotliCopyLiteralsToByteArrayForTest(const Command* cmds,
FILE: c/enc/block_splitter.h
type BlockSplit (line 20) | typedef struct BlockSplit {
FILE: c/enc/brotli_bit_stream.c
function BROTLI_INLINE (line 34) | static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {
function BROTLI_INLINE (line 41) | static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t*...
type BlockTypeCodeCalculator (line 48) | typedef struct BlockTypeCodeCalculator {
function InitBlockTypeCodeCalculator (line 53) | static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {
function BROTLI_INLINE (line 58) | static BROTLI_INLINE size_t NextBlockTypeCode(
function BrotliEncodeMlen (line 70) | static void BrotliEncodeMlen(size_t length, uint64_t* bits,
function BROTLI_INLINE (line 82) | static BROTLI_INLINE void StoreCommandExtra(
type BlockSplitCode (line 97) | typedef struct BlockSplitCode {
function StoreVarLenUint8 (line 106) | static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* stor...
function StoreCompressedMetaBlockHeader (line 120) | static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,
function BrotliStoreUncompressedMetaBlockHeader (line 148) | static void BrotliStoreUncompressedMetaBlockHeader(size_t length,
function BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask (line 165) | static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(
function BrotliStoreHuffmanTreeToBitMask (line 220) | static void BrotliStoreHuffmanTreeToBitMask(
function StoreSimpleHuffmanTree (line 242) | static void StoreSimpleHuffmanTree(const uint8_t* depths,
function BrotliStoreHuffmanTree (line 283) | void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
function BuildAndStoreHuffmanTree (line 349) | static void BuildAndStoreHuffmanTree(const uint32_t* histogram,
function BROTLI_INLINE (line 399) | static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
function BrotliBuildAndStoreHuffmanTreeFast (line 404) | void BrotliBuildAndStoreHuffmanTreeFast(HuffmanTree* tree,
function IndexOf (line 575) | static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {
function MoveToFront (line 583) | static void MoveToFront(uint8_t* v, size_t index) {
function MoveToFrontTransform (line 592) | static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,
function RunLengthCodeZeros (line 626) | static void RunLengthCodeZeros(const size_t in_size,
type EncodeContextMapArena (line 677) | typedef struct EncodeContextMapArena {
function EncodeContextMap (line 683) | static void EncodeContextMap(MemoryManager* m,
function BROTLI_INLINE (line 737) | static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,
function BuildAndStoreBlockSplitCode (line 760) | static void BuildAndStoreBlockSplitCode(const uint8_t* types,
function StoreTrivialContextMap (line 794) | static void StoreTrivialContextMap(EncodeContextMapArena* arena,
type BlockEncoder (line 833) | typedef struct BlockEncoder {
function InitBlockEncoder (line 847) | static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,
function CleanupBlockEncoder (line 863) | static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {
function BuildAndStoreBlockSwitchEntropyCodes (line 870) | static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,
function StoreSymbol (line 879) | static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* stora...
function StoreSymbolWithContext (line 900) | static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,
function JumpToByteBoundary (line 935) | static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {
type StoreMetablockArena (line 940) | typedef struct StoreMetablockArena {
function BrotliStoreMetaBlock (line 947) | void BrotliStoreMetaBlock(MemoryManager* m,
function BuildHistograms (line 1088) | static void BuildHistograms(const uint8_t* input,
function StoreDataWithHuffmanCodes (line 1113) | static void StoreDataWithHuffmanCodes(const uint8_t* input,
type MetablockArena (line 1154) | typedef struct MetablockArena {
function BrotliStoreMetaBlockTrivial (line 1168) | void BrotliStoreMetaBlockTrivial(MemoryManager* m,
function BrotliStoreMetaBlockFast (line 1212) | void BrotliStoreMetaBlockFast(MemoryManager* m,
function BrotliStoreUncompressedMetaBlock (line 1293) | void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,
function BrotliGetBlockLengthPrefixCodeForTest (line 1329) | void BrotliGetBlockLengthPrefixCodeForTest(uint32_t len, size_t* code,
FILE: c/enc/cluster.c
function BROTLI_INLINE (line 21) | static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
function BROTLI_INLINE (line 30) | static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
FILE: c/enc/cluster.h
type HistogramPair (line 20) | typedef struct HistogramPair {
FILE: c/enc/cluster_inc.h
function BROTLI_INTERNAL (line 14) | BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(
function BROTLI_INTERNAL (line 70) | BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,
function BROTLI_INTERNAL (line 158) | BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(
function BROTLI_INTERNAL (line 174) | BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,
function BROTLI_INTERNAL (line 213) | BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,
function BROTLI_INTERNAL (line 251) | BROTLI_INTERNAL void FN(BrotliClusterHistograms)(
FILE: c/enc/command.h
function BROTLI_INLINE (line 31) | static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {
function BROTLI_INLINE (line 48) | static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {
function BROTLI_INLINE (line 61) | static BROTLI_INLINE uint16_t CombineLengthCodes(
function BROTLI_INLINE (line 82) | static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,
function BROTLI_INLINE (line 90) | static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {
function BROTLI_INLINE (line 94) | static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {
function BROTLI_INLINE (line 98) | static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {
function BROTLI_INLINE (line 102) | static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {
type Command (line 106) | typedef struct Command {
function BROTLI_INLINE (line 119) | static BROTLI_INLINE void InitCommand(Command* self,
function BROTLI_INLINE (line 137) | static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insert...
function BROTLI_INLINE (line 145) | static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(
function BROTLI_INLINE (line 166) | static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {
function BROTLI_INLINE (line 175) | static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {
function BROTLI_INLINE (line 179) | static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {
FILE: c/enc/compound_dictionary.c
function PreparedDictionary (line 13) | static PreparedDictionary* CreatePreparedDictionaryWithParams(MemoryMana...
function PreparedDictionary (line 151) | PreparedDictionary* CreatePreparedDictionary(MemoryManager* m,
function DestroyPreparedDictionary (line 168) | void DestroyPreparedDictionary(MemoryManager* m,
function BROTLI_BOOL (line 174) | BROTLI_BOOL AttachPreparedDictionary(
FILE: c/enc/compound_dictionary.h
type PreparedDictionary (line 30) | typedef struct PreparedDictionary {
type CompoundDictionary (line 54) | typedef struct CompoundDictionary {
FILE: c/enc/compress_fragment.c
function BROTLI_INLINE (line 32) | static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {
function BROTLI_INLINE (line 37) | static BROTLI_INLINE uint32_t HashBytesAtOffset(
function BROTLI_INLINE (line 47) | static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_...
function BuildAndStoreLiteralPrefixCode (line 61) | static size_t BuildAndStoreLiteralPrefixCode(BrotliOnePassArena* s,
function BuildAndStoreCommandPrefixCode (line 117) | static void BuildAndStoreCommandPrefixCode(BrotliOnePassArena* s,
function BROTLI_INLINE (line 170) | static BROTLI_INLINE void EmitInsertLen(size_t insertlen,
function BROTLI_INLINE (line 202) | static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,
function BROTLI_INLINE (line 219) | static BROTLI_INLINE void EmitCopyLen(size_t copylen,
function BROTLI_INLINE (line 251) | static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,
function BROTLI_INLINE (line 294) | static BROTLI_INLINE void EmitDistance(size_t distance,
function BROTLI_INLINE (line 309) | static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_...
function BrotliStoreMetaBlockHeader (line 321) | static void BrotliStoreMetaBlockHeader(
function UpdateBits (line 338) | static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,
function RewindBitPosition (line 357) | static void RewindBitPosition(const size_t new_storage_ix,
function BROTLI_BOOL (line 365) | static BROTLI_BOOL ShouldMergeBlock(BrotliOnePassArena* s,
function BROTLI_INLINE (line 387) | static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(
function EmitUncompressedMetaBlock (line 398) | static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_...
function BROTLI_INLINE (line 419) | static BROTLI_INLINE void BrotliCompressFragmentFastImpl(
function BrotliCompressFragmentFast (line 747) | void BrotliCompressFragmentFast(
FILE: c/enc/compress_fragment.h
type BrotliOnePassArena (line 23) | typedef struct BrotliOnePassArena {
FILE: c/enc/compress_fragment_two_pass.c
function BROTLI_INLINE (line 31) | static BROTLI_INLINE uint32_t Hash(const uint8_t* p,
function BROTLI_INLINE (line 38) | static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,
function BROTLI_INLINE (line 47) | static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_...
function BuildAndStoreCommandPrefixCode (line 58) | static void BuildAndStoreCommandPrefixCode(BrotliTwoPassArena* s,
function BROTLI_INLINE (line 107) | static BROTLI_INLINE void EmitInsertLen(
function BROTLI_INLINE (line 137) | static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** command...
function BROTLI_INLINE (line 160) | static BROTLI_INLINE void EmitCopyLenLastDistance(
function BROTLI_INLINE (line 199) | static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** com...
function BrotliStoreMetaBlockHeader (line 211) | static void BrotliStoreMetaBlockHeader(
function BROTLI_INLINE (line 228) | static BROTLI_INLINE void CreateCommands(const uint8_t* input,
function StoreCommands (line 458) | static void StoreCommands(BrotliTwoPassArena* s,
function BROTLI_BOOL (line 526) | static BROTLI_BOOL ShouldCompress(BrotliTwoPassArena* s,
function RewindBitPosition (line 543) | static void RewindBitPosition(const size_t new_storage_ix,
function EmitUncompressedMetaBlock (line 551) | static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input...
function BROTLI_INLINE (line 560) | static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(
function BrotliCompressFragmentTwoPass (line 612) | void BrotliCompressFragmentTwoPass(
FILE: c/enc/compress_fragment_two_pass.h
type BrotliTwoPassArena (line 27) | typedef struct BrotliTwoPassArena {
FILE: c/enc/dictionary_hash.c
function BROTLI_BOOL (line 24) | BROTLI_BOOL BROTLI_COLD BrotliEncoderInitDictionaryHash(
FILE: c/enc/encode.c
function InputBlockSize (line 45) | static size_t InputBlockSize(BrotliEncoderState* s) {
function UnprocessedInputSize (line 49) | static uint64_t UnprocessedInputSize(BrotliEncoderState* s) {
function RemainingInputBlockSize (line 53) | static size_t RemainingInputBlockSize(BrotliEncoderState* s) {
function BROTLI_BOOL (line 60) | BROTLI_BOOL BrotliEncoderSetParameter(
function WrapPosition (line 114) | static uint32_t WrapPosition(uint64_t position) {
function HashTableSize (line 135) | static size_t HashTableSize(size_t max_table_size, size_t input_size) {
function EncodeWindowBits (line 178) | static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,
function InitCommandPrefixCodes (line 202) | static void InitCommandPrefixCodes(BrotliOnePassArena* s) {
function EstimateEntropy (line 245) | static double EstimateEntropy(const uint32_t* population, size_t size) {
function ChooseContextMap (line 265) | static void ChooseContextMap(int quality,
function BROTLI_BOOL (line 329) | static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
function DecideOverLiteralContextModeling (line 411) | static void DecideOverLiteralContextModeling(const uint8_t* input,
function BROTLI_BOOL (line 444) | static BROTLI_BOOL ShouldCompress(
function ContextType (line 473) | static ContextType ChooseContextMode(const BrotliEncoderParams* params,
function WriteMetaBlockInternal (line 485) | static void WriteMetaBlockInternal(MemoryManager* m,
function ChooseDistanceParams (line 599) | static void ChooseDistanceParams(BrotliEncoderParams* params) {
function BROTLI_BOOL (line 625) | static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {
function BrotliEncoderInitParams (line 681) | static void BrotliEncoderInitParams(BrotliEncoderParams* params) {
function BrotliEncoderCleanupParams (line 699) | static void BrotliEncoderCleanupParams(MemoryManager* m,
function BrotliEncoderInitState (line 719) | static void BrotliEncoderInitState(BrotliEncoderState* s) {
function BrotliEncoderState (line 762) | BrotliEncoderState* BrotliEncoderCreateInstance(
function BrotliEncoderCleanupState (line 780) | static void BrotliEncoderCleanupState(BrotliEncoderState* s) {
function BrotliEncoderDestroyInstance (line 803) | void BrotliEncoderDestroyInstance(BrotliEncoderState* state) {
function CopyInputToRingBuffer (line 819) | static void CopyInputToRingBuffer(BrotliEncoderState* s,
function BROTLI_BOOL (line 876) | static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {
function ExtendLastCommand (line 883) | static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,
function BROTLI_BOOL (line 963) | static BROTLI_BOOL EncodeData(
function WriteMetadataHeader (line 1203) | static size_t WriteMetadataHeader(
function BrotliEncoderMaxCompressedSize (line 1227) | size_t BrotliEncoderMaxCompressedSize(size_t input_size) {
function MakeUncompressedStream (line 1240) | static size_t MakeUncompressedStream(
function BROTLI_BOOL (line 1272) | BROTLI_BOOL BrotliEncoderCompress(
function InjectBytePaddingBlock (line 1332) | static void InjectBytePaddingBlock(BrotliEncoderState* s) {
function SetTotalOut (line 1356) | static void SetTotalOut(BrotliEncoderState* s, size_t* total_out) {
function BROTLI_BOOL (line 1369) | static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,
function CheckFlushComplete (line 1393) | static void CheckFlushComplete(BrotliEncoderState* s) {
function BROTLI_BOOL (line 1401) | static BROTLI_BOOL BrotliEncoderCompressStreamFast(
function BROTLI_BOOL (line 1525) | static BROTLI_BOOL ProcessMetadata(
function UpdateSizeHint (line 1595) | static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {
function BROTLI_BOOL (line 1610) | BROTLI_BOOL BrotliEncoderCompressStream(
function BROTLI_BOOL (line 1700) | BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {
function BROTLI_BOOL (line 1705) | BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {
function BrotliEncoderVersion (line 1728) | uint32_t BrotliEncoderVersion(void) {
function BrotliEncoderPreparedDictionary (line 1732) | BrotliEncoderPreparedDictionary* BrotliEncoderPrepareDictionary(
function BrotliEncoderDestroyPreparedDictionary (line 1778) | void BROTLI_COLD BrotliEncoderDestroyPreparedDictionary(
function BROTLI_BOOL (line 1804) | BROTLI_BOOL BROTLI_COLD BrotliEncoderAttachPreparedDictionary(
function BrotliEncoderEstimatePeakMemoryUsage (line 1862) | size_t BROTLI_COLD BrotliEncoderEstimatePeakMemoryUsage(int quality, int...
function BrotliEncoderGetPreparedDictionarySize (line 1930) | size_t BROTLI_COLD BrotliEncoderGetPreparedDictionarySize(
function BrotliMakeUncompressedStreamForTest (line 2014) | size_t BrotliMakeUncompressedStreamForTest(
FILE: c/enc/encoder_dict.c
function BrotliTrieInit (line 30) | static void BrotliTrieInit(BrotliTrie* trie) {
function BrotliTrieFree (line 42) | static void BrotliTrieFree(MemoryManager* m, BrotliTrie* trie) {
function InitEncoderDictionary (line 47) | static void InitEncoderDictionary(BrotliEncoderDictionary* dict) {
function BrotliDestroyEncoderDictionary (line 72) | static void BrotliDestroyEncoderDictionary(MemoryManager* m,
function Hash (line 84) | static uint32_t Hash(const uint8_t* data, int bits) {
function TransformedDictionaryWord (line 96) | static void TransformedDictionaryWord(uint32_t word_idx, int len, int tr...
function DictWord (line 106) | static DictWord MakeDictWord(uint8_t len, uint8_t transform, uint16_t id...
function BrotliTrieAlloc (line 114) | static uint32_t BrotliTrieAlloc(MemoryManager* m, size_t num, BrotliTrie...
function BROTLI_BOOL (line 145) | static BROTLI_BOOL BrotliTrieNodeAdd(MemoryManager* m, uint8_t len,
function BROTLI_BOOL (line 188) | static BROTLI_BOOL BrotliTrieAdd(MemoryManager* m, uint8_t len, uint32_t...
function BrotliTrieNode (line 193) | const BrotliTrieNode* BrotliTrieSub(const BrotliTrie* trie,
function BrotliTrieNode (line 206) | static const BrotliTrieNode* BrotliTrieFind(const BrotliTrie* trie,
function BROTLI_BOOL (line 217) | static BROTLI_BOOL BuildDictionaryLut(MemoryManager* m,
function BuildDictionaryHashTable (line 367) | static void BuildDictionaryHashTable(uint16_t* hash_table_words,
function BROTLI_BOOL (line 395) | static BROTLI_BOOL GenerateWordsHeavy(MemoryManager* m,
function ComputeCutoffTransforms (line 422) | static void ComputeCutoffTransforms(
function BROTLI_BOOL (line 446) | static BROTLI_BOOL ComputeDictionary(MemoryManager* m, int quality,
function BrotliInitSharedEncoderDictionary (line 489) | void BrotliInitSharedEncoderDictionary(SharedEncoderDictionary* dict) {
function BROTLI_BOOL (line 511) | static BROTLI_BOOL InitCustomSharedEncoderDictionary(
function BROTLI_BOOL (line 576) | BROTLI_BOOL BrotliInitCustomSharedEncoderDictionary(
function BrotliCleanupSharedEncoderDictionary (line 596) | void BrotliCleanupSharedEncoderDictionary(MemoryManager* m,
function ManagedDictionary (line 613) | ManagedDictionary* BrotliCreateManagedDictionary(
function BrotliDestroyManagedDictionary (line 627) | void BrotliDestroyManagedDictionary(ManagedDictionary* dictionary) {
function BrotliInitEncoderDictionaryForTest (line 635) | void BrotliInitEncoderDictionaryForTest(BrotliEncoderDictionary* d) {
FILE: c/enc/encoder_dict.h
type BrotliTrieNode (line 38) | typedef struct BrotliTrieNode {
type BrotliTrie (line 46) | typedef struct BrotliTrie {
type BrotliEncoderDictionary (line 59) | typedef struct BrotliEncoderDictionary {
type ContextualEncoderDictionary (line 95) | typedef struct ContextualEncoderDictionary {
type SharedEncoderDictionary (line 108) | typedef struct SharedEncoderDictionary {
type ManagedDictionary (line 123) | typedef struct ManagedDictionary {
FILE: c/enc/entropy_encode.c
function BROTLI_BOOL (line 20) | BROTLI_BOOL BrotliSetDepth(
function BROTLI_INLINE (line 45) | static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
function BrotliCreateHuffmanTree (line 68) | void BrotliCreateHuffmanTree(const uint32_t* data,
function Reverse (line 149) | static void Reverse(uint8_t* v, size_t start, size_t end) {
function BrotliWriteHuffmanTreeRepetitions (line 160) | static void BrotliWriteHuffmanTreeRepetitions(
function BrotliWriteHuffmanTreeRepetitionsZeros (line 205) | static void BrotliWriteHuffmanTreeRepetitionsZeros(
function BrotliOptimizeHuffmanCountsForRle (line 241) | void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,
function DecideOverRleUse (line 372) | static void DecideOverRleUse(const uint8_t* depth, const size_t length,
function BrotliWriteHuffmanTree (line 402) | void BrotliWriteHuffmanTree(const uint8_t* depth,
function BrotliReverseBits (line 454) | static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {
FILE: c/enc/entropy_encode.h
type HuffmanTree (line 19) | typedef struct HuffmanTree {
function BROTLI_INLINE (line 25) | static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t co...
type BROTLI_BOOL (line 80) | typedef BROTLI_BOOL (*HuffmanTreeComparator)(
function BROTLI_INLINE (line 82) | static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,
FILE: c/enc/entropy_encode_static.h
function BROTLI_INLINE (line 86) | static BROTLI_INLINE void StoreStaticCodeLengthCode(
function BROTLI_INLINE (line 524) | static BROTLI_INLINE void StoreStaticCommandHuffmanTree(
function BROTLI_INLINE (line 538) | static BROTLI_INLINE void StoreStaticDistanceHuffmanTree(
FILE: c/enc/fast_log.h
function BROTLI_INLINE (line 20) | static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {
function BROTLI_INLINE (line 51) | static BROTLI_INLINE double FastLog2(size_t v) {
FILE: c/enc/find_match_length.h
function BROTLI_INLINE (line 20) | static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
function BROTLI_INLINE (line 42) | static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
FILE: c/enc/hash.h
type HasherCommon (line 31) | typedef struct {
type HasherSearchResult (line 65) | typedef struct HasherSearchResult {
function BROTLI_INLINE (line 72) | static BROTLI_INLINE void PrepareDistanceCache(
function BROTLI_INLINE (line 115) | static BROTLI_INLINE score_t BackwardReferenceScore(
function BROTLI_INLINE (line 121) | static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(
function BROTLI_INLINE (line 127) | static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(
function BROTLI_INLINE (line 132) | static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(
function BROTLI_INLINE (line 171) | static BROTLI_INLINE void SearchInStaticDictionary(
type BackwardMatch (line 196) | typedef struct BackwardMatch {
function BROTLI_INLINE (line 201) | static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,
function BROTLI_INLINE (line 207) | static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,
function BROTLI_INLINE (line 214) | static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* sel...
function BROTLI_INLINE (line 218) | static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch*...
type Hasher (line 393) | typedef struct {
function BROTLI_INLINE (line 405) | static BROTLI_INLINE void HasherInit(Hasher* hasher) {
function BROTLI_INLINE (line 413) | static BROTLI_INLINE void DestroyHasher(MemoryManager* m, Hasher* hasher) {
function BROTLI_INLINE (line 420) | static BROTLI_INLINE void HasherReset(Hasher* hasher) {
function BROTLI_INLINE (line 424) | static BROTLI_INLINE void HasherSize(const BrotliEncoderParams* params,
function BROTLI_INLINE (line 438) | static BROTLI_INLINE void HasherSetup(MemoryManager* m, Hasher* hasher,
function BROTLI_INLINE (line 486) | static BROTLI_INLINE void InitOrStitchToPreviousBlock(
function BROTLI_INLINE (line 507) | static BROTLI_INLINE void FindCompoundDictionaryMatch(
function BROTLI_INLINE (line 620) | static BROTLI_INLINE size_t FindAllCompoundDictionaryMatches(
function BROTLI_INLINE (line 691) | static BROTLI_INLINE void LookupCompoundDictionaryMatch(
function BROTLI_INLINE (line 708) | static BROTLI_INLINE size_t LookupAllCompoundDictionaryMatches(
FILE: c/enc/hash_base.h
function BROTLI_INLINE (line 24) | static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {
function BROTLI_INLINE (line 31) | static BROTLI_INLINE uint32_t Hash15(const uint8_t* data) {
FILE: c/enc/hash_composite_inc.h
function BROTLI_INLINE (line 18) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) {
function BROTLI_INLINE (line 24) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
type HashComposite (line 30) | typedef struct HashComposite {
function BROTLI_INLINE (line 78) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 94) | static BROTLI_INLINE void FN(Store)(HashComposite* BROTLI_RESTRICT self,
function BROTLI_INLINE (line 100) | static BROTLI_INLINE void FN(StoreRange)(
function BROTLI_INLINE (line 108) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 118) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 124) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_forgetful_chain_inc.h
function BROTLI_INLINE (line 27) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
function BROTLI_INLINE (line 28) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
function BROTLI_INLINE (line 31) | static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT...
type FN (line 38) | struct FN
type FN (line 43) | struct FN
type HashForgetfulChain (line 47) | typedef struct HashForgetfulChain {
function BROTLI_INLINE (line 120) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 133) | static BROTLI_INLINE void FN(Store)(HashForgetfulChain* BROTLI_RESTRICT ...
function BROTLI_INLINE (line 151) | static BROTLI_INLINE void FN(StoreRange)(
function BROTLI_INLINE (line 161) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 175) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 193) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_longest_match64_inc.h
function BROTLI_INLINE (line 19) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
function BROTLI_INLINE (line 20) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
function BROTLI_INLINE (line 23) | static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT...
type HashLongestMatch (line 31) | typedef struct HashLongestMatch {
function BROTLI_INLINE (line 92) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 105) | static BROTLI_INLINE void FN(Store)(
function BROTLI_INLINE (line 117) | static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRI...
function BROTLI_INLINE (line 126) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 140) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 157) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_longest_match64_simd_inc.h
function BROTLI_INLINE (line 22) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
function BROTLI_INLINE (line 23) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
function BROTLI_INLINE (line 26) | static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT...
type HashLongestMatch (line 34) | typedef struct HashLongestMatch {
function BROTLI_INLINE (line 100) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 114) | static BROTLI_INLINE void FN(Store)(
function BROTLI_INLINE (line 130) | static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRI...
function BROTLI_INLINE (line 139) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 153) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 170) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_longest_match_inc.h
function BROTLI_INLINE (line 19) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
function BROTLI_INLINE (line 20) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
type HashLongestMatch (line 31) | typedef struct HashLongestMatch {
function BROTLI_INLINE (line 91) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 104) | static BROTLI_INLINE void FN(Store)(
function BROTLI_INLINE (line 116) | static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRI...
function BROTLI_INLINE (line 125) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 139) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 156) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_longest_match_quickly_inc.h
function BROTLI_INLINE (line 19) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
function BROTLI_INLINE (line 20) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
type HashLongestMatchQuickly (line 37) | typedef struct HashLongestMatchQuickly {
function BROTLI_INLINE (line 83) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 95) | static BROTLI_INLINE void FN(Store)(
function BROTLI_INLINE (line 108) | static BROTLI_INLINE void FN(StoreRange)(
function BROTLI_INLINE (line 118) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 132) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 147) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_longest_match_simd_inc.h
function BROTLI_INLINE (line 15) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
function BROTLI_INLINE (line 16) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
type HashLongestMatch (line 25) | typedef struct HashLongestMatch {
function BROTLI_INLINE (line 80) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 93) | static BROTLI_INLINE void FN(Store)(
function BROTLI_INLINE (line 108) | static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRI...
function BROTLI_INLINE (line 116) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 129) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 144) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_rolling_inc.h
function BROTLI_INLINE (line 23) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
function BROTLI_INLINE (line 24) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
type HashRolling (line 44) | typedef struct HashRolling {
function BROTLI_INLINE (line 91) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 100) | static BROTLI_INLINE void FN(Store)(HashRolling* BROTLI_RESTRICT self,
function BROTLI_INLINE (line 108) | static BROTLI_INLINE void FN(StoreRange)(HashRolling* BROTLI_RESTRICT self,
function BROTLI_INLINE (line 118) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
function BROTLI_INLINE (line 143) | static BROTLI_INLINE void FN(PrepareDistanceCache)(
function BROTLI_INLINE (line 150) | static BROTLI_INLINE void FN(FindLongestMatch)(
FILE: c/enc/hash_to_binary_tree_inc.h
function BROTLI_INLINE (line 22) | static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
function BROTLI_INLINE (line 23) | static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
type HashToBinaryTree (line 34) | typedef struct HashToBinaryTree {
function BROTLI_INLINE (line 81) | static BROTLI_INLINE void FN(HashMemAllocInBytes)(
function BROTLI_INLINE (line 92) | static BROTLI_INLINE size_t FN(LeftChildIndex)(
function BROTLI_INLINE (line 98) | static BROTLI_INLINE size_t FN(RightChildIndex)(
function BROTLI_INLINE (line 202) | static BROTLI_INLINE size_t FN(FindAllMatches)(
function BROTLI_INLINE (line 271) | static BROTLI_INLINE void FN(Store)(HashToBinaryTree* BROTLI_RESTRICT self,
function BROTLI_INLINE (line 280) | static BROTLI_INLINE void FN(StoreRange)(HashToBinaryTree* BROTLI_RESTRI...
function BROTLI_INLINE (line 298) | static BROTLI_INLINE void FN(StitchToPreviousBlock)(
FILE: c/enc/histogram.c
type BlockSplitIterator (line 20) | typedef struct BlockSplitIterator {
function InitBlockSplitIterator (line 27) | static void InitBlockSplitIterator(BlockSplitIterator* self,
function BlockSplitIteratorNext (line 35) | static void BlockSplitIteratorNext(BlockSplitIterator* self) {
function BrotliBuildHistogramsWithContext (line 44) | void BrotliBuildHistogramsWithContext(
FILE: c/enc/histogram_inc.h
type FN (line 12) | struct FN
function BROTLI_INLINE (line 18) | static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
function BROTLI_INLINE (line 24) | static BROTLI_INLINE void FN(ClearHistograms)(
function BROTLI_INLINE (line 30) | static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t v...
function BROTLI_INLINE (line 35) | static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
function BROTLI_INLINE (line 42) | static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
function BROTLI_INLINE (line 51) | static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SI...
FILE: c/enc/literal_cost.c
function UTF8Position (line 20) | static size_t UTF8Position(size_t last, size_t c, size_t clamp) {
function DecideMultiByteStatsLevel (line 35) | static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t m...
function EstimateBitCostsForLiteralsUTF8 (line 55) | static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size...
function BrotliEstimateBitCostsForLiterals (line 129) | void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,
FILE: c/enc/matching_tag_mask.h
function BROTLI_INLINE (line 16) | static BROTLI_INLINE uint64_t GetMatchingTagMask(
FILE: c/enc/memory.c
function BrotliInitMemoryManager (line 26) | void BrotliInitMemoryManager(
function BrotliFree (line 54) | void BrotliFree(MemoryManager* m, void* p) {
function BrotliWipeOutMemoryManager (line 58) | void BrotliWipeOutMemoryManager(MemoryManager* m) {
function SortPointers (line 64) | static void SortPointers(void** items, const size_t n) {
function Annihilate (line 83) | static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {
function CollectGarbagePointers (line 105) | static void CollectGarbagePointers(MemoryManager* m) {
function BrotliFree (line 146) | void BrotliFree(MemoryManager* m, void* p) {
function BrotliWipeOutMemoryManager (line 153) | void BrotliWipeOutMemoryManager(MemoryManager* m) {
function BrotliBootstrapFree (line 175) | void BrotliBootstrapFree(void* address, MemoryManager* m) {
FILE: c/enc/memory.h
type MemoryManager (line 33) | typedef struct MemoryManager {
FILE: c/enc/metablock.c
function BrotliInitDistanceParams (line 29) | void BrotliInitDistanceParams(BrotliDistanceParams* dist_params,
function RecomputeDistancePrefixes (line 58) | static void RecomputeDistancePrefixes(Command* cmds,
function BROTLI_BOOL (line 82) | static BROTLI_BOOL ComputeDistanceCost(const Command* cmds,
function BrotliBuildMetaBlock (line 126) | void BrotliBuildMetaBlock(MemoryManager* m,
type ContextBlockSplitter (line 303) | typedef struct ContextBlockSplitter {
function InitContextBlockSplitter (line 336) | static void InitContextBlockSplitter(
function ContextBlockSplitterFinishBlock (line 383) | static void ContextBlockSplitterFinishBlock(
function ContextBlockSplitterAddSymbol (line 505) | static void ContextBlockSplitterAddSymbol(
function MapStaticContexts (line 517) | static void MapStaticContexts(MemoryManager* m,
type GreedyMetablockArena (line 539) | typedef struct GreedyMetablockArena {
function BROTLI_INLINE (line 548) | static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(
function BrotliBuildMetaBlockGreedy (line 627) | void BrotliBuildMetaBlockGreedy(MemoryManager* m,
function BrotliOptimizeHistograms (line 653) | void BrotliOptimizeHistograms(uint32_t num_distance_codes,
FILE: c/enc/metablock.h
type MetaBlockSplit (line 27) | typedef struct MetaBlockSplit {
function BROTLI_INLINE (line 43) | static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
function BROTLI_INLINE (line 59) | static BROTLI_INLINE void DestroyMetaBlockSplit(
FILE: c/enc/metablock_inc.h
type FN (line 14) | struct FN
FILE: c/enc/params.h
type BrotliHasherParams (line 15) | typedef struct BrotliHasherParams {
type BrotliDistanceParams (line 22) | typedef struct BrotliDistanceParams {
type BrotliEncoderParams (line 31) | typedef struct BrotliEncoderParams {
FILE: c/enc/prefix.h
function BROTLI_INLINE (line 23) | static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,
FILE: c/enc/quality.h
function BROTLI_INLINE (line 36) | static BROTLI_INLINE size_t MaxHashTableSize(int quality) {
function BROTLI_INLINE (line 47) | static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* para...
function BROTLI_INLINE (line 54) | static BROTLI_INLINE size_t MaxZopfliCandidates(
function BROTLI_INLINE (line 59) | static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {
function BROTLI_INLINE (line 75) | static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* param...
function BROTLI_INLINE (line 99) | static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {
function BROTLI_INLINE (line 103) | static BROTLI_INLINE size_t MaxMetablockSize(
function BROTLI_INLINE (line 116) | static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(
function BROTLI_INLINE (line 156) | static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,
FILE: c/enc/ringbuffer.h
type RingBuffer (line 30) | typedef struct RingBuffer {
function BROTLI_INLINE (line 47) | static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {
function BROTLI_INLINE (line 54) | static BROTLI_INLINE void RingBufferSetup(
function BROTLI_INLINE (line 64) | static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* r...
function BROTLI_INLINE (line 70) | static BROTLI_INLINE void RingBufferInitBuffer(
function BROTLI_INLINE (line 91) | static BROTLI_INLINE void RingBufferWriteTail(
function BROTLI_INLINE (line 103) | static BROTLI_INLINE void RingBufferWrite(
FILE: c/enc/state.h
type BrotliEncoderStreamState (line 22) | typedef enum BrotliEncoderStreamState {
type BrotliEncoderFlintState (line 36) | typedef enum BrotliEncoderFlintState {
type BrotliEncoderStateStruct (line 44) | typedef struct BrotliEncoderStateStruct {
type BrotliEncoderStateInternal (line 101) | typedef struct BrotliEncoderStateStruct BrotliEncoderStateInternal;
FILE: c/enc/static_dict.c
function BROTLI_INLINE (line 20) | static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t l...
function BROTLI_INLINE (line 26) | static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dict...
function BROTLI_INLINE (line 36) | static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* diction...
function BROTLI_BOOL (line 72) | static BROTLI_BOOL BrotliFindAllStaticDictionaryMatchesFor(
function BROTLI_BOOL (line 497) | BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
FILE: c/enc/static_dict_lut.c
function BROTLI_BOOL (line 27) | static BROTLI_BOOL BROTLI_COLD DoBrotliEncoderInitStaticDictionaryLut(
function BROTLI_BOOL (line 194) | BROTLI_BOOL BrotliEncoderInitStaticDictionaryLut(
FILE: c/enc/static_dict_lut.h
type DictWord (line 20) | typedef struct DictWord {
FILE: c/enc/static_init.c
function BROTLI_BOOL (line 23) | static BROTLI_BOOL DoBrotliEncoderStaticInit(void) {
function BrotliEncoderStaticInitEarly (line 37) | static __attribute__((constructor)) void BrotliEncoderStaticInitEarly(vo...
function BrotliEncoderLazyStaticInitInner (line 42) | void BrotliEncoderLazyStaticInitInner(void) {
function BROTLI_BOOL (line 47) | BROTLI_BOOL BrotliEncoderEnsureStaticInit(void) {
FILE: c/enc/static_init_lazy.cc
function BrotliEncoderLazyStaticInit (line 8) | void BrotliEncoderLazyStaticInit(void) {
FILE: c/enc/utf8_util.c
function BrotliParseAsUTF8 (line 17) | static size_t BrotliParseAsUTF8(
function BROTLI_BOOL (line 68) | BROTLI_BOOL BrotliIsMostlyUTF8(
FILE: c/enc/write_bits.h
function BROTLI_INLINE (line 33) | static BROTLI_INLINE void BrotliWriteBits(size_t n_bits,
function BROTLI_INLINE (line 75) | static BROTLI_INLINE void BrotliWriteBitsPrepareStorage(
FILE: c/fuzz/decode_fuzzer.c
function LLVMFuzzerTestOneInput (line 12) | int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
FILE: c/fuzz/run_decode_fuzzer.c
function main (line 16) | int main(int argc, char* *argv) {
FILE: c/include/brotli/decode.h
type BrotliDecoderState (line 29) | typedef struct BrotliDecoderStateStruct BrotliDecoderState;
type BrotliDecoderResult (line 35) | typedef enum {
type BrotliDecoderParameter (line 131) | typedef enum BrotliDecoderParameter {
FILE: c/include/brotli/encode.h
type BrotliEncoderMode (line 46) | typedef enum BrotliEncoderMode {
type BrotliEncoderOperation (line 68) | typedef enum BrotliEncoderOperation {
type BrotliEncoderParameter (line 135) | typedef enum BrotliEncoderParameter {
type BrotliEncoderState (line 230) | typedef struct BrotliEncoderStateStruct BrotliEncoderState;
type BrotliEncoderPreparedDictionary (line 275) | typedef struct BrotliEncoderPreparedDictionaryStruct
FILE: c/include/brotli/shared_dictionary.h
type BrotliSharedDictionary (line 30) | typedef struct BrotliSharedDictionaryStruct BrotliSharedDictionary;
type BrotliSharedDictionaryType (line 35) | typedef enum BrotliSharedDictionaryType {
FILE: c/include/brotli/types.h
type __int8 (line 18) | typedef __int8 int8_t;
type __int16 (line 20) | typedef __int16 int16_t;
type __int32 (line 22) | typedef __int32 int32_t;
type __int64 (line 25) | typedef __int64 int64_t;
FILE: c/tools/brotli.c
function FILE (line 61) | static FILE* ms_fopen(const char* filename, const char* mode) {
function ms_open (line 67) | static int ms_open(const char* filename, int oflag, int pmode) {
type Command (line 96) | typedef enum {
type CommentState (line 106) | typedef enum {
type Context (line 118) | typedef struct {
function BROTLI_BOOL (line 182) | static BROTLI_BOOL ParseBase64(const char* str, uint8_t* out, size_t* ou...
function BROTLI_BOOL (line 228) | static BROTLI_BOOL ParseInt(const char* s, int low, int high, int* resul...
function BROTLI_BOOL (line 255) | static BROTLI_BOOL CheckAlias(const char* name, const char* alias) {
function Command (line 267) | static Command ParseParams(Context* params) {
function PrintVersion (line 712) | static void PrintVersion(void) {
function PrintHelp (line 719) | static void PrintHelp(const char* name, BROTLI_BOOL error) {
function BROTLI_BOOL (line 780) | static BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) {
function BROTLI_BOOL (line 795) | static BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f,
function FileSize (line 819) | static int64_t FileSize(const char* path) {
function CopyTimeStat (line 836) | static int CopyTimeStat(const struct stat* statbuf, const char* output_p...
function CopyStat (line 855) | static void CopyStat(const char* input_path, const char* output_path) {
function BROTLI_BOOL (line 884) | static BROTLI_BOOL ReadDictionary(Context* context, Command command) {
function BROTLI_BOOL (line 945) | static BROTLI_BOOL NextFile(Context* context) {
function BROTLI_BOOL (line 1018) | static BROTLI_BOOL OpenFiles(Context* context) {
function BROTLI_BOOL (line 1027) | static BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL rm_input,
function InitializeBuffers (line 1069) | static void InitializeBuffers(Context* context) {
function BROTLI_BOOL (line 1083) | static BROTLI_BOOL HasMoreInput(Context* context) {
function BROTLI_BOOL (line 1087) | static BROTLI_BOOL ProvideInput(Context* context) {
function BROTLI_BOOL (line 1101) | static BROTLI_BOOL WriteOutput(Context* context) {
function BROTLI_BOOL (line 1116) | static BROTLI_BOOL ProvideOutput(Context* context) {
function BROTLI_BOOL (line 1123) | static BROTLI_BOOL FlushOutput(Context* context) {
function PrintBytes (line 1130) | static void PrintBytes(size_t value) {
function PrintFileProcessingProgress (line 1142) | static void PrintFileProcessingProgress(Context* context) {
function OnMetadataStart (line 1166) | static void OnMetadataStart(void* opaque, size_t size) {
function OnMetadataChunk (line 1178) | static void OnMetadataChunk(void* opaque, const uint8_t* data, size_t si...
function BROTLI_BOOL (line 1198) | static BROTLI_BOOL InitDecoder(Context* context) {
function BROTLI_BOOL (line 1217) | static BROTLI_BOOL DecompressFile(Context* context) {
function BROTLI_BOOL (line 1315) | static BROTLI_BOOL DecompressFiles(Context* context) {
function BROTLI_BOOL (line 1338) | static BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s) {
function BROTLI_BOOL (line 1395) | static BROTLI_BOOL CompressFiles(Context* context) {
function main (line 1461) | int main(int argc, char** argv) {
FILE: csharp/org/brotli/dec/BitReader.cs
class BitReader (line 9) | internal sealed class BitReader
method ReadMoreInput (line 55) | internal static void ReadMoreInput(Org.Brotli.Dec.BitReader br)
method CheckHealth (line 97) | internal static void CheckHealth(Org.Brotli.Dec.BitReader br, bool end...
method FillBitWindow (line 115) | internal static void FillBitWindow(Org.Brotli.Dec.BitReader br)
method ReadBits (line 125) | internal static int ReadBits(Org.Brotli.Dec.BitReader br, int n)
method Init (line 141) | internal static void Init(Org.Brotli.Dec.BitReader br, System.IO.Strea...
method Prepare (line 156) | private static void Prepare(Org.Brotli.Dec.BitReader br)
method Reload (line 164) | internal static void Reload(Org.Brotli.Dec.BitReader br)
method Close (line 173) | internal static void Close(Org.Brotli.Dec.BitReader br)
method JumpToByteBoundary (line 183) | internal static void JumpToByteBoundary(Org.Brotli.Dec.BitReader br)
method IntAvailable (line 196) | internal static int IntAvailable(Org.Brotli.Dec.BitReader br)
method CopyBytes (line 206) | internal static void CopyBytes(Org.Brotli.Dec.BitReader br, byte[] dat...
FILE: csharp/org/brotli/dec/BitReaderTest.cs
class BitReaderTest (line 13) | public class BitReaderTest
method TestReadAfterEos (line 15) | [NUnit.Framework.Test]
FILE: csharp/org/brotli/dec/BrotliInputStream.cs
class BrotliInputStream (line 13) | public class BrotliInputStream : System.IO.Stream
method BrotliInputStream (line 42) | public BrotliInputStream(System.IO.Stream source)
method BrotliInputStream (line 63) | public BrotliInputStream(System.IO.Stream source, int byteReadBufferSize)
method BrotliInputStream (line 89) | public BrotliInputStream(System.IO.Stream source, int byteReadBufferSi...
method Close (line 118) | public override void Close()
method ReadByte (line 125) | public override int ReadByte()
method Read (line 141) | public override int Read(byte[] destBuffer, int destOffset, int destLen)
method Seek (line 205) | public override long Seek(long offset, System.IO.SeekOrigin origin) {
method SetLength (line 208) | public override void SetLength(long value){
method BeginWrite (line 213) | public override System.IAsyncResult BeginWrite(byte[] buffer, int offset,
method Write (line 217) | public override void Write(byte[] buffer, int offset, int count) {
method Flush (line 221) | public override void Flush() {}
FILE: csharp/org/brotli/dec/BrotliRuntimeException.cs
class BrotliRuntimeException (line 9) | [System.Serializable]
method BrotliRuntimeException (line 12) | internal BrotliRuntimeException(string message)
method BrotliRuntimeException (line 17) | internal BrotliRuntimeException(string message, System.Exception cause)
FILE: csharp/org/brotli/dec/Context.cs
class Context (line 9) | internal sealed class Context
FILE: csharp/org/brotli/dec/Decode.cs
class Decode (line 9) | internal sealed class Decode
method DecodeVarLenUnsignedByte (line 45) | private static int DecodeVarLenUnsignedByte(Org.Brotli.Dec.BitReader br)
method DecodeMetaBlockLength (line 62) | private static void DecodeMetaBlockLength(Org.Brotli.Dec.BitReader br,...
method ReadSymbol (line 115) | private static int ReadSymbol(int[] table, int offset, Org.Brotli.Dec....
method ReadBlockLength (line 133) | private static int ReadBlockLength(int[] table, int offset, Org.Brotli...
method TranslateShortCodes (line 141) | private static int TranslateShortCodes(int code, int[] ringBuffer, int...
method MoveToFront (line 152) | private static void MoveToFront(int[] v, int index)
method InverseMoveToFrontTransform (line 162) | private static void InverseMoveToFrontTransform(byte[] v, int vLen)
method ReadHuffmanCodeLengths (line 180) | private static void ReadHuffmanCodeLengths(int[] codeLengthCodeLengths...
method ReadHuffmanCode (line 252) | internal static void ReadHuffmanCode(int alphabetSize, int[] table, in...
method DecodeContextMap (line 349) | private static int DecodeContextMap(int contextMapSize, byte[] context...
method DecodeBlockTypeAndLength (line 404) | private static void DecodeBlockTypeAndLength(Org.Brotli.Dec.State stat...
method DecodeLiteralBlockSwitch (line 432) | private static void DecodeLiteralBlockSwitch(Org.Brotli.Dec.State state)
method DecodeCommandBlockSwitch (line 444) | private static void DecodeCommandBlockSwitch(Org.Brotli.Dec.State state)
method DecodeDistanceBlockSwitch (line 450) | private static void DecodeDistanceBlockSwitch(Org.Brotli.Dec.State state)
method MaybeReallocateRingBuffer (line 456) | private static void MaybeReallocateRingBuffer(Org.Brotli.Dec.State state)
method ReadMetablockInfo (line 502) | private static void ReadMetablockInfo(Org.Brotli.Dec.State state)
method ReadMetablockHuffmanCodesAndContextMaps (line 546) | private static void ReadMetablockHuffmanCodesAndContextMaps(Org.Brotli...
method CopyUncompressedData (line 610) | private static void CopyUncompressedData(Org.Brotli.Dec.State state)
method WriteRingBuffer (line 637) | private static bool WriteRingBuffer(Org.Brotli.Dec.State state)
method SetCustomDictionary (line 655) | internal static void SetCustomDictionary(Org.Brotli.Dec.State state, b...
method Decompress (line 661) | internal static void Decompress(Org.Brotli.Dec.State state)
FILE: csharp/org/brotli/dec/DecodeTest.cs
class DecodeTest (line 13) | public class DecodeTest
method Decompress (line 16) | private byte[] Decompress(byte[] data, bool byByte)
method DecompressWithDictionary (line 53) | private byte[] DecompressWithDictionary(byte[] data, byte[] dictionary)
method CheckDecodeResourceWithDictionary (line 73) | private void CheckDecodeResourceWithDictionary(string expected, string...
method CheckDecodeResource (line 83) | private void CheckDecodeResource(string expected, string compressed)
method TestEmpty (line 94) | [NUnit.Framework.Test]
method TestX (line 101) | [NUnit.Framework.Test]
method TestX10Y10 (line 108) | [NUnit.Framework.Test]
method TestX64 (line 115) | [NUnit.Framework.Test]
method TestUkkonooa (line 122) | [NUnit.Framework.Test]
method TestMonkey (line 130) | [NUnit.Framework.Test]
method TestFox (line 147) | [NUnit.Framework.Test]
method TestFoxFox (line 155) | [NUnit.Framework.Test]
method TestUtils (line 161) | [NUnit.Framework.Test]
FILE: csharp/org/brotli/dec/Dictionary.cs
class Dictionary (line 20) | internal sealed class Dictionary
class DataHolder0 (line 30) | private class DataHolder0
method GetData (line 32) | internal static string GetData()
class DataHolder1 (line 38) | private class DataHolder1
method GetData (line 40) | internal static string GetData()
class DataHolder2 (line 46) | private class DataHolder2
method GetData (line 48) | internal static string GetData()
class DataHolder (line 54) | private class DataHolder
method DataHolder (line 58) | static DataHolder()
method GetData (line 82) | internal static byte[] GetData()
FILE: csharp/org/brotli/dec/DictionaryTest.cs
class DictionaryTest (line 13) | public class DictionaryTest
method Crc64 (line 15) | private static long Crc64(byte[] data)
method TestGetData (line 30) | [NUnit.Framework.Test]
FILE: csharp/org/brotli/dec/Huffman.cs
class Huffman (line 9) | internal sealed class Huffman
method GetNextKey (line 24) | private static int GetNextKey(int key, int len)
method ReplicateValue (line 42) | private static void ReplicateValue(int[] table, int offset, int step, ...
method NextTableBitSize (line 55) | private static int NextTableBitSize(int[] count, int len, int rootBits)
method BuildHuffmanTable (line 72) | internal static void BuildHuffmanTable(int[] rootTable, int tableOffse...
FILE: csharp/org/brotli/dec/HuffmanTreeGroup.cs
class HuffmanTreeGroup (line 9) | internal sealed class HuffmanTreeGroup
method Init (line 28) | internal static void Init(Org.Brotli.Dec.HuffmanTreeGroup group, int a...
method Decode (line 38) | internal static void Decode(Org.Brotli.Dec.HuffmanTreeGroup group, Org...
FILE: csharp/org/brotli/dec/IntReader.cs
class IntReader (line 9) | internal sealed class IntReader
method Init (line 15) | internal static void Init(Org.Brotli.Dec.IntReader ir, byte[] byteBuff...
method Convert (line 27) | internal static void Convert(Org.Brotli.Dec.IntReader ir, int intLen)
FILE: csharp/org/brotli/dec/Prefix.cs
class Prefix (line 15) | internal sealed class Prefix
FILE: csharp/org/brotli/dec/RunningState.cs
class RunningState (line 9) | internal sealed class RunningState
FILE: csharp/org/brotli/dec/State.cs
class State (line 8) | internal sealed class State
method DecodeWindowBits (line 116) | private static int DecodeWindowBits(Org.Brotli.Dec.BitReader br)
method SetInput (line 138) | internal static void SetInput(Org.Brotli.Dec.State state, System.IO.St...
method Close (line 157) | internal static void Close(Org.Brotli.Dec.State state)
FILE: csharp/org/brotli/dec/SynthTest.cs
class SynthTest (line 13) | public class SynthTest
method Decompress (line 16) | private byte[] Decompress(byte[] data)
method CheckSynth (line 35) | private void CheckSynth(byte[] compressed, bool expectSuccess, string ...
method TestBaseDictWord (line 57) | [NUnit.Framework.Test]
method TestBaseDictWordFinishBlockOnRingbufferWrap (line 75) | [NUnit.Framework.Test]
method TestBaseDictWordTooLong (line 95) | [NUnit.Framework.Test]
method TestBlockCountMessage (line 114) | [NUnit.Framework.Test]
method TestBlockSwitchMessage (line 164) | [NUnit.Framework.Test]
method TestClClTreeDeficiency (line 216) | [NUnit.Framework.Test]
method TestClClTreeExcess (line 245) | [NUnit.Framework.Test]
method TestComplexHuffmanCodeTwoSymbols (line 274) | [NUnit.Framework.Test]
method TestCompressedUncompressedShortCompressed (line 305) | [NUnit.Framework.Test]
method TestCompressedUncompressedShortCompressedSmallWindow (line 333) | [NUnit.Framework.Test]
method TestCopyLengthTooLong (line 361) | [NUnit.Framework.Test]
method TestCustomHuffmanCode (line 379) | [NUnit.Framework.Test]
method TestEmpty (line 422) | [NUnit.Framework.Test]
method TestHelloWorld (line 433) | [NUnit.Framework.Test]
method TestInsertTooLong (line 449) | [NUnit.Framework.Test]
method TestInvalidNoLastMetablock (line 467) | [NUnit.Framework.Test]
method TestInvalidNoMetaBlocks (line 484) | [NUnit.Framework.Test]
method TestInvalidTooFarDist (line 494) | [NUnit.Framework.Test]
method TestInvalidTooLargeContextMap (line 515) | [NUnit.Framework.Test]
method TestInvalidTransformType (line 560) | [NUnit.Framework.Test]
method TestInvalidWindowBits9 (line 577) | [NUnit.Framework.Test]
method TestManyTinyMetablocks (line 592) | [NUnit.Framework.Test]
method TestNegativeDistance (line 1959) | [NUnit.Framework.Test]
method TestNegativeRemainingLenBetweenMetablocks (line 1990) | [NUnit.Framework.Test]
method TestOneCommand (line 2012) | [NUnit.Framework.Test]
method TestOneInsert (line 2029) | [NUnit.Framework.Test]
method TestSimplePrefix (line 2046) | [NUnit.Framework.Test]
method TestSimplePrefixDuplicateSymbols (line 2067) | [NUnit.Framework.Test]
method TestSimplePrefixOutOfRangeSymbols (line 2088) | [NUnit.Framework.Test]
method TestTooManySymbolsRepeated (line 2106) | [NUnit.Framework.Test]
method TestTransformedDictWord (line 2135) | [NUnit.Framework.Test]
method TestTransformedDictWordTooLong (line 2153) | [NUnit.Framework.Test]
FILE: csharp/org/brotli/dec/Transform.cs
class Transform (line 9) | internal sealed class Transform
method Transform (line 17) | internal Transform(string prefix, int type, string suffix)
method ReadUniBytes (line 24) | internal static byte[] ReadUniBytes(string uniBytes)
method TransformDictionaryWord (line 82) | internal static int TransformDictionaryWord(byte[] dst, int dstOffset,...
FILE: csharp/org/brotli/dec/TransformTest.cs
class TransformTest (line 13) | public class TransformTest
method Crc64 (line 15) | private static long Crc64(byte[] data)
method TestTrimAll (line 30) | [NUnit.Framework.Test]
method TestCapitalize (line 43) | [NUnit.Framework.Test]
method TestAllTransforms (line 56) | [NUnit.Framework.Test]
FILE: csharp/org/brotli/dec/Utils.cs
class Utils (line 9) | internal sealed class Utils
method FillWithZeroes (line 26) | internal static void FillWithZeroes(byte[] dest, int offset, int length)
method FillWithZeroes (line 48) | internal static void FillWithZeroes(int[] dest, int offset, int length)
FILE: csharp/org/brotli/dec/WordTransformType.cs
class WordTransformType (line 14) | internal sealed class WordTransformType
method GetOmitFirst (line 58) | internal static int GetOmitFirst(int type)
method GetOmitLast (line 63) | internal static int GetOmitLast(int type)
FILE: go/brotli/brotli_test.go
function TestReader (line 19) | func TestReader(t *testing.T) {
function TestDecode (line 45) | func TestDecode(t *testing.T) {
function TestDecodeFuzz (line 62) | func TestDecodeFuzz(t *testing.T) {
function TestDecodeTrailingData (line 82) | func TestDecodeTrailingData(t *testing.T) {
function TestEncodeDecode (line 91) | func TestEncodeDecode(t *testing.T) {
function TestEncodeDecodeWithDictionary (line 135) | func TestEncodeDecodeWithDictionary(t *testing.T) {
FILE: go/brotli/decode.go
function shr32 (line 16) | func shr32(a int32, b int32) int32 {
function shr64 (line 20) | func shr64(a int64, b int32) int64 {
function copyBytes (line 24) | func copyBytes(dst []int8, target int32, src []int8, start int32, end in...
function copyBytesWithin (line 28) | func copyBytesWithin(bytes []int8, target int32, start int32, end int32) {
function toUtf8Runes (line 32) | func toUtf8Runes(src string) []int32 {
function readInput (line 45) | func readInput(s *_State, dst []int8, offset int32, length int32) int32 {
function log2floor (line 71) | func log2floor(i int32) int32 {
function calculateDistanceAlphabetSize (line 86) | func calculateDistanceAlphabetSize(npostfix int32, ndirect int32, maxndi...
function calculateDistanceAlphabetLimit (line 90) | func calculateDistanceAlphabetLimit(s *_State, maxDistance int32, npostf...
function unpackCommandLookupTable (line 100) | func unpackCommandLookupTable(cmdLookup []int16) {
function decodeWindowBits (line 129) | func decodeWindowBits(s *_State) int32 {
function enableEagerOutput (line 165) | func enableEagerOutput(s *_State) int32 {
function enableLargeWindow (line 173) | func enableLargeWindow(s *_State) int32 {
function attachDictionaryChunk (line 181) | func attachDictionaryChunk(s *_State, data []int8) int32 {
function initState (line 200) | func initState(s *_State) int32 {
function close (line 222) | func close(s *_State) int32 {
function decodeVarLenUnsignedByte (line 232) | func decodeVarLenUnsignedByte(s *_State) int32 {
function decodeMetaBlockLength (line 248) | func decodeMetaBlockLength(s *_State) int32 {
function readSymbol (line 305) | func readSymbol(tableGroup []int32, tableIdx int32, s *_State) int32 {
function readBlockLength (line 322) | func readBlockLength(tableGroup []int32, tableIdx int32, s *_State) int32 {
function moveToFront (line 338) | func moveToFront(v []int32, index int32) {
function inverseMoveToFrontTransform (line 348) | func inverseMoveToFrontTransform(v []int8, vLen int32) {
function readHuffmanCodeLengths (line 363) | func readHuffmanCodeLengths(codeLengthCodeLengths []int32, numSymbols in...
function checkDupes (line 440) | func checkDupes(s *_State, symbols []int32, length int32) int32 {
function readSimpleHuffmanCode (line 453) | func readSimpleHuffmanCode(alphabetSizeMax int32, alphabetSizeLimit int3...
function readComplexHuffmanCode (line 510) | func readComplexHuffmanCode(alphabetSizeLimit int32, skip int32, tableGr...
function readHuffmanCode (line 545) | func readHuffmanCode(alphabetSizeMax int32, alphabetSizeLimit int32, tab...
function decodeContextMap (line 564) | func decodeContextMap(contextMapSize int32, contextMap []int8, s *_State...
function decodeBlockTypeAndLength (line 646) | func decodeBlockTypeAndLength(s *_State, treeType int32, numBlockTypes i...
function decodeLiteralBlockSwitch (line 671) | func decodeLiteralBlockSwitch(s *_State) {
function decodeCommandBlockSwitch (line 681) | func decodeCommandBlockSwitch(s *_State) {
function decodeDistanceBlockSwitch (line 686) | func decodeDistanceBlockSwitch(s *_State) {
function maybeReallocateRingBuffer (line 691) | func maybeReallocateRingBuffer(s *_State) {
function readNextMetablockHeader (line 715) | func readNextMetablockHeader(s *_State) int32 {
function readMetablockPartition (line 764) | func readMetablockPartition(s *_State, treeType int32, numBlockTypes int...
function calculateDistanceLut (line 788) | func calculateDistanceLut(s *_State, alphabetSizeLimit int32) {
function readMetablockHuffmanCodesAndContextMaps (line 815) | func readMetablockHuffmanCodesAndContextMaps(s *_State) int32 {
function copyUncompressedData (line 929) | func copyUncompressedData(s *_State) int32 {
function writeRingBuffer (line 960) | func writeRingBuffer(s *_State) int32 {
function huffmanTreeGroupAllocSize (line 973) | func huffmanTreeGroupAllocSize(alphabetSizeLimit int32, n int32) int32 {
function decodeHuffmanTreeGroup (line 978) | func decodeHuffmanTreeGroup(alphabetSizeMax int32, alphabetSizeLimit int...
function calculateFence (line 992) | func calculateFence(s *_State) int32 {
function doUseDictionary (line 1000) | func doUseDictionary(s *_State, fence int32) int32 {
function initializeCompoundDictionary (line 1043) | func initializeCompoundDictionary(s *_State) {
function initializeCompoundDictionaryCopy (line 1062) | func initializeCompoundDictionaryCopy(s *_State, address int32, length i...
function copyFromCompoundDictionary (line 1083) | func copyFromCompoundDictionary(s *_State, fence int32) int32 {
function decompress (line 1112) | func decompress(s *_State) int32 {
function init (line 1456) | func init() {
type _Transforms (line 1460) | type _Transforms struct
function makeTransforms (line 1468) | func makeTransforms(numTransforms int32, prefixSuffixLen int32, prefixSu...
function unpackTransforms (line 1480) | func unpackTransforms(prefixSuffix []int8, prefixSuffixHeads []int32, tr...
function transformDictionaryWord (line 1501) | func transformDictionaryWord(dst []int8, dstOffset int32, src []int8, sr...
function init (line 1627) | func init() {
function getNextKey (line 1630) | func getNextKey(key int32, len int32) int32 {
function replicateValue (line 1638) | func replicateValue(table []int32, offset int32, step int32, end int32, ...
function nextTableBitSize (line 1646) | func nextTableBitSize(count []int32, len int32, rootBits int32) int32 {
function buildHuffmanTable (line 1660) | func buildHuffmanTable(tableGroup []int32, tableIdx int32, rootBits int3...
function readMoreInput (line 1726) | func readMoreInput(s *_State) int32 {
function checkHealth (line 1755) | func checkHealth(s *_State, endOfStream int32) int32 {
function readFewBits (line 1769) | func readFewBits(s *_State, n int32) int32 {
function readManyBits (line 1775) | func readManyBits(s *_State, n int32) int32 {
function initBitReader (line 1783) | func initBitReader(s *_State) int32 {
function prepare (line 1793) | func prepare(s *_State) int32 {
function reload (line 1813) | func reload(s *_State) int32 {
function jumpToByteBoundary (line 1820) | func jumpToByteBoundary(s *_State) int32 {
function halfAvailable (line 1831) | func halfAvailable(s *_State) int32 {
function copyRawBytes (line 1839) | func copyRawBytes(s *_State, data []int8, offset int32, length int32) in...
function bytesToNibbles (line 1894) | func bytesToNibbles(s *_State, byteLen int32) {
function unpackLookupTable (line 1906) | func unpackLookupTable(lookup []int32, utfMap string, utfRle string) {
function init (line 1941) | func init() {
type _State (line 1945) | type _State struct
function makeState (line 2020) | func makeState() *_State {
function setData (line 2036) | func setData(newData []int8, newSizeBits []int32) {
function unpackDictionaryData (line 2057) | func unpackDictionaryData(dictionary []int8, data0 string, data1 string,...
function init (line 2082) | func init() {
function valueOf (line 2089) | func valueOf(x int32) string {
function closeInput (line 2093) | func closeInput(s *_State) {
function toUsASCIIBytes (line 2097) | func toUsASCIIBytes(src string) []int8 {
function makeError (line 2107) | func makeError(s *_State, code int32) int32 {
FILE: go/brotli/reader.go
type ReaderOptions (line 17) | type ReaderOptions struct
type Reader (line 24) | type Reader struct
method Read (line 62) | func (r *Reader) Read(p []byte) (n int, err error) {
method Close (line 107) | func (r *Reader) Close() error {
function toErr (line 34) | func toErr(errorCode int32) error {
function NewReader (line 45) | func NewReader(src io.Reader) io.ReadCloser {
function NewReaderWithOptions (line 50) | func NewReaderWithOptions(src io.Reader, options ReaderOptions) io.ReadC...
function Decode (line 121) | func Decode(encodedData []byte) ([]byte, error) {
function DecodeWithRawDictionary (line 126) | func DecodeWithRawDictionary(encodedData []byte, dictionary []byte) ([]b...
FILE: go/brotli/synth_test.go
function verify (line 14) | func verify(t *testing.T, compressed []uint8, expectSuccess bool, expect...
function times (line 41) | func times(n int, pattern string) string {
function TestAllTransforms10 (line 55) | func TestAllTransforms10(t *testing.T) {
function TestAllTransforms4 (line 262) | func TestAllTransforms4(t *testing.T) {
function TestBaseDictWord (line 458) | func TestBaseDictWord(t *testing.T) {
function TestBaseDictWordFinishBlockOnRingbufferWrap (line 477) | func TestBaseDictWordFinishBlockOnRingbufferWrap(t *testing.T) {
function TestBaseDictWordTooLong (line 498) | func TestBaseDictWordTooLong(t *testing.T) {
function TestBlockCountMessage (line 518) | func TestBlockCountMessage(t *testing.T) {
function TestBlockSwitchMessage (line 569) | func TestBlockSwitchMessage(t *testing.T) {
function TestClClTreeDeficiency (line 622) | func TestClClTreeDeficiency(t *testing.T) {
function TestClClTreeExcess (line 653) | func TestClClTreeExcess(t *testing.T) {
function TestComplexHuffmanCodeTwoSymbols (line 684) | func TestComplexHuffmanCodeTwoSymbols(t *testing.T) {
function TestCompressedUncompressedShortCompressed (line 717) | func TestCompressedUncompressedShortCompressed(t *testing.T) {
function TestCompressedUncompressedShortCompressedSmallWindow (line 741) | func TestCompressedUncompressedShortCompressedSmallWindow(t *testing.T) {
function TestCopyLengthTooLong (line 765) | func TestCopyLengthTooLong(t *testing.T) {
function TestCopyTooLong (line 785) | func TestCopyTooLong(t *testing.T) {
function TestCustomHuffmanCode (line 805) | func TestCustomHuffmanCode(t *testing.T) {
function TestDistanceLut (line 850) | func TestDistanceLut(t *testing.T) {
function TestEmpty (line 886) | func TestEmpty(t *testing.T) {
function TestHelloWorld (line 901) | func TestHelloWorld(t *testing.T) {
function TestInsertTooLong (line 918) | func TestInsertTooLong(t *testing.T) {
function TestIntactDistanceRingBuffer0 (line 938) | func TestIntactDistanceRingBuffer0(t *testing.T) {
function TestIntactDistanceRingBuffer1 (line 959) | func TestIntactDistanceRingBuffer1(t *testing.T) {
function TestIntactDistanceRingBuffer2 (line 980) | func TestIntactDistanceRingBuffer2(t *testing.T) {
function TestIntactDistanceRingBufferNoDistanceValue0 (line 1005) | func TestIntactDistanceRingBufferNoDistanceValue0(t *testing.T) {
function TestIntactDistanceRingBufferNoDistanceValue1 (line 1035) | func TestIntactDistanceRingBufferNoDistanceValue1(t *testing.T) {
function TestInvalidNoLastMetablock (line 1065) | func TestInvalidNoLastMetablock(t *testing.T) {
function TestInvalidNoMetaBlocks (line 1083) | func TestInvalidNoMetaBlocks(t *testing.T) {
function TestInvalidTooFarDist (line 1097) | func TestInvalidTooFarDist(t *testing.T) {
function TestInvalidTooLargeContextMap (line 1119) | func TestInvalidTooLargeContextMap(t *testing.T) {
function TestInvalidTransformType (line 1165) | func TestInvalidTransformType(t *testing.T) {
function TestInvalidWindowBits9 (line 1184) | func TestInvalidWindowBits9(t *testing.T) {
function TestManyTinyMetablocks (line 1201) | func TestManyTinyMetablocks(t *testing.T) {
function TestNegativeDistance (line 1895) | func TestNegativeDistance(t *testing.T) {
function TestNegativeRemainingLenBetweenMetablocks (line 1926) | func TestNegativeRemainingLenBetweenMetablocks(t *testing.T) {
function TestOneCommand (line 1948) | func TestOneCommand(t *testing.T) {
function TestOneInsert (line 1967) | func TestOneInsert(t *testing.T) {
function TestPeculiarWrap (line 1986) | func TestPeculiarWrap(t *testing.T) {
function TestSimplePrefix (line 2017) | func TestSimplePrefix(t *testing.T) {
function TestSimplePrefixDuplicateSymbols (line 2039) | func TestSimplePrefixDuplicateSymbols(t *testing.T) {
function TestSimplePrefixOutOfRangeSymbols (line 2061) | func TestSimplePrefixOutOfRangeSymbols(t *testing.T) {
function TestSimplePrefixPlusExtraData (line 2081) | func TestSimplePrefixPlusExtraData(t *testing.T) {
function TestStressReadDistanceExtraBits (line 2107) | func TestStressReadDistanceExtraBits(t *testing.T) {
function TestTooManySymbolsRepeated (line 2180) | func TestTooManySymbolsRepeated(t *testing.T) {
function TestTransformedDictWord (line 2211) | func TestTransformedDictWord(t *testing.T) {
function TestTransformedDictWordTooLong (line 2231) | func TestTransformedDictWordTooLong(t *testing.T) {
function TestZeroCostCommand (line 2253) | func TestZeroCostCommand(t *testing.T) {
function TestZeroCostLiterals (line 2273) | func TestZeroCostLiterals(t *testing.T) {
FILE: go/cbrotli/cbrotli_test.go
function checkCompressedData (line 21) | func checkCompressedData(compressedData, wantOriginalData []byte) error {
function TestEncoderNoWrite (line 47) | func TestEncoderNoWrite(t *testing.T) {
function TestEncoderEmptyWrite (line 59) | func TestEncoderEmptyWrite(t *testing.T) {
function TestWriter (line 71) | func TestWriter(t *testing.T) {
function TestEncoderStreams (line 92) | func TestEncoderStreams(t *testing.T) {
function TestEncoderLargeInput (line 123) | func TestEncoderLargeInput(t *testing.T) {
function TestEncoderFlush (line 145) | func TestEncoderFlush(t *testing.T) {
type readerWithTimeout (line 186) | type readerWithTimeout struct
method Read (line 190) | func (r readerWithTimeout) Read(p []byte) (int, error) {
function TestDecoderStreaming (line 208) | func TestDecoderStreaming(t *testing.T) {
function TestReader (line 265) | func TestReader(t *testing.T) {
function TestDecode (line 291) | func TestDecode(t *testing.T) {
function TestDecodeFuzz (line 308) | func TestDecodeFuzz(t *testing.T) {
function TestDecodeTrailingData (line 328) | func TestDecodeTrailingData(t *testing.T) {
function TestEncodeDecode (line 337) | func TestEncodeDecode(t *testing.T) {
function TestEncodeDecodeWithDictionary (line 381) | func TestEncodeDecodeWithDictionary(t *testing.T) {
FILE: go/cbrotli/reader.go
type decodeError (line 39) | type decodeError
method Error (line 41) | func (err decodeError) Error() string {
type Reader (line 52) | type Reader struct
method Close (line 92) | func (r *Reader) Close() error {
method Read (line 106) | func (r *Reader) Read(p []byte) (n int, err error) {
constant readBufSize (line 63) | readBufSize = 32 * 1024
function NewReader (line 67) | func NewReader(src io.Reader) *Reader {
function NewReaderWithRawDictionary (line 73) | func NewReaderWithRawDictionary(src io.Reader, dictionary []byte) *Reader {
function Decode (line 182) | func Decode(encodedData []byte) ([]byte, error) {
function DecodeWithRawDictionary (line 187) | func DecodeWithRawDictionary(encodedData []byte, dictionary []byte) ([]b...
FILE: go/cbrotli/synth_test.go
function verify (line 14) | func verify(t *testing.T, compressed []uint8, expectSuccess bool, expect...
function times (line 41) | func times(n int, pattern string) string {
function TestAllTransforms10 (line 55) | func TestAllTransforms10(t *testing.T) {
function TestAllTransforms4 (line 262) | func TestAllTransforms4(t *testing.T) {
function TestBaseDictWord (line 458) | func TestBaseDictWord(t *testing.T) {
function TestBaseDictWordFinishBlockOnRingbufferWrap (line 477) | func TestBaseDictWordFinishBlockOnRingbufferWrap(t *testing.T) {
function TestBaseDictWordTooLong (line 498) | func TestBaseDictWordTooLong(t *testing.T) {
function TestBlockCountMessage (line 518) | func TestBlockCountMessage(t *testing.T) {
function TestBlockSwitchMessage (line 569) | func TestBlockSwitchMessage(t *testing.T) {
function TestClClTreeDeficiency (line 622) | func TestClClTreeDeficiency(t *testing.T) {
function TestClClTreeExcess (line 653) | func TestClClTreeExcess(t *testing.T) {
function TestComplexHuffmanCodeTwoSymbols (line 684) | func TestComplexHuffmanCodeTwoSymbols(t *testing.T) {
function TestCompressedUncompressedShortCompressed (line 717) | func TestCompressedUncompressedShortCompressed(t *testing.T) {
function TestCompressedUncompressedShortCompressedSmallWindow (line 741) | func TestCompressedUncompressedShortCompressedSmallWindow(t *testing.T) {
function TestCopyLengthTooLong (line 765) | func TestCopyLengthTooLong(t *testing.T) {
function TestCopyTooLong (line 785) | func TestCopyTooLong(t *testing.T) {
function TestCustomHuffmanCode (line 805) | func TestCustomHuffmanCode(t *testing.T) {
function TestDistanceLut (line 850) | func TestDistanceLut(t *testing.T) {
function TestEmpty (line 886) | func TestEmpty(t *testing.T) {
function TestHelloWorld (line 901) | func TestHelloWorld(t *testing.T) {
function TestInsertTooLong (line 918) | func TestInsertTooLong(t *testing.T) {
function TestIntactDistanceRingBuffer0 (line 938) | func TestIntactDistanceRingBuffer0(t *testing.T) {
function TestIntactDistanceRingBuffer1 (line 959) | func TestIntactDistanceRingBuffer1(t *testing.T) {
function TestIntactDistanceRingBuffer2 (line 980) | func TestIntactDistanceRingBuffer2(t *testing.T) {
function TestIntactDistanceRingBufferNoDistanceValue0 (line 1005) | func TestIntactDistanceRingBufferNoDistanceValue0(t *testing.T) {
function TestIntactDistanceRingBufferNoDistanceValue1 (line 1035) | func TestIntactDistanceRingBufferNoDistanceValue1(t *testing.T) {
function TestInvalidNoLastMetablock (line 1065) | func TestInvalidNoLastMetablock(t *testing.T) {
function TestInvalidNoMetaBlocks (line 1083) | func TestInvalidNoMetaBlocks(t *testing.T) {
function TestInvalidTooFarDist (line 1097) | func TestInvalidTooFarDist(t *testing.T) {
function TestInvalidTooLargeContextMap (line 1119) | func TestInvalidTooLargeContextMap(t *testing.T) {
function TestInvalidTransformType (line 1165) | func TestInvalidTransformType(t *testing.T) {
function TestInvalidWindowBits9 (line 1184) | func TestInvalidWindowBits9(t *testing.T) {
function TestManyTinyMetablocks (line 1201) | func TestManyTinyMetablocks(t *testing.T) {
function TestNegativeDistance (line 1895) | func TestNegativeDistance(t *testing.T) {
function TestNegativeRemainingLenBetweenMetablocks (line 1926) | func TestNegativeRemainingLenBetweenMetablocks(t *testing.T) {
function TestOneCommand (line 1948) | func TestOneCommand(t *testing.T) {
function TestOneInsert (line 1967) | func TestOneInsert(t *testing.T) {
function TestPeculiarWrap (line 1986) | func TestPeculiarWrap(t *testing.T) {
function TestSimplePrefix (line 2017) | func TestSimplePrefix(t *testing.T) {
function TestSimplePrefixDuplicateSymbols (line 2039) | func TestSimplePrefixDuplicateSymbols(t *testing.T) {
function TestSimplePrefixOutOfRangeSymbols (line 2061) | func TestSimplePrefixOutOfRangeSymbols(t *testing.T) {
function TestSimplePrefixPlusExtraData (line 2081) | func TestSimplePrefixPlusExtraData(t *testing.T) {
function TestStressReadDistanceExtraBits (line 2107) | func TestStressReadDistanceExtraBits(t *testing.T) {
function TestTooManySymbolsRepeated (line 2180) | func TestTooManySymbolsRepeated(t *testing.T) {
function TestTransformedDictWord (line 2211) | func TestTransformedDictWord(t *testing.T) {
function TestTransformedDictWordTooLong (line 2231) | func TestTransformedDictWordTooLong(t *testing.T) {
function TestZeroCostCommand (line 2253) | func TestZeroCostCommand(t *testing.T) {
function TestZeroCostLiterals (line 2273) | func TestZeroCostLiterals(t *testing.T) {
FILE: go/cbrotli/writer.go
type PreparedDictionary (line 53) | type PreparedDictionary struct
method Close (line 88) | func (p *PreparedDictionary) Close() error {
type DictionaryType (line 59) | type DictionaryType
constant DtRaw (line 63) | DtRaw DictionaryType = 0
constant DtSerialized (line 65) | DtSerialized DictionaryType = 1
function NewPreparedDictionary (line 71) | func NewPreparedDictionary(data []byte, dictionaryType DictionaryType, q...
type WriterOptions (line 97) | type WriterOptions struct
type Writer (line 110) | type Writer struct
method writeChunk (line 150) | func (w *Writer) writeChunk(p []byte, op C.BrotliEncoderOperation) (n ...
method Flush (line 192) | func (w *Writer) Flush() error {
method Close (line 198) | func (w *Writer) Close() error {
method Write (line 209) | func (w *Writer) Write(p []byte) (n int, err error) {
function NewWriter (line 125) | func NewWriter(dst io.Writer, options WriterOptions) *Writer {
function Encode (line 214) | func Encode(content []byte, options WriterOptions) ([]byte, error) {
FILE: java/org/brotli/common/SharedDictionaryType.java
class SharedDictionaryType (line 9) | public class SharedDictionaryType {
method SharedDictionaryType (line 11) | private SharedDictionaryType() {}
FILE: java/org/brotli/dec/BitReader.java
class BitReader (line 20) | final class BitReader {
method readMoreInput (line 60) | static int readMoreInput(State s) {
method checkHealth (line 91) | static int checkHealth(State s, int endOfStream) {
method assertAccumulatorHealthy (line 105) | static void assertAccumulatorHealthy(State s) {
method fillBitWindow (line 111) | static void fillBitWindow(State s) {
method doFillBitWindow (line 128) | static void doFillBitWindow(State s) {
method peekBits (line 142) | static int peekBits(State s) {
method readFewBits (line 156) | static int readFewBits(State s, int n) {
method readBits (line 162) | static int readBits(State s, int n) {
method readManyBits (line 170) | private static int readManyBits(State s, int n) {
method initBitReader (line 176) | static int initBitReader(State s) {
method prepare (line 191) | private static int prepare(State s) {
method reload (line 207) | static int reload(State s) {
method jumpToByteBoundary (line 214) | static int jumpToByteBoundary(State s) {
method halfAvailable (line 225) | static int halfAvailable(State s) {
method copyRawBytes (line 233) | static int copyRawBytes(State s, byte[] data, int offset, int length) {
method bytesToNibbles (line 295) | static void bytesToNibbles(State s, int byteLen) {
FILE: java/org/brotli/dec/BitReaderTest.java
class BitReaderTest (line 19) | @RunWith(JUnit4.class)
method testReadAfterEos (line 22) | @Test
method testAccumulatorUnderflowDetected (line 37) | @Test
FILE: java/org/brotli/dec/BrotliError.java
class BrotliError (line 10) | public final class BrotliError {
method BrotliError (line 77) | private BrotliError() {}
FILE: java/org/brotli/dec/BrotliInputStream.java
class BrotliInputStream (line 17) | public class BrotliInputStream extends InputStream {
method BrotliInputStream (line 62) | public BrotliInputStream(InputStream source) throws IOException {
method BrotliInputStream (line 80) | public BrotliInputStream(InputStream source, int byteReadBufferSize) t...
method attachDictionaryChunk (line 98) | public void attachDictionaryChunk(byte[] data) {
method enableEagerOutput (line 103) | public void enableEagerOutput() {
method enableLargeWindow (line 108) | public void enableLargeWindow() {
method close (line 115) | @Override
method read (line 124) | @Override
method read (line 140) | @Override
FILE: java/org/brotli/dec/BrotliRuntimeException.java
class BrotliRuntimeException (line 12) | class BrotliRuntimeException extends RuntimeException {
method BrotliRuntimeException (line 14) | BrotliRuntimeException(String message) {
method BrotliRuntimeException (line 18) | BrotliRuntimeException(String message, Throwable cause) {
FILE: java/org/brotli/dec/CompoundDictionaryTest.java
class CompoundDictionaryTest (line 20) | @RunWith(JUnit4.class)
method testNoDictionary (line 31) | @Test
method testOnePieceDictionary (line 41) | @Test
method testTwoPieceDictionary (line 52) | @Test
FILE: java/org/brotli/dec/Context.java
class Context (line 12) | final class Context {
method unpackLookupTable (line 20) | private static void unpackLookupTable(int[] lookup, String utfMap, Str...
FILE: java/org/brotli/dec/Decode.java
class Decode (line 38) | final class Decode {
method log2floor (line 161) | private static int log2floor(int i) {
method calculateDistanceAlphabetSize (line 177) | private static int calculateDistanceAlphabetSize(int npostfix, int ndi...
method calculateDistanceAlphabetLimit (line 183) | private static int calculateDistanceAlphabetLimit(State s, int maxDist...
method unpackCommandLookupTable (line 193) | private static void unpackCommandLookupTable(short[] cmdLookup) {
method decodeWindowBits (line 230) | private static int decodeWindowBits(State s) {
method enableEagerOutput (line 277) | static int enableEagerOutput(State s) {
method enableLargeWindow (line 285) | static int enableLargeWindow(State s) {
method attachDictionaryChunk (line 294) | static int attachDictionaryChunk(State s, byte[] data) {
method initState (line 318) | static int initState(State s) {
method close (line 341) | static int close(State s) {
method decodeVarLenUnsignedByte (line 354) | private static int decodeVarLenUnsignedByte(State s) {
method decodeMetaBlockLength (line 366) | private static int decodeMetaBlockLength(State s) {
method readSymbol (line 413) | private static int readSymbol(int[] tableGroup, int tableIdx, State s) {
method readBlockLength (line 430) | private static int readBlockLength(int[] tableGroup, int tableIdx, Sta...
method moveToFront (line 438) | private static void moveToFront(int[] v, int index) {
method inverseMoveToFrontTransform (line 448) | private static void inverseMoveToFrontTransform(byte[] v, int vLen) {
method readHuffmanCodeLengths (line 462) | private static int readHuffmanCodeLengths(
method checkDupes (line 528) | private static int checkDupes(State s, int[] symbols, int length) {
method readSimpleHuffmanCode (line 542) | private static int readSimpleHuffmanCode(int alphabetSizeMax, int alph...
method readComplexHuffmanCode (line 609) | private static int readComplexHuffmanCode(int alphabetSizeLimit, int s...
method readHuffmanCode (line 650) | private static int readHuffmanCode(int alphabetSizeMax, int alphabetSi...
method decodeContextMap (line 666) | private static int decodeContextMap(int contextMapSize, byte[] context...
method decodeBlockTypeAndLength (line 732) | private static int decodeBlockTypeAndLength(State s, int treeType, int...
method decodeLiteralBlockSwitch (line 754) | private static void decodeLiteralBlockSwitch(State s) {
method decodeCommandBlockSwitch (line 764) | private static void decodeCommandBlockSwitch(State s) {
method decodeDistanceBlockSwitch (line 769) | private static void decodeDistanceBlockSwitch(State s) {
method maybeReallocateRingBuffer (line 774) | private static void maybeReallocateRingBuffer(State s) {
method readNextMetablockHeader (line 799) | private static int readNextMetablockHeader(State s) {
method readMetablockPartition (line 851) | private static int readMetablockPartition(State s, int treeType, int n...
method calculateDistanceLut (line 880) | private static void calculateDistanceLut(State s, int alphabetSizeLimi...
method readMetablockHuffmanCodesAndContextMaps (line 913) | private static int readMetablockHuffmanCodesAndContextMaps(State s) {
method copyUncompressedData (line 1037) | private static int copyUncompressedData(State s) {
method writeRingBuffer (line 1072) | private static int writeRingBuffer(State s) {
method huffmanTreeGroupAllocSize (line 1089) | private static int huffmanTreeGroupAllocSize(int alphabetSizeLimit, in...
method decodeHuffmanTreeGroup (line 1094) | private static int decodeHuffmanTreeGroup(int alphabetSizeMax, int alp...
method calculateFence (line 1109) | private static int calculateFence(State s) {
method doUseDictionary (line 1117) | private static int doUseDictionary(State s, int fence) {
method initializeCompoundDictionary (line 1162) | private static void initializeCompoundDictionary(State s) {
method initializeCompoundDictionaryCopy (line 1182) | private static int initializeCompoundDictionaryCopy(State s, int addre...
method copyFromCompoundDictionary (line 1204) | private static int copyFromCompoundDictionary(State s, int fence) {
method decompress (line 1237) | static int decompress(State s) {
FILE: java/org/brotli/dec/DecodeTest.java
class DecodeTest (line 22) | @RunWith(JUnit4.class)
method decompress (line 25) | private byte[] decompress(byte[] data, boolean byByte) throws IOExcept...
method checkDecodeResource (line 53) | private void checkDecodeResource(String expected, String compressed) t...
method testEmpty (line 62) | @Test
method testX (line 67) | @Test
method testX10Y10 (line 72) | @Test
method testX64 (line 79) | @Test
method testUkkonooa (line 86) | @Test
method testMonkey (line 99) | @Test
method testFox (line 134) | @Test
method testUtils (line 143) | @Test
FILE: java/org/brotli/dec/Decoder.java
class Decoder (line 10) | public class Decoder {
method decodeBytes (line 11) | private static long decodeBytes(InputStream input, OutputStream output...
method decompress (line 28) | private static void decompress(String fromPath, String toPath, byte[] ...
method main (line 58) | public static void main(String... args) throws IOException {
method Decoder (line 76) | private Decoder() {}
FILE: java/org/brotli/dec/Dictionary.java
class Dictionary (line 20) | public final class Dictionary {
class DataLoader (line 28) | private static class DataLoader {
method setData (line 45) | public static void setData(ByteBuffer newData, int[] newSizeBits) {
method getData (line 95) | public static ByteBuffer getData() {
method Dictionary (line 107) | private Dictionary() {}
FILE: java/org/brotli/dec/DictionaryData.java
class DictionaryData (line 16) | final class DictionaryData {
method unpackDictionaryData (line 40) | private static void unpackDictionaryData(ByteBuffer dictionary, String...
FILE: java/org/brotli/dec/DictionaryTest.java
class DictionaryTest (line 19) | @RunWith(JUnit4.class)
method crc64 (line 22) | private static long crc64(ByteBuffer data) {
method testGetData (line 34) | @Test
FILE: java/org/brotli/dec/EagerStreamTest.java
class EagerStreamTest (line 22) | @RunWith(JUnit4.class)
class ProxyStream (line 350) | static class ProxyStream extends FilterInputStream {
method ProxyStream (line 353) | ProxyStream(InputStream is) {
method read (line 357) | @Override
method testEagerStream (line 367) | @Test
FILE: java/org/brotli/dec/Huffman.java
class Huffman (line 12) | final class Huffman {
method getNextKey (line 21) | private static int getNextKey(int key, int len) {
method replicateValue (line 34) | private static void replicateValue(int[] table, int offset, int step, ...
method nextTableBitSize (line 47) | private static int nextTableBitSize(int[] count, int len, int rootBits) {
method buildHuffmanTable (line 66) | static int buildHuffmanTable(int[] tableGroup, int tableIdx, int rootB...
FILE: java/org/brotli/dec/SetDictionaryTest.java
class SetDictionaryTest (line 23) | @RunWith(JUnit4.class)
method testSetDictionary (line 42) | @Test
FILE: java/org/brotli/dec/State.java
class State (line 11) | final class State {
method State (line 92) | State() {
FILE: java/org/brotli/dec/SynthTest.java
class SynthTest (line 24) | @RunWith(JUnit4.class)
method decompress (line 27) | private byte[] decompress(byte[] data) throws IOException {
method checkSynth (line 43) | private void checkSynth(byte[] compressed, boolean expectSuccess, Stri...
method times (line 58) | private static String times(int count, String str) {
method testAllTransforms10 (line 68) | @Test
method testAllTransforms4 (line 309) | @Test
method testBaseDictWord (line 538) | @Test
method testBaseDictWordFinishBlockOnRingbufferWrap (line 560) | @Test
method testBaseDictWordTooLong (line 585) | @Test
method testBlockCountMessage (line 608) | @Test
method testBlockSwitchMessage (line 662) | @Test
method testClClTreeDeficiency (line 718) | @Test
method testClClTreeExcess (line 752) | @Test
method testComplexHuffmanCodeTwoSymbols (line 785) | @Test
method testCompressedUncompressedShortCompressed (line 821) | @Test
method testCompressedUncompressedShortCompressedSmallWindow (line 850) | @Test
method testCopyLengthTooLong (line 879) | @Test
method testCopyTooLong (line 901) | @Test
method testCustomHuffmanCode (line 923) | @Test
method testDistanceLut (line 970) | @Test
method testEmpty (line 1010) | @Test
method testHelloWorld (line 1026) | @Test
method testInsertTooLong (line 1046) | @Test
method testIntactDistanceRingBuffer0 (line 1068) | @Test
method testIntactDistanceRingBuffer1 (line 1091) | @Test
method testIntactDistanceRingBuffer2 (line 1114) | @Test
method testIntactDistanceRingBufferNoDistanceValue0 (line 1142) | @Test
method testIntactDistanceRingBufferNoDistanceValue1 (line 1175) | @Test
method testInvalidNoLastMetablock (line 1208) | @Test
method testInvalidNoMetaBlocks (line 1229) | @Test
method testInvalidTooFarDist (line 1244) | @Test
method testInvalidTooLargeContextMap (line 1269) | @Test
method testInvalidTransformType (line 1318) | @Test
method testInvalidWindowBits9 (line 1339) | @Test
method testManyTinyMetablocks (line 1358) | @Test
method testNegativeDistance (line 2535) | @Test
method testNegativeRemainingLenBetweenMetablocks (line 2570) | @Test
method testOneCommand (line 2596) | @Test
method testOneInsert (line 2617) | @Test
method testPeculiarWrap (line 2638) | @Test
method testSimplePrefix (line 2673) | @Test
method testSimplePrefixDuplicateSymbols (line 2698) | @Test
method testSimplePrefixOutOfRangeSymbols (line 2723) | @Test
method testSimplePrefixPlusExtraData (line 2745) | @Test
method testStressReadDistanceExtraBits (line 2773) | @Test
method testTooManySymbolsRepeated (line 2854) | @Test
method testTransformedDictWord (line 2887) | @Test
method testTransformedDictWordTooLong (line 2909) | @Test
method testZeroCostCommand (line 2933) | @Test
method testZeroCostLiterals (line 2955) | @Test
FILE: java/org/brotli/dec/TestUtils.java
class TestUtils (line 10) | public final class TestUtils {
method newBrotliInputStream (line 12) | public static InputStream newBrotliInputStream(InputStream input) thro...
method readUniBytes (line 26) | static byte[] readUniBytes(String uniBytes) {
method TestUtils (line 34) | private TestUtils() {}
FILE: java/org/brotli/dec/Transform.java
class Transform (line 35) | final class Transform {
class Transforms (line 37) | static final class Transforms {
method Transforms (line 44) | Transforms(int numTransforms, int prefixSuffixLen, int prefixSuffixC...
method unpackTransforms (line 79) | private static void unpackTransforms(byte[] prefixSuffix,
method transformDictionaryWord (line 104) | static int transformDictionaryWord(byte[] dst, int dstOffset, ByteBuff...
FILE: java/org/brotli/dec/TransformTest.java
class TransformTest (line 20) | @RunWith(JUnit4.class)
method crc64 (line 23) | private static long crc64(byte[] data) {
method testTrimAll (line 35) | @Test
method testCapitalize (line 45) | @Test
method testAllTransforms (line 55) | @Test
FILE: java/org/brotli/dec/Utils.java
class Utils (line 23) | final class Utils {
method fillBytesWithZeroes (line 39) | static void fillBytesWithZeroes(byte[] dest, int start, int end) {
method fillIntsWithZeroes (line 58) | static void fillIntsWithZeroes(int[] dest, int start, int end) {
method copyBytes (line 67) | static void copyBytes(byte[] dst, int target, byte[] src, int start, i...
method copyBytesWithin (line 71) | static void copyBytesWithin(byte[] bytes, int target, int start, int e...
method readInput (line 75) | static int readInput(State s, byte[] dst, int offset, int length) {
method makeEmptyInput (line 83) | static InputStream makeEmptyInput() {
method closeInput (line 87) | static void closeInput(State s) throws IOException {
method toUsAsciiBytes (line 92) | static byte[] toUsAsciiBytes(String src) {
method toUtf8Runes (line 102) | static int[] toUtf8Runes(String src) {
method asReadOnlyBuffer (line 110) | static ByteBuffer asReadOnlyBuffer(ByteBuffer src) {
method isReadOnly (line 114) | static int isReadOnly(ByteBuffer src) {
method isDirect (line 118) | static int isDirect(ByteBuffer src) {
method flipBuffer (line 123) | static void flipBuffer(Buffer buffer) {
method isDebugMode (line 127) | static int isDebugMode() {
method getLogBintness (line 133) | static int getLogBintness() {
method shr32 (line 138) | static int shr32(int x, int y) {
method shr64 (line 142) | static long shr64(long x, int y) {
method min (line 146) | static int min(int a, int b) {
method makeError (line 150) | static int makeError(State s, int code) {
FILE: java/org/brotli/enc/PreparedDictionary.java
type PreparedDictionary (line 14) | public interface PreparedDictionary {
method getData (line 15) | ByteBuffer getData();
FILE: java/org/brotli/enc/PreparedDictionaryGenerator.java
class PreparedDictionaryGenerator (line 18) | public class PreparedDictionaryGenerator {
class PreparedDictionaryImpl (line 23) | private static class PreparedDictionaryImpl implements PreparedDiction...
method PreparedDictionaryImpl (line 26) | private PreparedDictionaryImpl(ByteBuffer data) {
method getData (line 30) | @Override
method PreparedDictionaryGenerator (line 37) | private PreparedDictionaryGenerator() { }
method generate (line 39) | public static PreparedDictionary generate(ByteBuffer src) {
method generate (line 43) | public static PreparedDictionary generate(ByteBuffer src,
FILE: java/org/brotli/integration/Benchmark.java
class Benchmark (line 16) | public class Benchmark {
method readFile (line 17) | private static byte[] readFile(String fileName) throws IOException {
method decodeBytes (line 33) | private static long decodeBytes(InputStream input, OutputStream output...
method main (line 49) | public static void main(String... args) throws IOException {
FILE: java/org/brotli/integration/BrotliJniTestBase.java
class BrotliJniTestBase (line 6) | public class BrotliJniTestBase {
FILE: java/org/brotli/integration/BundleChecker.java
class BundleChecker (line 28) | public class BundleChecker implements Runnable {
method BundleChecker (line 36) | public BundleChecker(InputStream input, AtomicInteger nextJob, boolean...
method decompressAndCalculateCrc (line 42) | private long decompressAndCalculateCrc(ZipInputStream input) throws IO...
method run (line 59) | @Override
method main (line 97) | public static void main(String[] args) throws FileNotFoundException {
FILE: java/org/brotli/integration/BundleHelper.java
class BundleHelper (line 21) | public class BundleHelper {
method BundleHelper (line 22) | private BundleHelper() { }
method listEntries (line 24) | public static List<String> listEntries(InputStream input) throws IOExc...
method readStream (line 41) | public static byte[] readStream(InputStream input) throws IOException {
method readEntry (line 51) | public static byte[] readEntry(InputStream input, String entryName) th...
method updateCrc64 (line 81) | public static long updateCrc64(long crc, byte[] data, int offset, int ...
method fingerprintStream (line 95) | public static long fingerprintStream(InputStream input) throws IOExcep...
method getExpectedFingerprint (line 108) | public static long getExpectedFingerprint(String entryName) {
FILE: java/org/brotli/wrapper/android/JniHelper.java
class JniHelper (line 12) | public class JniHelper {
method tryInitialize (line 19) | private static void tryInitialize() {
method ensureInitialized (line 56) | public static void ensureInitialized() {
method unzip (line 66) | private static void unzip(String zipFileName, String entryName, String...
FILE: java/org/brotli/wrapper/android/UseJni.java
class UseJni (line 7) | public final class UseJni {
method deepThought (line 13) | public static int deepThought() {
FILE: java/org/brotli/wrapper/android/UseJniTest.java
class UseJniTest (line 11) | @RunWith(RobolectricTestRunner.class)
method setup (line 14) | @Before
method testAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything (line 19) | @Test
FILE: java/org/brotli/wrapper/common/BrotliCommon.java
class BrotliCommon (line 17) | public class BrotliCommon {
method checkDictionaryDataMd5 (line 42) | public static boolean checkDictionaryDataMd5(byte[] digest) {
method checkDictionaryDataSha1 (line 49) | public static boolean checkDictionaryDataSha1(byte[] digest) {
method checkDictionaryDataSha256 (line 56) | public static boolean checkDictionaryDataSha256(byte[] digest) {
method makeNative (line 65) | public static ByteBuffer makeNative(byte[] data) {
method setDictionaryData (line 74) | public static void setDictionaryData(byte[] data) {
method setDictionaryData (line 89) | public static void setDictionaryData(InputStream src) throws IOExcepti...
method setDictionaryData (line 113) | public static void setDictionaryData(ByteBuffer data) {
FILE: java/org/brotli/wrapper/common/CommonJNI.java
class CommonJNI (line 14) | class CommonJNI {
method nativeSetDictionaryData (line 15) | static native boolean nativeSetDictionaryData(ByteBuffer data);
FILE: java/org/brotli/wrapper/common/SetRfcDictionaryTest.java
class SetRfcDictionaryTest (line 27) | @RunWith(JUnit4.class)
method testRfcDictionaryChecksums (line 30) | @Test
method testSetRfcDictionary (line 46) | @Test
FILE: java/org/brotli/wrapper/common/SetZeroDictionaryTest.java
class SetZeroDictionaryTest (line 23) | @RunWith(JUnit4.class)
method testZeroDictionary (line 26) | @Test
FILE: java/org/brotli/wrapper/common/common_jni.cc
function JNIEXPORT (line 21) | JNIEXPORT jint JNICALL
FILE: java/org/brotli/wrapper/dec/BrotliDecoderChannel.java
class BrotliDecoderChannel (line 17) | public class BrotliDecoderChannel extends Decoder implements ReadableByt...
method BrotliDecoderChannel (line 30) | public BrotliDecoderChannel(ReadableByteChannel source, int bufferSize...
method BrotliDecoderChannel (line 34) | public BrotliDecoderChannel(ReadableByteChannel source) throws IOExcep...
method attachDictionary (line 38) | @Override
method isOpen (line 43) | @Override
method close (line 50) | @Override
method read (line 57) | @Override
FILE: java/org/brotli/wrapper/dec/BrotliDecoderChannelTest.java
class BrotliDecoderChannelTest (line 26) | @RunWith(AllTests.class)
method getBundle (line 29) | static InputStream getBundle() throws IOException {
method suite (line 34) | public static TestSuite suite() throws IOException {
class ChannelTestCase (line 49) | static class ChannelTestCase extends TestCase {
method ChannelTestCase (line 51) | ChannelTestCase(String entryName) {
method runTest (line 56) | @Override
method run (line 62) | private static void run(String entryName) throws Throwable {
FILE: java/org/brotli/wrapper/dec/BrotliInputStream.java
class BrotliInputStream (line 17) | public class BrotliInputStream extends InputStream {
method BrotliInputStream (line 29) | public BrotliInputStream(InputStream source, int bufferSize)
method BrotliInputStream (line 34) | public BrotliInputStream(InputStream source) throws IOException {
method attachDictionary (line 38) | public void attachDictionary(ByteBuffer dictionary) throws IOException {
method enableEagerOutput (line 42) | public void enableEagerOutput() {
method close (line 46) | @Override
method available (line 51) | @Override
method read (line 56) | @Override
method read (line 76) | @Override
method read (line 81) | @Override
method skip (line 103) | @Override
FILE: java/org/brotli/wrapper/dec/BrotliInputStreamTest.java
class BrotliInputStreamTest (line 24) | @RunWith(AllTests.class)
method getBundle (line 27) | static InputStream getBundle() throws IOException {
method suite (line 32) | public static TestSuite suite() throws IOException {
class StreamTestCase (line 47) | static class StreamTestCase extends TestCase {
method StreamTestCase (line 49) | StreamTestCase(String entryName) {
method runTest (line 54) | @Override
method run (line 60) | private static void run(String entryName) throws Throwable {
FILE: java/org/brotli/wrapper/dec/CornerCasesTest.java
class CornerCasesTest (line 19) | @RunWith(JUnit4.class)
method makeInput (line 22) | private static byte[] makeInput(int len) {
method embedChunk (line 30) | private static byte[] embedChunk(byte[] src, int offset, int padding) {
method testPowerOfTwoInput (line 38) | @Test
method testInputOffset (line 48) | @Test
FILE: java/org/brotli/wrapper/dec/Decoder.java
class Decoder (line 18) | public class Decoder implements AutoCloseable {
method Decoder (line 32) | public Decoder(ReadableByteChannel source, int inputBufferSize)
method fail (line 44) | private void fail(String message) throws IOException {
method attachDictionary (line 53) | void attachDictionary(ByteBuffer dictionary) throws IOException {
method enableEagerOutput (line 59) | public void enableEagerOutput() {
method decode (line 68) | int decode() throws IOException {
method discard (line 116) | void discard(int length) {
method consume (line 123) | int consume(ByteBuffer dst) {
method close (line 132) | @Override
method decompress (line 143) | public static byte[] decompress(byte[] data, int offset, int length) t...
method decompress (line 193) | public static byte[] decompress(byte[] data) throws IOException {
FILE: java/org/brotli/wrapper/dec/DecoderJNI.java
class DecoderJNI (line 15) | public class DecoderJNI {
method nativeCreate (line 16) | private static native ByteBuffer nativeCreate(long[] context);
method nativePush (line 17) | private static native void nativePush(long[] context, int length);
method nativePull (line 18) | private static native ByteBuffer nativePull(long[] context);
method nativeDestroy (line 19) | private static native void nativeDestroy(long[] context);
method nativeAttachDictionary (line 20) | private static native boolean nativeAttachDictionary(long[] context, B...
type Status (line 22) | public enum Status {
class Wrapper (line 30) | public static class Wrapper {
method Wrapper (line 36) | public Wrapper(int inputBufferSize) throws IOException {
method attachDictionary (line 44) | public boolean attachDictionary(ByteBuffer dictionary) {
method push (line 57) | public void push(int length) {
method parseStatus (line 75) | private void parseStatus() {
method getStatus (line 90) | public Status getStatus() {
method getInputBuffer (line 94) | public ByteBuffer getInputBuffer() {
method hasOutput (line 98) | public boolean hasOutput() {
method pull (line 102) | public ByteBuffer pull() {
method destroy (line 118) | public void destroy() {
FILE: java/org/brotli/wrapper/dec/DecoderTest.java
class DecoderTest (line 24) | @RunWith(AllTests.class)
method getBundle (line 27) | static InputStream getBundle() throws IOException {
method suite (line 32) | public static TestSuite suite() throws IOException {
class DecoderTestCase (line 47) | static class DecoderTestCase extends TestCase {
method DecoderTestCase (line 49) | DecoderTestCase(String entryName) {
method runTest (line 54) | @Override
method run (line 60) | private static void run(String entryName) throws Throwable {
FILE: java/org/brotli/wrapper/dec/EagerStreamTest.java
class EagerStreamTest (line 19) | @RunWith(JUnit4.class)
method testEagerReading (line 22) | @Test
FILE: java/org/brotli/wrapper/dec/decoder_jni.cc
type DecoderHandle (line 20) | struct DecoderHandle {
function DecoderHandle (line 32) | DecoderHandle* getHandle(void* opaque) {
function JNIEXPORT (line 51) | JNIEXPORT jobject JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativeC...
function JNIEXPORT (line 118) | JNIEXPORT void JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativePush(
function JNIEXPORT (line 172) | JNIEXPORT jobject JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativeP...
function JNIEXPORT (line 200) | JNIEXPORT void JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativeDest...
function JNIEXPORT (line 213) | JNIEXPORT jboolean JNICALL
FILE: java/org/brotli/wrapper/dec/decoder_jni_onload.cc
function JNIEXPORT (line 32) | JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
FILE: java/org/brotli/wrapper/enc/BrotliEncoderChannel.java
class BrotliEncoderChannel (line 19) | public class BrotliEncoderChannel extends Encoder implements WritableByt...
method BrotliEncoderChannel (line 32) | public BrotliEncoderChannel(WritableByteChannel destination, Encoder.P...
method BrotliEncoderChannel (line 37) | public BrotliEncoderChannel(WritableByteChannel destination, Encoder.P...
method BrotliEncoderChannel (line 42) | public BrotliEncoderChannel(WritableByteChannel destination) throws IO...
method attachDictionary (line 46) | @Override
method isOpen (line 51) | @Override
method close (line 58) | @Override
method write (line 65) | @Override
FILE: java/org/brotli/wrapper/enc/BrotliEncoderChannelTest.java
class BrotliEncoderChannelTest (line 24) | @RunWith(AllTests.class)
type TestMode (line 27) | private enum TestMode {
method getBundle (line 34) | static InputStream getBundle() throws IOException {
method suite (line 39) | public static TestSuite suite() throws IOException {
class ChannelTestCase (line 55) | static class ChannelTestCase extends TestCase {
method ChannelTestCase (line 58) | ChannelTestCase(String entryName, TestMode mode) {
method runTest (line 64) | @Override
method run (line 70) | private static void run(String entryName, TestMode mode) throws Throwa...
FILE: java/org/brotli/wrapper/enc/BrotliOutputStream.java
class BrotliOutputStream (line 17) | public class BrotliOutputStream extends OutputStream {
method BrotliOutputStream (line 30) | public BrotliOutputStream(OutputStream destination, Encoder.Parameters...
method BrotliOutputStream (line 35) | public BrotliOutputStream(OutputStream destination, Encoder.Parameters...
method BrotliOutputStream (line 40) | public BrotliOutputStream(OutputStream destination) throws IOException {
method attachDictionary (line 44) | public void attachDictionary(PreparedDictionary dictionary) throws IOE...
method close (line 48) | @Override
method flush (line 53) | @Override
method write (line 61) | @Override
method write (line 72) | @Override
method write (line 77) | @Override
FILE: java/org/brotli/wrapper/enc/BrotliOutputStreamTest.java
class BrotliOutputStreamTest (line 21) | @RunWith(AllTests.class)
type TestMode (line 24) | private enum TestMode {
method getBundle (line 32) | static InputStream getBundle() throws IOException {
method suite (line 37) | public static TestSuite suite() throws IOException {
class StreamTestCase (line 54) | static class StreamTestCase extends TestCase {
method StreamTestCase (line 57) | StreamTestCase(String entryName, TestMode mode) {
method runTest (line 63) | @Override
method run (line 69) | private static void run(String entryName, TestMode mode) throws Throwa...
FILE: java/org/brotli/wrapper/enc/EmptyInputTest.java
class EmptyInputTest (line 19) | @RunWith(JUnit4.class)
method testEmptyInput (line 21) | @Test
FILE: java/org/brotli/wrapper/enc/Encoder.java
class Encoder (line 20) | public class Encoder implements AutoCloseable {
type Mode (line 35) | public enum Mode {
method of (line 53) | public static Mode of(int value) {
class Parameters (line 61) | public static final class Parameters {
method Parameters (line 66) | public Parameters() { }
method setQuality (line 73) | public Parameters setQuality(int quality) {
method setWindow (line 86) | public Parameters setWindow(int lgwin) {
method setMode (line 99) | public Parameters setMode(Mode mode) {
method Encoder (line 112) | Encoder(WritableByteChannel destination, Parameters params, int inputB...
method fail (line 127) | private void fail(String message) throws IOException {
method attachDictionary (line 136) | public void attachDictionary(PreparedDictionary dictionary) throws IOE...
method pushOutput (line 148) | boolean pushOutput(boolean force) throws IOException {
method encode (line 165) | boolean encode(EncoderJNI.Operation op) throws IOException {
method flush (line 192) | void flush() throws IOException {
method close (line 196) | @Override
method compress (line 211) | public static byte[] compress(byte[] data, int offset, int length, Par...
method compress (line 257) | public static byte[] compress(byte[] data, Parameters params) throws I...
method compress (line 261) | public static byte[] compress(byte[] data) throws IOException {
method compress (line 265) | public static byte[] compress(byte[] data, int offset, int length) thr...
method prepareDictionary (line 275) | public static PreparedDictionary prepareDictionary(ByteBuffer dictionary,
FILE: java/org/brotli/wrapper/enc/EncoderJNI.java
class EncoderJNI (line 16) | class EncoderJNI {
method nativeCreate (line 17) | private static native ByteBuffer nativeCreate(long[] context);
method nativePush (line 18) | private static native void nativePush(long[] context, int length);
method nativePull (line 19) | private static native ByteBuffer nativePull(long[] context);
method nativeDestroy (line 20) | private static native void nativeDestroy(long[] context);
method nativeAttachDictionary (line 21) | private static native boolean nativeAttachDictionary(long[] context, B...
method nativePrepareDictionary (line 22) | private static native ByteBuffer nativePrepareDictionary(ByteBuffer di...
method nativeDestroyDictionary (line 23) | private static native void nativeDestroyDictionary(ByteBuffer dictiona...
type Operation (line 25) | enum Operation {
class PreparedDictionaryImpl (line 31) | private static class PreparedDictionaryImpl implements AutoCloseable, ...
method PreparedDictionaryImpl (line 36) | private PreparedDictionaryImpl(ByteBuffer data, ByteBuffer rawData) {
method getData (line 40) | @Override
method close (line 45) | @Override
method prepareDictionary (line 60) | static PreparedDictionary prepareDictionary(ByteBuffer dictionary, int...
class Wrapper (line 71) | static class Wrapper {
method Wrapper (line 76) | Wrapper(int inputBufferSize, int quality, int lgwin, Encoder.Mode mode)
method attachDictionary (line 95) | boolean attachDictionary(ByteBuffer dictionary) {
method push (line 108) | void push(Operation op, int length) {
method isSuccess (line 126) | boolean isSuccess() {
method hasMoreOutput (line 130) | boolean hasMoreOutput() {
method hasRemainingInput (line 134) | boolean hasRemainingInput() {
method isFinished (line 138) | boolean isFinished() {
method getInputBuffer (line 142) | ByteBuffer getInputBuffer() {
method pull (line 146) | ByteBuffer pull() {
method destroy (line 160) | void destroy() {
FILE: java/org/brotli/wrapper/enc/EncoderTest.java
class EncoderTest (line 19) | @RunWith(AllTests.class)
method getBundle (line 21) | static InputStream getBundle() throws IOException {
method suite (line 26) | public static TestSuite suite() throws IOException {
class EncoderTestCase (line 41) | static class EncoderTestCase extends TestCase {
method EncoderTestCase (line 43) | EncoderTestCase(String entryName) {
method runTest (line 48) | @Override
method run (line 54) | private static void run(String entryName) throws Throwable {
FILE: java/org/brotli/wrapper/enc/UseCompoundDictionaryTest.java
class UseCompoundDictionaryTest (line 26) | @RunWith(AllTests.class)
method getBundle (line 29) | static InputStream getBundle() throws IOException {
method suite (line 34) | public static TestSuite suite() throws IOException {
class UseCompoundDictionaryTestCase (line 49) | static class UseCompoundDictionaryTestCase extends TestCase {
method UseCompoundDictionaryTestCase (line 51) | UseCompoundDictionaryTestCase(String entryName) {
method runTest (line 56) | @Override
method prepareRawDictionary (line 62) | private static PreparedDictionary prepareRawDictionary(String entryNam...
method run (line 72) | private static void run(String entryName) throws Throwable {
FILE: java/org/brotli/wrapper/enc/encoder_jni.cc
type EncoderHandle (line 18) | struct EncoderHandle {
function EncoderHandle (line 30) | EncoderHandle* getHandle(void* opaque) {
function JNIEXPORT (line 49) | JNIEXPORT jobject JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativeC...
function JNIEXPORT (line 124) | JNIEXPORT void JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativePush(
function JNIEXPORT (line 174) | JNIEXPORT jobject JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativeP...
function JNIEXPORT (line 195) | JNIEXPORT void JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativeDest...
function JNIEXPORT (line 208) | JNIEXPORT jboolean JNICALL
function JNIEXPORT (line 244) | JNIEXPORT void JNICALL
function JNIEXPORT (line 259) | JNIEXPORT jobject JNICALL
FILE: js/bundle_test.js
constant CRC_64_POLY (line 9) | const CRC_64_POLY = new Uint32Array([0xD7870F42, 0xC96C5795]);
function calculateCrc64 (line 17) | function calculateCrc64(data) {
function checkEntry (line 52) | function checkEntry(entry, data) {
FILE: js/bundle_test.ts
constant CRC_64_POLY (line 9) | const CRC_64_POLY = new Uint32Array([0xD7870F42, 0xC96C5795]);
function calculateCrc64 (line 14) | function calculateCrc64(data: Int8Array): string {
function checkEntry (line 46) | function checkEntry(entry: string, data: Int8Array) {
FILE: js/decode.js
function log2floor (line 47) | function log2floor(i) {
function calculateDistanceAlphabetSize (line 67) | function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {
function calculateDistanceAlphabetLimit (line 77) | function calculateDistanceAlphabetLimit(s, maxDistance, npostfix, ndirec...
function unpackCommandLookupTable (line 90) | function unpackCommandLookupTable(cmdLookup) {
function decodeWindowBits (line 120) | function decodeWindowBits(s) {
function enableEagerOutput (line 158) | function enableEagerOutput(s) {
function enableLargeWindow (line 169) | function enableLargeWindow(s) {
function attachDictionaryChunk (line 181) | function attachDictionaryChunk(s, data) {
function initState (line 203) | function initState(s) {
function close (line 228) | function close(s) {
function decodeVarLenUnsignedByte (line 241) | function decodeVarLenUnsignedByte(s) {
function decodeMetaBlockLength (line 259) | function decodeMetaBlockLength(s) {
function readSymbol (line 317) | function readSymbol(tableGroup, tableIdx, s) {
function readBlockLength (line 339) | function readBlockLength(tableGroup, tableIdx, s) {
function moveToFront (line 357) | function moveToFront(v, index) {
function inverseMoveToFrontTransform (line 371) | function inverseMoveToFrontTransform(v, vLen) {
function readHuffmanCodeLengths (line 391) | function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeL...
function checkDupes (line 465) | function checkDupes(s, symbols, length) {
function readSimpleHuffmanCode (line 483) | function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, table...
function readComplexHuffmanCode (line 545) | function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tab...
function readHuffmanCode (line 585) | function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup,...
function decodeContextMap (line 608) | function decodeContextMap(contextMapSize, contextMap, s) {
function decodeBlockTypeAndLength (line 688) | function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {
function decodeLiteralBlockSwitch (line 715) | function decodeLiteralBlockSwitch(s) {
function decodeCommandBlockSwitch (line 728) | function decodeCommandBlockSwitch(s) {
function decodeDistanceBlockSwitch (line 736) | function decodeDistanceBlockSwitch(s) {
function maybeReallocateRingBuffer (line 744) | function maybeReallocateRingBuffer(s) {
function readNextMetablockHeader (line 771) | function readNextMetablockHeader(s) {
function readMetablockPartition (line 825) | function readMetablockPartition(s, treeType, numBlockTypes) {
function calculateDistanceLut (line 853) | function calculateDistanceLut(s, alphabetSizeLimit) {
function readMetablockHuffmanCodesAndContextMaps (line 882) | function readMetablockHuffmanCodesAndContextMaps(s) {
function copyUncompressedData (line 996) | function copyUncompressedData(s) {
function writeRingBuffer (line 1030) | function writeRingBuffer(s) {
function huffmanTreeGroupAllocSize (line 1047) | function huffmanTreeGroupAllocSize(alphabetSizeLimit, n) {
function decodeHuffmanTreeGroup (line 1059) | function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s...
function calculateFence (line 1075) | function calculateFence(s) {
function doUseDictionary (line 1087) | function doUseDictionary(s, fence) {
function initializeCompoundDictionary (line 1133) | function initializeCompoundDictionary(s) {
function initializeCompoundDictionaryCopy (line 1157) | function initializeCompoundDictionaryCopy(s, address, length) {
function copyFromCompoundDictionary (line 1182) | function copyFromCompoundDictionary(s, fence) {
function decompress (line 1214) | function decompress(s) {
function Transforms (line 1548) | function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {
function unpackTransforms (line 1576) | function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, p...
function transformDictionaryWord (line 1608) | function transformDictionaryWord(dst, dstOffset, src, srcOffset, wordLen...
function getNextKey (line 1733) | function getNextKey(key, len) {
function replicateValue (line 1748) | function replicateValue(table, offset, step, end, item) {
function nextTableBitSize (line 1761) | function nextTableBitSize(count, len, rootBits) {
function buildHuffmanTable (line 1782) | function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, ...
function readMoreInput (line 1846) | function readMoreInput(s) {
function checkHealth (line 1879) | function checkHealth(s, endOfStream) {
function readFewBits (line 1897) | function readFewBits(s, n) {
function readManyBits (line 1907) | function readManyBits(s, n) {
function initBitReader (line 1917) | function initBitReader(s) {
function prepare (line 1930) | function prepare(s) {
function reload (line 1951) | function reload(s) {
function jumpToByteBoundary (line 1961) | function jumpToByteBoundary(s) {
function halfAvailable (line 1975) | function halfAvailable(s) {
function copyRawBytes (line 1989) | function copyRawBytes(s, data, offset, length) {
function bytesToNibbles (line 2045) | function bytesToNibbles(s, byteLen) {
function unpackLookupTable (line 2062) | function unpackLookupTable(lookup, utfMap, utfRle) {
function State (line 2101) | function State() {
function setData (line 2265) | function setData(newData, newSizeBits) {
function unpackDictionaryData (line 2294) | function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBi...
function InputStream (line 2330) | function InputStream(data) {
function valueOf (line 2342) | function valueOf(x) {
function readInput (line 2353) | function readInput(s, dst, offset, length) {
function closeInput (line 2368) | function closeInput(s) {
function toUsAsciiBytes (line 2375) | function toUsAsciiBytes(src) {
function toUtf8Runes (line 2387) | function toUtf8Runes(src) {
function makeError (line 2400) | function makeError(s, code) {
function decode (line 2420) | function decode(bytes, options) {
FILE: js/decode.ts
type BrotliDecodeOptions (line 7) | interface BrotliDecodeOptions {
constant MAX_HUFFMAN_TABLE_SIZE (line 12) | const MAX_HUFFMAN_TABLE_SIZE: Int32Array = Int32Array.from([256, 402, 43...
constant CODE_LENGTH_CODE_ORDER (line 13) | const CODE_LENGTH_CODE_ORDER: Int32Array = Int32Array.from([1, 2, 3, 4, ...
constant DISTANCE_SHORT_CODE_INDEX_OFFSET (line 14) | const DISTANCE_SHORT_CODE_INDEX_OFFSET: Int32Array = Int32Array.from([0,...
constant DISTANCE_SHORT_CODE_VALUE_OFFSET (line 15) | const DISTANCE_SHORT_CODE_VALUE_OFFSET: Int32Array = Int32Array.from([0,...
constant FIXED_TABLE (line 16) | const FIXED_TABLE: Int32Array = Int32Array.from([0x020000, 0x020004, 0x0...
constant BLOCK_LENGTH_OFFSET (line 17) | const BLOCK_LENGTH_OFFSET: Int32Array = Int32Array.from([1, 5, 9, 13, 17...
constant BLOCK_LENGTH_N_BITS (line 18) | const BLOCK_LENGTH_N_BITS: Int32Array = Int32Array.from([2, 2, 2, 2, 3, ...
constant INSERT_LENGTH_N_BITS (line 19) | const INSERT_LENGTH_N_BITS: Int16Array = Int16Array.from([0x00, 0x00, 0x...
constant COPY_LENGTH_N_BITS (line 20) | const COPY_LENGTH_N_BITS: Int16Array = Int16Array.from([0x00, 0x00, 0x00...
constant CMD_LOOKUP (line 21) | const CMD_LOOKUP = new Int16Array(2816);
function log2floor (line 25) | function log2floor(i: number): number {
function calculateDistanceAlphabetSize (line 39) | function calculateDistanceAlphabetSize(npostfix: number, ndirect: number...
function calculateDistanceAlphabetLimit (line 42) | function calculateDistanceAlphabetLimit(s: State, maxDistance: number, n...
function unpackCommandLookupTable (line 51) | function unpackCommandLookupTable(cmdLookup: Int16Array): void {
function decodeWindowBits (line 77) | function decodeWindowBits(s: State): number {
function enableEagerOutput (line 111) | function enableEagerOutput(s: State): number {
function enableLargeWindow (line 118) | function enableLargeWindow(s: State): number {
function attachDictionaryChunk (line 125) | function attachDictionaryChunk(s: State, data: Int8Array): number {
function initState (line 143) | function initState(s: State): number {
function close (line 164) | function close(s: State): number {
function decodeVarLenUnsignedByte (line 173) | function decodeVarLenUnsignedByte(s: State): number {
function decodeMetaBlockLength (line 187) | function decodeMetaBlockLength(s: State): number {
function readSymbol (line 239) | function readSymbol(tableGroup: Int32Array, tableIdx: number, s: State):...
function readBlockLength (line 255) | function readBlockLength(tableGroup: Int32Array, tableIdx: number, s: St...
function moveToFront (line 268) | function moveToFront(v: Int32Array, index: number): void {
function inverseMoveToFrontTransform (line 277) | function inverseMoveToFrontTransform(v: Int8Array, vLen: number): void {
function readHuffmanCodeLengths (line 290) | function readHuffmanCodeLengths(codeLengthCodeLengths: Int32Array, numSy...
function checkDupes (line 358) | function checkDupes(s: State, symbols: Int32Array, length: number): numb...
function readSimpleHuffmanCode (line 368) | function readSimpleHuffmanCode(alphabetSizeMax: number, alphabetSizeLimi...
function readComplexHuffmanCode (line 422) | function readComplexHuffmanCode(alphabetSizeLimit: number, skip: number,...
function readHuffmanCode (line 454) | function readHuffmanCode(alphabetSizeMax: number, alphabetSizeLimit: num...
function decodeContextMap (line 471) | function decodeContextMap(contextMapSize: number, contextMap: Int8Array,...
function decodeBlockTypeAndLength (line 545) | function decodeBlockTypeAndLength(s: State, treeType: number, numBlockTy...
function decodeLiteralBlockSwitch (line 568) | function decodeLiteralBlockSwitch(s: State): void {
function decodeCommandBlockSwitch (line 577) | function decodeCommandBlockSwitch(s: State): void {
function decodeDistanceBlockSwitch (line 581) | function decodeDistanceBlockSwitch(s: State): void {
function maybeReallocateRingBuffer (line 585) | function maybeReallocateRingBuffer(s: State): void {
function readNextMetablockHeader (line 608) | function readNextMetablockHeader(s: State): number {
function readMetablockPartition (line 656) | function readMetablockPartition(s: State, treeType: number, numBlockType...
function calculateDistanceLut (line 679) | function calculateDistanceLut(s: State, alphabetSizeLimit: number): void {
function readMetablockHuffmanCodesAndContextMaps (line 704) | function readMetablockHuffmanCodesAndContextMaps(s: State): number {
function copyUncompressedData (line 814) | function copyUncompressedData(s: State): number {
function writeRingBuffer (line 844) | function writeRingBuffer(s: State): number {
function huffmanTreeGroupAllocSize (line 856) | function huffmanTreeGroupAllocSize(alphabetSizeLimit: number, n: number)...
function decodeHuffmanTreeGroup (line 860) | function decodeHuffmanTreeGroup(alphabetSizeMax: number, alphabetSizeLim...
function calculateFence (line 872) | function calculateFence(s: State): number {
function doUseDictionary (line 879) | function doUseDictionary(s: State, fence: number): number {
function initializeCompoundDictionary (line 921) | function initializeCompoundDictionary(s: State): void {
function initializeCompoundDictionaryCopy (line 939) | function initializeCompoundDictionaryCopy(s: State, address: number, len...
function copyFromCompoundDictionary (line 959) | function copyFromCompoundDictionary(s: State, fence: number): number {
function decompress (line 987) | function decompress(s: State): number {
class Transforms (line 1314) | class Transforms {
method constructor (line 1320) | constructor (numTransforms: number, prefixSuffixLen: number, prefixSuf...
constant RFC_TRANSFORMS (line 1329) | const RFC_TRANSFORMS = new Transforms(121, 167, 50);
function unpackTransforms (line 1330) | function unpackTransforms(prefixSuffix: Int8Array, prefixSuffixHeads: In...
function transformDictionaryWord (line 1352) | function transformDictionaryWord(dst: Int8Array, dstOffset: number, src:...
function getNextKey (line 1472) | function getNextKey(key: number, len: number): number {
function replicateValue (line 1479) | function replicateValue(table: Int32Array, offset: number, step: number,...
function nextTableBitSize (line 1486) | function nextTableBitSize(count: Int32Array, len: number, rootBits: numb...
function buildHuffmanTable (line 1499) | function buildHuffmanTable(tableGroup: Int32Array, tableIdx: number, roo...
function readMoreInput (line 1559) | function readMoreInput(s: State): number {
function checkHealth (line 1587) | function checkHealth(s: State, endOfStream: number): number {
function readFewBits (line 1600) | function readFewBits(s: State, n: number): number {
function readManyBits (line 1605) | function readManyBits(s: State, n: number): number {
function initBitReader (line 1611) | function initBitReader(s: State): number {
function prepare (line 1620) | function prepare(s: State): number {
function reload (line 1637) | function reload(s: State): number {
function jumpToByteBoundary (line 1643) | function jumpToByteBoundary(s: State): number {
function halfAvailable (line 1653) | function halfAvailable(s: State): number {
function copyRawBytes (line 1660) | function copyRawBytes(s: State, data: Int8Array, offset: number, length:...
function bytesToNibbles (line 1711) | function bytesToNibbles(s: State, byteLen: number): void {
constant LOOKUP (line 1720) | const LOOKUP = new Int32Array(2048);
function unpackLookupTable (line 1721) | function unpackLookupTable(lookup: Int32Array, utfMap: string, utfRle: s...
class State (line 1756) | class State {
method constructor (line 1829) | constructor () {
function setData (line 1842) | function setData(newData: ByteBuffer, newSizeBits: Int32Array): void {
function unpackDictionaryData (line 1862) | function unpackDictionaryData(dictionary: ByteBuffer, data0: string, dat...
class InputStream (line 1893) | class InputStream {
method constructor (line 1896) | constructor (data: Int8Array) {
function valueOf (line 1901) | function valueOf(x: number): string {
function readInput (line 1905) | function readInput(s: State, dst: Int8Array, offset: number, length: num...
function closeInput (line 1916) | function closeInput(s: State): void {
function toUsAsciiBytes (line 1919) | function toUsAsciiBytes(src: string): Int8Array {
function toUtf8Runes (line 1927) | function toUtf8Runes(src: string): Int32Array {
function makeError (line 1935) | function makeError(s: State, code: number): number {
type ByteBuffer (line 1947) | type ByteBuffer = Int8Array;
function brotliDecode (line 1952) | function brotliDecode(
FILE: js/decode_synth_test.js
function bytesToString (line 14) | function bytesToString(bytes) {
function times (line 34) | function times(count, char) {
function checkSynth (line 43) | function checkSynth(compressed, expectSuccess, expectedOutput) {
method testAllTransforms10 (line 60) | testAllTransforms10() {
method testAllTransforms4 (line 269) | testAllTransforms4() {
method testBaseDictWord (line 465) | testBaseDictWord() {
method testBaseDictWordFinishBlockOnRingbufferWrap (line 484) | testBaseDictWordFinishBlockOnRingbufferWrap() {
method testBaseDictWordTooLong (line 505) | testBaseDictWordTooLong() {
method testBlockCountMessage (line 525) | testBlockCountMessage() {
method testBlockSwitchMessage (line 576) | testBlockSwitchMessage() {
method testClClTreeDeficiency (line 629) | testClClTreeDeficiency() {
method testClClTreeExcess (line 660) | testClClTreeExcess() {
method testComplexHuffmanCodeTwoSymbols (line 691) | testComplexHuffmanCodeTwoSymbols() {
method testCompressedUncompressedShortCompressed (line 724) | testCompressedUncompressedShortCompressed() {
method testCompressedUncompressedShortCompressedSmallWindow (line 748) | testCompressedUncompressedShortCompressedSmallWindow() {
method testCopyLengthTooLong (line 772) | testCopyLengthTooLong() {
method testCopyTooLong (line 792) | testCopyTooLong() {
method testCustomHuffmanCode (line 812) | testCustomHuffmanCode() {
method testDistanceLut (line 857) | testDistanceLut() {
method testEmpty (line 893) | testEmpty() {
method testHelloWorld (line 908) | testHelloWorld() {
method testInsertTooLong (line 925) | testInsertTooLong() {
method testIntactDistanceRingBuffer0 (line 945) | testIntactDistanceRingBuffer0() {
method testIntactDistanceRingBuffer1 (line 966) | testIntactDistanceRingBuffer1() {
method testIntactDistanceRingBuffer2 (line 987) | testIntactDistanceRingBuffer2() {
method testIntactDistanceRingBufferNoDistanceValue0 (line 1012) | testIntactDistanceRingBufferNoDistanceValue0() {
method testIntactDistanceRingBufferNoDistanceValue1 (line 1042) | testIntactDistanceRingBufferNoDistanceValue1() {
method testInvalidNoLastMetablock (line 1072) | testInvalidNoLastMetablock() {
method testInvalidNoMetaBlocks (line 1090) | testInvalidNoMetaBlocks() {
method testInvalidTooFarDist (line 1104) | testInvalidTooFarDist() {
method testInvalidTooLargeContextMap (line 1126) | testInvalidTooLargeContextMap() {
method testInvalidTransformType (line 1172) | testInvalidTransformType() {
method testInvalidWindowBits9 (line 1191) | testInvalidWindowBits9() {
method testManyTinyMetablocks (line 1208) | testManyTinyMetablocks() {
method testNegativeDistance (line 1902) | testNegativeDistance() {
method testNegativeRemainingLenBetweenMetablocks (line 1933) | testNegativeRemainingLenBetweenMetablocks() {
method testOneCommand (line 1955) | testOneCommand() {
method testOneInsert (line 1974) | testOneInsert() {
method testPeculiarWrap (line 1993) | testPeculiarWrap() {
method testSimplePrefix (line 2024) | testSimplePrefix() {
method testSimplePrefixDuplicateSymbols (line 2046) | testSimplePrefixDuplicateSymbols() {
method testSimplePrefixOutOfRangeSymbols (line 2068) | testSimplePrefixOutOfRangeSymbols() {
method testSimplePrefixPlusExtraData (line 2088) | testSimplePrefixPlusExtraData() {
method testStressReadDistanceExtraBits (line 2114) | testStressReadDistanceExtraBits() {
method testTooManySymbolsRepeated (line 2187) | testTooManySymbolsRepeated() {
method testTransformedDictWord (line 2218) | testTransformedDictWord() {
method testTransformedDictWordTooLong (line 2238) | testTransformedDictWordTooLong() {
method testZeroCostCommand (line 2260) | testZeroCostCommand() {
method testZeroCostLiterals (line 2280) | testZeroCostLiterals() {
FILE: js/decode_synth_test.ts
function bytesToString (line 11) | function bytesToString(bytes: Int8Array): string {
function times (line 28) | function times(count: number, char:string): string {
function checkSynth (line 32) | function checkSynth(
method testAllTransforms10 (line 50) | testAllTransforms10() {
method testAllTransforms4 (line 259) | testAllTransforms4() {
method testBaseDictWord (line 455) | testBaseDictWord() {
method testBaseDictWordFinishBlockOnRingbufferWrap (line 474) | testBaseDictWordFinishBlockOnRingbufferWrap() {
method testBaseDictWordTooLong (line 495) | testBaseDictWordTooLong() {
method testBlockCountMessage (line 515) | testBlockCountMessage() {
method testBlockSwitchMessage (line 566) | testBlockSwitchMessage() {
method testClClTreeDeficiency (line 619) | testClClTreeDeficiency() {
method testClClTreeExcess (line 650) | testClClTreeExcess() {
method testComplexHuffmanCodeTwoSymbols (line 681) | testComplexHuffmanCodeTwoSymbols() {
method testCompressedUncompressedShortCompressed (line 714) | testCompressedUncompressedShortCompressed() {
method testCompressedUncompressedShortCompressedSmallWindow (line 738) | testCompressedUncompressedShortCompressedSmallWindow() {
method testCopyLengthTooLong (line 762) | testCopyLengthTooLong() {
method testCopyTooLong (line 782) | testCopyTooLong() {
method testCustomHuffmanCode (line 802) | testCustomHuffmanCode() {
method testDistanceLut (line 847) | testDistanceLut() {
method testEmpty (line 883) | testEmpty() {
method testHelloWorld (line 898) | testHelloWorld() {
method testInsertTooLong (line 915) | testInsertTooLong() {
method testIntactDistanceRingBuffer0 (line 935) | testIntactDistanceRingBuffer0() {
method testIntactDistanceRingBuffer1 (line 956) | testIntactDistanceRingBuffer1() {
method testIntactDistanceRingBuffer2 (line 977) | testIntactDistanceRingBuffer2() {
method testIntactDistanceRingBufferNoDistanceValue0 (line 1002) | testIntactDistanceRingBufferNoDistanceValue0() {
method testIntactDistanceRingBufferNoDistanceValue1 (line 1032) | testIntactDistanceRingBufferNoDistanceValue1() {
method testInvalidNoLastMetablock (line 1062) | testInvalidNoLastMetablock() {
method testInvalidNoMetaBlocks (line 1080) | testInvalidNoMetaBlocks() {
method testInvalidTooFarDist (line 1094) | testInvalidTooFarDist() {
method testInvalidTooLargeContextMap (line 1116) | testInvalidTooLargeContextMap() {
method testInvalidTransformType (line 1162) | testInvalidTransformType() {
method testInvalidWindowBits9 (line 1181) | testInvalidWindowBits9() {
method testManyTinyMetablocks (line 1198) | testManyTinyMetablocks() {
method testNegativeDistance (line 1892) | testNegativeDistance() {
method testNegativeRemainingLenBetweenMetablocks (line 1923) | testNegativeRemainingLenBetweenMetablocks() {
method testOneCommand (line 1945) | testOneCommand() {
method testOneInsert (line 1964) | testOneInsert() {
method testPeculiarWrap (line 1983) | testPeculiarWrap() {
method testSimplePrefix (line 2014) | testSimplePrefix() {
method testSimplePrefixDuplicateSymbols (line 2036) | testSimplePrefixDuplicateSymbols() {
method testSimplePrefixOutOfRangeSymbols (line 2058) | testSimplePrefixOutOfRangeSymbols() {
method testSimplePrefixPlusExtraData (line 2078) | testSimplePrefixPlusExtraData() {
method testStressReadDistanceExtraBits (line 2104) | testStressReadDistanceExtraBits() {
method testTooManySymbolsRepeated (line 2177) | testTooManySymbolsRepeated() {
method testTransformedDictWord (line 2208) | testTransformedDictWord() {
method testTransformedDictWordTooLong (line 2228) | testTransformedDictWordTooLong() {
method testZeroCostCommand (line 2250) | testZeroCostCommand() {
method testZeroCostLiterals (line 2270) | testZeroCostLiterals() {
FILE: js/decode_test.js
function bytesToString (line 12) | function bytesToString(bytes) {
function stringToBytes (line 20) | function stringToBytes(str) {
FILE: js/decode_test.ts
function bytesToString (line 11) | function bytesToString(bytes: Int8Array): string {
function stringToBytes (line 16) | function stringToBytes(str: string): Int8Array {
FILE: python/_brotli.c
function set_brotli_exception (line 225) | static void set_brotli_exception(PyObject* t, const char* msg) {
function set_brotli_exception_from_module (line 239) | static void set_brotli_exception_from_module(PyObject* m, const char* ms...
function get_data_view (line 254) | static int get_data_view(PyObject* object, Py_buffer* view) {
type Block (line 274) | typedef struct {
type Buffer (line 280) | typedef struct {
function Buffer_Init (line 289) | static void Buffer_Init(Buffer* buffer) {
function Buffer_Grow (line 304) | static int Buffer_Grow(Buffer* buffer) {
function Buffer_Cleanup (line 332) | static void Buffer_Cleanup(Buffer* buffer) {
function PyObject (line 351) | static PyObject* Buffer_Finish(Buffer* buffer) {
type PyBrotli_Compressor (line 387) | typedef struct {
function PyObject (line 393) | static PyObject* brotli_Compressor_new(PyTypeObject* type, PyObject* args,
function brotli_Compressor_init (line 414) | static int brotli_Compressor_init(PyBrotli_Compressor* self, PyObject* a...
function brotli_Compressor_dealloc (line 469) | static void brotli_Compressor_dealloc(PyBrotli_Compressor* self) {
function brotli_compressor_enter (line 474) | static int brotli_compressor_enter(PyBrotli_Compressor* self) {
function brotli_compressor_leave (line 494) | static void brotli_compressor_leave(PyBrotli_Compressor* self) {
function PyObject (line 507) | static PyObject* compress_stream(PyBrotli_Compressor* self,
function PyObject (line 568) | static PyObject* brotli_Compressor_process(PyBrotli_Compressor* self,
function PyObject (line 598) | static PyObject* brotli_Compressor_flush(PyBrotli_Compressor* self) {
function PyObject (line 609) | static PyObject* brotli_Compressor_finish(PyBrotli_Compressor* self) {
type PyBrotli_Decompressor (line 625) | typedef struct {
function PyObject (line 633) | static PyObject* brotli_Decompressor_new(PyTypeObject* type, PyObject* a...
function brotli_Decompressor_init (line 657) | static int brotli_Decompressor_init(PyBrotli_Decompressor* self, PyObjec...
function brotli_decompressor_enter (line 674) | static int brotli_decompressor_enter(PyBrotli_Decompressor* self) {
function brotli_decompressor_leave (line 694) | static void brotli_decompressor_leave(PyBrotli_Decompressor* self) {
function brotli_Decompressor_dealloc (line 701) | static void brotli_Decompressor_dealloc(PyBrotli_Decompressor* self) {
function PyObject (line 710) | static PyObject* brotli_Decompressor_process(PyBrotli_Decompressor* self,
function PyObject (line 834) | static PyObject* brotli_Decompressor_is_finished(PyBrotli_Decompressor* ...
function PyObject (line 846) | static PyObject* brotli_Decompressor_can_accept_more_data(
function PyObject (line 861) | static PyObject* brotli_decompress(PyObject* m, PyObject* args,
function RegisterObject (line 983) | static int RegisterObject(PyObject* mod, const char* name, PyObject* val...
function brotli_init_mod (line 992) | static int brotli_init_mod(PyObject* m) {
type PyModuleDef (line 1061) | struct PyModuleDef
function PyMODINIT_FUNC (line 1073) | PyMODINIT_FUNC PyInit__brotli(void) { return PyModuleDef_Init(&brotli_mo...
FILE: python/brotli.py
function compress (line 25) | def compress(string, mode=MODE_GENERIC, quality=11, lgwin=22, lgblock=0):
FILE: python/tests/_test_utils.py
function gather_text_inputs (line 39) | def gather_text_inputs():
function gather_compressed_inputs (line 58) | def gather_compressed_inputs():
function take_input (line 73) | def take_input(input_name):
function has_input (line 78) | def has_input(input_name):
function chunk_input (line 82) | def chunk_input(data, chunk_size):
FILE: python/tests/compress_test.py
function test_compress (line 15) | def test_compress(quality, lgwin, text_name):
FILE: python/tests/compressor_test.py
function test_single_process (line 19) | def test_single_process(quality, text_name):
function test_multiple_process (line 30) | def test_multiple_process(quality, text_name):
function test_multiple_process_and_flush (line 45) | def test_multiple_process_and_flush(quality, text_name):
function make_input (line 59) | def make_input(size):
function _thread_compress (line 91) | def _thread_compress(original, compressor, results):
function _thread_concurrent_process (line 97) | def _thread_concurrent_process(compressor, results):
function _thread_concurrent_flush (line 105) | def _thread_concurrent_flush(compressor, results):
function _thread_concurrent_finish (line 113) | def _thread_concurrent_finish(compressor, results):
function test_concurrency (line 121) | def test_concurrency():
FILE: python/tests/decompress_test.py
function test_decompress (line 15) | def test_decompress(compressed_name, original_name):
function test_garbage_appended (line 22) | def test_garbage_appended():
FILE: python/tests/decompressor_test.py
function test_decompress (line 21) | def test_decompress(compressed_name, original_name):
function test_decompress_with_limit (line 37) | def test_decompress_with_limit(compressed_name, original_name):
function test_too_much_input (line 58) | def test_too_much_input():
function test_changing_limit (line 68) | def test_changing_limit():
function test_garbage_appended (line 85) | def test_garbage_appended():
function test_already_finished (line 91) | def test_already_finished():
function make_input (line 98) | def make_input(size):
function _thread_decompress (line 108) | def _thread_decompress(compressed, decompressor, results):
function _thread_concurrent_process (line 114) | def _thread_concurrent_process(decompressor, results):
function _thread_concurrent_can_accept_more_data (line 122) | def _thread_concurrent_can_accept_more_data(decompressor, results):
function _thread_concurrent_is_finished (line 130) | def _thread_concurrent_is_finished(decompressor, results):
function test_concurrency (line 138) | def test_concurrency():
FILE: research/brotli_decoder.c
type Context (line 25) | typedef struct Context {
function init (line 33) | void init(Context* ctx) {
function cleanup (line 41) | void cleanup(Context* ctx) {
function fail (line 49) | void fail(Context* ctx, const char* message) {
function main (line 55) | int main(int argc, char** argv) {
FILE: research/brotlidump.py
class InvalidStream (line 20) | class InvalidStream(Exception): pass
function outputCharFormatter (line 25) | def outputCharFormatter(c):
function outputFormatter (line 35) | def outputFormatter(s):
class BitStream (line 49) | class BitStream:
method __init__ (line 53) | def __init__(self, byteString):
method __repr__ (line 58) | def __repr__(self):
method read (line 65) | def read(self, n):
method peek (line 82) | def peek(self, n):
method readBytes (line 100) | def readBytes(self, n):
class Symbol (line 109) | class Symbol:
method __init__ (line 115) | def __init__(self, code, value):
method __repr__ (line 119) | def __repr__(self):
method __len__ (line 122) | def __len__(self):
method __int__ (line 127) | def __int__(self):
method bitPattern (line 131) | def bitPattern(self):
method extraBits (line 136) | def extraBits(self):
method __str__ (line 141) | def __str__(self):
method value (line 147) | def value(self, extra=None):
method explanation (line 159) | def explanation(self, extra=None):
class RangeDecoder (line 169) | class RangeDecoder:
method __init__ (line 176) | def __init__(self, *, alphabetSize=None, bitLength=None, **args):
method __len__ (line 182) | def __len__(self):
method __iter__ (line 185) | def __iter__(self):
method __getitem__ (line 190) | def __getitem__(self, index):
method bitPattern (line 194) | def bitPattern(self, index):
method length (line 197) | def length(self, index):
method decodePeek (line 203) | def decodePeek(self, data):
class PrefixDecoder (line 210) | class PrefixDecoder:
method __init__ (line 220) | def __init__(self, *, decodeTable=None, **args):
method __len__ (line 223) | def __len__(self):
method __iter__ (line 226) | def __iter__(self):
method __getitem__ (line 234) | def __getitem__(self, index):
method bitPattern (line 240) | def bitPattern(self, index):
method length (line 244) | def length(self, index):
method decodePeek (line 249) | def decodePeek(self, data):
method setDecode (line 277) | def setDecode(self, decodeTable):
method setLength (line 306) | def setLength(self, lengthTable):
method switchToPrefix (line 331) | def switchToPrefix(self):
class Code (line 336) | class Code(RangeDecoder, PrefixDecoder):
method __init__ (line 351) | def __init__(self, name=None, *, callback=None, description='', **args):
method __repr__ (line 368) | def __repr__(self):
method __len__ (line 372) | def __len__(self): return self.mode.__len__(self)
method __iter__ (line 373) | def __iter__(self): return self.mode.__iter__(self)
method __getitem__ (line 374) | def __getitem__(self, index): return self.mode.__getitem__(self, index)
method bitPattern (line 375) | def bitPattern(self, index): return self.mode.bitPattern(self, index)
method length (line 376) | def length(self, index): return self.mode.length(self, index)
method decodePeek (line 377) | def decodePeek(self, data): return self.mode.decodePeek(self, data)
method value (line 379) | def value(self, index, extra=None):
method mnemonic (line 387) | def mnemonic(self, index):
method callback (line 393) | def callback(self, symbol):
method explanation (line 396) | def explanation(self, index):
method extraBits (line 411) | def extraBits(self, index):
method showCode (line 415) | def showCode(self, width=80):
method readTuple (line 438) | def readTuple(self, stream):
method readTupleAndExtra (line 445) | def readTupleAndExtra(self, stream):
class WithExtra (line 448) | class WithExtra(Code):
method extraBits (line 459) | def extraBits(self, index):
method mnemonic (line 464) | def mnemonic(self, index):
method readTupleAndExtra (line 469) | def readTupleAndExtra(self, stream):
method explanation (line 481) | def explanation(self, index, extra=None):
method callback (line 506) | def callback(self, symbol, extra):
class BoolCode (line 509) | class BoolCode(Code):
method __init__ (line 512) | def __init__(self, name=None, **args):
method value (line 515) | def value(self, index, extra=None):
class Enumerator (line 518) | class Enumerator(WithExtra):
method __init__ (line 526) | def __init__(self, name=None, **args):
method __len__ (line 532) | def __len__(self):
method __getitem__ (line 535) | def __getitem__(self, index):
method value (line 543) | def value(self, index, extra):
method span (line 552) | def span(self, index):
class PrefixCodeHeader (line 563) | class PrefixCodeHeader(WithExtra):
method __init__ (line 566) | def __init__(self, codename):
method extraBits (line 571) | def extraBits(self, index):
method value (line 574) | def value(self, index, extra):
method explanation (line 585) | def explanation(self, index, extra):
class TreeShapeAlphabet (line 596) | class TreeShapeAlphabet(BoolCode):
method value (line 600) | def value(self, index):
method explanation (line 603) | def explanation(self, index):
class LengthOfLengthAlphabet (line 606) | class LengthOfLengthAlphabet(Code):
method __init__ (line 625) | def __init__(self, name=None, **args):
method mnemonic (line 628) | def mnemonic(self, index):
method explanation (line 632) | def explanation(self, index, extra=None):
class LengthAlphabet (line 635) | class LengthAlphabet(WithExtra):
method __init__ (line 639) | def __init__(self, name):
method extraBits (line 642) | def extraBits(self, index):
method mnemonic (line 645) | def mnemonic(self, index):
method explanation (line 651) | def explanation(self, index, extra):
method value (line 654) | def value(self, index, extra):
class WindowSizeAlphabet (line 659) | class WindowSizeAlphabet(Code):
method __init__ (line 674) | def __init__(self, name=None):
method value (line 677) | def value(self, index):
method explanation (line 682) | def explanation(self, index):
class MetablockLengthAlphabet (line 687) | class MetablockLengthAlphabet(WithExtra):
method __init__ (line 714) | def __init__(self, name=None):
method extraBits (line 717) | def extraBits(self, index):
method mnemonic (line 720) | def mnemonic(self, index):
method value (line 724) | def value(self, index, extra):
method explanation (line 733) | def explanation(self, index, extra):
class ReservedAlphabet (line 739) | class ReservedAlphabet(BoolCode):
method value (line 743) | def value(self, index):
method explanation (line 746) | def explanation(self, index):
class FillerAlphabet (line 749) | class FillerAlphabet(Code):
method __init__ (line 750) | def __init__(self, *, streamPos):
method explanation (line 753) | def explanation(self, index):
class SkipLengthAlphabet (line 759) | class SkipLengthAlphabet(WithExtra):
method __init__ (line 782) | def __init__(self):
method extraBits (line 785) | def extraBits(self, index):
method mnemonic (line 788) | def mnemonic(self, index):
method value (line 792) | def value(self, index, extra):
method explanation (line 801) | def explanation(self, index, extra):
class TypeCountAlphabet (line 807) | class TypeCountAlphabet(Enumerator):
method __init__ (line 826) | def __init__(self, name=None, *, description):
method mnemonic (line 832) | def mnemonic(self, index):
method explanation (line 837) | def explanation(self, index, extra):
class BlockTypeAlphabet (line 846) | class BlockTypeAlphabet(Code):
method __init__ (line 852) | def __init__(self, name, NBLTYPES, **args):
method mnemonic (line 856) | def mnemonic(self, index):
method value (line 861) | def value(self, index):
method explanation (line 864) | def explanation(self, index):
class BlockCountAlphabet (line 869) | class BlockCountAlphabet(Enumerator):
method __init__ (line 878) | def __init__(self, name, **args):
method mnemonic (line 881) | def mnemonic(self, index):
method explanation (line 887) | def explanation(self, index, extra):
class DistanceParamAlphabet (line 890) | class DistanceParamAlphabet(WithExtra):
method __init__ (line 894) | def __init__(self):
method extraBits (line 897) | def extraBits(self, index):
method value (line 900) | def value(self, index, extra):
method explanation (line 907) | def explanation(self, index, extra):
method mnemonic (line 911) | def mnemonic(self, index):
class LiteralContextMode (line 914) | class LiteralContextMode(Code):
method __init__ (line 922) | def __init__(self, *, number=9):
method mnemonic (line 926) | def mnemonic(self, index):
method explanation (line 929) | def explanation(self, index):
class RLEmaxAlphabet (line 935) | class RLEmaxAlphabet(Enumerator):
method mnemonic (line 944) | def mnemonic(self, index):
method explanation (line 947) | def explanation(self, index, extra):
class TreeAlphabet (line 952) | class TreeAlphabet(WithExtra):
method __init__ (line 966) | def __init__(self, name=None, *, RLEMAX, NTREES, **args):
method extraBits (line 971) | def extraBits(self, index):
method mnemonic (line 975) | def mnemonic(self, index):
method value (line 981) | def value(self, index, extra):
method explanation (line 988) | def explanation(self, index, extra):
class LiteralAlphabet (line 1001) | class LiteralAlphabet(Code):
method __init__ (line 1005) | def __init__(self, number):
method mnemonic (line 1008) | def mnemonic(self, index):
method value (line 1011) | def value(self, index, extra=None):
method explanation (line 1014) | def explanation(self, index, extra=None):
class InsertLengthAlphabet (line 1017) | class InsertLengthAlphabet(Enumerator):
class CopyLengthAlphabet (line 1023) | class CopyLengthAlphabet(Enumerator):
class InsertAndCopyAlphabet (line 1027) | class InsertAndCopyAlphabet(WithExtra):
method __init__ (line 1049) | def __init__(self, number=''):
method __len__ (line 1052) | def __len__(self):
method extraBits (line 1055) | def extraBits(self, index):
method splitSymbol (line 1060) | def splitSymbol(self, index):
method mnemonic (line 1077) | def mnemonic(self, index):
method value (line 1094) | def value(self, index, extra):
method explanation (line 1102) | def explanation(self, index, extra):
class DistanceAlphabet (line 1107) | class DistanceAlphabet(WithExtra):
method __init__ (line 1128) | def __init__(self, number, *, NPOSTFIX, NDIRECT):
method extraBits (line 1137) | def extraBits(self, index):
method value (line 1148) | def value(self, dcode, dextra):
method mnemonic (line 1170) | def mnemonic(self, index, verbose=False):
method explanation (line 1193) | def explanation(self, index, extra):
class ContextModeKeeper (line 1206) | class ContextModeKeeper:
method __init__ (line 1210) | def __init__(self, mode):
method setContextMode (line 1214) | def setContextMode(self, mode):
method getIndex (line 1217) | def getIndex(self):
method add (line 1229) | def add(self, index):
class WordList (line 1260) | class WordList:
method __init__ (line 1268) | def __init__(self):
method word (line 1272) | def word(self, size, dist):
method upperCase1 (line 1284) | def upperCase1(self, word):
method compileActions (line 1322) | def compileActions(self):
method doAction (line 1364) | def doAction(self, w, action):
class Layout (line 1371) | class Layout:
method __init__ (line 1377) | def __init__(self, stream):
method makeHexData (line 1381) | def makeHexData(self, pos):
method formatBitData (line 1390) | def formatBitData(self, pos, width1, width2=0):
method readPrefixCode (line 1429) | def readPrefixCode(self, alphabet):
method readComplexCode (line 1463) | def readComplexCode(self, hskip, alphabet):
method processStream (line 1583) | def processStream(self):
method verboseRead (line 1623) | def verboseRead(self, alphabet, context='', skipExtra=False):
method metablockLength (line 1664) | def metablockLength(self):
method uncompressed (line 1679) | def uncompressed(self):
method blockType (line 1691) | def blockType(self, kind):
method readLiteralContextModes (line 1708) | def readLiteralContextModes(self):
method contextMap (line 1726) | def contextMap(self, kind):
method IMTF (line 1772) | def IMTF(v):
method readPrefixArray (line 1786) | def readPrefixArray(self, kind, numberOfTrees):
method metablock (line 1799) | def metablock(self):
method figureBlockType (line 1899) | def figureBlockType(self, kind):
FILE: research/deorummolae.cc
function popcount (line 36) | static size_t popcount(uint64_t u) {
function rewriteText (line 45) | static void rewriteText(std::vector<TextChar>* text) {
function remapTerminators (line 63) | static void remapTerminators(std::vector<TextChar>* text,
function buildFullText (line 83) | static void buildFullText(std::vector<std::vector<TextChar>>* data,
function buildLcp (line 101) | static void buildLcp(std::vector<TextChar>* text, std::vector<TextIdx>* sa,
function poisonData (line 133) | static void poisonData(TextIdx pos, TextIdx length,
function cutMatch (line 155) | static void cutMatch(std::vector<std::vector<TextChar>>* data, TextIdx i...
function DM_generate (line 177) | std::string DM_generate(size_t dictionary_size_limit,
FILE: research/dictionary_generator.cc
function readInt (line 31) | static size_t readInt(const char* str) {
function readFile (line 64) | static std::string readFile(const std::string& path) {
function writeFile (line 71) | static void writeFile(const char* file, const std::string& content) {
function writeSamples (line 77) | static void writeSamples(const std::vector<std::string>& paths,
function printHelp (line 100) | static void printHelp(const char* name) {
function main (line 128) | int main(int argc, char const* argv[]) {
FILE: research/draw_diff.cc
function ReadPGM (line 26) | void ReadPGM(FILE* f, Image* image, size_t* height, size_t* width) {
function CalculateDiff (line 39) | void CalculateDiff(int** diff, Image image1, Image image2,
function DrawDiff (line 48) | void DrawDiff(int** diff, Image image1, Image image2,
function main (line 86) | int main(int argc, char** argv) {
FILE: research/draw_histogram.cc
function DistanceTransform (line 35) | inline double DistanceTransform(double x) {
function DensityTransform (line 47) | inline double DensityTransform(double x) {
function GetMaxDistance (line 52) | inline int GetMaxDistance() { return absl::GetFlag(FLAGS_max_distance); }
function AdjustPosition (line 54) | void AdjustPosition(int* pos) {
function BuildHistogram (line 66) | void BuildHistogram(FILE* fin, int** histo) {
function ConvertToPixels (line 132) | void ConvertToPixels(int** histo, uint8_t** pixel) {
function DrawPixels (line 157) | void DrawPixels(uint8_t** pixel, FILE* fout) {
function main (line 167) | int main(int argc, char* argv[]) {
FILE: research/durchschlag.cc
type HashSlot (line 14) | struct HashSlot {
type MetaSlot (line 19) | struct MetaSlot {
type Range (line 24) | struct Range {
type Candidate (line 29) | struct Candidate {
type greaterScore (line 34) | struct greaterScore {
type lessScore (line 41) | struct lessScore {
function fatal (line 50) | static void fatal(const char* error) {
function TextIdx (line 55) | static TextIdx calculateDictionarySize(const std::vector<Range>& ranges) {
function createDictionary (line 64) | static std::string createDictionary(
function Score (line 80) | static Score buildCandidatesList(std::vector<Candidate>* candidates,
function Score (line 168) | static Score rebuildCandidatesList(std::vector<TextIdx>* candidates,
function addRange (line 227) | static void addRange(std::vector<Range>* ranges, TextIdx start, TextIdx ...
function durchschlag_generate (line 246) | std::string durchschlag_generate(
function DurchschlagContext (line 255) | DurchschlagContext durchschlag_prepare(size_t slice_len,
function DurchschlagContext (line 334) | DurchschlagContext durchschlag_prepare(size_t slice_len,
function DurchschlagIndex (line 389) | DurchschlagIndex durchschlag_index(const std::vector<uint8_t>& data) {
function ScoreSlices (line 425) | static void ScoreSlices(const std::vector<TextIdx>& offsets,
function durchschlagGenerateExclusive (line 446) | static std::string durchschlagGenerateExclusive(
function durchschlagGenerateCollaborative (line 552) | static std::string durchschlagGenerateCollaborative(
function durchschlag_generate (line 644) | std::string durchschlag_generate(DurchschalgResourceStrategy strategy,
function durchschlag_distill (line 656) | void durchschlag_distill(size_t slice_len, size_t minimum_population,
function durchschlag_purify (line 698) | void durchschlag_purify(size_t slice_len, size_t minimum_population,
FILE: research/durchschlag.h
type DurchschlagTextIdx (line 28) | typedef uint32_t DurchschlagTextIdx;
type DurchschlagContext (line 31) | typedef struct DurchschlagContext {
type DurchschalgResourceStrategy (line 42) | typedef enum DurchschalgResourceStrategy {
type DurchschlagIndex (line 57) | typedef struct DurchschlagIndex {
FILE: research/find_opt_references.cc
function ReadInput (line 44) | void ReadInput(FILE* fin, input_type* storage, size_t input_size) {
function BuildLCP (line 55) | void BuildLCP(input_type* storage, sarray_type* sarray, lcp_type* lcp,
function PrintReference (line 76) | inline void PrintReference(sarray_type* sarray, lcp_type* lcp, size_t size,
function GoLeft (line 92) | inline void GoLeft(sarray_type* sarray, lcp_type* lcp, int idx, int left...
function GoRight (line 104) | inline void GoRight(sarray_type* sarray, lcp_type* lcp, int idx, size_t ...
function StoreReference (line 116) | inline void StoreReference(sarray_type* sarray, lcp_type* lcp, size_t size,
function ProcessReferences (line 131) | void ProcessReferences(sarray_type* sarray, lcp_type* lcp, size_t size,
function ProcessEntries (line 165) | void ProcessEntries(entry_type* entries, size_t size, FILE* fout) {
function main (line 198) | int main(int argc, char* argv[]) {
FILE: research/read_dist.h
function ReadBackwardReference (line 28) | bool ReadBackwardReference(FILE* fin, int* copy, int* pos, int* dist) {
FILE: research/sieve.cc
type Slot (line 9) | struct Slot {
function TextIdx (line 18) | static TextIdx dryRun(TextIdx sliceLen, Slot* map, TextIdx* shortcut,
function createDictionary (line 48) | static std::string createDictionary(const uint8_t* data, TextIdx sliceLen,
function sieve_generate (line 79) | std::string sieve_generate(size_t dictionary_size_limit, size_t slice_len,
FILE: scripts/dictionary/step-03-validate-bin.py
function check_digest (line 14) | def check_digest(name, expected, actual):
FILE: scripts/dictionary/step-04-generate-java-literals.py
function escape (line 55) | def escape(chars):
FILE: setup.py
function bool_from_environ (line 21) | def bool_from_environ(key):
function get_version (line 35) | def get_version():
class BuildExt (line 51) | class BuildExt(build_ext.build_ext):
method get_source_files (line 54) | def get_source_files(self):
method build_extension (line 60) | def build_extension(self, ext):
Condensed preview — 383 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,227K chars).
[
{
"path": ".bazelignore",
"chars": 62,
"preview": "# Exclude Bazel roots (workspaces)\nc/fuzz\ngo\njava\njs\nresearch\n"
},
{
"path": ".editorconfig",
"chars": 660,
"preview": "# http://editorconfig.org\n# Consistent coding style across different editors.\n\n# Top-most file\nroot = true\n\n# Global sty"
},
{
"path": ".gitattributes",
"chars": 1470,
"preview": "tests/testdata/* binary\n\n# Exclude everything\n**/** export-ignore\n\n# Allowlist some filenames\n.bazelignore !export-ignor"
},
{
"path": ".github/dependabot.yml",
"chars": 281,
"preview": "# Copyright 2023 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or co"
},
{
"path": ".github/workflows/build_test.yml",
"chars": 11832,
"preview": "# Copyright 2021 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or co"
},
{
"path": ".github/workflows/build_test_wasm.yml",
"chars": 1928,
"preview": "# Copyright 2025 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or co"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 2535,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches: [ \"master\" ]\n pull_request:\n # The branches below must be a subset of the "
},
{
"path": ".github/workflows/fuzz.yml",
"chars": 1299,
"preview": "# Copyright 2020 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or co"
},
{
"path": ".github/workflows/lint.yml",
"chars": 1372,
"preview": "# Copyright 2025 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or co"
},
{
"path": ".github/workflows/release.yaml",
"chars": 6620,
"preview": "# Copyright 2023 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or co"
},
{
"path": ".github/workflows/scorecard.yml",
"chars": 3303,
"preview": "# This workflow uses actions that are not certified by GitHub. They are provided\n# by a third-party and are governed by "
},
{
"path": ".gitignore",
"chars": 150,
"preview": "# C\n*.d\n*.o\n*.obj\nbin/\nbuildfiles/\n**/obj/\ndist/\n**/bazel-*\n\n# Python\n__pycache__/\n*.py[cod]\n*.so\n*.egg-info/\n\n# Tests\n*"
},
{
"path": "BUILD.bazel",
"chars": 2783,
"preview": "# Description:\n# Brotli is a generic-purpose lossless compression algorithm.\n\nload(\"@rules_cc//cc:cc_binary.bzl\", \"cc_"
},
{
"path": "CHANGELOG.md",
"chars": 6746,
"preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Change"
},
{
"path": "CMakeLists.txt",
"chars": 14807,
"preview": "# Available CMake versions:\n# - Ubuntu 20.04 LTS : 3.16.3\n# - Solaris 11.4 SRU 15 : 3.15\ncmake_minimum_required(VER"
},
{
"path": "CONTRIBUTING.md",
"chars": 1631,
"preview": "Want to contribute? Great! First, read this page (including the small print at\nthe end).\n\n### Before you contribute\nBefo"
},
{
"path": "LICENSE",
"chars": 1084,
"preview": "Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.\n\nPermission is hereby granted, free of charge, to any person "
},
{
"path": "MANIFEST.in",
"chars": 387,
"preview": "include CONTRIBUTING.md\ninclude c/common/*.c\ninclude c/common/*.h\ninclude c/dec/*.c\ninclude c/dec/*.h\ninclude c/enc/*.c\n"
},
{
"path": "MODULE.bazel",
"chars": 344,
"preview": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for deta"
},
{
"path": "README",
"chars": 650,
"preview": "BROTLI DATA COMPRESSION LIBRARY\n\nBrotli is a generic-purpose lossless compression algorithm that compresses data\nusing a"
},
{
"path": "README.md",
"chars": 4586,
"preview": "<p align=\"center\">\n <img src=\"https://github.com/google/brotli/actions/workflows/build_test.yml/badge.svg\" alt=\"GitHub "
},
{
"path": "SECURITY.md",
"chars": 314,
"preview": "### Reporting\n\nTo report a security issue, please use [https://g.co/vulnz](https://g.co/vulnz).\nWe use g.co/vulnz for ou"
},
{
"path": "c/common/constants.c",
"chars": 619,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/constants.h",
"chars": 7977,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/context.c",
"chars": 7983,
"preview": "#include \"context.h\"\n\n#include \"platform.h\"\n\n/* Common context lookup table for all context modes. */\nconst BROTLI_MODEL"
},
{
"path": "c/common/context.h",
"chars": 4637,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/dictionary.c",
"chars": 1558,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/dictionary.h",
"chars": 1922,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/dictionary_inc.h",
"chars": 470432,
"preview": "static const BROTLI_MODEL(\"small\") uint8_t kBrotliDictionaryData[] = {\n116,105,109,101,100,111,119,110,108,105,102,101,1"
},
{
"path": "c/common/platform.c",
"chars": 465,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/platform.h",
"chars": 23958,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/shared_dictionary.c",
"chars": 17347,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/shared_dictionary_internal.h",
"chars": 2409,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/static_init.h",
"chars": 1996,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/transform.c",
"chars": 10787,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/common/transform.h",
"chars": 3180,
"preview": "/* transforms is a part of ABI, but not API.\n\n It means that there are some functions that are supposed to be in \"comm"
},
{
"path": "c/common/version.h",
"chars": 1723,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/bit_reader.c",
"chars": 2264,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/bit_reader.h",
"chars": 14792,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/decode.c",
"chars": 109313,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/huffman.c",
"chars": 11948,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/huffman.h",
"chars": 4080,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/prefix.c",
"chars": 2529,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/prefix.h",
"chars": 1250,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/prefix_inc.h",
"chars": 30933,
"preview": "const BROTLI_MODEL(\"small\")\nCmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = {\n { 0x00, 0x00, 0, 0x00, 0x0000, 0x000"
},
{
"path": "c/dec/state.c",
"chars": 5871,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/state.h",
"chars": 12452,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/static_init.c",
"chars": 1444,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/dec/static_init.h",
"chars": 840,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/backward_references.c",
"chars": 6521,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/backward_references.h",
"chars": 1206,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/backward_references_hq.c",
"chars": 36740,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/backward_references_hq.h",
"chars": 3773,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/backward_references_inc.h",
"chars": 8181,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/bit_cost.c",
"chars": 1427,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/bit_cost.h",
"chars": 896,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/bit_cost_inc.h",
"chars": 4115,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/block_encoder_inc.h",
"chars": 1137,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2014 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/block_splitter.c",
"chars": 7330,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/block_splitter.h",
"chars": 1626,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/block_splitter_inc.h",
"chars": 18879,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/brotli_bit_stream.c",
"chars": 50915,
"preview": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/brotli_bit_stream.h",
"chars": 3338,
"preview": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/cluster.c",
"chars": 1458,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/cluster.h",
"chars": 997,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/cluster_inc.h",
"chars": 11826,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/command.c",
"chars": 1025,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/command.h",
"chars": 6937,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/compound_dictionary.c",
"chars": 6651,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/compound_dictionary.h",
"chars": 2433,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/compress_fragment.c",
"chars": 32875,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/compress_fragment.h",
"chars": 3571,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/compress_fragment_two_pass.c",
"chars": 26806,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/compress_fragment_two_pass.h",
"chars": 2852,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/dictionary_hash.c",
"chars": 7932,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/dictionary_hash.h",
"chars": 1532,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/dictionary_hash_inc.h",
"chars": 146714,
"preview": "const BROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS] = {\n1002,0,0,0,0,0,0,0,0,68"
},
{
"path": "c/enc/encode.c",
"chars": 78422,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/encoder_dict.c",
"chars": 23378,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/encoder_dict.h",
"chars": 5020,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/entropy_encode.c",
"chars": 14568,
"preview": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/entropy_encode.h",
"chars": 4055,
"preview": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/entropy_encode_static.h",
"chars": 33144,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/fast_log.c",
"chars": 6046,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/fast_log.h",
"chars": 1645,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/find_match_length.h",
"chars": 2167,
"preview": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/hash.h",
"chars": 24304,
"preview": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/hash_base.h",
"chars": 1370,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/hash_composite_inc.h",
"chars": 5097,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2018 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_forgetful_chain_inc.h",
"chars": 11321,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_longest_match64_inc.h",
"chars": 10659,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_longest_match64_simd_inc.h",
"chars": 11839,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_longest_match_inc.h",
"chars": 10593,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_longest_match_quickly_inc.h",
"chars": 9520,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_longest_match_simd_inc.h",
"chars": 11763,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_rolling_inc.h",
"chars": 7226,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2018 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/hash_to_binary_tree_inc.h",
"chars": 13081,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/histogram.c",
"chars": 3261,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/histogram.h",
"chars": 1813,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/histogram_inc.h",
"chars": 1401,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/literal_cost.c",
"chars": 5877,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/literal_cost.h",
"chars": 889,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/matching_tag_mask.h",
"chars": 2343,
"preview": "#ifndef THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n#define THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n\n#include \"../co"
},
{
"path": "c/enc/memory.c",
"chars": 5522,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/memory.h",
"chars": 4296,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/metablock.c",
"chars": 26696,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/metablock.h",
"chars": 4023,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/metablock_inc.h",
"chars": 7636,
"preview": "/* NOLINT(build/header_guard) */\n/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n "
},
{
"path": "c/enc/params.h",
"chars": 1168,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/prefix.h",
"chars": 1942,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/quality.h",
"chars": 7864,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/ringbuffer.h",
"chars": 5967,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/state.h",
"chars": 3078,
"preview": "/* Copyright 2022 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_dict.c",
"chars": 20877,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_dict.h",
"chars": 1215,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_dict_lut.c",
"chars": 7420,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_dict_lut.h",
"chars": 1588,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_dict_lut_inc.h",
"chars": 468804,
"preview": "const BROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS] = {\n1,0,0,0,0,0,0,"
},
{
"path": "c/enc/static_init.c",
"chars": 1780,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_init.h",
"chars": 840,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/static_init_lazy.cc",
"chars": 1095,
"preview": "#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n#include \"static_init.h\"\n\n#if (BROTLI_STATIC_INIT != "
},
{
"path": "c/enc/utf8_util.c",
"chars": 2275,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/utf8_util.h",
"chars": 878,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/enc/write_bits.h",
"chars": 2835,
"preview": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/fuzz/.bazelrc",
"chars": 1026,
"preview": "# Force the use of Clang for C++ builds.\nbuild --action_env=CC=clang\nbuild --action_env=CXX=clang++\n\n# Define the --conf"
},
{
"path": "c/fuzz/BUILD.bazel",
"chars": 338,
"preview": "load(\"@rules_fuzzing//fuzzing:cc_defs.bzl\", \"cc_fuzz_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlice"
},
{
"path": "c/fuzz/MODULE.bazel",
"chars": 502,
"preview": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for deta"
},
{
"path": "c/fuzz/decode_fuzzer.c",
"chars": 1837,
"preview": "// Copyright 2015 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
},
{
"path": "c/fuzz/run_decode_fuzzer.c",
"chars": 1073,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/fuzz/test_fuzzer.sh",
"chars": 703,
"preview": "#!/usr/bin/env bash\nset -e\n\nexport CC=${CC:-cc}\n\nBROTLI=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )/../..\" && pwd )\"\nSRC=$B"
},
{
"path": "c/include/brotli/decode.h",
"chars": 16759,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/include/brotli/encode.h",
"chars": 20068,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/include/brotli/port.h",
"chars": 11439,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/include/brotli/shared_dictionary.h",
"chars": 3535,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/include/brotli/types.h",
"chars": 2651,
"preview": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/tools/brotli.c",
"chars": 52033,
"preview": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "c/tools/brotli.md",
"chars": 4028,
"preview": "# NAME\n\nbrotli(1) -- brotli, brcat, unbrotli - compress or decompress files\n\n# SYNOPSIS\n\n`brotli` [*OPTION|FILE*]...\n\n`b"
},
{
"path": "csharp/brotlidec.Tests.csproj",
"chars": 611,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net9.0</TargetFramework>\n <EnableDefaultCom"
},
{
"path": "csharp/brotlidec.csproj",
"chars": 308,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net9.0</TargetFramework>\n <EnableDefaultCom"
},
{
"path": "csharp/injected_code.txt",
"chars": 979,
"preview": "// <{[INJECTED CODE]}>\n\t\tpublic override bool CanRead {\n\t\t\tget {return true;}\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tg"
},
{
"path": "csharp/org/brotli/dec/BitReader.cs",
"chars": 7676,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/BitReaderTest.cs",
"chars": 901,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/BrotliInputStream.cs",
"chars": 6981,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/BrotliRuntimeException.cs",
"chars": 546,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Context.cs",
"chars": 7279,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Decode.cs",
"chars": 34706,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/DecodeTest.cs",
"chars": 8368,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Dictionary.cs",
"chars": 243559,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/DictionaryTest.cs",
"chars": 897,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Huffman.cs",
"chars": 4529,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/HuffmanTreeGroup.cs",
"chars": 1743,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/IntReader.cs",
"chars": 1147,
"preview": "/* Copyright 2017 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Prefix.cs",
"chars": 1738,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/RunningState.cs",
"chars": 837,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/State.cs",
"chars": 4422,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/SynthTest.cs",
"chars": 402168,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Transform.cs",
"chars": 14446,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/TransformTest.cs",
"chars": 2856,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/Utils.cs",
"chars": 1979,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/org/brotli/dec/WordTransformType.cs",
"chars": 1633,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or cop"
},
{
"path": "csharp/sharpen.cfg",
"chars": 640,
"preview": "-pascalCase+\n-nativeTypeSystem\n-separateInterfaceConstants\n-maxColumns 240\n-copySharpenCs false\n-sharpenNamespace noname"
},
{
"path": "csharp/transpile.sh",
"chars": 2943,
"preview": "if ! which mvn >/dev/null; then\n echo -e '\\033[01;31mMaven is not installed / configured.\\033[00m'\n exit 1\nfi\n\nif ! wh"
},
{
"path": "docs/brotli.1",
"chars": 5130,
"preview": ".\\\" Automatically generated by Pandoc 2.7.3\n.\\\"\n.TH \"brotli\" \"1\" \"August 14 2021\" \"brotli 1.0.9\" \"User Manual\"\n.hy\n.SH N"
},
{
"path": "docs/constants.h.3",
"chars": 1767,
"preview": ".TH \"constants.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\nconstants.h \\- Common constants used in d"
},
{
"path": "docs/decode.h.3",
"chars": 17452,
"preview": ".TH \"decode.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\ndecode.h \\- API for Brotli decompression\\&. "
},
{
"path": "docs/encode.h.3",
"chars": 24310,
"preview": ".TH \"encode.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\nencode.h \\- API for Brotli compression\\&. \n"
},
{
"path": "docs/types.h.3",
"chars": 3081,
"preview": ".TH \"types.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\ntypes.h \\- Common types used in decoder and e"
},
{
"path": "fetch-spec/shared-brotli-fetch-spec.txt",
"chars": 6071,
"preview": "[DRAFT]\n\nIntroduction:\n\nThis document is a draft proposal for Shard Brotli dictionaries in the fetch spec\n(https://fetch"
},
{
"path": "go/BUILD.bazel",
"chars": 164,
"preview": "# Description:\n# brotli is a pure Go implementation of Brotli decoder.\n# cbrotli is a CGo wrapper for Brotli, a gene"
},
{
"path": "go/MODULE.bazel",
"chars": 572,
"preview": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for deta"
},
{
"path": "go/brotli/BUILD.bazel",
"chars": 561,
"preview": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\n"
},
{
"path": "go/brotli/brotli_test.go",
"chars": 4387,
"preview": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/brotli/decode.go",
"chars": 194233,
"preview": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/brotli/go.mod",
"chars": 51,
"preview": "module github.com/google/brotli/go/brotli\n\ngo 1.21\n"
},
{
"path": "go/brotli/reader.go",
"chars": 3377,
"preview": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/brotli/synth_test.go",
"chars": 114673,
"preview": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/cbrotli/BUILD.bazel",
"chars": 638,
"preview": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\n"
},
{
"path": "go/cbrotli/cbrotli_test.go",
"chars": 10947,
"preview": "// Copyright 2016 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/cbrotli/cgo.go",
"chars": 326,
"preview": "// Copyright 2017 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/cbrotli/go.mod",
"chars": 52,
"preview": "module github.com/google/brotli/go/cbrotli\n\ngo 1.21\n"
},
{
"path": "go/cbrotli/reader.go",
"chars": 5701,
"preview": "// Copyright 2016 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/cbrotli/synth_test.go",
"chars": 114676,
"preview": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "go/cbrotli/writer.go",
"chars": 6346,
"preview": "// Copyright 2016 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail o"
},
{
"path": "java/BUILD.bazel",
"chars": 1755,
"preview": "load(\"@rules_cc//cc:cc_binary.bzl\", \"cc_binary\")\n\npackage(\n default_visibility = [\"//visibility:public\"],\n)\n\ngenrule("
},
{
"path": "java/MODULE.bazel",
"chars": 704,
"preview": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for deta"
},
{
"path": "java/org/brotli/common/BUILD.bazel",
"chars": 275,
"preview": "# Description:\n# Java port of Brotli.\n\nload(\"@rules_java//java:java_library.bzl\", \"java_library\")\n\npackage(default_vis"
},
{
"path": "java/org/brotli/common/SharedDictionaryType.java",
"chars": 436,
"preview": "/* Copyright 2018 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/BUILD.bazel",
"chars": 1292,
"preview": "# Description:\n# Java port of Brotli decoder.\n\nload(\"@rules_java//java:java_library.bzl\", \"java_library\")\nload(\":build"
},
{
"path": "java/org/brotli/dec/BitReader.java",
"chars": 9887,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/BitReaderTest.java",
"chars": 1538,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/BrotliError.java",
"chars": 4143,
"preview": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/BrotliInputStream.java",
"chars": 5280,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/BrotliRuntimeException.java",
"chars": 459,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/CompoundDictionaryTest.java",
"chars": 2183,
"preview": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/Context.java",
"chars": 1597,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/Decode.java",
"chars": 54490,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/DecodeTest.java",
"chars": 6822,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/Decoder.java",
"chars": 2053,
"preview": "package org.brotli.dec;\n\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nim"
},
{
"path": "java/org/brotli/dec/Dictionary.java",
"chars": 3554,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
},
{
"path": "java/org/brotli/dec/DictionaryData.java",
"chars": 136606,
"preview": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n Distributed under MIT license.\n See file LICENSE for detail or "
}
]
// ... and 183 more files (download for full content)
About this extraction
This page contains the full source code of the google/brotli GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 383 files (43.0 MB), approximately 1.7M tokens, and a symbol index with 2139 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.