diff --git a/.github/workflows/backend-benchmarks.yml b/.github/workflows/backend-benchmarks.yml index b9a5d3de3..ca815a405 100644 --- a/.github/workflows/backend-benchmarks.yml +++ b/.github/workflows/backend-benchmarks.yml @@ -1,7 +1,7 @@ name: benchmarks on: [push, pull_request, workflow_dispatch] env: - C_KZG_4844_GIT_HASH: '5115420ba3f919f5501155ba18633667001b6a07' + C_KZG_4844_GIT_HASH: '1bccee0878ffc80efe8741afdb5793ef9105aa35' jobs: benchmarks: @@ -9,9 +9,9 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-11] + os: [ubuntu-latest, windows-latest, macos-latest] # Excluding mcl for now due to they have different project layout - backend: [blst, zkcrypto, arkworks, constantine] + backend: [blst, zkcrypto, arkworks, arkworks3, constantine] include: # Setup exec_once_per_backend flag - os: ubuntu-latest @@ -23,6 +23,8 @@ jobs: support_ckzg: true - backend: arkworks support_ckzg: true + - backend: arkworks3 + support_ckzg: true - backend: constantine support_ckzg: true @@ -34,9 +36,9 @@ jobs: java-version: "11" - if: matrix.backend == 'constantine' - uses: jiro4989/setup-nim-action@v1 + uses: jiro4989/setup-nim-action@v2 with: - nim-version: '1.6.14' + nim-version: '2.0.2' # Install constantine backend deps - name: "constantine - install deps" diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index a0188946f..e9554b60c 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -1,41 +1,91 @@ name: tests on: [push, pull_request, workflow_dispatch] env: - C_KZG_4844_GIT_HASH: '5115420ba3f919f5501155ba18633667001b6a07' + C_KZG_4844_GIT_HASH: '1bccee0878ffc80efe8741afdb5793ef9105aa35' jobs: - tests: + kzg_ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + # Check kzg clippy for default msm backend + - name: "kzg clippy" + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path kzg/Cargo.toml --all-targets --no-default-features --features=parallel,std,rand -- -D warnings + + # Check kzg clippy for BGMW msm backend + - name: "kzg clippy (bgmw)" + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path kzg/Cargo.toml --all-targets --features=parallel,std,rand,bgmw -- -D warnings + + # Check kzg clippy for arkmsm backend + - name: "kzg clippy (arkmsm)" + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path kzg/Cargo.toml --all-targets --features=parallel,std,rand,arkmsm -- -D warnings + + # Check kzg clippy for sppark backend + - name: "kzg clippy (sppark)" + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path kzg/Cargo.toml --all-targets --features=parallel,std,rand,sppark -- -D warnings + + # Check kzg formatting + - name: "kzg format" + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --manifest-path kzg/Cargo.toml -- --check + + # Check kzg-bench clippy + - name: "kzg-bench clippy" + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path kzg-bench/Cargo.toml --all-targets --all-features -- -D warnings + + # Check kzg-bench formatting + - name: "kzg-bench format" + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --manifest-path kzg-bench/Cargo.toml -- --check + + backend_ci: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-11] + os: [ubuntu-latest, windows-latest, macos-latest] # Excluding mcl for now due to they have different project layout - backend: [blst, zkcrypto, arkworks, constantine] + backend: [blst, zkcrypto, arkworks, arkworks3, constantine] include: - # Set default clippy flag to all-features - - clippy-flag: --all-features + # Set default clippy flag + - clippy-flag: --features=default,std,rand,parallel # Setup exec_once_per_backend flag - os: ubuntu-latest exec_once_per_backend: true - # Setup exec_once_overall flag - - os: ubuntu-latest - backend: blst - exec_once_overall: true # Select backends which support wasm & which support ckzg drop-in - backend: blst support_wasm: true support_ckzg: true - # Override all-features flag for blst, due to incompatibility between portable & force-adx - clippy-flag: --features=default,std,rand,parallel - backend: zkcrypto support_wasm: true support_ckzg: true - - clippy-flag: --features=default,std,rand,parallel + clippy-flag: --all-features - backend: arkworks support_wasm: true support_ckzg: true + - backend: arkworks3 + support_wasm: true + support_ckzg: true - backend: constantine # FIXME: Check for wasm support support_wasm: false @@ -48,7 +98,7 @@ jobs: distribution: "temurin" java-version: "11" - - uses: jiro4989/setup-nim-action@v1 + - uses: jiro4989/setup-nim-action@v2 with: nim-version: '2.0.2' @@ -73,38 +123,6 @@ jobs: libgmp-dev \ llvm - # Check kzg clippy - - name: "kzg clippy" - if: matrix.exec_once_overall - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --manifest-path kzg/Cargo.toml --all-targets --all-features -- -D warnings - - # Check kzg formatting - - name: "kzg format" - uses: actions-rs/cargo@v1 - if: matrix.exec_once_overall - with: - command: fmt - args: --manifest-path kzg/Cargo.toml -- --check - - # Check kzg-bench clippy - - name: "kzg-bench clippy" - if: matrix.exec_once_overall - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --manifest-path kzg-bench/Cargo.toml --all-targets --all-features -- -D warnings - - # Check kzg-bench formatting - - name: "kzg-bench format" - uses: actions-rs/cargo@v1 - if: matrix.exec_once_overall - with: - command: fmt - args: --manifest-path kzg-bench/Cargo.toml -- --check - # Check backend clippy - name: "${{ matrix.backend }} clippy" if: matrix.exec_once_per_backend diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 11f7b21d3..e07496c33 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ on: workflow_dispatch: env: - C_KZG_4844_GIT_HASH: '5115420ba3f919f5501155ba18633667001b6a07' + C_KZG_4844_GIT_HASH: '1bccee0878ffc80efe8741afdb5793ef9105aa35' jobs: release-build: @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - backend: [blst, zkcrypto, arkworks, constantine] + backend: [blst, zkcrypto, arkworks, arkworks3, constantine] target: [windows, linux] include: # Set target-name for target builds @@ -31,9 +31,9 @@ jobs: - uses: actions/checkout@v2 - if: matrix.backend == 'constantine' - uses: jiro4989/setup-nim-action@v1 + uses: jiro4989/setup-nim-action@v2 with: - nim-version: '1.6.14' + nim-version: '2.0.2' # Install constantine backend deps - name: "constantine - install deps" diff --git a/.gitignore b/.gitignore index 52e218427..d9f992089 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea .directory target +benchmark_script/output \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 23307ecaa..b793752d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,6 +13,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.6" @@ -46,16 +57,42 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +[[package]] +name = "ark-bls12-381" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65be532f9dd1e98ad0150b037276cde464c6f371059e6dd02c0222395761f6aa" +dependencies = [ + "ark-ec 0.3.0", + "ark-ff 0.3.0", + "ark-std 0.3.0", +] + [[package]] name = "ark-bls12-381" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ec" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea978406c4b1ca13c2db2373b05cc55429c3575b8b21f1b9ee859aa5b03dd42" +dependencies = [ + "ark-ff 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-traits", + "rayon", + "zeroize", ] [[package]] @@ -64,10 +101,10 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools", @@ -76,16 +113,35 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rayon", + "rustc_version 0.3.3", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "digest 0.10.7", "itertools", @@ -93,10 +149,20 @@ dependencies = [ "num-traits", "paste", "rayon", - "rustc_version", + "rustc_version 0.4.0", "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -107,6 +173,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -120,32 +198,68 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-poly" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0f78f47537c2f15706db7e98fe64cc1711dbf9def81218194e17239e53e5aa" +dependencies = [ + "ark-ff 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "hashbrown 0.11.2", + "rayon", +] + [[package]] name = "ark-poly" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "rayon", ] +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-serialize-derive 0.3.0", + "ark-std 0.3.0", + "digest 0.9.0", +] + [[package]] name = "ark-serialize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive", - "ark-std", + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", "digest 0.10.7", "num-bigint 0.4.4", ] +[[package]] +name = "ark-serialize-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd4e5f0bf8285d5ed538d27fab7411f3e297908fd93c62195de8bee3f199e82" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-serialize-derive" version = "0.4.2" @@ -157,6 +271,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", + "rayon", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -623,7 +748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -717,13 +842,22 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.8", +] + [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.8.6", ] [[package]] @@ -753,6 +887,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "impl-codec" version = "0.6.0" @@ -791,7 +934,7 @@ checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi 0.3.3", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1019,6 +1162,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pest" +version = "2.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + [[package]] name = "plotters" version = "0.3.5" @@ -1196,12 +1350,32 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" name = "rust-kzg-arkworks" version = "0.1.0" dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", + "ark-bls12-381 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "blst", + "criterion 0.5.1", + "hex", + "kzg", + "kzg-bench", + "libc", + "rand", + "rayon", +] + +[[package]] +name = "rust-kzg-arkworks3" +version = "0.1.0" +dependencies = [ + "ark-bls12-381 0.3.0", + "ark-ec 0.3.0", + "ark-ff 0.3.0", + "ark-poly 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", "blst", "criterion 0.5.1", "hex", @@ -1210,6 +1384,43 @@ dependencies = [ "libc", "rand", "rayon", + "rust-kzg-arkworks3-sppark", + "rust-kzg-arkworks3-sppark-wlc", +] + +[[package]] +name = "rust-kzg-arkworks3-sppark" +version = "0.1.0" +dependencies = [ + "ark-bls12-381 0.3.0", + "ark-ec 0.3.0", + "ark-ff 0.3.0", + "ark-std 0.3.0", + "blst", + "cc", + "criterion 0.5.1", + "kzg", + "rand", + "sppark", + "which", +] + +[[package]] +name = "rust-kzg-arkworks3-sppark-wlc" +version = "0.1.0" +dependencies = [ + "ark-bls12-381 0.3.0", + "ark-ec 0.3.0", + "ark-ff 0.3.0", + "ark-std 0.3.0", + "blst", + "cc", + "criterion 0.3.6", + "rand", + "rand_chacha", + "rayon", + "sppark_bal", + "which", ] [[package]] @@ -1225,9 +1436,24 @@ dependencies = [ "once_cell", "rand", "rayon", + "rust-kzg-blst-sppark", "smallvec", ] +[[package]] +name = "rust-kzg-blst-sppark" +version = "0.1.0" +dependencies = [ + "blst", + "cc", + "criterion 0.5.1", + "kzg", + "rand", + "rust-kzg-blst", + "sppark", + "which", +] + [[package]] name = "rust-kzg-constantine" version = "0.1.0" @@ -1298,13 +1524,22 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver", + "semver 1.0.20", ] [[package]] @@ -1317,7 +1552,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1341,12 +1576,30 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + [[package]] name = "semver" version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.190" @@ -1449,6 +1702,20 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +[[package]] +name = "sppark" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb266b15daead53670d477d7e136b8fc92d46e31bb9007ac46d304df23689a4b" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "sppark_bal" +version = "0.1.0" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1498,6 +1765,26 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "thiserror" +version = "1.0.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3de26b0965292219b4287ff031fcba86837900fe9cd2b34ea8ad893c0953d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268026685b2be38d7103e9e507c938a1fcb3d7e6eb15e87870b617bf37b6d581" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "threadpool" version = "1.8.1" @@ -1540,6 +1827,12 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + [[package]] name = "uint" version = "0.9.5" @@ -1656,6 +1949,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1693,7 +1998,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", ] [[package]] @@ -1702,13 +2016,29 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -1717,42 +2047,90 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + [[package]] name = "winnow" version = "0.5.18" diff --git a/Cargo.toml b/Cargo.toml index 38ae210d9..aac47a391 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,11 @@ resolver = "2" members = [ "arkworks", + "arkworks3", + "arkworks3-sppark", + "arkworks3-sppark-wlc", "blst", + "blst-sppark", "kzg", "kzg-bench", "mcl/kzg", diff --git a/arkworks/go.patch b/arkworks/go.patch index 1d73a9330..040b14478 100644 --- a/arkworks/go.patch +++ b/arkworks/go.patch @@ -1,14 +1,14 @@ -From 90e9a518ca03716ef1d9d77e263db25b56030867 Mon Sep 17 00:00:00 2001 +From d0e5b619807c0b9e936ce178b2a8e019da020a14 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:09:11 +0300 -Subject: [PATCH] Patch go binding +Date: Thu, 16 May 2024 13:26:25 +0300 +Subject: [PATCH] Patch go bindings --- bindings/go/main.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bindings/go/main.go b/bindings/go/main.go -index bdd5385..155fc81 100644 +index bf344a1..4f1c0f4 100644 --- a/bindings/go/main.go +++ b/bindings/go/main.go @@ -2,7 +2,15 @@ package ckzg4844 @@ -29,8 +29,8 @@ index bdd5385..155fc81 100644 import ( @@ -11,9 +19,6 @@ import ( + "errors" "fmt" - "strings" "unsafe" - - // So its functions are available during compilation. @@ -39,5 +39,5 @@ index bdd5385..155fc81 100644 const ( -- -2.34.1 +2.36.2.windows.1 diff --git a/arkworks/nim.patch b/arkworks/nim.patch index 3461401ff..7e005ed8b 100644 --- a/arkworks/nim.patch +++ b/arkworks/nim.patch @@ -1,6 +1,6 @@ -From f34d21606bb5bc3dee4e7a643d7ab89a2c994fef Mon Sep 17 00:00:00 2001 +From 118b0f6c3f9bd5e7335129eea28c713b8b2856dd Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:26:35 +0200 +Date: Thu, 16 May 2024 13:29:29 +0300 Subject: [PATCH] Patch nim bindings --- @@ -8,7 +8,7 @@ Subject: [PATCH] Patch nim bindings 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bindings/nim/kzg_abi.nim b/bindings/nim/kzg_abi.nim -index 36e4ba1..74d0ebc 100644 +index 9162588..529e09a 100644 --- a/bindings/nim/kzg_abi.nim +++ b/bindings/nim/kzg_abi.nim @@ -10,6 +10,7 @@ from os import DirSep, AltSep @@ -28,8 +28,8 @@ index 36e4ba1..74d0ebc 100644 +{.passl: "-l:rust_kzg_arkworks.a" .} +{.passl: "-lm" .} - {.passc: "-I" & bindingsPath .} - {.passc: "-I" & srcPath .} + {.passc: "-I" & escape(bindingsPath) .} + {.passc: "-I" & escape(srcPath) .} -- -2.34.1 +2.36.2.windows.1 diff --git a/arkworks/nodejs.patch b/arkworks/nodejs.patch index fc6fa518a..b704dfda8 100644 --- a/arkworks/nodejs.patch +++ b/arkworks/nodejs.patch @@ -1,27 +1,14 @@ -From 954c55533e265f32eabe0dc863b1add2478bb570 Mon Sep 17 00:00:00 2001 +From cb0c44c9df8a7a6a92ed5b4f1acb771532812257 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:02:51 +0300 -Subject: [PATCH] Patch nodejs binding +Date: Thu, 16 May 2024 14:19:08 +0300 +Subject: [PATCH] Patch nodejs bindings --- - bindings/node.js/Makefile | 1 - - bindings/node.js/binding.gyp | 31 +++---------------------------- - 2 files changed, 3 insertions(+), 29 deletions(-) + bindings/node.js/binding.gyp | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) -diff --git a/bindings/node.js/Makefile b/bindings/node.js/Makefile -index 17850ec..efc9961 100644 ---- a/bindings/node.js/Makefile -+++ b/bindings/node.js/Makefile -@@ -31,7 +31,6 @@ build: install clean - @# Prepare the dependencies directory - @mkdir -p deps/c-kzg - @cp -r ../../blst deps -- @cp ../../src/c_kzg_4844.c deps/c-kzg - @cp ../../src/c_kzg_4844.h deps/c-kzg - @# Build the bindings - @$(YARN) node-gyp --loglevel=warn configure diff --git a/bindings/node.js/binding.gyp b/bindings/node.js/binding.gyp -index 5ac368e..6cde37f 100644 +index c42bb8f..e781e61 100644 --- a/bindings/node.js/binding.gyp +++ b/bindings/node.js/binding.gyp @@ -3,9 +3,7 @@ @@ -35,40 +22,27 @@ index 5ac368e..6cde37f 100644 ], "include_dirs": [ "<(module_root_dir)/deps/blst/bindings", -@@ -16,31 +14,8 @@ +@@ -16,9 +14,11 @@ "__BLST_PORTABLE__", - "NAPI_DISABLE_CPP_EXCEPTIONS" + "NAPI_CPP_EXCEPTIONS" ], -- "conditions": [ -- ["OS!='win'", { -- "sources": ["deps/blst/build/assembly.S"], -- "cflags_cc": [ -- "-std=c++17", -- "-fPIC" -- ] -- }], -- ["OS=='win'", { -- "sources": ["deps/blst/build/win64/*-x86_64.asm"], -- "defines": [ -- "_CRT_SECURE_NO_WARNINGS", -- ], -- "msbuild_settings": { -- "ClCompile": { -- "AdditionalOptions": ["/std:c++17"] -- } -- } -- }], -- ["OS=='mac'", { -- "xcode_settings": { -- "CLANG_CXX_LIBRARY": "libc++", -- "MACOSX_DEPLOYMENT_TARGET": "13.0" -- } -- }] + "libraries": [ + "<(module_root_dir)/../../../../target/release/rust_kzg_arkworks.a" - ] - } - ] ++ ], + "conditions": [ + ["OS!='win'", { +- "sources": ["deps/blst/build/assembly.S"], + "cflags_cc": [ + "-fexceptions", + "-std=c++17", +@@ -26,7 +26,6 @@ + ] + }], + ["OS=='win'", { +- "sources": ["deps/blst/build/win64/*-x86_64.asm"], + "defines": [ + "_CRT_SECURE_NO_WARNINGS", + "_HAS_EXCEPTIONS=1" -- -2.34.1 +2.36.2.windows.1 diff --git a/arkworks/python.patch b/arkworks/python.patch index 4fc265128..54c736617 100644 --- a/arkworks/python.patch +++ b/arkworks/python.patch @@ -1,48 +1,30 @@ -From a8ff3fe1e4372380f15769bbb8490b0089aa2928 Mon Sep 17 00:00:00 2001 +From 57a93a8db7319a368a25d470aa074e3af5ecb4b6 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 13:51:37 +0300 -Subject: [PATCH] Patch python binding +Date: Thu, 16 May 2024 12:56:53 +0300 +Subject: [PATCH] Patch python bindings --- - bindings/python/Makefile | 5 +---- - bindings/python/setup.py | 6 +++--- - 2 files changed, 4 insertions(+), 7 deletions(-) + setup.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -diff --git a/bindings/python/Makefile b/bindings/python/Makefile -index c6bd222..99d6501 100644 ---- a/bindings/python/Makefile -+++ b/bindings/python/Makefile -@@ -1,11 +1,8 @@ - .PHONY: all - all: install test - --../../src/c_kzg_4844.o: -- make -C../../src c_kzg_4844.o -- - .PHONY: install --install: setup.py ckzg.c ../../src/c_kzg_4844.o -+install: setup.py ckzg.c - python3 setup.py install - - .PHONY: test -diff --git a/bindings/python/setup.py b/bindings/python/setup.py -index b072833..db37db4 100644 ---- a/bindings/python/setup.py -+++ b/bindings/python/setup.py -@@ -8,10 +8,10 @@ def main(): +diff --git a/setup.py b/setup.py +index 42d4c36..f982863 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,10 +35,10 @@ def main(): ext_modules=[ Extension( "ckzg", -- sources=["ckzg.c", "../../src/c_kzg_4844.c"], -+ sources=["ckzg.c"], - include_dirs=["../../inc", "../../src"], -- library_dirs=["../../lib"], -- libraries=["blst"])]) -+ library_dirs=["../../lib", "../../../../target/release"], -+ libraries=[":rust_kzg_arkworks.a"])]) - - if __name__ == "__main__": - main() +- sources=["bindings/python/ckzg.c", "src/c_kzg_4844.c"], ++ sources=["bindings/python/ckzg.c"], + include_dirs=["inc", "src"], +- library_dirs=["lib"], +- libraries=["blst"] ++ library_dirs=["lib", "../../target/release"], ++ libraries=[":rust_kzg_arkworks.a"] + ) + ], + cmdclass={ -- -2.34.1 +2.36.2.windows.1 diff --git a/arkworks/rust.patch b/arkworks/rust.patch index b119766a4..5d8674fe7 100644 --- a/arkworks/rust.patch +++ b/arkworks/rust.patch @@ -1,30 +1,36 @@ -From e7d529a9ba017de920555ae9b4ab05a18174cdcf Mon Sep 17 00:00:00 2001 +From de2366bc220f4773271f54b040bb81c297edab1a Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:42:12 +0200 +Date: Sat, 6 Jul 2024 16:06:23 +0300 Subject: [PATCH] Patch rust bindings --- - bindings/rust/Cargo.toml | 1 + - bindings/rust/build.rs | 22 +++------------------- - 2 files changed, 4 insertions(+), 19 deletions(-) + Cargo.toml | 1 + + bindings/rust/build.rs | 41 +++-------------------------------------- + 2 files changed, 4 insertions(+), 38 deletions(-) -diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml -index 98bd814..9391f27 100644 ---- a/bindings/rust/Cargo.toml -+++ b/bindings/rust/Cargo.toml +diff --git a/Cargo.toml b/Cargo.toml +index f355f8c..7be1795 100644 +--- a/Cargo.toml ++++ b/Cargo.toml @@ -1,3 +1,4 @@ +[workspace] [package] name = "c-kzg" - version = "0.1.0" + version = "1.0.2" diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs -index 5148333..ec42e21 100644 +index cd07487..0e9d7f6 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs -@@ -15,24 +15,7 @@ fn main() { - - let c_src_dir = root_dir.join("src"); +@@ -3,46 +3,11 @@ use std::{env, path::PathBuf}; + fn main() { + let root_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); +- // Obtain the header files of blst +- let blst_base_dir = root_dir.join("blst"); +- let blst_headers_dir = blst_base_dir.join("bindings"); +- +- let c_src_dir = root_dir.join("src"); +- - let mut cc = cc::Build::new(); - - #[cfg(all(windows, target_env = "msvc"))] @@ -41,22 +47,30 @@ index 5148333..ec42e21 100644 - cc.include(blst_headers_dir.clone()); - cc.warnings(false); - cc.file(c_src_dir.join("c_kzg_4844.c")); +- #[cfg(not(debug_assertions))] +- cc.define("NDEBUG", None); - - cc.try_compile("ckzg").expect("Failed to compile ckzg"); +- +- #[cfg(feature = "generate-bindings")] +- { +- let header_path = c_src_dir.join("c_kzg_4844.h"); +- let bindings_out_path = root_dir.join("bindings/rust/src/bindings/generated.rs"); +- make_bindings( +- header_path.to_str().expect("valid header path"), +- blst_headers_dir.to_str().expect("valid blst header path"), +- &bindings_out_path, +- ); +- } + let rust_kzg_target_dir = root_dir.join("../../target/release/"); - let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); - let bindings_out_path = out_dir.join("generated.rs"); -@@ -46,7 +29,8 @@ fn main() { - ); - // Finally, tell cargo this provides ckzg/ckzg_min - println!("cargo:rustc-link-lib=ckzg"); + println!("cargo:rustc-link-search={}", rust_kzg_target_dir.display()); + println!("cargo:rustc-link-arg=-l:rust_kzg_arkworks.a"); } - fn make_bindings

(header_path: &str, blst_headers_dir: &str, bindings_out_path: P) + #[cfg(feature = "generate-bindings")] -- -2.34.1 +2.45.2.windows.1 diff --git a/arkworks/src/fft_g1.rs b/arkworks/src/fft_g1.rs index 530a48db8..9d2911545 100644 --- a/arkworks/src/fft_g1.rs +++ b/arkworks/src/fft_g1.rs @@ -11,6 +11,8 @@ use kzg::{Fr as KzgFr, G1Mul}; use kzg::{FFTG1, G1}; use std::ops::MulAssign; +extern crate alloc; + pub fn g1_linear_combination( out: &mut ArkG1, points: &[ArkG1], diff --git a/arkworks/src/kzg_types.rs b/arkworks/src/kzg_types.rs index 1d77111b3..bf400f03c 100644 --- a/arkworks/src/kzg_types.rs +++ b/arkworks/src/kzg_types.rs @@ -346,31 +346,33 @@ impl G1 for ArkG1 { self.0.eq(&b.0) } - const ZERO: ArkG1 = ArkG1::from_blst_p1(blst_p1 { - x: blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }, - y: blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }, - z: blst_fp { - l: [0, 0, 0, 0, 0, 0], - }, - }); + fn zero() -> ArkG1 { + ArkG1::from_blst_p1(blst_p1 { + x: blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + y: blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + z: blst_fp { + l: [0, 0, 0, 0, 0, 0], + }, + }) + } fn add_or_dbl_assign(&mut self, b: &Self) { self.0 += b.0; @@ -856,18 +858,24 @@ impl G1Fp for ArkFp { self.0 += b.0; } - const ZERO: Self = Self(ArkFpInt::ZERO); - const ONE: Self = Self(ArkFpInt::ONE); - const BLS12_381_RX_P: Self = Self(blst_fp_into_pc_fq(&blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - })); + fn zero() -> Self { + Self(ArkFpInt::ZERO) + } + fn one() -> Self { + Self(ArkFpInt::ONE) + } + fn bls12_381_rx_p() -> Self { + Self(blst_fp_into_pc_fq(&blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + })) + } } impl G1GetFp for ArkG1 { @@ -960,8 +968,8 @@ impl G1AffineTrait for ArkG1Affine { fn zero() -> Self { Self { aff: G1Affine { - x: ArkFp::ZERO.0, - y: ArkFp::ZERO.0, + x: ArkFp::zero().0, + y: ArkFp::zero().0, infinity: true, }, } diff --git a/arkworks3-sppark-wlc/Cargo.toml b/arkworks3-sppark-wlc/Cargo.toml new file mode 100644 index 000000000..785d3ce14 --- /dev/null +++ b/arkworks3-sppark-wlc/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "rust-kzg-arkworks3-sppark-wlc" +version = "0.1.0" +edition = "2018" + +[features] +# By default, compile with ADX extension if the host supports it. +# Binary can be executed on systems similar to the host. +default = [ "quiet" ] +# Compile in portable mode, without ISA extensions. +# Binary can be executed on all systems. +portable = [ "blst/portable" ] +# Enable ADX even if the host CPU doesn't support it. +# Binary can be executed on Broadwell+ and Ryzen+ systems. +force-adx = [ "blst/force-adx" ] +bls12_381 = ["ark-bls12-381/curve"] +quiet = [] + +[dependencies] +blst = "0.3.11" +sppark_bal = { path = "sppark/rust" } +rand = "^0" +rand_chacha = "^0" +ark-std = "0.3.0" +ark-ff = "0.3.0" +ark-ec = { version = "0.3.0", features = [ "parallel" ] } +ark-bls12-381 = { version = "0.3.0" } + +[build-dependencies] +cc = "^1.0.70" +which = "^4.0" + +[dev-dependencies] +criterion = { version = "0.3", features = [ "html_reports" ] } +rayon = "1.5" + +[[bench]] +name = "msm" +harness = false diff --git a/arkworks3-sppark-wlc/LICENSE-APACHE b/arkworks3-sppark-wlc/LICENSE-APACHE new file mode 100644 index 000000000..21dd8f04e --- /dev/null +++ b/arkworks3-sppark-wlc/LICENSE-APACHE @@ -0,0 +1,206 @@ +This GPU implemetation of MSM is developed by Tao Lu with the template from +[the reference](https://github.com/z-prize/test-msm-gpu) provided by ZPrize. + +Copyright (c) 2022 Tao Lu and contributors to [the reference](https://github.com/z-prize/test-msm-gpu). + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/arkworks3-sppark-wlc/LICENSE-MIT b/arkworks3-sppark-wlc/LICENSE-MIT new file mode 100644 index 000000000..8fc4aab53 --- /dev/null +++ b/arkworks3-sppark-wlc/LICENSE-MIT @@ -0,0 +1,24 @@ +This GPU implemetation of MSM is developed by Tao Lu with the template from +[the reference](https://github.com/z-prize/test-msm-gpu) provided by ZPrize. + +Copyright (c) 2022 Tao Lu and contributors to [the reference](https://github.com/z-prize/test-msm-gpu). + +All files, with the exceptions below, are released under the MIT License: + + 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. \ No newline at end of file diff --git a/arkworks3-sppark-wlc/benches/msm.rs b/arkworks3-sppark-wlc/benches/msm.rs new file mode 100644 index 000000000..0afde94a5 --- /dev/null +++ b/arkworks3-sppark-wlc/benches/msm.rs @@ -0,0 +1,39 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use criterion::{criterion_group, criterion_main, Criterion}; + +use ark_bls12_381::G1Affine; +use ark_ff::BigInteger256; + +use std::str::FromStr; + +use rust_kzg_arkworks3_sppark_wlc::*; + +fn criterion_benchmark(c: &mut Criterion) { + let bench_npow = std::env::var("BENCH_NPOW").unwrap_or("20".to_string()); + let npoints_npow = i32::from_str(&bench_npow).unwrap(); + + let batches = 16; + let (points, scalars) = + util::generate_points_scalars::(1usize << npoints_npow, batches); + let mut context = multi_scalar_mult_init(points.as_slice()); + + let mut group = c.benchmark_group("CUDA"); + group.sample_size(10); + + let name = format!("2**{}x{}", npoints_npow, batches); + group.bench_function(name, |b| { + b.iter(|| { + let _ = multi_scalar_mult(&mut context, &points.as_slice(), unsafe { + std::mem::transmute::<&[_], &[BigInteger256]>(scalars.as_slice()) + }); + }) + }); + + group.finish(); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/arkworks3-sppark-wlc/build.rs b/arkworks3-sppark-wlc/build.rs new file mode 100644 index 000000000..ba6a51b18 --- /dev/null +++ b/arkworks3-sppark-wlc/build.rs @@ -0,0 +1,96 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use std::env; +use std::path::PathBuf; + +fn main() { + let curve = "FEATURE_BLS12_377"; + + // account for cross-compilation [by examining environment variable] + let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + + // Set CC environment variable to choose alternative C compiler. + // Optimization level depends on whether or not --release is passed + // or implied. + let mut cc = cc::Build::new(); + + let c_src_dir = PathBuf::from("src"); + let files = vec![c_src_dir.join("lib.c")]; + let mut cc_opt = None; + + match (cfg!(feature = "portable"), cfg!(feature = "force-adx")) { + (true, false) => { + println!("Compiling in portable mode without ISA extensions"); + cc_opt = Some("__BLST_PORTABLE__"); + } + (false, true) => { + if target_arch.eq("x86_64") { + println!("Enabling ADX support via `force-adx` feature"); + cc_opt = Some("__ADX__"); + } else { + println!("`force-adx` is ignored for non-x86_64 targets"); + } + } + (false, false) => + { + #[cfg(target_arch = "x86_64")] + if target_arch.eq("x86_64") && std::is_x86_feature_detected!("adx") { + println!("Enabling ADX because it was detected on the host"); + cc_opt = Some("__ADX__"); + } + } + (true, true) => panic!("Cannot compile with both `portable` and `force-adx` features"), + } + + cc.flag_if_supported("-mno-avx") // avoid costly transitions + .flag_if_supported("-fno-builtin") + .flag_if_supported("-Wno-unused-command-line-argument"); + if !cfg!(debug_assertions) { + cc.opt_level(2); + } + if let Some(def) = cc_opt { + cc.define(def, None); + } + if let Some(include) = env::var_os("DEP_BLST_C_SRC") { + cc.include(include); + } + cc.files(&files).compile("blst_msm"); + + if cfg!(target_os = "windows") && !cfg!(target_env = "msvc") { + return; + } + // Detect if there is CUDA compiler and engage "cuda" feature accordingly + let nvcc = match env::var("NVCC") { + Ok(var) => which::which(var), + Err(_) => which::which("nvcc"), + }; + + if nvcc.is_ok() { + let mut nvcc = cc::Build::new(); + nvcc.cuda(true); + nvcc.flag("-arch=sm_70"); + nvcc.flag("-maxrregcount=255"); + nvcc.flag("--default-stream=per-thread"); + nvcc.flag("-Xcompiler").flag("-Wno-unused-function"); + nvcc.define("TAKE_RESPONSIBILITY_FOR_ERROR_MESSAGE", None); + nvcc.define(curve, None); + if let Some(def) = cc_opt { + nvcc.define(def, None); + } + if let Some(include) = env::var_os("DEP_BLST_C_SRC") { + nvcc.include(include); + } + if let Some(include) = env::var_os("DEP_SPPARK_BAL_ROOT") { + nvcc.include(include); + } + nvcc.file("cuda/pippenger_inf.cu").compile("blst_cuda_msm"); + + println!("cargo:rustc-cfg=feature=\"cuda\""); + println!("cargo:rerun-if-changed=cuda"); + println!("cargo:rerun-if-env-changed=CXXFLAGS"); + } else { + panic!("nvcc must be in the path. Consider adding /usr/local/cuda/bin.") + } +} diff --git a/arkworks3-sppark-wlc/cuda/host_pinned_allocator_t.hpp b/arkworks3-sppark-wlc/cuda/host_pinned_allocator_t.hpp new file mode 100644 index 000000000..13c2224ef --- /dev/null +++ b/arkworks3-sppark-wlc/cuda/host_pinned_allocator_t.hpp @@ -0,0 +1,43 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +template +struct host_pinned_allocator_t { + typedef T value_type; + host_pinned_allocator_t() {} + + // A converting copy constructor: + template + host_pinned_allocator_t(const host_pinned_allocator_t&) {} + + template + bool operator==(const host_pinned_allocator_t&) const { + return true; + } + + template + bool operator!=(const host_pinned_allocator_t&) const { + return false; + } + + T* allocate(const size_t n) const { + if (n == 0) { + return nullptr; + } + if (n > static_cast(-1) / sizeof(T)) { + throw std::bad_array_new_length(); + } + void *pv = NULL; + cudaMallocHost(&pv, n * sizeof(T)); + if (!pv) { + throw std::bad_alloc(); + } + return static_cast(pv); + } + void deallocate(T* const p, size_t) const { + cudaFreeHost(p); + } +}; + + diff --git a/arkworks3-sppark-wlc/cuda/pippenger.cu b/arkworks3-sppark-wlc/cuda/pippenger.cu new file mode 100644 index 000000000..94ecb7f53 --- /dev/null +++ b/arkworks3-sppark-wlc/cuda/pippenger.cu @@ -0,0 +1,26 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include + +#include +#include + +typedef jacobian_t point_t; +typedef xyzz_t bucket_t; +typedef bucket_t::affine_t affine_t; +typedef fr_t scalar_t; + +#include + +#ifndef __CUDA_ARCH__ +extern "C" +RustError mult_pippenger(point_t* out, const affine_t points[], size_t npoints, + const scalar_t scalars[]) +{ + return mult_pippenger(out, points, npoints, scalars, false); +} +#endif diff --git a/arkworks3-sppark-wlc/cuda/pippenger_inf.cu b/arkworks3-sppark-wlc/cuda/pippenger_inf.cu new file mode 100644 index 000000000..2d5ecf7a7 --- /dev/null +++ b/arkworks3-sppark-wlc/cuda/pippenger_inf.cu @@ -0,0 +1,556 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include + +#include +#include +#include + +typedef jacobian_t point_t; +typedef xyzz_t bucket_t; +typedef bucket_t::affine_inf_t affine_t; +typedef fr_t scalar_t; + +#include + +extern "C" +void cub_initial() +{ + /*uint32_t *d_wval = nullptr; + uint32_t *d_wval_out = nullptr; + uint32_t *d_idx = nullptr; + uint32_t *d_idx_out = nullptr; + uint32_t *d_offset_a = nullptr; + uint32_t *d_offset_b = nullptr; + void *d_temp = NULL; + size_t temp_size = 0; + + cub::DeviceRadixSort::SortPairs(d_temp, temp_size, d_wval, d_wval_out, d_idx, d_idx_out, 1); + cub::DeviceSegmentedRadixSort::SortPairs(d_temp, temp_size, d_wval, d_wval_out, d_idx, d_idx_out, 1, 1, d_offset_a, d_offset_b); + cub::DeviceSelect::Flagged(d_temp, temp_size, d_idx, d_wval, d_idx_out, d_offset_a, 1); + cub::DeviceScan::InclusiveSum(d_temp, temp_size, d_wval, d_idx, 1); + cub::DeviceRunLengthEncode::Encode(d_temp, temp_size, d_wval, d_idx, d_idx_out, d_wval_out, 1);*/ + + uint32_t *d_scalar_tuple = nullptr; + uint32_t *d_scalar_tuple_out = nullptr; + uint32_t *d_point_idx = nullptr; + uint32_t *d_point_idx_out = nullptr; + uint32_t *d_offset_a = nullptr; + uint32_t *d_offset_b = nullptr; + void *d_temp = NULL; + size_t temp_size = 0; + cub::DeviceRadixSort::SortPairs(d_temp, temp_size, + d_scalar_tuple, d_scalar_tuple_out, + d_point_idx, d_point_idx_out, 1); + cub::DeviceSegmentedRadixSort::SortPairs(d_temp, temp_size, + d_scalar_tuple, d_scalar_tuple_out, + d_point_idx, d_point_idx_out, 1, 1, d_offset_a, d_offset_b); +} + + +#ifndef __CUDA_ARCH__ + +static uint32_t scalar_map[65537] = { + 0x00000000, 0x00010000, 0x00010100, 0x00030000, 0x00010200, 0x00050000, 0x00030100, 0x00070000, 0x00010300, 0x00090000, 0x00050100, 0x000b0000, 0x00030200, 0x000d0000, 0x00070100, 0x000f0000, 0x00010400, 0x00110000, 0x00090100, 0x00130000, 0x00050200, 0x00150000, 0x000b0100, 0x00170000, 0x00030300, 0x00190000, 0x000d0100, 0x001b0000, 0x00070200, 0x001d0000, 0x000f0100, 0x001f0000, 0x00010500, 0x00210000, 0x00110100, 0x00230000, 0x00090200, 0x00250000, 0x00130100, 0x00270000, 0x00050300, 0x00290000, 0x00150100, 0x002b0000, 0x000b0200, 0x002d0000, 0x00170100, 0x002f0000, 0x00030400, 0x00310000, 0x00190100, 0x00330000, 0x000d0200, 0x00350000, 0x001b0100, 0x00370000, 0x00070300, 0x00390000, 0x001d0100, 0x003b0000, 0x000f0200, 0x003d0000, 0x001f0100, 0x003f0000, 0x00010600, 0x00410000, 0x00210100, 0x00430000, 0x00110200, 0x00450000, 0x00230100, 0x00470000, 0x00090300, 0x00490000, 0x00250100, 0x004b0000, 0x00130200, 0x004d0000, 0x00270100, 0x004f0000, 0x00050400, 0x00510000, 0x00290100, 0x00530000, 0x00150200, 0x00550000, 0x002b0100, 0x00570000, 0x000b0300, 0x00590000, 0x002d0100, 0x005b0000, 0x00170200, 0x005d0000, 0x002f0100, 0x005f0000, 0x00030500, 0x00610000, 0x00310100, 0x00630000, 0x00190200, 0x00650000, 0x00330100, 0x00670000, 0x000d0300, 0x00690000, 0x00350100, 0x006b0000, 0x001b0200, 0x006d0000, 0x00370100, 0x006f0000, 0x00070400, 0x00710000, 0x00390100, 0x00730000, 0x001d0200, 0x00750000, 0x003b0100, 0x00770000, 0x000f0300, 0x00790000, 0x003d0100, 0x007b0000, 0x001f0200, 0x007d0000, 0x003f0100, 0x007f0000, 0x00011600, 0x00810000, 0x00410100, 0x00830000, 0x00210200, 0x00850000, 0x00430100, 0x00870000, 0x00110300, 0x00890000, 0x00450100, 0x008b0000, 0x00230200, 0x008d0000, 0x00470100, 0x008f0000, 0x00090400, 0x00910000, 0x00490100, 0x00930000, 0x00250200, 0x00950000, 0x004b0100, 0x00970000, 0x00130300, 0x00990000, 0x004d0100, 0x009b0000, 0x00270200, 0x009d0000, 0x004f0100, 0x009f0000, 0x00050500, 0x00a10000, 0x00510100, 0x00a30000, 0x00290200, 0x00a50000, 0x00530100, 0x00a70000, 0x00150300, 0x00a90000, 0x00550100, 0x00ab0000, 0x002b0200, 0x00ad0000, 0x00570100, 0x00af0000, 0x000b0400, 0x00b10000, 0x00590100, 0x00b30000, 0x002d0200, 0x00b50000, 0x005b0100, 0x00b70000, 0x00170300, 0x00b90000, 0x005d0100, 0x00bb0000, 0x002f0200, 0x00bd0000, 0x005f0100, 0x00bf0000, 0x00030600, 0x00c10000, 0x00610100, 0x00c30000, 0x00310200, 0x00c50000, 0x00630100, 0x00c70000, 0x00190300, 0x00c90000, 0x00650100, 0x00cb0000, 0x00330200, 0x00cd0000, 0x00670100, 0x00cf0000, 0x000d0400, 0x00d10000, 0x00690100, 0x00d30000, 0x00350200, 0x00d50000, 0x006b0100, 0x00d70000, 0x001b0300, 0x00d90000, 0x006d0100, 0x00db0000, 0x00370200, 0x00dd0000, 0x006f0100, 0x00df0000, 0x00070500, 0x00e10000, 0x00710100, 0x00e30000, 0x00390200, 0x00e50000, 0x00730100, 0x00e70000, 0x001d0300, 0x00e90000, 0x00750100, 0x00eb0000, 0x003b0200, 0x00ed0000, 0x00770100, 0x00ef0000, 0x000f0400, 0x00f10000, 0x00790100, 0x00f30000, 0x003d0200, 0x00f50000, 0x007b0100, 0x00f70000, 0x001f0300, 0x00f90000, 0x007d0100, 0x00fb0000, 0x003f0200, 0x00fd0000, 0x007f0100, 0x00ff0000, + 0x00012600, 0x01010000, 0x00810100, 0x01030000, 0x00410200, 0x01050000, 0x00830100, 0x01070000, 0x00210300, 0x01090000, 0x00850100, 0x010b0000, 0x00430200, 0x010d0000, 0x00870100, 0x010f0000, 0x00110400, 0x01110000, 0x00890100, 0x01130000, 0x00450200, 0x01150000, 0x008b0100, 0x01170000, 0x00230300, 0x01190000, 0x008d0100, 0x011b0000, 0x00470200, 0x011d0000, 0x008f0100, 0x011f0000, 0x00090500, 0x01210000, 0x00910100, 0x01230000, 0x00490200, 0x01250000, 0x00930100, 0x01270000, 0x00250300, 0x01290000, 0x00950100, 0x012b0000, 0x004b0200, 0x012d0000, 0x00970100, 0x012f0000, 0x00130400, 0x01310000, 0x00990100, 0x01330000, 0x004d0200, 0x01350000, 0x009b0100, 0x01370000, 0x00270300, 0x01390000, 0x009d0100, 0x013b0000, 0x004f0200, 0x013d0000, 0x009f0100, 0x013f0000, 0x00050600, 0x01410000, 0x00a10100, 0x01430000, 0x00510200, 0x01450000, 0x00a30100, 0x01470000, 0x00290300, 0x01490000, 0x00a50100, 0x014b0000, 0x00530200, 0x014d0000, 0x00a70100, 0x014f0000, 0x00150400, 0x01510000, 0x00a90100, 0x01530000, 0x00550200, 0x01550000, 0x00ab0100, 0x01570000, 0x002b0300, 0x01590000, 0x00ad0100, 0x015b0000, 0x00570200, 0x015d0000, 0x00af0100, 0x015f0000, 0x000b0500, 0x01610000, 0x00b10100, 0x01630000, 0x00590200, 0x01650000, 0x00b30100, 0x01670000, 0x002d0300, 0x01690000, 0x00b50100, 0x016b0000, 0x005b0200, 0x016d0000, 0x00b70100, 0x016f0000, 0x00170400, 0x01710000, 0x00b90100, 0x01730000, 0x005d0200, 0x01750000, 0x00bb0100, 0x01770000, 0x002f0300, 0x01790000, 0x00bd0100, 0x017b0000, 0x005f0200, 0x017d0000, 0x00bf0100, 0x017f0000, 0x00031600, 0x01810000, 0x00c10100, 0x01830000, 0x00610200, 0x01850000, 0x00c30100, 0x01870000, 0x00310300, 0x01890000, 0x00c50100, 0x018b0000, 0x00630200, 0x018d0000, 0x00c70100, 0x018f0000, 0x00190400, 0x01910000, 0x00c90100, 0x01930000, 0x00650200, 0x01950000, 0x00cb0100, 0x01970000, 0x00330300, 0x01990000, 0x00cd0100, 0x019b0000, 0x00670200, 0x019d0000, 0x00cf0100, 0x019f0000, 0x000d0500, 0x01a10000, 0x00d10100, 0x01a30000, 0x00690200, 0x01a50000, 0x00d30100, 0x01a70000, 0x00350300, 0x01a90000, 0x00d50100, 0x01ab0000, 0x006b0200, 0x01ad0000, 0x00d70100, 0x01af0000, 0x001b0400, 0x01b10000, 0x00d90100, 0x01b30000, 0x006d0200, 0x01b50000, 0x00db0100, 0x01b70000, 0x00370300, 0x01b90000, 0x00dd0100, 0x01bb0000, 0x006f0200, 0x01bd0000, 0x00df0100, 0x01bf0000, 0x00070600, 0x01c10000, 0x00e10100, 0x01c30000, 0x00710200, 0x01c50000, 0x00e30100, 0x01c70000, 0x00390300, 0x01c90000, 0x00e50100, 0x01cb0000, 0x00730200, 0x01cd0000, 0x00e70100, 0x01cf0000, 0x001d0400, 0x01d10000, 0x00e90100, 0x01d30000, 0x00750200, 0x01d50000, 0x00eb0100, 0x01d70000, 0x003b0300, 0x01d90000, 0x00ed0100, 0x01db0000, 0x00770200, 0x01dd0000, 0x00ef0100, 0x01df0000, 0x000f0500, 0x01e10000, 0x00f10100, 0x01e30000, 0x00790200, 0x01e50000, 0x00f30100, 0x01e70000, 0x003d0300, 0x01e90000, 0x00f50100, 0x01eb0000, 0x007b0200, 0x01ed0000, 0x00f70100, 0x01ef0000, 0x001f0400, 0x01f10000, 0x00f90100, 0x01f30000, 0x007d0200, 0x01f50000, 0x00fb0100, 0x01f70000, 0x003f0300, 0x01f90000, 0x00fd0100, 0x01fb0000, 0x007f0200, 0x01fd0000, 0x00ff0100, 0x01ff0000, + 0x00013600, 0x02010000, 0x01010100, 0x02030000, 0x00810200, 0x02050000, 0x01030100, 0x02070000, 0x00410300, 0x02090000, 0x01050100, 0x020b0000, 0x00830200, 0x020d0000, 0x01070100, 0x020f0000, 0x00210400, 0x02110000, 0x01090100, 0x02130000, 0x00850200, 0x02150000, 0x010b0100, 0x02170000, 0x00430300, 0x02190000, 0x010d0100, 0x021b0000, 0x00870200, 0x021d0000, 0x010f0100, 0x021f0000, 0x00110500, 0x02210000, 0x01110100, 0x02230000, 0x00890200, 0x02250000, 0x01130100, 0x02270000, 0x00450300, 0x02290000, 0x01150100, 0x022b0000, 0x008b0200, 0x022d0000, 0x01170100, 0x022f0000, 0x00230400, 0x02310000, 0x01190100, 0x02330000, 0x008d0200, 0x02350000, 0x011b0100, 0x02370000, 0x00470300, 0x02390000, 0x011d0100, 0x023b0000, 0x008f0200, 0x023d0000, 0x011f0100, 0x023f0000, 0x00090600, 0x02410000, 0x01210100, 0x02430000, 0x00910200, 0x02450000, 0x01230100, 0x02470000, 0x00490300, 0x02490000, 0x01250100, 0x024b0000, 0x00930200, 0x024d0000, 0x01270100, 0x024f0000, 0x00250400, 0x02510000, 0x01290100, 0x02530000, 0x00950200, 0x02550000, 0x012b0100, 0x02570000, 0x004b0300, 0x02590000, 0x012d0100, 0x025b0000, 0x00970200, 0x025d0000, 0x012f0100, 0x025f0000, 0x00130500, 0x02610000, 0x01310100, 0x02630000, 0x00990200, 0x02650000, 0x01330100, 0x02670000, 0x004d0300, 0x02690000, 0x01350100, 0x026b0000, 0x009b0200, 0x026d0000, 0x01370100, 0x026f0000, 0x00270400, 0x02710000, 0x01390100, 0x02730000, 0x009d0200, 0x02750000, 0x013b0100, 0x02770000, 0x004f0300, 0x02790000, 0x013d0100, 0x027b0000, 0x009f0200, 0x027d0000, 0x013f0100, 0x027f0000, 0x00051600, 0x02810000, 0x01410100, 0x02830000, 0x00a10200, 0x02850000, 0x01430100, 0x02870000, 0x00510300, 0x02890000, 0x01450100, 0x028b0000, 0x00a30200, 0x028d0000, 0x01470100, 0x028f0000, 0x00290400, 0x02910000, 0x01490100, 0x02930000, 0x00a50200, 0x02950000, 0x014b0100, 0x02970000, 0x00530300, 0x02990000, 0x014d0100, 0x029b0000, 0x00a70200, 0x029d0000, 0x014f0100, 0x029f0000, 0x00150500, 0x02a10000, 0x01510100, 0x02a30000, 0x00a90200, 0x02a50000, 0x01530100, 0x02a70000, 0x00550300, 0x02a90000, 0x01550100, 0x02ab0000, 0x00ab0200, 0x02ad0000, 0x01570100, 0x02af0000, 0x002b0400, 0x02b10000, 0x01590100, 0x02b30000, 0x00ad0200, 0x02b50000, 0x015b0100, 0x02b70000, 0x00570300, 0x02b90000, 0x015d0100, 0x02bb0000, 0x00af0200, 0x02bd0000, 0x015f0100, 0x02bf0000, 0x000b0600, 0x02c10000, 0x01610100, 0x02c30000, 0x00b10200, 0x02c50000, 0x01630100, 0x02c70000, 0x00590300, 0x02c90000, 0x01650100, 0x02cb0000, 0x00b30200, 0x02cd0000, 0x01670100, 0x02cf0000, 0x002d0400, 0x02d10000, 0x01690100, 0x02d30000, 0x00b50200, 0x02d50000, 0x016b0100, 0x02d70000, 0x005b0300, 0x02d90000, 0x016d0100, 0x02db0000, 0x00b70200, 0x02dd0000, 0x016f0100, 0x02df0000, 0x00170500, 0x02e10000, 0x01710100, 0x02e30000, 0x00b90200, 0x02e50000, 0x01730100, 0x02e70000, 0x005d0300, 0x02e90000, 0x01750100, 0x02eb0000, 0x00bb0200, 0x02ed0000, 0x01770100, 0x02ef0000, 0x002f0400, 0x02f10000, 0x01790100, 0x02f30000, 0x00bd0200, 0x02f50000, 0x017b0100, 0x02f70000, 0x005f0300, 0x02f90000, 0x017d0100, 0x02fb0000, 0x00bf0200, 0x02fd0000, 0x017f0100, 0x02ff0000, + 0x00032600, 0x03010000, 0x01810100, 0x03030000, 0x00c10200, 0x03050000, 0x01830100, 0x03070000, 0x00610300, 0x03090000, 0x01850100, 0x030b0000, 0x00c30200, 0x030d0000, 0x01870100, 0x030f0000, 0x00310400, 0x03110000, 0x01890100, 0x03130000, 0x00c50200, 0x03150000, 0x018b0100, 0x03170000, 0x00630300, 0x03190000, 0x018d0100, 0x031b0000, 0x00c70200, 0x031d0000, 0x018f0100, 0x031f0000, 0x00190500, 0x03210000, 0x01910100, 0x03230000, 0x00c90200, 0x03250000, 0x01930100, 0x03270000, 0x00650300, 0x03290000, 0x01950100, 0x032b0000, 0x00cb0200, 0x032d0000, 0x01970100, 0x032f0000, 0x00330400, 0x03310000, 0x01990100, 0x03330000, 0x00cd0200, 0x03350000, 0x019b0100, 0x03370000, 0x00670300, 0x03390000, 0x019d0100, 0x033b0000, 0x00cf0200, 0x033d0000, 0x019f0100, 0x033f0000, 0x000d0600, 0x03410000, 0x01a10100, 0x03430000, 0x00d10200, 0x03450000, 0x01a30100, 0x03470000, 0x00690300, 0x03490000, 0x01a50100, 0x034b0000, 0x00d30200, 0x034d0000, 0x01a70100, 0x034f0000, 0x00350400, 0x03510000, 0x01a90100, 0x03530000, 0x00d50200, 0x03550000, 0x01ab0100, 0x03570000, 0x006b0300, 0x03590000, 0x01ad0100, 0x035b0000, 0x00d70200, 0x035d0000, 0x01af0100, 0x035f0000, 0x001b0500, 0x03610000, 0x01b10100, 0x03630000, 0x00d90200, 0x03650000, 0x01b30100, 0x03670000, 0x006d0300, 0x03690000, 0x01b50100, 0x036b0000, 0x00db0200, 0x036d0000, 0x01b70100, 0x036f0000, 0x00370400, 0x03710000, 0x01b90100, 0x03730000, 0x00dd0200, 0x03750000, 0x01bb0100, 0x03770000, 0x006f0300, 0x03790000, 0x01bd0100, 0x037b0000, 0x00df0200, 0x037d0000, 0x01bf0100, 0x037f0000, 0x00071600, 0x03810000, 0x01c10100, 0x03830000, 0x00e10200, 0x03850000, 0x01c30100, 0x03870000, 0x00710300, 0x03890000, 0x01c50100, 0x038b0000, 0x00e30200, 0x038d0000, 0x01c70100, 0x038f0000, 0x00390400, 0x03910000, 0x01c90100, 0x03930000, 0x00e50200, 0x03950000, 0x01cb0100, 0x03970000, 0x00730300, 0x03990000, 0x01cd0100, 0x039b0000, 0x00e70200, 0x039d0000, 0x01cf0100, 0x039f0000, 0x001d0500, 0x03a10000, 0x01d10100, 0x03a30000, 0x00e90200, 0x03a50000, 0x01d30100, 0x03a70000, 0x00750300, 0x03a90000, 0x01d50100, 0x03ab0000, 0x00eb0200, 0x03ad0000, 0x01d70100, 0x03af0000, 0x003b0400, 0x03b10000, 0x01d90100, 0x03b30000, 0x00ed0200, 0x03b50000, 0x01db0100, 0x03b70000, 0x00770300, 0x03b90000, 0x01dd0100, 0x03bb0000, 0x00ef0200, 0x03bd0000, 0x01df0100, 0x03bf0000, 0x000f0600, 0x03c10000, 0x01e10100, 0x03c30000, 0x00f10200, 0x03c50000, 0x01e30100, 0x03c70000, 0x00790300, 0x03c90000, 0x01e50100, 0x03cb0000, 0x00f30200, 0x03cd0000, 0x01e70100, 0x03cf0000, 0x003d0400, 0x03d10000, 0x01e90100, 0x03d30000, 0x00f50200, 0x03d50000, 0x01eb0100, 0x03d70000, 0x007b0300, 0x03d90000, 0x01ed0100, 0x03db0000, 0x00f70200, 0x03dd0000, 0x01ef0100, 0x03df0000, 0x001f0500, 0x03e10000, 0x01f10100, 0x03e30000, 0x00f90200, 0x03e50000, 0x01f30100, 0x03e70000, 0x007d0300, 0x03e90000, 0x01f50100, 0x03eb0000, 0x00fb0200, 0x03ed0000, 0x01f70100, 0x03ef0000, 0x003f0400, 0x03f10000, 0x01f90100, 0x03f30000, 0x00fd0200, 0x03f50000, 0x01fb0100, 0x03f70000, 0x007f0300, 0x03f90000, 0x01fd0100, 0x03fb0000, 0x00ff0200, 0x03fd0000, 0x01ff0100, 0x03ff0000, + 0x00014600, 0x04010000, 0x02010100, 0x04030000, 0x01010200, 0x04050000, 0x02030100, 0x04070000, 0x00810300, 0x04090000, 0x02050100, 0x040b0000, 0x01030200, 0x040d0000, 0x02070100, 0x040f0000, 0x00410400, 0x04110000, 0x02090100, 0x04130000, 0x01050200, 0x04150000, 0x020b0100, 0x04170000, 0x00830300, 0x04190000, 0x020d0100, 0x041b0000, 0x01070200, 0x041d0000, 0x020f0100, 0x041f0000, 0x00210500, 0x04210000, 0x02110100, 0x04230000, 0x01090200, 0x04250000, 0x02130100, 0x04270000, 0x00850300, 0x04290000, 0x02150100, 0x042b0000, 0x010b0200, 0x042d0000, 0x02170100, 0x042f0000, 0x00430400, 0x04310000, 0x02190100, 0x04330000, 0x010d0200, 0x04350000, 0x021b0100, 0x04370000, 0x00870300, 0x04390000, 0x021d0100, 0x043b0000, 0x010f0200, 0x043d0000, 0x021f0100, 0x043f0000, 0x00110600, 0x04410000, 0x02210100, 0x04430000, 0x01110200, 0x04450000, 0x02230100, 0x04470000, 0x00890300, 0x04490000, 0x02250100, 0x044b0000, 0x01130200, 0x044d0000, 0x02270100, 0x044f0000, 0x00450400, 0x04510000, 0x02290100, 0x04530000, 0x01150200, 0x04550000, 0x022b0100, 0x04570000, 0x008b0300, 0x04590000, 0x022d0100, 0x045b0000, 0x01170200, 0x045d0000, 0x022f0100, 0x045f0000, 0x00230500, 0x04610000, 0x02310100, 0x04630000, 0x01190200, 0x04650000, 0x02330100, 0x04670000, 0x008d0300, 0x04690000, 0x02350100, 0x046b0000, 0x011b0200, 0x046d0000, 0x02370100, 0x046f0000, 0x00470400, 0x04710000, 0x02390100, 0x04730000, 0x011d0200, 0x04750000, 0x023b0100, 0x04770000, 0x008f0300, 0x04790000, 0x023d0100, 0x047b0000, 0x011f0200, 0x047d0000, 0x023f0100, 0x047f0000, 0x00091600, 0x04810000, 0x02410100, 0x04830000, 0x01210200, 0x04850000, 0x02430100, 0x04870000, 0x00910300, 0x04890000, 0x02450100, 0x048b0000, 0x01230200, 0x048d0000, 0x02470100, 0x048f0000, 0x00490400, 0x04910000, 0x02490100, 0x04930000, 0x01250200, 0x04950000, 0x024b0100, 0x04970000, 0x00930300, 0x04990000, 0x024d0100, 0x049b0000, 0x01270200, 0x049d0000, 0x024f0100, 0x049f0000, 0x00250500, 0x04a10000, 0x02510100, 0x04a30000, 0x01290200, 0x04a50000, 0x02530100, 0x04a70000, 0x00950300, 0x04a90000, 0x02550100, 0x04ab0000, 0x012b0200, 0x04ad0000, 0x02570100, 0x04af0000, 0x004b0400, 0x04b10000, 0x02590100, 0x04b30000, 0x012d0200, 0x04b50000, 0x025b0100, 0x04b70000, 0x00970300, 0x04b90000, 0x025d0100, 0x04bb0000, 0x012f0200, 0x04bd0000, 0x025f0100, 0x04bf0000, 0x00130600, 0x04c10000, 0x02610100, 0x04c30000, 0x01310200, 0x04c50000, 0x02630100, 0x04c70000, 0x00990300, 0x04c90000, 0x02650100, 0x04cb0000, 0x01330200, 0x04cd0000, 0x02670100, 0x04cf0000, 0x004d0400, 0x04d10000, 0x02690100, 0x04d30000, 0x01350200, 0x04d50000, 0x026b0100, 0x04d70000, 0x009b0300, 0x04d90000, 0x026d0100, 0x04db0000, 0x01370200, 0x04dd0000, 0x026f0100, 0x04df0000, 0x00270500, 0x04e10000, 0x02710100, 0x04e30000, 0x01390200, 0x04e50000, 0x02730100, 0x04e70000, 0x009d0300, 0x04e90000, 0x02750100, 0x04eb0000, 0x013b0200, 0x04ed0000, 0x02770100, 0x04ef0000, 0x004f0400, 0x04f10000, 0x02790100, 0x04f30000, 0x013d0200, 0x04f50000, 0x027b0100, 0x04f70000, 0x009f0300, 0x04f90000, 0x027d0100, 0x04fb0000, 0x013f0200, 0x04fd0000, 0x027f0100, 0x04ff0000, + 0x00052600, 0x05010000, 0x02810100, 0x05030000, 0x01410200, 0x05050000, 0x02830100, 0x05070000, 0x00a10300, 0x05090000, 0x02850100, 0x050b0000, 0x01430200, 0x050d0000, 0x02870100, 0x050f0000, 0x00510400, 0x05110000, 0x02890100, 0x05130000, 0x01450200, 0x05150000, 0x028b0100, 0x05170000, 0x00a30300, 0x05190000, 0x028d0100, 0x051b0000, 0x01470200, 0x051d0000, 0x028f0100, 0x051f0000, 0x00290500, 0x05210000, 0x02910100, 0x05230000, 0x01490200, 0x05250000, 0x02930100, 0x05270000, 0x00a50300, 0x05290000, 0x02950100, 0x052b0000, 0x014b0200, 0x052d0000, 0x02970100, 0x052f0000, 0x00530400, 0x05310000, 0x02990100, 0x05330000, 0x014d0200, 0x05350000, 0x029b0100, 0x05370000, 0x00a70300, 0x05390000, 0x029d0100, 0x053b0000, 0x014f0200, 0x053d0000, 0x029f0100, 0x053f0000, 0x00150600, 0x05410000, 0x02a10100, 0x05430000, 0x01510200, 0x05450000, 0x02a30100, 0x05470000, 0x00a90300, 0x05490000, 0x02a50100, 0x054b0000, 0x01530200, 0x054d0000, 0x02a70100, 0x054f0000, 0x00550400, 0x05510000, 0x02a90100, 0x05530000, 0x01550200, 0x05550000, 0x02ab0100, 0x05570000, 0x00ab0300, 0x05590000, 0x02ad0100, 0x055b0000, 0x01570200, 0x055d0000, 0x02af0100, 0x055f0000, 0x002b0500, 0x05610000, 0x02b10100, 0x05630000, 0x01590200, 0x05650000, 0x02b30100, 0x05670000, 0x00ad0300, 0x05690000, 0x02b50100, 0x056b0000, 0x015b0200, 0x056d0000, 0x02b70100, 0x056f0000, 0x00570400, 0x05710000, 0x02b90100, 0x05730000, 0x015d0200, 0x05750000, 0x02bb0100, 0x05770000, 0x00af0300, 0x05790000, 0x02bd0100, 0x057b0000, 0x015f0200, 0x057d0000, 0x02bf0100, 0x057f0000, 0x000b1600, 0x05810000, 0x02c10100, 0x05830000, 0x01610200, 0x05850000, 0x02c30100, 0x05870000, 0x00b10300, 0x05890000, 0x02c50100, 0x058b0000, 0x01630200, 0x058d0000, 0x02c70100, 0x058f0000, 0x00590400, 0x05910000, 0x02c90100, 0x05930000, 0x01650200, 0x05950000, 0x02cb0100, 0x05970000, 0x00b30300, 0x05990000, 0x02cd0100, 0x059b0000, 0x01670200, 0x059d0000, 0x02cf0100, 0x059f0000, 0x002d0500, 0x05a10000, 0x02d10100, 0x05a30000, 0x01690200, 0x05a50000, 0x02d30100, 0x05a70000, 0x00b50300, 0x05a90000, 0x02d50100, 0x05ab0000, 0x016b0200, 0x05ad0000, 0x02d70100, 0x05af0000, 0x005b0400, 0x05b10000, 0x02d90100, 0x05b30000, 0x016d0200, 0x05b50000, 0x02db0100, 0x05b70000, 0x00b70300, 0x05b90000, 0x02dd0100, 0x05bb0000, 0x016f0200, 0x05bd0000, 0x02df0100, 0x05bf0000, 0x00170600, 0x05c10000, 0x02e10100, 0x05c30000, 0x01710200, 0x05c50000, 0x02e30100, 0x05c70000, 0x00b90300, 0x05c90000, 0x02e50100, 0x05cb0000, 0x01730200, 0x05cd0000, 0x02e70100, 0x05cf0000, 0x005d0400, 0x05d10000, 0x02e90100, 0x05d30000, 0x01750200, 0x05d50000, 0x02eb0100, 0x05d70000, 0x00bb0300, 0x05d90000, 0x02ed0100, 0x05db0000, 0x01770200, 0x05dd0000, 0x02ef0100, 0x05df0000, 0x002f0500, 0x05e10000, 0x02f10100, 0x05e30000, 0x01790200, 0x05e50000, 0x02f30100, 0x05e70000, 0x00bd0300, 0x05e90000, 0x02f50100, 0x05eb0000, 0x017b0200, 0x05ed0000, 0x02f70100, 0x05ef0000, 0x005f0400, 0x05f10000, 0x02f90100, 0x05f30000, 0x017d0200, 0x05f50000, 0x02fb0100, 0x05f70000, 0x00bf0300, 0x05f90000, 0x02fd0100, 0x05fb0000, 0x017f0200, 0x05fd0000, 0x02ff0100, 0x05ff0000, + 0x00033600, 0x06010000, 0x03010100, 0x06030000, 0x01810200, 0x06050000, 0x03030100, 0x06070000, 0x00c10300, 0x06090000, 0x03050100, 0x060b0000, 0x01830200, 0x060d0000, 0x03070100, 0x060f0000, 0x00610400, 0x06110000, 0x03090100, 0x06130000, 0x01850200, 0x06150000, 0x030b0100, 0x06170000, 0x00c30300, 0x06190000, 0x030d0100, 0x061b0000, 0x01870200, 0x061d0000, 0x030f0100, 0x061f0000, 0x00310500, 0x06210000, 0x03110100, 0x06230000, 0x01890200, 0x06250000, 0x03130100, 0x06270000, 0x00c50300, 0x06290000, 0x03150100, 0x062b0000, 0x018b0200, 0x062d0000, 0x03170100, 0x062f0000, 0x00630400, 0x06310000, 0x03190100, 0x06330000, 0x018d0200, 0x06350000, 0x031b0100, 0x06370000, 0x00c70300, 0x06390000, 0x031d0100, 0x063b0000, 0x018f0200, 0x063d0000, 0x031f0100, 0x063f0000, 0x00190600, 0x06410000, 0x03210100, 0x06430000, 0x01910200, 0x06450000, 0x03230100, 0x06470000, 0x00c90300, 0x06490000, 0x03250100, 0x064b0000, 0x01930200, 0x064d0000, 0x03270100, 0x064f0000, 0x00650400, 0x06510000, 0x03290100, 0x06530000, 0x01950200, 0x06550000, 0x032b0100, 0x06570000, 0x00cb0300, 0x06590000, 0x032d0100, 0x065b0000, 0x01970200, 0x065d0000, 0x032f0100, 0x065f0000, 0x00330500, 0x06610000, 0x03310100, 0x06630000, 0x01990200, 0x06650000, 0x03330100, 0x06670000, 0x00cd0300, 0x06690000, 0x03350100, 0x066b0000, 0x019b0200, 0x066d0000, 0x03370100, 0x066f0000, 0x00670400, 0x06710000, 0x03390100, 0x06730000, 0x019d0200, 0x06750000, 0x033b0100, 0x06770000, 0x00cf0300, 0x06790000, 0x033d0100, 0x067b0000, 0x019f0200, 0x067d0000, 0x033f0100, 0x067f0000, 0x000d1600, 0x06810000, 0x03410100, 0x06830000, 0x01a10200, 0x06850000, 0x03430100, 0x06870000, 0x00d10300, 0x06890000, 0x03450100, 0x068b0000, 0x01a30200, 0x068d0000, 0x03470100, 0x068f0000, 0x00690400, 0x06910000, 0x03490100, 0x06930000, 0x01a50200, 0x06950000, 0x034b0100, 0x06970000, 0x00d30300, 0x06990000, 0x034d0100, 0x069b0000, 0x01a70200, 0x069d0000, 0x034f0100, 0x069f0000, 0x00350500, 0x06a10000, 0x03510100, 0x06a30000, 0x01a90200, 0x06a50000, 0x03530100, 0x06a70000, 0x00d50300, 0x06a90000, 0x03550100, 0x06ab0000, 0x01ab0200, 0x06ad0000, 0x03570100, 0x06af0000, 0x006b0400, 0x06b10000, 0x03590100, 0x06b30000, 0x01ad0200, 0x06b50000, 0x035b0100, 0x06b70000, 0x00d70300, 0x06b90000, 0x035d0100, 0x06bb0000, 0x01af0200, 0x06bd0000, 0x035f0100, 0x06bf0000, 0x001b0600, 0x06c10000, 0x03610100, 0x06c30000, 0x01b10200, 0x06c50000, 0x03630100, 0x06c70000, 0x00d90300, 0x06c90000, 0x03650100, 0x06cb0000, 0x01b30200, 0x06cd0000, 0x03670100, 0x06cf0000, 0x006d0400, 0x06d10000, 0x03690100, 0x06d30000, 0x01b50200, 0x06d50000, 0x036b0100, 0x06d70000, 0x00db0300, 0x06d90000, 0x036d0100, 0x06db0000, 0x01b70200, 0x06dd0000, 0x036f0100, 0x06df0000, 0x00370500, 0x06e10000, 0x03710100, 0x06e30000, 0x01b90200, 0x06e50000, 0x03730100, 0x06e70000, 0x00dd0300, 0x06e90000, 0x03750100, 0x06eb0000, 0x01bb0200, 0x06ed0000, 0x03770100, 0x06ef0000, 0x006f0400, 0x06f10000, 0x03790100, 0x06f30000, 0x01bd0200, 0x06f50000, 0x037b0100, 0x06f70000, 0x00df0300, 0x06f90000, 0x037d0100, 0x06fb0000, 0x01bf0200, 0x06fd0000, 0x037f0100, 0x06ff0000, + 0x00072600, 0x07010000, 0x03810100, 0x07030000, 0x01c10200, 0x07050000, 0x03830100, 0x07070000, 0x00e10300, 0x07090000, 0x03850100, 0x070b0000, 0x01c30200, 0x070d0000, 0x03870100, 0x070f0000, 0x00710400, 0x07110000, 0x03890100, 0x07130000, 0x01c50200, 0x07150000, 0x038b0100, 0x07170000, 0x00e30300, 0x07190000, 0x038d0100, 0x071b0000, 0x01c70200, 0x071d0000, 0x038f0100, 0x071f0000, 0x00390500, 0x07210000, 0x03910100, 0x07230000, 0x01c90200, 0x07250000, 0x03930100, 0x07270000, 0x00e50300, 0x07290000, 0x03950100, 0x072b0000, 0x01cb0200, 0x072d0000, 0x03970100, 0x072f0000, 0x00730400, 0x07310000, 0x03990100, 0x07330000, 0x01cd0200, 0x07350000, 0x039b0100, 0x07370000, 0x00e70300, 0x07390000, 0x039d0100, 0x073b0000, 0x01cf0200, 0x073d0000, 0x039f0100, 0x073f0000, 0x001d0600, 0x07410000, 0x03a10100, 0x07430000, 0x01d10200, 0x07450000, 0x03a30100, 0x07470000, 0x00e90300, 0x07490000, 0x03a50100, 0x074b0000, 0x01d30200, 0x074d0000, 0x03a70100, 0x074f0000, 0x00750400, 0x07510000, 0x03a90100, 0x07530000, 0x01d50200, 0x07550000, 0x03ab0100, 0x07570000, 0x00eb0300, 0x07590000, 0x03ad0100, 0x075b0000, 0x01d70200, 0x075d0000, 0x03af0100, 0x075f0000, 0x003b0500, 0x07610000, 0x03b10100, 0x07630000, 0x01d90200, 0x07650000, 0x03b30100, 0x07670000, 0x00ed0300, 0x07690000, 0x03b50100, 0x076b0000, 0x01db0200, 0x076d0000, 0x03b70100, 0x076f0000, 0x00770400, 0x07710000, 0x03b90100, 0x07730000, 0x01dd0200, 0x07750000, 0x03bb0100, 0x07770000, 0x00ef0300, 0x07790000, 0x03bd0100, 0x077b0000, 0x01df0200, 0x077d0000, 0x03bf0100, 0x077f0000, 0x000f1600, 0x07810000, 0x03c10100, 0x07830000, 0x01e10200, 0x07850000, 0x03c30100, 0x07870000, 0x00f10300, 0x07890000, 0x03c50100, 0x078b0000, 0x01e30200, 0x078d0000, 0x03c70100, 0x078f0000, 0x00790400, 0x07910000, 0x03c90100, 0x07930000, 0x01e50200, 0x07950000, 0x03cb0100, 0x07970000, 0x00f30300, 0x07990000, 0x03cd0100, 0x079b0000, 0x01e70200, 0x079d0000, 0x03cf0100, 0x079f0000, 0x003d0500, 0x07a10000, 0x03d10100, 0x07a30000, 0x01e90200, 0x07a50000, 0x03d30100, 0x07a70000, 0x00f50300, 0x07a90000, 0x03d50100, 0x07ab0000, 0x01eb0200, 0x07ad0000, 0x03d70100, 0x07af0000, 0x007b0400, 0x07b10000, 0x03d90100, 0x07b30000, 0x01ed0200, 0x07b50000, 0x03db0100, 0x07b70000, 0x00f70300, 0x07b90000, 0x03dd0100, 0x07bb0000, 0x01ef0200, 0x07bd0000, 0x03df0100, 0x07bf0000, 0x001f0600, 0x07c10000, 0x03e10100, 0x07c30000, 0x01f10200, 0x07c50000, 0x03e30100, 0x07c70000, 0x00f90300, 0x07c90000, 0x03e50100, 0x07cb0000, 0x01f30200, 0x07cd0000, 0x03e70100, 0x07cf0000, 0x007d0400, 0x07d10000, 0x03e90100, 0x07d30000, 0x01f50200, 0x07d50000, 0x03eb0100, 0x07d70000, 0x00fb0300, 0x07d90000, 0x03ed0100, 0x07db0000, 0x01f70200, 0x07dd0000, 0x03ef0100, 0x07df0000, 0x003f0500, 0x07e10000, 0x03f10100, 0x07e30000, 0x01f90200, 0x07e50000, 0x03f30100, 0x07e70000, 0x00fd0300, 0x07e90000, 0x03f50100, 0x07eb0000, 0x01fb0200, 0x07ed0000, 0x03f70100, 0x07ef0000, 0x007f0400, 0x07f10000, 0x03f90100, 0x07f30000, 0x01fd0200, 0x07f50000, 0x03fb0100, 0x07f70000, 0x00ff0300, 0x07f90000, 0x03fd0100, 0x07fb0000, 0x01ff0200, 0x07fd0000, 0x03ff0100, 0x07ff0000, + 0x00015600, 0x08010000, 0x04010100, 0x08030000, 0x02010200, 0x08050000, 0x04030100, 0x08070000, 0x01010300, 0x08090000, 0x04050100, 0x080b0000, 0x02030200, 0x080d0000, 0x04070100, 0x080f0000, 0x00810400, 0x08110000, 0x04090100, 0x08130000, 0x02050200, 0x08150000, 0x040b0100, 0x08170000, 0x01030300, 0x08190000, 0x040d0100, 0x081b0000, 0x02070200, 0x081d0000, 0x040f0100, 0x081f0000, 0x00410500, 0x08210000, 0x04110100, 0x08230000, 0x02090200, 0x08250000, 0x04130100, 0x08270000, 0x01050300, 0x08290000, 0x04150100, 0x082b0000, 0x020b0200, 0x082d0000, 0x04170100, 0x082f0000, 0x00830400, 0x08310000, 0x04190100, 0x08330000, 0x020d0200, 0x08350000, 0x041b0100, 0x08370000, 0x01070300, 0x08390000, 0x041d0100, 0x083b0000, 0x020f0200, 0x083d0000, 0x041f0100, 0x083f0000, 0x00210600, 0x08410000, 0x04210100, 0x08430000, 0x02110200, 0x08450000, 0x04230100, 0x08470000, 0x01090300, 0x08490000, 0x04250100, 0x084b0000, 0x02130200, 0x084d0000, 0x04270100, 0x084f0000, 0x00850400, 0x08510000, 0x04290100, 0x08530000, 0x02150200, 0x08550000, 0x042b0100, 0x08570000, 0x010b0300, 0x08590000, 0x042d0100, 0x085b0000, 0x02170200, 0x085d0000, 0x042f0100, 0x085f0000, 0x00430500, 0x08610000, 0x04310100, 0x08630000, 0x02190200, 0x08650000, 0x04330100, 0x08670000, 0x010d0300, 0x08690000, 0x04350100, 0x086b0000, 0x021b0200, 0x086d0000, 0x04370100, 0x086f0000, 0x00870400, 0x08710000, 0x04390100, 0x08730000, 0x021d0200, 0x08750000, 0x043b0100, 0x08770000, 0x010f0300, 0x08790000, 0x043d0100, 0x087b0000, 0x021f0200, 0x087d0000, 0x043f0100, 0x087f0000, 0x00111600, 0x08810000, 0x04410100, 0x08830000, 0x02210200, 0x08850000, 0x04430100, 0x08870000, 0x01110300, 0x08890000, 0x04450100, 0x088b0000, 0x02230200, 0x088d0000, 0x04470100, 0x088f0000, 0x00890400, 0x08910000, 0x04490100, 0x08930000, 0x02250200, 0x08950000, 0x044b0100, 0x08970000, 0x01130300, 0x08990000, 0x044d0100, 0x089b0000, 0x02270200, 0x089d0000, 0x044f0100, 0x089f0000, 0x00450500, 0x08a10000, 0x04510100, 0x08a30000, 0x02290200, 0x08a50000, 0x04530100, 0x08a70000, 0x01150300, 0x08a90000, 0x04550100, 0x08ab0000, 0x022b0200, 0x08ad0000, 0x04570100, 0x08af0000, 0x008b0400, 0x08b10000, 0x04590100, 0x08b30000, 0x022d0200, 0x08b50000, 0x045b0100, 0x08b70000, 0x01170300, 0x08b90000, 0x045d0100, 0x08bb0000, 0x022f0200, 0x08bd0000, 0x045f0100, 0x08bf0000, 0x00230600, 0x08c10000, 0x04610100, 0x08c30000, 0x02310200, 0x08c50000, 0x04630100, 0x08c70000, 0x01190300, 0x08c90000, 0x04650100, 0x08cb0000, 0x02330200, 0x08cd0000, 0x04670100, 0x08cf0000, 0x008d0400, 0x08d10000, 0x04690100, 0x08d30000, 0x02350200, 0x08d50000, 0x046b0100, 0x08d70000, 0x011b0300, 0x08d90000, 0x046d0100, 0x08db0000, 0x02370200, 0x08dd0000, 0x046f0100, 0x08df0000, 0x00470500, 0x08e10000, 0x04710100, 0x08e30000, 0x02390200, 0x08e50000, 0x04730100, 0x08e70000, 0x011d0300, 0x08e90000, 0x04750100, 0x08eb0000, 0x023b0200, 0x08ed0000, 0x04770100, 0x08ef0000, 0x008f0400, 0x08f10000, 0x04790100, 0x08f30000, 0x023d0200, 0x08f50000, 0x047b0100, 0x08f70000, 0x011f0300, 0x08f90000, 0x047d0100, 0x08fb0000, 0x023f0200, 0x08fd0000, 0x047f0100, 0x08ff0000, + 0x00092600, 0x09010000, 0x04810100, 0x09030000, 0x02410200, 0x09050000, 0x04830100, 0x09070000, 0x01210300, 0x09090000, 0x04850100, 0x090b0000, 0x02430200, 0x090d0000, 0x04870100, 0x090f0000, 0x00910400, 0x09110000, 0x04890100, 0x09130000, 0x02450200, 0x09150000, 0x048b0100, 0x09170000, 0x01230300, 0x09190000, 0x048d0100, 0x091b0000, 0x02470200, 0x091d0000, 0x048f0100, 0x091f0000, 0x00490500, 0x09210000, 0x04910100, 0x09230000, 0x02490200, 0x09250000, 0x04930100, 0x09270000, 0x01250300, 0x09290000, 0x04950100, 0x092b0000, 0x024b0200, 0x092d0000, 0x04970100, 0x092f0000, 0x00930400, 0x09310000, 0x04990100, 0x09330000, 0x024d0200, 0x09350000, 0x049b0100, 0x09370000, 0x01270300, 0x09390000, 0x049d0100, 0x093b0000, 0x024f0200, 0x093d0000, 0x049f0100, 0x093f0000, 0x00250600, 0x09410000, 0x04a10100, 0x09430000, 0x02510200, 0x09450000, 0x04a30100, 0x09470000, 0x01290300, 0x09490000, 0x04a50100, 0x094b0000, 0x02530200, 0x094d0000, 0x04a70100, 0x094f0000, 0x00950400, 0x09510000, 0x04a90100, 0x09530000, 0x02550200, 0x09550000, 0x04ab0100, 0x09570000, 0x012b0300, 0x09590000, 0x04ad0100, 0x095b0000, 0x02570200, 0x095d0000, 0x04af0100, 0x095f0000, 0x004b0500, 0x09610000, 0x04b10100, 0x09630000, 0x02590200, 0x09650000, 0x04b30100, 0x09670000, 0x012d0300, 0x09690000, 0x04b50100, 0x096b0000, 0x025b0200, 0x096d0000, 0x04b70100, 0x096f0000, 0x00970400, 0x09710000, 0x04b90100, 0x09730000, 0x025d0200, 0x09750000, 0x04bb0100, 0x09770000, 0x012f0300, 0x09790000, 0x04bd0100, 0x097b0000, 0x025f0200, 0x097d0000, 0x04bf0100, 0x097f0000, 0x00131600, 0x09810000, 0x04c10100, 0x09830000, 0x02610200, 0x09850000, 0x04c30100, 0x09870000, 0x01310300, 0x09890000, 0x04c50100, 0x098b0000, 0x02630200, 0x098d0000, 0x04c70100, 0x098f0000, 0x00990400, 0x09910000, 0x04c90100, 0x09930000, 0x02650200, 0x09950000, 0x04cb0100, 0x09970000, 0x01330300, 0x09990000, 0x04cd0100, 0x099b0000, 0x02670200, 0x099d0000, 0x04cf0100, 0x099f0000, 0x004d0500, 0x09a10000, 0x04d10100, 0x09a30000, 0x02690200, 0x09a50000, 0x04d30100, 0x09a70000, 0x01350300, 0x09a90000, 0x04d50100, 0x09ab0000, 0x026b0200, 0x09ad0000, 0x04d70100, 0x09af0000, 0x009b0400, 0x09b10000, 0x04d90100, 0x09b30000, 0x026d0200, 0x09b50000, 0x04db0100, 0x09b70000, 0x01370300, 0x09b90000, 0x04dd0100, 0x09bb0000, 0x026f0200, 0x09bd0000, 0x04df0100, 0x09bf0000, 0x00270600, 0x09c10000, 0x04e10100, 0x09c30000, 0x02710200, 0x09c50000, 0x04e30100, 0x09c70000, 0x01390300, 0x09c90000, 0x04e50100, 0x09cb0000, 0x02730200, 0x09cd0000, 0x04e70100, 0x09cf0000, 0x009d0400, 0x09d10000, 0x04e90100, 0x09d30000, 0x02750200, 0x09d50000, 0x04eb0100, 0x09d70000, 0x013b0300, 0x09d90000, 0x04ed0100, 0x09db0000, 0x02770200, 0x09dd0000, 0x04ef0100, 0x09df0000, 0x004f0500, 0x09e10000, 0x04f10100, 0x09e30000, 0x02790200, 0x09e50000, 0x04f30100, 0x09e70000, 0x013d0300, 0x09e90000, 0x04f50100, 0x09eb0000, 0x027b0200, 0x09ed0000, 0x04f70100, 0x09ef0000, 0x009f0400, 0x09f10000, 0x04f90100, 0x09f30000, 0x027d0200, 0x09f50000, 0x04fb0100, 0x09f70000, 0x013f0300, 0x09f90000, 0x04fd0100, 0x09fb0000, 0x027f0200, 0x09fd0000, 0x04ff0100, 0x09ff0000, + 0x00053600, 0x0a010000, 0x05010100, 0x0a030000, 0x02810200, 0x0a050000, 0x05030100, 0x0a070000, 0x01410300, 0x0a090000, 0x05050100, 0x0a0b0000, 0x02830200, 0x0a0d0000, 0x05070100, 0x0a0f0000, 0x00a10400, 0x0a110000, 0x05090100, 0x0a130000, 0x02850200, 0x0a150000, 0x050b0100, 0x0a170000, 0x01430300, 0x0a190000, 0x050d0100, 0x0a1b0000, 0x02870200, 0x0a1d0000, 0x050f0100, 0x0a1f0000, 0x00510500, 0x0a210000, 0x05110100, 0x0a230000, 0x02890200, 0x0a250000, 0x05130100, 0x0a270000, 0x01450300, 0x0a290000, 0x05150100, 0x0a2b0000, 0x028b0200, 0x0a2d0000, 0x05170100, 0x0a2f0000, 0x00a30400, 0x0a310000, 0x05190100, 0x0a330000, 0x028d0200, 0x0a350000, 0x051b0100, 0x0a370000, 0x01470300, 0x0a390000, 0x051d0100, 0x0a3b0000, 0x028f0200, 0x0a3d0000, 0x051f0100, 0x0a3f0000, 0x00290600, 0x0a410000, 0x05210100, 0x0a430000, 0x02910200, 0x0a450000, 0x05230100, 0x0a470000, 0x01490300, 0x0a490000, 0x05250100, 0x0a4b0000, 0x02930200, 0x0a4d0000, 0x05270100, 0x0a4f0000, 0x00a50400, 0x0a510000, 0x05290100, 0x0a530000, 0x02950200, 0x0a550000, 0x052b0100, 0x0a570000, 0x014b0300, 0x0a590000, 0x052d0100, 0x0a5b0000, 0x02970200, 0x0a5d0000, 0x052f0100, 0x0a5f0000, 0x00530500, 0x0a610000, 0x05310100, 0x0a630000, 0x02990200, 0x0a650000, 0x05330100, 0x0a670000, 0x014d0300, 0x0a690000, 0x05350100, 0x0a6b0000, 0x029b0200, 0x0a6d0000, 0x05370100, 0x0a6f0000, 0x00a70400, 0x0a710000, 0x05390100, 0x0a730000, 0x029d0200, 0x0a750000, 0x053b0100, 0x0a770000, 0x014f0300, 0x0a790000, 0x053d0100, 0x0a7b0000, 0x029f0200, 0x0a7d0000, 0x053f0100, 0x0a7f0000, 0x00151600, 0x0a810000, 0x05410100, 0x0a830000, 0x02a10200, 0x0a850000, 0x05430100, 0x0a870000, 0x01510300, 0x0a890000, 0x05450100, 0x0a8b0000, 0x02a30200, 0x0a8d0000, 0x05470100, 0x0a8f0000, 0x00a90400, 0x0a910000, 0x05490100, 0x0a930000, 0x02a50200, 0x0a950000, 0x054b0100, 0x0a970000, 0x01530300, 0x0a990000, 0x054d0100, 0x0a9b0000, 0x02a70200, 0x0a9d0000, 0x054f0100, 0x0a9f0000, 0x00550500, 0x0aa10000, 0x05510100, 0x0aa30000, 0x02a90200, 0x0aa50000, 0x05530100, 0x0aa70000, 0x01550300, 0x0aa90000, 0x05550100, 0x0aab0000, 0x02ab0200, 0x0aad0000, 0x05570100, 0x0aaf0000, 0x00ab0400, 0x0ab10000, 0x05590100, 0x0ab30000, 0x02ad0200, 0x0ab50000, 0x055b0100, 0x0ab70000, 0x01570300, 0x0ab90000, 0x055d0100, 0x0abb0000, 0x02af0200, 0x0abd0000, 0x055f0100, 0x0abf0000, 0x002b0600, 0x0ac10000, 0x05610100, 0x0ac30000, 0x02b10200, 0x0ac50000, 0x05630100, 0x0ac70000, 0x01590300, 0x0ac90000, 0x05650100, 0x0acb0000, 0x02b30200, 0x0acd0000, 0x05670100, 0x0acf0000, 0x00ad0400, 0x0ad10000, 0x05690100, 0x0ad30000, 0x02b50200, 0x0ad50000, 0x056b0100, 0x0ad70000, 0x015b0300, 0x0ad90000, 0x056d0100, 0x0adb0000, 0x02b70200, 0x0add0000, 0x056f0100, 0x0adf0000, 0x00570500, 0x0ae10000, 0x05710100, 0x0ae30000, 0x02b90200, 0x0ae50000, 0x05730100, 0x0ae70000, 0x015d0300, 0x0ae90000, 0x05750100, 0x0aeb0000, 0x02bb0200, 0x0aed0000, 0x05770100, 0x0aef0000, 0x00af0400, 0x0af10000, 0x05790100, 0x0af30000, 0x02bd0200, 0x0af50000, 0x057b0100, 0x0af70000, 0x015f0300, 0x0af90000, 0x057d0100, 0x0afb0000, 0x02bf0200, 0x0afd0000, 0x057f0100, 0x0aff0000, + 0x000b2600, 0x0b010000, 0x05810100, 0x0b030000, 0x02c10200, 0x0b050000, 0x05830100, 0x0b070000, 0x01610300, 0x0b090000, 0x05850100, 0x0b0b0000, 0x02c30200, 0x0b0d0000, 0x05870100, 0x0b0f0000, 0x00b10400, 0x0b110000, 0x05890100, 0x0b130000, 0x02c50200, 0x0b150000, 0x058b0100, 0x0b170000, 0x01630300, 0x0b190000, 0x058d0100, 0x0b1b0000, 0x02c70200, 0x0b1d0000, 0x058f0100, 0x0b1f0000, 0x00590500, 0x0b210000, 0x05910100, 0x0b230000, 0x02c90200, 0x0b250000, 0x05930100, 0x0b270000, 0x01650300, 0x0b290000, 0x05950100, 0x0b2b0000, 0x02cb0200, 0x0b2d0000, 0x05970100, 0x0b2f0000, 0x00b30400, 0x0b310000, 0x05990100, 0x0b330000, 0x02cd0200, 0x0b350000, 0x059b0100, 0x0b370000, 0x01670300, 0x0b390000, 0x059d0100, 0x0b3b0000, 0x02cf0200, 0x0b3d0000, 0x059f0100, 0x0b3f0000, 0x002d0600, 0x0b410000, 0x05a10100, 0x0b430000, 0x02d10200, 0x0b450000, 0x05a30100, 0x0b470000, 0x01690300, 0x0b490000, 0x05a50100, 0x0b4b0000, 0x02d30200, 0x0b4d0000, 0x05a70100, 0x0b4f0000, 0x00b50400, 0x0b510000, 0x05a90100, 0x0b530000, 0x02d50200, 0x0b550000, 0x05ab0100, 0x0b570000, 0x016b0300, 0x0b590000, 0x05ad0100, 0x0b5b0000, 0x02d70200, 0x0b5d0000, 0x05af0100, 0x0b5f0000, 0x005b0500, 0x0b610000, 0x05b10100, 0x0b630000, 0x02d90200, 0x0b650000, 0x05b30100, 0x0b670000, 0x016d0300, 0x0b690000, 0x05b50100, 0x0b6b0000, 0x02db0200, 0x0b6d0000, 0x05b70100, 0x0b6f0000, 0x00b70400, 0x0b710000, 0x05b90100, 0x0b730000, 0x02dd0200, 0x0b750000, 0x05bb0100, 0x0b770000, 0x016f0300, 0x0b790000, 0x05bd0100, 0x0b7b0000, 0x02df0200, 0x0b7d0000, 0x05bf0100, 0x0b7f0000, 0x00171600, 0x0b810000, 0x05c10100, 0x0b830000, 0x02e10200, 0x0b850000, 0x05c30100, 0x0b870000, 0x01710300, 0x0b890000, 0x05c50100, 0x0b8b0000, 0x02e30200, 0x0b8d0000, 0x05c70100, 0x0b8f0000, 0x00b90400, 0x0b910000, 0x05c90100, 0x0b930000, 0x02e50200, 0x0b950000, 0x05cb0100, 0x0b970000, 0x01730300, 0x0b990000, 0x05cd0100, 0x0b9b0000, 0x02e70200, 0x0b9d0000, 0x05cf0100, 0x0b9f0000, 0x005d0500, 0x0ba10000, 0x05d10100, 0x0ba30000, 0x02e90200, 0x0ba50000, 0x05d30100, 0x0ba70000, 0x01750300, 0x0ba90000, 0x05d50100, 0x0bab0000, 0x02eb0200, 0x0bad0000, 0x05d70100, 0x0baf0000, 0x00bb0400, 0x0bb10000, 0x05d90100, 0x0bb30000, 0x02ed0200, 0x0bb50000, 0x05db0100, 0x0bb70000, 0x01770300, 0x0bb90000, 0x05dd0100, 0x0bbb0000, 0x02ef0200, 0x0bbd0000, 0x05df0100, 0x0bbf0000, 0x002f0600, 0x0bc10000, 0x05e10100, 0x0bc30000, 0x02f10200, 0x0bc50000, 0x05e30100, 0x0bc70000, 0x01790300, 0x0bc90000, 0x05e50100, 0x0bcb0000, 0x02f30200, 0x0bcd0000, 0x05e70100, 0x0bcf0000, 0x00bd0400, 0x0bd10000, 0x05e90100, 0x0bd30000, 0x02f50200, 0x0bd50000, 0x05eb0100, 0x0bd70000, 0x017b0300, 0x0bd90000, 0x05ed0100, 0x0bdb0000, 0x02f70200, 0x0bdd0000, 0x05ef0100, 0x0bdf0000, 0x005f0500, 0x0be10000, 0x05f10100, 0x0be30000, 0x02f90200, 0x0be50000, 0x05f30100, 0x0be70000, 0x017d0300, 0x0be90000, 0x05f50100, 0x0beb0000, 0x02fb0200, 0x0bed0000, 0x05f70100, 0x0bef0000, 0x00bf0400, 0x0bf10000, 0x05f90100, 0x0bf30000, 0x02fd0200, 0x0bf50000, 0x05fb0100, 0x0bf70000, 0x017f0300, 0x0bf90000, 0x05fd0100, 0x0bfb0000, 0x02ff0200, 0x0bfd0000, 0x05ff0100, 0x0bff0000, + 0x00034600, 0x0c010000, 0x06010100, 0x0c030000, 0x03010200, 0x0c050000, 0x06030100, 0x0c070000, 0x01810300, 0x0c090000, 0x06050100, 0x0c0b0000, 0x03030200, 0x0c0d0000, 0x06070100, 0x0c0f0000, 0x00c10400, 0x0c110000, 0x06090100, 0x0c130000, 0x03050200, 0x0c150000, 0x060b0100, 0x0c170000, 0x01830300, 0x0c190000, 0x060d0100, 0x0c1b0000, 0x03070200, 0x0c1d0000, 0x060f0100, 0x0c1f0000, 0x00610500, 0x0c210000, 0x06110100, 0x0c230000, 0x03090200, 0x0c250000, 0x06130100, 0x0c270000, 0x01850300, 0x0c290000, 0x06150100, 0x0c2b0000, 0x030b0200, 0x0c2d0000, 0x06170100, 0x0c2f0000, 0x00c30400, 0x0c310000, 0x06190100, 0x0c330000, 0x030d0200, 0x0c350000, 0x061b0100, 0x0c370000, 0x01870300, 0x0c390000, 0x061d0100, 0x0c3b0000, 0x030f0200, 0x0c3d0000, 0x061f0100, 0x0c3f0000, 0x00310600, 0x0c410000, 0x06210100, 0x0c430000, 0x03110200, 0x0c450000, 0x06230100, 0x0c470000, 0x01890300, 0x0c490000, 0x06250100, 0x0c4b0000, 0x03130200, 0x0c4d0000, 0x06270100, 0x0c4f0000, 0x00c50400, 0x0c510000, 0x06290100, 0x0c530000, 0x03150200, 0x0c550000, 0x062b0100, 0x0c570000, 0x018b0300, 0x0c590000, 0x062d0100, 0x0c5b0000, 0x03170200, 0x0c5d0000, 0x062f0100, 0x0c5f0000, 0x00630500, 0x0c610000, 0x06310100, 0x0c630000, 0x03190200, 0x0c650000, 0x06330100, 0x0c670000, 0x018d0300, 0x0c690000, 0x06350100, 0x0c6b0000, 0x031b0200, 0x0c6d0000, 0x06370100, 0x0c6f0000, 0x00c70400, 0x0c710000, 0x06390100, 0x0c730000, 0x031d0200, 0x0c750000, 0x063b0100, 0x0c770000, 0x018f0300, 0x0c790000, 0x063d0100, 0x0c7b0000, 0x031f0200, 0x0c7d0000, 0x063f0100, 0x0c7f0000, 0x00191600, 0x0c810000, 0x06410100, 0x0c830000, 0x03210200, 0x0c850000, 0x06430100, 0x0c870000, 0x01910300, 0x0c890000, 0x06450100, 0x0c8b0000, 0x03230200, 0x0c8d0000, 0x06470100, 0x0c8f0000, 0x00c90400, 0x0c910000, 0x06490100, 0x0c930000, 0x03250200, 0x0c950000, 0x064b0100, 0x0c970000, 0x01930300, 0x0c990000, 0x064d0100, 0x0c9b0000, 0x03270200, 0x0c9d0000, 0x064f0100, 0x0c9f0000, 0x00650500, 0x0ca10000, 0x06510100, 0x0ca30000, 0x03290200, 0x0ca50000, 0x06530100, 0x0ca70000, 0x01950300, 0x0ca90000, 0x06550100, 0x0cab0000, 0x032b0200, 0x0cad0000, 0x06570100, 0x0caf0000, 0x00cb0400, 0x0cb10000, 0x06590100, 0x0cb30000, 0x032d0200, 0x0cb50000, 0x065b0100, 0x0cb70000, 0x01970300, 0x0cb90000, 0x065d0100, 0x0cbb0000, 0x032f0200, 0x0cbd0000, 0x065f0100, 0x0cbf0000, 0x00330600, 0x0cc10000, 0x06610100, 0x0cc30000, 0x03310200, 0x0cc50000, 0x06630100, 0x0cc70000, 0x01990300, 0x0cc90000, 0x06650100, 0x0ccb0000, 0x03330200, 0x0ccd0000, 0x06670100, 0x0ccf0000, 0x00cd0400, 0x0cd10000, 0x06690100, 0x0cd30000, 0x03350200, 0x0cd50000, 0x066b0100, 0x0cd70000, 0x019b0300, 0x0cd90000, 0x066d0100, 0x0cdb0000, 0x03370200, 0x0cdd0000, 0x066f0100, 0x0cdf0000, 0x00670500, 0x0ce10000, 0x06710100, 0x0ce30000, 0x03390200, 0x0ce50000, 0x06730100, 0x0ce70000, 0x019d0300, 0x0ce90000, 0x06750100, 0x0ceb0000, 0x033b0200, 0x0ced0000, 0x06770100, 0x0cef0000, 0x00cf0400, 0x0cf10000, 0x06790100, 0x0cf30000, 0x033d0200, 0x0cf50000, 0x067b0100, 0x0cf70000, 0x019f0300, 0x0cf90000, 0x067d0100, 0x0cfb0000, 0x033f0200, 0x0cfd0000, 0x067f0100, 0x0cff0000, + 0x000d2600, 0x0d010000, 0x06810100, 0x0d030000, 0x03410200, 0x0d050000, 0x06830100, 0x0d070000, 0x01a10300, 0x0d090000, 0x06850100, 0x0d0b0000, 0x03430200, 0x0d0d0000, 0x06870100, 0x0d0f0000, 0x00d10400, 0x0d110000, 0x06890100, 0x0d130000, 0x03450200, 0x0d150000, 0x068b0100, 0x0d170000, 0x01a30300, 0x0d190000, 0x068d0100, 0x0d1b0000, 0x03470200, 0x0d1d0000, 0x068f0100, 0x0d1f0000, 0x00690500, 0x0d210000, 0x06910100, 0x0d230000, 0x03490200, 0x0d250000, 0x06930100, 0x0d270000, 0x01a50300, 0x0d290000, 0x06950100, 0x0d2b0000, 0x034b0200, 0x0d2d0000, 0x06970100, 0x0d2f0000, 0x00d30400, 0x0d310000, 0x06990100, 0x0d330000, 0x034d0200, 0x0d350000, 0x069b0100, 0x0d370000, 0x01a70300, 0x0d390000, 0x069d0100, 0x0d3b0000, 0x034f0200, 0x0d3d0000, 0x069f0100, 0x0d3f0000, 0x00350600, 0x0d410000, 0x06a10100, 0x0d430000, 0x03510200, 0x0d450000, 0x06a30100, 0x0d470000, 0x01a90300, 0x0d490000, 0x06a50100, 0x0d4b0000, 0x03530200, 0x0d4d0000, 0x06a70100, 0x0d4f0000, 0x00d50400, 0x0d510000, 0x06a90100, 0x0d530000, 0x03550200, 0x0d550000, 0x06ab0100, 0x0d570000, 0x01ab0300, 0x0d590000, 0x06ad0100, 0x0d5b0000, 0x03570200, 0x0d5d0000, 0x06af0100, 0x0d5f0000, 0x006b0500, 0x0d610000, 0x06b10100, 0x0d630000, 0x03590200, 0x0d650000, 0x06b30100, 0x0d670000, 0x01ad0300, 0x0d690000, 0x06b50100, 0x0d6b0000, 0x035b0200, 0x0d6d0000, 0x06b70100, 0x0d6f0000, 0x00d70400, 0x0d710000, 0x06b90100, 0x0d730000, 0x035d0200, 0x0d750000, 0x06bb0100, 0x0d770000, 0x01af0300, 0x0d790000, 0x06bd0100, 0x0d7b0000, 0x035f0200, 0x0d7d0000, 0x06bf0100, 0x0d7f0000, 0x001b1600, 0x0d810000, 0x06c10100, 0x0d830000, 0x03610200, 0x0d850000, 0x06c30100, 0x0d870000, 0x01b10300, 0x0d890000, 0x06c50100, 0x0d8b0000, 0x03630200, 0x0d8d0000, 0x06c70100, 0x0d8f0000, 0x00d90400, 0x0d910000, 0x06c90100, 0x0d930000, 0x03650200, 0x0d950000, 0x06cb0100, 0x0d970000, 0x01b30300, 0x0d990000, 0x06cd0100, 0x0d9b0000, 0x03670200, 0x0d9d0000, 0x06cf0100, 0x0d9f0000, 0x006d0500, 0x0da10000, 0x06d10100, 0x0da30000, 0x03690200, 0x0da50000, 0x06d30100, 0x0da70000, 0x01b50300, 0x0da90000, 0x06d50100, 0x0dab0000, 0x036b0200, 0x0dad0000, 0x06d70100, 0x0daf0000, 0x00db0400, 0x0db10000, 0x06d90100, 0x0db30000, 0x036d0200, 0x0db50000, 0x06db0100, 0x0db70000, 0x01b70300, 0x0db90000, 0x06dd0100, 0x0dbb0000, 0x036f0200, 0x0dbd0000, 0x06df0100, 0x0dbf0000, 0x00370600, 0x0dc10000, 0x06e10100, 0x0dc30000, 0x03710200, 0x0dc50000, 0x06e30100, 0x0dc70000, 0x01b90300, 0x0dc90000, 0x06e50100, 0x0dcb0000, 0x03730200, 0x0dcd0000, 0x06e70100, 0x0dcf0000, 0x00dd0400, 0x0dd10000, 0x06e90100, 0x0dd30000, 0x03750200, 0x0dd50000, 0x06eb0100, 0x0dd70000, 0x01bb0300, 0x0dd90000, 0x06ed0100, 0x0ddb0000, 0x03770200, 0x0ddd0000, 0x06ef0100, 0x0ddf0000, 0x006f0500, 0x0de10000, 0x06f10100, 0x0de30000, 0x03790200, 0x0de50000, 0x06f30100, 0x0de70000, 0x01bd0300, 0x0de90000, 0x06f50100, 0x0deb0000, 0x037b0200, 0x0ded0000, 0x06f70100, 0x0def0000, 0x00df0400, 0x0df10000, 0x06f90100, 0x0df30000, 0x037d0200, 0x0df50000, 0x06fb0100, 0x0df70000, 0x01bf0300, 0x0df90000, 0x06fd0100, 0x0dfb0000, 0x037f0200, 0x0dfd0000, 0x06ff0100, 0x0dff0000, + 0x00073600, 0x0e010000, 0x07010100, 0x0e030000, 0x03810200, 0x0e050000, 0x07030100, 0x0e070000, 0x01c10300, 0x0e090000, 0x07050100, 0x0e0b0000, 0x03830200, 0x0e0d0000, 0x07070100, 0x0e0f0000, 0x00e10400, 0x0e110000, 0x07090100, 0x0e130000, 0x03850200, 0x0e150000, 0x070b0100, 0x0e170000, 0x01c30300, 0x0e190000, 0x070d0100, 0x0e1b0000, 0x03870200, 0x0e1d0000, 0x070f0100, 0x0e1f0000, 0x00710500, 0x0e210000, 0x07110100, 0x0e230000, 0x03890200, 0x0e250000, 0x07130100, 0x0e270000, 0x01c50300, 0x0e290000, 0x07150100, 0x0e2b0000, 0x038b0200, 0x0e2d0000, 0x07170100, 0x0e2f0000, 0x00e30400, 0x0e310000, 0x07190100, 0x0e330000, 0x038d0200, 0x0e350000, 0x071b0100, 0x0e370000, 0x01c70300, 0x0e390000, 0x071d0100, 0x0e3b0000, 0x038f0200, 0x0e3d0000, 0x071f0100, 0x0e3f0000, 0x00390600, 0x0e410000, 0x07210100, 0x0e430000, 0x03910200, 0x0e450000, 0x07230100, 0x0e470000, 0x01c90300, 0x0e490000, 0x07250100, 0x0e4b0000, 0x03930200, 0x0e4d0000, 0x07270100, 0x0e4f0000, 0x00e50400, 0x0e510000, 0x07290100, 0x0e530000, 0x03950200, 0x0e550000, 0x072b0100, 0x0e570000, 0x01cb0300, 0x0e590000, 0x072d0100, 0x0e5b0000, 0x03970200, 0x0e5d0000, 0x072f0100, 0x0e5f0000, 0x00730500, 0x0e610000, 0x07310100, 0x0e630000, 0x03990200, 0x0e650000, 0x07330100, 0x0e670000, 0x01cd0300, 0x0e690000, 0x07350100, 0x0e6b0000, 0x039b0200, 0x0e6d0000, 0x07370100, 0x0e6f0000, 0x00e70400, 0x0e710000, 0x07390100, 0x0e730000, 0x039d0200, 0x0e750000, 0x073b0100, 0x0e770000, 0x01cf0300, 0x0e790000, 0x073d0100, 0x0e7b0000, 0x039f0200, 0x0e7d0000, 0x073f0100, 0x0e7f0000, 0x001d1600, 0x0e810000, 0x07410100, 0x0e830000, 0x03a10200, 0x0e850000, 0x07430100, 0x0e870000, 0x01d10300, 0x0e890000, 0x07450100, 0x0e8b0000, 0x03a30200, 0x0e8d0000, 0x07470100, 0x0e8f0000, 0x00e90400, 0x0e910000, 0x07490100, 0x0e930000, 0x03a50200, 0x0e950000, 0x074b0100, 0x0e970000, 0x01d30300, 0x0e990000, 0x074d0100, 0x0e9b0000, 0x03a70200, 0x0e9d0000, 0x074f0100, 0x0e9f0000, 0x00750500, 0x0ea10000, 0x07510100, 0x0ea30000, 0x03a90200, 0x0ea50000, 0x07530100, 0x0ea70000, 0x01d50300, 0x0ea90000, 0x07550100, 0x0eab0000, 0x03ab0200, 0x0ead0000, 0x07570100, 0x0eaf0000, 0x00eb0400, 0x0eb10000, 0x07590100, 0x0eb30000, 0x03ad0200, 0x0eb50000, 0x075b0100, 0x0eb70000, 0x01d70300, 0x0eb90000, 0x075d0100, 0x0ebb0000, 0x03af0200, 0x0ebd0000, 0x075f0100, 0x0ebf0000, 0x003b0600, 0x0ec10000, 0x07610100, 0x0ec30000, 0x03b10200, 0x0ec50000, 0x07630100, 0x0ec70000, 0x01d90300, 0x0ec90000, 0x07650100, 0x0ecb0000, 0x03b30200, 0x0ecd0000, 0x07670100, 0x0ecf0000, 0x00ed0400, 0x0ed10000, 0x07690100, 0x0ed30000, 0x03b50200, 0x0ed50000, 0x076b0100, 0x0ed70000, 0x01db0300, 0x0ed90000, 0x076d0100, 0x0edb0000, 0x03b70200, 0x0edd0000, 0x076f0100, 0x0edf0000, 0x00770500, 0x0ee10000, 0x07710100, 0x0ee30000, 0x03b90200, 0x0ee50000, 0x07730100, 0x0ee70000, 0x01dd0300, 0x0ee90000, 0x07750100, 0x0eeb0000, 0x03bb0200, 0x0eed0000, 0x07770100, 0x0eef0000, 0x00ef0400, 0x0ef10000, 0x07790100, 0x0ef30000, 0x03bd0200, 0x0ef50000, 0x077b0100, 0x0ef70000, 0x01df0300, 0x0ef90000, 0x077d0100, 0x0efb0000, 0x03bf0200, 0x0efd0000, 0x077f0100, 0x0eff0000, + 0x000f2600, 0x0f010000, 0x07810100, 0x0f030000, 0x03c10200, 0x0f050000, 0x07830100, 0x0f070000, 0x01e10300, 0x0f090000, 0x07850100, 0x0f0b0000, 0x03c30200, 0x0f0d0000, 0x07870100, 0x0f0f0000, 0x00f10400, 0x0f110000, 0x07890100, 0x0f130000, 0x03c50200, 0x0f150000, 0x078b0100, 0x0f170000, 0x01e30300, 0x0f190000, 0x078d0100, 0x0f1b0000, 0x03c70200, 0x0f1d0000, 0x078f0100, 0x0f1f0000, 0x00790500, 0x0f210000, 0x07910100, 0x0f230000, 0x03c90200, 0x0f250000, 0x07930100, 0x0f270000, 0x01e50300, 0x0f290000, 0x07950100, 0x0f2b0000, 0x03cb0200, 0x0f2d0000, 0x07970100, 0x0f2f0000, 0x00f30400, 0x0f310000, 0x07990100, 0x0f330000, 0x03cd0200, 0x0f350000, 0x079b0100, 0x0f370000, 0x01e70300, 0x0f390000, 0x079d0100, 0x0f3b0000, 0x03cf0200, 0x0f3d0000, 0x079f0100, 0x0f3f0000, 0x003d0600, 0x0f410000, 0x07a10100, 0x0f430000, 0x03d10200, 0x0f450000, 0x07a30100, 0x0f470000, 0x01e90300, 0x0f490000, 0x07a50100, 0x0f4b0000, 0x03d30200, 0x0f4d0000, 0x07a70100, 0x0f4f0000, 0x00f50400, 0x0f510000, 0x07a90100, 0x0f530000, 0x03d50200, 0x0f550000, 0x07ab0100, 0x0f570000, 0x01eb0300, 0x0f590000, 0x07ad0100, 0x0f5b0000, 0x03d70200, 0x0f5d0000, 0x07af0100, 0x0f5f0000, 0x007b0500, 0x0f610000, 0x07b10100, 0x0f630000, 0x03d90200, 0x0f650000, 0x07b30100, 0x0f670000, 0x01ed0300, 0x0f690000, 0x07b50100, 0x0f6b0000, 0x03db0200, 0x0f6d0000, 0x07b70100, 0x0f6f0000, 0x00f70400, 0x0f710000, 0x07b90100, 0x0f730000, 0x03dd0200, 0x0f750000, 0x07bb0100, 0x0f770000, 0x01ef0300, 0x0f790000, 0x07bd0100, 0x0f7b0000, 0x03df0200, 0x0f7d0000, 0x07bf0100, 0x0f7f0000, 0x001f1600, 0x0f810000, 0x07c10100, 0x0f830000, 0x03e10200, 0x0f850000, 0x07c30100, 0x0f870000, 0x01f10300, 0x0f890000, 0x07c50100, 0x0f8b0000, 0x03e30200, 0x0f8d0000, 0x07c70100, 0x0f8f0000, 0x00f90400, 0x0f910000, 0x07c90100, 0x0f930000, 0x03e50200, 0x0f950000, 0x07cb0100, 0x0f970000, 0x01f30300, 0x0f990000, 0x07cd0100, 0x0f9b0000, 0x03e70200, 0x0f9d0000, 0x07cf0100, 0x0f9f0000, 0x007d0500, 0x0fa10000, 0x07d10100, 0x0fa30000, 0x03e90200, 0x0fa50000, 0x07d30100, 0x0fa70000, 0x01f50300, 0x0fa90000, 0x07d50100, 0x0fab0000, 0x03eb0200, 0x0fad0000, 0x07d70100, 0x0faf0000, 0x00fb0400, 0x0fb10000, 0x07d90100, 0x0fb30000, 0x03ed0200, 0x0fb50000, 0x07db0100, 0x0fb70000, 0x01f70300, 0x0fb90000, 0x07dd0100, 0x0fbb0000, 0x03ef0200, 0x0fbd0000, 0x07df0100, 0x0fbf0000, 0x003f0600, 0x0fc10000, 0x07e10100, 0x0fc30000, 0x03f10200, 0x0fc50000, 0x07e30100, 0x0fc70000, 0x01f90300, 0x0fc90000, 0x07e50100, 0x0fcb0000, 0x03f30200, 0x0fcd0000, 0x07e70100, 0x0fcf0000, 0x00fd0400, 0x0fd10000, 0x07e90100, 0x0fd30000, 0x03f50200, 0x0fd50000, 0x07eb0100, 0x0fd70000, 0x01fb0300, 0x0fd90000, 0x07ed0100, 0x0fdb0000, 0x03f70200, 0x0fdd0000, 0x07ef0100, 0x0fdf0000, 0x007f0500, 0x0fe10000, 0x07f10100, 0x0fe30000, 0x03f90200, 0x0fe50000, 0x07f30100, 0x0fe70000, 0x01fd0300, 0x0fe90000, 0x07f50100, 0x0feb0000, 0x03fb0200, 0x0fed0000, 0x07f70100, 0x0fef0000, 0x00ff0400, 0x0ff10000, 0x07f90100, 0x0ff30000, 0x03fd0200, 0x0ff50000, 0x07fb0100, 0x0ff70000, 0x01ff0300, 0x0ff90000, 0x07fd0100, 0x0ffb0000, 0x03ff0200, 0x0ffd0000, 0x07ff0100, 0x0fff0000, + 0x00016600, 0x10010000, 0x08010100, 0x10030000, 0x04010200, 0x10050000, 0x08030100, 0x10070000, 0x02010300, 0x10090000, 0x08050100, 0x100b0000, 0x04030200, 0x100d0000, 0x08070100, 0x100f0000, 0x01010400, 0x10110000, 0x08090100, 0x10130000, 0x04050200, 0x10150000, 0x080b0100, 0x10170000, 0x02030300, 0x10190000, 0x080d0100, 0x101b0000, 0x04070200, 0x101d0000, 0x080f0100, 0x101f0000, 0x00810500, 0x10210000, 0x08110100, 0x10230000, 0x04090200, 0x10250000, 0x08130100, 0x10270000, 0x02050300, 0x10290000, 0x08150100, 0x102b0000, 0x040b0200, 0x102d0000, 0x08170100, 0x102f0000, 0x01030400, 0x10310000, 0x08190100, 0x10330000, 0x040d0200, 0x10350000, 0x081b0100, 0x10370000, 0x02070300, 0x10390000, 0x081d0100, 0x103b0000, 0x040f0200, 0x103d0000, 0x081f0100, 0x103f0000, 0x00410600, 0x10410000, 0x08210100, 0x10430000, 0x04110200, 0x10450000, 0x08230100, 0x10470000, 0x02090300, 0x10490000, 0x08250100, 0x104b0000, 0x04130200, 0x104d0000, 0x08270100, 0x104f0000, 0x01050400, 0x10510000, 0x08290100, 0x10530000, 0x04150200, 0x10550000, 0x082b0100, 0x10570000, 0x020b0300, 0x10590000, 0x082d0100, 0x105b0000, 0x04170200, 0x105d0000, 0x082f0100, 0x105f0000, 0x00830500, 0x10610000, 0x08310100, 0x10630000, 0x04190200, 0x10650000, 0x08330100, 0x10670000, 0x020d0300, 0x10690000, 0x08350100, 0x106b0000, 0x041b0200, 0x106d0000, 0x08370100, 0x106f0000, 0x01070400, 0x10710000, 0x08390100, 0x10730000, 0x041d0200, 0x10750000, 0x083b0100, 0x10770000, 0x020f0300, 0x10790000, 0x083d0100, 0x107b0000, 0x041f0200, 0x107d0000, 0x083f0100, 0x107f0000, 0x00211600, 0x10810000, 0x08410100, 0x10830000, 0x04210200, 0x10850000, 0x08430100, 0x10870000, 0x02110300, 0x10890000, 0x08450100, 0x108b0000, 0x04230200, 0x108d0000, 0x08470100, 0x108f0000, 0x01090400, 0x10910000, 0x08490100, 0x10930000, 0x04250200, 0x10950000, 0x084b0100, 0x10970000, 0x02130300, 0x10990000, 0x084d0100, 0x109b0000, 0x04270200, 0x109d0000, 0x084f0100, 0x109f0000, 0x00850500, 0x10a10000, 0x08510100, 0x10a30000, 0x04290200, 0x10a50000, 0x08530100, 0x10a70000, 0x02150300, 0x10a90000, 0x08550100, 0x10ab0000, 0x042b0200, 0x10ad0000, 0x08570100, 0x10af0000, 0x010b0400, 0x10b10000, 0x08590100, 0x10b30000, 0x042d0200, 0x10b50000, 0x085b0100, 0x10b70000, 0x02170300, 0x10b90000, 0x085d0100, 0x10bb0000, 0x042f0200, 0x10bd0000, 0x085f0100, 0x10bf0000, 0x00430600, 0x10c10000, 0x08610100, 0x10c30000, 0x04310200, 0x10c50000, 0x08630100, 0x10c70000, 0x02190300, 0x10c90000, 0x08650100, 0x10cb0000, 0x04330200, 0x10cd0000, 0x08670100, 0x10cf0000, 0x010d0400, 0x10d10000, 0x08690100, 0x10d30000, 0x04350200, 0x10d50000, 0x086b0100, 0x10d70000, 0x021b0300, 0x10d90000, 0x086d0100, 0x10db0000, 0x04370200, 0x10dd0000, 0x086f0100, 0x10df0000, 0x00870500, 0x10e10000, 0x08710100, 0x10e30000, 0x04390200, 0x10e50000, 0x08730100, 0x10e70000, 0x021d0300, 0x10e90000, 0x08750100, 0x10eb0000, 0x043b0200, 0x10ed0000, 0x08770100, 0x10ef0000, 0x010f0400, 0x10f10000, 0x08790100, 0x10f30000, 0x043d0200, 0x10f50000, 0x087b0100, 0x10f70000, 0x021f0300, 0x10f90000, 0x087d0100, 0x10fb0000, 0x043f0200, 0x10fd0000, 0x087f0100, 0x10ff0000, + 0x00112600, 0x11010000, 0x08810100, 0x11030000, 0x04410200, 0x11050000, 0x08830100, 0x11070000, 0x02210300, 0x11090000, 0x08850100, 0x110b0000, 0x04430200, 0x110d0000, 0x08870100, 0x110f0000, 0x01110400, 0x11110000, 0x08890100, 0x11130000, 0x04450200, 0x11150000, 0x088b0100, 0x11170000, 0x02230300, 0x11190000, 0x088d0100, 0x111b0000, 0x04470200, 0x111d0000, 0x088f0100, 0x111f0000, 0x00890500, 0x11210000, 0x08910100, 0x11230000, 0x04490200, 0x11250000, 0x08930100, 0x11270000, 0x02250300, 0x11290000, 0x08950100, 0x112b0000, 0x044b0200, 0x112d0000, 0x08970100, 0x112f0000, 0x01130400, 0x11310000, 0x08990100, 0x11330000, 0x044d0200, 0x11350000, 0x089b0100, 0x11370000, 0x02270300, 0x11390000, 0x089d0100, 0x113b0000, 0x044f0200, 0x113d0000, 0x089f0100, 0x113f0000, 0x00450600, 0x11410000, 0x08a10100, 0x11430000, 0x04510200, 0x11450000, 0x08a30100, 0x11470000, 0x02290300, 0x11490000, 0x08a50100, 0x114b0000, 0x04530200, 0x114d0000, 0x08a70100, 0x114f0000, 0x01150400, 0x11510000, 0x08a90100, 0x11530000, 0x04550200, 0x11550000, 0x08ab0100, 0x11570000, 0x022b0300, 0x11590000, 0x08ad0100, 0x115b0000, 0x04570200, 0x115d0000, 0x08af0100, 0x115f0000, 0x008b0500, 0x11610000, 0x08b10100, 0x11630000, 0x04590200, 0x11650000, 0x08b30100, 0x11670000, 0x022d0300, 0x11690000, 0x08b50100, 0x116b0000, 0x045b0200, 0x116d0000, 0x08b70100, 0x116f0000, 0x01170400, 0x11710000, 0x08b90100, 0x11730000, 0x045d0200, 0x11750000, 0x08bb0100, 0x11770000, 0x022f0300, 0x11790000, 0x08bd0100, 0x117b0000, 0x045f0200, 0x117d0000, 0x08bf0100, 0x117f0000, 0x00231600, 0x11810000, 0x08c10100, 0x11830000, 0x04610200, 0x11850000, 0x08c30100, 0x11870000, 0x02310300, 0x11890000, 0x08c50100, 0x118b0000, 0x04630200, 0x118d0000, 0x08c70100, 0x118f0000, 0x01190400, 0x11910000, 0x08c90100, 0x11930000, 0x04650200, 0x11950000, 0x08cb0100, 0x11970000, 0x02330300, 0x11990000, 0x08cd0100, 0x119b0000, 0x04670200, 0x119d0000, 0x08cf0100, 0x119f0000, 0x008d0500, 0x11a10000, 0x08d10100, 0x11a30000, 0x04690200, 0x11a50000, 0x08d30100, 0x11a70000, 0x02350300, 0x11a90000, 0x08d50100, 0x11ab0000, 0x046b0200, 0x11ad0000, 0x08d70100, 0x11af0000, 0x011b0400, 0x11b10000, 0x08d90100, 0x11b30000, 0x046d0200, 0x11b50000, 0x08db0100, 0x11b70000, 0x02370300, 0x11b90000, 0x08dd0100, 0x11bb0000, 0x046f0200, 0x11bd0000, 0x08df0100, 0x11bf0000, 0x00470600, 0x11c10000, 0x08e10100, 0x11c30000, 0x04710200, 0x11c50000, 0x08e30100, 0x11c70000, 0x02390300, 0x11c90000, 0x08e50100, 0x11cb0000, 0x04730200, 0x11cd0000, 0x08e70100, 0x11cf0000, 0x011d0400, 0x11d10000, 0x08e90100, 0x11d30000, 0x04750200, 0x11d50000, 0x08eb0100, 0x11d70000, 0x023b0300, 0x11d90000, 0x08ed0100, 0x11db0000, 0x04770200, 0x11dd0000, 0x08ef0100, 0x11df0000, 0x008f0500, 0x11e10000, 0x08f10100, 0x11e30000, 0x04790200, 0x11e50000, 0x08f30100, 0x11e70000, 0x023d0300, 0x11e90000, 0x08f50100, 0x11eb0000, 0x047b0200, 0x11ed0000, 0x08f70100, 0x11ef0000, 0x011f0400, 0x11f10000, 0x08f90100, 0x11f30000, 0x047d0200, 0x11f50000, 0x08fb0100, 0x11f70000, 0x023f0300, 0x11f90000, 0x08fd0100, 0x11fb0000, 0x047f0200, 0x11fd0000, 0x08ff0100, 0x11ff0000, + 0x00093600, 0x12010000, 0x09010100, 0x12030000, 0x04810200, 0x12050000, 0x09030100, 0x12070000, 0x02410300, 0x12090000, 0x09050100, 0x120b0000, 0x04830200, 0x120d0000, 0x09070100, 0x120f0000, 0x01210400, 0x12110000, 0x09090100, 0x12130000, 0x04850200, 0x12150000, 0x090b0100, 0x12170000, 0x02430300, 0x12190000, 0x090d0100, 0x121b0000, 0x04870200, 0x121d0000, 0x090f0100, 0x121f0000, 0x00910500, 0x12210000, 0x09110100, 0x12230000, 0x04890200, 0x12250000, 0x09130100, 0x12270000, 0x02450300, 0x12290000, 0x09150100, 0x122b0000, 0x048b0200, 0x122d0000, 0x09170100, 0x122f0000, 0x01230400, 0x12310000, 0x09190100, 0x12330000, 0x048d0200, 0x12350000, 0x091b0100, 0x12370000, 0x02470300, 0x12390000, 0x091d0100, 0x123b0000, 0x048f0200, 0x123d0000, 0x091f0100, 0x123f0000, 0x00490600, 0x12410000, 0x09210100, 0x12430000, 0x04910200, 0x12450000, 0x09230100, 0x12470000, 0x02490300, 0x12490000, 0x09250100, 0x124b0000, 0x04930200, 0x124d0000, 0x09270100, 0x124f0000, 0x01250400, 0x12510000, 0x09290100, 0x12530000, 0x04950200, 0x12550000, 0x092b0100, 0x12570000, 0x024b0300, 0x12590000, 0x092d0100, 0x125b0000, 0x04970200, 0x125d0000, 0x092f0100, 0x125f0000, 0x00930500, 0x12610000, 0x09310100, 0x12630000, 0x04990200, 0x12650000, 0x09330100, 0x12670000, 0x024d0300, 0x12690000, 0x09350100, 0x126b0000, 0x049b0200, 0x126d0000, 0x09370100, 0x126f0000, 0x01270400, 0x12710000, 0x09390100, 0x12730000, 0x049d0200, 0x12750000, 0x093b0100, 0x12770000, 0x024f0300, 0x12790000, 0x093d0100, 0x127b0000, 0x049f0200, 0x127d0000, 0x093f0100, 0x127f0000, 0x00251600, 0x12810000, 0x09410100, 0x12830000, 0x04a10200, 0x12850000, 0x09430100, 0x12870000, 0x02510300, 0x12890000, 0x09450100, 0x128b0000, 0x04a30200, 0x128d0000, 0x09470100, 0x128f0000, 0x01290400, 0x12910000, 0x09490100, 0x12930000, 0x04a50200, 0x12950000, 0x094b0100, 0x12970000, 0x02530300, 0x12990000, 0x094d0100, 0x129b0000, 0x04a70200, 0x129d0000, 0x094f0100, 0x129f0000, 0x00950500, 0x12a10000, 0x09510100, 0x12a30000, 0x04a90200, 0x12a50000, 0x09530100, 0x12a70000, 0x02550300, 0x12a90000, 0x09550100, 0x12ab0000, 0x04ab0200, 0x12ad0000, 0x09570100, 0x12af0000, 0x012b0400, 0x12b10000, 0x09590100, 0x12b30000, 0x04ad0200, 0x12b50000, 0x095b0100, 0x12b70000, 0x02570300, 0x12b90000, 0x095d0100, 0x12bb0000, 0x04af0200, 0x12bd0000, 0x095f0100, 0x12bf0000, 0x004b0600, 0x12c10000, 0x09610100, 0x12c30000, 0x04b10200, 0x12c50000, 0x09630100, 0x12c70000, 0x02590300, 0x12c90000, 0x09650100, 0x12cb0000, 0x04b30200, 0x12cd0000, 0x09670100, 0x12cf0000, 0x012d0400, 0x12d10000, 0x09690100, 0x12d30000, 0x04b50200, 0x12d50000, 0x096b0100, 0x12d70000, 0x025b0300, 0x12d90000, 0x096d0100, 0x12db0000, 0x04b70200, 0x12dd0000, 0x096f0100, 0x12df0000, 0x00970500, 0x12e10000, 0x09710100, 0x12e30000, 0x04b90200, 0x12e50000, 0x09730100, 0x12e70000, 0x025d0300, 0x12e90000, 0x09750100, 0x12eb0000, 0x04bb0200, 0x12ed0000, 0x09770100, 0x12ef0000, 0x012f0400, 0x12f10000, 0x09790100, 0x12f30000, 0x04bd0200, 0x12f50000, 0x097b0100, 0x12f70000, 0x025f0300, 0x12f90000, 0x097d0100, 0x12fb0000, 0x04bf0200, 0x12fd0000, 0x097f0100, 0x12ff0000, + 0x00132600, 0x13010000, 0x09810100, 0x13030000, 0x04c10200, 0x13050000, 0x09830100, 0x13070000, 0x02610300, 0x13090000, 0x09850100, 0x130b0000, 0x04c30200, 0x130d0000, 0x09870100, 0x130f0000, 0x01310400, 0x13110000, 0x09890100, 0x13130000, 0x04c50200, 0x13150000, 0x098b0100, 0x13170000, 0x02630300, 0x13190000, 0x098d0100, 0x131b0000, 0x04c70200, 0x131d0000, 0x098f0100, 0x131f0000, 0x00990500, 0x13210000, 0x09910100, 0x13230000, 0x04c90200, 0x13250000, 0x09930100, 0x13270000, 0x02650300, 0x13290000, 0x09950100, 0x132b0000, 0x04cb0200, 0x132d0000, 0x09970100, 0x132f0000, 0x01330400, 0x13310000, 0x09990100, 0x13330000, 0x04cd0200, 0x13350000, 0x099b0100, 0x13370000, 0x02670300, 0x13390000, 0x099d0100, 0x133b0000, 0x04cf0200, 0x133d0000, 0x099f0100, 0x133f0000, 0x004d0600, 0x13410000, 0x09a10100, 0x13430000, 0x04d10200, 0x13450000, 0x09a30100, 0x13470000, 0x02690300, 0x13490000, 0x09a50100, 0x134b0000, 0x04d30200, 0x134d0000, 0x09a70100, 0x134f0000, 0x01350400, 0x13510000, 0x09a90100, 0x13530000, 0x04d50200, 0x13550000, 0x09ab0100, 0x13570000, 0x026b0300, 0x13590000, 0x09ad0100, 0x135b0000, 0x04d70200, 0x135d0000, 0x09af0100, 0x135f0000, 0x009b0500, 0x13610000, 0x09b10100, 0x13630000, 0x04d90200, 0x13650000, 0x09b30100, 0x13670000, 0x026d0300, 0x13690000, 0x09b50100, 0x136b0000, 0x04db0200, 0x136d0000, 0x09b70100, 0x136f0000, 0x01370400, 0x13710000, 0x09b90100, 0x13730000, 0x04dd0200, 0x13750000, 0x09bb0100, 0x13770000, 0x026f0300, 0x13790000, 0x09bd0100, 0x137b0000, 0x04df0200, 0x137d0000, 0x09bf0100, 0x137f0000, 0x00271600, 0x13810000, 0x09c10100, 0x13830000, 0x04e10200, 0x13850000, 0x09c30100, 0x13870000, 0x02710300, 0x13890000, 0x09c50100, 0x138b0000, 0x04e30200, 0x138d0000, 0x09c70100, 0x138f0000, 0x01390400, 0x13910000, 0x09c90100, 0x13930000, 0x04e50200, 0x13950000, 0x09cb0100, 0x13970000, 0x02730300, 0x13990000, 0x09cd0100, 0x139b0000, 0x04e70200, 0x139d0000, 0x09cf0100, 0x139f0000, 0x009d0500, 0x13a10000, 0x09d10100, 0x13a30000, 0x04e90200, 0x13a50000, 0x09d30100, 0x13a70000, 0x02750300, 0x13a90000, 0x09d50100, 0x13ab0000, 0x04eb0200, 0x13ad0000, 0x09d70100, 0x13af0000, 0x013b0400, 0x13b10000, 0x09d90100, 0x13b30000, 0x04ed0200, 0x13b50000, 0x09db0100, 0x13b70000, 0x02770300, 0x13b90000, 0x09dd0100, 0x13bb0000, 0x04ef0200, 0x13bd0000, 0x09df0100, 0x13bf0000, 0x004f0600, 0x13c10000, 0x09e10100, 0x13c30000, 0x04f10200, 0x13c50000, 0x09e30100, 0x13c70000, 0x02790300, 0x13c90000, 0x09e50100, 0x13cb0000, 0x04f30200, 0x13cd0000, 0x09e70100, 0x13cf0000, 0x013d0400, 0x13d10000, 0x09e90100, 0x13d30000, 0x04f50200, 0x13d50000, 0x09eb0100, 0x13d70000, 0x027b0300, 0x13d90000, 0x09ed0100, 0x13db0000, 0x04f70200, 0x13dd0000, 0x09ef0100, 0x13df0000, 0x009f0500, 0x13e10000, 0x09f10100, 0x13e30000, 0x04f90200, 0x13e50000, 0x09f30100, 0x13e70000, 0x027d0300, 0x13e90000, 0x09f50100, 0x13eb0000, 0x04fb0200, 0x13ed0000, 0x09f70100, 0x13ef0000, 0x013f0400, 0x13f10000, 0x09f90100, 0x13f30000, 0x04fd0200, 0x13f50000, 0x09fb0100, 0x13f70000, 0x027f0300, 0x13f90000, 0x09fd0100, 0x13fb0000, 0x04ff0200, 0x13fd0000, 0x09ff0100, 0x13ff0000, + 0x00054600, 0x14010000, 0x0a010100, 0x14030000, 0x05010200, 0x14050000, 0x0a030100, 0x14070000, 0x02810300, 0x14090000, 0x0a050100, 0x140b0000, 0x05030200, 0x140d0000, 0x0a070100, 0x140f0000, 0x01410400, 0x14110000, 0x0a090100, 0x14130000, 0x05050200, 0x14150000, 0x0a0b0100, 0x14170000, 0x02830300, 0x14190000, 0x0a0d0100, 0x141b0000, 0x05070200, 0x141d0000, 0x0a0f0100, 0x141f0000, 0x00a10500, 0x14210000, 0x0a110100, 0x14230000, 0x05090200, 0x14250000, 0x0a130100, 0x14270000, 0x02850300, 0x14290000, 0x0a150100, 0x142b0000, 0x050b0200, 0x142d0000, 0x0a170100, 0x142f0000, 0x01430400, 0x14310000, 0x0a190100, 0x14330000, 0x050d0200, 0x14350000, 0x0a1b0100, 0x14370000, 0x02870300, 0x14390000, 0x0a1d0100, 0x143b0000, 0x050f0200, 0x143d0000, 0x0a1f0100, 0x143f0000, 0x00510600, 0x14410000, 0x0a210100, 0x14430000, 0x05110200, 0x14450000, 0x0a230100, 0x14470000, 0x02890300, 0x14490000, 0x0a250100, 0x144b0000, 0x05130200, 0x144d0000, 0x0a270100, 0x144f0000, 0x01450400, 0x14510000, 0x0a290100, 0x14530000, 0x05150200, 0x14550000, 0x0a2b0100, 0x14570000, 0x028b0300, 0x14590000, 0x0a2d0100, 0x145b0000, 0x05170200, 0x145d0000, 0x0a2f0100, 0x145f0000, 0x00a30500, 0x14610000, 0x0a310100, 0x14630000, 0x05190200, 0x14650000, 0x0a330100, 0x14670000, 0x028d0300, 0x14690000, 0x0a350100, 0x146b0000, 0x051b0200, 0x146d0000, 0x0a370100, 0x146f0000, 0x01470400, 0x14710000, 0x0a390100, 0x14730000, 0x051d0200, 0x14750000, 0x0a3b0100, 0x14770000, 0x028f0300, 0x14790000, 0x0a3d0100, 0x147b0000, 0x051f0200, 0x147d0000, 0x0a3f0100, 0x147f0000, 0x00291600, 0x14810000, 0x0a410100, 0x14830000, 0x05210200, 0x14850000, 0x0a430100, 0x14870000, 0x02910300, 0x14890000, 0x0a450100, 0x148b0000, 0x05230200, 0x148d0000, 0x0a470100, 0x148f0000, 0x01490400, 0x14910000, 0x0a490100, 0x14930000, 0x05250200, 0x14950000, 0x0a4b0100, 0x14970000, 0x02930300, 0x14990000, 0x0a4d0100, 0x149b0000, 0x05270200, 0x149d0000, 0x0a4f0100, 0x149f0000, 0x00a50500, 0x14a10000, 0x0a510100, 0x14a30000, 0x05290200, 0x14a50000, 0x0a530100, 0x14a70000, 0x02950300, 0x14a90000, 0x0a550100, 0x14ab0000, 0x052b0200, 0x14ad0000, 0x0a570100, 0x14af0000, 0x014b0400, 0x14b10000, 0x0a590100, 0x14b30000, 0x052d0200, 0x14b50000, 0x0a5b0100, 0x14b70000, 0x02970300, 0x14b90000, 0x0a5d0100, 0x14bb0000, 0x052f0200, 0x14bd0000, 0x0a5f0100, 0x14bf0000, 0x00530600, 0x14c10000, 0x0a610100, 0x14c30000, 0x05310200, 0x14c50000, 0x0a630100, 0x14c70000, 0x02990300, 0x14c90000, 0x0a650100, 0x14cb0000, 0x05330200, 0x14cd0000, 0x0a670100, 0x14cf0000, 0x014d0400, 0x14d10000, 0x0a690100, 0x14d30000, 0x05350200, 0x14d50000, 0x0a6b0100, 0x14d70000, 0x029b0300, 0x14d90000, 0x0a6d0100, 0x14db0000, 0x05370200, 0x14dd0000, 0x0a6f0100, 0x14df0000, 0x00a70500, 0x14e10000, 0x0a710100, 0x14e30000, 0x05390200, 0x14e50000, 0x0a730100, 0x14e70000, 0x029d0300, 0x14e90000, 0x0a750100, 0x14eb0000, 0x053b0200, 0x14ed0000, 0x0a770100, 0x14ef0000, 0x014f0400, 0x14f10000, 0x0a790100, 0x14f30000, 0x053d0200, 0x14f50000, 0x0a7b0100, 0x14f70000, 0x029f0300, 0x14f90000, 0x0a7d0100, 0x14fb0000, 0x053f0200, 0x14fd0000, 0x0a7f0100, 0x14ff0000, + 0x00152600, 0x15010000, 0x0a810100, 0x15030000, 0x05410200, 0x15050000, 0x0a830100, 0x15070000, 0x02a10300, 0x15090000, 0x0a850100, 0x150b0000, 0x05430200, 0x150d0000, 0x0a870100, 0x150f0000, 0x01510400, 0x15110000, 0x0a890100, 0x15130000, 0x05450200, 0x15150000, 0x0a8b0100, 0x15170000, 0x02a30300, 0x15190000, 0x0a8d0100, 0x151b0000, 0x05470200, 0x151d0000, 0x0a8f0100, 0x151f0000, 0x00a90500, 0x15210000, 0x0a910100, 0x15230000, 0x05490200, 0x15250000, 0x0a930100, 0x15270000, 0x02a50300, 0x15290000, 0x0a950100, 0x152b0000, 0x054b0200, 0x152d0000, 0x0a970100, 0x152f0000, 0x01530400, 0x15310000, 0x0a990100, 0x15330000, 0x054d0200, 0x15350000, 0x0a9b0100, 0x15370000, 0x02a70300, 0x15390000, 0x0a9d0100, 0x153b0000, 0x054f0200, 0x153d0000, 0x0a9f0100, 0x153f0000, 0x00550600, 0x15410000, 0x0aa10100, 0x15430000, 0x05510200, 0x15450000, 0x0aa30100, 0x15470000, 0x02a90300, 0x15490000, 0x0aa50100, 0x154b0000, 0x05530200, 0x154d0000, 0x0aa70100, 0x154f0000, 0x01550400, 0x15510000, 0x0aa90100, 0x15530000, 0x05550200, 0x15550000, 0x0aab0100, 0x15570000, 0x02ab0300, 0x15590000, 0x0aad0100, 0x155b0000, 0x05570200, 0x155d0000, 0x0aaf0100, 0x155f0000, 0x00ab0500, 0x15610000, 0x0ab10100, 0x15630000, 0x05590200, 0x15650000, 0x0ab30100, 0x15670000, 0x02ad0300, 0x15690000, 0x0ab50100, 0x156b0000, 0x055b0200, 0x156d0000, 0x0ab70100, 0x156f0000, 0x01570400, 0x15710000, 0x0ab90100, 0x15730000, 0x055d0200, 0x15750000, 0x0abb0100, 0x15770000, 0x02af0300, 0x15790000, 0x0abd0100, 0x157b0000, 0x055f0200, 0x157d0000, 0x0abf0100, 0x157f0000, 0x002b1600, 0x15810000, 0x0ac10100, 0x15830000, 0x05610200, 0x15850000, 0x0ac30100, 0x15870000, 0x02b10300, 0x15890000, 0x0ac50100, 0x158b0000, 0x05630200, 0x158d0000, 0x0ac70100, 0x158f0000, 0x01590400, 0x15910000, 0x0ac90100, 0x15930000, 0x05650200, 0x15950000, 0x0acb0100, 0x15970000, 0x02b30300, 0x15990000, 0x0acd0100, 0x159b0000, 0x05670200, 0x159d0000, 0x0acf0100, 0x159f0000, 0x00ad0500, 0x15a10000, 0x0ad10100, 0x15a30000, 0x05690200, 0x15a50000, 0x0ad30100, 0x15a70000, 0x02b50300, 0x15a90000, 0x0ad50100, 0x15ab0000, 0x056b0200, 0x15ad0000, 0x0ad70100, 0x15af0000, 0x015b0400, 0x15b10000, 0x0ad90100, 0x15b30000, 0x056d0200, 0x15b50000, 0x0adb0100, 0x15b70000, 0x02b70300, 0x15b90000, 0x0add0100, 0x15bb0000, 0x056f0200, 0x15bd0000, 0x0adf0100, 0x15bf0000, 0x00570600, 0x15c10000, 0x0ae10100, 0x15c30000, 0x05710200, 0x15c50000, 0x0ae30100, 0x15c70000, 0x02b90300, 0x15c90000, 0x0ae50100, 0x15cb0000, 0x05730200, 0x15cd0000, 0x0ae70100, 0x15cf0000, 0x015d0400, 0x15d10000, 0x0ae90100, 0x15d30000, 0x05750200, 0x15d50000, 0x0aeb0100, 0x15d70000, 0x02bb0300, 0x15d90000, 0x0aed0100, 0x15db0000, 0x05770200, 0x15dd0000, 0x0aef0100, 0x15df0000, 0x00af0500, 0x15e10000, 0x0af10100, 0x15e30000, 0x05790200, 0x15e50000, 0x0af30100, 0x15e70000, 0x02bd0300, 0x15e90000, 0x0af50100, 0x15eb0000, 0x057b0200, 0x15ed0000, 0x0af70100, 0x15ef0000, 0x015f0400, 0x15f10000, 0x0af90100, 0x15f30000, 0x057d0200, 0x15f50000, 0x0afb0100, 0x15f70000, 0x02bf0300, 0x15f90000, 0x0afd0100, 0x15fb0000, 0x057f0200, 0x15fd0000, 0x0aff0100, 0x15ff0000, + 0x000b3600, 0x16010000, 0x0b010100, 0x16030000, 0x05810200, 0x16050000, 0x0b030100, 0x16070000, 0x02c10300, 0x16090000, 0x0b050100, 0x160b0000, 0x05830200, 0x160d0000, 0x0b070100, 0x160f0000, 0x01610400, 0x16110000, 0x0b090100, 0x16130000, 0x05850200, 0x16150000, 0x0b0b0100, 0x16170000, 0x02c30300, 0x16190000, 0x0b0d0100, 0x161b0000, 0x05870200, 0x161d0000, 0x0b0f0100, 0x161f0000, 0x00b10500, 0x16210000, 0x0b110100, 0x16230000, 0x05890200, 0x16250000, 0x0b130100, 0x16270000, 0x02c50300, 0x16290000, 0x0b150100, 0x162b0000, 0x058b0200, 0x162d0000, 0x0b170100, 0x162f0000, 0x01630400, 0x16310000, 0x0b190100, 0x16330000, 0x058d0200, 0x16350000, 0x0b1b0100, 0x16370000, 0x02c70300, 0x16390000, 0x0b1d0100, 0x163b0000, 0x058f0200, 0x163d0000, 0x0b1f0100, 0x163f0000, 0x00590600, 0x16410000, 0x0b210100, 0x16430000, 0x05910200, 0x16450000, 0x0b230100, 0x16470000, 0x02c90300, 0x16490000, 0x0b250100, 0x164b0000, 0x05930200, 0x164d0000, 0x0b270100, 0x164f0000, 0x01650400, 0x16510000, 0x0b290100, 0x16530000, 0x05950200, 0x16550000, 0x0b2b0100, 0x16570000, 0x02cb0300, 0x16590000, 0x0b2d0100, 0x165b0000, 0x05970200, 0x165d0000, 0x0b2f0100, 0x165f0000, 0x00b30500, 0x16610000, 0x0b310100, 0x16630000, 0x05990200, 0x16650000, 0x0b330100, 0x16670000, 0x02cd0300, 0x16690000, 0x0b350100, 0x166b0000, 0x059b0200, 0x166d0000, 0x0b370100, 0x166f0000, 0x01670400, 0x16710000, 0x0b390100, 0x16730000, 0x059d0200, 0x16750000, 0x0b3b0100, 0x16770000, 0x02cf0300, 0x16790000, 0x0b3d0100, 0x167b0000, 0x059f0200, 0x167d0000, 0x0b3f0100, 0x167f0000, 0x002d1600, 0x16810000, 0x0b410100, 0x16830000, 0x05a10200, 0x16850000, 0x0b430100, 0x16870000, 0x02d10300, 0x16890000, 0x0b450100, 0x168b0000, 0x05a30200, 0x168d0000, 0x0b470100, 0x168f0000, 0x01690400, 0x16910000, 0x0b490100, 0x16930000, 0x05a50200, 0x16950000, 0x0b4b0100, 0x16970000, 0x02d30300, 0x16990000, 0x0b4d0100, 0x169b0000, 0x05a70200, 0x169d0000, 0x0b4f0100, 0x169f0000, 0x00b50500, 0x16a10000, 0x0b510100, 0x16a30000, 0x05a90200, 0x16a50000, 0x0b530100, 0x16a70000, 0x02d50300, 0x16a90000, 0x0b550100, 0x16ab0000, 0x05ab0200, 0x16ad0000, 0x0b570100, 0x16af0000, 0x016b0400, 0x16b10000, 0x0b590100, 0x16b30000, 0x05ad0200, 0x16b50000, 0x0b5b0100, 0x16b70000, 0x02d70300, 0x16b90000, 0x0b5d0100, 0x16bb0000, 0x05af0200, 0x16bd0000, 0x0b5f0100, 0x16bf0000, 0x005b0600, 0x16c10000, 0x0b610100, 0x16c30000, 0x05b10200, 0x16c50000, 0x0b630100, 0x16c70000, 0x02d90300, 0x16c90000, 0x0b650100, 0x16cb0000, 0x05b30200, 0x16cd0000, 0x0b670100, 0x16cf0000, 0x016d0400, 0x16d10000, 0x0b690100, 0x16d30000, 0x05b50200, 0x16d50000, 0x0b6b0100, 0x16d70000, 0x02db0300, 0x16d90000, 0x0b6d0100, 0x16db0000, 0x05b70200, 0x16dd0000, 0x0b6f0100, 0x16df0000, 0x00b70500, 0x16e10000, 0x0b710100, 0x16e30000, 0x05b90200, 0x16e50000, 0x0b730100, 0x16e70000, 0x02dd0300, 0x16e90000, 0x0b750100, 0x16eb0000, 0x05bb0200, 0x16ed0000, 0x0b770100, 0x16ef0000, 0x016f0400, 0x16f10000, 0x0b790100, 0x16f30000, 0x05bd0200, 0x16f50000, 0x0b7b0100, 0x16f70000, 0x02df0300, 0x16f90000, 0x0b7d0100, 0x16fb0000, 0x05bf0200, 0x16fd0000, 0x0b7f0100, 0x16ff0000, + 0x00172600, 0x17010000, 0x0b810100, 0x17030000, 0x05c10200, 0x17050000, 0x0b830100, 0x17070000, 0x02e10300, 0x17090000, 0x0b850100, 0x170b0000, 0x05c30200, 0x170d0000, 0x0b870100, 0x170f0000, 0x01710400, 0x17110000, 0x0b890100, 0x17130000, 0x05c50200, 0x17150000, 0x0b8b0100, 0x17170000, 0x02e30300, 0x17190000, 0x0b8d0100, 0x171b0000, 0x05c70200, 0x171d0000, 0x0b8f0100, 0x171f0000, 0x00b90500, 0x17210000, 0x0b910100, 0x17230000, 0x05c90200, 0x17250000, 0x0b930100, 0x17270000, 0x02e50300, 0x17290000, 0x0b950100, 0x172b0000, 0x05cb0200, 0x172d0000, 0x0b970100, 0x172f0000, 0x01730400, 0x17310000, 0x0b990100, 0x17330000, 0x05cd0200, 0x17350000, 0x0b9b0100, 0x17370000, 0x02e70300, 0x17390000, 0x0b9d0100, 0x173b0000, 0x05cf0200, 0x173d0000, 0x0b9f0100, 0x173f0000, 0x005d0600, 0x17410000, 0x0ba10100, 0x17430000, 0x05d10200, 0x17450000, 0x0ba30100, 0x17470000, 0x02e90300, 0x17490000, 0x0ba50100, 0x174b0000, 0x05d30200, 0x174d0000, 0x0ba70100, 0x174f0000, 0x01750400, 0x17510000, 0x0ba90100, 0x17530000, 0x05d50200, 0x17550000, 0x0bab0100, 0x17570000, 0x02eb0300, 0x17590000, 0x0bad0100, 0x175b0000, 0x05d70200, 0x175d0000, 0x0baf0100, 0x175f0000, 0x00bb0500, 0x17610000, 0x0bb10100, 0x17630000, 0x05d90200, 0x17650000, 0x0bb30100, 0x17670000, 0x02ed0300, 0x17690000, 0x0bb50100, 0x176b0000, 0x05db0200, 0x176d0000, 0x0bb70100, 0x176f0000, 0x01770400, 0x17710000, 0x0bb90100, 0x17730000, 0x05dd0200, 0x17750000, 0x0bbb0100, 0x17770000, 0x02ef0300, 0x17790000, 0x0bbd0100, 0x177b0000, 0x05df0200, 0x177d0000, 0x0bbf0100, 0x177f0000, 0x002f1600, 0x17810000, 0x0bc10100, 0x17830000, 0x05e10200, 0x17850000, 0x0bc30100, 0x17870000, 0x02f10300, 0x17890000, 0x0bc50100, 0x178b0000, 0x05e30200, 0x178d0000, 0x0bc70100, 0x178f0000, 0x01790400, 0x17910000, 0x0bc90100, 0x17930000, 0x05e50200, 0x17950000, 0x0bcb0100, 0x17970000, 0x02f30300, 0x17990000, 0x0bcd0100, 0x179b0000, 0x05e70200, 0x179d0000, 0x0bcf0100, 0x179f0000, 0x00bd0500, 0x17a10000, 0x0bd10100, 0x17a30000, 0x05e90200, 0x17a50000, 0x0bd30100, 0x17a70000, 0x02f50300, 0x17a90000, 0x0bd50100, 0x17ab0000, 0x05eb0200, 0x17ad0000, 0x0bd70100, 0x17af0000, 0x017b0400, 0x17b10000, 0x0bd90100, 0x17b30000, 0x05ed0200, 0x17b50000, 0x0bdb0100, 0x17b70000, 0x02f70300, 0x17b90000, 0x0bdd0100, 0x17bb0000, 0x05ef0200, 0x17bd0000, 0x0bdf0100, 0x17bf0000, 0x005f0600, 0x17c10000, 0x0be10100, 0x17c30000, 0x05f10200, 0x17c50000, 0x0be30100, 0x17c70000, 0x02f90300, 0x17c90000, 0x0be50100, 0x17cb0000, 0x05f30200, 0x17cd0000, 0x0be70100, 0x17cf0000, 0x017d0400, 0x17d10000, 0x0be90100, 0x17d30000, 0x05f50200, 0x17d50000, 0x0beb0100, 0x17d70000, 0x02fb0300, 0x17d90000, 0x0bed0100, 0x17db0000, 0x05f70200, 0x17dd0000, 0x0bef0100, 0x17df0000, 0x00bf0500, 0x17e10000, 0x0bf10100, 0x17e30000, 0x05f90200, 0x17e50000, 0x0bf30100, 0x17e70000, 0x02fd0300, 0x17e90000, 0x0bf50100, 0x17eb0000, 0x05fb0200, 0x17ed0000, 0x0bf70100, 0x17ef0000, 0x017f0400, 0x17f10000, 0x0bf90100, 0x17f30000, 0x05fd0200, 0x17f50000, 0x0bfb0100, 0x17f70000, 0x02ff0300, 0x17f90000, 0x0bfd0100, 0x17fb0000, 0x05ff0200, 0x17fd0000, 0x0bff0100, 0x17ff0000, + 0x00035600, 0x18010000, 0x0c010100, 0x18030000, 0x06010200, 0x18050000, 0x0c030100, 0x18070000, 0x03010300, 0x18090000, 0x0c050100, 0x180b0000, 0x06030200, 0x180d0000, 0x0c070100, 0x180f0000, 0x01810400, 0x18110000, 0x0c090100, 0x18130000, 0x06050200, 0x18150000, 0x0c0b0100, 0x18170000, 0x03030300, 0x18190000, 0x0c0d0100, 0x181b0000, 0x06070200, 0x181d0000, 0x0c0f0100, 0x181f0000, 0x00c10500, 0x18210000, 0x0c110100, 0x18230000, 0x06090200, 0x18250000, 0x0c130100, 0x18270000, 0x03050300, 0x18290000, 0x0c150100, 0x182b0000, 0x060b0200, 0x182d0000, 0x0c170100, 0x182f0000, 0x01830400, 0x18310000, 0x0c190100, 0x18330000, 0x060d0200, 0x18350000, 0x0c1b0100, 0x18370000, 0x03070300, 0x18390000, 0x0c1d0100, 0x183b0000, 0x060f0200, 0x183d0000, 0x0c1f0100, 0x183f0000, 0x00610600, 0x18410000, 0x0c210100, 0x18430000, 0x06110200, 0x18450000, 0x0c230100, 0x18470000, 0x03090300, 0x18490000, 0x0c250100, 0x184b0000, 0x06130200, 0x184d0000, 0x0c270100, 0x184f0000, 0x01850400, 0x18510000, 0x0c290100, 0x18530000, 0x06150200, 0x18550000, 0x0c2b0100, 0x18570000, 0x030b0300, 0x18590000, 0x0c2d0100, 0x185b0000, 0x06170200, 0x185d0000, 0x0c2f0100, 0x185f0000, 0x00c30500, 0x18610000, 0x0c310100, 0x18630000, 0x06190200, 0x18650000, 0x0c330100, 0x18670000, 0x030d0300, 0x18690000, 0x0c350100, 0x186b0000, 0x061b0200, 0x186d0000, 0x0c370100, 0x186f0000, 0x01870400, 0x18710000, 0x0c390100, 0x18730000, 0x061d0200, 0x18750000, 0x0c3b0100, 0x18770000, 0x030f0300, 0x18790000, 0x0c3d0100, 0x187b0000, 0x061f0200, 0x187d0000, 0x0c3f0100, 0x187f0000, 0x00311600, 0x18810000, 0x0c410100, 0x18830000, 0x06210200, 0x18850000, 0x0c430100, 0x18870000, 0x03110300, 0x18890000, 0x0c450100, 0x188b0000, 0x06230200, 0x188d0000, 0x0c470100, 0x188f0000, 0x01890400, 0x18910000, 0x0c490100, 0x18930000, 0x06250200, 0x18950000, 0x0c4b0100, 0x18970000, 0x03130300, 0x18990000, 0x0c4d0100, 0x189b0000, 0x06270200, 0x189d0000, 0x0c4f0100, 0x189f0000, 0x00c50500, 0x18a10000, 0x0c510100, 0x18a30000, 0x06290200, 0x18a50000, 0x0c530100, 0x18a70000, 0x03150300, 0x18a90000, 0x0c550100, 0x18ab0000, 0x062b0200, 0x18ad0000, 0x0c570100, 0x18af0000, 0x018b0400, 0x18b10000, 0x0c590100, 0x18b30000, 0x062d0200, 0x18b50000, 0x0c5b0100, 0x18b70000, 0x03170300, 0x18b90000, 0x0c5d0100, 0x18bb0000, 0x062f0200, 0x18bd0000, 0x0c5f0100, 0x18bf0000, 0x00630600, 0x18c10000, 0x0c610100, 0x18c30000, 0x06310200, 0x18c50000, 0x0c630100, 0x18c70000, 0x03190300, 0x18c90000, 0x0c650100, 0x18cb0000, 0x06330200, 0x18cd0000, 0x0c670100, 0x18cf0000, 0x018d0400, 0x18d10000, 0x0c690100, 0x18d30000, 0x06350200, 0x18d50000, 0x0c6b0100, 0x18d70000, 0x031b0300, 0x18d90000, 0x0c6d0100, 0x18db0000, 0x06370200, 0x18dd0000, 0x0c6f0100, 0x18df0000, 0x00c70500, 0x18e10000, 0x0c710100, 0x18e30000, 0x06390200, 0x18e50000, 0x0c730100, 0x18e70000, 0x031d0300, 0x18e90000, 0x0c750100, 0x18eb0000, 0x063b0200, 0x18ed0000, 0x0c770100, 0x18ef0000, 0x018f0400, 0x18f10000, 0x0c790100, 0x18f30000, 0x063d0200, 0x18f50000, 0x0c7b0100, 0x18f70000, 0x031f0300, 0x18f90000, 0x0c7d0100, 0x18fb0000, 0x063f0200, 0x18fd0000, 0x0c7f0100, 0x18ff0000, + 0x00192600, 0x19010000, 0x0c810100, 0x19030000, 0x06410200, 0x19050000, 0x0c830100, 0x19070000, 0x03210300, 0x19090000, 0x0c850100, 0x190b0000, 0x06430200, 0x190d0000, 0x0c870100, 0x190f0000, 0x01910400, 0x19110000, 0x0c890100, 0x19130000, 0x06450200, 0x19150000, 0x0c8b0100, 0x19170000, 0x03230300, 0x19190000, 0x0c8d0100, 0x191b0000, 0x06470200, 0x191d0000, 0x0c8f0100, 0x191f0000, 0x00c90500, 0x19210000, 0x0c910100, 0x19230000, 0x06490200, 0x19250000, 0x0c930100, 0x19270000, 0x03250300, 0x19290000, 0x0c950100, 0x192b0000, 0x064b0200, 0x192d0000, 0x0c970100, 0x192f0000, 0x01930400, 0x19310000, 0x0c990100, 0x19330000, 0x064d0200, 0x19350000, 0x0c9b0100, 0x19370000, 0x03270300, 0x19390000, 0x0c9d0100, 0x193b0000, 0x064f0200, 0x193d0000, 0x0c9f0100, 0x193f0000, 0x00650600, 0x19410000, 0x0ca10100, 0x19430000, 0x06510200, 0x19450000, 0x0ca30100, 0x19470000, 0x03290300, 0x19490000, 0x0ca50100, 0x194b0000, 0x06530200, 0x194d0000, 0x0ca70100, 0x194f0000, 0x01950400, 0x19510000, 0x0ca90100, 0x19530000, 0x06550200, 0x19550000, 0x0cab0100, 0x19570000, 0x032b0300, 0x19590000, 0x0cad0100, 0x195b0000, 0x06570200, 0x195d0000, 0x0caf0100, 0x195f0000, 0x00cb0500, 0x19610000, 0x0cb10100, 0x19630000, 0x06590200, 0x19650000, 0x0cb30100, 0x19670000, 0x032d0300, 0x19690000, 0x0cb50100, 0x196b0000, 0x065b0200, 0x196d0000, 0x0cb70100, 0x196f0000, 0x01970400, 0x19710000, 0x0cb90100, 0x19730000, 0x065d0200, 0x19750000, 0x0cbb0100, 0x19770000, 0x032f0300, 0x19790000, 0x0cbd0100, 0x197b0000, 0x065f0200, 0x197d0000, 0x0cbf0100, 0x197f0000, 0x00331600, 0x19810000, 0x0cc10100, 0x19830000, 0x06610200, 0x19850000, 0x0cc30100, 0x19870000, 0x03310300, 0x19890000, 0x0cc50100, 0x198b0000, 0x06630200, 0x198d0000, 0x0cc70100, 0x198f0000, 0x01990400, 0x19910000, 0x0cc90100, 0x19930000, 0x06650200, 0x19950000, 0x0ccb0100, 0x19970000, 0x03330300, 0x19990000, 0x0ccd0100, 0x199b0000, 0x06670200, 0x199d0000, 0x0ccf0100, 0x199f0000, 0x00cd0500, 0x19a10000, 0x0cd10100, 0x19a30000, 0x06690200, 0x19a50000, 0x0cd30100, 0x19a70000, 0x03350300, 0x19a90000, 0x0cd50100, 0x19ab0000, 0x066b0200, 0x19ad0000, 0x0cd70100, 0x19af0000, 0x019b0400, 0x19b10000, 0x0cd90100, 0x19b30000, 0x066d0200, 0x19b50000, 0x0cdb0100, 0x19b70000, 0x03370300, 0x19b90000, 0x0cdd0100, 0x19bb0000, 0x066f0200, 0x19bd0000, 0x0cdf0100, 0x19bf0000, 0x00670600, 0x19c10000, 0x0ce10100, 0x19c30000, 0x06710200, 0x19c50000, 0x0ce30100, 0x19c70000, 0x03390300, 0x19c90000, 0x0ce50100, 0x19cb0000, 0x06730200, 0x19cd0000, 0x0ce70100, 0x19cf0000, 0x019d0400, 0x19d10000, 0x0ce90100, 0x19d30000, 0x06750200, 0x19d50000, 0x0ceb0100, 0x19d70000, 0x033b0300, 0x19d90000, 0x0ced0100, 0x19db0000, 0x06770200, 0x19dd0000, 0x0cef0100, 0x19df0000, 0x00cf0500, 0x19e10000, 0x0cf10100, 0x19e30000, 0x06790200, 0x19e50000, 0x0cf30100, 0x19e70000, 0x033d0300, 0x19e90000, 0x0cf50100, 0x19eb0000, 0x067b0200, 0x19ed0000, 0x0cf70100, 0x19ef0000, 0x019f0400, 0x19f10000, 0x0cf90100, 0x19f30000, 0x067d0200, 0x19f50000, 0x0cfb0100, 0x19f70000, 0x033f0300, 0x19f90000, 0x0cfd0100, 0x19fb0000, 0x067f0200, 0x19fd0000, 0x0cff0100, 0x19ff0000, + 0x000d3600, 0x1a010000, 0x0d010100, 0x1a030000, 0x06810200, 0x1a050000, 0x0d030100, 0x1a070000, 0x03410300, 0x1a090000, 0x0d050100, 0x1a0b0000, 0x06830200, 0x1a0d0000, 0x0d070100, 0x1a0f0000, 0x01a10400, 0x1a110000, 0x0d090100, 0x1a130000, 0x06850200, 0x1a150000, 0x0d0b0100, 0x1a170000, 0x03430300, 0x1a190000, 0x0d0d0100, 0x1a1b0000, 0x06870200, 0x1a1d0000, 0x0d0f0100, 0x1a1f0000, 0x00d10500, 0x1a210000, 0x0d110100, 0x1a230000, 0x06890200, 0x1a250000, 0x0d130100, 0x1a270000, 0x03450300, 0x1a290000, 0x0d150100, 0x1a2b0000, 0x068b0200, 0x1a2d0000, 0x0d170100, 0x1a2f0000, 0x01a30400, 0x1a310000, 0x0d190100, 0x1a330000, 0x068d0200, 0x1a350000, 0x0d1b0100, 0x1a370000, 0x03470300, 0x1a390000, 0x0d1d0100, 0x1a3b0000, 0x068f0200, 0x1a3d0000, 0x0d1f0100, 0x1a3f0000, 0x00690600, 0x1a410000, 0x0d210100, 0x1a430000, 0x06910200, 0x1a450000, 0x0d230100, 0x1a470000, 0x03490300, 0x1a490000, 0x0d250100, 0x1a4b0000, 0x06930200, 0x1a4d0000, 0x0d270100, 0x1a4f0000, 0x01a50400, 0x1a510000, 0x0d290100, 0x1a530000, 0x06950200, 0x1a550000, 0x0d2b0100, 0x1a570000, 0x034b0300, 0x1a590000, 0x0d2d0100, 0x1a5b0000, 0x06970200, 0x1a5d0000, 0x0d2f0100, 0x1a5f0000, 0x00d30500, 0x1a610000, 0x0d310100, 0x1a630000, 0x06990200, 0x1a650000, 0x0d330100, 0x1a670000, 0x034d0300, 0x1a690000, 0x0d350100, 0x1a6b0000, 0x069b0200, 0x1a6d0000, 0x0d370100, 0x1a6f0000, 0x01a70400, 0x1a710000, 0x0d390100, 0x1a730000, 0x069d0200, 0x1a750000, 0x0d3b0100, 0x1a770000, 0x034f0300, 0x1a790000, 0x0d3d0100, 0x1a7b0000, 0x069f0200, 0x1a7d0000, 0x0d3f0100, 0x1a7f0000, 0x00351600, 0x1a810000, 0x0d410100, 0x1a830000, 0x06a10200, 0x1a850000, 0x0d430100, 0x1a870000, 0x03510300, 0x1a890000, 0x0d450100, 0x1a8b0000, 0x06a30200, 0x1a8d0000, 0x0d470100, 0x1a8f0000, 0x01a90400, 0x1a910000, 0x0d490100, 0x1a930000, 0x06a50200, 0x1a950000, 0x0d4b0100, 0x1a970000, 0x03530300, 0x1a990000, 0x0d4d0100, 0x1a9b0000, 0x06a70200, 0x1a9d0000, 0x0d4f0100, 0x1a9f0000, 0x00d50500, 0x1aa10000, 0x0d510100, 0x1aa30000, 0x06a90200, 0x1aa50000, 0x0d530100, 0x1aa70000, 0x03550300, 0x1aa90000, 0x0d550100, 0x1aab0000, 0x06ab0200, 0x1aad0000, 0x0d570100, 0x1aaf0000, 0x01ab0400, 0x1ab10000, 0x0d590100, 0x1ab30000, 0x06ad0200, 0x1ab50000, 0x0d5b0100, 0x1ab70000, 0x03570300, 0x1ab90000, 0x0d5d0100, 0x1abb0000, 0x06af0200, 0x1abd0000, 0x0d5f0100, 0x1abf0000, 0x006b0600, 0x1ac10000, 0x0d610100, 0x1ac30000, 0x06b10200, 0x1ac50000, 0x0d630100, 0x1ac70000, 0x03590300, 0x1ac90000, 0x0d650100, 0x1acb0000, 0x06b30200, 0x1acd0000, 0x0d670100, 0x1acf0000, 0x01ad0400, 0x1ad10000, 0x0d690100, 0x1ad30000, 0x06b50200, 0x1ad50000, 0x0d6b0100, 0x1ad70000, 0x035b0300, 0x1ad90000, 0x0d6d0100, 0x1adb0000, 0x06b70200, 0x1add0000, 0x0d6f0100, 0x1adf0000, 0x00d70500, 0x1ae10000, 0x0d710100, 0x1ae30000, 0x06b90200, 0x1ae50000, 0x0d730100, 0x1ae70000, 0x035d0300, 0x1ae90000, 0x0d750100, 0x1aeb0000, 0x06bb0200, 0x1aed0000, 0x0d770100, 0x1aef0000, 0x01af0400, 0x1af10000, 0x0d790100, 0x1af30000, 0x06bd0200, 0x1af50000, 0x0d7b0100, 0x1af70000, 0x035f0300, 0x1af90000, 0x0d7d0100, 0x1afb0000, 0x06bf0200, 0x1afd0000, 0x0d7f0100, 0x1aff0000, + 0x001b2600, 0x1b010000, 0x0d810100, 0x1b030000, 0x06c10200, 0x1b050000, 0x0d830100, 0x1b070000, 0x03610300, 0x1b090000, 0x0d850100, 0x1b0b0000, 0x06c30200, 0x1b0d0000, 0x0d870100, 0x1b0f0000, 0x01b10400, 0x1b110000, 0x0d890100, 0x1b130000, 0x06c50200, 0x1b150000, 0x0d8b0100, 0x1b170000, 0x03630300, 0x1b190000, 0x0d8d0100, 0x1b1b0000, 0x06c70200, 0x1b1d0000, 0x0d8f0100, 0x1b1f0000, 0x00d90500, 0x1b210000, 0x0d910100, 0x1b230000, 0x06c90200, 0x1b250000, 0x0d930100, 0x1b270000, 0x03650300, 0x1b290000, 0x0d950100, 0x1b2b0000, 0x06cb0200, 0x1b2d0000, 0x0d970100, 0x1b2f0000, 0x01b30400, 0x1b310000, 0x0d990100, 0x1b330000, 0x06cd0200, 0x1b350000, 0x0d9b0100, 0x1b370000, 0x03670300, 0x1b390000, 0x0d9d0100, 0x1b3b0000, 0x06cf0200, 0x1b3d0000, 0x0d9f0100, 0x1b3f0000, 0x006d0600, 0x1b410000, 0x0da10100, 0x1b430000, 0x06d10200, 0x1b450000, 0x0da30100, 0x1b470000, 0x03690300, 0x1b490000, 0x0da50100, 0x1b4b0000, 0x06d30200, 0x1b4d0000, 0x0da70100, 0x1b4f0000, 0x01b50400, 0x1b510000, 0x0da90100, 0x1b530000, 0x06d50200, 0x1b550000, 0x0dab0100, 0x1b570000, 0x036b0300, 0x1b590000, 0x0dad0100, 0x1b5b0000, 0x06d70200, 0x1b5d0000, 0x0daf0100, 0x1b5f0000, 0x00db0500, 0x1b610000, 0x0db10100, 0x1b630000, 0x06d90200, 0x1b650000, 0x0db30100, 0x1b670000, 0x036d0300, 0x1b690000, 0x0db50100, 0x1b6b0000, 0x06db0200, 0x1b6d0000, 0x0db70100, 0x1b6f0000, 0x01b70400, 0x1b710000, 0x0db90100, 0x1b730000, 0x06dd0200, 0x1b750000, 0x0dbb0100, 0x1b770000, 0x036f0300, 0x1b790000, 0x0dbd0100, 0x1b7b0000, 0x06df0200, 0x1b7d0000, 0x0dbf0100, 0x1b7f0000, 0x00371600, 0x1b810000, 0x0dc10100, 0x1b830000, 0x06e10200, 0x1b850000, 0x0dc30100, 0x1b870000, 0x03710300, 0x1b890000, 0x0dc50100, 0x1b8b0000, 0x06e30200, 0x1b8d0000, 0x0dc70100, 0x1b8f0000, 0x01b90400, 0x1b910000, 0x0dc90100, 0x1b930000, 0x06e50200, 0x1b950000, 0x0dcb0100, 0x1b970000, 0x03730300, 0x1b990000, 0x0dcd0100, 0x1b9b0000, 0x06e70200, 0x1b9d0000, 0x0dcf0100, 0x1b9f0000, 0x00dd0500, 0x1ba10000, 0x0dd10100, 0x1ba30000, 0x06e90200, 0x1ba50000, 0x0dd30100, 0x1ba70000, 0x03750300, 0x1ba90000, 0x0dd50100, 0x1bab0000, 0x06eb0200, 0x1bad0000, 0x0dd70100, 0x1baf0000, 0x01bb0400, 0x1bb10000, 0x0dd90100, 0x1bb30000, 0x06ed0200, 0x1bb50000, 0x0ddb0100, 0x1bb70000, 0x03770300, 0x1bb90000, 0x0ddd0100, 0x1bbb0000, 0x06ef0200, 0x1bbd0000, 0x0ddf0100, 0x1bbf0000, 0x006f0600, 0x1bc10000, 0x0de10100, 0x1bc30000, 0x06f10200, 0x1bc50000, 0x0de30100, 0x1bc70000, 0x03790300, 0x1bc90000, 0x0de50100, 0x1bcb0000, 0x06f30200, 0x1bcd0000, 0x0de70100, 0x1bcf0000, 0x01bd0400, 0x1bd10000, 0x0de90100, 0x1bd30000, 0x06f50200, 0x1bd50000, 0x0deb0100, 0x1bd70000, 0x037b0300, 0x1bd90000, 0x0ded0100, 0x1bdb0000, 0x06f70200, 0x1bdd0000, 0x0def0100, 0x1bdf0000, 0x00df0500, 0x1be10000, 0x0df10100, 0x1be30000, 0x06f90200, 0x1be50000, 0x0df30100, 0x1be70000, 0x037d0300, 0x1be90000, 0x0df50100, 0x1beb0000, 0x06fb0200, 0x1bed0000, 0x0df70100, 0x1bef0000, 0x01bf0400, 0x1bf10000, 0x0df90100, 0x1bf30000, 0x06fd0200, 0x1bf50000, 0x0dfb0100, 0x1bf70000, 0x037f0300, 0x1bf90000, 0x0dfd0100, 0x1bfb0000, 0x06ff0200, 0x1bfd0000, 0x0dff0100, 0x1bff0000, + 0x00074600, 0x1c010000, 0x0e010100, 0x1c030000, 0x07010200, 0x1c050000, 0x0e030100, 0x1c070000, 0x03810300, 0x1c090000, 0x0e050100, 0x1c0b0000, 0x07030200, 0x1c0d0000, 0x0e070100, 0x1c0f0000, 0x01c10400, 0x1c110000, 0x0e090100, 0x1c130000, 0x07050200, 0x1c150000, 0x0e0b0100, 0x1c170000, 0x03830300, 0x1c190000, 0x0e0d0100, 0x1c1b0000, 0x07070200, 0x1c1d0000, 0x0e0f0100, 0x1c1f0000, 0x00e10500, 0x1c210000, 0x0e110100, 0x1c230000, 0x07090200, 0x1c250000, 0x0e130100, 0x1c270000, 0x03850300, 0x1c290000, 0x0e150100, 0x1c2b0000, 0x070b0200, 0x1c2d0000, 0x0e170100, 0x1c2f0000, 0x01c30400, 0x1c310000, 0x0e190100, 0x1c330000, 0x070d0200, 0x1c350000, 0x0e1b0100, 0x1c370000, 0x03870300, 0x1c390000, 0x0e1d0100, 0x1c3b0000, 0x070f0200, 0x1c3d0000, 0x0e1f0100, 0x1c3f0000, 0x00710600, 0x1c410000, 0x0e210100, 0x1c430000, 0x07110200, 0x1c450000, 0x0e230100, 0x1c470000, 0x03890300, 0x1c490000, 0x0e250100, 0x1c4b0000, 0x07130200, 0x1c4d0000, 0x0e270100, 0x1c4f0000, 0x01c50400, 0x1c510000, 0x0e290100, 0x1c530000, 0x07150200, 0x1c550000, 0x0e2b0100, 0x1c570000, 0x038b0300, 0x1c590000, 0x0e2d0100, 0x1c5b0000, 0x07170200, 0x1c5d0000, 0x0e2f0100, 0x1c5f0000, 0x00e30500, 0x1c610000, 0x0e310100, 0x1c630000, 0x07190200, 0x1c650000, 0x0e330100, 0x1c670000, 0x038d0300, 0x1c690000, 0x0e350100, 0x1c6b0000, 0x071b0200, 0x1c6d0000, 0x0e370100, 0x1c6f0000, 0x01c70400, 0x1c710000, 0x0e390100, 0x1c730000, 0x071d0200, 0x1c750000, 0x0e3b0100, 0x1c770000, 0x038f0300, 0x1c790000, 0x0e3d0100, 0x1c7b0000, 0x071f0200, 0x1c7d0000, 0x0e3f0100, 0x1c7f0000, 0x00391600, 0x1c810000, 0x0e410100, 0x1c830000, 0x07210200, 0x1c850000, 0x0e430100, 0x1c870000, 0x03910300, 0x1c890000, 0x0e450100, 0x1c8b0000, 0x07230200, 0x1c8d0000, 0x0e470100, 0x1c8f0000, 0x01c90400, 0x1c910000, 0x0e490100, 0x1c930000, 0x07250200, 0x1c950000, 0x0e4b0100, 0x1c970000, 0x03930300, 0x1c990000, 0x0e4d0100, 0x1c9b0000, 0x07270200, 0x1c9d0000, 0x0e4f0100, 0x1c9f0000, 0x00e50500, 0x1ca10000, 0x0e510100, 0x1ca30000, 0x07290200, 0x1ca50000, 0x0e530100, 0x1ca70000, 0x03950300, 0x1ca90000, 0x0e550100, 0x1cab0000, 0x072b0200, 0x1cad0000, 0x0e570100, 0x1caf0000, 0x01cb0400, 0x1cb10000, 0x0e590100, 0x1cb30000, 0x072d0200, 0x1cb50000, 0x0e5b0100, 0x1cb70000, 0x03970300, 0x1cb90000, 0x0e5d0100, 0x1cbb0000, 0x072f0200, 0x1cbd0000, 0x0e5f0100, 0x1cbf0000, 0x00730600, 0x1cc10000, 0x0e610100, 0x1cc30000, 0x07310200, 0x1cc50000, 0x0e630100, 0x1cc70000, 0x03990300, 0x1cc90000, 0x0e650100, 0x1ccb0000, 0x07330200, 0x1ccd0000, 0x0e670100, 0x1ccf0000, 0x01cd0400, 0x1cd10000, 0x0e690100, 0x1cd30000, 0x07350200, 0x1cd50000, 0x0e6b0100, 0x1cd70000, 0x039b0300, 0x1cd90000, 0x0e6d0100, 0x1cdb0000, 0x07370200, 0x1cdd0000, 0x0e6f0100, 0x1cdf0000, 0x00e70500, 0x1ce10000, 0x0e710100, 0x1ce30000, 0x07390200, 0x1ce50000, 0x0e730100, 0x1ce70000, 0x039d0300, 0x1ce90000, 0x0e750100, 0x1ceb0000, 0x073b0200, 0x1ced0000, 0x0e770100, 0x1cef0000, 0x01cf0400, 0x1cf10000, 0x0e790100, 0x1cf30000, 0x073d0200, 0x1cf50000, 0x0e7b0100, 0x1cf70000, 0x039f0300, 0x1cf90000, 0x0e7d0100, 0x1cfb0000, 0x073f0200, 0x1cfd0000, 0x0e7f0100, 0x1cff0000, + 0x001d2600, 0x1d010000, 0x0e810100, 0x1d030000, 0x07410200, 0x1d050000, 0x0e830100, 0x1d070000, 0x03a10300, 0x1d090000, 0x0e850100, 0x1d0b0000, 0x07430200, 0x1d0d0000, 0x0e870100, 0x1d0f0000, 0x01d10400, 0x1d110000, 0x0e890100, 0x1d130000, 0x07450200, 0x1d150000, 0x0e8b0100, 0x1d170000, 0x03a30300, 0x1d190000, 0x0e8d0100, 0x1d1b0000, 0x07470200, 0x1d1d0000, 0x0e8f0100, 0x1d1f0000, 0x00e90500, 0x1d210000, 0x0e910100, 0x1d230000, 0x07490200, 0x1d250000, 0x0e930100, 0x1d270000, 0x03a50300, 0x1d290000, 0x0e950100, 0x1d2b0000, 0x074b0200, 0x1d2d0000, 0x0e970100, 0x1d2f0000, 0x01d30400, 0x1d310000, 0x0e990100, 0x1d330000, 0x074d0200, 0x1d350000, 0x0e9b0100, 0x1d370000, 0x03a70300, 0x1d390000, 0x0e9d0100, 0x1d3b0000, 0x074f0200, 0x1d3d0000, 0x0e9f0100, 0x1d3f0000, 0x00750600, 0x1d410000, 0x0ea10100, 0x1d430000, 0x07510200, 0x1d450000, 0x0ea30100, 0x1d470000, 0x03a90300, 0x1d490000, 0x0ea50100, 0x1d4b0000, 0x07530200, 0x1d4d0000, 0x0ea70100, 0x1d4f0000, 0x01d50400, 0x1d510000, 0x0ea90100, 0x1d530000, 0x07550200, 0x1d550000, 0x0eab0100, 0x1d570000, 0x03ab0300, 0x1d590000, 0x0ead0100, 0x1d5b0000, 0x07570200, 0x1d5d0000, 0x0eaf0100, 0x1d5f0000, 0x00eb0500, 0x1d610000, 0x0eb10100, 0x1d630000, 0x07590200, 0x1d650000, 0x0eb30100, 0x1d670000, 0x03ad0300, 0x1d690000, 0x0eb50100, 0x1d6b0000, 0x075b0200, 0x1d6d0000, 0x0eb70100, 0x1d6f0000, 0x01d70400, 0x1d710000, 0x0eb90100, 0x1d730000, 0x075d0200, 0x1d750000, 0x0ebb0100, 0x1d770000, 0x03af0300, 0x1d790000, 0x0ebd0100, 0x1d7b0000, 0x075f0200, 0x1d7d0000, 0x0ebf0100, 0x1d7f0000, 0x003b1600, 0x1d810000, 0x0ec10100, 0x1d830000, 0x07610200, 0x1d850000, 0x0ec30100, 0x1d870000, 0x03b10300, 0x1d890000, 0x0ec50100, 0x1d8b0000, 0x07630200, 0x1d8d0000, 0x0ec70100, 0x1d8f0000, 0x01d90400, 0x1d910000, 0x0ec90100, 0x1d930000, 0x07650200, 0x1d950000, 0x0ecb0100, 0x1d970000, 0x03b30300, 0x1d990000, 0x0ecd0100, 0x1d9b0000, 0x07670200, 0x1d9d0000, 0x0ecf0100, 0x1d9f0000, 0x00ed0500, 0x1da10000, 0x0ed10100, 0x1da30000, 0x07690200, 0x1da50000, 0x0ed30100, 0x1da70000, 0x03b50300, 0x1da90000, 0x0ed50100, 0x1dab0000, 0x076b0200, 0x1dad0000, 0x0ed70100, 0x1daf0000, 0x01db0400, 0x1db10000, 0x0ed90100, 0x1db30000, 0x076d0200, 0x1db50000, 0x0edb0100, 0x1db70000, 0x03b70300, 0x1db90000, 0x0edd0100, 0x1dbb0000, 0x076f0200, 0x1dbd0000, 0x0edf0100, 0x1dbf0000, 0x00770600, 0x1dc10000, 0x0ee10100, 0x1dc30000, 0x07710200, 0x1dc50000, 0x0ee30100, 0x1dc70000, 0x03b90300, 0x1dc90000, 0x0ee50100, 0x1dcb0000, 0x07730200, 0x1dcd0000, 0x0ee70100, 0x1dcf0000, 0x01dd0400, 0x1dd10000, 0x0ee90100, 0x1dd30000, 0x07750200, 0x1dd50000, 0x0eeb0100, 0x1dd70000, 0x03bb0300, 0x1dd90000, 0x0eed0100, 0x1ddb0000, 0x07770200, 0x1ddd0000, 0x0eef0100, 0x1ddf0000, 0x00ef0500, 0x1de10000, 0x0ef10100, 0x1de30000, 0x07790200, 0x1de50000, 0x0ef30100, 0x1de70000, 0x03bd0300, 0x1de90000, 0x0ef50100, 0x1deb0000, 0x077b0200, 0x1ded0000, 0x0ef70100, 0x1def0000, 0x01df0400, 0x1df10000, 0x0ef90100, 0x1df30000, 0x077d0200, 0x1df50000, 0x0efb0100, 0x1df70000, 0x03bf0300, 0x1df90000, 0x0efd0100, 0x1dfb0000, 0x077f0200, 0x1dfd0000, 0x0eff0100, 0x1dff0000, + 0x000f3600, 0x1e010000, 0x0f010100, 0x1e030000, 0x07810200, 0x1e050000, 0x0f030100, 0x1e070000, 0x03c10300, 0x1e090000, 0x0f050100, 0x1e0b0000, 0x07830200, 0x1e0d0000, 0x0f070100, 0x1e0f0000, 0x01e10400, 0x1e110000, 0x0f090100, 0x1e130000, 0x07850200, 0x1e150000, 0x0f0b0100, 0x1e170000, 0x03c30300, 0x1e190000, 0x0f0d0100, 0x1e1b0000, 0x07870200, 0x1e1d0000, 0x0f0f0100, 0x1e1f0000, 0x00f10500, 0x1e210000, 0x0f110100, 0x1e230000, 0x07890200, 0x1e250000, 0x0f130100, 0x1e270000, 0x03c50300, 0x1e290000, 0x0f150100, 0x1e2b0000, 0x078b0200, 0x1e2d0000, 0x0f170100, 0x1e2f0000, 0x01e30400, 0x1e310000, 0x0f190100, 0x1e330000, 0x078d0200, 0x1e350000, 0x0f1b0100, 0x1e370000, 0x03c70300, 0x1e390000, 0x0f1d0100, 0x1e3b0000, 0x078f0200, 0x1e3d0000, 0x0f1f0100, 0x1e3f0000, 0x00790600, 0x1e410000, 0x0f210100, 0x1e430000, 0x07910200, 0x1e450000, 0x0f230100, 0x1e470000, 0x03c90300, 0x1e490000, 0x0f250100, 0x1e4b0000, 0x07930200, 0x1e4d0000, 0x0f270100, 0x1e4f0000, 0x01e50400, 0x1e510000, 0x0f290100, 0x1e530000, 0x07950200, 0x1e550000, 0x0f2b0100, 0x1e570000, 0x03cb0300, 0x1e590000, 0x0f2d0100, 0x1e5b0000, 0x07970200, 0x1e5d0000, 0x0f2f0100, 0x1e5f0000, 0x00f30500, 0x1e610000, 0x0f310100, 0x1e630000, 0x07990200, 0x1e650000, 0x0f330100, 0x1e670000, 0x03cd0300, 0x1e690000, 0x0f350100, 0x1e6b0000, 0x079b0200, 0x1e6d0000, 0x0f370100, 0x1e6f0000, 0x01e70400, 0x1e710000, 0x0f390100, 0x1e730000, 0x079d0200, 0x1e750000, 0x0f3b0100, 0x1e770000, 0x03cf0300, 0x1e790000, 0x0f3d0100, 0x1e7b0000, 0x079f0200, 0x1e7d0000, 0x0f3f0100, 0x1e7f0000, 0x003d1600, 0x1e810000, 0x0f410100, 0x1e830000, 0x07a10200, 0x1e850000, 0x0f430100, 0x1e870000, 0x03d10300, 0x1e890000, 0x0f450100, 0x1e8b0000, 0x07a30200, 0x1e8d0000, 0x0f470100, 0x1e8f0000, 0x01e90400, 0x1e910000, 0x0f490100, 0x1e930000, 0x07a50200, 0x1e950000, 0x0f4b0100, 0x1e970000, 0x03d30300, 0x1e990000, 0x0f4d0100, 0x1e9b0000, 0x07a70200, 0x1e9d0000, 0x0f4f0100, 0x1e9f0000, 0x00f50500, 0x1ea10000, 0x0f510100, 0x1ea30000, 0x07a90200, 0x1ea50000, 0x0f530100, 0x1ea70000, 0x03d50300, 0x1ea90000, 0x0f550100, 0x1eab0000, 0x07ab0200, 0x1ead0000, 0x0f570100, 0x1eaf0000, 0x01eb0400, 0x1eb10000, 0x0f590100, 0x1eb30000, 0x07ad0200, 0x1eb50000, 0x0f5b0100, 0x1eb70000, 0x03d70300, 0x1eb90000, 0x0f5d0100, 0x1ebb0000, 0x07af0200, 0x1ebd0000, 0x0f5f0100, 0x1ebf0000, 0x007b0600, 0x1ec10000, 0x0f610100, 0x1ec30000, 0x07b10200, 0x1ec50000, 0x0f630100, 0x1ec70000, 0x03d90300, 0x1ec90000, 0x0f650100, 0x1ecb0000, 0x07b30200, 0x1ecd0000, 0x0f670100, 0x1ecf0000, 0x01ed0400, 0x1ed10000, 0x0f690100, 0x1ed30000, 0x07b50200, 0x1ed50000, 0x0f6b0100, 0x1ed70000, 0x03db0300, 0x1ed90000, 0x0f6d0100, 0x1edb0000, 0x07b70200, 0x1edd0000, 0x0f6f0100, 0x1edf0000, 0x00f70500, 0x1ee10000, 0x0f710100, 0x1ee30000, 0x07b90200, 0x1ee50000, 0x0f730100, 0x1ee70000, 0x03dd0300, 0x1ee90000, 0x0f750100, 0x1eeb0000, 0x07bb0200, 0x1eed0000, 0x0f770100, 0x1eef0000, 0x01ef0400, 0x1ef10000, 0x0f790100, 0x1ef30000, 0x07bd0200, 0x1ef50000, 0x0f7b0100, 0x1ef70000, 0x03df0300, 0x1ef90000, 0x0f7d0100, 0x1efb0000, 0x07bf0200, 0x1efd0000, 0x0f7f0100, 0x1eff0000, + 0x001f2600, 0x1f010000, 0x0f810100, 0x1f030000, 0x07c10200, 0x1f050000, 0x0f830100, 0x1f070000, 0x03e10300, 0x1f090000, 0x0f850100, 0x1f0b0000, 0x07c30200, 0x1f0d0000, 0x0f870100, 0x1f0f0000, 0x01f10400, 0x1f110000, 0x0f890100, 0x1f130000, 0x07c50200, 0x1f150000, 0x0f8b0100, 0x1f170000, 0x03e30300, 0x1f190000, 0x0f8d0100, 0x1f1b0000, 0x07c70200, 0x1f1d0000, 0x0f8f0100, 0x1f1f0000, 0x00f90500, 0x1f210000, 0x0f910100, 0x1f230000, 0x07c90200, 0x1f250000, 0x0f930100, 0x1f270000, 0x03e50300, 0x1f290000, 0x0f950100, 0x1f2b0000, 0x07cb0200, 0x1f2d0000, 0x0f970100, 0x1f2f0000, 0x01f30400, 0x1f310000, 0x0f990100, 0x1f330000, 0x07cd0200, 0x1f350000, 0x0f9b0100, 0x1f370000, 0x03e70300, 0x1f390000, 0x0f9d0100, 0x1f3b0000, 0x07cf0200, 0x1f3d0000, 0x0f9f0100, 0x1f3f0000, 0x007d0600, 0x1f410000, 0x0fa10100, 0x1f430000, 0x07d10200, 0x1f450000, 0x0fa30100, 0x1f470000, 0x03e90300, 0x1f490000, 0x0fa50100, 0x1f4b0000, 0x07d30200, 0x1f4d0000, 0x0fa70100, 0x1f4f0000, 0x01f50400, 0x1f510000, 0x0fa90100, 0x1f530000, 0x07d50200, 0x1f550000, 0x0fab0100, 0x1f570000, 0x03eb0300, 0x1f590000, 0x0fad0100, 0x1f5b0000, 0x07d70200, 0x1f5d0000, 0x0faf0100, 0x1f5f0000, 0x00fb0500, 0x1f610000, 0x0fb10100, 0x1f630000, 0x07d90200, 0x1f650000, 0x0fb30100, 0x1f670000, 0x03ed0300, 0x1f690000, 0x0fb50100, 0x1f6b0000, 0x07db0200, 0x1f6d0000, 0x0fb70100, 0x1f6f0000, 0x01f70400, 0x1f710000, 0x0fb90100, 0x1f730000, 0x07dd0200, 0x1f750000, 0x0fbb0100, 0x1f770000, 0x03ef0300, 0x1f790000, 0x0fbd0100, 0x1f7b0000, 0x07df0200, 0x1f7d0000, 0x0fbf0100, 0x1f7f0000, 0x003f1600, 0x1f810000, 0x0fc10100, 0x1f830000, 0x07e10200, 0x1f850000, 0x0fc30100, 0x1f870000, 0x03f10300, 0x1f890000, 0x0fc50100, 0x1f8b0000, 0x07e30200, 0x1f8d0000, 0x0fc70100, 0x1f8f0000, 0x01f90400, 0x1f910000, 0x0fc90100, 0x1f930000, 0x07e50200, 0x1f950000, 0x0fcb0100, 0x1f970000, 0x03f30300, 0x1f990000, 0x0fcd0100, 0x1f9b0000, 0x07e70200, 0x1f9d0000, 0x0fcf0100, 0x1f9f0000, 0x00fd0500, 0x1fa10000, 0x0fd10100, 0x1fa30000, 0x07e90200, 0x1fa50000, 0x0fd30100, 0x1fa70000, 0x03f50300, 0x1fa90000, 0x0fd50100, 0x1fab0000, 0x07eb0200, 0x1fad0000, 0x0fd70100, 0x1faf0000, 0x01fb0400, 0x1fb10000, 0x0fd90100, 0x1fb30000, 0x07ed0200, 0x1fb50000, 0x0fdb0100, 0x1fb70000, 0x03f70300, 0x1fb90000, 0x0fdd0100, 0x1fbb0000, 0x07ef0200, 0x1fbd0000, 0x0fdf0100, 0x1fbf0000, 0x007f0600, 0x1fc10000, 0x0fe10100, 0x1fc30000, 0x07f10200, 0x1fc50000, 0x0fe30100, 0x1fc70000, 0x03f90300, 0x1fc90000, 0x0fe50100, 0x1fcb0000, 0x07f30200, 0x1fcd0000, 0x0fe70100, 0x1fcf0000, 0x01fd0400, 0x1fd10000, 0x0fe90100, 0x1fd30000, 0x07f50200, 0x1fd50000, 0x0feb0100, 0x1fd70000, 0x03fb0300, 0x1fd90000, 0x0fed0100, 0x1fdb0000, 0x07f70200, 0x1fdd0000, 0x0fef0100, 0x1fdf0000, 0x00ff0500, 0x1fe10000, 0x0ff10100, 0x1fe30000, 0x07f90200, 0x1fe50000, 0x0ff30100, 0x1fe70000, 0x03fd0300, 0x1fe90000, 0x0ff50100, 0x1feb0000, 0x07fb0200, 0x1fed0000, 0x0ff70100, 0x1fef0000, 0x01ff0400, 0x1ff10000, 0x0ff90100, 0x1ff30000, 0x07fd0200, 0x1ff50000, 0x0ffb0100, 0x1ff70000, 0x03ff0300, 0x1ff90000, 0x0ffd0100, 0x1ffb0000, 0x07ff0200, 0x1ffd0000, 0x0fff0100, 0x1fff0000, + 0x00017600, 0x20010000, 0x10010100, 0x20030000, 0x08010200, 0x20050000, 0x10030100, 0x20070000, 0x04010300, 0x20090000, 0x10050100, 0x200b0000, 0x08030200, 0x200d0000, 0x10070100, 0x200f0000, 0x02010400, 0x20110000, 0x10090100, 0x20130000, 0x08050200, 0x20150000, 0x100b0100, 0x20170000, 0x04030300, 0x20190000, 0x100d0100, 0x201b0000, 0x08070200, 0x201d0000, 0x100f0100, 0x201f0000, 0x01010500, 0x20210000, 0x10110100, 0x20230000, 0x08090200, 0x20250000, 0x10130100, 0x20270000, 0x04050300, 0x20290000, 0x10150100, 0x202b0000, 0x080b0200, 0x202d0000, 0x10170100, 0x202f0000, 0x02030400, 0x20310000, 0x10190100, 0x20330000, 0x080d0200, 0x20350000, 0x101b0100, 0x20370000, 0x04070300, 0x20390000, 0x101d0100, 0x203b0000, 0x080f0200, 0x203d0000, 0x101f0100, 0x203f0000, 0x00810600, 0x20410000, 0x10210100, 0x20430000, 0x08110200, 0x20450000, 0x10230100, 0x20470000, 0x04090300, 0x20490000, 0x10250100, 0x204b0000, 0x08130200, 0x204d0000, 0x10270100, 0x204f0000, 0x02050400, 0x20510000, 0x10290100, 0x20530000, 0x08150200, 0x20550000, 0x102b0100, 0x20570000, 0x040b0300, 0x20590000, 0x102d0100, 0x205b0000, 0x08170200, 0x205d0000, 0x102f0100, 0x205f0000, 0x01030500, 0x20610000, 0x10310100, 0x20630000, 0x08190200, 0x20650000, 0x10330100, 0x20670000, 0x040d0300, 0x20690000, 0x10350100, 0x206b0000, 0x081b0200, 0x206d0000, 0x10370100, 0x206f0000, 0x02070400, 0x20710000, 0x10390100, 0x20730000, 0x081d0200, 0x20750000, 0x103b0100, 0x20770000, 0x040f0300, 0x20790000, 0x103d0100, 0x207b0000, 0x081f0200, 0x207d0000, 0x103f0100, 0x207f0000, 0x00411600, 0x20810000, 0x10410100, 0x20830000, 0x08210200, 0x20850000, 0x10430100, 0x20870000, 0x04110300, 0x20890000, 0x10450100, 0x208b0000, 0x08230200, 0x208d0000, 0x10470100, 0x208f0000, 0x02090400, 0x20910000, 0x10490100, 0x20930000, 0x08250200, 0x20950000, 0x104b0100, 0x20970000, 0x04130300, 0x20990000, 0x104d0100, 0x209b0000, 0x08270200, 0x209d0000, 0x104f0100, 0x209f0000, 0x01050500, 0x20a10000, 0x10510100, 0x20a30000, 0x08290200, 0x20a50000, 0x10530100, 0x20a70000, 0x04150300, 0x20a90000, 0x10550100, 0x20ab0000, 0x082b0200, 0x20ad0000, 0x10570100, 0x20af0000, 0x020b0400, 0x20b10000, 0x10590100, 0x20b30000, 0x082d0200, 0x20b50000, 0x105b0100, 0x20b70000, 0x04170300, 0x20b90000, 0x105d0100, 0x20bb0000, 0x082f0200, 0x20bd0000, 0x105f0100, 0x20bf0000, 0x00830600, 0x20c10000, 0x10610100, 0x20c30000, 0x08310200, 0x20c50000, 0x10630100, 0x20c70000, 0x04190300, 0x20c90000, 0x10650100, 0x20cb0000, 0x08330200, 0x20cd0000, 0x10670100, 0x20cf0000, 0x020d0400, 0x20d10000, 0x10690100, 0x20d30000, 0x08350200, 0x20d50000, 0x106b0100, 0x20d70000, 0x041b0300, 0x20d90000, 0x106d0100, 0x20db0000, 0x08370200, 0x20dd0000, 0x106f0100, 0x20df0000, 0x01070500, 0x20e10000, 0x10710100, 0x20e30000, 0x08390200, 0x20e50000, 0x10730100, 0x20e70000, 0x041d0300, 0x20e90000, 0x10750100, 0x20eb0000, 0x083b0200, 0x20ed0000, 0x10770100, 0x20ef0000, 0x020f0400, 0x20f10000, 0x10790100, 0x20f30000, 0x083d0200, 0x20f50000, 0x107b0100, 0x20f70000, 0x041f0300, 0x20f90000, 0x107d0100, 0x20fb0000, 0x083f0200, 0x20fd0000, 0x107f0100, 0x20ff0000, + 0x00212600, 0x21010000, 0x10810100, 0x21030000, 0x08410200, 0x21050000, 0x10830100, 0x21070000, 0x04210300, 0x21090000, 0x10850100, 0x210b0000, 0x08430200, 0x210d0000, 0x10870100, 0x210f0000, 0x02110400, 0x21110000, 0x10890100, 0x21130000, 0x08450200, 0x21150000, 0x108b0100, 0x21170000, 0x04230300, 0x21190000, 0x108d0100, 0x211b0000, 0x08470200, 0x211d0000, 0x108f0100, 0x211f0000, 0x01090500, 0x21210000, 0x10910100, 0x21230000, 0x08490200, 0x21250000, 0x10930100, 0x21270000, 0x04250300, 0x21290000, 0x10950100, 0x212b0000, 0x084b0200, 0x212d0000, 0x10970100, 0x212f0000, 0x02130400, 0x21310000, 0x10990100, 0x21330000, 0x084d0200, 0x21350000, 0x109b0100, 0x21370000, 0x04270300, 0x21390000, 0x109d0100, 0x213b0000, 0x084f0200, 0x213d0000, 0x109f0100, 0x213f0000, 0x00850600, 0x21410000, 0x10a10100, 0x21430000, 0x08510200, 0x21450000, 0x10a30100, 0x21470000, 0x04290300, 0x21490000, 0x10a50100, 0x214b0000, 0x08530200, 0x214d0000, 0x10a70100, 0x214f0000, 0x02150400, 0x21510000, 0x10a90100, 0x21530000, 0x08550200, 0x21550000, 0x10ab0100, 0x21570000, 0x042b0300, 0x21590000, 0x10ad0100, 0x215b0000, 0x08570200, 0x215d0000, 0x10af0100, 0x215f0000, 0x010b0500, 0x21610000, 0x10b10100, 0x21630000, 0x08590200, 0x21650000, 0x10b30100, 0x21670000, 0x042d0300, 0x21690000, 0x10b50100, 0x216b0000, 0x085b0200, 0x216d0000, 0x10b70100, 0x216f0000, 0x02170400, 0x21710000, 0x10b90100, 0x21730000, 0x085d0200, 0x21750000, 0x10bb0100, 0x21770000, 0x042f0300, 0x21790000, 0x10bd0100, 0x217b0000, 0x085f0200, 0x217d0000, 0x10bf0100, 0x217f0000, 0x00431600, 0x21810000, 0x10c10100, 0x21830000, 0x08610200, 0x21850000, 0x10c30100, 0x21870000, 0x04310300, 0x21890000, 0x10c50100, 0x218b0000, 0x08630200, 0x218d0000, 0x10c70100, 0x218f0000, 0x02190400, 0x21910000, 0x10c90100, 0x21930000, 0x08650200, 0x21950000, 0x10cb0100, 0x21970000, 0x04330300, 0x21990000, 0x10cd0100, 0x219b0000, 0x08670200, 0x219d0000, 0x10cf0100, 0x219f0000, 0x010d0500, 0x21a10000, 0x10d10100, 0x21a30000, 0x08690200, 0x21a50000, 0x10d30100, 0x21a70000, 0x04350300, 0x21a90000, 0x10d50100, 0x21ab0000, 0x086b0200, 0x21ad0000, 0x10d70100, 0x21af0000, 0x021b0400, 0x21b10000, 0x10d90100, 0x21b30000, 0x086d0200, 0x21b50000, 0x10db0100, 0x21b70000, 0x04370300, 0x21b90000, 0x10dd0100, 0x21bb0000, 0x086f0200, 0x21bd0000, 0x10df0100, 0x21bf0000, 0x00870600, 0x21c10000, 0x10e10100, 0x21c30000, 0x08710200, 0x21c50000, 0x10e30100, 0x21c70000, 0x04390300, 0x21c90000, 0x10e50100, 0x21cb0000, 0x08730200, 0x21cd0000, 0x10e70100, 0x21cf0000, 0x021d0400, 0x21d10000, 0x10e90100, 0x21d30000, 0x08750200, 0x21d50000, 0x10eb0100, 0x21d70000, 0x043b0300, 0x21d90000, 0x10ed0100, 0x21db0000, 0x08770200, 0x21dd0000, 0x10ef0100, 0x21df0000, 0x010f0500, 0x21e10000, 0x10f10100, 0x21e30000, 0x08790200, 0x21e50000, 0x10f30100, 0x21e70000, 0x043d0300, 0x21e90000, 0x10f50100, 0x21eb0000, 0x087b0200, 0x21ed0000, 0x10f70100, 0x21ef0000, 0x021f0400, 0x21f10000, 0x10f90100, 0x21f30000, 0x087d0200, 0x21f50000, 0x10fb0100, 0x21f70000, 0x043f0300, 0x21f90000, 0x10fd0100, 0x21fb0000, 0x087f0200, 0x21fd0000, 0x10ff0100, 0x21ff0000, + 0x00113600, 0x22010000, 0x11010100, 0x22030000, 0x08810200, 0x22050000, 0x11030100, 0x22070000, 0x04410300, 0x22090000, 0x11050100, 0x220b0000, 0x08830200, 0x220d0000, 0x11070100, 0x220f0000, 0x02210400, 0x22110000, 0x11090100, 0x22130000, 0x08850200, 0x22150000, 0x110b0100, 0x22170000, 0x04430300, 0x22190000, 0x110d0100, 0x221b0000, 0x08870200, 0x221d0000, 0x110f0100, 0x221f0000, 0x01110500, 0x22210000, 0x11110100, 0x22230000, 0x08890200, 0x22250000, 0x11130100, 0x22270000, 0x04450300, 0x22290000, 0x11150100, 0x222b0000, 0x088b0200, 0x222d0000, 0x11170100, 0x222f0000, 0x02230400, 0x22310000, 0x11190100, 0x22330000, 0x088d0200, 0x22350000, 0x111b0100, 0x22370000, 0x04470300, 0x22390000, 0x111d0100, 0x223b0000, 0x088f0200, 0x223d0000, 0x111f0100, 0x223f0000, 0x00890600, 0x22410000, 0x11210100, 0x22430000, 0x08910200, 0x22450000, 0x11230100, 0x22470000, 0x04490300, 0x22490000, 0x11250100, 0x224b0000, 0x08930200, 0x224d0000, 0x11270100, 0x224f0000, 0x02250400, 0x22510000, 0x11290100, 0x22530000, 0x08950200, 0x22550000, 0x112b0100, 0x22570000, 0x044b0300, 0x22590000, 0x112d0100, 0x225b0000, 0x08970200, 0x225d0000, 0x112f0100, 0x225f0000, 0x01130500, 0x22610000, 0x11310100, 0x22630000, 0x08990200, 0x22650000, 0x11330100, 0x22670000, 0x044d0300, 0x22690000, 0x11350100, 0x226b0000, 0x089b0200, 0x226d0000, 0x11370100, 0x226f0000, 0x02270400, 0x22710000, 0x11390100, 0x22730000, 0x089d0200, 0x22750000, 0x113b0100, 0x22770000, 0x044f0300, 0x22790000, 0x113d0100, 0x227b0000, 0x089f0200, 0x227d0000, 0x113f0100, 0x227f0000, 0x00451600, 0x22810000, 0x11410100, 0x22830000, 0x08a10200, 0x22850000, 0x11430100, 0x22870000, 0x04510300, 0x22890000, 0x11450100, 0x228b0000, 0x08a30200, 0x228d0000, 0x11470100, 0x228f0000, 0x02290400, 0x22910000, 0x11490100, 0x22930000, 0x08a50200, 0x22950000, 0x114b0100, 0x22970000, 0x04530300, 0x22990000, 0x114d0100, 0x229b0000, 0x08a70200, 0x229d0000, 0x114f0100, 0x229f0000, 0x01150500, 0x22a10000, 0x11510100, 0x22a30000, 0x08a90200, 0x22a50000, 0x11530100, 0x22a70000, 0x04550300, 0x22a90000, 0x11550100, 0x22ab0000, 0x08ab0200, 0x22ad0000, 0x11570100, 0x22af0000, 0x022b0400, 0x22b10000, 0x11590100, 0x22b30000, 0x08ad0200, 0x22b50000, 0x115b0100, 0x22b70000, 0x04570300, 0x22b90000, 0x115d0100, 0x22bb0000, 0x08af0200, 0x22bd0000, 0x115f0100, 0x22bf0000, 0x008b0600, 0x22c10000, 0x11610100, 0x22c30000, 0x08b10200, 0x22c50000, 0x11630100, 0x22c70000, 0x04590300, 0x22c90000, 0x11650100, 0x22cb0000, 0x08b30200, 0x22cd0000, 0x11670100, 0x22cf0000, 0x022d0400, 0x22d10000, 0x11690100, 0x22d30000, 0x08b50200, 0x22d50000, 0x116b0100, 0x22d70000, 0x045b0300, 0x22d90000, 0x116d0100, 0x22db0000, 0x08b70200, 0x22dd0000, 0x116f0100, 0x22df0000, 0x01170500, 0x22e10000, 0x11710100, 0x22e30000, 0x08b90200, 0x22e50000, 0x11730100, 0x22e70000, 0x045d0300, 0x22e90000, 0x11750100, 0x22eb0000, 0x08bb0200, 0x22ed0000, 0x11770100, 0x22ef0000, 0x022f0400, 0x22f10000, 0x11790100, 0x22f30000, 0x08bd0200, 0x22f50000, 0x117b0100, 0x22f70000, 0x045f0300, 0x22f90000, 0x117d0100, 0x22fb0000, 0x08bf0200, 0x22fd0000, 0x117f0100, 0x22ff0000, + 0x00232600, 0x23010000, 0x11810100, 0x23030000, 0x08c10200, 0x23050000, 0x11830100, 0x23070000, 0x04610300, 0x23090000, 0x11850100, 0x230b0000, 0x08c30200, 0x230d0000, 0x11870100, 0x230f0000, 0x02310400, 0x23110000, 0x11890100, 0x23130000, 0x08c50200, 0x23150000, 0x118b0100, 0x23170000, 0x04630300, 0x23190000, 0x118d0100, 0x231b0000, 0x08c70200, 0x231d0000, 0x118f0100, 0x231f0000, 0x01190500, 0x23210000, 0x11910100, 0x23230000, 0x08c90200, 0x23250000, 0x11930100, 0x23270000, 0x04650300, 0x23290000, 0x11950100, 0x232b0000, 0x08cb0200, 0x232d0000, 0x11970100, 0x232f0000, 0x02330400, 0x23310000, 0x11990100, 0x23330000, 0x08cd0200, 0x23350000, 0x119b0100, 0x23370000, 0x04670300, 0x23390000, 0x119d0100, 0x233b0000, 0x08cf0200, 0x233d0000, 0x119f0100, 0x233f0000, 0x008d0600, 0x23410000, 0x11a10100, 0x23430000, 0x08d10200, 0x23450000, 0x11a30100, 0x23470000, 0x04690300, 0x23490000, 0x11a50100, 0x234b0000, 0x08d30200, 0x234d0000, 0x11a70100, 0x234f0000, 0x02350400, 0x23510000, 0x11a90100, 0x23530000, 0x08d50200, 0x23550000, 0x11ab0100, 0x23570000, 0x046b0300, 0x23590000, 0x11ad0100, 0x235b0000, 0x08d70200, 0x235d0000, 0x11af0100, 0x235f0000, 0x011b0500, 0x23610000, 0x11b10100, 0x23630000, 0x08d90200, 0x23650000, 0x11b30100, 0x23670000, 0x046d0300, 0x23690000, 0x11b50100, 0x236b0000, 0x08db0200, 0x236d0000, 0x11b70100, 0x236f0000, 0x02370400, 0x23710000, 0x11b90100, 0x23730000, 0x08dd0200, 0x23750000, 0x11bb0100, 0x23770000, 0x046f0300, 0x23790000, 0x11bd0100, 0x237b0000, 0x08df0200, 0x237d0000, 0x11bf0100, 0x237f0000, 0x00471600, 0x23810000, 0x11c10100, 0x23830000, 0x08e10200, 0x23850000, 0x11c30100, 0x23870000, 0x04710300, 0x23890000, 0x11c50100, 0x238b0000, 0x08e30200, 0x238d0000, 0x11c70100, 0x238f0000, 0x02390400, 0x23910000, 0x11c90100, 0x23930000, 0x08e50200, 0x23950000, 0x11cb0100, 0x23970000, 0x04730300, 0x23990000, 0x11cd0100, 0x239b0000, 0x08e70200, 0x239d0000, 0x11cf0100, 0x239f0000, 0x011d0500, 0x23a10000, 0x11d10100, 0x23a30000, 0x08e90200, 0x23a50000, 0x11d30100, 0x23a70000, 0x04750300, 0x23a90000, 0x11d50100, 0x23ab0000, 0x08eb0200, 0x23ad0000, 0x11d70100, 0x23af0000, 0x023b0400, 0x23b10000, 0x11d90100, 0x23b30000, 0x08ed0200, 0x23b50000, 0x11db0100, 0x23b70000, 0x04770300, 0x23b90000, 0x11dd0100, 0x23bb0000, 0x08ef0200, 0x23bd0000, 0x11df0100, 0x23bf0000, 0x008f0600, 0x23c10000, 0x11e10100, 0x23c30000, 0x08f10200, 0x23c50000, 0x11e30100, 0x23c70000, 0x04790300, 0x23c90000, 0x11e50100, 0x23cb0000, 0x08f30200, 0x23cd0000, 0x11e70100, 0x23cf0000, 0x023d0400, 0x23d10000, 0x11e90100, 0x23d30000, 0x08f50200, 0x23d50000, 0x11eb0100, 0x23d70000, 0x047b0300, 0x23d90000, 0x11ed0100, 0x23db0000, 0x08f70200, 0x23dd0000, 0x11ef0100, 0x23df0000, 0x011f0500, 0x23e10000, 0x11f10100, 0x23e30000, 0x08f90200, 0x23e50000, 0x11f30100, 0x23e70000, 0x047d0300, 0x23e90000, 0x11f50100, 0x23eb0000, 0x08fb0200, 0x23ed0000, 0x11f70100, 0x23ef0000, 0x023f0400, 0x23f10000, 0x11f90100, 0x23f30000, 0x08fd0200, 0x23f50000, 0x11fb0100, 0x23f70000, 0x047f0300, 0x23f90000, 0x11fd0100, 0x23fb0000, 0x08ff0200, 0x23fd0000, 0x11ff0100, 0x23ff0000, + 0x00094600, 0x24010000, 0x12010100, 0x24030000, 0x09010200, 0x24050000, 0x12030100, 0x24070000, 0x04810300, 0x24090000, 0x12050100, 0x240b0000, 0x09030200, 0x240d0000, 0x12070100, 0x240f0000, 0x02410400, 0x24110000, 0x12090100, 0x24130000, 0x09050200, 0x24150000, 0x120b0100, 0x24170000, 0x04830300, 0x24190000, 0x120d0100, 0x241b0000, 0x09070200, 0x241d0000, 0x120f0100, 0x241f0000, 0x01210500, 0x24210000, 0x12110100, 0x24230000, 0x09090200, 0x24250000, 0x12130100, 0x24270000, 0x04850300, 0x24290000, 0x12150100, 0x242b0000, 0x090b0200, 0x242d0000, 0x12170100, 0x242f0000, 0x02430400, 0x24310000, 0x12190100, 0x24330000, 0x090d0200, 0x24350000, 0x121b0100, 0x24370000, 0x04870300, 0x24390000, 0x121d0100, 0x243b0000, 0x090f0200, 0x243d0000, 0x121f0100, 0x243f0000, 0x00910600, 0x24410000, 0x12210100, 0x24430000, 0x09110200, 0x24450000, 0x12230100, 0x24470000, 0x04890300, 0x24490000, 0x12250100, 0x244b0000, 0x09130200, 0x244d0000, 0x12270100, 0x244f0000, 0x02450400, 0x24510000, 0x12290100, 0x24530000, 0x09150200, 0x24550000, 0x122b0100, 0x24570000, 0x048b0300, 0x24590000, 0x122d0100, 0x245b0000, 0x09170200, 0x245d0000, 0x122f0100, 0x245f0000, 0x01230500, 0x24610000, 0x12310100, 0x24630000, 0x09190200, 0x24650000, 0x12330100, 0x24670000, 0x048d0300, 0x24690000, 0x12350100, 0x246b0000, 0x091b0200, 0x246d0000, 0x12370100, 0x246f0000, 0x02470400, 0x24710000, 0x12390100, 0x24730000, 0x091d0200, 0x24750000, 0x123b0100, 0x24770000, 0x048f0300, 0x24790000, 0x123d0100, 0x247b0000, 0x091f0200, 0x247d0000, 0x123f0100, 0x247f0000, 0x00491600, 0x24810000, 0x12410100, 0x24830000, 0x09210200, 0x24850000, 0x12430100, 0x24870000, 0x04910300, 0x24890000, 0x12450100, 0x248b0000, 0x09230200, 0x248d0000, 0x12470100, 0x248f0000, 0x02490400, 0x24910000, 0x12490100, 0x24930000, 0x09250200, 0x24950000, 0x124b0100, 0x24970000, 0x04930300, 0x24990000, 0x124d0100, 0x249b0000, 0x09270200, 0x249d0000, 0x124f0100, 0x249f0000, 0x01250500, 0x24a10000, 0x12510100, 0x24a30000, 0x09290200, 0x24a50000, 0x12530100, 0x24a70000, 0x04950300, 0x24a90000, 0x12550100, 0x24ab0000, 0x092b0200, 0x24ad0000, 0x12570100, 0x24af0000, 0x024b0400, 0x24b10000, 0x12590100, 0x24b30000, 0x092d0200, 0x24b50000, 0x125b0100, 0x24b70000, 0x04970300, 0x24b90000, 0x125d0100, 0x24bb0000, 0x092f0200, 0x24bd0000, 0x125f0100, 0x24bf0000, 0x00930600, 0x24c10000, 0x12610100, 0x24c30000, 0x09310200, 0x24c50000, 0x12630100, 0x24c70000, 0x04990300, 0x24c90000, 0x12650100, 0x24cb0000, 0x09330200, 0x24cd0000, 0x12670100, 0x24cf0000, 0x024d0400, 0x24d10000, 0x12690100, 0x24d30000, 0x09350200, 0x24d50000, 0x126b0100, 0x24d70000, 0x049b0300, 0x24d90000, 0x126d0100, 0x24db0000, 0x09370200, 0x24dd0000, 0x126f0100, 0x24df0000, 0x01270500, 0x24e10000, 0x12710100, 0x24e30000, 0x09390200, 0x24e50000, 0x12730100, 0x24e70000, 0x049d0300, 0x24e90000, 0x12750100, 0x24eb0000, 0x093b0200, 0x24ed0000, 0x12770100, 0x24ef0000, 0x024f0400, 0x24f10000, 0x12790100, 0x24f30000, 0x093d0200, 0x24f50000, 0x127b0100, 0x24f70000, 0x049f0300, 0x24f90000, 0x127d0100, 0x24fb0000, 0x093f0200, 0x24fd0000, 0x127f0100, 0x24ff0000, + 0x00252600, 0x25010000, 0x12810100, 0x25030000, 0x09410200, 0x25050000, 0x12830100, 0x25070000, 0x04a10300, 0x25090000, 0x12850100, 0x250b0000, 0x09430200, 0x250d0000, 0x12870100, 0x250f0000, 0x02510400, 0x25110000, 0x12890100, 0x25130000, 0x09450200, 0x25150000, 0x128b0100, 0x25170000, 0x04a30300, 0x25190000, 0x128d0100, 0x251b0000, 0x09470200, 0x251d0000, 0x128f0100, 0x251f0000, 0x01290500, 0x25210000, 0x12910100, 0x25230000, 0x09490200, 0x25250000, 0x12930100, 0x25270000, 0x04a50300, 0x25290000, 0x12950100, 0x252b0000, 0x094b0200, 0x252d0000, 0x12970100, 0x252f0000, 0x02530400, 0x25310000, 0x12990100, 0x25330000, 0x094d0200, 0x25350000, 0x129b0100, 0x25370000, 0x04a70300, 0x25390000, 0x129d0100, 0x253b0000, 0x094f0200, 0x253d0000, 0x129f0100, 0x253f0000, 0x00950600, 0x25410000, 0x12a10100, 0x25430000, 0x09510200, 0x25450000, 0x12a30100, 0x25470000, 0x04a90300, 0x25490000, 0x12a50100, 0x254b0000, 0x09530200, 0x254d0000, 0x12a70100, 0x254f0000, 0x02550400, 0x25510000, 0x12a90100, 0x25530000, 0x09550200, 0x25550000, 0x12ab0100, 0x25570000, 0x04ab0300, 0x25590000, 0x12ad0100, 0x255b0000, 0x09570200, 0x255d0000, 0x12af0100, 0x255f0000, 0x012b0500, 0x25610000, 0x12b10100, 0x25630000, 0x09590200, 0x25650000, 0x12b30100, 0x25670000, 0x04ad0300, 0x25690000, 0x12b50100, 0x256b0000, 0x095b0200, 0x256d0000, 0x12b70100, 0x256f0000, 0x02570400, 0x25710000, 0x12b90100, 0x25730000, 0x095d0200, 0x25750000, 0x12bb0100, 0x25770000, 0x04af0300, 0x25790000, 0x12bd0100, 0x257b0000, 0x095f0200, 0x257d0000, 0x12bf0100, 0x257f0000, 0x004b1600, 0x25810000, 0x12c10100, 0x25830000, 0x09610200, 0x25850000, 0x12c30100, 0x25870000, 0x04b10300, 0x25890000, 0x12c50100, 0x258b0000, 0x09630200, 0x258d0000, 0x12c70100, 0x258f0000, 0x02590400, 0x25910000, 0x12c90100, 0x25930000, 0x09650200, 0x25950000, 0x12cb0100, 0x25970000, 0x04b30300, 0x25990000, 0x12cd0100, 0x259b0000, 0x09670200, 0x259d0000, 0x12cf0100, 0x259f0000, 0x012d0500, 0x25a10000, 0x12d10100, 0x25a30000, 0x09690200, 0x25a50000, 0x12d30100, 0x25a70000, 0x04b50300, 0x25a90000, 0x12d50100, 0x25ab0000, 0x096b0200, 0x25ad0000, 0x12d70100, 0x25af0000, 0x025b0400, 0x25b10000, 0x12d90100, 0x25b30000, 0x096d0200, 0x25b50000, 0x12db0100, 0x25b70000, 0x04b70300, 0x25b90000, 0x12dd0100, 0x25bb0000, 0x096f0200, 0x25bd0000, 0x12df0100, 0x25bf0000, 0x00970600, 0x25c10000, 0x12e10100, 0x25c30000, 0x09710200, 0x25c50000, 0x12e30100, 0x25c70000, 0x04b90300, 0x25c90000, 0x12e50100, 0x25cb0000, 0x09730200, 0x25cd0000, 0x12e70100, 0x25cf0000, 0x025d0400, 0x25d10000, 0x12e90100, 0x25d30000, 0x09750200, 0x25d50000, 0x12eb0100, 0x25d70000, 0x04bb0300, 0x25d90000, 0x12ed0100, 0x25db0000, 0x09770200, 0x25dd0000, 0x12ef0100, 0x25df0000, 0x012f0500, 0x25e10000, 0x12f10100, 0x25e30000, 0x09790200, 0x25e50000, 0x12f30100, 0x25e70000, 0x04bd0300, 0x25e90000, 0x12f50100, 0x25eb0000, 0x097b0200, 0x25ed0000, 0x12f70100, 0x25ef0000, 0x025f0400, 0x25f10000, 0x12f90100, 0x25f30000, 0x097d0200, 0x25f50000, 0x12fb0100, 0x25f70000, 0x04bf0300, 0x25f90000, 0x12fd0100, 0x25fb0000, 0x097f0200, 0x25fd0000, 0x12ff0100, 0x25ff0000, + 0x00133600, 0x26010000, 0x13010100, 0x26030000, 0x09810200, 0x26050000, 0x13030100, 0x26070000, 0x04c10300, 0x26090000, 0x13050100, 0x260b0000, 0x09830200, 0x260d0000, 0x13070100, 0x260f0000, 0x02610400, 0x26110000, 0x13090100, 0x26130000, 0x09850200, 0x26150000, 0x130b0100, 0x26170000, 0x04c30300, 0x26190000, 0x130d0100, 0x261b0000, 0x09870200, 0x261d0000, 0x130f0100, 0x261f0000, 0x01310500, 0x26210000, 0x13110100, 0x26230000, 0x09890200, 0x26250000, 0x13130100, 0x26270000, 0x04c50300, 0x26290000, 0x13150100, 0x262b0000, 0x098b0200, 0x262d0000, 0x13170100, 0x262f0000, 0x02630400, 0x26310000, 0x13190100, 0x26330000, 0x098d0200, 0x26350000, 0x131b0100, 0x26370000, 0x04c70300, 0x26390000, 0x131d0100, 0x263b0000, 0x098f0200, 0x263d0000, 0x131f0100, 0x263f0000, 0x00990600, 0x26410000, 0x13210100, 0x26430000, 0x09910200, 0x26450000, 0x13230100, 0x26470000, 0x04c90300, 0x26490000, 0x13250100, 0x264b0000, 0x09930200, 0x264d0000, 0x13270100, 0x264f0000, 0x02650400, 0x26510000, 0x13290100, 0x26530000, 0x09950200, 0x26550000, 0x132b0100, 0x26570000, 0x04cb0300, 0x26590000, 0x132d0100, 0x265b0000, 0x09970200, 0x265d0000, 0x132f0100, 0x265f0000, 0x01330500, 0x26610000, 0x13310100, 0x26630000, 0x09990200, 0x26650000, 0x13330100, 0x26670000, 0x04cd0300, 0x26690000, 0x13350100, 0x266b0000, 0x099b0200, 0x266d0000, 0x13370100, 0x266f0000, 0x02670400, 0x26710000, 0x13390100, 0x26730000, 0x099d0200, 0x26750000, 0x133b0100, 0x26770000, 0x04cf0300, 0x26790000, 0x133d0100, 0x267b0000, 0x099f0200, 0x267d0000, 0x133f0100, 0x267f0000, 0x004d1600, 0x26810000, 0x13410100, 0x26830000, 0x09a10200, 0x26850000, 0x13430100, 0x26870000, 0x04d10300, 0x26890000, 0x13450100, 0x268b0000, 0x09a30200, 0x268d0000, 0x13470100, 0x268f0000, 0x02690400, 0x26910000, 0x13490100, 0x26930000, 0x09a50200, 0x26950000, 0x134b0100, 0x26970000, 0x04d30300, 0x26990000, 0x134d0100, 0x269b0000, 0x09a70200, 0x269d0000, 0x134f0100, 0x269f0000, 0x01350500, 0x26a10000, 0x13510100, 0x26a30000, 0x09a90200, 0x26a50000, 0x13530100, 0x26a70000, 0x04d50300, 0x26a90000, 0x13550100, 0x26ab0000, 0x09ab0200, 0x26ad0000, 0x13570100, 0x26af0000, 0x026b0400, 0x26b10000, 0x13590100, 0x26b30000, 0x09ad0200, 0x26b50000, 0x135b0100, 0x26b70000, 0x04d70300, 0x26b90000, 0x135d0100, 0x26bb0000, 0x09af0200, 0x26bd0000, 0x135f0100, 0x26bf0000, 0x009b0600, 0x26c10000, 0x13610100, 0x26c30000, 0x09b10200, 0x26c50000, 0x13630100, 0x26c70000, 0x04d90300, 0x26c90000, 0x13650100, 0x26cb0000, 0x09b30200, 0x26cd0000, 0x13670100, 0x26cf0000, 0x026d0400, 0x26d10000, 0x13690100, 0x26d30000, 0x09b50200, 0x26d50000, 0x136b0100, 0x26d70000, 0x04db0300, 0x26d90000, 0x136d0100, 0x26db0000, 0x09b70200, 0x26dd0000, 0x136f0100, 0x26df0000, 0x01370500, 0x26e10000, 0x13710100, 0x26e30000, 0x09b90200, 0x26e50000, 0x13730100, 0x26e70000, 0x04dd0300, 0x26e90000, 0x13750100, 0x26eb0000, 0x09bb0200, 0x26ed0000, 0x13770100, 0x26ef0000, 0x026f0400, 0x26f10000, 0x13790100, 0x26f30000, 0x09bd0200, 0x26f50000, 0x137b0100, 0x26f70000, 0x04df0300, 0x26f90000, 0x137d0100, 0x26fb0000, 0x09bf0200, 0x26fd0000, 0x137f0100, 0x26ff0000, + 0x00272600, 0x27010000, 0x13810100, 0x27030000, 0x09c10200, 0x27050000, 0x13830100, 0x27070000, 0x04e10300, 0x27090000, 0x13850100, 0x270b0000, 0x09c30200, 0x270d0000, 0x13870100, 0x270f0000, 0x02710400, 0x27110000, 0x13890100, 0x27130000, 0x09c50200, 0x27150000, 0x138b0100, 0x27170000, 0x04e30300, 0x27190000, 0x138d0100, 0x271b0000, 0x09c70200, 0x271d0000, 0x138f0100, 0x271f0000, 0x01390500, 0x27210000, 0x13910100, 0x27230000, 0x09c90200, 0x27250000, 0x13930100, 0x27270000, 0x04e50300, 0x27290000, 0x13950100, 0x272b0000, 0x09cb0200, 0x272d0000, 0x13970100, 0x272f0000, 0x02730400, 0x27310000, 0x13990100, 0x27330000, 0x09cd0200, 0x27350000, 0x139b0100, 0x27370000, 0x04e70300, 0x27390000, 0x139d0100, 0x273b0000, 0x09cf0200, 0x273d0000, 0x139f0100, 0x273f0000, 0x009d0600, 0x27410000, 0x13a10100, 0x27430000, 0x09d10200, 0x27450000, 0x13a30100, 0x27470000, 0x04e90300, 0x27490000, 0x13a50100, 0x274b0000, 0x09d30200, 0x274d0000, 0x13a70100, 0x274f0000, 0x02750400, 0x27510000, 0x13a90100, 0x27530000, 0x09d50200, 0x27550000, 0x13ab0100, 0x27570000, 0x04eb0300, 0x27590000, 0x13ad0100, 0x275b0000, 0x09d70200, 0x275d0000, 0x13af0100, 0x275f0000, 0x013b0500, 0x27610000, 0x13b10100, 0x27630000, 0x09d90200, 0x27650000, 0x13b30100, 0x27670000, 0x04ed0300, 0x27690000, 0x13b50100, 0x276b0000, 0x09db0200, 0x276d0000, 0x13b70100, 0x276f0000, 0x02770400, 0x27710000, 0x13b90100, 0x27730000, 0x09dd0200, 0x27750000, 0x13bb0100, 0x27770000, 0x04ef0300, 0x27790000, 0x13bd0100, 0x277b0000, 0x09df0200, 0x277d0000, 0x13bf0100, 0x277f0000, 0x004f1600, 0x27810000, 0x13c10100, 0x27830000, 0x09e10200, 0x27850000, 0x13c30100, 0x27870000, 0x04f10300, 0x27890000, 0x13c50100, 0x278b0000, 0x09e30200, 0x278d0000, 0x13c70100, 0x278f0000, 0x02790400, 0x27910000, 0x13c90100, 0x27930000, 0x09e50200, 0x27950000, 0x13cb0100, 0x27970000, 0x04f30300, 0x27990000, 0x13cd0100, 0x279b0000, 0x09e70200, 0x279d0000, 0x13cf0100, 0x279f0000, 0x013d0500, 0x27a10000, 0x13d10100, 0x27a30000, 0x09e90200, 0x27a50000, 0x13d30100, 0x27a70000, 0x04f50300, 0x27a90000, 0x13d50100, 0x27ab0000, 0x09eb0200, 0x27ad0000, 0x13d70100, 0x27af0000, 0x027b0400, 0x27b10000, 0x13d90100, 0x27b30000, 0x09ed0200, 0x27b50000, 0x13db0100, 0x27b70000, 0x04f70300, 0x27b90000, 0x13dd0100, 0x27bb0000, 0x09ef0200, 0x27bd0000, 0x13df0100, 0x27bf0000, 0x009f0600, 0x27c10000, 0x13e10100, 0x27c30000, 0x09f10200, 0x27c50000, 0x13e30100, 0x27c70000, 0x04f90300, 0x27c90000, 0x13e50100, 0x27cb0000, 0x09f30200, 0x27cd0000, 0x13e70100, 0x27cf0000, 0x027d0400, 0x27d10000, 0x13e90100, 0x27d30000, 0x09f50200, 0x27d50000, 0x13eb0100, 0x27d70000, 0x04fb0300, 0x27d90000, 0x13ed0100, 0x27db0000, 0x09f70200, 0x27dd0000, 0x13ef0100, 0x27df0000, 0x013f0500, 0x27e10000, 0x13f10100, 0x27e30000, 0x09f90200, 0x27e50000, 0x13f30100, 0x27e70000, 0x04fd0300, 0x27e90000, 0x13f50100, 0x27eb0000, 0x09fb0200, 0x27ed0000, 0x13f70100, 0x27ef0000, 0x027f0400, 0x27f10000, 0x13f90100, 0x27f30000, 0x09fd0200, 0x27f50000, 0x13fb0100, 0x27f70000, 0x04ff0300, 0x27f90000, 0x13fd0100, 0x27fb0000, 0x09ff0200, 0x27fd0000, 0x13ff0100, 0x27ff0000, + 0x00055600, 0x28010000, 0x14010100, 0x28030000, 0x0a010200, 0x28050000, 0x14030100, 0x28070000, 0x05010300, 0x28090000, 0x14050100, 0x280b0000, 0x0a030200, 0x280d0000, 0x14070100, 0x280f0000, 0x02810400, 0x28110000, 0x14090100, 0x28130000, 0x0a050200, 0x28150000, 0x140b0100, 0x28170000, 0x05030300, 0x28190000, 0x140d0100, 0x281b0000, 0x0a070200, 0x281d0000, 0x140f0100, 0x281f0000, 0x01410500, 0x28210000, 0x14110100, 0x28230000, 0x0a090200, 0x28250000, 0x14130100, 0x28270000, 0x05050300, 0x28290000, 0x14150100, 0x282b0000, 0x0a0b0200, 0x282d0000, 0x14170100, 0x282f0000, 0x02830400, 0x28310000, 0x14190100, 0x28330000, 0x0a0d0200, 0x28350000, 0x141b0100, 0x28370000, 0x05070300, 0x28390000, 0x141d0100, 0x283b0000, 0x0a0f0200, 0x283d0000, 0x141f0100, 0x283f0000, 0x00a10600, 0x28410000, 0x14210100, 0x28430000, 0x0a110200, 0x28450000, 0x14230100, 0x28470000, 0x05090300, 0x28490000, 0x14250100, 0x284b0000, 0x0a130200, 0x284d0000, 0x14270100, 0x284f0000, 0x02850400, 0x28510000, 0x14290100, 0x28530000, 0x0a150200, 0x28550000, 0x142b0100, 0x28570000, 0x050b0300, 0x28590000, 0x142d0100, 0x285b0000, 0x0a170200, 0x285d0000, 0x142f0100, 0x285f0000, 0x01430500, 0x28610000, 0x14310100, 0x28630000, 0x0a190200, 0x28650000, 0x14330100, 0x28670000, 0x050d0300, 0x28690000, 0x14350100, 0x286b0000, 0x0a1b0200, 0x286d0000, 0x14370100, 0x286f0000, 0x02870400, 0x28710000, 0x14390100, 0x28730000, 0x0a1d0200, 0x28750000, 0x143b0100, 0x28770000, 0x050f0300, 0x28790000, 0x143d0100, 0x287b0000, 0x0a1f0200, 0x287d0000, 0x143f0100, 0x287f0000, 0x00511600, 0x28810000, 0x14410100, 0x28830000, 0x0a210200, 0x28850000, 0x14430100, 0x28870000, 0x05110300, 0x28890000, 0x14450100, 0x288b0000, 0x0a230200, 0x288d0000, 0x14470100, 0x288f0000, 0x02890400, 0x28910000, 0x14490100, 0x28930000, 0x0a250200, 0x28950000, 0x144b0100, 0x28970000, 0x05130300, 0x28990000, 0x144d0100, 0x289b0000, 0x0a270200, 0x289d0000, 0x144f0100, 0x289f0000, 0x01450500, 0x28a10000, 0x14510100, 0x28a30000, 0x0a290200, 0x28a50000, 0x14530100, 0x28a70000, 0x05150300, 0x28a90000, 0x14550100, 0x28ab0000, 0x0a2b0200, 0x28ad0000, 0x14570100, 0x28af0000, 0x028b0400, 0x28b10000, 0x14590100, 0x28b30000, 0x0a2d0200, 0x28b50000, 0x145b0100, 0x28b70000, 0x05170300, 0x28b90000, 0x145d0100, 0x28bb0000, 0x0a2f0200, 0x28bd0000, 0x145f0100, 0x28bf0000, 0x00a30600, 0x28c10000, 0x14610100, 0x28c30000, 0x0a310200, 0x28c50000, 0x14630100, 0x28c70000, 0x05190300, 0x28c90000, 0x14650100, 0x28cb0000, 0x0a330200, 0x28cd0000, 0x14670100, 0x28cf0000, 0x028d0400, 0x28d10000, 0x14690100, 0x28d30000, 0x0a350200, 0x28d50000, 0x146b0100, 0x28d70000, 0x051b0300, 0x28d90000, 0x146d0100, 0x28db0000, 0x0a370200, 0x28dd0000, 0x146f0100, 0x28df0000, 0x01470500, 0x28e10000, 0x14710100, 0x28e30000, 0x0a390200, 0x28e50000, 0x14730100, 0x28e70000, 0x051d0300, 0x28e90000, 0x14750100, 0x28eb0000, 0x0a3b0200, 0x28ed0000, 0x14770100, 0x28ef0000, 0x028f0400, 0x28f10000, 0x14790100, 0x28f30000, 0x0a3d0200, 0x28f50000, 0x147b0100, 0x28f70000, 0x051f0300, 0x28f90000, 0x147d0100, 0x28fb0000, 0x0a3f0200, 0x28fd0000, 0x147f0100, 0x28ff0000, + 0x00292600, 0x29010000, 0x14810100, 0x29030000, 0x0a410200, 0x29050000, 0x14830100, 0x29070000, 0x05210300, 0x29090000, 0x14850100, 0x290b0000, 0x0a430200, 0x290d0000, 0x14870100, 0x290f0000, 0x02910400, 0x29110000, 0x14890100, 0x29130000, 0x0a450200, 0x29150000, 0x148b0100, 0x29170000, 0x05230300, 0x29190000, 0x148d0100, 0x291b0000, 0x0a470200, 0x291d0000, 0x148f0100, 0x291f0000, 0x01490500, 0x29210000, 0x14910100, 0x29230000, 0x0a490200, 0x29250000, 0x14930100, 0x29270000, 0x05250300, 0x29290000, 0x14950100, 0x292b0000, 0x0a4b0200, 0x292d0000, 0x14970100, 0x292f0000, 0x02930400, 0x29310000, 0x14990100, 0x29330000, 0x0a4d0200, 0x29350000, 0x149b0100, 0x29370000, 0x05270300, 0x29390000, 0x149d0100, 0x293b0000, 0x0a4f0200, 0x293d0000, 0x149f0100, 0x293f0000, 0x00a50600, 0x29410000, 0x14a10100, 0x29430000, 0x0a510200, 0x29450000, 0x14a30100, 0x29470000, 0x05290300, 0x29490000, 0x14a50100, 0x294b0000, 0x0a530200, 0x294d0000, 0x14a70100, 0x294f0000, 0x02950400, 0x29510000, 0x14a90100, 0x29530000, 0x0a550200, 0x29550000, 0x14ab0100, 0x29570000, 0x052b0300, 0x29590000, 0x14ad0100, 0x295b0000, 0x0a570200, 0x295d0000, 0x14af0100, 0x295f0000, 0x014b0500, 0x29610000, 0x14b10100, 0x29630000, 0x0a590200, 0x29650000, 0x14b30100, 0x29670000, 0x052d0300, 0x29690000, 0x14b50100, 0x296b0000, 0x0a5b0200, 0x296d0000, 0x14b70100, 0x296f0000, 0x02970400, 0x29710000, 0x14b90100, 0x29730000, 0x0a5d0200, 0x29750000, 0x14bb0100, 0x29770000, 0x052f0300, 0x29790000, 0x14bd0100, 0x297b0000, 0x0a5f0200, 0x297d0000, 0x14bf0100, 0x297f0000, 0x00531600, 0x29810000, 0x14c10100, 0x29830000, 0x0a610200, 0x29850000, 0x14c30100, 0x29870000, 0x05310300, 0x29890000, 0x14c50100, 0x298b0000, 0x0a630200, 0x298d0000, 0x14c70100, 0x298f0000, 0x02990400, 0x29910000, 0x14c90100, 0x29930000, 0x0a650200, 0x29950000, 0x14cb0100, 0x29970000, 0x05330300, 0x29990000, 0x14cd0100, 0x299b0000, 0x0a670200, 0x299d0000, 0x14cf0100, 0x299f0000, 0x014d0500, 0x29a10000, 0x14d10100, 0x29a30000, 0x0a690200, 0x29a50000, 0x14d30100, 0x29a70000, 0x05350300, 0x29a90000, 0x14d50100, 0x29ab0000, 0x0a6b0200, 0x29ad0000, 0x14d70100, 0x29af0000, 0x029b0400, 0x29b10000, 0x14d90100, 0x29b30000, 0x0a6d0200, 0x29b50000, 0x14db0100, 0x29b70000, 0x05370300, 0x29b90000, 0x14dd0100, 0x29bb0000, 0x0a6f0200, 0x29bd0000, 0x14df0100, 0x29bf0000, 0x00a70600, 0x29c10000, 0x14e10100, 0x29c30000, 0x0a710200, 0x29c50000, 0x14e30100, 0x29c70000, 0x05390300, 0x29c90000, 0x14e50100, 0x29cb0000, 0x0a730200, 0x29cd0000, 0x14e70100, 0x29cf0000, 0x029d0400, 0x29d10000, 0x14e90100, 0x29d30000, 0x0a750200, 0x29d50000, 0x14eb0100, 0x29d70000, 0x053b0300, 0x29d90000, 0x14ed0100, 0x29db0000, 0x0a770200, 0x29dd0000, 0x14ef0100, 0x29df0000, 0x014f0500, 0x29e10000, 0x14f10100, 0x29e30000, 0x0a790200, 0x29e50000, 0x14f30100, 0x29e70000, 0x053d0300, 0x29e90000, 0x14f50100, 0x29eb0000, 0x0a7b0200, 0x29ed0000, 0x14f70100, 0x29ef0000, 0x029f0400, 0x29f10000, 0x14f90100, 0x29f30000, 0x0a7d0200, 0x29f50000, 0x14fb0100, 0x29f70000, 0x053f0300, 0x29f90000, 0x14fd0100, 0x29fb0000, 0x0a7f0200, 0x29fd0000, 0x14ff0100, 0x29ff0000, + 0x00153600, 0x2a010000, 0x15010100, 0x2a030000, 0x0a810200, 0x2a050000, 0x15030100, 0x2a070000, 0x05410300, 0x2a090000, 0x15050100, 0x2a0b0000, 0x0a830200, 0x2a0d0000, 0x15070100, 0x2a0f0000, 0x02a10400, 0x2a110000, 0x15090100, 0x2a130000, 0x0a850200, 0x2a150000, 0x150b0100, 0x2a170000, 0x05430300, 0x2a190000, 0x150d0100, 0x2a1b0000, 0x0a870200, 0x2a1d0000, 0x150f0100, 0x2a1f0000, 0x01510500, 0x2a210000, 0x15110100, 0x2a230000, 0x0a890200, 0x2a250000, 0x15130100, 0x2a270000, 0x05450300, 0x2a290000, 0x15150100, 0x2a2b0000, 0x0a8b0200, 0x2a2d0000, 0x15170100, 0x2a2f0000, 0x02a30400, 0x2a310000, 0x15190100, 0x2a330000, 0x0a8d0200, 0x2a350000, 0x151b0100, 0x2a370000, 0x05470300, 0x2a390000, 0x151d0100, 0x2a3b0000, 0x0a8f0200, 0x2a3d0000, 0x151f0100, 0x2a3f0000, 0x00a90600, 0x2a410000, 0x15210100, 0x2a430000, 0x0a910200, 0x2a450000, 0x15230100, 0x2a470000, 0x05490300, 0x2a490000, 0x15250100, 0x2a4b0000, 0x0a930200, 0x2a4d0000, 0x15270100, 0x2a4f0000, 0x02a50400, 0x2a510000, 0x15290100, 0x2a530000, 0x0a950200, 0x2a550000, 0x152b0100, 0x2a570000, 0x054b0300, 0x2a590000, 0x152d0100, 0x2a5b0000, 0x0a970200, 0x2a5d0000, 0x152f0100, 0x2a5f0000, 0x01530500, 0x2a610000, 0x15310100, 0x2a630000, 0x0a990200, 0x2a650000, 0x15330100, 0x2a670000, 0x054d0300, 0x2a690000, 0x15350100, 0x2a6b0000, 0x0a9b0200, 0x2a6d0000, 0x15370100, 0x2a6f0000, 0x02a70400, 0x2a710000, 0x15390100, 0x2a730000, 0x0a9d0200, 0x2a750000, 0x153b0100, 0x2a770000, 0x054f0300, 0x2a790000, 0x153d0100, 0x2a7b0000, 0x0a9f0200, 0x2a7d0000, 0x153f0100, 0x2a7f0000, 0x00551600, 0x2a810000, 0x15410100, 0x2a830000, 0x0aa10200, 0x2a850000, 0x15430100, 0x2a870000, 0x05510300, 0x2a890000, 0x15450100, 0x2a8b0000, 0x0aa30200, 0x2a8d0000, 0x15470100, 0x2a8f0000, 0x02a90400, 0x2a910000, 0x15490100, 0x2a930000, 0x0aa50200, 0x2a950000, 0x154b0100, 0x2a970000, 0x05530300, 0x2a990000, 0x154d0100, 0x2a9b0000, 0x0aa70200, 0x2a9d0000, 0x154f0100, 0x2a9f0000, 0x01550500, 0x2aa10000, 0x15510100, 0x2aa30000, 0x0aa90200, 0x2aa50000, 0x15530100, 0x2aa70000, 0x05550300, 0x2aa90000, 0x15550100, 0x2aab0000, 0x0aab0200, 0x2aad0000, 0x15570100, 0x2aaf0000, 0x02ab0400, 0x2ab10000, 0x15590100, 0x2ab30000, 0x0aad0200, 0x2ab50000, 0x155b0100, 0x2ab70000, 0x05570300, 0x2ab90000, 0x155d0100, 0x2abb0000, 0x0aaf0200, 0x2abd0000, 0x155f0100, 0x2abf0000, 0x00ab0600, 0x2ac10000, 0x15610100, 0x2ac30000, 0x0ab10200, 0x2ac50000, 0x15630100, 0x2ac70000, 0x05590300, 0x2ac90000, 0x15650100, 0x2acb0000, 0x0ab30200, 0x2acd0000, 0x15670100, 0x2acf0000, 0x02ad0400, 0x2ad10000, 0x15690100, 0x2ad30000, 0x0ab50200, 0x2ad50000, 0x156b0100, 0x2ad70000, 0x055b0300, 0x2ad90000, 0x156d0100, 0x2adb0000, 0x0ab70200, 0x2add0000, 0x156f0100, 0x2adf0000, 0x01570500, 0x2ae10000, 0x15710100, 0x2ae30000, 0x0ab90200, 0x2ae50000, 0x15730100, 0x2ae70000, 0x055d0300, 0x2ae90000, 0x15750100, 0x2aeb0000, 0x0abb0200, 0x2aed0000, 0x15770100, 0x2aef0000, 0x02af0400, 0x2af10000, 0x15790100, 0x2af30000, 0x0abd0200, 0x2af50000, 0x157b0100, 0x2af70000, 0x055f0300, 0x2af90000, 0x157d0100, 0x2afb0000, 0x0abf0200, 0x2afd0000, 0x157f0100, 0x2aff0000, + 0x002b2600, 0x2b010000, 0x15810100, 0x2b030000, 0x0ac10200, 0x2b050000, 0x15830100, 0x2b070000, 0x05610300, 0x2b090000, 0x15850100, 0x2b0b0000, 0x0ac30200, 0x2b0d0000, 0x15870100, 0x2b0f0000, 0x02b10400, 0x2b110000, 0x15890100, 0x2b130000, 0x0ac50200, 0x2b150000, 0x158b0100, 0x2b170000, 0x05630300, 0x2b190000, 0x158d0100, 0x2b1b0000, 0x0ac70200, 0x2b1d0000, 0x158f0100, 0x2b1f0000, 0x01590500, 0x2b210000, 0x15910100, 0x2b230000, 0x0ac90200, 0x2b250000, 0x15930100, 0x2b270000, 0x05650300, 0x2b290000, 0x15950100, 0x2b2b0000, 0x0acb0200, 0x2b2d0000, 0x15970100, 0x2b2f0000, 0x02b30400, 0x2b310000, 0x15990100, 0x2b330000, 0x0acd0200, 0x2b350000, 0x159b0100, 0x2b370000, 0x05670300, 0x2b390000, 0x159d0100, 0x2b3b0000, 0x0acf0200, 0x2b3d0000, 0x159f0100, 0x2b3f0000, 0x00ad0600, 0x2b410000, 0x15a10100, 0x2b430000, 0x0ad10200, 0x2b450000, 0x15a30100, 0x2b470000, 0x05690300, 0x2b490000, 0x15a50100, 0x2b4b0000, 0x0ad30200, 0x2b4d0000, 0x15a70100, 0x2b4f0000, 0x02b50400, 0x2b510000, 0x15a90100, 0x2b530000, 0x0ad50200, 0x2b550000, 0x15ab0100, 0x2b570000, 0x056b0300, 0x2b590000, 0x15ad0100, 0x2b5b0000, 0x0ad70200, 0x2b5d0000, 0x15af0100, 0x2b5f0000, 0x015b0500, 0x2b610000, 0x15b10100, 0x2b630000, 0x0ad90200, 0x2b650000, 0x15b30100, 0x2b670000, 0x056d0300, 0x2b690000, 0x15b50100, 0x2b6b0000, 0x0adb0200, 0x2b6d0000, 0x15b70100, 0x2b6f0000, 0x02b70400, 0x2b710000, 0x15b90100, 0x2b730000, 0x0add0200, 0x2b750000, 0x15bb0100, 0x2b770000, 0x056f0300, 0x2b790000, 0x15bd0100, 0x2b7b0000, 0x0adf0200, 0x2b7d0000, 0x15bf0100, 0x2b7f0000, 0x00571600, 0x2b810000, 0x15c10100, 0x2b830000, 0x0ae10200, 0x2b850000, 0x15c30100, 0x2b870000, 0x05710300, 0x2b890000, 0x15c50100, 0x2b8b0000, 0x0ae30200, 0x2b8d0000, 0x15c70100, 0x2b8f0000, 0x02b90400, 0x2b910000, 0x15c90100, 0x2b930000, 0x0ae50200, 0x2b950000, 0x15cb0100, 0x2b970000, 0x05730300, 0x2b990000, 0x15cd0100, 0x2b9b0000, 0x0ae70200, 0x2b9d0000, 0x15cf0100, 0x2b9f0000, 0x015d0500, 0x2ba10000, 0x15d10100, 0x2ba30000, 0x0ae90200, 0x2ba50000, 0x15d30100, 0x2ba70000, 0x05750300, 0x2ba90000, 0x15d50100, 0x2bab0000, 0x0aeb0200, 0x2bad0000, 0x15d70100, 0x2baf0000, 0x02bb0400, 0x2bb10000, 0x15d90100, 0x2bb30000, 0x0aed0200, 0x2bb50000, 0x15db0100, 0x2bb70000, 0x05770300, 0x2bb90000, 0x15dd0100, 0x2bbb0000, 0x0aef0200, 0x2bbd0000, 0x15df0100, 0x2bbf0000, 0x00af0600, 0x2bc10000, 0x15e10100, 0x2bc30000, 0x0af10200, 0x2bc50000, 0x15e30100, 0x2bc70000, 0x05790300, 0x2bc90000, 0x15e50100, 0x2bcb0000, 0x0af30200, 0x2bcd0000, 0x15e70100, 0x2bcf0000, 0x02bd0400, 0x2bd10000, 0x15e90100, 0x2bd30000, 0x0af50200, 0x2bd50000, 0x15eb0100, 0x2bd70000, 0x057b0300, 0x2bd90000, 0x15ed0100, 0x2bdb0000, 0x0af70200, 0x2bdd0000, 0x15ef0100, 0x2bdf0000, 0x015f0500, 0x2be10000, 0x15f10100, 0x2be30000, 0x0af90200, 0x2be50000, 0x15f30100, 0x2be70000, 0x057d0300, 0x2be90000, 0x15f50100, 0x2beb0000, 0x0afb0200, 0x2bed0000, 0x15f70100, 0x2bef0000, 0x02bf0400, 0x2bf10000, 0x15f90100, 0x2bf30000, 0x0afd0200, 0x2bf50000, 0x15fb0100, 0x2bf70000, 0x057f0300, 0x2bf90000, 0x15fd0100, 0x2bfb0000, 0x0aff0200, 0x2bfd0000, 0x15ff0100, 0x2bff0000, + 0x000b4600, 0x2c010000, 0x16010100, 0x2c030000, 0x0b010200, 0x2c050000, 0x16030100, 0x2c070000, 0x05810300, 0x2c090000, 0x16050100, 0x2c0b0000, 0x0b030200, 0x2c0d0000, 0x16070100, 0x2c0f0000, 0x02c10400, 0x2c110000, 0x16090100, 0x2c130000, 0x0b050200, 0x2c150000, 0x160b0100, 0x2c170000, 0x05830300, 0x2c190000, 0x160d0100, 0x2c1b0000, 0x0b070200, 0x2c1d0000, 0x160f0100, 0x2c1f0000, 0x01610500, 0x2c210000, 0x16110100, 0x2c230000, 0x0b090200, 0x2c250000, 0x16130100, 0x2c270000, 0x05850300, 0x2c290000, 0x16150100, 0x2c2b0000, 0x0b0b0200, 0x2c2d0000, 0x16170100, 0x2c2f0000, 0x02c30400, 0x2c310000, 0x16190100, 0x2c330000, 0x0b0d0200, 0x2c350000, 0x161b0100, 0x2c370000, 0x05870300, 0x2c390000, 0x161d0100, 0x2c3b0000, 0x0b0f0200, 0x2c3d0000, 0x161f0100, 0x2c3f0000, 0x00b10600, 0x2c410000, 0x16210100, 0x2c430000, 0x0b110200, 0x2c450000, 0x16230100, 0x2c470000, 0x05890300, 0x2c490000, 0x16250100, 0x2c4b0000, 0x0b130200, 0x2c4d0000, 0x16270100, 0x2c4f0000, 0x02c50400, 0x2c510000, 0x16290100, 0x2c530000, 0x0b150200, 0x2c550000, 0x162b0100, 0x2c570000, 0x058b0300, 0x2c590000, 0x162d0100, 0x2c5b0000, 0x0b170200, 0x2c5d0000, 0x162f0100, 0x2c5f0000, 0x01630500, 0x2c610000, 0x16310100, 0x2c630000, 0x0b190200, 0x2c650000, 0x16330100, 0x2c670000, 0x058d0300, 0x2c690000, 0x16350100, 0x2c6b0000, 0x0b1b0200, 0x2c6d0000, 0x16370100, 0x2c6f0000, 0x02c70400, 0x2c710000, 0x16390100, 0x2c730000, 0x0b1d0200, 0x2c750000, 0x163b0100, 0x2c770000, 0x058f0300, 0x2c790000, 0x163d0100, 0x2c7b0000, 0x0b1f0200, 0x2c7d0000, 0x163f0100, 0x2c7f0000, 0x00591600, 0x2c810000, 0x16410100, 0x2c830000, 0x0b210200, 0x2c850000, 0x16430100, 0x2c870000, 0x05910300, 0x2c890000, 0x16450100, 0x2c8b0000, 0x0b230200, 0x2c8d0000, 0x16470100, 0x2c8f0000, 0x02c90400, 0x2c910000, 0x16490100, 0x2c930000, 0x0b250200, 0x2c950000, 0x164b0100, 0x2c970000, 0x05930300, 0x2c990000, 0x164d0100, 0x2c9b0000, 0x0b270200, 0x2c9d0000, 0x164f0100, 0x2c9f0000, 0x01650500, 0x2ca10000, 0x16510100, 0x2ca30000, 0x0b290200, 0x2ca50000, 0x16530100, 0x2ca70000, 0x05950300, 0x2ca90000, 0x16550100, 0x2cab0000, 0x0b2b0200, 0x2cad0000, 0x16570100, 0x2caf0000, 0x02cb0400, 0x2cb10000, 0x16590100, 0x2cb30000, 0x0b2d0200, 0x2cb50000, 0x165b0100, 0x2cb70000, 0x05970300, 0x2cb90000, 0x165d0100, 0x2cbb0000, 0x0b2f0200, 0x2cbd0000, 0x165f0100, 0x2cbf0000, 0x00b30600, 0x2cc10000, 0x16610100, 0x2cc30000, 0x0b310200, 0x2cc50000, 0x16630100, 0x2cc70000, 0x05990300, 0x2cc90000, 0x16650100, 0x2ccb0000, 0x0b330200, 0x2ccd0000, 0x16670100, 0x2ccf0000, 0x02cd0400, 0x2cd10000, 0x16690100, 0x2cd30000, 0x0b350200, 0x2cd50000, 0x166b0100, 0x2cd70000, 0x059b0300, 0x2cd90000, 0x166d0100, 0x2cdb0000, 0x0b370200, 0x2cdd0000, 0x166f0100, 0x2cdf0000, 0x01670500, 0x2ce10000, 0x16710100, 0x2ce30000, 0x0b390200, 0x2ce50000, 0x16730100, 0x2ce70000, 0x059d0300, 0x2ce90000, 0x16750100, 0x2ceb0000, 0x0b3b0200, 0x2ced0000, 0x16770100, 0x2cef0000, 0x02cf0400, 0x2cf10000, 0x16790100, 0x2cf30000, 0x0b3d0200, 0x2cf50000, 0x167b0100, 0x2cf70000, 0x059f0300, 0x2cf90000, 0x167d0100, 0x2cfb0000, 0x0b3f0200, 0x2cfd0000, 0x167f0100, 0x2cff0000, + 0x002d2600, 0x2d010000, 0x16810100, 0x2d030000, 0x0b410200, 0x2d050000, 0x16830100, 0x2d070000, 0x05a10300, 0x2d090000, 0x16850100, 0x2d0b0000, 0x0b430200, 0x2d0d0000, 0x16870100, 0x2d0f0000, 0x02d10400, 0x2d110000, 0x16890100, 0x2d130000, 0x0b450200, 0x2d150000, 0x168b0100, 0x2d170000, 0x05a30300, 0x2d190000, 0x168d0100, 0x2d1b0000, 0x0b470200, 0x2d1d0000, 0x168f0100, 0x2d1f0000, 0x01690500, 0x2d210000, 0x16910100, 0x2d230000, 0x0b490200, 0x2d250000, 0x16930100, 0x2d270000, 0x05a50300, 0x2d290000, 0x16950100, 0x2d2b0000, 0x0b4b0200, 0x2d2d0000, 0x16970100, 0x2d2f0000, 0x02d30400, 0x2d310000, 0x16990100, 0x2d330000, 0x0b4d0200, 0x2d350000, 0x169b0100, 0x2d370000, 0x05a70300, 0x2d390000, 0x169d0100, 0x2d3b0000, 0x0b4f0200, 0x2d3d0000, 0x169f0100, 0x2d3f0000, 0x00b50600, 0x2d410000, 0x16a10100, 0x2d430000, 0x0b510200, 0x2d450000, 0x16a30100, 0x2d470000, 0x05a90300, 0x2d490000, 0x16a50100, 0x2d4b0000, 0x0b530200, 0x2d4d0000, 0x16a70100, 0x2d4f0000, 0x02d50400, 0x2d510000, 0x16a90100, 0x2d530000, 0x0b550200, 0x2d550000, 0x16ab0100, 0x2d570000, 0x05ab0300, 0x2d590000, 0x16ad0100, 0x2d5b0000, 0x0b570200, 0x2d5d0000, 0x16af0100, 0x2d5f0000, 0x016b0500, 0x2d610000, 0x16b10100, 0x2d630000, 0x0b590200, 0x2d650000, 0x16b30100, 0x2d670000, 0x05ad0300, 0x2d690000, 0x16b50100, 0x2d6b0000, 0x0b5b0200, 0x2d6d0000, 0x16b70100, 0x2d6f0000, 0x02d70400, 0x2d710000, 0x16b90100, 0x2d730000, 0x0b5d0200, 0x2d750000, 0x16bb0100, 0x2d770000, 0x05af0300, 0x2d790000, 0x16bd0100, 0x2d7b0000, 0x0b5f0200, 0x2d7d0000, 0x16bf0100, 0x2d7f0000, 0x005b1600, 0x2d810000, 0x16c10100, 0x2d830000, 0x0b610200, 0x2d850000, 0x16c30100, 0x2d870000, 0x05b10300, 0x2d890000, 0x16c50100, 0x2d8b0000, 0x0b630200, 0x2d8d0000, 0x16c70100, 0x2d8f0000, 0x02d90400, 0x2d910000, 0x16c90100, 0x2d930000, 0x0b650200, 0x2d950000, 0x16cb0100, 0x2d970000, 0x05b30300, 0x2d990000, 0x16cd0100, 0x2d9b0000, 0x0b670200, 0x2d9d0000, 0x16cf0100, 0x2d9f0000, 0x016d0500, 0x2da10000, 0x16d10100, 0x2da30000, 0x0b690200, 0x2da50000, 0x16d30100, 0x2da70000, 0x05b50300, 0x2da90000, 0x16d50100, 0x2dab0000, 0x0b6b0200, 0x2dad0000, 0x16d70100, 0x2daf0000, 0x02db0400, 0x2db10000, 0x16d90100, 0x2db30000, 0x0b6d0200, 0x2db50000, 0x16db0100, 0x2db70000, 0x05b70300, 0x2db90000, 0x16dd0100, 0x2dbb0000, 0x0b6f0200, 0x2dbd0000, 0x16df0100, 0x2dbf0000, 0x00b70600, 0x2dc10000, 0x16e10100, 0x2dc30000, 0x0b710200, 0x2dc50000, 0x16e30100, 0x2dc70000, 0x05b90300, 0x2dc90000, 0x16e50100, 0x2dcb0000, 0x0b730200, 0x2dcd0000, 0x16e70100, 0x2dcf0000, 0x02dd0400, 0x2dd10000, 0x16e90100, 0x2dd30000, 0x0b750200, 0x2dd50000, 0x16eb0100, 0x2dd70000, 0x05bb0300, 0x2dd90000, 0x16ed0100, 0x2ddb0000, 0x0b770200, 0x2ddd0000, 0x16ef0100, 0x2ddf0000, 0x016f0500, 0x2de10000, 0x16f10100, 0x2de30000, 0x0b790200, 0x2de50000, 0x16f30100, 0x2de70000, 0x05bd0300, 0x2de90000, 0x16f50100, 0x2deb0000, 0x0b7b0200, 0x2ded0000, 0x16f70100, 0x2def0000, 0x02df0400, 0x2df10000, 0x16f90100, 0x2df30000, 0x0b7d0200, 0x2df50000, 0x16fb0100, 0x2df70000, 0x05bf0300, 0x2df90000, 0x16fd0100, 0x2dfb0000, 0x0b7f0200, 0x2dfd0000, 0x16ff0100, 0x2dff0000, + 0x00173600, 0x2e010000, 0x17010100, 0x2e030000, 0x0b810200, 0x2e050000, 0x17030100, 0x2e070000, 0x05c10300, 0x2e090000, 0x17050100, 0x2e0b0000, 0x0b830200, 0x2e0d0000, 0x17070100, 0x2e0f0000, 0x02e10400, 0x2e110000, 0x17090100, 0x2e130000, 0x0b850200, 0x2e150000, 0x170b0100, 0x2e170000, 0x05c30300, 0x2e190000, 0x170d0100, 0x2e1b0000, 0x0b870200, 0x2e1d0000, 0x170f0100, 0x2e1f0000, 0x01710500, 0x2e210000, 0x17110100, 0x2e230000, 0x0b890200, 0x2e250000, 0x17130100, 0x2e270000, 0x05c50300, 0x2e290000, 0x17150100, 0x2e2b0000, 0x0b8b0200, 0x2e2d0000, 0x17170100, 0x2e2f0000, 0x02e30400, 0x2e310000, 0x17190100, 0x2e330000, 0x0b8d0200, 0x2e350000, 0x171b0100, 0x2e370000, 0x05c70300, 0x2e390000, 0x171d0100, 0x2e3b0000, 0x0b8f0200, 0x2e3d0000, 0x171f0100, 0x2e3f0000, 0x00b90600, 0x2e410000, 0x17210100, 0x2e430000, 0x0b910200, 0x2e450000, 0x17230100, 0x2e470000, 0x05c90300, 0x2e490000, 0x17250100, 0x2e4b0000, 0x0b930200, 0x2e4d0000, 0x17270100, 0x2e4f0000, 0x02e50400, 0x2e510000, 0x17290100, 0x2e530000, 0x0b950200, 0x2e550000, 0x172b0100, 0x2e570000, 0x05cb0300, 0x2e590000, 0x172d0100, 0x2e5b0000, 0x0b970200, 0x2e5d0000, 0x172f0100, 0x2e5f0000, 0x01730500, 0x2e610000, 0x17310100, 0x2e630000, 0x0b990200, 0x2e650000, 0x17330100, 0x2e670000, 0x05cd0300, 0x2e690000, 0x17350100, 0x2e6b0000, 0x0b9b0200, 0x2e6d0000, 0x17370100, 0x2e6f0000, 0x02e70400, 0x2e710000, 0x17390100, 0x2e730000, 0x0b9d0200, 0x2e750000, 0x173b0100, 0x2e770000, 0x05cf0300, 0x2e790000, 0x173d0100, 0x2e7b0000, 0x0b9f0200, 0x2e7d0000, 0x173f0100, 0x2e7f0000, 0x005d1600, 0x2e810000, 0x17410100, 0x2e830000, 0x0ba10200, 0x2e850000, 0x17430100, 0x2e870000, 0x05d10300, 0x2e890000, 0x17450100, 0x2e8b0000, 0x0ba30200, 0x2e8d0000, 0x17470100, 0x2e8f0000, 0x02e90400, 0x2e910000, 0x17490100, 0x2e930000, 0x0ba50200, 0x2e950000, 0x174b0100, 0x2e970000, 0x05d30300, 0x2e990000, 0x174d0100, 0x2e9b0000, 0x0ba70200, 0x2e9d0000, 0x174f0100, 0x2e9f0000, 0x01750500, 0x2ea10000, 0x17510100, 0x2ea30000, 0x0ba90200, 0x2ea50000, 0x17530100, 0x2ea70000, 0x05d50300, 0x2ea90000, 0x17550100, 0x2eab0000, 0x0bab0200, 0x2ead0000, 0x17570100, 0x2eaf0000, 0x02eb0400, 0x2eb10000, 0x17590100, 0x2eb30000, 0x0bad0200, 0x2eb50000, 0x175b0100, 0x2eb70000, 0x05d70300, 0x2eb90000, 0x175d0100, 0x2ebb0000, 0x0baf0200, 0x2ebd0000, 0x175f0100, 0x2ebf0000, 0x00bb0600, 0x2ec10000, 0x17610100, 0x2ec30000, 0x0bb10200, 0x2ec50000, 0x17630100, 0x2ec70000, 0x05d90300, 0x2ec90000, 0x17650100, 0x2ecb0000, 0x0bb30200, 0x2ecd0000, 0x17670100, 0x2ecf0000, 0x02ed0400, 0x2ed10000, 0x17690100, 0x2ed30000, 0x0bb50200, 0x2ed50000, 0x176b0100, 0x2ed70000, 0x05db0300, 0x2ed90000, 0x176d0100, 0x2edb0000, 0x0bb70200, 0x2edd0000, 0x176f0100, 0x2edf0000, 0x01770500, 0x2ee10000, 0x17710100, 0x2ee30000, 0x0bb90200, 0x2ee50000, 0x17730100, 0x2ee70000, 0x05dd0300, 0x2ee90000, 0x17750100, 0x2eeb0000, 0x0bbb0200, 0x2eed0000, 0x17770100, 0x2eef0000, 0x02ef0400, 0x2ef10000, 0x17790100, 0x2ef30000, 0x0bbd0200, 0x2ef50000, 0x177b0100, 0x2ef70000, 0x05df0300, 0x2ef90000, 0x177d0100, 0x2efb0000, 0x0bbf0200, 0x2efd0000, 0x177f0100, 0x2eff0000, + 0x002f2600, 0x2f010000, 0x17810100, 0x2f030000, 0x0bc10200, 0x2f050000, 0x17830100, 0x2f070000, 0x05e10300, 0x2f090000, 0x17850100, 0x2f0b0000, 0x0bc30200, 0x2f0d0000, 0x17870100, 0x2f0f0000, 0x02f10400, 0x2f110000, 0x17890100, 0x2f130000, 0x0bc50200, 0x2f150000, 0x178b0100, 0x2f170000, 0x05e30300, 0x2f190000, 0x178d0100, 0x2f1b0000, 0x0bc70200, 0x2f1d0000, 0x178f0100, 0x2f1f0000, 0x01790500, 0x2f210000, 0x17910100, 0x2f230000, 0x0bc90200, 0x2f250000, 0x17930100, 0x2f270000, 0x05e50300, 0x2f290000, 0x17950100, 0x2f2b0000, 0x0bcb0200, 0x2f2d0000, 0x17970100, 0x2f2f0000, 0x02f30400, 0x2f310000, 0x17990100, 0x2f330000, 0x0bcd0200, 0x2f350000, 0x179b0100, 0x2f370000, 0x05e70300, 0x2f390000, 0x179d0100, 0x2f3b0000, 0x0bcf0200, 0x2f3d0000, 0x179f0100, 0x2f3f0000, 0x00bd0600, 0x2f410000, 0x17a10100, 0x2f430000, 0x0bd10200, 0x2f450000, 0x17a30100, 0x2f470000, 0x05e90300, 0x2f490000, 0x17a50100, 0x2f4b0000, 0x0bd30200, 0x2f4d0000, 0x17a70100, 0x2f4f0000, 0x02f50400, 0x2f510000, 0x17a90100, 0x2f530000, 0x0bd50200, 0x2f550000, 0x17ab0100, 0x2f570000, 0x05eb0300, 0x2f590000, 0x17ad0100, 0x2f5b0000, 0x0bd70200, 0x2f5d0000, 0x17af0100, 0x2f5f0000, 0x017b0500, 0x2f610000, 0x17b10100, 0x2f630000, 0x0bd90200, 0x2f650000, 0x17b30100, 0x2f670000, 0x05ed0300, 0x2f690000, 0x17b50100, 0x2f6b0000, 0x0bdb0200, 0x2f6d0000, 0x17b70100, 0x2f6f0000, 0x02f70400, 0x2f710000, 0x17b90100, 0x2f730000, 0x0bdd0200, 0x2f750000, 0x17bb0100, 0x2f770000, 0x05ef0300, 0x2f790000, 0x17bd0100, 0x2f7b0000, 0x0bdf0200, 0x2f7d0000, 0x17bf0100, 0x2f7f0000, 0x005f1600, 0x2f810000, 0x17c10100, 0x2f830000, 0x0be10200, 0x2f850000, 0x17c30100, 0x2f870000, 0x05f10300, 0x2f890000, 0x17c50100, 0x2f8b0000, 0x0be30200, 0x2f8d0000, 0x17c70100, 0x2f8f0000, 0x02f90400, 0x2f910000, 0x17c90100, 0x2f930000, 0x0be50200, 0x2f950000, 0x17cb0100, 0x2f970000, 0x05f30300, 0x2f990000, 0x17cd0100, 0x2f9b0000, 0x0be70200, 0x2f9d0000, 0x17cf0100, 0x2f9f0000, 0x017d0500, 0x2fa10000, 0x17d10100, 0x2fa30000, 0x0be90200, 0x2fa50000, 0x17d30100, 0x2fa70000, 0x05f50300, 0x2fa90000, 0x17d50100, 0x2fab0000, 0x0beb0200, 0x2fad0000, 0x17d70100, 0x2faf0000, 0x02fb0400, 0x2fb10000, 0x17d90100, 0x2fb30000, 0x0bed0200, 0x2fb50000, 0x17db0100, 0x2fb70000, 0x05f70300, 0x2fb90000, 0x17dd0100, 0x2fbb0000, 0x0bef0200, 0x2fbd0000, 0x17df0100, 0x2fbf0000, 0x00bf0600, 0x2fc10000, 0x17e10100, 0x2fc30000, 0x0bf10200, 0x2fc50000, 0x17e30100, 0x2fc70000, 0x05f90300, 0x2fc90000, 0x17e50100, 0x2fcb0000, 0x0bf30200, 0x2fcd0000, 0x17e70100, 0x2fcf0000, 0x02fd0400, 0x2fd10000, 0x17e90100, 0x2fd30000, 0x0bf50200, 0x2fd50000, 0x17eb0100, 0x2fd70000, 0x05fb0300, 0x2fd90000, 0x17ed0100, 0x2fdb0000, 0x0bf70200, 0x2fdd0000, 0x17ef0100, 0x2fdf0000, 0x017f0500, 0x2fe10000, 0x17f10100, 0x2fe30000, 0x0bf90200, 0x2fe50000, 0x17f30100, 0x2fe70000, 0x05fd0300, 0x2fe90000, 0x17f50100, 0x2feb0000, 0x0bfb0200, 0x2fed0000, 0x17f70100, 0x2fef0000, 0x02ff0400, 0x2ff10000, 0x17f90100, 0x2ff30000, 0x0bfd0200, 0x2ff50000, 0x17fb0100, 0x2ff70000, 0x05ff0300, 0x2ff90000, 0x17fd0100, 0x2ffb0000, 0x0bff0200, 0x2ffd0000, 0x17ff0100, 0x2fff0000, + 0x00036600, 0x30010000, 0x18010100, 0x30030000, 0x0c010200, 0x30050000, 0x18030100, 0x30070000, 0x06010300, 0x30090000, 0x18050100, 0x300b0000, 0x0c030200, 0x300d0000, 0x18070100, 0x300f0000, 0x03010400, 0x30110000, 0x18090100, 0x30130000, 0x0c050200, 0x30150000, 0x180b0100, 0x30170000, 0x06030300, 0x30190000, 0x180d0100, 0x301b0000, 0x0c070200, 0x301d0000, 0x180f0100, 0x301f0000, 0x01810500, 0x30210000, 0x18110100, 0x30230000, 0x0c090200, 0x30250000, 0x18130100, 0x30270000, 0x06050300, 0x30290000, 0x18150100, 0x302b0000, 0x0c0b0200, 0x302d0000, 0x18170100, 0x302f0000, 0x03030400, 0x30310000, 0x18190100, 0x30330000, 0x0c0d0200, 0x30350000, 0x181b0100, 0x30370000, 0x06070300, 0x30390000, 0x181d0100, 0x303b0000, 0x0c0f0200, 0x303d0000, 0x181f0100, 0x303f0000, 0x00c10600, 0x30410000, 0x18210100, 0x30430000, 0x0c110200, 0x30450000, 0x18230100, 0x30470000, 0x06090300, 0x30490000, 0x18250100, 0x304b0000, 0x0c130200, 0x304d0000, 0x18270100, 0x304f0000, 0x03050400, 0x30510000, 0x18290100, 0x30530000, 0x0c150200, 0x30550000, 0x182b0100, 0x30570000, 0x060b0300, 0x30590000, 0x182d0100, 0x305b0000, 0x0c170200, 0x305d0000, 0x182f0100, 0x305f0000, 0x01830500, 0x30610000, 0x18310100, 0x30630000, 0x0c190200, 0x30650000, 0x18330100, 0x30670000, 0x060d0300, 0x30690000, 0x18350100, 0x306b0000, 0x0c1b0200, 0x306d0000, 0x18370100, 0x306f0000, 0x03070400, 0x30710000, 0x18390100, 0x30730000, 0x0c1d0200, 0x30750000, 0x183b0100, 0x30770000, 0x060f0300, 0x30790000, 0x183d0100, 0x307b0000, 0x0c1f0200, 0x307d0000, 0x183f0100, 0x307f0000, 0x00611600, 0x30810000, 0x18410100, 0x30830000, 0x0c210200, 0x30850000, 0x18430100, 0x30870000, 0x06110300, 0x30890000, 0x18450100, 0x308b0000, 0x0c230200, 0x308d0000, 0x18470100, 0x308f0000, 0x03090400, 0x30910000, 0x18490100, 0x30930000, 0x0c250200, 0x30950000, 0x184b0100, 0x30970000, 0x06130300, 0x30990000, 0x184d0100, 0x309b0000, 0x0c270200, 0x309d0000, 0x184f0100, 0x309f0000, 0x01850500, 0x30a10000, 0x18510100, 0x30a30000, 0x0c290200, 0x30a50000, 0x18530100, 0x30a70000, 0x06150300, 0x30a90000, 0x18550100, 0x30ab0000, 0x0c2b0200, 0x30ad0000, 0x18570100, 0x30af0000, 0x030b0400, 0x30b10000, 0x18590100, 0x30b30000, 0x0c2d0200, 0x30b50000, 0x185b0100, 0x30b70000, 0x06170300, 0x30b90000, 0x185d0100, 0x30bb0000, 0x0c2f0200, 0x30bd0000, 0x185f0100, 0x30bf0000, 0x00c30600, 0x30c10000, 0x18610100, 0x30c30000, 0x0c310200, 0x30c50000, 0x18630100, 0x30c70000, 0x06190300, 0x30c90000, 0x18650100, 0x30cb0000, 0x0c330200, 0x30cd0000, 0x18670100, 0x30cf0000, 0x030d0400, 0x30d10000, 0x18690100, 0x30d30000, 0x0c350200, 0x30d50000, 0x186b0100, 0x30d70000, 0x061b0300, 0x30d90000, 0x186d0100, 0x30db0000, 0x0c370200, 0x30dd0000, 0x186f0100, 0x30df0000, 0x01870500, 0x30e10000, 0x18710100, 0x30e30000, 0x0c390200, 0x30e50000, 0x18730100, 0x30e70000, 0x061d0300, 0x30e90000, 0x18750100, 0x30eb0000, 0x0c3b0200, 0x30ed0000, 0x18770100, 0x30ef0000, 0x030f0400, 0x30f10000, 0x18790100, 0x30f30000, 0x0c3d0200, 0x30f50000, 0x187b0100, 0x30f70000, 0x061f0300, 0x30f90000, 0x187d0100, 0x30fb0000, 0x0c3f0200, 0x30fd0000, 0x187f0100, 0x30ff0000, + 0x00312600, 0x31010000, 0x18810100, 0x31030000, 0x0c410200, 0x31050000, 0x18830100, 0x31070000, 0x06210300, 0x31090000, 0x18850100, 0x310b0000, 0x0c430200, 0x310d0000, 0x18870100, 0x310f0000, 0x03110400, 0x31110000, 0x18890100, 0x31130000, 0x0c450200, 0x31150000, 0x188b0100, 0x31170000, 0x06230300, 0x31190000, 0x188d0100, 0x311b0000, 0x0c470200, 0x311d0000, 0x188f0100, 0x311f0000, 0x01890500, 0x31210000, 0x18910100, 0x31230000, 0x0c490200, 0x31250000, 0x18930100, 0x31270000, 0x06250300, 0x31290000, 0x18950100, 0x312b0000, 0x0c4b0200, 0x312d0000, 0x18970100, 0x312f0000, 0x03130400, 0x31310000, 0x18990100, 0x31330000, 0x0c4d0200, 0x31350000, 0x189b0100, 0x31370000, 0x06270300, 0x31390000, 0x189d0100, 0x313b0000, 0x0c4f0200, 0x313d0000, 0x189f0100, 0x313f0000, 0x00c50600, 0x31410000, 0x18a10100, 0x31430000, 0x0c510200, 0x31450000, 0x18a30100, 0x31470000, 0x06290300, 0x31490000, 0x18a50100, 0x314b0000, 0x0c530200, 0x314d0000, 0x18a70100, 0x314f0000, 0x03150400, 0x31510000, 0x18a90100, 0x31530000, 0x0c550200, 0x31550000, 0x18ab0100, 0x31570000, 0x062b0300, 0x31590000, 0x18ad0100, 0x315b0000, 0x0c570200, 0x315d0000, 0x18af0100, 0x315f0000, 0x018b0500, 0x31610000, 0x18b10100, 0x31630000, 0x0c590200, 0x31650000, 0x18b30100, 0x31670000, 0x062d0300, 0x31690000, 0x18b50100, 0x316b0000, 0x0c5b0200, 0x316d0000, 0x18b70100, 0x316f0000, 0x03170400, 0x31710000, 0x18b90100, 0x31730000, 0x0c5d0200, 0x31750000, 0x18bb0100, 0x31770000, 0x062f0300, 0x31790000, 0x18bd0100, 0x317b0000, 0x0c5f0200, 0x317d0000, 0x18bf0100, 0x317f0000, 0x00631600, 0x31810000, 0x18c10100, 0x31830000, 0x0c610200, 0x31850000, 0x18c30100, 0x31870000, 0x06310300, 0x31890000, 0x18c50100, 0x318b0000, 0x0c630200, 0x318d0000, 0x18c70100, 0x318f0000, 0x03190400, 0x31910000, 0x18c90100, 0x31930000, 0x0c650200, 0x31950000, 0x18cb0100, 0x31970000, 0x06330300, 0x31990000, 0x18cd0100, 0x319b0000, 0x0c670200, 0x319d0000, 0x18cf0100, 0x319f0000, 0x018d0500, 0x31a10000, 0x18d10100, 0x31a30000, 0x0c690200, 0x31a50000, 0x18d30100, 0x31a70000, 0x06350300, 0x31a90000, 0x18d50100, 0x31ab0000, 0x0c6b0200, 0x31ad0000, 0x18d70100, 0x31af0000, 0x031b0400, 0x31b10000, 0x18d90100, 0x31b30000, 0x0c6d0200, 0x31b50000, 0x18db0100, 0x31b70000, 0x06370300, 0x31b90000, 0x18dd0100, 0x31bb0000, 0x0c6f0200, 0x31bd0000, 0x18df0100, 0x31bf0000, 0x00c70600, 0x31c10000, 0x18e10100, 0x31c30000, 0x0c710200, 0x31c50000, 0x18e30100, 0x31c70000, 0x06390300, 0x31c90000, 0x18e50100, 0x31cb0000, 0x0c730200, 0x31cd0000, 0x18e70100, 0x31cf0000, 0x031d0400, 0x31d10000, 0x18e90100, 0x31d30000, 0x0c750200, 0x31d50000, 0x18eb0100, 0x31d70000, 0x063b0300, 0x31d90000, 0x18ed0100, 0x31db0000, 0x0c770200, 0x31dd0000, 0x18ef0100, 0x31df0000, 0x018f0500, 0x31e10000, 0x18f10100, 0x31e30000, 0x0c790200, 0x31e50000, 0x18f30100, 0x31e70000, 0x063d0300, 0x31e90000, 0x18f50100, 0x31eb0000, 0x0c7b0200, 0x31ed0000, 0x18f70100, 0x31ef0000, 0x031f0400, 0x31f10000, 0x18f90100, 0x31f30000, 0x0c7d0200, 0x31f50000, 0x18fb0100, 0x31f70000, 0x063f0300, 0x31f90000, 0x18fd0100, 0x31fb0000, 0x0c7f0200, 0x31fd0000, 0x18ff0100, 0x31ff0000, + 0x00193600, 0x32010000, 0x19010100, 0x32030000, 0x0c810200, 0x32050000, 0x19030100, 0x32070000, 0x06410300, 0x32090000, 0x19050100, 0x320b0000, 0x0c830200, 0x320d0000, 0x19070100, 0x320f0000, 0x03210400, 0x32110000, 0x19090100, 0x32130000, 0x0c850200, 0x32150000, 0x190b0100, 0x32170000, 0x06430300, 0x32190000, 0x190d0100, 0x321b0000, 0x0c870200, 0x321d0000, 0x190f0100, 0x321f0000, 0x01910500, 0x32210000, 0x19110100, 0x32230000, 0x0c890200, 0x32250000, 0x19130100, 0x32270000, 0x06450300, 0x32290000, 0x19150100, 0x322b0000, 0x0c8b0200, 0x322d0000, 0x19170100, 0x322f0000, 0x03230400, 0x32310000, 0x19190100, 0x32330000, 0x0c8d0200, 0x32350000, 0x191b0100, 0x32370000, 0x06470300, 0x32390000, 0x191d0100, 0x323b0000, 0x0c8f0200, 0x323d0000, 0x191f0100, 0x323f0000, 0x00c90600, 0x32410000, 0x19210100, 0x32430000, 0x0c910200, 0x32450000, 0x19230100, 0x32470000, 0x06490300, 0x32490000, 0x19250100, 0x324b0000, 0x0c930200, 0x324d0000, 0x19270100, 0x324f0000, 0x03250400, 0x32510000, 0x19290100, 0x32530000, 0x0c950200, 0x32550000, 0x192b0100, 0x32570000, 0x064b0300, 0x32590000, 0x192d0100, 0x325b0000, 0x0c970200, 0x325d0000, 0x192f0100, 0x325f0000, 0x01930500, 0x32610000, 0x19310100, 0x32630000, 0x0c990200, 0x32650000, 0x19330100, 0x32670000, 0x064d0300, 0x32690000, 0x19350100, 0x326b0000, 0x0c9b0200, 0x326d0000, 0x19370100, 0x326f0000, 0x03270400, 0x32710000, 0x19390100, 0x32730000, 0x0c9d0200, 0x32750000, 0x193b0100, 0x32770000, 0x064f0300, 0x32790000, 0x193d0100, 0x327b0000, 0x0c9f0200, 0x327d0000, 0x193f0100, 0x327f0000, 0x00651600, 0x32810000, 0x19410100, 0x32830000, 0x0ca10200, 0x32850000, 0x19430100, 0x32870000, 0x06510300, 0x32890000, 0x19450100, 0x328b0000, 0x0ca30200, 0x328d0000, 0x19470100, 0x328f0000, 0x03290400, 0x32910000, 0x19490100, 0x32930000, 0x0ca50200, 0x32950000, 0x194b0100, 0x32970000, 0x06530300, 0x32990000, 0x194d0100, 0x329b0000, 0x0ca70200, 0x329d0000, 0x194f0100, 0x329f0000, 0x01950500, 0x32a10000, 0x19510100, 0x32a30000, 0x0ca90200, 0x32a50000, 0x19530100, 0x32a70000, 0x06550300, 0x32a90000, 0x19550100, 0x32ab0000, 0x0cab0200, 0x32ad0000, 0x19570100, 0x32af0000, 0x032b0400, 0x32b10000, 0x19590100, 0x32b30000, 0x0cad0200, 0x32b50000, 0x195b0100, 0x32b70000, 0x06570300, 0x32b90000, 0x195d0100, 0x32bb0000, 0x0caf0200, 0x32bd0000, 0x195f0100, 0x32bf0000, 0x00cb0600, 0x32c10000, 0x19610100, 0x32c30000, 0x0cb10200, 0x32c50000, 0x19630100, 0x32c70000, 0x06590300, 0x32c90000, 0x19650100, 0x32cb0000, 0x0cb30200, 0x32cd0000, 0x19670100, 0x32cf0000, 0x032d0400, 0x32d10000, 0x19690100, 0x32d30000, 0x0cb50200, 0x32d50000, 0x196b0100, 0x32d70000, 0x065b0300, 0x32d90000, 0x196d0100, 0x32db0000, 0x0cb70200, 0x32dd0000, 0x196f0100, 0x32df0000, 0x01970500, 0x32e10000, 0x19710100, 0x32e30000, 0x0cb90200, 0x32e50000, 0x19730100, 0x32e70000, 0x065d0300, 0x32e90000, 0x19750100, 0x32eb0000, 0x0cbb0200, 0x32ed0000, 0x19770100, 0x32ef0000, 0x032f0400, 0x32f10000, 0x19790100, 0x32f30000, 0x0cbd0200, 0x32f50000, 0x197b0100, 0x32f70000, 0x065f0300, 0x32f90000, 0x197d0100, 0x32fb0000, 0x0cbf0200, 0x32fd0000, 0x197f0100, 0x32ff0000, + 0x00332600, 0x33010000, 0x19810100, 0x33030000, 0x0cc10200, 0x33050000, 0x19830100, 0x33070000, 0x06610300, 0x33090000, 0x19850100, 0x330b0000, 0x0cc30200, 0x330d0000, 0x19870100, 0x330f0000, 0x03310400, 0x33110000, 0x19890100, 0x33130000, 0x0cc50200, 0x33150000, 0x198b0100, 0x33170000, 0x06630300, 0x33190000, 0x198d0100, 0x331b0000, 0x0cc70200, 0x331d0000, 0x198f0100, 0x331f0000, 0x01990500, 0x33210000, 0x19910100, 0x33230000, 0x0cc90200, 0x33250000, 0x19930100, 0x33270000, 0x06650300, 0x33290000, 0x19950100, 0x332b0000, 0x0ccb0200, 0x332d0000, 0x19970100, 0x332f0000, 0x03330400, 0x33310000, 0x19990100, 0x33330000, 0x0ccd0200, 0x33350000, 0x199b0100, 0x33370000, 0x06670300, 0x33390000, 0x199d0100, 0x333b0000, 0x0ccf0200, 0x333d0000, 0x199f0100, 0x333f0000, 0x00cd0600, 0x33410000, 0x19a10100, 0x33430000, 0x0cd10200, 0x33450000, 0x19a30100, 0x33470000, 0x06690300, 0x33490000, 0x19a50100, 0x334b0000, 0x0cd30200, 0x334d0000, 0x19a70100, 0x334f0000, 0x03350400, 0x33510000, 0x19a90100, 0x33530000, 0x0cd50200, 0x33550000, 0x19ab0100, 0x33570000, 0x066b0300, 0x33590000, 0x19ad0100, 0x335b0000, 0x0cd70200, 0x335d0000, 0x19af0100, 0x335f0000, 0x019b0500, 0x33610000, 0x19b10100, 0x33630000, 0x0cd90200, 0x33650000, 0x19b30100, 0x33670000, 0x066d0300, 0x33690000, 0x19b50100, 0x336b0000, 0x0cdb0200, 0x336d0000, 0x19b70100, 0x336f0000, 0x03370400, 0x33710000, 0x19b90100, 0x33730000, 0x0cdd0200, 0x33750000, 0x19bb0100, 0x33770000, 0x066f0300, 0x33790000, 0x19bd0100, 0x337b0000, 0x0cdf0200, 0x337d0000, 0x19bf0100, 0x337f0000, 0x00671600, 0x33810000, 0x19c10100, 0x33830000, 0x0ce10200, 0x33850000, 0x19c30100, 0x33870000, 0x06710300, 0x33890000, 0x19c50100, 0x338b0000, 0x0ce30200, 0x338d0000, 0x19c70100, 0x338f0000, 0x03390400, 0x33910000, 0x19c90100, 0x33930000, 0x0ce50200, 0x33950000, 0x19cb0100, 0x33970000, 0x06730300, 0x33990000, 0x19cd0100, 0x339b0000, 0x0ce70200, 0x339d0000, 0x19cf0100, 0x339f0000, 0x019d0500, 0x33a10000, 0x19d10100, 0x33a30000, 0x0ce90200, 0x33a50000, 0x19d30100, 0x33a70000, 0x06750300, 0x33a90000, 0x19d50100, 0x33ab0000, 0x0ceb0200, 0x33ad0000, 0x19d70100, 0x33af0000, 0x033b0400, 0x33b10000, 0x19d90100, 0x33b30000, 0x0ced0200, 0x33b50000, 0x19db0100, 0x33b70000, 0x06770300, 0x33b90000, 0x19dd0100, 0x33bb0000, 0x0cef0200, 0x33bd0000, 0x19df0100, 0x33bf0000, 0x00cf0600, 0x33c10000, 0x19e10100, 0x33c30000, 0x0cf10200, 0x33c50000, 0x19e30100, 0x33c70000, 0x06790300, 0x33c90000, 0x19e50100, 0x33cb0000, 0x0cf30200, 0x33cd0000, 0x19e70100, 0x33cf0000, 0x033d0400, 0x33d10000, 0x19e90100, 0x33d30000, 0x0cf50200, 0x33d50000, 0x19eb0100, 0x33d70000, 0x067b0300, 0x33d90000, 0x19ed0100, 0x33db0000, 0x0cf70200, 0x33dd0000, 0x19ef0100, 0x33df0000, 0x019f0500, 0x33e10000, 0x19f10100, 0x33e30000, 0x0cf90200, 0x33e50000, 0x19f30100, 0x33e70000, 0x067d0300, 0x33e90000, 0x19f50100, 0x33eb0000, 0x0cfb0200, 0x33ed0000, 0x19f70100, 0x33ef0000, 0x033f0400, 0x33f10000, 0x19f90100, 0x33f30000, 0x0cfd0200, 0x33f50000, 0x19fb0100, 0x33f70000, 0x067f0300, 0x33f90000, 0x19fd0100, 0x33fb0000, 0x0cff0200, 0x33fd0000, 0x19ff0100, 0x33ff0000, + 0x000d4600, 0x34010000, 0x1a010100, 0x34030000, 0x0d010200, 0x34050000, 0x1a030100, 0x34070000, 0x06810300, 0x34090000, 0x1a050100, 0x340b0000, 0x0d030200, 0x340d0000, 0x1a070100, 0x340f0000, 0x03410400, 0x34110000, 0x1a090100, 0x34130000, 0x0d050200, 0x34150000, 0x1a0b0100, 0x34170000, 0x06830300, 0x34190000, 0x1a0d0100, 0x341b0000, 0x0d070200, 0x341d0000, 0x1a0f0100, 0x341f0000, 0x01a10500, 0x34210000, 0x1a110100, 0x34230000, 0x0d090200, 0x34250000, 0x1a130100, 0x34270000, 0x06850300, 0x34290000, 0x1a150100, 0x342b0000, 0x0d0b0200, 0x342d0000, 0x1a170100, 0x342f0000, 0x03430400, 0x34310000, 0x1a190100, 0x34330000, 0x0d0d0200, 0x34350000, 0x1a1b0100, 0x34370000, 0x06870300, 0x34390000, 0x1a1d0100, 0x343b0000, 0x0d0f0200, 0x343d0000, 0x1a1f0100, 0x343f0000, 0x00d10600, 0x34410000, 0x1a210100, 0x34430000, 0x0d110200, 0x34450000, 0x1a230100, 0x34470000, 0x06890300, 0x34490000, 0x1a250100, 0x344b0000, 0x0d130200, 0x344d0000, 0x1a270100, 0x344f0000, 0x03450400, 0x34510000, 0x1a290100, 0x34530000, 0x0d150200, 0x34550000, 0x1a2b0100, 0x34570000, 0x068b0300, 0x34590000, 0x1a2d0100, 0x345b0000, 0x0d170200, 0x345d0000, 0x1a2f0100, 0x345f0000, 0x01a30500, 0x34610000, 0x1a310100, 0x34630000, 0x0d190200, 0x34650000, 0x1a330100, 0x34670000, 0x068d0300, 0x34690000, 0x1a350100, 0x346b0000, 0x0d1b0200, 0x346d0000, 0x1a370100, 0x346f0000, 0x03470400, 0x34710000, 0x1a390100, 0x34730000, 0x0d1d0200, 0x34750000, 0x1a3b0100, 0x34770000, 0x068f0300, 0x34790000, 0x1a3d0100, 0x347b0000, 0x0d1f0200, 0x347d0000, 0x1a3f0100, 0x347f0000, 0x00691600, 0x34810000, 0x1a410100, 0x34830000, 0x0d210200, 0x34850000, 0x1a430100, 0x34870000, 0x06910300, 0x34890000, 0x1a450100, 0x348b0000, 0x0d230200, 0x348d0000, 0x1a470100, 0x348f0000, 0x03490400, 0x34910000, 0x1a490100, 0x34930000, 0x0d250200, 0x34950000, 0x1a4b0100, 0x34970000, 0x06930300, 0x34990000, 0x1a4d0100, 0x349b0000, 0x0d270200, 0x349d0000, 0x1a4f0100, 0x349f0000, 0x01a50500, 0x34a10000, 0x1a510100, 0x34a30000, 0x0d290200, 0x34a50000, 0x1a530100, 0x34a70000, 0x06950300, 0x34a90000, 0x1a550100, 0x34ab0000, 0x0d2b0200, 0x34ad0000, 0x1a570100, 0x34af0000, 0x034b0400, 0x34b10000, 0x1a590100, 0x34b30000, 0x0d2d0200, 0x34b50000, 0x1a5b0100, 0x34b70000, 0x06970300, 0x34b90000, 0x1a5d0100, 0x34bb0000, 0x0d2f0200, 0x34bd0000, 0x1a5f0100, 0x34bf0000, 0x00d30600, 0x34c10000, 0x1a610100, 0x34c30000, 0x0d310200, 0x34c50000, 0x1a630100, 0x34c70000, 0x06990300, 0x34c90000, 0x1a650100, 0x34cb0000, 0x0d330200, 0x34cd0000, 0x1a670100, 0x34cf0000, 0x034d0400, 0x34d10000, 0x1a690100, 0x34d30000, 0x0d350200, 0x34d50000, 0x1a6b0100, 0x34d70000, 0x069b0300, 0x34d90000, 0x1a6d0100, 0x34db0000, 0x0d370200, 0x34dd0000, 0x1a6f0100, 0x34df0000, 0x01a70500, 0x34e10000, 0x1a710100, 0x34e30000, 0x0d390200, 0x34e50000, 0x1a730100, 0x34e70000, 0x069d0300, 0x34e90000, 0x1a750100, 0x34eb0000, 0x0d3b0200, 0x34ed0000, 0x1a770100, 0x34ef0000, 0x034f0400, 0x34f10000, 0x1a790100, 0x34f30000, 0x0d3d0200, 0x34f50000, 0x1a7b0100, 0x34f70000, 0x069f0300, 0x34f90000, 0x1a7d0100, 0x34fb0000, 0x0d3f0200, 0x34fd0000, 0x1a7f0100, 0x34ff0000, + 0x00352600, 0x35010000, 0x1a810100, 0x35030000, 0x0d410200, 0x35050000, 0x1a830100, 0x35070000, 0x06a10300, 0x35090000, 0x1a850100, 0x350b0000, 0x0d430200, 0x350d0000, 0x1a870100, 0x350f0000, 0x03510400, 0x35110000, 0x1a890100, 0x35130000, 0x0d450200, 0x35150000, 0x1a8b0100, 0x35170000, 0x06a30300, 0x35190000, 0x1a8d0100, 0x351b0000, 0x0d470200, 0x351d0000, 0x1a8f0100, 0x351f0000, 0x01a90500, 0x35210000, 0x1a910100, 0x35230000, 0x0d490200, 0x35250000, 0x1a930100, 0x35270000, 0x06a50300, 0x35290000, 0x1a950100, 0x352b0000, 0x0d4b0200, 0x352d0000, 0x1a970100, 0x352f0000, 0x03530400, 0x35310000, 0x1a990100, 0x35330000, 0x0d4d0200, 0x35350000, 0x1a9b0100, 0x35370000, 0x06a70300, 0x35390000, 0x1a9d0100, 0x353b0000, 0x0d4f0200, 0x353d0000, 0x1a9f0100, 0x353f0000, 0x00d50600, 0x35410000, 0x1aa10100, 0x35430000, 0x0d510200, 0x35450000, 0x1aa30100, 0x35470000, 0x06a90300, 0x35490000, 0x1aa50100, 0x354b0000, 0x0d530200, 0x354d0000, 0x1aa70100, 0x354f0000, 0x03550400, 0x35510000, 0x1aa90100, 0x35530000, 0x0d550200, 0x35550000, 0x1aab0100, 0x35570000, 0x06ab0300, 0x35590000, 0x1aad0100, 0x355b0000, 0x0d570200, 0x355d0000, 0x1aaf0100, 0x355f0000, 0x01ab0500, 0x35610000, 0x1ab10100, 0x35630000, 0x0d590200, 0x35650000, 0x1ab30100, 0x35670000, 0x06ad0300, 0x35690000, 0x1ab50100, 0x356b0000, 0x0d5b0200, 0x356d0000, 0x1ab70100, 0x356f0000, 0x03570400, 0x35710000, 0x1ab90100, 0x35730000, 0x0d5d0200, 0x35750000, 0x1abb0100, 0x35770000, 0x06af0300, 0x35790000, 0x1abd0100, 0x357b0000, 0x0d5f0200, 0x357d0000, 0x1abf0100, 0x357f0000, 0x006b1600, 0x35810000, 0x1ac10100, 0x35830000, 0x0d610200, 0x35850000, 0x1ac30100, 0x35870000, 0x06b10300, 0x35890000, 0x1ac50100, 0x358b0000, 0x0d630200, 0x358d0000, 0x1ac70100, 0x358f0000, 0x03590400, 0x35910000, 0x1ac90100, 0x35930000, 0x0d650200, 0x35950000, 0x1acb0100, 0x35970000, 0x06b30300, 0x35990000, 0x1acd0100, 0x359b0000, 0x0d670200, 0x359d0000, 0x1acf0100, 0x359f0000, 0x01ad0500, 0x35a10000, 0x1ad10100, 0x35a30000, 0x0d690200, 0x35a50000, 0x1ad30100, 0x35a70000, 0x06b50300, 0x35a90000, 0x1ad50100, 0x35ab0000, 0x0d6b0200, 0x35ad0000, 0x1ad70100, 0x35af0000, 0x035b0400, 0x35b10000, 0x1ad90100, 0x35b30000, 0x0d6d0200, 0x35b50000, 0x1adb0100, 0x35b70000, 0x06b70300, 0x35b90000, 0x1add0100, 0x35bb0000, 0x0d6f0200, 0x35bd0000, 0x1adf0100, 0x35bf0000, 0x00d70600, 0x35c10000, 0x1ae10100, 0x35c30000, 0x0d710200, 0x35c50000, 0x1ae30100, 0x35c70000, 0x06b90300, 0x35c90000, 0x1ae50100, 0x35cb0000, 0x0d730200, 0x35cd0000, 0x1ae70100, 0x35cf0000, 0x035d0400, 0x35d10000, 0x1ae90100, 0x35d30000, 0x0d750200, 0x35d50000, 0x1aeb0100, 0x35d70000, 0x06bb0300, 0x35d90000, 0x1aed0100, 0x35db0000, 0x0d770200, 0x35dd0000, 0x1aef0100, 0x35df0000, 0x01af0500, 0x35e10000, 0x1af10100, 0x35e30000, 0x0d790200, 0x35e50000, 0x1af30100, 0x35e70000, 0x06bd0300, 0x35e90000, 0x1af50100, 0x35eb0000, 0x0d7b0200, 0x35ed0000, 0x1af70100, 0x35ef0000, 0x035f0400, 0x35f10000, 0x1af90100, 0x35f30000, 0x0d7d0200, 0x35f50000, 0x1afb0100, 0x35f70000, 0x06bf0300, 0x35f90000, 0x1afd0100, 0x35fb0000, 0x0d7f0200, 0x35fd0000, 0x1aff0100, 0x35ff0000, + 0x001b3600, 0x36010000, 0x1b010100, 0x36030000, 0x0d810200, 0x36050000, 0x1b030100, 0x36070000, 0x06c10300, 0x36090000, 0x1b050100, 0x360b0000, 0x0d830200, 0x360d0000, 0x1b070100, 0x360f0000, 0x03610400, 0x36110000, 0x1b090100, 0x36130000, 0x0d850200, 0x36150000, 0x1b0b0100, 0x36170000, 0x06c30300, 0x36190000, 0x1b0d0100, 0x361b0000, 0x0d870200, 0x361d0000, 0x1b0f0100, 0x361f0000, 0x01b10500, 0x36210000, 0x1b110100, 0x36230000, 0x0d890200, 0x36250000, 0x1b130100, 0x36270000, 0x06c50300, 0x36290000, 0x1b150100, 0x362b0000, 0x0d8b0200, 0x362d0000, 0x1b170100, 0x362f0000, 0x03630400, 0x36310000, 0x1b190100, 0x36330000, 0x0d8d0200, 0x36350000, 0x1b1b0100, 0x36370000, 0x06c70300, 0x36390000, 0x1b1d0100, 0x363b0000, 0x0d8f0200, 0x363d0000, 0x1b1f0100, 0x363f0000, 0x00d90600, 0x36410000, 0x1b210100, 0x36430000, 0x0d910200, 0x36450000, 0x1b230100, 0x36470000, 0x06c90300, 0x36490000, 0x1b250100, 0x364b0000, 0x0d930200, 0x364d0000, 0x1b270100, 0x364f0000, 0x03650400, 0x36510000, 0x1b290100, 0x36530000, 0x0d950200, 0x36550000, 0x1b2b0100, 0x36570000, 0x06cb0300, 0x36590000, 0x1b2d0100, 0x365b0000, 0x0d970200, 0x365d0000, 0x1b2f0100, 0x365f0000, 0x01b30500, 0x36610000, 0x1b310100, 0x36630000, 0x0d990200, 0x36650000, 0x1b330100, 0x36670000, 0x06cd0300, 0x36690000, 0x1b350100, 0x366b0000, 0x0d9b0200, 0x366d0000, 0x1b370100, 0x366f0000, 0x03670400, 0x36710000, 0x1b390100, 0x36730000, 0x0d9d0200, 0x36750000, 0x1b3b0100, 0x36770000, 0x06cf0300, 0x36790000, 0x1b3d0100, 0x367b0000, 0x0d9f0200, 0x367d0000, 0x1b3f0100, 0x367f0000, 0x006d1600, 0x36810000, 0x1b410100, 0x36830000, 0x0da10200, 0x36850000, 0x1b430100, 0x36870000, 0x06d10300, 0x36890000, 0x1b450100, 0x368b0000, 0x0da30200, 0x368d0000, 0x1b470100, 0x368f0000, 0x03690400, 0x36910000, 0x1b490100, 0x36930000, 0x0da50200, 0x36950000, 0x1b4b0100, 0x36970000, 0x06d30300, 0x36990000, 0x1b4d0100, 0x369b0000, 0x0da70200, 0x369d0000, 0x1b4f0100, 0x369f0000, 0x01b50500, 0x36a10000, 0x1b510100, 0x36a30000, 0x0da90200, 0x36a50000, 0x1b530100, 0x36a70000, 0x06d50300, 0x36a90000, 0x1b550100, 0x36ab0000, 0x0dab0200, 0x36ad0000, 0x1b570100, 0x36af0000, 0x036b0400, 0x36b10000, 0x1b590100, 0x36b30000, 0x0dad0200, 0x36b50000, 0x1b5b0100, 0x36b70000, 0x06d70300, 0x36b90000, 0x1b5d0100, 0x36bb0000, 0x0daf0200, 0x36bd0000, 0x1b5f0100, 0x36bf0000, 0x00db0600, 0x36c10000, 0x1b610100, 0x36c30000, 0x0db10200, 0x36c50000, 0x1b630100, 0x36c70000, 0x06d90300, 0x36c90000, 0x1b650100, 0x36cb0000, 0x0db30200, 0x36cd0000, 0x1b670100, 0x36cf0000, 0x036d0400, 0x36d10000, 0x1b690100, 0x36d30000, 0x0db50200, 0x36d50000, 0x1b6b0100, 0x36d70000, 0x06db0300, 0x36d90000, 0x1b6d0100, 0x36db0000, 0x0db70200, 0x36dd0000, 0x1b6f0100, 0x36df0000, 0x01b70500, 0x36e10000, 0x1b710100, 0x36e30000, 0x0db90200, 0x36e50000, 0x1b730100, 0x36e70000, 0x06dd0300, 0x36e90000, 0x1b750100, 0x36eb0000, 0x0dbb0200, 0x36ed0000, 0x1b770100, 0x36ef0000, 0x036f0400, 0x36f10000, 0x1b790100, 0x36f30000, 0x0dbd0200, 0x36f50000, 0x1b7b0100, 0x36f70000, 0x06df0300, 0x36f90000, 0x1b7d0100, 0x36fb0000, 0x0dbf0200, 0x36fd0000, 0x1b7f0100, 0x36ff0000, + 0x00372600, 0x37010000, 0x1b810100, 0x37030000, 0x0dc10200, 0x37050000, 0x1b830100, 0x37070000, 0x06e10300, 0x37090000, 0x1b850100, 0x370b0000, 0x0dc30200, 0x370d0000, 0x1b870100, 0x370f0000, 0x03710400, 0x37110000, 0x1b890100, 0x37130000, 0x0dc50200, 0x37150000, 0x1b8b0100, 0x37170000, 0x06e30300, 0x37190000, 0x1b8d0100, 0x371b0000, 0x0dc70200, 0x371d0000, 0x1b8f0100, 0x371f0000, 0x01b90500, 0x37210000, 0x1b910100, 0x37230000, 0x0dc90200, 0x37250000, 0x1b930100, 0x37270000, 0x06e50300, 0x37290000, 0x1b950100, 0x372b0000, 0x0dcb0200, 0x372d0000, 0x1b970100, 0x372f0000, 0x03730400, 0x37310000, 0x1b990100, 0x37330000, 0x0dcd0200, 0x37350000, 0x1b9b0100, 0x37370000, 0x06e70300, 0x37390000, 0x1b9d0100, 0x373b0000, 0x0dcf0200, 0x373d0000, 0x1b9f0100, 0x373f0000, 0x00dd0600, 0x37410000, 0x1ba10100, 0x37430000, 0x0dd10200, 0x37450000, 0x1ba30100, 0x37470000, 0x06e90300, 0x37490000, 0x1ba50100, 0x374b0000, 0x0dd30200, 0x374d0000, 0x1ba70100, 0x374f0000, 0x03750400, 0x37510000, 0x1ba90100, 0x37530000, 0x0dd50200, 0x37550000, 0x1bab0100, 0x37570000, 0x06eb0300, 0x37590000, 0x1bad0100, 0x375b0000, 0x0dd70200, 0x375d0000, 0x1baf0100, 0x375f0000, 0x01bb0500, 0x37610000, 0x1bb10100, 0x37630000, 0x0dd90200, 0x37650000, 0x1bb30100, 0x37670000, 0x06ed0300, 0x37690000, 0x1bb50100, 0x376b0000, 0x0ddb0200, 0x376d0000, 0x1bb70100, 0x376f0000, 0x03770400, 0x37710000, 0x1bb90100, 0x37730000, 0x0ddd0200, 0x37750000, 0x1bbb0100, 0x37770000, 0x06ef0300, 0x37790000, 0x1bbd0100, 0x377b0000, 0x0ddf0200, 0x377d0000, 0x1bbf0100, 0x377f0000, 0x006f1600, 0x37810000, 0x1bc10100, 0x37830000, 0x0de10200, 0x37850000, 0x1bc30100, 0x37870000, 0x06f10300, 0x37890000, 0x1bc50100, 0x378b0000, 0x0de30200, 0x378d0000, 0x1bc70100, 0x378f0000, 0x03790400, 0x37910000, 0x1bc90100, 0x37930000, 0x0de50200, 0x37950000, 0x1bcb0100, 0x37970000, 0x06f30300, 0x37990000, 0x1bcd0100, 0x379b0000, 0x0de70200, 0x379d0000, 0x1bcf0100, 0x379f0000, 0x01bd0500, 0x37a10000, 0x1bd10100, 0x37a30000, 0x0de90200, 0x37a50000, 0x1bd30100, 0x37a70000, 0x06f50300, 0x37a90000, 0x1bd50100, 0x37ab0000, 0x0deb0200, 0x37ad0000, 0x1bd70100, 0x37af0000, 0x037b0400, 0x37b10000, 0x1bd90100, 0x37b30000, 0x0ded0200, 0x37b50000, 0x1bdb0100, 0x37b70000, 0x06f70300, 0x37b90000, 0x1bdd0100, 0x37bb0000, 0x0def0200, 0x37bd0000, 0x1bdf0100, 0x37bf0000, 0x00df0600, 0x37c10000, 0x1be10100, 0x37c30000, 0x0df10200, 0x37c50000, 0x1be30100, 0x37c70000, 0x06f90300, 0x37c90000, 0x1be50100, 0x37cb0000, 0x0df30200, 0x37cd0000, 0x1be70100, 0x37cf0000, 0x037d0400, 0x37d10000, 0x1be90100, 0x37d30000, 0x0df50200, 0x37d50000, 0x1beb0100, 0x37d70000, 0x06fb0300, 0x37d90000, 0x1bed0100, 0x37db0000, 0x0df70200, 0x37dd0000, 0x1bef0100, 0x37df0000, 0x01bf0500, 0x37e10000, 0x1bf10100, 0x37e30000, 0x0df90200, 0x37e50000, 0x1bf30100, 0x37e70000, 0x06fd0300, 0x37e90000, 0x1bf50100, 0x37eb0000, 0x0dfb0200, 0x37ed0000, 0x1bf70100, 0x37ef0000, 0x037f0400, 0x37f10000, 0x1bf90100, 0x37f30000, 0x0dfd0200, 0x37f50000, 0x1bfb0100, 0x37f70000, 0x06ff0300, 0x37f90000, 0x1bfd0100, 0x37fb0000, 0x0dff0200, 0x37fd0000, 0x1bff0100, 0x37ff0000, + 0x00075600, 0x38010000, 0x1c010100, 0x38030000, 0x0e010200, 0x38050000, 0x1c030100, 0x38070000, 0x07010300, 0x38090000, 0x1c050100, 0x380b0000, 0x0e030200, 0x380d0000, 0x1c070100, 0x380f0000, 0x03810400, 0x38110000, 0x1c090100, 0x38130000, 0x0e050200, 0x38150000, 0x1c0b0100, 0x38170000, 0x07030300, 0x38190000, 0x1c0d0100, 0x381b0000, 0x0e070200, 0x381d0000, 0x1c0f0100, 0x381f0000, 0x01c10500, 0x38210000, 0x1c110100, 0x38230000, 0x0e090200, 0x38250000, 0x1c130100, 0x38270000, 0x07050300, 0x38290000, 0x1c150100, 0x382b0000, 0x0e0b0200, 0x382d0000, 0x1c170100, 0x382f0000, 0x03830400, 0x38310000, 0x1c190100, 0x38330000, 0x0e0d0200, 0x38350000, 0x1c1b0100, 0x38370000, 0x07070300, 0x38390000, 0x1c1d0100, 0x383b0000, 0x0e0f0200, 0x383d0000, 0x1c1f0100, 0x383f0000, 0x00e10600, 0x38410000, 0x1c210100, 0x38430000, 0x0e110200, 0x38450000, 0x1c230100, 0x38470000, 0x07090300, 0x38490000, 0x1c250100, 0x384b0000, 0x0e130200, 0x384d0000, 0x1c270100, 0x384f0000, 0x03850400, 0x38510000, 0x1c290100, 0x38530000, 0x0e150200, 0x38550000, 0x1c2b0100, 0x38570000, 0x070b0300, 0x38590000, 0x1c2d0100, 0x385b0000, 0x0e170200, 0x385d0000, 0x1c2f0100, 0x385f0000, 0x01c30500, 0x38610000, 0x1c310100, 0x38630000, 0x0e190200, 0x38650000, 0x1c330100, 0x38670000, 0x070d0300, 0x38690000, 0x1c350100, 0x386b0000, 0x0e1b0200, 0x386d0000, 0x1c370100, 0x386f0000, 0x03870400, 0x38710000, 0x1c390100, 0x38730000, 0x0e1d0200, 0x38750000, 0x1c3b0100, 0x38770000, 0x070f0300, 0x38790000, 0x1c3d0100, 0x387b0000, 0x0e1f0200, 0x387d0000, 0x1c3f0100, 0x387f0000, 0x00711600, 0x38810000, 0x1c410100, 0x38830000, 0x0e210200, 0x38850000, 0x1c430100, 0x38870000, 0x07110300, 0x38890000, 0x1c450100, 0x388b0000, 0x0e230200, 0x388d0000, 0x1c470100, 0x388f0000, 0x03890400, 0x38910000, 0x1c490100, 0x38930000, 0x0e250200, 0x38950000, 0x1c4b0100, 0x38970000, 0x07130300, 0x38990000, 0x1c4d0100, 0x389b0000, 0x0e270200, 0x389d0000, 0x1c4f0100, 0x389f0000, 0x01c50500, 0x38a10000, 0x1c510100, 0x38a30000, 0x0e290200, 0x38a50000, 0x1c530100, 0x38a70000, 0x07150300, 0x38a90000, 0x1c550100, 0x38ab0000, 0x0e2b0200, 0x38ad0000, 0x1c570100, 0x38af0000, 0x038b0400, 0x38b10000, 0x1c590100, 0x38b30000, 0x0e2d0200, 0x38b50000, 0x1c5b0100, 0x38b70000, 0x07170300, 0x38b90000, 0x1c5d0100, 0x38bb0000, 0x0e2f0200, 0x38bd0000, 0x1c5f0100, 0x38bf0000, 0x00e30600, 0x38c10000, 0x1c610100, 0x38c30000, 0x0e310200, 0x38c50000, 0x1c630100, 0x38c70000, 0x07190300, 0x38c90000, 0x1c650100, 0x38cb0000, 0x0e330200, 0x38cd0000, 0x1c670100, 0x38cf0000, 0x038d0400, 0x38d10000, 0x1c690100, 0x38d30000, 0x0e350200, 0x38d50000, 0x1c6b0100, 0x38d70000, 0x071b0300, 0x38d90000, 0x1c6d0100, 0x38db0000, 0x0e370200, 0x38dd0000, 0x1c6f0100, 0x38df0000, 0x01c70500, 0x38e10000, 0x1c710100, 0x38e30000, 0x0e390200, 0x38e50000, 0x1c730100, 0x38e70000, 0x071d0300, 0x38e90000, 0x1c750100, 0x38eb0000, 0x0e3b0200, 0x38ed0000, 0x1c770100, 0x38ef0000, 0x038f0400, 0x38f10000, 0x1c790100, 0x38f30000, 0x0e3d0200, 0x38f50000, 0x1c7b0100, 0x38f70000, 0x071f0300, 0x38f90000, 0x1c7d0100, 0x38fb0000, 0x0e3f0200, 0x38fd0000, 0x1c7f0100, 0x38ff0000, + 0x00392600, 0x39010000, 0x1c810100, 0x39030000, 0x0e410200, 0x39050000, 0x1c830100, 0x39070000, 0x07210300, 0x39090000, 0x1c850100, 0x390b0000, 0x0e430200, 0x390d0000, 0x1c870100, 0x390f0000, 0x03910400, 0x39110000, 0x1c890100, 0x39130000, 0x0e450200, 0x39150000, 0x1c8b0100, 0x39170000, 0x07230300, 0x39190000, 0x1c8d0100, 0x391b0000, 0x0e470200, 0x391d0000, 0x1c8f0100, 0x391f0000, 0x01c90500, 0x39210000, 0x1c910100, 0x39230000, 0x0e490200, 0x39250000, 0x1c930100, 0x39270000, 0x07250300, 0x39290000, 0x1c950100, 0x392b0000, 0x0e4b0200, 0x392d0000, 0x1c970100, 0x392f0000, 0x03930400, 0x39310000, 0x1c990100, 0x39330000, 0x0e4d0200, 0x39350000, 0x1c9b0100, 0x39370000, 0x07270300, 0x39390000, 0x1c9d0100, 0x393b0000, 0x0e4f0200, 0x393d0000, 0x1c9f0100, 0x393f0000, 0x00e50600, 0x39410000, 0x1ca10100, 0x39430000, 0x0e510200, 0x39450000, 0x1ca30100, 0x39470000, 0x07290300, 0x39490000, 0x1ca50100, 0x394b0000, 0x0e530200, 0x394d0000, 0x1ca70100, 0x394f0000, 0x03950400, 0x39510000, 0x1ca90100, 0x39530000, 0x0e550200, 0x39550000, 0x1cab0100, 0x39570000, 0x072b0300, 0x39590000, 0x1cad0100, 0x395b0000, 0x0e570200, 0x395d0000, 0x1caf0100, 0x395f0000, 0x01cb0500, 0x39610000, 0x1cb10100, 0x39630000, 0x0e590200, 0x39650000, 0x1cb30100, 0x39670000, 0x072d0300, 0x39690000, 0x1cb50100, 0x396b0000, 0x0e5b0200, 0x396d0000, 0x1cb70100, 0x396f0000, 0x03970400, 0x39710000, 0x1cb90100, 0x39730000, 0x0e5d0200, 0x39750000, 0x1cbb0100, 0x39770000, 0x072f0300, 0x39790000, 0x1cbd0100, 0x397b0000, 0x0e5f0200, 0x397d0000, 0x1cbf0100, 0x397f0000, 0x00731600, 0x39810000, 0x1cc10100, 0x39830000, 0x0e610200, 0x39850000, 0x1cc30100, 0x39870000, 0x07310300, 0x39890000, 0x1cc50100, 0x398b0000, 0x0e630200, 0x398d0000, 0x1cc70100, 0x398f0000, 0x03990400, 0x39910000, 0x1cc90100, 0x39930000, 0x0e650200, 0x39950000, 0x1ccb0100, 0x39970000, 0x07330300, 0x39990000, 0x1ccd0100, 0x399b0000, 0x0e670200, 0x399d0000, 0x1ccf0100, 0x399f0000, 0x01cd0500, 0x39a10000, 0x1cd10100, 0x39a30000, 0x0e690200, 0x39a50000, 0x1cd30100, 0x39a70000, 0x07350300, 0x39a90000, 0x1cd50100, 0x39ab0000, 0x0e6b0200, 0x39ad0000, 0x1cd70100, 0x39af0000, 0x039b0400, 0x39b10000, 0x1cd90100, 0x39b30000, 0x0e6d0200, 0x39b50000, 0x1cdb0100, 0x39b70000, 0x07370300, 0x39b90000, 0x1cdd0100, 0x39bb0000, 0x0e6f0200, 0x39bd0000, 0x1cdf0100, 0x39bf0000, 0x00e70600, 0x39c10000, 0x1ce10100, 0x39c30000, 0x0e710200, 0x39c50000, 0x1ce30100, 0x39c70000, 0x07390300, 0x39c90000, 0x1ce50100, 0x39cb0000, 0x0e730200, 0x39cd0000, 0x1ce70100, 0x39cf0000, 0x039d0400, 0x39d10000, 0x1ce90100, 0x39d30000, 0x0e750200, 0x39d50000, 0x1ceb0100, 0x39d70000, 0x073b0300, 0x39d90000, 0x1ced0100, 0x39db0000, 0x0e770200, 0x39dd0000, 0x1cef0100, 0x39df0000, 0x01cf0500, 0x39e10000, 0x1cf10100, 0x39e30000, 0x0e790200, 0x39e50000, 0x1cf30100, 0x39e70000, 0x073d0300, 0x39e90000, 0x1cf50100, 0x39eb0000, 0x0e7b0200, 0x39ed0000, 0x1cf70100, 0x39ef0000, 0x039f0400, 0x39f10000, 0x1cf90100, 0x39f30000, 0x0e7d0200, 0x39f50000, 0x1cfb0100, 0x39f70000, 0x073f0300, 0x39f90000, 0x1cfd0100, 0x39fb0000, 0x0e7f0200, 0x39fd0000, 0x1cff0100, 0x39ff0000, + 0x001d3600, 0x3a010000, 0x1d010100, 0x3a030000, 0x0e810200, 0x3a050000, 0x1d030100, 0x3a070000, 0x07410300, 0x3a090000, 0x1d050100, 0x3a0b0000, 0x0e830200, 0x3a0d0000, 0x1d070100, 0x3a0f0000, 0x03a10400, 0x3a110000, 0x1d090100, 0x3a130000, 0x0e850200, 0x3a150000, 0x1d0b0100, 0x3a170000, 0x07430300, 0x3a190000, 0x1d0d0100, 0x3a1b0000, 0x0e870200, 0x3a1d0000, 0x1d0f0100, 0x3a1f0000, 0x01d10500, 0x3a210000, 0x1d110100, 0x3a230000, 0x0e890200, 0x3a250000, 0x1d130100, 0x3a270000, 0x07450300, 0x3a290000, 0x1d150100, 0x3a2b0000, 0x0e8b0200, 0x3a2d0000, 0x1d170100, 0x3a2f0000, 0x03a30400, 0x3a310000, 0x1d190100, 0x3a330000, 0x0e8d0200, 0x3a350000, 0x1d1b0100, 0x3a370000, 0x07470300, 0x3a390000, 0x1d1d0100, 0x3a3b0000, 0x0e8f0200, 0x3a3d0000, 0x1d1f0100, 0x3a3f0000, 0x00e90600, 0x3a410000, 0x1d210100, 0x3a430000, 0x0e910200, 0x3a450000, 0x1d230100, 0x3a470000, 0x07490300, 0x3a490000, 0x1d250100, 0x3a4b0000, 0x0e930200, 0x3a4d0000, 0x1d270100, 0x3a4f0000, 0x03a50400, 0x3a510000, 0x1d290100, 0x3a530000, 0x0e950200, 0x3a550000, 0x1d2b0100, 0x3a570000, 0x074b0300, 0x3a590000, 0x1d2d0100, 0x3a5b0000, 0x0e970200, 0x3a5d0000, 0x1d2f0100, 0x3a5f0000, 0x01d30500, 0x3a610000, 0x1d310100, 0x3a630000, 0x0e990200, 0x3a650000, 0x1d330100, 0x3a670000, 0x074d0300, 0x3a690000, 0x1d350100, 0x3a6b0000, 0x0e9b0200, 0x3a6d0000, 0x1d370100, 0x3a6f0000, 0x03a70400, 0x3a710000, 0x1d390100, 0x3a730000, 0x0e9d0200, 0x3a750000, 0x1d3b0100, 0x3a770000, 0x074f0300, 0x3a790000, 0x1d3d0100, 0x3a7b0000, 0x0e9f0200, 0x3a7d0000, 0x1d3f0100, 0x3a7f0000, 0x00751600, 0x3a810000, 0x1d410100, 0x3a830000, 0x0ea10200, 0x3a850000, 0x1d430100, 0x3a870000, 0x07510300, 0x3a890000, 0x1d450100, 0x3a8b0000, 0x0ea30200, 0x3a8d0000, 0x1d470100, 0x3a8f0000, 0x03a90400, 0x3a910000, 0x1d490100, 0x3a930000, 0x0ea50200, 0x3a950000, 0x1d4b0100, 0x3a970000, 0x07530300, 0x3a990000, 0x1d4d0100, 0x3a9b0000, 0x0ea70200, 0x3a9d0000, 0x1d4f0100, 0x3a9f0000, 0x01d50500, 0x3aa10000, 0x1d510100, 0x3aa30000, 0x0ea90200, 0x3aa50000, 0x1d530100, 0x3aa70000, 0x07550300, 0x3aa90000, 0x1d550100, 0x3aab0000, 0x0eab0200, 0x3aad0000, 0x1d570100, 0x3aaf0000, 0x03ab0400, 0x3ab10000, 0x1d590100, 0x3ab30000, 0x0ead0200, 0x3ab50000, 0x1d5b0100, 0x3ab70000, 0x07570300, 0x3ab90000, 0x1d5d0100, 0x3abb0000, 0x0eaf0200, 0x3abd0000, 0x1d5f0100, 0x3abf0000, 0x00eb0600, 0x3ac10000, 0x1d610100, 0x3ac30000, 0x0eb10200, 0x3ac50000, 0x1d630100, 0x3ac70000, 0x07590300, 0x3ac90000, 0x1d650100, 0x3acb0000, 0x0eb30200, 0x3acd0000, 0x1d670100, 0x3acf0000, 0x03ad0400, 0x3ad10000, 0x1d690100, 0x3ad30000, 0x0eb50200, 0x3ad50000, 0x1d6b0100, 0x3ad70000, 0x075b0300, 0x3ad90000, 0x1d6d0100, 0x3adb0000, 0x0eb70200, 0x3add0000, 0x1d6f0100, 0x3adf0000, 0x01d70500, 0x3ae10000, 0x1d710100, 0x3ae30000, 0x0eb90200, 0x3ae50000, 0x1d730100, 0x3ae70000, 0x075d0300, 0x3ae90000, 0x1d750100, 0x3aeb0000, 0x0ebb0200, 0x3aed0000, 0x1d770100, 0x3aef0000, 0x03af0400, 0x3af10000, 0x1d790100, 0x3af30000, 0x0ebd0200, 0x3af50000, 0x1d7b0100, 0x3af70000, 0x075f0300, 0x3af90000, 0x1d7d0100, 0x3afb0000, 0x0ebf0200, 0x3afd0000, 0x1d7f0100, 0x3aff0000, + 0x003b2600, 0x3b010000, 0x1d810100, 0x3b030000, 0x0ec10200, 0x3b050000, 0x1d830100, 0x3b070000, 0x07610300, 0x3b090000, 0x1d850100, 0x3b0b0000, 0x0ec30200, 0x3b0d0000, 0x1d870100, 0x3b0f0000, 0x03b10400, 0x3b110000, 0x1d890100, 0x3b130000, 0x0ec50200, 0x3b150000, 0x1d8b0100, 0x3b170000, 0x07630300, 0x3b190000, 0x1d8d0100, 0x3b1b0000, 0x0ec70200, 0x3b1d0000, 0x1d8f0100, 0x3b1f0000, 0x01d90500, 0x3b210000, 0x1d910100, 0x3b230000, 0x0ec90200, 0x3b250000, 0x1d930100, 0x3b270000, 0x07650300, 0x3b290000, 0x1d950100, 0x3b2b0000, 0x0ecb0200, 0x3b2d0000, 0x1d970100, 0x3b2f0000, 0x03b30400, 0x3b310000, 0x1d990100, 0x3b330000, 0x0ecd0200, 0x3b350000, 0x1d9b0100, 0x3b370000, 0x07670300, 0x3b390000, 0x1d9d0100, 0x3b3b0000, 0x0ecf0200, 0x3b3d0000, 0x1d9f0100, 0x3b3f0000, 0x00ed0600, 0x3b410000, 0x1da10100, 0x3b430000, 0x0ed10200, 0x3b450000, 0x1da30100, 0x3b470000, 0x07690300, 0x3b490000, 0x1da50100, 0x3b4b0000, 0x0ed30200, 0x3b4d0000, 0x1da70100, 0x3b4f0000, 0x03b50400, 0x3b510000, 0x1da90100, 0x3b530000, 0x0ed50200, 0x3b550000, 0x1dab0100, 0x3b570000, 0x076b0300, 0x3b590000, 0x1dad0100, 0x3b5b0000, 0x0ed70200, 0x3b5d0000, 0x1daf0100, 0x3b5f0000, 0x01db0500, 0x3b610000, 0x1db10100, 0x3b630000, 0x0ed90200, 0x3b650000, 0x1db30100, 0x3b670000, 0x076d0300, 0x3b690000, 0x1db50100, 0x3b6b0000, 0x0edb0200, 0x3b6d0000, 0x1db70100, 0x3b6f0000, 0x03b70400, 0x3b710000, 0x1db90100, 0x3b730000, 0x0edd0200, 0x3b750000, 0x1dbb0100, 0x3b770000, 0x076f0300, 0x3b790000, 0x1dbd0100, 0x3b7b0000, 0x0edf0200, 0x3b7d0000, 0x1dbf0100, 0x3b7f0000, 0x00771600, 0x3b810000, 0x1dc10100, 0x3b830000, 0x0ee10200, 0x3b850000, 0x1dc30100, 0x3b870000, 0x07710300, 0x3b890000, 0x1dc50100, 0x3b8b0000, 0x0ee30200, 0x3b8d0000, 0x1dc70100, 0x3b8f0000, 0x03b90400, 0x3b910000, 0x1dc90100, 0x3b930000, 0x0ee50200, 0x3b950000, 0x1dcb0100, 0x3b970000, 0x07730300, 0x3b990000, 0x1dcd0100, 0x3b9b0000, 0x0ee70200, 0x3b9d0000, 0x1dcf0100, 0x3b9f0000, 0x01dd0500, 0x3ba10000, 0x1dd10100, 0x3ba30000, 0x0ee90200, 0x3ba50000, 0x1dd30100, 0x3ba70000, 0x07750300, 0x3ba90000, 0x1dd50100, 0x3bab0000, 0x0eeb0200, 0x3bad0000, 0x1dd70100, 0x3baf0000, 0x03bb0400, 0x3bb10000, 0x1dd90100, 0x3bb30000, 0x0eed0200, 0x3bb50000, 0x1ddb0100, 0x3bb70000, 0x07770300, 0x3bb90000, 0x1ddd0100, 0x3bbb0000, 0x0eef0200, 0x3bbd0000, 0x1ddf0100, 0x3bbf0000, 0x00ef0600, 0x3bc10000, 0x1de10100, 0x3bc30000, 0x0ef10200, 0x3bc50000, 0x1de30100, 0x3bc70000, 0x07790300, 0x3bc90000, 0x1de50100, 0x3bcb0000, 0x0ef30200, 0x3bcd0000, 0x1de70100, 0x3bcf0000, 0x03bd0400, 0x3bd10000, 0x1de90100, 0x3bd30000, 0x0ef50200, 0x3bd50000, 0x1deb0100, 0x3bd70000, 0x077b0300, 0x3bd90000, 0x1ded0100, 0x3bdb0000, 0x0ef70200, 0x3bdd0000, 0x1def0100, 0x3bdf0000, 0x01df0500, 0x3be10000, 0x1df10100, 0x3be30000, 0x0ef90200, 0x3be50000, 0x1df30100, 0x3be70000, 0x077d0300, 0x3be90000, 0x1df50100, 0x3beb0000, 0x0efb0200, 0x3bed0000, 0x1df70100, 0x3bef0000, 0x03bf0400, 0x3bf10000, 0x1df90100, 0x3bf30000, 0x0efd0200, 0x3bf50000, 0x1dfb0100, 0x3bf70000, 0x077f0300, 0x3bf90000, 0x1dfd0100, 0x3bfb0000, 0x0eff0200, 0x3bfd0000, 0x1dff0100, 0x3bff0000, + 0x000f4600, 0x3c010000, 0x1e010100, 0x3c030000, 0x0f010200, 0x3c050000, 0x1e030100, 0x3c070000, 0x07810300, 0x3c090000, 0x1e050100, 0x3c0b0000, 0x0f030200, 0x3c0d0000, 0x1e070100, 0x3c0f0000, 0x03c10400, 0x3c110000, 0x1e090100, 0x3c130000, 0x0f050200, 0x3c150000, 0x1e0b0100, 0x3c170000, 0x07830300, 0x3c190000, 0x1e0d0100, 0x3c1b0000, 0x0f070200, 0x3c1d0000, 0x1e0f0100, 0x3c1f0000, 0x01e10500, 0x3c210000, 0x1e110100, 0x3c230000, 0x0f090200, 0x3c250000, 0x1e130100, 0x3c270000, 0x07850300, 0x3c290000, 0x1e150100, 0x3c2b0000, 0x0f0b0200, 0x3c2d0000, 0x1e170100, 0x3c2f0000, 0x03c30400, 0x3c310000, 0x1e190100, 0x3c330000, 0x0f0d0200, 0x3c350000, 0x1e1b0100, 0x3c370000, 0x07870300, 0x3c390000, 0x1e1d0100, 0x3c3b0000, 0x0f0f0200, 0x3c3d0000, 0x1e1f0100, 0x3c3f0000, 0x00f10600, 0x3c410000, 0x1e210100, 0x3c430000, 0x0f110200, 0x3c450000, 0x1e230100, 0x3c470000, 0x07890300, 0x3c490000, 0x1e250100, 0x3c4b0000, 0x0f130200, 0x3c4d0000, 0x1e270100, 0x3c4f0000, 0x03c50400, 0x3c510000, 0x1e290100, 0x3c530000, 0x0f150200, 0x3c550000, 0x1e2b0100, 0x3c570000, 0x078b0300, 0x3c590000, 0x1e2d0100, 0x3c5b0000, 0x0f170200, 0x3c5d0000, 0x1e2f0100, 0x3c5f0000, 0x01e30500, 0x3c610000, 0x1e310100, 0x3c630000, 0x0f190200, 0x3c650000, 0x1e330100, 0x3c670000, 0x078d0300, 0x3c690000, 0x1e350100, 0x3c6b0000, 0x0f1b0200, 0x3c6d0000, 0x1e370100, 0x3c6f0000, 0x03c70400, 0x3c710000, 0x1e390100, 0x3c730000, 0x0f1d0200, 0x3c750000, 0x1e3b0100, 0x3c770000, 0x078f0300, 0x3c790000, 0x1e3d0100, 0x3c7b0000, 0x0f1f0200, 0x3c7d0000, 0x1e3f0100, 0x3c7f0000, 0x00791600, 0x3c810000, 0x1e410100, 0x3c830000, 0x0f210200, 0x3c850000, 0x1e430100, 0x3c870000, 0x07910300, 0x3c890000, 0x1e450100, 0x3c8b0000, 0x0f230200, 0x3c8d0000, 0x1e470100, 0x3c8f0000, 0x03c90400, 0x3c910000, 0x1e490100, 0x3c930000, 0x0f250200, 0x3c950000, 0x1e4b0100, 0x3c970000, 0x07930300, 0x3c990000, 0x1e4d0100, 0x3c9b0000, 0x0f270200, 0x3c9d0000, 0x1e4f0100, 0x3c9f0000, 0x01e50500, 0x3ca10000, 0x1e510100, 0x3ca30000, 0x0f290200, 0x3ca50000, 0x1e530100, 0x3ca70000, 0x07950300, 0x3ca90000, 0x1e550100, 0x3cab0000, 0x0f2b0200, 0x3cad0000, 0x1e570100, 0x3caf0000, 0x03cb0400, 0x3cb10000, 0x1e590100, 0x3cb30000, 0x0f2d0200, 0x3cb50000, 0x1e5b0100, 0x3cb70000, 0x07970300, 0x3cb90000, 0x1e5d0100, 0x3cbb0000, 0x0f2f0200, 0x3cbd0000, 0x1e5f0100, 0x3cbf0000, 0x00f30600, 0x3cc10000, 0x1e610100, 0x3cc30000, 0x0f310200, 0x3cc50000, 0x1e630100, 0x3cc70000, 0x07990300, 0x3cc90000, 0x1e650100, 0x3ccb0000, 0x0f330200, 0x3ccd0000, 0x1e670100, 0x3ccf0000, 0x03cd0400, 0x3cd10000, 0x1e690100, 0x3cd30000, 0x0f350200, 0x3cd50000, 0x1e6b0100, 0x3cd70000, 0x079b0300, 0x3cd90000, 0x1e6d0100, 0x3cdb0000, 0x0f370200, 0x3cdd0000, 0x1e6f0100, 0x3cdf0000, 0x01e70500, 0x3ce10000, 0x1e710100, 0x3ce30000, 0x0f390200, 0x3ce50000, 0x1e730100, 0x3ce70000, 0x079d0300, 0x3ce90000, 0x1e750100, 0x3ceb0000, 0x0f3b0200, 0x3ced0000, 0x1e770100, 0x3cef0000, 0x03cf0400, 0x3cf10000, 0x1e790100, 0x3cf30000, 0x0f3d0200, 0x3cf50000, 0x1e7b0100, 0x3cf70000, 0x079f0300, 0x3cf90000, 0x1e7d0100, 0x3cfb0000, 0x0f3f0200, 0x3cfd0000, 0x1e7f0100, 0x3cff0000, + 0x003d2600, 0x3d010000, 0x1e810100, 0x3d030000, 0x0f410200, 0x3d050000, 0x1e830100, 0x3d070000, 0x07a10300, 0x3d090000, 0x1e850100, 0x3d0b0000, 0x0f430200, 0x3d0d0000, 0x1e870100, 0x3d0f0000, 0x03d10400, 0x3d110000, 0x1e890100, 0x3d130000, 0x0f450200, 0x3d150000, 0x1e8b0100, 0x3d170000, 0x07a30300, 0x3d190000, 0x1e8d0100, 0x3d1b0000, 0x0f470200, 0x3d1d0000, 0x1e8f0100, 0x3d1f0000, 0x01e90500, 0x3d210000, 0x1e910100, 0x3d230000, 0x0f490200, 0x3d250000, 0x1e930100, 0x3d270000, 0x07a50300, 0x3d290000, 0x1e950100, 0x3d2b0000, 0x0f4b0200, 0x3d2d0000, 0x1e970100, 0x3d2f0000, 0x03d30400, 0x3d310000, 0x1e990100, 0x3d330000, 0x0f4d0200, 0x3d350000, 0x1e9b0100, 0x3d370000, 0x07a70300, 0x3d390000, 0x1e9d0100, 0x3d3b0000, 0x0f4f0200, 0x3d3d0000, 0x1e9f0100, 0x3d3f0000, 0x00f50600, 0x3d410000, 0x1ea10100, 0x3d430000, 0x0f510200, 0x3d450000, 0x1ea30100, 0x3d470000, 0x07a90300, 0x3d490000, 0x1ea50100, 0x3d4b0000, 0x0f530200, 0x3d4d0000, 0x1ea70100, 0x3d4f0000, 0x03d50400, 0x3d510000, 0x1ea90100, 0x3d530000, 0x0f550200, 0x3d550000, 0x1eab0100, 0x3d570000, 0x07ab0300, 0x3d590000, 0x1ead0100, 0x3d5b0000, 0x0f570200, 0x3d5d0000, 0x1eaf0100, 0x3d5f0000, 0x01eb0500, 0x3d610000, 0x1eb10100, 0x3d630000, 0x0f590200, 0x3d650000, 0x1eb30100, 0x3d670000, 0x07ad0300, 0x3d690000, 0x1eb50100, 0x3d6b0000, 0x0f5b0200, 0x3d6d0000, 0x1eb70100, 0x3d6f0000, 0x03d70400, 0x3d710000, 0x1eb90100, 0x3d730000, 0x0f5d0200, 0x3d750000, 0x1ebb0100, 0x3d770000, 0x07af0300, 0x3d790000, 0x1ebd0100, 0x3d7b0000, 0x0f5f0200, 0x3d7d0000, 0x1ebf0100, 0x3d7f0000, 0x007b1600, 0x3d810000, 0x1ec10100, 0x3d830000, 0x0f610200, 0x3d850000, 0x1ec30100, 0x3d870000, 0x07b10300, 0x3d890000, 0x1ec50100, 0x3d8b0000, 0x0f630200, 0x3d8d0000, 0x1ec70100, 0x3d8f0000, 0x03d90400, 0x3d910000, 0x1ec90100, 0x3d930000, 0x0f650200, 0x3d950000, 0x1ecb0100, 0x3d970000, 0x07b30300, 0x3d990000, 0x1ecd0100, 0x3d9b0000, 0x0f670200, 0x3d9d0000, 0x1ecf0100, 0x3d9f0000, 0x01ed0500, 0x3da10000, 0x1ed10100, 0x3da30000, 0x0f690200, 0x3da50000, 0x1ed30100, 0x3da70000, 0x07b50300, 0x3da90000, 0x1ed50100, 0x3dab0000, 0x0f6b0200, 0x3dad0000, 0x1ed70100, 0x3daf0000, 0x03db0400, 0x3db10000, 0x1ed90100, 0x3db30000, 0x0f6d0200, 0x3db50000, 0x1edb0100, 0x3db70000, 0x07b70300, 0x3db90000, 0x1edd0100, 0x3dbb0000, 0x0f6f0200, 0x3dbd0000, 0x1edf0100, 0x3dbf0000, 0x00f70600, 0x3dc10000, 0x1ee10100, 0x3dc30000, 0x0f710200, 0x3dc50000, 0x1ee30100, 0x3dc70000, 0x07b90300, 0x3dc90000, 0x1ee50100, 0x3dcb0000, 0x0f730200, 0x3dcd0000, 0x1ee70100, 0x3dcf0000, 0x03dd0400, 0x3dd10000, 0x1ee90100, 0x3dd30000, 0x0f750200, 0x3dd50000, 0x1eeb0100, 0x3dd70000, 0x07bb0300, 0x3dd90000, 0x1eed0100, 0x3ddb0000, 0x0f770200, 0x3ddd0000, 0x1eef0100, 0x3ddf0000, 0x01ef0500, 0x3de10000, 0x1ef10100, 0x3de30000, 0x0f790200, 0x3de50000, 0x1ef30100, 0x3de70000, 0x07bd0300, 0x3de90000, 0x1ef50100, 0x3deb0000, 0x0f7b0200, 0x3ded0000, 0x1ef70100, 0x3def0000, 0x03df0400, 0x3df10000, 0x1ef90100, 0x3df30000, 0x0f7d0200, 0x3df50000, 0x1efb0100, 0x3df70000, 0x07bf0300, 0x3df90000, 0x1efd0100, 0x3dfb0000, 0x0f7f0200, 0x3dfd0000, 0x1eff0100, 0x3dff0000, + 0x001f3600, 0x3e010000, 0x1f010100, 0x3e030000, 0x0f810200, 0x3e050000, 0x1f030100, 0x3e070000, 0x07c10300, 0x3e090000, 0x1f050100, 0x3e0b0000, 0x0f830200, 0x3e0d0000, 0x1f070100, 0x3e0f0000, 0x03e10400, 0x3e110000, 0x1f090100, 0x3e130000, 0x0f850200, 0x3e150000, 0x1f0b0100, 0x3e170000, 0x07c30300, 0x3e190000, 0x1f0d0100, 0x3e1b0000, 0x0f870200, 0x3e1d0000, 0x1f0f0100, 0x3e1f0000, 0x01f10500, 0x3e210000, 0x1f110100, 0x3e230000, 0x0f890200, 0x3e250000, 0x1f130100, 0x3e270000, 0x07c50300, 0x3e290000, 0x1f150100, 0x3e2b0000, 0x0f8b0200, 0x3e2d0000, 0x1f170100, 0x3e2f0000, 0x03e30400, 0x3e310000, 0x1f190100, 0x3e330000, 0x0f8d0200, 0x3e350000, 0x1f1b0100, 0x3e370000, 0x07c70300, 0x3e390000, 0x1f1d0100, 0x3e3b0000, 0x0f8f0200, 0x3e3d0000, 0x1f1f0100, 0x3e3f0000, 0x00f90600, 0x3e410000, 0x1f210100, 0x3e430000, 0x0f910200, 0x3e450000, 0x1f230100, 0x3e470000, 0x07c90300, 0x3e490000, 0x1f250100, 0x3e4b0000, 0x0f930200, 0x3e4d0000, 0x1f270100, 0x3e4f0000, 0x03e50400, 0x3e510000, 0x1f290100, 0x3e530000, 0x0f950200, 0x3e550000, 0x1f2b0100, 0x3e570000, 0x07cb0300, 0x3e590000, 0x1f2d0100, 0x3e5b0000, 0x0f970200, 0x3e5d0000, 0x1f2f0100, 0x3e5f0000, 0x01f30500, 0x3e610000, 0x1f310100, 0x3e630000, 0x0f990200, 0x3e650000, 0x1f330100, 0x3e670000, 0x07cd0300, 0x3e690000, 0x1f350100, 0x3e6b0000, 0x0f9b0200, 0x3e6d0000, 0x1f370100, 0x3e6f0000, 0x03e70400, 0x3e710000, 0x1f390100, 0x3e730000, 0x0f9d0200, 0x3e750000, 0x1f3b0100, 0x3e770000, 0x07cf0300, 0x3e790000, 0x1f3d0100, 0x3e7b0000, 0x0f9f0200, 0x3e7d0000, 0x1f3f0100, 0x3e7f0000, 0x007d1600, 0x3e810000, 0x1f410100, 0x3e830000, 0x0fa10200, 0x3e850000, 0x1f430100, 0x3e870000, 0x07d10300, 0x3e890000, 0x1f450100, 0x3e8b0000, 0x0fa30200, 0x3e8d0000, 0x1f470100, 0x3e8f0000, 0x03e90400, 0x3e910000, 0x1f490100, 0x3e930000, 0x0fa50200, 0x3e950000, 0x1f4b0100, 0x3e970000, 0x07d30300, 0x3e990000, 0x1f4d0100, 0x3e9b0000, 0x0fa70200, 0x3e9d0000, 0x1f4f0100, 0x3e9f0000, 0x01f50500, 0x3ea10000, 0x1f510100, 0x3ea30000, 0x0fa90200, 0x3ea50000, 0x1f530100, 0x3ea70000, 0x07d50300, 0x3ea90000, 0x1f550100, 0x3eab0000, 0x0fab0200, 0x3ead0000, 0x1f570100, 0x3eaf0000, 0x03eb0400, 0x3eb10000, 0x1f590100, 0x3eb30000, 0x0fad0200, 0x3eb50000, 0x1f5b0100, 0x3eb70000, 0x07d70300, 0x3eb90000, 0x1f5d0100, 0x3ebb0000, 0x0faf0200, 0x3ebd0000, 0x1f5f0100, 0x3ebf0000, 0x00fb0600, 0x3ec10000, 0x1f610100, 0x3ec30000, 0x0fb10200, 0x3ec50000, 0x1f630100, 0x3ec70000, 0x07d90300, 0x3ec90000, 0x1f650100, 0x3ecb0000, 0x0fb30200, 0x3ecd0000, 0x1f670100, 0x3ecf0000, 0x03ed0400, 0x3ed10000, 0x1f690100, 0x3ed30000, 0x0fb50200, 0x3ed50000, 0x1f6b0100, 0x3ed70000, 0x07db0300, 0x3ed90000, 0x1f6d0100, 0x3edb0000, 0x0fb70200, 0x3edd0000, 0x1f6f0100, 0x3edf0000, 0x01f70500, 0x3ee10000, 0x1f710100, 0x3ee30000, 0x0fb90200, 0x3ee50000, 0x1f730100, 0x3ee70000, 0x07dd0300, 0x3ee90000, 0x1f750100, 0x3eeb0000, 0x0fbb0200, 0x3eed0000, 0x1f770100, 0x3eef0000, 0x03ef0400, 0x3ef10000, 0x1f790100, 0x3ef30000, 0x0fbd0200, 0x3ef50000, 0x1f7b0100, 0x3ef70000, 0x07df0300, 0x3ef90000, 0x1f7d0100, 0x3efb0000, 0x0fbf0200, 0x3efd0000, 0x1f7f0100, 0x3eff0000, + 0x003f2600, 0x3f010000, 0x1f810100, 0x3f030000, 0x0fc10200, 0x3f050000, 0x1f830100, 0x3f070000, 0x07e10300, 0x3f090000, 0x1f850100, 0x3f0b0000, 0x0fc30200, 0x3f0d0000, 0x1f870100, 0x3f0f0000, 0x03f10400, 0x3f110000, 0x1f890100, 0x3f130000, 0x0fc50200, 0x3f150000, 0x1f8b0100, 0x3f170000, 0x07e30300, 0x3f190000, 0x1f8d0100, 0x3f1b0000, 0x0fc70200, 0x3f1d0000, 0x1f8f0100, 0x3f1f0000, 0x01f90500, 0x3f210000, 0x1f910100, 0x3f230000, 0x0fc90200, 0x3f250000, 0x1f930100, 0x3f270000, 0x07e50300, 0x3f290000, 0x1f950100, 0x3f2b0000, 0x0fcb0200, 0x3f2d0000, 0x1f970100, 0x3f2f0000, 0x03f30400, 0x3f310000, 0x1f990100, 0x3f330000, 0x0fcd0200, 0x3f350000, 0x1f9b0100, 0x3f370000, 0x07e70300, 0x3f390000, 0x1f9d0100, 0x3f3b0000, 0x0fcf0200, 0x3f3d0000, 0x1f9f0100, 0x3f3f0000, 0x00fd0600, 0x3f410000, 0x1fa10100, 0x3f430000, 0x0fd10200, 0x3f450000, 0x1fa30100, 0x3f470000, 0x07e90300, 0x3f490000, 0x1fa50100, 0x3f4b0000, 0x0fd30200, 0x3f4d0000, 0x1fa70100, 0x3f4f0000, 0x03f50400, 0x3f510000, 0x1fa90100, 0x3f530000, 0x0fd50200, 0x3f550000, 0x1fab0100, 0x3f570000, 0x07eb0300, 0x3f590000, 0x1fad0100, 0x3f5b0000, 0x0fd70200, 0x3f5d0000, 0x1faf0100, 0x3f5f0000, 0x01fb0500, 0x3f610000, 0x1fb10100, 0x3f630000, 0x0fd90200, 0x3f650000, 0x1fb30100, 0x3f670000, 0x07ed0300, 0x3f690000, 0x1fb50100, 0x3f6b0000, 0x0fdb0200, 0x3f6d0000, 0x1fb70100, 0x3f6f0000, 0x03f70400, 0x3f710000, 0x1fb90100, 0x3f730000, 0x0fdd0200, 0x3f750000, 0x1fbb0100, 0x3f770000, 0x07ef0300, 0x3f790000, 0x1fbd0100, 0x3f7b0000, 0x0fdf0200, 0x3f7d0000, 0x1fbf0100, 0x3f7f0000, 0x007f1600, 0x3f810000, 0x1fc10100, 0x3f830000, 0x0fe10200, 0x3f850000, 0x1fc30100, 0x3f870000, 0x07f10300, 0x3f890000, 0x1fc50100, 0x3f8b0000, 0x0fe30200, 0x3f8d0000, 0x1fc70100, 0x3f8f0000, 0x03f90400, 0x3f910000, 0x1fc90100, 0x3f930000, 0x0fe50200, 0x3f950000, 0x1fcb0100, 0x3f970000, 0x07f30300, 0x3f990000, 0x1fcd0100, 0x3f9b0000, 0x0fe70200, 0x3f9d0000, 0x1fcf0100, 0x3f9f0000, 0x01fd0500, 0x3fa10000, 0x1fd10100, 0x3fa30000, 0x0fe90200, 0x3fa50000, 0x1fd30100, 0x3fa70000, 0x07f50300, 0x3fa90000, 0x1fd50100, 0x3fab0000, 0x0feb0200, 0x3fad0000, 0x1fd70100, 0x3faf0000, 0x03fb0400, 0x3fb10000, 0x1fd90100, 0x3fb30000, 0x0fed0200, 0x3fb50000, 0x1fdb0100, 0x3fb70000, 0x07f70300, 0x3fb90000, 0x1fdd0100, 0x3fbb0000, 0x0fef0200, 0x3fbd0000, 0x1fdf0100, 0x3fbf0000, 0x00ff0600, 0x3fc10000, 0x1fe10100, 0x3fc30000, 0x0ff10200, 0x3fc50000, 0x1fe30100, 0x3fc70000, 0x07f90300, 0x3fc90000, 0x1fe50100, 0x3fcb0000, 0x0ff30200, 0x3fcd0000, 0x1fe70100, 0x3fcf0000, 0x03fd0400, 0x3fd10000, 0x1fe90100, 0x3fd30000, 0x0ff50200, 0x3fd50000, 0x1feb0100, 0x3fd70000, 0x07fb0300, 0x3fd90000, 0x1fed0100, 0x3fdb0000, 0x0ff70200, 0x3fdd0000, 0x1fef0100, 0x3fdf0000, 0x01ff0500, 0x3fe10000, 0x1ff10100, 0x3fe30000, 0x0ff90200, 0x3fe50000, 0x1ff30100, 0x3fe70000, 0x07fd0300, 0x3fe90000, 0x1ff50100, 0x3feb0000, 0x0ffb0200, 0x3fed0000, 0x1ff70100, 0x3fef0000, 0x03ff0400, 0x3ff10000, 0x1ff90100, 0x3ff30000, 0x0ffd0200, 0x3ff50000, 0x1ffb0100, 0x3ff70000, 0x07ff0300, 0x3ff90000, 0x1ffd0100, 0x3ffb0000, 0x0fff0200, 0x3ffd0000, 0x1fff0100, 0x3fff0000, + 0x00018600, 0x40010000, 0x20010100, 0x40030000, 0x10010200, 0x40050000, 0x20030100, 0x40070000, 0x08010300, 0x40090000, 0x20050100, 0x400b0000, 0x10030200, 0x400d0000, 0x20070100, 0x400f0000, 0x04010400, 0x40110000, 0x20090100, 0x40130000, 0x10050200, 0x40150000, 0x200b0100, 0x40170000, 0x08030300, 0x40190000, 0x200d0100, 0x401b0000, 0x10070200, 0x401d0000, 0x200f0100, 0x401f0000, 0x02010500, 0x40210000, 0x20110100, 0x40230000, 0x10090200, 0x40250000, 0x20130100, 0x40270000, 0x08050300, 0x40290000, 0x20150100, 0x402b0000, 0x100b0200, 0x402d0000, 0x20170100, 0x402f0000, 0x04030400, 0x40310000, 0x20190100, 0x40330000, 0x100d0200, 0x40350000, 0x201b0100, 0x40370000, 0x08070300, 0x40390000, 0x201d0100, 0x403b0000, 0x100f0200, 0x403d0000, 0x201f0100, 0x403f0000, 0x01010600, 0x40410000, 0x20210100, 0x40430000, 0x10110200, 0x40450000, 0x20230100, 0x40470000, 0x08090300, 0x40490000, 0x20250100, 0x404b0000, 0x10130200, 0x404d0000, 0x20270100, 0x404f0000, 0x04050400, 0x40510000, 0x20290100, 0x40530000, 0x10150200, 0x40550000, 0x202b0100, 0x40570000, 0x080b0300, 0x40590000, 0x202d0100, 0x405b0000, 0x10170200, 0x405d0000, 0x202f0100, 0x405f0000, 0x02030500, 0x40610000, 0x20310100, 0x40630000, 0x10190200, 0x40650000, 0x20330100, 0x40670000, 0x080d0300, 0x40690000, 0x20350100, 0x406b0000, 0x101b0200, 0x406d0000, 0x20370100, 0x406f0000, 0x04070400, 0x40710000, 0x20390100, 0x40730000, 0x101d0200, 0x40750000, 0x203b0100, 0x40770000, 0x080f0300, 0x40790000, 0x203d0100, 0x407b0000, 0x101f0200, 0x407d0000, 0x203f0100, 0x407f0000, 0x00811600, 0x40810000, 0x20410100, 0x40830000, 0x10210200, 0x40850000, 0x20430100, 0x40870000, 0x08110300, 0x40890000, 0x20450100, 0x408b0000, 0x10230200, 0x408d0000, 0x20470100, 0x408f0000, 0x04090400, 0x40910000, 0x20490100, 0x40930000, 0x10250200, 0x40950000, 0x204b0100, 0x40970000, 0x08130300, 0x40990000, 0x204d0100, 0x409b0000, 0x10270200, 0x409d0000, 0x204f0100, 0x409f0000, 0x02050500, 0x40a10000, 0x20510100, 0x40a30000, 0x10290200, 0x40a50000, 0x20530100, 0x40a70000, 0x08150300, 0x40a90000, 0x20550100, 0x40ab0000, 0x102b0200, 0x40ad0000, 0x20570100, 0x40af0000, 0x040b0400, 0x40b10000, 0x20590100, 0x40b30000, 0x102d0200, 0x40b50000, 0x205b0100, 0x40b70000, 0x08170300, 0x40b90000, 0x205d0100, 0x40bb0000, 0x102f0200, 0x40bd0000, 0x205f0100, 0x40bf0000, 0x01030600, 0x40c10000, 0x20610100, 0x40c30000, 0x10310200, 0x40c50000, 0x20630100, 0x40c70000, 0x08190300, 0x40c90000, 0x20650100, 0x40cb0000, 0x10330200, 0x40cd0000, 0x20670100, 0x40cf0000, 0x040d0400, 0x40d10000, 0x20690100, 0x40d30000, 0x10350200, 0x40d50000, 0x206b0100, 0x40d70000, 0x081b0300, 0x40d90000, 0x206d0100, 0x40db0000, 0x10370200, 0x40dd0000, 0x206f0100, 0x40df0000, 0x02070500, 0x40e10000, 0x20710100, 0x40e30000, 0x10390200, 0x40e50000, 0x20730100, 0x40e70000, 0x081d0300, 0x40e90000, 0x20750100, 0x40eb0000, 0x103b0200, 0x40ed0000, 0x20770100, 0x40ef0000, 0x040f0400, 0x40f10000, 0x20790100, 0x40f30000, 0x103d0200, 0x40f50000, 0x207b0100, 0x40f70000, 0x081f0300, 0x40f90000, 0x207d0100, 0x40fb0000, 0x103f0200, 0x40fd0000, 0x207f0100, 0x40ff0000, + 0x00412600, 0x41010000, 0x20810100, 0x41030000, 0x10410200, 0x41050000, 0x20830100, 0x41070000, 0x08210300, 0x41090000, 0x20850100, 0x410b0000, 0x10430200, 0x410d0000, 0x20870100, 0x410f0000, 0x04110400, 0x41110000, 0x20890100, 0x41130000, 0x10450200, 0x41150000, 0x208b0100, 0x41170000, 0x08230300, 0x41190000, 0x208d0100, 0x411b0000, 0x10470200, 0x411d0000, 0x208f0100, 0x411f0000, 0x02090500, 0x41210000, 0x20910100, 0x41230000, 0x10490200, 0x41250000, 0x20930100, 0x41270000, 0x08250300, 0x41290000, 0x20950100, 0x412b0000, 0x104b0200, 0x412d0000, 0x20970100, 0x412f0000, 0x04130400, 0x41310000, 0x20990100, 0x41330000, 0x104d0200, 0x41350000, 0x209b0100, 0x41370000, 0x08270300, 0x41390000, 0x209d0100, 0x413b0000, 0x104f0200, 0x413d0000, 0x209f0100, 0x413f0000, 0x01050600, 0x41410000, 0x20a10100, 0x41430000, 0x10510200, 0x41450000, 0x20a30100, 0x41470000, 0x08290300, 0x41490000, 0x20a50100, 0x414b0000, 0x10530200, 0x414d0000, 0x20a70100, 0x414f0000, 0x04150400, 0x41510000, 0x20a90100, 0x41530000, 0x10550200, 0x41550000, 0x20ab0100, 0x41570000, 0x082b0300, 0x41590000, 0x20ad0100, 0x415b0000, 0x10570200, 0x415d0000, 0x20af0100, 0x415f0000, 0x020b0500, 0x41610000, 0x20b10100, 0x41630000, 0x10590200, 0x41650000, 0x20b30100, 0x41670000, 0x082d0300, 0x41690000, 0x20b50100, 0x416b0000, 0x105b0200, 0x416d0000, 0x20b70100, 0x416f0000, 0x04170400, 0x41710000, 0x20b90100, 0x41730000, 0x105d0200, 0x41750000, 0x20bb0100, 0x41770000, 0x082f0300, 0x41790000, 0x20bd0100, 0x417b0000, 0x105f0200, 0x417d0000, 0x20bf0100, 0x417f0000, 0x00831600, 0x41810000, 0x20c10100, 0x41830000, 0x10610200, 0x41850000, 0x20c30100, 0x41870000, 0x08310300, 0x41890000, 0x20c50100, 0x418b0000, 0x10630200, 0x418d0000, 0x20c70100, 0x418f0000, 0x04190400, 0x41910000, 0x20c90100, 0x41930000, 0x10650200, 0x41950000, 0x20cb0100, 0x41970000, 0x08330300, 0x41990000, 0x20cd0100, 0x419b0000, 0x10670200, 0x419d0000, 0x20cf0100, 0x419f0000, 0x020d0500, 0x41a10000, 0x20d10100, 0x41a30000, 0x10690200, 0x41a50000, 0x20d30100, 0x41a70000, 0x08350300, 0x41a90000, 0x20d50100, 0x41ab0000, 0x106b0200, 0x41ad0000, 0x20d70100, 0x41af0000, 0x041b0400, 0x41b10000, 0x20d90100, 0x41b30000, 0x106d0200, 0x41b50000, 0x20db0100, 0x41b70000, 0x08370300, 0x41b90000, 0x20dd0100, 0x41bb0000, 0x106f0200, 0x41bd0000, 0x20df0100, 0x41bf0000, 0x01070600, 0x41c10000, 0x20e10100, 0x41c30000, 0x10710200, 0x41c50000, 0x20e30100, 0x41c70000, 0x08390300, 0x41c90000, 0x20e50100, 0x41cb0000, 0x10730200, 0x41cd0000, 0x20e70100, 0x41cf0000, 0x041d0400, 0x41d10000, 0x20e90100, 0x41d30000, 0x10750200, 0x41d50000, 0x20eb0100, 0x41d70000, 0x083b0300, 0x41d90000, 0x20ed0100, 0x41db0000, 0x10770200, 0x41dd0000, 0x20ef0100, 0x41df0000, 0x020f0500, 0x41e10000, 0x20f10100, 0x41e30000, 0x10790200, 0x41e50000, 0x20f30100, 0x41e70000, 0x083d0300, 0x41e90000, 0x20f50100, 0x41eb0000, 0x107b0200, 0x41ed0000, 0x20f70100, 0x41ef0000, 0x041f0400, 0x41f10000, 0x20f90100, 0x41f30000, 0x107d0200, 0x41f50000, 0x20fb0100, 0x41f70000, 0x083f0300, 0x41f90000, 0x20fd0100, 0x41fb0000, 0x107f0200, 0x41fd0000, 0x20ff0100, 0x41ff0000, + 0x00213600, 0x42010000, 0x21010100, 0x42030000, 0x10810200, 0x42050000, 0x21030100, 0x42070000, 0x08410300, 0x42090000, 0x21050100, 0x420b0000, 0x10830200, 0x420d0000, 0x21070100, 0x420f0000, 0x04210400, 0x42110000, 0x21090100, 0x42130000, 0x10850200, 0x42150000, 0x210b0100, 0x42170000, 0x08430300, 0x42190000, 0x210d0100, 0x421b0000, 0x10870200, 0x421d0000, 0x210f0100, 0x421f0000, 0x02110500, 0x42210000, 0x21110100, 0x42230000, 0x10890200, 0x42250000, 0x21130100, 0x42270000, 0x08450300, 0x42290000, 0x21150100, 0x422b0000, 0x108b0200, 0x422d0000, 0x21170100, 0x422f0000, 0x04230400, 0x42310000, 0x21190100, 0x42330000, 0x108d0200, 0x42350000, 0x211b0100, 0x42370000, 0x08470300, 0x42390000, 0x211d0100, 0x423b0000, 0x108f0200, 0x423d0000, 0x211f0100, 0x423f0000, 0x01090600, 0x42410000, 0x21210100, 0x42430000, 0x10910200, 0x42450000, 0x21230100, 0x42470000, 0x08490300, 0x42490000, 0x21250100, 0x424b0000, 0x10930200, 0x424d0000, 0x21270100, 0x424f0000, 0x04250400, 0x42510000, 0x21290100, 0x42530000, 0x10950200, 0x42550000, 0x212b0100, 0x42570000, 0x084b0300, 0x42590000, 0x212d0100, 0x425b0000, 0x10970200, 0x425d0000, 0x212f0100, 0x425f0000, 0x02130500, 0x42610000, 0x21310100, 0x42630000, 0x10990200, 0x42650000, 0x21330100, 0x42670000, 0x084d0300, 0x42690000, 0x21350100, 0x426b0000, 0x109b0200, 0x426d0000, 0x21370100, 0x426f0000, 0x04270400, 0x42710000, 0x21390100, 0x42730000, 0x109d0200, 0x42750000, 0x213b0100, 0x42770000, 0x084f0300, 0x42790000, 0x213d0100, 0x427b0000, 0x109f0200, 0x427d0000, 0x213f0100, 0x427f0000, 0x00851600, 0x42810000, 0x21410100, 0x42830000, 0x10a10200, 0x42850000, 0x21430100, 0x42870000, 0x08510300, 0x42890000, 0x21450100, 0x428b0000, 0x10a30200, 0x428d0000, 0x21470100, 0x428f0000, 0x04290400, 0x42910000, 0x21490100, 0x42930000, 0x10a50200, 0x42950000, 0x214b0100, 0x42970000, 0x08530300, 0x42990000, 0x214d0100, 0x429b0000, 0x10a70200, 0x429d0000, 0x214f0100, 0x429f0000, 0x02150500, 0x42a10000, 0x21510100, 0x42a30000, 0x10a90200, 0x42a50000, 0x21530100, 0x42a70000, 0x08550300, 0x42a90000, 0x21550100, 0x42ab0000, 0x10ab0200, 0x42ad0000, 0x21570100, 0x42af0000, 0x042b0400, 0x42b10000, 0x21590100, 0x42b30000, 0x10ad0200, 0x42b50000, 0x215b0100, 0x42b70000, 0x08570300, 0x42b90000, 0x215d0100, 0x42bb0000, 0x10af0200, 0x42bd0000, 0x215f0100, 0x42bf0000, 0x010b0600, 0x42c10000, 0x21610100, 0x42c30000, 0x10b10200, 0x42c50000, 0x21630100, 0x42c70000, 0x08590300, 0x42c90000, 0x21650100, 0x42cb0000, 0x10b30200, 0x42cd0000, 0x21670100, 0x42cf0000, 0x042d0400, 0x42d10000, 0x21690100, 0x42d30000, 0x10b50200, 0x42d50000, 0x216b0100, 0x42d70000, 0x085b0300, 0x42d90000, 0x216d0100, 0x42db0000, 0x10b70200, 0x42dd0000, 0x216f0100, 0x42df0000, 0x02170500, 0x42e10000, 0x21710100, 0x42e30000, 0x10b90200, 0x42e50000, 0x21730100, 0x42e70000, 0x085d0300, 0x42e90000, 0x21750100, 0x42eb0000, 0x10bb0200, 0x42ed0000, 0x21770100, 0x42ef0000, 0x042f0400, 0x42f10000, 0x21790100, 0x42f30000, 0x10bd0200, 0x42f50000, 0x217b0100, 0x42f70000, 0x085f0300, 0x42f90000, 0x217d0100, 0x42fb0000, 0x10bf0200, 0x42fd0000, 0x217f0100, 0x42ff0000, + 0x00432600, 0x43010000, 0x21810100, 0x43030000, 0x10c10200, 0x43050000, 0x21830100, 0x43070000, 0x08610300, 0x43090000, 0x21850100, 0x430b0000, 0x10c30200, 0x430d0000, 0x21870100, 0x430f0000, 0x04310400, 0x43110000, 0x21890100, 0x43130000, 0x10c50200, 0x43150000, 0x218b0100, 0x43170000, 0x08630300, 0x43190000, 0x218d0100, 0x431b0000, 0x10c70200, 0x431d0000, 0x218f0100, 0x431f0000, 0x02190500, 0x43210000, 0x21910100, 0x43230000, 0x10c90200, 0x43250000, 0x21930100, 0x43270000, 0x08650300, 0x43290000, 0x21950100, 0x432b0000, 0x10cb0200, 0x432d0000, 0x21970100, 0x432f0000, 0x04330400, 0x43310000, 0x21990100, 0x43330000, 0x10cd0200, 0x43350000, 0x219b0100, 0x43370000, 0x08670300, 0x43390000, 0x219d0100, 0x433b0000, 0x10cf0200, 0x433d0000, 0x219f0100, 0x433f0000, 0x010d0600, 0x43410000, 0x21a10100, 0x43430000, 0x10d10200, 0x43450000, 0x21a30100, 0x43470000, 0x08690300, 0x43490000, 0x21a50100, 0x434b0000, 0x10d30200, 0x434d0000, 0x21a70100, 0x434f0000, 0x04350400, 0x43510000, 0x21a90100, 0x43530000, 0x10d50200, 0x43550000, 0x21ab0100, 0x43570000, 0x086b0300, 0x43590000, 0x21ad0100, 0x435b0000, 0x10d70200, 0x435d0000, 0x21af0100, 0x435f0000, 0x021b0500, 0x43610000, 0x21b10100, 0x43630000, 0x10d90200, 0x43650000, 0x21b30100, 0x43670000, 0x086d0300, 0x43690000, 0x21b50100, 0x436b0000, 0x10db0200, 0x436d0000, 0x21b70100, 0x436f0000, 0x04370400, 0x43710000, 0x21b90100, 0x43730000, 0x10dd0200, 0x43750000, 0x21bb0100, 0x43770000, 0x086f0300, 0x43790000, 0x21bd0100, 0x437b0000, 0x10df0200, 0x437d0000, 0x21bf0100, 0x437f0000, 0x00871600, 0x43810000, 0x21c10100, 0x43830000, 0x10e10200, 0x43850000, 0x21c30100, 0x43870000, 0x08710300, 0x43890000, 0x21c50100, 0x438b0000, 0x10e30200, 0x438d0000, 0x21c70100, 0x438f0000, 0x04390400, 0x43910000, 0x21c90100, 0x43930000, 0x10e50200, 0x43950000, 0x21cb0100, 0x43970000, 0x08730300, 0x43990000, 0x21cd0100, 0x439b0000, 0x10e70200, 0x439d0000, 0x21cf0100, 0x439f0000, 0x021d0500, 0x43a10000, 0x21d10100, 0x43a30000, 0x10e90200, 0x43a50000, 0x21d30100, 0x43a70000, 0x08750300, 0x43a90000, 0x21d50100, 0x43ab0000, 0x10eb0200, 0x43ad0000, 0x21d70100, 0x43af0000, 0x043b0400, 0x43b10000, 0x21d90100, 0x43b30000, 0x10ed0200, 0x43b50000, 0x21db0100, 0x43b70000, 0x08770300, 0x43b90000, 0x21dd0100, 0x43bb0000, 0x10ef0200, 0x43bd0000, 0x21df0100, 0x43bf0000, 0x010f0600, 0x43c10000, 0x21e10100, 0x43c30000, 0x10f10200, 0x43c50000, 0x21e30100, 0x43c70000, 0x08790300, 0x43c90000, 0x21e50100, 0x43cb0000, 0x10f30200, 0x43cd0000, 0x21e70100, 0x43cf0000, 0x043d0400, 0x43d10000, 0x21e90100, 0x43d30000, 0x10f50200, 0x43d50000, 0x21eb0100, 0x43d70000, 0x087b0300, 0x43d90000, 0x21ed0100, 0x43db0000, 0x10f70200, 0x43dd0000, 0x21ef0100, 0x43df0000, 0x021f0500, 0x43e10000, 0x21f10100, 0x43e30000, 0x10f90200, 0x43e50000, 0x21f30100, 0x43e70000, 0x087d0300, 0x43e90000, 0x21f50100, 0x43eb0000, 0x10fb0200, 0x43ed0000, 0x21f70100, 0x43ef0000, 0x043f0400, 0x43f10000, 0x21f90100, 0x43f30000, 0x10fd0200, 0x43f50000, 0x21fb0100, 0x43f70000, 0x087f0300, 0x43f90000, 0x21fd0100, 0x43fb0000, 0x10ff0200, 0x43fd0000, 0x21ff0100, 0x43ff0000, + 0x00114600, 0x44010000, 0x22010100, 0x44030000, 0x11010200, 0x44050000, 0x22030100, 0x44070000, 0x08810300, 0x44090000, 0x22050100, 0x440b0000, 0x11030200, 0x440d0000, 0x22070100, 0x440f0000, 0x04410400, 0x44110000, 0x22090100, 0x44130000, 0x11050200, 0x44150000, 0x220b0100, 0x44170000, 0x08830300, 0x44190000, 0x220d0100, 0x441b0000, 0x11070200, 0x441d0000, 0x220f0100, 0x441f0000, 0x02210500, 0x44210000, 0x22110100, 0x44230000, 0x11090200, 0x44250000, 0x22130100, 0x44270000, 0x08850300, 0x44290000, 0x22150100, 0x442b0000, 0x110b0200, 0x442d0000, 0x22170100, 0x442f0000, 0x04430400, 0x44310000, 0x22190100, 0x44330000, 0x110d0200, 0x44350000, 0x221b0100, 0x44370000, 0x08870300, 0x44390000, 0x221d0100, 0x443b0000, 0x110f0200, 0x443d0000, 0x221f0100, 0x443f0000, 0x01110600, 0x44410000, 0x22210100, 0x44430000, 0x11110200, 0x44450000, 0x22230100, 0x44470000, 0x08890300, 0x44490000, 0x22250100, 0x444b0000, 0x11130200, 0x444d0000, 0x22270100, 0x444f0000, 0x04450400, 0x44510000, 0x22290100, 0x44530000, 0x11150200, 0x44550000, 0x222b0100, 0x44570000, 0x088b0300, 0x44590000, 0x222d0100, 0x445b0000, 0x11170200, 0x445d0000, 0x222f0100, 0x445f0000, 0x02230500, 0x44610000, 0x22310100, 0x44630000, 0x11190200, 0x44650000, 0x22330100, 0x44670000, 0x088d0300, 0x44690000, 0x22350100, 0x446b0000, 0x111b0200, 0x446d0000, 0x22370100, 0x446f0000, 0x04470400, 0x44710000, 0x22390100, 0x44730000, 0x111d0200, 0x44750000, 0x223b0100, 0x44770000, 0x088f0300, 0x44790000, 0x223d0100, 0x447b0000, 0x111f0200, 0x447d0000, 0x223f0100, 0x447f0000, 0x00891600, 0x44810000, 0x22410100, 0x44830000, 0x11210200, 0x44850000, 0x22430100, 0x44870000, 0x08910300, 0x44890000, 0x22450100, 0x448b0000, 0x11230200, 0x448d0000, 0x22470100, 0x448f0000, 0x04490400, 0x44910000, 0x22490100, 0x44930000, 0x11250200, 0x44950000, 0x224b0100, 0x44970000, 0x08930300, 0x44990000, 0x224d0100, 0x449b0000, 0x11270200, 0x449d0000, 0x224f0100, 0x449f0000, 0x02250500, 0x44a10000, 0x22510100, 0x44a30000, 0x11290200, 0x44a50000, 0x22530100, 0x44a70000, 0x08950300, 0x44a90000, 0x22550100, 0x44ab0000, 0x112b0200, 0x44ad0000, 0x22570100, 0x44af0000, 0x044b0400, 0x44b10000, 0x22590100, 0x44b30000, 0x112d0200, 0x44b50000, 0x225b0100, 0x44b70000, 0x08970300, 0x44b90000, 0x225d0100, 0x44bb0000, 0x112f0200, 0x44bd0000, 0x225f0100, 0x44bf0000, 0x01130600, 0x44c10000, 0x22610100, 0x44c30000, 0x11310200, 0x44c50000, 0x22630100, 0x44c70000, 0x08990300, 0x44c90000, 0x22650100, 0x44cb0000, 0x11330200, 0x44cd0000, 0x22670100, 0x44cf0000, 0x044d0400, 0x44d10000, 0x22690100, 0x44d30000, 0x11350200, 0x44d50000, 0x226b0100, 0x44d70000, 0x089b0300, 0x44d90000, 0x226d0100, 0x44db0000, 0x11370200, 0x44dd0000, 0x226f0100, 0x44df0000, 0x02270500, 0x44e10000, 0x22710100, 0x44e30000, 0x11390200, 0x44e50000, 0x22730100, 0x44e70000, 0x089d0300, 0x44e90000, 0x22750100, 0x44eb0000, 0x113b0200, 0x44ed0000, 0x22770100, 0x44ef0000, 0x044f0400, 0x44f10000, 0x22790100, 0x44f30000, 0x113d0200, 0x44f50000, 0x227b0100, 0x44f70000, 0x089f0300, 0x44f90000, 0x227d0100, 0x44fb0000, 0x113f0200, 0x44fd0000, 0x227f0100, 0x44ff0000, + 0x00452600, 0x45010000, 0x22810100, 0x45030000, 0x11410200, 0x45050000, 0x22830100, 0x45070000, 0x08a10300, 0x45090000, 0x22850100, 0x450b0000, 0x11430200, 0x450d0000, 0x22870100, 0x450f0000, 0x04510400, 0x45110000, 0x22890100, 0x45130000, 0x11450200, 0x45150000, 0x228b0100, 0x45170000, 0x08a30300, 0x45190000, 0x228d0100, 0x451b0000, 0x11470200, 0x451d0000, 0x228f0100, 0x451f0000, 0x02290500, 0x45210000, 0x22910100, 0x45230000, 0x11490200, 0x45250000, 0x22930100, 0x45270000, 0x08a50300, 0x45290000, 0x22950100, 0x452b0000, 0x114b0200, 0x452d0000, 0x22970100, 0x452f0000, 0x04530400, 0x45310000, 0x22990100, 0x45330000, 0x114d0200, 0x45350000, 0x229b0100, 0x45370000, 0x08a70300, 0x45390000, 0x229d0100, 0x453b0000, 0x114f0200, 0x453d0000, 0x229f0100, 0x453f0000, 0x01150600, 0x45410000, 0x22a10100, 0x45430000, 0x11510200, 0x45450000, 0x22a30100, 0x45470000, 0x08a90300, 0x45490000, 0x22a50100, 0x454b0000, 0x11530200, 0x454d0000, 0x22a70100, 0x454f0000, 0x04550400, 0x45510000, 0x22a90100, 0x45530000, 0x11550200, 0x45550000, 0x22ab0100, 0x45570000, 0x08ab0300, 0x45590000, 0x22ad0100, 0x455b0000, 0x11570200, 0x455d0000, 0x22af0100, 0x455f0000, 0x022b0500, 0x45610000, 0x22b10100, 0x45630000, 0x11590200, 0x45650000, 0x22b30100, 0x45670000, 0x08ad0300, 0x45690000, 0x22b50100, 0x456b0000, 0x115b0200, 0x456d0000, 0x22b70100, 0x456f0000, 0x04570400, 0x45710000, 0x22b90100, 0x45730000, 0x115d0200, 0x45750000, 0x22bb0100, 0x45770000, 0x08af0300, 0x45790000, 0x22bd0100, 0x457b0000, 0x115f0200, 0x457d0000, 0x22bf0100, 0x457f0000, 0x008b1600, 0x45810000, 0x22c10100, 0x45830000, 0x11610200, 0x45850000, 0x22c30100, 0x45870000, 0x08b10300, 0x45890000, 0x22c50100, 0x458b0000, 0x11630200, 0x458d0000, 0x22c70100, 0x458f0000, 0x04590400, 0x45910000, 0x22c90100, 0x45930000, 0x11650200, 0x45950000, 0x22cb0100, 0x45970000, 0x08b30300, 0x45990000, 0x22cd0100, 0x459b0000, 0x11670200, 0x459d0000, 0x22cf0100, 0x459f0000, 0x022d0500, 0x45a10000, 0x22d10100, 0x45a30000, 0x11690200, 0x45a50000, 0x22d30100, 0x45a70000, 0x08b50300, 0x45a90000, 0x22d50100, 0x45ab0000, 0x116b0200, 0x45ad0000, 0x22d70100, 0x45af0000, 0x045b0400, 0x45b10000, 0x22d90100, 0x45b30000, 0x116d0200, 0x45b50000, 0x22db0100, 0x45b70000, 0x08b70300, 0x45b90000, 0x22dd0100, 0x45bb0000, 0x116f0200, 0x45bd0000, 0x22df0100, 0x45bf0000, 0x01170600, 0x45c10000, 0x22e10100, 0x45c30000, 0x11710200, 0x45c50000, 0x22e30100, 0x45c70000, 0x08b90300, 0x45c90000, 0x22e50100, 0x45cb0000, 0x11730200, 0x45cd0000, 0x22e70100, 0x45cf0000, 0x045d0400, 0x45d10000, 0x22e90100, 0x45d30000, 0x11750200, 0x45d50000, 0x22eb0100, 0x45d70000, 0x08bb0300, 0x45d90000, 0x22ed0100, 0x45db0000, 0x11770200, 0x45dd0000, 0x22ef0100, 0x45df0000, 0x022f0500, 0x45e10000, 0x22f10100, 0x45e30000, 0x11790200, 0x45e50000, 0x22f30100, 0x45e70000, 0x08bd0300, 0x45e90000, 0x22f50100, 0x45eb0000, 0x117b0200, 0x45ed0000, 0x22f70100, 0x45ef0000, 0x045f0400, 0x45f10000, 0x22f90100, 0x45f30000, 0x117d0200, 0x45f50000, 0x22fb0100, 0x45f70000, 0x08bf0300, 0x45f90000, 0x22fd0100, 0x45fb0000, 0x117f0200, 0x45fd0000, 0x22ff0100, 0x45ff0000, + 0x00233600, 0x46010000, 0x23010100, 0x46030000, 0x11810200, 0x46050000, 0x23030100, 0x46070000, 0x08c10300, 0x46090000, 0x23050100, 0x460b0000, 0x11830200, 0x460d0000, 0x23070100, 0x460f0000, 0x04610400, 0x46110000, 0x23090100, 0x46130000, 0x11850200, 0x46150000, 0x230b0100, 0x46170000, 0x08c30300, 0x46190000, 0x230d0100, 0x461b0000, 0x11870200, 0x461d0000, 0x230f0100, 0x461f0000, 0x02310500, 0x46210000, 0x23110100, 0x46230000, 0x11890200, 0x46250000, 0x23130100, 0x46270000, 0x08c50300, 0x46290000, 0x23150100, 0x462b0000, 0x118b0200, 0x462d0000, 0x23170100, 0x462f0000, 0x04630400, 0x46310000, 0x23190100, 0x46330000, 0x118d0200, 0x46350000, 0x231b0100, 0x46370000, 0x08c70300, 0x46390000, 0x231d0100, 0x463b0000, 0x118f0200, 0x463d0000, 0x231f0100, 0x463f0000, 0x01190600, 0x46410000, 0x23210100, 0x46430000, 0x11910200, 0x46450000, 0x23230100, 0x46470000, 0x08c90300, 0x46490000, 0x23250100, 0x464b0000, 0x11930200, 0x464d0000, 0x23270100, 0x464f0000, 0x04650400, 0x46510000, 0x23290100, 0x46530000, 0x11950200, 0x46550000, 0x232b0100, 0x46570000, 0x08cb0300, 0x46590000, 0x232d0100, 0x465b0000, 0x11970200, 0x465d0000, 0x232f0100, 0x465f0000, 0x02330500, 0x46610000, 0x23310100, 0x46630000, 0x11990200, 0x46650000, 0x23330100, 0x46670000, 0x08cd0300, 0x46690000, 0x23350100, 0x466b0000, 0x119b0200, 0x466d0000, 0x23370100, 0x466f0000, 0x04670400, 0x46710000, 0x23390100, 0x46730000, 0x119d0200, 0x46750000, 0x233b0100, 0x46770000, 0x08cf0300, 0x46790000, 0x233d0100, 0x467b0000, 0x119f0200, 0x467d0000, 0x233f0100, 0x467f0000, 0x008d1600, 0x46810000, 0x23410100, 0x46830000, 0x11a10200, 0x46850000, 0x23430100, 0x46870000, 0x08d10300, 0x46890000, 0x23450100, 0x468b0000, 0x11a30200, 0x468d0000, 0x23470100, 0x468f0000, 0x04690400, 0x46910000, 0x23490100, 0x46930000, 0x11a50200, 0x46950000, 0x234b0100, 0x46970000, 0x08d30300, 0x46990000, 0x234d0100, 0x469b0000, 0x11a70200, 0x469d0000, 0x234f0100, 0x469f0000, 0x02350500, 0x46a10000, 0x23510100, 0x46a30000, 0x11a90200, 0x46a50000, 0x23530100, 0x46a70000, 0x08d50300, 0x46a90000, 0x23550100, 0x46ab0000, 0x11ab0200, 0x46ad0000, 0x23570100, 0x46af0000, 0x046b0400, 0x46b10000, 0x23590100, 0x46b30000, 0x11ad0200, 0x46b50000, 0x235b0100, 0x46b70000, 0x08d70300, 0x46b90000, 0x235d0100, 0x46bb0000, 0x11af0200, 0x46bd0000, 0x235f0100, 0x46bf0000, 0x011b0600, 0x46c10000, 0x23610100, 0x46c30000, 0x11b10200, 0x46c50000, 0x23630100, 0x46c70000, 0x08d90300, 0x46c90000, 0x23650100, 0x46cb0000, 0x11b30200, 0x46cd0000, 0x23670100, 0x46cf0000, 0x046d0400, 0x46d10000, 0x23690100, 0x46d30000, 0x11b50200, 0x46d50000, 0x236b0100, 0x46d70000, 0x08db0300, 0x46d90000, 0x236d0100, 0x46db0000, 0x11b70200, 0x46dd0000, 0x236f0100, 0x46df0000, 0x02370500, 0x46e10000, 0x23710100, 0x46e30000, 0x11b90200, 0x46e50000, 0x23730100, 0x46e70000, 0x08dd0300, 0x46e90000, 0x23750100, 0x46eb0000, 0x11bb0200, 0x46ed0000, 0x23770100, 0x46ef0000, 0x046f0400, 0x46f10000, 0x23790100, 0x46f30000, 0x11bd0200, 0x46f50000, 0x237b0100, 0x46f70000, 0x08df0300, 0x46f90000, 0x237d0100, 0x46fb0000, 0x11bf0200, 0x46fd0000, 0x237f0100, 0x46ff0000, + 0x00472600, 0x47010000, 0x23810100, 0x47030000, 0x11c10200, 0x47050000, 0x23830100, 0x47070000, 0x08e10300, 0x47090000, 0x23850100, 0x470b0000, 0x11c30200, 0x470d0000, 0x23870100, 0x470f0000, 0x04710400, 0x47110000, 0x23890100, 0x47130000, 0x11c50200, 0x47150000, 0x238b0100, 0x47170000, 0x08e30300, 0x47190000, 0x238d0100, 0x471b0000, 0x11c70200, 0x471d0000, 0x238f0100, 0x471f0000, 0x02390500, 0x47210000, 0x23910100, 0x47230000, 0x11c90200, 0x47250000, 0x23930100, 0x47270000, 0x08e50300, 0x47290000, 0x23950100, 0x472b0000, 0x11cb0200, 0x472d0000, 0x23970100, 0x472f0000, 0x04730400, 0x47310000, 0x23990100, 0x47330000, 0x11cd0200, 0x47350000, 0x239b0100, 0x47370000, 0x08e70300, 0x47390000, 0x239d0100, 0x473b0000, 0x11cf0200, 0x473d0000, 0x239f0100, 0x473f0000, 0x011d0600, 0x47410000, 0x23a10100, 0x47430000, 0x11d10200, 0x47450000, 0x23a30100, 0x47470000, 0x08e90300, 0x47490000, 0x23a50100, 0x474b0000, 0x11d30200, 0x474d0000, 0x23a70100, 0x474f0000, 0x04750400, 0x47510000, 0x23a90100, 0x47530000, 0x11d50200, 0x47550000, 0x23ab0100, 0x47570000, 0x08eb0300, 0x47590000, 0x23ad0100, 0x475b0000, 0x11d70200, 0x475d0000, 0x23af0100, 0x475f0000, 0x023b0500, 0x47610000, 0x23b10100, 0x47630000, 0x11d90200, 0x47650000, 0x23b30100, 0x47670000, 0x08ed0300, 0x47690000, 0x23b50100, 0x476b0000, 0x11db0200, 0x476d0000, 0x23b70100, 0x476f0000, 0x04770400, 0x47710000, 0x23b90100, 0x47730000, 0x11dd0200, 0x47750000, 0x23bb0100, 0x47770000, 0x08ef0300, 0x47790000, 0x23bd0100, 0x477b0000, 0x11df0200, 0x477d0000, 0x23bf0100, 0x477f0000, 0x008f1600, 0x47810000, 0x23c10100, 0x47830000, 0x11e10200, 0x47850000, 0x23c30100, 0x47870000, 0x08f10300, 0x47890000, 0x23c50100, 0x478b0000, 0x11e30200, 0x478d0000, 0x23c70100, 0x478f0000, 0x04790400, 0x47910000, 0x23c90100, 0x47930000, 0x11e50200, 0x47950000, 0x23cb0100, 0x47970000, 0x08f30300, 0x47990000, 0x23cd0100, 0x479b0000, 0x11e70200, 0x479d0000, 0x23cf0100, 0x479f0000, 0x023d0500, 0x47a10000, 0x23d10100, 0x47a30000, 0x11e90200, 0x47a50000, 0x23d30100, 0x47a70000, 0x08f50300, 0x47a90000, 0x23d50100, 0x47ab0000, 0x11eb0200, 0x47ad0000, 0x23d70100, 0x47af0000, 0x047b0400, 0x47b10000, 0x23d90100, 0x47b30000, 0x11ed0200, 0x47b50000, 0x23db0100, 0x47b70000, 0x08f70300, 0x47b90000, 0x23dd0100, 0x47bb0000, 0x11ef0200, 0x47bd0000, 0x23df0100, 0x47bf0000, 0x011f0600, 0x47c10000, 0x23e10100, 0x47c30000, 0x11f10200, 0x47c50000, 0x23e30100, 0x47c70000, 0x08f90300, 0x47c90000, 0x23e50100, 0x47cb0000, 0x11f30200, 0x47cd0000, 0x23e70100, 0x47cf0000, 0x047d0400, 0x47d10000, 0x23e90100, 0x47d30000, 0x11f50200, 0x47d50000, 0x23eb0100, 0x47d70000, 0x08fb0300, 0x47d90000, 0x23ed0100, 0x47db0000, 0x11f70200, 0x47dd0000, 0x23ef0100, 0x47df0000, 0x023f0500, 0x47e10000, 0x23f10100, 0x47e30000, 0x11f90200, 0x47e50000, 0x23f30100, 0x47e70000, 0x08fd0300, 0x47e90000, 0x23f50100, 0x47eb0000, 0x11fb0200, 0x47ed0000, 0x23f70100, 0x47ef0000, 0x047f0400, 0x47f10000, 0x23f90100, 0x47f30000, 0x11fd0200, 0x47f50000, 0x23fb0100, 0x47f70000, 0x08ff0300, 0x47f90000, 0x23fd0100, 0x47fb0000, 0x11ff0200, 0x47fd0000, 0x23ff0100, 0x47ff0000, + 0x00095600, 0x48010000, 0x24010100, 0x48030000, 0x12010200, 0x48050000, 0x24030100, 0x48070000, 0x09010300, 0x48090000, 0x24050100, 0x480b0000, 0x12030200, 0x480d0000, 0x24070100, 0x480f0000, 0x04810400, 0x48110000, 0x24090100, 0x48130000, 0x12050200, 0x48150000, 0x240b0100, 0x48170000, 0x09030300, 0x48190000, 0x240d0100, 0x481b0000, 0x12070200, 0x481d0000, 0x240f0100, 0x481f0000, 0x02410500, 0x48210000, 0x24110100, 0x48230000, 0x12090200, 0x48250000, 0x24130100, 0x48270000, 0x09050300, 0x48290000, 0x24150100, 0x482b0000, 0x120b0200, 0x482d0000, 0x24170100, 0x482f0000, 0x04830400, 0x48310000, 0x24190100, 0x48330000, 0x120d0200, 0x48350000, 0x241b0100, 0x48370000, 0x09070300, 0x48390000, 0x241d0100, 0x483b0000, 0x120f0200, 0x483d0000, 0x241f0100, 0x483f0000, 0x01210600, 0x48410000, 0x24210100, 0x48430000, 0x12110200, 0x48450000, 0x24230100, 0x48470000, 0x09090300, 0x48490000, 0x24250100, 0x484b0000, 0x12130200, 0x484d0000, 0x24270100, 0x484f0000, 0x04850400, 0x48510000, 0x24290100, 0x48530000, 0x12150200, 0x48550000, 0x242b0100, 0x48570000, 0x090b0300, 0x48590000, 0x242d0100, 0x485b0000, 0x12170200, 0x485d0000, 0x242f0100, 0x485f0000, 0x02430500, 0x48610000, 0x24310100, 0x48630000, 0x12190200, 0x48650000, 0x24330100, 0x48670000, 0x090d0300, 0x48690000, 0x24350100, 0x486b0000, 0x121b0200, 0x486d0000, 0x24370100, 0x486f0000, 0x04870400, 0x48710000, 0x24390100, 0x48730000, 0x121d0200, 0x48750000, 0x243b0100, 0x48770000, 0x090f0300, 0x48790000, 0x243d0100, 0x487b0000, 0x121f0200, 0x487d0000, 0x243f0100, 0x487f0000, 0x00911600, 0x48810000, 0x24410100, 0x48830000, 0x12210200, 0x48850000, 0x24430100, 0x48870000, 0x09110300, 0x48890000, 0x24450100, 0x488b0000, 0x12230200, 0x488d0000, 0x24470100, 0x488f0000, 0x04890400, 0x48910000, 0x24490100, 0x48930000, 0x12250200, 0x48950000, 0x244b0100, 0x48970000, 0x09130300, 0x48990000, 0x244d0100, 0x489b0000, 0x12270200, 0x489d0000, 0x244f0100, 0x489f0000, 0x02450500, 0x48a10000, 0x24510100, 0x48a30000, 0x12290200, 0x48a50000, 0x24530100, 0x48a70000, 0x09150300, 0x48a90000, 0x24550100, 0x48ab0000, 0x122b0200, 0x48ad0000, 0x24570100, 0x48af0000, 0x048b0400, 0x48b10000, 0x24590100, 0x48b30000, 0x122d0200, 0x48b50000, 0x245b0100, 0x48b70000, 0x09170300, 0x48b90000, 0x245d0100, 0x48bb0000, 0x122f0200, 0x48bd0000, 0x245f0100, 0x48bf0000, 0x01230600, 0x48c10000, 0x24610100, 0x48c30000, 0x12310200, 0x48c50000, 0x24630100, 0x48c70000, 0x09190300, 0x48c90000, 0x24650100, 0x48cb0000, 0x12330200, 0x48cd0000, 0x24670100, 0x48cf0000, 0x048d0400, 0x48d10000, 0x24690100, 0x48d30000, 0x12350200, 0x48d50000, 0x246b0100, 0x48d70000, 0x091b0300, 0x48d90000, 0x246d0100, 0x48db0000, 0x12370200, 0x48dd0000, 0x246f0100, 0x48df0000, 0x02470500, 0x48e10000, 0x24710100, 0x48e30000, 0x12390200, 0x48e50000, 0x24730100, 0x48e70000, 0x091d0300, 0x48e90000, 0x24750100, 0x48eb0000, 0x123b0200, 0x48ed0000, 0x24770100, 0x48ef0000, 0x048f0400, 0x48f10000, 0x24790100, 0x48f30000, 0x123d0200, 0x48f50000, 0x247b0100, 0x48f70000, 0x091f0300, 0x48f90000, 0x247d0100, 0x48fb0000, 0x123f0200, 0x48fd0000, 0x247f0100, 0x48ff0000, + 0x00492600, 0x49010000, 0x24810100, 0x49030000, 0x12410200, 0x49050000, 0x24830100, 0x49070000, 0x09210300, 0x49090000, 0x24850100, 0x490b0000, 0x12430200, 0x490d0000, 0x24870100, 0x490f0000, 0x04910400, 0x49110000, 0x24890100, 0x49130000, 0x12450200, 0x49150000, 0x248b0100, 0x49170000, 0x09230300, 0x49190000, 0x248d0100, 0x491b0000, 0x12470200, 0x491d0000, 0x248f0100, 0x491f0000, 0x02490500, 0x49210000, 0x24910100, 0x49230000, 0x12490200, 0x49250000, 0x24930100, 0x49270000, 0x09250300, 0x49290000, 0x24950100, 0x492b0000, 0x124b0200, 0x492d0000, 0x24970100, 0x492f0000, 0x04930400, 0x49310000, 0x24990100, 0x49330000, 0x124d0200, 0x49350000, 0x249b0100, 0x49370000, 0x09270300, 0x49390000, 0x249d0100, 0x493b0000, 0x124f0200, 0x493d0000, 0x249f0100, 0x493f0000, 0x01250600, 0x49410000, 0x24a10100, 0x49430000, 0x12510200, 0x49450000, 0x24a30100, 0x49470000, 0x09290300, 0x49490000, 0x24a50100, 0x494b0000, 0x12530200, 0x494d0000, 0x24a70100, 0x494f0000, 0x04950400, 0x49510000, 0x24a90100, 0x49530000, 0x12550200, 0x49550000, 0x24ab0100, 0x49570000, 0x092b0300, 0x49590000, 0x24ad0100, 0x495b0000, 0x12570200, 0x495d0000, 0x24af0100, 0x495f0000, 0x024b0500, 0x49610000, 0x24b10100, 0x49630000, 0x12590200, 0x49650000, 0x24b30100, 0x49670000, 0x092d0300, 0x49690000, 0x24b50100, 0x496b0000, 0x125b0200, 0x496d0000, 0x24b70100, 0x496f0000, 0x04970400, 0x49710000, 0x24b90100, 0x49730000, 0x125d0200, 0x49750000, 0x24bb0100, 0x49770000, 0x092f0300, 0x49790000, 0x24bd0100, 0x497b0000, 0x125f0200, 0x497d0000, 0x24bf0100, 0x497f0000, 0x00931600, 0x49810000, 0x24c10100, 0x49830000, 0x12610200, 0x49850000, 0x24c30100, 0x49870000, 0x09310300, 0x49890000, 0x24c50100, 0x498b0000, 0x12630200, 0x498d0000, 0x24c70100, 0x498f0000, 0x04990400, 0x49910000, 0x24c90100, 0x49930000, 0x12650200, 0x49950000, 0x24cb0100, 0x49970000, 0x09330300, 0x49990000, 0x24cd0100, 0x499b0000, 0x12670200, 0x499d0000, 0x24cf0100, 0x499f0000, 0x024d0500, 0x49a10000, 0x24d10100, 0x49a30000, 0x12690200, 0x49a50000, 0x24d30100, 0x49a70000, 0x09350300, 0x49a90000, 0x24d50100, 0x49ab0000, 0x126b0200, 0x49ad0000, 0x24d70100, 0x49af0000, 0x049b0400, 0x49b10000, 0x24d90100, 0x49b30000, 0x126d0200, 0x49b50000, 0x24db0100, 0x49b70000, 0x09370300, 0x49b90000, 0x24dd0100, 0x49bb0000, 0x126f0200, 0x49bd0000, 0x24df0100, 0x49bf0000, 0x01270600, 0x49c10000, 0x24e10100, 0x49c30000, 0x12710200, 0x49c50000, 0x24e30100, 0x49c70000, 0x09390300, 0x49c90000, 0x24e50100, 0x49cb0000, 0x12730200, 0x49cd0000, 0x24e70100, 0x49cf0000, 0x049d0400, 0x49d10000, 0x24e90100, 0x49d30000, 0x12750200, 0x49d50000, 0x24eb0100, 0x49d70000, 0x093b0300, 0x49d90000, 0x24ed0100, 0x49db0000, 0x12770200, 0x49dd0000, 0x24ef0100, 0x49df0000, 0x024f0500, 0x49e10000, 0x24f10100, 0x49e30000, 0x12790200, 0x49e50000, 0x24f30100, 0x49e70000, 0x093d0300, 0x49e90000, 0x24f50100, 0x49eb0000, 0x127b0200, 0x49ed0000, 0x24f70100, 0x49ef0000, 0x049f0400, 0x49f10000, 0x24f90100, 0x49f30000, 0x127d0200, 0x49f50000, 0x24fb0100, 0x49f70000, 0x093f0300, 0x49f90000, 0x24fd0100, 0x49fb0000, 0x127f0200, 0x49fd0000, 0x24ff0100, 0x49ff0000, + 0x00253600, 0x4a010000, 0x25010100, 0x4a030000, 0x12810200, 0x4a050000, 0x25030100, 0x4a070000, 0x09410300, 0x4a090000, 0x25050100, 0x4a0b0000, 0x12830200, 0x4a0d0000, 0x25070100, 0x4a0f0000, 0x04a10400, 0x4a110000, 0x25090100, 0x4a130000, 0x12850200, 0x4a150000, 0x250b0100, 0x4a170000, 0x09430300, 0x4a190000, 0x250d0100, 0x4a1b0000, 0x12870200, 0x4a1d0000, 0x250f0100, 0x4a1f0000, 0x02510500, 0x4a210000, 0x25110100, 0x4a230000, 0x12890200, 0x4a250000, 0x25130100, 0x4a270000, 0x09450300, 0x4a290000, 0x25150100, 0x4a2b0000, 0x128b0200, 0x4a2d0000, 0x25170100, 0x4a2f0000, 0x04a30400, 0x4a310000, 0x25190100, 0x4a330000, 0x128d0200, 0x4a350000, 0x251b0100, 0x4a370000, 0x09470300, 0x4a390000, 0x251d0100, 0x4a3b0000, 0x128f0200, 0x4a3d0000, 0x251f0100, 0x4a3f0000, 0x01290600, 0x4a410000, 0x25210100, 0x4a430000, 0x12910200, 0x4a450000, 0x25230100, 0x4a470000, 0x09490300, 0x4a490000, 0x25250100, 0x4a4b0000, 0x12930200, 0x4a4d0000, 0x25270100, 0x4a4f0000, 0x04a50400, 0x4a510000, 0x25290100, 0x4a530000, 0x12950200, 0x4a550000, 0x252b0100, 0x4a570000, 0x094b0300, 0x4a590000, 0x252d0100, 0x4a5b0000, 0x12970200, 0x4a5d0000, 0x252f0100, 0x4a5f0000, 0x02530500, 0x4a610000, 0x25310100, 0x4a630000, 0x12990200, 0x4a650000, 0x25330100, 0x4a670000, 0x094d0300, 0x4a690000, 0x25350100, 0x4a6b0000, 0x129b0200, 0x4a6d0000, 0x25370100, 0x4a6f0000, 0x04a70400, 0x4a710000, 0x25390100, 0x4a730000, 0x129d0200, 0x4a750000, 0x253b0100, 0x4a770000, 0x094f0300, 0x4a790000, 0x253d0100, 0x4a7b0000, 0x129f0200, 0x4a7d0000, 0x253f0100, 0x4a7f0000, 0x00951600, 0x4a810000, 0x25410100, 0x4a830000, 0x12a10200, 0x4a850000, 0x25430100, 0x4a870000, 0x09510300, 0x4a890000, 0x25450100, 0x4a8b0000, 0x12a30200, 0x4a8d0000, 0x25470100, 0x4a8f0000, 0x04a90400, 0x4a910000, 0x25490100, 0x4a930000, 0x12a50200, 0x4a950000, 0x254b0100, 0x4a970000, 0x09530300, 0x4a990000, 0x254d0100, 0x4a9b0000, 0x12a70200, 0x4a9d0000, 0x254f0100, 0x4a9f0000, 0x02550500, 0x4aa10000, 0x25510100, 0x4aa30000, 0x12a90200, 0x4aa50000, 0x25530100, 0x4aa70000, 0x09550300, 0x4aa90000, 0x25550100, 0x4aab0000, 0x12ab0200, 0x4aad0000, 0x25570100, 0x4aaf0000, 0x04ab0400, 0x4ab10000, 0x25590100, 0x4ab30000, 0x12ad0200, 0x4ab50000, 0x255b0100, 0x4ab70000, 0x09570300, 0x4ab90000, 0x255d0100, 0x4abb0000, 0x12af0200, 0x4abd0000, 0x255f0100, 0x4abf0000, 0x012b0600, 0x4ac10000, 0x25610100, 0x4ac30000, 0x12b10200, 0x4ac50000, 0x25630100, 0x4ac70000, 0x09590300, 0x4ac90000, 0x25650100, 0x4acb0000, 0x12b30200, 0x4acd0000, 0x25670100, 0x4acf0000, 0x04ad0400, 0x4ad10000, 0x25690100, 0x4ad30000, 0x12b50200, 0x4ad50000, 0x256b0100, 0x4ad70000, 0x095b0300, 0x4ad90000, 0x256d0100, 0x4adb0000, 0x12b70200, 0x4add0000, 0x256f0100, 0x4adf0000, 0x02570500, 0x4ae10000, 0x25710100, 0x4ae30000, 0x12b90200, 0x4ae50000, 0x25730100, 0x4ae70000, 0x095d0300, 0x4ae90000, 0x25750100, 0x4aeb0000, 0x12bb0200, 0x4aed0000, 0x25770100, 0x4aef0000, 0x04af0400, 0x4af10000, 0x25790100, 0x4af30000, 0x12bd0200, 0x4af50000, 0x257b0100, 0x4af70000, 0x095f0300, 0x4af90000, 0x257d0100, 0x4afb0000, 0x12bf0200, 0x4afd0000, 0x257f0100, 0x4aff0000, + 0x004b2600, 0x4b010000, 0x25810100, 0x4b030000, 0x12c10200, 0x4b050000, 0x25830100, 0x4b070000, 0x09610300, 0x4b090000, 0x25850100, 0x4b0b0000, 0x12c30200, 0x4b0d0000, 0x25870100, 0x4b0f0000, 0x04b10400, 0x4b110000, 0x25890100, 0x4b130000, 0x12c50200, 0x4b150000, 0x258b0100, 0x4b170000, 0x09630300, 0x4b190000, 0x258d0100, 0x4b1b0000, 0x12c70200, 0x4b1d0000, 0x258f0100, 0x4b1f0000, 0x02590500, 0x4b210000, 0x25910100, 0x4b230000, 0x12c90200, 0x4b250000, 0x25930100, 0x4b270000, 0x09650300, 0x4b290000, 0x25950100, 0x4b2b0000, 0x12cb0200, 0x4b2d0000, 0x25970100, 0x4b2f0000, 0x04b30400, 0x4b310000, 0x25990100, 0x4b330000, 0x12cd0200, 0x4b350000, 0x259b0100, 0x4b370000, 0x09670300, 0x4b390000, 0x259d0100, 0x4b3b0000, 0x12cf0200, 0x4b3d0000, 0x259f0100, 0x4b3f0000, 0x012d0600, 0x4b410000, 0x25a10100, 0x4b430000, 0x12d10200, 0x4b450000, 0x25a30100, 0x4b470000, 0x09690300, 0x4b490000, 0x25a50100, 0x4b4b0000, 0x12d30200, 0x4b4d0000, 0x25a70100, 0x4b4f0000, 0x04b50400, 0x4b510000, 0x25a90100, 0x4b530000, 0x12d50200, 0x4b550000, 0x25ab0100, 0x4b570000, 0x096b0300, 0x4b590000, 0x25ad0100, 0x4b5b0000, 0x12d70200, 0x4b5d0000, 0x25af0100, 0x4b5f0000, 0x025b0500, 0x4b610000, 0x25b10100, 0x4b630000, 0x12d90200, 0x4b650000, 0x25b30100, 0x4b670000, 0x096d0300, 0x4b690000, 0x25b50100, 0x4b6b0000, 0x12db0200, 0x4b6d0000, 0x25b70100, 0x4b6f0000, 0x04b70400, 0x4b710000, 0x25b90100, 0x4b730000, 0x12dd0200, 0x4b750000, 0x25bb0100, 0x4b770000, 0x096f0300, 0x4b790000, 0x25bd0100, 0x4b7b0000, 0x12df0200, 0x4b7d0000, 0x25bf0100, 0x4b7f0000, 0x00971600, 0x4b810000, 0x25c10100, 0x4b830000, 0x12e10200, 0x4b850000, 0x25c30100, 0x4b870000, 0x09710300, 0x4b890000, 0x25c50100, 0x4b8b0000, 0x12e30200, 0x4b8d0000, 0x25c70100, 0x4b8f0000, 0x04b90400, 0x4b910000, 0x25c90100, 0x4b930000, 0x12e50200, 0x4b950000, 0x25cb0100, 0x4b970000, 0x09730300, 0x4b990000, 0x25cd0100, 0x4b9b0000, 0x12e70200, 0x4b9d0000, 0x25cf0100, 0x4b9f0000, 0x025d0500, 0x4ba10000, 0x25d10100, 0x4ba30000, 0x12e90200, 0x4ba50000, 0x25d30100, 0x4ba70000, 0x09750300, 0x4ba90000, 0x25d50100, 0x4bab0000, 0x12eb0200, 0x4bad0000, 0x25d70100, 0x4baf0000, 0x04bb0400, 0x4bb10000, 0x25d90100, 0x4bb30000, 0x12ed0200, 0x4bb50000, 0x25db0100, 0x4bb70000, 0x09770300, 0x4bb90000, 0x25dd0100, 0x4bbb0000, 0x12ef0200, 0x4bbd0000, 0x25df0100, 0x4bbf0000, 0x012f0600, 0x4bc10000, 0x25e10100, 0x4bc30000, 0x12f10200, 0x4bc50000, 0x25e30100, 0x4bc70000, 0x09790300, 0x4bc90000, 0x25e50100, 0x4bcb0000, 0x12f30200, 0x4bcd0000, 0x25e70100, 0x4bcf0000, 0x04bd0400, 0x4bd10000, 0x25e90100, 0x4bd30000, 0x12f50200, 0x4bd50000, 0x25eb0100, 0x4bd70000, 0x097b0300, 0x4bd90000, 0x25ed0100, 0x4bdb0000, 0x12f70200, 0x4bdd0000, 0x25ef0100, 0x4bdf0000, 0x025f0500, 0x4be10000, 0x25f10100, 0x4be30000, 0x12f90200, 0x4be50000, 0x25f30100, 0x4be70000, 0x097d0300, 0x4be90000, 0x25f50100, 0x4beb0000, 0x12fb0200, 0x4bed0000, 0x25f70100, 0x4bef0000, 0x04bf0400, 0x4bf10000, 0x25f90100, 0x4bf30000, 0x12fd0200, 0x4bf50000, 0x25fb0100, 0x4bf70000, 0x097f0300, 0x4bf90000, 0x25fd0100, 0x4bfb0000, 0x12ff0200, 0x4bfd0000, 0x25ff0100, 0x4bff0000, + 0x00134600, 0x4c010000, 0x26010100, 0x4c030000, 0x13010200, 0x4c050000, 0x26030100, 0x4c070000, 0x09810300, 0x4c090000, 0x26050100, 0x4c0b0000, 0x13030200, 0x4c0d0000, 0x26070100, 0x4c0f0000, 0x04c10400, 0x4c110000, 0x26090100, 0x4c130000, 0x13050200, 0x4c150000, 0x260b0100, 0x4c170000, 0x09830300, 0x4c190000, 0x260d0100, 0x4c1b0000, 0x13070200, 0x4c1d0000, 0x260f0100, 0x4c1f0000, 0x02610500, 0x4c210000, 0x26110100, 0x4c230000, 0x13090200, 0x4c250000, 0x26130100, 0x4c270000, 0x09850300, 0x4c290000, 0x26150100, 0x4c2b0000, 0x130b0200, 0x4c2d0000, 0x26170100, 0x4c2f0000, 0x04c30400, 0x4c310000, 0x26190100, 0x4c330000, 0x130d0200, 0x4c350000, 0x261b0100, 0x4c370000, 0x09870300, 0x4c390000, 0x261d0100, 0x4c3b0000, 0x130f0200, 0x4c3d0000, 0x261f0100, 0x4c3f0000, 0x01310600, 0x4c410000, 0x26210100, 0x4c430000, 0x13110200, 0x4c450000, 0x26230100, 0x4c470000, 0x09890300, 0x4c490000, 0x26250100, 0x4c4b0000, 0x13130200, 0x4c4d0000, 0x26270100, 0x4c4f0000, 0x04c50400, 0x4c510000, 0x26290100, 0x4c530000, 0x13150200, 0x4c550000, 0x262b0100, 0x4c570000, 0x098b0300, 0x4c590000, 0x262d0100, 0x4c5b0000, 0x13170200, 0x4c5d0000, 0x262f0100, 0x4c5f0000, 0x02630500, 0x4c610000, 0x26310100, 0x4c630000, 0x13190200, 0x4c650000, 0x26330100, 0x4c670000, 0x098d0300, 0x4c690000, 0x26350100, 0x4c6b0000, 0x131b0200, 0x4c6d0000, 0x26370100, 0x4c6f0000, 0x04c70400, 0x4c710000, 0x26390100, 0x4c730000, 0x131d0200, 0x4c750000, 0x263b0100, 0x4c770000, 0x098f0300, 0x4c790000, 0x263d0100, 0x4c7b0000, 0x131f0200, 0x4c7d0000, 0x263f0100, 0x4c7f0000, 0x00991600, 0x4c810000, 0x26410100, 0x4c830000, 0x13210200, 0x4c850000, 0x26430100, 0x4c870000, 0x09910300, 0x4c890000, 0x26450100, 0x4c8b0000, 0x13230200, 0x4c8d0000, 0x26470100, 0x4c8f0000, 0x04c90400, 0x4c910000, 0x26490100, 0x4c930000, 0x13250200, 0x4c950000, 0x264b0100, 0x4c970000, 0x09930300, 0x4c990000, 0x264d0100, 0x4c9b0000, 0x13270200, 0x4c9d0000, 0x264f0100, 0x4c9f0000, 0x02650500, 0x4ca10000, 0x26510100, 0x4ca30000, 0x13290200, 0x4ca50000, 0x26530100, 0x4ca70000, 0x09950300, 0x4ca90000, 0x26550100, 0x4cab0000, 0x132b0200, 0x4cad0000, 0x26570100, 0x4caf0000, 0x04cb0400, 0x4cb10000, 0x26590100, 0x4cb30000, 0x132d0200, 0x4cb50000, 0x265b0100, 0x4cb70000, 0x09970300, 0x4cb90000, 0x265d0100, 0x4cbb0000, 0x132f0200, 0x4cbd0000, 0x265f0100, 0x4cbf0000, 0x01330600, 0x4cc10000, 0x26610100, 0x4cc30000, 0x13310200, 0x4cc50000, 0x26630100, 0x4cc70000, 0x09990300, 0x4cc90000, 0x26650100, 0x4ccb0000, 0x13330200, 0x4ccd0000, 0x26670100, 0x4ccf0000, 0x04cd0400, 0x4cd10000, 0x26690100, 0x4cd30000, 0x13350200, 0x4cd50000, 0x266b0100, 0x4cd70000, 0x099b0300, 0x4cd90000, 0x266d0100, 0x4cdb0000, 0x13370200, 0x4cdd0000, 0x266f0100, 0x4cdf0000, 0x02670500, 0x4ce10000, 0x26710100, 0x4ce30000, 0x13390200, 0x4ce50000, 0x26730100, 0x4ce70000, 0x099d0300, 0x4ce90000, 0x26750100, 0x4ceb0000, 0x133b0200, 0x4ced0000, 0x26770100, 0x4cef0000, 0x04cf0400, 0x4cf10000, 0x26790100, 0x4cf30000, 0x133d0200, 0x4cf50000, 0x267b0100, 0x4cf70000, 0x099f0300, 0x4cf90000, 0x267d0100, 0x4cfb0000, 0x133f0200, 0x4cfd0000, 0x267f0100, 0x4cff0000, + 0x004d2600, 0x4d010000, 0x26810100, 0x4d030000, 0x13410200, 0x4d050000, 0x26830100, 0x4d070000, 0x09a10300, 0x4d090000, 0x26850100, 0x4d0b0000, 0x13430200, 0x4d0d0000, 0x26870100, 0x4d0f0000, 0x04d10400, 0x4d110000, 0x26890100, 0x4d130000, 0x13450200, 0x4d150000, 0x268b0100, 0x4d170000, 0x09a30300, 0x4d190000, 0x268d0100, 0x4d1b0000, 0x13470200, 0x4d1d0000, 0x268f0100, 0x4d1f0000, 0x02690500, 0x4d210000, 0x26910100, 0x4d230000, 0x13490200, 0x4d250000, 0x26930100, 0x4d270000, 0x09a50300, 0x4d290000, 0x26950100, 0x4d2b0000, 0x134b0200, 0x4d2d0000, 0x26970100, 0x4d2f0000, 0x04d30400, 0x4d310000, 0x26990100, 0x4d330000, 0x134d0200, 0x4d350000, 0x269b0100, 0x4d370000, 0x09a70300, 0x4d390000, 0x269d0100, 0x4d3b0000, 0x134f0200, 0x4d3d0000, 0x269f0100, 0x4d3f0000, 0x01350600, 0x4d410000, 0x26a10100, 0x4d430000, 0x13510200, 0x4d450000, 0x26a30100, 0x4d470000, 0x09a90300, 0x4d490000, 0x26a50100, 0x4d4b0000, 0x13530200, 0x4d4d0000, 0x26a70100, 0x4d4f0000, 0x04d50400, 0x4d510000, 0x26a90100, 0x4d530000, 0x13550200, 0x4d550000, 0x26ab0100, 0x4d570000, 0x09ab0300, 0x4d590000, 0x26ad0100, 0x4d5b0000, 0x13570200, 0x4d5d0000, 0x26af0100, 0x4d5f0000, 0x026b0500, 0x4d610000, 0x26b10100, 0x4d630000, 0x13590200, 0x4d650000, 0x26b30100, 0x4d670000, 0x09ad0300, 0x4d690000, 0x26b50100, 0x4d6b0000, 0x135b0200, 0x4d6d0000, 0x26b70100, 0x4d6f0000, 0x04d70400, 0x4d710000, 0x26b90100, 0x4d730000, 0x135d0200, 0x4d750000, 0x26bb0100, 0x4d770000, 0x09af0300, 0x4d790000, 0x26bd0100, 0x4d7b0000, 0x135f0200, 0x4d7d0000, 0x26bf0100, 0x4d7f0000, 0x009b1600, 0x4d810000, 0x26c10100, 0x4d830000, 0x13610200, 0x4d850000, 0x26c30100, 0x4d870000, 0x09b10300, 0x4d890000, 0x26c50100, 0x4d8b0000, 0x13630200, 0x4d8d0000, 0x26c70100, 0x4d8f0000, 0x04d90400, 0x4d910000, 0x26c90100, 0x4d930000, 0x13650200, 0x4d950000, 0x26cb0100, 0x4d970000, 0x09b30300, 0x4d990000, 0x26cd0100, 0x4d9b0000, 0x13670200, 0x4d9d0000, 0x26cf0100, 0x4d9f0000, 0x026d0500, 0x4da10000, 0x26d10100, 0x4da30000, 0x13690200, 0x4da50000, 0x26d30100, 0x4da70000, 0x09b50300, 0x4da90000, 0x26d50100, 0x4dab0000, 0x136b0200, 0x4dad0000, 0x26d70100, 0x4daf0000, 0x04db0400, 0x4db10000, 0x26d90100, 0x4db30000, 0x136d0200, 0x4db50000, 0x26db0100, 0x4db70000, 0x09b70300, 0x4db90000, 0x26dd0100, 0x4dbb0000, 0x136f0200, 0x4dbd0000, 0x26df0100, 0x4dbf0000, 0x01370600, 0x4dc10000, 0x26e10100, 0x4dc30000, 0x13710200, 0x4dc50000, 0x26e30100, 0x4dc70000, 0x09b90300, 0x4dc90000, 0x26e50100, 0x4dcb0000, 0x13730200, 0x4dcd0000, 0x26e70100, 0x4dcf0000, 0x04dd0400, 0x4dd10000, 0x26e90100, 0x4dd30000, 0x13750200, 0x4dd50000, 0x26eb0100, 0x4dd70000, 0x09bb0300, 0x4dd90000, 0x26ed0100, 0x4ddb0000, 0x13770200, 0x4ddd0000, 0x26ef0100, 0x4ddf0000, 0x026f0500, 0x4de10000, 0x26f10100, 0x4de30000, 0x13790200, 0x4de50000, 0x26f30100, 0x4de70000, 0x09bd0300, 0x4de90000, 0x26f50100, 0x4deb0000, 0x137b0200, 0x4ded0000, 0x26f70100, 0x4def0000, 0x04df0400, 0x4df10000, 0x26f90100, 0x4df30000, 0x137d0200, 0x4df50000, 0x26fb0100, 0x4df70000, 0x09bf0300, 0x4df90000, 0x26fd0100, 0x4dfb0000, 0x137f0200, 0x4dfd0000, 0x26ff0100, 0x4dff0000, + 0x00273600, 0x4e010000, 0x27010100, 0x4e030000, 0x13810200, 0x4e050000, 0x27030100, 0x4e070000, 0x09c10300, 0x4e090000, 0x27050100, 0x4e0b0000, 0x13830200, 0x4e0d0000, 0x27070100, 0x4e0f0000, 0x04e10400, 0x4e110000, 0x27090100, 0x4e130000, 0x13850200, 0x4e150000, 0x270b0100, 0x4e170000, 0x09c30300, 0x4e190000, 0x270d0100, 0x4e1b0000, 0x13870200, 0x4e1d0000, 0x270f0100, 0x4e1f0000, 0x02710500, 0x4e210000, 0x27110100, 0x4e230000, 0x13890200, 0x4e250000, 0x27130100, 0x4e270000, 0x09c50300, 0x4e290000, 0x27150100, 0x4e2b0000, 0x138b0200, 0x4e2d0000, 0x27170100, 0x4e2f0000, 0x04e30400, 0x4e310000, 0x27190100, 0x4e330000, 0x138d0200, 0x4e350000, 0x271b0100, 0x4e370000, 0x09c70300, 0x4e390000, 0x271d0100, 0x4e3b0000, 0x138f0200, 0x4e3d0000, 0x271f0100, 0x4e3f0000, 0x01390600, 0x4e410000, 0x27210100, 0x4e430000, 0x13910200, 0x4e450000, 0x27230100, 0x4e470000, 0x09c90300, 0x4e490000, 0x27250100, 0x4e4b0000, 0x13930200, 0x4e4d0000, 0x27270100, 0x4e4f0000, 0x04e50400, 0x4e510000, 0x27290100, 0x4e530000, 0x13950200, 0x4e550000, 0x272b0100, 0x4e570000, 0x09cb0300, 0x4e590000, 0x272d0100, 0x4e5b0000, 0x13970200, 0x4e5d0000, 0x272f0100, 0x4e5f0000, 0x02730500, 0x4e610000, 0x27310100, 0x4e630000, 0x13990200, 0x4e650000, 0x27330100, 0x4e670000, 0x09cd0300, 0x4e690000, 0x27350100, 0x4e6b0000, 0x139b0200, 0x4e6d0000, 0x27370100, 0x4e6f0000, 0x04e70400, 0x4e710000, 0x27390100, 0x4e730000, 0x139d0200, 0x4e750000, 0x273b0100, 0x4e770000, 0x09cf0300, 0x4e790000, 0x273d0100, 0x4e7b0000, 0x139f0200, 0x4e7d0000, 0x273f0100, 0x4e7f0000, 0x009d1600, 0x4e810000, 0x27410100, 0x4e830000, 0x13a10200, 0x4e850000, 0x27430100, 0x4e870000, 0x09d10300, 0x4e890000, 0x27450100, 0x4e8b0000, 0x13a30200, 0x4e8d0000, 0x27470100, 0x4e8f0000, 0x04e90400, 0x4e910000, 0x27490100, 0x4e930000, 0x13a50200, 0x4e950000, 0x274b0100, 0x4e970000, 0x09d30300, 0x4e990000, 0x274d0100, 0x4e9b0000, 0x13a70200, 0x4e9d0000, 0x274f0100, 0x4e9f0000, 0x02750500, 0x4ea10000, 0x27510100, 0x4ea30000, 0x13a90200, 0x4ea50000, 0x27530100, 0x4ea70000, 0x09d50300, 0x4ea90000, 0x27550100, 0x4eab0000, 0x13ab0200, 0x4ead0000, 0x27570100, 0x4eaf0000, 0x04eb0400, 0x4eb10000, 0x27590100, 0x4eb30000, 0x13ad0200, 0x4eb50000, 0x275b0100, 0x4eb70000, 0x09d70300, 0x4eb90000, 0x275d0100, 0x4ebb0000, 0x13af0200, 0x4ebd0000, 0x275f0100, 0x4ebf0000, 0x013b0600, 0x4ec10000, 0x27610100, 0x4ec30000, 0x13b10200, 0x4ec50000, 0x27630100, 0x4ec70000, 0x09d90300, 0x4ec90000, 0x27650100, 0x4ecb0000, 0x13b30200, 0x4ecd0000, 0x27670100, 0x4ecf0000, 0x04ed0400, 0x4ed10000, 0x27690100, 0x4ed30000, 0x13b50200, 0x4ed50000, 0x276b0100, 0x4ed70000, 0x09db0300, 0x4ed90000, 0x276d0100, 0x4edb0000, 0x13b70200, 0x4edd0000, 0x276f0100, 0x4edf0000, 0x02770500, 0x4ee10000, 0x27710100, 0x4ee30000, 0x13b90200, 0x4ee50000, 0x27730100, 0x4ee70000, 0x09dd0300, 0x4ee90000, 0x27750100, 0x4eeb0000, 0x13bb0200, 0x4eed0000, 0x27770100, 0x4eef0000, 0x04ef0400, 0x4ef10000, 0x27790100, 0x4ef30000, 0x13bd0200, 0x4ef50000, 0x277b0100, 0x4ef70000, 0x09df0300, 0x4ef90000, 0x277d0100, 0x4efb0000, 0x13bf0200, 0x4efd0000, 0x277f0100, 0x4eff0000, + 0x004f2600, 0x4f010000, 0x27810100, 0x4f030000, 0x13c10200, 0x4f050000, 0x27830100, 0x4f070000, 0x09e10300, 0x4f090000, 0x27850100, 0x4f0b0000, 0x13c30200, 0x4f0d0000, 0x27870100, 0x4f0f0000, 0x04f10400, 0x4f110000, 0x27890100, 0x4f130000, 0x13c50200, 0x4f150000, 0x278b0100, 0x4f170000, 0x09e30300, 0x4f190000, 0x278d0100, 0x4f1b0000, 0x13c70200, 0x4f1d0000, 0x278f0100, 0x4f1f0000, 0x02790500, 0x4f210000, 0x27910100, 0x4f230000, 0x13c90200, 0x4f250000, 0x27930100, 0x4f270000, 0x09e50300, 0x4f290000, 0x27950100, 0x4f2b0000, 0x13cb0200, 0x4f2d0000, 0x27970100, 0x4f2f0000, 0x04f30400, 0x4f310000, 0x27990100, 0x4f330000, 0x13cd0200, 0x4f350000, 0x279b0100, 0x4f370000, 0x09e70300, 0x4f390000, 0x279d0100, 0x4f3b0000, 0x13cf0200, 0x4f3d0000, 0x279f0100, 0x4f3f0000, 0x013d0600, 0x4f410000, 0x27a10100, 0x4f430000, 0x13d10200, 0x4f450000, 0x27a30100, 0x4f470000, 0x09e90300, 0x4f490000, 0x27a50100, 0x4f4b0000, 0x13d30200, 0x4f4d0000, 0x27a70100, 0x4f4f0000, 0x04f50400, 0x4f510000, 0x27a90100, 0x4f530000, 0x13d50200, 0x4f550000, 0x27ab0100, 0x4f570000, 0x09eb0300, 0x4f590000, 0x27ad0100, 0x4f5b0000, 0x13d70200, 0x4f5d0000, 0x27af0100, 0x4f5f0000, 0x027b0500, 0x4f610000, 0x27b10100, 0x4f630000, 0x13d90200, 0x4f650000, 0x27b30100, 0x4f670000, 0x09ed0300, 0x4f690000, 0x27b50100, 0x4f6b0000, 0x13db0200, 0x4f6d0000, 0x27b70100, 0x4f6f0000, 0x04f70400, 0x4f710000, 0x27b90100, 0x4f730000, 0x13dd0200, 0x4f750000, 0x27bb0100, 0x4f770000, 0x09ef0300, 0x4f790000, 0x27bd0100, 0x4f7b0000, 0x13df0200, 0x4f7d0000, 0x27bf0100, 0x4f7f0000, 0x009f1600, 0x4f810000, 0x27c10100, 0x4f830000, 0x13e10200, 0x4f850000, 0x27c30100, 0x4f870000, 0x09f10300, 0x4f890000, 0x27c50100, 0x4f8b0000, 0x13e30200, 0x4f8d0000, 0x27c70100, 0x4f8f0000, 0x04f90400, 0x4f910000, 0x27c90100, 0x4f930000, 0x13e50200, 0x4f950000, 0x27cb0100, 0x4f970000, 0x09f30300, 0x4f990000, 0x27cd0100, 0x4f9b0000, 0x13e70200, 0x4f9d0000, 0x27cf0100, 0x4f9f0000, 0x027d0500, 0x4fa10000, 0x27d10100, 0x4fa30000, 0x13e90200, 0x4fa50000, 0x27d30100, 0x4fa70000, 0x09f50300, 0x4fa90000, 0x27d50100, 0x4fab0000, 0x13eb0200, 0x4fad0000, 0x27d70100, 0x4faf0000, 0x04fb0400, 0x4fb10000, 0x27d90100, 0x4fb30000, 0x13ed0200, 0x4fb50000, 0x27db0100, 0x4fb70000, 0x09f70300, 0x4fb90000, 0x27dd0100, 0x4fbb0000, 0x13ef0200, 0x4fbd0000, 0x27df0100, 0x4fbf0000, 0x013f0600, 0x4fc10000, 0x27e10100, 0x4fc30000, 0x13f10200, 0x4fc50000, 0x27e30100, 0x4fc70000, 0x09f90300, 0x4fc90000, 0x27e50100, 0x4fcb0000, 0x13f30200, 0x4fcd0000, 0x27e70100, 0x4fcf0000, 0x04fd0400, 0x4fd10000, 0x27e90100, 0x4fd30000, 0x13f50200, 0x4fd50000, 0x27eb0100, 0x4fd70000, 0x09fb0300, 0x4fd90000, 0x27ed0100, 0x4fdb0000, 0x13f70200, 0x4fdd0000, 0x27ef0100, 0x4fdf0000, 0x027f0500, 0x4fe10000, 0x27f10100, 0x4fe30000, 0x13f90200, 0x4fe50000, 0x27f30100, 0x4fe70000, 0x09fd0300, 0x4fe90000, 0x27f50100, 0x4feb0000, 0x13fb0200, 0x4fed0000, 0x27f70100, 0x4fef0000, 0x04ff0400, 0x4ff10000, 0x27f90100, 0x4ff30000, 0x13fd0200, 0x4ff50000, 0x27fb0100, 0x4ff70000, 0x09ff0300, 0x4ff90000, 0x27fd0100, 0x4ffb0000, 0x13ff0200, 0x4ffd0000, 0x27ff0100, 0x4fff0000, + 0x00056600, 0x50010000, 0x28010100, 0x50030000, 0x14010200, 0x50050000, 0x28030100, 0x50070000, 0x0a010300, 0x50090000, 0x28050100, 0x500b0000, 0x14030200, 0x500d0000, 0x28070100, 0x500f0000, 0x05010400, 0x50110000, 0x28090100, 0x50130000, 0x14050200, 0x50150000, 0x280b0100, 0x50170000, 0x0a030300, 0x50190000, 0x280d0100, 0x501b0000, 0x14070200, 0x501d0000, 0x280f0100, 0x501f0000, 0x02810500, 0x50210000, 0x28110100, 0x50230000, 0x14090200, 0x50250000, 0x28130100, 0x50270000, 0x0a050300, 0x50290000, 0x28150100, 0x502b0000, 0x140b0200, 0x502d0000, 0x28170100, 0x502f0000, 0x05030400, 0x50310000, 0x28190100, 0x50330000, 0x140d0200, 0x50350000, 0x281b0100, 0x50370000, 0x0a070300, 0x50390000, 0x281d0100, 0x503b0000, 0x140f0200, 0x503d0000, 0x281f0100, 0x503f0000, 0x01410600, 0x50410000, 0x28210100, 0x50430000, 0x14110200, 0x50450000, 0x28230100, 0x50470000, 0x0a090300, 0x50490000, 0x28250100, 0x504b0000, 0x14130200, 0x504d0000, 0x28270100, 0x504f0000, 0x05050400, 0x50510000, 0x28290100, 0x50530000, 0x14150200, 0x50550000, 0x282b0100, 0x50570000, 0x0a0b0300, 0x50590000, 0x282d0100, 0x505b0000, 0x14170200, 0x505d0000, 0x282f0100, 0x505f0000, 0x02830500, 0x50610000, 0x28310100, 0x50630000, 0x14190200, 0x50650000, 0x28330100, 0x50670000, 0x0a0d0300, 0x50690000, 0x28350100, 0x506b0000, 0x141b0200, 0x506d0000, 0x28370100, 0x506f0000, 0x05070400, 0x50710000, 0x28390100, 0x50730000, 0x141d0200, 0x50750000, 0x283b0100, 0x50770000, 0x0a0f0300, 0x50790000, 0x283d0100, 0x507b0000, 0x141f0200, 0x507d0000, 0x283f0100, 0x507f0000, 0x00a11600, 0x50810000, 0x28410100, 0x50830000, 0x14210200, 0x50850000, 0x28430100, 0x50870000, 0x0a110300, 0x50890000, 0x28450100, 0x508b0000, 0x14230200, 0x508d0000, 0x28470100, 0x508f0000, 0x05090400, 0x50910000, 0x28490100, 0x50930000, 0x14250200, 0x50950000, 0x284b0100, 0x50970000, 0x0a130300, 0x50990000, 0x284d0100, 0x509b0000, 0x14270200, 0x509d0000, 0x284f0100, 0x509f0000, 0x02850500, 0x50a10000, 0x28510100, 0x50a30000, 0x14290200, 0x50a50000, 0x28530100, 0x50a70000, 0x0a150300, 0x50a90000, 0x28550100, 0x50ab0000, 0x142b0200, 0x50ad0000, 0x28570100, 0x50af0000, 0x050b0400, 0x50b10000, 0x28590100, 0x50b30000, 0x142d0200, 0x50b50000, 0x285b0100, 0x50b70000, 0x0a170300, 0x50b90000, 0x285d0100, 0x50bb0000, 0x142f0200, 0x50bd0000, 0x285f0100, 0x50bf0000, 0x01430600, 0x50c10000, 0x28610100, 0x50c30000, 0x14310200, 0x50c50000, 0x28630100, 0x50c70000, 0x0a190300, 0x50c90000, 0x28650100, 0x50cb0000, 0x14330200, 0x50cd0000, 0x28670100, 0x50cf0000, 0x050d0400, 0x50d10000, 0x28690100, 0x50d30000, 0x14350200, 0x50d50000, 0x286b0100, 0x50d70000, 0x0a1b0300, 0x50d90000, 0x286d0100, 0x50db0000, 0x14370200, 0x50dd0000, 0x286f0100, 0x50df0000, 0x02870500, 0x50e10000, 0x28710100, 0x50e30000, 0x14390200, 0x50e50000, 0x28730100, 0x50e70000, 0x0a1d0300, 0x50e90000, 0x28750100, 0x50eb0000, 0x143b0200, 0x50ed0000, 0x28770100, 0x50ef0000, 0x050f0400, 0x50f10000, 0x28790100, 0x50f30000, 0x143d0200, 0x50f50000, 0x287b0100, 0x50f70000, 0x0a1f0300, 0x50f90000, 0x287d0100, 0x50fb0000, 0x143f0200, 0x50fd0000, 0x287f0100, 0x50ff0000, + 0x00512600, 0x51010000, 0x28810100, 0x51030000, 0x14410200, 0x51050000, 0x28830100, 0x51070000, 0x0a210300, 0x51090000, 0x28850100, 0x510b0000, 0x14430200, 0x510d0000, 0x28870100, 0x510f0000, 0x05110400, 0x51110000, 0x28890100, 0x51130000, 0x14450200, 0x51150000, 0x288b0100, 0x51170000, 0x0a230300, 0x51190000, 0x288d0100, 0x511b0000, 0x14470200, 0x511d0000, 0x288f0100, 0x511f0000, 0x02890500, 0x51210000, 0x28910100, 0x51230000, 0x14490200, 0x51250000, 0x28930100, 0x51270000, 0x0a250300, 0x51290000, 0x28950100, 0x512b0000, 0x144b0200, 0x512d0000, 0x28970100, 0x512f0000, 0x05130400, 0x51310000, 0x28990100, 0x51330000, 0x144d0200, 0x51350000, 0x289b0100, 0x51370000, 0x0a270300, 0x51390000, 0x289d0100, 0x513b0000, 0x144f0200, 0x513d0000, 0x289f0100, 0x513f0000, 0x01450600, 0x51410000, 0x28a10100, 0x51430000, 0x14510200, 0x51450000, 0x28a30100, 0x51470000, 0x0a290300, 0x51490000, 0x28a50100, 0x514b0000, 0x14530200, 0x514d0000, 0x28a70100, 0x514f0000, 0x05150400, 0x51510000, 0x28a90100, 0x51530000, 0x14550200, 0x51550000, 0x28ab0100, 0x51570000, 0x0a2b0300, 0x51590000, 0x28ad0100, 0x515b0000, 0x14570200, 0x515d0000, 0x28af0100, 0x515f0000, 0x028b0500, 0x51610000, 0x28b10100, 0x51630000, 0x14590200, 0x51650000, 0x28b30100, 0x51670000, 0x0a2d0300, 0x51690000, 0x28b50100, 0x516b0000, 0x145b0200, 0x516d0000, 0x28b70100, 0x516f0000, 0x05170400, 0x51710000, 0x28b90100, 0x51730000, 0x145d0200, 0x51750000, 0x28bb0100, 0x51770000, 0x0a2f0300, 0x51790000, 0x28bd0100, 0x517b0000, 0x145f0200, 0x517d0000, 0x28bf0100, 0x517f0000, 0x00a31600, 0x51810000, 0x28c10100, 0x51830000, 0x14610200, 0x51850000, 0x28c30100, 0x51870000, 0x0a310300, 0x51890000, 0x28c50100, 0x518b0000, 0x14630200, 0x518d0000, 0x28c70100, 0x518f0000, 0x05190400, 0x51910000, 0x28c90100, 0x51930000, 0x14650200, 0x51950000, 0x28cb0100, 0x51970000, 0x0a330300, 0x51990000, 0x28cd0100, 0x519b0000, 0x14670200, 0x519d0000, 0x28cf0100, 0x519f0000, 0x028d0500, 0x51a10000, 0x28d10100, 0x51a30000, 0x14690200, 0x51a50000, 0x28d30100, 0x51a70000, 0x0a350300, 0x51a90000, 0x28d50100, 0x51ab0000, 0x146b0200, 0x51ad0000, 0x28d70100, 0x51af0000, 0x051b0400, 0x51b10000, 0x28d90100, 0x51b30000, 0x146d0200, 0x51b50000, 0x28db0100, 0x51b70000, 0x0a370300, 0x51b90000, 0x28dd0100, 0x51bb0000, 0x146f0200, 0x51bd0000, 0x28df0100, 0x51bf0000, 0x01470600, 0x51c10000, 0x28e10100, 0x51c30000, 0x14710200, 0x51c50000, 0x28e30100, 0x51c70000, 0x0a390300, 0x51c90000, 0x28e50100, 0x51cb0000, 0x14730200, 0x51cd0000, 0x28e70100, 0x51cf0000, 0x051d0400, 0x51d10000, 0x28e90100, 0x51d30000, 0x14750200, 0x51d50000, 0x28eb0100, 0x51d70000, 0x0a3b0300, 0x51d90000, 0x28ed0100, 0x51db0000, 0x14770200, 0x51dd0000, 0x28ef0100, 0x51df0000, 0x028f0500, 0x51e10000, 0x28f10100, 0x51e30000, 0x14790200, 0x51e50000, 0x28f30100, 0x51e70000, 0x0a3d0300, 0x51e90000, 0x28f50100, 0x51eb0000, 0x147b0200, 0x51ed0000, 0x28f70100, 0x51ef0000, 0x051f0400, 0x51f10000, 0x28f90100, 0x51f30000, 0x147d0200, 0x51f50000, 0x28fb0100, 0x51f70000, 0x0a3f0300, 0x51f90000, 0x28fd0100, 0x51fb0000, 0x147f0200, 0x51fd0000, 0x28ff0100, 0x51ff0000, + 0x00293600, 0x52010000, 0x29010100, 0x52030000, 0x14810200, 0x52050000, 0x29030100, 0x52070000, 0x0a410300, 0x52090000, 0x29050100, 0x520b0000, 0x14830200, 0x520d0000, 0x29070100, 0x520f0000, 0x05210400, 0x52110000, 0x29090100, 0x52130000, 0x14850200, 0x52150000, 0x290b0100, 0x52170000, 0x0a430300, 0x52190000, 0x290d0100, 0x521b0000, 0x14870200, 0x521d0000, 0x290f0100, 0x521f0000, 0x02910500, 0x52210000, 0x29110100, 0x52230000, 0x14890200, 0x52250000, 0x29130100, 0x52270000, 0x0a450300, 0x52290000, 0x29150100, 0x522b0000, 0x148b0200, 0x522d0000, 0x29170100, 0x522f0000, 0x05230400, 0x52310000, 0x29190100, 0x52330000, 0x148d0200, 0x52350000, 0x291b0100, 0x52370000, 0x0a470300, 0x52390000, 0x291d0100, 0x523b0000, 0x148f0200, 0x523d0000, 0x291f0100, 0x523f0000, 0x01490600, 0x52410000, 0x29210100, 0x52430000, 0x14910200, 0x52450000, 0x29230100, 0x52470000, 0x0a490300, 0x52490000, 0x29250100, 0x524b0000, 0x14930200, 0x524d0000, 0x29270100, 0x524f0000, 0x05250400, 0x52510000, 0x29290100, 0x52530000, 0x14950200, 0x52550000, 0x292b0100, 0x52570000, 0x0a4b0300, 0x52590000, 0x292d0100, 0x525b0000, 0x14970200, 0x525d0000, 0x292f0100, 0x525f0000, 0x02930500, 0x52610000, 0x29310100, 0x52630000, 0x14990200, 0x52650000, 0x29330100, 0x52670000, 0x0a4d0300, 0x52690000, 0x29350100, 0x526b0000, 0x149b0200, 0x526d0000, 0x29370100, 0x526f0000, 0x05270400, 0x52710000, 0x29390100, 0x52730000, 0x149d0200, 0x52750000, 0x293b0100, 0x52770000, 0x0a4f0300, 0x52790000, 0x293d0100, 0x527b0000, 0x149f0200, 0x527d0000, 0x293f0100, 0x527f0000, 0x00a51600, 0x52810000, 0x29410100, 0x52830000, 0x14a10200, 0x52850000, 0x29430100, 0x52870000, 0x0a510300, 0x52890000, 0x29450100, 0x528b0000, 0x14a30200, 0x528d0000, 0x29470100, 0x528f0000, 0x05290400, 0x52910000, 0x29490100, 0x52930000, 0x14a50200, 0x52950000, 0x294b0100, 0x52970000, 0x0a530300, 0x52990000, 0x294d0100, 0x529b0000, 0x14a70200, 0x529d0000, 0x294f0100, 0x529f0000, 0x02950500, 0x52a10000, 0x29510100, 0x52a30000, 0x14a90200, 0x52a50000, 0x29530100, 0x52a70000, 0x0a550300, 0x52a90000, 0x29550100, 0x52ab0000, 0x14ab0200, 0x52ad0000, 0x29570100, 0x52af0000, 0x052b0400, 0x52b10000, 0x29590100, 0x52b30000, 0x14ad0200, 0x52b50000, 0x295b0100, 0x52b70000, 0x0a570300, 0x52b90000, 0x295d0100, 0x52bb0000, 0x14af0200, 0x52bd0000, 0x295f0100, 0x52bf0000, 0x014b0600, 0x52c10000, 0x29610100, 0x52c30000, 0x14b10200, 0x52c50000, 0x29630100, 0x52c70000, 0x0a590300, 0x52c90000, 0x29650100, 0x52cb0000, 0x14b30200, 0x52cd0000, 0x29670100, 0x52cf0000, 0x052d0400, 0x52d10000, 0x29690100, 0x52d30000, 0x14b50200, 0x52d50000, 0x296b0100, 0x52d70000, 0x0a5b0300, 0x52d90000, 0x296d0100, 0x52db0000, 0x14b70200, 0x52dd0000, 0x296f0100, 0x52df0000, 0x02970500, 0x52e10000, 0x29710100, 0x52e30000, 0x14b90200, 0x52e50000, 0x29730100, 0x52e70000, 0x0a5d0300, 0x52e90000, 0x29750100, 0x52eb0000, 0x14bb0200, 0x52ed0000, 0x29770100, 0x52ef0000, 0x052f0400, 0x52f10000, 0x29790100, 0x52f30000, 0x14bd0200, 0x52f50000, 0x297b0100, 0x52f70000, 0x0a5f0300, 0x52f90000, 0x297d0100, 0x52fb0000, 0x14bf0200, 0x52fd0000, 0x297f0100, 0x52ff0000, + 0x00532600, 0x53010000, 0x29810100, 0x53030000, 0x14c10200, 0x53050000, 0x29830100, 0x53070000, 0x0a610300, 0x53090000, 0x29850100, 0x530b0000, 0x14c30200, 0x530d0000, 0x29870100, 0x530f0000, 0x05310400, 0x53110000, 0x29890100, 0x53130000, 0x14c50200, 0x53150000, 0x298b0100, 0x53170000, 0x0a630300, 0x53190000, 0x298d0100, 0x531b0000, 0x14c70200, 0x531d0000, 0x298f0100, 0x531f0000, 0x02990500, 0x53210000, 0x29910100, 0x53230000, 0x14c90200, 0x53250000, 0x29930100, 0x53270000, 0x0a650300, 0x53290000, 0x29950100, 0x532b0000, 0x14cb0200, 0x532d0000, 0x29970100, 0x532f0000, 0x05330400, 0x53310000, 0x29990100, 0x53330000, 0x14cd0200, 0x53350000, 0x299b0100, 0x53370000, 0x0a670300, 0x53390000, 0x299d0100, 0x533b0000, 0x14cf0200, 0x533d0000, 0x299f0100, 0x533f0000, 0x014d0600, 0x53410000, 0x29a10100, 0x53430000, 0x14d10200, 0x53450000, 0x29a30100, 0x53470000, 0x0a690300, 0x53490000, 0x29a50100, 0x534b0000, 0x14d30200, 0x534d0000, 0x29a70100, 0x534f0000, 0x05350400, 0x53510000, 0x29a90100, 0x53530000, 0x14d50200, 0x53550000, 0x29ab0100, 0x53570000, 0x0a6b0300, 0x53590000, 0x29ad0100, 0x535b0000, 0x14d70200, 0x535d0000, 0x29af0100, 0x535f0000, 0x029b0500, 0x53610000, 0x29b10100, 0x53630000, 0x14d90200, 0x53650000, 0x29b30100, 0x53670000, 0x0a6d0300, 0x53690000, 0x29b50100, 0x536b0000, 0x14db0200, 0x536d0000, 0x29b70100, 0x536f0000, 0x05370400, 0x53710000, 0x29b90100, 0x53730000, 0x14dd0200, 0x53750000, 0x29bb0100, 0x53770000, 0x0a6f0300, 0x53790000, 0x29bd0100, 0x537b0000, 0x14df0200, 0x537d0000, 0x29bf0100, 0x537f0000, 0x00a71600, 0x53810000, 0x29c10100, 0x53830000, 0x14e10200, 0x53850000, 0x29c30100, 0x53870000, 0x0a710300, 0x53890000, 0x29c50100, 0x538b0000, 0x14e30200, 0x538d0000, 0x29c70100, 0x538f0000, 0x05390400, 0x53910000, 0x29c90100, 0x53930000, 0x14e50200, 0x53950000, 0x29cb0100, 0x53970000, 0x0a730300, 0x53990000, 0x29cd0100, 0x539b0000, 0x14e70200, 0x539d0000, 0x29cf0100, 0x539f0000, 0x029d0500, 0x53a10000, 0x29d10100, 0x53a30000, 0x14e90200, 0x53a50000, 0x29d30100, 0x53a70000, 0x0a750300, 0x53a90000, 0x29d50100, 0x53ab0000, 0x14eb0200, 0x53ad0000, 0x29d70100, 0x53af0000, 0x053b0400, 0x53b10000, 0x29d90100, 0x53b30000, 0x14ed0200, 0x53b50000, 0x29db0100, 0x53b70000, 0x0a770300, 0x53b90000, 0x29dd0100, 0x53bb0000, 0x14ef0200, 0x53bd0000, 0x29df0100, 0x53bf0000, 0x014f0600, 0x53c10000, 0x29e10100, 0x53c30000, 0x14f10200, 0x53c50000, 0x29e30100, 0x53c70000, 0x0a790300, 0x53c90000, 0x29e50100, 0x53cb0000, 0x14f30200, 0x53cd0000, 0x29e70100, 0x53cf0000, 0x053d0400, 0x53d10000, 0x29e90100, 0x53d30000, 0x14f50200, 0x53d50000, 0x29eb0100, 0x53d70000, 0x0a7b0300, 0x53d90000, 0x29ed0100, 0x53db0000, 0x14f70200, 0x53dd0000, 0x29ef0100, 0x53df0000, 0x029f0500, 0x53e10000, 0x29f10100, 0x53e30000, 0x14f90200, 0x53e50000, 0x29f30100, 0x53e70000, 0x0a7d0300, 0x53e90000, 0x29f50100, 0x53eb0000, 0x14fb0200, 0x53ed0000, 0x29f70100, 0x53ef0000, 0x053f0400, 0x53f10000, 0x29f90100, 0x53f30000, 0x14fd0200, 0x53f50000, 0x29fb0100, 0x53f70000, 0x0a7f0300, 0x53f90000, 0x29fd0100, 0x53fb0000, 0x14ff0200, 0x53fd0000, 0x29ff0100, 0x53ff0000, + 0x00154600, 0x54010000, 0x2a010100, 0x54030000, 0x15010200, 0x54050000, 0x2a030100, 0x54070000, 0x0a810300, 0x54090000, 0x2a050100, 0x540b0000, 0x15030200, 0x540d0000, 0x2a070100, 0x540f0000, 0x05410400, 0x54110000, 0x2a090100, 0x54130000, 0x15050200, 0x54150000, 0x2a0b0100, 0x54170000, 0x0a830300, 0x54190000, 0x2a0d0100, 0x541b0000, 0x15070200, 0x541d0000, 0x2a0f0100, 0x541f0000, 0x02a10500, 0x54210000, 0x2a110100, 0x54230000, 0x15090200, 0x54250000, 0x2a130100, 0x54270000, 0x0a850300, 0x54290000, 0x2a150100, 0x542b0000, 0x150b0200, 0x542d0000, 0x2a170100, 0x542f0000, 0x05430400, 0x54310000, 0x2a190100, 0x54330000, 0x150d0200, 0x54350000, 0x2a1b0100, 0x54370000, 0x0a870300, 0x54390000, 0x2a1d0100, 0x543b0000, 0x150f0200, 0x543d0000, 0x2a1f0100, 0x543f0000, 0x01510600, 0x54410000, 0x2a210100, 0x54430000, 0x15110200, 0x54450000, 0x2a230100, 0x54470000, 0x0a890300, 0x54490000, 0x2a250100, 0x544b0000, 0x15130200, 0x544d0000, 0x2a270100, 0x544f0000, 0x05450400, 0x54510000, 0x2a290100, 0x54530000, 0x15150200, 0x54550000, 0x2a2b0100, 0x54570000, 0x0a8b0300, 0x54590000, 0x2a2d0100, 0x545b0000, 0x15170200, 0x545d0000, 0x2a2f0100, 0x545f0000, 0x02a30500, 0x54610000, 0x2a310100, 0x54630000, 0x15190200, 0x54650000, 0x2a330100, 0x54670000, 0x0a8d0300, 0x54690000, 0x2a350100, 0x546b0000, 0x151b0200, 0x546d0000, 0x2a370100, 0x546f0000, 0x05470400, 0x54710000, 0x2a390100, 0x54730000, 0x151d0200, 0x54750000, 0x2a3b0100, 0x54770000, 0x0a8f0300, 0x54790000, 0x2a3d0100, 0x547b0000, 0x151f0200, 0x547d0000, 0x2a3f0100, 0x547f0000, 0x00a91600, 0x54810000, 0x2a410100, 0x54830000, 0x15210200, 0x54850000, 0x2a430100, 0x54870000, 0x0a910300, 0x54890000, 0x2a450100, 0x548b0000, 0x15230200, 0x548d0000, 0x2a470100, 0x548f0000, 0x05490400, 0x54910000, 0x2a490100, 0x54930000, 0x15250200, 0x54950000, 0x2a4b0100, 0x54970000, 0x0a930300, 0x54990000, 0x2a4d0100, 0x549b0000, 0x15270200, 0x549d0000, 0x2a4f0100, 0x549f0000, 0x02a50500, 0x54a10000, 0x2a510100, 0x54a30000, 0x15290200, 0x54a50000, 0x2a530100, 0x54a70000, 0x0a950300, 0x54a90000, 0x2a550100, 0x54ab0000, 0x152b0200, 0x54ad0000, 0x2a570100, 0x54af0000, 0x054b0400, 0x54b10000, 0x2a590100, 0x54b30000, 0x152d0200, 0x54b50000, 0x2a5b0100, 0x54b70000, 0x0a970300, 0x54b90000, 0x2a5d0100, 0x54bb0000, 0x152f0200, 0x54bd0000, 0x2a5f0100, 0x54bf0000, 0x01530600, 0x54c10000, 0x2a610100, 0x54c30000, 0x15310200, 0x54c50000, 0x2a630100, 0x54c70000, 0x0a990300, 0x54c90000, 0x2a650100, 0x54cb0000, 0x15330200, 0x54cd0000, 0x2a670100, 0x54cf0000, 0x054d0400, 0x54d10000, 0x2a690100, 0x54d30000, 0x15350200, 0x54d50000, 0x2a6b0100, 0x54d70000, 0x0a9b0300, 0x54d90000, 0x2a6d0100, 0x54db0000, 0x15370200, 0x54dd0000, 0x2a6f0100, 0x54df0000, 0x02a70500, 0x54e10000, 0x2a710100, 0x54e30000, 0x15390200, 0x54e50000, 0x2a730100, 0x54e70000, 0x0a9d0300, 0x54e90000, 0x2a750100, 0x54eb0000, 0x153b0200, 0x54ed0000, 0x2a770100, 0x54ef0000, 0x054f0400, 0x54f10000, 0x2a790100, 0x54f30000, 0x153d0200, 0x54f50000, 0x2a7b0100, 0x54f70000, 0x0a9f0300, 0x54f90000, 0x2a7d0100, 0x54fb0000, 0x153f0200, 0x54fd0000, 0x2a7f0100, 0x54ff0000, + 0x00552600, 0x55010000, 0x2a810100, 0x55030000, 0x15410200, 0x55050000, 0x2a830100, 0x55070000, 0x0aa10300, 0x55090000, 0x2a850100, 0x550b0000, 0x15430200, 0x550d0000, 0x2a870100, 0x550f0000, 0x05510400, 0x55110000, 0x2a890100, 0x55130000, 0x15450200, 0x55150000, 0x2a8b0100, 0x55170000, 0x0aa30300, 0x55190000, 0x2a8d0100, 0x551b0000, 0x15470200, 0x551d0000, 0x2a8f0100, 0x551f0000, 0x02a90500, 0x55210000, 0x2a910100, 0x55230000, 0x15490200, 0x55250000, 0x2a930100, 0x55270000, 0x0aa50300, 0x55290000, 0x2a950100, 0x552b0000, 0x154b0200, 0x552d0000, 0x2a970100, 0x552f0000, 0x05530400, 0x55310000, 0x2a990100, 0x55330000, 0x154d0200, 0x55350000, 0x2a9b0100, 0x55370000, 0x0aa70300, 0x55390000, 0x2a9d0100, 0x553b0000, 0x154f0200, 0x553d0000, 0x2a9f0100, 0x553f0000, 0x01550600, 0x55410000, 0x2aa10100, 0x55430000, 0x15510200, 0x55450000, 0x2aa30100, 0x55470000, 0x0aa90300, 0x55490000, 0x2aa50100, 0x554b0000, 0x15530200, 0x554d0000, 0x2aa70100, 0x554f0000, 0x05550400, 0x55510000, 0x2aa90100, 0x55530000, 0x15550200, 0x55550000, 0x2aab0100, 0x55570000, 0x0aab0300, 0x55590000, 0x2aad0100, 0x555b0000, 0x15570200, 0x555d0000, 0x2aaf0100, 0x555f0000, 0x02ab0500, 0x55610000, 0x2ab10100, 0x55630000, 0x15590200, 0x55650000, 0x2ab30100, 0x55670000, 0x0aad0300, 0x55690000, 0x2ab50100, 0x556b0000, 0x155b0200, 0x556d0000, 0x2ab70100, 0x556f0000, 0x05570400, 0x55710000, 0x2ab90100, 0x55730000, 0x155d0200, 0x55750000, 0x2abb0100, 0x55770000, 0x0aaf0300, 0x55790000, 0x2abd0100, 0x557b0000, 0x155f0200, 0x557d0000, 0x2abf0100, 0x557f0000, 0x00ab1600, 0x55810000, 0x2ac10100, 0x55830000, 0x15610200, 0x55850000, 0x2ac30100, 0x55870000, 0x0ab10300, 0x55890000, 0x2ac50100, 0x558b0000, 0x15630200, 0x558d0000, 0x2ac70100, 0x558f0000, 0x05590400, 0x55910000, 0x2ac90100, 0x55930000, 0x15650200, 0x55950000, 0x2acb0100, 0x55970000, 0x0ab30300, 0x55990000, 0x2acd0100, 0x559b0000, 0x15670200, 0x559d0000, 0x2acf0100, 0x559f0000, 0x02ad0500, 0x55a10000, 0x2ad10100, 0x55a30000, 0x15690200, 0x55a50000, 0x2ad30100, 0x55a70000, 0x0ab50300, 0x55a90000, 0x2ad50100, 0x55ab0000, 0x156b0200, 0x55ad0000, 0x2ad70100, 0x55af0000, 0x055b0400, 0x55b10000, 0x2ad90100, 0x55b30000, 0x156d0200, 0x55b50000, 0x2adb0100, 0x55b70000, 0x0ab70300, 0x55b90000, 0x2add0100, 0x55bb0000, 0x156f0200, 0x55bd0000, 0x2adf0100, 0x55bf0000, 0x01570600, 0x55c10000, 0x2ae10100, 0x55c30000, 0x15710200, 0x55c50000, 0x2ae30100, 0x55c70000, 0x0ab90300, 0x55c90000, 0x2ae50100, 0x55cb0000, 0x15730200, 0x55cd0000, 0x2ae70100, 0x55cf0000, 0x055d0400, 0x55d10000, 0x2ae90100, 0x55d30000, 0x15750200, 0x55d50000, 0x2aeb0100, 0x55d70000, 0x0abb0300, 0x55d90000, 0x2aed0100, 0x55db0000, 0x15770200, 0x55dd0000, 0x2aef0100, 0x55df0000, 0x02af0500, 0x55e10000, 0x2af10100, 0x55e30000, 0x15790200, 0x55e50000, 0x2af30100, 0x55e70000, 0x0abd0300, 0x55e90000, 0x2af50100, 0x55eb0000, 0x157b0200, 0x55ed0000, 0x2af70100, 0x55ef0000, 0x055f0400, 0x55f10000, 0x2af90100, 0x55f30000, 0x157d0200, 0x55f50000, 0x2afb0100, 0x55f70000, 0x0abf0300, 0x55f90000, 0x2afd0100, 0x55fb0000, 0x157f0200, 0x55fd0000, 0x2aff0100, 0x55ff0000, + 0x002b3600, 0x56010000, 0x2b010100, 0x56030000, 0x15810200, 0x56050000, 0x2b030100, 0x56070000, 0x0ac10300, 0x56090000, 0x2b050100, 0x560b0000, 0x15830200, 0x560d0000, 0x2b070100, 0x560f0000, 0x05610400, 0x56110000, 0x2b090100, 0x56130000, 0x15850200, 0x56150000, 0x2b0b0100, 0x56170000, 0x0ac30300, 0x56190000, 0x2b0d0100, 0x561b0000, 0x15870200, 0x561d0000, 0x2b0f0100, 0x561f0000, 0x02b10500, 0x56210000, 0x2b110100, 0x56230000, 0x15890200, 0x56250000, 0x2b130100, 0x56270000, 0x0ac50300, 0x56290000, 0x2b150100, 0x562b0000, 0x158b0200, 0x562d0000, 0x2b170100, 0x562f0000, 0x05630400, 0x56310000, 0x2b190100, 0x56330000, 0x158d0200, 0x56350000, 0x2b1b0100, 0x56370000, 0x0ac70300, 0x56390000, 0x2b1d0100, 0x563b0000, 0x158f0200, 0x563d0000, 0x2b1f0100, 0x563f0000, 0x01590600, 0x56410000, 0x2b210100, 0x56430000, 0x15910200, 0x56450000, 0x2b230100, 0x56470000, 0x0ac90300, 0x56490000, 0x2b250100, 0x564b0000, 0x15930200, 0x564d0000, 0x2b270100, 0x564f0000, 0x05650400, 0x56510000, 0x2b290100, 0x56530000, 0x15950200, 0x56550000, 0x2b2b0100, 0x56570000, 0x0acb0300, 0x56590000, 0x2b2d0100, 0x565b0000, 0x15970200, 0x565d0000, 0x2b2f0100, 0x565f0000, 0x02b30500, 0x56610000, 0x2b310100, 0x56630000, 0x15990200, 0x56650000, 0x2b330100, 0x56670000, 0x0acd0300, 0x56690000, 0x2b350100, 0x566b0000, 0x159b0200, 0x566d0000, 0x2b370100, 0x566f0000, 0x05670400, 0x56710000, 0x2b390100, 0x56730000, 0x159d0200, 0x56750000, 0x2b3b0100, 0x56770000, 0x0acf0300, 0x56790000, 0x2b3d0100, 0x567b0000, 0x159f0200, 0x567d0000, 0x2b3f0100, 0x567f0000, 0x00ad1600, 0x56810000, 0x2b410100, 0x56830000, 0x15a10200, 0x56850000, 0x2b430100, 0x56870000, 0x0ad10300, 0x56890000, 0x2b450100, 0x568b0000, 0x15a30200, 0x568d0000, 0x2b470100, 0x568f0000, 0x05690400, 0x56910000, 0x2b490100, 0x56930000, 0x15a50200, 0x56950000, 0x2b4b0100, 0x56970000, 0x0ad30300, 0x56990000, 0x2b4d0100, 0x569b0000, 0x15a70200, 0x569d0000, 0x2b4f0100, 0x569f0000, 0x02b50500, 0x56a10000, 0x2b510100, 0x56a30000, 0x15a90200, 0x56a50000, 0x2b530100, 0x56a70000, 0x0ad50300, 0x56a90000, 0x2b550100, 0x56ab0000, 0x15ab0200, 0x56ad0000, 0x2b570100, 0x56af0000, 0x056b0400, 0x56b10000, 0x2b590100, 0x56b30000, 0x15ad0200, 0x56b50000, 0x2b5b0100, 0x56b70000, 0x0ad70300, 0x56b90000, 0x2b5d0100, 0x56bb0000, 0x15af0200, 0x56bd0000, 0x2b5f0100, 0x56bf0000, 0x015b0600, 0x56c10000, 0x2b610100, 0x56c30000, 0x15b10200, 0x56c50000, 0x2b630100, 0x56c70000, 0x0ad90300, 0x56c90000, 0x2b650100, 0x56cb0000, 0x15b30200, 0x56cd0000, 0x2b670100, 0x56cf0000, 0x056d0400, 0x56d10000, 0x2b690100, 0x56d30000, 0x15b50200, 0x56d50000, 0x2b6b0100, 0x56d70000, 0x0adb0300, 0x56d90000, 0x2b6d0100, 0x56db0000, 0x15b70200, 0x56dd0000, 0x2b6f0100, 0x56df0000, 0x02b70500, 0x56e10000, 0x2b710100, 0x56e30000, 0x15b90200, 0x56e50000, 0x2b730100, 0x56e70000, 0x0add0300, 0x56e90000, 0x2b750100, 0x56eb0000, 0x15bb0200, 0x56ed0000, 0x2b770100, 0x56ef0000, 0x056f0400, 0x56f10000, 0x2b790100, 0x56f30000, 0x15bd0200, 0x56f50000, 0x2b7b0100, 0x56f70000, 0x0adf0300, 0x56f90000, 0x2b7d0100, 0x56fb0000, 0x15bf0200, 0x56fd0000, 0x2b7f0100, 0x56ff0000, + 0x00572600, 0x57010000, 0x2b810100, 0x57030000, 0x15c10200, 0x57050000, 0x2b830100, 0x57070000, 0x0ae10300, 0x57090000, 0x2b850100, 0x570b0000, 0x15c30200, 0x570d0000, 0x2b870100, 0x570f0000, 0x05710400, 0x57110000, 0x2b890100, 0x57130000, 0x15c50200, 0x57150000, 0x2b8b0100, 0x57170000, 0x0ae30300, 0x57190000, 0x2b8d0100, 0x571b0000, 0x15c70200, 0x571d0000, 0x2b8f0100, 0x571f0000, 0x02b90500, 0x57210000, 0x2b910100, 0x57230000, 0x15c90200, 0x57250000, 0x2b930100, 0x57270000, 0x0ae50300, 0x57290000, 0x2b950100, 0x572b0000, 0x15cb0200, 0x572d0000, 0x2b970100, 0x572f0000, 0x05730400, 0x57310000, 0x2b990100, 0x57330000, 0x15cd0200, 0x57350000, 0x2b9b0100, 0x57370000, 0x0ae70300, 0x57390000, 0x2b9d0100, 0x573b0000, 0x15cf0200, 0x573d0000, 0x2b9f0100, 0x573f0000, 0x015d0600, 0x57410000, 0x2ba10100, 0x57430000, 0x15d10200, 0x57450000, 0x2ba30100, 0x57470000, 0x0ae90300, 0x57490000, 0x2ba50100, 0x574b0000, 0x15d30200, 0x574d0000, 0x2ba70100, 0x574f0000, 0x05750400, 0x57510000, 0x2ba90100, 0x57530000, 0x15d50200, 0x57550000, 0x2bab0100, 0x57570000, 0x0aeb0300, 0x57590000, 0x2bad0100, 0x575b0000, 0x15d70200, 0x575d0000, 0x2baf0100, 0x575f0000, 0x02bb0500, 0x57610000, 0x2bb10100, 0x57630000, 0x15d90200, 0x57650000, 0x2bb30100, 0x57670000, 0x0aed0300, 0x57690000, 0x2bb50100, 0x576b0000, 0x15db0200, 0x576d0000, 0x2bb70100, 0x576f0000, 0x05770400, 0x57710000, 0x2bb90100, 0x57730000, 0x15dd0200, 0x57750000, 0x2bbb0100, 0x57770000, 0x0aef0300, 0x57790000, 0x2bbd0100, 0x577b0000, 0x15df0200, 0x577d0000, 0x2bbf0100, 0x577f0000, 0x00af1600, 0x57810000, 0x2bc10100, 0x57830000, 0x15e10200, 0x57850000, 0x2bc30100, 0x57870000, 0x0af10300, 0x57890000, 0x2bc50100, 0x578b0000, 0x15e30200, 0x578d0000, 0x2bc70100, 0x578f0000, 0x05790400, 0x57910000, 0x2bc90100, 0x57930000, 0x15e50200, 0x57950000, 0x2bcb0100, 0x57970000, 0x0af30300, 0x57990000, 0x2bcd0100, 0x579b0000, 0x15e70200, 0x579d0000, 0x2bcf0100, 0x579f0000, 0x02bd0500, 0x57a10000, 0x2bd10100, 0x57a30000, 0x15e90200, 0x57a50000, 0x2bd30100, 0x57a70000, 0x0af50300, 0x57a90000, 0x2bd50100, 0x57ab0000, 0x15eb0200, 0x57ad0000, 0x2bd70100, 0x57af0000, 0x057b0400, 0x57b10000, 0x2bd90100, 0x57b30000, 0x15ed0200, 0x57b50000, 0x2bdb0100, 0x57b70000, 0x0af70300, 0x57b90000, 0x2bdd0100, 0x57bb0000, 0x15ef0200, 0x57bd0000, 0x2bdf0100, 0x57bf0000, 0x015f0600, 0x57c10000, 0x2be10100, 0x57c30000, 0x15f10200, 0x57c50000, 0x2be30100, 0x57c70000, 0x0af90300, 0x57c90000, 0x2be50100, 0x57cb0000, 0x15f30200, 0x57cd0000, 0x2be70100, 0x57cf0000, 0x057d0400, 0x57d10000, 0x2be90100, 0x57d30000, 0x15f50200, 0x57d50000, 0x2beb0100, 0x57d70000, 0x0afb0300, 0x57d90000, 0x2bed0100, 0x57db0000, 0x15f70200, 0x57dd0000, 0x2bef0100, 0x57df0000, 0x02bf0500, 0x57e10000, 0x2bf10100, 0x57e30000, 0x15f90200, 0x57e50000, 0x2bf30100, 0x57e70000, 0x0afd0300, 0x57e90000, 0x2bf50100, 0x57eb0000, 0x15fb0200, 0x57ed0000, 0x2bf70100, 0x57ef0000, 0x057f0400, 0x57f10000, 0x2bf90100, 0x57f30000, 0x15fd0200, 0x57f50000, 0x2bfb0100, 0x57f70000, 0x0aff0300, 0x57f90000, 0x2bfd0100, 0x57fb0000, 0x15ff0200, 0x57fd0000, 0x2bff0100, 0x57ff0000, + 0x000b5600, 0x58010000, 0x2c010100, 0x58030000, 0x16010200, 0x58050000, 0x2c030100, 0x58070000, 0x0b010300, 0x58090000, 0x2c050100, 0x580b0000, 0x16030200, 0x580d0000, 0x2c070100, 0x580f0000, 0x05810400, 0x58110000, 0x2c090100, 0x58130000, 0x16050200, 0x58150000, 0x2c0b0100, 0x58170000, 0x0b030300, 0x58190000, 0x2c0d0100, 0x581b0000, 0x16070200, 0x581d0000, 0x2c0f0100, 0x581f0000, 0x02c10500, 0x58210000, 0x2c110100, 0x58230000, 0x16090200, 0x58250000, 0x2c130100, 0x58270000, 0x0b050300, 0x58290000, 0x2c150100, 0x582b0000, 0x160b0200, 0x582d0000, 0x2c170100, 0x582f0000, 0x05830400, 0x58310000, 0x2c190100, 0x58330000, 0x160d0200, 0x58350000, 0x2c1b0100, 0x58370000, 0x0b070300, 0x58390000, 0x2c1d0100, 0x583b0000, 0x160f0200, 0x583d0000, 0x2c1f0100, 0x583f0000, 0x01610600, 0x58410000, 0x2c210100, 0x58430000, 0x16110200, 0x58450000, 0x2c230100, 0x58470000, 0x0b090300, 0x58490000, 0x2c250100, 0x584b0000, 0x16130200, 0x584d0000, 0x2c270100, 0x584f0000, 0x05850400, 0x58510000, 0x2c290100, 0x58530000, 0x16150200, 0x58550000, 0x2c2b0100, 0x58570000, 0x0b0b0300, 0x58590000, 0x2c2d0100, 0x585b0000, 0x16170200, 0x585d0000, 0x2c2f0100, 0x585f0000, 0x02c30500, 0x58610000, 0x2c310100, 0x58630000, 0x16190200, 0x58650000, 0x2c330100, 0x58670000, 0x0b0d0300, 0x58690000, 0x2c350100, 0x586b0000, 0x161b0200, 0x586d0000, 0x2c370100, 0x586f0000, 0x05870400, 0x58710000, 0x2c390100, 0x58730000, 0x161d0200, 0x58750000, 0x2c3b0100, 0x58770000, 0x0b0f0300, 0x58790000, 0x2c3d0100, 0x587b0000, 0x161f0200, 0x587d0000, 0x2c3f0100, 0x587f0000, 0x00b11600, 0x58810000, 0x2c410100, 0x58830000, 0x16210200, 0x58850000, 0x2c430100, 0x58870000, 0x0b110300, 0x58890000, 0x2c450100, 0x588b0000, 0x16230200, 0x588d0000, 0x2c470100, 0x588f0000, 0x05890400, 0x58910000, 0x2c490100, 0x58930000, 0x16250200, 0x58950000, 0x2c4b0100, 0x58970000, 0x0b130300, 0x58990000, 0x2c4d0100, 0x589b0000, 0x16270200, 0x589d0000, 0x2c4f0100, 0x589f0000, 0x02c50500, 0x58a10000, 0x2c510100, 0x58a30000, 0x16290200, 0x58a50000, 0x2c530100, 0x58a70000, 0x0b150300, 0x58a90000, 0x2c550100, 0x58ab0000, 0x162b0200, 0x58ad0000, 0x2c570100, 0x58af0000, 0x058b0400, 0x58b10000, 0x2c590100, 0x58b30000, 0x162d0200, 0x58b50000, 0x2c5b0100, 0x58b70000, 0x0b170300, 0x58b90000, 0x2c5d0100, 0x58bb0000, 0x162f0200, 0x58bd0000, 0x2c5f0100, 0x58bf0000, 0x01630600, 0x58c10000, 0x2c610100, 0x58c30000, 0x16310200, 0x58c50000, 0x2c630100, 0x58c70000, 0x0b190300, 0x58c90000, 0x2c650100, 0x58cb0000, 0x16330200, 0x58cd0000, 0x2c670100, 0x58cf0000, 0x058d0400, 0x58d10000, 0x2c690100, 0x58d30000, 0x16350200, 0x58d50000, 0x2c6b0100, 0x58d70000, 0x0b1b0300, 0x58d90000, 0x2c6d0100, 0x58db0000, 0x16370200, 0x58dd0000, 0x2c6f0100, 0x58df0000, 0x02c70500, 0x58e10000, 0x2c710100, 0x58e30000, 0x16390200, 0x58e50000, 0x2c730100, 0x58e70000, 0x0b1d0300, 0x58e90000, 0x2c750100, 0x58eb0000, 0x163b0200, 0x58ed0000, 0x2c770100, 0x58ef0000, 0x058f0400, 0x58f10000, 0x2c790100, 0x58f30000, 0x163d0200, 0x58f50000, 0x2c7b0100, 0x58f70000, 0x0b1f0300, 0x58f90000, 0x2c7d0100, 0x58fb0000, 0x163f0200, 0x58fd0000, 0x2c7f0100, 0x58ff0000, + 0x00592600, 0x59010000, 0x2c810100, 0x59030000, 0x16410200, 0x59050000, 0x2c830100, 0x59070000, 0x0b210300, 0x59090000, 0x2c850100, 0x590b0000, 0x16430200, 0x590d0000, 0x2c870100, 0x590f0000, 0x05910400, 0x59110000, 0x2c890100, 0x59130000, 0x16450200, 0x59150000, 0x2c8b0100, 0x59170000, 0x0b230300, 0x59190000, 0x2c8d0100, 0x591b0000, 0x16470200, 0x591d0000, 0x2c8f0100, 0x591f0000, 0x02c90500, 0x59210000, 0x2c910100, 0x59230000, 0x16490200, 0x59250000, 0x2c930100, 0x59270000, 0x0b250300, 0x59290000, 0x2c950100, 0x592b0000, 0x164b0200, 0x592d0000, 0x2c970100, 0x592f0000, 0x05930400, 0x59310000, 0x2c990100, 0x59330000, 0x164d0200, 0x59350000, 0x2c9b0100, 0x59370000, 0x0b270300, 0x59390000, 0x2c9d0100, 0x593b0000, 0x164f0200, 0x593d0000, 0x2c9f0100, 0x593f0000, 0x01650600, 0x59410000, 0x2ca10100, 0x59430000, 0x16510200, 0x59450000, 0x2ca30100, 0x59470000, 0x0b290300, 0x59490000, 0x2ca50100, 0x594b0000, 0x16530200, 0x594d0000, 0x2ca70100, 0x594f0000, 0x05950400, 0x59510000, 0x2ca90100, 0x59530000, 0x16550200, 0x59550000, 0x2cab0100, 0x59570000, 0x0b2b0300, 0x59590000, 0x2cad0100, 0x595b0000, 0x16570200, 0x595d0000, 0x2caf0100, 0x595f0000, 0x02cb0500, 0x59610000, 0x2cb10100, 0x59630000, 0x16590200, 0x59650000, 0x2cb30100, 0x59670000, 0x0b2d0300, 0x59690000, 0x2cb50100, 0x596b0000, 0x165b0200, 0x596d0000, 0x2cb70100, 0x596f0000, 0x05970400, 0x59710000, 0x2cb90100, 0x59730000, 0x165d0200, 0x59750000, 0x2cbb0100, 0x59770000, 0x0b2f0300, 0x59790000, 0x2cbd0100, 0x597b0000, 0x165f0200, 0x597d0000, 0x2cbf0100, 0x597f0000, 0x00b31600, 0x59810000, 0x2cc10100, 0x59830000, 0x16610200, 0x59850000, 0x2cc30100, 0x59870000, 0x0b310300, 0x59890000, 0x2cc50100, 0x598b0000, 0x16630200, 0x598d0000, 0x2cc70100, 0x598f0000, 0x05990400, 0x59910000, 0x2cc90100, 0x59930000, 0x16650200, 0x59950000, 0x2ccb0100, 0x59970000, 0x0b330300, 0x59990000, 0x2ccd0100, 0x599b0000, 0x16670200, 0x599d0000, 0x2ccf0100, 0x599f0000, 0x02cd0500, 0x59a10000, 0x2cd10100, 0x59a30000, 0x16690200, 0x59a50000, 0x2cd30100, 0x59a70000, 0x0b350300, 0x59a90000, 0x2cd50100, 0x59ab0000, 0x166b0200, 0x59ad0000, 0x2cd70100, 0x59af0000, 0x059b0400, 0x59b10000, 0x2cd90100, 0x59b30000, 0x166d0200, 0x59b50000, 0x2cdb0100, 0x59b70000, 0x0b370300, 0x59b90000, 0x2cdd0100, 0x59bb0000, 0x166f0200, 0x59bd0000, 0x2cdf0100, 0x59bf0000, 0x01670600, 0x59c10000, 0x2ce10100, 0x59c30000, 0x16710200, 0x59c50000, 0x2ce30100, 0x59c70000, 0x0b390300, 0x59c90000, 0x2ce50100, 0x59cb0000, 0x16730200, 0x59cd0000, 0x2ce70100, 0x59cf0000, 0x059d0400, 0x59d10000, 0x2ce90100, 0x59d30000, 0x16750200, 0x59d50000, 0x2ceb0100, 0x59d70000, 0x0b3b0300, 0x59d90000, 0x2ced0100, 0x59db0000, 0x16770200, 0x59dd0000, 0x2cef0100, 0x59df0000, 0x02cf0500, 0x59e10000, 0x2cf10100, 0x59e30000, 0x16790200, 0x59e50000, 0x2cf30100, 0x59e70000, 0x0b3d0300, 0x59e90000, 0x2cf50100, 0x59eb0000, 0x167b0200, 0x59ed0000, 0x2cf70100, 0x59ef0000, 0x059f0400, 0x59f10000, 0x2cf90100, 0x59f30000, 0x167d0200, 0x59f50000, 0x2cfb0100, 0x59f70000, 0x0b3f0300, 0x59f90000, 0x2cfd0100, 0x59fb0000, 0x167f0200, 0x59fd0000, 0x2cff0100, 0x59ff0000, + 0x002d3600, 0x5a010000, 0x2d010100, 0x5a030000, 0x16810200, 0x5a050000, 0x2d030100, 0x5a070000, 0x0b410300, 0x5a090000, 0x2d050100, 0x5a0b0000, 0x16830200, 0x5a0d0000, 0x2d070100, 0x5a0f0000, 0x05a10400, 0x5a110000, 0x2d090100, 0x5a130000, 0x16850200, 0x5a150000, 0x2d0b0100, 0x5a170000, 0x0b430300, 0x5a190000, 0x2d0d0100, 0x5a1b0000, 0x16870200, 0x5a1d0000, 0x2d0f0100, 0x5a1f0000, 0x02d10500, 0x5a210000, 0x2d110100, 0x5a230000, 0x16890200, 0x5a250000, 0x2d130100, 0x5a270000, 0x0b450300, 0x5a290000, 0x2d150100, 0x5a2b0000, 0x168b0200, 0x5a2d0000, 0x2d170100, 0x5a2f0000, 0x05a30400, 0x5a310000, 0x2d190100, 0x5a330000, 0x168d0200, 0x5a350000, 0x2d1b0100, 0x5a370000, 0x0b470300, 0x5a390000, 0x2d1d0100, 0x5a3b0000, 0x168f0200, 0x5a3d0000, 0x2d1f0100, 0x5a3f0000, 0x01690600, 0x5a410000, 0x2d210100, 0x5a430000, 0x16910200, 0x5a450000, 0x2d230100, 0x5a470000, 0x0b490300, 0x5a490000, 0x2d250100, 0x5a4b0000, 0x16930200, 0x5a4d0000, 0x2d270100, 0x5a4f0000, 0x05a50400, 0x5a510000, 0x2d290100, 0x5a530000, 0x16950200, 0x5a550000, 0x2d2b0100, 0x5a570000, 0x0b4b0300, 0x5a590000, 0x2d2d0100, 0x5a5b0000, 0x16970200, 0x5a5d0000, 0x2d2f0100, 0x5a5f0000, 0x02d30500, 0x5a610000, 0x2d310100, 0x5a630000, 0x16990200, 0x5a650000, 0x2d330100, 0x5a670000, 0x0b4d0300, 0x5a690000, 0x2d350100, 0x5a6b0000, 0x169b0200, 0x5a6d0000, 0x2d370100, 0x5a6f0000, 0x05a70400, 0x5a710000, 0x2d390100, 0x5a730000, 0x169d0200, 0x5a750000, 0x2d3b0100, 0x5a770000, 0x0b4f0300, 0x5a790000, 0x2d3d0100, 0x5a7b0000, 0x169f0200, 0x5a7d0000, 0x2d3f0100, 0x5a7f0000, 0x00b51600, 0x5a810000, 0x2d410100, 0x5a830000, 0x16a10200, 0x5a850000, 0x2d430100, 0x5a870000, 0x0b510300, 0x5a890000, 0x2d450100, 0x5a8b0000, 0x16a30200, 0x5a8d0000, 0x2d470100, 0x5a8f0000, 0x05a90400, 0x5a910000, 0x2d490100, 0x5a930000, 0x16a50200, 0x5a950000, 0x2d4b0100, 0x5a970000, 0x0b530300, 0x5a990000, 0x2d4d0100, 0x5a9b0000, 0x16a70200, 0x5a9d0000, 0x2d4f0100, 0x5a9f0000, 0x02d50500, 0x5aa10000, 0x2d510100, 0x5aa30000, 0x16a90200, 0x5aa50000, 0x2d530100, 0x5aa70000, 0x0b550300, 0x5aa90000, 0x2d550100, 0x5aab0000, 0x16ab0200, 0x5aad0000, 0x2d570100, 0x5aaf0000, 0x05ab0400, 0x5ab10000, 0x2d590100, 0x5ab30000, 0x16ad0200, 0x5ab50000, 0x2d5b0100, 0x5ab70000, 0x0b570300, 0x5ab90000, 0x2d5d0100, 0x5abb0000, 0x16af0200, 0x5abd0000, 0x2d5f0100, 0x5abf0000, 0x016b0600, 0x5ac10000, 0x2d610100, 0x5ac30000, 0x16b10200, 0x5ac50000, 0x2d630100, 0x5ac70000, 0x0b590300, 0x5ac90000, 0x2d650100, 0x5acb0000, 0x16b30200, 0x5acd0000, 0x2d670100, 0x5acf0000, 0x05ad0400, 0x5ad10000, 0x2d690100, 0x5ad30000, 0x16b50200, 0x5ad50000, 0x2d6b0100, 0x5ad70000, 0x0b5b0300, 0x5ad90000, 0x2d6d0100, 0x5adb0000, 0x16b70200, 0x5add0000, 0x2d6f0100, 0x5adf0000, 0x02d70500, 0x5ae10000, 0x2d710100, 0x5ae30000, 0x16b90200, 0x5ae50000, 0x2d730100, 0x5ae70000, 0x0b5d0300, 0x5ae90000, 0x2d750100, 0x5aeb0000, 0x16bb0200, 0x5aed0000, 0x2d770100, 0x5aef0000, 0x05af0400, 0x5af10000, 0x2d790100, 0x5af30000, 0x16bd0200, 0x5af50000, 0x2d7b0100, 0x5af70000, 0x0b5f0300, 0x5af90000, 0x2d7d0100, 0x5afb0000, 0x16bf0200, 0x5afd0000, 0x2d7f0100, 0x5aff0000, + 0x005b2600, 0x5b010000, 0x2d810100, 0x5b030000, 0x16c10200, 0x5b050000, 0x2d830100, 0x5b070000, 0x0b610300, 0x5b090000, 0x2d850100, 0x5b0b0000, 0x16c30200, 0x5b0d0000, 0x2d870100, 0x5b0f0000, 0x05b10400, 0x5b110000, 0x2d890100, 0x5b130000, 0x16c50200, 0x5b150000, 0x2d8b0100, 0x5b170000, 0x0b630300, 0x5b190000, 0x2d8d0100, 0x5b1b0000, 0x16c70200, 0x5b1d0000, 0x2d8f0100, 0x5b1f0000, 0x02d90500, 0x5b210000, 0x2d910100, 0x5b230000, 0x16c90200, 0x5b250000, 0x2d930100, 0x5b270000, 0x0b650300, 0x5b290000, 0x2d950100, 0x5b2b0000, 0x16cb0200, 0x5b2d0000, 0x2d970100, 0x5b2f0000, 0x05b30400, 0x5b310000, 0x2d990100, 0x5b330000, 0x16cd0200, 0x5b350000, 0x2d9b0100, 0x5b370000, 0x0b670300, 0x5b390000, 0x2d9d0100, 0x5b3b0000, 0x16cf0200, 0x5b3d0000, 0x2d9f0100, 0x5b3f0000, 0x016d0600, 0x5b410000, 0x2da10100, 0x5b430000, 0x16d10200, 0x5b450000, 0x2da30100, 0x5b470000, 0x0b690300, 0x5b490000, 0x2da50100, 0x5b4b0000, 0x16d30200, 0x5b4d0000, 0x2da70100, 0x5b4f0000, 0x05b50400, 0x5b510000, 0x2da90100, 0x5b530000, 0x16d50200, 0x5b550000, 0x2dab0100, 0x5b570000, 0x0b6b0300, 0x5b590000, 0x2dad0100, 0x5b5b0000, 0x16d70200, 0x5b5d0000, 0x2daf0100, 0x5b5f0000, 0x02db0500, 0x5b610000, 0x2db10100, 0x5b630000, 0x16d90200, 0x5b650000, 0x2db30100, 0x5b670000, 0x0b6d0300, 0x5b690000, 0x2db50100, 0x5b6b0000, 0x16db0200, 0x5b6d0000, 0x2db70100, 0x5b6f0000, 0x05b70400, 0x5b710000, 0x2db90100, 0x5b730000, 0x16dd0200, 0x5b750000, 0x2dbb0100, 0x5b770000, 0x0b6f0300, 0x5b790000, 0x2dbd0100, 0x5b7b0000, 0x16df0200, 0x5b7d0000, 0x2dbf0100, 0x5b7f0000, 0x00b71600, 0x5b810000, 0x2dc10100, 0x5b830000, 0x16e10200, 0x5b850000, 0x2dc30100, 0x5b870000, 0x0b710300, 0x5b890000, 0x2dc50100, 0x5b8b0000, 0x16e30200, 0x5b8d0000, 0x2dc70100, 0x5b8f0000, 0x05b90400, 0x5b910000, 0x2dc90100, 0x5b930000, 0x16e50200, 0x5b950000, 0x2dcb0100, 0x5b970000, 0x0b730300, 0x5b990000, 0x2dcd0100, 0x5b9b0000, 0x16e70200, 0x5b9d0000, 0x2dcf0100, 0x5b9f0000, 0x02dd0500, 0x5ba10000, 0x2dd10100, 0x5ba30000, 0x16e90200, 0x5ba50000, 0x2dd30100, 0x5ba70000, 0x0b750300, 0x5ba90000, 0x2dd50100, 0x5bab0000, 0x16eb0200, 0x5bad0000, 0x2dd70100, 0x5baf0000, 0x05bb0400, 0x5bb10000, 0x2dd90100, 0x5bb30000, 0x16ed0200, 0x5bb50000, 0x2ddb0100, 0x5bb70000, 0x0b770300, 0x5bb90000, 0x2ddd0100, 0x5bbb0000, 0x16ef0200, 0x5bbd0000, 0x2ddf0100, 0x5bbf0000, 0x016f0600, 0x5bc10000, 0x2de10100, 0x5bc30000, 0x16f10200, 0x5bc50000, 0x2de30100, 0x5bc70000, 0x0b790300, 0x5bc90000, 0x2de50100, 0x5bcb0000, 0x16f30200, 0x5bcd0000, 0x2de70100, 0x5bcf0000, 0x05bd0400, 0x5bd10000, 0x2de90100, 0x5bd30000, 0x16f50200, 0x5bd50000, 0x2deb0100, 0x5bd70000, 0x0b7b0300, 0x5bd90000, 0x2ded0100, 0x5bdb0000, 0x16f70200, 0x5bdd0000, 0x2def0100, 0x5bdf0000, 0x02df0500, 0x5be10000, 0x2df10100, 0x5be30000, 0x16f90200, 0x5be50000, 0x2df30100, 0x5be70000, 0x0b7d0300, 0x5be90000, 0x2df50100, 0x5beb0000, 0x16fb0200, 0x5bed0000, 0x2df70100, 0x5bef0000, 0x05bf0400, 0x5bf10000, 0x2df90100, 0x5bf30000, 0x16fd0200, 0x5bf50000, 0x2dfb0100, 0x5bf70000, 0x0b7f0300, 0x5bf90000, 0x2dfd0100, 0x5bfb0000, 0x16ff0200, 0x5bfd0000, 0x2dff0100, 0x5bff0000, + 0x00174600, 0x5c010000, 0x2e010100, 0x5c030000, 0x17010200, 0x5c050000, 0x2e030100, 0x5c070000, 0x0b810300, 0x5c090000, 0x2e050100, 0x5c0b0000, 0x17030200, 0x5c0d0000, 0x2e070100, 0x5c0f0000, 0x05c10400, 0x5c110000, 0x2e090100, 0x5c130000, 0x17050200, 0x5c150000, 0x2e0b0100, 0x5c170000, 0x0b830300, 0x5c190000, 0x2e0d0100, 0x5c1b0000, 0x17070200, 0x5c1d0000, 0x2e0f0100, 0x5c1f0000, 0x02e10500, 0x5c210000, 0x2e110100, 0x5c230000, 0x17090200, 0x5c250000, 0x2e130100, 0x5c270000, 0x0b850300, 0x5c290000, 0x2e150100, 0x5c2b0000, 0x170b0200, 0x5c2d0000, 0x2e170100, 0x5c2f0000, 0x05c30400, 0x5c310000, 0x2e190100, 0x5c330000, 0x170d0200, 0x5c350000, 0x2e1b0100, 0x5c370000, 0x0b870300, 0x5c390000, 0x2e1d0100, 0x5c3b0000, 0x170f0200, 0x5c3d0000, 0x2e1f0100, 0x5c3f0000, 0x01710600, 0x5c410000, 0x2e210100, 0x5c430000, 0x17110200, 0x5c450000, 0x2e230100, 0x5c470000, 0x0b890300, 0x5c490000, 0x2e250100, 0x5c4b0000, 0x17130200, 0x5c4d0000, 0x2e270100, 0x5c4f0000, 0x05c50400, 0x5c510000, 0x2e290100, 0x5c530000, 0x17150200, 0x5c550000, 0x2e2b0100, 0x5c570000, 0x0b8b0300, 0x5c590000, 0x2e2d0100, 0x5c5b0000, 0x17170200, 0x5c5d0000, 0x2e2f0100, 0x5c5f0000, 0x02e30500, 0x5c610000, 0x2e310100, 0x5c630000, 0x17190200, 0x5c650000, 0x2e330100, 0x5c670000, 0x0b8d0300, 0x5c690000, 0x2e350100, 0x5c6b0000, 0x171b0200, 0x5c6d0000, 0x2e370100, 0x5c6f0000, 0x05c70400, 0x5c710000, 0x2e390100, 0x5c730000, 0x171d0200, 0x5c750000, 0x2e3b0100, 0x5c770000, 0x0b8f0300, 0x5c790000, 0x2e3d0100, 0x5c7b0000, 0x171f0200, 0x5c7d0000, 0x2e3f0100, 0x5c7f0000, 0x00b91600, 0x5c810000, 0x2e410100, 0x5c830000, 0x17210200, 0x5c850000, 0x2e430100, 0x5c870000, 0x0b910300, 0x5c890000, 0x2e450100, 0x5c8b0000, 0x17230200, 0x5c8d0000, 0x2e470100, 0x5c8f0000, 0x05c90400, 0x5c910000, 0x2e490100, 0x5c930000, 0x17250200, 0x5c950000, 0x2e4b0100, 0x5c970000, 0x0b930300, 0x5c990000, 0x2e4d0100, 0x5c9b0000, 0x17270200, 0x5c9d0000, 0x2e4f0100, 0x5c9f0000, 0x02e50500, 0x5ca10000, 0x2e510100, 0x5ca30000, 0x17290200, 0x5ca50000, 0x2e530100, 0x5ca70000, 0x0b950300, 0x5ca90000, 0x2e550100, 0x5cab0000, 0x172b0200, 0x5cad0000, 0x2e570100, 0x5caf0000, 0x05cb0400, 0x5cb10000, 0x2e590100, 0x5cb30000, 0x172d0200, 0x5cb50000, 0x2e5b0100, 0x5cb70000, 0x0b970300, 0x5cb90000, 0x2e5d0100, 0x5cbb0000, 0x172f0200, 0x5cbd0000, 0x2e5f0100, 0x5cbf0000, 0x01730600, 0x5cc10000, 0x2e610100, 0x5cc30000, 0x17310200, 0x5cc50000, 0x2e630100, 0x5cc70000, 0x0b990300, 0x5cc90000, 0x2e650100, 0x5ccb0000, 0x17330200, 0x5ccd0000, 0x2e670100, 0x5ccf0000, 0x05cd0400, 0x5cd10000, 0x2e690100, 0x5cd30000, 0x17350200, 0x5cd50000, 0x2e6b0100, 0x5cd70000, 0x0b9b0300, 0x5cd90000, 0x2e6d0100, 0x5cdb0000, 0x17370200, 0x5cdd0000, 0x2e6f0100, 0x5cdf0000, 0x02e70500, 0x5ce10000, 0x2e710100, 0x5ce30000, 0x17390200, 0x5ce50000, 0x2e730100, 0x5ce70000, 0x0b9d0300, 0x5ce90000, 0x2e750100, 0x5ceb0000, 0x173b0200, 0x5ced0000, 0x2e770100, 0x5cef0000, 0x05cf0400, 0x5cf10000, 0x2e790100, 0x5cf30000, 0x173d0200, 0x5cf50000, 0x2e7b0100, 0x5cf70000, 0x0b9f0300, 0x5cf90000, 0x2e7d0100, 0x5cfb0000, 0x173f0200, 0x5cfd0000, 0x2e7f0100, 0x5cff0000, + 0x005d2600, 0x5d010000, 0x2e810100, 0x5d030000, 0x17410200, 0x5d050000, 0x2e830100, 0x5d070000, 0x0ba10300, 0x5d090000, 0x2e850100, 0x5d0b0000, 0x17430200, 0x5d0d0000, 0x2e870100, 0x5d0f0000, 0x05d10400, 0x5d110000, 0x2e890100, 0x5d130000, 0x17450200, 0x5d150000, 0x2e8b0100, 0x5d170000, 0x0ba30300, 0x5d190000, 0x2e8d0100, 0x5d1b0000, 0x17470200, 0x5d1d0000, 0x2e8f0100, 0x5d1f0000, 0x02e90500, 0x5d210000, 0x2e910100, 0x5d230000, 0x17490200, 0x5d250000, 0x2e930100, 0x5d270000, 0x0ba50300, 0x5d290000, 0x2e950100, 0x5d2b0000, 0x174b0200, 0x5d2d0000, 0x2e970100, 0x5d2f0000, 0x05d30400, 0x5d310000, 0x2e990100, 0x5d330000, 0x174d0200, 0x5d350000, 0x2e9b0100, 0x5d370000, 0x0ba70300, 0x5d390000, 0x2e9d0100, 0x5d3b0000, 0x174f0200, 0x5d3d0000, 0x2e9f0100, 0x5d3f0000, 0x01750600, 0x5d410000, 0x2ea10100, 0x5d430000, 0x17510200, 0x5d450000, 0x2ea30100, 0x5d470000, 0x0ba90300, 0x5d490000, 0x2ea50100, 0x5d4b0000, 0x17530200, 0x5d4d0000, 0x2ea70100, 0x5d4f0000, 0x05d50400, 0x5d510000, 0x2ea90100, 0x5d530000, 0x17550200, 0x5d550000, 0x2eab0100, 0x5d570000, 0x0bab0300, 0x5d590000, 0x2ead0100, 0x5d5b0000, 0x17570200, 0x5d5d0000, 0x2eaf0100, 0x5d5f0000, 0x02eb0500, 0x5d610000, 0x2eb10100, 0x5d630000, 0x17590200, 0x5d650000, 0x2eb30100, 0x5d670000, 0x0bad0300, 0x5d690000, 0x2eb50100, 0x5d6b0000, 0x175b0200, 0x5d6d0000, 0x2eb70100, 0x5d6f0000, 0x05d70400, 0x5d710000, 0x2eb90100, 0x5d730000, 0x175d0200, 0x5d750000, 0x2ebb0100, 0x5d770000, 0x0baf0300, 0x5d790000, 0x2ebd0100, 0x5d7b0000, 0x175f0200, 0x5d7d0000, 0x2ebf0100, 0x5d7f0000, 0x00bb1600, 0x5d810000, 0x2ec10100, 0x5d830000, 0x17610200, 0x5d850000, 0x2ec30100, 0x5d870000, 0x0bb10300, 0x5d890000, 0x2ec50100, 0x5d8b0000, 0x17630200, 0x5d8d0000, 0x2ec70100, 0x5d8f0000, 0x05d90400, 0x5d910000, 0x2ec90100, 0x5d930000, 0x17650200, 0x5d950000, 0x2ecb0100, 0x5d970000, 0x0bb30300, 0x5d990000, 0x2ecd0100, 0x5d9b0000, 0x17670200, 0x5d9d0000, 0x2ecf0100, 0x5d9f0000, 0x02ed0500, 0x5da10000, 0x2ed10100, 0x5da30000, 0x17690200, 0x5da50000, 0x2ed30100, 0x5da70000, 0x0bb50300, 0x5da90000, 0x2ed50100, 0x5dab0000, 0x176b0200, 0x5dad0000, 0x2ed70100, 0x5daf0000, 0x05db0400, 0x5db10000, 0x2ed90100, 0x5db30000, 0x176d0200, 0x5db50000, 0x2edb0100, 0x5db70000, 0x0bb70300, 0x5db90000, 0x2edd0100, 0x5dbb0000, 0x176f0200, 0x5dbd0000, 0x2edf0100, 0x5dbf0000, 0x01770600, 0x5dc10000, 0x2ee10100, 0x5dc30000, 0x17710200, 0x5dc50000, 0x2ee30100, 0x5dc70000, 0x0bb90300, 0x5dc90000, 0x2ee50100, 0x5dcb0000, 0x17730200, 0x5dcd0000, 0x2ee70100, 0x5dcf0000, 0x05dd0400, 0x5dd10000, 0x2ee90100, 0x5dd30000, 0x17750200, 0x5dd50000, 0x2eeb0100, 0x5dd70000, 0x0bbb0300, 0x5dd90000, 0x2eed0100, 0x5ddb0000, 0x17770200, 0x5ddd0000, 0x2eef0100, 0x5ddf0000, 0x02ef0500, 0x5de10000, 0x2ef10100, 0x5de30000, 0x17790200, 0x5de50000, 0x2ef30100, 0x5de70000, 0x0bbd0300, 0x5de90000, 0x2ef50100, 0x5deb0000, 0x177b0200, 0x5ded0000, 0x2ef70100, 0x5def0000, 0x05df0400, 0x5df10000, 0x2ef90100, 0x5df30000, 0x177d0200, 0x5df50000, 0x2efb0100, 0x5df70000, 0x0bbf0300, 0x5df90000, 0x2efd0100, 0x5dfb0000, 0x177f0200, 0x5dfd0000, 0x2eff0100, 0x5dff0000, + 0x002f3600, 0x5e010000, 0x2f010100, 0x5e030000, 0x17810200, 0x5e050000, 0x2f030100, 0x5e070000, 0x0bc10300, 0x5e090000, 0x2f050100, 0x5e0b0000, 0x17830200, 0x5e0d0000, 0x2f070100, 0x5e0f0000, 0x05e10400, 0x5e110000, 0x2f090100, 0x5e130000, 0x17850200, 0x5e150000, 0x2f0b0100, 0x5e170000, 0x0bc30300, 0x5e190000, 0x2f0d0100, 0x5e1b0000, 0x17870200, 0x5e1d0000, 0x2f0f0100, 0x5e1f0000, 0x02f10500, 0x5e210000, 0x2f110100, 0x5e230000, 0x17890200, 0x5e250000, 0x2f130100, 0x5e270000, 0x0bc50300, 0x5e290000, 0x2f150100, 0x5e2b0000, 0x178b0200, 0x5e2d0000, 0x2f170100, 0x5e2f0000, 0x05e30400, 0x5e310000, 0x2f190100, 0x5e330000, 0x178d0200, 0x5e350000, 0x2f1b0100, 0x5e370000, 0x0bc70300, 0x5e390000, 0x2f1d0100, 0x5e3b0000, 0x178f0200, 0x5e3d0000, 0x2f1f0100, 0x5e3f0000, 0x01790600, 0x5e410000, 0x2f210100, 0x5e430000, 0x17910200, 0x5e450000, 0x2f230100, 0x5e470000, 0x0bc90300, 0x5e490000, 0x2f250100, 0x5e4b0000, 0x17930200, 0x5e4d0000, 0x2f270100, 0x5e4f0000, 0x05e50400, 0x5e510000, 0x2f290100, 0x5e530000, 0x17950200, 0x5e550000, 0x2f2b0100, 0x5e570000, 0x0bcb0300, 0x5e590000, 0x2f2d0100, 0x5e5b0000, 0x17970200, 0x5e5d0000, 0x2f2f0100, 0x5e5f0000, 0x02f30500, 0x5e610000, 0x2f310100, 0x5e630000, 0x17990200, 0x5e650000, 0x2f330100, 0x5e670000, 0x0bcd0300, 0x5e690000, 0x2f350100, 0x5e6b0000, 0x179b0200, 0x5e6d0000, 0x2f370100, 0x5e6f0000, 0x05e70400, 0x5e710000, 0x2f390100, 0x5e730000, 0x179d0200, 0x5e750000, 0x2f3b0100, 0x5e770000, 0x0bcf0300, 0x5e790000, 0x2f3d0100, 0x5e7b0000, 0x179f0200, 0x5e7d0000, 0x2f3f0100, 0x5e7f0000, 0x00bd1600, 0x5e810000, 0x2f410100, 0x5e830000, 0x17a10200, 0x5e850000, 0x2f430100, 0x5e870000, 0x0bd10300, 0x5e890000, 0x2f450100, 0x5e8b0000, 0x17a30200, 0x5e8d0000, 0x2f470100, 0x5e8f0000, 0x05e90400, 0x5e910000, 0x2f490100, 0x5e930000, 0x17a50200, 0x5e950000, 0x2f4b0100, 0x5e970000, 0x0bd30300, 0x5e990000, 0x2f4d0100, 0x5e9b0000, 0x17a70200, 0x5e9d0000, 0x2f4f0100, 0x5e9f0000, 0x02f50500, 0x5ea10000, 0x2f510100, 0x5ea30000, 0x17a90200, 0x5ea50000, 0x2f530100, 0x5ea70000, 0x0bd50300, 0x5ea90000, 0x2f550100, 0x5eab0000, 0x17ab0200, 0x5ead0000, 0x2f570100, 0x5eaf0000, 0x05eb0400, 0x5eb10000, 0x2f590100, 0x5eb30000, 0x17ad0200, 0x5eb50000, 0x2f5b0100, 0x5eb70000, 0x0bd70300, 0x5eb90000, 0x2f5d0100, 0x5ebb0000, 0x17af0200, 0x5ebd0000, 0x2f5f0100, 0x5ebf0000, 0x017b0600, 0x5ec10000, 0x2f610100, 0x5ec30000, 0x17b10200, 0x5ec50000, 0x2f630100, 0x5ec70000, 0x0bd90300, 0x5ec90000, 0x2f650100, 0x5ecb0000, 0x17b30200, 0x5ecd0000, 0x2f670100, 0x5ecf0000, 0x05ed0400, 0x5ed10000, 0x2f690100, 0x5ed30000, 0x17b50200, 0x5ed50000, 0x2f6b0100, 0x5ed70000, 0x0bdb0300, 0x5ed90000, 0x2f6d0100, 0x5edb0000, 0x17b70200, 0x5edd0000, 0x2f6f0100, 0x5edf0000, 0x02f70500, 0x5ee10000, 0x2f710100, 0x5ee30000, 0x17b90200, 0x5ee50000, 0x2f730100, 0x5ee70000, 0x0bdd0300, 0x5ee90000, 0x2f750100, 0x5eeb0000, 0x17bb0200, 0x5eed0000, 0x2f770100, 0x5eef0000, 0x05ef0400, 0x5ef10000, 0x2f790100, 0x5ef30000, 0x17bd0200, 0x5ef50000, 0x2f7b0100, 0x5ef70000, 0x0bdf0300, 0x5ef90000, 0x2f7d0100, 0x5efb0000, 0x17bf0200, 0x5efd0000, 0x2f7f0100, 0x5eff0000, + 0x005f2600, 0x5f010000, 0x2f810100, 0x5f030000, 0x17c10200, 0x5f050000, 0x2f830100, 0x5f070000, 0x0be10300, 0x5f090000, 0x2f850100, 0x5f0b0000, 0x17c30200, 0x5f0d0000, 0x2f870100, 0x5f0f0000, 0x05f10400, 0x5f110000, 0x2f890100, 0x5f130000, 0x17c50200, 0x5f150000, 0x2f8b0100, 0x5f170000, 0x0be30300, 0x5f190000, 0x2f8d0100, 0x5f1b0000, 0x17c70200, 0x5f1d0000, 0x2f8f0100, 0x5f1f0000, 0x02f90500, 0x5f210000, 0x2f910100, 0x5f230000, 0x17c90200, 0x5f250000, 0x2f930100, 0x5f270000, 0x0be50300, 0x5f290000, 0x2f950100, 0x5f2b0000, 0x17cb0200, 0x5f2d0000, 0x2f970100, 0x5f2f0000, 0x05f30400, 0x5f310000, 0x2f990100, 0x5f330000, 0x17cd0200, 0x5f350000, 0x2f9b0100, 0x5f370000, 0x0be70300, 0x5f390000, 0x2f9d0100, 0x5f3b0000, 0x17cf0200, 0x5f3d0000, 0x2f9f0100, 0x5f3f0000, 0x017d0600, 0x5f410000, 0x2fa10100, 0x5f430000, 0x17d10200, 0x5f450000, 0x2fa30100, 0x5f470000, 0x0be90300, 0x5f490000, 0x2fa50100, 0x5f4b0000, 0x17d30200, 0x5f4d0000, 0x2fa70100, 0x5f4f0000, 0x05f50400, 0x5f510000, 0x2fa90100, 0x5f530000, 0x17d50200, 0x5f550000, 0x2fab0100, 0x5f570000, 0x0beb0300, 0x5f590000, 0x2fad0100, 0x5f5b0000, 0x17d70200, 0x5f5d0000, 0x2faf0100, 0x5f5f0000, 0x02fb0500, 0x5f610000, 0x2fb10100, 0x5f630000, 0x17d90200, 0x5f650000, 0x2fb30100, 0x5f670000, 0x0bed0300, 0x5f690000, 0x2fb50100, 0x5f6b0000, 0x17db0200, 0x5f6d0000, 0x2fb70100, 0x5f6f0000, 0x05f70400, 0x5f710000, 0x2fb90100, 0x5f730000, 0x17dd0200, 0x5f750000, 0x2fbb0100, 0x5f770000, 0x0bef0300, 0x5f790000, 0x2fbd0100, 0x5f7b0000, 0x17df0200, 0x5f7d0000, 0x2fbf0100, 0x5f7f0000, 0x00bf1600, 0x5f810000, 0x2fc10100, 0x5f830000, 0x17e10200, 0x5f850000, 0x2fc30100, 0x5f870000, 0x0bf10300, 0x5f890000, 0x2fc50100, 0x5f8b0000, 0x17e30200, 0x5f8d0000, 0x2fc70100, 0x5f8f0000, 0x05f90400, 0x5f910000, 0x2fc90100, 0x5f930000, 0x17e50200, 0x5f950000, 0x2fcb0100, 0x5f970000, 0x0bf30300, 0x5f990000, 0x2fcd0100, 0x5f9b0000, 0x17e70200, 0x5f9d0000, 0x2fcf0100, 0x5f9f0000, 0x02fd0500, 0x5fa10000, 0x2fd10100, 0x5fa30000, 0x17e90200, 0x5fa50000, 0x2fd30100, 0x5fa70000, 0x0bf50300, 0x5fa90000, 0x2fd50100, 0x5fab0000, 0x17eb0200, 0x5fad0000, 0x2fd70100, 0x5faf0000, 0x05fb0400, 0x5fb10000, 0x2fd90100, 0x5fb30000, 0x17ed0200, 0x5fb50000, 0x2fdb0100, 0x5fb70000, 0x0bf70300, 0x5fb90000, 0x2fdd0100, 0x5fbb0000, 0x17ef0200, 0x5fbd0000, 0x2fdf0100, 0x5fbf0000, 0x017f0600, 0x5fc10000, 0x2fe10100, 0x5fc30000, 0x17f10200, 0x5fc50000, 0x2fe30100, 0x5fc70000, 0x0bf90300, 0x5fc90000, 0x2fe50100, 0x5fcb0000, 0x17f30200, 0x5fcd0000, 0x2fe70100, 0x5fcf0000, 0x05fd0400, 0x5fd10000, 0x2fe90100, 0x5fd30000, 0x17f50200, 0x5fd50000, 0x2feb0100, 0x5fd70000, 0x0bfb0300, 0x5fd90000, 0x2fed0100, 0x5fdb0000, 0x17f70200, 0x5fdd0000, 0x2fef0100, 0x5fdf0000, 0x02ff0500, 0x5fe10000, 0x2ff10100, 0x5fe30000, 0x17f90200, 0x5fe50000, 0x2ff30100, 0x5fe70000, 0x0bfd0300, 0x5fe90000, 0x2ff50100, 0x5feb0000, 0x17fb0200, 0x5fed0000, 0x2ff70100, 0x5fef0000, 0x05ff0400, 0x5ff10000, 0x2ff90100, 0x5ff30000, 0x17fd0200, 0x5ff50000, 0x2ffb0100, 0x5ff70000, 0x0bff0300, 0x5ff90000, 0x2ffd0100, 0x5ffb0000, 0x17ff0200, 0x5ffd0000, 0x2fff0100, 0x5fff0000, + 0x00037600, 0x60010000, 0x30010100, 0x60030000, 0x18010200, 0x60050000, 0x30030100, 0x60070000, 0x0c010300, 0x60090000, 0x30050100, 0x600b0000, 0x18030200, 0x600d0000, 0x30070100, 0x600f0000, 0x06010400, 0x60110000, 0x30090100, 0x60130000, 0x18050200, 0x60150000, 0x300b0100, 0x60170000, 0x0c030300, 0x60190000, 0x300d0100, 0x601b0000, 0x18070200, 0x601d0000, 0x300f0100, 0x601f0000, 0x03010500, 0x60210000, 0x30110100, 0x60230000, 0x18090200, 0x60250000, 0x30130100, 0x60270000, 0x0c050300, 0x60290000, 0x30150100, 0x602b0000, 0x180b0200, 0x602d0000, 0x30170100, 0x602f0000, 0x06030400, 0x60310000, 0x30190100, 0x60330000, 0x180d0200, 0x60350000, 0x301b0100, 0x60370000, 0x0c070300, 0x60390000, 0x301d0100, 0x603b0000, 0x180f0200, 0x603d0000, 0x301f0100, 0x603f0000, 0x01810600, 0x60410000, 0x30210100, 0x60430000, 0x18110200, 0x60450000, 0x30230100, 0x60470000, 0x0c090300, 0x60490000, 0x30250100, 0x604b0000, 0x18130200, 0x604d0000, 0x30270100, 0x604f0000, 0x06050400, 0x60510000, 0x30290100, 0x60530000, 0x18150200, 0x60550000, 0x302b0100, 0x60570000, 0x0c0b0300, 0x60590000, 0x302d0100, 0x605b0000, 0x18170200, 0x605d0000, 0x302f0100, 0x605f0000, 0x03030500, 0x60610000, 0x30310100, 0x60630000, 0x18190200, 0x60650000, 0x30330100, 0x60670000, 0x0c0d0300, 0x60690000, 0x30350100, 0x606b0000, 0x181b0200, 0x606d0000, 0x30370100, 0x606f0000, 0x06070400, 0x60710000, 0x30390100, 0x60730000, 0x181d0200, 0x60750000, 0x303b0100, 0x60770000, 0x0c0f0300, 0x60790000, 0x303d0100, 0x607b0000, 0x181f0200, 0x607d0000, 0x303f0100, 0x607f0000, 0x00c11600, 0x60810000, 0x30410100, 0x60830000, 0x18210200, 0x60850000, 0x30430100, 0x60870000, 0x0c110300, 0x60890000, 0x30450100, 0x608b0000, 0x18230200, 0x608d0000, 0x30470100, 0x608f0000, 0x06090400, 0x60910000, 0x30490100, 0x60930000, 0x18250200, 0x60950000, 0x304b0100, 0x60970000, 0x0c130300, 0x60990000, 0x304d0100, 0x609b0000, 0x18270200, 0x609d0000, 0x304f0100, 0x609f0000, 0x03050500, 0x60a10000, 0x30510100, 0x60a30000, 0x18290200, 0x60a50000, 0x30530100, 0x60a70000, 0x0c150300, 0x60a90000, 0x30550100, 0x60ab0000, 0x182b0200, 0x60ad0000, 0x30570100, 0x60af0000, 0x060b0400, 0x60b10000, 0x30590100, 0x60b30000, 0x182d0200, 0x60b50000, 0x305b0100, 0x60b70000, 0x0c170300, 0x60b90000, 0x305d0100, 0x60bb0000, 0x182f0200, 0x60bd0000, 0x305f0100, 0x60bf0000, 0x01830600, 0x60c10000, 0x30610100, 0x60c30000, 0x18310200, 0x60c50000, 0x30630100, 0x60c70000, 0x0c190300, 0x60c90000, 0x30650100, 0x60cb0000, 0x18330200, 0x60cd0000, 0x30670100, 0x60cf0000, 0x060d0400, 0x60d10000, 0x30690100, 0x60d30000, 0x18350200, 0x60d50000, 0x306b0100, 0x60d70000, 0x0c1b0300, 0x60d90000, 0x306d0100, 0x60db0000, 0x18370200, 0x60dd0000, 0x306f0100, 0x60df0000, 0x03070500, 0x60e10000, 0x30710100, 0x60e30000, 0x18390200, 0x60e50000, 0x30730100, 0x60e70000, 0x0c1d0300, 0x60e90000, 0x30750100, 0x60eb0000, 0x183b0200, 0x60ed0000, 0x30770100, 0x60ef0000, 0x060f0400, 0x60f10000, 0x30790100, 0x60f30000, 0x183d0200, 0x60f50000, 0x307b0100, 0x60f70000, 0x0c1f0300, 0x60f90000, 0x307d0100, 0x60fb0000, 0x183f0200, 0x60fd0000, 0x307f0100, 0x60ff0000, + 0x00612600, 0x61010000, 0x30810100, 0x61030000, 0x18410200, 0x61050000, 0x30830100, 0x61070000, 0x0c210300, 0x61090000, 0x30850100, 0x610b0000, 0x18430200, 0x610d0000, 0x30870100, 0x610f0000, 0x06110400, 0x61110000, 0x30890100, 0x61130000, 0x18450200, 0x61150000, 0x308b0100, 0x61170000, 0x0c230300, 0x61190000, 0x308d0100, 0x611b0000, 0x18470200, 0x611d0000, 0x308f0100, 0x611f0000, 0x03090500, 0x61210000, 0x30910100, 0x61230000, 0x18490200, 0x61250000, 0x30930100, 0x61270000, 0x0c250300, 0x61290000, 0x30950100, 0x612b0000, 0x184b0200, 0x612d0000, 0x30970100, 0x612f0000, 0x06130400, 0x61310000, 0x30990100, 0x61330000, 0x184d0200, 0x61350000, 0x309b0100, 0x61370000, 0x0c270300, 0x61390000, 0x309d0100, 0x613b0000, 0x184f0200, 0x613d0000, 0x309f0100, 0x613f0000, 0x01850600, 0x61410000, 0x30a10100, 0x61430000, 0x18510200, 0x61450000, 0x30a30100, 0x61470000, 0x0c290300, 0x61490000, 0x30a50100, 0x614b0000, 0x18530200, 0x614d0000, 0x30a70100, 0x614f0000, 0x06150400, 0x61510000, 0x30a90100, 0x61530000, 0x18550200, 0x61550000, 0x30ab0100, 0x61570000, 0x0c2b0300, 0x61590000, 0x30ad0100, 0x615b0000, 0x18570200, 0x615d0000, 0x30af0100, 0x615f0000, 0x030b0500, 0x61610000, 0x30b10100, 0x61630000, 0x18590200, 0x61650000, 0x30b30100, 0x61670000, 0x0c2d0300, 0x61690000, 0x30b50100, 0x616b0000, 0x185b0200, 0x616d0000, 0x30b70100, 0x616f0000, 0x06170400, 0x61710000, 0x30b90100, 0x61730000, 0x185d0200, 0x61750000, 0x30bb0100, 0x61770000, 0x0c2f0300, 0x61790000, 0x30bd0100, 0x617b0000, 0x185f0200, 0x617d0000, 0x30bf0100, 0x617f0000, 0x00c31600, 0x61810000, 0x30c10100, 0x61830000, 0x18610200, 0x61850000, 0x30c30100, 0x61870000, 0x0c310300, 0x61890000, 0x30c50100, 0x618b0000, 0x18630200, 0x618d0000, 0x30c70100, 0x618f0000, 0x06190400, 0x61910000, 0x30c90100, 0x61930000, 0x18650200, 0x61950000, 0x30cb0100, 0x61970000, 0x0c330300, 0x61990000, 0x30cd0100, 0x619b0000, 0x18670200, 0x619d0000, 0x30cf0100, 0x619f0000, 0x030d0500, 0x61a10000, 0x30d10100, 0x61a30000, 0x18690200, 0x61a50000, 0x30d30100, 0x61a70000, 0x0c350300, 0x61a90000, 0x30d50100, 0x61ab0000, 0x186b0200, 0x61ad0000, 0x30d70100, 0x61af0000, 0x061b0400, 0x61b10000, 0x30d90100, 0x61b30000, 0x186d0200, 0x61b50000, 0x30db0100, 0x61b70000, 0x0c370300, 0x61b90000, 0x30dd0100, 0x61bb0000, 0x186f0200, 0x61bd0000, 0x30df0100, 0x61bf0000, 0x01870600, 0x61c10000, 0x30e10100, 0x61c30000, 0x18710200, 0x61c50000, 0x30e30100, 0x61c70000, 0x0c390300, 0x61c90000, 0x30e50100, 0x61cb0000, 0x18730200, 0x61cd0000, 0x30e70100, 0x61cf0000, 0x061d0400, 0x61d10000, 0x30e90100, 0x61d30000, 0x18750200, 0x61d50000, 0x30eb0100, 0x61d70000, 0x0c3b0300, 0x61d90000, 0x30ed0100, 0x61db0000, 0x18770200, 0x61dd0000, 0x30ef0100, 0x61df0000, 0x030f0500, 0x61e10000, 0x30f10100, 0x61e30000, 0x18790200, 0x61e50000, 0x30f30100, 0x61e70000, 0x0c3d0300, 0x61e90000, 0x30f50100, 0x61eb0000, 0x187b0200, 0x61ed0000, 0x30f70100, 0x61ef0000, 0x061f0400, 0x61f10000, 0x30f90100, 0x61f30000, 0x187d0200, 0x61f50000, 0x30fb0100, 0x61f70000, 0x0c3f0300, 0x61f90000, 0x30fd0100, 0x61fb0000, 0x187f0200, 0x61fd0000, 0x30ff0100, 0x61ff0000, + 0x00313600, 0x62010000, 0x31010100, 0x62030000, 0x18810200, 0x62050000, 0x31030100, 0x62070000, 0x0c410300, 0x62090000, 0x31050100, 0x620b0000, 0x18830200, 0x620d0000, 0x31070100, 0x620f0000, 0x06210400, 0x62110000, 0x31090100, 0x62130000, 0x18850200, 0x62150000, 0x310b0100, 0x62170000, 0x0c430300, 0x62190000, 0x310d0100, 0x621b0000, 0x18870200, 0x621d0000, 0x310f0100, 0x621f0000, 0x03110500, 0x62210000, 0x31110100, 0x62230000, 0x18890200, 0x62250000, 0x31130100, 0x62270000, 0x0c450300, 0x62290000, 0x31150100, 0x622b0000, 0x188b0200, 0x622d0000, 0x31170100, 0x622f0000, 0x06230400, 0x62310000, 0x31190100, 0x62330000, 0x188d0200, 0x62350000, 0x311b0100, 0x62370000, 0x0c470300, 0x62390000, 0x311d0100, 0x623b0000, 0x188f0200, 0x623d0000, 0x311f0100, 0x623f0000, 0x01890600, 0x62410000, 0x31210100, 0x62430000, 0x18910200, 0x62450000, 0x31230100, 0x62470000, 0x0c490300, 0x62490000, 0x31250100, 0x624b0000, 0x18930200, 0x624d0000, 0x31270100, 0x624f0000, 0x06250400, 0x62510000, 0x31290100, 0x62530000, 0x18950200, 0x62550000, 0x312b0100, 0x62570000, 0x0c4b0300, 0x62590000, 0x312d0100, 0x625b0000, 0x18970200, 0x625d0000, 0x312f0100, 0x625f0000, 0x03130500, 0x62610000, 0x31310100, 0x62630000, 0x18990200, 0x62650000, 0x31330100, 0x62670000, 0x0c4d0300, 0x62690000, 0x31350100, 0x626b0000, 0x189b0200, 0x626d0000, 0x31370100, 0x626f0000, 0x06270400, 0x62710000, 0x31390100, 0x62730000, 0x189d0200, 0x62750000, 0x313b0100, 0x62770000, 0x0c4f0300, 0x62790000, 0x313d0100, 0x627b0000, 0x189f0200, 0x627d0000, 0x313f0100, 0x627f0000, 0x00c51600, 0x62810000, 0x31410100, 0x62830000, 0x18a10200, 0x62850000, 0x31430100, 0x62870000, 0x0c510300, 0x62890000, 0x31450100, 0x628b0000, 0x18a30200, 0x628d0000, 0x31470100, 0x628f0000, 0x06290400, 0x62910000, 0x31490100, 0x62930000, 0x18a50200, 0x62950000, 0x314b0100, 0x62970000, 0x0c530300, 0x62990000, 0x314d0100, 0x629b0000, 0x18a70200, 0x629d0000, 0x314f0100, 0x629f0000, 0x03150500, 0x62a10000, 0x31510100, 0x62a30000, 0x18a90200, 0x62a50000, 0x31530100, 0x62a70000, 0x0c550300, 0x62a90000, 0x31550100, 0x62ab0000, 0x18ab0200, 0x62ad0000, 0x31570100, 0x62af0000, 0x062b0400, 0x62b10000, 0x31590100, 0x62b30000, 0x18ad0200, 0x62b50000, 0x315b0100, 0x62b70000, 0x0c570300, 0x62b90000, 0x315d0100, 0x62bb0000, 0x18af0200, 0x62bd0000, 0x315f0100, 0x62bf0000, 0x018b0600, 0x62c10000, 0x31610100, 0x62c30000, 0x18b10200, 0x62c50000, 0x31630100, 0x62c70000, 0x0c590300, 0x62c90000, 0x31650100, 0x62cb0000, 0x18b30200, 0x62cd0000, 0x31670100, 0x62cf0000, 0x062d0400, 0x62d10000, 0x31690100, 0x62d30000, 0x18b50200, 0x62d50000, 0x316b0100, 0x62d70000, 0x0c5b0300, 0x62d90000, 0x316d0100, 0x62db0000, 0x18b70200, 0x62dd0000, 0x316f0100, 0x62df0000, 0x03170500, 0x62e10000, 0x31710100, 0x62e30000, 0x18b90200, 0x62e50000, 0x31730100, 0x62e70000, 0x0c5d0300, 0x62e90000, 0x31750100, 0x62eb0000, 0x18bb0200, 0x62ed0000, 0x31770100, 0x62ef0000, 0x062f0400, 0x62f10000, 0x31790100, 0x62f30000, 0x18bd0200, 0x62f50000, 0x317b0100, 0x62f70000, 0x0c5f0300, 0x62f90000, 0x317d0100, 0x62fb0000, 0x18bf0200, 0x62fd0000, 0x317f0100, 0x62ff0000, + 0x00632600, 0x63010000, 0x31810100, 0x63030000, 0x18c10200, 0x63050000, 0x31830100, 0x63070000, 0x0c610300, 0x63090000, 0x31850100, 0x630b0000, 0x18c30200, 0x630d0000, 0x31870100, 0x630f0000, 0x06310400, 0x63110000, 0x31890100, 0x63130000, 0x18c50200, 0x63150000, 0x318b0100, 0x63170000, 0x0c630300, 0x63190000, 0x318d0100, 0x631b0000, 0x18c70200, 0x631d0000, 0x318f0100, 0x631f0000, 0x03190500, 0x63210000, 0x31910100, 0x63230000, 0x18c90200, 0x63250000, 0x31930100, 0x63270000, 0x0c650300, 0x63290000, 0x31950100, 0x632b0000, 0x18cb0200, 0x632d0000, 0x31970100, 0x632f0000, 0x06330400, 0x63310000, 0x31990100, 0x63330000, 0x18cd0200, 0x63350000, 0x319b0100, 0x63370000, 0x0c670300, 0x63390000, 0x319d0100, 0x633b0000, 0x18cf0200, 0x633d0000, 0x319f0100, 0x633f0000, 0x018d0600, 0x63410000, 0x31a10100, 0x63430000, 0x18d10200, 0x63450000, 0x31a30100, 0x63470000, 0x0c690300, 0x63490000, 0x31a50100, 0x634b0000, 0x18d30200, 0x634d0000, 0x31a70100, 0x634f0000, 0x06350400, 0x63510000, 0x31a90100, 0x63530000, 0x18d50200, 0x63550000, 0x31ab0100, 0x63570000, 0x0c6b0300, 0x63590000, 0x31ad0100, 0x635b0000, 0x18d70200, 0x635d0000, 0x31af0100, 0x635f0000, 0x031b0500, 0x63610000, 0x31b10100, 0x63630000, 0x18d90200, 0x63650000, 0x31b30100, 0x63670000, 0x0c6d0300, 0x63690000, 0x31b50100, 0x636b0000, 0x18db0200, 0x636d0000, 0x31b70100, 0x636f0000, 0x06370400, 0x63710000, 0x31b90100, 0x63730000, 0x18dd0200, 0x63750000, 0x31bb0100, 0x63770000, 0x0c6f0300, 0x63790000, 0x31bd0100, 0x637b0000, 0x18df0200, 0x637d0000, 0x31bf0100, 0x637f0000, 0x00c71600, 0x63810000, 0x31c10100, 0x63830000, 0x18e10200, 0x63850000, 0x31c30100, 0x63870000, 0x0c710300, 0x63890000, 0x31c50100, 0x638b0000, 0x18e30200, 0x638d0000, 0x31c70100, 0x638f0000, 0x06390400, 0x63910000, 0x31c90100, 0x63930000, 0x18e50200, 0x63950000, 0x31cb0100, 0x63970000, 0x0c730300, 0x63990000, 0x31cd0100, 0x639b0000, 0x18e70200, 0x639d0000, 0x31cf0100, 0x639f0000, 0x031d0500, 0x63a10000, 0x31d10100, 0x63a30000, 0x18e90200, 0x63a50000, 0x31d30100, 0x63a70000, 0x0c750300, 0x63a90000, 0x31d50100, 0x63ab0000, 0x18eb0200, 0x63ad0000, 0x31d70100, 0x63af0000, 0x063b0400, 0x63b10000, 0x31d90100, 0x63b30000, 0x18ed0200, 0x63b50000, 0x31db0100, 0x63b70000, 0x0c770300, 0x63b90000, 0x31dd0100, 0x63bb0000, 0x18ef0200, 0x63bd0000, 0x31df0100, 0x63bf0000, 0x018f0600, 0x63c10000, 0x31e10100, 0x63c30000, 0x18f10200, 0x63c50000, 0x31e30100, 0x63c70000, 0x0c790300, 0x63c90000, 0x31e50100, 0x63cb0000, 0x18f30200, 0x63cd0000, 0x31e70100, 0x63cf0000, 0x063d0400, 0x63d10000, 0x31e90100, 0x63d30000, 0x18f50200, 0x63d50000, 0x31eb0100, 0x63d70000, 0x0c7b0300, 0x63d90000, 0x31ed0100, 0x63db0000, 0x18f70200, 0x63dd0000, 0x31ef0100, 0x63df0000, 0x031f0500, 0x63e10000, 0x31f10100, 0x63e30000, 0x18f90200, 0x63e50000, 0x31f30100, 0x63e70000, 0x0c7d0300, 0x63e90000, 0x31f50100, 0x63eb0000, 0x18fb0200, 0x63ed0000, 0x31f70100, 0x63ef0000, 0x063f0400, 0x63f10000, 0x31f90100, 0x63f30000, 0x18fd0200, 0x63f50000, 0x31fb0100, 0x63f70000, 0x0c7f0300, 0x63f90000, 0x31fd0100, 0x63fb0000, 0x18ff0200, 0x63fd0000, 0x31ff0100, 0x63ff0000, + 0x00194600, 0x64010000, 0x32010100, 0x64030000, 0x19010200, 0x64050000, 0x32030100, 0x64070000, 0x0c810300, 0x64090000, 0x32050100, 0x640b0000, 0x19030200, 0x640d0000, 0x32070100, 0x640f0000, 0x06410400, 0x64110000, 0x32090100, 0x64130000, 0x19050200, 0x64150000, 0x320b0100, 0x64170000, 0x0c830300, 0x64190000, 0x320d0100, 0x641b0000, 0x19070200, 0x641d0000, 0x320f0100, 0x641f0000, 0x03210500, 0x64210000, 0x32110100, 0x64230000, 0x19090200, 0x64250000, 0x32130100, 0x64270000, 0x0c850300, 0x64290000, 0x32150100, 0x642b0000, 0x190b0200, 0x642d0000, 0x32170100, 0x642f0000, 0x06430400, 0x64310000, 0x32190100, 0x64330000, 0x190d0200, 0x64350000, 0x321b0100, 0x64370000, 0x0c870300, 0x64390000, 0x321d0100, 0x643b0000, 0x190f0200, 0x643d0000, 0x321f0100, 0x643f0000, 0x01910600, 0x64410000, 0x32210100, 0x64430000, 0x19110200, 0x64450000, 0x32230100, 0x64470000, 0x0c890300, 0x64490000, 0x32250100, 0x644b0000, 0x19130200, 0x644d0000, 0x32270100, 0x644f0000, 0x06450400, 0x64510000, 0x32290100, 0x64530000, 0x19150200, 0x64550000, 0x322b0100, 0x64570000, 0x0c8b0300, 0x64590000, 0x322d0100, 0x645b0000, 0x19170200, 0x645d0000, 0x322f0100, 0x645f0000, 0x03230500, 0x64610000, 0x32310100, 0x64630000, 0x19190200, 0x64650000, 0x32330100, 0x64670000, 0x0c8d0300, 0x64690000, 0x32350100, 0x646b0000, 0x191b0200, 0x646d0000, 0x32370100, 0x646f0000, 0x06470400, 0x64710000, 0x32390100, 0x64730000, 0x191d0200, 0x64750000, 0x323b0100, 0x64770000, 0x0c8f0300, 0x64790000, 0x323d0100, 0x647b0000, 0x191f0200, 0x647d0000, 0x323f0100, 0x647f0000, 0x00c91600, 0x64810000, 0x32410100, 0x64830000, 0x19210200, 0x64850000, 0x32430100, 0x64870000, 0x0c910300, 0x64890000, 0x32450100, 0x648b0000, 0x19230200, 0x648d0000, 0x32470100, 0x648f0000, 0x06490400, 0x64910000, 0x32490100, 0x64930000, 0x19250200, 0x64950000, 0x324b0100, 0x64970000, 0x0c930300, 0x64990000, 0x324d0100, 0x649b0000, 0x19270200, 0x649d0000, 0x324f0100, 0x649f0000, 0x03250500, 0x64a10000, 0x32510100, 0x64a30000, 0x19290200, 0x64a50000, 0x32530100, 0x64a70000, 0x0c950300, 0x64a90000, 0x32550100, 0x64ab0000, 0x192b0200, 0x64ad0000, 0x32570100, 0x64af0000, 0x064b0400, 0x64b10000, 0x32590100, 0x64b30000, 0x192d0200, 0x64b50000, 0x325b0100, 0x64b70000, 0x0c970300, 0x64b90000, 0x325d0100, 0x64bb0000, 0x192f0200, 0x64bd0000, 0x325f0100, 0x64bf0000, 0x01930600, 0x64c10000, 0x32610100, 0x64c30000, 0x19310200, 0x64c50000, 0x32630100, 0x64c70000, 0x0c990300, 0x64c90000, 0x32650100, 0x64cb0000, 0x19330200, 0x64cd0000, 0x32670100, 0x64cf0000, 0x064d0400, 0x64d10000, 0x32690100, 0x64d30000, 0x19350200, 0x64d50000, 0x326b0100, 0x64d70000, 0x0c9b0300, 0x64d90000, 0x326d0100, 0x64db0000, 0x19370200, 0x64dd0000, 0x326f0100, 0x64df0000, 0x03270500, 0x64e10000, 0x32710100, 0x64e30000, 0x19390200, 0x64e50000, 0x32730100, 0x64e70000, 0x0c9d0300, 0x64e90000, 0x32750100, 0x64eb0000, 0x193b0200, 0x64ed0000, 0x32770100, 0x64ef0000, 0x064f0400, 0x64f10000, 0x32790100, 0x64f30000, 0x193d0200, 0x64f50000, 0x327b0100, 0x64f70000, 0x0c9f0300, 0x64f90000, 0x327d0100, 0x64fb0000, 0x193f0200, 0x64fd0000, 0x327f0100, 0x64ff0000, + 0x00652600, 0x65010000, 0x32810100, 0x65030000, 0x19410200, 0x65050000, 0x32830100, 0x65070000, 0x0ca10300, 0x65090000, 0x32850100, 0x650b0000, 0x19430200, 0x650d0000, 0x32870100, 0x650f0000, 0x06510400, 0x65110000, 0x32890100, 0x65130000, 0x19450200, 0x65150000, 0x328b0100, 0x65170000, 0x0ca30300, 0x65190000, 0x328d0100, 0x651b0000, 0x19470200, 0x651d0000, 0x328f0100, 0x651f0000, 0x03290500, 0x65210000, 0x32910100, 0x65230000, 0x19490200, 0x65250000, 0x32930100, 0x65270000, 0x0ca50300, 0x65290000, 0x32950100, 0x652b0000, 0x194b0200, 0x652d0000, 0x32970100, 0x652f0000, 0x06530400, 0x65310000, 0x32990100, 0x65330000, 0x194d0200, 0x65350000, 0x329b0100, 0x65370000, 0x0ca70300, 0x65390000, 0x329d0100, 0x653b0000, 0x194f0200, 0x653d0000, 0x329f0100, 0x653f0000, 0x01950600, 0x65410000, 0x32a10100, 0x65430000, 0x19510200, 0x65450000, 0x32a30100, 0x65470000, 0x0ca90300, 0x65490000, 0x32a50100, 0x654b0000, 0x19530200, 0x654d0000, 0x32a70100, 0x654f0000, 0x06550400, 0x65510000, 0x32a90100, 0x65530000, 0x19550200, 0x65550000, 0x32ab0100, 0x65570000, 0x0cab0300, 0x65590000, 0x32ad0100, 0x655b0000, 0x19570200, 0x655d0000, 0x32af0100, 0x655f0000, 0x032b0500, 0x65610000, 0x32b10100, 0x65630000, 0x19590200, 0x65650000, 0x32b30100, 0x65670000, 0x0cad0300, 0x65690000, 0x32b50100, 0x656b0000, 0x195b0200, 0x656d0000, 0x32b70100, 0x656f0000, 0x06570400, 0x65710000, 0x32b90100, 0x65730000, 0x195d0200, 0x65750000, 0x32bb0100, 0x65770000, 0x0caf0300, 0x65790000, 0x32bd0100, 0x657b0000, 0x195f0200, 0x657d0000, 0x32bf0100, 0x657f0000, 0x00cb1600, 0x65810000, 0x32c10100, 0x65830000, 0x19610200, 0x65850000, 0x32c30100, 0x65870000, 0x0cb10300, 0x65890000, 0x32c50100, 0x658b0000, 0x19630200, 0x658d0000, 0x32c70100, 0x658f0000, 0x06590400, 0x65910000, 0x32c90100, 0x65930000, 0x19650200, 0x65950000, 0x32cb0100, 0x65970000, 0x0cb30300, 0x65990000, 0x32cd0100, 0x659b0000, 0x19670200, 0x659d0000, 0x32cf0100, 0x659f0000, 0x032d0500, 0x65a10000, 0x32d10100, 0x65a30000, 0x19690200, 0x65a50000, 0x32d30100, 0x65a70000, 0x0cb50300, 0x65a90000, 0x32d50100, 0x65ab0000, 0x196b0200, 0x65ad0000, 0x32d70100, 0x65af0000, 0x065b0400, 0x65b10000, 0x32d90100, 0x65b30000, 0x196d0200, 0x65b50000, 0x32db0100, 0x65b70000, 0x0cb70300, 0x65b90000, 0x32dd0100, 0x65bb0000, 0x196f0200, 0x65bd0000, 0x32df0100, 0x65bf0000, 0x01970600, 0x65c10000, 0x32e10100, 0x65c30000, 0x19710200, 0x65c50000, 0x32e30100, 0x65c70000, 0x0cb90300, 0x65c90000, 0x32e50100, 0x65cb0000, 0x19730200, 0x65cd0000, 0x32e70100, 0x65cf0000, 0x065d0400, 0x65d10000, 0x32e90100, 0x65d30000, 0x19750200, 0x65d50000, 0x32eb0100, 0x65d70000, 0x0cbb0300, 0x65d90000, 0x32ed0100, 0x65db0000, 0x19770200, 0x65dd0000, 0x32ef0100, 0x65df0000, 0x032f0500, 0x65e10000, 0x32f10100, 0x65e30000, 0x19790200, 0x65e50000, 0x32f30100, 0x65e70000, 0x0cbd0300, 0x65e90000, 0x32f50100, 0x65eb0000, 0x197b0200, 0x65ed0000, 0x32f70100, 0x65ef0000, 0x065f0400, 0x65f10000, 0x32f90100, 0x65f30000, 0x197d0200, 0x65f50000, 0x32fb0100, 0x65f70000, 0x0cbf0300, 0x65f90000, 0x32fd0100, 0x65fb0000, 0x197f0200, 0x65fd0000, 0x32ff0100, 0x65ff0000, + 0x00333600, 0x66010000, 0x33010100, 0x66030000, 0x19810200, 0x66050000, 0x33030100, 0x66070000, 0x0cc10300, 0x66090000, 0x33050100, 0x660b0000, 0x19830200, 0x660d0000, 0x33070100, 0x660f0000, 0x06610400, 0x66110000, 0x33090100, 0x66130000, 0x19850200, 0x66150000, 0x330b0100, 0x66170000, 0x0cc30300, 0x66190000, 0x330d0100, 0x661b0000, 0x19870200, 0x661d0000, 0x330f0100, 0x661f0000, 0x03310500, 0x66210000, 0x33110100, 0x66230000, 0x19890200, 0x66250000, 0x33130100, 0x66270000, 0x0cc50300, 0x66290000, 0x33150100, 0x662b0000, 0x198b0200, 0x662d0000, 0x33170100, 0x662f0000, 0x06630400, 0x66310000, 0x33190100, 0x66330000, 0x198d0200, 0x66350000, 0x331b0100, 0x66370000, 0x0cc70300, 0x66390000, 0x331d0100, 0x663b0000, 0x198f0200, 0x663d0000, 0x331f0100, 0x663f0000, 0x01990600, 0x66410000, 0x33210100, 0x66430000, 0x19910200, 0x66450000, 0x33230100, 0x66470000, 0x0cc90300, 0x66490000, 0x33250100, 0x664b0000, 0x19930200, 0x664d0000, 0x33270100, 0x664f0000, 0x06650400, 0x66510000, 0x33290100, 0x66530000, 0x19950200, 0x66550000, 0x332b0100, 0x66570000, 0x0ccb0300, 0x66590000, 0x332d0100, 0x665b0000, 0x19970200, 0x665d0000, 0x332f0100, 0x665f0000, 0x03330500, 0x66610000, 0x33310100, 0x66630000, 0x19990200, 0x66650000, 0x33330100, 0x66670000, 0x0ccd0300, 0x66690000, 0x33350100, 0x666b0000, 0x199b0200, 0x666d0000, 0x33370100, 0x666f0000, 0x06670400, 0x66710000, 0x33390100, 0x66730000, 0x199d0200, 0x66750000, 0x333b0100, 0x66770000, 0x0ccf0300, 0x66790000, 0x333d0100, 0x667b0000, 0x199f0200, 0x667d0000, 0x333f0100, 0x667f0000, 0x00cd1600, 0x66810000, 0x33410100, 0x66830000, 0x19a10200, 0x66850000, 0x33430100, 0x66870000, 0x0cd10300, 0x66890000, 0x33450100, 0x668b0000, 0x19a30200, 0x668d0000, 0x33470100, 0x668f0000, 0x06690400, 0x66910000, 0x33490100, 0x66930000, 0x19a50200, 0x66950000, 0x334b0100, 0x66970000, 0x0cd30300, 0x66990000, 0x334d0100, 0x669b0000, 0x19a70200, 0x669d0000, 0x334f0100, 0x669f0000, 0x03350500, 0x66a10000, 0x33510100, 0x66a30000, 0x19a90200, 0x66a50000, 0x33530100, 0x66a70000, 0x0cd50300, 0x66a90000, 0x33550100, 0x66ab0000, 0x19ab0200, 0x66ad0000, 0x33570100, 0x66af0000, 0x066b0400, 0x66b10000, 0x33590100, 0x66b30000, 0x19ad0200, 0x66b50000, 0x335b0100, 0x66b70000, 0x0cd70300, 0x66b90000, 0x335d0100, 0x66bb0000, 0x19af0200, 0x66bd0000, 0x335f0100, 0x66bf0000, 0x019b0600, 0x66c10000, 0x33610100, 0x66c30000, 0x19b10200, 0x66c50000, 0x33630100, 0x66c70000, 0x0cd90300, 0x66c90000, 0x33650100, 0x66cb0000, 0x19b30200, 0x66cd0000, 0x33670100, 0x66cf0000, 0x066d0400, 0x66d10000, 0x33690100, 0x66d30000, 0x19b50200, 0x66d50000, 0x336b0100, 0x66d70000, 0x0cdb0300, 0x66d90000, 0x336d0100, 0x66db0000, 0x19b70200, 0x66dd0000, 0x336f0100, 0x66df0000, 0x03370500, 0x66e10000, 0x33710100, 0x66e30000, 0x19b90200, 0x66e50000, 0x33730100, 0x66e70000, 0x0cdd0300, 0x66e90000, 0x33750100, 0x66eb0000, 0x19bb0200, 0x66ed0000, 0x33770100, 0x66ef0000, 0x066f0400, 0x66f10000, 0x33790100, 0x66f30000, 0x19bd0200, 0x66f50000, 0x337b0100, 0x66f70000, 0x0cdf0300, 0x66f90000, 0x337d0100, 0x66fb0000, 0x19bf0200, 0x66fd0000, 0x337f0100, 0x66ff0000, + 0x00672600, 0x67010000, 0x33810100, 0x67030000, 0x19c10200, 0x67050000, 0x33830100, 0x67070000, 0x0ce10300, 0x67090000, 0x33850100, 0x670b0000, 0x19c30200, 0x670d0000, 0x33870100, 0x670f0000, 0x06710400, 0x67110000, 0x33890100, 0x67130000, 0x19c50200, 0x67150000, 0x338b0100, 0x67170000, 0x0ce30300, 0x67190000, 0x338d0100, 0x671b0000, 0x19c70200, 0x671d0000, 0x338f0100, 0x671f0000, 0x03390500, 0x67210000, 0x33910100, 0x67230000, 0x19c90200, 0x67250000, 0x33930100, 0x67270000, 0x0ce50300, 0x67290000, 0x33950100, 0x672b0000, 0x19cb0200, 0x672d0000, 0x33970100, 0x672f0000, 0x06730400, 0x67310000, 0x33990100, 0x67330000, 0x19cd0200, 0x67350000, 0x339b0100, 0x67370000, 0x0ce70300, 0x67390000, 0x339d0100, 0x673b0000, 0x19cf0200, 0x673d0000, 0x339f0100, 0x673f0000, 0x019d0600, 0x67410000, 0x33a10100, 0x67430000, 0x19d10200, 0x67450000, 0x33a30100, 0x67470000, 0x0ce90300, 0x67490000, 0x33a50100, 0x674b0000, 0x19d30200, 0x674d0000, 0x33a70100, 0x674f0000, 0x06750400, 0x67510000, 0x33a90100, 0x67530000, 0x19d50200, 0x67550000, 0x33ab0100, 0x67570000, 0x0ceb0300, 0x67590000, 0x33ad0100, 0x675b0000, 0x19d70200, 0x675d0000, 0x33af0100, 0x675f0000, 0x033b0500, 0x67610000, 0x33b10100, 0x67630000, 0x19d90200, 0x67650000, 0x33b30100, 0x67670000, 0x0ced0300, 0x67690000, 0x33b50100, 0x676b0000, 0x19db0200, 0x676d0000, 0x33b70100, 0x676f0000, 0x06770400, 0x67710000, 0x33b90100, 0x67730000, 0x19dd0200, 0x67750000, 0x33bb0100, 0x67770000, 0x0cef0300, 0x67790000, 0x33bd0100, 0x677b0000, 0x19df0200, 0x677d0000, 0x33bf0100, 0x677f0000, 0x00cf1600, 0x67810000, 0x33c10100, 0x67830000, 0x19e10200, 0x67850000, 0x33c30100, 0x67870000, 0x0cf10300, 0x67890000, 0x33c50100, 0x678b0000, 0x19e30200, 0x678d0000, 0x33c70100, 0x678f0000, 0x06790400, 0x67910000, 0x33c90100, 0x67930000, 0x19e50200, 0x67950000, 0x33cb0100, 0x67970000, 0x0cf30300, 0x67990000, 0x33cd0100, 0x679b0000, 0x19e70200, 0x679d0000, 0x33cf0100, 0x679f0000, 0x033d0500, 0x67a10000, 0x33d10100, 0x67a30000, 0x19e90200, 0x67a50000, 0x33d30100, 0x67a70000, 0x0cf50300, 0x67a90000, 0x33d50100, 0x67ab0000, 0x19eb0200, 0x67ad0000, 0x33d70100, 0x67af0000, 0x067b0400, 0x67b10000, 0x33d90100, 0x67b30000, 0x19ed0200, 0x67b50000, 0x33db0100, 0x67b70000, 0x0cf70300, 0x67b90000, 0x33dd0100, 0x67bb0000, 0x19ef0200, 0x67bd0000, 0x33df0100, 0x67bf0000, 0x019f0600, 0x67c10000, 0x33e10100, 0x67c30000, 0x19f10200, 0x67c50000, 0x33e30100, 0x67c70000, 0x0cf90300, 0x67c90000, 0x33e50100, 0x67cb0000, 0x19f30200, 0x67cd0000, 0x33e70100, 0x67cf0000, 0x067d0400, 0x67d10000, 0x33e90100, 0x67d30000, 0x19f50200, 0x67d50000, 0x33eb0100, 0x67d70000, 0x0cfb0300, 0x67d90000, 0x33ed0100, 0x67db0000, 0x19f70200, 0x67dd0000, 0x33ef0100, 0x67df0000, 0x033f0500, 0x67e10000, 0x33f10100, 0x67e30000, 0x19f90200, 0x67e50000, 0x33f30100, 0x67e70000, 0x0cfd0300, 0x67e90000, 0x33f50100, 0x67eb0000, 0x19fb0200, 0x67ed0000, 0x33f70100, 0x67ef0000, 0x067f0400, 0x67f10000, 0x33f90100, 0x67f30000, 0x19fd0200, 0x67f50000, 0x33fb0100, 0x67f70000, 0x0cff0300, 0x67f90000, 0x33fd0100, 0x67fb0000, 0x19ff0200, 0x67fd0000, 0x33ff0100, 0x67ff0000, + 0x000d5600, 0x68010000, 0x34010100, 0x68030000, 0x1a010200, 0x68050000, 0x34030100, 0x68070000, 0x0d010300, 0x68090000, 0x34050100, 0x680b0000, 0x1a030200, 0x680d0000, 0x34070100, 0x680f0000, 0x06810400, 0x68110000, 0x34090100, 0x68130000, 0x1a050200, 0x68150000, 0x340b0100, 0x68170000, 0x0d030300, 0x68190000, 0x340d0100, 0x681b0000, 0x1a070200, 0x681d0000, 0x340f0100, 0x681f0000, 0x03410500, 0x68210000, 0x34110100, 0x68230000, 0x1a090200, 0x68250000, 0x34130100, 0x68270000, 0x0d050300, 0x68290000, 0x34150100, 0x682b0000, 0x1a0b0200, 0x682d0000, 0x34170100, 0x682f0000, 0x06830400, 0x68310000, 0x34190100, 0x68330000, 0x1a0d0200, 0x68350000, 0x341b0100, 0x68370000, 0x0d070300, 0x68390000, 0x341d0100, 0x683b0000, 0x1a0f0200, 0x683d0000, 0x341f0100, 0x683f0000, 0x01a10600, 0x68410000, 0x34210100, 0x68430000, 0x1a110200, 0x68450000, 0x34230100, 0x68470000, 0x0d090300, 0x68490000, 0x34250100, 0x684b0000, 0x1a130200, 0x684d0000, 0x34270100, 0x684f0000, 0x06850400, 0x68510000, 0x34290100, 0x68530000, 0x1a150200, 0x68550000, 0x342b0100, 0x68570000, 0x0d0b0300, 0x68590000, 0x342d0100, 0x685b0000, 0x1a170200, 0x685d0000, 0x342f0100, 0x685f0000, 0x03430500, 0x68610000, 0x34310100, 0x68630000, 0x1a190200, 0x68650000, 0x34330100, 0x68670000, 0x0d0d0300, 0x68690000, 0x34350100, 0x686b0000, 0x1a1b0200, 0x686d0000, 0x34370100, 0x686f0000, 0x06870400, 0x68710000, 0x34390100, 0x68730000, 0x1a1d0200, 0x68750000, 0x343b0100, 0x68770000, 0x0d0f0300, 0x68790000, 0x343d0100, 0x687b0000, 0x1a1f0200, 0x687d0000, 0x343f0100, 0x687f0000, 0x00d11600, 0x68810000, 0x34410100, 0x68830000, 0x1a210200, 0x68850000, 0x34430100, 0x68870000, 0x0d110300, 0x68890000, 0x34450100, 0x688b0000, 0x1a230200, 0x688d0000, 0x34470100, 0x688f0000, 0x06890400, 0x68910000, 0x34490100, 0x68930000, 0x1a250200, 0x68950000, 0x344b0100, 0x68970000, 0x0d130300, 0x68990000, 0x344d0100, 0x689b0000, 0x1a270200, 0x689d0000, 0x344f0100, 0x689f0000, 0x03450500, 0x68a10000, 0x34510100, 0x68a30000, 0x1a290200, 0x68a50000, 0x34530100, 0x68a70000, 0x0d150300, 0x68a90000, 0x34550100, 0x68ab0000, 0x1a2b0200, 0x68ad0000, 0x34570100, 0x68af0000, 0x068b0400, 0x68b10000, 0x34590100, 0x68b30000, 0x1a2d0200, 0x68b50000, 0x345b0100, 0x68b70000, 0x0d170300, 0x68b90000, 0x345d0100, 0x68bb0000, 0x1a2f0200, 0x68bd0000, 0x345f0100, 0x68bf0000, 0x01a30600, 0x68c10000, 0x34610100, 0x68c30000, 0x1a310200, 0x68c50000, 0x34630100, 0x68c70000, 0x0d190300, 0x68c90000, 0x34650100, 0x68cb0000, 0x1a330200, 0x68cd0000, 0x34670100, 0x68cf0000, 0x068d0400, 0x68d10000, 0x34690100, 0x68d30000, 0x1a350200, 0x68d50000, 0x346b0100, 0x68d70000, 0x0d1b0300, 0x68d90000, 0x346d0100, 0x68db0000, 0x1a370200, 0x68dd0000, 0x346f0100, 0x68df0000, 0x03470500, 0x68e10000, 0x34710100, 0x68e30000, 0x1a390200, 0x68e50000, 0x34730100, 0x68e70000, 0x0d1d0300, 0x68e90000, 0x34750100, 0x68eb0000, 0x1a3b0200, 0x68ed0000, 0x34770100, 0x68ef0000, 0x068f0400, 0x68f10000, 0x34790100, 0x68f30000, 0x1a3d0200, 0x68f50000, 0x347b0100, 0x68f70000, 0x0d1f0300, 0x68f90000, 0x347d0100, 0x68fb0000, 0x1a3f0200, 0x68fd0000, 0x347f0100, 0x68ff0000, + 0x00692600, 0x69010000, 0x34810100, 0x69030000, 0x1a410200, 0x69050000, 0x34830100, 0x69070000, 0x0d210300, 0x69090000, 0x34850100, 0x690b0000, 0x1a430200, 0x690d0000, 0x34870100, 0x690f0000, 0x06910400, 0x69110000, 0x34890100, 0x69130000, 0x1a450200, 0x69150000, 0x348b0100, 0x69170000, 0x0d230300, 0x69190000, 0x348d0100, 0x691b0000, 0x1a470200, 0x691d0000, 0x348f0100, 0x691f0000, 0x03490500, 0x69210000, 0x34910100, 0x69230000, 0x1a490200, 0x69250000, 0x34930100, 0x69270000, 0x0d250300, 0x69290000, 0x34950100, 0x692b0000, 0x1a4b0200, 0x692d0000, 0x34970100, 0x692f0000, 0x06930400, 0x69310000, 0x34990100, 0x69330000, 0x1a4d0200, 0x69350000, 0x349b0100, 0x69370000, 0x0d270300, 0x69390000, 0x349d0100, 0x693b0000, 0x1a4f0200, 0x693d0000, 0x349f0100, 0x693f0000, 0x01a50600, 0x69410000, 0x34a10100, 0x69430000, 0x1a510200, 0x69450000, 0x34a30100, 0x69470000, 0x0d290300, 0x69490000, 0x34a50100, 0x694b0000, 0x1a530200, 0x694d0000, 0x34a70100, 0x694f0000, 0x06950400, 0x69510000, 0x34a90100, 0x69530000, 0x1a550200, 0x69550000, 0x34ab0100, 0x69570000, 0x0d2b0300, 0x69590000, 0x34ad0100, 0x695b0000, 0x1a570200, 0x695d0000, 0x34af0100, 0x695f0000, 0x034b0500, 0x69610000, 0x34b10100, 0x69630000, 0x1a590200, 0x69650000, 0x34b30100, 0x69670000, 0x0d2d0300, 0x69690000, 0x34b50100, 0x696b0000, 0x1a5b0200, 0x696d0000, 0x34b70100, 0x696f0000, 0x06970400, 0x69710000, 0x34b90100, 0x69730000, 0x1a5d0200, 0x69750000, 0x34bb0100, 0x69770000, 0x0d2f0300, 0x69790000, 0x34bd0100, 0x697b0000, 0x1a5f0200, 0x697d0000, 0x34bf0100, 0x697f0000, 0x00d31600, 0x69810000, 0x34c10100, 0x69830000, 0x1a610200, 0x69850000, 0x34c30100, 0x69870000, 0x0d310300, 0x69890000, 0x34c50100, 0x698b0000, 0x1a630200, 0x698d0000, 0x34c70100, 0x698f0000, 0x06990400, 0x69910000, 0x34c90100, 0x69930000, 0x1a650200, 0x69950000, 0x34cb0100, 0x69970000, 0x0d330300, 0x69990000, 0x34cd0100, 0x699b0000, 0x1a670200, 0x699d0000, 0x34cf0100, 0x699f0000, 0x034d0500, 0x69a10000, 0x34d10100, 0x69a30000, 0x1a690200, 0x69a50000, 0x34d30100, 0x69a70000, 0x0d350300, 0x69a90000, 0x34d50100, 0x69ab0000, 0x1a6b0200, 0x69ad0000, 0x34d70100, 0x69af0000, 0x069b0400, 0x69b10000, 0x34d90100, 0x69b30000, 0x1a6d0200, 0x69b50000, 0x34db0100, 0x69b70000, 0x0d370300, 0x69b90000, 0x34dd0100, 0x69bb0000, 0x1a6f0200, 0x69bd0000, 0x34df0100, 0x69bf0000, 0x01a70600, 0x69c10000, 0x34e10100, 0x69c30000, 0x1a710200, 0x69c50000, 0x34e30100, 0x69c70000, 0x0d390300, 0x69c90000, 0x34e50100, 0x69cb0000, 0x1a730200, 0x69cd0000, 0x34e70100, 0x69cf0000, 0x069d0400, 0x69d10000, 0x34e90100, 0x69d30000, 0x1a750200, 0x69d50000, 0x34eb0100, 0x69d70000, 0x0d3b0300, 0x69d90000, 0x34ed0100, 0x69db0000, 0x1a770200, 0x69dd0000, 0x34ef0100, 0x69df0000, 0x034f0500, 0x69e10000, 0x34f10100, 0x69e30000, 0x1a790200, 0x69e50000, 0x34f30100, 0x69e70000, 0x0d3d0300, 0x69e90000, 0x34f50100, 0x69eb0000, 0x1a7b0200, 0x69ed0000, 0x34f70100, 0x69ef0000, 0x069f0400, 0x69f10000, 0x34f90100, 0x69f30000, 0x1a7d0200, 0x69f50000, 0x34fb0100, 0x69f70000, 0x0d3f0300, 0x69f90000, 0x34fd0100, 0x69fb0000, 0x1a7f0200, 0x69fd0000, 0x34ff0100, 0x69ff0000, + 0x00353600, 0x6a010000, 0x35010100, 0x6a030000, 0x1a810200, 0x6a050000, 0x35030100, 0x6a070000, 0x0d410300, 0x6a090000, 0x35050100, 0x6a0b0000, 0x1a830200, 0x6a0d0000, 0x35070100, 0x6a0f0000, 0x06a10400, 0x6a110000, 0x35090100, 0x6a130000, 0x1a850200, 0x6a150000, 0x350b0100, 0x6a170000, 0x0d430300, 0x6a190000, 0x350d0100, 0x6a1b0000, 0x1a870200, 0x6a1d0000, 0x350f0100, 0x6a1f0000, 0x03510500, 0x6a210000, 0x35110100, 0x6a230000, 0x1a890200, 0x6a250000, 0x35130100, 0x6a270000, 0x0d450300, 0x6a290000, 0x35150100, 0x6a2b0000, 0x1a8b0200, 0x6a2d0000, 0x35170100, 0x6a2f0000, 0x06a30400, 0x6a310000, 0x35190100, 0x6a330000, 0x1a8d0200, 0x6a350000, 0x351b0100, 0x6a370000, 0x0d470300, 0x6a390000, 0x351d0100, 0x6a3b0000, 0x1a8f0200, 0x6a3d0000, 0x351f0100, 0x6a3f0000, 0x01a90600, 0x6a410000, 0x35210100, 0x6a430000, 0x1a910200, 0x6a450000, 0x35230100, 0x6a470000, 0x0d490300, 0x6a490000, 0x35250100, 0x6a4b0000, 0x1a930200, 0x6a4d0000, 0x35270100, 0x6a4f0000, 0x06a50400, 0x6a510000, 0x35290100, 0x6a530000, 0x1a950200, 0x6a550000, 0x352b0100, 0x6a570000, 0x0d4b0300, 0x6a590000, 0x352d0100, 0x6a5b0000, 0x1a970200, 0x6a5d0000, 0x352f0100, 0x6a5f0000, 0x03530500, 0x6a610000, 0x35310100, 0x6a630000, 0x1a990200, 0x6a650000, 0x35330100, 0x6a670000, 0x0d4d0300, 0x6a690000, 0x35350100, 0x6a6b0000, 0x1a9b0200, 0x6a6d0000, 0x35370100, 0x6a6f0000, 0x06a70400, 0x6a710000, 0x35390100, 0x6a730000, 0x1a9d0200, 0x6a750000, 0x353b0100, 0x6a770000, 0x0d4f0300, 0x6a790000, 0x353d0100, 0x6a7b0000, 0x1a9f0200, 0x6a7d0000, 0x353f0100, 0x6a7f0000, 0x00d51600, 0x6a810000, 0x35410100, 0x6a830000, 0x1aa10200, 0x6a850000, 0x35430100, 0x6a870000, 0x0d510300, 0x6a890000, 0x35450100, 0x6a8b0000, 0x1aa30200, 0x6a8d0000, 0x35470100, 0x6a8f0000, 0x06a90400, 0x6a910000, 0x35490100, 0x6a930000, 0x1aa50200, 0x6a950000, 0x354b0100, 0x6a970000, 0x0d530300, 0x6a990000, 0x354d0100, 0x6a9b0000, 0x1aa70200, 0x6a9d0000, 0x354f0100, 0x6a9f0000, 0x03550500, 0x6aa10000, 0x35510100, 0x6aa30000, 0x1aa90200, 0x6aa50000, 0x35530100, 0x6aa70000, 0x0d550300, 0x6aa90000, 0x35550100, 0x6aab0000, 0x1aab0200, 0x6aad0000, 0x35570100, 0x6aaf0000, 0x06ab0400, 0x6ab10000, 0x35590100, 0x6ab30000, 0x1aad0200, 0x6ab50000, 0x355b0100, 0x6ab70000, 0x0d570300, 0x6ab90000, 0x355d0100, 0x6abb0000, 0x1aaf0200, 0x6abd0000, 0x355f0100, 0x6abf0000, 0x01ab0600, 0x6ac10000, 0x35610100, 0x6ac30000, 0x1ab10200, 0x6ac50000, 0x35630100, 0x6ac70000, 0x0d590300, 0x6ac90000, 0x35650100, 0x6acb0000, 0x1ab30200, 0x6acd0000, 0x35670100, 0x6acf0000, 0x06ad0400, 0x6ad10000, 0x35690100, 0x6ad30000, 0x1ab50200, 0x6ad50000, 0x356b0100, 0x6ad70000, 0x0d5b0300, 0x6ad90000, 0x356d0100, 0x6adb0000, 0x1ab70200, 0x6add0000, 0x356f0100, 0x6adf0000, 0x03570500, 0x6ae10000, 0x35710100, 0x6ae30000, 0x1ab90200, 0x6ae50000, 0x35730100, 0x6ae70000, 0x0d5d0300, 0x6ae90000, 0x35750100, 0x6aeb0000, 0x1abb0200, 0x6aed0000, 0x35770100, 0x6aef0000, 0x06af0400, 0x6af10000, 0x35790100, 0x6af30000, 0x1abd0200, 0x6af50000, 0x357b0100, 0x6af70000, 0x0d5f0300, 0x6af90000, 0x357d0100, 0x6afb0000, 0x1abf0200, 0x6afd0000, 0x357f0100, 0x6aff0000, + 0x006b2600, 0x6b010000, 0x35810100, 0x6b030000, 0x1ac10200, 0x6b050000, 0x35830100, 0x6b070000, 0x0d610300, 0x6b090000, 0x35850100, 0x6b0b0000, 0x1ac30200, 0x6b0d0000, 0x35870100, 0x6b0f0000, 0x06b10400, 0x6b110000, 0x35890100, 0x6b130000, 0x1ac50200, 0x6b150000, 0x358b0100, 0x6b170000, 0x0d630300, 0x6b190000, 0x358d0100, 0x6b1b0000, 0x1ac70200, 0x6b1d0000, 0x358f0100, 0x6b1f0000, 0x03590500, 0x6b210000, 0x35910100, 0x6b230000, 0x1ac90200, 0x6b250000, 0x35930100, 0x6b270000, 0x0d650300, 0x6b290000, 0x35950100, 0x6b2b0000, 0x1acb0200, 0x6b2d0000, 0x35970100, 0x6b2f0000, 0x06b30400, 0x6b310000, 0x35990100, 0x6b330000, 0x1acd0200, 0x6b350000, 0x359b0100, 0x6b370000, 0x0d670300, 0x6b390000, 0x359d0100, 0x6b3b0000, 0x1acf0200, 0x6b3d0000, 0x359f0100, 0x6b3f0000, 0x01ad0600, 0x6b410000, 0x35a10100, 0x6b430000, 0x1ad10200, 0x6b450000, 0x35a30100, 0x6b470000, 0x0d690300, 0x6b490000, 0x35a50100, 0x6b4b0000, 0x1ad30200, 0x6b4d0000, 0x35a70100, 0x6b4f0000, 0x06b50400, 0x6b510000, 0x35a90100, 0x6b530000, 0x1ad50200, 0x6b550000, 0x35ab0100, 0x6b570000, 0x0d6b0300, 0x6b590000, 0x35ad0100, 0x6b5b0000, 0x1ad70200, 0x6b5d0000, 0x35af0100, 0x6b5f0000, 0x035b0500, 0x6b610000, 0x35b10100, 0x6b630000, 0x1ad90200, 0x6b650000, 0x35b30100, 0x6b670000, 0x0d6d0300, 0x6b690000, 0x35b50100, 0x6b6b0000, 0x1adb0200, 0x6b6d0000, 0x35b70100, 0x6b6f0000, 0x06b70400, 0x6b710000, 0x35b90100, 0x6b730000, 0x1add0200, 0x6b750000, 0x35bb0100, 0x6b770000, 0x0d6f0300, 0x6b790000, 0x35bd0100, 0x6b7b0000, 0x1adf0200, 0x6b7d0000, 0x35bf0100, 0x6b7f0000, 0x00d71600, 0x6b810000, 0x35c10100, 0x6b830000, 0x1ae10200, 0x6b850000, 0x35c30100, 0x6b870000, 0x0d710300, 0x6b890000, 0x35c50100, 0x6b8b0000, 0x1ae30200, 0x6b8d0000, 0x35c70100, 0x6b8f0000, 0x06b90400, 0x6b910000, 0x35c90100, 0x6b930000, 0x1ae50200, 0x6b950000, 0x35cb0100, 0x6b970000, 0x0d730300, 0x6b990000, 0x35cd0100, 0x6b9b0000, 0x1ae70200, 0x6b9d0000, 0x35cf0100, 0x6b9f0000, 0x035d0500, 0x6ba10000, 0x35d10100, 0x6ba30000, 0x1ae90200, 0x6ba50000, 0x35d30100, 0x6ba70000, 0x0d750300, 0x6ba90000, 0x35d50100, 0x6bab0000, 0x1aeb0200, 0x6bad0000, 0x35d70100, 0x6baf0000, 0x06bb0400, 0x6bb10000, 0x35d90100, 0x6bb30000, 0x1aed0200, 0x6bb50000, 0x35db0100, 0x6bb70000, 0x0d770300, 0x6bb90000, 0x35dd0100, 0x6bbb0000, 0x1aef0200, 0x6bbd0000, 0x35df0100, 0x6bbf0000, 0x01af0600, 0x6bc10000, 0x35e10100, 0x6bc30000, 0x1af10200, 0x6bc50000, 0x35e30100, 0x6bc70000, 0x0d790300, 0x6bc90000, 0x35e50100, 0x6bcb0000, 0x1af30200, 0x6bcd0000, 0x35e70100, 0x6bcf0000, 0x06bd0400, 0x6bd10000, 0x35e90100, 0x6bd30000, 0x1af50200, 0x6bd50000, 0x35eb0100, 0x6bd70000, 0x0d7b0300, 0x6bd90000, 0x35ed0100, 0x6bdb0000, 0x1af70200, 0x6bdd0000, 0x35ef0100, 0x6bdf0000, 0x035f0500, 0x6be10000, 0x35f10100, 0x6be30000, 0x1af90200, 0x6be50000, 0x35f30100, 0x6be70000, 0x0d7d0300, 0x6be90000, 0x35f50100, 0x6beb0000, 0x1afb0200, 0x6bed0000, 0x35f70100, 0x6bef0000, 0x06bf0400, 0x6bf10000, 0x35f90100, 0x6bf30000, 0x1afd0200, 0x6bf50000, 0x35fb0100, 0x6bf70000, 0x0d7f0300, 0x6bf90000, 0x35fd0100, 0x6bfb0000, 0x1aff0200, 0x6bfd0000, 0x35ff0100, 0x6bff0000, + 0x001b4600, 0x6c010000, 0x36010100, 0x6c030000, 0x1b010200, 0x6c050000, 0x36030100, 0x6c070000, 0x0d810300, 0x6c090000, 0x36050100, 0x6c0b0000, 0x1b030200, 0x6c0d0000, 0x36070100, 0x6c0f0000, 0x06c10400, 0x6c110000, 0x36090100, 0x6c130000, 0x1b050200, 0x6c150000, 0x360b0100, 0x6c170000, 0x0d830300, 0x6c190000, 0x360d0100, 0x6c1b0000, 0x1b070200, 0x6c1d0000, 0x360f0100, 0x6c1f0000, 0x03610500, 0x6c210000, 0x36110100, 0x6c230000, 0x1b090200, 0x6c250000, 0x36130100, 0x6c270000, 0x0d850300, 0x6c290000, 0x36150100, 0x6c2b0000, 0x1b0b0200, 0x6c2d0000, 0x36170100, 0x6c2f0000, 0x06c30400, 0x6c310000, 0x36190100, 0x6c330000, 0x1b0d0200, 0x6c350000, 0x361b0100, 0x6c370000, 0x0d870300, 0x6c390000, 0x361d0100, 0x6c3b0000, 0x1b0f0200, 0x6c3d0000, 0x361f0100, 0x6c3f0000, 0x01b10600, 0x6c410000, 0x36210100, 0x6c430000, 0x1b110200, 0x6c450000, 0x36230100, 0x6c470000, 0x0d890300, 0x6c490000, 0x36250100, 0x6c4b0000, 0x1b130200, 0x6c4d0000, 0x36270100, 0x6c4f0000, 0x06c50400, 0x6c510000, 0x36290100, 0x6c530000, 0x1b150200, 0x6c550000, 0x362b0100, 0x6c570000, 0x0d8b0300, 0x6c590000, 0x362d0100, 0x6c5b0000, 0x1b170200, 0x6c5d0000, 0x362f0100, 0x6c5f0000, 0x03630500, 0x6c610000, 0x36310100, 0x6c630000, 0x1b190200, 0x6c650000, 0x36330100, 0x6c670000, 0x0d8d0300, 0x6c690000, 0x36350100, 0x6c6b0000, 0x1b1b0200, 0x6c6d0000, 0x36370100, 0x6c6f0000, 0x06c70400, 0x6c710000, 0x36390100, 0x6c730000, 0x1b1d0200, 0x6c750000, 0x363b0100, 0x6c770000, 0x0d8f0300, 0x6c790000, 0x363d0100, 0x6c7b0000, 0x1b1f0200, 0x6c7d0000, 0x363f0100, 0x6c7f0000, 0x00d91600, 0x6c810000, 0x36410100, 0x6c830000, 0x1b210200, 0x6c850000, 0x36430100, 0x6c870000, 0x0d910300, 0x6c890000, 0x36450100, 0x6c8b0000, 0x1b230200, 0x6c8d0000, 0x36470100, 0x6c8f0000, 0x06c90400, 0x6c910000, 0x36490100, 0x6c930000, 0x1b250200, 0x6c950000, 0x364b0100, 0x6c970000, 0x0d930300, 0x6c990000, 0x364d0100, 0x6c9b0000, 0x1b270200, 0x6c9d0000, 0x364f0100, 0x6c9f0000, 0x03650500, 0x6ca10000, 0x36510100, 0x6ca30000, 0x1b290200, 0x6ca50000, 0x36530100, 0x6ca70000, 0x0d950300, 0x6ca90000, 0x36550100, 0x6cab0000, 0x1b2b0200, 0x6cad0000, 0x36570100, 0x6caf0000, 0x06cb0400, 0x6cb10000, 0x36590100, 0x6cb30000, 0x1b2d0200, 0x6cb50000, 0x365b0100, 0x6cb70000, 0x0d970300, 0x6cb90000, 0x365d0100, 0x6cbb0000, 0x1b2f0200, 0x6cbd0000, 0x365f0100, 0x6cbf0000, 0x01b30600, 0x6cc10000, 0x36610100, 0x6cc30000, 0x1b310200, 0x6cc50000, 0x36630100, 0x6cc70000, 0x0d990300, 0x6cc90000, 0x36650100, 0x6ccb0000, 0x1b330200, 0x6ccd0000, 0x36670100, 0x6ccf0000, 0x06cd0400, 0x6cd10000, 0x36690100, 0x6cd30000, 0x1b350200, 0x6cd50000, 0x366b0100, 0x6cd70000, 0x0d9b0300, 0x6cd90000, 0x366d0100, 0x6cdb0000, 0x1b370200, 0x6cdd0000, 0x366f0100, 0x6cdf0000, 0x03670500, 0x6ce10000, 0x36710100, 0x6ce30000, 0x1b390200, 0x6ce50000, 0x36730100, 0x6ce70000, 0x0d9d0300, 0x6ce90000, 0x36750100, 0x6ceb0000, 0x1b3b0200, 0x6ced0000, 0x36770100, 0x6cef0000, 0x06cf0400, 0x6cf10000, 0x36790100, 0x6cf30000, 0x1b3d0200, 0x6cf50000, 0x367b0100, 0x6cf70000, 0x0d9f0300, 0x6cf90000, 0x367d0100, 0x6cfb0000, 0x1b3f0200, 0x6cfd0000, 0x367f0100, 0x6cff0000, + 0x006d2600, 0x6d010000, 0x36810100, 0x6d030000, 0x1b410200, 0x6d050000, 0x36830100, 0x6d070000, 0x0da10300, 0x6d090000, 0x36850100, 0x6d0b0000, 0x1b430200, 0x6d0d0000, 0x36870100, 0x6d0f0000, 0x06d10400, 0x6d110000, 0x36890100, 0x6d130000, 0x1b450200, 0x6d150000, 0x368b0100, 0x6d170000, 0x0da30300, 0x6d190000, 0x368d0100, 0x6d1b0000, 0x1b470200, 0x6d1d0000, 0x368f0100, 0x6d1f0000, 0x03690500, 0x6d210000, 0x36910100, 0x6d230000, 0x1b490200, 0x6d250000, 0x36930100, 0x6d270000, 0x0da50300, 0x6d290000, 0x36950100, 0x6d2b0000, 0x1b4b0200, 0x6d2d0000, 0x36970100, 0x6d2f0000, 0x06d30400, 0x6d310000, 0x36990100, 0x6d330000, 0x1b4d0200, 0x6d350000, 0x369b0100, 0x6d370000, 0x0da70300, 0x6d390000, 0x369d0100, 0x6d3b0000, 0x1b4f0200, 0x6d3d0000, 0x369f0100, 0x6d3f0000, 0x01b50600, 0x6d410000, 0x36a10100, 0x6d430000, 0x1b510200, 0x6d450000, 0x36a30100, 0x6d470000, 0x0da90300, 0x6d490000, 0x36a50100, 0x6d4b0000, 0x1b530200, 0x6d4d0000, 0x36a70100, 0x6d4f0000, 0x06d50400, 0x6d510000, 0x36a90100, 0x6d530000, 0x1b550200, 0x6d550000, 0x36ab0100, 0x6d570000, 0x0dab0300, 0x6d590000, 0x36ad0100, 0x6d5b0000, 0x1b570200, 0x6d5d0000, 0x36af0100, 0x6d5f0000, 0x036b0500, 0x6d610000, 0x36b10100, 0x6d630000, 0x1b590200, 0x6d650000, 0x36b30100, 0x6d670000, 0x0dad0300, 0x6d690000, 0x36b50100, 0x6d6b0000, 0x1b5b0200, 0x6d6d0000, 0x36b70100, 0x6d6f0000, 0x06d70400, 0x6d710000, 0x36b90100, 0x6d730000, 0x1b5d0200, 0x6d750000, 0x36bb0100, 0x6d770000, 0x0daf0300, 0x6d790000, 0x36bd0100, 0x6d7b0000, 0x1b5f0200, 0x6d7d0000, 0x36bf0100, 0x6d7f0000, 0x00db1600, 0x6d810000, 0x36c10100, 0x6d830000, 0x1b610200, 0x6d850000, 0x36c30100, 0x6d870000, 0x0db10300, 0x6d890000, 0x36c50100, 0x6d8b0000, 0x1b630200, 0x6d8d0000, 0x36c70100, 0x6d8f0000, 0x06d90400, 0x6d910000, 0x36c90100, 0x6d930000, 0x1b650200, 0x6d950000, 0x36cb0100, 0x6d970000, 0x0db30300, 0x6d990000, 0x36cd0100, 0x6d9b0000, 0x1b670200, 0x6d9d0000, 0x36cf0100, 0x6d9f0000, 0x036d0500, 0x6da10000, 0x36d10100, 0x6da30000, 0x1b690200, 0x6da50000, 0x36d30100, 0x6da70000, 0x0db50300, 0x6da90000, 0x36d50100, 0x6dab0000, 0x1b6b0200, 0x6dad0000, 0x36d70100, 0x6daf0000, 0x06db0400, 0x6db10000, 0x36d90100, 0x6db30000, 0x1b6d0200, 0x6db50000, 0x36db0100, 0x6db70000, 0x0db70300, 0x6db90000, 0x36dd0100, 0x6dbb0000, 0x1b6f0200, 0x6dbd0000, 0x36df0100, 0x6dbf0000, 0x01b70600, 0x6dc10000, 0x36e10100, 0x6dc30000, 0x1b710200, 0x6dc50000, 0x36e30100, 0x6dc70000, 0x0db90300, 0x6dc90000, 0x36e50100, 0x6dcb0000, 0x1b730200, 0x6dcd0000, 0x36e70100, 0x6dcf0000, 0x06dd0400, 0x6dd10000, 0x36e90100, 0x6dd30000, 0x1b750200, 0x6dd50000, 0x36eb0100, 0x6dd70000, 0x0dbb0300, 0x6dd90000, 0x36ed0100, 0x6ddb0000, 0x1b770200, 0x6ddd0000, 0x36ef0100, 0x6ddf0000, 0x036f0500, 0x6de10000, 0x36f10100, 0x6de30000, 0x1b790200, 0x6de50000, 0x36f30100, 0x6de70000, 0x0dbd0300, 0x6de90000, 0x36f50100, 0x6deb0000, 0x1b7b0200, 0x6ded0000, 0x36f70100, 0x6def0000, 0x06df0400, 0x6df10000, 0x36f90100, 0x6df30000, 0x1b7d0200, 0x6df50000, 0x36fb0100, 0x6df70000, 0x0dbf0300, 0x6df90000, 0x36fd0100, 0x6dfb0000, 0x1b7f0200, 0x6dfd0000, 0x36ff0100, 0x6dff0000, + 0x00373600, 0x6e010000, 0x37010100, 0x6e030000, 0x1b810200, 0x6e050000, 0x37030100, 0x6e070000, 0x0dc10300, 0x6e090000, 0x37050100, 0x6e0b0000, 0x1b830200, 0x6e0d0000, 0x37070100, 0x6e0f0000, 0x06e10400, 0x6e110000, 0x37090100, 0x6e130000, 0x1b850200, 0x6e150000, 0x370b0100, 0x6e170000, 0x0dc30300, 0x6e190000, 0x370d0100, 0x6e1b0000, 0x1b870200, 0x6e1d0000, 0x370f0100, 0x6e1f0000, 0x03710500, 0x6e210000, 0x37110100, 0x6e230000, 0x1b890200, 0x6e250000, 0x37130100, 0x6e270000, 0x0dc50300, 0x6e290000, 0x37150100, 0x6e2b0000, 0x1b8b0200, 0x6e2d0000, 0x37170100, 0x6e2f0000, 0x06e30400, 0x6e310000, 0x37190100, 0x6e330000, 0x1b8d0200, 0x6e350000, 0x371b0100, 0x6e370000, 0x0dc70300, 0x6e390000, 0x371d0100, 0x6e3b0000, 0x1b8f0200, 0x6e3d0000, 0x371f0100, 0x6e3f0000, 0x01b90600, 0x6e410000, 0x37210100, 0x6e430000, 0x1b910200, 0x6e450000, 0x37230100, 0x6e470000, 0x0dc90300, 0x6e490000, 0x37250100, 0x6e4b0000, 0x1b930200, 0x6e4d0000, 0x37270100, 0x6e4f0000, 0x06e50400, 0x6e510000, 0x37290100, 0x6e530000, 0x1b950200, 0x6e550000, 0x372b0100, 0x6e570000, 0x0dcb0300, 0x6e590000, 0x372d0100, 0x6e5b0000, 0x1b970200, 0x6e5d0000, 0x372f0100, 0x6e5f0000, 0x03730500, 0x6e610000, 0x37310100, 0x6e630000, 0x1b990200, 0x6e650000, 0x37330100, 0x6e670000, 0x0dcd0300, 0x6e690000, 0x37350100, 0x6e6b0000, 0x1b9b0200, 0x6e6d0000, 0x37370100, 0x6e6f0000, 0x06e70400, 0x6e710000, 0x37390100, 0x6e730000, 0x1b9d0200, 0x6e750000, 0x373b0100, 0x6e770000, 0x0dcf0300, 0x6e790000, 0x373d0100, 0x6e7b0000, 0x1b9f0200, 0x6e7d0000, 0x373f0100, 0x6e7f0000, 0x00dd1600, 0x6e810000, 0x37410100, 0x6e830000, 0x1ba10200, 0x6e850000, 0x37430100, 0x6e870000, 0x0dd10300, 0x6e890000, 0x37450100, 0x6e8b0000, 0x1ba30200, 0x6e8d0000, 0x37470100, 0x6e8f0000, 0x06e90400, 0x6e910000, 0x37490100, 0x6e930000, 0x1ba50200, 0x6e950000, 0x374b0100, 0x6e970000, 0x0dd30300, 0x6e990000, 0x374d0100, 0x6e9b0000, 0x1ba70200, 0x6e9d0000, 0x374f0100, 0x6e9f0000, 0x03750500, 0x6ea10000, 0x37510100, 0x6ea30000, 0x1ba90200, 0x6ea50000, 0x37530100, 0x6ea70000, 0x0dd50300, 0x6ea90000, 0x37550100, 0x6eab0000, 0x1bab0200, 0x6ead0000, 0x37570100, 0x6eaf0000, 0x06eb0400, 0x6eb10000, 0x37590100, 0x6eb30000, 0x1bad0200, 0x6eb50000, 0x375b0100, 0x6eb70000, 0x0dd70300, 0x6eb90000, 0x375d0100, 0x6ebb0000, 0x1baf0200, 0x6ebd0000, 0x375f0100, 0x6ebf0000, 0x01bb0600, 0x6ec10000, 0x37610100, 0x6ec30000, 0x1bb10200, 0x6ec50000, 0x37630100, 0x6ec70000, 0x0dd90300, 0x6ec90000, 0x37650100, 0x6ecb0000, 0x1bb30200, 0x6ecd0000, 0x37670100, 0x6ecf0000, 0x06ed0400, 0x6ed10000, 0x37690100, 0x6ed30000, 0x1bb50200, 0x6ed50000, 0x376b0100, 0x6ed70000, 0x0ddb0300, 0x6ed90000, 0x376d0100, 0x6edb0000, 0x1bb70200, 0x6edd0000, 0x376f0100, 0x6edf0000, 0x03770500, 0x6ee10000, 0x37710100, 0x6ee30000, 0x1bb90200, 0x6ee50000, 0x37730100, 0x6ee70000, 0x0ddd0300, 0x6ee90000, 0x37750100, 0x6eeb0000, 0x1bbb0200, 0x6eed0000, 0x37770100, 0x6eef0000, 0x06ef0400, 0x6ef10000, 0x37790100, 0x6ef30000, 0x1bbd0200, 0x6ef50000, 0x377b0100, 0x6ef70000, 0x0ddf0300, 0x6ef90000, 0x377d0100, 0x6efb0000, 0x1bbf0200, 0x6efd0000, 0x377f0100, 0x6eff0000, + 0x006f2600, 0x6f010000, 0x37810100, 0x6f030000, 0x1bc10200, 0x6f050000, 0x37830100, 0x6f070000, 0x0de10300, 0x6f090000, 0x37850100, 0x6f0b0000, 0x1bc30200, 0x6f0d0000, 0x37870100, 0x6f0f0000, 0x06f10400, 0x6f110000, 0x37890100, 0x6f130000, 0x1bc50200, 0x6f150000, 0x378b0100, 0x6f170000, 0x0de30300, 0x6f190000, 0x378d0100, 0x6f1b0000, 0x1bc70200, 0x6f1d0000, 0x378f0100, 0x6f1f0000, 0x03790500, 0x6f210000, 0x37910100, 0x6f230000, 0x1bc90200, 0x6f250000, 0x37930100, 0x6f270000, 0x0de50300, 0x6f290000, 0x37950100, 0x6f2b0000, 0x1bcb0200, 0x6f2d0000, 0x37970100, 0x6f2f0000, 0x06f30400, 0x6f310000, 0x37990100, 0x6f330000, 0x1bcd0200, 0x6f350000, 0x379b0100, 0x6f370000, 0x0de70300, 0x6f390000, 0x379d0100, 0x6f3b0000, 0x1bcf0200, 0x6f3d0000, 0x379f0100, 0x6f3f0000, 0x01bd0600, 0x6f410000, 0x37a10100, 0x6f430000, 0x1bd10200, 0x6f450000, 0x37a30100, 0x6f470000, 0x0de90300, 0x6f490000, 0x37a50100, 0x6f4b0000, 0x1bd30200, 0x6f4d0000, 0x37a70100, 0x6f4f0000, 0x06f50400, 0x6f510000, 0x37a90100, 0x6f530000, 0x1bd50200, 0x6f550000, 0x37ab0100, 0x6f570000, 0x0deb0300, 0x6f590000, 0x37ad0100, 0x6f5b0000, 0x1bd70200, 0x6f5d0000, 0x37af0100, 0x6f5f0000, 0x037b0500, 0x6f610000, 0x37b10100, 0x6f630000, 0x1bd90200, 0x6f650000, 0x37b30100, 0x6f670000, 0x0ded0300, 0x6f690000, 0x37b50100, 0x6f6b0000, 0x1bdb0200, 0x6f6d0000, 0x37b70100, 0x6f6f0000, 0x06f70400, 0x6f710000, 0x37b90100, 0x6f730000, 0x1bdd0200, 0x6f750000, 0x37bb0100, 0x6f770000, 0x0def0300, 0x6f790000, 0x37bd0100, 0x6f7b0000, 0x1bdf0200, 0x6f7d0000, 0x37bf0100, 0x6f7f0000, 0x00df1600, 0x6f810000, 0x37c10100, 0x6f830000, 0x1be10200, 0x6f850000, 0x37c30100, 0x6f870000, 0x0df10300, 0x6f890000, 0x37c50100, 0x6f8b0000, 0x1be30200, 0x6f8d0000, 0x37c70100, 0x6f8f0000, 0x06f90400, 0x6f910000, 0x37c90100, 0x6f930000, 0x1be50200, 0x6f950000, 0x37cb0100, 0x6f970000, 0x0df30300, 0x6f990000, 0x37cd0100, 0x6f9b0000, 0x1be70200, 0x6f9d0000, 0x37cf0100, 0x6f9f0000, 0x037d0500, 0x6fa10000, 0x37d10100, 0x6fa30000, 0x1be90200, 0x6fa50000, 0x37d30100, 0x6fa70000, 0x0df50300, 0x6fa90000, 0x37d50100, 0x6fab0000, 0x1beb0200, 0x6fad0000, 0x37d70100, 0x6faf0000, 0x06fb0400, 0x6fb10000, 0x37d90100, 0x6fb30000, 0x1bed0200, 0x6fb50000, 0x37db0100, 0x6fb70000, 0x0df70300, 0x6fb90000, 0x37dd0100, 0x6fbb0000, 0x1bef0200, 0x6fbd0000, 0x37df0100, 0x6fbf0000, 0x01bf0600, 0x6fc10000, 0x37e10100, 0x6fc30000, 0x1bf10200, 0x6fc50000, 0x37e30100, 0x6fc70000, 0x0df90300, 0x6fc90000, 0x37e50100, 0x6fcb0000, 0x1bf30200, 0x6fcd0000, 0x37e70100, 0x6fcf0000, 0x06fd0400, 0x6fd10000, 0x37e90100, 0x6fd30000, 0x1bf50200, 0x6fd50000, 0x37eb0100, 0x6fd70000, 0x0dfb0300, 0x6fd90000, 0x37ed0100, 0x6fdb0000, 0x1bf70200, 0x6fdd0000, 0x37ef0100, 0x6fdf0000, 0x037f0500, 0x6fe10000, 0x37f10100, 0x6fe30000, 0x1bf90200, 0x6fe50000, 0x37f30100, 0x6fe70000, 0x0dfd0300, 0x6fe90000, 0x37f50100, 0x6feb0000, 0x1bfb0200, 0x6fed0000, 0x37f70100, 0x6fef0000, 0x06ff0400, 0x6ff10000, 0x37f90100, 0x6ff30000, 0x1bfd0200, 0x6ff50000, 0x37fb0100, 0x6ff70000, 0x0dff0300, 0x6ff90000, 0x37fd0100, 0x6ffb0000, 0x1bff0200, 0x6ffd0000, 0x37ff0100, 0x6fff0000, + 0x00076600, 0x70010000, 0x38010100, 0x70030000, 0x1c010200, 0x70050000, 0x38030100, 0x70070000, 0x0e010300, 0x70090000, 0x38050100, 0x700b0000, 0x1c030200, 0x700d0000, 0x38070100, 0x700f0000, 0x07010400, 0x70110000, 0x38090100, 0x70130000, 0x1c050200, 0x70150000, 0x380b0100, 0x70170000, 0x0e030300, 0x70190000, 0x380d0100, 0x701b0000, 0x1c070200, 0x701d0000, 0x380f0100, 0x701f0000, 0x03810500, 0x70210000, 0x38110100, 0x70230000, 0x1c090200, 0x70250000, 0x38130100, 0x70270000, 0x0e050300, 0x70290000, 0x38150100, 0x702b0000, 0x1c0b0200, 0x702d0000, 0x38170100, 0x702f0000, 0x07030400, 0x70310000, 0x38190100, 0x70330000, 0x1c0d0200, 0x70350000, 0x381b0100, 0x70370000, 0x0e070300, 0x70390000, 0x381d0100, 0x703b0000, 0x1c0f0200, 0x703d0000, 0x381f0100, 0x703f0000, 0x01c10600, 0x70410000, 0x38210100, 0x70430000, 0x1c110200, 0x70450000, 0x38230100, 0x70470000, 0x0e090300, 0x70490000, 0x38250100, 0x704b0000, 0x1c130200, 0x704d0000, 0x38270100, 0x704f0000, 0x07050400, 0x70510000, 0x38290100, 0x70530000, 0x1c150200, 0x70550000, 0x382b0100, 0x70570000, 0x0e0b0300, 0x70590000, 0x382d0100, 0x705b0000, 0x1c170200, 0x705d0000, 0x382f0100, 0x705f0000, 0x03830500, 0x70610000, 0x38310100, 0x70630000, 0x1c190200, 0x70650000, 0x38330100, 0x70670000, 0x0e0d0300, 0x70690000, 0x38350100, 0x706b0000, 0x1c1b0200, 0x706d0000, 0x38370100, 0x706f0000, 0x07070400, 0x70710000, 0x38390100, 0x70730000, 0x1c1d0200, 0x70750000, 0x383b0100, 0x70770000, 0x0e0f0300, 0x70790000, 0x383d0100, 0x707b0000, 0x1c1f0200, 0x707d0000, 0x383f0100, 0x707f0000, 0x00e11600, 0x70810000, 0x38410100, 0x70830000, 0x1c210200, 0x70850000, 0x38430100, 0x70870000, 0x0e110300, 0x70890000, 0x38450100, 0x708b0000, 0x1c230200, 0x708d0000, 0x38470100, 0x708f0000, 0x07090400, 0x70910000, 0x38490100, 0x70930000, 0x1c250200, 0x70950000, 0x384b0100, 0x70970000, 0x0e130300, 0x70990000, 0x384d0100, 0x709b0000, 0x1c270200, 0x709d0000, 0x384f0100, 0x709f0000, 0x03850500, 0x70a10000, 0x38510100, 0x70a30000, 0x1c290200, 0x70a50000, 0x38530100, 0x70a70000, 0x0e150300, 0x70a90000, 0x38550100, 0x70ab0000, 0x1c2b0200, 0x70ad0000, 0x38570100, 0x70af0000, 0x070b0400, 0x70b10000, 0x38590100, 0x70b30000, 0x1c2d0200, 0x70b50000, 0x385b0100, 0x70b70000, 0x0e170300, 0x70b90000, 0x385d0100, 0x70bb0000, 0x1c2f0200, 0x70bd0000, 0x385f0100, 0x70bf0000, 0x01c30600, 0x70c10000, 0x38610100, 0x70c30000, 0x1c310200, 0x70c50000, 0x38630100, 0x70c70000, 0x0e190300, 0x70c90000, 0x38650100, 0x70cb0000, 0x1c330200, 0x70cd0000, 0x38670100, 0x70cf0000, 0x070d0400, 0x70d10000, 0x38690100, 0x70d30000, 0x1c350200, 0x70d50000, 0x386b0100, 0x70d70000, 0x0e1b0300, 0x70d90000, 0x386d0100, 0x70db0000, 0x1c370200, 0x70dd0000, 0x386f0100, 0x70df0000, 0x03870500, 0x70e10000, 0x38710100, 0x70e30000, 0x1c390200, 0x70e50000, 0x38730100, 0x70e70000, 0x0e1d0300, 0x70e90000, 0x38750100, 0x70eb0000, 0x1c3b0200, 0x70ed0000, 0x38770100, 0x70ef0000, 0x070f0400, 0x70f10000, 0x38790100, 0x70f30000, 0x1c3d0200, 0x70f50000, 0x387b0100, 0x70f70000, 0x0e1f0300, 0x70f90000, 0x387d0100, 0x70fb0000, 0x1c3f0200, 0x70fd0000, 0x387f0100, 0x70ff0000, + 0x00712600, 0x71010000, 0x38810100, 0x71030000, 0x1c410200, 0x71050000, 0x38830100, 0x71070000, 0x0e210300, 0x71090000, 0x38850100, 0x710b0000, 0x1c430200, 0x710d0000, 0x38870100, 0x710f0000, 0x07110400, 0x71110000, 0x38890100, 0x71130000, 0x1c450200, 0x71150000, 0x388b0100, 0x71170000, 0x0e230300, 0x71190000, 0x388d0100, 0x711b0000, 0x1c470200, 0x711d0000, 0x388f0100, 0x711f0000, 0x03890500, 0x71210000, 0x38910100, 0x71230000, 0x1c490200, 0x71250000, 0x38930100, 0x71270000, 0x0e250300, 0x71290000, 0x38950100, 0x712b0000, 0x1c4b0200, 0x712d0000, 0x38970100, 0x712f0000, 0x07130400, 0x71310000, 0x38990100, 0x71330000, 0x1c4d0200, 0x71350000, 0x389b0100, 0x71370000, 0x0e270300, 0x71390000, 0x389d0100, 0x713b0000, 0x1c4f0200, 0x713d0000, 0x389f0100, 0x713f0000, 0x01c50600, 0x71410000, 0x38a10100, 0x71430000, 0x1c510200, 0x71450000, 0x38a30100, 0x71470000, 0x0e290300, 0x71490000, 0x38a50100, 0x714b0000, 0x1c530200, 0x714d0000, 0x38a70100, 0x714f0000, 0x07150400, 0x71510000, 0x38a90100, 0x71530000, 0x1c550200, 0x71550000, 0x38ab0100, 0x71570000, 0x0e2b0300, 0x71590000, 0x38ad0100, 0x715b0000, 0x1c570200, 0x715d0000, 0x38af0100, 0x715f0000, 0x038b0500, 0x71610000, 0x38b10100, 0x71630000, 0x1c590200, 0x71650000, 0x38b30100, 0x71670000, 0x0e2d0300, 0x71690000, 0x38b50100, 0x716b0000, 0x1c5b0200, 0x716d0000, 0x38b70100, 0x716f0000, 0x07170400, 0x71710000, 0x38b90100, 0x71730000, 0x1c5d0200, 0x71750000, 0x38bb0100, 0x71770000, 0x0e2f0300, 0x71790000, 0x38bd0100, 0x717b0000, 0x1c5f0200, 0x717d0000, 0x38bf0100, 0x717f0000, 0x00e31600, 0x71810000, 0x38c10100, 0x71830000, 0x1c610200, 0x71850000, 0x38c30100, 0x71870000, 0x0e310300, 0x71890000, 0x38c50100, 0x718b0000, 0x1c630200, 0x718d0000, 0x38c70100, 0x718f0000, 0x07190400, 0x71910000, 0x38c90100, 0x71930000, 0x1c650200, 0x71950000, 0x38cb0100, 0x71970000, 0x0e330300, 0x71990000, 0x38cd0100, 0x719b0000, 0x1c670200, 0x719d0000, 0x38cf0100, 0x719f0000, 0x038d0500, 0x71a10000, 0x38d10100, 0x71a30000, 0x1c690200, 0x71a50000, 0x38d30100, 0x71a70000, 0x0e350300, 0x71a90000, 0x38d50100, 0x71ab0000, 0x1c6b0200, 0x71ad0000, 0x38d70100, 0x71af0000, 0x071b0400, 0x71b10000, 0x38d90100, 0x71b30000, 0x1c6d0200, 0x71b50000, 0x38db0100, 0x71b70000, 0x0e370300, 0x71b90000, 0x38dd0100, 0x71bb0000, 0x1c6f0200, 0x71bd0000, 0x38df0100, 0x71bf0000, 0x01c70600, 0x71c10000, 0x38e10100, 0x71c30000, 0x1c710200, 0x71c50000, 0x38e30100, 0x71c70000, 0x0e390300, 0x71c90000, 0x38e50100, 0x71cb0000, 0x1c730200, 0x71cd0000, 0x38e70100, 0x71cf0000, 0x071d0400, 0x71d10000, 0x38e90100, 0x71d30000, 0x1c750200, 0x71d50000, 0x38eb0100, 0x71d70000, 0x0e3b0300, 0x71d90000, 0x38ed0100, 0x71db0000, 0x1c770200, 0x71dd0000, 0x38ef0100, 0x71df0000, 0x038f0500, 0x71e10000, 0x38f10100, 0x71e30000, 0x1c790200, 0x71e50000, 0x38f30100, 0x71e70000, 0x0e3d0300, 0x71e90000, 0x38f50100, 0x71eb0000, 0x1c7b0200, 0x71ed0000, 0x38f70100, 0x71ef0000, 0x071f0400, 0x71f10000, 0x38f90100, 0x71f30000, 0x1c7d0200, 0x71f50000, 0x38fb0100, 0x71f70000, 0x0e3f0300, 0x71f90000, 0x38fd0100, 0x71fb0000, 0x1c7f0200, 0x71fd0000, 0x38ff0100, 0x71ff0000, + 0x00393600, 0x72010000, 0x39010100, 0x72030000, 0x1c810200, 0x72050000, 0x39030100, 0x72070000, 0x0e410300, 0x72090000, 0x39050100, 0x720b0000, 0x1c830200, 0x720d0000, 0x39070100, 0x720f0000, 0x07210400, 0x72110000, 0x39090100, 0x72130000, 0x1c850200, 0x72150000, 0x390b0100, 0x72170000, 0x0e430300, 0x72190000, 0x390d0100, 0x721b0000, 0x1c870200, 0x721d0000, 0x390f0100, 0x721f0000, 0x03910500, 0x72210000, 0x39110100, 0x72230000, 0x1c890200, 0x72250000, 0x39130100, 0x72270000, 0x0e450300, 0x72290000, 0x39150100, 0x722b0000, 0x1c8b0200, 0x722d0000, 0x39170100, 0x722f0000, 0x07230400, 0x72310000, 0x39190100, 0x72330000, 0x1c8d0200, 0x72350000, 0x391b0100, 0x72370000, 0x0e470300, 0x72390000, 0x391d0100, 0x723b0000, 0x1c8f0200, 0x723d0000, 0x391f0100, 0x723f0000, 0x01c90600, 0x72410000, 0x39210100, 0x72430000, 0x1c910200, 0x72450000, 0x39230100, 0x72470000, 0x0e490300, 0x72490000, 0x39250100, 0x724b0000, 0x1c930200, 0x724d0000, 0x39270100, 0x724f0000, 0x07250400, 0x72510000, 0x39290100, 0x72530000, 0x1c950200, 0x72550000, 0x392b0100, 0x72570000, 0x0e4b0300, 0x72590000, 0x392d0100, 0x725b0000, 0x1c970200, 0x725d0000, 0x392f0100, 0x725f0000, 0x03930500, 0x72610000, 0x39310100, 0x72630000, 0x1c990200, 0x72650000, 0x39330100, 0x72670000, 0x0e4d0300, 0x72690000, 0x39350100, 0x726b0000, 0x1c9b0200, 0x726d0000, 0x39370100, 0x726f0000, 0x07270400, 0x72710000, 0x39390100, 0x72730000, 0x1c9d0200, 0x72750000, 0x393b0100, 0x72770000, 0x0e4f0300, 0x72790000, 0x393d0100, 0x727b0000, 0x1c9f0200, 0x727d0000, 0x393f0100, 0x727f0000, 0x00e51600, 0x72810000, 0x39410100, 0x72830000, 0x1ca10200, 0x72850000, 0x39430100, 0x72870000, 0x0e510300, 0x72890000, 0x39450100, 0x728b0000, 0x1ca30200, 0x728d0000, 0x39470100, 0x728f0000, 0x07290400, 0x72910000, 0x39490100, 0x72930000, 0x1ca50200, 0x72950000, 0x394b0100, 0x72970000, 0x0e530300, 0x72990000, 0x394d0100, 0x729b0000, 0x1ca70200, 0x729d0000, 0x394f0100, 0x729f0000, 0x03950500, 0x72a10000, 0x39510100, 0x72a30000, 0x1ca90200, 0x72a50000, 0x39530100, 0x72a70000, 0x0e550300, 0x72a90000, 0x39550100, 0x72ab0000, 0x1cab0200, 0x72ad0000, 0x39570100, 0x72af0000, 0x072b0400, 0x72b10000, 0x39590100, 0x72b30000, 0x1cad0200, 0x72b50000, 0x395b0100, 0x72b70000, 0x0e570300, 0x72b90000, 0x395d0100, 0x72bb0000, 0x1caf0200, 0x72bd0000, 0x395f0100, 0x72bf0000, 0x01cb0600, 0x72c10000, 0x39610100, 0x72c30000, 0x1cb10200, 0x72c50000, 0x39630100, 0x72c70000, 0x0e590300, 0x72c90000, 0x39650100, 0x72cb0000, 0x1cb30200, 0x72cd0000, 0x39670100, 0x72cf0000, 0x072d0400, 0x72d10000, 0x39690100, 0x72d30000, 0x1cb50200, 0x72d50000, 0x396b0100, 0x72d70000, 0x0e5b0300, 0x72d90000, 0x396d0100, 0x72db0000, 0x1cb70200, 0x72dd0000, 0x396f0100, 0x72df0000, 0x03970500, 0x72e10000, 0x39710100, 0x72e30000, 0x1cb90200, 0x72e50000, 0x39730100, 0x72e70000, 0x0e5d0300, 0x72e90000, 0x39750100, 0x72eb0000, 0x1cbb0200, 0x72ed0000, 0x39770100, 0x72ef0000, 0x072f0400, 0x72f10000, 0x39790100, 0x72f30000, 0x1cbd0200, 0x72f50000, 0x397b0100, 0x72f70000, 0x0e5f0300, 0x72f90000, 0x397d0100, 0x72fb0000, 0x1cbf0200, 0x72fd0000, 0x397f0100, 0x72ff0000, + 0x00732600, 0x73010000, 0x39810100, 0x73030000, 0x1cc10200, 0x73050000, 0x39830100, 0x73070000, 0x0e610300, 0x73090000, 0x39850100, 0x730b0000, 0x1cc30200, 0x730d0000, 0x39870100, 0x730f0000, 0x07310400, 0x73110000, 0x39890100, 0x73130000, 0x1cc50200, 0x73150000, 0x398b0100, 0x73170000, 0x0e630300, 0x73190000, 0x398d0100, 0x731b0000, 0x1cc70200, 0x731d0000, 0x398f0100, 0x731f0000, 0x03990500, 0x73210000, 0x39910100, 0x73230000, 0x1cc90200, 0x73250000, 0x39930100, 0x73270000, 0x0e650300, 0x73290000, 0x39950100, 0x732b0000, 0x1ccb0200, 0x732d0000, 0x39970100, 0x732f0000, 0x07330400, 0x73310000, 0x39990100, 0x73330000, 0x1ccd0200, 0x73350000, 0x399b0100, 0x73370000, 0x0e670300, 0x73390000, 0x399d0100, 0x733b0000, 0x1ccf0200, 0x733d0000, 0x399f0100, 0x733f0000, 0x01cd0600, 0x73410000, 0x39a10100, 0x73430000, 0x1cd10200, 0x73450000, 0x39a30100, 0x73470000, 0x0e690300, 0x73490000, 0x39a50100, 0x734b0000, 0x1cd30200, 0x734d0000, 0x39a70100, 0x734f0000, 0x07350400, 0x73510000, 0x39a90100, 0x73530000, 0x1cd50200, 0x73550000, 0x39ab0100, 0x73570000, 0x0e6b0300, 0x73590000, 0x39ad0100, 0x735b0000, 0x1cd70200, 0x735d0000, 0x39af0100, 0x735f0000, 0x039b0500, 0x73610000, 0x39b10100, 0x73630000, 0x1cd90200, 0x73650000, 0x39b30100, 0x73670000, 0x0e6d0300, 0x73690000, 0x39b50100, 0x736b0000, 0x1cdb0200, 0x736d0000, 0x39b70100, 0x736f0000, 0x07370400, 0x73710000, 0x39b90100, 0x73730000, 0x1cdd0200, 0x73750000, 0x39bb0100, 0x73770000, 0x0e6f0300, 0x73790000, 0x39bd0100, 0x737b0000, 0x1cdf0200, 0x737d0000, 0x39bf0100, 0x737f0000, 0x00e71600, 0x73810000, 0x39c10100, 0x73830000, 0x1ce10200, 0x73850000, 0x39c30100, 0x73870000, 0x0e710300, 0x73890000, 0x39c50100, 0x738b0000, 0x1ce30200, 0x738d0000, 0x39c70100, 0x738f0000, 0x07390400, 0x73910000, 0x39c90100, 0x73930000, 0x1ce50200, 0x73950000, 0x39cb0100, 0x73970000, 0x0e730300, 0x73990000, 0x39cd0100, 0x739b0000, 0x1ce70200, 0x739d0000, 0x39cf0100, 0x739f0000, 0x039d0500, 0x73a10000, 0x39d10100, 0x73a30000, 0x1ce90200, 0x73a50000, 0x39d30100, 0x73a70000, 0x0e750300, 0x73a90000, 0x39d50100, 0x73ab0000, 0x1ceb0200, 0x73ad0000, 0x39d70100, 0x73af0000, 0x073b0400, 0x73b10000, 0x39d90100, 0x73b30000, 0x1ced0200, 0x73b50000, 0x39db0100, 0x73b70000, 0x0e770300, 0x73b90000, 0x39dd0100, 0x73bb0000, 0x1cef0200, 0x73bd0000, 0x39df0100, 0x73bf0000, 0x01cf0600, 0x73c10000, 0x39e10100, 0x73c30000, 0x1cf10200, 0x73c50000, 0x39e30100, 0x73c70000, 0x0e790300, 0x73c90000, 0x39e50100, 0x73cb0000, 0x1cf30200, 0x73cd0000, 0x39e70100, 0x73cf0000, 0x073d0400, 0x73d10000, 0x39e90100, 0x73d30000, 0x1cf50200, 0x73d50000, 0x39eb0100, 0x73d70000, 0x0e7b0300, 0x73d90000, 0x39ed0100, 0x73db0000, 0x1cf70200, 0x73dd0000, 0x39ef0100, 0x73df0000, 0x039f0500, 0x73e10000, 0x39f10100, 0x73e30000, 0x1cf90200, 0x73e50000, 0x39f30100, 0x73e70000, 0x0e7d0300, 0x73e90000, 0x39f50100, 0x73eb0000, 0x1cfb0200, 0x73ed0000, 0x39f70100, 0x73ef0000, 0x073f0400, 0x73f10000, 0x39f90100, 0x73f30000, 0x1cfd0200, 0x73f50000, 0x39fb0100, 0x73f70000, 0x0e7f0300, 0x73f90000, 0x39fd0100, 0x73fb0000, 0x1cff0200, 0x73fd0000, 0x39ff0100, 0x73ff0000, + 0x001d4600, 0x74010000, 0x3a010100, 0x74030000, 0x1d010200, 0x74050000, 0x3a030100, 0x74070000, 0x0e810300, 0x74090000, 0x3a050100, 0x740b0000, 0x1d030200, 0x740d0000, 0x3a070100, 0x740f0000, 0x07410400, 0x74110000, 0x3a090100, 0x74130000, 0x1d050200, 0x74150000, 0x3a0b0100, 0x74170000, 0x0e830300, 0x74190000, 0x3a0d0100, 0x741b0000, 0x1d070200, 0x741d0000, 0x3a0f0100, 0x741f0000, 0x03a10500, 0x74210000, 0x3a110100, 0x74230000, 0x1d090200, 0x74250000, 0x3a130100, 0x74270000, 0x0e850300, 0x74290000, 0x3a150100, 0x742b0000, 0x1d0b0200, 0x742d0000, 0x3a170100, 0x742f0000, 0x07430400, 0x74310000, 0x3a190100, 0x74330000, 0x1d0d0200, 0x74350000, 0x3a1b0100, 0x74370000, 0x0e870300, 0x74390000, 0x3a1d0100, 0x743b0000, 0x1d0f0200, 0x743d0000, 0x3a1f0100, 0x743f0000, 0x01d10600, 0x74410000, 0x3a210100, 0x74430000, 0x1d110200, 0x74450000, 0x3a230100, 0x74470000, 0x0e890300, 0x74490000, 0x3a250100, 0x744b0000, 0x1d130200, 0x744d0000, 0x3a270100, 0x744f0000, 0x07450400, 0x74510000, 0x3a290100, 0x74530000, 0x1d150200, 0x74550000, 0x3a2b0100, 0x74570000, 0x0e8b0300, 0x74590000, 0x3a2d0100, 0x745b0000, 0x1d170200, 0x745d0000, 0x3a2f0100, 0x745f0000, 0x03a30500, 0x74610000, 0x3a310100, 0x74630000, 0x1d190200, 0x74650000, 0x3a330100, 0x74670000, 0x0e8d0300, 0x74690000, 0x3a350100, 0x746b0000, 0x1d1b0200, 0x746d0000, 0x3a370100, 0x746f0000, 0x07470400, 0x74710000, 0x3a390100, 0x74730000, 0x1d1d0200, 0x74750000, 0x3a3b0100, 0x74770000, 0x0e8f0300, 0x74790000, 0x3a3d0100, 0x747b0000, 0x1d1f0200, 0x747d0000, 0x3a3f0100, 0x747f0000, 0x00e91600, 0x74810000, 0x3a410100, 0x74830000, 0x1d210200, 0x74850000, 0x3a430100, 0x74870000, 0x0e910300, 0x74890000, 0x3a450100, 0x748b0000, 0x1d230200, 0x748d0000, 0x3a470100, 0x748f0000, 0x07490400, 0x74910000, 0x3a490100, 0x74930000, 0x1d250200, 0x74950000, 0x3a4b0100, 0x74970000, 0x0e930300, 0x74990000, 0x3a4d0100, 0x749b0000, 0x1d270200, 0x749d0000, 0x3a4f0100, 0x749f0000, 0x03a50500, 0x74a10000, 0x3a510100, 0x74a30000, 0x1d290200, 0x74a50000, 0x3a530100, 0x74a70000, 0x0e950300, 0x74a90000, 0x3a550100, 0x74ab0000, 0x1d2b0200, 0x74ad0000, 0x3a570100, 0x74af0000, 0x074b0400, 0x74b10000, 0x3a590100, 0x74b30000, 0x1d2d0200, 0x74b50000, 0x3a5b0100, 0x74b70000, 0x0e970300, 0x74b90000, 0x3a5d0100, 0x74bb0000, 0x1d2f0200, 0x74bd0000, 0x3a5f0100, 0x74bf0000, 0x01d30600, 0x74c10000, 0x3a610100, 0x74c30000, 0x1d310200, 0x74c50000, 0x3a630100, 0x74c70000, 0x0e990300, 0x74c90000, 0x3a650100, 0x74cb0000, 0x1d330200, 0x74cd0000, 0x3a670100, 0x74cf0000, 0x074d0400, 0x74d10000, 0x3a690100, 0x74d30000, 0x1d350200, 0x74d50000, 0x3a6b0100, 0x74d70000, 0x0e9b0300, 0x74d90000, 0x3a6d0100, 0x74db0000, 0x1d370200, 0x74dd0000, 0x3a6f0100, 0x74df0000, 0x03a70500, 0x74e10000, 0x3a710100, 0x74e30000, 0x1d390200, 0x74e50000, 0x3a730100, 0x74e70000, 0x0e9d0300, 0x74e90000, 0x3a750100, 0x74eb0000, 0x1d3b0200, 0x74ed0000, 0x3a770100, 0x74ef0000, 0x074f0400, 0x74f10000, 0x3a790100, 0x74f30000, 0x1d3d0200, 0x74f50000, 0x3a7b0100, 0x74f70000, 0x0e9f0300, 0x74f90000, 0x3a7d0100, 0x74fb0000, 0x1d3f0200, 0x74fd0000, 0x3a7f0100, 0x74ff0000, + 0x00752600, 0x75010000, 0x3a810100, 0x75030000, 0x1d410200, 0x75050000, 0x3a830100, 0x75070000, 0x0ea10300, 0x75090000, 0x3a850100, 0x750b0000, 0x1d430200, 0x750d0000, 0x3a870100, 0x750f0000, 0x07510400, 0x75110000, 0x3a890100, 0x75130000, 0x1d450200, 0x75150000, 0x3a8b0100, 0x75170000, 0x0ea30300, 0x75190000, 0x3a8d0100, 0x751b0000, 0x1d470200, 0x751d0000, 0x3a8f0100, 0x751f0000, 0x03a90500, 0x75210000, 0x3a910100, 0x75230000, 0x1d490200, 0x75250000, 0x3a930100, 0x75270000, 0x0ea50300, 0x75290000, 0x3a950100, 0x752b0000, 0x1d4b0200, 0x752d0000, 0x3a970100, 0x752f0000, 0x07530400, 0x75310000, 0x3a990100, 0x75330000, 0x1d4d0200, 0x75350000, 0x3a9b0100, 0x75370000, 0x0ea70300, 0x75390000, 0x3a9d0100, 0x753b0000, 0x1d4f0200, 0x753d0000, 0x3a9f0100, 0x753f0000, 0x01d50600, 0x75410000, 0x3aa10100, 0x75430000, 0x1d510200, 0x75450000, 0x3aa30100, 0x75470000, 0x0ea90300, 0x75490000, 0x3aa50100, 0x754b0000, 0x1d530200, 0x754d0000, 0x3aa70100, 0x754f0000, 0x07550400, 0x75510000, 0x3aa90100, 0x75530000, 0x1d550200, 0x75550000, 0x3aab0100, 0x75570000, 0x0eab0300, 0x75590000, 0x3aad0100, 0x755b0000, 0x1d570200, 0x755d0000, 0x3aaf0100, 0x755f0000, 0x03ab0500, 0x75610000, 0x3ab10100, 0x75630000, 0x1d590200, 0x75650000, 0x3ab30100, 0x75670000, 0x0ead0300, 0x75690000, 0x3ab50100, 0x756b0000, 0x1d5b0200, 0x756d0000, 0x3ab70100, 0x756f0000, 0x07570400, 0x75710000, 0x3ab90100, 0x75730000, 0x1d5d0200, 0x75750000, 0x3abb0100, 0x75770000, 0x0eaf0300, 0x75790000, 0x3abd0100, 0x757b0000, 0x1d5f0200, 0x757d0000, 0x3abf0100, 0x757f0000, 0x00eb1600, 0x75810000, 0x3ac10100, 0x75830000, 0x1d610200, 0x75850000, 0x3ac30100, 0x75870000, 0x0eb10300, 0x75890000, 0x3ac50100, 0x758b0000, 0x1d630200, 0x758d0000, 0x3ac70100, 0x758f0000, 0x07590400, 0x75910000, 0x3ac90100, 0x75930000, 0x1d650200, 0x75950000, 0x3acb0100, 0x75970000, 0x0eb30300, 0x75990000, 0x3acd0100, 0x759b0000, 0x1d670200, 0x759d0000, 0x3acf0100, 0x759f0000, 0x03ad0500, 0x75a10000, 0x3ad10100, 0x75a30000, 0x1d690200, 0x75a50000, 0x3ad30100, 0x75a70000, 0x0eb50300, 0x75a90000, 0x3ad50100, 0x75ab0000, 0x1d6b0200, 0x75ad0000, 0x3ad70100, 0x75af0000, 0x075b0400, 0x75b10000, 0x3ad90100, 0x75b30000, 0x1d6d0200, 0x75b50000, 0x3adb0100, 0x75b70000, 0x0eb70300, 0x75b90000, 0x3add0100, 0x75bb0000, 0x1d6f0200, 0x75bd0000, 0x3adf0100, 0x75bf0000, 0x01d70600, 0x75c10000, 0x3ae10100, 0x75c30000, 0x1d710200, 0x75c50000, 0x3ae30100, 0x75c70000, 0x0eb90300, 0x75c90000, 0x3ae50100, 0x75cb0000, 0x1d730200, 0x75cd0000, 0x3ae70100, 0x75cf0000, 0x075d0400, 0x75d10000, 0x3ae90100, 0x75d30000, 0x1d750200, 0x75d50000, 0x3aeb0100, 0x75d70000, 0x0ebb0300, 0x75d90000, 0x3aed0100, 0x75db0000, 0x1d770200, 0x75dd0000, 0x3aef0100, 0x75df0000, 0x03af0500, 0x75e10000, 0x3af10100, 0x75e30000, 0x1d790200, 0x75e50000, 0x3af30100, 0x75e70000, 0x0ebd0300, 0x75e90000, 0x3af50100, 0x75eb0000, 0x1d7b0200, 0x75ed0000, 0x3af70100, 0x75ef0000, 0x075f0400, 0x75f10000, 0x3af90100, 0x75f30000, 0x1d7d0200, 0x75f50000, 0x3afb0100, 0x75f70000, 0x0ebf0300, 0x75f90000, 0x3afd0100, 0x75fb0000, 0x1d7f0200, 0x75fd0000, 0x3aff0100, 0x75ff0000, + 0x003b3600, 0x76010000, 0x3b010100, 0x76030000, 0x1d810200, 0x76050000, 0x3b030100, 0x76070000, 0x0ec10300, 0x76090000, 0x3b050100, 0x760b0000, 0x1d830200, 0x760d0000, 0x3b070100, 0x760f0000, 0x07610400, 0x76110000, 0x3b090100, 0x76130000, 0x1d850200, 0x76150000, 0x3b0b0100, 0x76170000, 0x0ec30300, 0x76190000, 0x3b0d0100, 0x761b0000, 0x1d870200, 0x761d0000, 0x3b0f0100, 0x761f0000, 0x03b10500, 0x76210000, 0x3b110100, 0x76230000, 0x1d890200, 0x76250000, 0x3b130100, 0x76270000, 0x0ec50300, 0x76290000, 0x3b150100, 0x762b0000, 0x1d8b0200, 0x762d0000, 0x3b170100, 0x762f0000, 0x07630400, 0x76310000, 0x3b190100, 0x76330000, 0x1d8d0200, 0x76350000, 0x3b1b0100, 0x76370000, 0x0ec70300, 0x76390000, 0x3b1d0100, 0x763b0000, 0x1d8f0200, 0x763d0000, 0x3b1f0100, 0x763f0000, 0x01d90600, 0x76410000, 0x3b210100, 0x76430000, 0x1d910200, 0x76450000, 0x3b230100, 0x76470000, 0x0ec90300, 0x76490000, 0x3b250100, 0x764b0000, 0x1d930200, 0x764d0000, 0x3b270100, 0x764f0000, 0x07650400, 0x76510000, 0x3b290100, 0x76530000, 0x1d950200, 0x76550000, 0x3b2b0100, 0x76570000, 0x0ecb0300, 0x76590000, 0x3b2d0100, 0x765b0000, 0x1d970200, 0x765d0000, 0x3b2f0100, 0x765f0000, 0x03b30500, 0x76610000, 0x3b310100, 0x76630000, 0x1d990200, 0x76650000, 0x3b330100, 0x76670000, 0x0ecd0300, 0x76690000, 0x3b350100, 0x766b0000, 0x1d9b0200, 0x766d0000, 0x3b370100, 0x766f0000, 0x07670400, 0x76710000, 0x3b390100, 0x76730000, 0x1d9d0200, 0x76750000, 0x3b3b0100, 0x76770000, 0x0ecf0300, 0x76790000, 0x3b3d0100, 0x767b0000, 0x1d9f0200, 0x767d0000, 0x3b3f0100, 0x767f0000, 0x00ed1600, 0x76810000, 0x3b410100, 0x76830000, 0x1da10200, 0x76850000, 0x3b430100, 0x76870000, 0x0ed10300, 0x76890000, 0x3b450100, 0x768b0000, 0x1da30200, 0x768d0000, 0x3b470100, 0x768f0000, 0x07690400, 0x76910000, 0x3b490100, 0x76930000, 0x1da50200, 0x76950000, 0x3b4b0100, 0x76970000, 0x0ed30300, 0x76990000, 0x3b4d0100, 0x769b0000, 0x1da70200, 0x769d0000, 0x3b4f0100, 0x769f0000, 0x03b50500, 0x76a10000, 0x3b510100, 0x76a30000, 0x1da90200, 0x76a50000, 0x3b530100, 0x76a70000, 0x0ed50300, 0x76a90000, 0x3b550100, 0x76ab0000, 0x1dab0200, 0x76ad0000, 0x3b570100, 0x76af0000, 0x076b0400, 0x76b10000, 0x3b590100, 0x76b30000, 0x1dad0200, 0x76b50000, 0x3b5b0100, 0x76b70000, 0x0ed70300, 0x76b90000, 0x3b5d0100, 0x76bb0000, 0x1daf0200, 0x76bd0000, 0x3b5f0100, 0x76bf0000, 0x01db0600, 0x76c10000, 0x3b610100, 0x76c30000, 0x1db10200, 0x76c50000, 0x3b630100, 0x76c70000, 0x0ed90300, 0x76c90000, 0x3b650100, 0x76cb0000, 0x1db30200, 0x76cd0000, 0x3b670100, 0x76cf0000, 0x076d0400, 0x76d10000, 0x3b690100, 0x76d30000, 0x1db50200, 0x76d50000, 0x3b6b0100, 0x76d70000, 0x0edb0300, 0x76d90000, 0x3b6d0100, 0x76db0000, 0x1db70200, 0x76dd0000, 0x3b6f0100, 0x76df0000, 0x03b70500, 0x76e10000, 0x3b710100, 0x76e30000, 0x1db90200, 0x76e50000, 0x3b730100, 0x76e70000, 0x0edd0300, 0x76e90000, 0x3b750100, 0x76eb0000, 0x1dbb0200, 0x76ed0000, 0x3b770100, 0x76ef0000, 0x076f0400, 0x76f10000, 0x3b790100, 0x76f30000, 0x1dbd0200, 0x76f50000, 0x3b7b0100, 0x76f70000, 0x0edf0300, 0x76f90000, 0x3b7d0100, 0x76fb0000, 0x1dbf0200, 0x76fd0000, 0x3b7f0100, 0x76ff0000, + 0x00772600, 0x77010000, 0x3b810100, 0x77030000, 0x1dc10200, 0x77050000, 0x3b830100, 0x77070000, 0x0ee10300, 0x77090000, 0x3b850100, 0x770b0000, 0x1dc30200, 0x770d0000, 0x3b870100, 0x770f0000, 0x07710400, 0x77110000, 0x3b890100, 0x77130000, 0x1dc50200, 0x77150000, 0x3b8b0100, 0x77170000, 0x0ee30300, 0x77190000, 0x3b8d0100, 0x771b0000, 0x1dc70200, 0x771d0000, 0x3b8f0100, 0x771f0000, 0x03b90500, 0x77210000, 0x3b910100, 0x77230000, 0x1dc90200, 0x77250000, 0x3b930100, 0x77270000, 0x0ee50300, 0x77290000, 0x3b950100, 0x772b0000, 0x1dcb0200, 0x772d0000, 0x3b970100, 0x772f0000, 0x07730400, 0x77310000, 0x3b990100, 0x77330000, 0x1dcd0200, 0x77350000, 0x3b9b0100, 0x77370000, 0x0ee70300, 0x77390000, 0x3b9d0100, 0x773b0000, 0x1dcf0200, 0x773d0000, 0x3b9f0100, 0x773f0000, 0x01dd0600, 0x77410000, 0x3ba10100, 0x77430000, 0x1dd10200, 0x77450000, 0x3ba30100, 0x77470000, 0x0ee90300, 0x77490000, 0x3ba50100, 0x774b0000, 0x1dd30200, 0x774d0000, 0x3ba70100, 0x774f0000, 0x07750400, 0x77510000, 0x3ba90100, 0x77530000, 0x1dd50200, 0x77550000, 0x3bab0100, 0x77570000, 0x0eeb0300, 0x77590000, 0x3bad0100, 0x775b0000, 0x1dd70200, 0x775d0000, 0x3baf0100, 0x775f0000, 0x03bb0500, 0x77610000, 0x3bb10100, 0x77630000, 0x1dd90200, 0x77650000, 0x3bb30100, 0x77670000, 0x0eed0300, 0x77690000, 0x3bb50100, 0x776b0000, 0x1ddb0200, 0x776d0000, 0x3bb70100, 0x776f0000, 0x07770400, 0x77710000, 0x3bb90100, 0x77730000, 0x1ddd0200, 0x77750000, 0x3bbb0100, 0x77770000, 0x0eef0300, 0x77790000, 0x3bbd0100, 0x777b0000, 0x1ddf0200, 0x777d0000, 0x3bbf0100, 0x777f0000, 0x00ef1600, 0x77810000, 0x3bc10100, 0x77830000, 0x1de10200, 0x77850000, 0x3bc30100, 0x77870000, 0x0ef10300, 0x77890000, 0x3bc50100, 0x778b0000, 0x1de30200, 0x778d0000, 0x3bc70100, 0x778f0000, 0x07790400, 0x77910000, 0x3bc90100, 0x77930000, 0x1de50200, 0x77950000, 0x3bcb0100, 0x77970000, 0x0ef30300, 0x77990000, 0x3bcd0100, 0x779b0000, 0x1de70200, 0x779d0000, 0x3bcf0100, 0x779f0000, 0x03bd0500, 0x77a10000, 0x3bd10100, 0x77a30000, 0x1de90200, 0x77a50000, 0x3bd30100, 0x77a70000, 0x0ef50300, 0x77a90000, 0x3bd50100, 0x77ab0000, 0x1deb0200, 0x77ad0000, 0x3bd70100, 0x77af0000, 0x077b0400, 0x77b10000, 0x3bd90100, 0x77b30000, 0x1ded0200, 0x77b50000, 0x3bdb0100, 0x77b70000, 0x0ef70300, 0x77b90000, 0x3bdd0100, 0x77bb0000, 0x1def0200, 0x77bd0000, 0x3bdf0100, 0x77bf0000, 0x01df0600, 0x77c10000, 0x3be10100, 0x77c30000, 0x1df10200, 0x77c50000, 0x3be30100, 0x77c70000, 0x0ef90300, 0x77c90000, 0x3be50100, 0x77cb0000, 0x1df30200, 0x77cd0000, 0x3be70100, 0x77cf0000, 0x077d0400, 0x77d10000, 0x3be90100, 0x77d30000, 0x1df50200, 0x77d50000, 0x3beb0100, 0x77d70000, 0x0efb0300, 0x77d90000, 0x3bed0100, 0x77db0000, 0x1df70200, 0x77dd0000, 0x3bef0100, 0x77df0000, 0x03bf0500, 0x77e10000, 0x3bf10100, 0x77e30000, 0x1df90200, 0x77e50000, 0x3bf30100, 0x77e70000, 0x0efd0300, 0x77e90000, 0x3bf50100, 0x77eb0000, 0x1dfb0200, 0x77ed0000, 0x3bf70100, 0x77ef0000, 0x077f0400, 0x77f10000, 0x3bf90100, 0x77f30000, 0x1dfd0200, 0x77f50000, 0x3bfb0100, 0x77f70000, 0x0eff0300, 0x77f90000, 0x3bfd0100, 0x77fb0000, 0x1dff0200, 0x77fd0000, 0x3bff0100, 0x77ff0000, + 0x000f5600, 0x78010000, 0x3c010100, 0x78030000, 0x1e010200, 0x78050000, 0x3c030100, 0x78070000, 0x0f010300, 0x78090000, 0x3c050100, 0x780b0000, 0x1e030200, 0x780d0000, 0x3c070100, 0x780f0000, 0x07810400, 0x78110000, 0x3c090100, 0x78130000, 0x1e050200, 0x78150000, 0x3c0b0100, 0x78170000, 0x0f030300, 0x78190000, 0x3c0d0100, 0x781b0000, 0x1e070200, 0x781d0000, 0x3c0f0100, 0x781f0000, 0x03c10500, 0x78210000, 0x3c110100, 0x78230000, 0x1e090200, 0x78250000, 0x3c130100, 0x78270000, 0x0f050300, 0x78290000, 0x3c150100, 0x782b0000, 0x1e0b0200, 0x782d0000, 0x3c170100, 0x782f0000, 0x07830400, 0x78310000, 0x3c190100, 0x78330000, 0x1e0d0200, 0x78350000, 0x3c1b0100, 0x78370000, 0x0f070300, 0x78390000, 0x3c1d0100, 0x783b0000, 0x1e0f0200, 0x783d0000, 0x3c1f0100, 0x783f0000, 0x01e10600, 0x78410000, 0x3c210100, 0x78430000, 0x1e110200, 0x78450000, 0x3c230100, 0x78470000, 0x0f090300, 0x78490000, 0x3c250100, 0x784b0000, 0x1e130200, 0x784d0000, 0x3c270100, 0x784f0000, 0x07850400, 0x78510000, 0x3c290100, 0x78530000, 0x1e150200, 0x78550000, 0x3c2b0100, 0x78570000, 0x0f0b0300, 0x78590000, 0x3c2d0100, 0x785b0000, 0x1e170200, 0x785d0000, 0x3c2f0100, 0x785f0000, 0x03c30500, 0x78610000, 0x3c310100, 0x78630000, 0x1e190200, 0x78650000, 0x3c330100, 0x78670000, 0x0f0d0300, 0x78690000, 0x3c350100, 0x786b0000, 0x1e1b0200, 0x786d0000, 0x3c370100, 0x786f0000, 0x07870400, 0x78710000, 0x3c390100, 0x78730000, 0x1e1d0200, 0x78750000, 0x3c3b0100, 0x78770000, 0x0f0f0300, 0x78790000, 0x3c3d0100, 0x787b0000, 0x1e1f0200, 0x787d0000, 0x3c3f0100, 0x787f0000, 0x00f11600, 0x78810000, 0x3c410100, 0x78830000, 0x1e210200, 0x78850000, 0x3c430100, 0x78870000, 0x0f110300, 0x78890000, 0x3c450100, 0x788b0000, 0x1e230200, 0x788d0000, 0x3c470100, 0x788f0000, 0x07890400, 0x78910000, 0x3c490100, 0x78930000, 0x1e250200, 0x78950000, 0x3c4b0100, 0x78970000, 0x0f130300, 0x78990000, 0x3c4d0100, 0x789b0000, 0x1e270200, 0x789d0000, 0x3c4f0100, 0x789f0000, 0x03c50500, 0x78a10000, 0x3c510100, 0x78a30000, 0x1e290200, 0x78a50000, 0x3c530100, 0x78a70000, 0x0f150300, 0x78a90000, 0x3c550100, 0x78ab0000, 0x1e2b0200, 0x78ad0000, 0x3c570100, 0x78af0000, 0x078b0400, 0x78b10000, 0x3c590100, 0x78b30000, 0x1e2d0200, 0x78b50000, 0x3c5b0100, 0x78b70000, 0x0f170300, 0x78b90000, 0x3c5d0100, 0x78bb0000, 0x1e2f0200, 0x78bd0000, 0x3c5f0100, 0x78bf0000, 0x01e30600, 0x78c10000, 0x3c610100, 0x78c30000, 0x1e310200, 0x78c50000, 0x3c630100, 0x78c70000, 0x0f190300, 0x78c90000, 0x3c650100, 0x78cb0000, 0x1e330200, 0x78cd0000, 0x3c670100, 0x78cf0000, 0x078d0400, 0x78d10000, 0x3c690100, 0x78d30000, 0x1e350200, 0x78d50000, 0x3c6b0100, 0x78d70000, 0x0f1b0300, 0x78d90000, 0x3c6d0100, 0x78db0000, 0x1e370200, 0x78dd0000, 0x3c6f0100, 0x78df0000, 0x03c70500, 0x78e10000, 0x3c710100, 0x78e30000, 0x1e390200, 0x78e50000, 0x3c730100, 0x78e70000, 0x0f1d0300, 0x78e90000, 0x3c750100, 0x78eb0000, 0x1e3b0200, 0x78ed0000, 0x3c770100, 0x78ef0000, 0x078f0400, 0x78f10000, 0x3c790100, 0x78f30000, 0x1e3d0200, 0x78f50000, 0x3c7b0100, 0x78f70000, 0x0f1f0300, 0x78f90000, 0x3c7d0100, 0x78fb0000, 0x1e3f0200, 0x78fd0000, 0x3c7f0100, 0x78ff0000, + 0x00792600, 0x79010000, 0x3c810100, 0x79030000, 0x1e410200, 0x79050000, 0x3c830100, 0x79070000, 0x0f210300, 0x79090000, 0x3c850100, 0x790b0000, 0x1e430200, 0x790d0000, 0x3c870100, 0x790f0000, 0x07910400, 0x79110000, 0x3c890100, 0x79130000, 0x1e450200, 0x79150000, 0x3c8b0100, 0x79170000, 0x0f230300, 0x79190000, 0x3c8d0100, 0x791b0000, 0x1e470200, 0x791d0000, 0x3c8f0100, 0x791f0000, 0x03c90500, 0x79210000, 0x3c910100, 0x79230000, 0x1e490200, 0x79250000, 0x3c930100, 0x79270000, 0x0f250300, 0x79290000, 0x3c950100, 0x792b0000, 0x1e4b0200, 0x792d0000, 0x3c970100, 0x792f0000, 0x07930400, 0x79310000, 0x3c990100, 0x79330000, 0x1e4d0200, 0x79350000, 0x3c9b0100, 0x79370000, 0x0f270300, 0x79390000, 0x3c9d0100, 0x793b0000, 0x1e4f0200, 0x793d0000, 0x3c9f0100, 0x793f0000, 0x01e50600, 0x79410000, 0x3ca10100, 0x79430000, 0x1e510200, 0x79450000, 0x3ca30100, 0x79470000, 0x0f290300, 0x79490000, 0x3ca50100, 0x794b0000, 0x1e530200, 0x794d0000, 0x3ca70100, 0x794f0000, 0x07950400, 0x79510000, 0x3ca90100, 0x79530000, 0x1e550200, 0x79550000, 0x3cab0100, 0x79570000, 0x0f2b0300, 0x79590000, 0x3cad0100, 0x795b0000, 0x1e570200, 0x795d0000, 0x3caf0100, 0x795f0000, 0x03cb0500, 0x79610000, 0x3cb10100, 0x79630000, 0x1e590200, 0x79650000, 0x3cb30100, 0x79670000, 0x0f2d0300, 0x79690000, 0x3cb50100, 0x796b0000, 0x1e5b0200, 0x796d0000, 0x3cb70100, 0x796f0000, 0x07970400, 0x79710000, 0x3cb90100, 0x79730000, 0x1e5d0200, 0x79750000, 0x3cbb0100, 0x79770000, 0x0f2f0300, 0x79790000, 0x3cbd0100, 0x797b0000, 0x1e5f0200, 0x797d0000, 0x3cbf0100, 0x797f0000, 0x00f31600, 0x79810000, 0x3cc10100, 0x79830000, 0x1e610200, 0x79850000, 0x3cc30100, 0x79870000, 0x0f310300, 0x79890000, 0x3cc50100, 0x798b0000, 0x1e630200, 0x798d0000, 0x3cc70100, 0x798f0000, 0x07990400, 0x79910000, 0x3cc90100, 0x79930000, 0x1e650200, 0x79950000, 0x3ccb0100, 0x79970000, 0x0f330300, 0x79990000, 0x3ccd0100, 0x799b0000, 0x1e670200, 0x799d0000, 0x3ccf0100, 0x799f0000, 0x03cd0500, 0x79a10000, 0x3cd10100, 0x79a30000, 0x1e690200, 0x79a50000, 0x3cd30100, 0x79a70000, 0x0f350300, 0x79a90000, 0x3cd50100, 0x79ab0000, 0x1e6b0200, 0x79ad0000, 0x3cd70100, 0x79af0000, 0x079b0400, 0x79b10000, 0x3cd90100, 0x79b30000, 0x1e6d0200, 0x79b50000, 0x3cdb0100, 0x79b70000, 0x0f370300, 0x79b90000, 0x3cdd0100, 0x79bb0000, 0x1e6f0200, 0x79bd0000, 0x3cdf0100, 0x79bf0000, 0x01e70600, 0x79c10000, 0x3ce10100, 0x79c30000, 0x1e710200, 0x79c50000, 0x3ce30100, 0x79c70000, 0x0f390300, 0x79c90000, 0x3ce50100, 0x79cb0000, 0x1e730200, 0x79cd0000, 0x3ce70100, 0x79cf0000, 0x079d0400, 0x79d10000, 0x3ce90100, 0x79d30000, 0x1e750200, 0x79d50000, 0x3ceb0100, 0x79d70000, 0x0f3b0300, 0x79d90000, 0x3ced0100, 0x79db0000, 0x1e770200, 0x79dd0000, 0x3cef0100, 0x79df0000, 0x03cf0500, 0x79e10000, 0x3cf10100, 0x79e30000, 0x1e790200, 0x79e50000, 0x3cf30100, 0x79e70000, 0x0f3d0300, 0x79e90000, 0x3cf50100, 0x79eb0000, 0x1e7b0200, 0x79ed0000, 0x3cf70100, 0x79ef0000, 0x079f0400, 0x79f10000, 0x3cf90100, 0x79f30000, 0x1e7d0200, 0x79f50000, 0x3cfb0100, 0x79f70000, 0x0f3f0300, 0x79f90000, 0x3cfd0100, 0x79fb0000, 0x1e7f0200, 0x79fd0000, 0x3cff0100, 0x79ff0000, + 0x003d3600, 0x7a010000, 0x3d010100, 0x7a030000, 0x1e810200, 0x7a050000, 0x3d030100, 0x7a070000, 0x0f410300, 0x7a090000, 0x3d050100, 0x7a0b0000, 0x1e830200, 0x7a0d0000, 0x3d070100, 0x7a0f0000, 0x07a10400, 0x7a110000, 0x3d090100, 0x7a130000, 0x1e850200, 0x7a150000, 0x3d0b0100, 0x7a170000, 0x0f430300, 0x7a190000, 0x3d0d0100, 0x7a1b0000, 0x1e870200, 0x7a1d0000, 0x3d0f0100, 0x7a1f0000, 0x03d10500, 0x7a210000, 0x3d110100, 0x7a230000, 0x1e890200, 0x7a250000, 0x3d130100, 0x7a270000, 0x0f450300, 0x7a290000, 0x3d150100, 0x7a2b0000, 0x1e8b0200, 0x7a2d0000, 0x3d170100, 0x7a2f0000, 0x07a30400, 0x7a310000, 0x3d190100, 0x7a330000, 0x1e8d0200, 0x7a350000, 0x3d1b0100, 0x7a370000, 0x0f470300, 0x7a390000, 0x3d1d0100, 0x7a3b0000, 0x1e8f0200, 0x7a3d0000, 0x3d1f0100, 0x7a3f0000, 0x01e90600, 0x7a410000, 0x3d210100, 0x7a430000, 0x1e910200, 0x7a450000, 0x3d230100, 0x7a470000, 0x0f490300, 0x7a490000, 0x3d250100, 0x7a4b0000, 0x1e930200, 0x7a4d0000, 0x3d270100, 0x7a4f0000, 0x07a50400, 0x7a510000, 0x3d290100, 0x7a530000, 0x1e950200, 0x7a550000, 0x3d2b0100, 0x7a570000, 0x0f4b0300, 0x7a590000, 0x3d2d0100, 0x7a5b0000, 0x1e970200, 0x7a5d0000, 0x3d2f0100, 0x7a5f0000, 0x03d30500, 0x7a610000, 0x3d310100, 0x7a630000, 0x1e990200, 0x7a650000, 0x3d330100, 0x7a670000, 0x0f4d0300, 0x7a690000, 0x3d350100, 0x7a6b0000, 0x1e9b0200, 0x7a6d0000, 0x3d370100, 0x7a6f0000, 0x07a70400, 0x7a710000, 0x3d390100, 0x7a730000, 0x1e9d0200, 0x7a750000, 0x3d3b0100, 0x7a770000, 0x0f4f0300, 0x7a790000, 0x3d3d0100, 0x7a7b0000, 0x1e9f0200, 0x7a7d0000, 0x3d3f0100, 0x7a7f0000, 0x00f51600, 0x7a810000, 0x3d410100, 0x7a830000, 0x1ea10200, 0x7a850000, 0x3d430100, 0x7a870000, 0x0f510300, 0x7a890000, 0x3d450100, 0x7a8b0000, 0x1ea30200, 0x7a8d0000, 0x3d470100, 0x7a8f0000, 0x07a90400, 0x7a910000, 0x3d490100, 0x7a930000, 0x1ea50200, 0x7a950000, 0x3d4b0100, 0x7a970000, 0x0f530300, 0x7a990000, 0x3d4d0100, 0x7a9b0000, 0x1ea70200, 0x7a9d0000, 0x3d4f0100, 0x7a9f0000, 0x03d50500, 0x7aa10000, 0x3d510100, 0x7aa30000, 0x1ea90200, 0x7aa50000, 0x3d530100, 0x7aa70000, 0x0f550300, 0x7aa90000, 0x3d550100, 0x7aab0000, 0x1eab0200, 0x7aad0000, 0x3d570100, 0x7aaf0000, 0x07ab0400, 0x7ab10000, 0x3d590100, 0x7ab30000, 0x1ead0200, 0x7ab50000, 0x3d5b0100, 0x7ab70000, 0x0f570300, 0x7ab90000, 0x3d5d0100, 0x7abb0000, 0x1eaf0200, 0x7abd0000, 0x3d5f0100, 0x7abf0000, 0x01eb0600, 0x7ac10000, 0x3d610100, 0x7ac30000, 0x1eb10200, 0x7ac50000, 0x3d630100, 0x7ac70000, 0x0f590300, 0x7ac90000, 0x3d650100, 0x7acb0000, 0x1eb30200, 0x7acd0000, 0x3d670100, 0x7acf0000, 0x07ad0400, 0x7ad10000, 0x3d690100, 0x7ad30000, 0x1eb50200, 0x7ad50000, 0x3d6b0100, 0x7ad70000, 0x0f5b0300, 0x7ad90000, 0x3d6d0100, 0x7adb0000, 0x1eb70200, 0x7add0000, 0x3d6f0100, 0x7adf0000, 0x03d70500, 0x7ae10000, 0x3d710100, 0x7ae30000, 0x1eb90200, 0x7ae50000, 0x3d730100, 0x7ae70000, 0x0f5d0300, 0x7ae90000, 0x3d750100, 0x7aeb0000, 0x1ebb0200, 0x7aed0000, 0x3d770100, 0x7aef0000, 0x07af0400, 0x7af10000, 0x3d790100, 0x7af30000, 0x1ebd0200, 0x7af50000, 0x3d7b0100, 0x7af70000, 0x0f5f0300, 0x7af90000, 0x3d7d0100, 0x7afb0000, 0x1ebf0200, 0x7afd0000, 0x3d7f0100, 0x7aff0000, + 0x007b2600, 0x7b010000, 0x3d810100, 0x7b030000, 0x1ec10200, 0x7b050000, 0x3d830100, 0x7b070000, 0x0f610300, 0x7b090000, 0x3d850100, 0x7b0b0000, 0x1ec30200, 0x7b0d0000, 0x3d870100, 0x7b0f0000, 0x07b10400, 0x7b110000, 0x3d890100, 0x7b130000, 0x1ec50200, 0x7b150000, 0x3d8b0100, 0x7b170000, 0x0f630300, 0x7b190000, 0x3d8d0100, 0x7b1b0000, 0x1ec70200, 0x7b1d0000, 0x3d8f0100, 0x7b1f0000, 0x03d90500, 0x7b210000, 0x3d910100, 0x7b230000, 0x1ec90200, 0x7b250000, 0x3d930100, 0x7b270000, 0x0f650300, 0x7b290000, 0x3d950100, 0x7b2b0000, 0x1ecb0200, 0x7b2d0000, 0x3d970100, 0x7b2f0000, 0x07b30400, 0x7b310000, 0x3d990100, 0x7b330000, 0x1ecd0200, 0x7b350000, 0x3d9b0100, 0x7b370000, 0x0f670300, 0x7b390000, 0x3d9d0100, 0x7b3b0000, 0x1ecf0200, 0x7b3d0000, 0x3d9f0100, 0x7b3f0000, 0x01ed0600, 0x7b410000, 0x3da10100, 0x7b430000, 0x1ed10200, 0x7b450000, 0x3da30100, 0x7b470000, 0x0f690300, 0x7b490000, 0x3da50100, 0x7b4b0000, 0x1ed30200, 0x7b4d0000, 0x3da70100, 0x7b4f0000, 0x07b50400, 0x7b510000, 0x3da90100, 0x7b530000, 0x1ed50200, 0x7b550000, 0x3dab0100, 0x7b570000, 0x0f6b0300, 0x7b590000, 0x3dad0100, 0x7b5b0000, 0x1ed70200, 0x7b5d0000, 0x3daf0100, 0x7b5f0000, 0x03db0500, 0x7b610000, 0x3db10100, 0x7b630000, 0x1ed90200, 0x7b650000, 0x3db30100, 0x7b670000, 0x0f6d0300, 0x7b690000, 0x3db50100, 0x7b6b0000, 0x1edb0200, 0x7b6d0000, 0x3db70100, 0x7b6f0000, 0x07b70400, 0x7b710000, 0x3db90100, 0x7b730000, 0x1edd0200, 0x7b750000, 0x3dbb0100, 0x7b770000, 0x0f6f0300, 0x7b790000, 0x3dbd0100, 0x7b7b0000, 0x1edf0200, 0x7b7d0000, 0x3dbf0100, 0x7b7f0000, 0x00f71600, 0x7b810000, 0x3dc10100, 0x7b830000, 0x1ee10200, 0x7b850000, 0x3dc30100, 0x7b870000, 0x0f710300, 0x7b890000, 0x3dc50100, 0x7b8b0000, 0x1ee30200, 0x7b8d0000, 0x3dc70100, 0x7b8f0000, 0x07b90400, 0x7b910000, 0x3dc90100, 0x7b930000, 0x1ee50200, 0x7b950000, 0x3dcb0100, 0x7b970000, 0x0f730300, 0x7b990000, 0x3dcd0100, 0x7b9b0000, 0x1ee70200, 0x7b9d0000, 0x3dcf0100, 0x7b9f0000, 0x03dd0500, 0x7ba10000, 0x3dd10100, 0x7ba30000, 0x1ee90200, 0x7ba50000, 0x3dd30100, 0x7ba70000, 0x0f750300, 0x7ba90000, 0x3dd50100, 0x7bab0000, 0x1eeb0200, 0x7bad0000, 0x3dd70100, 0x7baf0000, 0x07bb0400, 0x7bb10000, 0x3dd90100, 0x7bb30000, 0x1eed0200, 0x7bb50000, 0x3ddb0100, 0x7bb70000, 0x0f770300, 0x7bb90000, 0x3ddd0100, 0x7bbb0000, 0x1eef0200, 0x7bbd0000, 0x3ddf0100, 0x7bbf0000, 0x01ef0600, 0x7bc10000, 0x3de10100, 0x7bc30000, 0x1ef10200, 0x7bc50000, 0x3de30100, 0x7bc70000, 0x0f790300, 0x7bc90000, 0x3de50100, 0x7bcb0000, 0x1ef30200, 0x7bcd0000, 0x3de70100, 0x7bcf0000, 0x07bd0400, 0x7bd10000, 0x3de90100, 0x7bd30000, 0x1ef50200, 0x7bd50000, 0x3deb0100, 0x7bd70000, 0x0f7b0300, 0x7bd90000, 0x3ded0100, 0x7bdb0000, 0x1ef70200, 0x7bdd0000, 0x3def0100, 0x7bdf0000, 0x03df0500, 0x7be10000, 0x3df10100, 0x7be30000, 0x1ef90200, 0x7be50000, 0x3df30100, 0x7be70000, 0x0f7d0300, 0x7be90000, 0x3df50100, 0x7beb0000, 0x1efb0200, 0x7bed0000, 0x3df70100, 0x7bef0000, 0x07bf0400, 0x7bf10000, 0x3df90100, 0x7bf30000, 0x1efd0200, 0x7bf50000, 0x3dfb0100, 0x7bf70000, 0x0f7f0300, 0x7bf90000, 0x3dfd0100, 0x7bfb0000, 0x1eff0200, 0x7bfd0000, 0x3dff0100, 0x7bff0000, + 0x001f4600, 0x7c010000, 0x3e010100, 0x7c030000, 0x1f010200, 0x7c050000, 0x3e030100, 0x7c070000, 0x0f810300, 0x7c090000, 0x3e050100, 0x7c0b0000, 0x1f030200, 0x7c0d0000, 0x3e070100, 0x7c0f0000, 0x07c10400, 0x7c110000, 0x3e090100, 0x7c130000, 0x1f050200, 0x7c150000, 0x3e0b0100, 0x7c170000, 0x0f830300, 0x7c190000, 0x3e0d0100, 0x7c1b0000, 0x1f070200, 0x7c1d0000, 0x3e0f0100, 0x7c1f0000, 0x03e10500, 0x7c210000, 0x3e110100, 0x7c230000, 0x1f090200, 0x7c250000, 0x3e130100, 0x7c270000, 0x0f850300, 0x7c290000, 0x3e150100, 0x7c2b0000, 0x1f0b0200, 0x7c2d0000, 0x3e170100, 0x7c2f0000, 0x07c30400, 0x7c310000, 0x3e190100, 0x7c330000, 0x1f0d0200, 0x7c350000, 0x3e1b0100, 0x7c370000, 0x0f870300, 0x7c390000, 0x3e1d0100, 0x7c3b0000, 0x1f0f0200, 0x7c3d0000, 0x3e1f0100, 0x7c3f0000, 0x01f10600, 0x7c410000, 0x3e210100, 0x7c430000, 0x1f110200, 0x7c450000, 0x3e230100, 0x7c470000, 0x0f890300, 0x7c490000, 0x3e250100, 0x7c4b0000, 0x1f130200, 0x7c4d0000, 0x3e270100, 0x7c4f0000, 0x07c50400, 0x7c510000, 0x3e290100, 0x7c530000, 0x1f150200, 0x7c550000, 0x3e2b0100, 0x7c570000, 0x0f8b0300, 0x7c590000, 0x3e2d0100, 0x7c5b0000, 0x1f170200, 0x7c5d0000, 0x3e2f0100, 0x7c5f0000, 0x03e30500, 0x7c610000, 0x3e310100, 0x7c630000, 0x1f190200, 0x7c650000, 0x3e330100, 0x7c670000, 0x0f8d0300, 0x7c690000, 0x3e350100, 0x7c6b0000, 0x1f1b0200, 0x7c6d0000, 0x3e370100, 0x7c6f0000, 0x07c70400, 0x7c710000, 0x3e390100, 0x7c730000, 0x1f1d0200, 0x7c750000, 0x3e3b0100, 0x7c770000, 0x0f8f0300, 0x7c790000, 0x3e3d0100, 0x7c7b0000, 0x1f1f0200, 0x7c7d0000, 0x3e3f0100, 0x7c7f0000, 0x00f91600, 0x7c810000, 0x3e410100, 0x7c830000, 0x1f210200, 0x7c850000, 0x3e430100, 0x7c870000, 0x0f910300, 0x7c890000, 0x3e450100, 0x7c8b0000, 0x1f230200, 0x7c8d0000, 0x3e470100, 0x7c8f0000, 0x07c90400, 0x7c910000, 0x3e490100, 0x7c930000, 0x1f250200, 0x7c950000, 0x3e4b0100, 0x7c970000, 0x0f930300, 0x7c990000, 0x3e4d0100, 0x7c9b0000, 0x1f270200, 0x7c9d0000, 0x3e4f0100, 0x7c9f0000, 0x03e50500, 0x7ca10000, 0x3e510100, 0x7ca30000, 0x1f290200, 0x7ca50000, 0x3e530100, 0x7ca70000, 0x0f950300, 0x7ca90000, 0x3e550100, 0x7cab0000, 0x1f2b0200, 0x7cad0000, 0x3e570100, 0x7caf0000, 0x07cb0400, 0x7cb10000, 0x3e590100, 0x7cb30000, 0x1f2d0200, 0x7cb50000, 0x3e5b0100, 0x7cb70000, 0x0f970300, 0x7cb90000, 0x3e5d0100, 0x7cbb0000, 0x1f2f0200, 0x7cbd0000, 0x3e5f0100, 0x7cbf0000, 0x01f30600, 0x7cc10000, 0x3e610100, 0x7cc30000, 0x1f310200, 0x7cc50000, 0x3e630100, 0x7cc70000, 0x0f990300, 0x7cc90000, 0x3e650100, 0x7ccb0000, 0x1f330200, 0x7ccd0000, 0x3e670100, 0x7ccf0000, 0x07cd0400, 0x7cd10000, 0x3e690100, 0x7cd30000, 0x1f350200, 0x7cd50000, 0x3e6b0100, 0x7cd70000, 0x0f9b0300, 0x7cd90000, 0x3e6d0100, 0x7cdb0000, 0x1f370200, 0x7cdd0000, 0x3e6f0100, 0x7cdf0000, 0x03e70500, 0x7ce10000, 0x3e710100, 0x7ce30000, 0x1f390200, 0x7ce50000, 0x3e730100, 0x7ce70000, 0x0f9d0300, 0x7ce90000, 0x3e750100, 0x7ceb0000, 0x1f3b0200, 0x7ced0000, 0x3e770100, 0x7cef0000, 0x07cf0400, 0x7cf10000, 0x3e790100, 0x7cf30000, 0x1f3d0200, 0x7cf50000, 0x3e7b0100, 0x7cf70000, 0x0f9f0300, 0x7cf90000, 0x3e7d0100, 0x7cfb0000, 0x1f3f0200, 0x7cfd0000, 0x3e7f0100, 0x7cff0000, + 0x007d2600, 0x7d010000, 0x3e810100, 0x7d030000, 0x1f410200, 0x7d050000, 0x3e830100, 0x7d070000, 0x0fa10300, 0x7d090000, 0x3e850100, 0x7d0b0000, 0x1f430200, 0x7d0d0000, 0x3e870100, 0x7d0f0000, 0x07d10400, 0x7d110000, 0x3e890100, 0x7d130000, 0x1f450200, 0x7d150000, 0x3e8b0100, 0x7d170000, 0x0fa30300, 0x7d190000, 0x3e8d0100, 0x7d1b0000, 0x1f470200, 0x7d1d0000, 0x3e8f0100, 0x7d1f0000, 0x03e90500, 0x7d210000, 0x3e910100, 0x7d230000, 0x1f490200, 0x7d250000, 0x3e930100, 0x7d270000, 0x0fa50300, 0x7d290000, 0x3e950100, 0x7d2b0000, 0x1f4b0200, 0x7d2d0000, 0x3e970100, 0x7d2f0000, 0x07d30400, 0x7d310000, 0x3e990100, 0x7d330000, 0x1f4d0200, 0x7d350000, 0x3e9b0100, 0x7d370000, 0x0fa70300, 0x7d390000, 0x3e9d0100, 0x7d3b0000, 0x1f4f0200, 0x7d3d0000, 0x3e9f0100, 0x7d3f0000, 0x01f50600, 0x7d410000, 0x3ea10100, 0x7d430000, 0x1f510200, 0x7d450000, 0x3ea30100, 0x7d470000, 0x0fa90300, 0x7d490000, 0x3ea50100, 0x7d4b0000, 0x1f530200, 0x7d4d0000, 0x3ea70100, 0x7d4f0000, 0x07d50400, 0x7d510000, 0x3ea90100, 0x7d530000, 0x1f550200, 0x7d550000, 0x3eab0100, 0x7d570000, 0x0fab0300, 0x7d590000, 0x3ead0100, 0x7d5b0000, 0x1f570200, 0x7d5d0000, 0x3eaf0100, 0x7d5f0000, 0x03eb0500, 0x7d610000, 0x3eb10100, 0x7d630000, 0x1f590200, 0x7d650000, 0x3eb30100, 0x7d670000, 0x0fad0300, 0x7d690000, 0x3eb50100, 0x7d6b0000, 0x1f5b0200, 0x7d6d0000, 0x3eb70100, 0x7d6f0000, 0x07d70400, 0x7d710000, 0x3eb90100, 0x7d730000, 0x1f5d0200, 0x7d750000, 0x3ebb0100, 0x7d770000, 0x0faf0300, 0x7d790000, 0x3ebd0100, 0x7d7b0000, 0x1f5f0200, 0x7d7d0000, 0x3ebf0100, 0x7d7f0000, 0x00fb1600, 0x7d810000, 0x3ec10100, 0x7d830000, 0x1f610200, 0x7d850000, 0x3ec30100, 0x7d870000, 0x0fb10300, 0x7d890000, 0x3ec50100, 0x7d8b0000, 0x1f630200, 0x7d8d0000, 0x3ec70100, 0x7d8f0000, 0x07d90400, 0x7d910000, 0x3ec90100, 0x7d930000, 0x1f650200, 0x7d950000, 0x3ecb0100, 0x7d970000, 0x0fb30300, 0x7d990000, 0x3ecd0100, 0x7d9b0000, 0x1f670200, 0x7d9d0000, 0x3ecf0100, 0x7d9f0000, 0x03ed0500, 0x7da10000, 0x3ed10100, 0x7da30000, 0x1f690200, 0x7da50000, 0x3ed30100, 0x7da70000, 0x0fb50300, 0x7da90000, 0x3ed50100, 0x7dab0000, 0x1f6b0200, 0x7dad0000, 0x3ed70100, 0x7daf0000, 0x07db0400, 0x7db10000, 0x3ed90100, 0x7db30000, 0x1f6d0200, 0x7db50000, 0x3edb0100, 0x7db70000, 0x0fb70300, 0x7db90000, 0x3edd0100, 0x7dbb0000, 0x1f6f0200, 0x7dbd0000, 0x3edf0100, 0x7dbf0000, 0x01f70600, 0x7dc10000, 0x3ee10100, 0x7dc30000, 0x1f710200, 0x7dc50000, 0x3ee30100, 0x7dc70000, 0x0fb90300, 0x7dc90000, 0x3ee50100, 0x7dcb0000, 0x1f730200, 0x7dcd0000, 0x3ee70100, 0x7dcf0000, 0x07dd0400, 0x7dd10000, 0x3ee90100, 0x7dd30000, 0x1f750200, 0x7dd50000, 0x3eeb0100, 0x7dd70000, 0x0fbb0300, 0x7dd90000, 0x3eed0100, 0x7ddb0000, 0x1f770200, 0x7ddd0000, 0x3eef0100, 0x7ddf0000, 0x03ef0500, 0x7de10000, 0x3ef10100, 0x7de30000, 0x1f790200, 0x7de50000, 0x3ef30100, 0x7de70000, 0x0fbd0300, 0x7de90000, 0x3ef50100, 0x7deb0000, 0x1f7b0200, 0x7ded0000, 0x3ef70100, 0x7def0000, 0x07df0400, 0x7df10000, 0x3ef90100, 0x7df30000, 0x1f7d0200, 0x7df50000, 0x3efb0100, 0x7df70000, 0x0fbf0300, 0x7df90000, 0x3efd0100, 0x7dfb0000, 0x1f7f0200, 0x7dfd0000, 0x3eff0100, 0x7dff0000, + 0x003f3600, 0x7e010000, 0x3f010100, 0x7e030000, 0x1f810200, 0x7e050000, 0x3f030100, 0x7e070000, 0x0fc10300, 0x7e090000, 0x3f050100, 0x7e0b0000, 0x1f830200, 0x7e0d0000, 0x3f070100, 0x7e0f0000, 0x07e10400, 0x7e110000, 0x3f090100, 0x7e130000, 0x1f850200, 0x7e150000, 0x3f0b0100, 0x7e170000, 0x0fc30300, 0x7e190000, 0x3f0d0100, 0x7e1b0000, 0x1f870200, 0x7e1d0000, 0x3f0f0100, 0x7e1f0000, 0x03f10500, 0x7e210000, 0x3f110100, 0x7e230000, 0x1f890200, 0x7e250000, 0x3f130100, 0x7e270000, 0x0fc50300, 0x7e290000, 0x3f150100, 0x7e2b0000, 0x1f8b0200, 0x7e2d0000, 0x3f170100, 0x7e2f0000, 0x07e30400, 0x7e310000, 0x3f190100, 0x7e330000, 0x1f8d0200, 0x7e350000, 0x3f1b0100, 0x7e370000, 0x0fc70300, 0x7e390000, 0x3f1d0100, 0x7e3b0000, 0x1f8f0200, 0x7e3d0000, 0x3f1f0100, 0x7e3f0000, 0x01f90600, 0x7e410000, 0x3f210100, 0x7e430000, 0x1f910200, 0x7e450000, 0x3f230100, 0x7e470000, 0x0fc90300, 0x7e490000, 0x3f250100, 0x7e4b0000, 0x1f930200, 0x7e4d0000, 0x3f270100, 0x7e4f0000, 0x07e50400, 0x7e510000, 0x3f290100, 0x7e530000, 0x1f950200, 0x7e550000, 0x3f2b0100, 0x7e570000, 0x0fcb0300, 0x7e590000, 0x3f2d0100, 0x7e5b0000, 0x1f970200, 0x7e5d0000, 0x3f2f0100, 0x7e5f0000, 0x03f30500, 0x7e610000, 0x3f310100, 0x7e630000, 0x1f990200, 0x7e650000, 0x3f330100, 0x7e670000, 0x0fcd0300, 0x7e690000, 0x3f350100, 0x7e6b0000, 0x1f9b0200, 0x7e6d0000, 0x3f370100, 0x7e6f0000, 0x07e70400, 0x7e710000, 0x3f390100, 0x7e730000, 0x1f9d0200, 0x7e750000, 0x3f3b0100, 0x7e770000, 0x0fcf0300, 0x7e790000, 0x3f3d0100, 0x7e7b0000, 0x1f9f0200, 0x7e7d0000, 0x3f3f0100, 0x7e7f0000, 0x00fd1600, 0x7e810000, 0x3f410100, 0x7e830000, 0x1fa10200, 0x7e850000, 0x3f430100, 0x7e870000, 0x0fd10300, 0x7e890000, 0x3f450100, 0x7e8b0000, 0x1fa30200, 0x7e8d0000, 0x3f470100, 0x7e8f0000, 0x07e90400, 0x7e910000, 0x3f490100, 0x7e930000, 0x1fa50200, 0x7e950000, 0x3f4b0100, 0x7e970000, 0x0fd30300, 0x7e990000, 0x3f4d0100, 0x7e9b0000, 0x1fa70200, 0x7e9d0000, 0x3f4f0100, 0x7e9f0000, 0x03f50500, 0x7ea10000, 0x3f510100, 0x7ea30000, 0x1fa90200, 0x7ea50000, 0x3f530100, 0x7ea70000, 0x0fd50300, 0x7ea90000, 0x3f550100, 0x7eab0000, 0x1fab0200, 0x7ead0000, 0x3f570100, 0x7eaf0000, 0x07eb0400, 0x7eb10000, 0x3f590100, 0x7eb30000, 0x1fad0200, 0x7eb50000, 0x3f5b0100, 0x7eb70000, 0x0fd70300, 0x7eb90000, 0x3f5d0100, 0x7ebb0000, 0x1faf0200, 0x7ebd0000, 0x3f5f0100, 0x7ebf0000, 0x01fb0600, 0x7ec10000, 0x3f610100, 0x7ec30000, 0x1fb10200, 0x7ec50000, 0x3f630100, 0x7ec70000, 0x0fd90300, 0x7ec90000, 0x3f650100, 0x7ecb0000, 0x1fb30200, 0x7ecd0000, 0x3f670100, 0x7ecf0000, 0x07ed0400, 0x7ed10000, 0x3f690100, 0x7ed30000, 0x1fb50200, 0x7ed50000, 0x3f6b0100, 0x7ed70000, 0x0fdb0300, 0x7ed90000, 0x3f6d0100, 0x7edb0000, 0x1fb70200, 0x7edd0000, 0x3f6f0100, 0x7edf0000, 0x03f70500, 0x7ee10000, 0x3f710100, 0x7ee30000, 0x1fb90200, 0x7ee50000, 0x3f730100, 0x7ee70000, 0x0fdd0300, 0x7ee90000, 0x3f750100, 0x7eeb0000, 0x1fbb0200, 0x7eed0000, 0x3f770100, 0x7eef0000, 0x07ef0400, 0x7ef10000, 0x3f790100, 0x7ef30000, 0x1fbd0200, 0x7ef50000, 0x3f7b0100, 0x7ef70000, 0x0fdf0300, 0x7ef90000, 0x3f7d0100, 0x7efb0000, 0x1fbf0200, 0x7efd0000, 0x3f7f0100, 0x7eff0000, + 0x007f2600, 0x7f010000, 0x3f810100, 0x7f030000, 0x1fc10200, 0x7f050000, 0x3f830100, 0x7f070000, 0x0fe10300, 0x7f090000, 0x3f850100, 0x7f0b0000, 0x1fc30200, 0x7f0d0000, 0x3f870100, 0x7f0f0000, 0x07f10400, 0x7f110000, 0x3f890100, 0x7f130000, 0x1fc50200, 0x7f150000, 0x3f8b0100, 0x7f170000, 0x0fe30300, 0x7f190000, 0x3f8d0100, 0x7f1b0000, 0x1fc70200, 0x7f1d0000, 0x3f8f0100, 0x7f1f0000, 0x03f90500, 0x7f210000, 0x3f910100, 0x7f230000, 0x1fc90200, 0x7f250000, 0x3f930100, 0x7f270000, 0x0fe50300, 0x7f290000, 0x3f950100, 0x7f2b0000, 0x1fcb0200, 0x7f2d0000, 0x3f970100, 0x7f2f0000, 0x07f30400, 0x7f310000, 0x3f990100, 0x7f330000, 0x1fcd0200, 0x7f350000, 0x3f9b0100, 0x7f370000, 0x0fe70300, 0x7f390000, 0x3f9d0100, 0x7f3b0000, 0x1fcf0200, 0x7f3d0000, 0x3f9f0100, 0x7f3f0000, 0x01fd0600, 0x7f410000, 0x3fa10100, 0x7f430000, 0x1fd10200, 0x7f450000, 0x3fa30100, 0x7f470000, 0x0fe90300, 0x7f490000, 0x3fa50100, 0x7f4b0000, 0x1fd30200, 0x7f4d0000, 0x3fa70100, 0x7f4f0000, 0x07f50400, 0x7f510000, 0x3fa90100, 0x7f530000, 0x1fd50200, 0x7f550000, 0x3fab0100, 0x7f570000, 0x0feb0300, 0x7f590000, 0x3fad0100, 0x7f5b0000, 0x1fd70200, 0x7f5d0000, 0x3faf0100, 0x7f5f0000, 0x03fb0500, 0x7f610000, 0x3fb10100, 0x7f630000, 0x1fd90200, 0x7f650000, 0x3fb30100, 0x7f670000, 0x0fed0300, 0x7f690000, 0x3fb50100, 0x7f6b0000, 0x1fdb0200, 0x7f6d0000, 0x3fb70100, 0x7f6f0000, 0x07f70400, 0x7f710000, 0x3fb90100, 0x7f730000, 0x1fdd0200, 0x7f750000, 0x3fbb0100, 0x7f770000, 0x0fef0300, 0x7f790000, 0x3fbd0100, 0x7f7b0000, 0x1fdf0200, 0x7f7d0000, 0x3fbf0100, 0x7f7f0000, 0x00ff1600, 0x7f810000, 0x3fc10100, 0x7f830000, 0x1fe10200, 0x7f850000, 0x3fc30100, 0x7f870000, 0x0ff10300, 0x7f890000, 0x3fc50100, 0x7f8b0000, 0x1fe30200, 0x7f8d0000, 0x3fc70100, 0x7f8f0000, 0x07f90400, 0x7f910000, 0x3fc90100, 0x7f930000, 0x1fe50200, 0x7f950000, 0x3fcb0100, 0x7f970000, 0x0ff30300, 0x7f990000, 0x3fcd0100, 0x7f9b0000, 0x1fe70200, 0x7f9d0000, 0x3fcf0100, 0x7f9f0000, 0x03fd0500, 0x7fa10000, 0x3fd10100, 0x7fa30000, 0x1fe90200, 0x7fa50000, 0x3fd30100, 0x7fa70000, 0x0ff50300, 0x7fa90000, 0x3fd50100, 0x7fab0000, 0x1feb0200, 0x7fad0000, 0x3fd70100, 0x7faf0000, 0x07fb0400, 0x7fb10000, 0x3fd90100, 0x7fb30000, 0x1fed0200, 0x7fb50000, 0x3fdb0100, 0x7fb70000, 0x0ff70300, 0x7fb90000, 0x3fdd0100, 0x7fbb0000, 0x1fef0200, 0x7fbd0000, 0x3fdf0100, 0x7fbf0000, 0x01ff0600, 0x7fc10000, 0x3fe10100, 0x7fc30000, 0x1ff10200, 0x7fc50000, 0x3fe30100, 0x7fc70000, 0x0ff90300, 0x7fc90000, 0x3fe50100, 0x7fcb0000, 0x1ff30200, 0x7fcd0000, 0x3fe70100, 0x7fcf0000, 0x07fd0400, 0x7fd10000, 0x3fe90100, 0x7fd30000, 0x1ff50200, 0x7fd50000, 0x3feb0100, 0x7fd70000, 0x0ffb0300, 0x7fd90000, 0x3fed0100, 0x7fdb0000, 0x1ff70200, 0x7fdd0000, 0x3fef0100, 0x7fdf0000, 0x03ff0500, 0x7fe10000, 0x3ff10100, 0x7fe30000, 0x1ff90200, 0x7fe50000, 0x3ff30100, 0x7fe70000, 0x0ffd0300, 0x7fe90000, 0x3ff50100, 0x7feb0000, 0x1ffb0200, 0x7fed0000, 0x3ff70100, 0x7fef0000, 0x07ff0400, 0x7ff10000, 0x3ff90100, 0x7ff30000, 0x1ffd0200, 0x7ff50000, 0x3ffb0100, 0x7ff70000, 0x0fff0300, 0x7ff90000, 0x3ffd0100, 0x7ffb0000, 0x1fff0200, 0x7ffd0000, 0x3fff0100, 0x7fff0000, + 0x00019601, 0x7fff0001, 0x3fff0101, 0x7ffd0001, 0x1fff0201, 0x7ffb0001, 0x3ffd0101, 0x7ff90001, 0x0fff0301, 0x7ff70001, 0x3ffb0101, 0x7ff50001, 0x1ffd0201, 0x7ff30001, 0x3ff90101, 0x7ff10001, 0x07ff0401, 0x7fef0001, 0x3ff70101, 0x7fed0001, 0x1ffb0201, 0x7feb0001, 0x3ff50101, 0x7fe90001, 0x0ffd0301, 0x7fe70001, 0x3ff30101, 0x7fe50001, 0x1ff90201, 0x7fe30001, 0x3ff10101, 0x7fe10001, 0x03ff0501, 0x7fdf0001, 0x3fef0101, 0x7fdd0001, 0x1ff70201, 0x7fdb0001, 0x3fed0101, 0x7fd90001, 0x0ffb0301, 0x7fd70001, 0x3feb0101, 0x7fd50001, 0x1ff50201, 0x7fd30001, 0x3fe90101, 0x7fd10001, 0x07fd0401, 0x7fcf0001, 0x3fe70101, 0x7fcd0001, 0x1ff30201, 0x7fcb0001, 0x3fe50101, 0x7fc90001, 0x0ff90301, 0x7fc70001, 0x3fe30101, 0x7fc50001, 0x1ff10201, 0x7fc30001, 0x3fe10101, 0x7fc10001, 0x01ff0601, 0x7fbf0001, 0x3fdf0101, 0x7fbd0001, 0x1fef0201, 0x7fbb0001, 0x3fdd0101, 0x7fb90001, 0x0ff70301, 0x7fb70001, 0x3fdb0101, 0x7fb50001, 0x1fed0201, 0x7fb30001, 0x3fd90101, 0x7fb10001, 0x07fb0401, 0x7faf0001, 0x3fd70101, 0x7fad0001, 0x1feb0201, 0x7fab0001, 0x3fd50101, 0x7fa90001, 0x0ff50301, 0x7fa70001, 0x3fd30101, 0x7fa50001, 0x1fe90201, 0x7fa30001, 0x3fd10101, 0x7fa10001, 0x03fd0501, 0x7f9f0001, 0x3fcf0101, 0x7f9d0001, 0x1fe70201, 0x7f9b0001, 0x3fcd0101, 0x7f990001, 0x0ff30301, 0x7f970001, 0x3fcb0101, 0x7f950001, 0x1fe50201, 0x7f930001, 0x3fc90101, 0x7f910001, 0x07f90401, 0x7f8f0001, 0x3fc70101, 0x7f8d0001, 0x1fe30201, 0x7f8b0001, 0x3fc50101, 0x7f890001, 0x0ff10301, 0x7f870001, 0x3fc30101, 0x7f850001, 0x1fe10201, 0x7f830001, 0x3fc10101, 0x7f810001, 0x00ff1601, 0x7f7f0001, 0x3fbf0101, 0x7f7d0001, 0x1fdf0201, 0x7f7b0001, 0x3fbd0101, 0x7f790001, 0x0fef0301, 0x7f770001, 0x3fbb0101, 0x7f750001, 0x1fdd0201, 0x7f730001, 0x3fb90101, 0x7f710001, 0x07f70401, 0x7f6f0001, 0x3fb70101, 0x7f6d0001, 0x1fdb0201, 0x7f6b0001, 0x3fb50101, 0x7f690001, 0x0fed0301, 0x7f670001, 0x3fb30101, 0x7f650001, 0x1fd90201, 0x7f630001, 0x3fb10101, 0x7f610001, 0x03fb0501, 0x7f5f0001, 0x3faf0101, 0x7f5d0001, 0x1fd70201, 0x7f5b0001, 0x3fad0101, 0x7f590001, 0x0feb0301, 0x7f570001, 0x3fab0101, 0x7f550001, 0x1fd50201, 0x7f530001, 0x3fa90101, 0x7f510001, 0x07f50401, 0x7f4f0001, 0x3fa70101, 0x7f4d0001, 0x1fd30201, 0x7f4b0001, 0x3fa50101, 0x7f490001, 0x0fe90301, 0x7f470001, 0x3fa30101, 0x7f450001, 0x1fd10201, 0x7f430001, 0x3fa10101, 0x7f410001, 0x01fd0601, 0x7f3f0001, 0x3f9f0101, 0x7f3d0001, 0x1fcf0201, 0x7f3b0001, 0x3f9d0101, 0x7f390001, 0x0fe70301, 0x7f370001, 0x3f9b0101, 0x7f350001, 0x1fcd0201, 0x7f330001, 0x3f990101, 0x7f310001, 0x07f30401, 0x7f2f0001, 0x3f970101, 0x7f2d0001, 0x1fcb0201, 0x7f2b0001, 0x3f950101, 0x7f290001, 0x0fe50301, 0x7f270001, 0x3f930101, 0x7f250001, 0x1fc90201, 0x7f230001, 0x3f910101, 0x7f210001, 0x03f90501, 0x7f1f0001, 0x3f8f0101, 0x7f1d0001, 0x1fc70201, 0x7f1b0001, 0x3f8d0101, 0x7f190001, 0x0fe30301, 0x7f170001, 0x3f8b0101, 0x7f150001, 0x1fc50201, 0x7f130001, 0x3f890101, 0x7f110001, 0x07f10401, 0x7f0f0001, 0x3f870101, 0x7f0d0001, 0x1fc30201, 0x7f0b0001, 0x3f850101, 0x7f090001, 0x0fe10301, 0x7f070001, 0x3f830101, 0x7f050001, 0x1fc10201, 0x7f030001, 0x3f810101, 0x7f010001, + 0x007f2601, 0x7eff0001, 0x3f7f0101, 0x7efd0001, 0x1fbf0201, 0x7efb0001, 0x3f7d0101, 0x7ef90001, 0x0fdf0301, 0x7ef70001, 0x3f7b0101, 0x7ef50001, 0x1fbd0201, 0x7ef30001, 0x3f790101, 0x7ef10001, 0x07ef0401, 0x7eef0001, 0x3f770101, 0x7eed0001, 0x1fbb0201, 0x7eeb0001, 0x3f750101, 0x7ee90001, 0x0fdd0301, 0x7ee70001, 0x3f730101, 0x7ee50001, 0x1fb90201, 0x7ee30001, 0x3f710101, 0x7ee10001, 0x03f70501, 0x7edf0001, 0x3f6f0101, 0x7edd0001, 0x1fb70201, 0x7edb0001, 0x3f6d0101, 0x7ed90001, 0x0fdb0301, 0x7ed70001, 0x3f6b0101, 0x7ed50001, 0x1fb50201, 0x7ed30001, 0x3f690101, 0x7ed10001, 0x07ed0401, 0x7ecf0001, 0x3f670101, 0x7ecd0001, 0x1fb30201, 0x7ecb0001, 0x3f650101, 0x7ec90001, 0x0fd90301, 0x7ec70001, 0x3f630101, 0x7ec50001, 0x1fb10201, 0x7ec30001, 0x3f610101, 0x7ec10001, 0x01fb0601, 0x7ebf0001, 0x3f5f0101, 0x7ebd0001, 0x1faf0201, 0x7ebb0001, 0x3f5d0101, 0x7eb90001, 0x0fd70301, 0x7eb70001, 0x3f5b0101, 0x7eb50001, 0x1fad0201, 0x7eb30001, 0x3f590101, 0x7eb10001, 0x07eb0401, 0x7eaf0001, 0x3f570101, 0x7ead0001, 0x1fab0201, 0x7eab0001, 0x3f550101, 0x7ea90001, 0x0fd50301, 0x7ea70001, 0x3f530101, 0x7ea50001, 0x1fa90201, 0x7ea30001, 0x3f510101, 0x7ea10001, 0x03f50501, 0x7e9f0001, 0x3f4f0101, 0x7e9d0001, 0x1fa70201, 0x7e9b0001, 0x3f4d0101, 0x7e990001, 0x0fd30301, 0x7e970001, 0x3f4b0101, 0x7e950001, 0x1fa50201, 0x7e930001, 0x3f490101, 0x7e910001, 0x07e90401, 0x7e8f0001, 0x3f470101, 0x7e8d0001, 0x1fa30201, 0x7e8b0001, 0x3f450101, 0x7e890001, 0x0fd10301, 0x7e870001, 0x3f430101, 0x7e850001, 0x1fa10201, 0x7e830001, 0x3f410101, 0x7e810001, 0x00fd1601, 0x7e7f0001, 0x3f3f0101, 0x7e7d0001, 0x1f9f0201, 0x7e7b0001, 0x3f3d0101, 0x7e790001, 0x0fcf0301, 0x7e770001, 0x3f3b0101, 0x7e750001, 0x1f9d0201, 0x7e730001, 0x3f390101, 0x7e710001, 0x07e70401, 0x7e6f0001, 0x3f370101, 0x7e6d0001, 0x1f9b0201, 0x7e6b0001, 0x3f350101, 0x7e690001, 0x0fcd0301, 0x7e670001, 0x3f330101, 0x7e650001, 0x1f990201, 0x7e630001, 0x3f310101, 0x7e610001, 0x03f30501, 0x7e5f0001, 0x3f2f0101, 0x7e5d0001, 0x1f970201, 0x7e5b0001, 0x3f2d0101, 0x7e590001, 0x0fcb0301, 0x7e570001, 0x3f2b0101, 0x7e550001, 0x1f950201, 0x7e530001, 0x3f290101, 0x7e510001, 0x07e50401, 0x7e4f0001, 0x3f270101, 0x7e4d0001, 0x1f930201, 0x7e4b0001, 0x3f250101, 0x7e490001, 0x0fc90301, 0x7e470001, 0x3f230101, 0x7e450001, 0x1f910201, 0x7e430001, 0x3f210101, 0x7e410001, 0x01f90601, 0x7e3f0001, 0x3f1f0101, 0x7e3d0001, 0x1f8f0201, 0x7e3b0001, 0x3f1d0101, 0x7e390001, 0x0fc70301, 0x7e370001, 0x3f1b0101, 0x7e350001, 0x1f8d0201, 0x7e330001, 0x3f190101, 0x7e310001, 0x07e30401, 0x7e2f0001, 0x3f170101, 0x7e2d0001, 0x1f8b0201, 0x7e2b0001, 0x3f150101, 0x7e290001, 0x0fc50301, 0x7e270001, 0x3f130101, 0x7e250001, 0x1f890201, 0x7e230001, 0x3f110101, 0x7e210001, 0x03f10501, 0x7e1f0001, 0x3f0f0101, 0x7e1d0001, 0x1f870201, 0x7e1b0001, 0x3f0d0101, 0x7e190001, 0x0fc30301, 0x7e170001, 0x3f0b0101, 0x7e150001, 0x1f850201, 0x7e130001, 0x3f090101, 0x7e110001, 0x07e10401, 0x7e0f0001, 0x3f070101, 0x7e0d0001, 0x1f830201, 0x7e0b0001, 0x3f050101, 0x7e090001, 0x0fc10301, 0x7e070001, 0x3f030101, 0x7e050001, 0x1f810201, 0x7e030001, 0x3f010101, 0x7e010001, + 0x003f3601, 0x7dff0001, 0x3eff0101, 0x7dfd0001, 0x1f7f0201, 0x7dfb0001, 0x3efd0101, 0x7df90001, 0x0fbf0301, 0x7df70001, 0x3efb0101, 0x7df50001, 0x1f7d0201, 0x7df30001, 0x3ef90101, 0x7df10001, 0x07df0401, 0x7def0001, 0x3ef70101, 0x7ded0001, 0x1f7b0201, 0x7deb0001, 0x3ef50101, 0x7de90001, 0x0fbd0301, 0x7de70001, 0x3ef30101, 0x7de50001, 0x1f790201, 0x7de30001, 0x3ef10101, 0x7de10001, 0x03ef0501, 0x7ddf0001, 0x3eef0101, 0x7ddd0001, 0x1f770201, 0x7ddb0001, 0x3eed0101, 0x7dd90001, 0x0fbb0301, 0x7dd70001, 0x3eeb0101, 0x7dd50001, 0x1f750201, 0x7dd30001, 0x3ee90101, 0x7dd10001, 0x07dd0401, 0x7dcf0001, 0x3ee70101, 0x7dcd0001, 0x1f730201, 0x7dcb0001, 0x3ee50101, 0x7dc90001, 0x0fb90301, 0x7dc70001, 0x3ee30101, 0x7dc50001, 0x1f710201, 0x7dc30001, 0x3ee10101, 0x7dc10001, 0x01f70601, 0x7dbf0001, 0x3edf0101, 0x7dbd0001, 0x1f6f0201, 0x7dbb0001, 0x3edd0101, 0x7db90001, 0x0fb70301, 0x7db70001, 0x3edb0101, 0x7db50001, 0x1f6d0201, 0x7db30001, 0x3ed90101, 0x7db10001, 0x07db0401, 0x7daf0001, 0x3ed70101, 0x7dad0001, 0x1f6b0201, 0x7dab0001, 0x3ed50101, 0x7da90001, 0x0fb50301, 0x7da70001, 0x3ed30101, 0x7da50001, 0x1f690201, 0x7da30001, 0x3ed10101, 0x7da10001, 0x03ed0501, 0x7d9f0001, 0x3ecf0101, 0x7d9d0001, 0x1f670201, 0x7d9b0001, 0x3ecd0101, 0x7d990001, 0x0fb30301, 0x7d970001, 0x3ecb0101, 0x7d950001, 0x1f650201, 0x7d930001, 0x3ec90101, 0x7d910001, 0x07d90401, 0x7d8f0001, 0x3ec70101, 0x7d8d0001, 0x1f630201, 0x7d8b0001, 0x3ec50101, 0x7d890001, 0x0fb10301, 0x7d870001, 0x3ec30101, 0x7d850001, 0x1f610201, 0x7d830001, 0x3ec10101, 0x7d810001, 0x00fb1601, 0x7d7f0001, 0x3ebf0101, 0x7d7d0001, 0x1f5f0201, 0x7d7b0001, 0x3ebd0101, 0x7d790001, 0x0faf0301, 0x7d770001, 0x3ebb0101, 0x7d750001, 0x1f5d0201, 0x7d730001, 0x3eb90101, 0x7d710001, 0x07d70401, 0x7d6f0001, 0x3eb70101, 0x7d6d0001, 0x1f5b0201, 0x7d6b0001, 0x3eb50101, 0x7d690001, 0x0fad0301, 0x7d670001, 0x3eb30101, 0x7d650001, 0x1f590201, 0x7d630001, 0x3eb10101, 0x7d610001, 0x03eb0501, 0x7d5f0001, 0x3eaf0101, 0x7d5d0001, 0x1f570201, 0x7d5b0001, 0x3ead0101, 0x7d590001, 0x0fab0301, 0x7d570001, 0x3eab0101, 0x7d550001, 0x1f550201, 0x7d530001, 0x3ea90101, 0x7d510001, 0x07d50401, 0x7d4f0001, 0x3ea70101, 0x7d4d0001, 0x1f530201, 0x7d4b0001, 0x3ea50101, 0x7d490001, 0x0fa90301, 0x7d470001, 0x3ea30101, 0x7d450001, 0x1f510201, 0x7d430001, 0x3ea10101, 0x7d410001, 0x01f50601, 0x7d3f0001, 0x3e9f0101, 0x7d3d0001, 0x1f4f0201, 0x7d3b0001, 0x3e9d0101, 0x7d390001, 0x0fa70301, 0x7d370001, 0x3e9b0101, 0x7d350001, 0x1f4d0201, 0x7d330001, 0x3e990101, 0x7d310001, 0x07d30401, 0x7d2f0001, 0x3e970101, 0x7d2d0001, 0x1f4b0201, 0x7d2b0001, 0x3e950101, 0x7d290001, 0x0fa50301, 0x7d270001, 0x3e930101, 0x7d250001, 0x1f490201, 0x7d230001, 0x3e910101, 0x7d210001, 0x03e90501, 0x7d1f0001, 0x3e8f0101, 0x7d1d0001, 0x1f470201, 0x7d1b0001, 0x3e8d0101, 0x7d190001, 0x0fa30301, 0x7d170001, 0x3e8b0101, 0x7d150001, 0x1f450201, 0x7d130001, 0x3e890101, 0x7d110001, 0x07d10401, 0x7d0f0001, 0x3e870101, 0x7d0d0001, 0x1f430201, 0x7d0b0001, 0x3e850101, 0x7d090001, 0x0fa10301, 0x7d070001, 0x3e830101, 0x7d050001, 0x1f410201, 0x7d030001, 0x3e810101, 0x7d010001, + 0x007d2601, 0x7cff0001, 0x3e7f0101, 0x7cfd0001, 0x1f3f0201, 0x7cfb0001, 0x3e7d0101, 0x7cf90001, 0x0f9f0301, 0x7cf70001, 0x3e7b0101, 0x7cf50001, 0x1f3d0201, 0x7cf30001, 0x3e790101, 0x7cf10001, 0x07cf0401, 0x7cef0001, 0x3e770101, 0x7ced0001, 0x1f3b0201, 0x7ceb0001, 0x3e750101, 0x7ce90001, 0x0f9d0301, 0x7ce70001, 0x3e730101, 0x7ce50001, 0x1f390201, 0x7ce30001, 0x3e710101, 0x7ce10001, 0x03e70501, 0x7cdf0001, 0x3e6f0101, 0x7cdd0001, 0x1f370201, 0x7cdb0001, 0x3e6d0101, 0x7cd90001, 0x0f9b0301, 0x7cd70001, 0x3e6b0101, 0x7cd50001, 0x1f350201, 0x7cd30001, 0x3e690101, 0x7cd10001, 0x07cd0401, 0x7ccf0001, 0x3e670101, 0x7ccd0001, 0x1f330201, 0x7ccb0001, 0x3e650101, 0x7cc90001, 0x0f990301, 0x7cc70001, 0x3e630101, 0x7cc50001, 0x1f310201, 0x7cc30001, 0x3e610101, 0x7cc10001, 0x01f30601, 0x7cbf0001, 0x3e5f0101, 0x7cbd0001, 0x1f2f0201, 0x7cbb0001, 0x3e5d0101, 0x7cb90001, 0x0f970301, 0x7cb70001, 0x3e5b0101, 0x7cb50001, 0x1f2d0201, 0x7cb30001, 0x3e590101, 0x7cb10001, 0x07cb0401, 0x7caf0001, 0x3e570101, 0x7cad0001, 0x1f2b0201, 0x7cab0001, 0x3e550101, 0x7ca90001, 0x0f950301, 0x7ca70001, 0x3e530101, 0x7ca50001, 0x1f290201, 0x7ca30001, 0x3e510101, 0x7ca10001, 0x03e50501, 0x7c9f0001, 0x3e4f0101, 0x7c9d0001, 0x1f270201, 0x7c9b0001, 0x3e4d0101, 0x7c990001, 0x0f930301, 0x7c970001, 0x3e4b0101, 0x7c950001, 0x1f250201, 0x7c930001, 0x3e490101, 0x7c910001, 0x07c90401, 0x7c8f0001, 0x3e470101, 0x7c8d0001, 0x1f230201, 0x7c8b0001, 0x3e450101, 0x7c890001, 0x0f910301, 0x7c870001, 0x3e430101, 0x7c850001, 0x1f210201, 0x7c830001, 0x3e410101, 0x7c810001, 0x00f91601, 0x7c7f0001, 0x3e3f0101, 0x7c7d0001, 0x1f1f0201, 0x7c7b0001, 0x3e3d0101, 0x7c790001, 0x0f8f0301, 0x7c770001, 0x3e3b0101, 0x7c750001, 0x1f1d0201, 0x7c730001, 0x3e390101, 0x7c710001, 0x07c70401, 0x7c6f0001, 0x3e370101, 0x7c6d0001, 0x1f1b0201, 0x7c6b0001, 0x3e350101, 0x7c690001, 0x0f8d0301, 0x7c670001, 0x3e330101, 0x7c650001, 0x1f190201, 0x7c630001, 0x3e310101, 0x7c610001, 0x03e30501, 0x7c5f0001, 0x3e2f0101, 0x7c5d0001, 0x1f170201, 0x7c5b0001, 0x3e2d0101, 0x7c590001, 0x0f8b0301, 0x7c570001, 0x3e2b0101, 0x7c550001, 0x1f150201, 0x7c530001, 0x3e290101, 0x7c510001, 0x07c50401, 0x7c4f0001, 0x3e270101, 0x7c4d0001, 0x1f130201, 0x7c4b0001, 0x3e250101, 0x7c490001, 0x0f890301, 0x7c470001, 0x3e230101, 0x7c450001, 0x1f110201, 0x7c430001, 0x3e210101, 0x7c410001, 0x01f10601, 0x7c3f0001, 0x3e1f0101, 0x7c3d0001, 0x1f0f0201, 0x7c3b0001, 0x3e1d0101, 0x7c390001, 0x0f870301, 0x7c370001, 0x3e1b0101, 0x7c350001, 0x1f0d0201, 0x7c330001, 0x3e190101, 0x7c310001, 0x07c30401, 0x7c2f0001, 0x3e170101, 0x7c2d0001, 0x1f0b0201, 0x7c2b0001, 0x3e150101, 0x7c290001, 0x0f850301, 0x7c270001, 0x3e130101, 0x7c250001, 0x1f090201, 0x7c230001, 0x3e110101, 0x7c210001, 0x03e10501, 0x7c1f0001, 0x3e0f0101, 0x7c1d0001, 0x1f070201, 0x7c1b0001, 0x3e0d0101, 0x7c190001, 0x0f830301, 0x7c170001, 0x3e0b0101, 0x7c150001, 0x1f050201, 0x7c130001, 0x3e090101, 0x7c110001, 0x07c10401, 0x7c0f0001, 0x3e070101, 0x7c0d0001, 0x1f030201, 0x7c0b0001, 0x3e050101, 0x7c090001, 0x0f810301, 0x7c070001, 0x3e030101, 0x7c050001, 0x1f010201, 0x7c030001, 0x3e010101, 0x7c010001, + 0x001f4601, 0x7bff0001, 0x3dff0101, 0x7bfd0001, 0x1eff0201, 0x7bfb0001, 0x3dfd0101, 0x7bf90001, 0x0f7f0301, 0x7bf70001, 0x3dfb0101, 0x7bf50001, 0x1efd0201, 0x7bf30001, 0x3df90101, 0x7bf10001, 0x07bf0401, 0x7bef0001, 0x3df70101, 0x7bed0001, 0x1efb0201, 0x7beb0001, 0x3df50101, 0x7be90001, 0x0f7d0301, 0x7be70001, 0x3df30101, 0x7be50001, 0x1ef90201, 0x7be30001, 0x3df10101, 0x7be10001, 0x03df0501, 0x7bdf0001, 0x3def0101, 0x7bdd0001, 0x1ef70201, 0x7bdb0001, 0x3ded0101, 0x7bd90001, 0x0f7b0301, 0x7bd70001, 0x3deb0101, 0x7bd50001, 0x1ef50201, 0x7bd30001, 0x3de90101, 0x7bd10001, 0x07bd0401, 0x7bcf0001, 0x3de70101, 0x7bcd0001, 0x1ef30201, 0x7bcb0001, 0x3de50101, 0x7bc90001, 0x0f790301, 0x7bc70001, 0x3de30101, 0x7bc50001, 0x1ef10201, 0x7bc30001, 0x3de10101, 0x7bc10001, 0x01ef0601, 0x7bbf0001, 0x3ddf0101, 0x7bbd0001, 0x1eef0201, 0x7bbb0001, 0x3ddd0101, 0x7bb90001, 0x0f770301, 0x7bb70001, 0x3ddb0101, 0x7bb50001, 0x1eed0201, 0x7bb30001, 0x3dd90101, 0x7bb10001, 0x07bb0401, 0x7baf0001, 0x3dd70101, 0x7bad0001, 0x1eeb0201, 0x7bab0001, 0x3dd50101, 0x7ba90001, 0x0f750301, 0x7ba70001, 0x3dd30101, 0x7ba50001, 0x1ee90201, 0x7ba30001, 0x3dd10101, 0x7ba10001, 0x03dd0501, 0x7b9f0001, 0x3dcf0101, 0x7b9d0001, 0x1ee70201, 0x7b9b0001, 0x3dcd0101, 0x7b990001, 0x0f730301, 0x7b970001, 0x3dcb0101, 0x7b950001, 0x1ee50201, 0x7b930001, 0x3dc90101, 0x7b910001, 0x07b90401, 0x7b8f0001, 0x3dc70101, 0x7b8d0001, 0x1ee30201, 0x7b8b0001, 0x3dc50101, 0x7b890001, 0x0f710301, 0x7b870001, 0x3dc30101, 0x7b850001, 0x1ee10201, 0x7b830001, 0x3dc10101, 0x7b810001, 0x00f71601, 0x7b7f0001, 0x3dbf0101, 0x7b7d0001, 0x1edf0201, 0x7b7b0001, 0x3dbd0101, 0x7b790001, 0x0f6f0301, 0x7b770001, 0x3dbb0101, 0x7b750001, 0x1edd0201, 0x7b730001, 0x3db90101, 0x7b710001, 0x07b70401, 0x7b6f0001, 0x3db70101, 0x7b6d0001, 0x1edb0201, 0x7b6b0001, 0x3db50101, 0x7b690001, 0x0f6d0301, 0x7b670001, 0x3db30101, 0x7b650001, 0x1ed90201, 0x7b630001, 0x3db10101, 0x7b610001, 0x03db0501, 0x7b5f0001, 0x3daf0101, 0x7b5d0001, 0x1ed70201, 0x7b5b0001, 0x3dad0101, 0x7b590001, 0x0f6b0301, 0x7b570001, 0x3dab0101, 0x7b550001, 0x1ed50201, 0x7b530001, 0x3da90101, 0x7b510001, 0x07b50401, 0x7b4f0001, 0x3da70101, 0x7b4d0001, 0x1ed30201, 0x7b4b0001, 0x3da50101, 0x7b490001, 0x0f690301, 0x7b470001, 0x3da30101, 0x7b450001, 0x1ed10201, 0x7b430001, 0x3da10101, 0x7b410001, 0x01ed0601, 0x7b3f0001, 0x3d9f0101, 0x7b3d0001, 0x1ecf0201, 0x7b3b0001, 0x3d9d0101, 0x7b390001, 0x0f670301, 0x7b370001, 0x3d9b0101, 0x7b350001, 0x1ecd0201, 0x7b330001, 0x3d990101, 0x7b310001, 0x07b30401, 0x7b2f0001, 0x3d970101, 0x7b2d0001, 0x1ecb0201, 0x7b2b0001, 0x3d950101, 0x7b290001, 0x0f650301, 0x7b270001, 0x3d930101, 0x7b250001, 0x1ec90201, 0x7b230001, 0x3d910101, 0x7b210001, 0x03d90501, 0x7b1f0001, 0x3d8f0101, 0x7b1d0001, 0x1ec70201, 0x7b1b0001, 0x3d8d0101, 0x7b190001, 0x0f630301, 0x7b170001, 0x3d8b0101, 0x7b150001, 0x1ec50201, 0x7b130001, 0x3d890101, 0x7b110001, 0x07b10401, 0x7b0f0001, 0x3d870101, 0x7b0d0001, 0x1ec30201, 0x7b0b0001, 0x3d850101, 0x7b090001, 0x0f610301, 0x7b070001, 0x3d830101, 0x7b050001, 0x1ec10201, 0x7b030001, 0x3d810101, 0x7b010001, + 0x007b2601, 0x7aff0001, 0x3d7f0101, 0x7afd0001, 0x1ebf0201, 0x7afb0001, 0x3d7d0101, 0x7af90001, 0x0f5f0301, 0x7af70001, 0x3d7b0101, 0x7af50001, 0x1ebd0201, 0x7af30001, 0x3d790101, 0x7af10001, 0x07af0401, 0x7aef0001, 0x3d770101, 0x7aed0001, 0x1ebb0201, 0x7aeb0001, 0x3d750101, 0x7ae90001, 0x0f5d0301, 0x7ae70001, 0x3d730101, 0x7ae50001, 0x1eb90201, 0x7ae30001, 0x3d710101, 0x7ae10001, 0x03d70501, 0x7adf0001, 0x3d6f0101, 0x7add0001, 0x1eb70201, 0x7adb0001, 0x3d6d0101, 0x7ad90001, 0x0f5b0301, 0x7ad70001, 0x3d6b0101, 0x7ad50001, 0x1eb50201, 0x7ad30001, 0x3d690101, 0x7ad10001, 0x07ad0401, 0x7acf0001, 0x3d670101, 0x7acd0001, 0x1eb30201, 0x7acb0001, 0x3d650101, 0x7ac90001, 0x0f590301, 0x7ac70001, 0x3d630101, 0x7ac50001, 0x1eb10201, 0x7ac30001, 0x3d610101, 0x7ac10001, 0x01eb0601, 0x7abf0001, 0x3d5f0101, 0x7abd0001, 0x1eaf0201, 0x7abb0001, 0x3d5d0101, 0x7ab90001, 0x0f570301, 0x7ab70001, 0x3d5b0101, 0x7ab50001, 0x1ead0201, 0x7ab30001, 0x3d590101, 0x7ab10001, 0x07ab0401, 0x7aaf0001, 0x3d570101, 0x7aad0001, 0x1eab0201, 0x7aab0001, 0x3d550101, 0x7aa90001, 0x0f550301, 0x7aa70001, 0x3d530101, 0x7aa50001, 0x1ea90201, 0x7aa30001, 0x3d510101, 0x7aa10001, 0x03d50501, 0x7a9f0001, 0x3d4f0101, 0x7a9d0001, 0x1ea70201, 0x7a9b0001, 0x3d4d0101, 0x7a990001, 0x0f530301, 0x7a970001, 0x3d4b0101, 0x7a950001, 0x1ea50201, 0x7a930001, 0x3d490101, 0x7a910001, 0x07a90401, 0x7a8f0001, 0x3d470101, 0x7a8d0001, 0x1ea30201, 0x7a8b0001, 0x3d450101, 0x7a890001, 0x0f510301, 0x7a870001, 0x3d430101, 0x7a850001, 0x1ea10201, 0x7a830001, 0x3d410101, 0x7a810001, 0x00f51601, 0x7a7f0001, 0x3d3f0101, 0x7a7d0001, 0x1e9f0201, 0x7a7b0001, 0x3d3d0101, 0x7a790001, 0x0f4f0301, 0x7a770001, 0x3d3b0101, 0x7a750001, 0x1e9d0201, 0x7a730001, 0x3d390101, 0x7a710001, 0x07a70401, 0x7a6f0001, 0x3d370101, 0x7a6d0001, 0x1e9b0201, 0x7a6b0001, 0x3d350101, 0x7a690001, 0x0f4d0301, 0x7a670001, 0x3d330101, 0x7a650001, 0x1e990201, 0x7a630001, 0x3d310101, 0x7a610001, 0x03d30501, 0x7a5f0001, 0x3d2f0101, 0x7a5d0001, 0x1e970201, 0x7a5b0001, 0x3d2d0101, 0x7a590001, 0x0f4b0301, 0x7a570001, 0x3d2b0101, 0x7a550001, 0x1e950201, 0x7a530001, 0x3d290101, 0x7a510001, 0x07a50401, 0x7a4f0001, 0x3d270101, 0x7a4d0001, 0x1e930201, 0x7a4b0001, 0x3d250101, 0x7a490001, 0x0f490301, 0x7a470001, 0x3d230101, 0x7a450001, 0x1e910201, 0x7a430001, 0x3d210101, 0x7a410001, 0x01e90601, 0x7a3f0001, 0x3d1f0101, 0x7a3d0001, 0x1e8f0201, 0x7a3b0001, 0x3d1d0101, 0x7a390001, 0x0f470301, 0x7a370001, 0x3d1b0101, 0x7a350001, 0x1e8d0201, 0x7a330001, 0x3d190101, 0x7a310001, 0x07a30401, 0x7a2f0001, 0x3d170101, 0x7a2d0001, 0x1e8b0201, 0x7a2b0001, 0x3d150101, 0x7a290001, 0x0f450301, 0x7a270001, 0x3d130101, 0x7a250001, 0x1e890201, 0x7a230001, 0x3d110101, 0x7a210001, 0x03d10501, 0x7a1f0001, 0x3d0f0101, 0x7a1d0001, 0x1e870201, 0x7a1b0001, 0x3d0d0101, 0x7a190001, 0x0f430301, 0x7a170001, 0x3d0b0101, 0x7a150001, 0x1e850201, 0x7a130001, 0x3d090101, 0x7a110001, 0x07a10401, 0x7a0f0001, 0x3d070101, 0x7a0d0001, 0x1e830201, 0x7a0b0001, 0x3d050101, 0x7a090001, 0x0f410301, 0x7a070001, 0x3d030101, 0x7a050001, 0x1e810201, 0x7a030001, 0x3d010101, 0x7a010001, + 0x003d3601, 0x79ff0001, 0x3cff0101, 0x79fd0001, 0x1e7f0201, 0x79fb0001, 0x3cfd0101, 0x79f90001, 0x0f3f0301, 0x79f70001, 0x3cfb0101, 0x79f50001, 0x1e7d0201, 0x79f30001, 0x3cf90101, 0x79f10001, 0x079f0401, 0x79ef0001, 0x3cf70101, 0x79ed0001, 0x1e7b0201, 0x79eb0001, 0x3cf50101, 0x79e90001, 0x0f3d0301, 0x79e70001, 0x3cf30101, 0x79e50001, 0x1e790201, 0x79e30001, 0x3cf10101, 0x79e10001, 0x03cf0501, 0x79df0001, 0x3cef0101, 0x79dd0001, 0x1e770201, 0x79db0001, 0x3ced0101, 0x79d90001, 0x0f3b0301, 0x79d70001, 0x3ceb0101, 0x79d50001, 0x1e750201, 0x79d30001, 0x3ce90101, 0x79d10001, 0x079d0401, 0x79cf0001, 0x3ce70101, 0x79cd0001, 0x1e730201, 0x79cb0001, 0x3ce50101, 0x79c90001, 0x0f390301, 0x79c70001, 0x3ce30101, 0x79c50001, 0x1e710201, 0x79c30001, 0x3ce10101, 0x79c10001, 0x01e70601, 0x79bf0001, 0x3cdf0101, 0x79bd0001, 0x1e6f0201, 0x79bb0001, 0x3cdd0101, 0x79b90001, 0x0f370301, 0x79b70001, 0x3cdb0101, 0x79b50001, 0x1e6d0201, 0x79b30001, 0x3cd90101, 0x79b10001, 0x079b0401, 0x79af0001, 0x3cd70101, 0x79ad0001, 0x1e6b0201, 0x79ab0001, 0x3cd50101, 0x79a90001, 0x0f350301, 0x79a70001, 0x3cd30101, 0x79a50001, 0x1e690201, 0x79a30001, 0x3cd10101, 0x79a10001, 0x03cd0501, 0x799f0001, 0x3ccf0101, 0x799d0001, 0x1e670201, 0x799b0001, 0x3ccd0101, 0x79990001, 0x0f330301, 0x79970001, 0x3ccb0101, 0x79950001, 0x1e650201, 0x79930001, 0x3cc90101, 0x79910001, 0x07990401, 0x798f0001, 0x3cc70101, 0x798d0001, 0x1e630201, 0x798b0001, 0x3cc50101, 0x79890001, 0x0f310301, 0x79870001, 0x3cc30101, 0x79850001, 0x1e610201, 0x79830001, 0x3cc10101, 0x79810001, 0x00f31601, 0x797f0001, 0x3cbf0101, 0x797d0001, 0x1e5f0201, 0x797b0001, 0x3cbd0101, 0x79790001, 0x0f2f0301, 0x79770001, 0x3cbb0101, 0x79750001, 0x1e5d0201, 0x79730001, 0x3cb90101, 0x79710001, 0x07970401, 0x796f0001, 0x3cb70101, 0x796d0001, 0x1e5b0201, 0x796b0001, 0x3cb50101, 0x79690001, 0x0f2d0301, 0x79670001, 0x3cb30101, 0x79650001, 0x1e590201, 0x79630001, 0x3cb10101, 0x79610001, 0x03cb0501, 0x795f0001, 0x3caf0101, 0x795d0001, 0x1e570201, 0x795b0001, 0x3cad0101, 0x79590001, 0x0f2b0301, 0x79570001, 0x3cab0101, 0x79550001, 0x1e550201, 0x79530001, 0x3ca90101, 0x79510001, 0x07950401, 0x794f0001, 0x3ca70101, 0x794d0001, 0x1e530201, 0x794b0001, 0x3ca50101, 0x79490001, 0x0f290301, 0x79470001, 0x3ca30101, 0x79450001, 0x1e510201, 0x79430001, 0x3ca10101, 0x79410001, 0x01e50601, 0x793f0001, 0x3c9f0101, 0x793d0001, 0x1e4f0201, 0x793b0001, 0x3c9d0101, 0x79390001, 0x0f270301, 0x79370001, 0x3c9b0101, 0x79350001, 0x1e4d0201, 0x79330001, 0x3c990101, 0x79310001, 0x07930401, 0x792f0001, 0x3c970101, 0x792d0001, 0x1e4b0201, 0x792b0001, 0x3c950101, 0x79290001, 0x0f250301, 0x79270001, 0x3c930101, 0x79250001, 0x1e490201, 0x79230001, 0x3c910101, 0x79210001, 0x03c90501, 0x791f0001, 0x3c8f0101, 0x791d0001, 0x1e470201, 0x791b0001, 0x3c8d0101, 0x79190001, 0x0f230301, 0x79170001, 0x3c8b0101, 0x79150001, 0x1e450201, 0x79130001, 0x3c890101, 0x79110001, 0x07910401, 0x790f0001, 0x3c870101, 0x790d0001, 0x1e430201, 0x790b0001, 0x3c850101, 0x79090001, 0x0f210301, 0x79070001, 0x3c830101, 0x79050001, 0x1e410201, 0x79030001, 0x3c810101, 0x79010001, + 0x00792601, 0x78ff0001, 0x3c7f0101, 0x78fd0001, 0x1e3f0201, 0x78fb0001, 0x3c7d0101, 0x78f90001, 0x0f1f0301, 0x78f70001, 0x3c7b0101, 0x78f50001, 0x1e3d0201, 0x78f30001, 0x3c790101, 0x78f10001, 0x078f0401, 0x78ef0001, 0x3c770101, 0x78ed0001, 0x1e3b0201, 0x78eb0001, 0x3c750101, 0x78e90001, 0x0f1d0301, 0x78e70001, 0x3c730101, 0x78e50001, 0x1e390201, 0x78e30001, 0x3c710101, 0x78e10001, 0x03c70501, 0x78df0001, 0x3c6f0101, 0x78dd0001, 0x1e370201, 0x78db0001, 0x3c6d0101, 0x78d90001, 0x0f1b0301, 0x78d70001, 0x3c6b0101, 0x78d50001, 0x1e350201, 0x78d30001, 0x3c690101, 0x78d10001, 0x078d0401, 0x78cf0001, 0x3c670101, 0x78cd0001, 0x1e330201, 0x78cb0001, 0x3c650101, 0x78c90001, 0x0f190301, 0x78c70001, 0x3c630101, 0x78c50001, 0x1e310201, 0x78c30001, 0x3c610101, 0x78c10001, 0x01e30601, 0x78bf0001, 0x3c5f0101, 0x78bd0001, 0x1e2f0201, 0x78bb0001, 0x3c5d0101, 0x78b90001, 0x0f170301, 0x78b70001, 0x3c5b0101, 0x78b50001, 0x1e2d0201, 0x78b30001, 0x3c590101, 0x78b10001, 0x078b0401, 0x78af0001, 0x3c570101, 0x78ad0001, 0x1e2b0201, 0x78ab0001, 0x3c550101, 0x78a90001, 0x0f150301, 0x78a70001, 0x3c530101, 0x78a50001, 0x1e290201, 0x78a30001, 0x3c510101, 0x78a10001, 0x03c50501, 0x789f0001, 0x3c4f0101, 0x789d0001, 0x1e270201, 0x789b0001, 0x3c4d0101, 0x78990001, 0x0f130301, 0x78970001, 0x3c4b0101, 0x78950001, 0x1e250201, 0x78930001, 0x3c490101, 0x78910001, 0x07890401, 0x788f0001, 0x3c470101, 0x788d0001, 0x1e230201, 0x788b0001, 0x3c450101, 0x78890001, 0x0f110301, 0x78870001, 0x3c430101, 0x78850001, 0x1e210201, 0x78830001, 0x3c410101, 0x78810001, 0x00f11601, 0x787f0001, 0x3c3f0101, 0x787d0001, 0x1e1f0201, 0x787b0001, 0x3c3d0101, 0x78790001, 0x0f0f0301, 0x78770001, 0x3c3b0101, 0x78750001, 0x1e1d0201, 0x78730001, 0x3c390101, 0x78710001, 0x07870401, 0x786f0001, 0x3c370101, 0x786d0001, 0x1e1b0201, 0x786b0001, 0x3c350101, 0x78690001, 0x0f0d0301, 0x78670001, 0x3c330101, 0x78650001, 0x1e190201, 0x78630001, 0x3c310101, 0x78610001, 0x03c30501, 0x785f0001, 0x3c2f0101, 0x785d0001, 0x1e170201, 0x785b0001, 0x3c2d0101, 0x78590001, 0x0f0b0301, 0x78570001, 0x3c2b0101, 0x78550001, 0x1e150201, 0x78530001, 0x3c290101, 0x78510001, 0x07850401, 0x784f0001, 0x3c270101, 0x784d0001, 0x1e130201, 0x784b0001, 0x3c250101, 0x78490001, 0x0f090301, 0x78470001, 0x3c230101, 0x78450001, 0x1e110201, 0x78430001, 0x3c210101, 0x78410001, 0x01e10601, 0x783f0001, 0x3c1f0101, 0x783d0001, 0x1e0f0201, 0x783b0001, 0x3c1d0101, 0x78390001, 0x0f070301, 0x78370001, 0x3c1b0101, 0x78350001, 0x1e0d0201, 0x78330001, 0x3c190101, 0x78310001, 0x07830401, 0x782f0001, 0x3c170101, 0x782d0001, 0x1e0b0201, 0x782b0001, 0x3c150101, 0x78290001, 0x0f050301, 0x78270001, 0x3c130101, 0x78250001, 0x1e090201, 0x78230001, 0x3c110101, 0x78210001, 0x03c10501, 0x781f0001, 0x3c0f0101, 0x781d0001, 0x1e070201, 0x781b0001, 0x3c0d0101, 0x78190001, 0x0f030301, 0x78170001, 0x3c0b0101, 0x78150001, 0x1e050201, 0x78130001, 0x3c090101, 0x78110001, 0x07810401, 0x780f0001, 0x3c070101, 0x780d0001, 0x1e030201, 0x780b0001, 0x3c050101, 0x78090001, 0x0f010301, 0x78070001, 0x3c030101, 0x78050001, 0x1e010201, 0x78030001, 0x3c010101, 0x78010001, + 0x000f5601, 0x77ff0001, 0x3bff0101, 0x77fd0001, 0x1dff0201, 0x77fb0001, 0x3bfd0101, 0x77f90001, 0x0eff0301, 0x77f70001, 0x3bfb0101, 0x77f50001, 0x1dfd0201, 0x77f30001, 0x3bf90101, 0x77f10001, 0x077f0401, 0x77ef0001, 0x3bf70101, 0x77ed0001, 0x1dfb0201, 0x77eb0001, 0x3bf50101, 0x77e90001, 0x0efd0301, 0x77e70001, 0x3bf30101, 0x77e50001, 0x1df90201, 0x77e30001, 0x3bf10101, 0x77e10001, 0x03bf0501, 0x77df0001, 0x3bef0101, 0x77dd0001, 0x1df70201, 0x77db0001, 0x3bed0101, 0x77d90001, 0x0efb0301, 0x77d70001, 0x3beb0101, 0x77d50001, 0x1df50201, 0x77d30001, 0x3be90101, 0x77d10001, 0x077d0401, 0x77cf0001, 0x3be70101, 0x77cd0001, 0x1df30201, 0x77cb0001, 0x3be50101, 0x77c90001, 0x0ef90301, 0x77c70001, 0x3be30101, 0x77c50001, 0x1df10201, 0x77c30001, 0x3be10101, 0x77c10001, 0x01df0601, 0x77bf0001, 0x3bdf0101, 0x77bd0001, 0x1def0201, 0x77bb0001, 0x3bdd0101, 0x77b90001, 0x0ef70301, 0x77b70001, 0x3bdb0101, 0x77b50001, 0x1ded0201, 0x77b30001, 0x3bd90101, 0x77b10001, 0x077b0401, 0x77af0001, 0x3bd70101, 0x77ad0001, 0x1deb0201, 0x77ab0001, 0x3bd50101, 0x77a90001, 0x0ef50301, 0x77a70001, 0x3bd30101, 0x77a50001, 0x1de90201, 0x77a30001, 0x3bd10101, 0x77a10001, 0x03bd0501, 0x779f0001, 0x3bcf0101, 0x779d0001, 0x1de70201, 0x779b0001, 0x3bcd0101, 0x77990001, 0x0ef30301, 0x77970001, 0x3bcb0101, 0x77950001, 0x1de50201, 0x77930001, 0x3bc90101, 0x77910001, 0x07790401, 0x778f0001, 0x3bc70101, 0x778d0001, 0x1de30201, 0x778b0001, 0x3bc50101, 0x77890001, 0x0ef10301, 0x77870001, 0x3bc30101, 0x77850001, 0x1de10201, 0x77830001, 0x3bc10101, 0x77810001, 0x00ef1601, 0x777f0001, 0x3bbf0101, 0x777d0001, 0x1ddf0201, 0x777b0001, 0x3bbd0101, 0x77790001, 0x0eef0301, 0x77770001, 0x3bbb0101, 0x77750001, 0x1ddd0201, 0x77730001, 0x3bb90101, 0x77710001, 0x07770401, 0x776f0001, 0x3bb70101, 0x776d0001, 0x1ddb0201, 0x776b0001, 0x3bb50101, 0x77690001, 0x0eed0301, 0x77670001, 0x3bb30101, 0x77650001, 0x1dd90201, 0x77630001, 0x3bb10101, 0x77610001, 0x03bb0501, 0x775f0001, 0x3baf0101, 0x775d0001, 0x1dd70201, 0x775b0001, 0x3bad0101, 0x77590001, 0x0eeb0301, 0x77570001, 0x3bab0101, 0x77550001, 0x1dd50201, 0x77530001, 0x3ba90101, 0x77510001, 0x07750401, 0x774f0001, 0x3ba70101, 0x774d0001, 0x1dd30201, 0x774b0001, 0x3ba50101, 0x77490001, 0x0ee90301, 0x77470001, 0x3ba30101, 0x77450001, 0x1dd10201, 0x77430001, 0x3ba10101, 0x77410001, 0x01dd0601, 0x773f0001, 0x3b9f0101, 0x773d0001, 0x1dcf0201, 0x773b0001, 0x3b9d0101, 0x77390001, 0x0ee70301, 0x77370001, 0x3b9b0101, 0x77350001, 0x1dcd0201, 0x77330001, 0x3b990101, 0x77310001, 0x07730401, 0x772f0001, 0x3b970101, 0x772d0001, 0x1dcb0201, 0x772b0001, 0x3b950101, 0x77290001, 0x0ee50301, 0x77270001, 0x3b930101, 0x77250001, 0x1dc90201, 0x77230001, 0x3b910101, 0x77210001, 0x03b90501, 0x771f0001, 0x3b8f0101, 0x771d0001, 0x1dc70201, 0x771b0001, 0x3b8d0101, 0x77190001, 0x0ee30301, 0x77170001, 0x3b8b0101, 0x77150001, 0x1dc50201, 0x77130001, 0x3b890101, 0x77110001, 0x07710401, 0x770f0001, 0x3b870101, 0x770d0001, 0x1dc30201, 0x770b0001, 0x3b850101, 0x77090001, 0x0ee10301, 0x77070001, 0x3b830101, 0x77050001, 0x1dc10201, 0x77030001, 0x3b810101, 0x77010001, + 0x00772601, 0x76ff0001, 0x3b7f0101, 0x76fd0001, 0x1dbf0201, 0x76fb0001, 0x3b7d0101, 0x76f90001, 0x0edf0301, 0x76f70001, 0x3b7b0101, 0x76f50001, 0x1dbd0201, 0x76f30001, 0x3b790101, 0x76f10001, 0x076f0401, 0x76ef0001, 0x3b770101, 0x76ed0001, 0x1dbb0201, 0x76eb0001, 0x3b750101, 0x76e90001, 0x0edd0301, 0x76e70001, 0x3b730101, 0x76e50001, 0x1db90201, 0x76e30001, 0x3b710101, 0x76e10001, 0x03b70501, 0x76df0001, 0x3b6f0101, 0x76dd0001, 0x1db70201, 0x76db0001, 0x3b6d0101, 0x76d90001, 0x0edb0301, 0x76d70001, 0x3b6b0101, 0x76d50001, 0x1db50201, 0x76d30001, 0x3b690101, 0x76d10001, 0x076d0401, 0x76cf0001, 0x3b670101, 0x76cd0001, 0x1db30201, 0x76cb0001, 0x3b650101, 0x76c90001, 0x0ed90301, 0x76c70001, 0x3b630101, 0x76c50001, 0x1db10201, 0x76c30001, 0x3b610101, 0x76c10001, 0x01db0601, 0x76bf0001, 0x3b5f0101, 0x76bd0001, 0x1daf0201, 0x76bb0001, 0x3b5d0101, 0x76b90001, 0x0ed70301, 0x76b70001, 0x3b5b0101, 0x76b50001, 0x1dad0201, 0x76b30001, 0x3b590101, 0x76b10001, 0x076b0401, 0x76af0001, 0x3b570101, 0x76ad0001, 0x1dab0201, 0x76ab0001, 0x3b550101, 0x76a90001, 0x0ed50301, 0x76a70001, 0x3b530101, 0x76a50001, 0x1da90201, 0x76a30001, 0x3b510101, 0x76a10001, 0x03b50501, 0x769f0001, 0x3b4f0101, 0x769d0001, 0x1da70201, 0x769b0001, 0x3b4d0101, 0x76990001, 0x0ed30301, 0x76970001, 0x3b4b0101, 0x76950001, 0x1da50201, 0x76930001, 0x3b490101, 0x76910001, 0x07690401, 0x768f0001, 0x3b470101, 0x768d0001, 0x1da30201, 0x768b0001, 0x3b450101, 0x76890001, 0x0ed10301, 0x76870001, 0x3b430101, 0x76850001, 0x1da10201, 0x76830001, 0x3b410101, 0x76810001, 0x00ed1601, 0x767f0001, 0x3b3f0101, 0x767d0001, 0x1d9f0201, 0x767b0001, 0x3b3d0101, 0x76790001, 0x0ecf0301, 0x76770001, 0x3b3b0101, 0x76750001, 0x1d9d0201, 0x76730001, 0x3b390101, 0x76710001, 0x07670401, 0x766f0001, 0x3b370101, 0x766d0001, 0x1d9b0201, 0x766b0001, 0x3b350101, 0x76690001, 0x0ecd0301, 0x76670001, 0x3b330101, 0x76650001, 0x1d990201, 0x76630001, 0x3b310101, 0x76610001, 0x03b30501, 0x765f0001, 0x3b2f0101, 0x765d0001, 0x1d970201, 0x765b0001, 0x3b2d0101, 0x76590001, 0x0ecb0301, 0x76570001, 0x3b2b0101, 0x76550001, 0x1d950201, 0x76530001, 0x3b290101, 0x76510001, 0x07650401, 0x764f0001, 0x3b270101, 0x764d0001, 0x1d930201, 0x764b0001, 0x3b250101, 0x76490001, 0x0ec90301, 0x76470001, 0x3b230101, 0x76450001, 0x1d910201, 0x76430001, 0x3b210101, 0x76410001, 0x01d90601, 0x763f0001, 0x3b1f0101, 0x763d0001, 0x1d8f0201, 0x763b0001, 0x3b1d0101, 0x76390001, 0x0ec70301, 0x76370001, 0x3b1b0101, 0x76350001, 0x1d8d0201, 0x76330001, 0x3b190101, 0x76310001, 0x07630401, 0x762f0001, 0x3b170101, 0x762d0001, 0x1d8b0201, 0x762b0001, 0x3b150101, 0x76290001, 0x0ec50301, 0x76270001, 0x3b130101, 0x76250001, 0x1d890201, 0x76230001, 0x3b110101, 0x76210001, 0x03b10501, 0x761f0001, 0x3b0f0101, 0x761d0001, 0x1d870201, 0x761b0001, 0x3b0d0101, 0x76190001, 0x0ec30301, 0x76170001, 0x3b0b0101, 0x76150001, 0x1d850201, 0x76130001, 0x3b090101, 0x76110001, 0x07610401, 0x760f0001, 0x3b070101, 0x760d0001, 0x1d830201, 0x760b0001, 0x3b050101, 0x76090001, 0x0ec10301, 0x76070001, 0x3b030101, 0x76050001, 0x1d810201, 0x76030001, 0x3b010101, 0x76010001, + 0x003b3601, 0x75ff0001, 0x3aff0101, 0x75fd0001, 0x1d7f0201, 0x75fb0001, 0x3afd0101, 0x75f90001, 0x0ebf0301, 0x75f70001, 0x3afb0101, 0x75f50001, 0x1d7d0201, 0x75f30001, 0x3af90101, 0x75f10001, 0x075f0401, 0x75ef0001, 0x3af70101, 0x75ed0001, 0x1d7b0201, 0x75eb0001, 0x3af50101, 0x75e90001, 0x0ebd0301, 0x75e70001, 0x3af30101, 0x75e50001, 0x1d790201, 0x75e30001, 0x3af10101, 0x75e10001, 0x03af0501, 0x75df0001, 0x3aef0101, 0x75dd0001, 0x1d770201, 0x75db0001, 0x3aed0101, 0x75d90001, 0x0ebb0301, 0x75d70001, 0x3aeb0101, 0x75d50001, 0x1d750201, 0x75d30001, 0x3ae90101, 0x75d10001, 0x075d0401, 0x75cf0001, 0x3ae70101, 0x75cd0001, 0x1d730201, 0x75cb0001, 0x3ae50101, 0x75c90001, 0x0eb90301, 0x75c70001, 0x3ae30101, 0x75c50001, 0x1d710201, 0x75c30001, 0x3ae10101, 0x75c10001, 0x01d70601, 0x75bf0001, 0x3adf0101, 0x75bd0001, 0x1d6f0201, 0x75bb0001, 0x3add0101, 0x75b90001, 0x0eb70301, 0x75b70001, 0x3adb0101, 0x75b50001, 0x1d6d0201, 0x75b30001, 0x3ad90101, 0x75b10001, 0x075b0401, 0x75af0001, 0x3ad70101, 0x75ad0001, 0x1d6b0201, 0x75ab0001, 0x3ad50101, 0x75a90001, 0x0eb50301, 0x75a70001, 0x3ad30101, 0x75a50001, 0x1d690201, 0x75a30001, 0x3ad10101, 0x75a10001, 0x03ad0501, 0x759f0001, 0x3acf0101, 0x759d0001, 0x1d670201, 0x759b0001, 0x3acd0101, 0x75990001, 0x0eb30301, 0x75970001, 0x3acb0101, 0x75950001, 0x1d650201, 0x75930001, 0x3ac90101, 0x75910001, 0x07590401, 0x758f0001, 0x3ac70101, 0x758d0001, 0x1d630201, 0x758b0001, 0x3ac50101, 0x75890001, 0x0eb10301, 0x75870001, 0x3ac30101, 0x75850001, 0x1d610201, 0x75830001, 0x3ac10101, 0x75810001, 0x00eb1601, 0x757f0001, 0x3abf0101, 0x757d0001, 0x1d5f0201, 0x757b0001, 0x3abd0101, 0x75790001, 0x0eaf0301, 0x75770001, 0x3abb0101, 0x75750001, 0x1d5d0201, 0x75730001, 0x3ab90101, 0x75710001, 0x07570401, 0x756f0001, 0x3ab70101, 0x756d0001, 0x1d5b0201, 0x756b0001, 0x3ab50101, 0x75690001, 0x0ead0301, 0x75670001, 0x3ab30101, 0x75650001, 0x1d590201, 0x75630001, 0x3ab10101, 0x75610001, 0x03ab0501, 0x755f0001, 0x3aaf0101, 0x755d0001, 0x1d570201, 0x755b0001, 0x3aad0101, 0x75590001, 0x0eab0301, 0x75570001, 0x3aab0101, 0x75550001, 0x1d550201, 0x75530001, 0x3aa90101, 0x75510001, 0x07550401, 0x754f0001, 0x3aa70101, 0x754d0001, 0x1d530201, 0x754b0001, 0x3aa50101, 0x75490001, 0x0ea90301, 0x75470001, 0x3aa30101, 0x75450001, 0x1d510201, 0x75430001, 0x3aa10101, 0x75410001, 0x01d50601, 0x753f0001, 0x3a9f0101, 0x753d0001, 0x1d4f0201, 0x753b0001, 0x3a9d0101, 0x75390001, 0x0ea70301, 0x75370001, 0x3a9b0101, 0x75350001, 0x1d4d0201, 0x75330001, 0x3a990101, 0x75310001, 0x07530401, 0x752f0001, 0x3a970101, 0x752d0001, 0x1d4b0201, 0x752b0001, 0x3a950101, 0x75290001, 0x0ea50301, 0x75270001, 0x3a930101, 0x75250001, 0x1d490201, 0x75230001, 0x3a910101, 0x75210001, 0x03a90501, 0x751f0001, 0x3a8f0101, 0x751d0001, 0x1d470201, 0x751b0001, 0x3a8d0101, 0x75190001, 0x0ea30301, 0x75170001, 0x3a8b0101, 0x75150001, 0x1d450201, 0x75130001, 0x3a890101, 0x75110001, 0x07510401, 0x750f0001, 0x3a870101, 0x750d0001, 0x1d430201, 0x750b0001, 0x3a850101, 0x75090001, 0x0ea10301, 0x75070001, 0x3a830101, 0x75050001, 0x1d410201, 0x75030001, 0x3a810101, 0x75010001, + 0x00752601, 0x74ff0001, 0x3a7f0101, 0x74fd0001, 0x1d3f0201, 0x74fb0001, 0x3a7d0101, 0x74f90001, 0x0e9f0301, 0x74f70001, 0x3a7b0101, 0x74f50001, 0x1d3d0201, 0x74f30001, 0x3a790101, 0x74f10001, 0x074f0401, 0x74ef0001, 0x3a770101, 0x74ed0001, 0x1d3b0201, 0x74eb0001, 0x3a750101, 0x74e90001, 0x0e9d0301, 0x74e70001, 0x3a730101, 0x74e50001, 0x1d390201, 0x74e30001, 0x3a710101, 0x74e10001, 0x03a70501, 0x74df0001, 0x3a6f0101, 0x74dd0001, 0x1d370201, 0x74db0001, 0x3a6d0101, 0x74d90001, 0x0e9b0301, 0x74d70001, 0x3a6b0101, 0x74d50001, 0x1d350201, 0x74d30001, 0x3a690101, 0x74d10001, 0x074d0401, 0x74cf0001, 0x3a670101, 0x74cd0001, 0x1d330201, 0x74cb0001, 0x3a650101, 0x74c90001, 0x0e990301, 0x74c70001, 0x3a630101, 0x74c50001, 0x1d310201, 0x74c30001, 0x3a610101, 0x74c10001, 0x01d30601, 0x74bf0001, 0x3a5f0101, 0x74bd0001, 0x1d2f0201, 0x74bb0001, 0x3a5d0101, 0x74b90001, 0x0e970301, 0x74b70001, 0x3a5b0101, 0x74b50001, 0x1d2d0201, 0x74b30001, 0x3a590101, 0x74b10001, 0x074b0401, 0x74af0001, 0x3a570101, 0x74ad0001, 0x1d2b0201, 0x74ab0001, 0x3a550101, 0x74a90001, 0x0e950301, 0x74a70001, 0x3a530101, 0x74a50001, 0x1d290201, 0x74a30001, 0x3a510101, 0x74a10001, 0x03a50501, 0x749f0001, 0x3a4f0101, 0x749d0001, 0x1d270201, 0x749b0001, 0x3a4d0101, 0x74990001, 0x0e930301, 0x74970001, 0x3a4b0101, 0x74950001, 0x1d250201, 0x74930001, 0x3a490101, 0x74910001, 0x07490401, 0x748f0001, 0x3a470101, 0x748d0001, 0x1d230201, 0x748b0001, 0x3a450101, 0x74890001, 0x0e910301, 0x74870001, 0x3a430101, 0x74850001, 0x1d210201, 0x74830001, 0x3a410101, 0x74810001, 0x00e91601, 0x747f0001, 0x3a3f0101, 0x747d0001, 0x1d1f0201, 0x747b0001, 0x3a3d0101, 0x74790001, 0x0e8f0301, 0x74770001, 0x3a3b0101, 0x74750001, 0x1d1d0201, 0x74730001, 0x3a390101, 0x74710001, 0x07470401, 0x746f0001, 0x3a370101, 0x746d0001, 0x1d1b0201, 0x746b0001, 0x3a350101, 0x74690001, 0x0e8d0301, 0x74670001, 0x3a330101, 0x74650001, 0x1d190201, 0x74630001, 0x3a310101, 0x74610001, 0x03a30501, 0x745f0001, 0x3a2f0101, 0x745d0001, 0x1d170201, 0x745b0001, 0x3a2d0101, 0x74590001, 0x0e8b0301, 0x74570001, 0x3a2b0101, 0x74550001, 0x1d150201, 0x74530001, 0x3a290101, 0x74510001, 0x07450401, 0x744f0001, 0x3a270101, 0x744d0001, 0x1d130201, 0x744b0001, 0x3a250101, 0x74490001, 0x0e890301, 0x74470001, 0x3a230101, 0x74450001, 0x1d110201, 0x74430001, 0x3a210101, 0x74410001, 0x01d10601, 0x743f0001, 0x3a1f0101, 0x743d0001, 0x1d0f0201, 0x743b0001, 0x3a1d0101, 0x74390001, 0x0e870301, 0x74370001, 0x3a1b0101, 0x74350001, 0x1d0d0201, 0x74330001, 0x3a190101, 0x74310001, 0x07430401, 0x742f0001, 0x3a170101, 0x742d0001, 0x1d0b0201, 0x742b0001, 0x3a150101, 0x74290001, 0x0e850301, 0x74270001, 0x3a130101, 0x74250001, 0x1d090201, 0x74230001, 0x3a110101, 0x74210001, 0x03a10501, 0x741f0001, 0x3a0f0101, 0x741d0001, 0x1d070201, 0x741b0001, 0x3a0d0101, 0x74190001, 0x0e830301, 0x74170001, 0x3a0b0101, 0x74150001, 0x1d050201, 0x74130001, 0x3a090101, 0x74110001, 0x07410401, 0x740f0001, 0x3a070101, 0x740d0001, 0x1d030201, 0x740b0001, 0x3a050101, 0x74090001, 0x0e810301, 0x74070001, 0x3a030101, 0x74050001, 0x1d010201, 0x74030001, 0x3a010101, 0x74010001, + 0x001d4601, 0x73ff0001, 0x39ff0101, 0x73fd0001, 0x1cff0201, 0x73fb0001, 0x39fd0101, 0x73f90001, 0x0e7f0301, 0x73f70001, 0x39fb0101, 0x73f50001, 0x1cfd0201, 0x73f30001, 0x39f90101, 0x73f10001, 0x073f0401, 0x73ef0001, 0x39f70101, 0x73ed0001, 0x1cfb0201, 0x73eb0001, 0x39f50101, 0x73e90001, 0x0e7d0301, 0x73e70001, 0x39f30101, 0x73e50001, 0x1cf90201, 0x73e30001, 0x39f10101, 0x73e10001, 0x039f0501, 0x73df0001, 0x39ef0101, 0x73dd0001, 0x1cf70201, 0x73db0001, 0x39ed0101, 0x73d90001, 0x0e7b0301, 0x73d70001, 0x39eb0101, 0x73d50001, 0x1cf50201, 0x73d30001, 0x39e90101, 0x73d10001, 0x073d0401, 0x73cf0001, 0x39e70101, 0x73cd0001, 0x1cf30201, 0x73cb0001, 0x39e50101, 0x73c90001, 0x0e790301, 0x73c70001, 0x39e30101, 0x73c50001, 0x1cf10201, 0x73c30001, 0x39e10101, 0x73c10001, 0x01cf0601, 0x73bf0001, 0x39df0101, 0x73bd0001, 0x1cef0201, 0x73bb0001, 0x39dd0101, 0x73b90001, 0x0e770301, 0x73b70001, 0x39db0101, 0x73b50001, 0x1ced0201, 0x73b30001, 0x39d90101, 0x73b10001, 0x073b0401, 0x73af0001, 0x39d70101, 0x73ad0001, 0x1ceb0201, 0x73ab0001, 0x39d50101, 0x73a90001, 0x0e750301, 0x73a70001, 0x39d30101, 0x73a50001, 0x1ce90201, 0x73a30001, 0x39d10101, 0x73a10001, 0x039d0501, 0x739f0001, 0x39cf0101, 0x739d0001, 0x1ce70201, 0x739b0001, 0x39cd0101, 0x73990001, 0x0e730301, 0x73970001, 0x39cb0101, 0x73950001, 0x1ce50201, 0x73930001, 0x39c90101, 0x73910001, 0x07390401, 0x738f0001, 0x39c70101, 0x738d0001, 0x1ce30201, 0x738b0001, 0x39c50101, 0x73890001, 0x0e710301, 0x73870001, 0x39c30101, 0x73850001, 0x1ce10201, 0x73830001, 0x39c10101, 0x73810001, 0x00e71601, 0x737f0001, 0x39bf0101, 0x737d0001, 0x1cdf0201, 0x737b0001, 0x39bd0101, 0x73790001, 0x0e6f0301, 0x73770001, 0x39bb0101, 0x73750001, 0x1cdd0201, 0x73730001, 0x39b90101, 0x73710001, 0x07370401, 0x736f0001, 0x39b70101, 0x736d0001, 0x1cdb0201, 0x736b0001, 0x39b50101, 0x73690001, 0x0e6d0301, 0x73670001, 0x39b30101, 0x73650001, 0x1cd90201, 0x73630001, 0x39b10101, 0x73610001, 0x039b0501, 0x735f0001, 0x39af0101, 0x735d0001, 0x1cd70201, 0x735b0001, 0x39ad0101, 0x73590001, 0x0e6b0301, 0x73570001, 0x39ab0101, 0x73550001, 0x1cd50201, 0x73530001, 0x39a90101, 0x73510001, 0x07350401, 0x734f0001, 0x39a70101, 0x734d0001, 0x1cd30201, 0x734b0001, 0x39a50101, 0x73490001, 0x0e690301, 0x73470001, 0x39a30101, 0x73450001, 0x1cd10201, 0x73430001, 0x39a10101, 0x73410001, 0x01cd0601, 0x733f0001, 0x399f0101, 0x733d0001, 0x1ccf0201, 0x733b0001, 0x399d0101, 0x73390001, 0x0e670301, 0x73370001, 0x399b0101, 0x73350001, 0x1ccd0201, 0x73330001, 0x39990101, 0x73310001, 0x07330401, 0x732f0001, 0x39970101, 0x732d0001, 0x1ccb0201, 0x732b0001, 0x39950101, 0x73290001, 0x0e650301, 0x73270001, 0x39930101, 0x73250001, 0x1cc90201, 0x73230001, 0x39910101, 0x73210001, 0x03990501, 0x731f0001, 0x398f0101, 0x731d0001, 0x1cc70201, 0x731b0001, 0x398d0101, 0x73190001, 0x0e630301, 0x73170001, 0x398b0101, 0x73150001, 0x1cc50201, 0x73130001, 0x39890101, 0x73110001, 0x07310401, 0x730f0001, 0x39870101, 0x730d0001, 0x1cc30201, 0x730b0001, 0x39850101, 0x73090001, 0x0e610301, 0x73070001, 0x39830101, 0x73050001, 0x1cc10201, 0x73030001, 0x39810101, 0x73010001, + 0x00732601, 0x72ff0001, 0x397f0101, 0x72fd0001, 0x1cbf0201, 0x72fb0001, 0x397d0101, 0x72f90001, 0x0e5f0301, 0x72f70001, 0x397b0101, 0x72f50001, 0x1cbd0201, 0x72f30001, 0x39790101, 0x72f10001, 0x072f0401, 0x72ef0001, 0x39770101, 0x72ed0001, 0x1cbb0201, 0x72eb0001, 0x39750101, 0x72e90001, 0x0e5d0301, 0x72e70001, 0x39730101, 0x72e50001, 0x1cb90201, 0x72e30001, 0x39710101, 0x72e10001, 0x03970501, 0x72df0001, 0x396f0101, 0x72dd0001, 0x1cb70201, 0x72db0001, 0x396d0101, 0x72d90001, 0x0e5b0301, 0x72d70001, 0x396b0101, 0x72d50001, 0x1cb50201, 0x72d30001, 0x39690101, 0x72d10001, 0x072d0401, 0x72cf0001, 0x39670101, 0x72cd0001, 0x1cb30201, 0x72cb0001, 0x39650101, 0x72c90001, 0x0e590301, 0x72c70001, 0x39630101, 0x72c50001, 0x1cb10201, 0x72c30001, 0x39610101, 0x72c10001, 0x01cb0601, 0x72bf0001, 0x395f0101, 0x72bd0001, 0x1caf0201, 0x72bb0001, 0x395d0101, 0x72b90001, 0x0e570301, 0x72b70001, 0x395b0101, 0x72b50001, 0x1cad0201, 0x72b30001, 0x39590101, 0x72b10001, 0x072b0401, 0x72af0001, 0x39570101, 0x72ad0001, 0x1cab0201, 0x72ab0001, 0x39550101, 0x72a90001, 0x0e550301, 0x72a70001, 0x39530101, 0x72a50001, 0x1ca90201, 0x72a30001, 0x39510101, 0x72a10001, 0x03950501, 0x729f0001, 0x394f0101, 0x729d0001, 0x1ca70201, 0x729b0001, 0x394d0101, 0x72990001, 0x0e530301, 0x72970001, 0x394b0101, 0x72950001, 0x1ca50201, 0x72930001, 0x39490101, 0x72910001, 0x07290401, 0x728f0001, 0x39470101, 0x728d0001, 0x1ca30201, 0x728b0001, 0x39450101, 0x72890001, 0x0e510301, 0x72870001, 0x39430101, 0x72850001, 0x1ca10201, 0x72830001, 0x39410101, 0x72810001, 0x00e51601, 0x727f0001, 0x393f0101, 0x727d0001, 0x1c9f0201, 0x727b0001, 0x393d0101, 0x72790001, 0x0e4f0301, 0x72770001, 0x393b0101, 0x72750001, 0x1c9d0201, 0x72730001, 0x39390101, 0x72710001, 0x07270401, 0x726f0001, 0x39370101, 0x726d0001, 0x1c9b0201, 0x726b0001, 0x39350101, 0x72690001, 0x0e4d0301, 0x72670001, 0x39330101, 0x72650001, 0x1c990201, 0x72630001, 0x39310101, 0x72610001, 0x03930501, 0x725f0001, 0x392f0101, 0x725d0001, 0x1c970201, 0x725b0001, 0x392d0101, 0x72590001, 0x0e4b0301, 0x72570001, 0x392b0101, 0x72550001, 0x1c950201, 0x72530001, 0x39290101, 0x72510001, 0x07250401, 0x724f0001, 0x39270101, 0x724d0001, 0x1c930201, 0x724b0001, 0x39250101, 0x72490001, 0x0e490301, 0x72470001, 0x39230101, 0x72450001, 0x1c910201, 0x72430001, 0x39210101, 0x72410001, 0x01c90601, 0x723f0001, 0x391f0101, 0x723d0001, 0x1c8f0201, 0x723b0001, 0x391d0101, 0x72390001, 0x0e470301, 0x72370001, 0x391b0101, 0x72350001, 0x1c8d0201, 0x72330001, 0x39190101, 0x72310001, 0x07230401, 0x722f0001, 0x39170101, 0x722d0001, 0x1c8b0201, 0x722b0001, 0x39150101, 0x72290001, 0x0e450301, 0x72270001, 0x39130101, 0x72250001, 0x1c890201, 0x72230001, 0x39110101, 0x72210001, 0x03910501, 0x721f0001, 0x390f0101, 0x721d0001, 0x1c870201, 0x721b0001, 0x390d0101, 0x72190001, 0x0e430301, 0x72170001, 0x390b0101, 0x72150001, 0x1c850201, 0x72130001, 0x39090101, 0x72110001, 0x07210401, 0x720f0001, 0x39070101, 0x720d0001, 0x1c830201, 0x720b0001, 0x39050101, 0x72090001, 0x0e410301, 0x72070001, 0x39030101, 0x72050001, 0x1c810201, 0x72030001, 0x39010101, 0x72010001, + 0x00393601, 0x71ff0001, 0x38ff0101, 0x71fd0001, 0x1c7f0201, 0x71fb0001, 0x38fd0101, 0x71f90001, 0x0e3f0301, 0x71f70001, 0x38fb0101, 0x71f50001, 0x1c7d0201, 0x71f30001, 0x38f90101, 0x71f10001, 0x071f0401, 0x71ef0001, 0x38f70101, 0x71ed0001, 0x1c7b0201, 0x71eb0001, 0x38f50101, 0x71e90001, 0x0e3d0301, 0x71e70001, 0x38f30101, 0x71e50001, 0x1c790201, 0x71e30001, 0x38f10101, 0x71e10001, 0x038f0501, 0x71df0001, 0x38ef0101, 0x71dd0001, 0x1c770201, 0x71db0001, 0x38ed0101, 0x71d90001, 0x0e3b0301, 0x71d70001, 0x38eb0101, 0x71d50001, 0x1c750201, 0x71d30001, 0x38e90101, 0x71d10001, 0x071d0401, 0x71cf0001, 0x38e70101, 0x71cd0001, 0x1c730201, 0x71cb0001, 0x38e50101, 0x71c90001, 0x0e390301, 0x71c70001, 0x38e30101, 0x71c50001, 0x1c710201, 0x71c30001, 0x38e10101, 0x71c10001, 0x01c70601, 0x71bf0001, 0x38df0101, 0x71bd0001, 0x1c6f0201, 0x71bb0001, 0x38dd0101, 0x71b90001, 0x0e370301, 0x71b70001, 0x38db0101, 0x71b50001, 0x1c6d0201, 0x71b30001, 0x38d90101, 0x71b10001, 0x071b0401, 0x71af0001, 0x38d70101, 0x71ad0001, 0x1c6b0201, 0x71ab0001, 0x38d50101, 0x71a90001, 0x0e350301, 0x71a70001, 0x38d30101, 0x71a50001, 0x1c690201, 0x71a30001, 0x38d10101, 0x71a10001, 0x038d0501, 0x719f0001, 0x38cf0101, 0x719d0001, 0x1c670201, 0x719b0001, 0x38cd0101, 0x71990001, 0x0e330301, 0x71970001, 0x38cb0101, 0x71950001, 0x1c650201, 0x71930001, 0x38c90101, 0x71910001, 0x07190401, 0x718f0001, 0x38c70101, 0x718d0001, 0x1c630201, 0x718b0001, 0x38c50101, 0x71890001, 0x0e310301, 0x71870001, 0x38c30101, 0x71850001, 0x1c610201, 0x71830001, 0x38c10101, 0x71810001, 0x00e31601, 0x717f0001, 0x38bf0101, 0x717d0001, 0x1c5f0201, 0x717b0001, 0x38bd0101, 0x71790001, 0x0e2f0301, 0x71770001, 0x38bb0101, 0x71750001, 0x1c5d0201, 0x71730001, 0x38b90101, 0x71710001, 0x07170401, 0x716f0001, 0x38b70101, 0x716d0001, 0x1c5b0201, 0x716b0001, 0x38b50101, 0x71690001, 0x0e2d0301, 0x71670001, 0x38b30101, 0x71650001, 0x1c590201, 0x71630001, 0x38b10101, 0x71610001, 0x038b0501, 0x715f0001, 0x38af0101, 0x715d0001, 0x1c570201, 0x715b0001, 0x38ad0101, 0x71590001, 0x0e2b0301, 0x71570001, 0x38ab0101, 0x71550001, 0x1c550201, 0x71530001, 0x38a90101, 0x71510001, 0x07150401, 0x714f0001, 0x38a70101, 0x714d0001, 0x1c530201, 0x714b0001, 0x38a50101, 0x71490001, 0x0e290301, 0x71470001, 0x38a30101, 0x71450001, 0x1c510201, 0x71430001, 0x38a10101, 0x71410001, 0x01c50601, 0x713f0001, 0x389f0101, 0x713d0001, 0x1c4f0201, 0x713b0001, 0x389d0101, 0x71390001, 0x0e270301, 0x71370001, 0x389b0101, 0x71350001, 0x1c4d0201, 0x71330001, 0x38990101, 0x71310001, 0x07130401, 0x712f0001, 0x38970101, 0x712d0001, 0x1c4b0201, 0x712b0001, 0x38950101, 0x71290001, 0x0e250301, 0x71270001, 0x38930101, 0x71250001, 0x1c490201, 0x71230001, 0x38910101, 0x71210001, 0x03890501, 0x711f0001, 0x388f0101, 0x711d0001, 0x1c470201, 0x711b0001, 0x388d0101, 0x71190001, 0x0e230301, 0x71170001, 0x388b0101, 0x71150001, 0x1c450201, 0x71130001, 0x38890101, 0x71110001, 0x07110401, 0x710f0001, 0x38870101, 0x710d0001, 0x1c430201, 0x710b0001, 0x38850101, 0x71090001, 0x0e210301, 0x71070001, 0x38830101, 0x71050001, 0x1c410201, 0x71030001, 0x38810101, 0x71010001, + 0x00712601, 0x70ff0001, 0x387f0101, 0x70fd0001, 0x1c3f0201, 0x70fb0001, 0x387d0101, 0x70f90001, 0x0e1f0301, 0x70f70001, 0x387b0101, 0x70f50001, 0x1c3d0201, 0x70f30001, 0x38790101, 0x70f10001, 0x070f0401, 0x70ef0001, 0x38770101, 0x70ed0001, 0x1c3b0201, 0x70eb0001, 0x38750101, 0x70e90001, 0x0e1d0301, 0x70e70001, 0x38730101, 0x70e50001, 0x1c390201, 0x70e30001, 0x38710101, 0x70e10001, 0x03870501, 0x70df0001, 0x386f0101, 0x70dd0001, 0x1c370201, 0x70db0001, 0x386d0101, 0x70d90001, 0x0e1b0301, 0x70d70001, 0x386b0101, 0x70d50001, 0x1c350201, 0x70d30001, 0x38690101, 0x70d10001, 0x070d0401, 0x70cf0001, 0x38670101, 0x70cd0001, 0x1c330201, 0x70cb0001, 0x38650101, 0x70c90001, 0x0e190301, 0x70c70001, 0x38630101, 0x70c50001, 0x1c310201, 0x70c30001, 0x38610101, 0x70c10001, 0x01c30601, 0x70bf0001, 0x385f0101, 0x70bd0001, 0x1c2f0201, 0x70bb0001, 0x385d0101, 0x70b90001, 0x0e170301, 0x70b70001, 0x385b0101, 0x70b50001, 0x1c2d0201, 0x70b30001, 0x38590101, 0x70b10001, 0x070b0401, 0x70af0001, 0x38570101, 0x70ad0001, 0x1c2b0201, 0x70ab0001, 0x38550101, 0x70a90001, 0x0e150301, 0x70a70001, 0x38530101, 0x70a50001, 0x1c290201, 0x70a30001, 0x38510101, 0x70a10001, 0x03850501, 0x709f0001, 0x384f0101, 0x709d0001, 0x1c270201, 0x709b0001, 0x384d0101, 0x70990001, 0x0e130301, 0x70970001, 0x384b0101, 0x70950001, 0x1c250201, 0x70930001, 0x38490101, 0x70910001, 0x07090401, 0x708f0001, 0x38470101, 0x708d0001, 0x1c230201, 0x708b0001, 0x38450101, 0x70890001, 0x0e110301, 0x70870001, 0x38430101, 0x70850001, 0x1c210201, 0x70830001, 0x38410101, 0x70810001, 0x00e11601, 0x707f0001, 0x383f0101, 0x707d0001, 0x1c1f0201, 0x707b0001, 0x383d0101, 0x70790001, 0x0e0f0301, 0x70770001, 0x383b0101, 0x70750001, 0x1c1d0201, 0x70730001, 0x38390101, 0x70710001, 0x07070401, 0x706f0001, 0x38370101, 0x706d0001, 0x1c1b0201, 0x706b0001, 0x38350101, 0x70690001, 0x0e0d0301, 0x70670001, 0x38330101, 0x70650001, 0x1c190201, 0x70630001, 0x38310101, 0x70610001, 0x03830501, 0x705f0001, 0x382f0101, 0x705d0001, 0x1c170201, 0x705b0001, 0x382d0101, 0x70590001, 0x0e0b0301, 0x70570001, 0x382b0101, 0x70550001, 0x1c150201, 0x70530001, 0x38290101, 0x70510001, 0x07050401, 0x704f0001, 0x38270101, 0x704d0001, 0x1c130201, 0x704b0001, 0x38250101, 0x70490001, 0x0e090301, 0x70470001, 0x38230101, 0x70450001, 0x1c110201, 0x70430001, 0x38210101, 0x70410001, 0x01c10601, 0x703f0001, 0x381f0101, 0x703d0001, 0x1c0f0201, 0x703b0001, 0x381d0101, 0x70390001, 0x0e070301, 0x70370001, 0x381b0101, 0x70350001, 0x1c0d0201, 0x70330001, 0x38190101, 0x70310001, 0x07030401, 0x702f0001, 0x38170101, 0x702d0001, 0x1c0b0201, 0x702b0001, 0x38150101, 0x70290001, 0x0e050301, 0x70270001, 0x38130101, 0x70250001, 0x1c090201, 0x70230001, 0x38110101, 0x70210001, 0x03810501, 0x701f0001, 0x380f0101, 0x701d0001, 0x1c070201, 0x701b0001, 0x380d0101, 0x70190001, 0x0e030301, 0x70170001, 0x380b0101, 0x70150001, 0x1c050201, 0x70130001, 0x38090101, 0x70110001, 0x07010401, 0x700f0001, 0x38070101, 0x700d0001, 0x1c030201, 0x700b0001, 0x38050101, 0x70090001, 0x0e010301, 0x70070001, 0x38030101, 0x70050001, 0x1c010201, 0x70030001, 0x38010101, 0x70010001, + 0x00076601, 0x6fff0001, 0x37ff0101, 0x6ffd0001, 0x1bff0201, 0x6ffb0001, 0x37fd0101, 0x6ff90001, 0x0dff0301, 0x6ff70001, 0x37fb0101, 0x6ff50001, 0x1bfd0201, 0x6ff30001, 0x37f90101, 0x6ff10001, 0x06ff0401, 0x6fef0001, 0x37f70101, 0x6fed0001, 0x1bfb0201, 0x6feb0001, 0x37f50101, 0x6fe90001, 0x0dfd0301, 0x6fe70001, 0x37f30101, 0x6fe50001, 0x1bf90201, 0x6fe30001, 0x37f10101, 0x6fe10001, 0x037f0501, 0x6fdf0001, 0x37ef0101, 0x6fdd0001, 0x1bf70201, 0x6fdb0001, 0x37ed0101, 0x6fd90001, 0x0dfb0301, 0x6fd70001, 0x37eb0101, 0x6fd50001, 0x1bf50201, 0x6fd30001, 0x37e90101, 0x6fd10001, 0x06fd0401, 0x6fcf0001, 0x37e70101, 0x6fcd0001, 0x1bf30201, 0x6fcb0001, 0x37e50101, 0x6fc90001, 0x0df90301, 0x6fc70001, 0x37e30101, 0x6fc50001, 0x1bf10201, 0x6fc30001, 0x37e10101, 0x6fc10001, 0x01bf0601, 0x6fbf0001, 0x37df0101, 0x6fbd0001, 0x1bef0201, 0x6fbb0001, 0x37dd0101, 0x6fb90001, 0x0df70301, 0x6fb70001, 0x37db0101, 0x6fb50001, 0x1bed0201, 0x6fb30001, 0x37d90101, 0x6fb10001, 0x06fb0401, 0x6faf0001, 0x37d70101, 0x6fad0001, 0x1beb0201, 0x6fab0001, 0x37d50101, 0x6fa90001, 0x0df50301, 0x6fa70001, 0x37d30101, 0x6fa50001, 0x1be90201, 0x6fa30001, 0x37d10101, 0x6fa10001, 0x037d0501, 0x6f9f0001, 0x37cf0101, 0x6f9d0001, 0x1be70201, 0x6f9b0001, 0x37cd0101, 0x6f990001, 0x0df30301, 0x6f970001, 0x37cb0101, 0x6f950001, 0x1be50201, 0x6f930001, 0x37c90101, 0x6f910001, 0x06f90401, 0x6f8f0001, 0x37c70101, 0x6f8d0001, 0x1be30201, 0x6f8b0001, 0x37c50101, 0x6f890001, 0x0df10301, 0x6f870001, 0x37c30101, 0x6f850001, 0x1be10201, 0x6f830001, 0x37c10101, 0x6f810001, 0x00df1601, 0x6f7f0001, 0x37bf0101, 0x6f7d0001, 0x1bdf0201, 0x6f7b0001, 0x37bd0101, 0x6f790001, 0x0def0301, 0x6f770001, 0x37bb0101, 0x6f750001, 0x1bdd0201, 0x6f730001, 0x37b90101, 0x6f710001, 0x06f70401, 0x6f6f0001, 0x37b70101, 0x6f6d0001, 0x1bdb0201, 0x6f6b0001, 0x37b50101, 0x6f690001, 0x0ded0301, 0x6f670001, 0x37b30101, 0x6f650001, 0x1bd90201, 0x6f630001, 0x37b10101, 0x6f610001, 0x037b0501, 0x6f5f0001, 0x37af0101, 0x6f5d0001, 0x1bd70201, 0x6f5b0001, 0x37ad0101, 0x6f590001, 0x0deb0301, 0x6f570001, 0x37ab0101, 0x6f550001, 0x1bd50201, 0x6f530001, 0x37a90101, 0x6f510001, 0x06f50401, 0x6f4f0001, 0x37a70101, 0x6f4d0001, 0x1bd30201, 0x6f4b0001, 0x37a50101, 0x6f490001, 0x0de90301, 0x6f470001, 0x37a30101, 0x6f450001, 0x1bd10201, 0x6f430001, 0x37a10101, 0x6f410001, 0x01bd0601, 0x6f3f0001, 0x379f0101, 0x6f3d0001, 0x1bcf0201, 0x6f3b0001, 0x379d0101, 0x6f390001, 0x0de70301, 0x6f370001, 0x379b0101, 0x6f350001, 0x1bcd0201, 0x6f330001, 0x37990101, 0x6f310001, 0x06f30401, 0x6f2f0001, 0x37970101, 0x6f2d0001, 0x1bcb0201, 0x6f2b0001, 0x37950101, 0x6f290001, 0x0de50301, 0x6f270001, 0x37930101, 0x6f250001, 0x1bc90201, 0x6f230001, 0x37910101, 0x6f210001, 0x03790501, 0x6f1f0001, 0x378f0101, 0x6f1d0001, 0x1bc70201, 0x6f1b0001, 0x378d0101, 0x6f190001, 0x0de30301, 0x6f170001, 0x378b0101, 0x6f150001, 0x1bc50201, 0x6f130001, 0x37890101, 0x6f110001, 0x06f10401, 0x6f0f0001, 0x37870101, 0x6f0d0001, 0x1bc30201, 0x6f0b0001, 0x37850101, 0x6f090001, 0x0de10301, 0x6f070001, 0x37830101, 0x6f050001, 0x1bc10201, 0x6f030001, 0x37810101, 0x6f010001, + 0x006f2601, 0x6eff0001, 0x377f0101, 0x6efd0001, 0x1bbf0201, 0x6efb0001, 0x377d0101, 0x6ef90001, 0x0ddf0301, 0x6ef70001, 0x377b0101, 0x6ef50001, 0x1bbd0201, 0x6ef30001, 0x37790101, 0x6ef10001, 0x06ef0401, 0x6eef0001, 0x37770101, 0x6eed0001, 0x1bbb0201, 0x6eeb0001, 0x37750101, 0x6ee90001, 0x0ddd0301, 0x6ee70001, 0x37730101, 0x6ee50001, 0x1bb90201, 0x6ee30001, 0x37710101, 0x6ee10001, 0x03770501, 0x6edf0001, 0x376f0101, 0x6edd0001, 0x1bb70201, 0x6edb0001, 0x376d0101, 0x6ed90001, 0x0ddb0301, 0x6ed70001, 0x376b0101, 0x6ed50001, 0x1bb50201, 0x6ed30001, 0x37690101, 0x6ed10001, 0x06ed0401, 0x6ecf0001, 0x37670101, 0x6ecd0001, 0x1bb30201, 0x6ecb0001, 0x37650101, 0x6ec90001, 0x0dd90301, 0x6ec70001, 0x37630101, 0x6ec50001, 0x1bb10201, 0x6ec30001, 0x37610101, 0x6ec10001, 0x01bb0601, 0x6ebf0001, 0x375f0101, 0x6ebd0001, 0x1baf0201, 0x6ebb0001, 0x375d0101, 0x6eb90001, 0x0dd70301, 0x6eb70001, 0x375b0101, 0x6eb50001, 0x1bad0201, 0x6eb30001, 0x37590101, 0x6eb10001, 0x06eb0401, 0x6eaf0001, 0x37570101, 0x6ead0001, 0x1bab0201, 0x6eab0001, 0x37550101, 0x6ea90001, 0x0dd50301, 0x6ea70001, 0x37530101, 0x6ea50001, 0x1ba90201, 0x6ea30001, 0x37510101, 0x6ea10001, 0x03750501, 0x6e9f0001, 0x374f0101, 0x6e9d0001, 0x1ba70201, 0x6e9b0001, 0x374d0101, 0x6e990001, 0x0dd30301, 0x6e970001, 0x374b0101, 0x6e950001, 0x1ba50201, 0x6e930001, 0x37490101, 0x6e910001, 0x06e90401, 0x6e8f0001, 0x37470101, 0x6e8d0001, 0x1ba30201, 0x6e8b0001, 0x37450101, 0x6e890001, 0x0dd10301, 0x6e870001, 0x37430101, 0x6e850001, 0x1ba10201, 0x6e830001, 0x37410101, 0x6e810001, 0x00dd1601, 0x6e7f0001, 0x373f0101, 0x6e7d0001, 0x1b9f0201, 0x6e7b0001, 0x373d0101, 0x6e790001, 0x0dcf0301, 0x6e770001, 0x373b0101, 0x6e750001, 0x1b9d0201, 0x6e730001, 0x37390101, 0x6e710001, 0x06e70401, 0x6e6f0001, 0x37370101, 0x6e6d0001, 0x1b9b0201, 0x6e6b0001, 0x37350101, 0x6e690001, 0x0dcd0301, 0x6e670001, 0x37330101, 0x6e650001, 0x1b990201, 0x6e630001, 0x37310101, 0x6e610001, 0x03730501, 0x6e5f0001, 0x372f0101, 0x6e5d0001, 0x1b970201, 0x6e5b0001, 0x372d0101, 0x6e590001, 0x0dcb0301, 0x6e570001, 0x372b0101, 0x6e550001, 0x1b950201, 0x6e530001, 0x37290101, 0x6e510001, 0x06e50401, 0x6e4f0001, 0x37270101, 0x6e4d0001, 0x1b930201, 0x6e4b0001, 0x37250101, 0x6e490001, 0x0dc90301, 0x6e470001, 0x37230101, 0x6e450001, 0x1b910201, 0x6e430001, 0x37210101, 0x6e410001, 0x01b90601, 0x6e3f0001, 0x371f0101, 0x6e3d0001, 0x1b8f0201, 0x6e3b0001, 0x371d0101, 0x6e390001, 0x0dc70301, 0x6e370001, 0x371b0101, 0x6e350001, 0x1b8d0201, 0x6e330001, 0x37190101, 0x6e310001, 0x06e30401, 0x6e2f0001, 0x37170101, 0x6e2d0001, 0x1b8b0201, 0x6e2b0001, 0x37150101, 0x6e290001, 0x0dc50301, 0x6e270001, 0x37130101, 0x6e250001, 0x1b890201, 0x6e230001, 0x37110101, 0x6e210001, 0x03710501, 0x6e1f0001, 0x370f0101, 0x6e1d0001, 0x1b870201, 0x6e1b0001, 0x370d0101, 0x6e190001, 0x0dc30301, 0x6e170001, 0x370b0101, 0x6e150001, 0x1b850201, 0x6e130001, 0x37090101, 0x6e110001, 0x06e10401, 0x6e0f0001, 0x37070101, 0x6e0d0001, 0x1b830201, 0x6e0b0001, 0x37050101, 0x6e090001, 0x0dc10301, 0x6e070001, 0x37030101, 0x6e050001, 0x1b810201, 0x6e030001, 0x37010101, 0x6e010001, + 0x00373601, 0x6dff0001, 0x36ff0101, 0x6dfd0001, 0x1b7f0201, 0x6dfb0001, 0x36fd0101, 0x6df90001, 0x0dbf0301, 0x6df70001, 0x36fb0101, 0x6df50001, 0x1b7d0201, 0x6df30001, 0x36f90101, 0x6df10001, 0x06df0401, 0x6def0001, 0x36f70101, 0x6ded0001, 0x1b7b0201, 0x6deb0001, 0x36f50101, 0x6de90001, 0x0dbd0301, 0x6de70001, 0x36f30101, 0x6de50001, 0x1b790201, 0x6de30001, 0x36f10101, 0x6de10001, 0x036f0501, 0x6ddf0001, 0x36ef0101, 0x6ddd0001, 0x1b770201, 0x6ddb0001, 0x36ed0101, 0x6dd90001, 0x0dbb0301, 0x6dd70001, 0x36eb0101, 0x6dd50001, 0x1b750201, 0x6dd30001, 0x36e90101, 0x6dd10001, 0x06dd0401, 0x6dcf0001, 0x36e70101, 0x6dcd0001, 0x1b730201, 0x6dcb0001, 0x36e50101, 0x6dc90001, 0x0db90301, 0x6dc70001, 0x36e30101, 0x6dc50001, 0x1b710201, 0x6dc30001, 0x36e10101, 0x6dc10001, 0x01b70601, 0x6dbf0001, 0x36df0101, 0x6dbd0001, 0x1b6f0201, 0x6dbb0001, 0x36dd0101, 0x6db90001, 0x0db70301, 0x6db70001, 0x36db0101, 0x6db50001, 0x1b6d0201, 0x6db30001, 0x36d90101, 0x6db10001, 0x06db0401, 0x6daf0001, 0x36d70101, 0x6dad0001, 0x1b6b0201, 0x6dab0001, 0x36d50101, 0x6da90001, 0x0db50301, 0x6da70001, 0x36d30101, 0x6da50001, 0x1b690201, 0x6da30001, 0x36d10101, 0x6da10001, 0x036d0501, 0x6d9f0001, 0x36cf0101, 0x6d9d0001, 0x1b670201, 0x6d9b0001, 0x36cd0101, 0x6d990001, 0x0db30301, 0x6d970001, 0x36cb0101, 0x6d950001, 0x1b650201, 0x6d930001, 0x36c90101, 0x6d910001, 0x06d90401, 0x6d8f0001, 0x36c70101, 0x6d8d0001, 0x1b630201, 0x6d8b0001, 0x36c50101, 0x6d890001, 0x0db10301, 0x6d870001, 0x36c30101, 0x6d850001, 0x1b610201, 0x6d830001, 0x36c10101, 0x6d810001, 0x00db1601, 0x6d7f0001, 0x36bf0101, 0x6d7d0001, 0x1b5f0201, 0x6d7b0001, 0x36bd0101, 0x6d790001, 0x0daf0301, 0x6d770001, 0x36bb0101, 0x6d750001, 0x1b5d0201, 0x6d730001, 0x36b90101, 0x6d710001, 0x06d70401, 0x6d6f0001, 0x36b70101, 0x6d6d0001, 0x1b5b0201, 0x6d6b0001, 0x36b50101, 0x6d690001, 0x0dad0301, 0x6d670001, 0x36b30101, 0x6d650001, 0x1b590201, 0x6d630001, 0x36b10101, 0x6d610001, 0x036b0501, 0x6d5f0001, 0x36af0101, 0x6d5d0001, 0x1b570201, 0x6d5b0001, 0x36ad0101, 0x6d590001, 0x0dab0301, 0x6d570001, 0x36ab0101, 0x6d550001, 0x1b550201, 0x6d530001, 0x36a90101, 0x6d510001, 0x06d50401, 0x6d4f0001, 0x36a70101, 0x6d4d0001, 0x1b530201, 0x6d4b0001, 0x36a50101, 0x6d490001, 0x0da90301, 0x6d470001, 0x36a30101, 0x6d450001, 0x1b510201, 0x6d430001, 0x36a10101, 0x6d410001, 0x01b50601, 0x6d3f0001, 0x369f0101, 0x6d3d0001, 0x1b4f0201, 0x6d3b0001, 0x369d0101, 0x6d390001, 0x0da70301, 0x6d370001, 0x369b0101, 0x6d350001, 0x1b4d0201, 0x6d330001, 0x36990101, 0x6d310001, 0x06d30401, 0x6d2f0001, 0x36970101, 0x6d2d0001, 0x1b4b0201, 0x6d2b0001, 0x36950101, 0x6d290001, 0x0da50301, 0x6d270001, 0x36930101, 0x6d250001, 0x1b490201, 0x6d230001, 0x36910101, 0x6d210001, 0x03690501, 0x6d1f0001, 0x368f0101, 0x6d1d0001, 0x1b470201, 0x6d1b0001, 0x368d0101, 0x6d190001, 0x0da30301, 0x6d170001, 0x368b0101, 0x6d150001, 0x1b450201, 0x6d130001, 0x36890101, 0x6d110001, 0x06d10401, 0x6d0f0001, 0x36870101, 0x6d0d0001, 0x1b430201, 0x6d0b0001, 0x36850101, 0x6d090001, 0x0da10301, 0x6d070001, 0x36830101, 0x6d050001, 0x1b410201, 0x6d030001, 0x36810101, 0x6d010001, + 0x006d2601, 0x6cff0001, 0x367f0101, 0x6cfd0001, 0x1b3f0201, 0x6cfb0001, 0x367d0101, 0x6cf90001, 0x0d9f0301, 0x6cf70001, 0x367b0101, 0x6cf50001, 0x1b3d0201, 0x6cf30001, 0x36790101, 0x6cf10001, 0x06cf0401, 0x6cef0001, 0x36770101, 0x6ced0001, 0x1b3b0201, 0x6ceb0001, 0x36750101, 0x6ce90001, 0x0d9d0301, 0x6ce70001, 0x36730101, 0x6ce50001, 0x1b390201, 0x6ce30001, 0x36710101, 0x6ce10001, 0x03670501, 0x6cdf0001, 0x366f0101, 0x6cdd0001, 0x1b370201, 0x6cdb0001, 0x366d0101, 0x6cd90001, 0x0d9b0301, 0x6cd70001, 0x366b0101, 0x6cd50001, 0x1b350201, 0x6cd30001, 0x36690101, 0x6cd10001, 0x06cd0401, 0x6ccf0001, 0x36670101, 0x6ccd0001, 0x1b330201, 0x6ccb0001, 0x36650101, 0x6cc90001, 0x0d990301, 0x6cc70001, 0x36630101, 0x6cc50001, 0x1b310201, 0x6cc30001, 0x36610101, 0x6cc10001, 0x01b30601, 0x6cbf0001, 0x365f0101, 0x6cbd0001, 0x1b2f0201, 0x6cbb0001, 0x365d0101, 0x6cb90001, 0x0d970301, 0x6cb70001, 0x365b0101, 0x6cb50001, 0x1b2d0201, 0x6cb30001, 0x36590101, 0x6cb10001, 0x06cb0401, 0x6caf0001, 0x36570101, 0x6cad0001, 0x1b2b0201, 0x6cab0001, 0x36550101, 0x6ca90001, 0x0d950301, 0x6ca70001, 0x36530101, 0x6ca50001, 0x1b290201, 0x6ca30001, 0x36510101, 0x6ca10001, 0x03650501, 0x6c9f0001, 0x364f0101, 0x6c9d0001, 0x1b270201, 0x6c9b0001, 0x364d0101, 0x6c990001, 0x0d930301, 0x6c970001, 0x364b0101, 0x6c950001, 0x1b250201, 0x6c930001, 0x36490101, 0x6c910001, 0x06c90401, 0x6c8f0001, 0x36470101, 0x6c8d0001, 0x1b230201, 0x6c8b0001, 0x36450101, 0x6c890001, 0x0d910301, 0x6c870001, 0x36430101, 0x6c850001, 0x1b210201, 0x6c830001, 0x36410101, 0x6c810001, 0x00d91601, 0x6c7f0001, 0x363f0101, 0x6c7d0001, 0x1b1f0201, 0x6c7b0001, 0x363d0101, 0x6c790001, 0x0d8f0301, 0x6c770001, 0x363b0101, 0x6c750001, 0x1b1d0201, 0x6c730001, 0x36390101, 0x6c710001, 0x06c70401, 0x6c6f0001, 0x36370101, 0x6c6d0001, 0x1b1b0201, 0x6c6b0001, 0x36350101, 0x6c690001, 0x0d8d0301, 0x6c670001, 0x36330101, 0x6c650001, 0x1b190201, 0x6c630001, 0x36310101, 0x6c610001, 0x03630501, 0x6c5f0001, 0x362f0101, 0x6c5d0001, 0x1b170201, 0x6c5b0001, 0x362d0101, 0x6c590001, 0x0d8b0301, 0x6c570001, 0x362b0101, 0x6c550001, 0x1b150201, 0x6c530001, 0x36290101, 0x6c510001, 0x06c50401, 0x6c4f0001, 0x36270101, 0x6c4d0001, 0x1b130201, 0x6c4b0001, 0x36250101, 0x6c490001, 0x0d890301, 0x6c470001, 0x36230101, 0x6c450001, 0x1b110201, 0x6c430001, 0x36210101, 0x6c410001, 0x01b10601, 0x6c3f0001, 0x361f0101, 0x6c3d0001, 0x1b0f0201, 0x6c3b0001, 0x361d0101, 0x6c390001, 0x0d870301, 0x6c370001, 0x361b0101, 0x6c350001, 0x1b0d0201, 0x6c330001, 0x36190101, 0x6c310001, 0x06c30401, 0x6c2f0001, 0x36170101, 0x6c2d0001, 0x1b0b0201, 0x6c2b0001, 0x36150101, 0x6c290001, 0x0d850301, 0x6c270001, 0x36130101, 0x6c250001, 0x1b090201, 0x6c230001, 0x36110101, 0x6c210001, 0x03610501, 0x6c1f0001, 0x360f0101, 0x6c1d0001, 0x1b070201, 0x6c1b0001, 0x360d0101, 0x6c190001, 0x0d830301, 0x6c170001, 0x360b0101, 0x6c150001, 0x1b050201, 0x6c130001, 0x36090101, 0x6c110001, 0x06c10401, 0x6c0f0001, 0x36070101, 0x6c0d0001, 0x1b030201, 0x6c0b0001, 0x36050101, 0x6c090001, 0x0d810301, 0x6c070001, 0x36030101, 0x6c050001, 0x1b010201, 0x6c030001, 0x36010101, 0x6c010001, + 0x001b4601, 0x6bff0001, 0x35ff0101, 0x6bfd0001, 0x1aff0201, 0x6bfb0001, 0x35fd0101, 0x6bf90001, 0x0d7f0301, 0x6bf70001, 0x35fb0101, 0x6bf50001, 0x1afd0201, 0x6bf30001, 0x35f90101, 0x6bf10001, 0x06bf0401, 0x6bef0001, 0x35f70101, 0x6bed0001, 0x1afb0201, 0x6beb0001, 0x35f50101, 0x6be90001, 0x0d7d0301, 0x6be70001, 0x35f30101, 0x6be50001, 0x1af90201, 0x6be30001, 0x35f10101, 0x6be10001, 0x035f0501, 0x6bdf0001, 0x35ef0101, 0x6bdd0001, 0x1af70201, 0x6bdb0001, 0x35ed0101, 0x6bd90001, 0x0d7b0301, 0x6bd70001, 0x35eb0101, 0x6bd50001, 0x1af50201, 0x6bd30001, 0x35e90101, 0x6bd10001, 0x06bd0401, 0x6bcf0001, 0x35e70101, 0x6bcd0001, 0x1af30201, 0x6bcb0001, 0x35e50101, 0x6bc90001, 0x0d790301, 0x6bc70001, 0x35e30101, 0x6bc50001, 0x1af10201, 0x6bc30001, 0x35e10101, 0x6bc10001, 0x01af0601, 0x6bbf0001, 0x35df0101, 0x6bbd0001, 0x1aef0201, 0x6bbb0001, 0x35dd0101, 0x6bb90001, 0x0d770301, 0x6bb70001, 0x35db0101, 0x6bb50001, 0x1aed0201, 0x6bb30001, 0x35d90101, 0x6bb10001, 0x06bb0401, 0x6baf0001, 0x35d70101, 0x6bad0001, 0x1aeb0201, 0x6bab0001, 0x35d50101, 0x6ba90001, 0x0d750301, 0x6ba70001, 0x35d30101, 0x6ba50001, 0x1ae90201, 0x6ba30001, 0x35d10101, 0x6ba10001, 0x035d0501, 0x6b9f0001, 0x35cf0101, 0x6b9d0001, 0x1ae70201, 0x6b9b0001, 0x35cd0101, 0x6b990001, 0x0d730301, 0x6b970001, 0x35cb0101, 0x6b950001, 0x1ae50201, 0x6b930001, 0x35c90101, 0x6b910001, 0x06b90401, 0x6b8f0001, 0x35c70101, 0x6b8d0001, 0x1ae30201, 0x6b8b0001, 0x35c50101, 0x6b890001, 0x0d710301, 0x6b870001, 0x35c30101, 0x6b850001, 0x1ae10201, 0x6b830001, 0x35c10101, 0x6b810001, 0x00d71601, 0x6b7f0001, 0x35bf0101, 0x6b7d0001, 0x1adf0201, 0x6b7b0001, 0x35bd0101, 0x6b790001, 0x0d6f0301, 0x6b770001, 0x35bb0101, 0x6b750001, 0x1add0201, 0x6b730001, 0x35b90101, 0x6b710001, 0x06b70401, 0x6b6f0001, 0x35b70101, 0x6b6d0001, 0x1adb0201, 0x6b6b0001, 0x35b50101, 0x6b690001, 0x0d6d0301, 0x6b670001, 0x35b30101, 0x6b650001, 0x1ad90201, 0x6b630001, 0x35b10101, 0x6b610001, 0x035b0501, 0x6b5f0001, 0x35af0101, 0x6b5d0001, 0x1ad70201, 0x6b5b0001, 0x35ad0101, 0x6b590001, 0x0d6b0301, 0x6b570001, 0x35ab0101, 0x6b550001, 0x1ad50201, 0x6b530001, 0x35a90101, 0x6b510001, 0x06b50401, 0x6b4f0001, 0x35a70101, 0x6b4d0001, 0x1ad30201, 0x6b4b0001, 0x35a50101, 0x6b490001, 0x0d690301, 0x6b470001, 0x35a30101, 0x6b450001, 0x1ad10201, 0x6b430001, 0x35a10101, 0x6b410001, 0x01ad0601, 0x6b3f0001, 0x359f0101, 0x6b3d0001, 0x1acf0201, 0x6b3b0001, 0x359d0101, 0x6b390001, 0x0d670301, 0x6b370001, 0x359b0101, 0x6b350001, 0x1acd0201, 0x6b330001, 0x35990101, 0x6b310001, 0x06b30401, 0x6b2f0001, 0x35970101, 0x6b2d0001, 0x1acb0201, 0x6b2b0001, 0x35950101, 0x6b290001, 0x0d650301, 0x6b270001, 0x35930101, 0x6b250001, 0x1ac90201, 0x6b230001, 0x35910101, 0x6b210001, 0x03590501, 0x6b1f0001, 0x358f0101, 0x6b1d0001, 0x1ac70201, 0x6b1b0001, 0x358d0101, 0x6b190001, 0x0d630301, 0x6b170001, 0x358b0101, 0x6b150001, 0x1ac50201, 0x6b130001, 0x35890101, 0x6b110001, 0x06b10401, 0x6b0f0001, 0x35870101, 0x6b0d0001, 0x1ac30201, 0x6b0b0001, 0x35850101, 0x6b090001, 0x0d610301, 0x6b070001, 0x35830101, 0x6b050001, 0x1ac10201, 0x6b030001, 0x35810101, 0x6b010001, + 0x006b2601, 0x6aff0001, 0x357f0101, 0x6afd0001, 0x1abf0201, 0x6afb0001, 0x357d0101, 0x6af90001, 0x0d5f0301, 0x6af70001, 0x357b0101, 0x6af50001, 0x1abd0201, 0x6af30001, 0x35790101, 0x6af10001, 0x06af0401, 0x6aef0001, 0x35770101, 0x6aed0001, 0x1abb0201, 0x6aeb0001, 0x35750101, 0x6ae90001, 0x0d5d0301, 0x6ae70001, 0x35730101, 0x6ae50001, 0x1ab90201, 0x6ae30001, 0x35710101, 0x6ae10001, 0x03570501, 0x6adf0001, 0x356f0101, 0x6add0001, 0x1ab70201, 0x6adb0001, 0x356d0101, 0x6ad90001, 0x0d5b0301, 0x6ad70001, 0x356b0101, 0x6ad50001, 0x1ab50201, 0x6ad30001, 0x35690101, 0x6ad10001, 0x06ad0401, 0x6acf0001, 0x35670101, 0x6acd0001, 0x1ab30201, 0x6acb0001, 0x35650101, 0x6ac90001, 0x0d590301, 0x6ac70001, 0x35630101, 0x6ac50001, 0x1ab10201, 0x6ac30001, 0x35610101, 0x6ac10001, 0x01ab0601, 0x6abf0001, 0x355f0101, 0x6abd0001, 0x1aaf0201, 0x6abb0001, 0x355d0101, 0x6ab90001, 0x0d570301, 0x6ab70001, 0x355b0101, 0x6ab50001, 0x1aad0201, 0x6ab30001, 0x35590101, 0x6ab10001, 0x06ab0401, 0x6aaf0001, 0x35570101, 0x6aad0001, 0x1aab0201, 0x6aab0001, 0x35550101, 0x6aa90001, 0x0d550301, 0x6aa70001, 0x35530101, 0x6aa50001, 0x1aa90201, 0x6aa30001, 0x35510101, 0x6aa10001, 0x03550501, 0x6a9f0001, 0x354f0101, 0x6a9d0001, 0x1aa70201, 0x6a9b0001, 0x354d0101, 0x6a990001, 0x0d530301, 0x6a970001, 0x354b0101, 0x6a950001, 0x1aa50201, 0x6a930001, 0x35490101, 0x6a910001, 0x06a90401, 0x6a8f0001, 0x35470101, 0x6a8d0001, 0x1aa30201, 0x6a8b0001, 0x35450101, 0x6a890001, 0x0d510301, 0x6a870001, 0x35430101, 0x6a850001, 0x1aa10201, 0x6a830001, 0x35410101, 0x6a810001, 0x00d51601, 0x6a7f0001, 0x353f0101, 0x6a7d0001, 0x1a9f0201, 0x6a7b0001, 0x353d0101, 0x6a790001, 0x0d4f0301, 0x6a770001, 0x353b0101, 0x6a750001, 0x1a9d0201, 0x6a730001, 0x35390101, 0x6a710001, 0x06a70401, 0x6a6f0001, 0x35370101, 0x6a6d0001, 0x1a9b0201, 0x6a6b0001, 0x35350101, 0x6a690001, 0x0d4d0301, 0x6a670001, 0x35330101, 0x6a650001, 0x1a990201, 0x6a630001, 0x35310101, 0x6a610001, 0x03530501, 0x6a5f0001, 0x352f0101, 0x6a5d0001, 0x1a970201, 0x6a5b0001, 0x352d0101, 0x6a590001, 0x0d4b0301, 0x6a570001, 0x352b0101, 0x6a550001, 0x1a950201, 0x6a530001, 0x35290101, 0x6a510001, 0x06a50401, 0x6a4f0001, 0x35270101, 0x6a4d0001, 0x1a930201, 0x6a4b0001, 0x35250101, 0x6a490001, 0x0d490301, 0x6a470001, 0x35230101, 0x6a450001, 0x1a910201, 0x6a430001, 0x35210101, 0x6a410001, 0x01a90601, 0x6a3f0001, 0x351f0101, 0x6a3d0001, 0x1a8f0201, 0x6a3b0001, 0x351d0101, 0x6a390001, 0x0d470301, 0x6a370001, 0x351b0101, 0x6a350001, 0x1a8d0201, 0x6a330001, 0x35190101, 0x6a310001, 0x06a30401, 0x6a2f0001, 0x35170101, 0x6a2d0001, 0x1a8b0201, 0x6a2b0001, 0x35150101, 0x6a290001, 0x0d450301, 0x6a270001, 0x35130101, 0x6a250001, 0x1a890201, 0x6a230001, 0x35110101, 0x6a210001, 0x03510501, 0x6a1f0001, 0x350f0101, 0x6a1d0001, 0x1a870201, 0x6a1b0001, 0x350d0101, 0x6a190001, 0x0d430301, 0x6a170001, 0x350b0101, 0x6a150001, 0x1a850201, 0x6a130001, 0x35090101, 0x6a110001, 0x06a10401, 0x6a0f0001, 0x35070101, 0x6a0d0001, 0x1a830201, 0x6a0b0001, 0x35050101, 0x6a090001, 0x0d410301, 0x6a070001, 0x35030101, 0x6a050001, 0x1a810201, 0x6a030001, 0x35010101, 0x6a010001, + 0x00353601, 0x69ff0001, 0x34ff0101, 0x69fd0001, 0x1a7f0201, 0x69fb0001, 0x34fd0101, 0x69f90001, 0x0d3f0301, 0x69f70001, 0x34fb0101, 0x69f50001, 0x1a7d0201, 0x69f30001, 0x34f90101, 0x69f10001, 0x069f0401, 0x69ef0001, 0x34f70101, 0x69ed0001, 0x1a7b0201, 0x69eb0001, 0x34f50101, 0x69e90001, 0x0d3d0301, 0x69e70001, 0x34f30101, 0x69e50001, 0x1a790201, 0x69e30001, 0x34f10101, 0x69e10001, 0x034f0501, 0x69df0001, 0x34ef0101, 0x69dd0001, 0x1a770201, 0x69db0001, 0x34ed0101, 0x69d90001, 0x0d3b0301, 0x69d70001, 0x34eb0101, 0x69d50001, 0x1a750201, 0x69d30001, 0x34e90101, 0x69d10001, 0x069d0401, 0x69cf0001, 0x34e70101, 0x69cd0001, 0x1a730201, 0x69cb0001, 0x34e50101, 0x69c90001, 0x0d390301, 0x69c70001, 0x34e30101, 0x69c50001, 0x1a710201, 0x69c30001, 0x34e10101, 0x69c10001, 0x01a70601, 0x69bf0001, 0x34df0101, 0x69bd0001, 0x1a6f0201, 0x69bb0001, 0x34dd0101, 0x69b90001, 0x0d370301, 0x69b70001, 0x34db0101, 0x69b50001, 0x1a6d0201, 0x69b30001, 0x34d90101, 0x69b10001, 0x069b0401, 0x69af0001, 0x34d70101, 0x69ad0001, 0x1a6b0201, 0x69ab0001, 0x34d50101, 0x69a90001, 0x0d350301, 0x69a70001, 0x34d30101, 0x69a50001, 0x1a690201, 0x69a30001, 0x34d10101, 0x69a10001, 0x034d0501, 0x699f0001, 0x34cf0101, 0x699d0001, 0x1a670201, 0x699b0001, 0x34cd0101, 0x69990001, 0x0d330301, 0x69970001, 0x34cb0101, 0x69950001, 0x1a650201, 0x69930001, 0x34c90101, 0x69910001, 0x06990401, 0x698f0001, 0x34c70101, 0x698d0001, 0x1a630201, 0x698b0001, 0x34c50101, 0x69890001, 0x0d310301, 0x69870001, 0x34c30101, 0x69850001, 0x1a610201, 0x69830001, 0x34c10101, 0x69810001, 0x00d31601, 0x697f0001, 0x34bf0101, 0x697d0001, 0x1a5f0201, 0x697b0001, 0x34bd0101, 0x69790001, 0x0d2f0301, 0x69770001, 0x34bb0101, 0x69750001, 0x1a5d0201, 0x69730001, 0x34b90101, 0x69710001, 0x06970401, 0x696f0001, 0x34b70101, 0x696d0001, 0x1a5b0201, 0x696b0001, 0x34b50101, 0x69690001, 0x0d2d0301, 0x69670001, 0x34b30101, 0x69650001, 0x1a590201, 0x69630001, 0x34b10101, 0x69610001, 0x034b0501, 0x695f0001, 0x34af0101, 0x695d0001, 0x1a570201, 0x695b0001, 0x34ad0101, 0x69590001, 0x0d2b0301, 0x69570001, 0x34ab0101, 0x69550001, 0x1a550201, 0x69530001, 0x34a90101, 0x69510001, 0x06950401, 0x694f0001, 0x34a70101, 0x694d0001, 0x1a530201, 0x694b0001, 0x34a50101, 0x69490001, 0x0d290301, 0x69470001, 0x34a30101, 0x69450001, 0x1a510201, 0x69430001, 0x34a10101, 0x69410001, 0x01a50601, 0x693f0001, 0x349f0101, 0x693d0001, 0x1a4f0201, 0x693b0001, 0x349d0101, 0x69390001, 0x0d270301, 0x69370001, 0x349b0101, 0x69350001, 0x1a4d0201, 0x69330001, 0x34990101, 0x69310001, 0x06930401, 0x692f0001, 0x34970101, 0x692d0001, 0x1a4b0201, 0x692b0001, 0x34950101, 0x69290001, 0x0d250301, 0x69270001, 0x34930101, 0x69250001, 0x1a490201, 0x69230001, 0x34910101, 0x69210001, 0x03490501, 0x691f0001, 0x348f0101, 0x691d0001, 0x1a470201, 0x691b0001, 0x348d0101, 0x69190001, 0x0d230301, 0x69170001, 0x348b0101, 0x69150001, 0x1a450201, 0x69130001, 0x34890101, 0x69110001, 0x06910401, 0x690f0001, 0x34870101, 0x690d0001, 0x1a430201, 0x690b0001, 0x34850101, 0x69090001, 0x0d210301, 0x69070001, 0x34830101, 0x69050001, 0x1a410201, 0x69030001, 0x34810101, 0x69010001, + 0x00692601, 0x68ff0001, 0x347f0101, 0x68fd0001, 0x1a3f0201, 0x68fb0001, 0x347d0101, 0x68f90001, 0x0d1f0301, 0x68f70001, 0x347b0101, 0x68f50001, 0x1a3d0201, 0x68f30001, 0x34790101, 0x68f10001, 0x068f0401, 0x68ef0001, 0x34770101, 0x68ed0001, 0x1a3b0201, 0x68eb0001, 0x34750101, 0x68e90001, 0x0d1d0301, 0x68e70001, 0x34730101, 0x68e50001, 0x1a390201, 0x68e30001, 0x34710101, 0x68e10001, 0x03470501, 0x68df0001, 0x346f0101, 0x68dd0001, 0x1a370201, 0x68db0001, 0x346d0101, 0x68d90001, 0x0d1b0301, 0x68d70001, 0x346b0101, 0x68d50001, 0x1a350201, 0x68d30001, 0x34690101, 0x68d10001, 0x068d0401, 0x68cf0001, 0x34670101, 0x68cd0001, 0x1a330201, 0x68cb0001, 0x34650101, 0x68c90001, 0x0d190301, 0x68c70001, 0x34630101, 0x68c50001, 0x1a310201, 0x68c30001, 0x34610101, 0x68c10001, 0x01a30601, 0x68bf0001, 0x345f0101, 0x68bd0001, 0x1a2f0201, 0x68bb0001, 0x345d0101, 0x68b90001, 0x0d170301, 0x68b70001, 0x345b0101, 0x68b50001, 0x1a2d0201, 0x68b30001, 0x34590101, 0x68b10001, 0x068b0401, 0x68af0001, 0x34570101, 0x68ad0001, 0x1a2b0201, 0x68ab0001, 0x34550101, 0x68a90001, 0x0d150301, 0x68a70001, 0x34530101, 0x68a50001, 0x1a290201, 0x68a30001, 0x34510101, 0x68a10001, 0x03450501, 0x689f0001, 0x344f0101, 0x689d0001, 0x1a270201, 0x689b0001, 0x344d0101, 0x68990001, 0x0d130301, 0x68970001, 0x344b0101, 0x68950001, 0x1a250201, 0x68930001, 0x34490101, 0x68910001, 0x06890401, 0x688f0001, 0x34470101, 0x688d0001, 0x1a230201, 0x688b0001, 0x34450101, 0x68890001, 0x0d110301, 0x68870001, 0x34430101, 0x68850001, 0x1a210201, 0x68830001, 0x34410101, 0x68810001, 0x00d11601, 0x687f0001, 0x343f0101, 0x687d0001, 0x1a1f0201, 0x687b0001, 0x343d0101, 0x68790001, 0x0d0f0301, 0x68770001, 0x343b0101, 0x68750001, 0x1a1d0201, 0x68730001, 0x34390101, 0x68710001, 0x06870401, 0x686f0001, 0x34370101, 0x686d0001, 0x1a1b0201, 0x686b0001, 0x34350101, 0x68690001, 0x0d0d0301, 0x68670001, 0x34330101, 0x68650001, 0x1a190201, 0x68630001, 0x34310101, 0x68610001, 0x03430501, 0x685f0001, 0x342f0101, 0x685d0001, 0x1a170201, 0x685b0001, 0x342d0101, 0x68590001, 0x0d0b0301, 0x68570001, 0x342b0101, 0x68550001, 0x1a150201, 0x68530001, 0x34290101, 0x68510001, 0x06850401, 0x684f0001, 0x34270101, 0x684d0001, 0x1a130201, 0x684b0001, 0x34250101, 0x68490001, 0x0d090301, 0x68470001, 0x34230101, 0x68450001, 0x1a110201, 0x68430001, 0x34210101, 0x68410001, 0x01a10601, 0x683f0001, 0x341f0101, 0x683d0001, 0x1a0f0201, 0x683b0001, 0x341d0101, 0x68390001, 0x0d070301, 0x68370001, 0x341b0101, 0x68350001, 0x1a0d0201, 0x68330001, 0x34190101, 0x68310001, 0x06830401, 0x682f0001, 0x34170101, 0x682d0001, 0x1a0b0201, 0x682b0001, 0x34150101, 0x68290001, 0x0d050301, 0x68270001, 0x34130101, 0x68250001, 0x1a090201, 0x68230001, 0x34110101, 0x68210001, 0x03410501, 0x681f0001, 0x340f0101, 0x681d0001, 0x1a070201, 0x681b0001, 0x340d0101, 0x68190001, 0x0d030301, 0x68170001, 0x340b0101, 0x68150001, 0x1a050201, 0x68130001, 0x34090101, 0x68110001, 0x06810401, 0x680f0001, 0x34070101, 0x680d0001, 0x1a030201, 0x680b0001, 0x34050101, 0x68090001, 0x0d010301, 0x68070001, 0x34030101, 0x68050001, 0x1a010201, 0x68030001, 0x34010101, 0x68010001, + 0x000d5601, 0x67ff0001, 0x33ff0101, 0x67fd0001, 0x19ff0201, 0x67fb0001, 0x33fd0101, 0x67f90001, 0x0cff0301, 0x67f70001, 0x33fb0101, 0x67f50001, 0x19fd0201, 0x67f30001, 0x33f90101, 0x67f10001, 0x067f0401, 0x67ef0001, 0x33f70101, 0x67ed0001, 0x19fb0201, 0x67eb0001, 0x33f50101, 0x67e90001, 0x0cfd0301, 0x67e70001, 0x33f30101, 0x67e50001, 0x19f90201, 0x67e30001, 0x33f10101, 0x67e10001, 0x033f0501, 0x67df0001, 0x33ef0101, 0x67dd0001, 0x19f70201, 0x67db0001, 0x33ed0101, 0x67d90001, 0x0cfb0301, 0x67d70001, 0x33eb0101, 0x67d50001, 0x19f50201, 0x67d30001, 0x33e90101, 0x67d10001, 0x067d0401, 0x67cf0001, 0x33e70101, 0x67cd0001, 0x19f30201, 0x67cb0001, 0x33e50101, 0x67c90001, 0x0cf90301, 0x67c70001, 0x33e30101, 0x67c50001, 0x19f10201, 0x67c30001, 0x33e10101, 0x67c10001, 0x019f0601, 0x67bf0001, 0x33df0101, 0x67bd0001, 0x19ef0201, 0x67bb0001, 0x33dd0101, 0x67b90001, 0x0cf70301, 0x67b70001, 0x33db0101, 0x67b50001, 0x19ed0201, 0x67b30001, 0x33d90101, 0x67b10001, 0x067b0401, 0x67af0001, 0x33d70101, 0x67ad0001, 0x19eb0201, 0x67ab0001, 0x33d50101, 0x67a90001, 0x0cf50301, 0x67a70001, 0x33d30101, 0x67a50001, 0x19e90201, 0x67a30001, 0x33d10101, 0x67a10001, 0x033d0501, 0x679f0001, 0x33cf0101, 0x679d0001, 0x19e70201, 0x679b0001, 0x33cd0101, 0x67990001, 0x0cf30301, 0x67970001, 0x33cb0101, 0x67950001, 0x19e50201, 0x67930001, 0x33c90101, 0x67910001, 0x06790401, 0x678f0001, 0x33c70101, 0x678d0001, 0x19e30201, 0x678b0001, 0x33c50101, 0x67890001, 0x0cf10301, 0x67870001, 0x33c30101, 0x67850001, 0x19e10201, 0x67830001, 0x33c10101, 0x67810001, 0x00cf1601, 0x677f0001, 0x33bf0101, 0x677d0001, 0x19df0201, 0x677b0001, 0x33bd0101, 0x67790001, 0x0cef0301, 0x67770001, 0x33bb0101, 0x67750001, 0x19dd0201, 0x67730001, 0x33b90101, 0x67710001, 0x06770401, 0x676f0001, 0x33b70101, 0x676d0001, 0x19db0201, 0x676b0001, 0x33b50101, 0x67690001, 0x0ced0301, 0x67670001, 0x33b30101, 0x67650001, 0x19d90201, 0x67630001, 0x33b10101, 0x67610001, 0x033b0501, 0x675f0001, 0x33af0101, 0x675d0001, 0x19d70201, 0x675b0001, 0x33ad0101, 0x67590001, 0x0ceb0301, 0x67570001, 0x33ab0101, 0x67550001, 0x19d50201, 0x67530001, 0x33a90101, 0x67510001, 0x06750401, 0x674f0001, 0x33a70101, 0x674d0001, 0x19d30201, 0x674b0001, 0x33a50101, 0x67490001, 0x0ce90301, 0x67470001, 0x33a30101, 0x67450001, 0x19d10201, 0x67430001, 0x33a10101, 0x67410001, 0x019d0601, 0x673f0001, 0x339f0101, 0x673d0001, 0x19cf0201, 0x673b0001, 0x339d0101, 0x67390001, 0x0ce70301, 0x67370001, 0x339b0101, 0x67350001, 0x19cd0201, 0x67330001, 0x33990101, 0x67310001, 0x06730401, 0x672f0001, 0x33970101, 0x672d0001, 0x19cb0201, 0x672b0001, 0x33950101, 0x67290001, 0x0ce50301, 0x67270001, 0x33930101, 0x67250001, 0x19c90201, 0x67230001, 0x33910101, 0x67210001, 0x03390501, 0x671f0001, 0x338f0101, 0x671d0001, 0x19c70201, 0x671b0001, 0x338d0101, 0x67190001, 0x0ce30301, 0x67170001, 0x338b0101, 0x67150001, 0x19c50201, 0x67130001, 0x33890101, 0x67110001, 0x06710401, 0x670f0001, 0x33870101, 0x670d0001, 0x19c30201, 0x670b0001, 0x33850101, 0x67090001, 0x0ce10301, 0x67070001, 0x33830101, 0x67050001, 0x19c10201, 0x67030001, 0x33810101, 0x67010001, + 0x00672601, 0x66ff0001, 0x337f0101, 0x66fd0001, 0x19bf0201, 0x66fb0001, 0x337d0101, 0x66f90001, 0x0cdf0301, 0x66f70001, 0x337b0101, 0x66f50001, 0x19bd0201, 0x66f30001, 0x33790101, 0x66f10001, 0x066f0401, 0x66ef0001, 0x33770101, 0x66ed0001, 0x19bb0201, 0x66eb0001, 0x33750101, 0x66e90001, 0x0cdd0301, 0x66e70001, 0x33730101, 0x66e50001, 0x19b90201, 0x66e30001, 0x33710101, 0x66e10001, 0x03370501, 0x66df0001, 0x336f0101, 0x66dd0001, 0x19b70201, 0x66db0001, 0x336d0101, 0x66d90001, 0x0cdb0301, 0x66d70001, 0x336b0101, 0x66d50001, 0x19b50201, 0x66d30001, 0x33690101, 0x66d10001, 0x066d0401, 0x66cf0001, 0x33670101, 0x66cd0001, 0x19b30201, 0x66cb0001, 0x33650101, 0x66c90001, 0x0cd90301, 0x66c70001, 0x33630101, 0x66c50001, 0x19b10201, 0x66c30001, 0x33610101, 0x66c10001, 0x019b0601, 0x66bf0001, 0x335f0101, 0x66bd0001, 0x19af0201, 0x66bb0001, 0x335d0101, 0x66b90001, 0x0cd70301, 0x66b70001, 0x335b0101, 0x66b50001, 0x19ad0201, 0x66b30001, 0x33590101, 0x66b10001, 0x066b0401, 0x66af0001, 0x33570101, 0x66ad0001, 0x19ab0201, 0x66ab0001, 0x33550101, 0x66a90001, 0x0cd50301, 0x66a70001, 0x33530101, 0x66a50001, 0x19a90201, 0x66a30001, 0x33510101, 0x66a10001, 0x03350501, 0x669f0001, 0x334f0101, 0x669d0001, 0x19a70201, 0x669b0001, 0x334d0101, 0x66990001, 0x0cd30301, 0x66970001, 0x334b0101, 0x66950001, 0x19a50201, 0x66930001, 0x33490101, 0x66910001, 0x06690401, 0x668f0001, 0x33470101, 0x668d0001, 0x19a30201, 0x668b0001, 0x33450101, 0x66890001, 0x0cd10301, 0x66870001, 0x33430101, 0x66850001, 0x19a10201, 0x66830001, 0x33410101, 0x66810001, 0x00cd1601, 0x667f0001, 0x333f0101, 0x667d0001, 0x199f0201, 0x667b0001, 0x333d0101, 0x66790001, 0x0ccf0301, 0x66770001, 0x333b0101, 0x66750001, 0x199d0201, 0x66730001, 0x33390101, 0x66710001, 0x06670401, 0x666f0001, 0x33370101, 0x666d0001, 0x199b0201, 0x666b0001, 0x33350101, 0x66690001, 0x0ccd0301, 0x66670001, 0x33330101, 0x66650001, 0x19990201, 0x66630001, 0x33310101, 0x66610001, 0x03330501, 0x665f0001, 0x332f0101, 0x665d0001, 0x19970201, 0x665b0001, 0x332d0101, 0x66590001, 0x0ccb0301, 0x66570001, 0x332b0101, 0x66550001, 0x19950201, 0x66530001, 0x33290101, 0x66510001, 0x06650401, 0x664f0001, 0x33270101, 0x664d0001, 0x19930201, 0x664b0001, 0x33250101, 0x66490001, 0x0cc90301, 0x66470001, 0x33230101, 0x66450001, 0x19910201, 0x66430001, 0x33210101, 0x66410001, 0x01990601, 0x663f0001, 0x331f0101, 0x663d0001, 0x198f0201, 0x663b0001, 0x331d0101, 0x66390001, 0x0cc70301, 0x66370001, 0x331b0101, 0x66350001, 0x198d0201, 0x66330001, 0x33190101, 0x66310001, 0x06630401, 0x662f0001, 0x33170101, 0x662d0001, 0x198b0201, 0x662b0001, 0x33150101, 0x66290001, 0x0cc50301, 0x66270001, 0x33130101, 0x66250001, 0x19890201, 0x66230001, 0x33110101, 0x66210001, 0x03310501, 0x661f0001, 0x330f0101, 0x661d0001, 0x19870201, 0x661b0001, 0x330d0101, 0x66190001, 0x0cc30301, 0x66170001, 0x330b0101, 0x66150001, 0x19850201, 0x66130001, 0x33090101, 0x66110001, 0x06610401, 0x660f0001, 0x33070101, 0x660d0001, 0x19830201, 0x660b0001, 0x33050101, 0x66090001, 0x0cc10301, 0x66070001, 0x33030101, 0x66050001, 0x19810201, 0x66030001, 0x33010101, 0x66010001, + 0x00333601, 0x65ff0001, 0x32ff0101, 0x65fd0001, 0x197f0201, 0x65fb0001, 0x32fd0101, 0x65f90001, 0x0cbf0301, 0x65f70001, 0x32fb0101, 0x65f50001, 0x197d0201, 0x65f30001, 0x32f90101, 0x65f10001, 0x065f0401, 0x65ef0001, 0x32f70101, 0x65ed0001, 0x197b0201, 0x65eb0001, 0x32f50101, 0x65e90001, 0x0cbd0301, 0x65e70001, 0x32f30101, 0x65e50001, 0x19790201, 0x65e30001, 0x32f10101, 0x65e10001, 0x032f0501, 0x65df0001, 0x32ef0101, 0x65dd0001, 0x19770201, 0x65db0001, 0x32ed0101, 0x65d90001, 0x0cbb0301, 0x65d70001, 0x32eb0101, 0x65d50001, 0x19750201, 0x65d30001, 0x32e90101, 0x65d10001, 0x065d0401, 0x65cf0001, 0x32e70101, 0x65cd0001, 0x19730201, 0x65cb0001, 0x32e50101, 0x65c90001, 0x0cb90301, 0x65c70001, 0x32e30101, 0x65c50001, 0x19710201, 0x65c30001, 0x32e10101, 0x65c10001, 0x01970601, 0x65bf0001, 0x32df0101, 0x65bd0001, 0x196f0201, 0x65bb0001, 0x32dd0101, 0x65b90001, 0x0cb70301, 0x65b70001, 0x32db0101, 0x65b50001, 0x196d0201, 0x65b30001, 0x32d90101, 0x65b10001, 0x065b0401, 0x65af0001, 0x32d70101, 0x65ad0001, 0x196b0201, 0x65ab0001, 0x32d50101, 0x65a90001, 0x0cb50301, 0x65a70001, 0x32d30101, 0x65a50001, 0x19690201, 0x65a30001, 0x32d10101, 0x65a10001, 0x032d0501, 0x659f0001, 0x32cf0101, 0x659d0001, 0x19670201, 0x659b0001, 0x32cd0101, 0x65990001, 0x0cb30301, 0x65970001, 0x32cb0101, 0x65950001, 0x19650201, 0x65930001, 0x32c90101, 0x65910001, 0x06590401, 0x658f0001, 0x32c70101, 0x658d0001, 0x19630201, 0x658b0001, 0x32c50101, 0x65890001, 0x0cb10301, 0x65870001, 0x32c30101, 0x65850001, 0x19610201, 0x65830001, 0x32c10101, 0x65810001, 0x00cb1601, 0x657f0001, 0x32bf0101, 0x657d0001, 0x195f0201, 0x657b0001, 0x32bd0101, 0x65790001, 0x0caf0301, 0x65770001, 0x32bb0101, 0x65750001, 0x195d0201, 0x65730001, 0x32b90101, 0x65710001, 0x06570401, 0x656f0001, 0x32b70101, 0x656d0001, 0x195b0201, 0x656b0001, 0x32b50101, 0x65690001, 0x0cad0301, 0x65670001, 0x32b30101, 0x65650001, 0x19590201, 0x65630001, 0x32b10101, 0x65610001, 0x032b0501, 0x655f0001, 0x32af0101, 0x655d0001, 0x19570201, 0x655b0001, 0x32ad0101, 0x65590001, 0x0cab0301, 0x65570001, 0x32ab0101, 0x65550001, 0x19550201, 0x65530001, 0x32a90101, 0x65510001, 0x06550401, 0x654f0001, 0x32a70101, 0x654d0001, 0x19530201, 0x654b0001, 0x32a50101, 0x65490001, 0x0ca90301, 0x65470001, 0x32a30101, 0x65450001, 0x19510201, 0x65430001, 0x32a10101, 0x65410001, 0x01950601, 0x653f0001, 0x329f0101, 0x653d0001, 0x194f0201, 0x653b0001, 0x329d0101, 0x65390001, 0x0ca70301, 0x65370001, 0x329b0101, 0x65350001, 0x194d0201, 0x65330001, 0x32990101, 0x65310001, 0x06530401, 0x652f0001, 0x32970101, 0x652d0001, 0x194b0201, 0x652b0001, 0x32950101, 0x65290001, 0x0ca50301, 0x65270001, 0x32930101, 0x65250001, 0x19490201, 0x65230001, 0x32910101, 0x65210001, 0x03290501, 0x651f0001, 0x328f0101, 0x651d0001, 0x19470201, 0x651b0001, 0x328d0101, 0x65190001, 0x0ca30301, 0x65170001, 0x328b0101, 0x65150001, 0x19450201, 0x65130001, 0x32890101, 0x65110001, 0x06510401, 0x650f0001, 0x32870101, 0x650d0001, 0x19430201, 0x650b0001, 0x32850101, 0x65090001, 0x0ca10301, 0x65070001, 0x32830101, 0x65050001, 0x19410201, 0x65030001, 0x32810101, 0x65010001, + 0x00652601, 0x64ff0001, 0x327f0101, 0x64fd0001, 0x193f0201, 0x64fb0001, 0x327d0101, 0x64f90001, 0x0c9f0301, 0x64f70001, 0x327b0101, 0x64f50001, 0x193d0201, 0x64f30001, 0x32790101, 0x64f10001, 0x064f0401, 0x64ef0001, 0x32770101, 0x64ed0001, 0x193b0201, 0x64eb0001, 0x32750101, 0x64e90001, 0x0c9d0301, 0x64e70001, 0x32730101, 0x64e50001, 0x19390201, 0x64e30001, 0x32710101, 0x64e10001, 0x03270501, 0x64df0001, 0x326f0101, 0x64dd0001, 0x19370201, 0x64db0001, 0x326d0101, 0x64d90001, 0x0c9b0301, 0x64d70001, 0x326b0101, 0x64d50001, 0x19350201, 0x64d30001, 0x32690101, 0x64d10001, 0x064d0401, 0x64cf0001, 0x32670101, 0x64cd0001, 0x19330201, 0x64cb0001, 0x32650101, 0x64c90001, 0x0c990301, 0x64c70001, 0x32630101, 0x64c50001, 0x19310201, 0x64c30001, 0x32610101, 0x64c10001, 0x01930601, 0x64bf0001, 0x325f0101, 0x64bd0001, 0x192f0201, 0x64bb0001, 0x325d0101, 0x64b90001, 0x0c970301, 0x64b70001, 0x325b0101, 0x64b50001, 0x192d0201, 0x64b30001, 0x32590101, 0x64b10001, 0x064b0401, 0x64af0001, 0x32570101, 0x64ad0001, 0x192b0201, 0x64ab0001, 0x32550101, 0x64a90001, 0x0c950301, 0x64a70001, 0x32530101, 0x64a50001, 0x19290201, 0x64a30001, 0x32510101, 0x64a10001, 0x03250501, 0x649f0001, 0x324f0101, 0x649d0001, 0x19270201, 0x649b0001, 0x324d0101, 0x64990001, 0x0c930301, 0x64970001, 0x324b0101, 0x64950001, 0x19250201, 0x64930001, 0x32490101, 0x64910001, 0x06490401, 0x648f0001, 0x32470101, 0x648d0001, 0x19230201, 0x648b0001, 0x32450101, 0x64890001, 0x0c910301, 0x64870001, 0x32430101, 0x64850001, 0x19210201, 0x64830001, 0x32410101, 0x64810001, 0x00c91601, 0x647f0001, 0x323f0101, 0x647d0001, 0x191f0201, 0x647b0001, 0x323d0101, 0x64790001, 0x0c8f0301, 0x64770001, 0x323b0101, 0x64750001, 0x191d0201, 0x64730001, 0x32390101, 0x64710001, 0x06470401, 0x646f0001, 0x32370101, 0x646d0001, 0x191b0201, 0x646b0001, 0x32350101, 0x64690001, 0x0c8d0301, 0x64670001, 0x32330101, 0x64650001, 0x19190201, 0x64630001, 0x32310101, 0x64610001, 0x03230501, 0x645f0001, 0x322f0101, 0x645d0001, 0x19170201, 0x645b0001, 0x322d0101, 0x64590001, 0x0c8b0301, 0x64570001, 0x322b0101, 0x64550001, 0x19150201, 0x64530001, 0x32290101, 0x64510001, 0x06450401, 0x644f0001, 0x32270101, 0x644d0001, 0x19130201, 0x644b0001, 0x32250101, 0x64490001, 0x0c890301, 0x64470001, 0x32230101, 0x64450001, 0x19110201, 0x64430001, 0x32210101, 0x64410001, 0x01910601, 0x643f0001, 0x321f0101, 0x643d0001, 0x190f0201, 0x643b0001, 0x321d0101, 0x64390001, 0x0c870301, 0x64370001, 0x321b0101, 0x64350001, 0x190d0201, 0x64330001, 0x32190101, 0x64310001, 0x06430401, 0x642f0001, 0x32170101, 0x642d0001, 0x190b0201, 0x642b0001, 0x32150101, 0x64290001, 0x0c850301, 0x64270001, 0x32130101, 0x64250001, 0x19090201, 0x64230001, 0x32110101, 0x64210001, 0x03210501, 0x641f0001, 0x320f0101, 0x641d0001, 0x19070201, 0x641b0001, 0x320d0101, 0x64190001, 0x0c830301, 0x64170001, 0x320b0101, 0x64150001, 0x19050201, 0x64130001, 0x32090101, 0x64110001, 0x06410401, 0x640f0001, 0x32070101, 0x640d0001, 0x19030201, 0x640b0001, 0x32050101, 0x64090001, 0x0c810301, 0x64070001, 0x32030101, 0x64050001, 0x19010201, 0x64030001, 0x32010101, 0x64010001, + 0x00194601, 0x63ff0001, 0x31ff0101, 0x63fd0001, 0x18ff0201, 0x63fb0001, 0x31fd0101, 0x63f90001, 0x0c7f0301, 0x63f70001, 0x31fb0101, 0x63f50001, 0x18fd0201, 0x63f30001, 0x31f90101, 0x63f10001, 0x063f0401, 0x63ef0001, 0x31f70101, 0x63ed0001, 0x18fb0201, 0x63eb0001, 0x31f50101, 0x63e90001, 0x0c7d0301, 0x63e70001, 0x31f30101, 0x63e50001, 0x18f90201, 0x63e30001, 0x31f10101, 0x63e10001, 0x031f0501, 0x63df0001, 0x31ef0101, 0x63dd0001, 0x18f70201, 0x63db0001, 0x31ed0101, 0x63d90001, 0x0c7b0301, 0x63d70001, 0x31eb0101, 0x63d50001, 0x18f50201, 0x63d30001, 0x31e90101, 0x63d10001, 0x063d0401, 0x63cf0001, 0x31e70101, 0x63cd0001, 0x18f30201, 0x63cb0001, 0x31e50101, 0x63c90001, 0x0c790301, 0x63c70001, 0x31e30101, 0x63c50001, 0x18f10201, 0x63c30001, 0x31e10101, 0x63c10001, 0x018f0601, 0x63bf0001, 0x31df0101, 0x63bd0001, 0x18ef0201, 0x63bb0001, 0x31dd0101, 0x63b90001, 0x0c770301, 0x63b70001, 0x31db0101, 0x63b50001, 0x18ed0201, 0x63b30001, 0x31d90101, 0x63b10001, 0x063b0401, 0x63af0001, 0x31d70101, 0x63ad0001, 0x18eb0201, 0x63ab0001, 0x31d50101, 0x63a90001, 0x0c750301, 0x63a70001, 0x31d30101, 0x63a50001, 0x18e90201, 0x63a30001, 0x31d10101, 0x63a10001, 0x031d0501, 0x639f0001, 0x31cf0101, 0x639d0001, 0x18e70201, 0x639b0001, 0x31cd0101, 0x63990001, 0x0c730301, 0x63970001, 0x31cb0101, 0x63950001, 0x18e50201, 0x63930001, 0x31c90101, 0x63910001, 0x06390401, 0x638f0001, 0x31c70101, 0x638d0001, 0x18e30201, 0x638b0001, 0x31c50101, 0x63890001, 0x0c710301, 0x63870001, 0x31c30101, 0x63850001, 0x18e10201, 0x63830001, 0x31c10101, 0x63810001, 0x00c71601, 0x637f0001, 0x31bf0101, 0x637d0001, 0x18df0201, 0x637b0001, 0x31bd0101, 0x63790001, 0x0c6f0301, 0x63770001, 0x31bb0101, 0x63750001, 0x18dd0201, 0x63730001, 0x31b90101, 0x63710001, 0x06370401, 0x636f0001, 0x31b70101, 0x636d0001, 0x18db0201, 0x636b0001, 0x31b50101, 0x63690001, 0x0c6d0301, 0x63670001, 0x31b30101, 0x63650001, 0x18d90201, 0x63630001, 0x31b10101, 0x63610001, 0x031b0501, 0x635f0001, 0x31af0101, 0x635d0001, 0x18d70201, 0x635b0001, 0x31ad0101, 0x63590001, 0x0c6b0301, 0x63570001, 0x31ab0101, 0x63550001, 0x18d50201, 0x63530001, 0x31a90101, 0x63510001, 0x06350401, 0x634f0001, 0x31a70101, 0x634d0001, 0x18d30201, 0x634b0001, 0x31a50101, 0x63490001, 0x0c690301, 0x63470001, 0x31a30101, 0x63450001, 0x18d10201, 0x63430001, 0x31a10101, 0x63410001, 0x018d0601, 0x633f0001, 0x319f0101, 0x633d0001, 0x18cf0201, 0x633b0001, 0x319d0101, 0x63390001, 0x0c670301, 0x63370001, 0x319b0101, 0x63350001, 0x18cd0201, 0x63330001, 0x31990101, 0x63310001, 0x06330401, 0x632f0001, 0x31970101, 0x632d0001, 0x18cb0201, 0x632b0001, 0x31950101, 0x63290001, 0x0c650301, 0x63270001, 0x31930101, 0x63250001, 0x18c90201, 0x63230001, 0x31910101, 0x63210001, 0x03190501, 0x631f0001, 0x318f0101, 0x631d0001, 0x18c70201, 0x631b0001, 0x318d0101, 0x63190001, 0x0c630301, 0x63170001, 0x318b0101, 0x63150001, 0x18c50201, 0x63130001, 0x31890101, 0x63110001, 0x06310401, 0x630f0001, 0x31870101, 0x630d0001, 0x18c30201, 0x630b0001, 0x31850101, 0x63090001, 0x0c610301, 0x63070001, 0x31830101, 0x63050001, 0x18c10201, 0x63030001, 0x31810101, 0x63010001, + 0x00632601, 0x62ff0001, 0x317f0101, 0x62fd0001, 0x18bf0201, 0x62fb0001, 0x317d0101, 0x62f90001, 0x0c5f0301, 0x62f70001, 0x317b0101, 0x62f50001, 0x18bd0201, 0x62f30001, 0x31790101, 0x62f10001, 0x062f0401, 0x62ef0001, 0x31770101, 0x62ed0001, 0x18bb0201, 0x62eb0001, 0x31750101, 0x62e90001, 0x0c5d0301, 0x62e70001, 0x31730101, 0x62e50001, 0x18b90201, 0x62e30001, 0x31710101, 0x62e10001, 0x03170501, 0x62df0001, 0x316f0101, 0x62dd0001, 0x18b70201, 0x62db0001, 0x316d0101, 0x62d90001, 0x0c5b0301, 0x62d70001, 0x316b0101, 0x62d50001, 0x18b50201, 0x62d30001, 0x31690101, 0x62d10001, 0x062d0401, 0x62cf0001, 0x31670101, 0x62cd0001, 0x18b30201, 0x62cb0001, 0x31650101, 0x62c90001, 0x0c590301, 0x62c70001, 0x31630101, 0x62c50001, 0x18b10201, 0x62c30001, 0x31610101, 0x62c10001, 0x018b0601, 0x62bf0001, 0x315f0101, 0x62bd0001, 0x18af0201, 0x62bb0001, 0x315d0101, 0x62b90001, 0x0c570301, 0x62b70001, 0x315b0101, 0x62b50001, 0x18ad0201, 0x62b30001, 0x31590101, 0x62b10001, 0x062b0401, 0x62af0001, 0x31570101, 0x62ad0001, 0x18ab0201, 0x62ab0001, 0x31550101, 0x62a90001, 0x0c550301, 0x62a70001, 0x31530101, 0x62a50001, 0x18a90201, 0x62a30001, 0x31510101, 0x62a10001, 0x03150501, 0x629f0001, 0x314f0101, 0x629d0001, 0x18a70201, 0x629b0001, 0x314d0101, 0x62990001, 0x0c530301, 0x62970001, 0x314b0101, 0x62950001, 0x18a50201, 0x62930001, 0x31490101, 0x62910001, 0x06290401, 0x628f0001, 0x31470101, 0x628d0001, 0x18a30201, 0x628b0001, 0x31450101, 0x62890001, 0x0c510301, 0x62870001, 0x31430101, 0x62850001, 0x18a10201, 0x62830001, 0x31410101, 0x62810001, 0x00c51601, 0x627f0001, 0x313f0101, 0x627d0001, 0x189f0201, 0x627b0001, 0x313d0101, 0x62790001, 0x0c4f0301, 0x62770001, 0x313b0101, 0x62750001, 0x189d0201, 0x62730001, 0x31390101, 0x62710001, 0x06270401, 0x626f0001, 0x31370101, 0x626d0001, 0x189b0201, 0x626b0001, 0x31350101, 0x62690001, 0x0c4d0301, 0x62670001, 0x31330101, 0x62650001, 0x18990201, 0x62630001, 0x31310101, 0x62610001, 0x03130501, 0x625f0001, 0x312f0101, 0x625d0001, 0x18970201, 0x625b0001, 0x312d0101, 0x62590001, 0x0c4b0301, 0x62570001, 0x312b0101, 0x62550001, 0x18950201, 0x62530001, 0x31290101, 0x62510001, 0x06250401, 0x624f0001, 0x31270101, 0x624d0001, 0x18930201, 0x624b0001, 0x31250101, 0x62490001, 0x0c490301, 0x62470001, 0x31230101, 0x62450001, 0x18910201, 0x62430001, 0x31210101, 0x62410001, 0x01890601, 0x623f0001, 0x311f0101, 0x623d0001, 0x188f0201, 0x623b0001, 0x311d0101, 0x62390001, 0x0c470301, 0x62370001, 0x311b0101, 0x62350001, 0x188d0201, 0x62330001, 0x31190101, 0x62310001, 0x06230401, 0x622f0001, 0x31170101, 0x622d0001, 0x188b0201, 0x622b0001, 0x31150101, 0x62290001, 0x0c450301, 0x62270001, 0x31130101, 0x62250001, 0x18890201, 0x62230001, 0x31110101, 0x62210001, 0x03110501, 0x621f0001, 0x310f0101, 0x621d0001, 0x18870201, 0x621b0001, 0x310d0101, 0x62190001, 0x0c430301, 0x62170001, 0x310b0101, 0x62150001, 0x18850201, 0x62130001, 0x31090101, 0x62110001, 0x06210401, 0x620f0001, 0x31070101, 0x620d0001, 0x18830201, 0x620b0001, 0x31050101, 0x62090001, 0x0c410301, 0x62070001, 0x31030101, 0x62050001, 0x18810201, 0x62030001, 0x31010101, 0x62010001, + 0x00313601, 0x61ff0001, 0x30ff0101, 0x61fd0001, 0x187f0201, 0x61fb0001, 0x30fd0101, 0x61f90001, 0x0c3f0301, 0x61f70001, 0x30fb0101, 0x61f50001, 0x187d0201, 0x61f30001, 0x30f90101, 0x61f10001, 0x061f0401, 0x61ef0001, 0x30f70101, 0x61ed0001, 0x187b0201, 0x61eb0001, 0x30f50101, 0x61e90001, 0x0c3d0301, 0x61e70001, 0x30f30101, 0x61e50001, 0x18790201, 0x61e30001, 0x30f10101, 0x61e10001, 0x030f0501, 0x61df0001, 0x30ef0101, 0x61dd0001, 0x18770201, 0x61db0001, 0x30ed0101, 0x61d90001, 0x0c3b0301, 0x61d70001, 0x30eb0101, 0x61d50001, 0x18750201, 0x61d30001, 0x30e90101, 0x61d10001, 0x061d0401, 0x61cf0001, 0x30e70101, 0x61cd0001, 0x18730201, 0x61cb0001, 0x30e50101, 0x61c90001, 0x0c390301, 0x61c70001, 0x30e30101, 0x61c50001, 0x18710201, 0x61c30001, 0x30e10101, 0x61c10001, 0x01870601, 0x61bf0001, 0x30df0101, 0x61bd0001, 0x186f0201, 0x61bb0001, 0x30dd0101, 0x61b90001, 0x0c370301, 0x61b70001, 0x30db0101, 0x61b50001, 0x186d0201, 0x61b30001, 0x30d90101, 0x61b10001, 0x061b0401, 0x61af0001, 0x30d70101, 0x61ad0001, 0x186b0201, 0x61ab0001, 0x30d50101, 0x61a90001, 0x0c350301, 0x61a70001, 0x30d30101, 0x61a50001, 0x18690201, 0x61a30001, 0x30d10101, 0x61a10001, 0x030d0501, 0x619f0001, 0x30cf0101, 0x619d0001, 0x18670201, 0x619b0001, 0x30cd0101, 0x61990001, 0x0c330301, 0x61970001, 0x30cb0101, 0x61950001, 0x18650201, 0x61930001, 0x30c90101, 0x61910001, 0x06190401, 0x618f0001, 0x30c70101, 0x618d0001, 0x18630201, 0x618b0001, 0x30c50101, 0x61890001, 0x0c310301, 0x61870001, 0x30c30101, 0x61850001, 0x18610201, 0x61830001, 0x30c10101, 0x61810001, 0x00c31601, 0x617f0001, 0x30bf0101, 0x617d0001, 0x185f0201, 0x617b0001, 0x30bd0101, 0x61790001, 0x0c2f0301, 0x61770001, 0x30bb0101, 0x61750001, 0x185d0201, 0x61730001, 0x30b90101, 0x61710001, 0x06170401, 0x616f0001, 0x30b70101, 0x616d0001, 0x185b0201, 0x616b0001, 0x30b50101, 0x61690001, 0x0c2d0301, 0x61670001, 0x30b30101, 0x61650001, 0x18590201, 0x61630001, 0x30b10101, 0x61610001, 0x030b0501, 0x615f0001, 0x30af0101, 0x615d0001, 0x18570201, 0x615b0001, 0x30ad0101, 0x61590001, 0x0c2b0301, 0x61570001, 0x30ab0101, 0x61550001, 0x18550201, 0x61530001, 0x30a90101, 0x61510001, 0x06150401, 0x614f0001, 0x30a70101, 0x614d0001, 0x18530201, 0x614b0001, 0x30a50101, 0x61490001, 0x0c290301, 0x61470001, 0x30a30101, 0x61450001, 0x18510201, 0x61430001, 0x30a10101, 0x61410001, 0x01850601, 0x613f0001, 0x309f0101, 0x613d0001, 0x184f0201, 0x613b0001, 0x309d0101, 0x61390001, 0x0c270301, 0x61370001, 0x309b0101, 0x61350001, 0x184d0201, 0x61330001, 0x30990101, 0x61310001, 0x06130401, 0x612f0001, 0x30970101, 0x612d0001, 0x184b0201, 0x612b0001, 0x30950101, 0x61290001, 0x0c250301, 0x61270001, 0x30930101, 0x61250001, 0x18490201, 0x61230001, 0x30910101, 0x61210001, 0x03090501, 0x611f0001, 0x308f0101, 0x611d0001, 0x18470201, 0x611b0001, 0x308d0101, 0x61190001, 0x0c230301, 0x61170001, 0x308b0101, 0x61150001, 0x18450201, 0x61130001, 0x30890101, 0x61110001, 0x06110401, 0x610f0001, 0x30870101, 0x610d0001, 0x18430201, 0x610b0001, 0x30850101, 0x61090001, 0x0c210301, 0x61070001, 0x30830101, 0x61050001, 0x18410201, 0x61030001, 0x30810101, 0x61010001, + 0x00612601, 0x60ff0001, 0x307f0101, 0x60fd0001, 0x183f0201, 0x60fb0001, 0x307d0101, 0x60f90001, 0x0c1f0301, 0x60f70001, 0x307b0101, 0x60f50001, 0x183d0201, 0x60f30001, 0x30790101, 0x60f10001, 0x060f0401, 0x60ef0001, 0x30770101, 0x60ed0001, 0x183b0201, 0x60eb0001, 0x30750101, 0x60e90001, 0x0c1d0301, 0x60e70001, 0x30730101, 0x60e50001, 0x18390201, 0x60e30001, 0x30710101, 0x60e10001, 0x03070501, 0x60df0001, 0x306f0101, 0x60dd0001, 0x18370201, 0x60db0001, 0x306d0101, 0x60d90001, 0x0c1b0301, 0x60d70001, 0x306b0101, 0x60d50001, 0x18350201, 0x60d30001, 0x30690101, 0x60d10001, 0x060d0401, 0x60cf0001, 0x30670101, 0x60cd0001, 0x18330201, 0x60cb0001, 0x30650101, 0x60c90001, 0x0c190301, 0x60c70001, 0x30630101, 0x60c50001, 0x18310201, 0x60c30001, 0x30610101, 0x60c10001, 0x01830601, 0x60bf0001, 0x305f0101, 0x60bd0001, 0x182f0201, 0x60bb0001, 0x305d0101, 0x60b90001, 0x0c170301, 0x60b70001, 0x305b0101, 0x60b50001, 0x182d0201, 0x60b30001, 0x30590101, 0x60b10001, 0x060b0401, 0x60af0001, 0x30570101, 0x60ad0001, 0x182b0201, 0x60ab0001, 0x30550101, 0x60a90001, 0x0c150301, 0x60a70001, 0x30530101, 0x60a50001, 0x18290201, 0x60a30001, 0x30510101, 0x60a10001, 0x03050501, 0x609f0001, 0x304f0101, 0x609d0001, 0x18270201, 0x609b0001, 0x304d0101, 0x60990001, 0x0c130301, 0x60970001, 0x304b0101, 0x60950001, 0x18250201, 0x60930001, 0x30490101, 0x60910001, 0x06090401, 0x608f0001, 0x30470101, 0x608d0001, 0x18230201, 0x608b0001, 0x30450101, 0x60890001, 0x0c110301, 0x60870001, 0x30430101, 0x60850001, 0x18210201, 0x60830001, 0x30410101, 0x60810001, 0x00c11601, 0x607f0001, 0x303f0101, 0x607d0001, 0x181f0201, 0x607b0001, 0x303d0101, 0x60790001, 0x0c0f0301, 0x60770001, 0x303b0101, 0x60750001, 0x181d0201, 0x60730001, 0x30390101, 0x60710001, 0x06070401, 0x606f0001, 0x30370101, 0x606d0001, 0x181b0201, 0x606b0001, 0x30350101, 0x60690001, 0x0c0d0301, 0x60670001, 0x30330101, 0x60650001, 0x18190201, 0x60630001, 0x30310101, 0x60610001, 0x03030501, 0x605f0001, 0x302f0101, 0x605d0001, 0x18170201, 0x605b0001, 0x302d0101, 0x60590001, 0x0c0b0301, 0x60570001, 0x302b0101, 0x60550001, 0x18150201, 0x60530001, 0x30290101, 0x60510001, 0x06050401, 0x604f0001, 0x30270101, 0x604d0001, 0x18130201, 0x604b0001, 0x30250101, 0x60490001, 0x0c090301, 0x60470001, 0x30230101, 0x60450001, 0x18110201, 0x60430001, 0x30210101, 0x60410001, 0x01810601, 0x603f0001, 0x301f0101, 0x603d0001, 0x180f0201, 0x603b0001, 0x301d0101, 0x60390001, 0x0c070301, 0x60370001, 0x301b0101, 0x60350001, 0x180d0201, 0x60330001, 0x30190101, 0x60310001, 0x06030401, 0x602f0001, 0x30170101, 0x602d0001, 0x180b0201, 0x602b0001, 0x30150101, 0x60290001, 0x0c050301, 0x60270001, 0x30130101, 0x60250001, 0x18090201, 0x60230001, 0x30110101, 0x60210001, 0x03010501, 0x601f0001, 0x300f0101, 0x601d0001, 0x18070201, 0x601b0001, 0x300d0101, 0x60190001, 0x0c030301, 0x60170001, 0x300b0101, 0x60150001, 0x18050201, 0x60130001, 0x30090101, 0x60110001, 0x06010401, 0x600f0001, 0x30070101, 0x600d0001, 0x18030201, 0x600b0001, 0x30050101, 0x60090001, 0x0c010301, 0x60070001, 0x30030101, 0x60050001, 0x18010201, 0x60030001, 0x30010101, 0x60010001, + 0x00037601, 0x5fff0001, 0x2fff0101, 0x5ffd0001, 0x17ff0201, 0x5ffb0001, 0x2ffd0101, 0x5ff90001, 0x0bff0301, 0x5ff70001, 0x2ffb0101, 0x5ff50001, 0x17fd0201, 0x5ff30001, 0x2ff90101, 0x5ff10001, 0x05ff0401, 0x5fef0001, 0x2ff70101, 0x5fed0001, 0x17fb0201, 0x5feb0001, 0x2ff50101, 0x5fe90001, 0x0bfd0301, 0x5fe70001, 0x2ff30101, 0x5fe50001, 0x17f90201, 0x5fe30001, 0x2ff10101, 0x5fe10001, 0x02ff0501, 0x5fdf0001, 0x2fef0101, 0x5fdd0001, 0x17f70201, 0x5fdb0001, 0x2fed0101, 0x5fd90001, 0x0bfb0301, 0x5fd70001, 0x2feb0101, 0x5fd50001, 0x17f50201, 0x5fd30001, 0x2fe90101, 0x5fd10001, 0x05fd0401, 0x5fcf0001, 0x2fe70101, 0x5fcd0001, 0x17f30201, 0x5fcb0001, 0x2fe50101, 0x5fc90001, 0x0bf90301, 0x5fc70001, 0x2fe30101, 0x5fc50001, 0x17f10201, 0x5fc30001, 0x2fe10101, 0x5fc10001, 0x017f0601, 0x5fbf0001, 0x2fdf0101, 0x5fbd0001, 0x17ef0201, 0x5fbb0001, 0x2fdd0101, 0x5fb90001, 0x0bf70301, 0x5fb70001, 0x2fdb0101, 0x5fb50001, 0x17ed0201, 0x5fb30001, 0x2fd90101, 0x5fb10001, 0x05fb0401, 0x5faf0001, 0x2fd70101, 0x5fad0001, 0x17eb0201, 0x5fab0001, 0x2fd50101, 0x5fa90001, 0x0bf50301, 0x5fa70001, 0x2fd30101, 0x5fa50001, 0x17e90201, 0x5fa30001, 0x2fd10101, 0x5fa10001, 0x02fd0501, 0x5f9f0001, 0x2fcf0101, 0x5f9d0001, 0x17e70201, 0x5f9b0001, 0x2fcd0101, 0x5f990001, 0x0bf30301, 0x5f970001, 0x2fcb0101, 0x5f950001, 0x17e50201, 0x5f930001, 0x2fc90101, 0x5f910001, 0x05f90401, 0x5f8f0001, 0x2fc70101, 0x5f8d0001, 0x17e30201, 0x5f8b0001, 0x2fc50101, 0x5f890001, 0x0bf10301, 0x5f870001, 0x2fc30101, 0x5f850001, 0x17e10201, 0x5f830001, 0x2fc10101, 0x5f810001, 0x00bf1601, 0x5f7f0001, 0x2fbf0101, 0x5f7d0001, 0x17df0201, 0x5f7b0001, 0x2fbd0101, 0x5f790001, 0x0bef0301, 0x5f770001, 0x2fbb0101, 0x5f750001, 0x17dd0201, 0x5f730001, 0x2fb90101, 0x5f710001, 0x05f70401, 0x5f6f0001, 0x2fb70101, 0x5f6d0001, 0x17db0201, 0x5f6b0001, 0x2fb50101, 0x5f690001, 0x0bed0301, 0x5f670001, 0x2fb30101, 0x5f650001, 0x17d90201, 0x5f630001, 0x2fb10101, 0x5f610001, 0x02fb0501, 0x5f5f0001, 0x2faf0101, 0x5f5d0001, 0x17d70201, 0x5f5b0001, 0x2fad0101, 0x5f590001, 0x0beb0301, 0x5f570001, 0x2fab0101, 0x5f550001, 0x17d50201, 0x5f530001, 0x2fa90101, 0x5f510001, 0x05f50401, 0x5f4f0001, 0x2fa70101, 0x5f4d0001, 0x17d30201, 0x5f4b0001, 0x2fa50101, 0x5f490001, 0x0be90301, 0x5f470001, 0x2fa30101, 0x5f450001, 0x17d10201, 0x5f430001, 0x2fa10101, 0x5f410001, 0x017d0601, 0x5f3f0001, 0x2f9f0101, 0x5f3d0001, 0x17cf0201, 0x5f3b0001, 0x2f9d0101, 0x5f390001, 0x0be70301, 0x5f370001, 0x2f9b0101, 0x5f350001, 0x17cd0201, 0x5f330001, 0x2f990101, 0x5f310001, 0x05f30401, 0x5f2f0001, 0x2f970101, 0x5f2d0001, 0x17cb0201, 0x5f2b0001, 0x2f950101, 0x5f290001, 0x0be50301, 0x5f270001, 0x2f930101, 0x5f250001, 0x17c90201, 0x5f230001, 0x2f910101, 0x5f210001, 0x02f90501, 0x5f1f0001, 0x2f8f0101, 0x5f1d0001, 0x17c70201, 0x5f1b0001, 0x2f8d0101, 0x5f190001, 0x0be30301, 0x5f170001, 0x2f8b0101, 0x5f150001, 0x17c50201, 0x5f130001, 0x2f890101, 0x5f110001, 0x05f10401, 0x5f0f0001, 0x2f870101, 0x5f0d0001, 0x17c30201, 0x5f0b0001, 0x2f850101, 0x5f090001, 0x0be10301, 0x5f070001, 0x2f830101, 0x5f050001, 0x17c10201, 0x5f030001, 0x2f810101, 0x5f010001, + 0x005f2601, 0x5eff0001, 0x2f7f0101, 0x5efd0001, 0x17bf0201, 0x5efb0001, 0x2f7d0101, 0x5ef90001, 0x0bdf0301, 0x5ef70001, 0x2f7b0101, 0x5ef50001, 0x17bd0201, 0x5ef30001, 0x2f790101, 0x5ef10001, 0x05ef0401, 0x5eef0001, 0x2f770101, 0x5eed0001, 0x17bb0201, 0x5eeb0001, 0x2f750101, 0x5ee90001, 0x0bdd0301, 0x5ee70001, 0x2f730101, 0x5ee50001, 0x17b90201, 0x5ee30001, 0x2f710101, 0x5ee10001, 0x02f70501, 0x5edf0001, 0x2f6f0101, 0x5edd0001, 0x17b70201, 0x5edb0001, 0x2f6d0101, 0x5ed90001, 0x0bdb0301, 0x5ed70001, 0x2f6b0101, 0x5ed50001, 0x17b50201, 0x5ed30001, 0x2f690101, 0x5ed10001, 0x05ed0401, 0x5ecf0001, 0x2f670101, 0x5ecd0001, 0x17b30201, 0x5ecb0001, 0x2f650101, 0x5ec90001, 0x0bd90301, 0x5ec70001, 0x2f630101, 0x5ec50001, 0x17b10201, 0x5ec30001, 0x2f610101, 0x5ec10001, 0x017b0601, 0x5ebf0001, 0x2f5f0101, 0x5ebd0001, 0x17af0201, 0x5ebb0001, 0x2f5d0101, 0x5eb90001, 0x0bd70301, 0x5eb70001, 0x2f5b0101, 0x5eb50001, 0x17ad0201, 0x5eb30001, 0x2f590101, 0x5eb10001, 0x05eb0401, 0x5eaf0001, 0x2f570101, 0x5ead0001, 0x17ab0201, 0x5eab0001, 0x2f550101, 0x5ea90001, 0x0bd50301, 0x5ea70001, 0x2f530101, 0x5ea50001, 0x17a90201, 0x5ea30001, 0x2f510101, 0x5ea10001, 0x02f50501, 0x5e9f0001, 0x2f4f0101, 0x5e9d0001, 0x17a70201, 0x5e9b0001, 0x2f4d0101, 0x5e990001, 0x0bd30301, 0x5e970001, 0x2f4b0101, 0x5e950001, 0x17a50201, 0x5e930001, 0x2f490101, 0x5e910001, 0x05e90401, 0x5e8f0001, 0x2f470101, 0x5e8d0001, 0x17a30201, 0x5e8b0001, 0x2f450101, 0x5e890001, 0x0bd10301, 0x5e870001, 0x2f430101, 0x5e850001, 0x17a10201, 0x5e830001, 0x2f410101, 0x5e810001, 0x00bd1601, 0x5e7f0001, 0x2f3f0101, 0x5e7d0001, 0x179f0201, 0x5e7b0001, 0x2f3d0101, 0x5e790001, 0x0bcf0301, 0x5e770001, 0x2f3b0101, 0x5e750001, 0x179d0201, 0x5e730001, 0x2f390101, 0x5e710001, 0x05e70401, 0x5e6f0001, 0x2f370101, 0x5e6d0001, 0x179b0201, 0x5e6b0001, 0x2f350101, 0x5e690001, 0x0bcd0301, 0x5e670001, 0x2f330101, 0x5e650001, 0x17990201, 0x5e630001, 0x2f310101, 0x5e610001, 0x02f30501, 0x5e5f0001, 0x2f2f0101, 0x5e5d0001, 0x17970201, 0x5e5b0001, 0x2f2d0101, 0x5e590001, 0x0bcb0301, 0x5e570001, 0x2f2b0101, 0x5e550001, 0x17950201, 0x5e530001, 0x2f290101, 0x5e510001, 0x05e50401, 0x5e4f0001, 0x2f270101, 0x5e4d0001, 0x17930201, 0x5e4b0001, 0x2f250101, 0x5e490001, 0x0bc90301, 0x5e470001, 0x2f230101, 0x5e450001, 0x17910201, 0x5e430001, 0x2f210101, 0x5e410001, 0x01790601, 0x5e3f0001, 0x2f1f0101, 0x5e3d0001, 0x178f0201, 0x5e3b0001, 0x2f1d0101, 0x5e390001, 0x0bc70301, 0x5e370001, 0x2f1b0101, 0x5e350001, 0x178d0201, 0x5e330001, 0x2f190101, 0x5e310001, 0x05e30401, 0x5e2f0001, 0x2f170101, 0x5e2d0001, 0x178b0201, 0x5e2b0001, 0x2f150101, 0x5e290001, 0x0bc50301, 0x5e270001, 0x2f130101, 0x5e250001, 0x17890201, 0x5e230001, 0x2f110101, 0x5e210001, 0x02f10501, 0x5e1f0001, 0x2f0f0101, 0x5e1d0001, 0x17870201, 0x5e1b0001, 0x2f0d0101, 0x5e190001, 0x0bc30301, 0x5e170001, 0x2f0b0101, 0x5e150001, 0x17850201, 0x5e130001, 0x2f090101, 0x5e110001, 0x05e10401, 0x5e0f0001, 0x2f070101, 0x5e0d0001, 0x17830201, 0x5e0b0001, 0x2f050101, 0x5e090001, 0x0bc10301, 0x5e070001, 0x2f030101, 0x5e050001, 0x17810201, 0x5e030001, 0x2f010101, 0x5e010001, + 0x002f3601, 0x5dff0001, 0x2eff0101, 0x5dfd0001, 0x177f0201, 0x5dfb0001, 0x2efd0101, 0x5df90001, 0x0bbf0301, 0x5df70001, 0x2efb0101, 0x5df50001, 0x177d0201, 0x5df30001, 0x2ef90101, 0x5df10001, 0x05df0401, 0x5def0001, 0x2ef70101, 0x5ded0001, 0x177b0201, 0x5deb0001, 0x2ef50101, 0x5de90001, 0x0bbd0301, 0x5de70001, 0x2ef30101, 0x5de50001, 0x17790201, 0x5de30001, 0x2ef10101, 0x5de10001, 0x02ef0501, 0x5ddf0001, 0x2eef0101, 0x5ddd0001, 0x17770201, 0x5ddb0001, 0x2eed0101, 0x5dd90001, 0x0bbb0301, 0x5dd70001, 0x2eeb0101, 0x5dd50001, 0x17750201, 0x5dd30001, 0x2ee90101, 0x5dd10001, 0x05dd0401, 0x5dcf0001, 0x2ee70101, 0x5dcd0001, 0x17730201, 0x5dcb0001, 0x2ee50101, 0x5dc90001, 0x0bb90301, 0x5dc70001, 0x2ee30101, 0x5dc50001, 0x17710201, 0x5dc30001, 0x2ee10101, 0x5dc10001, 0x01770601, 0x5dbf0001, 0x2edf0101, 0x5dbd0001, 0x176f0201, 0x5dbb0001, 0x2edd0101, 0x5db90001, 0x0bb70301, 0x5db70001, 0x2edb0101, 0x5db50001, 0x176d0201, 0x5db30001, 0x2ed90101, 0x5db10001, 0x05db0401, 0x5daf0001, 0x2ed70101, 0x5dad0001, 0x176b0201, 0x5dab0001, 0x2ed50101, 0x5da90001, 0x0bb50301, 0x5da70001, 0x2ed30101, 0x5da50001, 0x17690201, 0x5da30001, 0x2ed10101, 0x5da10001, 0x02ed0501, 0x5d9f0001, 0x2ecf0101, 0x5d9d0001, 0x17670201, 0x5d9b0001, 0x2ecd0101, 0x5d990001, 0x0bb30301, 0x5d970001, 0x2ecb0101, 0x5d950001, 0x17650201, 0x5d930001, 0x2ec90101, 0x5d910001, 0x05d90401, 0x5d8f0001, 0x2ec70101, 0x5d8d0001, 0x17630201, 0x5d8b0001, 0x2ec50101, 0x5d890001, 0x0bb10301, 0x5d870001, 0x2ec30101, 0x5d850001, 0x17610201, 0x5d830001, 0x2ec10101, 0x5d810001, 0x00bb1601, 0x5d7f0001, 0x2ebf0101, 0x5d7d0001, 0x175f0201, 0x5d7b0001, 0x2ebd0101, 0x5d790001, 0x0baf0301, 0x5d770001, 0x2ebb0101, 0x5d750001, 0x175d0201, 0x5d730001, 0x2eb90101, 0x5d710001, 0x05d70401, 0x5d6f0001, 0x2eb70101, 0x5d6d0001, 0x175b0201, 0x5d6b0001, 0x2eb50101, 0x5d690001, 0x0bad0301, 0x5d670001, 0x2eb30101, 0x5d650001, 0x17590201, 0x5d630001, 0x2eb10101, 0x5d610001, 0x02eb0501, 0x5d5f0001, 0x2eaf0101, 0x5d5d0001, 0x17570201, 0x5d5b0001, 0x2ead0101, 0x5d590001, 0x0bab0301, 0x5d570001, 0x2eab0101, 0x5d550001, 0x17550201, 0x5d530001, 0x2ea90101, 0x5d510001, 0x05d50401, 0x5d4f0001, 0x2ea70101, 0x5d4d0001, 0x17530201, 0x5d4b0001, 0x2ea50101, 0x5d490001, 0x0ba90301, 0x5d470001, 0x2ea30101, 0x5d450001, 0x17510201, 0x5d430001, 0x2ea10101, 0x5d410001, 0x01750601, 0x5d3f0001, 0x2e9f0101, 0x5d3d0001, 0x174f0201, 0x5d3b0001, 0x2e9d0101, 0x5d390001, 0x0ba70301, 0x5d370001, 0x2e9b0101, 0x5d350001, 0x174d0201, 0x5d330001, 0x2e990101, 0x5d310001, 0x05d30401, 0x5d2f0001, 0x2e970101, 0x5d2d0001, 0x174b0201, 0x5d2b0001, 0x2e950101, 0x5d290001, 0x0ba50301, 0x5d270001, 0x2e930101, 0x5d250001, 0x17490201, 0x5d230001, 0x2e910101, 0x5d210001, 0x02e90501, 0x5d1f0001, 0x2e8f0101, 0x5d1d0001, 0x17470201, 0x5d1b0001, 0x2e8d0101, 0x5d190001, 0x0ba30301, 0x5d170001, 0x2e8b0101, 0x5d150001, 0x17450201, 0x5d130001, 0x2e890101, 0x5d110001, 0x05d10401, 0x5d0f0001, 0x2e870101, 0x5d0d0001, 0x17430201, 0x5d0b0001, 0x2e850101, 0x5d090001, 0x0ba10301, 0x5d070001, 0x2e830101, 0x5d050001, 0x17410201, 0x5d030001, 0x2e810101, 0x5d010001, + 0x005d2601, 0x5cff0001, 0x2e7f0101, 0x5cfd0001, 0x173f0201, 0x5cfb0001, 0x2e7d0101, 0x5cf90001, 0x0b9f0301, 0x5cf70001, 0x2e7b0101, 0x5cf50001, 0x173d0201, 0x5cf30001, 0x2e790101, 0x5cf10001, 0x05cf0401, 0x5cef0001, 0x2e770101, 0x5ced0001, 0x173b0201, 0x5ceb0001, 0x2e750101, 0x5ce90001, 0x0b9d0301, 0x5ce70001, 0x2e730101, 0x5ce50001, 0x17390201, 0x5ce30001, 0x2e710101, 0x5ce10001, 0x02e70501, 0x5cdf0001, 0x2e6f0101, 0x5cdd0001, 0x17370201, 0x5cdb0001, 0x2e6d0101, 0x5cd90001, 0x0b9b0301, 0x5cd70001, 0x2e6b0101, 0x5cd50001, 0x17350201, 0x5cd30001, 0x2e690101, 0x5cd10001, 0x05cd0401, 0x5ccf0001, 0x2e670101, 0x5ccd0001, 0x17330201, 0x5ccb0001, 0x2e650101, 0x5cc90001, 0x0b990301, 0x5cc70001, 0x2e630101, 0x5cc50001, 0x17310201, 0x5cc30001, 0x2e610101, 0x5cc10001, 0x01730601, 0x5cbf0001, 0x2e5f0101, 0x5cbd0001, 0x172f0201, 0x5cbb0001, 0x2e5d0101, 0x5cb90001, 0x0b970301, 0x5cb70001, 0x2e5b0101, 0x5cb50001, 0x172d0201, 0x5cb30001, 0x2e590101, 0x5cb10001, 0x05cb0401, 0x5caf0001, 0x2e570101, 0x5cad0001, 0x172b0201, 0x5cab0001, 0x2e550101, 0x5ca90001, 0x0b950301, 0x5ca70001, 0x2e530101, 0x5ca50001, 0x17290201, 0x5ca30001, 0x2e510101, 0x5ca10001, 0x02e50501, 0x5c9f0001, 0x2e4f0101, 0x5c9d0001, 0x17270201, 0x5c9b0001, 0x2e4d0101, 0x5c990001, 0x0b930301, 0x5c970001, 0x2e4b0101, 0x5c950001, 0x17250201, 0x5c930001, 0x2e490101, 0x5c910001, 0x05c90401, 0x5c8f0001, 0x2e470101, 0x5c8d0001, 0x17230201, 0x5c8b0001, 0x2e450101, 0x5c890001, 0x0b910301, 0x5c870001, 0x2e430101, 0x5c850001, 0x17210201, 0x5c830001, 0x2e410101, 0x5c810001, 0x00b91601, 0x5c7f0001, 0x2e3f0101, 0x5c7d0001, 0x171f0201, 0x5c7b0001, 0x2e3d0101, 0x5c790001, 0x0b8f0301, 0x5c770001, 0x2e3b0101, 0x5c750001, 0x171d0201, 0x5c730001, 0x2e390101, 0x5c710001, 0x05c70401, 0x5c6f0001, 0x2e370101, 0x5c6d0001, 0x171b0201, 0x5c6b0001, 0x2e350101, 0x5c690001, 0x0b8d0301, 0x5c670001, 0x2e330101, 0x5c650001, 0x17190201, 0x5c630001, 0x2e310101, 0x5c610001, 0x02e30501, 0x5c5f0001, 0x2e2f0101, 0x5c5d0001, 0x17170201, 0x5c5b0001, 0x2e2d0101, 0x5c590001, 0x0b8b0301, 0x5c570001, 0x2e2b0101, 0x5c550001, 0x17150201, 0x5c530001, 0x2e290101, 0x5c510001, 0x05c50401, 0x5c4f0001, 0x2e270101, 0x5c4d0001, 0x17130201, 0x5c4b0001, 0x2e250101, 0x5c490001, 0x0b890301, 0x5c470001, 0x2e230101, 0x5c450001, 0x17110201, 0x5c430001, 0x2e210101, 0x5c410001, 0x01710601, 0x5c3f0001, 0x2e1f0101, 0x5c3d0001, 0x170f0201, 0x5c3b0001, 0x2e1d0101, 0x5c390001, 0x0b870301, 0x5c370001, 0x2e1b0101, 0x5c350001, 0x170d0201, 0x5c330001, 0x2e190101, 0x5c310001, 0x05c30401, 0x5c2f0001, 0x2e170101, 0x5c2d0001, 0x170b0201, 0x5c2b0001, 0x2e150101, 0x5c290001, 0x0b850301, 0x5c270001, 0x2e130101, 0x5c250001, 0x17090201, 0x5c230001, 0x2e110101, 0x5c210001, 0x02e10501, 0x5c1f0001, 0x2e0f0101, 0x5c1d0001, 0x17070201, 0x5c1b0001, 0x2e0d0101, 0x5c190001, 0x0b830301, 0x5c170001, 0x2e0b0101, 0x5c150001, 0x17050201, 0x5c130001, 0x2e090101, 0x5c110001, 0x05c10401, 0x5c0f0001, 0x2e070101, 0x5c0d0001, 0x17030201, 0x5c0b0001, 0x2e050101, 0x5c090001, 0x0b810301, 0x5c070001, 0x2e030101, 0x5c050001, 0x17010201, 0x5c030001, 0x2e010101, 0x5c010001, + 0x00174601, 0x5bff0001, 0x2dff0101, 0x5bfd0001, 0x16ff0201, 0x5bfb0001, 0x2dfd0101, 0x5bf90001, 0x0b7f0301, 0x5bf70001, 0x2dfb0101, 0x5bf50001, 0x16fd0201, 0x5bf30001, 0x2df90101, 0x5bf10001, 0x05bf0401, 0x5bef0001, 0x2df70101, 0x5bed0001, 0x16fb0201, 0x5beb0001, 0x2df50101, 0x5be90001, 0x0b7d0301, 0x5be70001, 0x2df30101, 0x5be50001, 0x16f90201, 0x5be30001, 0x2df10101, 0x5be10001, 0x02df0501, 0x5bdf0001, 0x2def0101, 0x5bdd0001, 0x16f70201, 0x5bdb0001, 0x2ded0101, 0x5bd90001, 0x0b7b0301, 0x5bd70001, 0x2deb0101, 0x5bd50001, 0x16f50201, 0x5bd30001, 0x2de90101, 0x5bd10001, 0x05bd0401, 0x5bcf0001, 0x2de70101, 0x5bcd0001, 0x16f30201, 0x5bcb0001, 0x2de50101, 0x5bc90001, 0x0b790301, 0x5bc70001, 0x2de30101, 0x5bc50001, 0x16f10201, 0x5bc30001, 0x2de10101, 0x5bc10001, 0x016f0601, 0x5bbf0001, 0x2ddf0101, 0x5bbd0001, 0x16ef0201, 0x5bbb0001, 0x2ddd0101, 0x5bb90001, 0x0b770301, 0x5bb70001, 0x2ddb0101, 0x5bb50001, 0x16ed0201, 0x5bb30001, 0x2dd90101, 0x5bb10001, 0x05bb0401, 0x5baf0001, 0x2dd70101, 0x5bad0001, 0x16eb0201, 0x5bab0001, 0x2dd50101, 0x5ba90001, 0x0b750301, 0x5ba70001, 0x2dd30101, 0x5ba50001, 0x16e90201, 0x5ba30001, 0x2dd10101, 0x5ba10001, 0x02dd0501, 0x5b9f0001, 0x2dcf0101, 0x5b9d0001, 0x16e70201, 0x5b9b0001, 0x2dcd0101, 0x5b990001, 0x0b730301, 0x5b970001, 0x2dcb0101, 0x5b950001, 0x16e50201, 0x5b930001, 0x2dc90101, 0x5b910001, 0x05b90401, 0x5b8f0001, 0x2dc70101, 0x5b8d0001, 0x16e30201, 0x5b8b0001, 0x2dc50101, 0x5b890001, 0x0b710301, 0x5b870001, 0x2dc30101, 0x5b850001, 0x16e10201, 0x5b830001, 0x2dc10101, 0x5b810001, 0x00b71601, 0x5b7f0001, 0x2dbf0101, 0x5b7d0001, 0x16df0201, 0x5b7b0001, 0x2dbd0101, 0x5b790001, 0x0b6f0301, 0x5b770001, 0x2dbb0101, 0x5b750001, 0x16dd0201, 0x5b730001, 0x2db90101, 0x5b710001, 0x05b70401, 0x5b6f0001, 0x2db70101, 0x5b6d0001, 0x16db0201, 0x5b6b0001, 0x2db50101, 0x5b690001, 0x0b6d0301, 0x5b670001, 0x2db30101, 0x5b650001, 0x16d90201, 0x5b630001, 0x2db10101, 0x5b610001, 0x02db0501, 0x5b5f0001, 0x2daf0101, 0x5b5d0001, 0x16d70201, 0x5b5b0001, 0x2dad0101, 0x5b590001, 0x0b6b0301, 0x5b570001, 0x2dab0101, 0x5b550001, 0x16d50201, 0x5b530001, 0x2da90101, 0x5b510001, 0x05b50401, 0x5b4f0001, 0x2da70101, 0x5b4d0001, 0x16d30201, 0x5b4b0001, 0x2da50101, 0x5b490001, 0x0b690301, 0x5b470001, 0x2da30101, 0x5b450001, 0x16d10201, 0x5b430001, 0x2da10101, 0x5b410001, 0x016d0601, 0x5b3f0001, 0x2d9f0101, 0x5b3d0001, 0x16cf0201, 0x5b3b0001, 0x2d9d0101, 0x5b390001, 0x0b670301, 0x5b370001, 0x2d9b0101, 0x5b350001, 0x16cd0201, 0x5b330001, 0x2d990101, 0x5b310001, 0x05b30401, 0x5b2f0001, 0x2d970101, 0x5b2d0001, 0x16cb0201, 0x5b2b0001, 0x2d950101, 0x5b290001, 0x0b650301, 0x5b270001, 0x2d930101, 0x5b250001, 0x16c90201, 0x5b230001, 0x2d910101, 0x5b210001, 0x02d90501, 0x5b1f0001, 0x2d8f0101, 0x5b1d0001, 0x16c70201, 0x5b1b0001, 0x2d8d0101, 0x5b190001, 0x0b630301, 0x5b170001, 0x2d8b0101, 0x5b150001, 0x16c50201, 0x5b130001, 0x2d890101, 0x5b110001, 0x05b10401, 0x5b0f0001, 0x2d870101, 0x5b0d0001, 0x16c30201, 0x5b0b0001, 0x2d850101, 0x5b090001, 0x0b610301, 0x5b070001, 0x2d830101, 0x5b050001, 0x16c10201, 0x5b030001, 0x2d810101, 0x5b010001, + 0x005b2601, 0x5aff0001, 0x2d7f0101, 0x5afd0001, 0x16bf0201, 0x5afb0001, 0x2d7d0101, 0x5af90001, 0x0b5f0301, 0x5af70001, 0x2d7b0101, 0x5af50001, 0x16bd0201, 0x5af30001, 0x2d790101, 0x5af10001, 0x05af0401, 0x5aef0001, 0x2d770101, 0x5aed0001, 0x16bb0201, 0x5aeb0001, 0x2d750101, 0x5ae90001, 0x0b5d0301, 0x5ae70001, 0x2d730101, 0x5ae50001, 0x16b90201, 0x5ae30001, 0x2d710101, 0x5ae10001, 0x02d70501, 0x5adf0001, 0x2d6f0101, 0x5add0001, 0x16b70201, 0x5adb0001, 0x2d6d0101, 0x5ad90001, 0x0b5b0301, 0x5ad70001, 0x2d6b0101, 0x5ad50001, 0x16b50201, 0x5ad30001, 0x2d690101, 0x5ad10001, 0x05ad0401, 0x5acf0001, 0x2d670101, 0x5acd0001, 0x16b30201, 0x5acb0001, 0x2d650101, 0x5ac90001, 0x0b590301, 0x5ac70001, 0x2d630101, 0x5ac50001, 0x16b10201, 0x5ac30001, 0x2d610101, 0x5ac10001, 0x016b0601, 0x5abf0001, 0x2d5f0101, 0x5abd0001, 0x16af0201, 0x5abb0001, 0x2d5d0101, 0x5ab90001, 0x0b570301, 0x5ab70001, 0x2d5b0101, 0x5ab50001, 0x16ad0201, 0x5ab30001, 0x2d590101, 0x5ab10001, 0x05ab0401, 0x5aaf0001, 0x2d570101, 0x5aad0001, 0x16ab0201, 0x5aab0001, 0x2d550101, 0x5aa90001, 0x0b550301, 0x5aa70001, 0x2d530101, 0x5aa50001, 0x16a90201, 0x5aa30001, 0x2d510101, 0x5aa10001, 0x02d50501, 0x5a9f0001, 0x2d4f0101, 0x5a9d0001, 0x16a70201, 0x5a9b0001, 0x2d4d0101, 0x5a990001, 0x0b530301, 0x5a970001, 0x2d4b0101, 0x5a950001, 0x16a50201, 0x5a930001, 0x2d490101, 0x5a910001, 0x05a90401, 0x5a8f0001, 0x2d470101, 0x5a8d0001, 0x16a30201, 0x5a8b0001, 0x2d450101, 0x5a890001, 0x0b510301, 0x5a870001, 0x2d430101, 0x5a850001, 0x16a10201, 0x5a830001, 0x2d410101, 0x5a810001, 0x00b51601, 0x5a7f0001, 0x2d3f0101, 0x5a7d0001, 0x169f0201, 0x5a7b0001, 0x2d3d0101, 0x5a790001, 0x0b4f0301, 0x5a770001, 0x2d3b0101, 0x5a750001, 0x169d0201, 0x5a730001, 0x2d390101, 0x5a710001, 0x05a70401, 0x5a6f0001, 0x2d370101, 0x5a6d0001, 0x169b0201, 0x5a6b0001, 0x2d350101, 0x5a690001, 0x0b4d0301, 0x5a670001, 0x2d330101, 0x5a650001, 0x16990201, 0x5a630001, 0x2d310101, 0x5a610001, 0x02d30501, 0x5a5f0001, 0x2d2f0101, 0x5a5d0001, 0x16970201, 0x5a5b0001, 0x2d2d0101, 0x5a590001, 0x0b4b0301, 0x5a570001, 0x2d2b0101, 0x5a550001, 0x16950201, 0x5a530001, 0x2d290101, 0x5a510001, 0x05a50401, 0x5a4f0001, 0x2d270101, 0x5a4d0001, 0x16930201, 0x5a4b0001, 0x2d250101, 0x5a490001, 0x0b490301, 0x5a470001, 0x2d230101, 0x5a450001, 0x16910201, 0x5a430001, 0x2d210101, 0x5a410001, 0x01690601, 0x5a3f0001, 0x2d1f0101, 0x5a3d0001, 0x168f0201, 0x5a3b0001, 0x2d1d0101, 0x5a390001, 0x0b470301, 0x5a370001, 0x2d1b0101, 0x5a350001, 0x168d0201, 0x5a330001, 0x2d190101, 0x5a310001, 0x05a30401, 0x5a2f0001, 0x2d170101, 0x5a2d0001, 0x168b0201, 0x5a2b0001, 0x2d150101, 0x5a290001, 0x0b450301, 0x5a270001, 0x2d130101, 0x5a250001, 0x16890201, 0x5a230001, 0x2d110101, 0x5a210001, 0x02d10501, 0x5a1f0001, 0x2d0f0101, 0x5a1d0001, 0x16870201, 0x5a1b0001, 0x2d0d0101, 0x5a190001, 0x0b430301, 0x5a170001, 0x2d0b0101, 0x5a150001, 0x16850201, 0x5a130001, 0x2d090101, 0x5a110001, 0x05a10401, 0x5a0f0001, 0x2d070101, 0x5a0d0001, 0x16830201, 0x5a0b0001, 0x2d050101, 0x5a090001, 0x0b410301, 0x5a070001, 0x2d030101, 0x5a050001, 0x16810201, 0x5a030001, 0x2d010101, 0x5a010001, + 0x002d3601, 0x59ff0001, 0x2cff0101, 0x59fd0001, 0x167f0201, 0x59fb0001, 0x2cfd0101, 0x59f90001, 0x0b3f0301, 0x59f70001, 0x2cfb0101, 0x59f50001, 0x167d0201, 0x59f30001, 0x2cf90101, 0x59f10001, 0x059f0401, 0x59ef0001, 0x2cf70101, 0x59ed0001, 0x167b0201, 0x59eb0001, 0x2cf50101, 0x59e90001, 0x0b3d0301, 0x59e70001, 0x2cf30101, 0x59e50001, 0x16790201, 0x59e30001, 0x2cf10101, 0x59e10001, 0x02cf0501, 0x59df0001, 0x2cef0101, 0x59dd0001, 0x16770201, 0x59db0001, 0x2ced0101, 0x59d90001, 0x0b3b0301, 0x59d70001, 0x2ceb0101, 0x59d50001, 0x16750201, 0x59d30001, 0x2ce90101, 0x59d10001, 0x059d0401, 0x59cf0001, 0x2ce70101, 0x59cd0001, 0x16730201, 0x59cb0001, 0x2ce50101, 0x59c90001, 0x0b390301, 0x59c70001, 0x2ce30101, 0x59c50001, 0x16710201, 0x59c30001, 0x2ce10101, 0x59c10001, 0x01670601, 0x59bf0001, 0x2cdf0101, 0x59bd0001, 0x166f0201, 0x59bb0001, 0x2cdd0101, 0x59b90001, 0x0b370301, 0x59b70001, 0x2cdb0101, 0x59b50001, 0x166d0201, 0x59b30001, 0x2cd90101, 0x59b10001, 0x059b0401, 0x59af0001, 0x2cd70101, 0x59ad0001, 0x166b0201, 0x59ab0001, 0x2cd50101, 0x59a90001, 0x0b350301, 0x59a70001, 0x2cd30101, 0x59a50001, 0x16690201, 0x59a30001, 0x2cd10101, 0x59a10001, 0x02cd0501, 0x599f0001, 0x2ccf0101, 0x599d0001, 0x16670201, 0x599b0001, 0x2ccd0101, 0x59990001, 0x0b330301, 0x59970001, 0x2ccb0101, 0x59950001, 0x16650201, 0x59930001, 0x2cc90101, 0x59910001, 0x05990401, 0x598f0001, 0x2cc70101, 0x598d0001, 0x16630201, 0x598b0001, 0x2cc50101, 0x59890001, 0x0b310301, 0x59870001, 0x2cc30101, 0x59850001, 0x16610201, 0x59830001, 0x2cc10101, 0x59810001, 0x00b31601, 0x597f0001, 0x2cbf0101, 0x597d0001, 0x165f0201, 0x597b0001, 0x2cbd0101, 0x59790001, 0x0b2f0301, 0x59770001, 0x2cbb0101, 0x59750001, 0x165d0201, 0x59730001, 0x2cb90101, 0x59710001, 0x05970401, 0x596f0001, 0x2cb70101, 0x596d0001, 0x165b0201, 0x596b0001, 0x2cb50101, 0x59690001, 0x0b2d0301, 0x59670001, 0x2cb30101, 0x59650001, 0x16590201, 0x59630001, 0x2cb10101, 0x59610001, 0x02cb0501, 0x595f0001, 0x2caf0101, 0x595d0001, 0x16570201, 0x595b0001, 0x2cad0101, 0x59590001, 0x0b2b0301, 0x59570001, 0x2cab0101, 0x59550001, 0x16550201, 0x59530001, 0x2ca90101, 0x59510001, 0x05950401, 0x594f0001, 0x2ca70101, 0x594d0001, 0x16530201, 0x594b0001, 0x2ca50101, 0x59490001, 0x0b290301, 0x59470001, 0x2ca30101, 0x59450001, 0x16510201, 0x59430001, 0x2ca10101, 0x59410001, 0x01650601, 0x593f0001, 0x2c9f0101, 0x593d0001, 0x164f0201, 0x593b0001, 0x2c9d0101, 0x59390001, 0x0b270301, 0x59370001, 0x2c9b0101, 0x59350001, 0x164d0201, 0x59330001, 0x2c990101, 0x59310001, 0x05930401, 0x592f0001, 0x2c970101, 0x592d0001, 0x164b0201, 0x592b0001, 0x2c950101, 0x59290001, 0x0b250301, 0x59270001, 0x2c930101, 0x59250001, 0x16490201, 0x59230001, 0x2c910101, 0x59210001, 0x02c90501, 0x591f0001, 0x2c8f0101, 0x591d0001, 0x16470201, 0x591b0001, 0x2c8d0101, 0x59190001, 0x0b230301, 0x59170001, 0x2c8b0101, 0x59150001, 0x16450201, 0x59130001, 0x2c890101, 0x59110001, 0x05910401, 0x590f0001, 0x2c870101, 0x590d0001, 0x16430201, 0x590b0001, 0x2c850101, 0x59090001, 0x0b210301, 0x59070001, 0x2c830101, 0x59050001, 0x16410201, 0x59030001, 0x2c810101, 0x59010001, + 0x00592601, 0x58ff0001, 0x2c7f0101, 0x58fd0001, 0x163f0201, 0x58fb0001, 0x2c7d0101, 0x58f90001, 0x0b1f0301, 0x58f70001, 0x2c7b0101, 0x58f50001, 0x163d0201, 0x58f30001, 0x2c790101, 0x58f10001, 0x058f0401, 0x58ef0001, 0x2c770101, 0x58ed0001, 0x163b0201, 0x58eb0001, 0x2c750101, 0x58e90001, 0x0b1d0301, 0x58e70001, 0x2c730101, 0x58e50001, 0x16390201, 0x58e30001, 0x2c710101, 0x58e10001, 0x02c70501, 0x58df0001, 0x2c6f0101, 0x58dd0001, 0x16370201, 0x58db0001, 0x2c6d0101, 0x58d90001, 0x0b1b0301, 0x58d70001, 0x2c6b0101, 0x58d50001, 0x16350201, 0x58d30001, 0x2c690101, 0x58d10001, 0x058d0401, 0x58cf0001, 0x2c670101, 0x58cd0001, 0x16330201, 0x58cb0001, 0x2c650101, 0x58c90001, 0x0b190301, 0x58c70001, 0x2c630101, 0x58c50001, 0x16310201, 0x58c30001, 0x2c610101, 0x58c10001, 0x01630601, 0x58bf0001, 0x2c5f0101, 0x58bd0001, 0x162f0201, 0x58bb0001, 0x2c5d0101, 0x58b90001, 0x0b170301, 0x58b70001, 0x2c5b0101, 0x58b50001, 0x162d0201, 0x58b30001, 0x2c590101, 0x58b10001, 0x058b0401, 0x58af0001, 0x2c570101, 0x58ad0001, 0x162b0201, 0x58ab0001, 0x2c550101, 0x58a90001, 0x0b150301, 0x58a70001, 0x2c530101, 0x58a50001, 0x16290201, 0x58a30001, 0x2c510101, 0x58a10001, 0x02c50501, 0x589f0001, 0x2c4f0101, 0x589d0001, 0x16270201, 0x589b0001, 0x2c4d0101, 0x58990001, 0x0b130301, 0x58970001, 0x2c4b0101, 0x58950001, 0x16250201, 0x58930001, 0x2c490101, 0x58910001, 0x05890401, 0x588f0001, 0x2c470101, 0x588d0001, 0x16230201, 0x588b0001, 0x2c450101, 0x58890001, 0x0b110301, 0x58870001, 0x2c430101, 0x58850001, 0x16210201, 0x58830001, 0x2c410101, 0x58810001, 0x00b11601, 0x587f0001, 0x2c3f0101, 0x587d0001, 0x161f0201, 0x587b0001, 0x2c3d0101, 0x58790001, 0x0b0f0301, 0x58770001, 0x2c3b0101, 0x58750001, 0x161d0201, 0x58730001, 0x2c390101, 0x58710001, 0x05870401, 0x586f0001, 0x2c370101, 0x586d0001, 0x161b0201, 0x586b0001, 0x2c350101, 0x58690001, 0x0b0d0301, 0x58670001, 0x2c330101, 0x58650001, 0x16190201, 0x58630001, 0x2c310101, 0x58610001, 0x02c30501, 0x585f0001, 0x2c2f0101, 0x585d0001, 0x16170201, 0x585b0001, 0x2c2d0101, 0x58590001, 0x0b0b0301, 0x58570001, 0x2c2b0101, 0x58550001, 0x16150201, 0x58530001, 0x2c290101, 0x58510001, 0x05850401, 0x584f0001, 0x2c270101, 0x584d0001, 0x16130201, 0x584b0001, 0x2c250101, 0x58490001, 0x0b090301, 0x58470001, 0x2c230101, 0x58450001, 0x16110201, 0x58430001, 0x2c210101, 0x58410001, 0x01610601, 0x583f0001, 0x2c1f0101, 0x583d0001, 0x160f0201, 0x583b0001, 0x2c1d0101, 0x58390001, 0x0b070301, 0x58370001, 0x2c1b0101, 0x58350001, 0x160d0201, 0x58330001, 0x2c190101, 0x58310001, 0x05830401, 0x582f0001, 0x2c170101, 0x582d0001, 0x160b0201, 0x582b0001, 0x2c150101, 0x58290001, 0x0b050301, 0x58270001, 0x2c130101, 0x58250001, 0x16090201, 0x58230001, 0x2c110101, 0x58210001, 0x02c10501, 0x581f0001, 0x2c0f0101, 0x581d0001, 0x16070201, 0x581b0001, 0x2c0d0101, 0x58190001, 0x0b030301, 0x58170001, 0x2c0b0101, 0x58150001, 0x16050201, 0x58130001, 0x2c090101, 0x58110001, 0x05810401, 0x580f0001, 0x2c070101, 0x580d0001, 0x16030201, 0x580b0001, 0x2c050101, 0x58090001, 0x0b010301, 0x58070001, 0x2c030101, 0x58050001, 0x16010201, 0x58030001, 0x2c010101, 0x58010001, + 0x000b5601, 0x57ff0001, 0x2bff0101, 0x57fd0001, 0x15ff0201, 0x57fb0001, 0x2bfd0101, 0x57f90001, 0x0aff0301, 0x57f70001, 0x2bfb0101, 0x57f50001, 0x15fd0201, 0x57f30001, 0x2bf90101, 0x57f10001, 0x057f0401, 0x57ef0001, 0x2bf70101, 0x57ed0001, 0x15fb0201, 0x57eb0001, 0x2bf50101, 0x57e90001, 0x0afd0301, 0x57e70001, 0x2bf30101, 0x57e50001, 0x15f90201, 0x57e30001, 0x2bf10101, 0x57e10001, 0x02bf0501, 0x57df0001, 0x2bef0101, 0x57dd0001, 0x15f70201, 0x57db0001, 0x2bed0101, 0x57d90001, 0x0afb0301, 0x57d70001, 0x2beb0101, 0x57d50001, 0x15f50201, 0x57d30001, 0x2be90101, 0x57d10001, 0x057d0401, 0x57cf0001, 0x2be70101, 0x57cd0001, 0x15f30201, 0x57cb0001, 0x2be50101, 0x57c90001, 0x0af90301, 0x57c70001, 0x2be30101, 0x57c50001, 0x15f10201, 0x57c30001, 0x2be10101, 0x57c10001, 0x015f0601, 0x57bf0001, 0x2bdf0101, 0x57bd0001, 0x15ef0201, 0x57bb0001, 0x2bdd0101, 0x57b90001, 0x0af70301, 0x57b70001, 0x2bdb0101, 0x57b50001, 0x15ed0201, 0x57b30001, 0x2bd90101, 0x57b10001, 0x057b0401, 0x57af0001, 0x2bd70101, 0x57ad0001, 0x15eb0201, 0x57ab0001, 0x2bd50101, 0x57a90001, 0x0af50301, 0x57a70001, 0x2bd30101, 0x57a50001, 0x15e90201, 0x57a30001, 0x2bd10101, 0x57a10001, 0x02bd0501, 0x579f0001, 0x2bcf0101, 0x579d0001, 0x15e70201, 0x579b0001, 0x2bcd0101, 0x57990001, 0x0af30301, 0x57970001, 0x2bcb0101, 0x57950001, 0x15e50201, 0x57930001, 0x2bc90101, 0x57910001, 0x05790401, 0x578f0001, 0x2bc70101, 0x578d0001, 0x15e30201, 0x578b0001, 0x2bc50101, 0x57890001, 0x0af10301, 0x57870001, 0x2bc30101, 0x57850001, 0x15e10201, 0x57830001, 0x2bc10101, 0x57810001, 0x00af1601, 0x577f0001, 0x2bbf0101, 0x577d0001, 0x15df0201, 0x577b0001, 0x2bbd0101, 0x57790001, 0x0aef0301, 0x57770001, 0x2bbb0101, 0x57750001, 0x15dd0201, 0x57730001, 0x2bb90101, 0x57710001, 0x05770401, 0x576f0001, 0x2bb70101, 0x576d0001, 0x15db0201, 0x576b0001, 0x2bb50101, 0x57690001, 0x0aed0301, 0x57670001, 0x2bb30101, 0x57650001, 0x15d90201, 0x57630001, 0x2bb10101, 0x57610001, 0x02bb0501, 0x575f0001, 0x2baf0101, 0x575d0001, 0x15d70201, 0x575b0001, 0x2bad0101, 0x57590001, 0x0aeb0301, 0x57570001, 0x2bab0101, 0x57550001, 0x15d50201, 0x57530001, 0x2ba90101, 0x57510001, 0x05750401, 0x574f0001, 0x2ba70101, 0x574d0001, 0x15d30201, 0x574b0001, 0x2ba50101, 0x57490001, 0x0ae90301, 0x57470001, 0x2ba30101, 0x57450001, 0x15d10201, 0x57430001, 0x2ba10101, 0x57410001, 0x015d0601, 0x573f0001, 0x2b9f0101, 0x573d0001, 0x15cf0201, 0x573b0001, 0x2b9d0101, 0x57390001, 0x0ae70301, 0x57370001, 0x2b9b0101, 0x57350001, 0x15cd0201, 0x57330001, 0x2b990101, 0x57310001, 0x05730401, 0x572f0001, 0x2b970101, 0x572d0001, 0x15cb0201, 0x572b0001, 0x2b950101, 0x57290001, 0x0ae50301, 0x57270001, 0x2b930101, 0x57250001, 0x15c90201, 0x57230001, 0x2b910101, 0x57210001, 0x02b90501, 0x571f0001, 0x2b8f0101, 0x571d0001, 0x15c70201, 0x571b0001, 0x2b8d0101, 0x57190001, 0x0ae30301, 0x57170001, 0x2b8b0101, 0x57150001, 0x15c50201, 0x57130001, 0x2b890101, 0x57110001, 0x05710401, 0x570f0001, 0x2b870101, 0x570d0001, 0x15c30201, 0x570b0001, 0x2b850101, 0x57090001, 0x0ae10301, 0x57070001, 0x2b830101, 0x57050001, 0x15c10201, 0x57030001, 0x2b810101, 0x57010001, + 0x00572601, 0x56ff0001, 0x2b7f0101, 0x56fd0001, 0x15bf0201, 0x56fb0001, 0x2b7d0101, 0x56f90001, 0x0adf0301, 0x56f70001, 0x2b7b0101, 0x56f50001, 0x15bd0201, 0x56f30001, 0x2b790101, 0x56f10001, 0x056f0401, 0x56ef0001, 0x2b770101, 0x56ed0001, 0x15bb0201, 0x56eb0001, 0x2b750101, 0x56e90001, 0x0add0301, 0x56e70001, 0x2b730101, 0x56e50001, 0x15b90201, 0x56e30001, 0x2b710101, 0x56e10001, 0x02b70501, 0x56df0001, 0x2b6f0101, 0x56dd0001, 0x15b70201, 0x56db0001, 0x2b6d0101, 0x56d90001, 0x0adb0301, 0x56d70001, 0x2b6b0101, 0x56d50001, 0x15b50201, 0x56d30001, 0x2b690101, 0x56d10001, 0x056d0401, 0x56cf0001, 0x2b670101, 0x56cd0001, 0x15b30201, 0x56cb0001, 0x2b650101, 0x56c90001, 0x0ad90301, 0x56c70001, 0x2b630101, 0x56c50001, 0x15b10201, 0x56c30001, 0x2b610101, 0x56c10001, 0x015b0601, 0x56bf0001, 0x2b5f0101, 0x56bd0001, 0x15af0201, 0x56bb0001, 0x2b5d0101, 0x56b90001, 0x0ad70301, 0x56b70001, 0x2b5b0101, 0x56b50001, 0x15ad0201, 0x56b30001, 0x2b590101, 0x56b10001, 0x056b0401, 0x56af0001, 0x2b570101, 0x56ad0001, 0x15ab0201, 0x56ab0001, 0x2b550101, 0x56a90001, 0x0ad50301, 0x56a70001, 0x2b530101, 0x56a50001, 0x15a90201, 0x56a30001, 0x2b510101, 0x56a10001, 0x02b50501, 0x569f0001, 0x2b4f0101, 0x569d0001, 0x15a70201, 0x569b0001, 0x2b4d0101, 0x56990001, 0x0ad30301, 0x56970001, 0x2b4b0101, 0x56950001, 0x15a50201, 0x56930001, 0x2b490101, 0x56910001, 0x05690401, 0x568f0001, 0x2b470101, 0x568d0001, 0x15a30201, 0x568b0001, 0x2b450101, 0x56890001, 0x0ad10301, 0x56870001, 0x2b430101, 0x56850001, 0x15a10201, 0x56830001, 0x2b410101, 0x56810001, 0x00ad1601, 0x567f0001, 0x2b3f0101, 0x567d0001, 0x159f0201, 0x567b0001, 0x2b3d0101, 0x56790001, 0x0acf0301, 0x56770001, 0x2b3b0101, 0x56750001, 0x159d0201, 0x56730001, 0x2b390101, 0x56710001, 0x05670401, 0x566f0001, 0x2b370101, 0x566d0001, 0x159b0201, 0x566b0001, 0x2b350101, 0x56690001, 0x0acd0301, 0x56670001, 0x2b330101, 0x56650001, 0x15990201, 0x56630001, 0x2b310101, 0x56610001, 0x02b30501, 0x565f0001, 0x2b2f0101, 0x565d0001, 0x15970201, 0x565b0001, 0x2b2d0101, 0x56590001, 0x0acb0301, 0x56570001, 0x2b2b0101, 0x56550001, 0x15950201, 0x56530001, 0x2b290101, 0x56510001, 0x05650401, 0x564f0001, 0x2b270101, 0x564d0001, 0x15930201, 0x564b0001, 0x2b250101, 0x56490001, 0x0ac90301, 0x56470001, 0x2b230101, 0x56450001, 0x15910201, 0x56430001, 0x2b210101, 0x56410001, 0x01590601, 0x563f0001, 0x2b1f0101, 0x563d0001, 0x158f0201, 0x563b0001, 0x2b1d0101, 0x56390001, 0x0ac70301, 0x56370001, 0x2b1b0101, 0x56350001, 0x158d0201, 0x56330001, 0x2b190101, 0x56310001, 0x05630401, 0x562f0001, 0x2b170101, 0x562d0001, 0x158b0201, 0x562b0001, 0x2b150101, 0x56290001, 0x0ac50301, 0x56270001, 0x2b130101, 0x56250001, 0x15890201, 0x56230001, 0x2b110101, 0x56210001, 0x02b10501, 0x561f0001, 0x2b0f0101, 0x561d0001, 0x15870201, 0x561b0001, 0x2b0d0101, 0x56190001, 0x0ac30301, 0x56170001, 0x2b0b0101, 0x56150001, 0x15850201, 0x56130001, 0x2b090101, 0x56110001, 0x05610401, 0x560f0001, 0x2b070101, 0x560d0001, 0x15830201, 0x560b0001, 0x2b050101, 0x56090001, 0x0ac10301, 0x56070001, 0x2b030101, 0x56050001, 0x15810201, 0x56030001, 0x2b010101, 0x56010001, + 0x002b3601, 0x55ff0001, 0x2aff0101, 0x55fd0001, 0x157f0201, 0x55fb0001, 0x2afd0101, 0x55f90001, 0x0abf0301, 0x55f70001, 0x2afb0101, 0x55f50001, 0x157d0201, 0x55f30001, 0x2af90101, 0x55f10001, 0x055f0401, 0x55ef0001, 0x2af70101, 0x55ed0001, 0x157b0201, 0x55eb0001, 0x2af50101, 0x55e90001, 0x0abd0301, 0x55e70001, 0x2af30101, 0x55e50001, 0x15790201, 0x55e30001, 0x2af10101, 0x55e10001, 0x02af0501, 0x55df0001, 0x2aef0101, 0x55dd0001, 0x15770201, 0x55db0001, 0x2aed0101, 0x55d90001, 0x0abb0301, 0x55d70001, 0x2aeb0101, 0x55d50001, 0x15750201, 0x55d30001, 0x2ae90101, 0x55d10001, 0x055d0401, 0x55cf0001, 0x2ae70101, 0x55cd0001, 0x15730201, 0x55cb0001, 0x2ae50101, 0x55c90001, 0x0ab90301, 0x55c70001, 0x2ae30101, 0x55c50001, 0x15710201, 0x55c30001, 0x2ae10101, 0x55c10001, 0x01570601, 0x55bf0001, 0x2adf0101, 0x55bd0001, 0x156f0201, 0x55bb0001, 0x2add0101, 0x55b90001, 0x0ab70301, 0x55b70001, 0x2adb0101, 0x55b50001, 0x156d0201, 0x55b30001, 0x2ad90101, 0x55b10001, 0x055b0401, 0x55af0001, 0x2ad70101, 0x55ad0001, 0x156b0201, 0x55ab0001, 0x2ad50101, 0x55a90001, 0x0ab50301, 0x55a70001, 0x2ad30101, 0x55a50001, 0x15690201, 0x55a30001, 0x2ad10101, 0x55a10001, 0x02ad0501, 0x559f0001, 0x2acf0101, 0x559d0001, 0x15670201, 0x559b0001, 0x2acd0101, 0x55990001, 0x0ab30301, 0x55970001, 0x2acb0101, 0x55950001, 0x15650201, 0x55930001, 0x2ac90101, 0x55910001, 0x05590401, 0x558f0001, 0x2ac70101, 0x558d0001, 0x15630201, 0x558b0001, 0x2ac50101, 0x55890001, 0x0ab10301, 0x55870001, 0x2ac30101, 0x55850001, 0x15610201, 0x55830001, 0x2ac10101, 0x55810001, 0x00ab1601, 0x557f0001, 0x2abf0101, 0x557d0001, 0x155f0201, 0x557b0001, 0x2abd0101, 0x55790001, 0x0aaf0301, 0x55770001, 0x2abb0101, 0x55750001, 0x155d0201, 0x55730001, 0x2ab90101, 0x55710001, 0x05570401, 0x556f0001, 0x2ab70101, 0x556d0001, 0x155b0201, 0x556b0001, 0x2ab50101, 0x55690001, 0x0aad0301, 0x55670001, 0x2ab30101, 0x55650001, 0x15590201, 0x55630001, 0x2ab10101, 0x55610001, 0x02ab0501, 0x555f0001, 0x2aaf0101, 0x555d0001, 0x15570201, 0x555b0001, 0x2aad0101, 0x55590001, 0x0aab0301, 0x55570001, 0x2aab0101, 0x55550001, 0x15550201, 0x55530001, 0x2aa90101, 0x55510001, 0x05550401, 0x554f0001, 0x2aa70101, 0x554d0001, 0x15530201, 0x554b0001, 0x2aa50101, 0x55490001, 0x0aa90301, 0x55470001, 0x2aa30101, 0x55450001, 0x15510201, 0x55430001, 0x2aa10101, 0x55410001, 0x01550601, 0x553f0001, 0x2a9f0101, 0x553d0001, 0x154f0201, 0x553b0001, 0x2a9d0101, 0x55390001, 0x0aa70301, 0x55370001, 0x2a9b0101, 0x55350001, 0x154d0201, 0x55330001, 0x2a990101, 0x55310001, 0x05530401, 0x552f0001, 0x2a970101, 0x552d0001, 0x154b0201, 0x552b0001, 0x2a950101, 0x55290001, 0x0aa50301, 0x55270001, 0x2a930101, 0x55250001, 0x15490201, 0x55230001, 0x2a910101, 0x55210001, 0x02a90501, 0x551f0001, 0x2a8f0101, 0x551d0001, 0x15470201, 0x551b0001, 0x2a8d0101, 0x55190001, 0x0aa30301, 0x55170001, 0x2a8b0101, 0x55150001, 0x15450201, 0x55130001, 0x2a890101, 0x55110001, 0x05510401, 0x550f0001, 0x2a870101, 0x550d0001, 0x15430201, 0x550b0001, 0x2a850101, 0x55090001, 0x0aa10301, 0x55070001, 0x2a830101, 0x55050001, 0x15410201, 0x55030001, 0x2a810101, 0x55010001, + 0x00552601, 0x54ff0001, 0x2a7f0101, 0x54fd0001, 0x153f0201, 0x54fb0001, 0x2a7d0101, 0x54f90001, 0x0a9f0301, 0x54f70001, 0x2a7b0101, 0x54f50001, 0x153d0201, 0x54f30001, 0x2a790101, 0x54f10001, 0x054f0401, 0x54ef0001, 0x2a770101, 0x54ed0001, 0x153b0201, 0x54eb0001, 0x2a750101, 0x54e90001, 0x0a9d0301, 0x54e70001, 0x2a730101, 0x54e50001, 0x15390201, 0x54e30001, 0x2a710101, 0x54e10001, 0x02a70501, 0x54df0001, 0x2a6f0101, 0x54dd0001, 0x15370201, 0x54db0001, 0x2a6d0101, 0x54d90001, 0x0a9b0301, 0x54d70001, 0x2a6b0101, 0x54d50001, 0x15350201, 0x54d30001, 0x2a690101, 0x54d10001, 0x054d0401, 0x54cf0001, 0x2a670101, 0x54cd0001, 0x15330201, 0x54cb0001, 0x2a650101, 0x54c90001, 0x0a990301, 0x54c70001, 0x2a630101, 0x54c50001, 0x15310201, 0x54c30001, 0x2a610101, 0x54c10001, 0x01530601, 0x54bf0001, 0x2a5f0101, 0x54bd0001, 0x152f0201, 0x54bb0001, 0x2a5d0101, 0x54b90001, 0x0a970301, 0x54b70001, 0x2a5b0101, 0x54b50001, 0x152d0201, 0x54b30001, 0x2a590101, 0x54b10001, 0x054b0401, 0x54af0001, 0x2a570101, 0x54ad0001, 0x152b0201, 0x54ab0001, 0x2a550101, 0x54a90001, 0x0a950301, 0x54a70001, 0x2a530101, 0x54a50001, 0x15290201, 0x54a30001, 0x2a510101, 0x54a10001, 0x02a50501, 0x549f0001, 0x2a4f0101, 0x549d0001, 0x15270201, 0x549b0001, 0x2a4d0101, 0x54990001, 0x0a930301, 0x54970001, 0x2a4b0101, 0x54950001, 0x15250201, 0x54930001, 0x2a490101, 0x54910001, 0x05490401, 0x548f0001, 0x2a470101, 0x548d0001, 0x15230201, 0x548b0001, 0x2a450101, 0x54890001, 0x0a910301, 0x54870001, 0x2a430101, 0x54850001, 0x15210201, 0x54830001, 0x2a410101, 0x54810001, 0x00a91601, 0x547f0001, 0x2a3f0101, 0x547d0001, 0x151f0201, 0x547b0001, 0x2a3d0101, 0x54790001, 0x0a8f0301, 0x54770001, 0x2a3b0101, 0x54750001, 0x151d0201, 0x54730001, 0x2a390101, 0x54710001, 0x05470401, 0x546f0001, 0x2a370101, 0x546d0001, 0x151b0201, 0x546b0001, 0x2a350101, 0x54690001, 0x0a8d0301, 0x54670001, 0x2a330101, 0x54650001, 0x15190201, 0x54630001, 0x2a310101, 0x54610001, 0x02a30501, 0x545f0001, 0x2a2f0101, 0x545d0001, 0x15170201, 0x545b0001, 0x2a2d0101, 0x54590001, 0x0a8b0301, 0x54570001, 0x2a2b0101, 0x54550001, 0x15150201, 0x54530001, 0x2a290101, 0x54510001, 0x05450401, 0x544f0001, 0x2a270101, 0x544d0001, 0x15130201, 0x544b0001, 0x2a250101, 0x54490001, 0x0a890301, 0x54470001, 0x2a230101, 0x54450001, 0x15110201, 0x54430001, 0x2a210101, 0x54410001, 0x01510601, 0x543f0001, 0x2a1f0101, 0x543d0001, 0x150f0201, 0x543b0001, 0x2a1d0101, 0x54390001, 0x0a870301, 0x54370001, 0x2a1b0101, 0x54350001, 0x150d0201, 0x54330001, 0x2a190101, 0x54310001, 0x05430401, 0x542f0001, 0x2a170101, 0x542d0001, 0x150b0201, 0x542b0001, 0x2a150101, 0x54290001, 0x0a850301, 0x54270001, 0x2a130101, 0x54250001, 0x15090201, 0x54230001, 0x2a110101, 0x54210001, 0x02a10501, 0x541f0001, 0x2a0f0101, 0x541d0001, 0x15070201, 0x541b0001, 0x2a0d0101, 0x54190001, 0x0a830301, 0x54170001, 0x2a0b0101, 0x54150001, 0x15050201, 0x54130001, 0x2a090101, 0x54110001, 0x05410401, 0x540f0001, 0x2a070101, 0x540d0001, 0x15030201, 0x540b0001, 0x2a050101, 0x54090001, 0x0a810301, 0x54070001, 0x2a030101, 0x54050001, 0x15010201, 0x54030001, 0x2a010101, 0x54010001, + 0x00154601, 0x53ff0001, 0x29ff0101, 0x53fd0001, 0x14ff0201, 0x53fb0001, 0x29fd0101, 0x53f90001, 0x0a7f0301, 0x53f70001, 0x29fb0101, 0x53f50001, 0x14fd0201, 0x53f30001, 0x29f90101, 0x53f10001, 0x053f0401, 0x53ef0001, 0x29f70101, 0x53ed0001, 0x14fb0201, 0x53eb0001, 0x29f50101, 0x53e90001, 0x0a7d0301, 0x53e70001, 0x29f30101, 0x53e50001, 0x14f90201, 0x53e30001, 0x29f10101, 0x53e10001, 0x029f0501, 0x53df0001, 0x29ef0101, 0x53dd0001, 0x14f70201, 0x53db0001, 0x29ed0101, 0x53d90001, 0x0a7b0301, 0x53d70001, 0x29eb0101, 0x53d50001, 0x14f50201, 0x53d30001, 0x29e90101, 0x53d10001, 0x053d0401, 0x53cf0001, 0x29e70101, 0x53cd0001, 0x14f30201, 0x53cb0001, 0x29e50101, 0x53c90001, 0x0a790301, 0x53c70001, 0x29e30101, 0x53c50001, 0x14f10201, 0x53c30001, 0x29e10101, 0x53c10001, 0x014f0601, 0x53bf0001, 0x29df0101, 0x53bd0001, 0x14ef0201, 0x53bb0001, 0x29dd0101, 0x53b90001, 0x0a770301, 0x53b70001, 0x29db0101, 0x53b50001, 0x14ed0201, 0x53b30001, 0x29d90101, 0x53b10001, 0x053b0401, 0x53af0001, 0x29d70101, 0x53ad0001, 0x14eb0201, 0x53ab0001, 0x29d50101, 0x53a90001, 0x0a750301, 0x53a70001, 0x29d30101, 0x53a50001, 0x14e90201, 0x53a30001, 0x29d10101, 0x53a10001, 0x029d0501, 0x539f0001, 0x29cf0101, 0x539d0001, 0x14e70201, 0x539b0001, 0x29cd0101, 0x53990001, 0x0a730301, 0x53970001, 0x29cb0101, 0x53950001, 0x14e50201, 0x53930001, 0x29c90101, 0x53910001, 0x05390401, 0x538f0001, 0x29c70101, 0x538d0001, 0x14e30201, 0x538b0001, 0x29c50101, 0x53890001, 0x0a710301, 0x53870001, 0x29c30101, 0x53850001, 0x14e10201, 0x53830001, 0x29c10101, 0x53810001, 0x00a71601, 0x537f0001, 0x29bf0101, 0x537d0001, 0x14df0201, 0x537b0001, 0x29bd0101, 0x53790001, 0x0a6f0301, 0x53770001, 0x29bb0101, 0x53750001, 0x14dd0201, 0x53730001, 0x29b90101, 0x53710001, 0x05370401, 0x536f0001, 0x29b70101, 0x536d0001, 0x14db0201, 0x536b0001, 0x29b50101, 0x53690001, 0x0a6d0301, 0x53670001, 0x29b30101, 0x53650001, 0x14d90201, 0x53630001, 0x29b10101, 0x53610001, 0x029b0501, 0x535f0001, 0x29af0101, 0x535d0001, 0x14d70201, 0x535b0001, 0x29ad0101, 0x53590001, 0x0a6b0301, 0x53570001, 0x29ab0101, 0x53550001, 0x14d50201, 0x53530001, 0x29a90101, 0x53510001, 0x05350401, 0x534f0001, 0x29a70101, 0x534d0001, 0x14d30201, 0x534b0001, 0x29a50101, 0x53490001, 0x0a690301, 0x53470001, 0x29a30101, 0x53450001, 0x14d10201, 0x53430001, 0x29a10101, 0x53410001, 0x014d0601, 0x533f0001, 0x299f0101, 0x533d0001, 0x14cf0201, 0x533b0001, 0x299d0101, 0x53390001, 0x0a670301, 0x53370001, 0x299b0101, 0x53350001, 0x14cd0201, 0x53330001, 0x29990101, 0x53310001, 0x05330401, 0x532f0001, 0x29970101, 0x532d0001, 0x14cb0201, 0x532b0001, 0x29950101, 0x53290001, 0x0a650301, 0x53270001, 0x29930101, 0x53250001, 0x14c90201, 0x53230001, 0x29910101, 0x53210001, 0x02990501, 0x531f0001, 0x298f0101, 0x531d0001, 0x14c70201, 0x531b0001, 0x298d0101, 0x53190001, 0x0a630301, 0x53170001, 0x298b0101, 0x53150001, 0x14c50201, 0x53130001, 0x29890101, 0x53110001, 0x05310401, 0x530f0001, 0x29870101, 0x530d0001, 0x14c30201, 0x530b0001, 0x29850101, 0x53090001, 0x0a610301, 0x53070001, 0x29830101, 0x53050001, 0x14c10201, 0x53030001, 0x29810101, 0x53010001, + 0x00532601, 0x52ff0001, 0x297f0101, 0x52fd0001, 0x14bf0201, 0x52fb0001, 0x297d0101, 0x52f90001, 0x0a5f0301, 0x52f70001, 0x297b0101, 0x52f50001, 0x14bd0201, 0x52f30001, 0x29790101, 0x52f10001, 0x052f0401, 0x52ef0001, 0x29770101, 0x52ed0001, 0x14bb0201, 0x52eb0001, 0x29750101, 0x52e90001, 0x0a5d0301, 0x52e70001, 0x29730101, 0x52e50001, 0x14b90201, 0x52e30001, 0x29710101, 0x52e10001, 0x02970501, 0x52df0001, 0x296f0101, 0x52dd0001, 0x14b70201, 0x52db0001, 0x296d0101, 0x52d90001, 0x0a5b0301, 0x52d70001, 0x296b0101, 0x52d50001, 0x14b50201, 0x52d30001, 0x29690101, 0x52d10001, 0x052d0401, 0x52cf0001, 0x29670101, 0x52cd0001, 0x14b30201, 0x52cb0001, 0x29650101, 0x52c90001, 0x0a590301, 0x52c70001, 0x29630101, 0x52c50001, 0x14b10201, 0x52c30001, 0x29610101, 0x52c10001, 0x014b0601, 0x52bf0001, 0x295f0101, 0x52bd0001, 0x14af0201, 0x52bb0001, 0x295d0101, 0x52b90001, 0x0a570301, 0x52b70001, 0x295b0101, 0x52b50001, 0x14ad0201, 0x52b30001, 0x29590101, 0x52b10001, 0x052b0401, 0x52af0001, 0x29570101, 0x52ad0001, 0x14ab0201, 0x52ab0001, 0x29550101, 0x52a90001, 0x0a550301, 0x52a70001, 0x29530101, 0x52a50001, 0x14a90201, 0x52a30001, 0x29510101, 0x52a10001, 0x02950501, 0x529f0001, 0x294f0101, 0x529d0001, 0x14a70201, 0x529b0001, 0x294d0101, 0x52990001, 0x0a530301, 0x52970001, 0x294b0101, 0x52950001, 0x14a50201, 0x52930001, 0x29490101, 0x52910001, 0x05290401, 0x528f0001, 0x29470101, 0x528d0001, 0x14a30201, 0x528b0001, 0x29450101, 0x52890001, 0x0a510301, 0x52870001, 0x29430101, 0x52850001, 0x14a10201, 0x52830001, 0x29410101, 0x52810001, 0x00a51601, 0x527f0001, 0x293f0101, 0x527d0001, 0x149f0201, 0x527b0001, 0x293d0101, 0x52790001, 0x0a4f0301, 0x52770001, 0x293b0101, 0x52750001, 0x149d0201, 0x52730001, 0x29390101, 0x52710001, 0x05270401, 0x526f0001, 0x29370101, 0x526d0001, 0x149b0201, 0x526b0001, 0x29350101, 0x52690001, 0x0a4d0301, 0x52670001, 0x29330101, 0x52650001, 0x14990201, 0x52630001, 0x29310101, 0x52610001, 0x02930501, 0x525f0001, 0x292f0101, 0x525d0001, 0x14970201, 0x525b0001, 0x292d0101, 0x52590001, 0x0a4b0301, 0x52570001, 0x292b0101, 0x52550001, 0x14950201, 0x52530001, 0x29290101, 0x52510001, 0x05250401, 0x524f0001, 0x29270101, 0x524d0001, 0x14930201, 0x524b0001, 0x29250101, 0x52490001, 0x0a490301, 0x52470001, 0x29230101, 0x52450001, 0x14910201, 0x52430001, 0x29210101, 0x52410001, 0x01490601, 0x523f0001, 0x291f0101, 0x523d0001, 0x148f0201, 0x523b0001, 0x291d0101, 0x52390001, 0x0a470301, 0x52370001, 0x291b0101, 0x52350001, 0x148d0201, 0x52330001, 0x29190101, 0x52310001, 0x05230401, 0x522f0001, 0x29170101, 0x522d0001, 0x148b0201, 0x522b0001, 0x29150101, 0x52290001, 0x0a450301, 0x52270001, 0x29130101, 0x52250001, 0x14890201, 0x52230001, 0x29110101, 0x52210001, 0x02910501, 0x521f0001, 0x290f0101, 0x521d0001, 0x14870201, 0x521b0001, 0x290d0101, 0x52190001, 0x0a430301, 0x52170001, 0x290b0101, 0x52150001, 0x14850201, 0x52130001, 0x29090101, 0x52110001, 0x05210401, 0x520f0001, 0x29070101, 0x520d0001, 0x14830201, 0x520b0001, 0x29050101, 0x52090001, 0x0a410301, 0x52070001, 0x29030101, 0x52050001, 0x14810201, 0x52030001, 0x29010101, 0x52010001, + 0x00293601, 0x51ff0001, 0x28ff0101, 0x51fd0001, 0x147f0201, 0x51fb0001, 0x28fd0101, 0x51f90001, 0x0a3f0301, 0x51f70001, 0x28fb0101, 0x51f50001, 0x147d0201, 0x51f30001, 0x28f90101, 0x51f10001, 0x051f0401, 0x51ef0001, 0x28f70101, 0x51ed0001, 0x147b0201, 0x51eb0001, 0x28f50101, 0x51e90001, 0x0a3d0301, 0x51e70001, 0x28f30101, 0x51e50001, 0x14790201, 0x51e30001, 0x28f10101, 0x51e10001, 0x028f0501, 0x51df0001, 0x28ef0101, 0x51dd0001, 0x14770201, 0x51db0001, 0x28ed0101, 0x51d90001, 0x0a3b0301, 0x51d70001, 0x28eb0101, 0x51d50001, 0x14750201, 0x51d30001, 0x28e90101, 0x51d10001, 0x051d0401, 0x51cf0001, 0x28e70101, 0x51cd0001, 0x14730201, 0x51cb0001, 0x28e50101, 0x51c90001, 0x0a390301, 0x51c70001, 0x28e30101, 0x51c50001, 0x14710201, 0x51c30001, 0x28e10101, 0x51c10001, 0x01470601, 0x51bf0001, 0x28df0101, 0x51bd0001, 0x146f0201, 0x51bb0001, 0x28dd0101, 0x51b90001, 0x0a370301, 0x51b70001, 0x28db0101, 0x51b50001, 0x146d0201, 0x51b30001, 0x28d90101, 0x51b10001, 0x051b0401, 0x51af0001, 0x28d70101, 0x51ad0001, 0x146b0201, 0x51ab0001, 0x28d50101, 0x51a90001, 0x0a350301, 0x51a70001, 0x28d30101, 0x51a50001, 0x14690201, 0x51a30001, 0x28d10101, 0x51a10001, 0x028d0501, 0x519f0001, 0x28cf0101, 0x519d0001, 0x14670201, 0x519b0001, 0x28cd0101, 0x51990001, 0x0a330301, 0x51970001, 0x28cb0101, 0x51950001, 0x14650201, 0x51930001, 0x28c90101, 0x51910001, 0x05190401, 0x518f0001, 0x28c70101, 0x518d0001, 0x14630201, 0x518b0001, 0x28c50101, 0x51890001, 0x0a310301, 0x51870001, 0x28c30101, 0x51850001, 0x14610201, 0x51830001, 0x28c10101, 0x51810001, 0x00a31601, 0x517f0001, 0x28bf0101, 0x517d0001, 0x145f0201, 0x517b0001, 0x28bd0101, 0x51790001, 0x0a2f0301, 0x51770001, 0x28bb0101, 0x51750001, 0x145d0201, 0x51730001, 0x28b90101, 0x51710001, 0x05170401, 0x516f0001, 0x28b70101, 0x516d0001, 0x145b0201, 0x516b0001, 0x28b50101, 0x51690001, 0x0a2d0301, 0x51670001, 0x28b30101, 0x51650001, 0x14590201, 0x51630001, 0x28b10101, 0x51610001, 0x028b0501, 0x515f0001, 0x28af0101, 0x515d0001, 0x14570201, 0x515b0001, 0x28ad0101, 0x51590001, 0x0a2b0301, 0x51570001, 0x28ab0101, 0x51550001, 0x14550201, 0x51530001, 0x28a90101, 0x51510001, 0x05150401, 0x514f0001, 0x28a70101, 0x514d0001, 0x14530201, 0x514b0001, 0x28a50101, 0x51490001, 0x0a290301, 0x51470001, 0x28a30101, 0x51450001, 0x14510201, 0x51430001, 0x28a10101, 0x51410001, 0x01450601, 0x513f0001, 0x289f0101, 0x513d0001, 0x144f0201, 0x513b0001, 0x289d0101, 0x51390001, 0x0a270301, 0x51370001, 0x289b0101, 0x51350001, 0x144d0201, 0x51330001, 0x28990101, 0x51310001, 0x05130401, 0x512f0001, 0x28970101, 0x512d0001, 0x144b0201, 0x512b0001, 0x28950101, 0x51290001, 0x0a250301, 0x51270001, 0x28930101, 0x51250001, 0x14490201, 0x51230001, 0x28910101, 0x51210001, 0x02890501, 0x511f0001, 0x288f0101, 0x511d0001, 0x14470201, 0x511b0001, 0x288d0101, 0x51190001, 0x0a230301, 0x51170001, 0x288b0101, 0x51150001, 0x14450201, 0x51130001, 0x28890101, 0x51110001, 0x05110401, 0x510f0001, 0x28870101, 0x510d0001, 0x14430201, 0x510b0001, 0x28850101, 0x51090001, 0x0a210301, 0x51070001, 0x28830101, 0x51050001, 0x14410201, 0x51030001, 0x28810101, 0x51010001, + 0x00512601, 0x50ff0001, 0x287f0101, 0x50fd0001, 0x143f0201, 0x50fb0001, 0x287d0101, 0x50f90001, 0x0a1f0301, 0x50f70001, 0x287b0101, 0x50f50001, 0x143d0201, 0x50f30001, 0x28790101, 0x50f10001, 0x050f0401, 0x50ef0001, 0x28770101, 0x50ed0001, 0x143b0201, 0x50eb0001, 0x28750101, 0x50e90001, 0x0a1d0301, 0x50e70001, 0x28730101, 0x50e50001, 0x14390201, 0x50e30001, 0x28710101, 0x50e10001, 0x02870501, 0x50df0001, 0x286f0101, 0x50dd0001, 0x14370201, 0x50db0001, 0x286d0101, 0x50d90001, 0x0a1b0301, 0x50d70001, 0x286b0101, 0x50d50001, 0x14350201, 0x50d30001, 0x28690101, 0x50d10001, 0x050d0401, 0x50cf0001, 0x28670101, 0x50cd0001, 0x14330201, 0x50cb0001, 0x28650101, 0x50c90001, 0x0a190301, 0x50c70001, 0x28630101, 0x50c50001, 0x14310201, 0x50c30001, 0x28610101, 0x50c10001, 0x01430601, 0x50bf0001, 0x285f0101, 0x50bd0001, 0x142f0201, 0x50bb0001, 0x285d0101, 0x50b90001, 0x0a170301, 0x50b70001, 0x285b0101, 0x50b50001, 0x142d0201, 0x50b30001, 0x28590101, 0x50b10001, 0x050b0401, 0x50af0001, 0x28570101, 0x50ad0001, 0x142b0201, 0x50ab0001, 0x28550101, 0x50a90001, 0x0a150301, 0x50a70001, 0x28530101, 0x50a50001, 0x14290201, 0x50a30001, 0x28510101, 0x50a10001, 0x02850501, 0x509f0001, 0x284f0101, 0x509d0001, 0x14270201, 0x509b0001, 0x284d0101, 0x50990001, 0x0a130301, 0x50970001, 0x284b0101, 0x50950001, 0x14250201, 0x50930001, 0x28490101, 0x50910001, 0x05090401, 0x508f0001, 0x28470101, 0x508d0001, 0x14230201, 0x508b0001, 0x28450101, 0x50890001, 0x0a110301, 0x50870001, 0x28430101, 0x50850001, 0x14210201, 0x50830001, 0x28410101, 0x50810001, 0x00a11601, 0x507f0001, 0x283f0101, 0x507d0001, 0x141f0201, 0x507b0001, 0x283d0101, 0x50790001, 0x0a0f0301, 0x50770001, 0x283b0101, 0x50750001, 0x141d0201, 0x50730001, 0x28390101, 0x50710001, 0x05070401, 0x506f0001, 0x28370101, 0x506d0001, 0x141b0201, 0x506b0001, 0x28350101, 0x50690001, 0x0a0d0301, 0x50670001, 0x28330101, 0x50650001, 0x14190201, 0x50630001, 0x28310101, 0x50610001, 0x02830501, 0x505f0001, 0x282f0101, 0x505d0001, 0x14170201, 0x505b0001, 0x282d0101, 0x50590001, 0x0a0b0301, 0x50570001, 0x282b0101, 0x50550001, 0x14150201, 0x50530001, 0x28290101, 0x50510001, 0x05050401, 0x504f0001, 0x28270101, 0x504d0001, 0x14130201, 0x504b0001, 0x28250101, 0x50490001, 0x0a090301, 0x50470001, 0x28230101, 0x50450001, 0x14110201, 0x50430001, 0x28210101, 0x50410001, 0x01410601, 0x503f0001, 0x281f0101, 0x503d0001, 0x140f0201, 0x503b0001, 0x281d0101, 0x50390001, 0x0a070301, 0x50370001, 0x281b0101, 0x50350001, 0x140d0201, 0x50330001, 0x28190101, 0x50310001, 0x05030401, 0x502f0001, 0x28170101, 0x502d0001, 0x140b0201, 0x502b0001, 0x28150101, 0x50290001, 0x0a050301, 0x50270001, 0x28130101, 0x50250001, 0x14090201, 0x50230001, 0x28110101, 0x50210001, 0x02810501, 0x501f0001, 0x280f0101, 0x501d0001, 0x14070201, 0x501b0001, 0x280d0101, 0x50190001, 0x0a030301, 0x50170001, 0x280b0101, 0x50150001, 0x14050201, 0x50130001, 0x28090101, 0x50110001, 0x05010401, 0x500f0001, 0x28070101, 0x500d0001, 0x14030201, 0x500b0001, 0x28050101, 0x50090001, 0x0a010301, 0x50070001, 0x28030101, 0x50050001, 0x14010201, 0x50030001, 0x28010101, 0x50010001, + 0x00056601, 0x4fff0001, 0x27ff0101, 0x4ffd0001, 0x13ff0201, 0x4ffb0001, 0x27fd0101, 0x4ff90001, 0x09ff0301, 0x4ff70001, 0x27fb0101, 0x4ff50001, 0x13fd0201, 0x4ff30001, 0x27f90101, 0x4ff10001, 0x04ff0401, 0x4fef0001, 0x27f70101, 0x4fed0001, 0x13fb0201, 0x4feb0001, 0x27f50101, 0x4fe90001, 0x09fd0301, 0x4fe70001, 0x27f30101, 0x4fe50001, 0x13f90201, 0x4fe30001, 0x27f10101, 0x4fe10001, 0x027f0501, 0x4fdf0001, 0x27ef0101, 0x4fdd0001, 0x13f70201, 0x4fdb0001, 0x27ed0101, 0x4fd90001, 0x09fb0301, 0x4fd70001, 0x27eb0101, 0x4fd50001, 0x13f50201, 0x4fd30001, 0x27e90101, 0x4fd10001, 0x04fd0401, 0x4fcf0001, 0x27e70101, 0x4fcd0001, 0x13f30201, 0x4fcb0001, 0x27e50101, 0x4fc90001, 0x09f90301, 0x4fc70001, 0x27e30101, 0x4fc50001, 0x13f10201, 0x4fc30001, 0x27e10101, 0x4fc10001, 0x013f0601, 0x4fbf0001, 0x27df0101, 0x4fbd0001, 0x13ef0201, 0x4fbb0001, 0x27dd0101, 0x4fb90001, 0x09f70301, 0x4fb70001, 0x27db0101, 0x4fb50001, 0x13ed0201, 0x4fb30001, 0x27d90101, 0x4fb10001, 0x04fb0401, 0x4faf0001, 0x27d70101, 0x4fad0001, 0x13eb0201, 0x4fab0001, 0x27d50101, 0x4fa90001, 0x09f50301, 0x4fa70001, 0x27d30101, 0x4fa50001, 0x13e90201, 0x4fa30001, 0x27d10101, 0x4fa10001, 0x027d0501, 0x4f9f0001, 0x27cf0101, 0x4f9d0001, 0x13e70201, 0x4f9b0001, 0x27cd0101, 0x4f990001, 0x09f30301, 0x4f970001, 0x27cb0101, 0x4f950001, 0x13e50201, 0x4f930001, 0x27c90101, 0x4f910001, 0x04f90401, 0x4f8f0001, 0x27c70101, 0x4f8d0001, 0x13e30201, 0x4f8b0001, 0x27c50101, 0x4f890001, 0x09f10301, 0x4f870001, 0x27c30101, 0x4f850001, 0x13e10201, 0x4f830001, 0x27c10101, 0x4f810001, 0x009f1601, 0x4f7f0001, 0x27bf0101, 0x4f7d0001, 0x13df0201, 0x4f7b0001, 0x27bd0101, 0x4f790001, 0x09ef0301, 0x4f770001, 0x27bb0101, 0x4f750001, 0x13dd0201, 0x4f730001, 0x27b90101, 0x4f710001, 0x04f70401, 0x4f6f0001, 0x27b70101, 0x4f6d0001, 0x13db0201, 0x4f6b0001, 0x27b50101, 0x4f690001, 0x09ed0301, 0x4f670001, 0x27b30101, 0x4f650001, 0x13d90201, 0x4f630001, 0x27b10101, 0x4f610001, 0x027b0501, 0x4f5f0001, 0x27af0101, 0x4f5d0001, 0x13d70201, 0x4f5b0001, 0x27ad0101, 0x4f590001, 0x09eb0301, 0x4f570001, 0x27ab0101, 0x4f550001, 0x13d50201, 0x4f530001, 0x27a90101, 0x4f510001, 0x04f50401, 0x4f4f0001, 0x27a70101, 0x4f4d0001, 0x13d30201, 0x4f4b0001, 0x27a50101, 0x4f490001, 0x09e90301, 0x4f470001, 0x27a30101, 0x4f450001, 0x13d10201, 0x4f430001, 0x27a10101, 0x4f410001, 0x013d0601, 0x4f3f0001, 0x279f0101, 0x4f3d0001, 0x13cf0201, 0x4f3b0001, 0x279d0101, 0x4f390001, 0x09e70301, 0x4f370001, 0x279b0101, 0x4f350001, 0x13cd0201, 0x4f330001, 0x27990101, 0x4f310001, 0x04f30401, 0x4f2f0001, 0x27970101, 0x4f2d0001, 0x13cb0201, 0x4f2b0001, 0x27950101, 0x4f290001, 0x09e50301, 0x4f270001, 0x27930101, 0x4f250001, 0x13c90201, 0x4f230001, 0x27910101, 0x4f210001, 0x02790501, 0x4f1f0001, 0x278f0101, 0x4f1d0001, 0x13c70201, 0x4f1b0001, 0x278d0101, 0x4f190001, 0x09e30301, 0x4f170001, 0x278b0101, 0x4f150001, 0x13c50201, 0x4f130001, 0x27890101, 0x4f110001, 0x04f10401, 0x4f0f0001, 0x27870101, 0x4f0d0001, 0x13c30201, 0x4f0b0001, 0x27850101, 0x4f090001, 0x09e10301, 0x4f070001, 0x27830101, 0x4f050001, 0x13c10201, 0x4f030001, 0x27810101, 0x4f010001, + 0x004f2601, 0x4eff0001, 0x277f0101, 0x4efd0001, 0x13bf0201, 0x4efb0001, 0x277d0101, 0x4ef90001, 0x09df0301, 0x4ef70001, 0x277b0101, 0x4ef50001, 0x13bd0201, 0x4ef30001, 0x27790101, 0x4ef10001, 0x04ef0401, 0x4eef0001, 0x27770101, 0x4eed0001, 0x13bb0201, 0x4eeb0001, 0x27750101, 0x4ee90001, 0x09dd0301, 0x4ee70001, 0x27730101, 0x4ee50001, 0x13b90201, 0x4ee30001, 0x27710101, 0x4ee10001, 0x02770501, 0x4edf0001, 0x276f0101, 0x4edd0001, 0x13b70201, 0x4edb0001, 0x276d0101, 0x4ed90001, 0x09db0301, 0x4ed70001, 0x276b0101, 0x4ed50001, 0x13b50201, 0x4ed30001, 0x27690101, 0x4ed10001, 0x04ed0401, 0x4ecf0001, 0x27670101, 0x4ecd0001, 0x13b30201, 0x4ecb0001, 0x27650101, 0x4ec90001, 0x09d90301, 0x4ec70001, 0x27630101, 0x4ec50001, 0x13b10201, 0x4ec30001, 0x27610101, 0x4ec10001, 0x013b0601, 0x4ebf0001, 0x275f0101, 0x4ebd0001, 0x13af0201, 0x4ebb0001, 0x275d0101, 0x4eb90001, 0x09d70301, 0x4eb70001, 0x275b0101, 0x4eb50001, 0x13ad0201, 0x4eb30001, 0x27590101, 0x4eb10001, 0x04eb0401, 0x4eaf0001, 0x27570101, 0x4ead0001, 0x13ab0201, 0x4eab0001, 0x27550101, 0x4ea90001, 0x09d50301, 0x4ea70001, 0x27530101, 0x4ea50001, 0x13a90201, 0x4ea30001, 0x27510101, 0x4ea10001, 0x02750501, 0x4e9f0001, 0x274f0101, 0x4e9d0001, 0x13a70201, 0x4e9b0001, 0x274d0101, 0x4e990001, 0x09d30301, 0x4e970001, 0x274b0101, 0x4e950001, 0x13a50201, 0x4e930001, 0x27490101, 0x4e910001, 0x04e90401, 0x4e8f0001, 0x27470101, 0x4e8d0001, 0x13a30201, 0x4e8b0001, 0x27450101, 0x4e890001, 0x09d10301, 0x4e870001, 0x27430101, 0x4e850001, 0x13a10201, 0x4e830001, 0x27410101, 0x4e810001, 0x009d1601, 0x4e7f0001, 0x273f0101, 0x4e7d0001, 0x139f0201, 0x4e7b0001, 0x273d0101, 0x4e790001, 0x09cf0301, 0x4e770001, 0x273b0101, 0x4e750001, 0x139d0201, 0x4e730001, 0x27390101, 0x4e710001, 0x04e70401, 0x4e6f0001, 0x27370101, 0x4e6d0001, 0x139b0201, 0x4e6b0001, 0x27350101, 0x4e690001, 0x09cd0301, 0x4e670001, 0x27330101, 0x4e650001, 0x13990201, 0x4e630001, 0x27310101, 0x4e610001, 0x02730501, 0x4e5f0001, 0x272f0101, 0x4e5d0001, 0x13970201, 0x4e5b0001, 0x272d0101, 0x4e590001, 0x09cb0301, 0x4e570001, 0x272b0101, 0x4e550001, 0x13950201, 0x4e530001, 0x27290101, 0x4e510001, 0x04e50401, 0x4e4f0001, 0x27270101, 0x4e4d0001, 0x13930201, 0x4e4b0001, 0x27250101, 0x4e490001, 0x09c90301, 0x4e470001, 0x27230101, 0x4e450001, 0x13910201, 0x4e430001, 0x27210101, 0x4e410001, 0x01390601, 0x4e3f0001, 0x271f0101, 0x4e3d0001, 0x138f0201, 0x4e3b0001, 0x271d0101, 0x4e390001, 0x09c70301, 0x4e370001, 0x271b0101, 0x4e350001, 0x138d0201, 0x4e330001, 0x27190101, 0x4e310001, 0x04e30401, 0x4e2f0001, 0x27170101, 0x4e2d0001, 0x138b0201, 0x4e2b0001, 0x27150101, 0x4e290001, 0x09c50301, 0x4e270001, 0x27130101, 0x4e250001, 0x13890201, 0x4e230001, 0x27110101, 0x4e210001, 0x02710501, 0x4e1f0001, 0x270f0101, 0x4e1d0001, 0x13870201, 0x4e1b0001, 0x270d0101, 0x4e190001, 0x09c30301, 0x4e170001, 0x270b0101, 0x4e150001, 0x13850201, 0x4e130001, 0x27090101, 0x4e110001, 0x04e10401, 0x4e0f0001, 0x27070101, 0x4e0d0001, 0x13830201, 0x4e0b0001, 0x27050101, 0x4e090001, 0x09c10301, 0x4e070001, 0x27030101, 0x4e050001, 0x13810201, 0x4e030001, 0x27010101, 0x4e010001, + 0x00273601, 0x4dff0001, 0x26ff0101, 0x4dfd0001, 0x137f0201, 0x4dfb0001, 0x26fd0101, 0x4df90001, 0x09bf0301, 0x4df70001, 0x26fb0101, 0x4df50001, 0x137d0201, 0x4df30001, 0x26f90101, 0x4df10001, 0x04df0401, 0x4def0001, 0x26f70101, 0x4ded0001, 0x137b0201, 0x4deb0001, 0x26f50101, 0x4de90001, 0x09bd0301, 0x4de70001, 0x26f30101, 0x4de50001, 0x13790201, 0x4de30001, 0x26f10101, 0x4de10001, 0x026f0501, 0x4ddf0001, 0x26ef0101, 0x4ddd0001, 0x13770201, 0x4ddb0001, 0x26ed0101, 0x4dd90001, 0x09bb0301, 0x4dd70001, 0x26eb0101, 0x4dd50001, 0x13750201, 0x4dd30001, 0x26e90101, 0x4dd10001, 0x04dd0401, 0x4dcf0001, 0x26e70101, 0x4dcd0001, 0x13730201, 0x4dcb0001, 0x26e50101, 0x4dc90001, 0x09b90301, 0x4dc70001, 0x26e30101, 0x4dc50001, 0x13710201, 0x4dc30001, 0x26e10101, 0x4dc10001, 0x01370601, 0x4dbf0001, 0x26df0101, 0x4dbd0001, 0x136f0201, 0x4dbb0001, 0x26dd0101, 0x4db90001, 0x09b70301, 0x4db70001, 0x26db0101, 0x4db50001, 0x136d0201, 0x4db30001, 0x26d90101, 0x4db10001, 0x04db0401, 0x4daf0001, 0x26d70101, 0x4dad0001, 0x136b0201, 0x4dab0001, 0x26d50101, 0x4da90001, 0x09b50301, 0x4da70001, 0x26d30101, 0x4da50001, 0x13690201, 0x4da30001, 0x26d10101, 0x4da10001, 0x026d0501, 0x4d9f0001, 0x26cf0101, 0x4d9d0001, 0x13670201, 0x4d9b0001, 0x26cd0101, 0x4d990001, 0x09b30301, 0x4d970001, 0x26cb0101, 0x4d950001, 0x13650201, 0x4d930001, 0x26c90101, 0x4d910001, 0x04d90401, 0x4d8f0001, 0x26c70101, 0x4d8d0001, 0x13630201, 0x4d8b0001, 0x26c50101, 0x4d890001, 0x09b10301, 0x4d870001, 0x26c30101, 0x4d850001, 0x13610201, 0x4d830001, 0x26c10101, 0x4d810001, 0x009b1601, 0x4d7f0001, 0x26bf0101, 0x4d7d0001, 0x135f0201, 0x4d7b0001, 0x26bd0101, 0x4d790001, 0x09af0301, 0x4d770001, 0x26bb0101, 0x4d750001, 0x135d0201, 0x4d730001, 0x26b90101, 0x4d710001, 0x04d70401, 0x4d6f0001, 0x26b70101, 0x4d6d0001, 0x135b0201, 0x4d6b0001, 0x26b50101, 0x4d690001, 0x09ad0301, 0x4d670001, 0x26b30101, 0x4d650001, 0x13590201, 0x4d630001, 0x26b10101, 0x4d610001, 0x026b0501, 0x4d5f0001, 0x26af0101, 0x4d5d0001, 0x13570201, 0x4d5b0001, 0x26ad0101, 0x4d590001, 0x09ab0301, 0x4d570001, 0x26ab0101, 0x4d550001, 0x13550201, 0x4d530001, 0x26a90101, 0x4d510001, 0x04d50401, 0x4d4f0001, 0x26a70101, 0x4d4d0001, 0x13530201, 0x4d4b0001, 0x26a50101, 0x4d490001, 0x09a90301, 0x4d470001, 0x26a30101, 0x4d450001, 0x13510201, 0x4d430001, 0x26a10101, 0x4d410001, 0x01350601, 0x4d3f0001, 0x269f0101, 0x4d3d0001, 0x134f0201, 0x4d3b0001, 0x269d0101, 0x4d390001, 0x09a70301, 0x4d370001, 0x269b0101, 0x4d350001, 0x134d0201, 0x4d330001, 0x26990101, 0x4d310001, 0x04d30401, 0x4d2f0001, 0x26970101, 0x4d2d0001, 0x134b0201, 0x4d2b0001, 0x26950101, 0x4d290001, 0x09a50301, 0x4d270001, 0x26930101, 0x4d250001, 0x13490201, 0x4d230001, 0x26910101, 0x4d210001, 0x02690501, 0x4d1f0001, 0x268f0101, 0x4d1d0001, 0x13470201, 0x4d1b0001, 0x268d0101, 0x4d190001, 0x09a30301, 0x4d170001, 0x268b0101, 0x4d150001, 0x13450201, 0x4d130001, 0x26890101, 0x4d110001, 0x04d10401, 0x4d0f0001, 0x26870101, 0x4d0d0001, 0x13430201, 0x4d0b0001, 0x26850101, 0x4d090001, 0x09a10301, 0x4d070001, 0x26830101, 0x4d050001, 0x13410201, 0x4d030001, 0x26810101, 0x4d010001, + 0x004d2601, 0x4cff0001, 0x267f0101, 0x4cfd0001, 0x133f0201, 0x4cfb0001, 0x267d0101, 0x4cf90001, 0x099f0301, 0x4cf70001, 0x267b0101, 0x4cf50001, 0x133d0201, 0x4cf30001, 0x26790101, 0x4cf10001, 0x04cf0401, 0x4cef0001, 0x26770101, 0x4ced0001, 0x133b0201, 0x4ceb0001, 0x26750101, 0x4ce90001, 0x099d0301, 0x4ce70001, 0x26730101, 0x4ce50001, 0x13390201, 0x4ce30001, 0x26710101, 0x4ce10001, 0x02670501, 0x4cdf0001, 0x266f0101, 0x4cdd0001, 0x13370201, 0x4cdb0001, 0x266d0101, 0x4cd90001, 0x099b0301, 0x4cd70001, 0x266b0101, 0x4cd50001, 0x13350201, 0x4cd30001, 0x26690101, 0x4cd10001, 0x04cd0401, 0x4ccf0001, 0x26670101, 0x4ccd0001, 0x13330201, 0x4ccb0001, 0x26650101, 0x4cc90001, 0x09990301, 0x4cc70001, 0x26630101, 0x4cc50001, 0x13310201, 0x4cc30001, 0x26610101, 0x4cc10001, 0x01330601, 0x4cbf0001, 0x265f0101, 0x4cbd0001, 0x132f0201, 0x4cbb0001, 0x265d0101, 0x4cb90001, 0x09970301, 0x4cb70001, 0x265b0101, 0x4cb50001, 0x132d0201, 0x4cb30001, 0x26590101, 0x4cb10001, 0x04cb0401, 0x4caf0001, 0x26570101, 0x4cad0001, 0x132b0201, 0x4cab0001, 0x26550101, 0x4ca90001, 0x09950301, 0x4ca70001, 0x26530101, 0x4ca50001, 0x13290201, 0x4ca30001, 0x26510101, 0x4ca10001, 0x02650501, 0x4c9f0001, 0x264f0101, 0x4c9d0001, 0x13270201, 0x4c9b0001, 0x264d0101, 0x4c990001, 0x09930301, 0x4c970001, 0x264b0101, 0x4c950001, 0x13250201, 0x4c930001, 0x26490101, 0x4c910001, 0x04c90401, 0x4c8f0001, 0x26470101, 0x4c8d0001, 0x13230201, 0x4c8b0001, 0x26450101, 0x4c890001, 0x09910301, 0x4c870001, 0x26430101, 0x4c850001, 0x13210201, 0x4c830001, 0x26410101, 0x4c810001, 0x00991601, 0x4c7f0001, 0x263f0101, 0x4c7d0001, 0x131f0201, 0x4c7b0001, 0x263d0101, 0x4c790001, 0x098f0301, 0x4c770001, 0x263b0101, 0x4c750001, 0x131d0201, 0x4c730001, 0x26390101, 0x4c710001, 0x04c70401, 0x4c6f0001, 0x26370101, 0x4c6d0001, 0x131b0201, 0x4c6b0001, 0x26350101, 0x4c690001, 0x098d0301, 0x4c670001, 0x26330101, 0x4c650001, 0x13190201, 0x4c630001, 0x26310101, 0x4c610001, 0x02630501, 0x4c5f0001, 0x262f0101, 0x4c5d0001, 0x13170201, 0x4c5b0001, 0x262d0101, 0x4c590001, 0x098b0301, 0x4c570001, 0x262b0101, 0x4c550001, 0x13150201, 0x4c530001, 0x26290101, 0x4c510001, 0x04c50401, 0x4c4f0001, 0x26270101, 0x4c4d0001, 0x13130201, 0x4c4b0001, 0x26250101, 0x4c490001, 0x09890301, 0x4c470001, 0x26230101, 0x4c450001, 0x13110201, 0x4c430001, 0x26210101, 0x4c410001, 0x01310601, 0x4c3f0001, 0x261f0101, 0x4c3d0001, 0x130f0201, 0x4c3b0001, 0x261d0101, 0x4c390001, 0x09870301, 0x4c370001, 0x261b0101, 0x4c350001, 0x130d0201, 0x4c330001, 0x26190101, 0x4c310001, 0x04c30401, 0x4c2f0001, 0x26170101, 0x4c2d0001, 0x130b0201, 0x4c2b0001, 0x26150101, 0x4c290001, 0x09850301, 0x4c270001, 0x26130101, 0x4c250001, 0x13090201, 0x4c230001, 0x26110101, 0x4c210001, 0x02610501, 0x4c1f0001, 0x260f0101, 0x4c1d0001, 0x13070201, 0x4c1b0001, 0x260d0101, 0x4c190001, 0x09830301, 0x4c170001, 0x260b0101, 0x4c150001, 0x13050201, 0x4c130001, 0x26090101, 0x4c110001, 0x04c10401, 0x4c0f0001, 0x26070101, 0x4c0d0001, 0x13030201, 0x4c0b0001, 0x26050101, 0x4c090001, 0x09810301, 0x4c070001, 0x26030101, 0x4c050001, 0x13010201, 0x4c030001, 0x26010101, 0x4c010001, + 0x00134601, 0x4bff0001, 0x25ff0101, 0x4bfd0001, 0x12ff0201, 0x4bfb0001, 0x25fd0101, 0x4bf90001, 0x097f0301, 0x4bf70001, 0x25fb0101, 0x4bf50001, 0x12fd0201, 0x4bf30001, 0x25f90101, 0x4bf10001, 0x04bf0401, 0x4bef0001, 0x25f70101, 0x4bed0001, 0x12fb0201, 0x4beb0001, 0x25f50101, 0x4be90001, 0x097d0301, 0x4be70001, 0x25f30101, 0x4be50001, 0x12f90201, 0x4be30001, 0x25f10101, 0x4be10001, 0x025f0501, 0x4bdf0001, 0x25ef0101, 0x4bdd0001, 0x12f70201, 0x4bdb0001, 0x25ed0101, 0x4bd90001, 0x097b0301, 0x4bd70001, 0x25eb0101, 0x4bd50001, 0x12f50201, 0x4bd30001, 0x25e90101, 0x4bd10001, 0x04bd0401, 0x4bcf0001, 0x25e70101, 0x4bcd0001, 0x12f30201, 0x4bcb0001, 0x25e50101, 0x4bc90001, 0x09790301, 0x4bc70001, 0x25e30101, 0x4bc50001, 0x12f10201, 0x4bc30001, 0x25e10101, 0x4bc10001, 0x012f0601, 0x4bbf0001, 0x25df0101, 0x4bbd0001, 0x12ef0201, 0x4bbb0001, 0x25dd0101, 0x4bb90001, 0x09770301, 0x4bb70001, 0x25db0101, 0x4bb50001, 0x12ed0201, 0x4bb30001, 0x25d90101, 0x4bb10001, 0x04bb0401, 0x4baf0001, 0x25d70101, 0x4bad0001, 0x12eb0201, 0x4bab0001, 0x25d50101, 0x4ba90001, 0x09750301, 0x4ba70001, 0x25d30101, 0x4ba50001, 0x12e90201, 0x4ba30001, 0x25d10101, 0x4ba10001, 0x025d0501, 0x4b9f0001, 0x25cf0101, 0x4b9d0001, 0x12e70201, 0x4b9b0001, 0x25cd0101, 0x4b990001, 0x09730301, 0x4b970001, 0x25cb0101, 0x4b950001, 0x12e50201, 0x4b930001, 0x25c90101, 0x4b910001, 0x04b90401, 0x4b8f0001, 0x25c70101, 0x4b8d0001, 0x12e30201, 0x4b8b0001, 0x25c50101, 0x4b890001, 0x09710301, 0x4b870001, 0x25c30101, 0x4b850001, 0x12e10201, 0x4b830001, 0x25c10101, 0x4b810001, 0x00971601, 0x4b7f0001, 0x25bf0101, 0x4b7d0001, 0x12df0201, 0x4b7b0001, 0x25bd0101, 0x4b790001, 0x096f0301, 0x4b770001, 0x25bb0101, 0x4b750001, 0x12dd0201, 0x4b730001, 0x25b90101, 0x4b710001, 0x04b70401, 0x4b6f0001, 0x25b70101, 0x4b6d0001, 0x12db0201, 0x4b6b0001, 0x25b50101, 0x4b690001, 0x096d0301, 0x4b670001, 0x25b30101, 0x4b650001, 0x12d90201, 0x4b630001, 0x25b10101, 0x4b610001, 0x025b0501, 0x4b5f0001, 0x25af0101, 0x4b5d0001, 0x12d70201, 0x4b5b0001, 0x25ad0101, 0x4b590001, 0x096b0301, 0x4b570001, 0x25ab0101, 0x4b550001, 0x12d50201, 0x4b530001, 0x25a90101, 0x4b510001, 0x04b50401, 0x4b4f0001, 0x25a70101, 0x4b4d0001, 0x12d30201, 0x4b4b0001, 0x25a50101, 0x4b490001, 0x09690301, 0x4b470001, 0x25a30101, 0x4b450001, 0x12d10201, 0x4b430001, 0x25a10101, 0x4b410001, 0x012d0601, 0x4b3f0001, 0x259f0101, 0x4b3d0001, 0x12cf0201, 0x4b3b0001, 0x259d0101, 0x4b390001, 0x09670301, 0x4b370001, 0x259b0101, 0x4b350001, 0x12cd0201, 0x4b330001, 0x25990101, 0x4b310001, 0x04b30401, 0x4b2f0001, 0x25970101, 0x4b2d0001, 0x12cb0201, 0x4b2b0001, 0x25950101, 0x4b290001, 0x09650301, 0x4b270001, 0x25930101, 0x4b250001, 0x12c90201, 0x4b230001, 0x25910101, 0x4b210001, 0x02590501, 0x4b1f0001, 0x258f0101, 0x4b1d0001, 0x12c70201, 0x4b1b0001, 0x258d0101, 0x4b190001, 0x09630301, 0x4b170001, 0x258b0101, 0x4b150001, 0x12c50201, 0x4b130001, 0x25890101, 0x4b110001, 0x04b10401, 0x4b0f0001, 0x25870101, 0x4b0d0001, 0x12c30201, 0x4b0b0001, 0x25850101, 0x4b090001, 0x09610301, 0x4b070001, 0x25830101, 0x4b050001, 0x12c10201, 0x4b030001, 0x25810101, 0x4b010001, + 0x004b2601, 0x4aff0001, 0x257f0101, 0x4afd0001, 0x12bf0201, 0x4afb0001, 0x257d0101, 0x4af90001, 0x095f0301, 0x4af70001, 0x257b0101, 0x4af50001, 0x12bd0201, 0x4af30001, 0x25790101, 0x4af10001, 0x04af0401, 0x4aef0001, 0x25770101, 0x4aed0001, 0x12bb0201, 0x4aeb0001, 0x25750101, 0x4ae90001, 0x095d0301, 0x4ae70001, 0x25730101, 0x4ae50001, 0x12b90201, 0x4ae30001, 0x25710101, 0x4ae10001, 0x02570501, 0x4adf0001, 0x256f0101, 0x4add0001, 0x12b70201, 0x4adb0001, 0x256d0101, 0x4ad90001, 0x095b0301, 0x4ad70001, 0x256b0101, 0x4ad50001, 0x12b50201, 0x4ad30001, 0x25690101, 0x4ad10001, 0x04ad0401, 0x4acf0001, 0x25670101, 0x4acd0001, 0x12b30201, 0x4acb0001, 0x25650101, 0x4ac90001, 0x09590301, 0x4ac70001, 0x25630101, 0x4ac50001, 0x12b10201, 0x4ac30001, 0x25610101, 0x4ac10001, 0x012b0601, 0x4abf0001, 0x255f0101, 0x4abd0001, 0x12af0201, 0x4abb0001, 0x255d0101, 0x4ab90001, 0x09570301, 0x4ab70001, 0x255b0101, 0x4ab50001, 0x12ad0201, 0x4ab30001, 0x25590101, 0x4ab10001, 0x04ab0401, 0x4aaf0001, 0x25570101, 0x4aad0001, 0x12ab0201, 0x4aab0001, 0x25550101, 0x4aa90001, 0x09550301, 0x4aa70001, 0x25530101, 0x4aa50001, 0x12a90201, 0x4aa30001, 0x25510101, 0x4aa10001, 0x02550501, 0x4a9f0001, 0x254f0101, 0x4a9d0001, 0x12a70201, 0x4a9b0001, 0x254d0101, 0x4a990001, 0x09530301, 0x4a970001, 0x254b0101, 0x4a950001, 0x12a50201, 0x4a930001, 0x25490101, 0x4a910001, 0x04a90401, 0x4a8f0001, 0x25470101, 0x4a8d0001, 0x12a30201, 0x4a8b0001, 0x25450101, 0x4a890001, 0x09510301, 0x4a870001, 0x25430101, 0x4a850001, 0x12a10201, 0x4a830001, 0x25410101, 0x4a810001, 0x00951601, 0x4a7f0001, 0x253f0101, 0x4a7d0001, 0x129f0201, 0x4a7b0001, 0x253d0101, 0x4a790001, 0x094f0301, 0x4a770001, 0x253b0101, 0x4a750001, 0x129d0201, 0x4a730001, 0x25390101, 0x4a710001, 0x04a70401, 0x4a6f0001, 0x25370101, 0x4a6d0001, 0x129b0201, 0x4a6b0001, 0x25350101, 0x4a690001, 0x094d0301, 0x4a670001, 0x25330101, 0x4a650001, 0x12990201, 0x4a630001, 0x25310101, 0x4a610001, 0x02530501, 0x4a5f0001, 0x252f0101, 0x4a5d0001, 0x12970201, 0x4a5b0001, 0x252d0101, 0x4a590001, 0x094b0301, 0x4a570001, 0x252b0101, 0x4a550001, 0x12950201, 0x4a530001, 0x25290101, 0x4a510001, 0x04a50401, 0x4a4f0001, 0x25270101, 0x4a4d0001, 0x12930201, 0x4a4b0001, 0x25250101, 0x4a490001, 0x09490301, 0x4a470001, 0x25230101, 0x4a450001, 0x12910201, 0x4a430001, 0x25210101, 0x4a410001, 0x01290601, 0x4a3f0001, 0x251f0101, 0x4a3d0001, 0x128f0201, 0x4a3b0001, 0x251d0101, 0x4a390001, 0x09470301, 0x4a370001, 0x251b0101, 0x4a350001, 0x128d0201, 0x4a330001, 0x25190101, 0x4a310001, 0x04a30401, 0x4a2f0001, 0x25170101, 0x4a2d0001, 0x128b0201, 0x4a2b0001, 0x25150101, 0x4a290001, 0x09450301, 0x4a270001, 0x25130101, 0x4a250001, 0x12890201, 0x4a230001, 0x25110101, 0x4a210001, 0x02510501, 0x4a1f0001, 0x250f0101, 0x4a1d0001, 0x12870201, 0x4a1b0001, 0x250d0101, 0x4a190001, 0x09430301, 0x4a170001, 0x250b0101, 0x4a150001, 0x12850201, 0x4a130001, 0x25090101, 0x4a110001, 0x04a10401, 0x4a0f0001, 0x25070101, 0x4a0d0001, 0x12830201, 0x4a0b0001, 0x25050101, 0x4a090001, 0x09410301, 0x4a070001, 0x25030101, 0x4a050001, 0x12810201, 0x4a030001, 0x25010101, 0x4a010001, + 0x00253601, 0x49ff0001, 0x24ff0101, 0x49fd0001, 0x127f0201, 0x49fb0001, 0x24fd0101, 0x49f90001, 0x093f0301, 0x49f70001, 0x24fb0101, 0x49f50001, 0x127d0201, 0x49f30001, 0x24f90101, 0x49f10001, 0x049f0401, 0x49ef0001, 0x24f70101, 0x49ed0001, 0x127b0201, 0x49eb0001, 0x24f50101, 0x49e90001, 0x093d0301, 0x49e70001, 0x24f30101, 0x49e50001, 0x12790201, 0x49e30001, 0x24f10101, 0x49e10001, 0x024f0501, 0x49df0001, 0x24ef0101, 0x49dd0001, 0x12770201, 0x49db0001, 0x24ed0101, 0x49d90001, 0x093b0301, 0x49d70001, 0x24eb0101, 0x49d50001, 0x12750201, 0x49d30001, 0x24e90101, 0x49d10001, 0x049d0401, 0x49cf0001, 0x24e70101, 0x49cd0001, 0x12730201, 0x49cb0001, 0x24e50101, 0x49c90001, 0x09390301, 0x49c70001, 0x24e30101, 0x49c50001, 0x12710201, 0x49c30001, 0x24e10101, 0x49c10001, 0x01270601, 0x49bf0001, 0x24df0101, 0x49bd0001, 0x126f0201, 0x49bb0001, 0x24dd0101, 0x49b90001, 0x09370301, 0x49b70001, 0x24db0101, 0x49b50001, 0x126d0201, 0x49b30001, 0x24d90101, 0x49b10001, 0x049b0401, 0x49af0001, 0x24d70101, 0x49ad0001, 0x126b0201, 0x49ab0001, 0x24d50101, 0x49a90001, 0x09350301, 0x49a70001, 0x24d30101, 0x49a50001, 0x12690201, 0x49a30001, 0x24d10101, 0x49a10001, 0x024d0501, 0x499f0001, 0x24cf0101, 0x499d0001, 0x12670201, 0x499b0001, 0x24cd0101, 0x49990001, 0x09330301, 0x49970001, 0x24cb0101, 0x49950001, 0x12650201, 0x49930001, 0x24c90101, 0x49910001, 0x04990401, 0x498f0001, 0x24c70101, 0x498d0001, 0x12630201, 0x498b0001, 0x24c50101, 0x49890001, 0x09310301, 0x49870001, 0x24c30101, 0x49850001, 0x12610201, 0x49830001, 0x24c10101, 0x49810001, 0x00931601, 0x497f0001, 0x24bf0101, 0x497d0001, 0x125f0201, 0x497b0001, 0x24bd0101, 0x49790001, 0x092f0301, 0x49770001, 0x24bb0101, 0x49750001, 0x125d0201, 0x49730001, 0x24b90101, 0x49710001, 0x04970401, 0x496f0001, 0x24b70101, 0x496d0001, 0x125b0201, 0x496b0001, 0x24b50101, 0x49690001, 0x092d0301, 0x49670001, 0x24b30101, 0x49650001, 0x12590201, 0x49630001, 0x24b10101, 0x49610001, 0x024b0501, 0x495f0001, 0x24af0101, 0x495d0001, 0x12570201, 0x495b0001, 0x24ad0101, 0x49590001, 0x092b0301, 0x49570001, 0x24ab0101, 0x49550001, 0x12550201, 0x49530001, 0x24a90101, 0x49510001, 0x04950401, 0x494f0001, 0x24a70101, 0x494d0001, 0x12530201, 0x494b0001, 0x24a50101, 0x49490001, 0x09290301, 0x49470001, 0x24a30101, 0x49450001, 0x12510201, 0x49430001, 0x24a10101, 0x49410001, 0x01250601, 0x493f0001, 0x249f0101, 0x493d0001, 0x124f0201, 0x493b0001, 0x249d0101, 0x49390001, 0x09270301, 0x49370001, 0x249b0101, 0x49350001, 0x124d0201, 0x49330001, 0x24990101, 0x49310001, 0x04930401, 0x492f0001, 0x24970101, 0x492d0001, 0x124b0201, 0x492b0001, 0x24950101, 0x49290001, 0x09250301, 0x49270001, 0x24930101, 0x49250001, 0x12490201, 0x49230001, 0x24910101, 0x49210001, 0x02490501, 0x491f0001, 0x248f0101, 0x491d0001, 0x12470201, 0x491b0001, 0x248d0101, 0x49190001, 0x09230301, 0x49170001, 0x248b0101, 0x49150001, 0x12450201, 0x49130001, 0x24890101, 0x49110001, 0x04910401, 0x490f0001, 0x24870101, 0x490d0001, 0x12430201, 0x490b0001, 0x24850101, 0x49090001, 0x09210301, 0x49070001, 0x24830101, 0x49050001, 0x12410201, 0x49030001, 0x24810101, 0x49010001, + 0x00492601, 0x48ff0001, 0x247f0101, 0x48fd0001, 0x123f0201, 0x48fb0001, 0x247d0101, 0x48f90001, 0x091f0301, 0x48f70001, 0x247b0101, 0x48f50001, 0x123d0201, 0x48f30001, 0x24790101, 0x48f10001, 0x048f0401, 0x48ef0001, 0x24770101, 0x48ed0001, 0x123b0201, 0x48eb0001, 0x24750101, 0x48e90001, 0x091d0301, 0x48e70001, 0x24730101, 0x48e50001, 0x12390201, 0x48e30001, 0x24710101, 0x48e10001, 0x02470501, 0x48df0001, 0x246f0101, 0x48dd0001, 0x12370201, 0x48db0001, 0x246d0101, 0x48d90001, 0x091b0301, 0x48d70001, 0x246b0101, 0x48d50001, 0x12350201, 0x48d30001, 0x24690101, 0x48d10001, 0x048d0401, 0x48cf0001, 0x24670101, 0x48cd0001, 0x12330201, 0x48cb0001, 0x24650101, 0x48c90001, 0x09190301, 0x48c70001, 0x24630101, 0x48c50001, 0x12310201, 0x48c30001, 0x24610101, 0x48c10001, 0x01230601, 0x48bf0001, 0x245f0101, 0x48bd0001, 0x122f0201, 0x48bb0001, 0x245d0101, 0x48b90001, 0x09170301, 0x48b70001, 0x245b0101, 0x48b50001, 0x122d0201, 0x48b30001, 0x24590101, 0x48b10001, 0x048b0401, 0x48af0001, 0x24570101, 0x48ad0001, 0x122b0201, 0x48ab0001, 0x24550101, 0x48a90001, 0x09150301, 0x48a70001, 0x24530101, 0x48a50001, 0x12290201, 0x48a30001, 0x24510101, 0x48a10001, 0x02450501, 0x489f0001, 0x244f0101, 0x489d0001, 0x12270201, 0x489b0001, 0x244d0101, 0x48990001, 0x09130301, 0x48970001, 0x244b0101, 0x48950001, 0x12250201, 0x48930001, 0x24490101, 0x48910001, 0x04890401, 0x488f0001, 0x24470101, 0x488d0001, 0x12230201, 0x488b0001, 0x24450101, 0x48890001, 0x09110301, 0x48870001, 0x24430101, 0x48850001, 0x12210201, 0x48830001, 0x24410101, 0x48810001, 0x00911601, 0x487f0001, 0x243f0101, 0x487d0001, 0x121f0201, 0x487b0001, 0x243d0101, 0x48790001, 0x090f0301, 0x48770001, 0x243b0101, 0x48750001, 0x121d0201, 0x48730001, 0x24390101, 0x48710001, 0x04870401, 0x486f0001, 0x24370101, 0x486d0001, 0x121b0201, 0x486b0001, 0x24350101, 0x48690001, 0x090d0301, 0x48670001, 0x24330101, 0x48650001, 0x12190201, 0x48630001, 0x24310101, 0x48610001, 0x02430501, 0x485f0001, 0x242f0101, 0x485d0001, 0x12170201, 0x485b0001, 0x242d0101, 0x48590001, 0x090b0301, 0x48570001, 0x242b0101, 0x48550001, 0x12150201, 0x48530001, 0x24290101, 0x48510001, 0x04850401, 0x484f0001, 0x24270101, 0x484d0001, 0x12130201, 0x484b0001, 0x24250101, 0x48490001, 0x09090301, 0x48470001, 0x24230101, 0x48450001, 0x12110201, 0x48430001, 0x24210101, 0x48410001, 0x01210601, 0x483f0001, 0x241f0101, 0x483d0001, 0x120f0201, 0x483b0001, 0x241d0101, 0x48390001, 0x09070301, 0x48370001, 0x241b0101, 0x48350001, 0x120d0201, 0x48330001, 0x24190101, 0x48310001, 0x04830401, 0x482f0001, 0x24170101, 0x482d0001, 0x120b0201, 0x482b0001, 0x24150101, 0x48290001, 0x09050301, 0x48270001, 0x24130101, 0x48250001, 0x12090201, 0x48230001, 0x24110101, 0x48210001, 0x02410501, 0x481f0001, 0x240f0101, 0x481d0001, 0x12070201, 0x481b0001, 0x240d0101, 0x48190001, 0x09030301, 0x48170001, 0x240b0101, 0x48150001, 0x12050201, 0x48130001, 0x24090101, 0x48110001, 0x04810401, 0x480f0001, 0x24070101, 0x480d0001, 0x12030201, 0x480b0001, 0x24050101, 0x48090001, 0x09010301, 0x48070001, 0x24030101, 0x48050001, 0x12010201, 0x48030001, 0x24010101, 0x48010001, + 0x00095601, 0x47ff0001, 0x23ff0101, 0x47fd0001, 0x11ff0201, 0x47fb0001, 0x23fd0101, 0x47f90001, 0x08ff0301, 0x47f70001, 0x23fb0101, 0x47f50001, 0x11fd0201, 0x47f30001, 0x23f90101, 0x47f10001, 0x047f0401, 0x47ef0001, 0x23f70101, 0x47ed0001, 0x11fb0201, 0x47eb0001, 0x23f50101, 0x47e90001, 0x08fd0301, 0x47e70001, 0x23f30101, 0x47e50001, 0x11f90201, 0x47e30001, 0x23f10101, 0x47e10001, 0x023f0501, 0x47df0001, 0x23ef0101, 0x47dd0001, 0x11f70201, 0x47db0001, 0x23ed0101, 0x47d90001, 0x08fb0301, 0x47d70001, 0x23eb0101, 0x47d50001, 0x11f50201, 0x47d30001, 0x23e90101, 0x47d10001, 0x047d0401, 0x47cf0001, 0x23e70101, 0x47cd0001, 0x11f30201, 0x47cb0001, 0x23e50101, 0x47c90001, 0x08f90301, 0x47c70001, 0x23e30101, 0x47c50001, 0x11f10201, 0x47c30001, 0x23e10101, 0x47c10001, 0x011f0601, 0x47bf0001, 0x23df0101, 0x47bd0001, 0x11ef0201, 0x47bb0001, 0x23dd0101, 0x47b90001, 0x08f70301, 0x47b70001, 0x23db0101, 0x47b50001, 0x11ed0201, 0x47b30001, 0x23d90101, 0x47b10001, 0x047b0401, 0x47af0001, 0x23d70101, 0x47ad0001, 0x11eb0201, 0x47ab0001, 0x23d50101, 0x47a90001, 0x08f50301, 0x47a70001, 0x23d30101, 0x47a50001, 0x11e90201, 0x47a30001, 0x23d10101, 0x47a10001, 0x023d0501, 0x479f0001, 0x23cf0101, 0x479d0001, 0x11e70201, 0x479b0001, 0x23cd0101, 0x47990001, 0x08f30301, 0x47970001, 0x23cb0101, 0x47950001, 0x11e50201, 0x47930001, 0x23c90101, 0x47910001, 0x04790401, 0x478f0001, 0x23c70101, 0x478d0001, 0x11e30201, 0x478b0001, 0x23c50101, 0x47890001, 0x08f10301, 0x47870001, 0x23c30101, 0x47850001, 0x11e10201, 0x47830001, 0x23c10101, 0x47810001, 0x008f1601, 0x477f0001, 0x23bf0101, 0x477d0001, 0x11df0201, 0x477b0001, 0x23bd0101, 0x47790001, 0x08ef0301, 0x47770001, 0x23bb0101, 0x47750001, 0x11dd0201, 0x47730001, 0x23b90101, 0x47710001, 0x04770401, 0x476f0001, 0x23b70101, 0x476d0001, 0x11db0201, 0x476b0001, 0x23b50101, 0x47690001, 0x08ed0301, 0x47670001, 0x23b30101, 0x47650001, 0x11d90201, 0x47630001, 0x23b10101, 0x47610001, 0x023b0501, 0x475f0001, 0x23af0101, 0x475d0001, 0x11d70201, 0x475b0001, 0x23ad0101, 0x47590001, 0x08eb0301, 0x47570001, 0x23ab0101, 0x47550001, 0x11d50201, 0x47530001, 0x23a90101, 0x47510001, 0x04750401, 0x474f0001, 0x23a70101, 0x474d0001, 0x11d30201, 0x474b0001, 0x23a50101, 0x47490001, 0x08e90301, 0x47470001, 0x23a30101, 0x47450001, 0x11d10201, 0x47430001, 0x23a10101, 0x47410001, 0x011d0601, 0x473f0001, 0x239f0101, 0x473d0001, 0x11cf0201, 0x473b0001, 0x239d0101, 0x47390001, 0x08e70301, 0x47370001, 0x239b0101, 0x47350001, 0x11cd0201, 0x47330001, 0x23990101, 0x47310001, 0x04730401, 0x472f0001, 0x23970101, 0x472d0001, 0x11cb0201, 0x472b0001, 0x23950101, 0x47290001, 0x08e50301, 0x47270001, 0x23930101, 0x47250001, 0x11c90201, 0x47230001, 0x23910101, 0x47210001, 0x02390501, 0x471f0001, 0x238f0101, 0x471d0001, 0x11c70201, 0x471b0001, 0x238d0101, 0x47190001, 0x08e30301, 0x47170001, 0x238b0101, 0x47150001, 0x11c50201, 0x47130001, 0x23890101, 0x47110001, 0x04710401, 0x470f0001, 0x23870101, 0x470d0001, 0x11c30201, 0x470b0001, 0x23850101, 0x47090001, 0x08e10301, 0x47070001, 0x23830101, 0x47050001, 0x11c10201, 0x47030001, 0x23810101, 0x47010001, + 0x00472601, 0x46ff0001, 0x237f0101, 0x46fd0001, 0x11bf0201, 0x46fb0001, 0x237d0101, 0x46f90001, 0x08df0301, 0x46f70001, 0x237b0101, 0x46f50001, 0x11bd0201, 0x46f30001, 0x23790101, 0x46f10001, 0x046f0401, 0x46ef0001, 0x23770101, 0x46ed0001, 0x11bb0201, 0x46eb0001, 0x23750101, 0x46e90001, 0x08dd0301, 0x46e70001, 0x23730101, 0x46e50001, 0x11b90201, 0x46e30001, 0x23710101, 0x46e10001, 0x02370501, 0x46df0001, 0x236f0101, 0x46dd0001, 0x11b70201, 0x46db0001, 0x236d0101, 0x46d90001, 0x08db0301, 0x46d70001, 0x236b0101, 0x46d50001, 0x11b50201, 0x46d30001, 0x23690101, 0x46d10001, 0x046d0401, 0x46cf0001, 0x23670101, 0x46cd0001, 0x11b30201, 0x46cb0001, 0x23650101, 0x46c90001, 0x08d90301, 0x46c70001, 0x23630101, 0x46c50001, 0x11b10201, 0x46c30001, 0x23610101, 0x46c10001, 0x011b0601, 0x46bf0001, 0x235f0101, 0x46bd0001, 0x11af0201, 0x46bb0001, 0x235d0101, 0x46b90001, 0x08d70301, 0x46b70001, 0x235b0101, 0x46b50001, 0x11ad0201, 0x46b30001, 0x23590101, 0x46b10001, 0x046b0401, 0x46af0001, 0x23570101, 0x46ad0001, 0x11ab0201, 0x46ab0001, 0x23550101, 0x46a90001, 0x08d50301, 0x46a70001, 0x23530101, 0x46a50001, 0x11a90201, 0x46a30001, 0x23510101, 0x46a10001, 0x02350501, 0x469f0001, 0x234f0101, 0x469d0001, 0x11a70201, 0x469b0001, 0x234d0101, 0x46990001, 0x08d30301, 0x46970001, 0x234b0101, 0x46950001, 0x11a50201, 0x46930001, 0x23490101, 0x46910001, 0x04690401, 0x468f0001, 0x23470101, 0x468d0001, 0x11a30201, 0x468b0001, 0x23450101, 0x46890001, 0x08d10301, 0x46870001, 0x23430101, 0x46850001, 0x11a10201, 0x46830001, 0x23410101, 0x46810001, 0x008d1601, 0x467f0001, 0x233f0101, 0x467d0001, 0x119f0201, 0x467b0001, 0x233d0101, 0x46790001, 0x08cf0301, 0x46770001, 0x233b0101, 0x46750001, 0x119d0201, 0x46730001, 0x23390101, 0x46710001, 0x04670401, 0x466f0001, 0x23370101, 0x466d0001, 0x119b0201, 0x466b0001, 0x23350101, 0x46690001, 0x08cd0301, 0x46670001, 0x23330101, 0x46650001, 0x11990201, 0x46630001, 0x23310101, 0x46610001, 0x02330501, 0x465f0001, 0x232f0101, 0x465d0001, 0x11970201, 0x465b0001, 0x232d0101, 0x46590001, 0x08cb0301, 0x46570001, 0x232b0101, 0x46550001, 0x11950201, 0x46530001, 0x23290101, 0x46510001, 0x04650401, 0x464f0001, 0x23270101, 0x464d0001, 0x11930201, 0x464b0001, 0x23250101, 0x46490001, 0x08c90301, 0x46470001, 0x23230101, 0x46450001, 0x11910201, 0x46430001, 0x23210101, 0x46410001, 0x01190601, 0x463f0001, 0x231f0101, 0x463d0001, 0x118f0201, 0x463b0001, 0x231d0101, 0x46390001, 0x08c70301, 0x46370001, 0x231b0101, 0x46350001, 0x118d0201, 0x46330001, 0x23190101, 0x46310001, 0x04630401, 0x462f0001, 0x23170101, 0x462d0001, 0x118b0201, 0x462b0001, 0x23150101, 0x46290001, 0x08c50301, 0x46270001, 0x23130101, 0x46250001, 0x11890201, 0x46230001, 0x23110101, 0x46210001, 0x02310501, 0x461f0001, 0x230f0101, 0x461d0001, 0x11870201, 0x461b0001, 0x230d0101, 0x46190001, 0x08c30301, 0x46170001, 0x230b0101, 0x46150001, 0x11850201, 0x46130001, 0x23090101, 0x46110001, 0x04610401, 0x460f0001, 0x23070101, 0x460d0001, 0x11830201, 0x460b0001, 0x23050101, 0x46090001, 0x08c10301, 0x46070001, 0x23030101, 0x46050001, 0x11810201, 0x46030001, 0x23010101, 0x46010001, + 0x00233601, 0x45ff0001, 0x22ff0101, 0x45fd0001, 0x117f0201, 0x45fb0001, 0x22fd0101, 0x45f90001, 0x08bf0301, 0x45f70001, 0x22fb0101, 0x45f50001, 0x117d0201, 0x45f30001, 0x22f90101, 0x45f10001, 0x045f0401, 0x45ef0001, 0x22f70101, 0x45ed0001, 0x117b0201, 0x45eb0001, 0x22f50101, 0x45e90001, 0x08bd0301, 0x45e70001, 0x22f30101, 0x45e50001, 0x11790201, 0x45e30001, 0x22f10101, 0x45e10001, 0x022f0501, 0x45df0001, 0x22ef0101, 0x45dd0001, 0x11770201, 0x45db0001, 0x22ed0101, 0x45d90001, 0x08bb0301, 0x45d70001, 0x22eb0101, 0x45d50001, 0x11750201, 0x45d30001, 0x22e90101, 0x45d10001, 0x045d0401, 0x45cf0001, 0x22e70101, 0x45cd0001, 0x11730201, 0x45cb0001, 0x22e50101, 0x45c90001, 0x08b90301, 0x45c70001, 0x22e30101, 0x45c50001, 0x11710201, 0x45c30001, 0x22e10101, 0x45c10001, 0x01170601, 0x45bf0001, 0x22df0101, 0x45bd0001, 0x116f0201, 0x45bb0001, 0x22dd0101, 0x45b90001, 0x08b70301, 0x45b70001, 0x22db0101, 0x45b50001, 0x116d0201, 0x45b30001, 0x22d90101, 0x45b10001, 0x045b0401, 0x45af0001, 0x22d70101, 0x45ad0001, 0x116b0201, 0x45ab0001, 0x22d50101, 0x45a90001, 0x08b50301, 0x45a70001, 0x22d30101, 0x45a50001, 0x11690201, 0x45a30001, 0x22d10101, 0x45a10001, 0x022d0501, 0x459f0001, 0x22cf0101, 0x459d0001, 0x11670201, 0x459b0001, 0x22cd0101, 0x45990001, 0x08b30301, 0x45970001, 0x22cb0101, 0x45950001, 0x11650201, 0x45930001, 0x22c90101, 0x45910001, 0x04590401, 0x458f0001, 0x22c70101, 0x458d0001, 0x11630201, 0x458b0001, 0x22c50101, 0x45890001, 0x08b10301, 0x45870001, 0x22c30101, 0x45850001, 0x11610201, 0x45830001, 0x22c10101, 0x45810001, 0x008b1601, 0x457f0001, 0x22bf0101, 0x457d0001, 0x115f0201, 0x457b0001, 0x22bd0101, 0x45790001, 0x08af0301, 0x45770001, 0x22bb0101, 0x45750001, 0x115d0201, 0x45730001, 0x22b90101, 0x45710001, 0x04570401, 0x456f0001, 0x22b70101, 0x456d0001, 0x115b0201, 0x456b0001, 0x22b50101, 0x45690001, 0x08ad0301, 0x45670001, 0x22b30101, 0x45650001, 0x11590201, 0x45630001, 0x22b10101, 0x45610001, 0x022b0501, 0x455f0001, 0x22af0101, 0x455d0001, 0x11570201, 0x455b0001, 0x22ad0101, 0x45590001, 0x08ab0301, 0x45570001, 0x22ab0101, 0x45550001, 0x11550201, 0x45530001, 0x22a90101, 0x45510001, 0x04550401, 0x454f0001, 0x22a70101, 0x454d0001, 0x11530201, 0x454b0001, 0x22a50101, 0x45490001, 0x08a90301, 0x45470001, 0x22a30101, 0x45450001, 0x11510201, 0x45430001, 0x22a10101, 0x45410001, 0x01150601, 0x453f0001, 0x229f0101, 0x453d0001, 0x114f0201, 0x453b0001, 0x229d0101, 0x45390001, 0x08a70301, 0x45370001, 0x229b0101, 0x45350001, 0x114d0201, 0x45330001, 0x22990101, 0x45310001, 0x04530401, 0x452f0001, 0x22970101, 0x452d0001, 0x114b0201, 0x452b0001, 0x22950101, 0x45290001, 0x08a50301, 0x45270001, 0x22930101, 0x45250001, 0x11490201, 0x45230001, 0x22910101, 0x45210001, 0x02290501, 0x451f0001, 0x228f0101, 0x451d0001, 0x11470201, 0x451b0001, 0x228d0101, 0x45190001, 0x08a30301, 0x45170001, 0x228b0101, 0x45150001, 0x11450201, 0x45130001, 0x22890101, 0x45110001, 0x04510401, 0x450f0001, 0x22870101, 0x450d0001, 0x11430201, 0x450b0001, 0x22850101, 0x45090001, 0x08a10301, 0x45070001, 0x22830101, 0x45050001, 0x11410201, 0x45030001, 0x22810101, 0x45010001, + 0x00452601, 0x44ff0001, 0x227f0101, 0x44fd0001, 0x113f0201, 0x44fb0001, 0x227d0101, 0x44f90001, 0x089f0301, 0x44f70001, 0x227b0101, 0x44f50001, 0x113d0201, 0x44f30001, 0x22790101, 0x44f10001, 0x044f0401, 0x44ef0001, 0x22770101, 0x44ed0001, 0x113b0201, 0x44eb0001, 0x22750101, 0x44e90001, 0x089d0301, 0x44e70001, 0x22730101, 0x44e50001, 0x11390201, 0x44e30001, 0x22710101, 0x44e10001, 0x02270501, 0x44df0001, 0x226f0101, 0x44dd0001, 0x11370201, 0x44db0001, 0x226d0101, 0x44d90001, 0x089b0301, 0x44d70001, 0x226b0101, 0x44d50001, 0x11350201, 0x44d30001, 0x22690101, 0x44d10001, 0x044d0401, 0x44cf0001, 0x22670101, 0x44cd0001, 0x11330201, 0x44cb0001, 0x22650101, 0x44c90001, 0x08990301, 0x44c70001, 0x22630101, 0x44c50001, 0x11310201, 0x44c30001, 0x22610101, 0x44c10001, 0x01130601, 0x44bf0001, 0x225f0101, 0x44bd0001, 0x112f0201, 0x44bb0001, 0x225d0101, 0x44b90001, 0x08970301, 0x44b70001, 0x225b0101, 0x44b50001, 0x112d0201, 0x44b30001, 0x22590101, 0x44b10001, 0x044b0401, 0x44af0001, 0x22570101, 0x44ad0001, 0x112b0201, 0x44ab0001, 0x22550101, 0x44a90001, 0x08950301, 0x44a70001, 0x22530101, 0x44a50001, 0x11290201, 0x44a30001, 0x22510101, 0x44a10001, 0x02250501, 0x449f0001, 0x224f0101, 0x449d0001, 0x11270201, 0x449b0001, 0x224d0101, 0x44990001, 0x08930301, 0x44970001, 0x224b0101, 0x44950001, 0x11250201, 0x44930001, 0x22490101, 0x44910001, 0x04490401, 0x448f0001, 0x22470101, 0x448d0001, 0x11230201, 0x448b0001, 0x22450101, 0x44890001, 0x08910301, 0x44870001, 0x22430101, 0x44850001, 0x11210201, 0x44830001, 0x22410101, 0x44810001, 0x00891601, 0x447f0001, 0x223f0101, 0x447d0001, 0x111f0201, 0x447b0001, 0x223d0101, 0x44790001, 0x088f0301, 0x44770001, 0x223b0101, 0x44750001, 0x111d0201, 0x44730001, 0x22390101, 0x44710001, 0x04470401, 0x446f0001, 0x22370101, 0x446d0001, 0x111b0201, 0x446b0001, 0x22350101, 0x44690001, 0x088d0301, 0x44670001, 0x22330101, 0x44650001, 0x11190201, 0x44630001, 0x22310101, 0x44610001, 0x02230501, 0x445f0001, 0x222f0101, 0x445d0001, 0x11170201, 0x445b0001, 0x222d0101, 0x44590001, 0x088b0301, 0x44570001, 0x222b0101, 0x44550001, 0x11150201, 0x44530001, 0x22290101, 0x44510001, 0x04450401, 0x444f0001, 0x22270101, 0x444d0001, 0x11130201, 0x444b0001, 0x22250101, 0x44490001, 0x08890301, 0x44470001, 0x22230101, 0x44450001, 0x11110201, 0x44430001, 0x22210101, 0x44410001, 0x01110601, 0x443f0001, 0x221f0101, 0x443d0001, 0x110f0201, 0x443b0001, 0x221d0101, 0x44390001, 0x08870301, 0x44370001, 0x221b0101, 0x44350001, 0x110d0201, 0x44330001, 0x22190101, 0x44310001, 0x04430401, 0x442f0001, 0x22170101, 0x442d0001, 0x110b0201, 0x442b0001, 0x22150101, 0x44290001, 0x08850301, 0x44270001, 0x22130101, 0x44250001, 0x11090201, 0x44230001, 0x22110101, 0x44210001, 0x02210501, 0x441f0001, 0x220f0101, 0x441d0001, 0x11070201, 0x441b0001, 0x220d0101, 0x44190001, 0x08830301, 0x44170001, 0x220b0101, 0x44150001, 0x11050201, 0x44130001, 0x22090101, 0x44110001, 0x04410401, 0x440f0001, 0x22070101, 0x440d0001, 0x11030201, 0x440b0001, 0x22050101, 0x44090001, 0x08810301, 0x44070001, 0x22030101, 0x44050001, 0x11010201, 0x44030001, 0x22010101, 0x44010001, + 0x00114601, 0x43ff0001, 0x21ff0101, 0x43fd0001, 0x10ff0201, 0x43fb0001, 0x21fd0101, 0x43f90001, 0x087f0301, 0x43f70001, 0x21fb0101, 0x43f50001, 0x10fd0201, 0x43f30001, 0x21f90101, 0x43f10001, 0x043f0401, 0x43ef0001, 0x21f70101, 0x43ed0001, 0x10fb0201, 0x43eb0001, 0x21f50101, 0x43e90001, 0x087d0301, 0x43e70001, 0x21f30101, 0x43e50001, 0x10f90201, 0x43e30001, 0x21f10101, 0x43e10001, 0x021f0501, 0x43df0001, 0x21ef0101, 0x43dd0001, 0x10f70201, 0x43db0001, 0x21ed0101, 0x43d90001, 0x087b0301, 0x43d70001, 0x21eb0101, 0x43d50001, 0x10f50201, 0x43d30001, 0x21e90101, 0x43d10001, 0x043d0401, 0x43cf0001, 0x21e70101, 0x43cd0001, 0x10f30201, 0x43cb0001, 0x21e50101, 0x43c90001, 0x08790301, 0x43c70001, 0x21e30101, 0x43c50001, 0x10f10201, 0x43c30001, 0x21e10101, 0x43c10001, 0x010f0601, 0x43bf0001, 0x21df0101, 0x43bd0001, 0x10ef0201, 0x43bb0001, 0x21dd0101, 0x43b90001, 0x08770301, 0x43b70001, 0x21db0101, 0x43b50001, 0x10ed0201, 0x43b30001, 0x21d90101, 0x43b10001, 0x043b0401, 0x43af0001, 0x21d70101, 0x43ad0001, 0x10eb0201, 0x43ab0001, 0x21d50101, 0x43a90001, 0x08750301, 0x43a70001, 0x21d30101, 0x43a50001, 0x10e90201, 0x43a30001, 0x21d10101, 0x43a10001, 0x021d0501, 0x439f0001, 0x21cf0101, 0x439d0001, 0x10e70201, 0x439b0001, 0x21cd0101, 0x43990001, 0x08730301, 0x43970001, 0x21cb0101, 0x43950001, 0x10e50201, 0x43930001, 0x21c90101, 0x43910001, 0x04390401, 0x438f0001, 0x21c70101, 0x438d0001, 0x10e30201, 0x438b0001, 0x21c50101, 0x43890001, 0x08710301, 0x43870001, 0x21c30101, 0x43850001, 0x10e10201, 0x43830001, 0x21c10101, 0x43810001, 0x00871601, 0x437f0001, 0x21bf0101, 0x437d0001, 0x10df0201, 0x437b0001, 0x21bd0101, 0x43790001, 0x086f0301, 0x43770001, 0x21bb0101, 0x43750001, 0x10dd0201, 0x43730001, 0x21b90101, 0x43710001, 0x04370401, 0x436f0001, 0x21b70101, 0x436d0001, 0x10db0201, 0x436b0001, 0x21b50101, 0x43690001, 0x086d0301, 0x43670001, 0x21b30101, 0x43650001, 0x10d90201, 0x43630001, 0x21b10101, 0x43610001, 0x021b0501, 0x435f0001, 0x21af0101, 0x435d0001, 0x10d70201, 0x435b0001, 0x21ad0101, 0x43590001, 0x086b0301, 0x43570001, 0x21ab0101, 0x43550001, 0x10d50201, 0x43530001, 0x21a90101, 0x43510001, 0x04350401, 0x434f0001, 0x21a70101, 0x434d0001, 0x10d30201, 0x434b0001, 0x21a50101, 0x43490001, 0x08690301, 0x43470001, 0x21a30101, 0x43450001, 0x10d10201, 0x43430001, 0x21a10101, 0x43410001, 0x010d0601, 0x433f0001, 0x219f0101, 0x433d0001, 0x10cf0201, 0x433b0001, 0x219d0101, 0x43390001, 0x08670301, 0x43370001, 0x219b0101, 0x43350001, 0x10cd0201, 0x43330001, 0x21990101, 0x43310001, 0x04330401, 0x432f0001, 0x21970101, 0x432d0001, 0x10cb0201, 0x432b0001, 0x21950101, 0x43290001, 0x08650301, 0x43270001, 0x21930101, 0x43250001, 0x10c90201, 0x43230001, 0x21910101, 0x43210001, 0x02190501, 0x431f0001, 0x218f0101, 0x431d0001, 0x10c70201, 0x431b0001, 0x218d0101, 0x43190001, 0x08630301, 0x43170001, 0x218b0101, 0x43150001, 0x10c50201, 0x43130001, 0x21890101, 0x43110001, 0x04310401, 0x430f0001, 0x21870101, 0x430d0001, 0x10c30201, 0x430b0001, 0x21850101, 0x43090001, 0x08610301, 0x43070001, 0x21830101, 0x43050001, 0x10c10201, 0x43030001, 0x21810101, 0x43010001, + 0x00432601, 0x42ff0001, 0x217f0101, 0x42fd0001, 0x10bf0201, 0x42fb0001, 0x217d0101, 0x42f90001, 0x085f0301, 0x42f70001, 0x217b0101, 0x42f50001, 0x10bd0201, 0x42f30001, 0x21790101, 0x42f10001, 0x042f0401, 0x42ef0001, 0x21770101, 0x42ed0001, 0x10bb0201, 0x42eb0001, 0x21750101, 0x42e90001, 0x085d0301, 0x42e70001, 0x21730101, 0x42e50001, 0x10b90201, 0x42e30001, 0x21710101, 0x42e10001, 0x02170501, 0x42df0001, 0x216f0101, 0x42dd0001, 0x10b70201, 0x42db0001, 0x216d0101, 0x42d90001, 0x085b0301, 0x42d70001, 0x216b0101, 0x42d50001, 0x10b50201, 0x42d30001, 0x21690101, 0x42d10001, 0x042d0401, 0x42cf0001, 0x21670101, 0x42cd0001, 0x10b30201, 0x42cb0001, 0x21650101, 0x42c90001, 0x08590301, 0x42c70001, 0x21630101, 0x42c50001, 0x10b10201, 0x42c30001, 0x21610101, 0x42c10001, 0x010b0601, 0x42bf0001, 0x215f0101, 0x42bd0001, 0x10af0201, 0x42bb0001, 0x215d0101, 0x42b90001, 0x08570301, 0x42b70001, 0x215b0101, 0x42b50001, 0x10ad0201, 0x42b30001, 0x21590101, 0x42b10001, 0x042b0401, 0x42af0001, 0x21570101, 0x42ad0001, 0x10ab0201, 0x42ab0001, 0x21550101, 0x42a90001, 0x08550301, 0x42a70001, 0x21530101, 0x42a50001, 0x10a90201, 0x42a30001, 0x21510101, 0x42a10001, 0x02150501, 0x429f0001, 0x214f0101, 0x429d0001, 0x10a70201, 0x429b0001, 0x214d0101, 0x42990001, 0x08530301, 0x42970001, 0x214b0101, 0x42950001, 0x10a50201, 0x42930001, 0x21490101, 0x42910001, 0x04290401, 0x428f0001, 0x21470101, 0x428d0001, 0x10a30201, 0x428b0001, 0x21450101, 0x42890001, 0x08510301, 0x42870001, 0x21430101, 0x42850001, 0x10a10201, 0x42830001, 0x21410101, 0x42810001, 0x00851601, 0x427f0001, 0x213f0101, 0x427d0001, 0x109f0201, 0x427b0001, 0x213d0101, 0x42790001, 0x084f0301, 0x42770001, 0x213b0101, 0x42750001, 0x109d0201, 0x42730001, 0x21390101, 0x42710001, 0x04270401, 0x426f0001, 0x21370101, 0x426d0001, 0x109b0201, 0x426b0001, 0x21350101, 0x42690001, 0x084d0301, 0x42670001, 0x21330101, 0x42650001, 0x10990201, 0x42630001, 0x21310101, 0x42610001, 0x02130501, 0x425f0001, 0x212f0101, 0x425d0001, 0x10970201, 0x425b0001, 0x212d0101, 0x42590001, 0x084b0301, 0x42570001, 0x212b0101, 0x42550001, 0x10950201, 0x42530001, 0x21290101, 0x42510001, 0x04250401, 0x424f0001, 0x21270101, 0x424d0001, 0x10930201, 0x424b0001, 0x21250101, 0x42490001, 0x08490301, 0x42470001, 0x21230101, 0x42450001, 0x10910201, 0x42430001, 0x21210101, 0x42410001, 0x01090601, 0x423f0001, 0x211f0101, 0x423d0001, 0x108f0201, 0x423b0001, 0x211d0101, 0x42390001, 0x08470301, 0x42370001, 0x211b0101, 0x42350001, 0x108d0201, 0x42330001, 0x21190101, 0x42310001, 0x04230401, 0x422f0001, 0x21170101, 0x422d0001, 0x108b0201, 0x422b0001, 0x21150101, 0x42290001, 0x08450301, 0x42270001, 0x21130101, 0x42250001, 0x10890201, 0x42230001, 0x21110101, 0x42210001, 0x02110501, 0x421f0001, 0x210f0101, 0x421d0001, 0x10870201, 0x421b0001, 0x210d0101, 0x42190001, 0x08430301, 0x42170001, 0x210b0101, 0x42150001, 0x10850201, 0x42130001, 0x21090101, 0x42110001, 0x04210401, 0x420f0001, 0x21070101, 0x420d0001, 0x10830201, 0x420b0001, 0x21050101, 0x42090001, 0x08410301, 0x42070001, 0x21030101, 0x42050001, 0x10810201, 0x42030001, 0x21010101, 0x42010001, + 0x00213601, 0x41ff0001, 0x20ff0101, 0x41fd0001, 0x107f0201, 0x41fb0001, 0x20fd0101, 0x41f90001, 0x083f0301, 0x41f70001, 0x20fb0101, 0x41f50001, 0x107d0201, 0x41f30001, 0x20f90101, 0x41f10001, 0x041f0401, 0x41ef0001, 0x20f70101, 0x41ed0001, 0x107b0201, 0x41eb0001, 0x20f50101, 0x41e90001, 0x083d0301, 0x41e70001, 0x20f30101, 0x41e50001, 0x10790201, 0x41e30001, 0x20f10101, 0x41e10001, 0x020f0501, 0x41df0001, 0x20ef0101, 0x41dd0001, 0x10770201, 0x41db0001, 0x20ed0101, 0x41d90001, 0x083b0301, 0x41d70001, 0x20eb0101, 0x41d50001, 0x10750201, 0x41d30001, 0x20e90101, 0x41d10001, 0x041d0401, 0x41cf0001, 0x20e70101, 0x41cd0001, 0x10730201, 0x41cb0001, 0x20e50101, 0x41c90001, 0x08390301, 0x41c70001, 0x20e30101, 0x41c50001, 0x10710201, 0x41c30001, 0x20e10101, 0x41c10001, 0x01070601, 0x41bf0001, 0x20df0101, 0x41bd0001, 0x106f0201, 0x41bb0001, 0x20dd0101, 0x41b90001, 0x08370301, 0x41b70001, 0x20db0101, 0x41b50001, 0x106d0201, 0x41b30001, 0x20d90101, 0x41b10001, 0x041b0401, 0x41af0001, 0x20d70101, 0x41ad0001, 0x106b0201, 0x41ab0001, 0x20d50101, 0x41a90001, 0x08350301, 0x41a70001, 0x20d30101, 0x41a50001, 0x10690201, 0x41a30001, 0x20d10101, 0x41a10001, 0x020d0501, 0x419f0001, 0x20cf0101, 0x419d0001, 0x10670201, 0x419b0001, 0x20cd0101, 0x41990001, 0x08330301, 0x41970001, 0x20cb0101, 0x41950001, 0x10650201, 0x41930001, 0x20c90101, 0x41910001, 0x04190401, 0x418f0001, 0x20c70101, 0x418d0001, 0x10630201, 0x418b0001, 0x20c50101, 0x41890001, 0x08310301, 0x41870001, 0x20c30101, 0x41850001, 0x10610201, 0x41830001, 0x20c10101, 0x41810001, 0x00831601, 0x417f0001, 0x20bf0101, 0x417d0001, 0x105f0201, 0x417b0001, 0x20bd0101, 0x41790001, 0x082f0301, 0x41770001, 0x20bb0101, 0x41750001, 0x105d0201, 0x41730001, 0x20b90101, 0x41710001, 0x04170401, 0x416f0001, 0x20b70101, 0x416d0001, 0x105b0201, 0x416b0001, 0x20b50101, 0x41690001, 0x082d0301, 0x41670001, 0x20b30101, 0x41650001, 0x10590201, 0x41630001, 0x20b10101, 0x41610001, 0x020b0501, 0x415f0001, 0x20af0101, 0x415d0001, 0x10570201, 0x415b0001, 0x20ad0101, 0x41590001, 0x082b0301, 0x41570001, 0x20ab0101, 0x41550001, 0x10550201, 0x41530001, 0x20a90101, 0x41510001, 0x04150401, 0x414f0001, 0x20a70101, 0x414d0001, 0x10530201, 0x414b0001, 0x20a50101, 0x41490001, 0x08290301, 0x41470001, 0x20a30101, 0x41450001, 0x10510201, 0x41430001, 0x20a10101, 0x41410001, 0x01050601, 0x413f0001, 0x209f0101, 0x413d0001, 0x104f0201, 0x413b0001, 0x209d0101, 0x41390001, 0x08270301, 0x41370001, 0x209b0101, 0x41350001, 0x104d0201, 0x41330001, 0x20990101, 0x41310001, 0x04130401, 0x412f0001, 0x20970101, 0x412d0001, 0x104b0201, 0x412b0001, 0x20950101, 0x41290001, 0x08250301, 0x41270001, 0x20930101, 0x41250001, 0x10490201, 0x41230001, 0x20910101, 0x41210001, 0x02090501, 0x411f0001, 0x208f0101, 0x411d0001, 0x10470201, 0x411b0001, 0x208d0101, 0x41190001, 0x08230301, 0x41170001, 0x208b0101, 0x41150001, 0x10450201, 0x41130001, 0x20890101, 0x41110001, 0x04110401, 0x410f0001, 0x20870101, 0x410d0001, 0x10430201, 0x410b0001, 0x20850101, 0x41090001, 0x08210301, 0x41070001, 0x20830101, 0x41050001, 0x10410201, 0x41030001, 0x20810101, 0x41010001, + 0x00412601, 0x40ff0001, 0x207f0101, 0x40fd0001, 0x103f0201, 0x40fb0001, 0x207d0101, 0x40f90001, 0x081f0301, 0x40f70001, 0x207b0101, 0x40f50001, 0x103d0201, 0x40f30001, 0x20790101, 0x40f10001, 0x040f0401, 0x40ef0001, 0x20770101, 0x40ed0001, 0x103b0201, 0x40eb0001, 0x20750101, 0x40e90001, 0x081d0301, 0x40e70001, 0x20730101, 0x40e50001, 0x10390201, 0x40e30001, 0x20710101, 0x40e10001, 0x02070501, 0x40df0001, 0x206f0101, 0x40dd0001, 0x10370201, 0x40db0001, 0x206d0101, 0x40d90001, 0x081b0301, 0x40d70001, 0x206b0101, 0x40d50001, 0x10350201, 0x40d30001, 0x20690101, 0x40d10001, 0x040d0401, 0x40cf0001, 0x20670101, 0x40cd0001, 0x10330201, 0x40cb0001, 0x20650101, 0x40c90001, 0x08190301, 0x40c70001, 0x20630101, 0x40c50001, 0x10310201, 0x40c30001, 0x20610101, 0x40c10001, 0x01030601, 0x40bf0001, 0x205f0101, 0x40bd0001, 0x102f0201, 0x40bb0001, 0x205d0101, 0x40b90001, 0x08170301, 0x40b70001, 0x205b0101, 0x40b50001, 0x102d0201, 0x40b30001, 0x20590101, 0x40b10001, 0x040b0401, 0x40af0001, 0x20570101, 0x40ad0001, 0x102b0201, 0x40ab0001, 0x20550101, 0x40a90001, 0x08150301, 0x40a70001, 0x20530101, 0x40a50001, 0x10290201, 0x40a30001, 0x20510101, 0x40a10001, 0x02050501, 0x409f0001, 0x204f0101, 0x409d0001, 0x10270201, 0x409b0001, 0x204d0101, 0x40990001, 0x08130301, 0x40970001, 0x204b0101, 0x40950001, 0x10250201, 0x40930001, 0x20490101, 0x40910001, 0x04090401, 0x408f0001, 0x20470101, 0x408d0001, 0x10230201, 0x408b0001, 0x20450101, 0x40890001, 0x08110301, 0x40870001, 0x20430101, 0x40850001, 0x10210201, 0x40830001, 0x20410101, 0x40810001, 0x00811601, 0x407f0001, 0x203f0101, 0x407d0001, 0x101f0201, 0x407b0001, 0x203d0101, 0x40790001, 0x080f0301, 0x40770001, 0x203b0101, 0x40750001, 0x101d0201, 0x40730001, 0x20390101, 0x40710001, 0x04070401, 0x406f0001, 0x20370101, 0x406d0001, 0x101b0201, 0x406b0001, 0x20350101, 0x40690001, 0x080d0301, 0x40670001, 0x20330101, 0x40650001, 0x10190201, 0x40630001, 0x20310101, 0x40610001, 0x02030501, 0x405f0001, 0x202f0101, 0x405d0001, 0x10170201, 0x405b0001, 0x202d0101, 0x40590001, 0x080b0301, 0x40570001, 0x202b0101, 0x40550001, 0x10150201, 0x40530001, 0x20290101, 0x40510001, 0x04050401, 0x404f0001, 0x20270101, 0x404d0001, 0x10130201, 0x404b0001, 0x20250101, 0x40490001, 0x08090301, 0x40470001, 0x20230101, 0x40450001, 0x10110201, 0x40430001, 0x20210101, 0x40410001, 0x01010601, 0x403f0001, 0x201f0101, 0x403d0001, 0x100f0201, 0x403b0001, 0x201d0101, 0x40390001, 0x08070301, 0x40370001, 0x201b0101, 0x40350001, 0x100d0201, 0x40330001, 0x20190101, 0x40310001, 0x04030401, 0x402f0001, 0x20170101, 0x402d0001, 0x100b0201, 0x402b0001, 0x20150101, 0x40290001, 0x08050301, 0x40270001, 0x20130101, 0x40250001, 0x10090201, 0x40230001, 0x20110101, 0x40210001, 0x02010501, 0x401f0001, 0x200f0101, 0x401d0001, 0x10070201, 0x401b0001, 0x200d0101, 0x40190001, 0x08030301, 0x40170001, 0x200b0101, 0x40150001, 0x10050201, 0x40130001, 0x20090101, 0x40110001, 0x04010401, 0x400f0001, 0x20070101, 0x400d0001, 0x10030201, 0x400b0001, 0x20050101, 0x40090001, 0x08010301, 0x40070001, 0x20030101, 0x40050001, 0x10010201, 0x40030001, 0x20010101, 0x40010001, + 0x00018601, 0x3fff0001, 0x1fff0101, 0x3ffd0001, 0x0fff0201, 0x3ffb0001, 0x1ffd0101, 0x3ff90001, 0x07ff0301, 0x3ff70001, 0x1ffb0101, 0x3ff50001, 0x0ffd0201, 0x3ff30001, 0x1ff90101, 0x3ff10001, 0x03ff0401, 0x3fef0001, 0x1ff70101, 0x3fed0001, 0x0ffb0201, 0x3feb0001, 0x1ff50101, 0x3fe90001, 0x07fd0301, 0x3fe70001, 0x1ff30101, 0x3fe50001, 0x0ff90201, 0x3fe30001, 0x1ff10101, 0x3fe10001, 0x01ff0501, 0x3fdf0001, 0x1fef0101, 0x3fdd0001, 0x0ff70201, 0x3fdb0001, 0x1fed0101, 0x3fd90001, 0x07fb0301, 0x3fd70001, 0x1feb0101, 0x3fd50001, 0x0ff50201, 0x3fd30001, 0x1fe90101, 0x3fd10001, 0x03fd0401, 0x3fcf0001, 0x1fe70101, 0x3fcd0001, 0x0ff30201, 0x3fcb0001, 0x1fe50101, 0x3fc90001, 0x07f90301, 0x3fc70001, 0x1fe30101, 0x3fc50001, 0x0ff10201, 0x3fc30001, 0x1fe10101, 0x3fc10001, 0x00ff0601, 0x3fbf0001, 0x1fdf0101, 0x3fbd0001, 0x0fef0201, 0x3fbb0001, 0x1fdd0101, 0x3fb90001, 0x07f70301, 0x3fb70001, 0x1fdb0101, 0x3fb50001, 0x0fed0201, 0x3fb30001, 0x1fd90101, 0x3fb10001, 0x03fb0401, 0x3faf0001, 0x1fd70101, 0x3fad0001, 0x0feb0201, 0x3fab0001, 0x1fd50101, 0x3fa90001, 0x07f50301, 0x3fa70001, 0x1fd30101, 0x3fa50001, 0x0fe90201, 0x3fa30001, 0x1fd10101, 0x3fa10001, 0x01fd0501, 0x3f9f0001, 0x1fcf0101, 0x3f9d0001, 0x0fe70201, 0x3f9b0001, 0x1fcd0101, 0x3f990001, 0x07f30301, 0x3f970001, 0x1fcb0101, 0x3f950001, 0x0fe50201, 0x3f930001, 0x1fc90101, 0x3f910001, 0x03f90401, 0x3f8f0001, 0x1fc70101, 0x3f8d0001, 0x0fe30201, 0x3f8b0001, 0x1fc50101, 0x3f890001, 0x07f10301, 0x3f870001, 0x1fc30101, 0x3f850001, 0x0fe10201, 0x3f830001, 0x1fc10101, 0x3f810001, 0x007f1601, 0x3f7f0001, 0x1fbf0101, 0x3f7d0001, 0x0fdf0201, 0x3f7b0001, 0x1fbd0101, 0x3f790001, 0x07ef0301, 0x3f770001, 0x1fbb0101, 0x3f750001, 0x0fdd0201, 0x3f730001, 0x1fb90101, 0x3f710001, 0x03f70401, 0x3f6f0001, 0x1fb70101, 0x3f6d0001, 0x0fdb0201, 0x3f6b0001, 0x1fb50101, 0x3f690001, 0x07ed0301, 0x3f670001, 0x1fb30101, 0x3f650001, 0x0fd90201, 0x3f630001, 0x1fb10101, 0x3f610001, 0x01fb0501, 0x3f5f0001, 0x1faf0101, 0x3f5d0001, 0x0fd70201, 0x3f5b0001, 0x1fad0101, 0x3f590001, 0x07eb0301, 0x3f570001, 0x1fab0101, 0x3f550001, 0x0fd50201, 0x3f530001, 0x1fa90101, 0x3f510001, 0x03f50401, 0x3f4f0001, 0x1fa70101, 0x3f4d0001, 0x0fd30201, 0x3f4b0001, 0x1fa50101, 0x3f490001, 0x07e90301, 0x3f470001, 0x1fa30101, 0x3f450001, 0x0fd10201, 0x3f430001, 0x1fa10101, 0x3f410001, 0x00fd0601, 0x3f3f0001, 0x1f9f0101, 0x3f3d0001, 0x0fcf0201, 0x3f3b0001, 0x1f9d0101, 0x3f390001, 0x07e70301, 0x3f370001, 0x1f9b0101, 0x3f350001, 0x0fcd0201, 0x3f330001, 0x1f990101, 0x3f310001, 0x03f30401, 0x3f2f0001, 0x1f970101, 0x3f2d0001, 0x0fcb0201, 0x3f2b0001, 0x1f950101, 0x3f290001, 0x07e50301, 0x3f270001, 0x1f930101, 0x3f250001, 0x0fc90201, 0x3f230001, 0x1f910101, 0x3f210001, 0x01f90501, 0x3f1f0001, 0x1f8f0101, 0x3f1d0001, 0x0fc70201, 0x3f1b0001, 0x1f8d0101, 0x3f190001, 0x07e30301, 0x3f170001, 0x1f8b0101, 0x3f150001, 0x0fc50201, 0x3f130001, 0x1f890101, 0x3f110001, 0x03f10401, 0x3f0f0001, 0x1f870101, 0x3f0d0001, 0x0fc30201, 0x3f0b0001, 0x1f850101, 0x3f090001, 0x07e10301, 0x3f070001, 0x1f830101, 0x3f050001, 0x0fc10201, 0x3f030001, 0x1f810101, 0x3f010001, + 0x003f2601, 0x3eff0001, 0x1f7f0101, 0x3efd0001, 0x0fbf0201, 0x3efb0001, 0x1f7d0101, 0x3ef90001, 0x07df0301, 0x3ef70001, 0x1f7b0101, 0x3ef50001, 0x0fbd0201, 0x3ef30001, 0x1f790101, 0x3ef10001, 0x03ef0401, 0x3eef0001, 0x1f770101, 0x3eed0001, 0x0fbb0201, 0x3eeb0001, 0x1f750101, 0x3ee90001, 0x07dd0301, 0x3ee70001, 0x1f730101, 0x3ee50001, 0x0fb90201, 0x3ee30001, 0x1f710101, 0x3ee10001, 0x01f70501, 0x3edf0001, 0x1f6f0101, 0x3edd0001, 0x0fb70201, 0x3edb0001, 0x1f6d0101, 0x3ed90001, 0x07db0301, 0x3ed70001, 0x1f6b0101, 0x3ed50001, 0x0fb50201, 0x3ed30001, 0x1f690101, 0x3ed10001, 0x03ed0401, 0x3ecf0001, 0x1f670101, 0x3ecd0001, 0x0fb30201, 0x3ecb0001, 0x1f650101, 0x3ec90001, 0x07d90301, 0x3ec70001, 0x1f630101, 0x3ec50001, 0x0fb10201, 0x3ec30001, 0x1f610101, 0x3ec10001, 0x00fb0601, 0x3ebf0001, 0x1f5f0101, 0x3ebd0001, 0x0faf0201, 0x3ebb0001, 0x1f5d0101, 0x3eb90001, 0x07d70301, 0x3eb70001, 0x1f5b0101, 0x3eb50001, 0x0fad0201, 0x3eb30001, 0x1f590101, 0x3eb10001, 0x03eb0401, 0x3eaf0001, 0x1f570101, 0x3ead0001, 0x0fab0201, 0x3eab0001, 0x1f550101, 0x3ea90001, 0x07d50301, 0x3ea70001, 0x1f530101, 0x3ea50001, 0x0fa90201, 0x3ea30001, 0x1f510101, 0x3ea10001, 0x01f50501, 0x3e9f0001, 0x1f4f0101, 0x3e9d0001, 0x0fa70201, 0x3e9b0001, 0x1f4d0101, 0x3e990001, 0x07d30301, 0x3e970001, 0x1f4b0101, 0x3e950001, 0x0fa50201, 0x3e930001, 0x1f490101, 0x3e910001, 0x03e90401, 0x3e8f0001, 0x1f470101, 0x3e8d0001, 0x0fa30201, 0x3e8b0001, 0x1f450101, 0x3e890001, 0x07d10301, 0x3e870001, 0x1f430101, 0x3e850001, 0x0fa10201, 0x3e830001, 0x1f410101, 0x3e810001, 0x007d1601, 0x3e7f0001, 0x1f3f0101, 0x3e7d0001, 0x0f9f0201, 0x3e7b0001, 0x1f3d0101, 0x3e790001, 0x07cf0301, 0x3e770001, 0x1f3b0101, 0x3e750001, 0x0f9d0201, 0x3e730001, 0x1f390101, 0x3e710001, 0x03e70401, 0x3e6f0001, 0x1f370101, 0x3e6d0001, 0x0f9b0201, 0x3e6b0001, 0x1f350101, 0x3e690001, 0x07cd0301, 0x3e670001, 0x1f330101, 0x3e650001, 0x0f990201, 0x3e630001, 0x1f310101, 0x3e610001, 0x01f30501, 0x3e5f0001, 0x1f2f0101, 0x3e5d0001, 0x0f970201, 0x3e5b0001, 0x1f2d0101, 0x3e590001, 0x07cb0301, 0x3e570001, 0x1f2b0101, 0x3e550001, 0x0f950201, 0x3e530001, 0x1f290101, 0x3e510001, 0x03e50401, 0x3e4f0001, 0x1f270101, 0x3e4d0001, 0x0f930201, 0x3e4b0001, 0x1f250101, 0x3e490001, 0x07c90301, 0x3e470001, 0x1f230101, 0x3e450001, 0x0f910201, 0x3e430001, 0x1f210101, 0x3e410001, 0x00f90601, 0x3e3f0001, 0x1f1f0101, 0x3e3d0001, 0x0f8f0201, 0x3e3b0001, 0x1f1d0101, 0x3e390001, 0x07c70301, 0x3e370001, 0x1f1b0101, 0x3e350001, 0x0f8d0201, 0x3e330001, 0x1f190101, 0x3e310001, 0x03e30401, 0x3e2f0001, 0x1f170101, 0x3e2d0001, 0x0f8b0201, 0x3e2b0001, 0x1f150101, 0x3e290001, 0x07c50301, 0x3e270001, 0x1f130101, 0x3e250001, 0x0f890201, 0x3e230001, 0x1f110101, 0x3e210001, 0x01f10501, 0x3e1f0001, 0x1f0f0101, 0x3e1d0001, 0x0f870201, 0x3e1b0001, 0x1f0d0101, 0x3e190001, 0x07c30301, 0x3e170001, 0x1f0b0101, 0x3e150001, 0x0f850201, 0x3e130001, 0x1f090101, 0x3e110001, 0x03e10401, 0x3e0f0001, 0x1f070101, 0x3e0d0001, 0x0f830201, 0x3e0b0001, 0x1f050101, 0x3e090001, 0x07c10301, 0x3e070001, 0x1f030101, 0x3e050001, 0x0f810201, 0x3e030001, 0x1f010101, 0x3e010001, + 0x001f3601, 0x3dff0001, 0x1eff0101, 0x3dfd0001, 0x0f7f0201, 0x3dfb0001, 0x1efd0101, 0x3df90001, 0x07bf0301, 0x3df70001, 0x1efb0101, 0x3df50001, 0x0f7d0201, 0x3df30001, 0x1ef90101, 0x3df10001, 0x03df0401, 0x3def0001, 0x1ef70101, 0x3ded0001, 0x0f7b0201, 0x3deb0001, 0x1ef50101, 0x3de90001, 0x07bd0301, 0x3de70001, 0x1ef30101, 0x3de50001, 0x0f790201, 0x3de30001, 0x1ef10101, 0x3de10001, 0x01ef0501, 0x3ddf0001, 0x1eef0101, 0x3ddd0001, 0x0f770201, 0x3ddb0001, 0x1eed0101, 0x3dd90001, 0x07bb0301, 0x3dd70001, 0x1eeb0101, 0x3dd50001, 0x0f750201, 0x3dd30001, 0x1ee90101, 0x3dd10001, 0x03dd0401, 0x3dcf0001, 0x1ee70101, 0x3dcd0001, 0x0f730201, 0x3dcb0001, 0x1ee50101, 0x3dc90001, 0x07b90301, 0x3dc70001, 0x1ee30101, 0x3dc50001, 0x0f710201, 0x3dc30001, 0x1ee10101, 0x3dc10001, 0x00f70601, 0x3dbf0001, 0x1edf0101, 0x3dbd0001, 0x0f6f0201, 0x3dbb0001, 0x1edd0101, 0x3db90001, 0x07b70301, 0x3db70001, 0x1edb0101, 0x3db50001, 0x0f6d0201, 0x3db30001, 0x1ed90101, 0x3db10001, 0x03db0401, 0x3daf0001, 0x1ed70101, 0x3dad0001, 0x0f6b0201, 0x3dab0001, 0x1ed50101, 0x3da90001, 0x07b50301, 0x3da70001, 0x1ed30101, 0x3da50001, 0x0f690201, 0x3da30001, 0x1ed10101, 0x3da10001, 0x01ed0501, 0x3d9f0001, 0x1ecf0101, 0x3d9d0001, 0x0f670201, 0x3d9b0001, 0x1ecd0101, 0x3d990001, 0x07b30301, 0x3d970001, 0x1ecb0101, 0x3d950001, 0x0f650201, 0x3d930001, 0x1ec90101, 0x3d910001, 0x03d90401, 0x3d8f0001, 0x1ec70101, 0x3d8d0001, 0x0f630201, 0x3d8b0001, 0x1ec50101, 0x3d890001, 0x07b10301, 0x3d870001, 0x1ec30101, 0x3d850001, 0x0f610201, 0x3d830001, 0x1ec10101, 0x3d810001, 0x007b1601, 0x3d7f0001, 0x1ebf0101, 0x3d7d0001, 0x0f5f0201, 0x3d7b0001, 0x1ebd0101, 0x3d790001, 0x07af0301, 0x3d770001, 0x1ebb0101, 0x3d750001, 0x0f5d0201, 0x3d730001, 0x1eb90101, 0x3d710001, 0x03d70401, 0x3d6f0001, 0x1eb70101, 0x3d6d0001, 0x0f5b0201, 0x3d6b0001, 0x1eb50101, 0x3d690001, 0x07ad0301, 0x3d670001, 0x1eb30101, 0x3d650001, 0x0f590201, 0x3d630001, 0x1eb10101, 0x3d610001, 0x01eb0501, 0x3d5f0001, 0x1eaf0101, 0x3d5d0001, 0x0f570201, 0x3d5b0001, 0x1ead0101, 0x3d590001, 0x07ab0301, 0x3d570001, 0x1eab0101, 0x3d550001, 0x0f550201, 0x3d530001, 0x1ea90101, 0x3d510001, 0x03d50401, 0x3d4f0001, 0x1ea70101, 0x3d4d0001, 0x0f530201, 0x3d4b0001, 0x1ea50101, 0x3d490001, 0x07a90301, 0x3d470001, 0x1ea30101, 0x3d450001, 0x0f510201, 0x3d430001, 0x1ea10101, 0x3d410001, 0x00f50601, 0x3d3f0001, 0x1e9f0101, 0x3d3d0001, 0x0f4f0201, 0x3d3b0001, 0x1e9d0101, 0x3d390001, 0x07a70301, 0x3d370001, 0x1e9b0101, 0x3d350001, 0x0f4d0201, 0x3d330001, 0x1e990101, 0x3d310001, 0x03d30401, 0x3d2f0001, 0x1e970101, 0x3d2d0001, 0x0f4b0201, 0x3d2b0001, 0x1e950101, 0x3d290001, 0x07a50301, 0x3d270001, 0x1e930101, 0x3d250001, 0x0f490201, 0x3d230001, 0x1e910101, 0x3d210001, 0x01e90501, 0x3d1f0001, 0x1e8f0101, 0x3d1d0001, 0x0f470201, 0x3d1b0001, 0x1e8d0101, 0x3d190001, 0x07a30301, 0x3d170001, 0x1e8b0101, 0x3d150001, 0x0f450201, 0x3d130001, 0x1e890101, 0x3d110001, 0x03d10401, 0x3d0f0001, 0x1e870101, 0x3d0d0001, 0x0f430201, 0x3d0b0001, 0x1e850101, 0x3d090001, 0x07a10301, 0x3d070001, 0x1e830101, 0x3d050001, 0x0f410201, 0x3d030001, 0x1e810101, 0x3d010001, + 0x003d2601, 0x3cff0001, 0x1e7f0101, 0x3cfd0001, 0x0f3f0201, 0x3cfb0001, 0x1e7d0101, 0x3cf90001, 0x079f0301, 0x3cf70001, 0x1e7b0101, 0x3cf50001, 0x0f3d0201, 0x3cf30001, 0x1e790101, 0x3cf10001, 0x03cf0401, 0x3cef0001, 0x1e770101, 0x3ced0001, 0x0f3b0201, 0x3ceb0001, 0x1e750101, 0x3ce90001, 0x079d0301, 0x3ce70001, 0x1e730101, 0x3ce50001, 0x0f390201, 0x3ce30001, 0x1e710101, 0x3ce10001, 0x01e70501, 0x3cdf0001, 0x1e6f0101, 0x3cdd0001, 0x0f370201, 0x3cdb0001, 0x1e6d0101, 0x3cd90001, 0x079b0301, 0x3cd70001, 0x1e6b0101, 0x3cd50001, 0x0f350201, 0x3cd30001, 0x1e690101, 0x3cd10001, 0x03cd0401, 0x3ccf0001, 0x1e670101, 0x3ccd0001, 0x0f330201, 0x3ccb0001, 0x1e650101, 0x3cc90001, 0x07990301, 0x3cc70001, 0x1e630101, 0x3cc50001, 0x0f310201, 0x3cc30001, 0x1e610101, 0x3cc10001, 0x00f30601, 0x3cbf0001, 0x1e5f0101, 0x3cbd0001, 0x0f2f0201, 0x3cbb0001, 0x1e5d0101, 0x3cb90001, 0x07970301, 0x3cb70001, 0x1e5b0101, 0x3cb50001, 0x0f2d0201, 0x3cb30001, 0x1e590101, 0x3cb10001, 0x03cb0401, 0x3caf0001, 0x1e570101, 0x3cad0001, 0x0f2b0201, 0x3cab0001, 0x1e550101, 0x3ca90001, 0x07950301, 0x3ca70001, 0x1e530101, 0x3ca50001, 0x0f290201, 0x3ca30001, 0x1e510101, 0x3ca10001, 0x01e50501, 0x3c9f0001, 0x1e4f0101, 0x3c9d0001, 0x0f270201, 0x3c9b0001, 0x1e4d0101, 0x3c990001, 0x07930301, 0x3c970001, 0x1e4b0101, 0x3c950001, 0x0f250201, 0x3c930001, 0x1e490101, 0x3c910001, 0x03c90401, 0x3c8f0001, 0x1e470101, 0x3c8d0001, 0x0f230201, 0x3c8b0001, 0x1e450101, 0x3c890001, 0x07910301, 0x3c870001, 0x1e430101, 0x3c850001, 0x0f210201, 0x3c830001, 0x1e410101, 0x3c810001, 0x00791601, 0x3c7f0001, 0x1e3f0101, 0x3c7d0001, 0x0f1f0201, 0x3c7b0001, 0x1e3d0101, 0x3c790001, 0x078f0301, 0x3c770001, 0x1e3b0101, 0x3c750001, 0x0f1d0201, 0x3c730001, 0x1e390101, 0x3c710001, 0x03c70401, 0x3c6f0001, 0x1e370101, 0x3c6d0001, 0x0f1b0201, 0x3c6b0001, 0x1e350101, 0x3c690001, 0x078d0301, 0x3c670001, 0x1e330101, 0x3c650001, 0x0f190201, 0x3c630001, 0x1e310101, 0x3c610001, 0x01e30501, 0x3c5f0001, 0x1e2f0101, 0x3c5d0001, 0x0f170201, 0x3c5b0001, 0x1e2d0101, 0x3c590001, 0x078b0301, 0x3c570001, 0x1e2b0101, 0x3c550001, 0x0f150201, 0x3c530001, 0x1e290101, 0x3c510001, 0x03c50401, 0x3c4f0001, 0x1e270101, 0x3c4d0001, 0x0f130201, 0x3c4b0001, 0x1e250101, 0x3c490001, 0x07890301, 0x3c470001, 0x1e230101, 0x3c450001, 0x0f110201, 0x3c430001, 0x1e210101, 0x3c410001, 0x00f10601, 0x3c3f0001, 0x1e1f0101, 0x3c3d0001, 0x0f0f0201, 0x3c3b0001, 0x1e1d0101, 0x3c390001, 0x07870301, 0x3c370001, 0x1e1b0101, 0x3c350001, 0x0f0d0201, 0x3c330001, 0x1e190101, 0x3c310001, 0x03c30401, 0x3c2f0001, 0x1e170101, 0x3c2d0001, 0x0f0b0201, 0x3c2b0001, 0x1e150101, 0x3c290001, 0x07850301, 0x3c270001, 0x1e130101, 0x3c250001, 0x0f090201, 0x3c230001, 0x1e110101, 0x3c210001, 0x01e10501, 0x3c1f0001, 0x1e0f0101, 0x3c1d0001, 0x0f070201, 0x3c1b0001, 0x1e0d0101, 0x3c190001, 0x07830301, 0x3c170001, 0x1e0b0101, 0x3c150001, 0x0f050201, 0x3c130001, 0x1e090101, 0x3c110001, 0x03c10401, 0x3c0f0001, 0x1e070101, 0x3c0d0001, 0x0f030201, 0x3c0b0001, 0x1e050101, 0x3c090001, 0x07810301, 0x3c070001, 0x1e030101, 0x3c050001, 0x0f010201, 0x3c030001, 0x1e010101, 0x3c010001, + 0x000f4601, 0x3bff0001, 0x1dff0101, 0x3bfd0001, 0x0eff0201, 0x3bfb0001, 0x1dfd0101, 0x3bf90001, 0x077f0301, 0x3bf70001, 0x1dfb0101, 0x3bf50001, 0x0efd0201, 0x3bf30001, 0x1df90101, 0x3bf10001, 0x03bf0401, 0x3bef0001, 0x1df70101, 0x3bed0001, 0x0efb0201, 0x3beb0001, 0x1df50101, 0x3be90001, 0x077d0301, 0x3be70001, 0x1df30101, 0x3be50001, 0x0ef90201, 0x3be30001, 0x1df10101, 0x3be10001, 0x01df0501, 0x3bdf0001, 0x1def0101, 0x3bdd0001, 0x0ef70201, 0x3bdb0001, 0x1ded0101, 0x3bd90001, 0x077b0301, 0x3bd70001, 0x1deb0101, 0x3bd50001, 0x0ef50201, 0x3bd30001, 0x1de90101, 0x3bd10001, 0x03bd0401, 0x3bcf0001, 0x1de70101, 0x3bcd0001, 0x0ef30201, 0x3bcb0001, 0x1de50101, 0x3bc90001, 0x07790301, 0x3bc70001, 0x1de30101, 0x3bc50001, 0x0ef10201, 0x3bc30001, 0x1de10101, 0x3bc10001, 0x00ef0601, 0x3bbf0001, 0x1ddf0101, 0x3bbd0001, 0x0eef0201, 0x3bbb0001, 0x1ddd0101, 0x3bb90001, 0x07770301, 0x3bb70001, 0x1ddb0101, 0x3bb50001, 0x0eed0201, 0x3bb30001, 0x1dd90101, 0x3bb10001, 0x03bb0401, 0x3baf0001, 0x1dd70101, 0x3bad0001, 0x0eeb0201, 0x3bab0001, 0x1dd50101, 0x3ba90001, 0x07750301, 0x3ba70001, 0x1dd30101, 0x3ba50001, 0x0ee90201, 0x3ba30001, 0x1dd10101, 0x3ba10001, 0x01dd0501, 0x3b9f0001, 0x1dcf0101, 0x3b9d0001, 0x0ee70201, 0x3b9b0001, 0x1dcd0101, 0x3b990001, 0x07730301, 0x3b970001, 0x1dcb0101, 0x3b950001, 0x0ee50201, 0x3b930001, 0x1dc90101, 0x3b910001, 0x03b90401, 0x3b8f0001, 0x1dc70101, 0x3b8d0001, 0x0ee30201, 0x3b8b0001, 0x1dc50101, 0x3b890001, 0x07710301, 0x3b870001, 0x1dc30101, 0x3b850001, 0x0ee10201, 0x3b830001, 0x1dc10101, 0x3b810001, 0x00771601, 0x3b7f0001, 0x1dbf0101, 0x3b7d0001, 0x0edf0201, 0x3b7b0001, 0x1dbd0101, 0x3b790001, 0x076f0301, 0x3b770001, 0x1dbb0101, 0x3b750001, 0x0edd0201, 0x3b730001, 0x1db90101, 0x3b710001, 0x03b70401, 0x3b6f0001, 0x1db70101, 0x3b6d0001, 0x0edb0201, 0x3b6b0001, 0x1db50101, 0x3b690001, 0x076d0301, 0x3b670001, 0x1db30101, 0x3b650001, 0x0ed90201, 0x3b630001, 0x1db10101, 0x3b610001, 0x01db0501, 0x3b5f0001, 0x1daf0101, 0x3b5d0001, 0x0ed70201, 0x3b5b0001, 0x1dad0101, 0x3b590001, 0x076b0301, 0x3b570001, 0x1dab0101, 0x3b550001, 0x0ed50201, 0x3b530001, 0x1da90101, 0x3b510001, 0x03b50401, 0x3b4f0001, 0x1da70101, 0x3b4d0001, 0x0ed30201, 0x3b4b0001, 0x1da50101, 0x3b490001, 0x07690301, 0x3b470001, 0x1da30101, 0x3b450001, 0x0ed10201, 0x3b430001, 0x1da10101, 0x3b410001, 0x00ed0601, 0x3b3f0001, 0x1d9f0101, 0x3b3d0001, 0x0ecf0201, 0x3b3b0001, 0x1d9d0101, 0x3b390001, 0x07670301, 0x3b370001, 0x1d9b0101, 0x3b350001, 0x0ecd0201, 0x3b330001, 0x1d990101, 0x3b310001, 0x03b30401, 0x3b2f0001, 0x1d970101, 0x3b2d0001, 0x0ecb0201, 0x3b2b0001, 0x1d950101, 0x3b290001, 0x07650301, 0x3b270001, 0x1d930101, 0x3b250001, 0x0ec90201, 0x3b230001, 0x1d910101, 0x3b210001, 0x01d90501, 0x3b1f0001, 0x1d8f0101, 0x3b1d0001, 0x0ec70201, 0x3b1b0001, 0x1d8d0101, 0x3b190001, 0x07630301, 0x3b170001, 0x1d8b0101, 0x3b150001, 0x0ec50201, 0x3b130001, 0x1d890101, 0x3b110001, 0x03b10401, 0x3b0f0001, 0x1d870101, 0x3b0d0001, 0x0ec30201, 0x3b0b0001, 0x1d850101, 0x3b090001, 0x07610301, 0x3b070001, 0x1d830101, 0x3b050001, 0x0ec10201, 0x3b030001, 0x1d810101, 0x3b010001, + 0x003b2601, 0x3aff0001, 0x1d7f0101, 0x3afd0001, 0x0ebf0201, 0x3afb0001, 0x1d7d0101, 0x3af90001, 0x075f0301, 0x3af70001, 0x1d7b0101, 0x3af50001, 0x0ebd0201, 0x3af30001, 0x1d790101, 0x3af10001, 0x03af0401, 0x3aef0001, 0x1d770101, 0x3aed0001, 0x0ebb0201, 0x3aeb0001, 0x1d750101, 0x3ae90001, 0x075d0301, 0x3ae70001, 0x1d730101, 0x3ae50001, 0x0eb90201, 0x3ae30001, 0x1d710101, 0x3ae10001, 0x01d70501, 0x3adf0001, 0x1d6f0101, 0x3add0001, 0x0eb70201, 0x3adb0001, 0x1d6d0101, 0x3ad90001, 0x075b0301, 0x3ad70001, 0x1d6b0101, 0x3ad50001, 0x0eb50201, 0x3ad30001, 0x1d690101, 0x3ad10001, 0x03ad0401, 0x3acf0001, 0x1d670101, 0x3acd0001, 0x0eb30201, 0x3acb0001, 0x1d650101, 0x3ac90001, 0x07590301, 0x3ac70001, 0x1d630101, 0x3ac50001, 0x0eb10201, 0x3ac30001, 0x1d610101, 0x3ac10001, 0x00eb0601, 0x3abf0001, 0x1d5f0101, 0x3abd0001, 0x0eaf0201, 0x3abb0001, 0x1d5d0101, 0x3ab90001, 0x07570301, 0x3ab70001, 0x1d5b0101, 0x3ab50001, 0x0ead0201, 0x3ab30001, 0x1d590101, 0x3ab10001, 0x03ab0401, 0x3aaf0001, 0x1d570101, 0x3aad0001, 0x0eab0201, 0x3aab0001, 0x1d550101, 0x3aa90001, 0x07550301, 0x3aa70001, 0x1d530101, 0x3aa50001, 0x0ea90201, 0x3aa30001, 0x1d510101, 0x3aa10001, 0x01d50501, 0x3a9f0001, 0x1d4f0101, 0x3a9d0001, 0x0ea70201, 0x3a9b0001, 0x1d4d0101, 0x3a990001, 0x07530301, 0x3a970001, 0x1d4b0101, 0x3a950001, 0x0ea50201, 0x3a930001, 0x1d490101, 0x3a910001, 0x03a90401, 0x3a8f0001, 0x1d470101, 0x3a8d0001, 0x0ea30201, 0x3a8b0001, 0x1d450101, 0x3a890001, 0x07510301, 0x3a870001, 0x1d430101, 0x3a850001, 0x0ea10201, 0x3a830001, 0x1d410101, 0x3a810001, 0x00751601, 0x3a7f0001, 0x1d3f0101, 0x3a7d0001, 0x0e9f0201, 0x3a7b0001, 0x1d3d0101, 0x3a790001, 0x074f0301, 0x3a770001, 0x1d3b0101, 0x3a750001, 0x0e9d0201, 0x3a730001, 0x1d390101, 0x3a710001, 0x03a70401, 0x3a6f0001, 0x1d370101, 0x3a6d0001, 0x0e9b0201, 0x3a6b0001, 0x1d350101, 0x3a690001, 0x074d0301, 0x3a670001, 0x1d330101, 0x3a650001, 0x0e990201, 0x3a630001, 0x1d310101, 0x3a610001, 0x01d30501, 0x3a5f0001, 0x1d2f0101, 0x3a5d0001, 0x0e970201, 0x3a5b0001, 0x1d2d0101, 0x3a590001, 0x074b0301, 0x3a570001, 0x1d2b0101, 0x3a550001, 0x0e950201, 0x3a530001, 0x1d290101, 0x3a510001, 0x03a50401, 0x3a4f0001, 0x1d270101, 0x3a4d0001, 0x0e930201, 0x3a4b0001, 0x1d250101, 0x3a490001, 0x07490301, 0x3a470001, 0x1d230101, 0x3a450001, 0x0e910201, 0x3a430001, 0x1d210101, 0x3a410001, 0x00e90601, 0x3a3f0001, 0x1d1f0101, 0x3a3d0001, 0x0e8f0201, 0x3a3b0001, 0x1d1d0101, 0x3a390001, 0x07470301, 0x3a370001, 0x1d1b0101, 0x3a350001, 0x0e8d0201, 0x3a330001, 0x1d190101, 0x3a310001, 0x03a30401, 0x3a2f0001, 0x1d170101, 0x3a2d0001, 0x0e8b0201, 0x3a2b0001, 0x1d150101, 0x3a290001, 0x07450301, 0x3a270001, 0x1d130101, 0x3a250001, 0x0e890201, 0x3a230001, 0x1d110101, 0x3a210001, 0x01d10501, 0x3a1f0001, 0x1d0f0101, 0x3a1d0001, 0x0e870201, 0x3a1b0001, 0x1d0d0101, 0x3a190001, 0x07430301, 0x3a170001, 0x1d0b0101, 0x3a150001, 0x0e850201, 0x3a130001, 0x1d090101, 0x3a110001, 0x03a10401, 0x3a0f0001, 0x1d070101, 0x3a0d0001, 0x0e830201, 0x3a0b0001, 0x1d050101, 0x3a090001, 0x07410301, 0x3a070001, 0x1d030101, 0x3a050001, 0x0e810201, 0x3a030001, 0x1d010101, 0x3a010001, + 0x001d3601, 0x39ff0001, 0x1cff0101, 0x39fd0001, 0x0e7f0201, 0x39fb0001, 0x1cfd0101, 0x39f90001, 0x073f0301, 0x39f70001, 0x1cfb0101, 0x39f50001, 0x0e7d0201, 0x39f30001, 0x1cf90101, 0x39f10001, 0x039f0401, 0x39ef0001, 0x1cf70101, 0x39ed0001, 0x0e7b0201, 0x39eb0001, 0x1cf50101, 0x39e90001, 0x073d0301, 0x39e70001, 0x1cf30101, 0x39e50001, 0x0e790201, 0x39e30001, 0x1cf10101, 0x39e10001, 0x01cf0501, 0x39df0001, 0x1cef0101, 0x39dd0001, 0x0e770201, 0x39db0001, 0x1ced0101, 0x39d90001, 0x073b0301, 0x39d70001, 0x1ceb0101, 0x39d50001, 0x0e750201, 0x39d30001, 0x1ce90101, 0x39d10001, 0x039d0401, 0x39cf0001, 0x1ce70101, 0x39cd0001, 0x0e730201, 0x39cb0001, 0x1ce50101, 0x39c90001, 0x07390301, 0x39c70001, 0x1ce30101, 0x39c50001, 0x0e710201, 0x39c30001, 0x1ce10101, 0x39c10001, 0x00e70601, 0x39bf0001, 0x1cdf0101, 0x39bd0001, 0x0e6f0201, 0x39bb0001, 0x1cdd0101, 0x39b90001, 0x07370301, 0x39b70001, 0x1cdb0101, 0x39b50001, 0x0e6d0201, 0x39b30001, 0x1cd90101, 0x39b10001, 0x039b0401, 0x39af0001, 0x1cd70101, 0x39ad0001, 0x0e6b0201, 0x39ab0001, 0x1cd50101, 0x39a90001, 0x07350301, 0x39a70001, 0x1cd30101, 0x39a50001, 0x0e690201, 0x39a30001, 0x1cd10101, 0x39a10001, 0x01cd0501, 0x399f0001, 0x1ccf0101, 0x399d0001, 0x0e670201, 0x399b0001, 0x1ccd0101, 0x39990001, 0x07330301, 0x39970001, 0x1ccb0101, 0x39950001, 0x0e650201, 0x39930001, 0x1cc90101, 0x39910001, 0x03990401, 0x398f0001, 0x1cc70101, 0x398d0001, 0x0e630201, 0x398b0001, 0x1cc50101, 0x39890001, 0x07310301, 0x39870001, 0x1cc30101, 0x39850001, 0x0e610201, 0x39830001, 0x1cc10101, 0x39810001, 0x00731601, 0x397f0001, 0x1cbf0101, 0x397d0001, 0x0e5f0201, 0x397b0001, 0x1cbd0101, 0x39790001, 0x072f0301, 0x39770001, 0x1cbb0101, 0x39750001, 0x0e5d0201, 0x39730001, 0x1cb90101, 0x39710001, 0x03970401, 0x396f0001, 0x1cb70101, 0x396d0001, 0x0e5b0201, 0x396b0001, 0x1cb50101, 0x39690001, 0x072d0301, 0x39670001, 0x1cb30101, 0x39650001, 0x0e590201, 0x39630001, 0x1cb10101, 0x39610001, 0x01cb0501, 0x395f0001, 0x1caf0101, 0x395d0001, 0x0e570201, 0x395b0001, 0x1cad0101, 0x39590001, 0x072b0301, 0x39570001, 0x1cab0101, 0x39550001, 0x0e550201, 0x39530001, 0x1ca90101, 0x39510001, 0x03950401, 0x394f0001, 0x1ca70101, 0x394d0001, 0x0e530201, 0x394b0001, 0x1ca50101, 0x39490001, 0x07290301, 0x39470001, 0x1ca30101, 0x39450001, 0x0e510201, 0x39430001, 0x1ca10101, 0x39410001, 0x00e50601, 0x393f0001, 0x1c9f0101, 0x393d0001, 0x0e4f0201, 0x393b0001, 0x1c9d0101, 0x39390001, 0x07270301, 0x39370001, 0x1c9b0101, 0x39350001, 0x0e4d0201, 0x39330001, 0x1c990101, 0x39310001, 0x03930401, 0x392f0001, 0x1c970101, 0x392d0001, 0x0e4b0201, 0x392b0001, 0x1c950101, 0x39290001, 0x07250301, 0x39270001, 0x1c930101, 0x39250001, 0x0e490201, 0x39230001, 0x1c910101, 0x39210001, 0x01c90501, 0x391f0001, 0x1c8f0101, 0x391d0001, 0x0e470201, 0x391b0001, 0x1c8d0101, 0x39190001, 0x07230301, 0x39170001, 0x1c8b0101, 0x39150001, 0x0e450201, 0x39130001, 0x1c890101, 0x39110001, 0x03910401, 0x390f0001, 0x1c870101, 0x390d0001, 0x0e430201, 0x390b0001, 0x1c850101, 0x39090001, 0x07210301, 0x39070001, 0x1c830101, 0x39050001, 0x0e410201, 0x39030001, 0x1c810101, 0x39010001, + 0x00392601, 0x38ff0001, 0x1c7f0101, 0x38fd0001, 0x0e3f0201, 0x38fb0001, 0x1c7d0101, 0x38f90001, 0x071f0301, 0x38f70001, 0x1c7b0101, 0x38f50001, 0x0e3d0201, 0x38f30001, 0x1c790101, 0x38f10001, 0x038f0401, 0x38ef0001, 0x1c770101, 0x38ed0001, 0x0e3b0201, 0x38eb0001, 0x1c750101, 0x38e90001, 0x071d0301, 0x38e70001, 0x1c730101, 0x38e50001, 0x0e390201, 0x38e30001, 0x1c710101, 0x38e10001, 0x01c70501, 0x38df0001, 0x1c6f0101, 0x38dd0001, 0x0e370201, 0x38db0001, 0x1c6d0101, 0x38d90001, 0x071b0301, 0x38d70001, 0x1c6b0101, 0x38d50001, 0x0e350201, 0x38d30001, 0x1c690101, 0x38d10001, 0x038d0401, 0x38cf0001, 0x1c670101, 0x38cd0001, 0x0e330201, 0x38cb0001, 0x1c650101, 0x38c90001, 0x07190301, 0x38c70001, 0x1c630101, 0x38c50001, 0x0e310201, 0x38c30001, 0x1c610101, 0x38c10001, 0x00e30601, 0x38bf0001, 0x1c5f0101, 0x38bd0001, 0x0e2f0201, 0x38bb0001, 0x1c5d0101, 0x38b90001, 0x07170301, 0x38b70001, 0x1c5b0101, 0x38b50001, 0x0e2d0201, 0x38b30001, 0x1c590101, 0x38b10001, 0x038b0401, 0x38af0001, 0x1c570101, 0x38ad0001, 0x0e2b0201, 0x38ab0001, 0x1c550101, 0x38a90001, 0x07150301, 0x38a70001, 0x1c530101, 0x38a50001, 0x0e290201, 0x38a30001, 0x1c510101, 0x38a10001, 0x01c50501, 0x389f0001, 0x1c4f0101, 0x389d0001, 0x0e270201, 0x389b0001, 0x1c4d0101, 0x38990001, 0x07130301, 0x38970001, 0x1c4b0101, 0x38950001, 0x0e250201, 0x38930001, 0x1c490101, 0x38910001, 0x03890401, 0x388f0001, 0x1c470101, 0x388d0001, 0x0e230201, 0x388b0001, 0x1c450101, 0x38890001, 0x07110301, 0x38870001, 0x1c430101, 0x38850001, 0x0e210201, 0x38830001, 0x1c410101, 0x38810001, 0x00711601, 0x387f0001, 0x1c3f0101, 0x387d0001, 0x0e1f0201, 0x387b0001, 0x1c3d0101, 0x38790001, 0x070f0301, 0x38770001, 0x1c3b0101, 0x38750001, 0x0e1d0201, 0x38730001, 0x1c390101, 0x38710001, 0x03870401, 0x386f0001, 0x1c370101, 0x386d0001, 0x0e1b0201, 0x386b0001, 0x1c350101, 0x38690001, 0x070d0301, 0x38670001, 0x1c330101, 0x38650001, 0x0e190201, 0x38630001, 0x1c310101, 0x38610001, 0x01c30501, 0x385f0001, 0x1c2f0101, 0x385d0001, 0x0e170201, 0x385b0001, 0x1c2d0101, 0x38590001, 0x070b0301, 0x38570001, 0x1c2b0101, 0x38550001, 0x0e150201, 0x38530001, 0x1c290101, 0x38510001, 0x03850401, 0x384f0001, 0x1c270101, 0x384d0001, 0x0e130201, 0x384b0001, 0x1c250101, 0x38490001, 0x07090301, 0x38470001, 0x1c230101, 0x38450001, 0x0e110201, 0x38430001, 0x1c210101, 0x38410001, 0x00e10601, 0x383f0001, 0x1c1f0101, 0x383d0001, 0x0e0f0201, 0x383b0001, 0x1c1d0101, 0x38390001, 0x07070301, 0x38370001, 0x1c1b0101, 0x38350001, 0x0e0d0201, 0x38330001, 0x1c190101, 0x38310001, 0x03830401, 0x382f0001, 0x1c170101, 0x382d0001, 0x0e0b0201, 0x382b0001, 0x1c150101, 0x38290001, 0x07050301, 0x38270001, 0x1c130101, 0x38250001, 0x0e090201, 0x38230001, 0x1c110101, 0x38210001, 0x01c10501, 0x381f0001, 0x1c0f0101, 0x381d0001, 0x0e070201, 0x381b0001, 0x1c0d0101, 0x38190001, 0x07030301, 0x38170001, 0x1c0b0101, 0x38150001, 0x0e050201, 0x38130001, 0x1c090101, 0x38110001, 0x03810401, 0x380f0001, 0x1c070101, 0x380d0001, 0x0e030201, 0x380b0001, 0x1c050101, 0x38090001, 0x07010301, 0x38070001, 0x1c030101, 0x38050001, 0x0e010201, 0x38030001, 0x1c010101, 0x38010001, + 0x00075601, 0x37ff0001, 0x1bff0101, 0x37fd0001, 0x0dff0201, 0x37fb0001, 0x1bfd0101, 0x37f90001, 0x06ff0301, 0x37f70001, 0x1bfb0101, 0x37f50001, 0x0dfd0201, 0x37f30001, 0x1bf90101, 0x37f10001, 0x037f0401, 0x37ef0001, 0x1bf70101, 0x37ed0001, 0x0dfb0201, 0x37eb0001, 0x1bf50101, 0x37e90001, 0x06fd0301, 0x37e70001, 0x1bf30101, 0x37e50001, 0x0df90201, 0x37e30001, 0x1bf10101, 0x37e10001, 0x01bf0501, 0x37df0001, 0x1bef0101, 0x37dd0001, 0x0df70201, 0x37db0001, 0x1bed0101, 0x37d90001, 0x06fb0301, 0x37d70001, 0x1beb0101, 0x37d50001, 0x0df50201, 0x37d30001, 0x1be90101, 0x37d10001, 0x037d0401, 0x37cf0001, 0x1be70101, 0x37cd0001, 0x0df30201, 0x37cb0001, 0x1be50101, 0x37c90001, 0x06f90301, 0x37c70001, 0x1be30101, 0x37c50001, 0x0df10201, 0x37c30001, 0x1be10101, 0x37c10001, 0x00df0601, 0x37bf0001, 0x1bdf0101, 0x37bd0001, 0x0def0201, 0x37bb0001, 0x1bdd0101, 0x37b90001, 0x06f70301, 0x37b70001, 0x1bdb0101, 0x37b50001, 0x0ded0201, 0x37b30001, 0x1bd90101, 0x37b10001, 0x037b0401, 0x37af0001, 0x1bd70101, 0x37ad0001, 0x0deb0201, 0x37ab0001, 0x1bd50101, 0x37a90001, 0x06f50301, 0x37a70001, 0x1bd30101, 0x37a50001, 0x0de90201, 0x37a30001, 0x1bd10101, 0x37a10001, 0x01bd0501, 0x379f0001, 0x1bcf0101, 0x379d0001, 0x0de70201, 0x379b0001, 0x1bcd0101, 0x37990001, 0x06f30301, 0x37970001, 0x1bcb0101, 0x37950001, 0x0de50201, 0x37930001, 0x1bc90101, 0x37910001, 0x03790401, 0x378f0001, 0x1bc70101, 0x378d0001, 0x0de30201, 0x378b0001, 0x1bc50101, 0x37890001, 0x06f10301, 0x37870001, 0x1bc30101, 0x37850001, 0x0de10201, 0x37830001, 0x1bc10101, 0x37810001, 0x006f1601, 0x377f0001, 0x1bbf0101, 0x377d0001, 0x0ddf0201, 0x377b0001, 0x1bbd0101, 0x37790001, 0x06ef0301, 0x37770001, 0x1bbb0101, 0x37750001, 0x0ddd0201, 0x37730001, 0x1bb90101, 0x37710001, 0x03770401, 0x376f0001, 0x1bb70101, 0x376d0001, 0x0ddb0201, 0x376b0001, 0x1bb50101, 0x37690001, 0x06ed0301, 0x37670001, 0x1bb30101, 0x37650001, 0x0dd90201, 0x37630001, 0x1bb10101, 0x37610001, 0x01bb0501, 0x375f0001, 0x1baf0101, 0x375d0001, 0x0dd70201, 0x375b0001, 0x1bad0101, 0x37590001, 0x06eb0301, 0x37570001, 0x1bab0101, 0x37550001, 0x0dd50201, 0x37530001, 0x1ba90101, 0x37510001, 0x03750401, 0x374f0001, 0x1ba70101, 0x374d0001, 0x0dd30201, 0x374b0001, 0x1ba50101, 0x37490001, 0x06e90301, 0x37470001, 0x1ba30101, 0x37450001, 0x0dd10201, 0x37430001, 0x1ba10101, 0x37410001, 0x00dd0601, 0x373f0001, 0x1b9f0101, 0x373d0001, 0x0dcf0201, 0x373b0001, 0x1b9d0101, 0x37390001, 0x06e70301, 0x37370001, 0x1b9b0101, 0x37350001, 0x0dcd0201, 0x37330001, 0x1b990101, 0x37310001, 0x03730401, 0x372f0001, 0x1b970101, 0x372d0001, 0x0dcb0201, 0x372b0001, 0x1b950101, 0x37290001, 0x06e50301, 0x37270001, 0x1b930101, 0x37250001, 0x0dc90201, 0x37230001, 0x1b910101, 0x37210001, 0x01b90501, 0x371f0001, 0x1b8f0101, 0x371d0001, 0x0dc70201, 0x371b0001, 0x1b8d0101, 0x37190001, 0x06e30301, 0x37170001, 0x1b8b0101, 0x37150001, 0x0dc50201, 0x37130001, 0x1b890101, 0x37110001, 0x03710401, 0x370f0001, 0x1b870101, 0x370d0001, 0x0dc30201, 0x370b0001, 0x1b850101, 0x37090001, 0x06e10301, 0x37070001, 0x1b830101, 0x37050001, 0x0dc10201, 0x37030001, 0x1b810101, 0x37010001, + 0x00372601, 0x36ff0001, 0x1b7f0101, 0x36fd0001, 0x0dbf0201, 0x36fb0001, 0x1b7d0101, 0x36f90001, 0x06df0301, 0x36f70001, 0x1b7b0101, 0x36f50001, 0x0dbd0201, 0x36f30001, 0x1b790101, 0x36f10001, 0x036f0401, 0x36ef0001, 0x1b770101, 0x36ed0001, 0x0dbb0201, 0x36eb0001, 0x1b750101, 0x36e90001, 0x06dd0301, 0x36e70001, 0x1b730101, 0x36e50001, 0x0db90201, 0x36e30001, 0x1b710101, 0x36e10001, 0x01b70501, 0x36df0001, 0x1b6f0101, 0x36dd0001, 0x0db70201, 0x36db0001, 0x1b6d0101, 0x36d90001, 0x06db0301, 0x36d70001, 0x1b6b0101, 0x36d50001, 0x0db50201, 0x36d30001, 0x1b690101, 0x36d10001, 0x036d0401, 0x36cf0001, 0x1b670101, 0x36cd0001, 0x0db30201, 0x36cb0001, 0x1b650101, 0x36c90001, 0x06d90301, 0x36c70001, 0x1b630101, 0x36c50001, 0x0db10201, 0x36c30001, 0x1b610101, 0x36c10001, 0x00db0601, 0x36bf0001, 0x1b5f0101, 0x36bd0001, 0x0daf0201, 0x36bb0001, 0x1b5d0101, 0x36b90001, 0x06d70301, 0x36b70001, 0x1b5b0101, 0x36b50001, 0x0dad0201, 0x36b30001, 0x1b590101, 0x36b10001, 0x036b0401, 0x36af0001, 0x1b570101, 0x36ad0001, 0x0dab0201, 0x36ab0001, 0x1b550101, 0x36a90001, 0x06d50301, 0x36a70001, 0x1b530101, 0x36a50001, 0x0da90201, 0x36a30001, 0x1b510101, 0x36a10001, 0x01b50501, 0x369f0001, 0x1b4f0101, 0x369d0001, 0x0da70201, 0x369b0001, 0x1b4d0101, 0x36990001, 0x06d30301, 0x36970001, 0x1b4b0101, 0x36950001, 0x0da50201, 0x36930001, 0x1b490101, 0x36910001, 0x03690401, 0x368f0001, 0x1b470101, 0x368d0001, 0x0da30201, 0x368b0001, 0x1b450101, 0x36890001, 0x06d10301, 0x36870001, 0x1b430101, 0x36850001, 0x0da10201, 0x36830001, 0x1b410101, 0x36810001, 0x006d1601, 0x367f0001, 0x1b3f0101, 0x367d0001, 0x0d9f0201, 0x367b0001, 0x1b3d0101, 0x36790001, 0x06cf0301, 0x36770001, 0x1b3b0101, 0x36750001, 0x0d9d0201, 0x36730001, 0x1b390101, 0x36710001, 0x03670401, 0x366f0001, 0x1b370101, 0x366d0001, 0x0d9b0201, 0x366b0001, 0x1b350101, 0x36690001, 0x06cd0301, 0x36670001, 0x1b330101, 0x36650001, 0x0d990201, 0x36630001, 0x1b310101, 0x36610001, 0x01b30501, 0x365f0001, 0x1b2f0101, 0x365d0001, 0x0d970201, 0x365b0001, 0x1b2d0101, 0x36590001, 0x06cb0301, 0x36570001, 0x1b2b0101, 0x36550001, 0x0d950201, 0x36530001, 0x1b290101, 0x36510001, 0x03650401, 0x364f0001, 0x1b270101, 0x364d0001, 0x0d930201, 0x364b0001, 0x1b250101, 0x36490001, 0x06c90301, 0x36470001, 0x1b230101, 0x36450001, 0x0d910201, 0x36430001, 0x1b210101, 0x36410001, 0x00d90601, 0x363f0001, 0x1b1f0101, 0x363d0001, 0x0d8f0201, 0x363b0001, 0x1b1d0101, 0x36390001, 0x06c70301, 0x36370001, 0x1b1b0101, 0x36350001, 0x0d8d0201, 0x36330001, 0x1b190101, 0x36310001, 0x03630401, 0x362f0001, 0x1b170101, 0x362d0001, 0x0d8b0201, 0x362b0001, 0x1b150101, 0x36290001, 0x06c50301, 0x36270001, 0x1b130101, 0x36250001, 0x0d890201, 0x36230001, 0x1b110101, 0x36210001, 0x01b10501, 0x361f0001, 0x1b0f0101, 0x361d0001, 0x0d870201, 0x361b0001, 0x1b0d0101, 0x36190001, 0x06c30301, 0x36170001, 0x1b0b0101, 0x36150001, 0x0d850201, 0x36130001, 0x1b090101, 0x36110001, 0x03610401, 0x360f0001, 0x1b070101, 0x360d0001, 0x0d830201, 0x360b0001, 0x1b050101, 0x36090001, 0x06c10301, 0x36070001, 0x1b030101, 0x36050001, 0x0d810201, 0x36030001, 0x1b010101, 0x36010001, + 0x001b3601, 0x35ff0001, 0x1aff0101, 0x35fd0001, 0x0d7f0201, 0x35fb0001, 0x1afd0101, 0x35f90001, 0x06bf0301, 0x35f70001, 0x1afb0101, 0x35f50001, 0x0d7d0201, 0x35f30001, 0x1af90101, 0x35f10001, 0x035f0401, 0x35ef0001, 0x1af70101, 0x35ed0001, 0x0d7b0201, 0x35eb0001, 0x1af50101, 0x35e90001, 0x06bd0301, 0x35e70001, 0x1af30101, 0x35e50001, 0x0d790201, 0x35e30001, 0x1af10101, 0x35e10001, 0x01af0501, 0x35df0001, 0x1aef0101, 0x35dd0001, 0x0d770201, 0x35db0001, 0x1aed0101, 0x35d90001, 0x06bb0301, 0x35d70001, 0x1aeb0101, 0x35d50001, 0x0d750201, 0x35d30001, 0x1ae90101, 0x35d10001, 0x035d0401, 0x35cf0001, 0x1ae70101, 0x35cd0001, 0x0d730201, 0x35cb0001, 0x1ae50101, 0x35c90001, 0x06b90301, 0x35c70001, 0x1ae30101, 0x35c50001, 0x0d710201, 0x35c30001, 0x1ae10101, 0x35c10001, 0x00d70601, 0x35bf0001, 0x1adf0101, 0x35bd0001, 0x0d6f0201, 0x35bb0001, 0x1add0101, 0x35b90001, 0x06b70301, 0x35b70001, 0x1adb0101, 0x35b50001, 0x0d6d0201, 0x35b30001, 0x1ad90101, 0x35b10001, 0x035b0401, 0x35af0001, 0x1ad70101, 0x35ad0001, 0x0d6b0201, 0x35ab0001, 0x1ad50101, 0x35a90001, 0x06b50301, 0x35a70001, 0x1ad30101, 0x35a50001, 0x0d690201, 0x35a30001, 0x1ad10101, 0x35a10001, 0x01ad0501, 0x359f0001, 0x1acf0101, 0x359d0001, 0x0d670201, 0x359b0001, 0x1acd0101, 0x35990001, 0x06b30301, 0x35970001, 0x1acb0101, 0x35950001, 0x0d650201, 0x35930001, 0x1ac90101, 0x35910001, 0x03590401, 0x358f0001, 0x1ac70101, 0x358d0001, 0x0d630201, 0x358b0001, 0x1ac50101, 0x35890001, 0x06b10301, 0x35870001, 0x1ac30101, 0x35850001, 0x0d610201, 0x35830001, 0x1ac10101, 0x35810001, 0x006b1601, 0x357f0001, 0x1abf0101, 0x357d0001, 0x0d5f0201, 0x357b0001, 0x1abd0101, 0x35790001, 0x06af0301, 0x35770001, 0x1abb0101, 0x35750001, 0x0d5d0201, 0x35730001, 0x1ab90101, 0x35710001, 0x03570401, 0x356f0001, 0x1ab70101, 0x356d0001, 0x0d5b0201, 0x356b0001, 0x1ab50101, 0x35690001, 0x06ad0301, 0x35670001, 0x1ab30101, 0x35650001, 0x0d590201, 0x35630001, 0x1ab10101, 0x35610001, 0x01ab0501, 0x355f0001, 0x1aaf0101, 0x355d0001, 0x0d570201, 0x355b0001, 0x1aad0101, 0x35590001, 0x06ab0301, 0x35570001, 0x1aab0101, 0x35550001, 0x0d550201, 0x35530001, 0x1aa90101, 0x35510001, 0x03550401, 0x354f0001, 0x1aa70101, 0x354d0001, 0x0d530201, 0x354b0001, 0x1aa50101, 0x35490001, 0x06a90301, 0x35470001, 0x1aa30101, 0x35450001, 0x0d510201, 0x35430001, 0x1aa10101, 0x35410001, 0x00d50601, 0x353f0001, 0x1a9f0101, 0x353d0001, 0x0d4f0201, 0x353b0001, 0x1a9d0101, 0x35390001, 0x06a70301, 0x35370001, 0x1a9b0101, 0x35350001, 0x0d4d0201, 0x35330001, 0x1a990101, 0x35310001, 0x03530401, 0x352f0001, 0x1a970101, 0x352d0001, 0x0d4b0201, 0x352b0001, 0x1a950101, 0x35290001, 0x06a50301, 0x35270001, 0x1a930101, 0x35250001, 0x0d490201, 0x35230001, 0x1a910101, 0x35210001, 0x01a90501, 0x351f0001, 0x1a8f0101, 0x351d0001, 0x0d470201, 0x351b0001, 0x1a8d0101, 0x35190001, 0x06a30301, 0x35170001, 0x1a8b0101, 0x35150001, 0x0d450201, 0x35130001, 0x1a890101, 0x35110001, 0x03510401, 0x350f0001, 0x1a870101, 0x350d0001, 0x0d430201, 0x350b0001, 0x1a850101, 0x35090001, 0x06a10301, 0x35070001, 0x1a830101, 0x35050001, 0x0d410201, 0x35030001, 0x1a810101, 0x35010001, + 0x00352601, 0x34ff0001, 0x1a7f0101, 0x34fd0001, 0x0d3f0201, 0x34fb0001, 0x1a7d0101, 0x34f90001, 0x069f0301, 0x34f70001, 0x1a7b0101, 0x34f50001, 0x0d3d0201, 0x34f30001, 0x1a790101, 0x34f10001, 0x034f0401, 0x34ef0001, 0x1a770101, 0x34ed0001, 0x0d3b0201, 0x34eb0001, 0x1a750101, 0x34e90001, 0x069d0301, 0x34e70001, 0x1a730101, 0x34e50001, 0x0d390201, 0x34e30001, 0x1a710101, 0x34e10001, 0x01a70501, 0x34df0001, 0x1a6f0101, 0x34dd0001, 0x0d370201, 0x34db0001, 0x1a6d0101, 0x34d90001, 0x069b0301, 0x34d70001, 0x1a6b0101, 0x34d50001, 0x0d350201, 0x34d30001, 0x1a690101, 0x34d10001, 0x034d0401, 0x34cf0001, 0x1a670101, 0x34cd0001, 0x0d330201, 0x34cb0001, 0x1a650101, 0x34c90001, 0x06990301, 0x34c70001, 0x1a630101, 0x34c50001, 0x0d310201, 0x34c30001, 0x1a610101, 0x34c10001, 0x00d30601, 0x34bf0001, 0x1a5f0101, 0x34bd0001, 0x0d2f0201, 0x34bb0001, 0x1a5d0101, 0x34b90001, 0x06970301, 0x34b70001, 0x1a5b0101, 0x34b50001, 0x0d2d0201, 0x34b30001, 0x1a590101, 0x34b10001, 0x034b0401, 0x34af0001, 0x1a570101, 0x34ad0001, 0x0d2b0201, 0x34ab0001, 0x1a550101, 0x34a90001, 0x06950301, 0x34a70001, 0x1a530101, 0x34a50001, 0x0d290201, 0x34a30001, 0x1a510101, 0x34a10001, 0x01a50501, 0x349f0001, 0x1a4f0101, 0x349d0001, 0x0d270201, 0x349b0001, 0x1a4d0101, 0x34990001, 0x06930301, 0x34970001, 0x1a4b0101, 0x34950001, 0x0d250201, 0x34930001, 0x1a490101, 0x34910001, 0x03490401, 0x348f0001, 0x1a470101, 0x348d0001, 0x0d230201, 0x348b0001, 0x1a450101, 0x34890001, 0x06910301, 0x34870001, 0x1a430101, 0x34850001, 0x0d210201, 0x34830001, 0x1a410101, 0x34810001, 0x00691601, 0x347f0001, 0x1a3f0101, 0x347d0001, 0x0d1f0201, 0x347b0001, 0x1a3d0101, 0x34790001, 0x068f0301, 0x34770001, 0x1a3b0101, 0x34750001, 0x0d1d0201, 0x34730001, 0x1a390101, 0x34710001, 0x03470401, 0x346f0001, 0x1a370101, 0x346d0001, 0x0d1b0201, 0x346b0001, 0x1a350101, 0x34690001, 0x068d0301, 0x34670001, 0x1a330101, 0x34650001, 0x0d190201, 0x34630001, 0x1a310101, 0x34610001, 0x01a30501, 0x345f0001, 0x1a2f0101, 0x345d0001, 0x0d170201, 0x345b0001, 0x1a2d0101, 0x34590001, 0x068b0301, 0x34570001, 0x1a2b0101, 0x34550001, 0x0d150201, 0x34530001, 0x1a290101, 0x34510001, 0x03450401, 0x344f0001, 0x1a270101, 0x344d0001, 0x0d130201, 0x344b0001, 0x1a250101, 0x34490001, 0x06890301, 0x34470001, 0x1a230101, 0x34450001, 0x0d110201, 0x34430001, 0x1a210101, 0x34410001, 0x00d10601, 0x343f0001, 0x1a1f0101, 0x343d0001, 0x0d0f0201, 0x343b0001, 0x1a1d0101, 0x34390001, 0x06870301, 0x34370001, 0x1a1b0101, 0x34350001, 0x0d0d0201, 0x34330001, 0x1a190101, 0x34310001, 0x03430401, 0x342f0001, 0x1a170101, 0x342d0001, 0x0d0b0201, 0x342b0001, 0x1a150101, 0x34290001, 0x06850301, 0x34270001, 0x1a130101, 0x34250001, 0x0d090201, 0x34230001, 0x1a110101, 0x34210001, 0x01a10501, 0x341f0001, 0x1a0f0101, 0x341d0001, 0x0d070201, 0x341b0001, 0x1a0d0101, 0x34190001, 0x06830301, 0x34170001, 0x1a0b0101, 0x34150001, 0x0d050201, 0x34130001, 0x1a090101, 0x34110001, 0x03410401, 0x340f0001, 0x1a070101, 0x340d0001, 0x0d030201, 0x340b0001, 0x1a050101, 0x34090001, 0x06810301, 0x34070001, 0x1a030101, 0x34050001, 0x0d010201, 0x34030001, 0x1a010101, 0x34010001, + 0x000d4601, 0x33ff0001, 0x19ff0101, 0x33fd0001, 0x0cff0201, 0x33fb0001, 0x19fd0101, 0x33f90001, 0x067f0301, 0x33f70001, 0x19fb0101, 0x33f50001, 0x0cfd0201, 0x33f30001, 0x19f90101, 0x33f10001, 0x033f0401, 0x33ef0001, 0x19f70101, 0x33ed0001, 0x0cfb0201, 0x33eb0001, 0x19f50101, 0x33e90001, 0x067d0301, 0x33e70001, 0x19f30101, 0x33e50001, 0x0cf90201, 0x33e30001, 0x19f10101, 0x33e10001, 0x019f0501, 0x33df0001, 0x19ef0101, 0x33dd0001, 0x0cf70201, 0x33db0001, 0x19ed0101, 0x33d90001, 0x067b0301, 0x33d70001, 0x19eb0101, 0x33d50001, 0x0cf50201, 0x33d30001, 0x19e90101, 0x33d10001, 0x033d0401, 0x33cf0001, 0x19e70101, 0x33cd0001, 0x0cf30201, 0x33cb0001, 0x19e50101, 0x33c90001, 0x06790301, 0x33c70001, 0x19e30101, 0x33c50001, 0x0cf10201, 0x33c30001, 0x19e10101, 0x33c10001, 0x00cf0601, 0x33bf0001, 0x19df0101, 0x33bd0001, 0x0cef0201, 0x33bb0001, 0x19dd0101, 0x33b90001, 0x06770301, 0x33b70001, 0x19db0101, 0x33b50001, 0x0ced0201, 0x33b30001, 0x19d90101, 0x33b10001, 0x033b0401, 0x33af0001, 0x19d70101, 0x33ad0001, 0x0ceb0201, 0x33ab0001, 0x19d50101, 0x33a90001, 0x06750301, 0x33a70001, 0x19d30101, 0x33a50001, 0x0ce90201, 0x33a30001, 0x19d10101, 0x33a10001, 0x019d0501, 0x339f0001, 0x19cf0101, 0x339d0001, 0x0ce70201, 0x339b0001, 0x19cd0101, 0x33990001, 0x06730301, 0x33970001, 0x19cb0101, 0x33950001, 0x0ce50201, 0x33930001, 0x19c90101, 0x33910001, 0x03390401, 0x338f0001, 0x19c70101, 0x338d0001, 0x0ce30201, 0x338b0001, 0x19c50101, 0x33890001, 0x06710301, 0x33870001, 0x19c30101, 0x33850001, 0x0ce10201, 0x33830001, 0x19c10101, 0x33810001, 0x00671601, 0x337f0001, 0x19bf0101, 0x337d0001, 0x0cdf0201, 0x337b0001, 0x19bd0101, 0x33790001, 0x066f0301, 0x33770001, 0x19bb0101, 0x33750001, 0x0cdd0201, 0x33730001, 0x19b90101, 0x33710001, 0x03370401, 0x336f0001, 0x19b70101, 0x336d0001, 0x0cdb0201, 0x336b0001, 0x19b50101, 0x33690001, 0x066d0301, 0x33670001, 0x19b30101, 0x33650001, 0x0cd90201, 0x33630001, 0x19b10101, 0x33610001, 0x019b0501, 0x335f0001, 0x19af0101, 0x335d0001, 0x0cd70201, 0x335b0001, 0x19ad0101, 0x33590001, 0x066b0301, 0x33570001, 0x19ab0101, 0x33550001, 0x0cd50201, 0x33530001, 0x19a90101, 0x33510001, 0x03350401, 0x334f0001, 0x19a70101, 0x334d0001, 0x0cd30201, 0x334b0001, 0x19a50101, 0x33490001, 0x06690301, 0x33470001, 0x19a30101, 0x33450001, 0x0cd10201, 0x33430001, 0x19a10101, 0x33410001, 0x00cd0601, 0x333f0001, 0x199f0101, 0x333d0001, 0x0ccf0201, 0x333b0001, 0x199d0101, 0x33390001, 0x06670301, 0x33370001, 0x199b0101, 0x33350001, 0x0ccd0201, 0x33330001, 0x19990101, 0x33310001, 0x03330401, 0x332f0001, 0x19970101, 0x332d0001, 0x0ccb0201, 0x332b0001, 0x19950101, 0x33290001, 0x06650301, 0x33270001, 0x19930101, 0x33250001, 0x0cc90201, 0x33230001, 0x19910101, 0x33210001, 0x01990501, 0x331f0001, 0x198f0101, 0x331d0001, 0x0cc70201, 0x331b0001, 0x198d0101, 0x33190001, 0x06630301, 0x33170001, 0x198b0101, 0x33150001, 0x0cc50201, 0x33130001, 0x19890101, 0x33110001, 0x03310401, 0x330f0001, 0x19870101, 0x330d0001, 0x0cc30201, 0x330b0001, 0x19850101, 0x33090001, 0x06610301, 0x33070001, 0x19830101, 0x33050001, 0x0cc10201, 0x33030001, 0x19810101, 0x33010001, + 0x00332601, 0x32ff0001, 0x197f0101, 0x32fd0001, 0x0cbf0201, 0x32fb0001, 0x197d0101, 0x32f90001, 0x065f0301, 0x32f70001, 0x197b0101, 0x32f50001, 0x0cbd0201, 0x32f30001, 0x19790101, 0x32f10001, 0x032f0401, 0x32ef0001, 0x19770101, 0x32ed0001, 0x0cbb0201, 0x32eb0001, 0x19750101, 0x32e90001, 0x065d0301, 0x32e70001, 0x19730101, 0x32e50001, 0x0cb90201, 0x32e30001, 0x19710101, 0x32e10001, 0x01970501, 0x32df0001, 0x196f0101, 0x32dd0001, 0x0cb70201, 0x32db0001, 0x196d0101, 0x32d90001, 0x065b0301, 0x32d70001, 0x196b0101, 0x32d50001, 0x0cb50201, 0x32d30001, 0x19690101, 0x32d10001, 0x032d0401, 0x32cf0001, 0x19670101, 0x32cd0001, 0x0cb30201, 0x32cb0001, 0x19650101, 0x32c90001, 0x06590301, 0x32c70001, 0x19630101, 0x32c50001, 0x0cb10201, 0x32c30001, 0x19610101, 0x32c10001, 0x00cb0601, 0x32bf0001, 0x195f0101, 0x32bd0001, 0x0caf0201, 0x32bb0001, 0x195d0101, 0x32b90001, 0x06570301, 0x32b70001, 0x195b0101, 0x32b50001, 0x0cad0201, 0x32b30001, 0x19590101, 0x32b10001, 0x032b0401, 0x32af0001, 0x19570101, 0x32ad0001, 0x0cab0201, 0x32ab0001, 0x19550101, 0x32a90001, 0x06550301, 0x32a70001, 0x19530101, 0x32a50001, 0x0ca90201, 0x32a30001, 0x19510101, 0x32a10001, 0x01950501, 0x329f0001, 0x194f0101, 0x329d0001, 0x0ca70201, 0x329b0001, 0x194d0101, 0x32990001, 0x06530301, 0x32970001, 0x194b0101, 0x32950001, 0x0ca50201, 0x32930001, 0x19490101, 0x32910001, 0x03290401, 0x328f0001, 0x19470101, 0x328d0001, 0x0ca30201, 0x328b0001, 0x19450101, 0x32890001, 0x06510301, 0x32870001, 0x19430101, 0x32850001, 0x0ca10201, 0x32830001, 0x19410101, 0x32810001, 0x00651601, 0x327f0001, 0x193f0101, 0x327d0001, 0x0c9f0201, 0x327b0001, 0x193d0101, 0x32790001, 0x064f0301, 0x32770001, 0x193b0101, 0x32750001, 0x0c9d0201, 0x32730001, 0x19390101, 0x32710001, 0x03270401, 0x326f0001, 0x19370101, 0x326d0001, 0x0c9b0201, 0x326b0001, 0x19350101, 0x32690001, 0x064d0301, 0x32670001, 0x19330101, 0x32650001, 0x0c990201, 0x32630001, 0x19310101, 0x32610001, 0x01930501, 0x325f0001, 0x192f0101, 0x325d0001, 0x0c970201, 0x325b0001, 0x192d0101, 0x32590001, 0x064b0301, 0x32570001, 0x192b0101, 0x32550001, 0x0c950201, 0x32530001, 0x19290101, 0x32510001, 0x03250401, 0x324f0001, 0x19270101, 0x324d0001, 0x0c930201, 0x324b0001, 0x19250101, 0x32490001, 0x06490301, 0x32470001, 0x19230101, 0x32450001, 0x0c910201, 0x32430001, 0x19210101, 0x32410001, 0x00c90601, 0x323f0001, 0x191f0101, 0x323d0001, 0x0c8f0201, 0x323b0001, 0x191d0101, 0x32390001, 0x06470301, 0x32370001, 0x191b0101, 0x32350001, 0x0c8d0201, 0x32330001, 0x19190101, 0x32310001, 0x03230401, 0x322f0001, 0x19170101, 0x322d0001, 0x0c8b0201, 0x322b0001, 0x19150101, 0x32290001, 0x06450301, 0x32270001, 0x19130101, 0x32250001, 0x0c890201, 0x32230001, 0x19110101, 0x32210001, 0x01910501, 0x321f0001, 0x190f0101, 0x321d0001, 0x0c870201, 0x321b0001, 0x190d0101, 0x32190001, 0x06430301, 0x32170001, 0x190b0101, 0x32150001, 0x0c850201, 0x32130001, 0x19090101, 0x32110001, 0x03210401, 0x320f0001, 0x19070101, 0x320d0001, 0x0c830201, 0x320b0001, 0x19050101, 0x32090001, 0x06410301, 0x32070001, 0x19030101, 0x32050001, 0x0c810201, 0x32030001, 0x19010101, 0x32010001, + 0x00193601, 0x31ff0001, 0x18ff0101, 0x31fd0001, 0x0c7f0201, 0x31fb0001, 0x18fd0101, 0x31f90001, 0x063f0301, 0x31f70001, 0x18fb0101, 0x31f50001, 0x0c7d0201, 0x31f30001, 0x18f90101, 0x31f10001, 0x031f0401, 0x31ef0001, 0x18f70101, 0x31ed0001, 0x0c7b0201, 0x31eb0001, 0x18f50101, 0x31e90001, 0x063d0301, 0x31e70001, 0x18f30101, 0x31e50001, 0x0c790201, 0x31e30001, 0x18f10101, 0x31e10001, 0x018f0501, 0x31df0001, 0x18ef0101, 0x31dd0001, 0x0c770201, 0x31db0001, 0x18ed0101, 0x31d90001, 0x063b0301, 0x31d70001, 0x18eb0101, 0x31d50001, 0x0c750201, 0x31d30001, 0x18e90101, 0x31d10001, 0x031d0401, 0x31cf0001, 0x18e70101, 0x31cd0001, 0x0c730201, 0x31cb0001, 0x18e50101, 0x31c90001, 0x06390301, 0x31c70001, 0x18e30101, 0x31c50001, 0x0c710201, 0x31c30001, 0x18e10101, 0x31c10001, 0x00c70601, 0x31bf0001, 0x18df0101, 0x31bd0001, 0x0c6f0201, 0x31bb0001, 0x18dd0101, 0x31b90001, 0x06370301, 0x31b70001, 0x18db0101, 0x31b50001, 0x0c6d0201, 0x31b30001, 0x18d90101, 0x31b10001, 0x031b0401, 0x31af0001, 0x18d70101, 0x31ad0001, 0x0c6b0201, 0x31ab0001, 0x18d50101, 0x31a90001, 0x06350301, 0x31a70001, 0x18d30101, 0x31a50001, 0x0c690201, 0x31a30001, 0x18d10101, 0x31a10001, 0x018d0501, 0x319f0001, 0x18cf0101, 0x319d0001, 0x0c670201, 0x319b0001, 0x18cd0101, 0x31990001, 0x06330301, 0x31970001, 0x18cb0101, 0x31950001, 0x0c650201, 0x31930001, 0x18c90101, 0x31910001, 0x03190401, 0x318f0001, 0x18c70101, 0x318d0001, 0x0c630201, 0x318b0001, 0x18c50101, 0x31890001, 0x06310301, 0x31870001, 0x18c30101, 0x31850001, 0x0c610201, 0x31830001, 0x18c10101, 0x31810001, 0x00631601, 0x317f0001, 0x18bf0101, 0x317d0001, 0x0c5f0201, 0x317b0001, 0x18bd0101, 0x31790001, 0x062f0301, 0x31770001, 0x18bb0101, 0x31750001, 0x0c5d0201, 0x31730001, 0x18b90101, 0x31710001, 0x03170401, 0x316f0001, 0x18b70101, 0x316d0001, 0x0c5b0201, 0x316b0001, 0x18b50101, 0x31690001, 0x062d0301, 0x31670001, 0x18b30101, 0x31650001, 0x0c590201, 0x31630001, 0x18b10101, 0x31610001, 0x018b0501, 0x315f0001, 0x18af0101, 0x315d0001, 0x0c570201, 0x315b0001, 0x18ad0101, 0x31590001, 0x062b0301, 0x31570001, 0x18ab0101, 0x31550001, 0x0c550201, 0x31530001, 0x18a90101, 0x31510001, 0x03150401, 0x314f0001, 0x18a70101, 0x314d0001, 0x0c530201, 0x314b0001, 0x18a50101, 0x31490001, 0x06290301, 0x31470001, 0x18a30101, 0x31450001, 0x0c510201, 0x31430001, 0x18a10101, 0x31410001, 0x00c50601, 0x313f0001, 0x189f0101, 0x313d0001, 0x0c4f0201, 0x313b0001, 0x189d0101, 0x31390001, 0x06270301, 0x31370001, 0x189b0101, 0x31350001, 0x0c4d0201, 0x31330001, 0x18990101, 0x31310001, 0x03130401, 0x312f0001, 0x18970101, 0x312d0001, 0x0c4b0201, 0x312b0001, 0x18950101, 0x31290001, 0x06250301, 0x31270001, 0x18930101, 0x31250001, 0x0c490201, 0x31230001, 0x18910101, 0x31210001, 0x01890501, 0x311f0001, 0x188f0101, 0x311d0001, 0x0c470201, 0x311b0001, 0x188d0101, 0x31190001, 0x06230301, 0x31170001, 0x188b0101, 0x31150001, 0x0c450201, 0x31130001, 0x18890101, 0x31110001, 0x03110401, 0x310f0001, 0x18870101, 0x310d0001, 0x0c430201, 0x310b0001, 0x18850101, 0x31090001, 0x06210301, 0x31070001, 0x18830101, 0x31050001, 0x0c410201, 0x31030001, 0x18810101, 0x31010001, + 0x00312601, 0x30ff0001, 0x187f0101, 0x30fd0001, 0x0c3f0201, 0x30fb0001, 0x187d0101, 0x30f90001, 0x061f0301, 0x30f70001, 0x187b0101, 0x30f50001, 0x0c3d0201, 0x30f30001, 0x18790101, 0x30f10001, 0x030f0401, 0x30ef0001, 0x18770101, 0x30ed0001, 0x0c3b0201, 0x30eb0001, 0x18750101, 0x30e90001, 0x061d0301, 0x30e70001, 0x18730101, 0x30e50001, 0x0c390201, 0x30e30001, 0x18710101, 0x30e10001, 0x01870501, 0x30df0001, 0x186f0101, 0x30dd0001, 0x0c370201, 0x30db0001, 0x186d0101, 0x30d90001, 0x061b0301, 0x30d70001, 0x186b0101, 0x30d50001, 0x0c350201, 0x30d30001, 0x18690101, 0x30d10001, 0x030d0401, 0x30cf0001, 0x18670101, 0x30cd0001, 0x0c330201, 0x30cb0001, 0x18650101, 0x30c90001, 0x06190301, 0x30c70001, 0x18630101, 0x30c50001, 0x0c310201, 0x30c30001, 0x18610101, 0x30c10001, 0x00c30601, 0x30bf0001, 0x185f0101, 0x30bd0001, 0x0c2f0201, 0x30bb0001, 0x185d0101, 0x30b90001, 0x06170301, 0x30b70001, 0x185b0101, 0x30b50001, 0x0c2d0201, 0x30b30001, 0x18590101, 0x30b10001, 0x030b0401, 0x30af0001, 0x18570101, 0x30ad0001, 0x0c2b0201, 0x30ab0001, 0x18550101, 0x30a90001, 0x06150301, 0x30a70001, 0x18530101, 0x30a50001, 0x0c290201, 0x30a30001, 0x18510101, 0x30a10001, 0x01850501, 0x309f0001, 0x184f0101, 0x309d0001, 0x0c270201, 0x309b0001, 0x184d0101, 0x30990001, 0x06130301, 0x30970001, 0x184b0101, 0x30950001, 0x0c250201, 0x30930001, 0x18490101, 0x30910001, 0x03090401, 0x308f0001, 0x18470101, 0x308d0001, 0x0c230201, 0x308b0001, 0x18450101, 0x30890001, 0x06110301, 0x30870001, 0x18430101, 0x30850001, 0x0c210201, 0x30830001, 0x18410101, 0x30810001, 0x00611601, 0x307f0001, 0x183f0101, 0x307d0001, 0x0c1f0201, 0x307b0001, 0x183d0101, 0x30790001, 0x060f0301, 0x30770001, 0x183b0101, 0x30750001, 0x0c1d0201, 0x30730001, 0x18390101, 0x30710001, 0x03070401, 0x306f0001, 0x18370101, 0x306d0001, 0x0c1b0201, 0x306b0001, 0x18350101, 0x30690001, 0x060d0301, 0x30670001, 0x18330101, 0x30650001, 0x0c190201, 0x30630001, 0x18310101, 0x30610001, 0x01830501, 0x305f0001, 0x182f0101, 0x305d0001, 0x0c170201, 0x305b0001, 0x182d0101, 0x30590001, 0x060b0301, 0x30570001, 0x182b0101, 0x30550001, 0x0c150201, 0x30530001, 0x18290101, 0x30510001, 0x03050401, 0x304f0001, 0x18270101, 0x304d0001, 0x0c130201, 0x304b0001, 0x18250101, 0x30490001, 0x06090301, 0x30470001, 0x18230101, 0x30450001, 0x0c110201, 0x30430001, 0x18210101, 0x30410001, 0x00c10601, 0x303f0001, 0x181f0101, 0x303d0001, 0x0c0f0201, 0x303b0001, 0x181d0101, 0x30390001, 0x06070301, 0x30370001, 0x181b0101, 0x30350001, 0x0c0d0201, 0x30330001, 0x18190101, 0x30310001, 0x03030401, 0x302f0001, 0x18170101, 0x302d0001, 0x0c0b0201, 0x302b0001, 0x18150101, 0x30290001, 0x06050301, 0x30270001, 0x18130101, 0x30250001, 0x0c090201, 0x30230001, 0x18110101, 0x30210001, 0x01810501, 0x301f0001, 0x180f0101, 0x301d0001, 0x0c070201, 0x301b0001, 0x180d0101, 0x30190001, 0x06030301, 0x30170001, 0x180b0101, 0x30150001, 0x0c050201, 0x30130001, 0x18090101, 0x30110001, 0x03010401, 0x300f0001, 0x18070101, 0x300d0001, 0x0c030201, 0x300b0001, 0x18050101, 0x30090001, 0x06010301, 0x30070001, 0x18030101, 0x30050001, 0x0c010201, 0x30030001, 0x18010101, 0x30010001, + 0x00036601, 0x2fff0001, 0x17ff0101, 0x2ffd0001, 0x0bff0201, 0x2ffb0001, 0x17fd0101, 0x2ff90001, 0x05ff0301, 0x2ff70001, 0x17fb0101, 0x2ff50001, 0x0bfd0201, 0x2ff30001, 0x17f90101, 0x2ff10001, 0x02ff0401, 0x2fef0001, 0x17f70101, 0x2fed0001, 0x0bfb0201, 0x2feb0001, 0x17f50101, 0x2fe90001, 0x05fd0301, 0x2fe70001, 0x17f30101, 0x2fe50001, 0x0bf90201, 0x2fe30001, 0x17f10101, 0x2fe10001, 0x017f0501, 0x2fdf0001, 0x17ef0101, 0x2fdd0001, 0x0bf70201, 0x2fdb0001, 0x17ed0101, 0x2fd90001, 0x05fb0301, 0x2fd70001, 0x17eb0101, 0x2fd50001, 0x0bf50201, 0x2fd30001, 0x17e90101, 0x2fd10001, 0x02fd0401, 0x2fcf0001, 0x17e70101, 0x2fcd0001, 0x0bf30201, 0x2fcb0001, 0x17e50101, 0x2fc90001, 0x05f90301, 0x2fc70001, 0x17e30101, 0x2fc50001, 0x0bf10201, 0x2fc30001, 0x17e10101, 0x2fc10001, 0x00bf0601, 0x2fbf0001, 0x17df0101, 0x2fbd0001, 0x0bef0201, 0x2fbb0001, 0x17dd0101, 0x2fb90001, 0x05f70301, 0x2fb70001, 0x17db0101, 0x2fb50001, 0x0bed0201, 0x2fb30001, 0x17d90101, 0x2fb10001, 0x02fb0401, 0x2faf0001, 0x17d70101, 0x2fad0001, 0x0beb0201, 0x2fab0001, 0x17d50101, 0x2fa90001, 0x05f50301, 0x2fa70001, 0x17d30101, 0x2fa50001, 0x0be90201, 0x2fa30001, 0x17d10101, 0x2fa10001, 0x017d0501, 0x2f9f0001, 0x17cf0101, 0x2f9d0001, 0x0be70201, 0x2f9b0001, 0x17cd0101, 0x2f990001, 0x05f30301, 0x2f970001, 0x17cb0101, 0x2f950001, 0x0be50201, 0x2f930001, 0x17c90101, 0x2f910001, 0x02f90401, 0x2f8f0001, 0x17c70101, 0x2f8d0001, 0x0be30201, 0x2f8b0001, 0x17c50101, 0x2f890001, 0x05f10301, 0x2f870001, 0x17c30101, 0x2f850001, 0x0be10201, 0x2f830001, 0x17c10101, 0x2f810001, 0x005f1601, 0x2f7f0001, 0x17bf0101, 0x2f7d0001, 0x0bdf0201, 0x2f7b0001, 0x17bd0101, 0x2f790001, 0x05ef0301, 0x2f770001, 0x17bb0101, 0x2f750001, 0x0bdd0201, 0x2f730001, 0x17b90101, 0x2f710001, 0x02f70401, 0x2f6f0001, 0x17b70101, 0x2f6d0001, 0x0bdb0201, 0x2f6b0001, 0x17b50101, 0x2f690001, 0x05ed0301, 0x2f670001, 0x17b30101, 0x2f650001, 0x0bd90201, 0x2f630001, 0x17b10101, 0x2f610001, 0x017b0501, 0x2f5f0001, 0x17af0101, 0x2f5d0001, 0x0bd70201, 0x2f5b0001, 0x17ad0101, 0x2f590001, 0x05eb0301, 0x2f570001, 0x17ab0101, 0x2f550001, 0x0bd50201, 0x2f530001, 0x17a90101, 0x2f510001, 0x02f50401, 0x2f4f0001, 0x17a70101, 0x2f4d0001, 0x0bd30201, 0x2f4b0001, 0x17a50101, 0x2f490001, 0x05e90301, 0x2f470001, 0x17a30101, 0x2f450001, 0x0bd10201, 0x2f430001, 0x17a10101, 0x2f410001, 0x00bd0601, 0x2f3f0001, 0x179f0101, 0x2f3d0001, 0x0bcf0201, 0x2f3b0001, 0x179d0101, 0x2f390001, 0x05e70301, 0x2f370001, 0x179b0101, 0x2f350001, 0x0bcd0201, 0x2f330001, 0x17990101, 0x2f310001, 0x02f30401, 0x2f2f0001, 0x17970101, 0x2f2d0001, 0x0bcb0201, 0x2f2b0001, 0x17950101, 0x2f290001, 0x05e50301, 0x2f270001, 0x17930101, 0x2f250001, 0x0bc90201, 0x2f230001, 0x17910101, 0x2f210001, 0x01790501, 0x2f1f0001, 0x178f0101, 0x2f1d0001, 0x0bc70201, 0x2f1b0001, 0x178d0101, 0x2f190001, 0x05e30301, 0x2f170001, 0x178b0101, 0x2f150001, 0x0bc50201, 0x2f130001, 0x17890101, 0x2f110001, 0x02f10401, 0x2f0f0001, 0x17870101, 0x2f0d0001, 0x0bc30201, 0x2f0b0001, 0x17850101, 0x2f090001, 0x05e10301, 0x2f070001, 0x17830101, 0x2f050001, 0x0bc10201, 0x2f030001, 0x17810101, 0x2f010001, + 0x002f2601, 0x2eff0001, 0x177f0101, 0x2efd0001, 0x0bbf0201, 0x2efb0001, 0x177d0101, 0x2ef90001, 0x05df0301, 0x2ef70001, 0x177b0101, 0x2ef50001, 0x0bbd0201, 0x2ef30001, 0x17790101, 0x2ef10001, 0x02ef0401, 0x2eef0001, 0x17770101, 0x2eed0001, 0x0bbb0201, 0x2eeb0001, 0x17750101, 0x2ee90001, 0x05dd0301, 0x2ee70001, 0x17730101, 0x2ee50001, 0x0bb90201, 0x2ee30001, 0x17710101, 0x2ee10001, 0x01770501, 0x2edf0001, 0x176f0101, 0x2edd0001, 0x0bb70201, 0x2edb0001, 0x176d0101, 0x2ed90001, 0x05db0301, 0x2ed70001, 0x176b0101, 0x2ed50001, 0x0bb50201, 0x2ed30001, 0x17690101, 0x2ed10001, 0x02ed0401, 0x2ecf0001, 0x17670101, 0x2ecd0001, 0x0bb30201, 0x2ecb0001, 0x17650101, 0x2ec90001, 0x05d90301, 0x2ec70001, 0x17630101, 0x2ec50001, 0x0bb10201, 0x2ec30001, 0x17610101, 0x2ec10001, 0x00bb0601, 0x2ebf0001, 0x175f0101, 0x2ebd0001, 0x0baf0201, 0x2ebb0001, 0x175d0101, 0x2eb90001, 0x05d70301, 0x2eb70001, 0x175b0101, 0x2eb50001, 0x0bad0201, 0x2eb30001, 0x17590101, 0x2eb10001, 0x02eb0401, 0x2eaf0001, 0x17570101, 0x2ead0001, 0x0bab0201, 0x2eab0001, 0x17550101, 0x2ea90001, 0x05d50301, 0x2ea70001, 0x17530101, 0x2ea50001, 0x0ba90201, 0x2ea30001, 0x17510101, 0x2ea10001, 0x01750501, 0x2e9f0001, 0x174f0101, 0x2e9d0001, 0x0ba70201, 0x2e9b0001, 0x174d0101, 0x2e990001, 0x05d30301, 0x2e970001, 0x174b0101, 0x2e950001, 0x0ba50201, 0x2e930001, 0x17490101, 0x2e910001, 0x02e90401, 0x2e8f0001, 0x17470101, 0x2e8d0001, 0x0ba30201, 0x2e8b0001, 0x17450101, 0x2e890001, 0x05d10301, 0x2e870001, 0x17430101, 0x2e850001, 0x0ba10201, 0x2e830001, 0x17410101, 0x2e810001, 0x005d1601, 0x2e7f0001, 0x173f0101, 0x2e7d0001, 0x0b9f0201, 0x2e7b0001, 0x173d0101, 0x2e790001, 0x05cf0301, 0x2e770001, 0x173b0101, 0x2e750001, 0x0b9d0201, 0x2e730001, 0x17390101, 0x2e710001, 0x02e70401, 0x2e6f0001, 0x17370101, 0x2e6d0001, 0x0b9b0201, 0x2e6b0001, 0x17350101, 0x2e690001, 0x05cd0301, 0x2e670001, 0x17330101, 0x2e650001, 0x0b990201, 0x2e630001, 0x17310101, 0x2e610001, 0x01730501, 0x2e5f0001, 0x172f0101, 0x2e5d0001, 0x0b970201, 0x2e5b0001, 0x172d0101, 0x2e590001, 0x05cb0301, 0x2e570001, 0x172b0101, 0x2e550001, 0x0b950201, 0x2e530001, 0x17290101, 0x2e510001, 0x02e50401, 0x2e4f0001, 0x17270101, 0x2e4d0001, 0x0b930201, 0x2e4b0001, 0x17250101, 0x2e490001, 0x05c90301, 0x2e470001, 0x17230101, 0x2e450001, 0x0b910201, 0x2e430001, 0x17210101, 0x2e410001, 0x00b90601, 0x2e3f0001, 0x171f0101, 0x2e3d0001, 0x0b8f0201, 0x2e3b0001, 0x171d0101, 0x2e390001, 0x05c70301, 0x2e370001, 0x171b0101, 0x2e350001, 0x0b8d0201, 0x2e330001, 0x17190101, 0x2e310001, 0x02e30401, 0x2e2f0001, 0x17170101, 0x2e2d0001, 0x0b8b0201, 0x2e2b0001, 0x17150101, 0x2e290001, 0x05c50301, 0x2e270001, 0x17130101, 0x2e250001, 0x0b890201, 0x2e230001, 0x17110101, 0x2e210001, 0x01710501, 0x2e1f0001, 0x170f0101, 0x2e1d0001, 0x0b870201, 0x2e1b0001, 0x170d0101, 0x2e190001, 0x05c30301, 0x2e170001, 0x170b0101, 0x2e150001, 0x0b850201, 0x2e130001, 0x17090101, 0x2e110001, 0x02e10401, 0x2e0f0001, 0x17070101, 0x2e0d0001, 0x0b830201, 0x2e0b0001, 0x17050101, 0x2e090001, 0x05c10301, 0x2e070001, 0x17030101, 0x2e050001, 0x0b810201, 0x2e030001, 0x17010101, 0x2e010001, + 0x00173601, 0x2dff0001, 0x16ff0101, 0x2dfd0001, 0x0b7f0201, 0x2dfb0001, 0x16fd0101, 0x2df90001, 0x05bf0301, 0x2df70001, 0x16fb0101, 0x2df50001, 0x0b7d0201, 0x2df30001, 0x16f90101, 0x2df10001, 0x02df0401, 0x2def0001, 0x16f70101, 0x2ded0001, 0x0b7b0201, 0x2deb0001, 0x16f50101, 0x2de90001, 0x05bd0301, 0x2de70001, 0x16f30101, 0x2de50001, 0x0b790201, 0x2de30001, 0x16f10101, 0x2de10001, 0x016f0501, 0x2ddf0001, 0x16ef0101, 0x2ddd0001, 0x0b770201, 0x2ddb0001, 0x16ed0101, 0x2dd90001, 0x05bb0301, 0x2dd70001, 0x16eb0101, 0x2dd50001, 0x0b750201, 0x2dd30001, 0x16e90101, 0x2dd10001, 0x02dd0401, 0x2dcf0001, 0x16e70101, 0x2dcd0001, 0x0b730201, 0x2dcb0001, 0x16e50101, 0x2dc90001, 0x05b90301, 0x2dc70001, 0x16e30101, 0x2dc50001, 0x0b710201, 0x2dc30001, 0x16e10101, 0x2dc10001, 0x00b70601, 0x2dbf0001, 0x16df0101, 0x2dbd0001, 0x0b6f0201, 0x2dbb0001, 0x16dd0101, 0x2db90001, 0x05b70301, 0x2db70001, 0x16db0101, 0x2db50001, 0x0b6d0201, 0x2db30001, 0x16d90101, 0x2db10001, 0x02db0401, 0x2daf0001, 0x16d70101, 0x2dad0001, 0x0b6b0201, 0x2dab0001, 0x16d50101, 0x2da90001, 0x05b50301, 0x2da70001, 0x16d30101, 0x2da50001, 0x0b690201, 0x2da30001, 0x16d10101, 0x2da10001, 0x016d0501, 0x2d9f0001, 0x16cf0101, 0x2d9d0001, 0x0b670201, 0x2d9b0001, 0x16cd0101, 0x2d990001, 0x05b30301, 0x2d970001, 0x16cb0101, 0x2d950001, 0x0b650201, 0x2d930001, 0x16c90101, 0x2d910001, 0x02d90401, 0x2d8f0001, 0x16c70101, 0x2d8d0001, 0x0b630201, 0x2d8b0001, 0x16c50101, 0x2d890001, 0x05b10301, 0x2d870001, 0x16c30101, 0x2d850001, 0x0b610201, 0x2d830001, 0x16c10101, 0x2d810001, 0x005b1601, 0x2d7f0001, 0x16bf0101, 0x2d7d0001, 0x0b5f0201, 0x2d7b0001, 0x16bd0101, 0x2d790001, 0x05af0301, 0x2d770001, 0x16bb0101, 0x2d750001, 0x0b5d0201, 0x2d730001, 0x16b90101, 0x2d710001, 0x02d70401, 0x2d6f0001, 0x16b70101, 0x2d6d0001, 0x0b5b0201, 0x2d6b0001, 0x16b50101, 0x2d690001, 0x05ad0301, 0x2d670001, 0x16b30101, 0x2d650001, 0x0b590201, 0x2d630001, 0x16b10101, 0x2d610001, 0x016b0501, 0x2d5f0001, 0x16af0101, 0x2d5d0001, 0x0b570201, 0x2d5b0001, 0x16ad0101, 0x2d590001, 0x05ab0301, 0x2d570001, 0x16ab0101, 0x2d550001, 0x0b550201, 0x2d530001, 0x16a90101, 0x2d510001, 0x02d50401, 0x2d4f0001, 0x16a70101, 0x2d4d0001, 0x0b530201, 0x2d4b0001, 0x16a50101, 0x2d490001, 0x05a90301, 0x2d470001, 0x16a30101, 0x2d450001, 0x0b510201, 0x2d430001, 0x16a10101, 0x2d410001, 0x00b50601, 0x2d3f0001, 0x169f0101, 0x2d3d0001, 0x0b4f0201, 0x2d3b0001, 0x169d0101, 0x2d390001, 0x05a70301, 0x2d370001, 0x169b0101, 0x2d350001, 0x0b4d0201, 0x2d330001, 0x16990101, 0x2d310001, 0x02d30401, 0x2d2f0001, 0x16970101, 0x2d2d0001, 0x0b4b0201, 0x2d2b0001, 0x16950101, 0x2d290001, 0x05a50301, 0x2d270001, 0x16930101, 0x2d250001, 0x0b490201, 0x2d230001, 0x16910101, 0x2d210001, 0x01690501, 0x2d1f0001, 0x168f0101, 0x2d1d0001, 0x0b470201, 0x2d1b0001, 0x168d0101, 0x2d190001, 0x05a30301, 0x2d170001, 0x168b0101, 0x2d150001, 0x0b450201, 0x2d130001, 0x16890101, 0x2d110001, 0x02d10401, 0x2d0f0001, 0x16870101, 0x2d0d0001, 0x0b430201, 0x2d0b0001, 0x16850101, 0x2d090001, 0x05a10301, 0x2d070001, 0x16830101, 0x2d050001, 0x0b410201, 0x2d030001, 0x16810101, 0x2d010001, + 0x002d2601, 0x2cff0001, 0x167f0101, 0x2cfd0001, 0x0b3f0201, 0x2cfb0001, 0x167d0101, 0x2cf90001, 0x059f0301, 0x2cf70001, 0x167b0101, 0x2cf50001, 0x0b3d0201, 0x2cf30001, 0x16790101, 0x2cf10001, 0x02cf0401, 0x2cef0001, 0x16770101, 0x2ced0001, 0x0b3b0201, 0x2ceb0001, 0x16750101, 0x2ce90001, 0x059d0301, 0x2ce70001, 0x16730101, 0x2ce50001, 0x0b390201, 0x2ce30001, 0x16710101, 0x2ce10001, 0x01670501, 0x2cdf0001, 0x166f0101, 0x2cdd0001, 0x0b370201, 0x2cdb0001, 0x166d0101, 0x2cd90001, 0x059b0301, 0x2cd70001, 0x166b0101, 0x2cd50001, 0x0b350201, 0x2cd30001, 0x16690101, 0x2cd10001, 0x02cd0401, 0x2ccf0001, 0x16670101, 0x2ccd0001, 0x0b330201, 0x2ccb0001, 0x16650101, 0x2cc90001, 0x05990301, 0x2cc70001, 0x16630101, 0x2cc50001, 0x0b310201, 0x2cc30001, 0x16610101, 0x2cc10001, 0x00b30601, 0x2cbf0001, 0x165f0101, 0x2cbd0001, 0x0b2f0201, 0x2cbb0001, 0x165d0101, 0x2cb90001, 0x05970301, 0x2cb70001, 0x165b0101, 0x2cb50001, 0x0b2d0201, 0x2cb30001, 0x16590101, 0x2cb10001, 0x02cb0401, 0x2caf0001, 0x16570101, 0x2cad0001, 0x0b2b0201, 0x2cab0001, 0x16550101, 0x2ca90001, 0x05950301, 0x2ca70001, 0x16530101, 0x2ca50001, 0x0b290201, 0x2ca30001, 0x16510101, 0x2ca10001, 0x01650501, 0x2c9f0001, 0x164f0101, 0x2c9d0001, 0x0b270201, 0x2c9b0001, 0x164d0101, 0x2c990001, 0x05930301, 0x2c970001, 0x164b0101, 0x2c950001, 0x0b250201, 0x2c930001, 0x16490101, 0x2c910001, 0x02c90401, 0x2c8f0001, 0x16470101, 0x2c8d0001, 0x0b230201, 0x2c8b0001, 0x16450101, 0x2c890001, 0x05910301, 0x2c870001, 0x16430101, 0x2c850001, 0x0b210201, 0x2c830001, 0x16410101, 0x2c810001, 0x00591601, 0x2c7f0001, 0x163f0101, 0x2c7d0001, 0x0b1f0201, 0x2c7b0001, 0x163d0101, 0x2c790001, 0x058f0301, 0x2c770001, 0x163b0101, 0x2c750001, 0x0b1d0201, 0x2c730001, 0x16390101, 0x2c710001, 0x02c70401, 0x2c6f0001, 0x16370101, 0x2c6d0001, 0x0b1b0201, 0x2c6b0001, 0x16350101, 0x2c690001, 0x058d0301, 0x2c670001, 0x16330101, 0x2c650001, 0x0b190201, 0x2c630001, 0x16310101, 0x2c610001, 0x01630501, 0x2c5f0001, 0x162f0101, 0x2c5d0001, 0x0b170201, 0x2c5b0001, 0x162d0101, 0x2c590001, 0x058b0301, 0x2c570001, 0x162b0101, 0x2c550001, 0x0b150201, 0x2c530001, 0x16290101, 0x2c510001, 0x02c50401, 0x2c4f0001, 0x16270101, 0x2c4d0001, 0x0b130201, 0x2c4b0001, 0x16250101, 0x2c490001, 0x05890301, 0x2c470001, 0x16230101, 0x2c450001, 0x0b110201, 0x2c430001, 0x16210101, 0x2c410001, 0x00b10601, 0x2c3f0001, 0x161f0101, 0x2c3d0001, 0x0b0f0201, 0x2c3b0001, 0x161d0101, 0x2c390001, 0x05870301, 0x2c370001, 0x161b0101, 0x2c350001, 0x0b0d0201, 0x2c330001, 0x16190101, 0x2c310001, 0x02c30401, 0x2c2f0001, 0x16170101, 0x2c2d0001, 0x0b0b0201, 0x2c2b0001, 0x16150101, 0x2c290001, 0x05850301, 0x2c270001, 0x16130101, 0x2c250001, 0x0b090201, 0x2c230001, 0x16110101, 0x2c210001, 0x01610501, 0x2c1f0001, 0x160f0101, 0x2c1d0001, 0x0b070201, 0x2c1b0001, 0x160d0101, 0x2c190001, 0x05830301, 0x2c170001, 0x160b0101, 0x2c150001, 0x0b050201, 0x2c130001, 0x16090101, 0x2c110001, 0x02c10401, 0x2c0f0001, 0x16070101, 0x2c0d0001, 0x0b030201, 0x2c0b0001, 0x16050101, 0x2c090001, 0x05810301, 0x2c070001, 0x16030101, 0x2c050001, 0x0b010201, 0x2c030001, 0x16010101, 0x2c010001, + 0x000b4601, 0x2bff0001, 0x15ff0101, 0x2bfd0001, 0x0aff0201, 0x2bfb0001, 0x15fd0101, 0x2bf90001, 0x057f0301, 0x2bf70001, 0x15fb0101, 0x2bf50001, 0x0afd0201, 0x2bf30001, 0x15f90101, 0x2bf10001, 0x02bf0401, 0x2bef0001, 0x15f70101, 0x2bed0001, 0x0afb0201, 0x2beb0001, 0x15f50101, 0x2be90001, 0x057d0301, 0x2be70001, 0x15f30101, 0x2be50001, 0x0af90201, 0x2be30001, 0x15f10101, 0x2be10001, 0x015f0501, 0x2bdf0001, 0x15ef0101, 0x2bdd0001, 0x0af70201, 0x2bdb0001, 0x15ed0101, 0x2bd90001, 0x057b0301, 0x2bd70001, 0x15eb0101, 0x2bd50001, 0x0af50201, 0x2bd30001, 0x15e90101, 0x2bd10001, 0x02bd0401, 0x2bcf0001, 0x15e70101, 0x2bcd0001, 0x0af30201, 0x2bcb0001, 0x15e50101, 0x2bc90001, 0x05790301, 0x2bc70001, 0x15e30101, 0x2bc50001, 0x0af10201, 0x2bc30001, 0x15e10101, 0x2bc10001, 0x00af0601, 0x2bbf0001, 0x15df0101, 0x2bbd0001, 0x0aef0201, 0x2bbb0001, 0x15dd0101, 0x2bb90001, 0x05770301, 0x2bb70001, 0x15db0101, 0x2bb50001, 0x0aed0201, 0x2bb30001, 0x15d90101, 0x2bb10001, 0x02bb0401, 0x2baf0001, 0x15d70101, 0x2bad0001, 0x0aeb0201, 0x2bab0001, 0x15d50101, 0x2ba90001, 0x05750301, 0x2ba70001, 0x15d30101, 0x2ba50001, 0x0ae90201, 0x2ba30001, 0x15d10101, 0x2ba10001, 0x015d0501, 0x2b9f0001, 0x15cf0101, 0x2b9d0001, 0x0ae70201, 0x2b9b0001, 0x15cd0101, 0x2b990001, 0x05730301, 0x2b970001, 0x15cb0101, 0x2b950001, 0x0ae50201, 0x2b930001, 0x15c90101, 0x2b910001, 0x02b90401, 0x2b8f0001, 0x15c70101, 0x2b8d0001, 0x0ae30201, 0x2b8b0001, 0x15c50101, 0x2b890001, 0x05710301, 0x2b870001, 0x15c30101, 0x2b850001, 0x0ae10201, 0x2b830001, 0x15c10101, 0x2b810001, 0x00571601, 0x2b7f0001, 0x15bf0101, 0x2b7d0001, 0x0adf0201, 0x2b7b0001, 0x15bd0101, 0x2b790001, 0x056f0301, 0x2b770001, 0x15bb0101, 0x2b750001, 0x0add0201, 0x2b730001, 0x15b90101, 0x2b710001, 0x02b70401, 0x2b6f0001, 0x15b70101, 0x2b6d0001, 0x0adb0201, 0x2b6b0001, 0x15b50101, 0x2b690001, 0x056d0301, 0x2b670001, 0x15b30101, 0x2b650001, 0x0ad90201, 0x2b630001, 0x15b10101, 0x2b610001, 0x015b0501, 0x2b5f0001, 0x15af0101, 0x2b5d0001, 0x0ad70201, 0x2b5b0001, 0x15ad0101, 0x2b590001, 0x056b0301, 0x2b570001, 0x15ab0101, 0x2b550001, 0x0ad50201, 0x2b530001, 0x15a90101, 0x2b510001, 0x02b50401, 0x2b4f0001, 0x15a70101, 0x2b4d0001, 0x0ad30201, 0x2b4b0001, 0x15a50101, 0x2b490001, 0x05690301, 0x2b470001, 0x15a30101, 0x2b450001, 0x0ad10201, 0x2b430001, 0x15a10101, 0x2b410001, 0x00ad0601, 0x2b3f0001, 0x159f0101, 0x2b3d0001, 0x0acf0201, 0x2b3b0001, 0x159d0101, 0x2b390001, 0x05670301, 0x2b370001, 0x159b0101, 0x2b350001, 0x0acd0201, 0x2b330001, 0x15990101, 0x2b310001, 0x02b30401, 0x2b2f0001, 0x15970101, 0x2b2d0001, 0x0acb0201, 0x2b2b0001, 0x15950101, 0x2b290001, 0x05650301, 0x2b270001, 0x15930101, 0x2b250001, 0x0ac90201, 0x2b230001, 0x15910101, 0x2b210001, 0x01590501, 0x2b1f0001, 0x158f0101, 0x2b1d0001, 0x0ac70201, 0x2b1b0001, 0x158d0101, 0x2b190001, 0x05630301, 0x2b170001, 0x158b0101, 0x2b150001, 0x0ac50201, 0x2b130001, 0x15890101, 0x2b110001, 0x02b10401, 0x2b0f0001, 0x15870101, 0x2b0d0001, 0x0ac30201, 0x2b0b0001, 0x15850101, 0x2b090001, 0x05610301, 0x2b070001, 0x15830101, 0x2b050001, 0x0ac10201, 0x2b030001, 0x15810101, 0x2b010001, + 0x002b2601, 0x2aff0001, 0x157f0101, 0x2afd0001, 0x0abf0201, 0x2afb0001, 0x157d0101, 0x2af90001, 0x055f0301, 0x2af70001, 0x157b0101, 0x2af50001, 0x0abd0201, 0x2af30001, 0x15790101, 0x2af10001, 0x02af0401, 0x2aef0001, 0x15770101, 0x2aed0001, 0x0abb0201, 0x2aeb0001, 0x15750101, 0x2ae90001, 0x055d0301, 0x2ae70001, 0x15730101, 0x2ae50001, 0x0ab90201, 0x2ae30001, 0x15710101, 0x2ae10001, 0x01570501, 0x2adf0001, 0x156f0101, 0x2add0001, 0x0ab70201, 0x2adb0001, 0x156d0101, 0x2ad90001, 0x055b0301, 0x2ad70001, 0x156b0101, 0x2ad50001, 0x0ab50201, 0x2ad30001, 0x15690101, 0x2ad10001, 0x02ad0401, 0x2acf0001, 0x15670101, 0x2acd0001, 0x0ab30201, 0x2acb0001, 0x15650101, 0x2ac90001, 0x05590301, 0x2ac70001, 0x15630101, 0x2ac50001, 0x0ab10201, 0x2ac30001, 0x15610101, 0x2ac10001, 0x00ab0601, 0x2abf0001, 0x155f0101, 0x2abd0001, 0x0aaf0201, 0x2abb0001, 0x155d0101, 0x2ab90001, 0x05570301, 0x2ab70001, 0x155b0101, 0x2ab50001, 0x0aad0201, 0x2ab30001, 0x15590101, 0x2ab10001, 0x02ab0401, 0x2aaf0001, 0x15570101, 0x2aad0001, 0x0aab0201, 0x2aab0001, 0x15550101, 0x2aa90001, 0x05550301, 0x2aa70001, 0x15530101, 0x2aa50001, 0x0aa90201, 0x2aa30001, 0x15510101, 0x2aa10001, 0x01550501, 0x2a9f0001, 0x154f0101, 0x2a9d0001, 0x0aa70201, 0x2a9b0001, 0x154d0101, 0x2a990001, 0x05530301, 0x2a970001, 0x154b0101, 0x2a950001, 0x0aa50201, 0x2a930001, 0x15490101, 0x2a910001, 0x02a90401, 0x2a8f0001, 0x15470101, 0x2a8d0001, 0x0aa30201, 0x2a8b0001, 0x15450101, 0x2a890001, 0x05510301, 0x2a870001, 0x15430101, 0x2a850001, 0x0aa10201, 0x2a830001, 0x15410101, 0x2a810001, 0x00551601, 0x2a7f0001, 0x153f0101, 0x2a7d0001, 0x0a9f0201, 0x2a7b0001, 0x153d0101, 0x2a790001, 0x054f0301, 0x2a770001, 0x153b0101, 0x2a750001, 0x0a9d0201, 0x2a730001, 0x15390101, 0x2a710001, 0x02a70401, 0x2a6f0001, 0x15370101, 0x2a6d0001, 0x0a9b0201, 0x2a6b0001, 0x15350101, 0x2a690001, 0x054d0301, 0x2a670001, 0x15330101, 0x2a650001, 0x0a990201, 0x2a630001, 0x15310101, 0x2a610001, 0x01530501, 0x2a5f0001, 0x152f0101, 0x2a5d0001, 0x0a970201, 0x2a5b0001, 0x152d0101, 0x2a590001, 0x054b0301, 0x2a570001, 0x152b0101, 0x2a550001, 0x0a950201, 0x2a530001, 0x15290101, 0x2a510001, 0x02a50401, 0x2a4f0001, 0x15270101, 0x2a4d0001, 0x0a930201, 0x2a4b0001, 0x15250101, 0x2a490001, 0x05490301, 0x2a470001, 0x15230101, 0x2a450001, 0x0a910201, 0x2a430001, 0x15210101, 0x2a410001, 0x00a90601, 0x2a3f0001, 0x151f0101, 0x2a3d0001, 0x0a8f0201, 0x2a3b0001, 0x151d0101, 0x2a390001, 0x05470301, 0x2a370001, 0x151b0101, 0x2a350001, 0x0a8d0201, 0x2a330001, 0x15190101, 0x2a310001, 0x02a30401, 0x2a2f0001, 0x15170101, 0x2a2d0001, 0x0a8b0201, 0x2a2b0001, 0x15150101, 0x2a290001, 0x05450301, 0x2a270001, 0x15130101, 0x2a250001, 0x0a890201, 0x2a230001, 0x15110101, 0x2a210001, 0x01510501, 0x2a1f0001, 0x150f0101, 0x2a1d0001, 0x0a870201, 0x2a1b0001, 0x150d0101, 0x2a190001, 0x05430301, 0x2a170001, 0x150b0101, 0x2a150001, 0x0a850201, 0x2a130001, 0x15090101, 0x2a110001, 0x02a10401, 0x2a0f0001, 0x15070101, 0x2a0d0001, 0x0a830201, 0x2a0b0001, 0x15050101, 0x2a090001, 0x05410301, 0x2a070001, 0x15030101, 0x2a050001, 0x0a810201, 0x2a030001, 0x15010101, 0x2a010001, + 0x00153601, 0x29ff0001, 0x14ff0101, 0x29fd0001, 0x0a7f0201, 0x29fb0001, 0x14fd0101, 0x29f90001, 0x053f0301, 0x29f70001, 0x14fb0101, 0x29f50001, 0x0a7d0201, 0x29f30001, 0x14f90101, 0x29f10001, 0x029f0401, 0x29ef0001, 0x14f70101, 0x29ed0001, 0x0a7b0201, 0x29eb0001, 0x14f50101, 0x29e90001, 0x053d0301, 0x29e70001, 0x14f30101, 0x29e50001, 0x0a790201, 0x29e30001, 0x14f10101, 0x29e10001, 0x014f0501, 0x29df0001, 0x14ef0101, 0x29dd0001, 0x0a770201, 0x29db0001, 0x14ed0101, 0x29d90001, 0x053b0301, 0x29d70001, 0x14eb0101, 0x29d50001, 0x0a750201, 0x29d30001, 0x14e90101, 0x29d10001, 0x029d0401, 0x29cf0001, 0x14e70101, 0x29cd0001, 0x0a730201, 0x29cb0001, 0x14e50101, 0x29c90001, 0x05390301, 0x29c70001, 0x14e30101, 0x29c50001, 0x0a710201, 0x29c30001, 0x14e10101, 0x29c10001, 0x00a70601, 0x29bf0001, 0x14df0101, 0x29bd0001, 0x0a6f0201, 0x29bb0001, 0x14dd0101, 0x29b90001, 0x05370301, 0x29b70001, 0x14db0101, 0x29b50001, 0x0a6d0201, 0x29b30001, 0x14d90101, 0x29b10001, 0x029b0401, 0x29af0001, 0x14d70101, 0x29ad0001, 0x0a6b0201, 0x29ab0001, 0x14d50101, 0x29a90001, 0x05350301, 0x29a70001, 0x14d30101, 0x29a50001, 0x0a690201, 0x29a30001, 0x14d10101, 0x29a10001, 0x014d0501, 0x299f0001, 0x14cf0101, 0x299d0001, 0x0a670201, 0x299b0001, 0x14cd0101, 0x29990001, 0x05330301, 0x29970001, 0x14cb0101, 0x29950001, 0x0a650201, 0x29930001, 0x14c90101, 0x29910001, 0x02990401, 0x298f0001, 0x14c70101, 0x298d0001, 0x0a630201, 0x298b0001, 0x14c50101, 0x29890001, 0x05310301, 0x29870001, 0x14c30101, 0x29850001, 0x0a610201, 0x29830001, 0x14c10101, 0x29810001, 0x00531601, 0x297f0001, 0x14bf0101, 0x297d0001, 0x0a5f0201, 0x297b0001, 0x14bd0101, 0x29790001, 0x052f0301, 0x29770001, 0x14bb0101, 0x29750001, 0x0a5d0201, 0x29730001, 0x14b90101, 0x29710001, 0x02970401, 0x296f0001, 0x14b70101, 0x296d0001, 0x0a5b0201, 0x296b0001, 0x14b50101, 0x29690001, 0x052d0301, 0x29670001, 0x14b30101, 0x29650001, 0x0a590201, 0x29630001, 0x14b10101, 0x29610001, 0x014b0501, 0x295f0001, 0x14af0101, 0x295d0001, 0x0a570201, 0x295b0001, 0x14ad0101, 0x29590001, 0x052b0301, 0x29570001, 0x14ab0101, 0x29550001, 0x0a550201, 0x29530001, 0x14a90101, 0x29510001, 0x02950401, 0x294f0001, 0x14a70101, 0x294d0001, 0x0a530201, 0x294b0001, 0x14a50101, 0x29490001, 0x05290301, 0x29470001, 0x14a30101, 0x29450001, 0x0a510201, 0x29430001, 0x14a10101, 0x29410001, 0x00a50601, 0x293f0001, 0x149f0101, 0x293d0001, 0x0a4f0201, 0x293b0001, 0x149d0101, 0x29390001, 0x05270301, 0x29370001, 0x149b0101, 0x29350001, 0x0a4d0201, 0x29330001, 0x14990101, 0x29310001, 0x02930401, 0x292f0001, 0x14970101, 0x292d0001, 0x0a4b0201, 0x292b0001, 0x14950101, 0x29290001, 0x05250301, 0x29270001, 0x14930101, 0x29250001, 0x0a490201, 0x29230001, 0x14910101, 0x29210001, 0x01490501, 0x291f0001, 0x148f0101, 0x291d0001, 0x0a470201, 0x291b0001, 0x148d0101, 0x29190001, 0x05230301, 0x29170001, 0x148b0101, 0x29150001, 0x0a450201, 0x29130001, 0x14890101, 0x29110001, 0x02910401, 0x290f0001, 0x14870101, 0x290d0001, 0x0a430201, 0x290b0001, 0x14850101, 0x29090001, 0x05210301, 0x29070001, 0x14830101, 0x29050001, 0x0a410201, 0x29030001, 0x14810101, 0x29010001, + 0x00292601, 0x28ff0001, 0x147f0101, 0x28fd0001, 0x0a3f0201, 0x28fb0001, 0x147d0101, 0x28f90001, 0x051f0301, 0x28f70001, 0x147b0101, 0x28f50001, 0x0a3d0201, 0x28f30001, 0x14790101, 0x28f10001, 0x028f0401, 0x28ef0001, 0x14770101, 0x28ed0001, 0x0a3b0201, 0x28eb0001, 0x14750101, 0x28e90001, 0x051d0301, 0x28e70001, 0x14730101, 0x28e50001, 0x0a390201, 0x28e30001, 0x14710101, 0x28e10001, 0x01470501, 0x28df0001, 0x146f0101, 0x28dd0001, 0x0a370201, 0x28db0001, 0x146d0101, 0x28d90001, 0x051b0301, 0x28d70001, 0x146b0101, 0x28d50001, 0x0a350201, 0x28d30001, 0x14690101, 0x28d10001, 0x028d0401, 0x28cf0001, 0x14670101, 0x28cd0001, 0x0a330201, 0x28cb0001, 0x14650101, 0x28c90001, 0x05190301, 0x28c70001, 0x14630101, 0x28c50001, 0x0a310201, 0x28c30001, 0x14610101, 0x28c10001, 0x00a30601, 0x28bf0001, 0x145f0101, 0x28bd0001, 0x0a2f0201, 0x28bb0001, 0x145d0101, 0x28b90001, 0x05170301, 0x28b70001, 0x145b0101, 0x28b50001, 0x0a2d0201, 0x28b30001, 0x14590101, 0x28b10001, 0x028b0401, 0x28af0001, 0x14570101, 0x28ad0001, 0x0a2b0201, 0x28ab0001, 0x14550101, 0x28a90001, 0x05150301, 0x28a70001, 0x14530101, 0x28a50001, 0x0a290201, 0x28a30001, 0x14510101, 0x28a10001, 0x01450501, 0x289f0001, 0x144f0101, 0x289d0001, 0x0a270201, 0x289b0001, 0x144d0101, 0x28990001, 0x05130301, 0x28970001, 0x144b0101, 0x28950001, 0x0a250201, 0x28930001, 0x14490101, 0x28910001, 0x02890401, 0x288f0001, 0x14470101, 0x288d0001, 0x0a230201, 0x288b0001, 0x14450101, 0x28890001, 0x05110301, 0x28870001, 0x14430101, 0x28850001, 0x0a210201, 0x28830001, 0x14410101, 0x28810001, 0x00511601, 0x287f0001, 0x143f0101, 0x287d0001, 0x0a1f0201, 0x287b0001, 0x143d0101, 0x28790001, 0x050f0301, 0x28770001, 0x143b0101, 0x28750001, 0x0a1d0201, 0x28730001, 0x14390101, 0x28710001, 0x02870401, 0x286f0001, 0x14370101, 0x286d0001, 0x0a1b0201, 0x286b0001, 0x14350101, 0x28690001, 0x050d0301, 0x28670001, 0x14330101, 0x28650001, 0x0a190201, 0x28630001, 0x14310101, 0x28610001, 0x01430501, 0x285f0001, 0x142f0101, 0x285d0001, 0x0a170201, 0x285b0001, 0x142d0101, 0x28590001, 0x050b0301, 0x28570001, 0x142b0101, 0x28550001, 0x0a150201, 0x28530001, 0x14290101, 0x28510001, 0x02850401, 0x284f0001, 0x14270101, 0x284d0001, 0x0a130201, 0x284b0001, 0x14250101, 0x28490001, 0x05090301, 0x28470001, 0x14230101, 0x28450001, 0x0a110201, 0x28430001, 0x14210101, 0x28410001, 0x00a10601, 0x283f0001, 0x141f0101, 0x283d0001, 0x0a0f0201, 0x283b0001, 0x141d0101, 0x28390001, 0x05070301, 0x28370001, 0x141b0101, 0x28350001, 0x0a0d0201, 0x28330001, 0x14190101, 0x28310001, 0x02830401, 0x282f0001, 0x14170101, 0x282d0001, 0x0a0b0201, 0x282b0001, 0x14150101, 0x28290001, 0x05050301, 0x28270001, 0x14130101, 0x28250001, 0x0a090201, 0x28230001, 0x14110101, 0x28210001, 0x01410501, 0x281f0001, 0x140f0101, 0x281d0001, 0x0a070201, 0x281b0001, 0x140d0101, 0x28190001, 0x05030301, 0x28170001, 0x140b0101, 0x28150001, 0x0a050201, 0x28130001, 0x14090101, 0x28110001, 0x02810401, 0x280f0001, 0x14070101, 0x280d0001, 0x0a030201, 0x280b0001, 0x14050101, 0x28090001, 0x05010301, 0x28070001, 0x14030101, 0x28050001, 0x0a010201, 0x28030001, 0x14010101, 0x28010001, + 0x00055601, 0x27ff0001, 0x13ff0101, 0x27fd0001, 0x09ff0201, 0x27fb0001, 0x13fd0101, 0x27f90001, 0x04ff0301, 0x27f70001, 0x13fb0101, 0x27f50001, 0x09fd0201, 0x27f30001, 0x13f90101, 0x27f10001, 0x027f0401, 0x27ef0001, 0x13f70101, 0x27ed0001, 0x09fb0201, 0x27eb0001, 0x13f50101, 0x27e90001, 0x04fd0301, 0x27e70001, 0x13f30101, 0x27e50001, 0x09f90201, 0x27e30001, 0x13f10101, 0x27e10001, 0x013f0501, 0x27df0001, 0x13ef0101, 0x27dd0001, 0x09f70201, 0x27db0001, 0x13ed0101, 0x27d90001, 0x04fb0301, 0x27d70001, 0x13eb0101, 0x27d50001, 0x09f50201, 0x27d30001, 0x13e90101, 0x27d10001, 0x027d0401, 0x27cf0001, 0x13e70101, 0x27cd0001, 0x09f30201, 0x27cb0001, 0x13e50101, 0x27c90001, 0x04f90301, 0x27c70001, 0x13e30101, 0x27c50001, 0x09f10201, 0x27c30001, 0x13e10101, 0x27c10001, 0x009f0601, 0x27bf0001, 0x13df0101, 0x27bd0001, 0x09ef0201, 0x27bb0001, 0x13dd0101, 0x27b90001, 0x04f70301, 0x27b70001, 0x13db0101, 0x27b50001, 0x09ed0201, 0x27b30001, 0x13d90101, 0x27b10001, 0x027b0401, 0x27af0001, 0x13d70101, 0x27ad0001, 0x09eb0201, 0x27ab0001, 0x13d50101, 0x27a90001, 0x04f50301, 0x27a70001, 0x13d30101, 0x27a50001, 0x09e90201, 0x27a30001, 0x13d10101, 0x27a10001, 0x013d0501, 0x279f0001, 0x13cf0101, 0x279d0001, 0x09e70201, 0x279b0001, 0x13cd0101, 0x27990001, 0x04f30301, 0x27970001, 0x13cb0101, 0x27950001, 0x09e50201, 0x27930001, 0x13c90101, 0x27910001, 0x02790401, 0x278f0001, 0x13c70101, 0x278d0001, 0x09e30201, 0x278b0001, 0x13c50101, 0x27890001, 0x04f10301, 0x27870001, 0x13c30101, 0x27850001, 0x09e10201, 0x27830001, 0x13c10101, 0x27810001, 0x004f1601, 0x277f0001, 0x13bf0101, 0x277d0001, 0x09df0201, 0x277b0001, 0x13bd0101, 0x27790001, 0x04ef0301, 0x27770001, 0x13bb0101, 0x27750001, 0x09dd0201, 0x27730001, 0x13b90101, 0x27710001, 0x02770401, 0x276f0001, 0x13b70101, 0x276d0001, 0x09db0201, 0x276b0001, 0x13b50101, 0x27690001, 0x04ed0301, 0x27670001, 0x13b30101, 0x27650001, 0x09d90201, 0x27630001, 0x13b10101, 0x27610001, 0x013b0501, 0x275f0001, 0x13af0101, 0x275d0001, 0x09d70201, 0x275b0001, 0x13ad0101, 0x27590001, 0x04eb0301, 0x27570001, 0x13ab0101, 0x27550001, 0x09d50201, 0x27530001, 0x13a90101, 0x27510001, 0x02750401, 0x274f0001, 0x13a70101, 0x274d0001, 0x09d30201, 0x274b0001, 0x13a50101, 0x27490001, 0x04e90301, 0x27470001, 0x13a30101, 0x27450001, 0x09d10201, 0x27430001, 0x13a10101, 0x27410001, 0x009d0601, 0x273f0001, 0x139f0101, 0x273d0001, 0x09cf0201, 0x273b0001, 0x139d0101, 0x27390001, 0x04e70301, 0x27370001, 0x139b0101, 0x27350001, 0x09cd0201, 0x27330001, 0x13990101, 0x27310001, 0x02730401, 0x272f0001, 0x13970101, 0x272d0001, 0x09cb0201, 0x272b0001, 0x13950101, 0x27290001, 0x04e50301, 0x27270001, 0x13930101, 0x27250001, 0x09c90201, 0x27230001, 0x13910101, 0x27210001, 0x01390501, 0x271f0001, 0x138f0101, 0x271d0001, 0x09c70201, 0x271b0001, 0x138d0101, 0x27190001, 0x04e30301, 0x27170001, 0x138b0101, 0x27150001, 0x09c50201, 0x27130001, 0x13890101, 0x27110001, 0x02710401, 0x270f0001, 0x13870101, 0x270d0001, 0x09c30201, 0x270b0001, 0x13850101, 0x27090001, 0x04e10301, 0x27070001, 0x13830101, 0x27050001, 0x09c10201, 0x27030001, 0x13810101, 0x27010001, + 0x00272601, 0x26ff0001, 0x137f0101, 0x26fd0001, 0x09bf0201, 0x26fb0001, 0x137d0101, 0x26f90001, 0x04df0301, 0x26f70001, 0x137b0101, 0x26f50001, 0x09bd0201, 0x26f30001, 0x13790101, 0x26f10001, 0x026f0401, 0x26ef0001, 0x13770101, 0x26ed0001, 0x09bb0201, 0x26eb0001, 0x13750101, 0x26e90001, 0x04dd0301, 0x26e70001, 0x13730101, 0x26e50001, 0x09b90201, 0x26e30001, 0x13710101, 0x26e10001, 0x01370501, 0x26df0001, 0x136f0101, 0x26dd0001, 0x09b70201, 0x26db0001, 0x136d0101, 0x26d90001, 0x04db0301, 0x26d70001, 0x136b0101, 0x26d50001, 0x09b50201, 0x26d30001, 0x13690101, 0x26d10001, 0x026d0401, 0x26cf0001, 0x13670101, 0x26cd0001, 0x09b30201, 0x26cb0001, 0x13650101, 0x26c90001, 0x04d90301, 0x26c70001, 0x13630101, 0x26c50001, 0x09b10201, 0x26c30001, 0x13610101, 0x26c10001, 0x009b0601, 0x26bf0001, 0x135f0101, 0x26bd0001, 0x09af0201, 0x26bb0001, 0x135d0101, 0x26b90001, 0x04d70301, 0x26b70001, 0x135b0101, 0x26b50001, 0x09ad0201, 0x26b30001, 0x13590101, 0x26b10001, 0x026b0401, 0x26af0001, 0x13570101, 0x26ad0001, 0x09ab0201, 0x26ab0001, 0x13550101, 0x26a90001, 0x04d50301, 0x26a70001, 0x13530101, 0x26a50001, 0x09a90201, 0x26a30001, 0x13510101, 0x26a10001, 0x01350501, 0x269f0001, 0x134f0101, 0x269d0001, 0x09a70201, 0x269b0001, 0x134d0101, 0x26990001, 0x04d30301, 0x26970001, 0x134b0101, 0x26950001, 0x09a50201, 0x26930001, 0x13490101, 0x26910001, 0x02690401, 0x268f0001, 0x13470101, 0x268d0001, 0x09a30201, 0x268b0001, 0x13450101, 0x26890001, 0x04d10301, 0x26870001, 0x13430101, 0x26850001, 0x09a10201, 0x26830001, 0x13410101, 0x26810001, 0x004d1601, 0x267f0001, 0x133f0101, 0x267d0001, 0x099f0201, 0x267b0001, 0x133d0101, 0x26790001, 0x04cf0301, 0x26770001, 0x133b0101, 0x26750001, 0x099d0201, 0x26730001, 0x13390101, 0x26710001, 0x02670401, 0x266f0001, 0x13370101, 0x266d0001, 0x099b0201, 0x266b0001, 0x13350101, 0x26690001, 0x04cd0301, 0x26670001, 0x13330101, 0x26650001, 0x09990201, 0x26630001, 0x13310101, 0x26610001, 0x01330501, 0x265f0001, 0x132f0101, 0x265d0001, 0x09970201, 0x265b0001, 0x132d0101, 0x26590001, 0x04cb0301, 0x26570001, 0x132b0101, 0x26550001, 0x09950201, 0x26530001, 0x13290101, 0x26510001, 0x02650401, 0x264f0001, 0x13270101, 0x264d0001, 0x09930201, 0x264b0001, 0x13250101, 0x26490001, 0x04c90301, 0x26470001, 0x13230101, 0x26450001, 0x09910201, 0x26430001, 0x13210101, 0x26410001, 0x00990601, 0x263f0001, 0x131f0101, 0x263d0001, 0x098f0201, 0x263b0001, 0x131d0101, 0x26390001, 0x04c70301, 0x26370001, 0x131b0101, 0x26350001, 0x098d0201, 0x26330001, 0x13190101, 0x26310001, 0x02630401, 0x262f0001, 0x13170101, 0x262d0001, 0x098b0201, 0x262b0001, 0x13150101, 0x26290001, 0x04c50301, 0x26270001, 0x13130101, 0x26250001, 0x09890201, 0x26230001, 0x13110101, 0x26210001, 0x01310501, 0x261f0001, 0x130f0101, 0x261d0001, 0x09870201, 0x261b0001, 0x130d0101, 0x26190001, 0x04c30301, 0x26170001, 0x130b0101, 0x26150001, 0x09850201, 0x26130001, 0x13090101, 0x26110001, 0x02610401, 0x260f0001, 0x13070101, 0x260d0001, 0x09830201, 0x260b0001, 0x13050101, 0x26090001, 0x04c10301, 0x26070001, 0x13030101, 0x26050001, 0x09810201, 0x26030001, 0x13010101, 0x26010001, + 0x00133601, 0x25ff0001, 0x12ff0101, 0x25fd0001, 0x097f0201, 0x25fb0001, 0x12fd0101, 0x25f90001, 0x04bf0301, 0x25f70001, 0x12fb0101, 0x25f50001, 0x097d0201, 0x25f30001, 0x12f90101, 0x25f10001, 0x025f0401, 0x25ef0001, 0x12f70101, 0x25ed0001, 0x097b0201, 0x25eb0001, 0x12f50101, 0x25e90001, 0x04bd0301, 0x25e70001, 0x12f30101, 0x25e50001, 0x09790201, 0x25e30001, 0x12f10101, 0x25e10001, 0x012f0501, 0x25df0001, 0x12ef0101, 0x25dd0001, 0x09770201, 0x25db0001, 0x12ed0101, 0x25d90001, 0x04bb0301, 0x25d70001, 0x12eb0101, 0x25d50001, 0x09750201, 0x25d30001, 0x12e90101, 0x25d10001, 0x025d0401, 0x25cf0001, 0x12e70101, 0x25cd0001, 0x09730201, 0x25cb0001, 0x12e50101, 0x25c90001, 0x04b90301, 0x25c70001, 0x12e30101, 0x25c50001, 0x09710201, 0x25c30001, 0x12e10101, 0x25c10001, 0x00970601, 0x25bf0001, 0x12df0101, 0x25bd0001, 0x096f0201, 0x25bb0001, 0x12dd0101, 0x25b90001, 0x04b70301, 0x25b70001, 0x12db0101, 0x25b50001, 0x096d0201, 0x25b30001, 0x12d90101, 0x25b10001, 0x025b0401, 0x25af0001, 0x12d70101, 0x25ad0001, 0x096b0201, 0x25ab0001, 0x12d50101, 0x25a90001, 0x04b50301, 0x25a70001, 0x12d30101, 0x25a50001, 0x09690201, 0x25a30001, 0x12d10101, 0x25a10001, 0x012d0501, 0x259f0001, 0x12cf0101, 0x259d0001, 0x09670201, 0x259b0001, 0x12cd0101, 0x25990001, 0x04b30301, 0x25970001, 0x12cb0101, 0x25950001, 0x09650201, 0x25930001, 0x12c90101, 0x25910001, 0x02590401, 0x258f0001, 0x12c70101, 0x258d0001, 0x09630201, 0x258b0001, 0x12c50101, 0x25890001, 0x04b10301, 0x25870001, 0x12c30101, 0x25850001, 0x09610201, 0x25830001, 0x12c10101, 0x25810001, 0x004b1601, 0x257f0001, 0x12bf0101, 0x257d0001, 0x095f0201, 0x257b0001, 0x12bd0101, 0x25790001, 0x04af0301, 0x25770001, 0x12bb0101, 0x25750001, 0x095d0201, 0x25730001, 0x12b90101, 0x25710001, 0x02570401, 0x256f0001, 0x12b70101, 0x256d0001, 0x095b0201, 0x256b0001, 0x12b50101, 0x25690001, 0x04ad0301, 0x25670001, 0x12b30101, 0x25650001, 0x09590201, 0x25630001, 0x12b10101, 0x25610001, 0x012b0501, 0x255f0001, 0x12af0101, 0x255d0001, 0x09570201, 0x255b0001, 0x12ad0101, 0x25590001, 0x04ab0301, 0x25570001, 0x12ab0101, 0x25550001, 0x09550201, 0x25530001, 0x12a90101, 0x25510001, 0x02550401, 0x254f0001, 0x12a70101, 0x254d0001, 0x09530201, 0x254b0001, 0x12a50101, 0x25490001, 0x04a90301, 0x25470001, 0x12a30101, 0x25450001, 0x09510201, 0x25430001, 0x12a10101, 0x25410001, 0x00950601, 0x253f0001, 0x129f0101, 0x253d0001, 0x094f0201, 0x253b0001, 0x129d0101, 0x25390001, 0x04a70301, 0x25370001, 0x129b0101, 0x25350001, 0x094d0201, 0x25330001, 0x12990101, 0x25310001, 0x02530401, 0x252f0001, 0x12970101, 0x252d0001, 0x094b0201, 0x252b0001, 0x12950101, 0x25290001, 0x04a50301, 0x25270001, 0x12930101, 0x25250001, 0x09490201, 0x25230001, 0x12910101, 0x25210001, 0x01290501, 0x251f0001, 0x128f0101, 0x251d0001, 0x09470201, 0x251b0001, 0x128d0101, 0x25190001, 0x04a30301, 0x25170001, 0x128b0101, 0x25150001, 0x09450201, 0x25130001, 0x12890101, 0x25110001, 0x02510401, 0x250f0001, 0x12870101, 0x250d0001, 0x09430201, 0x250b0001, 0x12850101, 0x25090001, 0x04a10301, 0x25070001, 0x12830101, 0x25050001, 0x09410201, 0x25030001, 0x12810101, 0x25010001, + 0x00252601, 0x24ff0001, 0x127f0101, 0x24fd0001, 0x093f0201, 0x24fb0001, 0x127d0101, 0x24f90001, 0x049f0301, 0x24f70001, 0x127b0101, 0x24f50001, 0x093d0201, 0x24f30001, 0x12790101, 0x24f10001, 0x024f0401, 0x24ef0001, 0x12770101, 0x24ed0001, 0x093b0201, 0x24eb0001, 0x12750101, 0x24e90001, 0x049d0301, 0x24e70001, 0x12730101, 0x24e50001, 0x09390201, 0x24e30001, 0x12710101, 0x24e10001, 0x01270501, 0x24df0001, 0x126f0101, 0x24dd0001, 0x09370201, 0x24db0001, 0x126d0101, 0x24d90001, 0x049b0301, 0x24d70001, 0x126b0101, 0x24d50001, 0x09350201, 0x24d30001, 0x12690101, 0x24d10001, 0x024d0401, 0x24cf0001, 0x12670101, 0x24cd0001, 0x09330201, 0x24cb0001, 0x12650101, 0x24c90001, 0x04990301, 0x24c70001, 0x12630101, 0x24c50001, 0x09310201, 0x24c30001, 0x12610101, 0x24c10001, 0x00930601, 0x24bf0001, 0x125f0101, 0x24bd0001, 0x092f0201, 0x24bb0001, 0x125d0101, 0x24b90001, 0x04970301, 0x24b70001, 0x125b0101, 0x24b50001, 0x092d0201, 0x24b30001, 0x12590101, 0x24b10001, 0x024b0401, 0x24af0001, 0x12570101, 0x24ad0001, 0x092b0201, 0x24ab0001, 0x12550101, 0x24a90001, 0x04950301, 0x24a70001, 0x12530101, 0x24a50001, 0x09290201, 0x24a30001, 0x12510101, 0x24a10001, 0x01250501, 0x249f0001, 0x124f0101, 0x249d0001, 0x09270201, 0x249b0001, 0x124d0101, 0x24990001, 0x04930301, 0x24970001, 0x124b0101, 0x24950001, 0x09250201, 0x24930001, 0x12490101, 0x24910001, 0x02490401, 0x248f0001, 0x12470101, 0x248d0001, 0x09230201, 0x248b0001, 0x12450101, 0x24890001, 0x04910301, 0x24870001, 0x12430101, 0x24850001, 0x09210201, 0x24830001, 0x12410101, 0x24810001, 0x00491601, 0x247f0001, 0x123f0101, 0x247d0001, 0x091f0201, 0x247b0001, 0x123d0101, 0x24790001, 0x048f0301, 0x24770001, 0x123b0101, 0x24750001, 0x091d0201, 0x24730001, 0x12390101, 0x24710001, 0x02470401, 0x246f0001, 0x12370101, 0x246d0001, 0x091b0201, 0x246b0001, 0x12350101, 0x24690001, 0x048d0301, 0x24670001, 0x12330101, 0x24650001, 0x09190201, 0x24630001, 0x12310101, 0x24610001, 0x01230501, 0x245f0001, 0x122f0101, 0x245d0001, 0x09170201, 0x245b0001, 0x122d0101, 0x24590001, 0x048b0301, 0x24570001, 0x122b0101, 0x24550001, 0x09150201, 0x24530001, 0x12290101, 0x24510001, 0x02450401, 0x244f0001, 0x12270101, 0x244d0001, 0x09130201, 0x244b0001, 0x12250101, 0x24490001, 0x04890301, 0x24470001, 0x12230101, 0x24450001, 0x09110201, 0x24430001, 0x12210101, 0x24410001, 0x00910601, 0x243f0001, 0x121f0101, 0x243d0001, 0x090f0201, 0x243b0001, 0x121d0101, 0x24390001, 0x04870301, 0x24370001, 0x121b0101, 0x24350001, 0x090d0201, 0x24330001, 0x12190101, 0x24310001, 0x02430401, 0x242f0001, 0x12170101, 0x242d0001, 0x090b0201, 0x242b0001, 0x12150101, 0x24290001, 0x04850301, 0x24270001, 0x12130101, 0x24250001, 0x09090201, 0x24230001, 0x12110101, 0x24210001, 0x01210501, 0x241f0001, 0x120f0101, 0x241d0001, 0x09070201, 0x241b0001, 0x120d0101, 0x24190001, 0x04830301, 0x24170001, 0x120b0101, 0x24150001, 0x09050201, 0x24130001, 0x12090101, 0x24110001, 0x02410401, 0x240f0001, 0x12070101, 0x240d0001, 0x09030201, 0x240b0001, 0x12050101, 0x24090001, 0x04810301, 0x24070001, 0x12030101, 0x24050001, 0x09010201, 0x24030001, 0x12010101, 0x24010001, + 0x00094601, 0x23ff0001, 0x11ff0101, 0x23fd0001, 0x08ff0201, 0x23fb0001, 0x11fd0101, 0x23f90001, 0x047f0301, 0x23f70001, 0x11fb0101, 0x23f50001, 0x08fd0201, 0x23f30001, 0x11f90101, 0x23f10001, 0x023f0401, 0x23ef0001, 0x11f70101, 0x23ed0001, 0x08fb0201, 0x23eb0001, 0x11f50101, 0x23e90001, 0x047d0301, 0x23e70001, 0x11f30101, 0x23e50001, 0x08f90201, 0x23e30001, 0x11f10101, 0x23e10001, 0x011f0501, 0x23df0001, 0x11ef0101, 0x23dd0001, 0x08f70201, 0x23db0001, 0x11ed0101, 0x23d90001, 0x047b0301, 0x23d70001, 0x11eb0101, 0x23d50001, 0x08f50201, 0x23d30001, 0x11e90101, 0x23d10001, 0x023d0401, 0x23cf0001, 0x11e70101, 0x23cd0001, 0x08f30201, 0x23cb0001, 0x11e50101, 0x23c90001, 0x04790301, 0x23c70001, 0x11e30101, 0x23c50001, 0x08f10201, 0x23c30001, 0x11e10101, 0x23c10001, 0x008f0601, 0x23bf0001, 0x11df0101, 0x23bd0001, 0x08ef0201, 0x23bb0001, 0x11dd0101, 0x23b90001, 0x04770301, 0x23b70001, 0x11db0101, 0x23b50001, 0x08ed0201, 0x23b30001, 0x11d90101, 0x23b10001, 0x023b0401, 0x23af0001, 0x11d70101, 0x23ad0001, 0x08eb0201, 0x23ab0001, 0x11d50101, 0x23a90001, 0x04750301, 0x23a70001, 0x11d30101, 0x23a50001, 0x08e90201, 0x23a30001, 0x11d10101, 0x23a10001, 0x011d0501, 0x239f0001, 0x11cf0101, 0x239d0001, 0x08e70201, 0x239b0001, 0x11cd0101, 0x23990001, 0x04730301, 0x23970001, 0x11cb0101, 0x23950001, 0x08e50201, 0x23930001, 0x11c90101, 0x23910001, 0x02390401, 0x238f0001, 0x11c70101, 0x238d0001, 0x08e30201, 0x238b0001, 0x11c50101, 0x23890001, 0x04710301, 0x23870001, 0x11c30101, 0x23850001, 0x08e10201, 0x23830001, 0x11c10101, 0x23810001, 0x00471601, 0x237f0001, 0x11bf0101, 0x237d0001, 0x08df0201, 0x237b0001, 0x11bd0101, 0x23790001, 0x046f0301, 0x23770001, 0x11bb0101, 0x23750001, 0x08dd0201, 0x23730001, 0x11b90101, 0x23710001, 0x02370401, 0x236f0001, 0x11b70101, 0x236d0001, 0x08db0201, 0x236b0001, 0x11b50101, 0x23690001, 0x046d0301, 0x23670001, 0x11b30101, 0x23650001, 0x08d90201, 0x23630001, 0x11b10101, 0x23610001, 0x011b0501, 0x235f0001, 0x11af0101, 0x235d0001, 0x08d70201, 0x235b0001, 0x11ad0101, 0x23590001, 0x046b0301, 0x23570001, 0x11ab0101, 0x23550001, 0x08d50201, 0x23530001, 0x11a90101, 0x23510001, 0x02350401, 0x234f0001, 0x11a70101, 0x234d0001, 0x08d30201, 0x234b0001, 0x11a50101, 0x23490001, 0x04690301, 0x23470001, 0x11a30101, 0x23450001, 0x08d10201, 0x23430001, 0x11a10101, 0x23410001, 0x008d0601, 0x233f0001, 0x119f0101, 0x233d0001, 0x08cf0201, 0x233b0001, 0x119d0101, 0x23390001, 0x04670301, 0x23370001, 0x119b0101, 0x23350001, 0x08cd0201, 0x23330001, 0x11990101, 0x23310001, 0x02330401, 0x232f0001, 0x11970101, 0x232d0001, 0x08cb0201, 0x232b0001, 0x11950101, 0x23290001, 0x04650301, 0x23270001, 0x11930101, 0x23250001, 0x08c90201, 0x23230001, 0x11910101, 0x23210001, 0x01190501, 0x231f0001, 0x118f0101, 0x231d0001, 0x08c70201, 0x231b0001, 0x118d0101, 0x23190001, 0x04630301, 0x23170001, 0x118b0101, 0x23150001, 0x08c50201, 0x23130001, 0x11890101, 0x23110001, 0x02310401, 0x230f0001, 0x11870101, 0x230d0001, 0x08c30201, 0x230b0001, 0x11850101, 0x23090001, 0x04610301, 0x23070001, 0x11830101, 0x23050001, 0x08c10201, 0x23030001, 0x11810101, 0x23010001, + 0x00232601, 0x22ff0001, 0x117f0101, 0x22fd0001, 0x08bf0201, 0x22fb0001, 0x117d0101, 0x22f90001, 0x045f0301, 0x22f70001, 0x117b0101, 0x22f50001, 0x08bd0201, 0x22f30001, 0x11790101, 0x22f10001, 0x022f0401, 0x22ef0001, 0x11770101, 0x22ed0001, 0x08bb0201, 0x22eb0001, 0x11750101, 0x22e90001, 0x045d0301, 0x22e70001, 0x11730101, 0x22e50001, 0x08b90201, 0x22e30001, 0x11710101, 0x22e10001, 0x01170501, 0x22df0001, 0x116f0101, 0x22dd0001, 0x08b70201, 0x22db0001, 0x116d0101, 0x22d90001, 0x045b0301, 0x22d70001, 0x116b0101, 0x22d50001, 0x08b50201, 0x22d30001, 0x11690101, 0x22d10001, 0x022d0401, 0x22cf0001, 0x11670101, 0x22cd0001, 0x08b30201, 0x22cb0001, 0x11650101, 0x22c90001, 0x04590301, 0x22c70001, 0x11630101, 0x22c50001, 0x08b10201, 0x22c30001, 0x11610101, 0x22c10001, 0x008b0601, 0x22bf0001, 0x115f0101, 0x22bd0001, 0x08af0201, 0x22bb0001, 0x115d0101, 0x22b90001, 0x04570301, 0x22b70001, 0x115b0101, 0x22b50001, 0x08ad0201, 0x22b30001, 0x11590101, 0x22b10001, 0x022b0401, 0x22af0001, 0x11570101, 0x22ad0001, 0x08ab0201, 0x22ab0001, 0x11550101, 0x22a90001, 0x04550301, 0x22a70001, 0x11530101, 0x22a50001, 0x08a90201, 0x22a30001, 0x11510101, 0x22a10001, 0x01150501, 0x229f0001, 0x114f0101, 0x229d0001, 0x08a70201, 0x229b0001, 0x114d0101, 0x22990001, 0x04530301, 0x22970001, 0x114b0101, 0x22950001, 0x08a50201, 0x22930001, 0x11490101, 0x22910001, 0x02290401, 0x228f0001, 0x11470101, 0x228d0001, 0x08a30201, 0x228b0001, 0x11450101, 0x22890001, 0x04510301, 0x22870001, 0x11430101, 0x22850001, 0x08a10201, 0x22830001, 0x11410101, 0x22810001, 0x00451601, 0x227f0001, 0x113f0101, 0x227d0001, 0x089f0201, 0x227b0001, 0x113d0101, 0x22790001, 0x044f0301, 0x22770001, 0x113b0101, 0x22750001, 0x089d0201, 0x22730001, 0x11390101, 0x22710001, 0x02270401, 0x226f0001, 0x11370101, 0x226d0001, 0x089b0201, 0x226b0001, 0x11350101, 0x22690001, 0x044d0301, 0x22670001, 0x11330101, 0x22650001, 0x08990201, 0x22630001, 0x11310101, 0x22610001, 0x01130501, 0x225f0001, 0x112f0101, 0x225d0001, 0x08970201, 0x225b0001, 0x112d0101, 0x22590001, 0x044b0301, 0x22570001, 0x112b0101, 0x22550001, 0x08950201, 0x22530001, 0x11290101, 0x22510001, 0x02250401, 0x224f0001, 0x11270101, 0x224d0001, 0x08930201, 0x224b0001, 0x11250101, 0x22490001, 0x04490301, 0x22470001, 0x11230101, 0x22450001, 0x08910201, 0x22430001, 0x11210101, 0x22410001, 0x00890601, 0x223f0001, 0x111f0101, 0x223d0001, 0x088f0201, 0x223b0001, 0x111d0101, 0x22390001, 0x04470301, 0x22370001, 0x111b0101, 0x22350001, 0x088d0201, 0x22330001, 0x11190101, 0x22310001, 0x02230401, 0x222f0001, 0x11170101, 0x222d0001, 0x088b0201, 0x222b0001, 0x11150101, 0x22290001, 0x04450301, 0x22270001, 0x11130101, 0x22250001, 0x08890201, 0x22230001, 0x11110101, 0x22210001, 0x01110501, 0x221f0001, 0x110f0101, 0x221d0001, 0x08870201, 0x221b0001, 0x110d0101, 0x22190001, 0x04430301, 0x22170001, 0x110b0101, 0x22150001, 0x08850201, 0x22130001, 0x11090101, 0x22110001, 0x02210401, 0x220f0001, 0x11070101, 0x220d0001, 0x08830201, 0x220b0001, 0x11050101, 0x22090001, 0x04410301, 0x22070001, 0x11030101, 0x22050001, 0x08810201, 0x22030001, 0x11010101, 0x22010001, + 0x00113601, 0x21ff0001, 0x10ff0101, 0x21fd0001, 0x087f0201, 0x21fb0001, 0x10fd0101, 0x21f90001, 0x043f0301, 0x21f70001, 0x10fb0101, 0x21f50001, 0x087d0201, 0x21f30001, 0x10f90101, 0x21f10001, 0x021f0401, 0x21ef0001, 0x10f70101, 0x21ed0001, 0x087b0201, 0x21eb0001, 0x10f50101, 0x21e90001, 0x043d0301, 0x21e70001, 0x10f30101, 0x21e50001, 0x08790201, 0x21e30001, 0x10f10101, 0x21e10001, 0x010f0501, 0x21df0001, 0x10ef0101, 0x21dd0001, 0x08770201, 0x21db0001, 0x10ed0101, 0x21d90001, 0x043b0301, 0x21d70001, 0x10eb0101, 0x21d50001, 0x08750201, 0x21d30001, 0x10e90101, 0x21d10001, 0x021d0401, 0x21cf0001, 0x10e70101, 0x21cd0001, 0x08730201, 0x21cb0001, 0x10e50101, 0x21c90001, 0x04390301, 0x21c70001, 0x10e30101, 0x21c50001, 0x08710201, 0x21c30001, 0x10e10101, 0x21c10001, 0x00870601, 0x21bf0001, 0x10df0101, 0x21bd0001, 0x086f0201, 0x21bb0001, 0x10dd0101, 0x21b90001, 0x04370301, 0x21b70001, 0x10db0101, 0x21b50001, 0x086d0201, 0x21b30001, 0x10d90101, 0x21b10001, 0x021b0401, 0x21af0001, 0x10d70101, 0x21ad0001, 0x086b0201, 0x21ab0001, 0x10d50101, 0x21a90001, 0x04350301, 0x21a70001, 0x10d30101, 0x21a50001, 0x08690201, 0x21a30001, 0x10d10101, 0x21a10001, 0x010d0501, 0x219f0001, 0x10cf0101, 0x219d0001, 0x08670201, 0x219b0001, 0x10cd0101, 0x21990001, 0x04330301, 0x21970001, 0x10cb0101, 0x21950001, 0x08650201, 0x21930001, 0x10c90101, 0x21910001, 0x02190401, 0x218f0001, 0x10c70101, 0x218d0001, 0x08630201, 0x218b0001, 0x10c50101, 0x21890001, 0x04310301, 0x21870001, 0x10c30101, 0x21850001, 0x08610201, 0x21830001, 0x10c10101, 0x21810001, 0x00431601, 0x217f0001, 0x10bf0101, 0x217d0001, 0x085f0201, 0x217b0001, 0x10bd0101, 0x21790001, 0x042f0301, 0x21770001, 0x10bb0101, 0x21750001, 0x085d0201, 0x21730001, 0x10b90101, 0x21710001, 0x02170401, 0x216f0001, 0x10b70101, 0x216d0001, 0x085b0201, 0x216b0001, 0x10b50101, 0x21690001, 0x042d0301, 0x21670001, 0x10b30101, 0x21650001, 0x08590201, 0x21630001, 0x10b10101, 0x21610001, 0x010b0501, 0x215f0001, 0x10af0101, 0x215d0001, 0x08570201, 0x215b0001, 0x10ad0101, 0x21590001, 0x042b0301, 0x21570001, 0x10ab0101, 0x21550001, 0x08550201, 0x21530001, 0x10a90101, 0x21510001, 0x02150401, 0x214f0001, 0x10a70101, 0x214d0001, 0x08530201, 0x214b0001, 0x10a50101, 0x21490001, 0x04290301, 0x21470001, 0x10a30101, 0x21450001, 0x08510201, 0x21430001, 0x10a10101, 0x21410001, 0x00850601, 0x213f0001, 0x109f0101, 0x213d0001, 0x084f0201, 0x213b0001, 0x109d0101, 0x21390001, 0x04270301, 0x21370001, 0x109b0101, 0x21350001, 0x084d0201, 0x21330001, 0x10990101, 0x21310001, 0x02130401, 0x212f0001, 0x10970101, 0x212d0001, 0x084b0201, 0x212b0001, 0x10950101, 0x21290001, 0x04250301, 0x21270001, 0x10930101, 0x21250001, 0x08490201, 0x21230001, 0x10910101, 0x21210001, 0x01090501, 0x211f0001, 0x108f0101, 0x211d0001, 0x08470201, 0x211b0001, 0x108d0101, 0x21190001, 0x04230301, 0x21170001, 0x108b0101, 0x21150001, 0x08450201, 0x21130001, 0x10890101, 0x21110001, 0x02110401, 0x210f0001, 0x10870101, 0x210d0001, 0x08430201, 0x210b0001, 0x10850101, 0x21090001, 0x04210301, 0x21070001, 0x10830101, 0x21050001, 0x08410201, 0x21030001, 0x10810101, 0x21010001, + 0x00212601, 0x20ff0001, 0x107f0101, 0x20fd0001, 0x083f0201, 0x20fb0001, 0x107d0101, 0x20f90001, 0x041f0301, 0x20f70001, 0x107b0101, 0x20f50001, 0x083d0201, 0x20f30001, 0x10790101, 0x20f10001, 0x020f0401, 0x20ef0001, 0x10770101, 0x20ed0001, 0x083b0201, 0x20eb0001, 0x10750101, 0x20e90001, 0x041d0301, 0x20e70001, 0x10730101, 0x20e50001, 0x08390201, 0x20e30001, 0x10710101, 0x20e10001, 0x01070501, 0x20df0001, 0x106f0101, 0x20dd0001, 0x08370201, 0x20db0001, 0x106d0101, 0x20d90001, 0x041b0301, 0x20d70001, 0x106b0101, 0x20d50001, 0x08350201, 0x20d30001, 0x10690101, 0x20d10001, 0x020d0401, 0x20cf0001, 0x10670101, 0x20cd0001, 0x08330201, 0x20cb0001, 0x10650101, 0x20c90001, 0x04190301, 0x20c70001, 0x10630101, 0x20c50001, 0x08310201, 0x20c30001, 0x10610101, 0x20c10001, 0x00830601, 0x20bf0001, 0x105f0101, 0x20bd0001, 0x082f0201, 0x20bb0001, 0x105d0101, 0x20b90001, 0x04170301, 0x20b70001, 0x105b0101, 0x20b50001, 0x082d0201, 0x20b30001, 0x10590101, 0x20b10001, 0x020b0401, 0x20af0001, 0x10570101, 0x20ad0001, 0x082b0201, 0x20ab0001, 0x10550101, 0x20a90001, 0x04150301, 0x20a70001, 0x10530101, 0x20a50001, 0x08290201, 0x20a30001, 0x10510101, 0x20a10001, 0x01050501, 0x209f0001, 0x104f0101, 0x209d0001, 0x08270201, 0x209b0001, 0x104d0101, 0x20990001, 0x04130301, 0x20970001, 0x104b0101, 0x20950001, 0x08250201, 0x20930001, 0x10490101, 0x20910001, 0x02090401, 0x208f0001, 0x10470101, 0x208d0001, 0x08230201, 0x208b0001, 0x10450101, 0x20890001, 0x04110301, 0x20870001, 0x10430101, 0x20850001, 0x08210201, 0x20830001, 0x10410101, 0x20810001, 0x00411601, 0x207f0001, 0x103f0101, 0x207d0001, 0x081f0201, 0x207b0001, 0x103d0101, 0x20790001, 0x040f0301, 0x20770001, 0x103b0101, 0x20750001, 0x081d0201, 0x20730001, 0x10390101, 0x20710001, 0x02070401, 0x206f0001, 0x10370101, 0x206d0001, 0x081b0201, 0x206b0001, 0x10350101, 0x20690001, 0x040d0301, 0x20670001, 0x10330101, 0x20650001, 0x08190201, 0x20630001, 0x10310101, 0x20610001, 0x01030501, 0x205f0001, 0x102f0101, 0x205d0001, 0x08170201, 0x205b0001, 0x102d0101, 0x20590001, 0x040b0301, 0x20570001, 0x102b0101, 0x20550001, 0x08150201, 0x20530001, 0x10290101, 0x20510001, 0x02050401, 0x204f0001, 0x10270101, 0x204d0001, 0x08130201, 0x204b0001, 0x10250101, 0x20490001, 0x04090301, 0x20470001, 0x10230101, 0x20450001, 0x08110201, 0x20430001, 0x10210101, 0x20410001, 0x00810601, 0x203f0001, 0x101f0101, 0x203d0001, 0x080f0201, 0x203b0001, 0x101d0101, 0x20390001, 0x04070301, 0x20370001, 0x101b0101, 0x20350001, 0x080d0201, 0x20330001, 0x10190101, 0x20310001, 0x02030401, 0x202f0001, 0x10170101, 0x202d0001, 0x080b0201, 0x202b0001, 0x10150101, 0x20290001, 0x04050301, 0x20270001, 0x10130101, 0x20250001, 0x08090201, 0x20230001, 0x10110101, 0x20210001, 0x01010501, 0x201f0001, 0x100f0101, 0x201d0001, 0x08070201, 0x201b0001, 0x100d0101, 0x20190001, 0x04030301, 0x20170001, 0x100b0101, 0x20150001, 0x08050201, 0x20130001, 0x10090101, 0x20110001, 0x02010401, 0x200f0001, 0x10070101, 0x200d0001, 0x08030201, 0x200b0001, 0x10050101, 0x20090001, 0x04010301, 0x20070001, 0x10030101, 0x20050001, 0x08010201, 0x20030001, 0x10010101, 0x20010001, + 0x00017601, 0x1fff0001, 0x0fff0101, 0x1ffd0001, 0x07ff0201, 0x1ffb0001, 0x0ffd0101, 0x1ff90001, 0x03ff0301, 0x1ff70001, 0x0ffb0101, 0x1ff50001, 0x07fd0201, 0x1ff30001, 0x0ff90101, 0x1ff10001, 0x01ff0401, 0x1fef0001, 0x0ff70101, 0x1fed0001, 0x07fb0201, 0x1feb0001, 0x0ff50101, 0x1fe90001, 0x03fd0301, 0x1fe70001, 0x0ff30101, 0x1fe50001, 0x07f90201, 0x1fe30001, 0x0ff10101, 0x1fe10001, 0x00ff0501, 0x1fdf0001, 0x0fef0101, 0x1fdd0001, 0x07f70201, 0x1fdb0001, 0x0fed0101, 0x1fd90001, 0x03fb0301, 0x1fd70001, 0x0feb0101, 0x1fd50001, 0x07f50201, 0x1fd30001, 0x0fe90101, 0x1fd10001, 0x01fd0401, 0x1fcf0001, 0x0fe70101, 0x1fcd0001, 0x07f30201, 0x1fcb0001, 0x0fe50101, 0x1fc90001, 0x03f90301, 0x1fc70001, 0x0fe30101, 0x1fc50001, 0x07f10201, 0x1fc30001, 0x0fe10101, 0x1fc10001, 0x007f0601, 0x1fbf0001, 0x0fdf0101, 0x1fbd0001, 0x07ef0201, 0x1fbb0001, 0x0fdd0101, 0x1fb90001, 0x03f70301, 0x1fb70001, 0x0fdb0101, 0x1fb50001, 0x07ed0201, 0x1fb30001, 0x0fd90101, 0x1fb10001, 0x01fb0401, 0x1faf0001, 0x0fd70101, 0x1fad0001, 0x07eb0201, 0x1fab0001, 0x0fd50101, 0x1fa90001, 0x03f50301, 0x1fa70001, 0x0fd30101, 0x1fa50001, 0x07e90201, 0x1fa30001, 0x0fd10101, 0x1fa10001, 0x00fd0501, 0x1f9f0001, 0x0fcf0101, 0x1f9d0001, 0x07e70201, 0x1f9b0001, 0x0fcd0101, 0x1f990001, 0x03f30301, 0x1f970001, 0x0fcb0101, 0x1f950001, 0x07e50201, 0x1f930001, 0x0fc90101, 0x1f910001, 0x01f90401, 0x1f8f0001, 0x0fc70101, 0x1f8d0001, 0x07e30201, 0x1f8b0001, 0x0fc50101, 0x1f890001, 0x03f10301, 0x1f870001, 0x0fc30101, 0x1f850001, 0x07e10201, 0x1f830001, 0x0fc10101, 0x1f810001, 0x003f1601, 0x1f7f0001, 0x0fbf0101, 0x1f7d0001, 0x07df0201, 0x1f7b0001, 0x0fbd0101, 0x1f790001, 0x03ef0301, 0x1f770001, 0x0fbb0101, 0x1f750001, 0x07dd0201, 0x1f730001, 0x0fb90101, 0x1f710001, 0x01f70401, 0x1f6f0001, 0x0fb70101, 0x1f6d0001, 0x07db0201, 0x1f6b0001, 0x0fb50101, 0x1f690001, 0x03ed0301, 0x1f670001, 0x0fb30101, 0x1f650001, 0x07d90201, 0x1f630001, 0x0fb10101, 0x1f610001, 0x00fb0501, 0x1f5f0001, 0x0faf0101, 0x1f5d0001, 0x07d70201, 0x1f5b0001, 0x0fad0101, 0x1f590001, 0x03eb0301, 0x1f570001, 0x0fab0101, 0x1f550001, 0x07d50201, 0x1f530001, 0x0fa90101, 0x1f510001, 0x01f50401, 0x1f4f0001, 0x0fa70101, 0x1f4d0001, 0x07d30201, 0x1f4b0001, 0x0fa50101, 0x1f490001, 0x03e90301, 0x1f470001, 0x0fa30101, 0x1f450001, 0x07d10201, 0x1f430001, 0x0fa10101, 0x1f410001, 0x007d0601, 0x1f3f0001, 0x0f9f0101, 0x1f3d0001, 0x07cf0201, 0x1f3b0001, 0x0f9d0101, 0x1f390001, 0x03e70301, 0x1f370001, 0x0f9b0101, 0x1f350001, 0x07cd0201, 0x1f330001, 0x0f990101, 0x1f310001, 0x01f30401, 0x1f2f0001, 0x0f970101, 0x1f2d0001, 0x07cb0201, 0x1f2b0001, 0x0f950101, 0x1f290001, 0x03e50301, 0x1f270001, 0x0f930101, 0x1f250001, 0x07c90201, 0x1f230001, 0x0f910101, 0x1f210001, 0x00f90501, 0x1f1f0001, 0x0f8f0101, 0x1f1d0001, 0x07c70201, 0x1f1b0001, 0x0f8d0101, 0x1f190001, 0x03e30301, 0x1f170001, 0x0f8b0101, 0x1f150001, 0x07c50201, 0x1f130001, 0x0f890101, 0x1f110001, 0x01f10401, 0x1f0f0001, 0x0f870101, 0x1f0d0001, 0x07c30201, 0x1f0b0001, 0x0f850101, 0x1f090001, 0x03e10301, 0x1f070001, 0x0f830101, 0x1f050001, 0x07c10201, 0x1f030001, 0x0f810101, 0x1f010001, + 0x001f2601, 0x1eff0001, 0x0f7f0101, 0x1efd0001, 0x07bf0201, 0x1efb0001, 0x0f7d0101, 0x1ef90001, 0x03df0301, 0x1ef70001, 0x0f7b0101, 0x1ef50001, 0x07bd0201, 0x1ef30001, 0x0f790101, 0x1ef10001, 0x01ef0401, 0x1eef0001, 0x0f770101, 0x1eed0001, 0x07bb0201, 0x1eeb0001, 0x0f750101, 0x1ee90001, 0x03dd0301, 0x1ee70001, 0x0f730101, 0x1ee50001, 0x07b90201, 0x1ee30001, 0x0f710101, 0x1ee10001, 0x00f70501, 0x1edf0001, 0x0f6f0101, 0x1edd0001, 0x07b70201, 0x1edb0001, 0x0f6d0101, 0x1ed90001, 0x03db0301, 0x1ed70001, 0x0f6b0101, 0x1ed50001, 0x07b50201, 0x1ed30001, 0x0f690101, 0x1ed10001, 0x01ed0401, 0x1ecf0001, 0x0f670101, 0x1ecd0001, 0x07b30201, 0x1ecb0001, 0x0f650101, 0x1ec90001, 0x03d90301, 0x1ec70001, 0x0f630101, 0x1ec50001, 0x07b10201, 0x1ec30001, 0x0f610101, 0x1ec10001, 0x007b0601, 0x1ebf0001, 0x0f5f0101, 0x1ebd0001, 0x07af0201, 0x1ebb0001, 0x0f5d0101, 0x1eb90001, 0x03d70301, 0x1eb70001, 0x0f5b0101, 0x1eb50001, 0x07ad0201, 0x1eb30001, 0x0f590101, 0x1eb10001, 0x01eb0401, 0x1eaf0001, 0x0f570101, 0x1ead0001, 0x07ab0201, 0x1eab0001, 0x0f550101, 0x1ea90001, 0x03d50301, 0x1ea70001, 0x0f530101, 0x1ea50001, 0x07a90201, 0x1ea30001, 0x0f510101, 0x1ea10001, 0x00f50501, 0x1e9f0001, 0x0f4f0101, 0x1e9d0001, 0x07a70201, 0x1e9b0001, 0x0f4d0101, 0x1e990001, 0x03d30301, 0x1e970001, 0x0f4b0101, 0x1e950001, 0x07a50201, 0x1e930001, 0x0f490101, 0x1e910001, 0x01e90401, 0x1e8f0001, 0x0f470101, 0x1e8d0001, 0x07a30201, 0x1e8b0001, 0x0f450101, 0x1e890001, 0x03d10301, 0x1e870001, 0x0f430101, 0x1e850001, 0x07a10201, 0x1e830001, 0x0f410101, 0x1e810001, 0x003d1601, 0x1e7f0001, 0x0f3f0101, 0x1e7d0001, 0x079f0201, 0x1e7b0001, 0x0f3d0101, 0x1e790001, 0x03cf0301, 0x1e770001, 0x0f3b0101, 0x1e750001, 0x079d0201, 0x1e730001, 0x0f390101, 0x1e710001, 0x01e70401, 0x1e6f0001, 0x0f370101, 0x1e6d0001, 0x079b0201, 0x1e6b0001, 0x0f350101, 0x1e690001, 0x03cd0301, 0x1e670001, 0x0f330101, 0x1e650001, 0x07990201, 0x1e630001, 0x0f310101, 0x1e610001, 0x00f30501, 0x1e5f0001, 0x0f2f0101, 0x1e5d0001, 0x07970201, 0x1e5b0001, 0x0f2d0101, 0x1e590001, 0x03cb0301, 0x1e570001, 0x0f2b0101, 0x1e550001, 0x07950201, 0x1e530001, 0x0f290101, 0x1e510001, 0x01e50401, 0x1e4f0001, 0x0f270101, 0x1e4d0001, 0x07930201, 0x1e4b0001, 0x0f250101, 0x1e490001, 0x03c90301, 0x1e470001, 0x0f230101, 0x1e450001, 0x07910201, 0x1e430001, 0x0f210101, 0x1e410001, 0x00790601, 0x1e3f0001, 0x0f1f0101, 0x1e3d0001, 0x078f0201, 0x1e3b0001, 0x0f1d0101, 0x1e390001, 0x03c70301, 0x1e370001, 0x0f1b0101, 0x1e350001, 0x078d0201, 0x1e330001, 0x0f190101, 0x1e310001, 0x01e30401, 0x1e2f0001, 0x0f170101, 0x1e2d0001, 0x078b0201, 0x1e2b0001, 0x0f150101, 0x1e290001, 0x03c50301, 0x1e270001, 0x0f130101, 0x1e250001, 0x07890201, 0x1e230001, 0x0f110101, 0x1e210001, 0x00f10501, 0x1e1f0001, 0x0f0f0101, 0x1e1d0001, 0x07870201, 0x1e1b0001, 0x0f0d0101, 0x1e190001, 0x03c30301, 0x1e170001, 0x0f0b0101, 0x1e150001, 0x07850201, 0x1e130001, 0x0f090101, 0x1e110001, 0x01e10401, 0x1e0f0001, 0x0f070101, 0x1e0d0001, 0x07830201, 0x1e0b0001, 0x0f050101, 0x1e090001, 0x03c10301, 0x1e070001, 0x0f030101, 0x1e050001, 0x07810201, 0x1e030001, 0x0f010101, 0x1e010001, + 0x000f3601, 0x1dff0001, 0x0eff0101, 0x1dfd0001, 0x077f0201, 0x1dfb0001, 0x0efd0101, 0x1df90001, 0x03bf0301, 0x1df70001, 0x0efb0101, 0x1df50001, 0x077d0201, 0x1df30001, 0x0ef90101, 0x1df10001, 0x01df0401, 0x1def0001, 0x0ef70101, 0x1ded0001, 0x077b0201, 0x1deb0001, 0x0ef50101, 0x1de90001, 0x03bd0301, 0x1de70001, 0x0ef30101, 0x1de50001, 0x07790201, 0x1de30001, 0x0ef10101, 0x1de10001, 0x00ef0501, 0x1ddf0001, 0x0eef0101, 0x1ddd0001, 0x07770201, 0x1ddb0001, 0x0eed0101, 0x1dd90001, 0x03bb0301, 0x1dd70001, 0x0eeb0101, 0x1dd50001, 0x07750201, 0x1dd30001, 0x0ee90101, 0x1dd10001, 0x01dd0401, 0x1dcf0001, 0x0ee70101, 0x1dcd0001, 0x07730201, 0x1dcb0001, 0x0ee50101, 0x1dc90001, 0x03b90301, 0x1dc70001, 0x0ee30101, 0x1dc50001, 0x07710201, 0x1dc30001, 0x0ee10101, 0x1dc10001, 0x00770601, 0x1dbf0001, 0x0edf0101, 0x1dbd0001, 0x076f0201, 0x1dbb0001, 0x0edd0101, 0x1db90001, 0x03b70301, 0x1db70001, 0x0edb0101, 0x1db50001, 0x076d0201, 0x1db30001, 0x0ed90101, 0x1db10001, 0x01db0401, 0x1daf0001, 0x0ed70101, 0x1dad0001, 0x076b0201, 0x1dab0001, 0x0ed50101, 0x1da90001, 0x03b50301, 0x1da70001, 0x0ed30101, 0x1da50001, 0x07690201, 0x1da30001, 0x0ed10101, 0x1da10001, 0x00ed0501, 0x1d9f0001, 0x0ecf0101, 0x1d9d0001, 0x07670201, 0x1d9b0001, 0x0ecd0101, 0x1d990001, 0x03b30301, 0x1d970001, 0x0ecb0101, 0x1d950001, 0x07650201, 0x1d930001, 0x0ec90101, 0x1d910001, 0x01d90401, 0x1d8f0001, 0x0ec70101, 0x1d8d0001, 0x07630201, 0x1d8b0001, 0x0ec50101, 0x1d890001, 0x03b10301, 0x1d870001, 0x0ec30101, 0x1d850001, 0x07610201, 0x1d830001, 0x0ec10101, 0x1d810001, 0x003b1601, 0x1d7f0001, 0x0ebf0101, 0x1d7d0001, 0x075f0201, 0x1d7b0001, 0x0ebd0101, 0x1d790001, 0x03af0301, 0x1d770001, 0x0ebb0101, 0x1d750001, 0x075d0201, 0x1d730001, 0x0eb90101, 0x1d710001, 0x01d70401, 0x1d6f0001, 0x0eb70101, 0x1d6d0001, 0x075b0201, 0x1d6b0001, 0x0eb50101, 0x1d690001, 0x03ad0301, 0x1d670001, 0x0eb30101, 0x1d650001, 0x07590201, 0x1d630001, 0x0eb10101, 0x1d610001, 0x00eb0501, 0x1d5f0001, 0x0eaf0101, 0x1d5d0001, 0x07570201, 0x1d5b0001, 0x0ead0101, 0x1d590001, 0x03ab0301, 0x1d570001, 0x0eab0101, 0x1d550001, 0x07550201, 0x1d530001, 0x0ea90101, 0x1d510001, 0x01d50401, 0x1d4f0001, 0x0ea70101, 0x1d4d0001, 0x07530201, 0x1d4b0001, 0x0ea50101, 0x1d490001, 0x03a90301, 0x1d470001, 0x0ea30101, 0x1d450001, 0x07510201, 0x1d430001, 0x0ea10101, 0x1d410001, 0x00750601, 0x1d3f0001, 0x0e9f0101, 0x1d3d0001, 0x074f0201, 0x1d3b0001, 0x0e9d0101, 0x1d390001, 0x03a70301, 0x1d370001, 0x0e9b0101, 0x1d350001, 0x074d0201, 0x1d330001, 0x0e990101, 0x1d310001, 0x01d30401, 0x1d2f0001, 0x0e970101, 0x1d2d0001, 0x074b0201, 0x1d2b0001, 0x0e950101, 0x1d290001, 0x03a50301, 0x1d270001, 0x0e930101, 0x1d250001, 0x07490201, 0x1d230001, 0x0e910101, 0x1d210001, 0x00e90501, 0x1d1f0001, 0x0e8f0101, 0x1d1d0001, 0x07470201, 0x1d1b0001, 0x0e8d0101, 0x1d190001, 0x03a30301, 0x1d170001, 0x0e8b0101, 0x1d150001, 0x07450201, 0x1d130001, 0x0e890101, 0x1d110001, 0x01d10401, 0x1d0f0001, 0x0e870101, 0x1d0d0001, 0x07430201, 0x1d0b0001, 0x0e850101, 0x1d090001, 0x03a10301, 0x1d070001, 0x0e830101, 0x1d050001, 0x07410201, 0x1d030001, 0x0e810101, 0x1d010001, + 0x001d2601, 0x1cff0001, 0x0e7f0101, 0x1cfd0001, 0x073f0201, 0x1cfb0001, 0x0e7d0101, 0x1cf90001, 0x039f0301, 0x1cf70001, 0x0e7b0101, 0x1cf50001, 0x073d0201, 0x1cf30001, 0x0e790101, 0x1cf10001, 0x01cf0401, 0x1cef0001, 0x0e770101, 0x1ced0001, 0x073b0201, 0x1ceb0001, 0x0e750101, 0x1ce90001, 0x039d0301, 0x1ce70001, 0x0e730101, 0x1ce50001, 0x07390201, 0x1ce30001, 0x0e710101, 0x1ce10001, 0x00e70501, 0x1cdf0001, 0x0e6f0101, 0x1cdd0001, 0x07370201, 0x1cdb0001, 0x0e6d0101, 0x1cd90001, 0x039b0301, 0x1cd70001, 0x0e6b0101, 0x1cd50001, 0x07350201, 0x1cd30001, 0x0e690101, 0x1cd10001, 0x01cd0401, 0x1ccf0001, 0x0e670101, 0x1ccd0001, 0x07330201, 0x1ccb0001, 0x0e650101, 0x1cc90001, 0x03990301, 0x1cc70001, 0x0e630101, 0x1cc50001, 0x07310201, 0x1cc30001, 0x0e610101, 0x1cc10001, 0x00730601, 0x1cbf0001, 0x0e5f0101, 0x1cbd0001, 0x072f0201, 0x1cbb0001, 0x0e5d0101, 0x1cb90001, 0x03970301, 0x1cb70001, 0x0e5b0101, 0x1cb50001, 0x072d0201, 0x1cb30001, 0x0e590101, 0x1cb10001, 0x01cb0401, 0x1caf0001, 0x0e570101, 0x1cad0001, 0x072b0201, 0x1cab0001, 0x0e550101, 0x1ca90001, 0x03950301, 0x1ca70001, 0x0e530101, 0x1ca50001, 0x07290201, 0x1ca30001, 0x0e510101, 0x1ca10001, 0x00e50501, 0x1c9f0001, 0x0e4f0101, 0x1c9d0001, 0x07270201, 0x1c9b0001, 0x0e4d0101, 0x1c990001, 0x03930301, 0x1c970001, 0x0e4b0101, 0x1c950001, 0x07250201, 0x1c930001, 0x0e490101, 0x1c910001, 0x01c90401, 0x1c8f0001, 0x0e470101, 0x1c8d0001, 0x07230201, 0x1c8b0001, 0x0e450101, 0x1c890001, 0x03910301, 0x1c870001, 0x0e430101, 0x1c850001, 0x07210201, 0x1c830001, 0x0e410101, 0x1c810001, 0x00391601, 0x1c7f0001, 0x0e3f0101, 0x1c7d0001, 0x071f0201, 0x1c7b0001, 0x0e3d0101, 0x1c790001, 0x038f0301, 0x1c770001, 0x0e3b0101, 0x1c750001, 0x071d0201, 0x1c730001, 0x0e390101, 0x1c710001, 0x01c70401, 0x1c6f0001, 0x0e370101, 0x1c6d0001, 0x071b0201, 0x1c6b0001, 0x0e350101, 0x1c690001, 0x038d0301, 0x1c670001, 0x0e330101, 0x1c650001, 0x07190201, 0x1c630001, 0x0e310101, 0x1c610001, 0x00e30501, 0x1c5f0001, 0x0e2f0101, 0x1c5d0001, 0x07170201, 0x1c5b0001, 0x0e2d0101, 0x1c590001, 0x038b0301, 0x1c570001, 0x0e2b0101, 0x1c550001, 0x07150201, 0x1c530001, 0x0e290101, 0x1c510001, 0x01c50401, 0x1c4f0001, 0x0e270101, 0x1c4d0001, 0x07130201, 0x1c4b0001, 0x0e250101, 0x1c490001, 0x03890301, 0x1c470001, 0x0e230101, 0x1c450001, 0x07110201, 0x1c430001, 0x0e210101, 0x1c410001, 0x00710601, 0x1c3f0001, 0x0e1f0101, 0x1c3d0001, 0x070f0201, 0x1c3b0001, 0x0e1d0101, 0x1c390001, 0x03870301, 0x1c370001, 0x0e1b0101, 0x1c350001, 0x070d0201, 0x1c330001, 0x0e190101, 0x1c310001, 0x01c30401, 0x1c2f0001, 0x0e170101, 0x1c2d0001, 0x070b0201, 0x1c2b0001, 0x0e150101, 0x1c290001, 0x03850301, 0x1c270001, 0x0e130101, 0x1c250001, 0x07090201, 0x1c230001, 0x0e110101, 0x1c210001, 0x00e10501, 0x1c1f0001, 0x0e0f0101, 0x1c1d0001, 0x07070201, 0x1c1b0001, 0x0e0d0101, 0x1c190001, 0x03830301, 0x1c170001, 0x0e0b0101, 0x1c150001, 0x07050201, 0x1c130001, 0x0e090101, 0x1c110001, 0x01c10401, 0x1c0f0001, 0x0e070101, 0x1c0d0001, 0x07030201, 0x1c0b0001, 0x0e050101, 0x1c090001, 0x03810301, 0x1c070001, 0x0e030101, 0x1c050001, 0x07010201, 0x1c030001, 0x0e010101, 0x1c010001, + 0x00074601, 0x1bff0001, 0x0dff0101, 0x1bfd0001, 0x06ff0201, 0x1bfb0001, 0x0dfd0101, 0x1bf90001, 0x037f0301, 0x1bf70001, 0x0dfb0101, 0x1bf50001, 0x06fd0201, 0x1bf30001, 0x0df90101, 0x1bf10001, 0x01bf0401, 0x1bef0001, 0x0df70101, 0x1bed0001, 0x06fb0201, 0x1beb0001, 0x0df50101, 0x1be90001, 0x037d0301, 0x1be70001, 0x0df30101, 0x1be50001, 0x06f90201, 0x1be30001, 0x0df10101, 0x1be10001, 0x00df0501, 0x1bdf0001, 0x0def0101, 0x1bdd0001, 0x06f70201, 0x1bdb0001, 0x0ded0101, 0x1bd90001, 0x037b0301, 0x1bd70001, 0x0deb0101, 0x1bd50001, 0x06f50201, 0x1bd30001, 0x0de90101, 0x1bd10001, 0x01bd0401, 0x1bcf0001, 0x0de70101, 0x1bcd0001, 0x06f30201, 0x1bcb0001, 0x0de50101, 0x1bc90001, 0x03790301, 0x1bc70001, 0x0de30101, 0x1bc50001, 0x06f10201, 0x1bc30001, 0x0de10101, 0x1bc10001, 0x006f0601, 0x1bbf0001, 0x0ddf0101, 0x1bbd0001, 0x06ef0201, 0x1bbb0001, 0x0ddd0101, 0x1bb90001, 0x03770301, 0x1bb70001, 0x0ddb0101, 0x1bb50001, 0x06ed0201, 0x1bb30001, 0x0dd90101, 0x1bb10001, 0x01bb0401, 0x1baf0001, 0x0dd70101, 0x1bad0001, 0x06eb0201, 0x1bab0001, 0x0dd50101, 0x1ba90001, 0x03750301, 0x1ba70001, 0x0dd30101, 0x1ba50001, 0x06e90201, 0x1ba30001, 0x0dd10101, 0x1ba10001, 0x00dd0501, 0x1b9f0001, 0x0dcf0101, 0x1b9d0001, 0x06e70201, 0x1b9b0001, 0x0dcd0101, 0x1b990001, 0x03730301, 0x1b970001, 0x0dcb0101, 0x1b950001, 0x06e50201, 0x1b930001, 0x0dc90101, 0x1b910001, 0x01b90401, 0x1b8f0001, 0x0dc70101, 0x1b8d0001, 0x06e30201, 0x1b8b0001, 0x0dc50101, 0x1b890001, 0x03710301, 0x1b870001, 0x0dc30101, 0x1b850001, 0x06e10201, 0x1b830001, 0x0dc10101, 0x1b810001, 0x00371601, 0x1b7f0001, 0x0dbf0101, 0x1b7d0001, 0x06df0201, 0x1b7b0001, 0x0dbd0101, 0x1b790001, 0x036f0301, 0x1b770001, 0x0dbb0101, 0x1b750001, 0x06dd0201, 0x1b730001, 0x0db90101, 0x1b710001, 0x01b70401, 0x1b6f0001, 0x0db70101, 0x1b6d0001, 0x06db0201, 0x1b6b0001, 0x0db50101, 0x1b690001, 0x036d0301, 0x1b670001, 0x0db30101, 0x1b650001, 0x06d90201, 0x1b630001, 0x0db10101, 0x1b610001, 0x00db0501, 0x1b5f0001, 0x0daf0101, 0x1b5d0001, 0x06d70201, 0x1b5b0001, 0x0dad0101, 0x1b590001, 0x036b0301, 0x1b570001, 0x0dab0101, 0x1b550001, 0x06d50201, 0x1b530001, 0x0da90101, 0x1b510001, 0x01b50401, 0x1b4f0001, 0x0da70101, 0x1b4d0001, 0x06d30201, 0x1b4b0001, 0x0da50101, 0x1b490001, 0x03690301, 0x1b470001, 0x0da30101, 0x1b450001, 0x06d10201, 0x1b430001, 0x0da10101, 0x1b410001, 0x006d0601, 0x1b3f0001, 0x0d9f0101, 0x1b3d0001, 0x06cf0201, 0x1b3b0001, 0x0d9d0101, 0x1b390001, 0x03670301, 0x1b370001, 0x0d9b0101, 0x1b350001, 0x06cd0201, 0x1b330001, 0x0d990101, 0x1b310001, 0x01b30401, 0x1b2f0001, 0x0d970101, 0x1b2d0001, 0x06cb0201, 0x1b2b0001, 0x0d950101, 0x1b290001, 0x03650301, 0x1b270001, 0x0d930101, 0x1b250001, 0x06c90201, 0x1b230001, 0x0d910101, 0x1b210001, 0x00d90501, 0x1b1f0001, 0x0d8f0101, 0x1b1d0001, 0x06c70201, 0x1b1b0001, 0x0d8d0101, 0x1b190001, 0x03630301, 0x1b170001, 0x0d8b0101, 0x1b150001, 0x06c50201, 0x1b130001, 0x0d890101, 0x1b110001, 0x01b10401, 0x1b0f0001, 0x0d870101, 0x1b0d0001, 0x06c30201, 0x1b0b0001, 0x0d850101, 0x1b090001, 0x03610301, 0x1b070001, 0x0d830101, 0x1b050001, 0x06c10201, 0x1b030001, 0x0d810101, 0x1b010001, + 0x001b2601, 0x1aff0001, 0x0d7f0101, 0x1afd0001, 0x06bf0201, 0x1afb0001, 0x0d7d0101, 0x1af90001, 0x035f0301, 0x1af70001, 0x0d7b0101, 0x1af50001, 0x06bd0201, 0x1af30001, 0x0d790101, 0x1af10001, 0x01af0401, 0x1aef0001, 0x0d770101, 0x1aed0001, 0x06bb0201, 0x1aeb0001, 0x0d750101, 0x1ae90001, 0x035d0301, 0x1ae70001, 0x0d730101, 0x1ae50001, 0x06b90201, 0x1ae30001, 0x0d710101, 0x1ae10001, 0x00d70501, 0x1adf0001, 0x0d6f0101, 0x1add0001, 0x06b70201, 0x1adb0001, 0x0d6d0101, 0x1ad90001, 0x035b0301, 0x1ad70001, 0x0d6b0101, 0x1ad50001, 0x06b50201, 0x1ad30001, 0x0d690101, 0x1ad10001, 0x01ad0401, 0x1acf0001, 0x0d670101, 0x1acd0001, 0x06b30201, 0x1acb0001, 0x0d650101, 0x1ac90001, 0x03590301, 0x1ac70001, 0x0d630101, 0x1ac50001, 0x06b10201, 0x1ac30001, 0x0d610101, 0x1ac10001, 0x006b0601, 0x1abf0001, 0x0d5f0101, 0x1abd0001, 0x06af0201, 0x1abb0001, 0x0d5d0101, 0x1ab90001, 0x03570301, 0x1ab70001, 0x0d5b0101, 0x1ab50001, 0x06ad0201, 0x1ab30001, 0x0d590101, 0x1ab10001, 0x01ab0401, 0x1aaf0001, 0x0d570101, 0x1aad0001, 0x06ab0201, 0x1aab0001, 0x0d550101, 0x1aa90001, 0x03550301, 0x1aa70001, 0x0d530101, 0x1aa50001, 0x06a90201, 0x1aa30001, 0x0d510101, 0x1aa10001, 0x00d50501, 0x1a9f0001, 0x0d4f0101, 0x1a9d0001, 0x06a70201, 0x1a9b0001, 0x0d4d0101, 0x1a990001, 0x03530301, 0x1a970001, 0x0d4b0101, 0x1a950001, 0x06a50201, 0x1a930001, 0x0d490101, 0x1a910001, 0x01a90401, 0x1a8f0001, 0x0d470101, 0x1a8d0001, 0x06a30201, 0x1a8b0001, 0x0d450101, 0x1a890001, 0x03510301, 0x1a870001, 0x0d430101, 0x1a850001, 0x06a10201, 0x1a830001, 0x0d410101, 0x1a810001, 0x00351601, 0x1a7f0001, 0x0d3f0101, 0x1a7d0001, 0x069f0201, 0x1a7b0001, 0x0d3d0101, 0x1a790001, 0x034f0301, 0x1a770001, 0x0d3b0101, 0x1a750001, 0x069d0201, 0x1a730001, 0x0d390101, 0x1a710001, 0x01a70401, 0x1a6f0001, 0x0d370101, 0x1a6d0001, 0x069b0201, 0x1a6b0001, 0x0d350101, 0x1a690001, 0x034d0301, 0x1a670001, 0x0d330101, 0x1a650001, 0x06990201, 0x1a630001, 0x0d310101, 0x1a610001, 0x00d30501, 0x1a5f0001, 0x0d2f0101, 0x1a5d0001, 0x06970201, 0x1a5b0001, 0x0d2d0101, 0x1a590001, 0x034b0301, 0x1a570001, 0x0d2b0101, 0x1a550001, 0x06950201, 0x1a530001, 0x0d290101, 0x1a510001, 0x01a50401, 0x1a4f0001, 0x0d270101, 0x1a4d0001, 0x06930201, 0x1a4b0001, 0x0d250101, 0x1a490001, 0x03490301, 0x1a470001, 0x0d230101, 0x1a450001, 0x06910201, 0x1a430001, 0x0d210101, 0x1a410001, 0x00690601, 0x1a3f0001, 0x0d1f0101, 0x1a3d0001, 0x068f0201, 0x1a3b0001, 0x0d1d0101, 0x1a390001, 0x03470301, 0x1a370001, 0x0d1b0101, 0x1a350001, 0x068d0201, 0x1a330001, 0x0d190101, 0x1a310001, 0x01a30401, 0x1a2f0001, 0x0d170101, 0x1a2d0001, 0x068b0201, 0x1a2b0001, 0x0d150101, 0x1a290001, 0x03450301, 0x1a270001, 0x0d130101, 0x1a250001, 0x06890201, 0x1a230001, 0x0d110101, 0x1a210001, 0x00d10501, 0x1a1f0001, 0x0d0f0101, 0x1a1d0001, 0x06870201, 0x1a1b0001, 0x0d0d0101, 0x1a190001, 0x03430301, 0x1a170001, 0x0d0b0101, 0x1a150001, 0x06850201, 0x1a130001, 0x0d090101, 0x1a110001, 0x01a10401, 0x1a0f0001, 0x0d070101, 0x1a0d0001, 0x06830201, 0x1a0b0001, 0x0d050101, 0x1a090001, 0x03410301, 0x1a070001, 0x0d030101, 0x1a050001, 0x06810201, 0x1a030001, 0x0d010101, 0x1a010001, + 0x000d3601, 0x19ff0001, 0x0cff0101, 0x19fd0001, 0x067f0201, 0x19fb0001, 0x0cfd0101, 0x19f90001, 0x033f0301, 0x19f70001, 0x0cfb0101, 0x19f50001, 0x067d0201, 0x19f30001, 0x0cf90101, 0x19f10001, 0x019f0401, 0x19ef0001, 0x0cf70101, 0x19ed0001, 0x067b0201, 0x19eb0001, 0x0cf50101, 0x19e90001, 0x033d0301, 0x19e70001, 0x0cf30101, 0x19e50001, 0x06790201, 0x19e30001, 0x0cf10101, 0x19e10001, 0x00cf0501, 0x19df0001, 0x0cef0101, 0x19dd0001, 0x06770201, 0x19db0001, 0x0ced0101, 0x19d90001, 0x033b0301, 0x19d70001, 0x0ceb0101, 0x19d50001, 0x06750201, 0x19d30001, 0x0ce90101, 0x19d10001, 0x019d0401, 0x19cf0001, 0x0ce70101, 0x19cd0001, 0x06730201, 0x19cb0001, 0x0ce50101, 0x19c90001, 0x03390301, 0x19c70001, 0x0ce30101, 0x19c50001, 0x06710201, 0x19c30001, 0x0ce10101, 0x19c10001, 0x00670601, 0x19bf0001, 0x0cdf0101, 0x19bd0001, 0x066f0201, 0x19bb0001, 0x0cdd0101, 0x19b90001, 0x03370301, 0x19b70001, 0x0cdb0101, 0x19b50001, 0x066d0201, 0x19b30001, 0x0cd90101, 0x19b10001, 0x019b0401, 0x19af0001, 0x0cd70101, 0x19ad0001, 0x066b0201, 0x19ab0001, 0x0cd50101, 0x19a90001, 0x03350301, 0x19a70001, 0x0cd30101, 0x19a50001, 0x06690201, 0x19a30001, 0x0cd10101, 0x19a10001, 0x00cd0501, 0x199f0001, 0x0ccf0101, 0x199d0001, 0x06670201, 0x199b0001, 0x0ccd0101, 0x19990001, 0x03330301, 0x19970001, 0x0ccb0101, 0x19950001, 0x06650201, 0x19930001, 0x0cc90101, 0x19910001, 0x01990401, 0x198f0001, 0x0cc70101, 0x198d0001, 0x06630201, 0x198b0001, 0x0cc50101, 0x19890001, 0x03310301, 0x19870001, 0x0cc30101, 0x19850001, 0x06610201, 0x19830001, 0x0cc10101, 0x19810001, 0x00331601, 0x197f0001, 0x0cbf0101, 0x197d0001, 0x065f0201, 0x197b0001, 0x0cbd0101, 0x19790001, 0x032f0301, 0x19770001, 0x0cbb0101, 0x19750001, 0x065d0201, 0x19730001, 0x0cb90101, 0x19710001, 0x01970401, 0x196f0001, 0x0cb70101, 0x196d0001, 0x065b0201, 0x196b0001, 0x0cb50101, 0x19690001, 0x032d0301, 0x19670001, 0x0cb30101, 0x19650001, 0x06590201, 0x19630001, 0x0cb10101, 0x19610001, 0x00cb0501, 0x195f0001, 0x0caf0101, 0x195d0001, 0x06570201, 0x195b0001, 0x0cad0101, 0x19590001, 0x032b0301, 0x19570001, 0x0cab0101, 0x19550001, 0x06550201, 0x19530001, 0x0ca90101, 0x19510001, 0x01950401, 0x194f0001, 0x0ca70101, 0x194d0001, 0x06530201, 0x194b0001, 0x0ca50101, 0x19490001, 0x03290301, 0x19470001, 0x0ca30101, 0x19450001, 0x06510201, 0x19430001, 0x0ca10101, 0x19410001, 0x00650601, 0x193f0001, 0x0c9f0101, 0x193d0001, 0x064f0201, 0x193b0001, 0x0c9d0101, 0x19390001, 0x03270301, 0x19370001, 0x0c9b0101, 0x19350001, 0x064d0201, 0x19330001, 0x0c990101, 0x19310001, 0x01930401, 0x192f0001, 0x0c970101, 0x192d0001, 0x064b0201, 0x192b0001, 0x0c950101, 0x19290001, 0x03250301, 0x19270001, 0x0c930101, 0x19250001, 0x06490201, 0x19230001, 0x0c910101, 0x19210001, 0x00c90501, 0x191f0001, 0x0c8f0101, 0x191d0001, 0x06470201, 0x191b0001, 0x0c8d0101, 0x19190001, 0x03230301, 0x19170001, 0x0c8b0101, 0x19150001, 0x06450201, 0x19130001, 0x0c890101, 0x19110001, 0x01910401, 0x190f0001, 0x0c870101, 0x190d0001, 0x06430201, 0x190b0001, 0x0c850101, 0x19090001, 0x03210301, 0x19070001, 0x0c830101, 0x19050001, 0x06410201, 0x19030001, 0x0c810101, 0x19010001, + 0x00192601, 0x18ff0001, 0x0c7f0101, 0x18fd0001, 0x063f0201, 0x18fb0001, 0x0c7d0101, 0x18f90001, 0x031f0301, 0x18f70001, 0x0c7b0101, 0x18f50001, 0x063d0201, 0x18f30001, 0x0c790101, 0x18f10001, 0x018f0401, 0x18ef0001, 0x0c770101, 0x18ed0001, 0x063b0201, 0x18eb0001, 0x0c750101, 0x18e90001, 0x031d0301, 0x18e70001, 0x0c730101, 0x18e50001, 0x06390201, 0x18e30001, 0x0c710101, 0x18e10001, 0x00c70501, 0x18df0001, 0x0c6f0101, 0x18dd0001, 0x06370201, 0x18db0001, 0x0c6d0101, 0x18d90001, 0x031b0301, 0x18d70001, 0x0c6b0101, 0x18d50001, 0x06350201, 0x18d30001, 0x0c690101, 0x18d10001, 0x018d0401, 0x18cf0001, 0x0c670101, 0x18cd0001, 0x06330201, 0x18cb0001, 0x0c650101, 0x18c90001, 0x03190301, 0x18c70001, 0x0c630101, 0x18c50001, 0x06310201, 0x18c30001, 0x0c610101, 0x18c10001, 0x00630601, 0x18bf0001, 0x0c5f0101, 0x18bd0001, 0x062f0201, 0x18bb0001, 0x0c5d0101, 0x18b90001, 0x03170301, 0x18b70001, 0x0c5b0101, 0x18b50001, 0x062d0201, 0x18b30001, 0x0c590101, 0x18b10001, 0x018b0401, 0x18af0001, 0x0c570101, 0x18ad0001, 0x062b0201, 0x18ab0001, 0x0c550101, 0x18a90001, 0x03150301, 0x18a70001, 0x0c530101, 0x18a50001, 0x06290201, 0x18a30001, 0x0c510101, 0x18a10001, 0x00c50501, 0x189f0001, 0x0c4f0101, 0x189d0001, 0x06270201, 0x189b0001, 0x0c4d0101, 0x18990001, 0x03130301, 0x18970001, 0x0c4b0101, 0x18950001, 0x06250201, 0x18930001, 0x0c490101, 0x18910001, 0x01890401, 0x188f0001, 0x0c470101, 0x188d0001, 0x06230201, 0x188b0001, 0x0c450101, 0x18890001, 0x03110301, 0x18870001, 0x0c430101, 0x18850001, 0x06210201, 0x18830001, 0x0c410101, 0x18810001, 0x00311601, 0x187f0001, 0x0c3f0101, 0x187d0001, 0x061f0201, 0x187b0001, 0x0c3d0101, 0x18790001, 0x030f0301, 0x18770001, 0x0c3b0101, 0x18750001, 0x061d0201, 0x18730001, 0x0c390101, 0x18710001, 0x01870401, 0x186f0001, 0x0c370101, 0x186d0001, 0x061b0201, 0x186b0001, 0x0c350101, 0x18690001, 0x030d0301, 0x18670001, 0x0c330101, 0x18650001, 0x06190201, 0x18630001, 0x0c310101, 0x18610001, 0x00c30501, 0x185f0001, 0x0c2f0101, 0x185d0001, 0x06170201, 0x185b0001, 0x0c2d0101, 0x18590001, 0x030b0301, 0x18570001, 0x0c2b0101, 0x18550001, 0x06150201, 0x18530001, 0x0c290101, 0x18510001, 0x01850401, 0x184f0001, 0x0c270101, 0x184d0001, 0x06130201, 0x184b0001, 0x0c250101, 0x18490001, 0x03090301, 0x18470001, 0x0c230101, 0x18450001, 0x06110201, 0x18430001, 0x0c210101, 0x18410001, 0x00610601, 0x183f0001, 0x0c1f0101, 0x183d0001, 0x060f0201, 0x183b0001, 0x0c1d0101, 0x18390001, 0x03070301, 0x18370001, 0x0c1b0101, 0x18350001, 0x060d0201, 0x18330001, 0x0c190101, 0x18310001, 0x01830401, 0x182f0001, 0x0c170101, 0x182d0001, 0x060b0201, 0x182b0001, 0x0c150101, 0x18290001, 0x03050301, 0x18270001, 0x0c130101, 0x18250001, 0x06090201, 0x18230001, 0x0c110101, 0x18210001, 0x00c10501, 0x181f0001, 0x0c0f0101, 0x181d0001, 0x06070201, 0x181b0001, 0x0c0d0101, 0x18190001, 0x03030301, 0x18170001, 0x0c0b0101, 0x18150001, 0x06050201, 0x18130001, 0x0c090101, 0x18110001, 0x01810401, 0x180f0001, 0x0c070101, 0x180d0001, 0x06030201, 0x180b0001, 0x0c050101, 0x18090001, 0x03010301, 0x18070001, 0x0c030101, 0x18050001, 0x06010201, 0x18030001, 0x0c010101, 0x18010001, + 0x00035601, 0x17ff0001, 0x0bff0101, 0x17fd0001, 0x05ff0201, 0x17fb0001, 0x0bfd0101, 0x17f90001, 0x02ff0301, 0x17f70001, 0x0bfb0101, 0x17f50001, 0x05fd0201, 0x17f30001, 0x0bf90101, 0x17f10001, 0x017f0401, 0x17ef0001, 0x0bf70101, 0x17ed0001, 0x05fb0201, 0x17eb0001, 0x0bf50101, 0x17e90001, 0x02fd0301, 0x17e70001, 0x0bf30101, 0x17e50001, 0x05f90201, 0x17e30001, 0x0bf10101, 0x17e10001, 0x00bf0501, 0x17df0001, 0x0bef0101, 0x17dd0001, 0x05f70201, 0x17db0001, 0x0bed0101, 0x17d90001, 0x02fb0301, 0x17d70001, 0x0beb0101, 0x17d50001, 0x05f50201, 0x17d30001, 0x0be90101, 0x17d10001, 0x017d0401, 0x17cf0001, 0x0be70101, 0x17cd0001, 0x05f30201, 0x17cb0001, 0x0be50101, 0x17c90001, 0x02f90301, 0x17c70001, 0x0be30101, 0x17c50001, 0x05f10201, 0x17c30001, 0x0be10101, 0x17c10001, 0x005f0601, 0x17bf0001, 0x0bdf0101, 0x17bd0001, 0x05ef0201, 0x17bb0001, 0x0bdd0101, 0x17b90001, 0x02f70301, 0x17b70001, 0x0bdb0101, 0x17b50001, 0x05ed0201, 0x17b30001, 0x0bd90101, 0x17b10001, 0x017b0401, 0x17af0001, 0x0bd70101, 0x17ad0001, 0x05eb0201, 0x17ab0001, 0x0bd50101, 0x17a90001, 0x02f50301, 0x17a70001, 0x0bd30101, 0x17a50001, 0x05e90201, 0x17a30001, 0x0bd10101, 0x17a10001, 0x00bd0501, 0x179f0001, 0x0bcf0101, 0x179d0001, 0x05e70201, 0x179b0001, 0x0bcd0101, 0x17990001, 0x02f30301, 0x17970001, 0x0bcb0101, 0x17950001, 0x05e50201, 0x17930001, 0x0bc90101, 0x17910001, 0x01790401, 0x178f0001, 0x0bc70101, 0x178d0001, 0x05e30201, 0x178b0001, 0x0bc50101, 0x17890001, 0x02f10301, 0x17870001, 0x0bc30101, 0x17850001, 0x05e10201, 0x17830001, 0x0bc10101, 0x17810001, 0x002f1601, 0x177f0001, 0x0bbf0101, 0x177d0001, 0x05df0201, 0x177b0001, 0x0bbd0101, 0x17790001, 0x02ef0301, 0x17770001, 0x0bbb0101, 0x17750001, 0x05dd0201, 0x17730001, 0x0bb90101, 0x17710001, 0x01770401, 0x176f0001, 0x0bb70101, 0x176d0001, 0x05db0201, 0x176b0001, 0x0bb50101, 0x17690001, 0x02ed0301, 0x17670001, 0x0bb30101, 0x17650001, 0x05d90201, 0x17630001, 0x0bb10101, 0x17610001, 0x00bb0501, 0x175f0001, 0x0baf0101, 0x175d0001, 0x05d70201, 0x175b0001, 0x0bad0101, 0x17590001, 0x02eb0301, 0x17570001, 0x0bab0101, 0x17550001, 0x05d50201, 0x17530001, 0x0ba90101, 0x17510001, 0x01750401, 0x174f0001, 0x0ba70101, 0x174d0001, 0x05d30201, 0x174b0001, 0x0ba50101, 0x17490001, 0x02e90301, 0x17470001, 0x0ba30101, 0x17450001, 0x05d10201, 0x17430001, 0x0ba10101, 0x17410001, 0x005d0601, 0x173f0001, 0x0b9f0101, 0x173d0001, 0x05cf0201, 0x173b0001, 0x0b9d0101, 0x17390001, 0x02e70301, 0x17370001, 0x0b9b0101, 0x17350001, 0x05cd0201, 0x17330001, 0x0b990101, 0x17310001, 0x01730401, 0x172f0001, 0x0b970101, 0x172d0001, 0x05cb0201, 0x172b0001, 0x0b950101, 0x17290001, 0x02e50301, 0x17270001, 0x0b930101, 0x17250001, 0x05c90201, 0x17230001, 0x0b910101, 0x17210001, 0x00b90501, 0x171f0001, 0x0b8f0101, 0x171d0001, 0x05c70201, 0x171b0001, 0x0b8d0101, 0x17190001, 0x02e30301, 0x17170001, 0x0b8b0101, 0x17150001, 0x05c50201, 0x17130001, 0x0b890101, 0x17110001, 0x01710401, 0x170f0001, 0x0b870101, 0x170d0001, 0x05c30201, 0x170b0001, 0x0b850101, 0x17090001, 0x02e10301, 0x17070001, 0x0b830101, 0x17050001, 0x05c10201, 0x17030001, 0x0b810101, 0x17010001, + 0x00172601, 0x16ff0001, 0x0b7f0101, 0x16fd0001, 0x05bf0201, 0x16fb0001, 0x0b7d0101, 0x16f90001, 0x02df0301, 0x16f70001, 0x0b7b0101, 0x16f50001, 0x05bd0201, 0x16f30001, 0x0b790101, 0x16f10001, 0x016f0401, 0x16ef0001, 0x0b770101, 0x16ed0001, 0x05bb0201, 0x16eb0001, 0x0b750101, 0x16e90001, 0x02dd0301, 0x16e70001, 0x0b730101, 0x16e50001, 0x05b90201, 0x16e30001, 0x0b710101, 0x16e10001, 0x00b70501, 0x16df0001, 0x0b6f0101, 0x16dd0001, 0x05b70201, 0x16db0001, 0x0b6d0101, 0x16d90001, 0x02db0301, 0x16d70001, 0x0b6b0101, 0x16d50001, 0x05b50201, 0x16d30001, 0x0b690101, 0x16d10001, 0x016d0401, 0x16cf0001, 0x0b670101, 0x16cd0001, 0x05b30201, 0x16cb0001, 0x0b650101, 0x16c90001, 0x02d90301, 0x16c70001, 0x0b630101, 0x16c50001, 0x05b10201, 0x16c30001, 0x0b610101, 0x16c10001, 0x005b0601, 0x16bf0001, 0x0b5f0101, 0x16bd0001, 0x05af0201, 0x16bb0001, 0x0b5d0101, 0x16b90001, 0x02d70301, 0x16b70001, 0x0b5b0101, 0x16b50001, 0x05ad0201, 0x16b30001, 0x0b590101, 0x16b10001, 0x016b0401, 0x16af0001, 0x0b570101, 0x16ad0001, 0x05ab0201, 0x16ab0001, 0x0b550101, 0x16a90001, 0x02d50301, 0x16a70001, 0x0b530101, 0x16a50001, 0x05a90201, 0x16a30001, 0x0b510101, 0x16a10001, 0x00b50501, 0x169f0001, 0x0b4f0101, 0x169d0001, 0x05a70201, 0x169b0001, 0x0b4d0101, 0x16990001, 0x02d30301, 0x16970001, 0x0b4b0101, 0x16950001, 0x05a50201, 0x16930001, 0x0b490101, 0x16910001, 0x01690401, 0x168f0001, 0x0b470101, 0x168d0001, 0x05a30201, 0x168b0001, 0x0b450101, 0x16890001, 0x02d10301, 0x16870001, 0x0b430101, 0x16850001, 0x05a10201, 0x16830001, 0x0b410101, 0x16810001, 0x002d1601, 0x167f0001, 0x0b3f0101, 0x167d0001, 0x059f0201, 0x167b0001, 0x0b3d0101, 0x16790001, 0x02cf0301, 0x16770001, 0x0b3b0101, 0x16750001, 0x059d0201, 0x16730001, 0x0b390101, 0x16710001, 0x01670401, 0x166f0001, 0x0b370101, 0x166d0001, 0x059b0201, 0x166b0001, 0x0b350101, 0x16690001, 0x02cd0301, 0x16670001, 0x0b330101, 0x16650001, 0x05990201, 0x16630001, 0x0b310101, 0x16610001, 0x00b30501, 0x165f0001, 0x0b2f0101, 0x165d0001, 0x05970201, 0x165b0001, 0x0b2d0101, 0x16590001, 0x02cb0301, 0x16570001, 0x0b2b0101, 0x16550001, 0x05950201, 0x16530001, 0x0b290101, 0x16510001, 0x01650401, 0x164f0001, 0x0b270101, 0x164d0001, 0x05930201, 0x164b0001, 0x0b250101, 0x16490001, 0x02c90301, 0x16470001, 0x0b230101, 0x16450001, 0x05910201, 0x16430001, 0x0b210101, 0x16410001, 0x00590601, 0x163f0001, 0x0b1f0101, 0x163d0001, 0x058f0201, 0x163b0001, 0x0b1d0101, 0x16390001, 0x02c70301, 0x16370001, 0x0b1b0101, 0x16350001, 0x058d0201, 0x16330001, 0x0b190101, 0x16310001, 0x01630401, 0x162f0001, 0x0b170101, 0x162d0001, 0x058b0201, 0x162b0001, 0x0b150101, 0x16290001, 0x02c50301, 0x16270001, 0x0b130101, 0x16250001, 0x05890201, 0x16230001, 0x0b110101, 0x16210001, 0x00b10501, 0x161f0001, 0x0b0f0101, 0x161d0001, 0x05870201, 0x161b0001, 0x0b0d0101, 0x16190001, 0x02c30301, 0x16170001, 0x0b0b0101, 0x16150001, 0x05850201, 0x16130001, 0x0b090101, 0x16110001, 0x01610401, 0x160f0001, 0x0b070101, 0x160d0001, 0x05830201, 0x160b0001, 0x0b050101, 0x16090001, 0x02c10301, 0x16070001, 0x0b030101, 0x16050001, 0x05810201, 0x16030001, 0x0b010101, 0x16010001, + 0x000b3601, 0x15ff0001, 0x0aff0101, 0x15fd0001, 0x057f0201, 0x15fb0001, 0x0afd0101, 0x15f90001, 0x02bf0301, 0x15f70001, 0x0afb0101, 0x15f50001, 0x057d0201, 0x15f30001, 0x0af90101, 0x15f10001, 0x015f0401, 0x15ef0001, 0x0af70101, 0x15ed0001, 0x057b0201, 0x15eb0001, 0x0af50101, 0x15e90001, 0x02bd0301, 0x15e70001, 0x0af30101, 0x15e50001, 0x05790201, 0x15e30001, 0x0af10101, 0x15e10001, 0x00af0501, 0x15df0001, 0x0aef0101, 0x15dd0001, 0x05770201, 0x15db0001, 0x0aed0101, 0x15d90001, 0x02bb0301, 0x15d70001, 0x0aeb0101, 0x15d50001, 0x05750201, 0x15d30001, 0x0ae90101, 0x15d10001, 0x015d0401, 0x15cf0001, 0x0ae70101, 0x15cd0001, 0x05730201, 0x15cb0001, 0x0ae50101, 0x15c90001, 0x02b90301, 0x15c70001, 0x0ae30101, 0x15c50001, 0x05710201, 0x15c30001, 0x0ae10101, 0x15c10001, 0x00570601, 0x15bf0001, 0x0adf0101, 0x15bd0001, 0x056f0201, 0x15bb0001, 0x0add0101, 0x15b90001, 0x02b70301, 0x15b70001, 0x0adb0101, 0x15b50001, 0x056d0201, 0x15b30001, 0x0ad90101, 0x15b10001, 0x015b0401, 0x15af0001, 0x0ad70101, 0x15ad0001, 0x056b0201, 0x15ab0001, 0x0ad50101, 0x15a90001, 0x02b50301, 0x15a70001, 0x0ad30101, 0x15a50001, 0x05690201, 0x15a30001, 0x0ad10101, 0x15a10001, 0x00ad0501, 0x159f0001, 0x0acf0101, 0x159d0001, 0x05670201, 0x159b0001, 0x0acd0101, 0x15990001, 0x02b30301, 0x15970001, 0x0acb0101, 0x15950001, 0x05650201, 0x15930001, 0x0ac90101, 0x15910001, 0x01590401, 0x158f0001, 0x0ac70101, 0x158d0001, 0x05630201, 0x158b0001, 0x0ac50101, 0x15890001, 0x02b10301, 0x15870001, 0x0ac30101, 0x15850001, 0x05610201, 0x15830001, 0x0ac10101, 0x15810001, 0x002b1601, 0x157f0001, 0x0abf0101, 0x157d0001, 0x055f0201, 0x157b0001, 0x0abd0101, 0x15790001, 0x02af0301, 0x15770001, 0x0abb0101, 0x15750001, 0x055d0201, 0x15730001, 0x0ab90101, 0x15710001, 0x01570401, 0x156f0001, 0x0ab70101, 0x156d0001, 0x055b0201, 0x156b0001, 0x0ab50101, 0x15690001, 0x02ad0301, 0x15670001, 0x0ab30101, 0x15650001, 0x05590201, 0x15630001, 0x0ab10101, 0x15610001, 0x00ab0501, 0x155f0001, 0x0aaf0101, 0x155d0001, 0x05570201, 0x155b0001, 0x0aad0101, 0x15590001, 0x02ab0301, 0x15570001, 0x0aab0101, 0x15550001, 0x05550201, 0x15530001, 0x0aa90101, 0x15510001, 0x01550401, 0x154f0001, 0x0aa70101, 0x154d0001, 0x05530201, 0x154b0001, 0x0aa50101, 0x15490001, 0x02a90301, 0x15470001, 0x0aa30101, 0x15450001, 0x05510201, 0x15430001, 0x0aa10101, 0x15410001, 0x00550601, 0x153f0001, 0x0a9f0101, 0x153d0001, 0x054f0201, 0x153b0001, 0x0a9d0101, 0x15390001, 0x02a70301, 0x15370001, 0x0a9b0101, 0x15350001, 0x054d0201, 0x15330001, 0x0a990101, 0x15310001, 0x01530401, 0x152f0001, 0x0a970101, 0x152d0001, 0x054b0201, 0x152b0001, 0x0a950101, 0x15290001, 0x02a50301, 0x15270001, 0x0a930101, 0x15250001, 0x05490201, 0x15230001, 0x0a910101, 0x15210001, 0x00a90501, 0x151f0001, 0x0a8f0101, 0x151d0001, 0x05470201, 0x151b0001, 0x0a8d0101, 0x15190001, 0x02a30301, 0x15170001, 0x0a8b0101, 0x15150001, 0x05450201, 0x15130001, 0x0a890101, 0x15110001, 0x01510401, 0x150f0001, 0x0a870101, 0x150d0001, 0x05430201, 0x150b0001, 0x0a850101, 0x15090001, 0x02a10301, 0x15070001, 0x0a830101, 0x15050001, 0x05410201, 0x15030001, 0x0a810101, 0x15010001, + 0x00152601, 0x14ff0001, 0x0a7f0101, 0x14fd0001, 0x053f0201, 0x14fb0001, 0x0a7d0101, 0x14f90001, 0x029f0301, 0x14f70001, 0x0a7b0101, 0x14f50001, 0x053d0201, 0x14f30001, 0x0a790101, 0x14f10001, 0x014f0401, 0x14ef0001, 0x0a770101, 0x14ed0001, 0x053b0201, 0x14eb0001, 0x0a750101, 0x14e90001, 0x029d0301, 0x14e70001, 0x0a730101, 0x14e50001, 0x05390201, 0x14e30001, 0x0a710101, 0x14e10001, 0x00a70501, 0x14df0001, 0x0a6f0101, 0x14dd0001, 0x05370201, 0x14db0001, 0x0a6d0101, 0x14d90001, 0x029b0301, 0x14d70001, 0x0a6b0101, 0x14d50001, 0x05350201, 0x14d30001, 0x0a690101, 0x14d10001, 0x014d0401, 0x14cf0001, 0x0a670101, 0x14cd0001, 0x05330201, 0x14cb0001, 0x0a650101, 0x14c90001, 0x02990301, 0x14c70001, 0x0a630101, 0x14c50001, 0x05310201, 0x14c30001, 0x0a610101, 0x14c10001, 0x00530601, 0x14bf0001, 0x0a5f0101, 0x14bd0001, 0x052f0201, 0x14bb0001, 0x0a5d0101, 0x14b90001, 0x02970301, 0x14b70001, 0x0a5b0101, 0x14b50001, 0x052d0201, 0x14b30001, 0x0a590101, 0x14b10001, 0x014b0401, 0x14af0001, 0x0a570101, 0x14ad0001, 0x052b0201, 0x14ab0001, 0x0a550101, 0x14a90001, 0x02950301, 0x14a70001, 0x0a530101, 0x14a50001, 0x05290201, 0x14a30001, 0x0a510101, 0x14a10001, 0x00a50501, 0x149f0001, 0x0a4f0101, 0x149d0001, 0x05270201, 0x149b0001, 0x0a4d0101, 0x14990001, 0x02930301, 0x14970001, 0x0a4b0101, 0x14950001, 0x05250201, 0x14930001, 0x0a490101, 0x14910001, 0x01490401, 0x148f0001, 0x0a470101, 0x148d0001, 0x05230201, 0x148b0001, 0x0a450101, 0x14890001, 0x02910301, 0x14870001, 0x0a430101, 0x14850001, 0x05210201, 0x14830001, 0x0a410101, 0x14810001, 0x00291601, 0x147f0001, 0x0a3f0101, 0x147d0001, 0x051f0201, 0x147b0001, 0x0a3d0101, 0x14790001, 0x028f0301, 0x14770001, 0x0a3b0101, 0x14750001, 0x051d0201, 0x14730001, 0x0a390101, 0x14710001, 0x01470401, 0x146f0001, 0x0a370101, 0x146d0001, 0x051b0201, 0x146b0001, 0x0a350101, 0x14690001, 0x028d0301, 0x14670001, 0x0a330101, 0x14650001, 0x05190201, 0x14630001, 0x0a310101, 0x14610001, 0x00a30501, 0x145f0001, 0x0a2f0101, 0x145d0001, 0x05170201, 0x145b0001, 0x0a2d0101, 0x14590001, 0x028b0301, 0x14570001, 0x0a2b0101, 0x14550001, 0x05150201, 0x14530001, 0x0a290101, 0x14510001, 0x01450401, 0x144f0001, 0x0a270101, 0x144d0001, 0x05130201, 0x144b0001, 0x0a250101, 0x14490001, 0x02890301, 0x14470001, 0x0a230101, 0x14450001, 0x05110201, 0x14430001, 0x0a210101, 0x14410001, 0x00510601, 0x143f0001, 0x0a1f0101, 0x143d0001, 0x050f0201, 0x143b0001, 0x0a1d0101, 0x14390001, 0x02870301, 0x14370001, 0x0a1b0101, 0x14350001, 0x050d0201, 0x14330001, 0x0a190101, 0x14310001, 0x01430401, 0x142f0001, 0x0a170101, 0x142d0001, 0x050b0201, 0x142b0001, 0x0a150101, 0x14290001, 0x02850301, 0x14270001, 0x0a130101, 0x14250001, 0x05090201, 0x14230001, 0x0a110101, 0x14210001, 0x00a10501, 0x141f0001, 0x0a0f0101, 0x141d0001, 0x05070201, 0x141b0001, 0x0a0d0101, 0x14190001, 0x02830301, 0x14170001, 0x0a0b0101, 0x14150001, 0x05050201, 0x14130001, 0x0a090101, 0x14110001, 0x01410401, 0x140f0001, 0x0a070101, 0x140d0001, 0x05030201, 0x140b0001, 0x0a050101, 0x14090001, 0x02810301, 0x14070001, 0x0a030101, 0x14050001, 0x05010201, 0x14030001, 0x0a010101, 0x14010001, + 0x00054601, 0x13ff0001, 0x09ff0101, 0x13fd0001, 0x04ff0201, 0x13fb0001, 0x09fd0101, 0x13f90001, 0x027f0301, 0x13f70001, 0x09fb0101, 0x13f50001, 0x04fd0201, 0x13f30001, 0x09f90101, 0x13f10001, 0x013f0401, 0x13ef0001, 0x09f70101, 0x13ed0001, 0x04fb0201, 0x13eb0001, 0x09f50101, 0x13e90001, 0x027d0301, 0x13e70001, 0x09f30101, 0x13e50001, 0x04f90201, 0x13e30001, 0x09f10101, 0x13e10001, 0x009f0501, 0x13df0001, 0x09ef0101, 0x13dd0001, 0x04f70201, 0x13db0001, 0x09ed0101, 0x13d90001, 0x027b0301, 0x13d70001, 0x09eb0101, 0x13d50001, 0x04f50201, 0x13d30001, 0x09e90101, 0x13d10001, 0x013d0401, 0x13cf0001, 0x09e70101, 0x13cd0001, 0x04f30201, 0x13cb0001, 0x09e50101, 0x13c90001, 0x02790301, 0x13c70001, 0x09e30101, 0x13c50001, 0x04f10201, 0x13c30001, 0x09e10101, 0x13c10001, 0x004f0601, 0x13bf0001, 0x09df0101, 0x13bd0001, 0x04ef0201, 0x13bb0001, 0x09dd0101, 0x13b90001, 0x02770301, 0x13b70001, 0x09db0101, 0x13b50001, 0x04ed0201, 0x13b30001, 0x09d90101, 0x13b10001, 0x013b0401, 0x13af0001, 0x09d70101, 0x13ad0001, 0x04eb0201, 0x13ab0001, 0x09d50101, 0x13a90001, 0x02750301, 0x13a70001, 0x09d30101, 0x13a50001, 0x04e90201, 0x13a30001, 0x09d10101, 0x13a10001, 0x009d0501, 0x139f0001, 0x09cf0101, 0x139d0001, 0x04e70201, 0x139b0001, 0x09cd0101, 0x13990001, 0x02730301, 0x13970001, 0x09cb0101, 0x13950001, 0x04e50201, 0x13930001, 0x09c90101, 0x13910001, 0x01390401, 0x138f0001, 0x09c70101, 0x138d0001, 0x04e30201, 0x138b0001, 0x09c50101, 0x13890001, 0x02710301, 0x13870001, 0x09c30101, 0x13850001, 0x04e10201, 0x13830001, 0x09c10101, 0x13810001, 0x00271601, 0x137f0001, 0x09bf0101, 0x137d0001, 0x04df0201, 0x137b0001, 0x09bd0101, 0x13790001, 0x026f0301, 0x13770001, 0x09bb0101, 0x13750001, 0x04dd0201, 0x13730001, 0x09b90101, 0x13710001, 0x01370401, 0x136f0001, 0x09b70101, 0x136d0001, 0x04db0201, 0x136b0001, 0x09b50101, 0x13690001, 0x026d0301, 0x13670001, 0x09b30101, 0x13650001, 0x04d90201, 0x13630001, 0x09b10101, 0x13610001, 0x009b0501, 0x135f0001, 0x09af0101, 0x135d0001, 0x04d70201, 0x135b0001, 0x09ad0101, 0x13590001, 0x026b0301, 0x13570001, 0x09ab0101, 0x13550001, 0x04d50201, 0x13530001, 0x09a90101, 0x13510001, 0x01350401, 0x134f0001, 0x09a70101, 0x134d0001, 0x04d30201, 0x134b0001, 0x09a50101, 0x13490001, 0x02690301, 0x13470001, 0x09a30101, 0x13450001, 0x04d10201, 0x13430001, 0x09a10101, 0x13410001, 0x004d0601, 0x133f0001, 0x099f0101, 0x133d0001, 0x04cf0201, 0x133b0001, 0x099d0101, 0x13390001, 0x02670301, 0x13370001, 0x099b0101, 0x13350001, 0x04cd0201, 0x13330001, 0x09990101, 0x13310001, 0x01330401, 0x132f0001, 0x09970101, 0x132d0001, 0x04cb0201, 0x132b0001, 0x09950101, 0x13290001, 0x02650301, 0x13270001, 0x09930101, 0x13250001, 0x04c90201, 0x13230001, 0x09910101, 0x13210001, 0x00990501, 0x131f0001, 0x098f0101, 0x131d0001, 0x04c70201, 0x131b0001, 0x098d0101, 0x13190001, 0x02630301, 0x13170001, 0x098b0101, 0x13150001, 0x04c50201, 0x13130001, 0x09890101, 0x13110001, 0x01310401, 0x130f0001, 0x09870101, 0x130d0001, 0x04c30201, 0x130b0001, 0x09850101, 0x13090001, 0x02610301, 0x13070001, 0x09830101, 0x13050001, 0x04c10201, 0x13030001, 0x09810101, 0x13010001, + 0x00132601, 0x12ff0001, 0x097f0101, 0x12fd0001, 0x04bf0201, 0x12fb0001, 0x097d0101, 0x12f90001, 0x025f0301, 0x12f70001, 0x097b0101, 0x12f50001, 0x04bd0201, 0x12f30001, 0x09790101, 0x12f10001, 0x012f0401, 0x12ef0001, 0x09770101, 0x12ed0001, 0x04bb0201, 0x12eb0001, 0x09750101, 0x12e90001, 0x025d0301, 0x12e70001, 0x09730101, 0x12e50001, 0x04b90201, 0x12e30001, 0x09710101, 0x12e10001, 0x00970501, 0x12df0001, 0x096f0101, 0x12dd0001, 0x04b70201, 0x12db0001, 0x096d0101, 0x12d90001, 0x025b0301, 0x12d70001, 0x096b0101, 0x12d50001, 0x04b50201, 0x12d30001, 0x09690101, 0x12d10001, 0x012d0401, 0x12cf0001, 0x09670101, 0x12cd0001, 0x04b30201, 0x12cb0001, 0x09650101, 0x12c90001, 0x02590301, 0x12c70001, 0x09630101, 0x12c50001, 0x04b10201, 0x12c30001, 0x09610101, 0x12c10001, 0x004b0601, 0x12bf0001, 0x095f0101, 0x12bd0001, 0x04af0201, 0x12bb0001, 0x095d0101, 0x12b90001, 0x02570301, 0x12b70001, 0x095b0101, 0x12b50001, 0x04ad0201, 0x12b30001, 0x09590101, 0x12b10001, 0x012b0401, 0x12af0001, 0x09570101, 0x12ad0001, 0x04ab0201, 0x12ab0001, 0x09550101, 0x12a90001, 0x02550301, 0x12a70001, 0x09530101, 0x12a50001, 0x04a90201, 0x12a30001, 0x09510101, 0x12a10001, 0x00950501, 0x129f0001, 0x094f0101, 0x129d0001, 0x04a70201, 0x129b0001, 0x094d0101, 0x12990001, 0x02530301, 0x12970001, 0x094b0101, 0x12950001, 0x04a50201, 0x12930001, 0x09490101, 0x12910001, 0x01290401, 0x128f0001, 0x09470101, 0x128d0001, 0x04a30201, 0x128b0001, 0x09450101, 0x12890001, 0x02510301, 0x12870001, 0x09430101, 0x12850001, 0x04a10201, 0x12830001, 0x09410101, 0x12810001, 0x00251601, 0x127f0001, 0x093f0101, 0x127d0001, 0x049f0201, 0x127b0001, 0x093d0101, 0x12790001, 0x024f0301, 0x12770001, 0x093b0101, 0x12750001, 0x049d0201, 0x12730001, 0x09390101, 0x12710001, 0x01270401, 0x126f0001, 0x09370101, 0x126d0001, 0x049b0201, 0x126b0001, 0x09350101, 0x12690001, 0x024d0301, 0x12670001, 0x09330101, 0x12650001, 0x04990201, 0x12630001, 0x09310101, 0x12610001, 0x00930501, 0x125f0001, 0x092f0101, 0x125d0001, 0x04970201, 0x125b0001, 0x092d0101, 0x12590001, 0x024b0301, 0x12570001, 0x092b0101, 0x12550001, 0x04950201, 0x12530001, 0x09290101, 0x12510001, 0x01250401, 0x124f0001, 0x09270101, 0x124d0001, 0x04930201, 0x124b0001, 0x09250101, 0x12490001, 0x02490301, 0x12470001, 0x09230101, 0x12450001, 0x04910201, 0x12430001, 0x09210101, 0x12410001, 0x00490601, 0x123f0001, 0x091f0101, 0x123d0001, 0x048f0201, 0x123b0001, 0x091d0101, 0x12390001, 0x02470301, 0x12370001, 0x091b0101, 0x12350001, 0x048d0201, 0x12330001, 0x09190101, 0x12310001, 0x01230401, 0x122f0001, 0x09170101, 0x122d0001, 0x048b0201, 0x122b0001, 0x09150101, 0x12290001, 0x02450301, 0x12270001, 0x09130101, 0x12250001, 0x04890201, 0x12230001, 0x09110101, 0x12210001, 0x00910501, 0x121f0001, 0x090f0101, 0x121d0001, 0x04870201, 0x121b0001, 0x090d0101, 0x12190001, 0x02430301, 0x12170001, 0x090b0101, 0x12150001, 0x04850201, 0x12130001, 0x09090101, 0x12110001, 0x01210401, 0x120f0001, 0x09070101, 0x120d0001, 0x04830201, 0x120b0001, 0x09050101, 0x12090001, 0x02410301, 0x12070001, 0x09030101, 0x12050001, 0x04810201, 0x12030001, 0x09010101, 0x12010001, + 0x00093601, 0x11ff0001, 0x08ff0101, 0x11fd0001, 0x047f0201, 0x11fb0001, 0x08fd0101, 0x11f90001, 0x023f0301, 0x11f70001, 0x08fb0101, 0x11f50001, 0x047d0201, 0x11f30001, 0x08f90101, 0x11f10001, 0x011f0401, 0x11ef0001, 0x08f70101, 0x11ed0001, 0x047b0201, 0x11eb0001, 0x08f50101, 0x11e90001, 0x023d0301, 0x11e70001, 0x08f30101, 0x11e50001, 0x04790201, 0x11e30001, 0x08f10101, 0x11e10001, 0x008f0501, 0x11df0001, 0x08ef0101, 0x11dd0001, 0x04770201, 0x11db0001, 0x08ed0101, 0x11d90001, 0x023b0301, 0x11d70001, 0x08eb0101, 0x11d50001, 0x04750201, 0x11d30001, 0x08e90101, 0x11d10001, 0x011d0401, 0x11cf0001, 0x08e70101, 0x11cd0001, 0x04730201, 0x11cb0001, 0x08e50101, 0x11c90001, 0x02390301, 0x11c70001, 0x08e30101, 0x11c50001, 0x04710201, 0x11c30001, 0x08e10101, 0x11c10001, 0x00470601, 0x11bf0001, 0x08df0101, 0x11bd0001, 0x046f0201, 0x11bb0001, 0x08dd0101, 0x11b90001, 0x02370301, 0x11b70001, 0x08db0101, 0x11b50001, 0x046d0201, 0x11b30001, 0x08d90101, 0x11b10001, 0x011b0401, 0x11af0001, 0x08d70101, 0x11ad0001, 0x046b0201, 0x11ab0001, 0x08d50101, 0x11a90001, 0x02350301, 0x11a70001, 0x08d30101, 0x11a50001, 0x04690201, 0x11a30001, 0x08d10101, 0x11a10001, 0x008d0501, 0x119f0001, 0x08cf0101, 0x119d0001, 0x04670201, 0x119b0001, 0x08cd0101, 0x11990001, 0x02330301, 0x11970001, 0x08cb0101, 0x11950001, 0x04650201, 0x11930001, 0x08c90101, 0x11910001, 0x01190401, 0x118f0001, 0x08c70101, 0x118d0001, 0x04630201, 0x118b0001, 0x08c50101, 0x11890001, 0x02310301, 0x11870001, 0x08c30101, 0x11850001, 0x04610201, 0x11830001, 0x08c10101, 0x11810001, 0x00231601, 0x117f0001, 0x08bf0101, 0x117d0001, 0x045f0201, 0x117b0001, 0x08bd0101, 0x11790001, 0x022f0301, 0x11770001, 0x08bb0101, 0x11750001, 0x045d0201, 0x11730001, 0x08b90101, 0x11710001, 0x01170401, 0x116f0001, 0x08b70101, 0x116d0001, 0x045b0201, 0x116b0001, 0x08b50101, 0x11690001, 0x022d0301, 0x11670001, 0x08b30101, 0x11650001, 0x04590201, 0x11630001, 0x08b10101, 0x11610001, 0x008b0501, 0x115f0001, 0x08af0101, 0x115d0001, 0x04570201, 0x115b0001, 0x08ad0101, 0x11590001, 0x022b0301, 0x11570001, 0x08ab0101, 0x11550001, 0x04550201, 0x11530001, 0x08a90101, 0x11510001, 0x01150401, 0x114f0001, 0x08a70101, 0x114d0001, 0x04530201, 0x114b0001, 0x08a50101, 0x11490001, 0x02290301, 0x11470001, 0x08a30101, 0x11450001, 0x04510201, 0x11430001, 0x08a10101, 0x11410001, 0x00450601, 0x113f0001, 0x089f0101, 0x113d0001, 0x044f0201, 0x113b0001, 0x089d0101, 0x11390001, 0x02270301, 0x11370001, 0x089b0101, 0x11350001, 0x044d0201, 0x11330001, 0x08990101, 0x11310001, 0x01130401, 0x112f0001, 0x08970101, 0x112d0001, 0x044b0201, 0x112b0001, 0x08950101, 0x11290001, 0x02250301, 0x11270001, 0x08930101, 0x11250001, 0x04490201, 0x11230001, 0x08910101, 0x11210001, 0x00890501, 0x111f0001, 0x088f0101, 0x111d0001, 0x04470201, 0x111b0001, 0x088d0101, 0x11190001, 0x02230301, 0x11170001, 0x088b0101, 0x11150001, 0x04450201, 0x11130001, 0x08890101, 0x11110001, 0x01110401, 0x110f0001, 0x08870101, 0x110d0001, 0x04430201, 0x110b0001, 0x08850101, 0x11090001, 0x02210301, 0x11070001, 0x08830101, 0x11050001, 0x04410201, 0x11030001, 0x08810101, 0x11010001, + 0x00112601, 0x10ff0001, 0x087f0101, 0x10fd0001, 0x043f0201, 0x10fb0001, 0x087d0101, 0x10f90001, 0x021f0301, 0x10f70001, 0x087b0101, 0x10f50001, 0x043d0201, 0x10f30001, 0x08790101, 0x10f10001, 0x010f0401, 0x10ef0001, 0x08770101, 0x10ed0001, 0x043b0201, 0x10eb0001, 0x08750101, 0x10e90001, 0x021d0301, 0x10e70001, 0x08730101, 0x10e50001, 0x04390201, 0x10e30001, 0x08710101, 0x10e10001, 0x00870501, 0x10df0001, 0x086f0101, 0x10dd0001, 0x04370201, 0x10db0001, 0x086d0101, 0x10d90001, 0x021b0301, 0x10d70001, 0x086b0101, 0x10d50001, 0x04350201, 0x10d30001, 0x08690101, 0x10d10001, 0x010d0401, 0x10cf0001, 0x08670101, 0x10cd0001, 0x04330201, 0x10cb0001, 0x08650101, 0x10c90001, 0x02190301, 0x10c70001, 0x08630101, 0x10c50001, 0x04310201, 0x10c30001, 0x08610101, 0x10c10001, 0x00430601, 0x10bf0001, 0x085f0101, 0x10bd0001, 0x042f0201, 0x10bb0001, 0x085d0101, 0x10b90001, 0x02170301, 0x10b70001, 0x085b0101, 0x10b50001, 0x042d0201, 0x10b30001, 0x08590101, 0x10b10001, 0x010b0401, 0x10af0001, 0x08570101, 0x10ad0001, 0x042b0201, 0x10ab0001, 0x08550101, 0x10a90001, 0x02150301, 0x10a70001, 0x08530101, 0x10a50001, 0x04290201, 0x10a30001, 0x08510101, 0x10a10001, 0x00850501, 0x109f0001, 0x084f0101, 0x109d0001, 0x04270201, 0x109b0001, 0x084d0101, 0x10990001, 0x02130301, 0x10970001, 0x084b0101, 0x10950001, 0x04250201, 0x10930001, 0x08490101, 0x10910001, 0x01090401, 0x108f0001, 0x08470101, 0x108d0001, 0x04230201, 0x108b0001, 0x08450101, 0x10890001, 0x02110301, 0x10870001, 0x08430101, 0x10850001, 0x04210201, 0x10830001, 0x08410101, 0x10810001, 0x00211601, 0x107f0001, 0x083f0101, 0x107d0001, 0x041f0201, 0x107b0001, 0x083d0101, 0x10790001, 0x020f0301, 0x10770001, 0x083b0101, 0x10750001, 0x041d0201, 0x10730001, 0x08390101, 0x10710001, 0x01070401, 0x106f0001, 0x08370101, 0x106d0001, 0x041b0201, 0x106b0001, 0x08350101, 0x10690001, 0x020d0301, 0x10670001, 0x08330101, 0x10650001, 0x04190201, 0x10630001, 0x08310101, 0x10610001, 0x00830501, 0x105f0001, 0x082f0101, 0x105d0001, 0x04170201, 0x105b0001, 0x082d0101, 0x10590001, 0x020b0301, 0x10570001, 0x082b0101, 0x10550001, 0x04150201, 0x10530001, 0x08290101, 0x10510001, 0x01050401, 0x104f0001, 0x08270101, 0x104d0001, 0x04130201, 0x104b0001, 0x08250101, 0x10490001, 0x02090301, 0x10470001, 0x08230101, 0x10450001, 0x04110201, 0x10430001, 0x08210101, 0x10410001, 0x00410601, 0x103f0001, 0x081f0101, 0x103d0001, 0x040f0201, 0x103b0001, 0x081d0101, 0x10390001, 0x02070301, 0x10370001, 0x081b0101, 0x10350001, 0x040d0201, 0x10330001, 0x08190101, 0x10310001, 0x01030401, 0x102f0001, 0x08170101, 0x102d0001, 0x040b0201, 0x102b0001, 0x08150101, 0x10290001, 0x02050301, 0x10270001, 0x08130101, 0x10250001, 0x04090201, 0x10230001, 0x08110101, 0x10210001, 0x00810501, 0x101f0001, 0x080f0101, 0x101d0001, 0x04070201, 0x101b0001, 0x080d0101, 0x10190001, 0x02030301, 0x10170001, 0x080b0101, 0x10150001, 0x04050201, 0x10130001, 0x08090101, 0x10110001, 0x01010401, 0x100f0001, 0x08070101, 0x100d0001, 0x04030201, 0x100b0001, 0x08050101, 0x10090001, 0x02010301, 0x10070001, 0x08030101, 0x10050001, 0x04010201, 0x10030001, 0x08010101, 0x10010001, + 0x00016601, 0x0fff0001, 0x07ff0101, 0x0ffd0001, 0x03ff0201, 0x0ffb0001, 0x07fd0101, 0x0ff90001, 0x01ff0301, 0x0ff70001, 0x07fb0101, 0x0ff50001, 0x03fd0201, 0x0ff30001, 0x07f90101, 0x0ff10001, 0x00ff0401, 0x0fef0001, 0x07f70101, 0x0fed0001, 0x03fb0201, 0x0feb0001, 0x07f50101, 0x0fe90001, 0x01fd0301, 0x0fe70001, 0x07f30101, 0x0fe50001, 0x03f90201, 0x0fe30001, 0x07f10101, 0x0fe10001, 0x007f0501, 0x0fdf0001, 0x07ef0101, 0x0fdd0001, 0x03f70201, 0x0fdb0001, 0x07ed0101, 0x0fd90001, 0x01fb0301, 0x0fd70001, 0x07eb0101, 0x0fd50001, 0x03f50201, 0x0fd30001, 0x07e90101, 0x0fd10001, 0x00fd0401, 0x0fcf0001, 0x07e70101, 0x0fcd0001, 0x03f30201, 0x0fcb0001, 0x07e50101, 0x0fc90001, 0x01f90301, 0x0fc70001, 0x07e30101, 0x0fc50001, 0x03f10201, 0x0fc30001, 0x07e10101, 0x0fc10001, 0x003f0601, 0x0fbf0001, 0x07df0101, 0x0fbd0001, 0x03ef0201, 0x0fbb0001, 0x07dd0101, 0x0fb90001, 0x01f70301, 0x0fb70001, 0x07db0101, 0x0fb50001, 0x03ed0201, 0x0fb30001, 0x07d90101, 0x0fb10001, 0x00fb0401, 0x0faf0001, 0x07d70101, 0x0fad0001, 0x03eb0201, 0x0fab0001, 0x07d50101, 0x0fa90001, 0x01f50301, 0x0fa70001, 0x07d30101, 0x0fa50001, 0x03e90201, 0x0fa30001, 0x07d10101, 0x0fa10001, 0x007d0501, 0x0f9f0001, 0x07cf0101, 0x0f9d0001, 0x03e70201, 0x0f9b0001, 0x07cd0101, 0x0f990001, 0x01f30301, 0x0f970001, 0x07cb0101, 0x0f950001, 0x03e50201, 0x0f930001, 0x07c90101, 0x0f910001, 0x00f90401, 0x0f8f0001, 0x07c70101, 0x0f8d0001, 0x03e30201, 0x0f8b0001, 0x07c50101, 0x0f890001, 0x01f10301, 0x0f870001, 0x07c30101, 0x0f850001, 0x03e10201, 0x0f830001, 0x07c10101, 0x0f810001, 0x001f1601, 0x0f7f0001, 0x07bf0101, 0x0f7d0001, 0x03df0201, 0x0f7b0001, 0x07bd0101, 0x0f790001, 0x01ef0301, 0x0f770001, 0x07bb0101, 0x0f750001, 0x03dd0201, 0x0f730001, 0x07b90101, 0x0f710001, 0x00f70401, 0x0f6f0001, 0x07b70101, 0x0f6d0001, 0x03db0201, 0x0f6b0001, 0x07b50101, 0x0f690001, 0x01ed0301, 0x0f670001, 0x07b30101, 0x0f650001, 0x03d90201, 0x0f630001, 0x07b10101, 0x0f610001, 0x007b0501, 0x0f5f0001, 0x07af0101, 0x0f5d0001, 0x03d70201, 0x0f5b0001, 0x07ad0101, 0x0f590001, 0x01eb0301, 0x0f570001, 0x07ab0101, 0x0f550001, 0x03d50201, 0x0f530001, 0x07a90101, 0x0f510001, 0x00f50401, 0x0f4f0001, 0x07a70101, 0x0f4d0001, 0x03d30201, 0x0f4b0001, 0x07a50101, 0x0f490001, 0x01e90301, 0x0f470001, 0x07a30101, 0x0f450001, 0x03d10201, 0x0f430001, 0x07a10101, 0x0f410001, 0x003d0601, 0x0f3f0001, 0x079f0101, 0x0f3d0001, 0x03cf0201, 0x0f3b0001, 0x079d0101, 0x0f390001, 0x01e70301, 0x0f370001, 0x079b0101, 0x0f350001, 0x03cd0201, 0x0f330001, 0x07990101, 0x0f310001, 0x00f30401, 0x0f2f0001, 0x07970101, 0x0f2d0001, 0x03cb0201, 0x0f2b0001, 0x07950101, 0x0f290001, 0x01e50301, 0x0f270001, 0x07930101, 0x0f250001, 0x03c90201, 0x0f230001, 0x07910101, 0x0f210001, 0x00790501, 0x0f1f0001, 0x078f0101, 0x0f1d0001, 0x03c70201, 0x0f1b0001, 0x078d0101, 0x0f190001, 0x01e30301, 0x0f170001, 0x078b0101, 0x0f150001, 0x03c50201, 0x0f130001, 0x07890101, 0x0f110001, 0x00f10401, 0x0f0f0001, 0x07870101, 0x0f0d0001, 0x03c30201, 0x0f0b0001, 0x07850101, 0x0f090001, 0x01e10301, 0x0f070001, 0x07830101, 0x0f050001, 0x03c10201, 0x0f030001, 0x07810101, 0x0f010001, + 0x000f2601, 0x0eff0001, 0x077f0101, 0x0efd0001, 0x03bf0201, 0x0efb0001, 0x077d0101, 0x0ef90001, 0x01df0301, 0x0ef70001, 0x077b0101, 0x0ef50001, 0x03bd0201, 0x0ef30001, 0x07790101, 0x0ef10001, 0x00ef0401, 0x0eef0001, 0x07770101, 0x0eed0001, 0x03bb0201, 0x0eeb0001, 0x07750101, 0x0ee90001, 0x01dd0301, 0x0ee70001, 0x07730101, 0x0ee50001, 0x03b90201, 0x0ee30001, 0x07710101, 0x0ee10001, 0x00770501, 0x0edf0001, 0x076f0101, 0x0edd0001, 0x03b70201, 0x0edb0001, 0x076d0101, 0x0ed90001, 0x01db0301, 0x0ed70001, 0x076b0101, 0x0ed50001, 0x03b50201, 0x0ed30001, 0x07690101, 0x0ed10001, 0x00ed0401, 0x0ecf0001, 0x07670101, 0x0ecd0001, 0x03b30201, 0x0ecb0001, 0x07650101, 0x0ec90001, 0x01d90301, 0x0ec70001, 0x07630101, 0x0ec50001, 0x03b10201, 0x0ec30001, 0x07610101, 0x0ec10001, 0x003b0601, 0x0ebf0001, 0x075f0101, 0x0ebd0001, 0x03af0201, 0x0ebb0001, 0x075d0101, 0x0eb90001, 0x01d70301, 0x0eb70001, 0x075b0101, 0x0eb50001, 0x03ad0201, 0x0eb30001, 0x07590101, 0x0eb10001, 0x00eb0401, 0x0eaf0001, 0x07570101, 0x0ead0001, 0x03ab0201, 0x0eab0001, 0x07550101, 0x0ea90001, 0x01d50301, 0x0ea70001, 0x07530101, 0x0ea50001, 0x03a90201, 0x0ea30001, 0x07510101, 0x0ea10001, 0x00750501, 0x0e9f0001, 0x074f0101, 0x0e9d0001, 0x03a70201, 0x0e9b0001, 0x074d0101, 0x0e990001, 0x01d30301, 0x0e970001, 0x074b0101, 0x0e950001, 0x03a50201, 0x0e930001, 0x07490101, 0x0e910001, 0x00e90401, 0x0e8f0001, 0x07470101, 0x0e8d0001, 0x03a30201, 0x0e8b0001, 0x07450101, 0x0e890001, 0x01d10301, 0x0e870001, 0x07430101, 0x0e850001, 0x03a10201, 0x0e830001, 0x07410101, 0x0e810001, 0x001d1601, 0x0e7f0001, 0x073f0101, 0x0e7d0001, 0x039f0201, 0x0e7b0001, 0x073d0101, 0x0e790001, 0x01cf0301, 0x0e770001, 0x073b0101, 0x0e750001, 0x039d0201, 0x0e730001, 0x07390101, 0x0e710001, 0x00e70401, 0x0e6f0001, 0x07370101, 0x0e6d0001, 0x039b0201, 0x0e6b0001, 0x07350101, 0x0e690001, 0x01cd0301, 0x0e670001, 0x07330101, 0x0e650001, 0x03990201, 0x0e630001, 0x07310101, 0x0e610001, 0x00730501, 0x0e5f0001, 0x072f0101, 0x0e5d0001, 0x03970201, 0x0e5b0001, 0x072d0101, 0x0e590001, 0x01cb0301, 0x0e570001, 0x072b0101, 0x0e550001, 0x03950201, 0x0e530001, 0x07290101, 0x0e510001, 0x00e50401, 0x0e4f0001, 0x07270101, 0x0e4d0001, 0x03930201, 0x0e4b0001, 0x07250101, 0x0e490001, 0x01c90301, 0x0e470001, 0x07230101, 0x0e450001, 0x03910201, 0x0e430001, 0x07210101, 0x0e410001, 0x00390601, 0x0e3f0001, 0x071f0101, 0x0e3d0001, 0x038f0201, 0x0e3b0001, 0x071d0101, 0x0e390001, 0x01c70301, 0x0e370001, 0x071b0101, 0x0e350001, 0x038d0201, 0x0e330001, 0x07190101, 0x0e310001, 0x00e30401, 0x0e2f0001, 0x07170101, 0x0e2d0001, 0x038b0201, 0x0e2b0001, 0x07150101, 0x0e290001, 0x01c50301, 0x0e270001, 0x07130101, 0x0e250001, 0x03890201, 0x0e230001, 0x07110101, 0x0e210001, 0x00710501, 0x0e1f0001, 0x070f0101, 0x0e1d0001, 0x03870201, 0x0e1b0001, 0x070d0101, 0x0e190001, 0x01c30301, 0x0e170001, 0x070b0101, 0x0e150001, 0x03850201, 0x0e130001, 0x07090101, 0x0e110001, 0x00e10401, 0x0e0f0001, 0x07070101, 0x0e0d0001, 0x03830201, 0x0e0b0001, 0x07050101, 0x0e090001, 0x01c10301, 0x0e070001, 0x07030101, 0x0e050001, 0x03810201, 0x0e030001, 0x07010101, 0x0e010001, + 0x00073601, 0x0dff0001, 0x06ff0101, 0x0dfd0001, 0x037f0201, 0x0dfb0001, 0x06fd0101, 0x0df90001, 0x01bf0301, 0x0df70001, 0x06fb0101, 0x0df50001, 0x037d0201, 0x0df30001, 0x06f90101, 0x0df10001, 0x00df0401, 0x0def0001, 0x06f70101, 0x0ded0001, 0x037b0201, 0x0deb0001, 0x06f50101, 0x0de90001, 0x01bd0301, 0x0de70001, 0x06f30101, 0x0de50001, 0x03790201, 0x0de30001, 0x06f10101, 0x0de10001, 0x006f0501, 0x0ddf0001, 0x06ef0101, 0x0ddd0001, 0x03770201, 0x0ddb0001, 0x06ed0101, 0x0dd90001, 0x01bb0301, 0x0dd70001, 0x06eb0101, 0x0dd50001, 0x03750201, 0x0dd30001, 0x06e90101, 0x0dd10001, 0x00dd0401, 0x0dcf0001, 0x06e70101, 0x0dcd0001, 0x03730201, 0x0dcb0001, 0x06e50101, 0x0dc90001, 0x01b90301, 0x0dc70001, 0x06e30101, 0x0dc50001, 0x03710201, 0x0dc30001, 0x06e10101, 0x0dc10001, 0x00370601, 0x0dbf0001, 0x06df0101, 0x0dbd0001, 0x036f0201, 0x0dbb0001, 0x06dd0101, 0x0db90001, 0x01b70301, 0x0db70001, 0x06db0101, 0x0db50001, 0x036d0201, 0x0db30001, 0x06d90101, 0x0db10001, 0x00db0401, 0x0daf0001, 0x06d70101, 0x0dad0001, 0x036b0201, 0x0dab0001, 0x06d50101, 0x0da90001, 0x01b50301, 0x0da70001, 0x06d30101, 0x0da50001, 0x03690201, 0x0da30001, 0x06d10101, 0x0da10001, 0x006d0501, 0x0d9f0001, 0x06cf0101, 0x0d9d0001, 0x03670201, 0x0d9b0001, 0x06cd0101, 0x0d990001, 0x01b30301, 0x0d970001, 0x06cb0101, 0x0d950001, 0x03650201, 0x0d930001, 0x06c90101, 0x0d910001, 0x00d90401, 0x0d8f0001, 0x06c70101, 0x0d8d0001, 0x03630201, 0x0d8b0001, 0x06c50101, 0x0d890001, 0x01b10301, 0x0d870001, 0x06c30101, 0x0d850001, 0x03610201, 0x0d830001, 0x06c10101, 0x0d810001, 0x001b1601, 0x0d7f0001, 0x06bf0101, 0x0d7d0001, 0x035f0201, 0x0d7b0001, 0x06bd0101, 0x0d790001, 0x01af0301, 0x0d770001, 0x06bb0101, 0x0d750001, 0x035d0201, 0x0d730001, 0x06b90101, 0x0d710001, 0x00d70401, 0x0d6f0001, 0x06b70101, 0x0d6d0001, 0x035b0201, 0x0d6b0001, 0x06b50101, 0x0d690001, 0x01ad0301, 0x0d670001, 0x06b30101, 0x0d650001, 0x03590201, 0x0d630001, 0x06b10101, 0x0d610001, 0x006b0501, 0x0d5f0001, 0x06af0101, 0x0d5d0001, 0x03570201, 0x0d5b0001, 0x06ad0101, 0x0d590001, 0x01ab0301, 0x0d570001, 0x06ab0101, 0x0d550001, 0x03550201, 0x0d530001, 0x06a90101, 0x0d510001, 0x00d50401, 0x0d4f0001, 0x06a70101, 0x0d4d0001, 0x03530201, 0x0d4b0001, 0x06a50101, 0x0d490001, 0x01a90301, 0x0d470001, 0x06a30101, 0x0d450001, 0x03510201, 0x0d430001, 0x06a10101, 0x0d410001, 0x00350601, 0x0d3f0001, 0x069f0101, 0x0d3d0001, 0x034f0201, 0x0d3b0001, 0x069d0101, 0x0d390001, 0x01a70301, 0x0d370001, 0x069b0101, 0x0d350001, 0x034d0201, 0x0d330001, 0x06990101, 0x0d310001, 0x00d30401, 0x0d2f0001, 0x06970101, 0x0d2d0001, 0x034b0201, 0x0d2b0001, 0x06950101, 0x0d290001, 0x01a50301, 0x0d270001, 0x06930101, 0x0d250001, 0x03490201, 0x0d230001, 0x06910101, 0x0d210001, 0x00690501, 0x0d1f0001, 0x068f0101, 0x0d1d0001, 0x03470201, 0x0d1b0001, 0x068d0101, 0x0d190001, 0x01a30301, 0x0d170001, 0x068b0101, 0x0d150001, 0x03450201, 0x0d130001, 0x06890101, 0x0d110001, 0x00d10401, 0x0d0f0001, 0x06870101, 0x0d0d0001, 0x03430201, 0x0d0b0001, 0x06850101, 0x0d090001, 0x01a10301, 0x0d070001, 0x06830101, 0x0d050001, 0x03410201, 0x0d030001, 0x06810101, 0x0d010001, + 0x000d2601, 0x0cff0001, 0x067f0101, 0x0cfd0001, 0x033f0201, 0x0cfb0001, 0x067d0101, 0x0cf90001, 0x019f0301, 0x0cf70001, 0x067b0101, 0x0cf50001, 0x033d0201, 0x0cf30001, 0x06790101, 0x0cf10001, 0x00cf0401, 0x0cef0001, 0x06770101, 0x0ced0001, 0x033b0201, 0x0ceb0001, 0x06750101, 0x0ce90001, 0x019d0301, 0x0ce70001, 0x06730101, 0x0ce50001, 0x03390201, 0x0ce30001, 0x06710101, 0x0ce10001, 0x00670501, 0x0cdf0001, 0x066f0101, 0x0cdd0001, 0x03370201, 0x0cdb0001, 0x066d0101, 0x0cd90001, 0x019b0301, 0x0cd70001, 0x066b0101, 0x0cd50001, 0x03350201, 0x0cd30001, 0x06690101, 0x0cd10001, 0x00cd0401, 0x0ccf0001, 0x06670101, 0x0ccd0001, 0x03330201, 0x0ccb0001, 0x06650101, 0x0cc90001, 0x01990301, 0x0cc70001, 0x06630101, 0x0cc50001, 0x03310201, 0x0cc30001, 0x06610101, 0x0cc10001, 0x00330601, 0x0cbf0001, 0x065f0101, 0x0cbd0001, 0x032f0201, 0x0cbb0001, 0x065d0101, 0x0cb90001, 0x01970301, 0x0cb70001, 0x065b0101, 0x0cb50001, 0x032d0201, 0x0cb30001, 0x06590101, 0x0cb10001, 0x00cb0401, 0x0caf0001, 0x06570101, 0x0cad0001, 0x032b0201, 0x0cab0001, 0x06550101, 0x0ca90001, 0x01950301, 0x0ca70001, 0x06530101, 0x0ca50001, 0x03290201, 0x0ca30001, 0x06510101, 0x0ca10001, 0x00650501, 0x0c9f0001, 0x064f0101, 0x0c9d0001, 0x03270201, 0x0c9b0001, 0x064d0101, 0x0c990001, 0x01930301, 0x0c970001, 0x064b0101, 0x0c950001, 0x03250201, 0x0c930001, 0x06490101, 0x0c910001, 0x00c90401, 0x0c8f0001, 0x06470101, 0x0c8d0001, 0x03230201, 0x0c8b0001, 0x06450101, 0x0c890001, 0x01910301, 0x0c870001, 0x06430101, 0x0c850001, 0x03210201, 0x0c830001, 0x06410101, 0x0c810001, 0x00191601, 0x0c7f0001, 0x063f0101, 0x0c7d0001, 0x031f0201, 0x0c7b0001, 0x063d0101, 0x0c790001, 0x018f0301, 0x0c770001, 0x063b0101, 0x0c750001, 0x031d0201, 0x0c730001, 0x06390101, 0x0c710001, 0x00c70401, 0x0c6f0001, 0x06370101, 0x0c6d0001, 0x031b0201, 0x0c6b0001, 0x06350101, 0x0c690001, 0x018d0301, 0x0c670001, 0x06330101, 0x0c650001, 0x03190201, 0x0c630001, 0x06310101, 0x0c610001, 0x00630501, 0x0c5f0001, 0x062f0101, 0x0c5d0001, 0x03170201, 0x0c5b0001, 0x062d0101, 0x0c590001, 0x018b0301, 0x0c570001, 0x062b0101, 0x0c550001, 0x03150201, 0x0c530001, 0x06290101, 0x0c510001, 0x00c50401, 0x0c4f0001, 0x06270101, 0x0c4d0001, 0x03130201, 0x0c4b0001, 0x06250101, 0x0c490001, 0x01890301, 0x0c470001, 0x06230101, 0x0c450001, 0x03110201, 0x0c430001, 0x06210101, 0x0c410001, 0x00310601, 0x0c3f0001, 0x061f0101, 0x0c3d0001, 0x030f0201, 0x0c3b0001, 0x061d0101, 0x0c390001, 0x01870301, 0x0c370001, 0x061b0101, 0x0c350001, 0x030d0201, 0x0c330001, 0x06190101, 0x0c310001, 0x00c30401, 0x0c2f0001, 0x06170101, 0x0c2d0001, 0x030b0201, 0x0c2b0001, 0x06150101, 0x0c290001, 0x01850301, 0x0c270001, 0x06130101, 0x0c250001, 0x03090201, 0x0c230001, 0x06110101, 0x0c210001, 0x00610501, 0x0c1f0001, 0x060f0101, 0x0c1d0001, 0x03070201, 0x0c1b0001, 0x060d0101, 0x0c190001, 0x01830301, 0x0c170001, 0x060b0101, 0x0c150001, 0x03050201, 0x0c130001, 0x06090101, 0x0c110001, 0x00c10401, 0x0c0f0001, 0x06070101, 0x0c0d0001, 0x03030201, 0x0c0b0001, 0x06050101, 0x0c090001, 0x01810301, 0x0c070001, 0x06030101, 0x0c050001, 0x03010201, 0x0c030001, 0x06010101, 0x0c010001, + 0x00034601, 0x0bff0001, 0x05ff0101, 0x0bfd0001, 0x02ff0201, 0x0bfb0001, 0x05fd0101, 0x0bf90001, 0x017f0301, 0x0bf70001, 0x05fb0101, 0x0bf50001, 0x02fd0201, 0x0bf30001, 0x05f90101, 0x0bf10001, 0x00bf0401, 0x0bef0001, 0x05f70101, 0x0bed0001, 0x02fb0201, 0x0beb0001, 0x05f50101, 0x0be90001, 0x017d0301, 0x0be70001, 0x05f30101, 0x0be50001, 0x02f90201, 0x0be30001, 0x05f10101, 0x0be10001, 0x005f0501, 0x0bdf0001, 0x05ef0101, 0x0bdd0001, 0x02f70201, 0x0bdb0001, 0x05ed0101, 0x0bd90001, 0x017b0301, 0x0bd70001, 0x05eb0101, 0x0bd50001, 0x02f50201, 0x0bd30001, 0x05e90101, 0x0bd10001, 0x00bd0401, 0x0bcf0001, 0x05e70101, 0x0bcd0001, 0x02f30201, 0x0bcb0001, 0x05e50101, 0x0bc90001, 0x01790301, 0x0bc70001, 0x05e30101, 0x0bc50001, 0x02f10201, 0x0bc30001, 0x05e10101, 0x0bc10001, 0x002f0601, 0x0bbf0001, 0x05df0101, 0x0bbd0001, 0x02ef0201, 0x0bbb0001, 0x05dd0101, 0x0bb90001, 0x01770301, 0x0bb70001, 0x05db0101, 0x0bb50001, 0x02ed0201, 0x0bb30001, 0x05d90101, 0x0bb10001, 0x00bb0401, 0x0baf0001, 0x05d70101, 0x0bad0001, 0x02eb0201, 0x0bab0001, 0x05d50101, 0x0ba90001, 0x01750301, 0x0ba70001, 0x05d30101, 0x0ba50001, 0x02e90201, 0x0ba30001, 0x05d10101, 0x0ba10001, 0x005d0501, 0x0b9f0001, 0x05cf0101, 0x0b9d0001, 0x02e70201, 0x0b9b0001, 0x05cd0101, 0x0b990001, 0x01730301, 0x0b970001, 0x05cb0101, 0x0b950001, 0x02e50201, 0x0b930001, 0x05c90101, 0x0b910001, 0x00b90401, 0x0b8f0001, 0x05c70101, 0x0b8d0001, 0x02e30201, 0x0b8b0001, 0x05c50101, 0x0b890001, 0x01710301, 0x0b870001, 0x05c30101, 0x0b850001, 0x02e10201, 0x0b830001, 0x05c10101, 0x0b810001, 0x00171601, 0x0b7f0001, 0x05bf0101, 0x0b7d0001, 0x02df0201, 0x0b7b0001, 0x05bd0101, 0x0b790001, 0x016f0301, 0x0b770001, 0x05bb0101, 0x0b750001, 0x02dd0201, 0x0b730001, 0x05b90101, 0x0b710001, 0x00b70401, 0x0b6f0001, 0x05b70101, 0x0b6d0001, 0x02db0201, 0x0b6b0001, 0x05b50101, 0x0b690001, 0x016d0301, 0x0b670001, 0x05b30101, 0x0b650001, 0x02d90201, 0x0b630001, 0x05b10101, 0x0b610001, 0x005b0501, 0x0b5f0001, 0x05af0101, 0x0b5d0001, 0x02d70201, 0x0b5b0001, 0x05ad0101, 0x0b590001, 0x016b0301, 0x0b570001, 0x05ab0101, 0x0b550001, 0x02d50201, 0x0b530001, 0x05a90101, 0x0b510001, 0x00b50401, 0x0b4f0001, 0x05a70101, 0x0b4d0001, 0x02d30201, 0x0b4b0001, 0x05a50101, 0x0b490001, 0x01690301, 0x0b470001, 0x05a30101, 0x0b450001, 0x02d10201, 0x0b430001, 0x05a10101, 0x0b410001, 0x002d0601, 0x0b3f0001, 0x059f0101, 0x0b3d0001, 0x02cf0201, 0x0b3b0001, 0x059d0101, 0x0b390001, 0x01670301, 0x0b370001, 0x059b0101, 0x0b350001, 0x02cd0201, 0x0b330001, 0x05990101, 0x0b310001, 0x00b30401, 0x0b2f0001, 0x05970101, 0x0b2d0001, 0x02cb0201, 0x0b2b0001, 0x05950101, 0x0b290001, 0x01650301, 0x0b270001, 0x05930101, 0x0b250001, 0x02c90201, 0x0b230001, 0x05910101, 0x0b210001, 0x00590501, 0x0b1f0001, 0x058f0101, 0x0b1d0001, 0x02c70201, 0x0b1b0001, 0x058d0101, 0x0b190001, 0x01630301, 0x0b170001, 0x058b0101, 0x0b150001, 0x02c50201, 0x0b130001, 0x05890101, 0x0b110001, 0x00b10401, 0x0b0f0001, 0x05870101, 0x0b0d0001, 0x02c30201, 0x0b0b0001, 0x05850101, 0x0b090001, 0x01610301, 0x0b070001, 0x05830101, 0x0b050001, 0x02c10201, 0x0b030001, 0x05810101, 0x0b010001, + 0x000b2601, 0x0aff0001, 0x057f0101, 0x0afd0001, 0x02bf0201, 0x0afb0001, 0x057d0101, 0x0af90001, 0x015f0301, 0x0af70001, 0x057b0101, 0x0af50001, 0x02bd0201, 0x0af30001, 0x05790101, 0x0af10001, 0x00af0401, 0x0aef0001, 0x05770101, 0x0aed0001, 0x02bb0201, 0x0aeb0001, 0x05750101, 0x0ae90001, 0x015d0301, 0x0ae70001, 0x05730101, 0x0ae50001, 0x02b90201, 0x0ae30001, 0x05710101, 0x0ae10001, 0x00570501, 0x0adf0001, 0x056f0101, 0x0add0001, 0x02b70201, 0x0adb0001, 0x056d0101, 0x0ad90001, 0x015b0301, 0x0ad70001, 0x056b0101, 0x0ad50001, 0x02b50201, 0x0ad30001, 0x05690101, 0x0ad10001, 0x00ad0401, 0x0acf0001, 0x05670101, 0x0acd0001, 0x02b30201, 0x0acb0001, 0x05650101, 0x0ac90001, 0x01590301, 0x0ac70001, 0x05630101, 0x0ac50001, 0x02b10201, 0x0ac30001, 0x05610101, 0x0ac10001, 0x002b0601, 0x0abf0001, 0x055f0101, 0x0abd0001, 0x02af0201, 0x0abb0001, 0x055d0101, 0x0ab90001, 0x01570301, 0x0ab70001, 0x055b0101, 0x0ab50001, 0x02ad0201, 0x0ab30001, 0x05590101, 0x0ab10001, 0x00ab0401, 0x0aaf0001, 0x05570101, 0x0aad0001, 0x02ab0201, 0x0aab0001, 0x05550101, 0x0aa90001, 0x01550301, 0x0aa70001, 0x05530101, 0x0aa50001, 0x02a90201, 0x0aa30001, 0x05510101, 0x0aa10001, 0x00550501, 0x0a9f0001, 0x054f0101, 0x0a9d0001, 0x02a70201, 0x0a9b0001, 0x054d0101, 0x0a990001, 0x01530301, 0x0a970001, 0x054b0101, 0x0a950001, 0x02a50201, 0x0a930001, 0x05490101, 0x0a910001, 0x00a90401, 0x0a8f0001, 0x05470101, 0x0a8d0001, 0x02a30201, 0x0a8b0001, 0x05450101, 0x0a890001, 0x01510301, 0x0a870001, 0x05430101, 0x0a850001, 0x02a10201, 0x0a830001, 0x05410101, 0x0a810001, 0x00151601, 0x0a7f0001, 0x053f0101, 0x0a7d0001, 0x029f0201, 0x0a7b0001, 0x053d0101, 0x0a790001, 0x014f0301, 0x0a770001, 0x053b0101, 0x0a750001, 0x029d0201, 0x0a730001, 0x05390101, 0x0a710001, 0x00a70401, 0x0a6f0001, 0x05370101, 0x0a6d0001, 0x029b0201, 0x0a6b0001, 0x05350101, 0x0a690001, 0x014d0301, 0x0a670001, 0x05330101, 0x0a650001, 0x02990201, 0x0a630001, 0x05310101, 0x0a610001, 0x00530501, 0x0a5f0001, 0x052f0101, 0x0a5d0001, 0x02970201, 0x0a5b0001, 0x052d0101, 0x0a590001, 0x014b0301, 0x0a570001, 0x052b0101, 0x0a550001, 0x02950201, 0x0a530001, 0x05290101, 0x0a510001, 0x00a50401, 0x0a4f0001, 0x05270101, 0x0a4d0001, 0x02930201, 0x0a4b0001, 0x05250101, 0x0a490001, 0x01490301, 0x0a470001, 0x05230101, 0x0a450001, 0x02910201, 0x0a430001, 0x05210101, 0x0a410001, 0x00290601, 0x0a3f0001, 0x051f0101, 0x0a3d0001, 0x028f0201, 0x0a3b0001, 0x051d0101, 0x0a390001, 0x01470301, 0x0a370001, 0x051b0101, 0x0a350001, 0x028d0201, 0x0a330001, 0x05190101, 0x0a310001, 0x00a30401, 0x0a2f0001, 0x05170101, 0x0a2d0001, 0x028b0201, 0x0a2b0001, 0x05150101, 0x0a290001, 0x01450301, 0x0a270001, 0x05130101, 0x0a250001, 0x02890201, 0x0a230001, 0x05110101, 0x0a210001, 0x00510501, 0x0a1f0001, 0x050f0101, 0x0a1d0001, 0x02870201, 0x0a1b0001, 0x050d0101, 0x0a190001, 0x01430301, 0x0a170001, 0x050b0101, 0x0a150001, 0x02850201, 0x0a130001, 0x05090101, 0x0a110001, 0x00a10401, 0x0a0f0001, 0x05070101, 0x0a0d0001, 0x02830201, 0x0a0b0001, 0x05050101, 0x0a090001, 0x01410301, 0x0a070001, 0x05030101, 0x0a050001, 0x02810201, 0x0a030001, 0x05010101, 0x0a010001, + 0x00053601, 0x09ff0001, 0x04ff0101, 0x09fd0001, 0x027f0201, 0x09fb0001, 0x04fd0101, 0x09f90001, 0x013f0301, 0x09f70001, 0x04fb0101, 0x09f50001, 0x027d0201, 0x09f30001, 0x04f90101, 0x09f10001, 0x009f0401, 0x09ef0001, 0x04f70101, 0x09ed0001, 0x027b0201, 0x09eb0001, 0x04f50101, 0x09e90001, 0x013d0301, 0x09e70001, 0x04f30101, 0x09e50001, 0x02790201, 0x09e30001, 0x04f10101, 0x09e10001, 0x004f0501, 0x09df0001, 0x04ef0101, 0x09dd0001, 0x02770201, 0x09db0001, 0x04ed0101, 0x09d90001, 0x013b0301, 0x09d70001, 0x04eb0101, 0x09d50001, 0x02750201, 0x09d30001, 0x04e90101, 0x09d10001, 0x009d0401, 0x09cf0001, 0x04e70101, 0x09cd0001, 0x02730201, 0x09cb0001, 0x04e50101, 0x09c90001, 0x01390301, 0x09c70001, 0x04e30101, 0x09c50001, 0x02710201, 0x09c30001, 0x04e10101, 0x09c10001, 0x00270601, 0x09bf0001, 0x04df0101, 0x09bd0001, 0x026f0201, 0x09bb0001, 0x04dd0101, 0x09b90001, 0x01370301, 0x09b70001, 0x04db0101, 0x09b50001, 0x026d0201, 0x09b30001, 0x04d90101, 0x09b10001, 0x009b0401, 0x09af0001, 0x04d70101, 0x09ad0001, 0x026b0201, 0x09ab0001, 0x04d50101, 0x09a90001, 0x01350301, 0x09a70001, 0x04d30101, 0x09a50001, 0x02690201, 0x09a30001, 0x04d10101, 0x09a10001, 0x004d0501, 0x099f0001, 0x04cf0101, 0x099d0001, 0x02670201, 0x099b0001, 0x04cd0101, 0x09990001, 0x01330301, 0x09970001, 0x04cb0101, 0x09950001, 0x02650201, 0x09930001, 0x04c90101, 0x09910001, 0x00990401, 0x098f0001, 0x04c70101, 0x098d0001, 0x02630201, 0x098b0001, 0x04c50101, 0x09890001, 0x01310301, 0x09870001, 0x04c30101, 0x09850001, 0x02610201, 0x09830001, 0x04c10101, 0x09810001, 0x00131601, 0x097f0001, 0x04bf0101, 0x097d0001, 0x025f0201, 0x097b0001, 0x04bd0101, 0x09790001, 0x012f0301, 0x09770001, 0x04bb0101, 0x09750001, 0x025d0201, 0x09730001, 0x04b90101, 0x09710001, 0x00970401, 0x096f0001, 0x04b70101, 0x096d0001, 0x025b0201, 0x096b0001, 0x04b50101, 0x09690001, 0x012d0301, 0x09670001, 0x04b30101, 0x09650001, 0x02590201, 0x09630001, 0x04b10101, 0x09610001, 0x004b0501, 0x095f0001, 0x04af0101, 0x095d0001, 0x02570201, 0x095b0001, 0x04ad0101, 0x09590001, 0x012b0301, 0x09570001, 0x04ab0101, 0x09550001, 0x02550201, 0x09530001, 0x04a90101, 0x09510001, 0x00950401, 0x094f0001, 0x04a70101, 0x094d0001, 0x02530201, 0x094b0001, 0x04a50101, 0x09490001, 0x01290301, 0x09470001, 0x04a30101, 0x09450001, 0x02510201, 0x09430001, 0x04a10101, 0x09410001, 0x00250601, 0x093f0001, 0x049f0101, 0x093d0001, 0x024f0201, 0x093b0001, 0x049d0101, 0x09390001, 0x01270301, 0x09370001, 0x049b0101, 0x09350001, 0x024d0201, 0x09330001, 0x04990101, 0x09310001, 0x00930401, 0x092f0001, 0x04970101, 0x092d0001, 0x024b0201, 0x092b0001, 0x04950101, 0x09290001, 0x01250301, 0x09270001, 0x04930101, 0x09250001, 0x02490201, 0x09230001, 0x04910101, 0x09210001, 0x00490501, 0x091f0001, 0x048f0101, 0x091d0001, 0x02470201, 0x091b0001, 0x048d0101, 0x09190001, 0x01230301, 0x09170001, 0x048b0101, 0x09150001, 0x02450201, 0x09130001, 0x04890101, 0x09110001, 0x00910401, 0x090f0001, 0x04870101, 0x090d0001, 0x02430201, 0x090b0001, 0x04850101, 0x09090001, 0x01210301, 0x09070001, 0x04830101, 0x09050001, 0x02410201, 0x09030001, 0x04810101, 0x09010001, + 0x00092601, 0x08ff0001, 0x047f0101, 0x08fd0001, 0x023f0201, 0x08fb0001, 0x047d0101, 0x08f90001, 0x011f0301, 0x08f70001, 0x047b0101, 0x08f50001, 0x023d0201, 0x08f30001, 0x04790101, 0x08f10001, 0x008f0401, 0x08ef0001, 0x04770101, 0x08ed0001, 0x023b0201, 0x08eb0001, 0x04750101, 0x08e90001, 0x011d0301, 0x08e70001, 0x04730101, 0x08e50001, 0x02390201, 0x08e30001, 0x04710101, 0x08e10001, 0x00470501, 0x08df0001, 0x046f0101, 0x08dd0001, 0x02370201, 0x08db0001, 0x046d0101, 0x08d90001, 0x011b0301, 0x08d70001, 0x046b0101, 0x08d50001, 0x02350201, 0x08d30001, 0x04690101, 0x08d10001, 0x008d0401, 0x08cf0001, 0x04670101, 0x08cd0001, 0x02330201, 0x08cb0001, 0x04650101, 0x08c90001, 0x01190301, 0x08c70001, 0x04630101, 0x08c50001, 0x02310201, 0x08c30001, 0x04610101, 0x08c10001, 0x00230601, 0x08bf0001, 0x045f0101, 0x08bd0001, 0x022f0201, 0x08bb0001, 0x045d0101, 0x08b90001, 0x01170301, 0x08b70001, 0x045b0101, 0x08b50001, 0x022d0201, 0x08b30001, 0x04590101, 0x08b10001, 0x008b0401, 0x08af0001, 0x04570101, 0x08ad0001, 0x022b0201, 0x08ab0001, 0x04550101, 0x08a90001, 0x01150301, 0x08a70001, 0x04530101, 0x08a50001, 0x02290201, 0x08a30001, 0x04510101, 0x08a10001, 0x00450501, 0x089f0001, 0x044f0101, 0x089d0001, 0x02270201, 0x089b0001, 0x044d0101, 0x08990001, 0x01130301, 0x08970001, 0x044b0101, 0x08950001, 0x02250201, 0x08930001, 0x04490101, 0x08910001, 0x00890401, 0x088f0001, 0x04470101, 0x088d0001, 0x02230201, 0x088b0001, 0x04450101, 0x08890001, 0x01110301, 0x08870001, 0x04430101, 0x08850001, 0x02210201, 0x08830001, 0x04410101, 0x08810001, 0x00111601, 0x087f0001, 0x043f0101, 0x087d0001, 0x021f0201, 0x087b0001, 0x043d0101, 0x08790001, 0x010f0301, 0x08770001, 0x043b0101, 0x08750001, 0x021d0201, 0x08730001, 0x04390101, 0x08710001, 0x00870401, 0x086f0001, 0x04370101, 0x086d0001, 0x021b0201, 0x086b0001, 0x04350101, 0x08690001, 0x010d0301, 0x08670001, 0x04330101, 0x08650001, 0x02190201, 0x08630001, 0x04310101, 0x08610001, 0x00430501, 0x085f0001, 0x042f0101, 0x085d0001, 0x02170201, 0x085b0001, 0x042d0101, 0x08590001, 0x010b0301, 0x08570001, 0x042b0101, 0x08550001, 0x02150201, 0x08530001, 0x04290101, 0x08510001, 0x00850401, 0x084f0001, 0x04270101, 0x084d0001, 0x02130201, 0x084b0001, 0x04250101, 0x08490001, 0x01090301, 0x08470001, 0x04230101, 0x08450001, 0x02110201, 0x08430001, 0x04210101, 0x08410001, 0x00210601, 0x083f0001, 0x041f0101, 0x083d0001, 0x020f0201, 0x083b0001, 0x041d0101, 0x08390001, 0x01070301, 0x08370001, 0x041b0101, 0x08350001, 0x020d0201, 0x08330001, 0x04190101, 0x08310001, 0x00830401, 0x082f0001, 0x04170101, 0x082d0001, 0x020b0201, 0x082b0001, 0x04150101, 0x08290001, 0x01050301, 0x08270001, 0x04130101, 0x08250001, 0x02090201, 0x08230001, 0x04110101, 0x08210001, 0x00410501, 0x081f0001, 0x040f0101, 0x081d0001, 0x02070201, 0x081b0001, 0x040d0101, 0x08190001, 0x01030301, 0x08170001, 0x040b0101, 0x08150001, 0x02050201, 0x08130001, 0x04090101, 0x08110001, 0x00810401, 0x080f0001, 0x04070101, 0x080d0001, 0x02030201, 0x080b0001, 0x04050101, 0x08090001, 0x01010301, 0x08070001, 0x04030101, 0x08050001, 0x02010201, 0x08030001, 0x04010101, 0x08010001, + 0x00015601, 0x07ff0001, 0x03ff0101, 0x07fd0001, 0x01ff0201, 0x07fb0001, 0x03fd0101, 0x07f90001, 0x00ff0301, 0x07f70001, 0x03fb0101, 0x07f50001, 0x01fd0201, 0x07f30001, 0x03f90101, 0x07f10001, 0x007f0401, 0x07ef0001, 0x03f70101, 0x07ed0001, 0x01fb0201, 0x07eb0001, 0x03f50101, 0x07e90001, 0x00fd0301, 0x07e70001, 0x03f30101, 0x07e50001, 0x01f90201, 0x07e30001, 0x03f10101, 0x07e10001, 0x003f0501, 0x07df0001, 0x03ef0101, 0x07dd0001, 0x01f70201, 0x07db0001, 0x03ed0101, 0x07d90001, 0x00fb0301, 0x07d70001, 0x03eb0101, 0x07d50001, 0x01f50201, 0x07d30001, 0x03e90101, 0x07d10001, 0x007d0401, 0x07cf0001, 0x03e70101, 0x07cd0001, 0x01f30201, 0x07cb0001, 0x03e50101, 0x07c90001, 0x00f90301, 0x07c70001, 0x03e30101, 0x07c50001, 0x01f10201, 0x07c30001, 0x03e10101, 0x07c10001, 0x001f0601, 0x07bf0001, 0x03df0101, 0x07bd0001, 0x01ef0201, 0x07bb0001, 0x03dd0101, 0x07b90001, 0x00f70301, 0x07b70001, 0x03db0101, 0x07b50001, 0x01ed0201, 0x07b30001, 0x03d90101, 0x07b10001, 0x007b0401, 0x07af0001, 0x03d70101, 0x07ad0001, 0x01eb0201, 0x07ab0001, 0x03d50101, 0x07a90001, 0x00f50301, 0x07a70001, 0x03d30101, 0x07a50001, 0x01e90201, 0x07a30001, 0x03d10101, 0x07a10001, 0x003d0501, 0x079f0001, 0x03cf0101, 0x079d0001, 0x01e70201, 0x079b0001, 0x03cd0101, 0x07990001, 0x00f30301, 0x07970001, 0x03cb0101, 0x07950001, 0x01e50201, 0x07930001, 0x03c90101, 0x07910001, 0x00790401, 0x078f0001, 0x03c70101, 0x078d0001, 0x01e30201, 0x078b0001, 0x03c50101, 0x07890001, 0x00f10301, 0x07870001, 0x03c30101, 0x07850001, 0x01e10201, 0x07830001, 0x03c10101, 0x07810001, 0x000f1601, 0x077f0001, 0x03bf0101, 0x077d0001, 0x01df0201, 0x077b0001, 0x03bd0101, 0x07790001, 0x00ef0301, 0x07770001, 0x03bb0101, 0x07750001, 0x01dd0201, 0x07730001, 0x03b90101, 0x07710001, 0x00770401, 0x076f0001, 0x03b70101, 0x076d0001, 0x01db0201, 0x076b0001, 0x03b50101, 0x07690001, 0x00ed0301, 0x07670001, 0x03b30101, 0x07650001, 0x01d90201, 0x07630001, 0x03b10101, 0x07610001, 0x003b0501, 0x075f0001, 0x03af0101, 0x075d0001, 0x01d70201, 0x075b0001, 0x03ad0101, 0x07590001, 0x00eb0301, 0x07570001, 0x03ab0101, 0x07550001, 0x01d50201, 0x07530001, 0x03a90101, 0x07510001, 0x00750401, 0x074f0001, 0x03a70101, 0x074d0001, 0x01d30201, 0x074b0001, 0x03a50101, 0x07490001, 0x00e90301, 0x07470001, 0x03a30101, 0x07450001, 0x01d10201, 0x07430001, 0x03a10101, 0x07410001, 0x001d0601, 0x073f0001, 0x039f0101, 0x073d0001, 0x01cf0201, 0x073b0001, 0x039d0101, 0x07390001, 0x00e70301, 0x07370001, 0x039b0101, 0x07350001, 0x01cd0201, 0x07330001, 0x03990101, 0x07310001, 0x00730401, 0x072f0001, 0x03970101, 0x072d0001, 0x01cb0201, 0x072b0001, 0x03950101, 0x07290001, 0x00e50301, 0x07270001, 0x03930101, 0x07250001, 0x01c90201, 0x07230001, 0x03910101, 0x07210001, 0x00390501, 0x071f0001, 0x038f0101, 0x071d0001, 0x01c70201, 0x071b0001, 0x038d0101, 0x07190001, 0x00e30301, 0x07170001, 0x038b0101, 0x07150001, 0x01c50201, 0x07130001, 0x03890101, 0x07110001, 0x00710401, 0x070f0001, 0x03870101, 0x070d0001, 0x01c30201, 0x070b0001, 0x03850101, 0x07090001, 0x00e10301, 0x07070001, 0x03830101, 0x07050001, 0x01c10201, 0x07030001, 0x03810101, 0x07010001, + 0x00072601, 0x06ff0001, 0x037f0101, 0x06fd0001, 0x01bf0201, 0x06fb0001, 0x037d0101, 0x06f90001, 0x00df0301, 0x06f70001, 0x037b0101, 0x06f50001, 0x01bd0201, 0x06f30001, 0x03790101, 0x06f10001, 0x006f0401, 0x06ef0001, 0x03770101, 0x06ed0001, 0x01bb0201, 0x06eb0001, 0x03750101, 0x06e90001, 0x00dd0301, 0x06e70001, 0x03730101, 0x06e50001, 0x01b90201, 0x06e30001, 0x03710101, 0x06e10001, 0x00370501, 0x06df0001, 0x036f0101, 0x06dd0001, 0x01b70201, 0x06db0001, 0x036d0101, 0x06d90001, 0x00db0301, 0x06d70001, 0x036b0101, 0x06d50001, 0x01b50201, 0x06d30001, 0x03690101, 0x06d10001, 0x006d0401, 0x06cf0001, 0x03670101, 0x06cd0001, 0x01b30201, 0x06cb0001, 0x03650101, 0x06c90001, 0x00d90301, 0x06c70001, 0x03630101, 0x06c50001, 0x01b10201, 0x06c30001, 0x03610101, 0x06c10001, 0x001b0601, 0x06bf0001, 0x035f0101, 0x06bd0001, 0x01af0201, 0x06bb0001, 0x035d0101, 0x06b90001, 0x00d70301, 0x06b70001, 0x035b0101, 0x06b50001, 0x01ad0201, 0x06b30001, 0x03590101, 0x06b10001, 0x006b0401, 0x06af0001, 0x03570101, 0x06ad0001, 0x01ab0201, 0x06ab0001, 0x03550101, 0x06a90001, 0x00d50301, 0x06a70001, 0x03530101, 0x06a50001, 0x01a90201, 0x06a30001, 0x03510101, 0x06a10001, 0x00350501, 0x069f0001, 0x034f0101, 0x069d0001, 0x01a70201, 0x069b0001, 0x034d0101, 0x06990001, 0x00d30301, 0x06970001, 0x034b0101, 0x06950001, 0x01a50201, 0x06930001, 0x03490101, 0x06910001, 0x00690401, 0x068f0001, 0x03470101, 0x068d0001, 0x01a30201, 0x068b0001, 0x03450101, 0x06890001, 0x00d10301, 0x06870001, 0x03430101, 0x06850001, 0x01a10201, 0x06830001, 0x03410101, 0x06810001, 0x000d1601, 0x067f0001, 0x033f0101, 0x067d0001, 0x019f0201, 0x067b0001, 0x033d0101, 0x06790001, 0x00cf0301, 0x06770001, 0x033b0101, 0x06750001, 0x019d0201, 0x06730001, 0x03390101, 0x06710001, 0x00670401, 0x066f0001, 0x03370101, 0x066d0001, 0x019b0201, 0x066b0001, 0x03350101, 0x06690001, 0x00cd0301, 0x06670001, 0x03330101, 0x06650001, 0x01990201, 0x06630001, 0x03310101, 0x06610001, 0x00330501, 0x065f0001, 0x032f0101, 0x065d0001, 0x01970201, 0x065b0001, 0x032d0101, 0x06590001, 0x00cb0301, 0x06570001, 0x032b0101, 0x06550001, 0x01950201, 0x06530001, 0x03290101, 0x06510001, 0x00650401, 0x064f0001, 0x03270101, 0x064d0001, 0x01930201, 0x064b0001, 0x03250101, 0x06490001, 0x00c90301, 0x06470001, 0x03230101, 0x06450001, 0x01910201, 0x06430001, 0x03210101, 0x06410001, 0x00190601, 0x063f0001, 0x031f0101, 0x063d0001, 0x018f0201, 0x063b0001, 0x031d0101, 0x06390001, 0x00c70301, 0x06370001, 0x031b0101, 0x06350001, 0x018d0201, 0x06330001, 0x03190101, 0x06310001, 0x00630401, 0x062f0001, 0x03170101, 0x062d0001, 0x018b0201, 0x062b0001, 0x03150101, 0x06290001, 0x00c50301, 0x06270001, 0x03130101, 0x06250001, 0x01890201, 0x06230001, 0x03110101, 0x06210001, 0x00310501, 0x061f0001, 0x030f0101, 0x061d0001, 0x01870201, 0x061b0001, 0x030d0101, 0x06190001, 0x00c30301, 0x06170001, 0x030b0101, 0x06150001, 0x01850201, 0x06130001, 0x03090101, 0x06110001, 0x00610401, 0x060f0001, 0x03070101, 0x060d0001, 0x01830201, 0x060b0001, 0x03050101, 0x06090001, 0x00c10301, 0x06070001, 0x03030101, 0x06050001, 0x01810201, 0x06030001, 0x03010101, 0x06010001, + 0x00033601, 0x05ff0001, 0x02ff0101, 0x05fd0001, 0x017f0201, 0x05fb0001, 0x02fd0101, 0x05f90001, 0x00bf0301, 0x05f70001, 0x02fb0101, 0x05f50001, 0x017d0201, 0x05f30001, 0x02f90101, 0x05f10001, 0x005f0401, 0x05ef0001, 0x02f70101, 0x05ed0001, 0x017b0201, 0x05eb0001, 0x02f50101, 0x05e90001, 0x00bd0301, 0x05e70001, 0x02f30101, 0x05e50001, 0x01790201, 0x05e30001, 0x02f10101, 0x05e10001, 0x002f0501, 0x05df0001, 0x02ef0101, 0x05dd0001, 0x01770201, 0x05db0001, 0x02ed0101, 0x05d90001, 0x00bb0301, 0x05d70001, 0x02eb0101, 0x05d50001, 0x01750201, 0x05d30001, 0x02e90101, 0x05d10001, 0x005d0401, 0x05cf0001, 0x02e70101, 0x05cd0001, 0x01730201, 0x05cb0001, 0x02e50101, 0x05c90001, 0x00b90301, 0x05c70001, 0x02e30101, 0x05c50001, 0x01710201, 0x05c30001, 0x02e10101, 0x05c10001, 0x00170601, 0x05bf0001, 0x02df0101, 0x05bd0001, 0x016f0201, 0x05bb0001, 0x02dd0101, 0x05b90001, 0x00b70301, 0x05b70001, 0x02db0101, 0x05b50001, 0x016d0201, 0x05b30001, 0x02d90101, 0x05b10001, 0x005b0401, 0x05af0001, 0x02d70101, 0x05ad0001, 0x016b0201, 0x05ab0001, 0x02d50101, 0x05a90001, 0x00b50301, 0x05a70001, 0x02d30101, 0x05a50001, 0x01690201, 0x05a30001, 0x02d10101, 0x05a10001, 0x002d0501, 0x059f0001, 0x02cf0101, 0x059d0001, 0x01670201, 0x059b0001, 0x02cd0101, 0x05990001, 0x00b30301, 0x05970001, 0x02cb0101, 0x05950001, 0x01650201, 0x05930001, 0x02c90101, 0x05910001, 0x00590401, 0x058f0001, 0x02c70101, 0x058d0001, 0x01630201, 0x058b0001, 0x02c50101, 0x05890001, 0x00b10301, 0x05870001, 0x02c30101, 0x05850001, 0x01610201, 0x05830001, 0x02c10101, 0x05810001, 0x000b1601, 0x057f0001, 0x02bf0101, 0x057d0001, 0x015f0201, 0x057b0001, 0x02bd0101, 0x05790001, 0x00af0301, 0x05770001, 0x02bb0101, 0x05750001, 0x015d0201, 0x05730001, 0x02b90101, 0x05710001, 0x00570401, 0x056f0001, 0x02b70101, 0x056d0001, 0x015b0201, 0x056b0001, 0x02b50101, 0x05690001, 0x00ad0301, 0x05670001, 0x02b30101, 0x05650001, 0x01590201, 0x05630001, 0x02b10101, 0x05610001, 0x002b0501, 0x055f0001, 0x02af0101, 0x055d0001, 0x01570201, 0x055b0001, 0x02ad0101, 0x05590001, 0x00ab0301, 0x05570001, 0x02ab0101, 0x05550001, 0x01550201, 0x05530001, 0x02a90101, 0x05510001, 0x00550401, 0x054f0001, 0x02a70101, 0x054d0001, 0x01530201, 0x054b0001, 0x02a50101, 0x05490001, 0x00a90301, 0x05470001, 0x02a30101, 0x05450001, 0x01510201, 0x05430001, 0x02a10101, 0x05410001, 0x00150601, 0x053f0001, 0x029f0101, 0x053d0001, 0x014f0201, 0x053b0001, 0x029d0101, 0x05390001, 0x00a70301, 0x05370001, 0x029b0101, 0x05350001, 0x014d0201, 0x05330001, 0x02990101, 0x05310001, 0x00530401, 0x052f0001, 0x02970101, 0x052d0001, 0x014b0201, 0x052b0001, 0x02950101, 0x05290001, 0x00a50301, 0x05270001, 0x02930101, 0x05250001, 0x01490201, 0x05230001, 0x02910101, 0x05210001, 0x00290501, 0x051f0001, 0x028f0101, 0x051d0001, 0x01470201, 0x051b0001, 0x028d0101, 0x05190001, 0x00a30301, 0x05170001, 0x028b0101, 0x05150001, 0x01450201, 0x05130001, 0x02890101, 0x05110001, 0x00510401, 0x050f0001, 0x02870101, 0x050d0001, 0x01430201, 0x050b0001, 0x02850101, 0x05090001, 0x00a10301, 0x05070001, 0x02830101, 0x05050001, 0x01410201, 0x05030001, 0x02810101, 0x05010001, + 0x00052601, 0x04ff0001, 0x027f0101, 0x04fd0001, 0x013f0201, 0x04fb0001, 0x027d0101, 0x04f90001, 0x009f0301, 0x04f70001, 0x027b0101, 0x04f50001, 0x013d0201, 0x04f30001, 0x02790101, 0x04f10001, 0x004f0401, 0x04ef0001, 0x02770101, 0x04ed0001, 0x013b0201, 0x04eb0001, 0x02750101, 0x04e90001, 0x009d0301, 0x04e70001, 0x02730101, 0x04e50001, 0x01390201, 0x04e30001, 0x02710101, 0x04e10001, 0x00270501, 0x04df0001, 0x026f0101, 0x04dd0001, 0x01370201, 0x04db0001, 0x026d0101, 0x04d90001, 0x009b0301, 0x04d70001, 0x026b0101, 0x04d50001, 0x01350201, 0x04d30001, 0x02690101, 0x04d10001, 0x004d0401, 0x04cf0001, 0x02670101, 0x04cd0001, 0x01330201, 0x04cb0001, 0x02650101, 0x04c90001, 0x00990301, 0x04c70001, 0x02630101, 0x04c50001, 0x01310201, 0x04c30001, 0x02610101, 0x04c10001, 0x00130601, 0x04bf0001, 0x025f0101, 0x04bd0001, 0x012f0201, 0x04bb0001, 0x025d0101, 0x04b90001, 0x00970301, 0x04b70001, 0x025b0101, 0x04b50001, 0x012d0201, 0x04b30001, 0x02590101, 0x04b10001, 0x004b0401, 0x04af0001, 0x02570101, 0x04ad0001, 0x012b0201, 0x04ab0001, 0x02550101, 0x04a90001, 0x00950301, 0x04a70001, 0x02530101, 0x04a50001, 0x01290201, 0x04a30001, 0x02510101, 0x04a10001, 0x00250501, 0x049f0001, 0x024f0101, 0x049d0001, 0x01270201, 0x049b0001, 0x024d0101, 0x04990001, 0x00930301, 0x04970001, 0x024b0101, 0x04950001, 0x01250201, 0x04930001, 0x02490101, 0x04910001, 0x00490401, 0x048f0001, 0x02470101, 0x048d0001, 0x01230201, 0x048b0001, 0x02450101, 0x04890001, 0x00910301, 0x04870001, 0x02430101, 0x04850001, 0x01210201, 0x04830001, 0x02410101, 0x04810001, 0x00091601, 0x047f0001, 0x023f0101, 0x047d0001, 0x011f0201, 0x047b0001, 0x023d0101, 0x04790001, 0x008f0301, 0x04770001, 0x023b0101, 0x04750001, 0x011d0201, 0x04730001, 0x02390101, 0x04710001, 0x00470401, 0x046f0001, 0x02370101, 0x046d0001, 0x011b0201, 0x046b0001, 0x02350101, 0x04690001, 0x008d0301, 0x04670001, 0x02330101, 0x04650001, 0x01190201, 0x04630001, 0x02310101, 0x04610001, 0x00230501, 0x045f0001, 0x022f0101, 0x045d0001, 0x01170201, 0x045b0001, 0x022d0101, 0x04590001, 0x008b0301, 0x04570001, 0x022b0101, 0x04550001, 0x01150201, 0x04530001, 0x02290101, 0x04510001, 0x00450401, 0x044f0001, 0x02270101, 0x044d0001, 0x01130201, 0x044b0001, 0x02250101, 0x04490001, 0x00890301, 0x04470001, 0x02230101, 0x04450001, 0x01110201, 0x04430001, 0x02210101, 0x04410001, 0x00110601, 0x043f0001, 0x021f0101, 0x043d0001, 0x010f0201, 0x043b0001, 0x021d0101, 0x04390001, 0x00870301, 0x04370001, 0x021b0101, 0x04350001, 0x010d0201, 0x04330001, 0x02190101, 0x04310001, 0x00430401, 0x042f0001, 0x02170101, 0x042d0001, 0x010b0201, 0x042b0001, 0x02150101, 0x04290001, 0x00850301, 0x04270001, 0x02130101, 0x04250001, 0x01090201, 0x04230001, 0x02110101, 0x04210001, 0x00210501, 0x041f0001, 0x020f0101, 0x041d0001, 0x01070201, 0x041b0001, 0x020d0101, 0x04190001, 0x00830301, 0x04170001, 0x020b0101, 0x04150001, 0x01050201, 0x04130001, 0x02090101, 0x04110001, 0x00410401, 0x040f0001, 0x02070101, 0x040d0001, 0x01030201, 0x040b0001, 0x02050101, 0x04090001, 0x00810301, 0x04070001, 0x02030101, 0x04050001, 0x01010201, 0x04030001, 0x02010101, 0x04010001, + 0x00014601, 0x03ff0001, 0x01ff0101, 0x03fd0001, 0x00ff0201, 0x03fb0001, 0x01fd0101, 0x03f90001, 0x007f0301, 0x03f70001, 0x01fb0101, 0x03f50001, 0x00fd0201, 0x03f30001, 0x01f90101, 0x03f10001, 0x003f0401, 0x03ef0001, 0x01f70101, 0x03ed0001, 0x00fb0201, 0x03eb0001, 0x01f50101, 0x03e90001, 0x007d0301, 0x03e70001, 0x01f30101, 0x03e50001, 0x00f90201, 0x03e30001, 0x01f10101, 0x03e10001, 0x001f0501, 0x03df0001, 0x01ef0101, 0x03dd0001, 0x00f70201, 0x03db0001, 0x01ed0101, 0x03d90001, 0x007b0301, 0x03d70001, 0x01eb0101, 0x03d50001, 0x00f50201, 0x03d30001, 0x01e90101, 0x03d10001, 0x003d0401, 0x03cf0001, 0x01e70101, 0x03cd0001, 0x00f30201, 0x03cb0001, 0x01e50101, 0x03c90001, 0x00790301, 0x03c70001, 0x01e30101, 0x03c50001, 0x00f10201, 0x03c30001, 0x01e10101, 0x03c10001, 0x000f0601, 0x03bf0001, 0x01df0101, 0x03bd0001, 0x00ef0201, 0x03bb0001, 0x01dd0101, 0x03b90001, 0x00770301, 0x03b70001, 0x01db0101, 0x03b50001, 0x00ed0201, 0x03b30001, 0x01d90101, 0x03b10001, 0x003b0401, 0x03af0001, 0x01d70101, 0x03ad0001, 0x00eb0201, 0x03ab0001, 0x01d50101, 0x03a90001, 0x00750301, 0x03a70001, 0x01d30101, 0x03a50001, 0x00e90201, 0x03a30001, 0x01d10101, 0x03a10001, 0x001d0501, 0x039f0001, 0x01cf0101, 0x039d0001, 0x00e70201, 0x039b0001, 0x01cd0101, 0x03990001, 0x00730301, 0x03970001, 0x01cb0101, 0x03950001, 0x00e50201, 0x03930001, 0x01c90101, 0x03910001, 0x00390401, 0x038f0001, 0x01c70101, 0x038d0001, 0x00e30201, 0x038b0001, 0x01c50101, 0x03890001, 0x00710301, 0x03870001, 0x01c30101, 0x03850001, 0x00e10201, 0x03830001, 0x01c10101, 0x03810001, 0x00071601, 0x037f0001, 0x01bf0101, 0x037d0001, 0x00df0201, 0x037b0001, 0x01bd0101, 0x03790001, 0x006f0301, 0x03770001, 0x01bb0101, 0x03750001, 0x00dd0201, 0x03730001, 0x01b90101, 0x03710001, 0x00370401, 0x036f0001, 0x01b70101, 0x036d0001, 0x00db0201, 0x036b0001, 0x01b50101, 0x03690001, 0x006d0301, 0x03670001, 0x01b30101, 0x03650001, 0x00d90201, 0x03630001, 0x01b10101, 0x03610001, 0x001b0501, 0x035f0001, 0x01af0101, 0x035d0001, 0x00d70201, 0x035b0001, 0x01ad0101, 0x03590001, 0x006b0301, 0x03570001, 0x01ab0101, 0x03550001, 0x00d50201, 0x03530001, 0x01a90101, 0x03510001, 0x00350401, 0x034f0001, 0x01a70101, 0x034d0001, 0x00d30201, 0x034b0001, 0x01a50101, 0x03490001, 0x00690301, 0x03470001, 0x01a30101, 0x03450001, 0x00d10201, 0x03430001, 0x01a10101, 0x03410001, 0x000d0601, 0x033f0001, 0x019f0101, 0x033d0001, 0x00cf0201, 0x033b0001, 0x019d0101, 0x03390001, 0x00670301, 0x03370001, 0x019b0101, 0x03350001, 0x00cd0201, 0x03330001, 0x01990101, 0x03310001, 0x00330401, 0x032f0001, 0x01970101, 0x032d0001, 0x00cb0201, 0x032b0001, 0x01950101, 0x03290001, 0x00650301, 0x03270001, 0x01930101, 0x03250001, 0x00c90201, 0x03230001, 0x01910101, 0x03210001, 0x00190501, 0x031f0001, 0x018f0101, 0x031d0001, 0x00c70201, 0x031b0001, 0x018d0101, 0x03190001, 0x00630301, 0x03170001, 0x018b0101, 0x03150001, 0x00c50201, 0x03130001, 0x01890101, 0x03110001, 0x00310401, 0x030f0001, 0x01870101, 0x030d0001, 0x00c30201, 0x030b0001, 0x01850101, 0x03090001, 0x00610301, 0x03070001, 0x01830101, 0x03050001, 0x00c10201, 0x03030001, 0x01810101, 0x03010001, + 0x00032601, 0x02ff0001, 0x017f0101, 0x02fd0001, 0x00bf0201, 0x02fb0001, 0x017d0101, 0x02f90001, 0x005f0301, 0x02f70001, 0x017b0101, 0x02f50001, 0x00bd0201, 0x02f30001, 0x01790101, 0x02f10001, 0x002f0401, 0x02ef0001, 0x01770101, 0x02ed0001, 0x00bb0201, 0x02eb0001, 0x01750101, 0x02e90001, 0x005d0301, 0x02e70001, 0x01730101, 0x02e50001, 0x00b90201, 0x02e30001, 0x01710101, 0x02e10001, 0x00170501, 0x02df0001, 0x016f0101, 0x02dd0001, 0x00b70201, 0x02db0001, 0x016d0101, 0x02d90001, 0x005b0301, 0x02d70001, 0x016b0101, 0x02d50001, 0x00b50201, 0x02d30001, 0x01690101, 0x02d10001, 0x002d0401, 0x02cf0001, 0x01670101, 0x02cd0001, 0x00b30201, 0x02cb0001, 0x01650101, 0x02c90001, 0x00590301, 0x02c70001, 0x01630101, 0x02c50001, 0x00b10201, 0x02c30001, 0x01610101, 0x02c10001, 0x000b0601, 0x02bf0001, 0x015f0101, 0x02bd0001, 0x00af0201, 0x02bb0001, 0x015d0101, 0x02b90001, 0x00570301, 0x02b70001, 0x015b0101, 0x02b50001, 0x00ad0201, 0x02b30001, 0x01590101, 0x02b10001, 0x002b0401, 0x02af0001, 0x01570101, 0x02ad0001, 0x00ab0201, 0x02ab0001, 0x01550101, 0x02a90001, 0x00550301, 0x02a70001, 0x01530101, 0x02a50001, 0x00a90201, 0x02a30001, 0x01510101, 0x02a10001, 0x00150501, 0x029f0001, 0x014f0101, 0x029d0001, 0x00a70201, 0x029b0001, 0x014d0101, 0x02990001, 0x00530301, 0x02970001, 0x014b0101, 0x02950001, 0x00a50201, 0x02930001, 0x01490101, 0x02910001, 0x00290401, 0x028f0001, 0x01470101, 0x028d0001, 0x00a30201, 0x028b0001, 0x01450101, 0x02890001, 0x00510301, 0x02870001, 0x01430101, 0x02850001, 0x00a10201, 0x02830001, 0x01410101, 0x02810001, 0x00051601, 0x027f0001, 0x013f0101, 0x027d0001, 0x009f0201, 0x027b0001, 0x013d0101, 0x02790001, 0x004f0301, 0x02770001, 0x013b0101, 0x02750001, 0x009d0201, 0x02730001, 0x01390101, 0x02710001, 0x00270401, 0x026f0001, 0x01370101, 0x026d0001, 0x009b0201, 0x026b0001, 0x01350101, 0x02690001, 0x004d0301, 0x02670001, 0x01330101, 0x02650001, 0x00990201, 0x02630001, 0x01310101, 0x02610001, 0x00130501, 0x025f0001, 0x012f0101, 0x025d0001, 0x00970201, 0x025b0001, 0x012d0101, 0x02590001, 0x004b0301, 0x02570001, 0x012b0101, 0x02550001, 0x00950201, 0x02530001, 0x01290101, 0x02510001, 0x00250401, 0x024f0001, 0x01270101, 0x024d0001, 0x00930201, 0x024b0001, 0x01250101, 0x02490001, 0x00490301, 0x02470001, 0x01230101, 0x02450001, 0x00910201, 0x02430001, 0x01210101, 0x02410001, 0x00090601, 0x023f0001, 0x011f0101, 0x023d0001, 0x008f0201, 0x023b0001, 0x011d0101, 0x02390001, 0x00470301, 0x02370001, 0x011b0101, 0x02350001, 0x008d0201, 0x02330001, 0x01190101, 0x02310001, 0x00230401, 0x022f0001, 0x01170101, 0x022d0001, 0x008b0201, 0x022b0001, 0x01150101, 0x02290001, 0x00450301, 0x02270001, 0x01130101, 0x02250001, 0x00890201, 0x02230001, 0x01110101, 0x02210001, 0x00110501, 0x021f0001, 0x010f0101, 0x021d0001, 0x00870201, 0x021b0001, 0x010d0101, 0x02190001, 0x00430301, 0x02170001, 0x010b0101, 0x02150001, 0x00850201, 0x02130001, 0x01090101, 0x02110001, 0x00210401, 0x020f0001, 0x01070101, 0x020d0001, 0x00830201, 0x020b0001, 0x01050101, 0x02090001, 0x00410301, 0x02070001, 0x01030101, 0x02050001, 0x00810201, 0x02030001, 0x01010101, 0x02010001, + 0x00013601, 0x01ff0001, 0x00ff0101, 0x01fd0001, 0x007f0201, 0x01fb0001, 0x00fd0101, 0x01f90001, 0x003f0301, 0x01f70001, 0x00fb0101, 0x01f50001, 0x007d0201, 0x01f30001, 0x00f90101, 0x01f10001, 0x001f0401, 0x01ef0001, 0x00f70101, 0x01ed0001, 0x007b0201, 0x01eb0001, 0x00f50101, 0x01e90001, 0x003d0301, 0x01e70001, 0x00f30101, 0x01e50001, 0x00790201, 0x01e30001, 0x00f10101, 0x01e10001, 0x000f0501, 0x01df0001, 0x00ef0101, 0x01dd0001, 0x00770201, 0x01db0001, 0x00ed0101, 0x01d90001, 0x003b0301, 0x01d70001, 0x00eb0101, 0x01d50001, 0x00750201, 0x01d30001, 0x00e90101, 0x01d10001, 0x001d0401, 0x01cf0001, 0x00e70101, 0x01cd0001, 0x00730201, 0x01cb0001, 0x00e50101, 0x01c90001, 0x00390301, 0x01c70001, 0x00e30101, 0x01c50001, 0x00710201, 0x01c30001, 0x00e10101, 0x01c10001, 0x00070601, 0x01bf0001, 0x00df0101, 0x01bd0001, 0x006f0201, 0x01bb0001, 0x00dd0101, 0x01b90001, 0x00370301, 0x01b70001, 0x00db0101, 0x01b50001, 0x006d0201, 0x01b30001, 0x00d90101, 0x01b10001, 0x001b0401, 0x01af0001, 0x00d70101, 0x01ad0001, 0x006b0201, 0x01ab0001, 0x00d50101, 0x01a90001, 0x00350301, 0x01a70001, 0x00d30101, 0x01a50001, 0x00690201, 0x01a30001, 0x00d10101, 0x01a10001, 0x000d0501, 0x019f0001, 0x00cf0101, 0x019d0001, 0x00670201, 0x019b0001, 0x00cd0101, 0x01990001, 0x00330301, 0x01970001, 0x00cb0101, 0x01950001, 0x00650201, 0x01930001, 0x00c90101, 0x01910001, 0x00190401, 0x018f0001, 0x00c70101, 0x018d0001, 0x00630201, 0x018b0001, 0x00c50101, 0x01890001, 0x00310301, 0x01870001, 0x00c30101, 0x01850001, 0x00610201, 0x01830001, 0x00c10101, 0x01810001, 0x00031601, 0x017f0001, 0x00bf0101, 0x017d0001, 0x005f0201, 0x017b0001, 0x00bd0101, 0x01790001, 0x002f0301, 0x01770001, 0x00bb0101, 0x01750001, 0x005d0201, 0x01730001, 0x00b90101, 0x01710001, 0x00170401, 0x016f0001, 0x00b70101, 0x016d0001, 0x005b0201, 0x016b0001, 0x00b50101, 0x01690001, 0x002d0301, 0x01670001, 0x00b30101, 0x01650001, 0x00590201, 0x01630001, 0x00b10101, 0x01610001, 0x000b0501, 0x015f0001, 0x00af0101, 0x015d0001, 0x00570201, 0x015b0001, 0x00ad0101, 0x01590001, 0x002b0301, 0x01570001, 0x00ab0101, 0x01550001, 0x00550201, 0x01530001, 0x00a90101, 0x01510001, 0x00150401, 0x014f0001, 0x00a70101, 0x014d0001, 0x00530201, 0x014b0001, 0x00a50101, 0x01490001, 0x00290301, 0x01470001, 0x00a30101, 0x01450001, 0x00510201, 0x01430001, 0x00a10101, 0x01410001, 0x00050601, 0x013f0001, 0x009f0101, 0x013d0001, 0x004f0201, 0x013b0001, 0x009d0101, 0x01390001, 0x00270301, 0x01370001, 0x009b0101, 0x01350001, 0x004d0201, 0x01330001, 0x00990101, 0x01310001, 0x00130401, 0x012f0001, 0x00970101, 0x012d0001, 0x004b0201, 0x012b0001, 0x00950101, 0x01290001, 0x00250301, 0x01270001, 0x00930101, 0x01250001, 0x00490201, 0x01230001, 0x00910101, 0x01210001, 0x00090501, 0x011f0001, 0x008f0101, 0x011d0001, 0x00470201, 0x011b0001, 0x008d0101, 0x01190001, 0x00230301, 0x01170001, 0x008b0101, 0x01150001, 0x00450201, 0x01130001, 0x00890101, 0x01110001, 0x00110401, 0x010f0001, 0x00870101, 0x010d0001, 0x00430201, 0x010b0001, 0x00850101, 0x01090001, 0x00210301, 0x01070001, 0x00830101, 0x01050001, 0x00410201, 0x01030001, 0x00810101, 0x01010001, + 0x00012601, 0x00ff0001, 0x007f0101, 0x00fd0001, 0x003f0201, 0x00fb0001, 0x007d0101, 0x00f90001, 0x001f0301, 0x00f70001, 0x007b0101, 0x00f50001, 0x003d0201, 0x00f30001, 0x00790101, 0x00f10001, 0x000f0401, 0x00ef0001, 0x00770101, 0x00ed0001, 0x003b0201, 0x00eb0001, 0x00750101, 0x00e90001, 0x001d0301, 0x00e70001, 0x00730101, 0x00e50001, 0x00390201, 0x00e30001, 0x00710101, 0x00e10001, 0x00070501, 0x00df0001, 0x006f0101, 0x00dd0001, 0x00370201, 0x00db0001, 0x006d0101, 0x00d90001, 0x001b0301, 0x00d70001, 0x006b0101, 0x00d50001, 0x00350201, 0x00d30001, 0x00690101, 0x00d10001, 0x000d0401, 0x00cf0001, 0x00670101, 0x00cd0001, 0x00330201, 0x00cb0001, 0x00650101, 0x00c90001, 0x00190301, 0x00c70001, 0x00630101, 0x00c50001, 0x00310201, 0x00c30001, 0x00610101, 0x00c10001, 0x00030601, 0x00bf0001, 0x005f0101, 0x00bd0001, 0x002f0201, 0x00bb0001, 0x005d0101, 0x00b90001, 0x00170301, 0x00b70001, 0x005b0101, 0x00b50001, 0x002d0201, 0x00b30001, 0x00590101, 0x00b10001, 0x000b0401, 0x00af0001, 0x00570101, 0x00ad0001, 0x002b0201, 0x00ab0001, 0x00550101, 0x00a90001, 0x00150301, 0x00a70001, 0x00530101, 0x00a50001, 0x00290201, 0x00a30001, 0x00510101, 0x00a10001, 0x00050501, 0x009f0001, 0x004f0101, 0x009d0001, 0x00270201, 0x009b0001, 0x004d0101, 0x00990001, 0x00130301, 0x00970001, 0x004b0101, 0x00950001, 0x00250201, 0x00930001, 0x00490101, 0x00910001, 0x00090401, 0x008f0001, 0x00470101, 0x008d0001, 0x00230201, 0x008b0001, 0x00450101, 0x00890001, 0x00110301, 0x00870001, 0x00430101, 0x00850001, 0x00210201, 0x00830001, 0x00410101, 0x00810001, 0x00011601, 0x007f0001, 0x003f0101, 0x007d0001, 0x001f0201, 0x007b0001, 0x003d0101, 0x00790001, 0x000f0301, 0x00770001, 0x003b0101, 0x00750001, 0x001d0201, 0x00730001, 0x00390101, 0x00710001, 0x00070401, 0x006f0001, 0x00370101, 0x006d0001, 0x001b0201, 0x006b0001, 0x00350101, 0x00690001, 0x000d0301, 0x00670001, 0x00330101, 0x00650001, 0x00190201, 0x00630001, 0x00310101, 0x00610001, 0x00030501, 0x005f0001, 0x002f0101, 0x005d0001, 0x00170201, 0x005b0001, 0x002d0101, 0x00590001, 0x000b0301, 0x00570001, 0x002b0101, 0x00550001, 0x00150201, 0x00530001, 0x00290101, 0x00510001, 0x00050401, 0x004f0001, 0x00270101, 0x004d0001, 0x00130201, 0x004b0001, 0x00250101, 0x00490001, 0x00090301, 0x00470001, 0x00230101, 0x00450001, 0x00110201, 0x00430001, 0x00210101, 0x00410001, 0x00010601, 0x003f0001, 0x001f0101, 0x003d0001, 0x000f0201, 0x003b0001, 0x001d0101, 0x00390001, 0x00070301, 0x00370001, 0x001b0101, 0x00350001, 0x000d0201, 0x00330001, 0x00190101, 0x00310001, 0x00030401, 0x002f0001, 0x00170101, 0x002d0001, 0x000b0201, 0x002b0001, 0x00150101, 0x00290001, 0x00050301, 0x00270001, 0x00130101, 0x00250001, 0x00090201, 0x00230001, 0x00110101, 0x00210001, 0x00010501, 0x001f0001, 0x000f0101, 0x001d0001, 0x00070201, 0x001b0001, 0x000d0101, 0x00190001, 0x00030301, 0x00170001, 0x000b0101, 0x00150001, 0x00050201, 0x00130001, 0x00090101, 0x00110001, 0x00010401, 0x000f0001, 0x00070101, 0x000d0001, 0x00030201, 0x000b0001, 0x00050101, 0x00090001, 0x00010301, 0x00070001, 0x00030101, 0x00050001, 0x00010201, 0x00030001, 0x00010101, 0x00010001, + 0x00000001 +}; + +static const size_t NUM_BATCH_THREADS = 2; +static thread_pool_t batch_pool(NUM_BATCH_THREADS); + +typedef pippenger_t pipp_t; + +// MSM context used store persistent state +template +struct Context { + pipp_t pipp; + typename pipp_t::MSMConfig config; + + size_t ffi_affine_sz; + size_t d_points_sn; // serial number + size_t d_scalars_sn[NUM_BATCH_THREADS]; + size_t d_scalar_map_sn; + size_t d_buckets_sn; + + size_t d_buckets_pre_sn; + size_t d_bucket_idx_pre_vector_sn; + size_t d_bucket_idx_pre_used_sn; + size_t d_bucket_idx_pre_offset_sn; + + size_t d_res_sn; + size_t d_scalar_tuples_sn; + size_t d_scalar_tuples_out_sn; + size_t d_point_idx_sn; + size_t d_point_idx_out_sn; + size_t d_bucket_idx_sn; + + size_t d_cub_sort_idx; + + scalar_t *h_scalars; + uint32_t *h_scalar_map; + + typename pipp_t::result_container_t_faster fres0; + typename pipp_t::result_container_t_faster fres1; +}; + +template +struct RustContext { + Context *context; +}; + +// Initialization function +// Allocate device storage, transfer bases +extern "C" +RustError mult_pippenger_faster_init(RustContext *context, + const affine_t points[], size_t npoints, + size_t ffi_affine_sz) +{ + context->context = new Context(); + Context *ctx = context->context; + + ctx->ffi_affine_sz = ffi_affine_sz; + try { + ctx->config = ctx->pipp.init_msm_faster(npoints); + + // Allocate GPU storage + ctx->d_points_sn = ctx->pipp.allocate_d_bases(ctx->config); + for (size_t i = 0; i < NUM_BATCH_THREADS; i++) { + ctx->d_scalars_sn[i] = ctx->pipp.allocate_d_scalars(ctx->config); + } + ctx->d_scalar_map_sn = ctx->pipp.allocate_d_scalar_map(); + ctx->d_buckets_sn = ctx->pipp.allocate_d_buckets(); + ctx->d_buckets_pre_sn = ctx->pipp.allocate_d_buckets_pre(ctx->config); + ctx->d_bucket_idx_pre_vector_sn = ctx->pipp.allocate_d_bucket_idx_pre_vector(ctx->config); + ctx->d_bucket_idx_pre_used_sn = ctx->pipp.allocate_d_bucket_idx_pre_used(ctx->config); + ctx->d_bucket_idx_pre_offset_sn = ctx->pipp.allocate_d_bucket_idx_pre_offset(ctx->config); + + ctx->d_res_sn = ctx->pipp.allocate_d_res(); + ctx->d_scalar_tuples_sn = ctx->pipp.allocate_d_scalar_tuple(ctx->config); + ctx->d_scalar_tuples_out_sn = ctx->pipp.allocate_d_scalar_tuple_out(ctx->config); + ctx->d_point_idx_sn = ctx->pipp.allocate_d_point_idx(ctx->config); + ctx->d_point_idx_out_sn = ctx->pipp.allocate_d_point_idx_out(ctx->config); + ctx->d_bucket_idx_sn = ctx->pipp.allocate_d_bucket_idx(ctx->config); + + ctx->d_cub_sort_idx = ctx->pipp.allocate_d_cub_sort_faster(ctx->config); + + + // Allocate pinned memory on host + CUDA_OK(cudaMallocHost(&ctx->h_scalars, ctx->pipp.get_size_scalars(ctx->config))); + CUDA_OK(cudaMallocHost(&ctx->h_scalar_map, ctx->pipp.get_size_scalar_map())); + + ctx->pipp.transfer_bases_to_device(ctx->config, ctx->d_points_sn, points, + ffi_affine_sz); + + ctx->pipp.launch_kernel_init(ctx->config, ctx->d_points_sn); + + // Copy into pinned memory + memcpy(ctx->h_scalar_map, scalar_map, ctx->pipp.get_size_scalar_map()); + ctx->pipp.transfer_scalar_map_to_device(ctx->d_scalar_map_sn, ctx->h_scalar_map); + + ctx->fres0 = ctx->pipp.get_result_container_faster(); + ctx->fres1 = ctx->pipp.get_result_container_faster(); + } catch (const cuda_error& e) { +#ifdef TAKE_RESPONSIBILITY_FOR_ERROR_MESSAGE + return RustError{e.code(), e.what()}; +#else + return RustError{e.code()} +#endif + } + return RustError{cudaSuccess}; +} + +// Peform MSM on a batch of scalars over fixed bases +extern "C" +RustError mult_pippenger_faster_inf(RustContext *context, + point_t* out, + size_t npoints, size_t batches, + const scalar_t scalars[], + size_t ffi_affine_sz) +{ + Context *ctx = context->context; + + assert(ctx->config.npoints >= npoints); + assert(ctx->ffi_affine_sz == ffi_affine_sz); + assert(batches > 0); + + cudaStream_t stream = ctx->pipp.default_stream; + stream_t aux_stream(ctx->pipp.get_device()); + + try { + for (size_t i = 0; i < batches; i++) { + out[i].inf(); + } + + typename pipp_t::result_container_t_faster *kernel_res = &ctx->fres0; + typename pipp_t::result_container_t_faster *accum_res = &ctx->fres1; + size_t d_scalars_xfer = ctx->d_scalars_sn[0]; + size_t d_scalars_compute = ctx->d_scalars_sn[1]; + + channel_t ch; + size_t scalars_sz = ctx->pipp.get_size_scalars(ctx->config); + + int work = 0; + memcpy(ctx->h_scalars, &scalars[work * npoints], scalars_sz); + ctx->pipp.transfer_scalars_to_device(ctx->config, d_scalars_compute, + ctx->h_scalars, aux_stream); + CUDA_OK(cudaStreamSynchronize(aux_stream)); + + + for (; work < (int)batches; work++) { + // Launch the GPU kernel, transfer the results back + batch_pool.spawn([&]() { + + CUDA_OK(cudaStreamSynchronize(aux_stream)); + ctx->pipp.launch_process_scalar_1(ctx->config, d_scalars_compute, + ctx->d_scalar_tuples_sn, ctx->d_scalar_map_sn, + ctx->d_point_idx_sn); + + uint32_t* d_scalar_tuple = ctx->pipp.d_scalar_tuple_ptrs[ctx->d_scalar_tuples_sn]; + uint32_t* d_scalar_tuple_out = ctx->pipp.d_scalar_tuple_ptrs[ctx->d_scalar_tuples_out_sn]; + uint32_t* d_point_idx = ctx->pipp.d_point_idx_ptrs[ctx->d_point_idx_sn]; + uint32_t* d_point_idx_out = ctx->pipp.d_point_idx_ptrs[ctx->d_point_idx_out_sn]; + uint32_t nscalars = npoints; + + void *d_temp = NULL; + size_t temp_sort_size = 0; + cub::DeviceRadixSort::SortPairs(d_temp, temp_sort_size, + d_scalar_tuple, d_scalar_tuple_out, + d_point_idx, d_point_idx_out, nscalars, 0, 31, stream); + void *d_cub_sort = (void *)ctx->pipp.d_cub_ptrs[ctx->d_cub_sort_idx]; + + // printf("sort_size: %d\n", temp_sort_size); + for(size_t k = 0; k < NWINS; k++) + { + size_t ptr = k * nscalars; + cub::DeviceRadixSort::SortPairs(d_cub_sort, temp_sort_size, + d_scalar_tuple + ptr, d_scalar_tuple_out + ptr, + d_point_idx + ptr, d_point_idx_out + ptr, nscalars, 0, 31, stream); + } + + ctx->pipp.launch_process_scalar_2(ctx->config, + ctx->d_scalar_tuples_out_sn, ctx->d_bucket_idx_sn); + + ctx->pipp.launch_bucket_acc(ctx->config, ctx->d_scalar_tuples_out_sn, + ctx->d_bucket_idx_sn, ctx->d_point_idx_out_sn, + ctx->d_points_sn, ctx->d_buckets_sn, + ctx->d_buckets_pre_sn, ctx->d_bucket_idx_pre_vector_sn, + ctx->d_bucket_idx_pre_used_sn, ctx->d_bucket_idx_pre_offset_sn); + + ctx->pipp.launch_bucket_agg_1(ctx->config, ctx->d_buckets_sn); + ctx->pipp.launch_bucket_agg_2(ctx->config, ctx->d_buckets_sn); + + ctx->pipp.launch_recursive_sum(ctx->config, ctx->d_buckets_sn, ctx->d_res_sn); + + ctx->pipp.transfer_res_to_host_faster(*kernel_res, ctx->d_res_sn); + ctx->pipp.synchronize_stream(); + + ch.send(work); + }); + + // Transfer the next set of scalars, accumulate the previous result + batch_pool.spawn([&]() { + // Start next scalar transfer + if (work + 1 < (int)batches) { + // Copy into pinned memory + memcpy(ctx->h_scalars, &scalars[(work + 1) * npoints], scalars_sz); + ctx->pipp.transfer_scalars_to_device(ctx->config, + d_scalars_xfer, ctx->h_scalars, + aux_stream); + } + // Accumulate the previous result + if (work - 1 >= 0) { + ctx->pipp.accumulate_faster(out[work - 1], *accum_res); + + + } + ch.send(work); + }); + ch.recv(); + ch.recv(); + std::swap(kernel_res, accum_res); + std::swap(d_scalars_xfer, d_scalars_compute); + } + + // Accumulate the final result + ctx->pipp.accumulate_faster(out[batches - 1], *accum_res); + + } catch (const cuda_error& e) { +#ifdef TAKE_RESPONSIBILITY_FOR_ERROR_MESSAGE + return RustError{e.code(), e.what()}; +#else + return RustError{e.code()} +#endif + } + + return RustError{cudaSuccess}; +} + +// Initialization function +// Allocate device storage, transfer bases +extern "C" +void mult_pippenger_faster_free(RustContext *context) { + cudaFreeHost(context->context->h_scalars); + cudaFreeHost(context->context->h_scalar_map); + delete context->context; +} + +#endif // __CUDA_ARCH__ diff --git a/arkworks3-sppark-wlc/sppark/.DS_Store b/arkworks3-sppark-wlc/sppark/.DS_Store new file mode 100644 index 000000000..5008ddfcf Binary files /dev/null and b/arkworks3-sppark-wlc/sppark/.DS_Store differ diff --git a/arkworks3-sppark-wlc/sppark/README.md b/arkworks3-sppark-wlc/sppark/README.md new file mode 100644 index 000000000..cfd742fd0 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/README.md @@ -0,0 +1,61 @@ +# sppark + +sppark (pronounced 'spark') is **S**upranational's **p**erformance **p**rimitives for **ar**guments of **k**nowledge such as SNARKs and STARKs. The library focuses on accelerating the most computationally expensive pieces of zero-knowledge proofs generation such as multi-scalar multiplication (MSM), number theoretic transform (NTT), arithmetic hashes, and more. The library is a collection of CUDA/C++ templates that can be instantiated for a range of finite fields and elliptic curves. + +## Table of Contents + + * [Status](#status) + * [General notes on implementation](#general-notes-on-implementation) + * [Platform and Language Compatibility](#platform-and-language-compatibility) + * [Introductory Integration Tutorial](#introductory-integration-tutorial) + + [Multi-scalar Multiplication (MSM)](#multi-scalar-mutliplication-(MSM)) + * [Repository Structure](#repository-structure) + * [Performance](#performance) + * [License](#license) + +## Status + +**This library is under active development [with a list of planned significant improvements]** + +## General notes on implementation + +The goal of the sppark library is to provide foundational components for applications and other libraries that require high-performance operations for zero-knowledge proofs generation. + +## Platform and Language Compatibility + +This library primarily supports x86_64 with Nvidia's Volta+ GPU hardware platforms on Linux and Windows operating systems. Non-GPU portions can be utilized even on ARM64, and additionally on Mac. + +We show how to interface with Rust and are open to discussions on how to interface with Go. Caveat lector. Achieving highest possible GPU performance requires interfacing with target language memory management, possibly its async facilities, and might even require changes to object's data layout. These are hard to generalize and consequently are also a matter of discussion, likely on a case-by-case basis. + +## Introductory Integration Tutorial + +[TBD] + +### Multi-scalar Multiplication (MSM) + +[TBD] + +## Repository Structure + +**Root** - Contains various configuration files, documentation, licensing. +* **conversion** - +* **ec** - Contains templates for elliptic curve operations such as addition and doubling for different point representations. +* **ff** - Contains CUDA template[s] for finite field operations and instantiations of a variety of fields. +* **hash** - +* **memory** - +* **merkle** - +* **msm** - Contains multi-scalar multiplication template[s] that can be instantiated for a variety of elliptic curves such as BLS12-381 and the Pasta curves +* **ntt** - +* **poc** - Proof-of-concept implementations, including benchmarking. +* **rust** - Houses Rust crate definition. +* **util** - General-purpose helper classes. + +## Performance + +Simplified benchmark results can be collected by end users by exercising proof-of-concept applications. "Simplified" refers to the fact that there is always room for application-specific tuning. Intention is to give a general "taste." Just in case, benchmarks are likely to require high-end GPUs and one can't expect that they will execute on a laptop unmodified. + +Caveat lector. As you compile PoC applications you might get warnings about not FFI-safe types. Alarming as they are, the fact that tests pass means that it works out nevertheless. However, this is **not** to say that they should be ignored and that one can proceed to build production code upon it. We intend to work with external software maintainers to resolve these warnings. + +## License + +The sppark library is licensed under the [Apache License Version 2.0](LICENSE) software license. diff --git a/arkworks3-sppark-wlc/sppark/ec/jacobian_t.hpp b/arkworks3-sppark-wlc/sppark/ec/jacobian_t.hpp new file mode 100644 index 000000000..5b895e619 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ec/jacobian_t.hpp @@ -0,0 +1,550 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifndef __JACOBIAN_T_HPP__ +#define __JACOBIAN_T_HPP__ + +#ifndef __CUDA_ARCH__ +#undef __host__ +#define __host__ +#undef __device__ +#define __device__ +#undef __noinline__ +#define __noinline__ +#endif + +template class jacobian_t { + field_t X, Y, Z; + + inline operator const void*() const { return this; } + inline operator void*() { return this; } + +public: + jacobian_t() {} + jacobian_t(const field_t& x, const field_t& y, const field_t& z) : + X(x), Y(y), Z(z) {} + + class affine_t { friend jacobian_t; + field_t X, Y; + + inline __device__ bool is_inf() const + { return (bool)(X.is_zero() & Y.is_zero()); } + + public: + inline affine_t& operator=(const jacobian_t& a) + { + Y = 1/a.Z; + X = Y^2; // 1/Z^2 + Y *= X; // 1/Z^3 + X *= a.X; // X/Z^2 + Y *= a.Y; // Y/Z^3 + return *this; + } + inline affine_t(const jacobian_t& a) { *this = a; } + }; + + inline operator affine_t() const { return affine_t(*this); } + + inline __device__ jacobian_t& operator=(const affine_t& a) + { + X = a.X; + Y = a.Y; + Z = field_t::one(); + return *this; + } + + inline __device__ bool is_inf() const { return (bool)(Z.is_zero()); } + inline __device__ void inf() { Z.zero(); } + + /* + * Addition that can handle doubling [as well as points at infinity, + * which are encoded as Z==0] in constant time. It naturally comes at + * cost, but this subroutine should be called only when independent + * points are processed, which is considered reasonable compromise. + * For example, ptype##s_mult_w5 calls it, but since *major* gain is + * result of pure doublings being effectively divided by amount of + * points, slightly slower addition can be tolerated. But what is the + * additional cost more specifically? Best addition result is 11M+5S, + * while this routine takes 13M+5S (+1M+1S if a4!=0), as per + * + * -------------+------------- + * addition | doubling + * -------------+------------- + * U1 = X1*Z2^2 | U1 = X1 + * U2 = X2*Z1^2 | + * S1 = Y1*Z2^3 | S1 = Y1 + * S2 = Y2*Z1^3 | + * zz = Z1*Z2 | zz = Z1 + * H = U2-U1 | H' = 2*Y1 + * R = S2-S1 | R' = 3*X1^2[+a*Z1^4] + * sx = U1+U2 | sx = X1+X1 + * -------------+------------- + * H!=0 || R!=0 | H==0 && R==0 + * + * X3 = R^2-H^2*sx + * Y3 = R*(H^2*U1-X3)-H^3*S1 + * Z3 = H*zz + * + * As for R!=0 condition in context of H==0, a.k.a. P-P. The result is + * infinity by virtue of Z3 = (U2-U1)*zz = H*zz = 0*zz == 0. + */ + static void dadd(jacobian_t& out, const jacobian_t& p1, + const jacobian_t& p2, + const field_t* a4 = nullptr) + { + jacobian_t p3; /* starts as (U1, S1, zz) from addition side */ + struct { field_t H, R, sx; } add, dbl; + bool p1inf, p2inf, is_dbl; + + dbl.sx = p1.X + p1.X; /* sx = X1+X1 */ + dbl.R = p1.X^2; /* X1^2 */ + dbl.R += dbl.R + dbl.R; /* R = 3*X1^2 */ + dbl.H = p1.Y + p1.Y; /* H = 2*Y1 */ + + p2inf = p2.is_inf(); + p3.X = p2.Z^2; /* Z2^2 */ + p3.Z = p1.Z * p2.Z; /* Z1*Z2 */ + p1inf = p1.is_inf(); + add.H = p1.Z^2; /* Z1^2 */ + + if (a4 != nullptr) { + p3.Y = add.H^2; /* Z1^4, [borrow p3.Y] */ + p3.Y *= *a4; + dbl.R += p3.Y; /* R = 3*X1^2+a*Z1^4 */ + } + + p3.Y = p1.Y * p2.Z; + p3.Y *= p3.X; /* S1 = Y1*Z2^3 */ + add.R = p2.Y * p1.Z; + add.R *= add.H; /* S2 = Y2*Z1^3 */ + add.R -= p3.Y; /* R = S2-S1 */ + + p3.X *= p1.X; /* U1 = X1*Z2^2 */ + add.H *= p2.X; /* U2 = X2*Z1^2 */ + + add.sx = add.H + p3.X; /* sx = U1+U2 */ + add.H -= p3.X; /* H = U2-U1 */ + + is_dbl = add.H.is_zero() & add.R.is_zero(); + vec_select(&p3, &p1, &p3, sizeof(p3), is_dbl); + vec_select(&add, &dbl, &add, sizeof(add), is_dbl); + /* |p3| and |add| hold all inputs now, |p3| will hold output */ + + p3.Z *= add.H; /* Z3 = H*Z1*Z2 */ + + dbl.H = add.H^2; /* H^2 */ + dbl.R = dbl.H * add.H; /* H^3 */ + dbl.R *= p3.Y; /* H^3*S1 */ + p3.Y = dbl.H * p3.X; /* H^2*U1 */ + + dbl.H *= add.sx; /* H^2*sx */ + p3.X = add.R^2; /* R^2 */ + p3.X -= dbl.H; /* X3 = R^2-H^2*sx */ + + p3.Y -= p3.X; /* H^2*U1-X3 */ + p3.Y *= add.R; /* R*(H^2*U1-X3) */ + p3.Y -= dbl.R; /* Y3 = R*(H^2*U1-X3)-H^3*S1 */ + + vec_select(&p3, &p1, &p3, sizeof(p3), p2inf); + vec_select(out, &p2, &p3, sizeof(p3), p1inf); + } + inline void dadd(const jacobian_t& p2, const field_t* a4 = nullptr) + { dadd(*this, *this, p2, a4); } + + /* + * Addition with affine point that can handle doubling [as well as + * points at infinity, with |p1| being encoded as Z==0 and |p2| as + * X,Y==0] in constant time. But at what additional cost? Best + * addition result is 7M+4S, while this routine takes 8M+5S, as per + * + * -------------+------------- + * addition | doubling + * -------------+------------- + * U1 = X1 | U1 = X2 + * U2 = X2*Z1^2 | + * S1 = Y1 | S1 = Y2 + * S2 = Y2*Z1^3 | + * H = U2-X1 | H' = 2*Y2 + * R = S2-Y1 | R' = 3*X2^2[+a] + * sx = X1+U2 | sx = X2+X2 + * zz = H*Z1 | zz = H' + * -------------+------------- + * H!=0 || R!=0 | H==0 && R==0 + * + * X3 = R^2-H^2*sx + * Y3 = R*(H^2*U1-X3)-H^3*S1 + * Z3 = zz + * + * As for R!=0 condition in context of H==0, a.k.a. P-P. The result is + * infinity by virtue of Z3 = (U2-U1)*zz = H*zz = 0*zz == 0. + */ + static void dadd(jacobian_t& out, const jacobian_t& p1, const affine_t& p2) + { + jacobian_t p3; /* starts as (,, H*Z1) from addition side */ + struct { field_t H, R, sx; } add, dbl; + bool p1inf, p2inf, is_dbl; + + p2inf = p2.is_inf(); + dbl.sx = p2.X + p2.X; /* sx = X2+X2 */ + dbl.R = p2.X^2; /* X2^2 */ + dbl.R += dbl.R + dbl.R; /* R = 3*X2^2 */ + dbl.H = p2.Y + p2.Y; /* H = 2*Y2 */ + + p1inf = p1.is_inf(); + add.H = p1.Z^2; /* Z1^2 */ + add.R = add.H * p1.Z; /* Z1^3 */ + add.R *= p2.Y; /* S2 = Y2*Z1^3 */ + add.R -= p1.Y; /* R = S2-Y1 */ + + add.H *= p2.X; /* U2 = X2*Z1^2 */ + + add.sx = add.H + p1.X; /* sx = X1+U2 */ + add.H -= p1.X; /* H = U2-X1 */ + + p3.Z = add.H * p1.Z; /* Z3 = H*Z1 */ + + /* make the choice between addition and doubling */ + is_dbl = add.H.is_zero() & add.R.is_zero(); + vec_select(p3.X, p2.X, p1.X, 2*sizeof(p3.X), is_dbl); + vec_select(p3.Z, dbl.H, p3.Z, sizeof(p3.Z), is_dbl); + vec_select(&add, &dbl, &add, sizeof(add), is_dbl); + /* |p3| and |add| hold all inputs now, |p3| will hold output */ + + dbl.H = add.H^2; /* H^2 */ + dbl.R = dbl.H * add.H; /* H^3 */ + dbl.R *= p3.Y; /* H^3*S1 */ + p3.Y = dbl.H * p3.X; /* H^2*U1 */ + + dbl.H *= add.sx; /* H^2*sx */ + p3.X = add.R^2; /* R^2 */ + p3.X -= dbl.H; /* X3 = R^2-H^2*sx */ + + p3.Y -= p3.X; /* H^2*U1-X3 */ + p3.Y *= add.R; /* R*(H^2*U1-X3) */ + p3.Y -= dbl.R; /* Y3 = R*(H^2*U1-X3)-H^3*S1 */ + + vec_select(p3.X, p2.X, p3.X, 2*sizeof(p3.X), p1inf); + vec_select(p3.Z, field_t::one(), p3.Z, sizeof(p3.Z), p1inf); + vec_select(&out, &p1, &p3, sizeof(p3), p2inf); + } + inline void dadd(const affine_t& p2) + { dadd(*this, *this, p2); } + + /* + * https://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl + * with twist to handle either input at infinity, which are encoded as Z==0. + */ + static void add(jacobian_t& out, const jacobian_t& p1, const jacobian_t& p2) + { + jacobian_t p3; + field_t Z1Z1, Z2Z2, U1, S1, H, I, J; + bool p1inf, p2inf; + + p1inf = p1.is_inf(); + Z1Z1 = p1.Z^2; /* Z1Z1 = Z1^2 */ + p3.Z = Z1Z1 * p1.Z; /* Z1*Z1Z1 */ + p3.Z *= p2.Y; /* S2 = Y2*Z1*Z1Z1 */ + + p2inf = p2.is_inf(); + Z2Z2 = p2.Z^2; /* Z2Z2 = Z2^2 */ + + S1 = Z2Z2 * p2.Z; /* Z2*Z2Z2 */ + S1 *= p1.Y; /* S1 = Y1*Z2*Z2Z2 */ + + p3.Z -= S1; /* S2-S1 */ + p3.Z += p3.Z; /* r = 2*(S2-S1) */ + + U1 = p1.X * Z2Z2; /* U1 = X1*Z2Z2 */ + H = p2.X * Z1Z1; /* U2 = X2*Z1Z1 */ + + H -= U1; /* H = U2-U1 */ + + I = H + H; /* 2*H */ + I ^= 2; /* I = (2*H)^2 */ + + J = H * I; /* J = H*I */ + S1 *= J; /* S1*J */ + + p3.Y = U1 * I; /* V = U1*I */ + + p3.X = p3.Z^2; /* r^2 */ + p3.X -= J; /* r^2-J */ + p3.X -= p3.Y; + p3.X -= p3.Y; /* X3 = r^2-J-2*V */ + + p3.Y -= p3.X; /* V-X3 */ + p3.Y *= p3.Z; /* r*(V-X3) */ + p3.Y -= S1; + p3.Y -= S1; /* Y3 = r*(V-X3)-2*S1*J */ + + p3.Z = p1.Z + p2.Z; /* Z1+Z2 */ + p3.Z ^= 2; /* (Z1+Z2)^2 */ + p3.Z -= Z1Z1; /* (Z1+Z2)^2-Z1Z1 */ + p3.Z -= Z2Z2; /* (Z1+Z2)^2-Z1Z1-Z2Z2 */ + p3.Z *= H; /* Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H */ + + vec_select(&p3, &p1, &p3, sizeof(p3), p2inf); + vec_select(&out, &p2, &p3, sizeof(p3), p1inf); + } + + /* + * https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-madd-2007-bl + * with twist to handle either input at infinity, with |p1| encoded as Z==0, + * and |p2| as X==Y==0. + */ + static void add(jacobian_t& out, const jacobian_t& p1, const affine_t& p2) + { + jacobian_t p3; + field_t Z1Z1, H, HH, I, J; + bool p1inf, p2inf; + + p1inf = p1.is_inf(); + + Z1Z1 = p1.Z^2; /* Z1Z1 = Z1^2 */ + + p3.Z = Z1Z1 * p1.Z; /* Z1*Z1Z1 */ + p3.Z *= p2.Y; /* S2 = Y2*Z1*Z1Z1 */ + + p2inf = p2.is_inf(); + + H = p2.X * Z1Z1; /* U2 = X2*Z1Z1 */ + H -= p1.X; /* H = U2-X1 */ + + HH = H^2; /* HH = H^2 */ + I = HH + HH; + I += I; /* I = 4*HH */ + + p3.Y = p1.X * I; /* V = X1*I */ + J = H * I; /* J = H*I */ + I = J * p1.Y; /* Y1*J */ + + p3.Z -= p1.Y; /* S2-Y1 */ + p3.Z += p3.Z; /* r = 2*(S2-Y1) */ + + p3.X = p3.Z^2; /* r^2 */ + p3.X -= J; /* r^2-J */ + p3.X -= p3.Y; + p3.X -= p3.Y; /* X3 = r^2-J-2*V */ + + p3.Y -= p3.X; /* V-X3 */ + p3.Y *= p3.Z; /* r*(V-X3) */ + p3.Y -= I; + p3.Y -= I; /* Y3 = r*(V-X3)-2*Y1*J */ + + p3.Z = p1.Z + H; /* Z1+H */ + p3.Z ^= 2; /* (Z1+H)^2 */ + p3.Z -= Z1Z1; /* (Z1+H)^2-Z1Z1 */ + p3.Z -= HH; /* Z3 = (Z1+H)^2-Z1Z1-HH */ + + vec_select(p3.Z, field_t::one(), p3.Z, sizeof(p3.Z), p1inf); + vec_select(p3.X, p2.X, p3.X, 2*sizeof(p3.X), p1inf); + vec_select(&out, &p1, &p3, sizeof(p3), p2inf); + } + + /* + * https://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l + */ + static void dbl(jacobian_t& p3, const jacobian_t& p1) + { + field_t A, B, C; + + A = p1.X^2; /* A = X1^2 */ + B = p1.Y^2; /* B = Y1^2 */ + C = B^2; /* C = B^2 */ + + B += p1.X; /* X1+B */ + B *= B; /* (X1+B)^2 */ + B -= A; /* (X1+B)^2-A */ + B -= C; /* (X1+B)^2-A-C */ + B += B; /* D = 2*((X1+B)^2-A-C) */ + + A += A<<1; /* E = 3*A */ + + p3.X = A^2; /* F = E^2 */ + p3.X -= B; + p3.X -= B; /* X3 = F-2*D */ + + p3.Z = p1.Z * p1.Y; /* Z1*Y1 */ + p3.Z <<= 1; /* Z3 = 2*Z1*Y1 */ + + C <<= 3; /* 8*C */ + p3.Y = B - p3.X; /* D-X3 */ + p3.Y *= A; /* E*(D-X3) */ + p3.Y -= C; /* Y3 = E*(D-X3)-8*C */ + } + inline void dbl() { dbl(*this, *this); } + + /* + * Non-constant-time add-or-double. + */ + __device__ __noinline__ + void add(const jacobian_t& p2) + { +#ifdef __CUDA_ARCH__ + jacobian_t p1 = *this; +#else + jacobian_t &p1 = *this; +#endif + jacobian_t p3; + + if (p2.is_inf()) { + return; + } else if (p1.is_inf()) { + p3 = p2; + } else { + field_t Z1Z1, Z2Z2, U1, S1, H; + + Z1Z1 = p1.Z^2; /* Z1Z1 = Z1^2 */ + p3.Z = Z1Z1 * p1.Z; /* Z1*Z1Z1 */ + p3.Z *= p2.Y; /* S2 = Y2*Z1*Z1Z1 */ + + Z2Z2 = p2.Z^2; /* Z2Z2 = Z2^2 */ + S1 = Z2Z2 * p2.Z; /* Z2*Z2Z2 */ + S1 *= p1.Y; /* S1 = Y1*Z2*Z2Z2 */ + p3.Z -= S1; /* S2-S1 */ + + U1 = p1.X * Z2Z2; /* U1 = X1*Z2Z2 */ + H = p2.X * Z1Z1; /* U2 = X2*Z1Z1 */ + H -= U1; /* H = U2-U1 */ + + if (H.is_zero() & p3.Z.is_zero()) { + field_t A, B, C; /* double |p1| */ + + A = p1.X^2; /* A = X1^2 */ + B = p1.Y^2; /* B = Y1^2 */ + C = B^2; /* C = B^2 */ + + B += p1.X; /* X1+B */ + B *= B; /* (X1+B)^2 */ + B -= A; /* (X1+B)^2-A */ + B -= C; /* (X1+B)^2-A-C */ + B += B; /* D = 2*((X1+B)^2-A-C) */ + + A += A<<1; /* E = 3*A */ + + p3.X = A^2; /* F = E^2 */ + p3.X -= B; + p3.X -= B; /* X3 = F-2*D */ + + p3.Z = p1.Z * p1.Y; /* Z1*Y1 */ + p3.Z <<= 1; /* Z3 = 2*Z1*Y1 */ + + C <<= 3; /* 8*C */ + p3.Y = B - p3.X; /* D-X3 */ + p3.Y *= A; /* E*(D-X3) */ + p3.Y -= C; /* Y3 = E*(D-X3)-8*C */ + } else { + field_t I, J; /* add |p1| and |p2| */ + + I = H + H; /* 2*H */ + I ^= 2; /* I = (2*H)^2 */ + + J = H * I; /* J = H*I */ + S1 *= J; /* S1*J */ + + p3.Y = U1 * I; /* V = U1*I */ + + p3.Z += p3.Z; /* r = 2*(S2-S1) */ + p3.X = p3.Z^2; /* r^2 */ + p3.X -= J; /* r^2-J */ + p3.X -= p3.Y; + p3.X -= p3.Y; /* X3 = r^2-J-2*V */ + + p3.Y -= p3.X; /* V-X3 */ + p3.Y *= p3.Z; /* r*(V-X3) */ + p3.Y -= S1; + p3.Y -= S1; /* Y3 = r*(V-X3)-2*S1*J */ + + p3.Z = p1.Z + p2.Z; /* Z1+Z2 */ + p3.Z ^= 2; /* (Z1+Z2)^2 */ + p3.Z -= Z1Z1; /* (Z1+Z2)^2-Z1Z1 */ + p3.Z -= Z2Z2; /* (Z1+Z2)^2-Z1Z1-Z2Z2 */ + p3.Z *= H; /* Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H */ + } + } + *this = p3; + } + + __device__ __noinline__ + void add(const affine_t& p2) + { +#ifdef __CUDA_ARCH__ + jacobian_t p1 = *this; +#else + jacobian_t &p1 = *this; +#endif + jacobian_t p3; + + if (p2.is_inf()) { + return; + } else if (p1.is_inf()) { + p3 = p2; + } else { + field_t Z1Z1, H; + + Z1Z1 = p1.Z^2; /* Z1Z1 = Z1^2 */ + p3.Z = Z1Z1 * p1.Z; /* Z1*Z1Z1 */ + p3.Z *= p2.Y; /* S2 = Y2*Z1*Z1Z1 */ + p3.Z -= p1.Y; /* S2-Y1 */ + + H = p2.X * Z1Z1; /* U2 = X2*Z1Z1 */ + H -= p1.X; /* H = U2-X1 */ + + if (H.is_zero() & p3.Z.is_zero()) { + field_t A, B, C; /* double |p2| */ + + A = p2.X^2; /* A = X1^2 */ + B = p2.Y^2; /* B = Y1^2 */ + C = B^2; /* C = B^2 */ + + B += p2.X; /* X1+B */ + B *= B; /* (X1+B)^2 */ + B -= A; /* (X1+B)^2-A */ + B -= C; /* (X1+B)^2-A-C */ + B += B; /* D = 2*((X1+B)^2-A-C) */ + + A += A<<1; /* E = 3*A */ + + p3.X = A^2; /* F = E^2 */ + p3.X -= B; + p3.X -= B; /* X3 = F-2*D */ + + p3.Z = p2.Y + p2.Y; /* Z3 = 2*[Z1==1]*Y1 */ + + C <<= 3; /* 8*C */ + p3.Y = B - p3.X; /* D-X3 */ + p3.Y *= A; /* E*(D-X3) */ + p3.Y -= C; /* Y3 = E*(D-X3)-8*C */ + } else { + field_t HH, I, J; /* add |p1| and |p2| */ + + HH = H^2; /* HH = H^2 */ + I = HH + HH; + I += I; /* I = 4*HH */ + + p3.Y = p1.X * I; /* V = X1*I */ + J = H * I; /* J = H*I */ + I = J * p1.Y; /* Y1*J */ + + p3.Z += p3.Z; /* r = 2*(S2-Y1) */ + p3.X = p3.Z^2; /* r^2 */ + p3.X -= J; /* r^2-J */ + p3.X -= p3.Y; + p3.X -= p3.Y; /* X3 = r^2-J-2*V */ + + p3.Y -= p3.X; /* V-X3 */ + p3.Y *= p3.Z; /* r*(V-X3) */ + p3.Y -= I; + p3.Y -= I; /* Y3 = r*(V-X3)-2*Y1*J */ + + p3.Z = p1.Z + H; /* Z1+H */ + p3.Z ^= 2; /* (Z1+H)^2 */ + p3.Z -= Z1Z1; /* (Z1+H)^2-Z1Z1 */ + p3.Z -= HH; /* Z3 = (Z1+H)^2-Z1Z1-HH */ + } + } + *this = p3; + } +}; +#endif diff --git a/arkworks3-sppark-wlc/sppark/ec/projective_t.hpp b/arkworks3-sppark-wlc/sppark/ec/projective_t.hpp new file mode 100644 index 000000000..aabaef6d7 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ec/projective_t.hpp @@ -0,0 +1,328 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifndef __PROJECTIVE_T_HPP__ +#define __PROJECTIVE_T_HPP__ + +#ifndef __CUDA_ARCH__ +# undef __host__ +# define __host__ +# undef __device__ +# define __device__ +# undef __noinline__ +# define __noinline__ +#endif + +template class projective_t { + field_t X, Y, Z; + +public: +#ifdef __NVCC__ + class affine_inf_t { friend projective_t; + field_t X, Y; + int inf[sizeof(field_t)%16 ? 2 : 4]; + + inline __device__ bool is_inf() const + { return inf[0]&1 != 0; } + }; +#else + class affine_inf_t { friend projective_t; + field_t X, Y; + bool inf; + + inline __device__ bool is_inf() const + { return inf; } + }; +#endif + + class affine_t { friend projective_t; + field_t X, Y; + + inline __device__ bool is_inf() const + { return (bool)(X.is_zero() & Y.is_zero()); } + + public: + inline affine_t& operator=(const projective_t& a) + { + Y = a.Z.inv(); + X = Y * a.X; // X/Z + Y *= a.Y; // Y/Z + return *this; + } + inline affine_t(const projective_t& a) { *this = a; } + }; + + inline operator affine_t() const { return affine_t(*this); } + + template + inline __device__ projective_t& operator=(const affine_t& a) + { + X = a.X; + Y = a.Y; + // this works as long as |a| was confirmed to be non-infinity + Z = field_t::one(); + return *this; + } + + template + inline __device__ void projective_to_affine(affine_t& a) { + a.Y = Z.inv(); + a.X = a.Y * X; + a.Y *= Y; + } + + inline __device__ void projective_print() { + field_t x; + field_t y; + y = Z.inv(); + x = y * X; + y *= Y; + + x.from(); + y.from(); + printf("--------\n"); + for (int i = 11; i >= 0; i--) { + printf("%08x", *((uint32_t*)(&x) + i)); + } + printf("\n"); + for (int i = 11; i >= 0; i--) { + printf("%08x", *((uint32_t*)(&y) + i)); + } + printf("\n--------\n"); + } + + + inline __device__ operator jacobian_t() const + { return jacobian_t{ X*Z, (Y*Z)*Z, Z }; } + + inline __device__ bool is_inf() const { return (bool)(Z.is_zero()); } + inline __device__ void inf() { Z.zero(); } + + inline __device__ void neg(bool subtract = false) { + this->Y.cneg(subtract); + } + + /* + * https://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#addition-add-2015-rcb + * https://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#addition-madd-2015-rcb + * https://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#addition-mmadd-1998-cmo + */ + __device__ void add(const projective_t& p2) + { + if (p2.is_inf()) { + return; + } else if (is_inf()) { + *this = p2; + return; + } + +#ifdef __CUDA_ARCH__ + projective_t p31 = *this; +#else + projective_t& p31 = *this; +#endif + + if (p31.Z.is_one()) { + if (p2.Z.is_one()) { /* Z1==1 && Z2==1 */ + field_t X0, Y0, uu, vv, R, A; + + X0 = p2.X - p31.X; + Y0 = p2.Y - p31.Y; + uu = Y0^2; + vv = X0^2; + p31.Z = X0 * vv; + R = vv * p31.X; + A = uu - p31.Z; + A -= R; + A -= R; + p31.X = X0 * A; + p31.Y *= p31.Z; + p31.Y = Y0 * (R - A) - p31.Y; + } else { /* Z1==1 && Z2!=1 */ + field_t t0, t1, t3, t4, t5; + + t0 = p2.X * p31.X; + t1 = p2.Y * p31.Y; + t3 = p31.X + p31.Y; + t4 = p2.X + p2.Y; + t3 *= t4; + t4 = t0 + t1; + t3 -= t4; + t4 = p31.X * p2.Z; + t4 += p2.X; + t5 = p31.Y * p2.Z; + t5 += p2.Y; + p31.X = p2.Z + p2.Z; + p31.X += p2.Z; + p31.Z = t1 + p31.X; + p31.X = t1 - p31.X; + p31.Y = p31.X * p31.Z; + t1 = t0 + t0; + t1 += t0; + t4 += (t4 + t4); + t0 = t1 * t4; + p31.Y += t0; + t0 = t5 * t4; + p31.X *= t3; + p31.X -= t0; + t0 = t3 * t1; + p31.Z *= t5; + p31.Z += t0; + } + } else if (p2.Z.is_one()) { /* Z1!=1 && Z2==1 */ + field_t t0, t1, t3, t4, t5; + + t0 = p31.X * p2.X; + t1 = p31.Y * p2.Y; + t3 = p2.X + p2.Y; + t4 = p31.X + p31.Y; + t3 *= t4; + t4 = t0 + t1; + t3 -= t4; + t4 = p2.X * p31.Z; + t4 += p31.X; + t5 = p2.Y * p31.Z; + t5 += p31.Y; + p31.X = p31.Z + p31.Z; + p31.X += p31.Z; + p31.Z = t1 + p31.X; + p31.X = t1 - p31.X; + p31.Y = p31.X * p31.Z; + t1 = t0 + t0; + t1 += t0; + t4 += (t4 + t4); + t0 = t1 * t4; + p31.Y += t0; + t0 = t5 * t4; + p31.X *= t3; + p31.X -= t0; + t0 = t3 * t1; + p31.Z *= t5; + p31.Z += t0; + } else { /* Z1!=1 && Z2!=1 */ + field_t t0, t1, t2, t3, t4, t5; + + t0 = p31.X * p2.X; + t1 = p31.Y * p2.Y; + t2 = p31.Z * p2.Z; + t3 = p31.X + p31.Y; + t4 = p2.X + p2.Y; + t3 *= t4; + t4 = t0 + t1; + t3 -= t4; + t4 = p31.X + p31.Z; + t5 = p2.X + p2.Z; + t4 *= t5; + t5 = t0 + t2; + t4 -= t5; + t5 = p31.Y + p31.Z; + p31.X = p2.Y + p2.Z; + t5 *= p31.X; + p31.X = t1 + t2; + t5 -= p31.X; + p31.X = t2 + t2; + p31.X += t2; + p31.Z = t1 + p31.X; + p31.X = t1 - p31.X; + p31.Y = p31.X * p31.Z; + t1 = t0 + t0; + t1 += t0; + t4 += (t4 + t4); + t0 = t1 * t4; + p31.Y += t0; + t0 = t5 * t4; + p31.X *= t3; + p31.X -= t0; + t0 = t3 * t1; + p31.Z *= t5; + p31.Z += t0; + } +#ifdef __CUDA_ARCH__ + *this = p31; +#endif + } + + /* + * https://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#doubling-dbl-2015-rcb + * https://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#doubling-mdbl-2007-bl + */ + + __device__ void dbl() + { + if (is_inf()) { + return; + } +#ifdef __CUDA_ARCH__ + projective_t p31 = *this; +#else + projective_t& p31 = *this; +#endif + if (p31.Z.is_one()) { + field_t XX, w, Y1Y1, R, RR, B, h; + + XX = p31.X^2; + w = XX + XX; + w += XX; + Y1Y1 = p31.Y^2; + R = Y1Y1 + Y1Y1; + p31.Z = p31.Y * R; + p31.Z += p31.Z; + p31.Z += p31.Z; + RR = R^2; + B = p31.X + R; + B *= B; + B -= XX; + B -= RR; + h = w^2; + h -= B; + h -= B; + p31.X = h * p31.Y; + p31.X += p31.X; + p31.Y = B - h; + p31.Y *= w; + p31.Y -= RR; + p31.Y -= RR; + + } else { + field_t t0, t1, t2, t3; + field_t Y1, Z1; + + Y1 = p31.Y; + Z1 = p31.Z; + + t0 = p31.X^2; + t1 = p31.Y^2; + t2 = p31.Z^2; + t3 = p31.X * p31.Y; + t3 += t3; + p31.Z *= p31.X; + p31.Z += p31.Z; + p31.Y = t2 + t2; + p31.Y += t2; + p31.X = t1 - p31.Y; + p31.Y += t1; + p31.Y *= p31.X; + p31.X *= t3; + p31.Z += (p31.Z + p31.Z); + t3 = p31.Z; + p31.Z = t0 + t0; + t0 += p31.Z; + t0 *= t3; + p31.Y += t0; + t2 = Y1 * Z1; + t2 += t2; + t0 = t2 * t3; + p31.X -= t0; + p31.Z = t2 * t1; + p31.Z += p31.Z; + p31.Z += p31.Z; + } + +#ifdef __CUDA_ARCH__ + *this = p31; +#endif + } + +}; +#endif diff --git a/arkworks3-sppark-wlc/sppark/ec/xyzz_t.hpp b/arkworks3-sppark-wlc/sppark/ec/xyzz_t.hpp new file mode 100644 index 000000000..ea3281639 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ec/xyzz_t.hpp @@ -0,0 +1,401 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifndef __XYZZ_T_HPP__ +#define __XYZZ_T_HPP__ + +#ifndef __CUDA_ARCH__ +# undef __host__ +# define __host__ +# undef __device__ +# define __device__ +# undef __noinline__ +# define __noinline__ +#endif + +template class xyzz_t { + field_t X, Y, ZZZ, ZZ; + +public: +#ifdef __NVCC__ + class affine_inf_t { friend xyzz_t; + field_t X, Y; + int inf[sizeof(field_t)%16 ? 2 : 4]; + + inline __device__ bool is_inf() const + { return inf[0]&1 != 0; } + }; +#else + class affine_inf_t { friend xyzz_t; + field_t X, Y; + bool inf; + + inline __device__ bool is_inf() const + { return inf; } + }; +#endif + + class affine_t { friend xyzz_t; + field_t X, Y; + + inline __device__ bool is_inf() const + { return (bool)(X.is_zero() & Y.is_zero()); } + + public: + inline affine_t& operator=(const xyzz_t& a) + { + Y = 1/a.ZZZ; + X = Y * a.ZZ; // 1/Z + X = X^2; // 1/Z^2 + X *= a.X; // X/Z^2 + Y *= a.Y; // Y/Z^3 + return *this; + } + inline affine_t(const xyzz_t& a) { *this = a; } + }; + + inline operator affine_t() const { return affine_t(*this); } + + template + inline __device__ xyzz_t& operator=(const affine_t& a) + { + X = a.X; + Y = a.Y; + // this works as long as |a| was confirmed to be non-infinity + ZZZ = ZZ = field_t::one(); + return *this; + } + + template + inline __device__ void xyzz_to_affine(affine_t& a) { + a.Y = ZZZ.inv(); + a.X = a.Y * ZZ; // 1/Z + a.X = a.X^2; // 1/Z^2 + a.X *= X; // X/Z^2 + a.Y *= Y; // Y/Z^3 + } + + inline __device__ void xyzz_print() { + field_t x; + field_t y; + y = ZZZ.inv(); + x = y * ZZ; + x = x^2; + x *= X; + y *= Y; + + x.from(); + y.from(); + printf("--------\n"); + for (int i = 11; i >= 0; i--) { + printf("%08x", *((uint32_t*)(&x) + i)); + } + printf("\n"); + for (int i = 11; i >= 0; i--) { + printf("%08x", *((uint32_t*)(&y) + i)); + } + printf("\n--------\n"); + + } + + inline __device__ operator jacobian_t() const + { return jacobian_t{ X*ZZ, Y*ZZZ, ZZ }; } + + inline __device__ bool is_inf() const { return (bool)(ZZZ.is_zero() & ZZ.is_zero()); } + inline __device__ void inf() { ZZZ.zero(); ZZ.zero(); } + + inline __device__ void neg(bool subtract = false) { + this->Y.cneg(subtract); + } + + /* + * http://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz.html#addition-add-2008-s + * http://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz.html#doubling-dbl-2008-s-1 + * with twist to handle either input at infinity. Addition costs 12M+2S, + * while conditional doubling - 4M+6M+3S. + */ + __device__ void add(const xyzz_t& p2) + { + if (p2.is_inf()) { + return; + } else if (is_inf()) { + *this = p2; + return; + } + +#ifdef __CUDA_ARCH__ + xyzz_t p31 = *this; +#else + xyzz_t& p31 = *this; +#endif + bool mix = p2.ZZ.is_one() && p2.ZZZ.is_one(); + + field_t U, S, P, R; + + if (mix) { + U = p31.X; + S = p31.Y; + } else { + U = p31.X * p2.ZZ; /* U1 = X1*ZZ2 */ + S = p31.Y * p2.ZZZ; /* S1 = Y1*ZZZ2 */ + } + P = p2.X * p31.ZZ; /* U2 = X2*ZZ1 */ + R = p2.Y * p31.ZZZ; /* S2 = Y2*ZZZ1 */ + P -= U; /* P = U2-U1 */ + R -= S; /* R = S2-S1 */ + + if (!P.is_zero()) { /* X1!=X2 */ + field_t PP; /* add |p1| and |p2| */ + + PP = P^2; /* PP = P^2 */ +#define PPP P + PPP = P * PP; /* PPP = P*PP */ + p31.ZZ *= PP; /* ZZ3 = ZZ1*ZZ2*PP */ + p31.ZZZ *= PPP; /* ZZZ3 = ZZZ1*ZZZ2*PPP */ +#define Q PP + Q = U * PP; /* Q = U1*PP */ + + p31.X = R^2; /* R^2 */ + p31.X -= PPP; /* R^2-PPP */ + p31.X -= Q; + p31.X -= Q; /* X3 = R^2-PPP-2*Q */ + Q -= p31.X; + + auto Y31 = field_t::wide_t(Q, R); + auto Y32 = field_t::wide_t(S, PPP); + Y31 -= Y32; + p31.Y = normalize(Y31); + // Q *= R; /* R*(Q-X3) */ + // p31.Y = S * PPP; /* S1*PPP */ + // p31.Y = Q - p31.Y; /* Y3 = R*(Q-X3)-S1*PPP */ + if (!mix) { + p31.ZZ *= p2.ZZ; /* ZZ1*ZZ2 */ + p31.ZZZ *= p2.ZZZ; /* ZZZ1*ZZZ2 */ +#undef PPP +#undef Q + } + } else if (R.is_zero()) { /* X1==X2 && Y1==Y2 */ + + field_t M; /* double |p1| */ + + U = p31.Y + p31.Y; /* U = 2*Y1 */ +#define V P +#define W R + V = U^2; /* V = U^2 */ + W = U * V; /* W = U*V */ + S = p31.X * V; /* S = X1*V */ + M = p31.X^2; + M = M + M + M; /* M = 3*X1^2[+a*ZZ1^2] */ + p31.X = M^2; + p31.X -= S; + p31.X -= S; /* X3 = M^2-2*S */ + + S -= p31.X; + + auto Y31 = field_t::wide_t(S, M); + auto Y32 = field_t::wide_t(W, p31.Y); + Y31 -= Y32; + p31.Y = normalize(Y31); + // S *= M; /* M*(S-X3) */ + // p31.Y *= W; /* W*Y1 */ + // p31.Y = S - p31.Y; /* Y3 = M*(S-X3)-W*Y1 */ + if (mix) { + p31.ZZ = V; + p31.ZZZ = W; + } else { + p31.ZZ *= V; /* ZZ3 = V*ZZ1 */ + p31.ZZZ *= W; /* ZZZ3 = W*ZZZ1 */ + } +#undef V +#undef W + } else { /* X1==X2 && Y1==-Y2 */ + p31.inf(); /* set |p3| to infinity */ + } + + +// field_t PP; /* add |p1| and |p2| */ + +// PP = P^2; /* PP = P^2 */ +// #define PPP P +// PPP = P * PP; /* PPP = P*PP */ +// p31.ZZ *= PP; /* ZZ3 = ZZ1*ZZ2*PP */ +// p31.ZZZ *= PPP; /* ZZZ3 = ZZZ1*ZZZ2*PPP */ +// #define Q PP +// Q = U * PP; /* Q = U1*PP */ + +// p31.X = R^2; /* R^2 */ +// p31.X -= PPP; /* R^2-PPP */ +// p31.X -= Q; +// p31.X -= Q; /* X3 = R^2-PPP-2*Q */ +// Q -= p31.X; + +// auto Y31 = field_t::wide_t(Q, R); +// auto Y32 = field_t::wide_t(S, PPP); +// Y31 -= Y32; +// p31.Y = normalize(Y31); +// // Q *= R; /* R*(Q-X3) */ +// // p31.Y = S * PPP; /* S1*PPP */ +// // p31.Y = Q - p31.Y; /* Y3 = R*(Q-X3)-S1*PPP */ +// if (!mix) { +// p31.ZZ *= p2.ZZ; /* ZZ1*ZZ2 */ +// p31.ZZZ *= p2.ZZZ; /* ZZZ1*ZZZ2 */ +// #undef PPP +// #undef Q +// } + +#ifdef __CUDA_ARCH__ + *this = p31; +#endif + } + + + __device__ bool is_equal(const xyzz_t& p2) { +#ifdef __CUDA_ARCH__ + xyzz_t p31 = *this; +#else + xyzz_t& p31 = *this; +#endif + if (p2.is_inf()) { + return (bool)is_inf(); + } else if (p31.is_inf()) { + return (bool)p2.is_inf(); + } + + field_t U, S, P, R; + + U = p31.X * p2.ZZ; /* U1 = X1*ZZ2 */ + S = p31.Y * p2.ZZZ; /* S1 = Y1*ZZZ2 */ + P = p2.X * p31.ZZ; /* U2 = X2*ZZ1 */ + R = p2.Y * p31.ZZZ; /* S2 = Y2*ZZZ1 */ + P -= U; /* P = U2-U1 */ + R -= S; /* R = S2-S1 */ + + return (bool)(P.is_zero() & R.is_zero()); + } + + + __device__ void dbl() + { + if (is_inf()) { + return; + } +#ifdef __CUDA_ARCH__ + xyzz_t p31 = *this; +#else + xyzz_t& p31 = *this; +#endif + field_t M; /* double |p1| */ + field_t U, V, W, S; + + U = p31.Y + p31.Y; /* U = 2*Y1 */ + V = U^2; /* V = U^2 */ + W = U * V; /* W = U*V */ + S = p31.X * V; /* S = X1*V */ + M = p31.X^2; + M = M + M + M; /* M = 3*X1^2[+a*ZZ1^2] */ + p31.X = M^2; + p31.X -= S; + p31.X -= S; /* X3 = M^2-2*S */ + S -= p31.X; + + auto Y31 = field_t::wide_t(S, M); + auto Y32 = field_t::wide_t(W, p31.Y); + Y31 -= Y32; + p31.Y = normalize(Y31); + +// S *= M; /* M*(S-X3) */ +// p31.Y *= W; /* W*Y1 */ +// p31.Y = S - p31.Y; /* Y3 = M*(S-X3)-W*Y1 */ + if (p31.ZZ.is_one() && p31.ZZZ.is_one()) { + p31.ZZ = V; + p31.ZZZ = W; + } else { + p31.ZZ *= V; /* ZZ3 = V*ZZ1 */ + p31.ZZZ *= W; /* ZZZ3 = W*ZZZ1 */ + } +#ifdef __CUDA_ARCH__ + *this = p31; +#endif + } + + /* + * http://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz.html#addition-madd-2008-s + * http://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz.html#doubling-mdbl-2008-s-1 + * with twists to handle even subtractions and either input at infinity. + * Addition costs 8M+2S, while conditional doubling - 2M+4M+3S. + */ + template + __device__ void add(const affine_t& p2, bool subtract = false) + { +#ifdef __CUDA_ARCH__ + xyzz_t p31 = *this; +#else + xyzz_t& p31 = *this; +#endif + + if (p2.is_inf()) { + return; + } else if (p31.is_inf()) { + p31 = p2; + p31.ZZZ.cneg(subtract); + } else { + field_t P, R; + + R = p2.Y * p31.ZZZ; /* S2 = Y2*ZZZ1 */ + R.cneg(subtract); + R -= p31.Y; /* R = S2-Y1 */ + P = p2.X * p31.ZZ; /* U2 = X2*ZZ1 */ + P -= p31.X; /* P = U2-X1 */ + + if (!P.is_zero()) { /* X1!=X2 */ + field_t PP; /* add |p2| to |p1| */ + + PP = P^2; /* PP = P^2 */ +#define PPP P + PPP = P * PP; /* PPP = P*PP */ + p31.ZZ *= PP; /* ZZ3 = ZZ1*PP */ + p31.ZZZ *= PPP; /* ZZZ3 = ZZZ1*PPP */ +#define Q PP + Q = PP * p31.X; /* Q = X1*PP */ + p31.X = R^2; /* R^2 */ + p31.X -= PPP; /* R^2-PPP */ + p31.X -= Q; + p31.X -= Q; /* X3 = R^2-PPP-2*Q */ + Q -= p31.X; + Q *= R; /* R*(Q-X3) */ + p31.Y *= PPP; /* Y1*PPP */ + p31.Y = Q - p31.Y; /* Y3 = R*(Q-X3)-Y1*PPP */ +#undef Q +#undef PPP + } else if (R.is_zero()) { /* X1==X2 && Y1==Y2 */ + field_t M; /* double |p2| */ + +#define U P + U = p2.Y + p2.Y; /* U = 2*Y1 */ + p31.ZZ = U^2; /* [ZZ3 =] V = U^2 */ + p31.ZZZ = p31.ZZ * U; /* [ZZZ3 =] W = U*V */ +#define S R + S = p2.X * p31.ZZ; /* S = X1*V */ + M = p2.X^2; + M = M + M + M; /* M = 3*X1^2[+a] */ + p31.X = M^2; + p31.X -= S; + p31.X -= S; /* X3 = M^2-2*S */ + p31.Y = p31.ZZZ * p2.Y; /* W*Y1 */ + S -= p31.X; + S *= M; /* M*(S-X3) */ + p31.Y = S - p31.Y; /* Y3 = M*(S-X3)-W*Y1 */ +#undef S +#undef U + p31.ZZZ.cneg(subtract); + } else { /* X1==X2 && Y1==-Y2 */ + p31.inf(); /* set |p3| to infinity */ + } + } +#ifdef __CUDA_ARCH__ + *this = p31; +#endif + } +}; +#endif diff --git a/arkworks3-sppark-wlc/sppark/ff/alt_bn128.hpp b/arkworks3-sppark-wlc/sppark/ff/alt_bn128.hpp new file mode 100644 index 000000000..af14c8150 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ff/alt_bn128.hpp @@ -0,0 +1,79 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifdef __NVCC__ +#include + +namespace device { +#define TO_CUDA_T(limb64) (uint32_t)(limb64), (uint32_t)(limb64>>32) + static __device__ __constant__ const uint32_t ALT_BN128_P[8] = { + TO_CUDA_T(0x3c208c16d87cfd47), TO_CUDA_T(0x97816a916871ca8d), + TO_CUDA_T(0xb85045b68181585d), TO_CUDA_T(0x30644e72e131a029) + }; + static __device__ __constant__ const uint32_t ALT_BN128_RR[8] = { /* (1<<512)%P */ + TO_CUDA_T(0xf32cfc5b538afa89), TO_CUDA_T(0xb5e71911d44501fb), + TO_CUDA_T(0x47ab1eff0a417ff6), TO_CUDA_T(0x06d89f71cab8351f), + }; + static __device__ __constant__ const uint32_t ALT_BN128_one[8] = { /* (1<<256)%P */ + TO_CUDA_T(0xd35d438dc58f0d9d), TO_CUDA_T(0x0a78eb28f5c70b3d), + TO_CUDA_T(0x666ea36f7879462c), TO_CUDA_T(0x0e0a77c19a07df2f) + }; + static __device__ __constant__ const uint32_t ALT_BN128_M0 = 0xe4866389; + + static __device__ __constant__ const uint32_t ALT_BN128_r[8] = { + TO_CUDA_T(0x43e1f593f0000001), TO_CUDA_T(0x2833e84879b97091), + TO_CUDA_T(0xb85045b68181585d), TO_CUDA_T(0x30644e72e131a029) + }; + static __device__ __constant__ const uint32_t ALT_BN128_rRR[8] = { /* (1<<512)%P */ + TO_CUDA_T(0x1bb8e645ae216da7), TO_CUDA_T(0x53fe3ab1e35c59e3), + TO_CUDA_T(0x8c49833d53bb8085), TO_CUDA_T(0x0216d0b17f4e44a5) + }; + static __device__ __constant__ const uint32_t ALT_BN128_rone[8] = { /* (1<<256)%P */ + TO_CUDA_T(0xac96341c4ffffffb), TO_CUDA_T(0x36fc76959f60cd29), + TO_CUDA_T(0x666ea36f7879462e), TO_CUDA_T(0x0e0a77c19a07df2f) + }; + static __device__ __constant__ const uint32_t ALT_BN128_m0 = 0xefffffff; +} +# ifdef __CUDA_ARCH__ // device-side field types +# include "mont_t.cuh" +typedef mont_t<254, device::ALT_BN128_P, device::ALT_BN128_M0, + device::ALT_BN128_RR, device::ALT_BN128_one> fp_t; +typedef mont_t<254, device::ALT_BN128_r, device::ALT_BN128_m0, + device::ALT_BN128_rRR, device::ALT_BN128_rone> fr_t; +# endif +#endif + +#ifndef __CUDA_ARCH__ // host-side field types +# include + +static const vec256 ALT_BN128_P = { + TO_LIMB_T(0x3c208c16d87cfd47), TO_LIMB_T(0x97816a916871ca8d), + TO_LIMB_T(0xb85045b68181585d), TO_LIMB_T(0x30644e72e131a029) +}; +static const vec256 ALT_BN128_RR = { /* (1<<512)%P */ + TO_LIMB_T(0xf32cfc5b538afa89), TO_LIMB_T(0xb5e71911d44501fb), + TO_LIMB_T(0x47ab1eff0a417ff6), TO_LIMB_T(0x06d89f71cab8351f), +}; +static const vec256 ALT_BN128_ONE = { /* (1<<256)%P */ + TO_LIMB_T(0xd35d438dc58f0d9d), TO_LIMB_T(0x0a78eb28f5c70b3d), + TO_LIMB_T(0x666ea36f7879462c), TO_LIMB_T(0x0e0a77c19a07df2f) +}; +typedef blst_256_t fp_t; + +static const vec256 ALT_BN128_r = { + TO_LIMB_T(0x43e1f593f0000001), TO_LIMB_T(0x2833e84879b97091), + TO_LIMB_T(0xb85045b68181585d), TO_LIMB_T(0x30644e72e131a029) +}; +static const vec256 ALT_BN128_rRR = { /* (1<<512)%r */ + TO_LIMB_T(0x1bb8e645ae216da7), TO_LIMB_T(0x53fe3ab1e35c59e3), + TO_LIMB_T(0x8c49833d53bb8085), TO_LIMB_T(0x0216d0b17f4e44a5) +}; +static const vec256 ALT_BN128_rONE = { /* (1<<256)%r */ + TO_LIMB_T(0xac96341c4ffffffb), TO_LIMB_T(0x36fc76959f60cd29), + TO_LIMB_T(0x666ea36f7879462e), TO_LIMB_T(0x0e0a77c19a07df2f) +}; +typedef blst_256_t fr_t; +#endif diff --git a/arkworks3-sppark-wlc/sppark/ff/bls12-377.hpp b/arkworks3-sppark-wlc/sppark/ff/bls12-377.hpp new file mode 100644 index 000000000..96f8c4bbc --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ff/bls12-377.hpp @@ -0,0 +1,85 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifdef __NVCC__ +#include + +namespace device { +#define TO_CUDA_T(limb64) (uint32_t)(limb64), (uint32_t)(limb64>>32) + static __device__ __constant__ const uint32_t BLS12_377_P[12] = { + TO_CUDA_T(0x8508c00000000001), TO_CUDA_T(0x170b5d4430000000), + TO_CUDA_T(0x1ef3622fba094800), TO_CUDA_T(0x1a22d9f300f5138f), + TO_CUDA_T(0xc63b05c06ca1493b), TO_CUDA_T(0x01ae3a4617c510ea) + }; + static __device__ __constant__ const uint32_t BLS12_377_RR[12] = { /* (1<<768)%P */ + TO_CUDA_T(0xb786686c9400cd22), TO_CUDA_T(0x0329fcaab00431b1), + TO_CUDA_T(0x22a5f11162d6b46d), TO_CUDA_T(0xbfdf7d03827dc3ac), + TO_CUDA_T(0x837e92f041790bf9), TO_CUDA_T(0x006dfccb1e914b88) + }; + static __device__ __constant__ const uint32_t BLS12_377_one[12] = { /* (1<<384)%P */ + TO_CUDA_T(0x02cdffffffffff68), TO_CUDA_T(0x51409f837fffffb1), + TO_CUDA_T(0x9f7db3a98a7d3ff2), TO_CUDA_T(0x7b4e97b76e7c6305), + TO_CUDA_T(0x4cf495bf803c84e8), TO_CUDA_T(0x008d6661e2fdf49a) + }; + static __device__ __constant__ /*const*/ uint32_t BLS12_377_M0 = 0xffffffff; + + static __device__ __constant__ const uint32_t BLS12_377_r[8] = { + TO_CUDA_T(0x0a11800000000001), TO_CUDA_T(0x59aa76fed0000001), + TO_CUDA_T(0x60b44d1e5c37b001), TO_CUDA_T(0x12ab655e9a2ca556) + }; + static __device__ __constant__ const uint32_t BLS12_377_rRR[8] = { /* (1<<512)%P */ + TO_CUDA_T(0x25d577bab861857b), TO_CUDA_T(0xcc2c27b58860591f), + TO_CUDA_T(0xa7cc008fe5dc8593), TO_CUDA_T(0x011fdae7eff1c939) + }; + static __device__ __constant__ const uint32_t BLS12_377_rone[8] = { /* (1<<256)%P */ + TO_CUDA_T(0x7d1c7ffffffffff3), TO_CUDA_T(0x7257f50f6ffffff2), + TO_CUDA_T(0x16d81575512c0fee), TO_CUDA_T(0x0d4bda322bbb9a9d) + }; + static __device__ __constant__ /*const*/ uint32_t BLS12_377_m0 = 0xffffffff; +} +# ifdef __CUDA_ARCH__ // device-side field types +# include "mont_t.cuh" +typedef mont_t<377, device::BLS12_377_P, device::BLS12_377_M0, + device::BLS12_377_RR, device::BLS12_377_one> fp_t; +typedef mont_t<253, device::BLS12_377_r, device::BLS12_377_m0, + device::BLS12_377_rRR, device::BLS12_377_rone> fr_t; +# endif +#endif + +#ifndef __CUDA_ARCH__ // host-side field types +# include + +static const vec384 BLS12_377_P = { + TO_LIMB_T(0x8508c00000000001), TO_LIMB_T(0x170b5d4430000000), + TO_LIMB_T(0x1ef3622fba094800), TO_LIMB_T(0x1a22d9f300f5138f), + TO_LIMB_T(0xc63b05c06ca1493b), TO_LIMB_T(0x01ae3a4617c510ea) +}; +static const vec384 BLS12_377_RR = { /* (1<<768)%P */ + TO_LIMB_T(0xb786686c9400cd22), TO_LIMB_T(0x0329fcaab00431b1), + TO_LIMB_T(0x22a5f11162d6b46d), TO_LIMB_T(0xbfdf7d03827dc3ac), + TO_LIMB_T(0x837e92f041790bf9), TO_LIMB_T(0x006dfccb1e914b88) +}; +static const vec384 BLS12_377_ONE = { /* (1<<384)%P */ + TO_LIMB_T(0x02cdffffffffff68), TO_LIMB_T(0x51409f837fffffb1), + TO_LIMB_T(0x9f7db3a98a7d3ff2), TO_LIMB_T(0x7b4e97b76e7c6305), + TO_LIMB_T(0x4cf495bf803c84e8), TO_LIMB_T(0x008d6661e2fdf49a) +}; +typedef blst_384_t fp_t; + +static const vec256 BLS12_377_r = { + TO_LIMB_T(0x0a11800000000001), TO_LIMB_T(0x59aa76fed0000001), + TO_LIMB_T(0x60b44d1e5c37b001), TO_LIMB_T(0x12ab655e9a2ca556) +}; +static const vec256 BLS12_377_rRR = { /* (1<<512)%r */ + TO_LIMB_T(0x25d577bab861857b), TO_LIMB_T(0xcc2c27b58860591f), + TO_LIMB_T(0xa7cc008fe5dc8593), TO_LIMB_T(0x011fdae7eff1c939) +}; +static const vec256 BLS12_377_rONE = { /* (1<<256)%r */ + TO_LIMB_T(0x7d1c7ffffffffff3), TO_LIMB_T(0x7257f50f6ffffff2), + TO_LIMB_T(0x16d81575512c0fee), TO_LIMB_T(0x0d4bda322bbb9a9d) +}; +typedef blst_256_t fr_t; +#endif diff --git a/arkworks3-sppark-wlc/sppark/ff/bls12-381.hpp b/arkworks3-sppark-wlc/sppark/ff/bls12-381.hpp new file mode 100644 index 000000000..1a728bbbd --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ff/bls12-381.hpp @@ -0,0 +1,85 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifdef __NVCC__ +#include + +namespace device { +#define TO_CUDA_T(limb64) (uint32_t)(limb64), (uint32_t)(limb64>>32) + static __device__ __constant__ const uint32_t BLS12_381_P[12] = { + TO_CUDA_T(0xb9feffffffffaaab), TO_CUDA_T(0x1eabfffeb153ffff), + TO_CUDA_T(0x6730d2a0f6b0f624), TO_CUDA_T(0x64774b84f38512bf), + TO_CUDA_T(0x4b1ba7b6434bacd7), TO_CUDA_T(0x1a0111ea397fe69a) + }; + static __device__ __constant__ const uint32_t BLS12_381_RR[12] = { /* (1<<768)%P */ + TO_CUDA_T(0xf4df1f341c341746), TO_CUDA_T(0x0a76e6a609d104f1), + TO_CUDA_T(0x8de5476c4c95b6d5), TO_CUDA_T(0x67eb88a9939d83c0), + TO_CUDA_T(0x9a793e85b519952d), TO_CUDA_T(0x11988fe592cae3aa) + }; + static __device__ __constant__ const uint32_t BLS12_381_one[12] = { /* (1<<384)%P */ + TO_CUDA_T(0x760900000002fffd), TO_CUDA_T(0xebf4000bc40c0002), + TO_CUDA_T(0x5f48985753c758ba), TO_CUDA_T(0x77ce585370525745), + TO_CUDA_T(0x5c071a97a256ec6d), TO_CUDA_T(0x15f65ec3fa80e493) + }; + static __device__ __constant__ const uint32_t BLS12_381_M0 = 0xfffcfffd; + + static __device__ __constant__ const uint32_t BLS12_381_r[8] = { + TO_CUDA_T(0xffffffff00000001), TO_CUDA_T(0x53bda402fffe5bfe), + TO_CUDA_T(0x3339d80809a1d805), TO_CUDA_T(0x73eda753299d7d48) + }; + static __device__ __constant__ const uint32_t BLS12_381_rRR[8] = { /* (1<<512)%P */ + TO_CUDA_T(0xc999e990f3f29c6d), TO_CUDA_T(0x2b6cedcb87925c23), + TO_CUDA_T(0x05d314967254398f), TO_CUDA_T(0x0748d9d99f59ff11) + }; + static __device__ __constant__ const uint32_t BLS12_381_rone[8] = { /* (1<<256)%P */ + TO_CUDA_T(0x00000001fffffffe), TO_CUDA_T(0x5884b7fa00034802), + TO_CUDA_T(0x998c4fefecbc4ff5), TO_CUDA_T(0x1824b159acc5056f) + }; + static __device__ __constant__ /*const*/ uint32_t BLS12_381_m0 = 0xffffffff; +} +# ifdef __CUDA_ARCH__ // device-side field types +# include "mont_t.cuh" +typedef mont_t<381, device::BLS12_381_P, device::BLS12_381_M0, + device::BLS12_381_RR, device::BLS12_381_one> fp_t; +typedef mont_t<255, device::BLS12_381_r, device::BLS12_381_m0, + device::BLS12_381_rRR, device::BLS12_381_rone> fr_t; +# endif +#endif + +#ifndef __CUDA_ARCH__ // host-side field types +# include + +static const vec384 BLS12_381_P = { + TO_LIMB_T(0xb9feffffffffaaab), TO_LIMB_T(0x1eabfffeb153ffff), + TO_LIMB_T(0x6730d2a0f6b0f624), TO_LIMB_T(0x64774b84f38512bf), + TO_LIMB_T(0x4b1ba7b6434bacd7), TO_LIMB_T(0x1a0111ea397fe69a) +}; +static const vec384 BLS12_381_RR = { /* (1<<768)%P */ + TO_LIMB_T(0xf4df1f341c341746), TO_LIMB_T(0x0a76e6a609d104f1), + TO_LIMB_T(0x8de5476c4c95b6d5), TO_LIMB_T(0x67eb88a9939d83c0), + TO_LIMB_T(0x9a793e85b519952d), TO_LIMB_T(0x11988fe592cae3aa) +}; +static const vec384 BLS12_381_ONE = { /* (1<<384)%P */ + TO_LIMB_T(0x760900000002fffd), TO_LIMB_T(0xebf4000bc40c0002), + TO_LIMB_T(0x5f48985753c758ba), TO_LIMB_T(0x77ce585370525745), + TO_LIMB_T(0x5c071a97a256ec6d), TO_LIMB_T(0x15f65ec3fa80e493) +}; +typedef blst_384_t<381, BLS12_381_P, 0x89f3fffcfffcfffd, + BLS12_381_RR, BLS12_381_ONE> fp_t; + +static const vec256 BLS12_381_r = { + TO_LIMB_T(0xffffffff00000001), TO_LIMB_T(0x53bda402fffe5bfe), + TO_LIMB_T(0x3339d80809a1d805), TO_LIMB_T(0x73eda753299d7d48) +}; +static const vec256 BLS12_381_rRR = { /* (1<<512)%r */ + TO_LIMB_T(0xc999e990f3f29c6d), TO_LIMB_T(0x2b6cedcb87925c23), + TO_LIMB_T(0x05d314967254398f), TO_LIMB_T(0x0748d9d99f59ff11) +}; +static const vec256 BLS12_381_rONE = { /* (1<<256)%r */ + TO_LIMB_T(0x00000001fffffffe), TO_LIMB_T(0x5884b7fa00034802), + TO_LIMB_T(0x998c4fefecbc4ff5), TO_LIMB_T(0x1824b159acc5056f) +}; +typedef blst_256_t<255, BLS12_381_r, 0xfffffffeffffffff, + BLS12_381_rRR, BLS12_381_rONE> fr_t; +#endif diff --git a/arkworks3-sppark-wlc/sppark/ff/mont_t.cuh b/arkworks3-sppark-wlc/sppark/ff/mont_t.cuh new file mode 100644 index 000000000..b36a17536 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/ff/mont_t.cuh @@ -0,0 +1,628 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#if defined(__CUDA_ARCH__) && !defined(__MONT_T_CUH__) +# define __MONT_T_CUH__ + +# include +# include + +# define inline __device__ __forceinline__ +# ifdef __GNUC__ +# define asm __asm__ __volatile__ +# else +# define asm asm volatile +# endif + +// +// To instantiate declare modulus as __device__ __constant___ const and +// complement it with its factual bit-length and the corresponding 32-bit +// Motgomery factor. Bit-length has to be such that (N+31)/32 is even +// and not less than 4. +// +// Special note about M0 being declared as uint32_t& [as opposed to just +// uint32_t]. It was noted that if M0 is 0xffffffff, CUDA compiler +// generates suboptimal code for Montgomery reduction. The way to work +// around the problem is to prevent compiler from viewing it as constant. +// For this reason it's suggested to declare the parameter as following: +// +// __device__ __constant__ /*const*/ my_M0 = ; +// +template +class __align__(((N+63)/64)&1 ? 8 : 16) mont_t { +private: + static const size_t n = (N+31)/32; + uint32_t even[n]; + + static inline void mul_n(uint32_t* acc, const uint32_t* a, uint32_t bi, + size_t n=n) + { + for (size_t j = 0; j < n; j += 2) + asm("mul.lo.u32 %0, %2, %3; mul.hi.u32 %1, %2, %3;" + : "=r"(acc[j]), "=r"(acc[j+1]) + : "r"(a[j]), "r"(bi)); + } + + static inline void cmad_n(uint32_t* acc, const uint32_t* a, uint32_t bi, + size_t n=n) + { + asm("mad.lo.cc.u32 %0, %2, %3, %0; madc.hi.cc.u32 %1, %2, %3, %1;" + : "+r"(acc[0]), "+r"(acc[1]) + : "r"(a[0]), "r"(bi)); + for (size_t j = 2; j < n; j += 2) + asm("madc.lo.cc.u32 %0, %2, %3, %0; madc.hi.cc.u32 %1, %2, %3, %1;" + : "+r"(acc[j]), "+r"(acc[j+1]) + : "r"(a[j]), "r"(bi)); + // return carry flag + } +public: + class wide_t { + private: + uint32_t even[2*n]; + + private: + static inline void mad_row(uint32_t* odd, uint32_t* even, + const uint32_t* a, uint32_t bi, size_t n=n) + { + cmad_n(odd, a+1, bi, n-2); + asm("madc.lo.cc.u32 %0, %2, %3, 0; madc.hi.u32 %1, %2, %3, 0;" + : "=r"(odd[n-2]), "=r"(odd[n-1]) + : "r"(a[n-1]), "r"(bi)); + + cmad_n(even, a, bi, n); + asm("addc.u32 %0, %0, 0;" : "+r"(odd[n-1])); + } + + public: + inline wide_t(const mont_t& a, const mont_t& b) //// |a|*|b| + { + size_t i = 0; + uint32_t odd[2*n-2]; + + mul_n(even, a, b[0]); + mul_n(odd, a+1, b[0]); + ++i; mad_row(&even[i+1], &odd[i-1], a, b[i]); + + #pragma unroll + while (i < n-2) { + ++i; mad_row(&odd[i], &even[i], a, b[i]); + ++i; mad_row(&even[i+1], &odd[i-1], a, b[i]); + } + + // merge |even| and |odd| + asm("add.cc.u32 %0, %0, %1;" : "+r"(even[1]) : "r"(odd[0])); + for (i = 1; i < 2*n-2; i++) + asm("addc.cc.u32 %0, %0, %1;" : "+r"(even[i+1]) : "r"(odd[i])); + asm("addc.u32 %0, %0, 0;" : "+r"(even[i+1])); + } + + private: + static inline void qad_row(uint32_t* odd, uint32_t* even, + const uint32_t* a, uint32_t bi, size_t n) + { + cmad_n(odd, a, bi, n-2); + asm("madc.lo.cc.u32 %0, %2, %3, 0; madc.hi.u32 %1, %2, %3, 0;" + : "=r"(odd[n-2]), "=r"(odd[n-1]) + : "r"(a[n-2]), "r"(bi)); + + cmad_n(even, a+1, bi, n-2); + asm("addc.u32 %0, %0, 0;" : "+r"(odd[n-1])); + } + + public: + inline wide_t(const mont_t& a) //// |a|**2 + { + size_t i = 0, j; + uint32_t odd[2*n-2]; + + // perform |a[i]|*|a[j]| for all j>i + mul_n(even+2, a+2, a[0], n-2); + mul_n(odd, a+1, a[0], n); + + #pragma unroll + while (i < n-4) { + ++i; mad_row(&even[2*i+2], &odd[2*i], &a[i+1], a[i], n-i-1); + ++i; qad_row(&odd[2*i], &even[2*i+2], &a[i+1], a[i], n-i); + } + + asm("mul.lo.u32 %0, %2, %3; mul.hi.u32 %1, %2, %3;" + : "=r"(even[2*n-4]), "=r"(even[2*n-3]) + : "r"(a[n-1]), "r"(a[n-3])); + asm("mad.lo.cc.u32 %0, %2, %3, %0; madc.hi.cc.u32 %1, %2, %3, %1;" + : "+r"(odd[2*n-6]), "+r"(odd[2*n-5]) + : "r"(a[n-2]), "r"(a[n-3])); + asm("addc.u32 %0, %0, 0;" : "+r"(even[2*n-3])); + + asm("mul.lo.u32 %0, %2, %3; mul.hi.u32 %1, %2, %3;" + : "=r"(odd[2*n-4]), "=r"(odd[2*n-3]) + : "r"(a[n-1]), "r"(a[n-2])); + + // merge |even[2:]| and |odd[1:]| + asm("add.cc.u32 %0, %0, %1;" : "+r"(even[2]) : "r"(odd[1])); + for (j = 2; j < 2*n-3; j++) + asm("addc.cc.u32 %0, %0, %1;" : "+r"(even[j+1]) : "r"(odd[j])); + asm("addc.u32 %0, %1, 0;" : "+r"(even[j+1]) : "r"(odd[j])); + + // double |even| + even[0] = 0; + asm("add.cc.u32 %0, %1, %1;" : "=r"(even[1]) : "r"(odd[0])); + for (j = 2; j < 2*n-1; j++) + asm("addc.cc.u32 %0, %0, %0;" : "+r"(even[j])); + asm("addc.u32 %0, 0, 0;" : "=r"(even[j])); + + // accumulate "diagonal" |a[i]|*|a[i]| product + i = 0; + asm("mad.lo.cc.u32 %0, %2, %2, %0; madc.hi.cc.u32 %1, %2, %2, %1;" + : "+r"(even[2*i]), "+r"(even[2*i+1]) + : "r"(a[i])); + for (++i; i < n; i++) + asm("madc.lo.cc.u32 %0, %2, %2, %0; madc.hi.cc.u32 %1, %2, %2, %1;" + : "+r"(even[2*i]), "+r"(even[2*i+1]) + : "r"(a[i])); + } + + inline uint32_t& operator[](size_t i) { return even[i]; } + inline const uint32_t& operator[](size_t i) const { return even[i]; } + + inline wide_t& operator-=(const wide_t& b) { + size_t i; + const size_t nn = 2*n; + uint32_t tmp[nn], borrow; + + asm("sub.cc.u32 %0, %0, %1;" : "+r"(even[0]) : "r"(b[0])); + for (i = 1; i < nn; i++) + asm("subc.cc.u32 %0, %0, %1;" : "+r"(even[i]) : "r"(b[i])); + asm("subc.u32 %0, 0, 0;" : "=r"(borrow)); + + asm("add.cc.u32 %0, %1, 0;" : "=r"(tmp[0]) : "r"(even[0])); + for (i = 1; i < n; i++) + asm("addc.cc.u32 %0, %1, 0;" : "=r"(tmp[i]) : "r"(even[i])); + for (i = n; i < nn-1; i++) + asm("addc.cc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(even[i]), "r"(MOD[i-n])); + asm("addc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(even[i]), "r"(MOD[n-1])); + + asm("{ .reg.pred %top; setp.ne.u32 %top, %0, 0;" :: "r"(borrow)); + for (i = 0; i < nn; i++) + asm("@%top mov.b32 %0, %1;" : "+r"(even[i]) : "r"(tmp[i])); + asm("}"); + + return *this; + } + + friend inline wide_t operator-(wide_t a, const wide_t& b) { + return a -= b; + } + + friend mont_t; + }; + +private: + inline operator const uint32_t*() const { return even; } + inline operator uint32_t*() { return even; } + +public: + inline uint32_t& operator[](size_t i) { return even[i]; } + inline const uint32_t& operator[](size_t i) const { return even[i]; } + inline mont_t() {} + inline mont_t(const uint32_t *p) + { + for (size_t i = 0; i < n; i++) + even[i] = p[i]; + } + + inline void store(uint32_t *p) const + { + for (size_t i = 0; i < n; i++) + p[i] = even[i]; + } + + inline mont_t& operator+=(const mont_t& b) + { + size_t i; + uint32_t tmp[n+1]; + asm("{ .reg.pred %top;"); + + asm("add.cc.u32 %0, %0, %1;" : "+r"(even[0]) : "r"(b[0])); + for (i = 1; i < n; i++) + asm("addc.cc.u32 %0, %0, %1;" : "+r"(even[i]) : "r"(b[i])); + if (N%32 == 0) + asm("addc.u32 %0, 0, 0;" : "=r"(tmp[n])); + + asm("sub.cc.u32 %0, %1, %2;" : "=r"(tmp[0]) : "r"(even[0]), "r"(MOD[0])); + for (i = 1; i < n; i++) + asm("subc.cc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(even[i]), "r"(MOD[i])); + if (N%32 == 0) + asm("subc.u32 %0, %0, 0; setp.eq.u32 %top, %0, 0;" : "+r"(tmp[n])); + else + asm("subc.u32 %0, 0, 0; setp.eq.u32 %top, %0, 0;" : "=r"(tmp[n])); + + for (i = 0; i < n; i++) + asm("@%top mov.b32 %0, %1;" : "+r"(even[i]) : "r"(tmp[i])); + + asm("}"); + return *this; + } + friend inline mont_t operator+(mont_t a, const mont_t& b) + { return a += b; } + + inline mont_t& operator<<=(unsigned l) + { + size_t i; + uint32_t tmp[n+1]; + asm("{ .reg.pred %top;"); + + while (l--) { + asm("add.cc.u32 %0, %0, %0;" : "+r"(even[0])); + for (i = 1; i < n; i++) + asm("addc.cc.u32 %0, %0, %0;" : "+r"(even[i])); + if (N%32 == 0) + asm("addc.u32 %0, 0, 0;" : "=r"(tmp[n])); + + asm("sub.cc.u32 %0, %1, %2;" : "=r"(tmp[0]) : "r"(even[0]), "r"(MOD[0])); + for (i = 1; i < n; i++) + asm("subc.cc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(even[i]), "r"(MOD[i])); + if (N%32 == 0) + asm("subc.u32 %0, %0, 0; setp.eq.u32 %top, %0, 0;" : "+r"(tmp[n])); + else + asm("subc.u32 %0, 0, 0; setp.eq.u32 %top, %0, 0;" : "=r"(tmp[n])); + + for (i = 0; i < n; i++) + asm("@%top mov.b32 %0, %1;" : "+r"(even[i]) : "r"(tmp[i])); + } + + asm("}"); + return *this; + } + friend inline mont_t operator<<(mont_t a, unsigned l) + { return a <<= l; } + + inline mont_t& operator>>=(unsigned r) + { + size_t i; + uint32_t tmp[n+1]; + + while (r--) { + tmp[n] = 0 - (even[0]&1); + for (i = 0; i < n; i++) + tmp[i] = MOD[i] & tmp[n]; + + asm("add.cc.u32 %0, %0, %1;" : "+r"(tmp[0]) : "r"(even[0])); + for (i = 1; i < n; i++) + asm("addc.cc.u32 %0, %0, %1;" : "+r"(tmp[i]) : "r"(even[i])); + if (N%32 == 0) + asm("addc.u32 %0, 0, 0;" : "=r"(tmp[n])); + + for (i = 0; i < n-1; i++) + asm("shf.r.wrap.b32 %0, %1, %2, 1;" + : "=r"(even[i]) : "r"(tmp[i]), "r"(tmp[i+1])); + if (N%32 == 0) + asm("shf.r.wrap.b32 %0, %1, %2, 1;" + : "=r"(even[i]) : "r"(tmp[i]), "r"(tmp[i+1])); + else + even[i] = tmp[i] >> 1; + } + + return *this; + } + friend inline mont_t operator>>(mont_t a, unsigned r) + { return a >>= r; } + + inline mont_t& operator-=(const mont_t& b) + { + size_t i; + uint32_t tmp[n], borrow; + + asm("sub.cc.u32 %0, %0, %1;" : "+r"(even[0]) : "r"(b[0])); + for (i = 1; i < n; i++) + asm("subc.cc.u32 %0, %0, %1;" : "+r"(even[i]) : "r"(b[i])); + asm("subc.u32 %0, 0, 0;" : "=r"(borrow)); + + asm("add.cc.u32 %0, %1, %2;" : "=r"(tmp[0]) : "r"(even[0]), "r"(MOD[0])); + for (i = 1; i < n-1; i++) + asm("addc.cc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(even[i]), "r"(MOD[i])); + asm("addc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(even[i]), "r"(MOD[i])); + + asm("{ .reg.pred %top; setp.ne.u32 %top, %0, 0;" :: "r"(borrow)); + for (i = 0; i < n; i++) + asm("@%top mov.b32 %0, %1;" : "+r"(even[i]) : "r"(tmp[i])); + asm("}"); + + return *this; + } + friend inline mont_t operator-(mont_t a, const mont_t& b) + { return a -= b; } + +#if 1 + inline mont_t& cneg(bool flag) + { + size_t i; + uint32_t tmp[n], is_zero = even[0]; + asm("{ .reg.pred %flag; setp.ne.u32 %flag, %0, 0;" :: "r"((int)flag)); + + asm("sub.cc.u32 %0, %1, %2;" : "=r"(tmp[0]) : "r"(MOD[0]), "r"(even[0])); + for (i = 1; i < n; i++) { + asm("subc.cc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(MOD[i]), "r"(even[i])); + asm("or.b32 %0, %0, %1;" : "+r"(is_zero) : "r"(even[i])); + } + + asm("@%flag setp.ne.u32 %flag, %0, 0;" :: "r"(is_zero)); + + for (i = 0; i < n; i++) + asm("@%flag mov.b32 %0, %1;" : "+r"(even[i]) : "r"(tmp[i])); + + asm("}"); + return *this; + } + friend inline mont_t cneg(mont_t a, bool flag) + { return a.cneg(flag); } +#else + friend inline mont_t cneg(const mont_t& a, bool flag) + { + size_t i; + uint32_t tmp[n], is_zero = a[0]; + asm("{ .reg.pred %flag; setp.ne.u32 %flag, %0, 0;" :: "r"((int)flag)); + + asm("sub.cc.u32 %0, %1, %2;" : "=r"(tmp[0]) : "r"(MOD[0]), "r"(a[0])); + for (i = 1; i < n; i++) { + asm("subc.cc.u32 %0, %1, %2;" : "=r"(tmp[i]) : "r"(MOD[i]), "r"(a[i])); + asm("or.b32 %0, %0, %1;" : "+r"(is_zero) : "r"(a[i])); + } + + asm("@%flag setp.ne.u32 %flag, %0, 0;" :: "r"(is_zero)); + + mont_t ret = a; + for (i = 0; i < n; i++) + asm("@%flag mov.b32 %0, %1;" : "+r"(ret[i]) : "r"(tmp[i])); + + asm("}"); + return ret; + } +#endif + inline mont_t operator-() const + { return cneg(*this, true); } + +private: + static inline void madc_n_rshift(uint32_t* odd, const uint32_t *a, uint32_t bi) + { + for (size_t j = 0; j < n-2; j += 2) + asm("madc.lo.cc.u32 %0, %2, %3, %4; madc.hi.cc.u32 %1, %2, %3, %5;" + : "=r"(odd[j]), "=r"(odd[j+1]) + : "r"(a[j]), "r"(bi), "r"(odd[j+2]), "r"(odd[j+3])); + asm("madc.lo.cc.u32 %0, %2, %3, 0; madc.hi.u32 %1, %2, %3, 0;" + : "=r"(odd[n-2]), "=r"(odd[n-1]) + : "r"(a[n-2]), "r"(bi)); + } + + static inline void mad_n_redc(uint32_t *even, uint32_t* odd, + const uint32_t *a, uint32_t bi, bool first=false) + { + if (first) { + mul_n(odd, a+1, bi); + mul_n(even, a, bi); + } else { + asm("add.cc.u32 %0, %0, %1;" : "+r"(even[0]) : "r"(odd[1])); + madc_n_rshift(odd, a+1, bi); + cmad_n(even, a, bi); + asm("addc.u32 %0, %0, 0;" : "+r"(odd[n-1])); + } + + uint32_t mi = even[0] * M0; + + cmad_n(odd, MOD+1, mi); + cmad_n(even, MOD, mi); + asm("addc.u32 %0, %0, 0;" : "+r"(odd[n-1])); + } + +public: + friend inline mont_t operator*(const mont_t& a, const mont_t& b) + { + if (&a == &b && 0) { + union { wide_t w; mont_t s[2]; } ret = { wide_t(a) }; + ret.s[0].mul_by_1(); + return ret.s[0] += ret.s[1]; + } else if (N%32 == 0) { + union { wide_t w; mont_t s[2]; } ret = { wide_t(a, b) }; + ret.s[0].mul_by_1(); + return ret.s[0] += ret.s[1]; + } else { + mont_t even; + uint32_t odd[n+1]; + size_t i; + asm("{ .reg.pred %top;"); + + #pragma unroll + for (i = 0; i < n; i += 2) { + mad_n_redc(&even[0], &odd[0], a, b[i], i==0); + mad_n_redc(&odd[0], &even[0], a, b[i+1]); + } + + // merge |even| and |odd| + asm("add.cc.u32 %0, %0, %1;" : "+r"(even[0]) : "r"(odd[1])); + for (i = 1; i < n-1; i++) + asm("addc.cc.u32 %0, %0, %1;" : "+r"(even[i]) : "r"(odd[i+1])); + asm("addc.u32 %0, %0, 0;" : "+r"(even[i])); + + // final subtraction + asm("sub.cc.u32 %0, %1, %2;" : "=r"(odd[0]) : "r"(even[0]), "r"(MOD[0])); + for (i = 1; i < n; i++) + asm("subc.cc.u32 %0, %1, %2;" : "=r"(odd[i]) : "r"(even[i]), "r"(MOD[i])); + asm("subc.u32 %0, 0, 0; setp.eq.u32 %top, %0, 0;" : "=r"(odd[i])); + + for (i = 0; i < n; i++) + asm("@%top mov.b32 %0, %1;" : "+r"(even[i]) : "r"(odd[i])); + + asm("}"); + return even; + } + } + inline mont_t& operator*=(const mont_t& a) + { return *this = *this * a; } + + + friend inline mont_t normalize(const wide_t& a) { + union { wide_t w; mont_t s[2]; } ret = { a }; + ret.s[0].mul_by_1(); + return ret.s[0] += ret.s[1]; + } + + // simplified exponentiation, but mind the ^ operator's precedence! + inline mont_t& operator^=(unsigned p) + { + if (p < 2) + asm("trap;"); + + union { wide_t w; mont_t s[2]; } ret = { wide_t(*this) }; + ret.s[0].mul_by_1(); + ret.s[0] += ret.s[1]; + + for (p -= 2; p--;) + ret.s[0] *= *this; + + return *this = ret.s[0]; + } + friend inline mont_t operator^(mont_t a, unsigned p) + { return a ^= p; } + inline mont_t operator()(unsigned p) + { return *this^p; } + friend inline mont_t sqr(const mont_t& a) + { return a^2; } + + inline mont_t const inv() { + uint32_t inv_exp[n]; + int i; + + asm("sub.cc.u32 %0, %1, 2;" : "=r"(inv_exp[0]) : "r"(MOD[0])); + for (i = 1; i < n - 1; i++) { + asm("subc.cc.u32 %0, %1, 0;" : "=r"(inv_exp[i]) : "r"(MOD[i])); + } + asm("subc.u32 %0, %1, 0;" : "=r"(inv_exp[n - 1]) : "r"(MOD[n - 1])); + + mont_t ret(ONE); + mont_t inv_base = *this; + + for (i = 0; i < n; i++) { +// while (inv_exp[i] > 0) { + for (int j = 0; j < 32; j++) { + if (inv_exp[i] & 1) { + ret *= inv_base; + } + inv_exp[i] >>= 1; + inv_base ^= 2; + } + } + return ret; + + } + + inline void to() { mont_t t = *this; t *= RR; *this = t; } + inline void from() { mont_t t = *this; t.mul_by_1(); *this = t; } + + static inline const mont_t& one() + { return *reinterpret_cast(ONE); } + + inline bool is_one() const { + size_t i; + uint32_t is_same = 0, is_one = 0; + + for (i = 0; i < n; i++) { + asm("xor.b32 %0, %1, %2;" : "+r"(is_same) : "r"(even[i]), "r"(ONE[i])); + asm("or.b32 %0, %0, %1;" : "+r"(is_one) : "r"(is_same)); + } + asm("set.eq.u32.u32 %0, %0, 0;" : "+r"(is_one)); + + return is_one; + } + + inline bool is_zero() const + { + size_t i; + uint32_t is_zero = even[0]; + + for (i = 1; i < n; i++) + asm("or.b32 %0, %0, %1;" : "+r"(is_zero) : "r"(even[i])); + + asm("set.eq.u32.u32 %0, %0, 0;" : "+r"(is_zero)); + + return is_zero; + } + + inline void zero() + { + if (n%4 == 0) { + uint4* p = (uint4*)even; + for (size_t i=0; i + +namespace device { + static __device__ __constant__ const uint32_t Vesta_P[8] = { + 0x00000001, 0x8c46eb21, 0x0994a8dd, 0x224698fc, + 0x00000000, 0x00000000, 0x00000000, 0x40000000 + }; + static __device__ __constant__ const uint32_t Vesta_RR[8] = { /* (1<<512)%P */ + 0x0000000f, 0xfc9678ff, 0x891a16e3, 0x67bb433d, + 0x04ccf590, 0x7fae2310, 0x7ccfdaa9, 0x096d41af + }; + static __device__ __constant__ const uint32_t Vesta_one[8] = { /* (1<<256)%P */ + 0xfffffffd, 0x5b2b3e9c, 0xe3420567, 0x992c350b, + 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff + }; + + static __device__ __constant__ const uint32_t Pallas_P[8] = { + 0x00000001, 0x992d30ed, 0x094cf91b, 0x224698fc, + 0x00000000, 0x00000000, 0x00000000, 0x40000000 + }; + static __device__ __constant__ const uint32_t Pallas_RR[8] = { /* (1<<512)%P */ + 0x0000000f, 0x8c78ecb3, 0x8b0de0e7, 0xd7d30dbd, + 0xc3c95d18, 0x7797a99b, 0x7b9cb714, 0x096d41af + }; + static __device__ __constant__ const uint32_t Pallas_one[8] = { /* (1<<256)%P */ + 0xfffffffd, 0x34786d38, 0xe41914ad, 0x992c350b, + 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff + }; + static __device__ __constant__ /*const*/ uint32_t Pasta_M0 = 0xffffffff; +} + +# ifdef __CUDA_ARCH__ // device-side field types +# include "mont_t.cuh" +typedef mont_t<255, device::Vesta_P, device::Pasta_M0, + device::Vesta_RR, device::Vesta_one> vesta_t; +typedef mont_t<255, device::Pallas_P, device::Pasta_M0, + device::Pallas_RR, device::Pallas_one> pallas_t; +# endif +#endif + +#ifndef __CUDA_ARCH__ // host-side field types +# include +#endif diff --git a/arkworks3-sppark-wlc/sppark/msm/pippenger.cuh b/arkworks3-sppark-wlc/sppark/msm/pippenger.cuh new file mode 100644 index 000000000..2ab6540c1 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/msm/pippenger.cuh @@ -0,0 +1,906 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#include + + +#ifndef WARP_SZ +# define WARP_SZ 32 +#endif + +#ifndef NTHREADS +# define NTHREADS 64 +#endif +#if NTHREADS < 32 || (NTHREADS & (NTHREADS-1)) != 0 +# error "bad NTHREADS value" +#endif + +constexpr static int log2(int n) +{ int ret=0; while (n>>=1) ret++; return ret; } + +static const int NTHRBITS = log2(NTHREADS); + +#ifndef NBITS +# define NBITS 253 +#endif +#ifndef WBITS +# define WBITS 16 +#endif +#define NWINS 16 // ((NBITS+WBITS-1)/WBITS) // ceil(NBITS/WBITS) + +#ifndef LARGE_L1_CODE_CACHE +# define LARGE_L1_CODE_CACHE 0 +#endif + +__global__ +void pre_compute(affine_t* pre_points, size_t npoints); + +__global__ +void process_scalar_1(uint16_t* scalar, uint32_t* scalar_tuple, + uint32_t* d_scalar_map, uint32_t* point_idx, size_t npoints); + +__global__ +void process_scalar_2(uint32_t* scalar_tuple_out, + uint16_t* bucket_idx, size_t npoints); + +__global__ +void bucket_inf(bucket_t *buckets); + +// v1.1 +__global__ +void bucket_acc(uint32_t* scalar_tuple_out, uint16_t* bucket_idx, uint32_t* point_idx_out, + affine_t* pre_points, bucket_t *buckets_pre, + uint16_t* bucket_idx_pre_vector, uint16_t* bucket_idx_pre_used, + uint32_t* bucket_idx_pre_offset, size_t npoints); + +__global__ +void bucket_acc_2(bucket_t *buckets_pre, uint16_t* bucket_idx_pre_vector, uint16_t* bucket_idx_pre_used, + uint32_t* bucket_idx_pre_offset, bucket_t *buckets, uint32_t upper_tnum, size_t npoints); + +__global__ +void bucket_agg_1(bucket_t *buckets); + +__global__ +void bucket_agg_2(bucket_t *buckets); + +__global__ +void recursive_sum(bucket_t *buckets, bucket_t *res); + + +#ifdef __CUDA_ARCH__ + +#include + +static __shared__ bucket_t bucket_acc_smem[NTHREADS * 2]; + +// Transposed scalar_t +class scalar_T { + uint32_t val[sizeof(scalar_t)/sizeof(uint32_t)][WARP_SZ]; + +public: + __device__ uint32_t& operator[](size_t i) { return val[i][0]; } + __device__ const uint32_t& operator[](size_t i) const { return val[i][0]; } + __device__ scalar_T& operator=(const scalar_t& rhs) + { + for (size_t i = 0; i < sizeof(scalar_t)/sizeof(uint32_t); i++) + val[i][0] = rhs[i]; + return *this; + } +}; + +class scalars_T { + scalar_T* ptr; + +public: + __device__ scalars_T(void* rhs) { ptr = (scalar_T*)rhs; } + __device__ scalar_T& operator[](size_t i) + { return *(scalar_T*)&(&ptr[i/WARP_SZ][0])[i%WARP_SZ]; } + __device__ const scalar_T& operator[](size_t i) const + { return *(const scalar_T*)&(&ptr[i/WARP_SZ][0])[i%WARP_SZ]; } +}; + +constexpr static __device__ int dlog2(int n) +{ int ret=0; while (n>>=1) ret++; return ret; } + + +#if WBITS==16 +template +static __device__ int get_wval(const scalar_t& d, uint32_t off, uint32_t bits) +{ + uint32_t ret = d[off/32]; + return (ret >> (off%32)) & ((1< +static __device__ int get_wval(const scalar_t& d, uint32_t off, uint32_t bits) +{ + uint32_t top = off + bits - 1; + uint64_t ret = ((uint64_t)d[top/32] << 32) | d[off/32]; + + return (int)(ret >> (off%32)) & ((1<= 32) + return false; + return ((scalar >> bitno) & 0x1); +} + +template +static __device__ void mul(bucket_t& res, const bucket_t& base, uint32_t scalar) +{ + res.inf(); + + bool found_one = false; + uint32_t mb = max_bits(scalar); + for (int32_t i = mb - 1; i >= 0; --i) + { + if (found_one) + { + res.add(res); + } + + if (test_bit(scalar, i)) + { + found_one = true; + res.add(base); + } + } +} + +__global__ +void pre_compute(affine_t* pre_points, size_t npoints) { + const uint32_t tnum = blockDim.x * gridDim.x; + const uint32_t tid = blockIdx.x * blockDim.x + threadIdx.x; + + bucket_t Pi_xyzz; + for (uint32_t i = tid; i < npoints; i += tnum) { + affine_t* Pi = pre_points + i; + Pi_xyzz = *Pi; + for (int j = 1; j < 7; j++) { + Pi = Pi + npoints; + Pi_xyzz.dbl(); + + Pi_xyzz.xyzz_to_affine(*Pi); + } + } +} + +__global__ +void process_scalar_1(uint16_t* scalar, uint32_t* scalar_tuple, + uint32_t* d_scalar_map, uint32_t* point_idx, size_t npoints) { + + const uint32_t tnum = blockDim.x * gridDim.x; + const uint32_t tid = blockIdx.x * blockDim.x + threadIdx.x; + + for (int i = tid; i < npoints; i += tnum) { + uint16_t* cur_scalar_ptr = scalar + (i << 4); + uint32_t cur_scalar = (uint32_t)(*cur_scalar_ptr); // uint32_t instead of uint16_t, specifically for 0x10000 + scalar_tuple[i] = d_scalar_map[cur_scalar]; + + point_idx[i] = i; + + for (int j = i + npoints; j < NWINS * npoints; j += npoints) { + cur_scalar_ptr += 1; + cur_scalar = (uint32_t)(*(cur_scalar_ptr)); + cur_scalar += (scalar_tuple[j - npoints] & 1); + scalar_tuple[j] = d_scalar_map[cur_scalar]; + + point_idx[j] = i; + } + } + +} + +__global__ +void process_scalar_2(uint32_t* scalar_tuple_out, + uint16_t* bucket_idx, size_t npoints) { + const uint32_t tnum = blockDim.x * gridDim.y; + const uint32_t tid = blockIdx.y * blockDim.x + threadIdx.x; + const uint32_t bid = blockIdx.x; + + uint16_t* bucket_idx_ptr = bucket_idx + npoints * bid; + uint32_t* scalar_tuple_out_ptr = scalar_tuple_out + npoints * bid; + + for (uint32_t i = tid; i < npoints; i += tnum) { + bucket_idx_ptr[i] = scalar_tuple_out_ptr[i] >> 16; + } +} + +// total_bucket_num = NWINS * (1 << (WBITS - 2)) +__global__ +void bucket_inf(bucket_t *buckets) { + const uint32_t tnum = blockDim.x * gridDim.y; + const uint32_t tid = blockIdx.y * blockDim.x + threadIdx.x; + const uint32_t bid = blockIdx.x; + + const uint32_t bucket_num = 1 << (WBITS - 2); + bucket_t* buckets_ptr = buckets + bucket_num * bid; + + for (uint32_t i = tid; i < bucket_num; i += tnum) { + buckets_ptr[i].inf(); + } +} + +// v1.1 +__global__ +void bucket_acc(uint32_t* scalar_tuple_out, uint16_t* bucket_idx, uint32_t* point_idx_out, + affine_t* pre_points, bucket_t *buckets_pre, + uint16_t* bucket_idx_pre_vector, uint16_t* bucket_idx_pre_used, + uint32_t* bucket_idx_pre_offset, size_t npoints) { + const uint32_t tnum = blockDim.x * gridDim.y; + const uint32_t tid_inner = threadIdx.x; + const uint32_t tid = blockIdx.y * blockDim.x + tid_inner; + const uint32_t bid = blockIdx.x; + const uint32_t buffer_len = tnum + (1 << (WBITS - 2)); + + uint32_t* scalar_tuple_out_ptr = scalar_tuple_out + npoints * bid; + uint16_t* bucket_idx_ptr = bucket_idx + npoints * bid; + uint32_t* point_idx_out_ptr = point_idx_out + npoints * bid; + bucket_t* buckets_pre_ptr = buckets_pre + buffer_len * bid; + uint16_t* bucket_idx_pre_vector_ptr = bucket_idx_pre_vector + buffer_len * bid; + uint16_t* bucket_idx_pre_used_ptr = bucket_idx_pre_used + tnum * bid; + uint32_t* bucket_idx_pre_offset_ptr = bucket_idx_pre_offset + tnum * bid; + + const uint32_t step_len = (npoints + tnum - 1) / tnum; + + uint32_t s = step_len * tid; + uint32_t e = s + step_len; + if (s >= npoints) { + bucket_idx_pre_used_ptr[tid] = 0; + return; + } + if (e >= npoints) e = npoints; + + uint16_t pre_bucket_idx = 0x8000; // not exist + bucket_acc_smem[tid_inner * 2 + 1].inf(); + + uint32_t offset = tid + ((bucket_idx_ptr[s] + 1) >> 1); + bucket_idx_pre_offset_ptr[tid] = offset; + uint32_t unique_num = 0; + // process [s, e) + for (uint32_t i = s; i < e; i++) { + uint32_t power_of_2 = (scalar_tuple_out_ptr[i] >> 8) & 0x0f; + uint32_t dbl_time = (scalar_tuple_out_ptr[i] >> 12) & 0x0f; + + uint16_t cur_bucket_idx = bucket_idx_ptr[i]; + + if (cur_bucket_idx != pre_bucket_idx && (unique_num++)) { + buckets_pre_ptr[offset + unique_num - 2] = bucket_acc_smem[tid_inner * 2 + 1]; + bucket_idx_pre_vector_ptr[offset + unique_num - 2] = (pre_bucket_idx + 1) >> 1; + bucket_acc_smem[tid_inner * 2 + 1].inf(); + } + pre_bucket_idx = cur_bucket_idx; + bucket_acc_smem[tid_inner * 2] = pre_points[point_idx_out_ptr[i] + power_of_2 * npoints]; + for (uint32_t j = 0; j < dbl_time; j++) { + bucket_acc_smem[tid_inner * 2].dbl(); + } + if (scalar_tuple_out_ptr[i] & 0x01) { + bucket_acc_smem[tid_inner * 2].neg(true); + } + bucket_acc_smem[tid_inner * 2 + 1].add(bucket_acc_smem[tid_inner * 2]); + } + buckets_pre_ptr[offset + unique_num - 1] = bucket_acc_smem[tid_inner * 2 + 1]; + bucket_idx_pre_vector_ptr[offset + unique_num - 1] = (pre_bucket_idx + 1) >> 1; + bucket_idx_pre_used_ptr[tid] = unique_num; + +} + +// v1.1 (2^{14} THREADS) +__global__ +void bucket_acc_2(bucket_t *buckets_pre, uint16_t* bucket_idx_pre_vector, uint16_t* bucket_idx_pre_used, + uint32_t* bucket_idx_pre_offset, bucket_t *buckets, uint32_t upper_tnum, size_t npoints) { + const uint32_t tid_inner = threadIdx.x; + const uint32_t tid = blockIdx.y * blockDim.x + tid_inner; + const uint32_t bid = blockIdx.x; + const uint32_t buffer_len = upper_tnum + (1 << (WBITS - 2)); + + bucket_t* buckets_pre_ptr = buckets_pre + buffer_len * bid; + uint16_t* bucket_idx_pre_vector_ptr = bucket_idx_pre_vector + buffer_len * bid; + uint16_t* bucket_idx_pre_used_ptr = bucket_idx_pre_used + upper_tnum * bid; + uint32_t* bucket_idx_pre_offset_ptr = bucket_idx_pre_offset + upper_tnum * bid; + bucket_t* buckets_ptr = buckets + (1 << (WBITS - 2)) * bid; + + int left = 0, right = upper_tnum - 1; + bool not_inf = false; + uint32_t start_pos = 0; + while (left <= right) { + int mid = left + ((right - left) >> 1); + uint16_t vector_used = bucket_idx_pre_used_ptr[mid]; + if (!vector_used) { + right = mid - 1; + } else { + uint32_t vector_ptr = bucket_idx_pre_offset_ptr[mid]; + uint16_t min_idx = bucket_idx_pre_vector_ptr[vector_ptr]; + uint16_t max_idx = bucket_idx_pre_vector_ptr[vector_ptr + vector_used - 1]; + if (min_idx == (tid + 1)) { + start_pos = mid; + not_inf = true; + right = mid - 1; + } else if (min_idx > (tid + 1)) { + right = mid - 1; + } else if (max_idx < (tid + 1)) { + left = mid + 1; + } else { + for (uint32_t i = vector_ptr + 1; i < vector_ptr + vector_used; i++) { + if (bucket_idx_pre_vector_ptr[i] == (tid + 1)) { + start_pos = mid; + not_inf = true; + break; + } + } + break; + } + } + } + bucket_acc_smem[tid_inner].inf(); + while (not_inf && start_pos < upper_tnum) { + not_inf = false; + uint16_t vector_used = bucket_idx_pre_used_ptr[start_pos]; + uint32_t vector_ptr = bucket_idx_pre_offset_ptr[start_pos]; + for (uint32_t i = vector_ptr; i < vector_ptr + vector_used; i++) { + if (bucket_idx_pre_vector_ptr[i] == (tid + 1)) { + not_inf = true; + bucket_acc_smem[tid_inner].add(buckets_pre_ptr[i]); + break; + } + } + start_pos++; + } + buckets_ptr[tid] = bucket_acc_smem[tid_inner]; // can omit kerner `bucket_inf` + +} + +__global__ +void bucket_agg_1(bucket_t *buckets) { + const uint32_t tnum = blockDim.x * gridDim.y; + const uint32_t tid = blockIdx.y * blockDim.x + threadIdx.x; + const uint32_t bid = blockIdx.x; + + bucket_t* buckets_ptr = buckets + (1 << (WBITS - 2)) * bid; + + for (uint32_t j = tid; j < (1 << (WBITS - 5)); j += tnum) { + uint32_t s = j << 3; + bucket_t* Bi = buckets_ptr + 0x3fff - s; + for (int i = 1; i < 8; i++) { + (Bi - i)->add(*(Bi - i + 1)); + } + } +} + +__global__ +void bucket_agg_2(bucket_t *buckets) { + const uint32_t tnum = blockDim.x * gridDim.y; + const uint32_t tid = blockIdx.y * blockDim.x + threadIdx.x; + const uint32_t bid = blockIdx.x; + + bucket_t* buckets_ptr = buckets + (1 << (WBITS - 2)) * bid; + + for (uint32_t i = 3; i < 14; i++) { + for (uint32_t k = tid; k < (1 << (WBITS - 3)); k += tnum) { + uint32_t baseline = ((1 + (k >> i)) << (i + 1)) - (1 << i); + uint32_t offset = k & ((1 << i) - 1); + + bucket_t* Bi = buckets_ptr + 0x3fff - (baseline - 1); + bucket_t* Bj = Bi - (offset + 1); // B + 0x3fff - (baseline + offset) + + Bj->add(*Bi); + } + cooperative_groups::this_grid().sync(); + } +} + +__global__ +void recursive_sum(bucket_t *buckets, bucket_t *res) { + const uint32_t tnum = blockDim.x * gridDim.y; + const uint32_t tid = blockIdx.y * blockDim.x + threadIdx.x; + const uint32_t bid = blockIdx.x; + + bucket_t* buckets_ptr = buckets + (1 << (WBITS - 2)) * bid; + + if (tid == 0) { + res[bid] = *buckets_ptr; + } + // cooperative_groups::this_grid().sync(); + + for (uint32_t j = 1 << (WBITS - 3); j > NTHREADS; j >>= 1) { + for (uint32_t i = tid; i < j; i += tnum) { + buckets_ptr[i].add(buckets_ptr[i + j]); + } + cooperative_groups::this_grid().sync(); + } + for (uint32_t j = NTHREADS; j > WARP_SZ; j >>= 1) { + if (tid < j) { + buckets_ptr[tid].add(buckets_ptr[tid + j]); + } + cooperative_groups::this_thread_block().sync(); + } + + if (tid < WARP_SZ) { + buckets_ptr[tid].add(buckets_ptr[tid + 32]); + buckets_ptr[tid].add(buckets_ptr[tid + 16]); + buckets_ptr[tid].add(buckets_ptr[tid + 8]); + buckets_ptr[tid].add(buckets_ptr[tid + 4]); + buckets_ptr[tid].add(buckets_ptr[tid + 2]); + buckets_ptr[tid].add(buckets_ptr[tid + 1]); + } + if (tid == 0) { + buckets_ptr->dbl(); + res[bid].neg(true); + res[bid].add(*buckets_ptr); + } + + /*cooperative_groups::this_grid().sync(); + if (tid == 0 && bid == 0) { + bucket_t check_res; + check_res.inf(); + + for (int i = 15; i > -1; i--) { + for (int j = 0; j < 16; j++) { + check_res.add(check_res); + } + check_res.add(res[i]); + } + printf("\ncheck_2:\n"); + check_res.xyzz_print(); + }*/ +} + +#else + +#include +#include +using namespace std; + +#include +#include +#include +#include + + +template +inline void launch_coop(void(*f)(Types...), + dim3 gridDim, dim3 blockDim, cudaStream_t stream, + Types... args) +{ + void* va_args[sizeof...(args)] = { &args... }; + CUDA_OK(cudaLaunchCooperativeKernel((const void*)f, gridDim, blockDim, + va_args, 0, stream)); +} + +class stream_t { + cudaStream_t stream; +public: + stream_t(int device) { + CUDA_OK(cudaSetDevice(device)); + cudaStreamCreateWithFlags(&stream, cudaStreamNonBlocking); + } + ~stream_t() { cudaStreamDestroy(stream); } + inline operator decltype(stream)() { return stream; } +}; + + +template class result_t_faster { + bucket_t ret[NWINS]; +public: + result_t_faster() {} + inline operator decltype(ret)&() { return ret; } +}; + +template +class device_ptr_list_t { + vector d_ptrs; +public: + device_ptr_list_t() {} + ~device_ptr_list_t() { + for(T *ptr: d_ptrs) { + cudaFree(ptr); + } + } + size_t allocate(size_t bytes) { + T *d_ptr; + CUDA_OK(cudaMalloc(&d_ptr, bytes)); + d_ptrs.push_back(d_ptr); + return d_ptrs.size() - 1; + } + size_t size() { + return d_ptrs.size(); + } + T* operator[](size_t i) { + if (i > d_ptrs.size() - 1) { + CUDA_OK(cudaErrorInvalidDevicePointer); + } + return d_ptrs[i]; + } + +}; + +// Pippenger MSM class +template +class pippenger_t { +public: + typedef vector, + host_pinned_allocator_t>> result_container_t_faster; + +private: + size_t sm_count; + bool init_done = false; + device_ptr_list_t d_base_ptrs; + device_ptr_list_t d_scalar_ptrs; + device_ptr_list_t d_bucket_ptrs; + + device_ptr_list_t d_bucket_pre_ptrs; // v1.1 + device_ptr_list_t d_bucket_idx_pre_ptrs; // v1.1 + device_ptr_list_t d_bucket_idx_pre2_ptrs; // v1.2 + + device_ptr_list_t d_res_ptrs; + + // GPU device number + int device; + + // TODO: Move to device class eventually + thread_pool_t *da_pool = nullptr; + +public: + // Default stream for operations + stream_t default_stream; + + device_ptr_list_t d_scalar_map; + device_ptr_list_t d_scalar_tuple_ptrs; + device_ptr_list_t d_point_idx_ptrs; + device_ptr_list_t d_bucket_idx_ptrs; + device_ptr_list_t d_cub_ptrs; + + // Parameters for an MSM operation + class MSMConfig { + friend pippenger_t; + public: + size_t npoints; + size_t N; + size_t n; + }; + + pippenger_t() : default_stream(0) { + device = 0; + } + + pippenger_t(int _device, thread_pool_t *pool = nullptr) + : default_stream(_device) { + da_pool = pool; + device = _device; + } + + // Initialize instance. Throws cuda_error on error. + void init() { + if (!init_done) { + CUDA_OK(cudaSetDevice(device)); + cudaDeviceProp prop; + if (cudaGetDeviceProperties(&prop, 0) != cudaSuccess || prop.major < 7) + CUDA_OK(cudaErrorInvalidDevice); + sm_count = prop.multiProcessorCount; + + if (da_pool == nullptr) { + da_pool = new thread_pool_t(); + } + + init_done = true; + } + } + + int get_device() { + return device; + } + + // Initialize parameters for a specific size MSM. Throws cuda_error on error. + MSMConfig init_msm_faster(size_t npoints) { + init(); + + MSMConfig config; + config.npoints = npoints; + config.n = (npoints+WARP_SZ-1) & ((size_t)0-WARP_SZ); + config.N = (sm_count*256) / (NTHREADS*NWINS); + size_t delta = ((npoints+(config.N)-1)/(config.N)+WARP_SZ-1) & (0U-WARP_SZ); + config.N = (npoints+delta-1) / delta; + +// if(config.N % 2 == 1) config.N -= 1; + return config; + } + + size_t get_size_bases(MSMConfig& config) { + return config.n * sizeof(affine_t); + } + size_t get_size_scalars(MSMConfig& config) { + return config.n * sizeof(scalar_t); + } + size_t get_size_buckets() { + return sizeof(bucket_t) * NWINS * (1 << (WBITS - 2)); + } + size_t get_size_buckets_pre(MSMConfig& config) { // v1.1 + return sizeof(bucket_t) * NWINS * (config.N * NTHREADS + (1 << (WBITS - 2))); + } + size_t get_size_bucket_idx_pre_vector(MSMConfig& config) { // v1.1 + return sizeof(uint16_t) * NWINS * (config.N * NTHREADS + (1 << (WBITS - 2))); + } + size_t get_size_bucket_idx_pre_used(MSMConfig& config) { // v1.1 + return sizeof(uint16_t) * config.N * NTHREADS * NWINS; + } + size_t get_size_bucket_idx_pre_offset(MSMConfig& config) { // v1.2 + return sizeof(uint32_t) * config.N * NTHREADS * NWINS; + } + size_t get_size_res() { + return sizeof(bucket_t) * NWINS; + } + + size_t get_size_scalar_map() { + return ((1 << 16) + 1) * sizeof(uint32_t); + } + size_t get_size_scalar_tuple(MSMConfig& config) { + return config.n * sizeof(uint32_t) * NWINS; + } + size_t get_size_point_idx(MSMConfig& config) { + return config.n * sizeof(uint32_t) * NWINS; + } + size_t get_size_bucket_idx(MSMConfig& config) { + return config.n * sizeof(uint16_t) * NWINS; + } + + size_t get_size_cub_sort_faster(MSMConfig& config){ + uint32_t *d_scalar_tuple = nullptr; + uint32_t *d_scalar_tuple_out = nullptr; + uint32_t *d_point_idx = nullptr; + uint32_t *d_point_idx_out = nullptr; + void *d_temp = NULL; + size_t temp_size = 0; + cub::DeviceRadixSort::SortPairs(d_temp, temp_size, + d_scalar_tuple, d_scalar_tuple_out, + d_point_idx, d_point_idx_out, config.n, 0, 31); + return temp_size; + } + + result_container_t_faster get_result_container_faster() { + result_container_t_faster res(1); + return res; + } + + // Allocate storage for bases on device. Throws cuda_error on error. + // Returns index of the allocated base storage. + size_t allocate_d_bases(MSMConfig& config) { + return d_base_ptrs.allocate(7 * get_size_bases(config)); + } + + size_t allocate_d_scalars(MSMConfig& config) { + return d_scalar_ptrs.allocate(get_size_scalars(config)); + } + + size_t allocate_d_buckets() { + return d_bucket_ptrs.allocate(get_size_buckets()); + } + size_t allocate_d_buckets_pre(MSMConfig& config) { // v1.1 + return d_bucket_pre_ptrs.allocate(get_size_buckets_pre(config)); + } + size_t allocate_d_bucket_idx_pre_vector(MSMConfig& config) { // v1.1 + return d_bucket_idx_pre_ptrs.allocate(get_size_bucket_idx_pre_vector(config)); + } + size_t allocate_d_bucket_idx_pre_used(MSMConfig& config) { // v1.1 + return d_bucket_idx_pre_ptrs.allocate(get_size_bucket_idx_pre_used(config)); + } + size_t allocate_d_bucket_idx_pre_offset(MSMConfig& config) { // v1.2 + return d_bucket_idx_pre2_ptrs.allocate(get_size_bucket_idx_pre_offset(config)); + } + + size_t allocate_d_res() { + return d_res_ptrs.allocate(get_size_res()); + } + + size_t allocate_d_scalar_map() { + return d_scalar_map.allocate(get_size_scalar_map()); + } + + size_t allocate_d_scalar_tuple(MSMConfig& config) { + return d_scalar_tuple_ptrs.allocate(get_size_scalar_tuple(config)); + } + size_t allocate_d_scalar_tuple_out(MSMConfig& config) { + return d_scalar_tuple_ptrs.allocate(get_size_scalar_tuple(config)); + } + + size_t allocate_d_point_idx(MSMConfig& config) { + return d_point_idx_ptrs.allocate(get_size_point_idx(config)); +// return d_point_idx_ptrs.allocate(config.n * sizeof(uint32_t)); + } + size_t allocate_d_point_idx_out(MSMConfig& config) { + return d_point_idx_ptrs.allocate(get_size_point_idx(config)); + } + + size_t allocate_d_bucket_idx(MSMConfig& config) { + return d_bucket_idx_ptrs.allocate(get_size_bucket_idx(config)); + } + + size_t allocate_d_cub_sort_faster(MSMConfig& config) { + return d_cub_ptrs.allocate(get_size_cub_sort_faster(config)); + } + + // Transfer bases to device. Throws cuda_error on error. + void transfer_bases_to_device(MSMConfig& config, size_t d_bases_idx, const affine_t points[], + size_t ffi_affine_sz = sizeof(affine_t), + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + affine_t *d_points = d_base_ptrs[d_bases_idx]; + CUDA_OK(cudaSetDevice(device)); + if (ffi_affine_sz != sizeof(*d_points)) + CUDA_OK(cudaMemcpy2DAsync(d_points, sizeof(*d_points), + points, ffi_affine_sz, + ffi_affine_sz, config.npoints, + cudaMemcpyHostToDevice, stream)); + else + CUDA_OK(cudaMemcpyAsync(d_points, points, config.npoints*sizeof(*d_points), + cudaMemcpyHostToDevice, stream)); + } + + // Transfer scalars to device. Throws cuda_error on error. + void transfer_scalars_to_device(MSMConfig& config, + size_t d_scalars_idx, const scalar_t scalars[], + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + scalar_t *d_scalars = d_scalar_ptrs[d_scalars_idx]; + CUDA_OK(cudaSetDevice(device)); + CUDA_OK(cudaMemcpyAsync(d_scalars, scalars, config.npoints*sizeof(*d_scalars), + cudaMemcpyHostToDevice, stream)); + } + + + void transfer_res_to_host_faster(result_container_t_faster &res, size_t d_res_idx, + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + bucket_t *d_res = d_res_ptrs[d_res_idx]; + CUDA_OK(cudaSetDevice(device)); + CUDA_OK(cudaMemcpyAsync(res[0], d_res, sizeof(res[0]), + cudaMemcpyDeviceToHost, stream)); + } + + void transfer_scalar_map_to_device(size_t d_scalar_map_idx, const uint32_t scalar_map[], + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + uint32_t *d_smap = d_scalar_map[d_scalar_map_idx]; + CUDA_OK(cudaSetDevice(device)); + CUDA_OK(cudaMemcpyAsync(d_smap, scalar_map, ((1 << 16) + 1)*sizeof(uint32_t), + cudaMemcpyHostToDevice, stream)); + } + + void synchronize_stream() { + CUDA_OK(cudaSetDevice(device)); + CUDA_OK(cudaStreamSynchronize(default_stream)); + } + + void launch_kernel_init(MSMConfig& config, + size_t d_points_sn, cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + affine_t *d_points = d_base_ptrs[d_points_sn]; + + CUDA_OK(cudaSetDevice(device)); + launch_coop(pre_compute, NWINS * config.N, NTHREADS, stream, + d_points, config.npoints); + } + + void launch_process_scalar_1(MSMConfig& config, + size_t d_scalars_sn, size_t d_scalar_tuples_sn, + size_t d_scalar_map_sn, size_t d_point_idx_sn, + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + uint16_t* d_scalars = (uint16_t*)d_scalar_ptrs[d_scalars_sn]; + uint32_t* d_scalar_tuple = d_scalar_tuple_ptrs[d_scalar_tuples_sn]; + uint32_t* d_smap = d_scalar_map[d_scalar_map_sn]; + uint32_t* d_point_idx = d_point_idx_ptrs[d_point_idx_sn]; + + CUDA_OK(cudaSetDevice(device)); + launch_coop(process_scalar_1, NWINS * config.N, NTHREADS, stream, + d_scalars, d_scalar_tuple, d_smap, d_point_idx, config.npoints); + } + + void launch_process_scalar_2(MSMConfig& config, + size_t d_scalar_tuples_out_sn, size_t d_bucket_idx_sn, + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + uint32_t* d_scalar_tuple_out = d_scalar_tuple_ptrs[d_scalar_tuples_out_sn]; + uint16_t* d_bucket_idx = d_bucket_idx_ptrs[d_bucket_idx_sn]; + + CUDA_OK(cudaSetDevice(device)); + launch_coop(process_scalar_2, dim3(NWINS, config.N), NTHREADS, stream, + d_scalar_tuple_out, d_bucket_idx, config.npoints); + } + + void launch_bucket_inf(MSMConfig& config, size_t d_buckets_sn, cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + bucket_t* d_buckets = d_bucket_ptrs[d_buckets_sn]; + + CUDA_OK(cudaSetDevice(device)); + launch_coop(bucket_inf, dim3(NWINS, config.N), NTHREADS, stream, d_buckets); + } + + void launch_bucket_acc(MSMConfig& config, + size_t d_scalar_tuples_out_sn, size_t d_bucket_idx_sn, + size_t d_point_idx_out_sn, size_t d_points_sn, size_t d_buckets_sn, + size_t d_buckets_pre_sn, size_t d_bucket_idx_pre_vector_sn, + size_t d_bucket_idx_pre_used_sn, size_t d_bucket_idx_pre_offset_sn, + cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + uint32_t* d_scalar_tuple_out = d_scalar_tuple_ptrs[d_scalar_tuples_out_sn]; + uint16_t* d_bucket_idx = d_bucket_idx_ptrs[d_bucket_idx_sn]; + uint32_t* d_point_idx_out = d_point_idx_ptrs[d_point_idx_out_sn]; + affine_t* d_points = d_base_ptrs[d_points_sn]; + bucket_t* d_buckets = d_bucket_ptrs[d_buckets_sn]; + bucket_t* d_buckets_pre = d_bucket_pre_ptrs[d_buckets_pre_sn]; + uint16_t* d_bucket_idx_pre_vector = d_bucket_idx_pre_ptrs[d_bucket_idx_pre_vector_sn]; + uint16_t* d_bucket_idx_pre_used = d_bucket_idx_pre_ptrs[d_bucket_idx_pre_used_sn]; + uint32_t* d_bucket_idx_pre_offset = d_bucket_idx_pre2_ptrs[d_bucket_idx_pre_offset_sn]; + + CUDA_OK(cudaSetDevice(device)); + + launch_coop(bucket_acc, dim3(NWINS, config.N), NTHREADS, stream, + d_scalar_tuple_out, d_bucket_idx, d_point_idx_out, + d_points, d_buckets_pre, + d_bucket_idx_pre_vector, d_bucket_idx_pre_used, + d_bucket_idx_pre_offset, config.npoints); + bucket_acc_2<<>>( + d_buckets_pre, d_bucket_idx_pre_vector, d_bucket_idx_pre_used, + d_bucket_idx_pre_offset, d_buckets, (uint32_t)(config.N * NTHREADS), config.npoints + ); +// launch_coop(bucket_acc_2, dim3(NWINS, (1 << (WBITS - 2)) / NTHREADS), NTHREADS, stream, +// d_buckets_pre, d_bucket_idx_pre_vector, d_bucket_idx_pre_used, +// d_bucket_idx_pre_offset, d_buckets, (uint32_t)(config.N * NTHREADS), config.npoints); + + } + + void launch_bucket_agg_1(MSMConfig& config, size_t d_buckets_sn, cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + bucket_t* d_buckets = d_bucket_ptrs[d_buckets_sn]; + + CUDA_OK(cudaSetDevice(device)); +// bucket_agg_1<<>>(d_buckets); + launch_coop(bucket_agg_1, dim3(NWINS, config.N), NTHREADS, stream, d_buckets); + } + + void launch_bucket_agg_2(MSMConfig& config, size_t d_buckets_sn, cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + bucket_t* d_buckets = d_bucket_ptrs[d_buckets_sn]; + + CUDA_OK(cudaSetDevice(device)); + launch_coop(bucket_agg_2, dim3(NWINS, config.N), NTHREADS, stream, d_buckets); + } + + void launch_recursive_sum(MSMConfig& config, size_t d_buckets_sn, size_t d_res_sn, cudaStream_t s = nullptr) { + cudaStream_t stream = (s == nullptr) ? default_stream : s; + bucket_t* d_buckets = d_bucket_ptrs[d_buckets_sn]; + bucket_t* d_res = d_res_ptrs[d_res_sn]; + + CUDA_OK(cudaSetDevice(device)); + launch_coop(recursive_sum, dim3(NWINS, config.N), NTHREADS, stream, d_buckets, d_res); + } + + // Perform final accumulation on CPU. + void accumulate_faster(point_t &out, result_container_t_faster &res) { + out.inf(); + + for(int32_t k = NWINS - 1; k >= 0; k--) + { + for (int32_t i = 0; i < WBITS; i++) + { + out.dbl(); + } + point_t p = (res[0])[k]; + out.add(p); + } + + } +}; + +#endif diff --git a/arkworks3-sppark-wlc/sppark/rust/Cargo.toml b/arkworks3-sppark-wlc/sppark/rust/Cargo.toml new file mode 100644 index 000000000..7069c0e18 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/rust/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "sppark_bal" +version = "0.1.0" +edition = "2018" +description = "Zero-knowledge template library" +repository = "https://github.com/supranational/sppark" +license = "Apache-2.0" +links = "sppark_bal" +include = [ + "/Cargo.toml", + "/build.rs", + "/src/**", + "/sppark/ec/**", + "/sppark/ff/**", + "/sppark/msm/**", + "/sppark/util/**", +] + +[dependencies] diff --git a/arkworks3-sppark-wlc/sppark/rust/build.rs b/arkworks3-sppark-wlc/sppark/rust/build.rs new file mode 100644 index 000000000..a8dabe1c3 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/rust/build.rs @@ -0,0 +1,39 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use std::env; +use std::path::PathBuf; + +fn main() { + let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + let mut base_dir = manifest_dir.join("sppark"); + if !base_dir.exists() { + // Reach out to .., which is the root of the sppark repo. + // Use an absolute path to avoid issues with relative paths + // being treated as strings by `cc` and getting concatenated + // in ways that reach out of the OUT_DIR. + base_dir = manifest_dir + .parent() + .expect("can't access parent of current directory") + .into(); + println!( + "cargo:rerun-if-changed={}", + base_dir.join("ec").to_string_lossy() + ); + println!( + "cargo:rerun-if-changed={}", + base_dir.join("ff").to_string_lossy() + ); + println!( + "cargo:rerun-if-changed={}", + base_dir.join("msm").to_string_lossy() + ); + println!( + "cargo:rerun-if-changed={}", + base_dir.join("util").to_string_lossy() + ); + } + // pass DEP_SPPARK_* variables to dependents + println!("cargo:ROOT={}", base_dir.to_string_lossy()); +} diff --git a/arkworks3-sppark-wlc/sppark/rust/publish.sh b/arkworks3-sppark-wlc/sppark/rust/publish.sh new file mode 100644 index 000000000..c68d37c07 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/rust/publish.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +HERE=`dirname $0` +cd "${HERE}" + +if [ ! -d sppark_bal ]; then + trap '[ -h sppark_bal ] && rm -f sppark_bal' 0 2 + ln -s .. sppark_bal +fi + +# --allow-dirty because the temporary sppark symbolic link is not committed +cargo +stable publish --allow-dirty "$@" diff --git a/arkworks3-sppark-wlc/sppark/rust/src/lib.rs b/arkworks3-sppark-wlc/sppark/rust/src/lib.rs new file mode 100644 index 000000000..50890f96a --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/rust/src/lib.rs @@ -0,0 +1,42 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#[macro_export] +macro_rules! cuda_error { + () => { + // Declare C/C++ counterpart as following: + // extern "C" { fn foobar(...) -> cuda::Error; } + mod cuda { + #[repr(C)] + pub struct Error { + pub code: i32, + str: Option>, // just strdup("string") from C/C++ + } + + impl Drop for Error { + fn drop(&mut self) { + extern "C" { + fn free(str: Option>); + } + unsafe { free(self.str) }; + self.str = None; + } + } + + impl From for String { + fn from(status: Error) -> Self { + let c_str = if let Some(ptr) = status.str { + unsafe { std::ffi::CStr::from_ptr(ptr.as_ptr()) } + } else { + extern "C" { + fn cudaGetErrorString(code: i32) -> *const i8; + } + unsafe { std::ffi::CStr::from_ptr(cudaGetErrorString(status.code)) } + }; + String::from(c_str.to_str().unwrap_or("unintelligible")) + } + } + } + }; +} diff --git a/arkworks3-sppark-wlc/sppark/util/device.hpp b/arkworks3-sppark-wlc/sppark/util/device.hpp new file mode 100644 index 000000000..999ff30d5 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/util/device.hpp @@ -0,0 +1,45 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + + +// Class to represent GPU resources +// class devices_t { +// } + +template +class device_ptr_list_t { + vector d_ptrs; +public: + device_ptr_list_t() {} + ~device_ptr_list_t() { + for(T *ptr: d_ptrs) { + cudaFree(ptr); + } + } + size_t allocate(size_t bytes) { + T *d_ptr; + CUDA_OK(cudaMalloc(&d_ptr, bytes)); + d_ptrs.push_back(d_ptr); + return d_ptrs.size() - 1; + } + size_t size() { + return d_ptrs.size(); + } + // TODO + // Can set to NULL but can't renumber. Do we need this? + // void free(size_t idx) { + // } + T* operator[](size_t i) { + if (i > d_ptrs.size() - 1) { + CUDA_OK(cudaErrorInvalidDevicePointer); + } + return d_ptrs[i]; + } + +}; + +// Class to represent a GPU +class device_t { + +}; diff --git a/arkworks3-sppark-wlc/sppark/util/exception.cuh b/arkworks3-sppark-wlc/sppark/util/exception.cuh new file mode 100644 index 000000000..b0751b010 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/util/exception.cuh @@ -0,0 +1,36 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include + +class cuda_error : public std::runtime_error { + cudaError_t _code; +public: + cuda_error(cudaError_t err, const std::string& reason) : std::runtime_error{reason} + { _code = err; } + inline cudaError_t code() const + { return _code; } +}; + +template +inline std::string fmt(const char* fmt, Types... args) +{ + size_t len = std::snprintf(nullptr, 0, fmt, args...); + std::string ret(++len, '\0'); + std::snprintf(&ret.front(), len, fmt, args...); + ret.resize(--len); + return ret; +} + +#define CUDA_OK(expr) do { \ + cudaError_t code = expr; \ + if (code != cudaSuccess) { \ + auto str = fmt("%s@%d failed: %s", #expr, __LINE__, \ + cudaGetErrorString(code)); \ + throw cuda_error(code, str); \ + } \ +} while(0) + diff --git a/arkworks3-sppark-wlc/sppark/util/host_pinned_allocator_t.hpp b/arkworks3-sppark-wlc/sppark/util/host_pinned_allocator_t.hpp new file mode 100644 index 000000000..13c2224ef --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/util/host_pinned_allocator_t.hpp @@ -0,0 +1,43 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +template +struct host_pinned_allocator_t { + typedef T value_type; + host_pinned_allocator_t() {} + + // A converting copy constructor: + template + host_pinned_allocator_t(const host_pinned_allocator_t&) {} + + template + bool operator==(const host_pinned_allocator_t&) const { + return true; + } + + template + bool operator!=(const host_pinned_allocator_t&) const { + return false; + } + + T* allocate(const size_t n) const { + if (n == 0) { + return nullptr; + } + if (n > static_cast(-1) / sizeof(T)) { + throw std::bad_array_new_length(); + } + void *pv = NULL; + cudaMallocHost(&pv, n * sizeof(T)); + if (!pv) { + throw std::bad_alloc(); + } + return static_cast(pv); + } + void deallocate(T* const p, size_t) const { + cudaFreeHost(p); + } +}; + + diff --git a/arkworks3-sppark-wlc/sppark/util/rusterror.h b/arkworks3-sppark-wlc/sppark/util/rusterror.h new file mode 100644 index 000000000..f7176e4a2 --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/util/rusterror.h @@ -0,0 +1,39 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifndef __RUSTERROR_H__ +#define __RUSTERROR_H__ + +#ifdef __cplusplus +# include +# include +#else +# include +#endif + +struct RustError { /* to be returned exclusively by value */ + int code; + char *message; +#ifdef __cplusplus + RustError(int e = 0) : code(e) + { message = nullptr; } + RustError(int e, const std::string& str) : code(e) + { message = str.empty() ? nullptr : strdup(str.c_str()); } + RustError(int e, const char *str) : code(e) + { message = str==nullptr ? nullptr : strdup(str); } + // no destructor[!], Rust takes care of the |message| +#endif +}; +#ifndef __cplusplus +typedef struct RustError RustError; +#endif + +#define RUST_OK(expr) do { \ + RustError e = expr; \ + if (e.code != cudaSuccess) { \ + throw cuda_error((cudaError_t)e.code, e.message); \ + } \ +} while(0) + +#endif diff --git a/arkworks3-sppark-wlc/sppark/util/thread_pool_t.hpp b/arkworks3-sppark-wlc/sppark/util/thread_pool_t.hpp new file mode 100644 index 000000000..658968aae --- /dev/null +++ b/arkworks3-sppark-wlc/sppark/util/thread_pool_t.hpp @@ -0,0 +1,172 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#ifndef __THREAD_POOL_T_HPP__ +#define __THREAD_POOL_T_HPP__ + +#if __cplusplus < 201103L && !(defined(_MSVC_LANG) && _MSVC_LANG >= 201103L) +# error C++11 or later is required. +#endif + +#include +#include +#include +#include +#include +#include +#include +#ifdef _GNU_SOURCE +# include +#endif + +class thread_pool_t { +private: + std::vector threads; + + std::mutex mtx; // Inter-thread synchronization + std::condition_variable cvar; + std::atomic done; + + typedef std::function job_t; + std::deque fifo; + +public: + thread_pool_t(unsigned int num_threads = 0) : done(false) + { + if (num_threads == 0) { + num_threads = std::thread::hardware_concurrency(); +#ifdef _GNU_SOURCE + cpu_set_t set; + if (sched_getaffinity(0, sizeof(set), &set) == 0) { + size_t i, n; + for (n = 0, i = num_threads; i--;) + n += CPU_ISSET(i, &set); + if (n != 0) + num_threads = n; + } +#endif + } + + threads.reserve(num_threads); + + for (unsigned int i = 0; i < num_threads; i++) + threads.push_back(std::thread([this]() { while (execute()); })); + } + + virtual ~thread_pool_t() + { + done = true; + cvar.notify_all(); + for (auto& tid : threads) + tid.join(); + } + + size_t size() { return threads.size(); } + + template void spawn(Workable work) + { + std::unique_lock lock(mtx); + fifo.emplace_back(job_t(work)); + cvar.notify_one(); // wake up a worker thread + } + +private: + bool execute() + { + job_t work; + { + std::unique_lock lock(mtx); + + while (!done && fifo.empty()) + cvar.wait(lock); + + if (done && fifo.empty()) + return false; + + work = fifo.front(); fifo.pop_front(); + } + work(); + + return true; + } + +public: + // call work(size_t idx) with idx=[0..num_items) in parallel, e.g. + // pool.par_map(20, [&](size_t i) { std::cout << i << std::endl; }); + template + void par_map(size_t num_items, Workable work, size_t max_workers = 0) + { + size_t num_workers = std::min(size(), num_items); + if (max_workers > 0) + num_workers = std::min(num_workers, max_workers); + + std::atomic counter(0); + std::atomic done(num_workers); + std::mutex b_mtx; + std::condition_variable barrier; + + while (num_workers--) { + spawn([&, num_items]() { + size_t idx; + while ((idx = counter.fetch_add(1, std::memory_order_relaxed)) + < num_items) + work(idx); + if (--done == 0) { + std::unique_lock lock(b_mtx); + barrier.notify_one(); + } + }); + } + + std::unique_lock lock(b_mtx); + barrier.wait(lock, [&] { return done == 0; }); + } +}; + +template class channel_t { +private: + std::deque fifo; + std::mutex mtx; + std::condition_variable cvar; + +public: + void send(const T& msg) + { + std::unique_lock lock(mtx); + fifo.push_back(msg); + cvar.notify_one(); + } + + T recv() + { + std::unique_lock lock(mtx); + cvar.wait(lock, [&] { return !fifo.empty(); }); + auto msg = fifo.front(); fifo.pop_front(); + return msg; + } +}; + +template class counter_t { + struct inner { + std::atomic val; + std::atomic ref_cnt; + inline inner(T v) { val = v, ref_cnt = 1; }; + }; + inner *ptr; +public: + counter_t(T v=0) { ptr = new inner(v); } + counter_t(const counter_t& r) + { (ptr = r.ptr)->ref_cnt.fetch_add(1, std::memory_order_relaxed); } + ~counter_t() + { + if (ptr->ref_cnt.fetch_sub(1, std::memory_order_seq_cst) == 1) + delete ptr; + } + size_t ref_cnt() const { return ptr->ref_cnt; } + T operator++(int) const { return ptr->val.fetch_add(1, std::memory_order_relaxed); } + T operator++() const { return ptr->val++ + 1; } + T operator--(int) const { return ptr->val.fetch_sub(1, std::memory_order_relaxed); } + T operator--() const { return ptr->val-- - 1; } +}; +#endif // __THREAD_POOL_T_HPP__ diff --git a/arkworks3-sppark-wlc/src/lib.c b/arkworks3-sppark-wlc/src/lib.c new file mode 100644 index 000000000..e69de29bb diff --git a/arkworks3-sppark-wlc/src/lib.rs b/arkworks3-sppark-wlc/src/lib.rs new file mode 100644 index 000000000..b50a19e6d --- /dev/null +++ b/arkworks3-sppark-wlc/src/lib.rs @@ -0,0 +1,98 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use ark_bls12_381::{Fr, G1Affine}; +use ark_ec::AffineCurve; +use ark_ff::PrimeField; +use ark_std::Zero; +use std::os::raw::c_void; + +#[allow(unused_imports)] +use blst::*; + +sppark_bal::cuda_error!(); + +pub mod util; + +#[repr(C)] +pub struct MultiScalarMultContext { + pub context: *mut c_void, +} + +#[cfg_attr(feature = "quiet", allow(improper_ctypes))] +extern "C" { + fn mult_pippenger_faster_init( + context: *mut MultiScalarMultContext, + points_with_infinity: *const G1Affine, + npoints: usize, + ffi_affine_sz: usize, + ) -> cuda::Error; + + fn mult_pippenger_faster_inf( + context: *mut MultiScalarMultContext, + out: *mut u64, + npoints: usize, + batch_size: usize, + scalars: *const Fr, + ffi_affine_sz: usize, + ) -> cuda::Error; + + fn mult_pippenger_faster_free(context: *mut MultiScalarMultContext); +} + +pub fn multi_scalar_mult_init(points: &[G]) -> MultiScalarMultContext { + let mut ret = MultiScalarMultContext { + context: std::ptr::null_mut(), + }; + + let err = unsafe { + mult_pippenger_faster_init( + &mut ret, + points as *const _ as *const G1Affine, + points.len(), + std::mem::size_of::(), + ) + }; + if err.code != 0 { + panic!("{}", String::from(err)); + } + + ret +} + +pub fn multi_scalar_mult_free(context: &mut MultiScalarMultContext) { + unsafe { + mult_pippenger_faster_free(context); + } +} + +pub fn multi_scalar_mult( + context: &mut MultiScalarMultContext, + npoints: usize, + scalars: &[::BigInt], +) -> Vec { + if scalars.len() % npoints != 0 { + panic!("length mismatch") + } + + let batch_size = scalars.len() / npoints; + let mut ret = vec![G::Projective::zero(); batch_size]; + let err = unsafe { + let result_ptr = &mut *(&mut ret as *mut Vec as *mut Vec); + + mult_pippenger_faster_inf( + context, + result_ptr.as_mut_ptr(), + npoints, + batch_size, + scalars as *const _ as *const Fr, + std::mem::size_of::(), + ) + }; + if err.code != 0 { + panic!("{}", String::from(err)); + } + + ret +} diff --git a/arkworks3-sppark-wlc/src/util.rs b/arkworks3-sppark-wlc/src/util.rs new file mode 100644 index 000000000..e6eae3e71 --- /dev/null +++ b/arkworks3-sppark-wlc/src/util.rs @@ -0,0 +1,165 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use rand::SeedableRng; +use rand_chacha::ChaCha20Rng; + +use ark_ec::{AffineCurve, ProjectiveCurve}; +use ark_std::UniformRand; + +use ark_ff::prelude::*; +use ark_std::vec::Vec; + +pub fn generate_points_scalars( + len: usize, + batch_size: usize, +) -> (Vec, Vec) { + let rand_gen: usize = 1 << 11; + let mut rng = ChaCha20Rng::from_entropy(); + + let mut points = ::batch_normalization_into_affine( + &(0..rand_gen) + .map(|_| G::Projective::rand(&mut rng)) + .collect::>(), + ); + + // Sprinkle in some infinity points + // points[3] = G::zero(); + while points.len() < len { + points.append(&mut points.clone()); + } + + let points = &points[0..len]; + + let scalars = (0..len * batch_size) + .map(|_| G::ScalarField::rand(&mut rng)) + .collect::>(); + + (points.to_vec(), scalars) +} + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +pub struct VariableBaseMSM2; + +impl VariableBaseMSM2 { + pub fn multi_scalar_mul( + bases: &[G], + scalars: &[::BigInt], + ) -> G::Projective { + let size = ark_std::cmp::min(bases.len(), scalars.len()); + let scalars = &scalars[..size]; + let bases = &bases[..size]; + let scalars_and_bases_iter = scalars.iter().zip(bases).filter(|(s, _)| !s.is_zero()); + + // let c = if size < 32 { + // 3 + // } else { + // super::ln_without_floats(size) + 2 + // }; + let c = 21; + + let num_bits = ::Params::MODULUS_BITS as usize; + let fr_one = G::ScalarField::one().into_repr(); + + let zero = G::Projective::zero(); + let window_starts: Vec<_> = (0..num_bits).step_by(c).collect(); + + // Each window is of size `c`. + // We divide up the bits 0..num_bits into windows of size `c`, and + // in parallel process each such window. + let window_sums: Vec<_> = ark_std::cfg_into_iter!(window_starts) + .map(|w_start| { + let mut res = zero; + // let mut count = 0; + + // We don't need the "zero" bucket, so we only have 2^c - 1 buckets. + let mut buckets = vec![zero; (1 << c) - 1]; + // This clone is cheap, because the iterator contains just a + // pointer and an index into the original vectors. + scalars_and_bases_iter.clone().for_each(|(&scalar, base)| { + if scalar == fr_one { + // We only process unit scalars once in the first window. + if w_start == 0 { + res.add_assign_mixed(base); + } + } else { + let mut scalar = scalar; + + // We right-shift by w_start, thus getting rid of the + // lower bits. + scalar.divn(w_start as u32); + + // We mod the remaining bits by 2^{window size}, thus taking `c` bits. + let scalar = scalar.as_ref()[0] % (1 << c); + + // If the scalar is non-zero, we update the corresponding + // bucket. + // (Recall that `buckets` doesn't have a zero bucket.) + // if w_start != 252{ + if scalar != 0 { + buckets[(scalar - 1) as usize].add_assign_mixed(base); + } + // } + } + }); + + // Compute sum_{i in 0..num_buckets} (sum_{j in i..num_buckets} bucket[j]) + // This is computed below for b buckets, using 2b curve additions. + // + // We could first normalize `buckets` and then use mixed-addition + // here, but that's slower for the kinds of groups we care about + // (Short Weierstrass curves and Twisted Edwards curves). + // In the case of Short Weierstrass curves, + // mixed addition saves ~4 field multiplications per addition. + // However normalization (with the inversion batched) takes ~6 + // field multiplications per element, + // hence batch normalization is a slowdown. + + // `running_sum` = sum_{j in i..num_buckets} bucket[j], + // where we iterate backward from i = num_buckets to 0. + let mut running_sum = G::Projective::zero(); + buckets.into_iter().rev().for_each(|b| { + running_sum += &b; + res += &running_sum; + }); + res + }) + .collect(); + + // We store the sum for the lowest window. + let lowest = *window_sums.first().unwrap(); + + // let mm = window_sums[1..] + // .iter() + // .rev() + // .fold(zero, |mut total, sum_i| { + // total += sum_i; + // // for _ in 0..c { + // // total.double_in_place(); + // // } + // total + // }); + + // We're traversing windows from high to low. + lowest + + &window_sums[1..] + .iter() + .rev() + .fold(zero, |mut total, sum_i| { + total += sum_i; + for _ in 0..c { + total.double_in_place(); + } + total + }) + + // if mm == zero{ + // panic!("zero!"); + // } + + // mm + } +} diff --git a/arkworks3-sppark-wlc/tests/msm.rs b/arkworks3-sppark-wlc/tests/msm.rs new file mode 100644 index 000000000..4f15a1cbf --- /dev/null +++ b/arkworks3-sppark-wlc/tests/msm.rs @@ -0,0 +1,39 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use ark_bls12_381::G1Affine; +use ark_ec::msm::VariableBaseMSM; +use ark_ec::ProjectiveCurve; +use ark_ff::BigInteger256; + +use std::str::FromStr; + +use blst_msm::*; + +#[test] +fn msm_correctness() { + let test_npow = std::env::var("TEST_NPOW").unwrap_or("19".to_string()); + let npoints_npow = i32::from_str(&test_npow).unwrap(); + + let batches = 4; + let (points, scalars) = + util::generate_points_scalars::(1usize << npoints_npow, batches); + + let mut context = multi_scalar_mult_init(points.as_slice()); + let msm_results = multi_scalar_mult(&mut context, points.as_slice(), unsafe { + std::mem::transmute::<&[_], &[BigInteger256]>(scalars.as_slice()) + }); + + for b in 0..batches { + let start = b * points.len(); + let end = (b + 1) * points.len(); + + let arkworks_result = VariableBaseMSM::multi_scalar_mul(points.as_slice(), unsafe { + std::mem::transmute::<&[_], &[BigInteger256]>(&scalars[start..end]) + }) + .into_affine(); + + assert_eq!(msm_results[b].into_affine(), arkworks_result); + } +} diff --git a/arkworks3-sppark/Cargo.toml b/arkworks3-sppark/Cargo.toml new file mode 100644 index 000000000..168c66170 --- /dev/null +++ b/arkworks3-sppark/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "rust-kzg-arkworks3-sppark" +version = "0.1.0" +edition = "2021" + +[dependencies] +blst = "0.3.11" +sppark = "0.1.6" +ark-std = "0.3.0" +ark-ff = "0.3.0" +ark-ec = { version = "0.3.0", features = [ "parallel" ] } +ark-bls12-381 = { version = "0.3.0" } + +[build-dependencies] +cc = "^1.0.70" +which = "^4.0" + +[dev-dependencies] +criterion = "0.5.1" +kzg = { path = "../kzg" } +rand = "0.8.5" + +[[bench]] +name = "lincomb" +harness = false \ No newline at end of file diff --git a/arkworks3-sppark/benches/lincomb.rs b/arkworks3-sppark/benches/lincomb.rs new file mode 100644 index 000000000..e63b5b49c --- /dev/null +++ b/arkworks3-sppark/benches/lincomb.rs @@ -0,0 +1,53 @@ +use blst::{blst_fr, blst_p1_affine, blst_scalar, blst_scalar_from_fr}; +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg::Fr; +use kzg::G1; +use rust_kzg_blst::types::fp::FsFp; +use rust_kzg_blst::types::fr::FsFr; +use rust_kzg_blst::types::g1::{FsG1, FsG1Affine}; + +extern crate alloc; + +fn bench_g1_lincomb(c: &mut Criterion) { + const NUM_POINTS: usize = 1usize << 21; + + let points = (0..NUM_POINTS) + .into_iter() + .map(|_| FsG1::rand()) + .collect::>(); + let scalars = (0..NUM_POINTS) + .into_iter() + .map(|_| FsFr::rand()) + .collect::>(); + + let affines = kzg::msm::msm_impls::batch_convert::(&points); + let scalars = + unsafe { alloc::slice::from_raw_parts(scalars.as_ptr() as *const blst_fr, scalars.len()) }; + + let affines = unsafe { + alloc::slice::from_raw_parts(affines.as_ptr() as *const blst_p1_affine, affines.len()) + }; + + let id = format!("bench_g1_lincomb points: '{}'", NUM_POINTS); + c.bench_function(&id, |b| { + b.iter(|| { + rust_kzg_blst_sppark::multi_scalar_mult(&affines, &scalars); + }) + }); + + let msm = rust_kzg_blst_sppark::prepare_multi_scalar_mult(&affines); + let id = format!("bench_g1_lincomb points (prepared, mont): '{}'", NUM_POINTS); + c.bench_function(&id, |b| { + b.iter(|| { + rust_kzg_blst_sppark::multi_scalar_mult_prepared(msm, &scalars); + }) + }); +} + +criterion_group! { + name = benches; + config = Criterion::default()/*.sample_size(100)*/; + targets = bench_g1_lincomb +} + +criterion_main!(benches); diff --git a/arkworks3-sppark/build.rs b/arkworks3-sppark/build.rs new file mode 100644 index 000000000..a49e8bc26 --- /dev/null +++ b/arkworks3-sppark/build.rs @@ -0,0 +1,95 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use std::env; +use std::path::PathBuf; + +fn main() { + // account for cross-compilation [by examining environment variable] + let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + + // Set CC environment variable to choose alternative C compiler. + // Optimization level depends on whether or not --release is passed + // or implied. + let mut cc = cc::Build::new(); + + let c_src_dir = PathBuf::from("src"); + let files = vec![c_src_dir.join("lib.c")]; + let mut cc_opt = None; + + match (cfg!(feature = "portable"), cfg!(feature = "force-adx")) { + (true, false) => { + println!("Compiling in portable mode without ISA extensions"); + cc_opt = Some("__BLST_PORTABLE__"); + } + (false, true) => { + if target_arch.eq("x86_64") { + println!("Enabling ADX support via `force-adx` feature"); + cc_opt = Some("__ADX__"); + } else { + println!("`force-adx` is ignored for non-x86_64 targets"); + } + } + (false, false) => + { + #[cfg(target_arch = "x86_64")] + if target_arch.eq("x86_64") && std::is_x86_feature_detected!("adx") { + println!("Enabling ADX because it was detected on the host"); + cc_opt = Some("__ADX__"); + } + } + (true, true) => panic!("Cannot compile with both `portable` and `force-adx` features"), + } + + cc.flag_if_supported("-mno-avx") // avoid costly transitions + .flag_if_supported("-fno-builtin") + .flag_if_supported("-Wno-unused-command-line-argument"); + if !cfg!(debug_assertions) { + cc.opt_level(2); + } + if let Some(def) = cc_opt { + cc.define(def, None); + } + if let Some(include) = env::var_os("DEP_BLST_C_SRC") { + cc.include(include); + } + cc.files(&files).compile("msm_cuda"); + + if cfg!(target_os = "windows") && !cfg!(target_env = "msvc") { + return; + } + // Detect if there is CUDA compiler and engage "cuda" feature accordingly + let nvcc = match env::var("NVCC") { + Ok(var) => which::which(var), + Err(_) => which::which("nvcc"), + }; + + if nvcc.is_ok() { + let mut nvcc = cc::Build::new(); + nvcc.cuda(true); + nvcc.flag("-arch=sm_80"); + nvcc.flag("-gencode").flag("arch=compute_70,code=sm_70"); + nvcc.flag("-t0"); + if cfg!(feature = "quiet") { + nvcc.flag("-diag-suppress=177"); // bug in the warning system. + } + #[cfg(not(target_env = "msvc"))] + nvcc.flag("-Xcompiler").flag("-Wno-unused-function"); + nvcc.define("TAKE_RESPONSIBILITY_FOR_ERROR_MESSAGE", None); + if let Some(def) = cc_opt { + nvcc.define(def, None); + } + if let Some(include) = env::var_os("DEP_BLST_C_SRC") { + nvcc.include(include); + } + if let Some(include) = env::var_os("DEP_SPPARK_ROOT") { + nvcc.include(include); + } + nvcc.file("cuda/pippenger.cu").compile("blst_cuda_msm"); + + println!("cargo:rustc-cfg=feature=\"cuda\""); + println!("cargo:rerun-if-changed=cuda"); + println!("cargo:rerun-if-env-changed=CXXFLAGS"); + } +} diff --git a/arkworks3-sppark/cuda/pippenger.cu b/arkworks3-sppark/cuda/pippenger.cu new file mode 100644 index 000000000..70071073f --- /dev/null +++ b/arkworks3-sppark/cuda/pippenger.cu @@ -0,0 +1,37 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include + +#include +#include + +typedef jacobian_t point_t; +typedef xyzz_t bucket_t; +typedef bucket_t::affine_inf_t affine_t; +typedef fr_t scalar_t; + +#include + +#ifndef __CUDA_ARCH__ + +extern "C" +void *prepare_msm(const affine_t points[], size_t npoints, size_t ffi_affine_sz) { + return new msm_t{points, npoints, ffi_affine_sz}; +} + +extern "C" +RustError mult_pippenger_prepared(void *msm, point_t* out, size_t npoints, const scalar_t scalars[]) { + return static_cast*>(msm)->invoke(*out, slice_t{scalars, npoints}, true); +} + +extern "C" +RustError mult_pippenger(point_t* out, const affine_t points[], size_t npoints, + const scalar_t scalars[], size_t ffi_affine_sz) +{ + return mult_pippenger(out, points, npoints, scalars, true, ffi_affine_sz); +} +#endif \ No newline at end of file diff --git a/arkworks3-sppark/src/lib.c b/arkworks3-sppark/src/lib.c new file mode 100644 index 000000000..e69de29bb diff --git a/arkworks3-sppark/src/lib.rs b/arkworks3-sppark/src/lib.rs new file mode 100644 index 000000000..c9d369bb2 --- /dev/null +++ b/arkworks3-sppark/src/lib.rs @@ -0,0 +1,98 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use ark_bls12_381::{Fr, G1Affine, G1Projective, G2Affine, G2Projective}; +use ark_ec::AffineCurve; +use ark_ff::PrimeField; +use ark_std::Zero; + +use std::ffi::c_void; + +pub fn prepare_multi_scalar_mult(points: &[G]) -> *mut c_void { + #[cfg_attr(feature = "quiet", allow(improper_ctypes))] + extern "C" { + fn prepare_msm( + points: *const G1Affine, + npoints: usize, + ffi_affine_sz: usize, + ) -> *mut c_void; + } + + let npoints = points.len(); + + unsafe { + prepare_msm( + points.as_ptr() as *const _, + npoints, + std::mem::size_of::(), + ) + } +} + +pub fn multi_scalar_mult_prepared( + msm: *mut c_void, + scalars: &[::BigInt], +) -> G::Projective { + #[cfg_attr(feature = "quiet", allow(improper_ctypes))] + extern "C" { + fn mult_pippenger_prepared( + msm: *mut c_void, + out: *mut G1Projective, + npoints: usize, + scalars: *const Fr, + ) -> sppark::Error; + } + + let npoints = scalars.len(); + let mut ret = G::Projective::zero(); + + let err = unsafe { + mult_pippenger_prepared( + msm, + &mut ret as *mut _ as *mut _, + npoints, + scalars.as_ptr() as *const _, + ) + }; + if err.code != 0 { + panic!("{}", String::from(err)); + } + ret +} + +pub fn multi_scalar_mult( + points: &[G], + scalars: &[::BigInt], +) -> G::Projective { + #[cfg_attr(feature = "quiet", allow(improper_ctypes))] + extern "C" { + fn mult_pippenger( + out: *mut G1Projective, + points: *const G1Affine, + npoints: usize, + scalars: *const Fr, + ffi_affine_sz: usize, + ) -> sppark::Error; + } + + let npoints = points.len(); + if npoints != scalars.len() { + panic!("length mismatch") + } + + let mut ret = G::Projective::zero(); + let err = unsafe { + mult_pippenger( + &mut ret as *mut _ as *mut _, + points.as_ptr() as *const _, + npoints, + scalars.as_ptr() as *const _, + std::mem::size_of::(), + ) + }; + if err.code != 0 { + panic!("{}", String::from(err)); + } + ret +} diff --git a/arkworks3/Cargo.toml b/arkworks3/Cargo.toml new file mode 100644 index 000000000..4a7ce6bc1 --- /dev/null +++ b/arkworks3/Cargo.toml @@ -0,0 +1,88 @@ +[package] +name = "rust-kzg-arkworks3" +version = "0.1.0" +edition = "2021" + +[dependencies] +blst = "0.3.11" +kzg = { path = "../kzg", default-features = false } +ark-std = { version = "^0.3.0", default-features = false } +ark-ff = { version = "^0.3.0", default-features = false, features = [ "asm" ] } +ark-ec = { version = "^0.3.0", default-features = false } +ark-poly = { version = "^0.3.0", default-features = false } +ark-bls12-381 = { version = "^0.3.0", default-features = false, features = [ "curve" ] } +ark-serialize = { version = "^0.3.0", default-features = false } +hex = "0.4.3" +rand = { version = "0.8.5", optional = true } +libc = { version = "0.2.148", default-features = false } +rayon = { version = "1.8.0", optional = true } +rust-kzg-arkworks3-sppark = { path = "../arkworks3-sppark", version = "0.1.0", optional = true } +rust-kzg-arkworks3-sppark-wlc = { path = "../arkworks3-sppark-wlc", version = "0.1.0", optional = true } + +[dev-dependencies] +criterion = "0.5.1" +kzg-bench = { path = "../kzg-bench" } +rand = { version = "0.8.5" } + +[features] +default = [ + "std", + "rand" +] +std = [ + "ark-ff/std", "ark-ec/std", "ark-poly/std", "ark-std/std", + "kzg/std", + "libc/std" +] +parallel = [ +"dep:rayon", "kzg/parallel", +"ark-std/parallel", "ark-ff/parallel", "ark-ec/parallel", "ark-poly/parallel" +] +rand = [ + "dep:rand", + "kzg/rand", +] +sppark = [ + "dep:rust-kzg-arkworks3-sppark", + "kzg/sppark" +] +sppark_wlc = [ + "dep:rust-kzg-arkworks3-sppark-wlc", + "kzg/sppark" +] + +[[bench]] +name = "fft" +harness = false + +[[bench]] +name = "kzg" +harness = false + +[[bench]] +name = "poly" +harness = false + +[[bench]] +name = "das" +harness = false + +[[bench]] +name = "fk_20" +harness = false + +[[bench]] +name = "recover" +harness = false + +[[bench]] +name = "zero_poly" +harness = false + +[[bench]] +name = "eip_4844" +harness = false + +[[bench]] +name = "lincomb" +harness = false diff --git a/arkworks3/benches/das.rs b/arkworks3/benches/das.rs new file mode 100644 index 000000000..d0daeccd8 --- /dev/null +++ b/arkworks3/benches/das.rs @@ -0,0 +1,16 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::das::bench_das_extension; +use rust_kzg_arkworks3::kzg_proofs::FFTSettings; +use rust_kzg_arkworks3::kzg_types::ArkFr; + +fn bench_das_extension_(c: &mut Criterion) { + bench_das_extension::(c); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_das_extension_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/eip_4844.rs b/arkworks3/benches/eip_4844.rs new file mode 100644 index 000000000..4f6e8000c --- /dev/null +++ b/arkworks3/benches/eip_4844.rs @@ -0,0 +1,28 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg::eip_4844::{ + blob_to_kzg_commitment_rust, bytes_to_blob, compute_blob_kzg_proof_rust, + compute_kzg_proof_rust, verify_blob_kzg_proof_batch_rust, verify_blob_kzg_proof_rust, + verify_kzg_proof_rust, +}; +use kzg_bench::benches::eip_4844::bench_eip_4844; +use rust_kzg_arkworks3::eip_4844::load_trusted_setup_filename_rust; +use rust_kzg_arkworks3::kzg_proofs::{FFTSettings, KZGSettings}; +use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; +use rust_kzg_arkworks3::utils::PolyData; + +fn bench_eip_4844_(c: &mut Criterion) { + bench_eip_4844::( + c, + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_kzg_proof_rust, + &verify_kzg_proof_rust, + &compute_blob_kzg_proof_rust, + &verify_blob_kzg_proof_rust, + &verify_blob_kzg_proof_batch_rust, + ); +} + +criterion_group!(benches, bench_eip_4844_,); +criterion_main!(benches); diff --git a/arkworks3/benches/fft.rs b/arkworks3/benches/fft.rs new file mode 100644 index 000000000..26d1b4ed0 --- /dev/null +++ b/arkworks3/benches/fft.rs @@ -0,0 +1,20 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::fft::{bench_fft_fr, bench_fft_g1}; +use rust_kzg_arkworks3::kzg_proofs::FFTSettings; +use rust_kzg_arkworks3::kzg_types::{ArkFr, ArkG1}; + +fn bench_fft_fr_(c: &mut Criterion) { + bench_fft_fr::(c); +} + +fn bench_fft_g1_(c: &mut Criterion) { + bench_fft_g1::(c); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_fft_fr_, bench_fft_g1_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/fk_20.rs b/arkworks3/benches/fk_20.rs new file mode 100644 index 000000000..3f9a6fa21 --- /dev/null +++ b/arkworks3/benches/fk_20.rs @@ -0,0 +1,42 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::fk20::{bench_fk_multi_da, bench_fk_single_da}; +use rust_kzg_arkworks3::fk20_proofs::{KzgFK20MultiSettings, KzgFK20SingleSettings}; +use rust_kzg_arkworks3::kzg_proofs::{generate_trusted_setup, FFTSettings, KZGSettings}; +use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; +use rust_kzg_arkworks3::utils::PolyData; + +fn bench_fk_single_da_(c: &mut Criterion) { + bench_fk_single_da::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20SingleSettings, + ArkFp, + ArkG1Affine, + >(c, &generate_trusted_setup) +} + +fn bench_fk_multi_da_(c: &mut Criterion) { + bench_fk_multi_da::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20MultiSettings, + ArkFp, + ArkG1Affine, + >(c, &generate_trusted_setup) +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_fk_single_da_, bench_fk_multi_da_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/kzg.rs b/arkworks3/benches/kzg.rs new file mode 100644 index 000000000..f90bc381b --- /dev/null +++ b/arkworks3/benches/kzg.rs @@ -0,0 +1,40 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::kzg::{bench_commit_to_poly, bench_compute_proof_single}; + +use rust_kzg_arkworks3::kzg_proofs::{generate_trusted_setup, FFTSettings, KZGSettings}; +use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; +use rust_kzg_arkworks3::utils::PolyData; + +fn bench_commit_to_poly_(c: &mut Criterion) { + bench_commit_to_poly::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >(c, &generate_trusted_setup); +} + +fn bench_compute_proof_single_(c: &mut Criterion) { + bench_compute_proof_single::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >(c, &generate_trusted_setup); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_commit_to_poly_, bench_compute_proof_single_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/lincomb.rs b/arkworks3/benches/lincomb.rs new file mode 100644 index 000000000..afd56e20c --- /dev/null +++ b/arkworks3/benches/lincomb.rs @@ -0,0 +1,16 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::lincomb::bench_g1_lincomb; +use rust_kzg_arkworks3::fft_g1::g1_linear_combination; +use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine}; + +fn bench_g1_lincomb_(c: &mut Criterion) { + bench_g1_lincomb::(c, &g1_linear_combination); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_g1_lincomb_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/poly.rs b/arkworks3/benches/poly.rs new file mode 100644 index 000000000..8c17dd36c --- /dev/null +++ b/arkworks3/benches/poly.rs @@ -0,0 +1,16 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::poly::bench_new_poly_div; +use rust_kzg_arkworks3::kzg_types::ArkFr; +use rust_kzg_arkworks3::utils::PolyData; + +fn bench_new_poly_div_(c: &mut Criterion) { + bench_new_poly_div::(c); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_new_poly_div_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/recover.rs b/arkworks3/benches/recover.rs new file mode 100644 index 000000000..7e031ccc5 --- /dev/null +++ b/arkworks3/benches/recover.rs @@ -0,0 +1,18 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::recover::bench_recover; + +use rust_kzg_arkworks3::kzg_proofs::FFTSettings; +use rust_kzg_arkworks3::kzg_types::ArkFr; +use rust_kzg_arkworks3::utils::PolyData; + +fn bench_recover_(c: &mut Criterion) { + bench_recover::(c); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_recover_ +} + +criterion_main!(benches); diff --git a/arkworks3/benches/zero_poly.rs b/arkworks3/benches/zero_poly.rs new file mode 100644 index 000000000..b987af86e --- /dev/null +++ b/arkworks3/benches/zero_poly.rs @@ -0,0 +1,18 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg_bench::benches::zero_poly::bench_zero_poly; + +use rust_kzg_arkworks3::kzg_proofs::FFTSettings; +use rust_kzg_arkworks3::kzg_types::ArkFr; +use rust_kzg_arkworks3::utils::PolyData; + +fn bench_zero_poly_(c: &mut Criterion) { + bench_zero_poly::(c); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(10); + targets = bench_zero_poly_ +} + +criterion_main!(benches); diff --git a/arkworks3/csharp.patch b/arkworks3/csharp.patch new file mode 100644 index 000000000..85ee37c9e --- /dev/null +++ b/arkworks3/csharp.patch @@ -0,0 +1,25 @@ +From 86aa67b0e3775514cc484ddd2adf6b5dc6e26803 Mon Sep 17 00:00:00 2001 +From: sirse +Date: Thu, 26 Oct 2023 13:40:30 +0300 +Subject: [PATCH] Patch csharp binding + +--- + bindings/csharp/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bindings/csharp/Makefile b/bindings/csharp/Makefile +index 5158aad..af3b2a8 100644 +--- a/bindings/csharp/Makefile ++++ b/bindings/csharp/Makefile +@@ -39,7 +39,7 @@ else + endif + + INCLUDE_DIRS = ../../src ../../blst/bindings +-TARGETS = ckzg.c ../../src/c_kzg_4844.c ../../blst/$(BLST_OBJ) ++TARGETS = ckzg.c ../../../../target/release/rust_kzg_arkworks3.a + + CFLAGS += -O2 -Wall -Wextra -shared + CFLAGS += ${addprefix -I,${INCLUDE_DIRS}} +-- +2.34.1 + diff --git a/arkworks3/go.patch b/arkworks3/go.patch new file mode 100644 index 000000000..518b3eeb5 --- /dev/null +++ b/arkworks3/go.patch @@ -0,0 +1,43 @@ +From d0e5b619807c0b9e936ce178b2a8e019da020a14 Mon Sep 17 00:00:00 2001 +From: sirse +Date: Thu, 16 May 2024 13:26:25 +0300 +Subject: [PATCH] Patch go bindings + +--- + bindings/go/main.go | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/bindings/go/main.go b/bindings/go/main.go +index bf344a1..4f1c0f4 100644 +--- a/bindings/go/main.go ++++ b/bindings/go/main.go +@@ -2,7 +2,15 @@ package ckzg4844 + + // #cgo CFLAGS: -I${SRCDIR}/../../src + // #cgo CFLAGS: -I${SRCDIR}/blst_headers +-// #include "c_kzg_4844.c" ++// #ifndef BYTES_PER_G1 ++// #define BYTES_PER_G1 48 ++// #endif ++// #ifndef BYTES_PER_G2 ++// #define BYTES_PER_G2 96 ++// #endif ++// #include ++// #include "c_kzg_4844.h" ++// #cgo LDFLAGS: -L${SRCDIR}/../../../../target/release -l:rust_kzg_arkworks3.a -lm + import "C" + + import ( +@@ -11,9 +19,6 @@ import ( + "errors" + "fmt" + "unsafe" +- +- // So its functions are available during compilation. +- _ "github.com/supranational/blst/bindings/go" + ) + + const ( +-- +2.36.2.windows.1 + diff --git a/arkworks3/java.patch b/arkworks3/java.patch new file mode 100644 index 000000000..a7e8b6205 --- /dev/null +++ b/arkworks3/java.patch @@ -0,0 +1,24 @@ +From b1f8f612f8c1bda0b4ea58e01e9a60235a88cc83 Mon Sep 17 00:00:00 2001 +From: povilassl +Date: Sun, 24 Sep 2023 18:01:51 +0300 +Subject: [PATCH] java patch + +--- + bindings/java/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bindings/java/Makefile b/bindings/java/Makefile +index 9be2fd6..1e59378 100644 +--- a/bindings/java/Makefile ++++ b/bindings/java/Makefile +@@ -1,6 +1,6 @@ + INCLUDE_DIRS = ../../src ../../blst/bindings + +-TARGETS=c_kzg_4844_jni.c ../../src/c_kzg_4844.c ../../lib/libblst.a ++TARGETS=c_kzg_4844_jni.c ../../../../target/release/rust_kzg_arkworks3.a + + CC_FLAGS= + OPTIMIZATION_LEVEL=-O2 +-- +2.37.0.windows.1 + diff --git a/arkworks3/nim.patch b/arkworks3/nim.patch new file mode 100644 index 000000000..890ea44e1 --- /dev/null +++ b/arkworks3/nim.patch @@ -0,0 +1,35 @@ +From 118b0f6c3f9bd5e7335129eea28c713b8b2856dd Mon Sep 17 00:00:00 2001 +From: sirse +Date: Thu, 16 May 2024 13:29:29 +0300 +Subject: [PATCH] Patch nim bindings + +--- + bindings/nim/kzg_abi.nim | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/bindings/nim/kzg_abi.nim b/bindings/nim/kzg_abi.nim +index 9162588..529e09a 100644 +--- a/bindings/nim/kzg_abi.nim ++++ b/bindings/nim/kzg_abi.nim +@@ -10,6 +10,7 @@ from os import DirSep, AltSep + const + # kzgPath: c-kzg-4844 project path, removing 3 last elem + kzgPath = currentSourcePath.rsplit({DirSep, AltSep}, 3)[0] & "/" ++ rustKzgPath = currentSourcePath.rsplit({DirSep, AltSep}, 5)[0] & "/" + blstPath = kzgPath & "blst/" + srcPath = kzgPath & "src/" + bindingsPath = blstPath & "bindings" +@@ -20,7 +21,9 @@ when not defined(kzgExternalBlst): + {.compile: blstPath & "src/server.c"} + {.passc: "-D__BLST_PORTABLE__"} + +-{.compile: srcPath & "c_kzg_4844.c"} ++{.passl: "-L" & rustKzgPath & "target/release" .} ++{.passl: "-l:rust_kzg_arkworks3.a" .} ++{.passl: "-lm" .} + + {.passc: "-I" & escape(bindingsPath) .} + {.passc: "-I" & escape(srcPath) .} +-- +2.36.2.windows.1 + diff --git a/arkworks3/nodejs.patch b/arkworks3/nodejs.patch new file mode 100644 index 000000000..205b93d3d --- /dev/null +++ b/arkworks3/nodejs.patch @@ -0,0 +1,48 @@ +From cb0c44c9df8a7a6a92ed5b4f1acb771532812257 Mon Sep 17 00:00:00 2001 +From: sirse +Date: Thu, 16 May 2024 14:19:08 +0300 +Subject: [PATCH] Patch nodejs bindings + +--- + bindings/node.js/binding.gyp | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/bindings/node.js/binding.gyp b/bindings/node.js/binding.gyp +index c42bb8f..e781e61 100644 +--- a/bindings/node.js/binding.gyp ++++ b/bindings/node.js/binding.gyp +@@ -3,9 +3,7 @@ + { + "target_name": "kzg", + "sources": [ +- "src/kzg.cxx", +- "deps/blst/src/server.c", +- "deps/c-kzg/c_kzg_4844.c" ++ "src/kzg.cxx" + ], + "include_dirs": [ + "<(module_root_dir)/deps/blst/bindings", +@@ -16,9 +14,11 @@ + "__BLST_PORTABLE__", + "NAPI_CPP_EXCEPTIONS" + ], ++ "libraries": [ ++ "<(module_root_dir)/../../../../target/release/rust_kzg_arkworks3.a" ++ ], + "conditions": [ + ["OS!='win'", { +- "sources": ["deps/blst/build/assembly.S"], + "cflags_cc": [ + "-fexceptions", + "-std=c++17", +@@ -26,7 +26,6 @@ + ] + }], + ["OS=='win'", { +- "sources": ["deps/blst/build/win64/*-x86_64.asm"], + "defines": [ + "_CRT_SECURE_NO_WARNINGS", + "_HAS_EXCEPTIONS=1" +-- +2.36.2.windows.1 + diff --git a/arkworks3/python.patch b/arkworks3/python.patch new file mode 100644 index 000000000..271185c99 --- /dev/null +++ b/arkworks3/python.patch @@ -0,0 +1,30 @@ +From 57a93a8db7319a368a25d470aa074e3af5ecb4b6 Mon Sep 17 00:00:00 2001 +From: sirse +Date: Thu, 16 May 2024 12:56:53 +0300 +Subject: [PATCH] Patch python bindings + +--- + setup.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/setup.py b/setup.py +index 42d4c36..f982863 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,10 +35,10 @@ def main(): + ext_modules=[ + Extension( + "ckzg", +- sources=["bindings/python/ckzg.c", "src/c_kzg_4844.c"], ++ sources=["bindings/python/ckzg.c"], + include_dirs=["inc", "src"], +- library_dirs=["lib"], +- libraries=["blst"] ++ library_dirs=["lib", "../../target/release"], ++ libraries=[":rust_kzg_arkworks3.a"] + ) + ], + cmdclass={ +-- +2.36.2.windows.1 + diff --git a/arkworks3/rust.patch b/arkworks3/rust.patch new file mode 100644 index 000000000..12ed0f782 --- /dev/null +++ b/arkworks3/rust.patch @@ -0,0 +1,76 @@ +From de2366bc220f4773271f54b040bb81c297edab1a Mon Sep 17 00:00:00 2001 +From: sirse +Date: Sat, 6 Jul 2024 16:06:23 +0300 +Subject: [PATCH] Patch rust bindings + +--- + Cargo.toml | 1 + + bindings/rust/build.rs | 41 +++-------------------------------------- + 2 files changed, 4 insertions(+), 38 deletions(-) + +diff --git a/Cargo.toml b/Cargo.toml +index f355f8c..7be1795 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -1,3 +1,4 @@ ++[workspace] + [package] + name = "c-kzg" + version = "1.0.2" +diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs +index cd07487..0e9d7f6 100644 +--- a/bindings/rust/build.rs ++++ b/bindings/rust/build.rs +@@ -3,46 +3,11 @@ use std::{env, path::PathBuf}; + fn main() { + let root_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + +- // Obtain the header files of blst +- let blst_base_dir = root_dir.join("blst"); +- let blst_headers_dir = blst_base_dir.join("bindings"); +- +- let c_src_dir = root_dir.join("src"); +- +- let mut cc = cc::Build::new(); +- +- #[cfg(all(windows, target_env = "msvc"))] +- { +- cc.flag("-D_CRT_SECURE_NO_WARNINGS"); +- +- // In blst, if __STDC_VERSION__ isn't defined as c99 or greater, it will typedef a bool to +- // an int. There is a bug in bindgen associated with this. It assumes that a bool in C is +- // the same size as a bool in Rust. This is the root cause of the issues on Windows. If/when +- // this is fixed in bindgen, it should be safe to remove this compiler flag. +- cc.flag("/std:c11"); +- } +- +- cc.include(blst_headers_dir.clone()); +- cc.warnings(false); +- cc.file(c_src_dir.join("c_kzg_4844.c")); +- #[cfg(not(debug_assertions))] +- cc.define("NDEBUG", None); +- +- cc.try_compile("ckzg").expect("Failed to compile ckzg"); +- +- #[cfg(feature = "generate-bindings")] +- { +- let header_path = c_src_dir.join("c_kzg_4844.h"); +- let bindings_out_path = root_dir.join("bindings/rust/src/bindings/generated.rs"); +- make_bindings( +- header_path.to_str().expect("valid header path"), +- blst_headers_dir.to_str().expect("valid blst header path"), +- &bindings_out_path, +- ); +- } ++ let rust_kzg_target_dir = root_dir.join("../../target/release/"); + + // Finally, tell cargo this provides ckzg/ckzg_min +- println!("cargo:rustc-link-lib=ckzg"); ++ println!("cargo:rustc-link-search={}", rust_kzg_target_dir.display()); ++ println!("cargo:rustc-link-arg=-l:rust_kzg_arkworks3.a"); + } + + #[cfg(feature = "generate-bindings")] +-- +2.45.2.windows.1 + diff --git a/arkworks3/src/consts.rs b/arkworks3/src/consts.rs new file mode 100644 index 000000000..713e758b9 --- /dev/null +++ b/arkworks3/src/consts.rs @@ -0,0 +1,39 @@ +pub const SCALE_FACTOR: u64 = 5; + +pub const NUM_ROOTS: usize = 32; + +#[rustfmt::skip] +pub const SCALE2_ROOT_OF_UNITY: [[u64; 4]; 32] = [ + [0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000], + [0xffffffff00000000, 0x53bda402fffe5bfe, 0x3339d80809a1d805, 0x73eda753299d7d48], + [0x0001000000000000, 0xec03000276030000, 0x8d51ccce760304d0, 0x0000000000000000], + [0x7228fd3397743f7a, 0xb38b21c28713b700, 0x8c0625cd70d77ce2, 0x345766f603fa66e7], + [0x53ea61d87742bcce, 0x17beb312f20b6f76, 0xdd1c0af834cec32c, 0x20b1ce9140267af9], + [0x360c60997369df4e, 0xbf6e88fb4c38fb8a, 0xb4bcd40e22f55448, 0x50e0903a157988ba], + [0x8140d032f0a9ee53, 0x2d967f4be2f95155, 0x14a1e27164d8fdbd, 0x45af6345ec055e4d], + [0x5130c2c1660125be, 0x98d0caac87f5713c, 0xb7c68b4d7fdd60d0, 0x6898111413588742], + [0x4935bd2f817f694b, 0x0a0865a899e8deff, 0x6b368121ac0cf4ad, 0x4f9b4098e2e9f12e], + [0x4541b8ff2ee0434e, 0xd697168a3a6000fe, 0x39feec240d80689f, 0x095166525526a654], + [0x3c28d666a5c2d854, 0xea437f9626fc085e, 0x8f4de02c0f776af3, 0x325db5c3debf77a1], + [0x4a838b5d59cd79e5, 0x55ea6811be9c622d, 0x09f1ca610a08f166, 0x6d031f1b5c49c834], + [0xe206da11a5d36306, 0x0ad1347b378fbf96, 0xfc3e8acfe0f8245f, 0x564c0a11a0f704f4], + [0x6fdd00bfc78c8967, 0x146b58bc434906ac, 0x2ccddea2972e89ed, 0x485d512737b1da3d], + [0x034d2ff22a5ad9e1, 0xae4622f6a9152435, 0xdc86b01c0d477fa6, 0x56624634b500a166], + [0xfbd047e11279bb6e, 0xc8d5f51db3f32699, 0x483405417a0cbe39, 0x3291357ee558b50d], + [0xd7118f85cd96b8ad, 0x67a665ae1fcadc91, 0x88f39a78f1aeb578, 0x2155379d12180caa], + [0x08692405f3b70f10, 0xcd7f2bd6d0711b7d, 0x473a2eef772c33d6, 0x224262332d8acbf4], + [0x6f421a7d8ef674fb, 0xbb97a3bf30ce40fd, 0x652f717ae1c34bb0, 0x2d3056a530794f01], + [0x194e8c62ecb38d9d, 0xad8e16e84419c750, 0xdf625e80d0adef90, 0x520e587a724a6955], + [0xfece7e0e39898d4b, 0x2f69e02d265e09d9, 0xa57a6e07cb98de4a, 0x03e1c54bcb947035], + [0xcd3979122d3ea03a, 0x46b3105f04db5844, 0xc70d0874b0691d4e, 0x47c8b5817018af4f], + [0xc6e7a6ffb08e3363, 0xe08fec7c86389bee, 0xf2d38f10fbb8d1bb, 0x0abe6a5e5abcaa32], + [0x5616c57de0ec9eae, 0xc631ffb2585a72db, 0x5121af06a3b51e3c, 0x73560252aa0655b2], + [0x92cf4deb77bd779c, 0x72cf6a8029b7d7bc, 0x6e0bcd91ee762730, 0x291cf6d68823e687], + [0xce32ef844e11a51e, 0xc0ba12bb3da64ca5, 0x0454dc1edc61a1a3, 0x019fe632fd328739], + [0x531a11a0d2d75182, 0x02c8118402867ddc, 0x116168bffbedc11d, 0x0a0a77a3b1980c0d], + [0xe2d0a7869f0319ed, 0xb94f1101b1d7a628, 0xece8ea224f31d25d, 0x23397a9300f8f98b], + [0xd7b688830a4f2089, 0x6558e9e3f6ac7b41, 0x99e276b571905a7d, 0x52dd465e2f094256], + [0x474650359d8e211b, 0x84d37b826214abc6, 0x8da40c1ef2bb4598, 0x0c83ea7744bf1bee], + [0x694341f608c9dd56, 0xed3a181fabb30adc, 0x1339a815da8b398f, 0x2c6d4e4511657e1e], + [0x63e7cb4906ffc93f, 0xf070bb00e28a193d, 0xad1715b02e5713b5, 0x4b5371495990693f], +]; diff --git a/arkworks3/src/das.rs b/arkworks3/src/das.rs new file mode 100644 index 000000000..9754cacad --- /dev/null +++ b/arkworks3/src/das.rs @@ -0,0 +1,87 @@ +use crate::kzg_proofs::FFTSettings; +use crate::kzg_types::ArkFr as BlstFr; +use kzg::{Fr, DAS}; +use std::cmp::Ordering; + +impl FFTSettings { + fn das_fft_extension_stride(&self, ab: &mut [BlstFr], stride: usize) { + match ab.len().cmp(&2_usize) { + Ordering::Less => {} + Ordering::Greater => { + let half = ab.len(); + let halfhalf = half / 2; + + for i in 0..halfhalf { + let tmp1 = ab[i].add(&ab[halfhalf + i]); + let tmp2 = ab[i].sub(&ab[halfhalf + i]); + ab[halfhalf + i] = tmp2.mul(&self.reverse_roots_of_unity[i * 2 * stride]); + ab[i] = tmp1; + } + + #[cfg(feature = "parallel")] + { + if ab.len() > 32 { + let (lo, hi) = ab.split_at_mut(halfhalf); + rayon::join( + || self.das_fft_extension_stride(hi, stride * 2), + || self.das_fft_extension_stride(lo, stride * 2), + ); + } else { + self.das_fft_extension_stride(&mut ab[..halfhalf], stride * 2); + self.das_fft_extension_stride(&mut ab[halfhalf..], stride * 2); + } + } + #[cfg(not(feature = "parallel"))] + { + self.das_fft_extension_stride(&mut ab[..halfhalf], stride * 2); + self.das_fft_extension_stride(&mut ab[halfhalf..], stride * 2); + } + for i in 0..halfhalf { + let x = ab[i]; + let y = ab[halfhalf + i]; + let y_times_root = y.mul(&self.expanded_roots_of_unity[(1 + 2 * i) * stride]); + ab[i] = x.add(&y_times_root); + ab[halfhalf + i] = x.sub(&y_times_root); + } + } + Ordering::Equal => { + let x = ab[0].add(&ab[1]); + let y = ab[0].sub(&ab[1]); + let tmp = y.mul(&self.expanded_roots_of_unity[stride]); + + ab[0] = x.add(&tmp); + ab[1] = x.sub(&tmp); + } + } + } +} + +impl DAS for FFTSettings { + fn das_fft_extension(&self, vals: &[BlstFr]) -> Result, String> { + if vals.is_empty() { + return Err(String::from("vals can not be empty")); + } + if !vals.len().is_power_of_two() { + return Err(String::from("vals lenght has to be power of 2")); + } + if vals.len() * 2 > self.max_width { + return Err(String::from( + "vals lenght * 2 has to equal or less than FFTSetings max width", + )); + } + + let mut vals = vals.to_vec(); + let stride = self.max_width / (vals.len() * 2); + + self.das_fft_extension_stride(&mut vals, stride); + + let invlen = BlstFr::from_u64(vals.len() as u64); + let invlen = invlen.inverse(); + + for val in &mut vals { + val.fr *= invlen.fr + } + + Ok(vals) + } +} diff --git a/arkworks3/src/eip_4844.rs b/arkworks3/src/eip_4844.rs new file mode 100644 index 000000000..fb8c62284 --- /dev/null +++ b/arkworks3/src/eip_4844.rs @@ -0,0 +1,425 @@ +extern crate alloc; + +use crate::kzg_proofs::{FFTSettings, KZGSettings}; +use crate::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; +use blst::{blst_fr, blst_p1, blst_p2}; +use kzg::common_utils::reverse_bit_order; +use kzg::eip_4844::{ + blob_to_kzg_commitment_rust, compute_blob_kzg_proof_rust, compute_kzg_proof_rust, + load_trusted_setup_rust, verify_blob_kzg_proof_batch_rust, verify_blob_kzg_proof_rust, + verify_kzg_proof_rust, Blob, Bytes32, Bytes48, CKZGSettings, KZGCommitment, KZGProof, + PrecomputationTableManager, BYTES_PER_FIELD_ELEMENT, BYTES_PER_G1, BYTES_PER_G2, C_KZG_RET, + C_KZG_RET_BADARGS, C_KZG_RET_OK, FIELD_ELEMENTS_PER_BLOB, TRUSTED_SETUP_NUM_G1_POINTS, + TRUSTED_SETUP_NUM_G2_POINTS, +}; +use kzg::{cfg_into_iter, Fr, G1}; +use std::ptr::null_mut; + +#[cfg(feature = "std")] +use libc::FILE; +#[cfg(feature = "std")] +use std::fs::File; +#[cfg(feature = "std")] +use std::io::Read; + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +#[cfg(feature = "std")] +use kzg::eip_4844::load_trusted_setup_string; + +static mut PRECOMPUTATION_TABLES: PrecomputationTableManager = + PrecomputationTableManager::new(); + +#[cfg(feature = "std")] +pub fn load_trusted_setup_filename_rust(filepath: &str) -> Result { + let mut file = File::open(filepath).map_err(|_| "Unable to open file".to_string())?; + let mut contents = String::new(); + file.read_to_string(&mut contents) + .map_err(|_| "Unable to read file".to_string())?; + + let (g1_bytes, g2_bytes) = load_trusted_setup_string(&contents)?; + load_trusted_setup_rust(g1_bytes.as_slice(), g2_bytes.as_slice()) +} + +fn fft_settings_to_rust(c_settings: *const CKZGSettings) -> Result { + let settings = unsafe { &*c_settings }; + let roots_of_unity = unsafe { + core::slice::from_raw_parts(settings.roots_of_unity, settings.max_width as usize) + .iter() + .map(|r| ArkFr::from_blst_fr(*r)) + .collect::>() + }; + let mut expanded_roots_of_unity = roots_of_unity.clone(); + reverse_bit_order(&mut expanded_roots_of_unity)?; + expanded_roots_of_unity.push(ArkFr::one()); + let mut reverse_roots_of_unity = expanded_roots_of_unity.clone(); + reverse_roots_of_unity.reverse(); + + let mut first_root = expanded_roots_of_unity[1]; + let first_root_arr = [first_root; 1]; + first_root = first_root_arr[0]; + + Ok(FFTSettings { + max_width: settings.max_width as usize, + root_of_unity: first_root, + expanded_roots_of_unity, + reverse_roots_of_unity, + roots_of_unity, + }) +} + +fn kzg_settings_to_rust(c_settings: &CKZGSettings) -> Result { + let secret_g1 = unsafe { + core::slice::from_raw_parts(c_settings.g1_values, TRUSTED_SETUP_NUM_G1_POINTS) + .iter() + .map(|r| ArkG1::from_blst_p1(*r)) + .collect::>() + }; + let secret_g2 = unsafe { + core::slice::from_raw_parts(c_settings.g2_values, TRUSTED_SETUP_NUM_G2_POINTS) + .iter() + .map(|r| ArkG2::from_blst_p2(*r)) + .collect::>() + }; + Ok(KZGSettings { + fs: fft_settings_to_rust(c_settings)?, + secret_g1, + secret_g2, + // TODO: + precomputation: None, + }) +} + +fn kzg_settings_to_c(rust_settings: &KZGSettings) -> CKZGSettings { + let g1_val = rust_settings + .secret_g1 + .iter() + .map(|r| r.to_blst_p1()) + .collect::>(); + let g1_val = Box::new(g1_val); + let g2_val = rust_settings + .secret_g2 + .iter() + .map(|r| r.to_blst_p2()) + .collect::>(); + let x = g2_val.into_boxed_slice(); + let stat_ref = Box::leak(x); + let v = Box::into_raw(g1_val); + + let roots_of_unity = Box::new( + rust_settings + .fs + .roots_of_unity + .iter() + .map(|r| r.to_blst_fr()) + .collect::>(), + ); + + CKZGSettings { + max_width: rust_settings.fs.max_width as u64, + roots_of_unity: unsafe { (*Box::into_raw(roots_of_unity)).as_mut_ptr() }, + g1_values: unsafe { (*v).as_mut_ptr() }, + g2_values: stat_ref.as_mut_ptr(), + } +} + +unsafe fn deserialize_blob(blob: *const Blob) -> Result, C_KZG_RET> { + (*blob) + .bytes + .chunks(BYTES_PER_FIELD_ELEMENT) + .map(|chunk| { + let mut bytes = [0u8; BYTES_PER_FIELD_ELEMENT]; + bytes.copy_from_slice(chunk); + if let Ok(result) = ArkFr::from_bytes(&bytes) { + Ok(result) + } else { + Err(C_KZG_RET_BADARGS) + } + }) + .collect::, C_KZG_RET>>() +} + +macro_rules! handle_ckzg_badargs { + ($x: expr) => { + match $x { + Ok(value) => value, + Err(_) => return C_KZG_RET_BADARGS, + } + }; +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn blob_to_kzg_commitment( + out: *mut KZGCommitment, + blob: *const Blob, + s: &CKZGSettings, +) -> C_KZG_RET { + if TRUSTED_SETUP_NUM_G1_POINTS == 0 { + // FIXME: load_trusted_setup should set this value, but if not, it fails + TRUSTED_SETUP_NUM_G1_POINTS = FIELD_ELEMENTS_PER_BLOB + }; + + let deserialized_blob = handle_ckzg_badargs!(deserialize_blob(blob)); + let settings = handle_ckzg_badargs!(kzg_settings_to_rust(s)); + let tmp = handle_ckzg_badargs!(blob_to_kzg_commitment_rust(&deserialized_blob, &settings)); + + (*out).bytes = tmp.to_bytes(); + C_KZG_RET_OK +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn load_trusted_setup( + out: *mut CKZGSettings, + g1_bytes: *const u8, + n1: usize, + g2_bytes: *const u8, + n2: usize, +) -> C_KZG_RET { + let g1_bytes = core::slice::from_raw_parts(g1_bytes, n1 * BYTES_PER_G1); + let g2_bytes = core::slice::from_raw_parts(g2_bytes, n2 * BYTES_PER_G2); + TRUSTED_SETUP_NUM_G1_POINTS = g1_bytes.len() / BYTES_PER_G1; + let mut settings = handle_ckzg_badargs!(load_trusted_setup_rust(g1_bytes, g2_bytes)); + + let c_settings = kzg_settings_to_c(&settings); + + PRECOMPUTATION_TABLES.save_precomputation(settings.precomputation.take(), &c_settings); + + *out = c_settings; + + C_KZG_RET_OK +} + +/// # Safety +#[cfg(feature = "std")] +#[no_mangle] +pub unsafe extern "C" fn load_trusted_setup_file( + out: *mut CKZGSettings, + in_: *mut FILE, +) -> C_KZG_RET { + let mut buf = vec![0u8; 1024 * 1024]; + let len: usize = libc::fread(buf.as_mut_ptr() as *mut libc::c_void, 1, buf.len(), in_); + let s = handle_ckzg_badargs!(String::from_utf8(buf[..len].to_vec())); + let (g1_bytes, g2_bytes) = handle_ckzg_badargs!(load_trusted_setup_string(&s)); + TRUSTED_SETUP_NUM_G1_POINTS = g1_bytes.len() / BYTES_PER_G1; + if TRUSTED_SETUP_NUM_G1_POINTS != FIELD_ELEMENTS_PER_BLOB { + // Helps pass the Java test "shouldThrowExceptionOnIncorrectTrustedSetupFromFile", + // as well as 5 others that pass only if this one passes (likely because Java doesn't + // deallocate its KZGSettings pointer when no exception is thrown). + return C_KZG_RET_BADARGS; + } + let mut settings = handle_ckzg_badargs!(load_trusted_setup_rust( + g1_bytes.as_slice(), + g2_bytes.as_slice() + )); + + let c_settings = kzg_settings_to_c(&settings); + + PRECOMPUTATION_TABLES.save_precomputation(settings.precomputation.take(), &c_settings); + + *out = c_settings; + + C_KZG_RET_OK +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn free_trusted_setup(s: *mut CKZGSettings) { + if s.is_null() { + return; + } + + PRECOMPUTATION_TABLES.remove_precomputation(&*s); + + let max_width = (*s).max_width as usize; + let roots = Box::from_raw(core::slice::from_raw_parts_mut( + (*s).roots_of_unity, + max_width, + )); + drop(roots); + (*s).roots_of_unity = null_mut(); + + let g1 = Box::from_raw(core::slice::from_raw_parts_mut( + (*s).g1_values, + TRUSTED_SETUP_NUM_G1_POINTS, + )); + drop(g1); + (*s).g1_values = null_mut(); + + let g2 = Box::from_raw(core::slice::from_raw_parts_mut( + (*s).g2_values, + TRUSTED_SETUP_NUM_G2_POINTS, + )); + drop(g2); + (*s).g2_values = null_mut(); + (*s).max_width = 0; +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn verify_kzg_proof( + ok: *mut bool, + commitment_bytes: *const Bytes48, + z_bytes: *const Bytes32, + y_bytes: *const Bytes32, + proof_bytes: *const Bytes48, + s: &CKZGSettings, +) -> C_KZG_RET { + let frz = handle_ckzg_badargs!(ArkFr::from_bytes(&(*z_bytes).bytes)); + let fry = handle_ckzg_badargs!(ArkFr::from_bytes(&(*y_bytes).bytes)); + let g1commitment = handle_ckzg_badargs!(ArkG1::from_bytes(&(*commitment_bytes).bytes)); + let g1proof = handle_ckzg_badargs!(ArkG1::from_bytes(&(*proof_bytes).bytes)); + + let settings = handle_ckzg_badargs!(kzg_settings_to_rust(s)); + + let result = handle_ckzg_badargs!(verify_kzg_proof_rust( + &g1commitment, + &frz, + &fry, + &g1proof, + &settings + )); + + *ok = result; + C_KZG_RET_OK +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn verify_blob_kzg_proof( + ok: *mut bool, + blob: *const Blob, + commitment_bytes: *const Bytes48, + proof_bytes: *const Bytes48, + s: &CKZGSettings, +) -> C_KZG_RET { + let deserialized_blob = handle_ckzg_badargs!(deserialize_blob(blob)); + + let commitment_g1 = handle_ckzg_badargs!(ArkG1::from_bytes(&(*commitment_bytes).bytes)); + let proof_g1 = handle_ckzg_badargs!(ArkG1::from_bytes(&(*proof_bytes).bytes)); + + let settings = handle_ckzg_badargs!(kzg_settings_to_rust(s)); + + let result = handle_ckzg_badargs!(verify_blob_kzg_proof_rust( + &deserialized_blob, + &commitment_g1, + &proof_g1, + &settings, + )); + + *ok = result; + C_KZG_RET_OK +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn verify_blob_kzg_proof_batch( + ok: *mut bool, + blobs: *const Blob, + commitments_bytes: *const Bytes48, + proofs_bytes: *const Bytes48, + n: usize, + s: &CKZGSettings, +) -> C_KZG_RET { + let raw_blobs = core::slice::from_raw_parts(blobs, n); + let raw_commitments = core::slice::from_raw_parts(commitments_bytes, n); + let raw_proofs = core::slice::from_raw_parts(proofs_bytes, n); + + let deserialized_blobs: Result>, C_KZG_RET> = cfg_into_iter!(raw_blobs) + .map(|raw_blob| deserialize_blob(raw_blob).map_err(|_| C_KZG_RET_BADARGS)) + .collect(); + + let commitments_g1: Result, C_KZG_RET> = cfg_into_iter!(raw_commitments) + .map(|raw_commitment| { + ArkG1::from_bytes(&raw_commitment.bytes).map_err(|_| C_KZG_RET_BADARGS) + }) + .collect(); + + let proofs_g1: Result, C_KZG_RET> = cfg_into_iter!(raw_proofs) + .map(|raw_proof| ArkG1::from_bytes(&raw_proof.bytes).map_err(|_| C_KZG_RET_BADARGS)) + .collect(); + + if let (Ok(blobs), Ok(commitments), Ok(proofs)) = + (deserialized_blobs, commitments_g1, proofs_g1) + { + let settings = match kzg_settings_to_rust(s) { + Ok(value) => value, + Err(_) => return C_KZG_RET_BADARGS, + }; + + let result = + verify_blob_kzg_proof_batch_rust(blobs.as_slice(), &commitments, &proofs, &settings); + + if let Ok(result) = result { + *ok = result; + C_KZG_RET_OK + } else { + C_KZG_RET_BADARGS + } + } else { + *ok = false; + C_KZG_RET_BADARGS + } +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn compute_blob_kzg_proof( + out: *mut KZGProof, + blob: *const Blob, + commitment_bytes: *const Bytes48, + s: &CKZGSettings, +) -> C_KZG_RET { + let deserialized_blob = match deserialize_blob(blob) { + Ok(value) => value, + Err(err) => return err, + }; + + let commitment_g1 = handle_ckzg_badargs!(ArkG1::from_bytes(&(*commitment_bytes).bytes)); + let settings = handle_ckzg_badargs!(kzg_settings_to_rust(s)); + let proof = handle_ckzg_badargs!(compute_blob_kzg_proof_rust( + &deserialized_blob, + &commitment_g1, + &settings + )); + + (*out).bytes = proof.to_bytes(); + C_KZG_RET_OK +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn compute_kzg_proof( + proof_out: *mut KZGProof, + y_out: *mut Bytes32, + blob: *const Blob, + z_bytes: *const Bytes32, + s: &CKZGSettings, +) -> C_KZG_RET { + let deserialized_blob = match deserialize_blob(blob) { + Ok(value) => value, + Err(err) => return err, + }; + + let frz = match ArkFr::from_bytes(&(*z_bytes).bytes) { + Ok(value) => value, + Err(_) => return C_KZG_RET_BADARGS, + }; + + let settings = match kzg_settings_to_rust(s) { + Ok(value) => value, + Err(_) => return C_KZG_RET_BADARGS, + }; + + let (proof_out_tmp, fry_tmp) = match compute_kzg_proof_rust(&deserialized_blob, &frz, &settings) + { + Ok(value) => value, + Err(_) => return C_KZG_RET_BADARGS, + }; + + (*proof_out).bytes = proof_out_tmp.to_bytes(); + (*y_out).bytes = fry_tmp.to_bytes(); + C_KZG_RET_OK +} diff --git a/arkworks3/src/fft.rs b/arkworks3/src/fft.rs new file mode 100644 index 000000000..0ce1a9a23 --- /dev/null +++ b/arkworks3/src/fft.rs @@ -0,0 +1,107 @@ +use crate::kzg_proofs::FFTSettings; +use crate::kzg_types::ArkFr as BlstFr; +use kzg::{FFTFr, Fr as FFr}; + +impl FFTFr for FFTSettings { + fn fft_fr(&self, data: &[BlstFr], inverse: bool) -> Result, String> { + if data.len() > self.max_width { + return Err(String::from("data length is longer than allowed max width")); + } + if !data.len().is_power_of_two() { + return Err(String::from("data length is not power of 2")); + } + + let stride = self.max_width / data.len(); + let mut ret = vec![BlstFr::default(); data.len()]; + + let roots = if inverse { + &self.reverse_roots_of_unity + } else { + &self.expanded_roots_of_unity + }; + + fft_fr_fast(&mut ret, data, 1, roots, stride); + + if inverse { + let inv_fr_len = BlstFr::from_u64(data.len() as u64).inverse(); + ret[..data.len()] + .iter_mut() + .for_each(|f| *f = BlstFr::mul(f, &inv_fr_len)); + } + + Ok(ret) + } +} + +pub fn fft_fr_fast( + ret: &mut [BlstFr], + data: &[BlstFr], + stride: usize, + roots: &[BlstFr], + roots_stride: usize, +) { + let half: usize = ret.len() / 2; + if half > 0 { + #[cfg(not(feature = "parallel"))] + { + fft_fr_fast(&mut ret[..half], data, stride * 2, roots, roots_stride * 2); + fft_fr_fast( + &mut ret[half..], + &data[stride..], + stride * 2, + roots, + roots_stride * 2, + ); + } + + #[cfg(feature = "parallel")] + { + if half > 256 { + let (lo, hi) = ret.split_at_mut(half); + rayon::join( + || fft_fr_fast(lo, data, stride * 2, roots, roots_stride * 2), + || fft_fr_fast(hi, &data[stride..], stride * 2, roots, roots_stride * 2), + ); + } else { + fft_fr_fast(&mut ret[..half], data, stride * 2, roots, roots_stride * 2); + fft_fr_fast( + &mut ret[half..], + &data[stride..], + stride * 2, + roots, + roots_stride * 2, + ); + } + } + + for i in 0..half { + let y_times_root = ret[i + half].mul(&roots[i * roots_stride]); + ret[i + half] = ret[i].sub(&y_times_root); + ret[i] = ret[i].add(&y_times_root); + } + } else { + ret[0] = data[0]; + } +} + +pub fn fft_fr_slow( + ret: &mut [BlstFr], + data: &[BlstFr], + stride: usize, + roots: &[BlstFr], + roots_stride: usize, +) { + let mut v; + let mut jv; + let mut r; + + for i in 0..data.len() { + ret[i] = data[0].mul(&roots[0]); + for j in 1..data.len() { + jv = data[j * stride]; + r = roots[((i * j) % data.len()) * roots_stride]; + v = jv.mul(&r); + ret[i] = ret[i].add(&v); + } + } +} diff --git a/arkworks3/src/fft_g1.rs b/arkworks3/src/fft_g1.rs new file mode 100644 index 000000000..0292de7a6 --- /dev/null +++ b/arkworks3/src/fft_g1.rs @@ -0,0 +1,229 @@ +use crate::kzg_proofs::FFTSettings; +use crate::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine}; + +use kzg::cfg_into_iter; +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +use ark_ec::ProjectiveCurve; +use ark_ff::PrimeField; +use kzg::msm::precompute::PrecomputationTable; +use kzg::{Fr as KzgFr, G1Mul}; +use kzg::{FFTG1, G1}; +use std::ops::MulAssign; + +extern crate alloc; + +#[allow(unused_variables)] +pub fn g1_linear_combination( + out: &mut ArkG1, + points: &[ArkG1], + scalars: &[ArkFr], + len: usize, + precomputation: Option<&PrecomputationTable>, +) { + #[cfg(feature = "sppark")] + { + use ark_bls12_381::{Fr, G1Affine}; + use ark_ec::msm::VariableBaseMSM; + use ark_ff::BigInteger256; + use kzg::{G1Mul, G1}; + + if len < 8 { + *out = ArkG1::default(); + for i in 0..len { + let tmp = points[i].mul(&scalars[i]); + out.add_or_dbl_assign(&tmp); + } + + return; + } + + let scalars = + unsafe { alloc::slice::from_raw_parts(scalars.as_ptr() as *const BigInteger256, len) }; + + let point = if let Some(precomputation) = precomputation { + rust_kzg_arkworks3_sppark::multi_scalar_mult_prepared::( + precomputation.table, + scalars, + ) + } else { + let affines = kzg::msm::msm_impls::batch_convert::(&points); + let affines = + unsafe { alloc::slice::from_raw_parts(affines.as_ptr() as *const G1Affine, len) }; + rust_kzg_arkworks3_sppark::multi_scalar_mult::(&affines[0..len], scalars) + }; + + *out = ArkG1(point); + } + + #[cfg(feature = "sppark_wlc")] + { + use ark_bls12_381::{Fr, G1Affine}; + use ark_ff::BigInteger256; + use kzg::{G1Mul, G1}; + use rust_kzg_arkworks3_sppark_wlc::MultiScalarMultContext; + + if len < 8 { + *out = ArkG1::default(); + for i in 0..len { + let tmp = points[i].mul(&scalars[i]); + out.add_or_dbl_assign(&tmp); + } + + return; + } + + let ark_scalars = cfg_into_iter!(&scalars[0..len]) + .map(|scalar| scalar.fr.into_repr()) + .collect::>(); + + let mut context = if let Some(context) = precomputation { + let table = context.table; + MultiScalarMultContext { context: table } + } else { + let affines = kzg::msm::msm_impls::batch_convert::(&points); + let affines = + unsafe { alloc::slice::from_raw_parts(affines.as_ptr() as *const G1Affine, len) }; + + rust_kzg_arkworks3_sppark_wlc::multi_scalar_mult_init(affines) + }; + + let msm_results = rust_kzg_arkworks3_sppark_wlc::multi_scalar_mult::( + &mut context, + len, + unsafe { std::mem::transmute::<&[_], &[BigInteger256]>(&ark_scalars) }, + ); + + *out = ArkG1(msm_results[0]); + + if precomputation.is_none() { + rust_kzg_arkworks3_sppark_wlc::multi_scalar_mult_free(&mut context); + } + } + + #[cfg(not(any(feature = "sppark", feature = "sppark_wlc")))] + { + use ark_ec::msm::VariableBaseMSM; + let ark_points = cfg_into_iter!(&points[0..len]) + .map(|point| point.0.into_affine()) + .collect::>(); + let ark_scalars = cfg_into_iter!(&scalars[0..len]) + .map(|scalar| scalar.fr.into_repr()) + .collect::>(); + *out = ArkG1(VariableBaseMSM::multi_scalar_mul( + ark_points.as_slice(), + ark_scalars.as_slice(), + )); + } +} + +pub fn make_data(data: usize) -> Vec { + let mut vec = Vec::new(); + if data != 0 { + vec.push(ArkG1::generator()); + for i in 1..data as u64 { + let res = vec[(i - 1) as usize].add_or_dbl(&ArkG1::generator()); + vec.push(res); + } + } + vec +} + +impl FFTG1 for FFTSettings { + fn fft_g1(&self, data: &[ArkG1], inverse: bool) -> Result, String> { + if data.len() > self.max_width { + return Err(String::from("data length is longer than allowed max width")); + } + if !data.len().is_power_of_two() { + return Err(String::from("data length is not power of 2")); + } + + let stride: usize = self.max_width / data.len(); + let mut ret = vec![ArkG1::default(); data.len()]; + + let roots = if inverse { + &self.reverse_roots_of_unity + } else { + &self.expanded_roots_of_unity + }; + + fft_g1_fast(&mut ret, data, 1, roots, stride, 1); + + if inverse { + let inv_fr_len = ArkFr::from_u64(data.len() as u64).inverse(); + ret[..data.len()] + .iter_mut() + .for_each(|f| f.0.mul_assign(inv_fr_len.fr)); + } + Ok(ret) + } +} + +pub fn fft_g1_slow( + ret: &mut [ArkG1], + data: &[ArkG1], + stride: usize, + roots: &[ArkFr], + roots_stride: usize, + _width: usize, +) { + for i in 0..data.len() { + ret[i] = data[0].mul(&roots[0]); + for j in 1..data.len() { + let jv = data[j * stride]; + let r = roots[((i * j) % data.len()) * roots_stride]; + let v = jv.mul(&r); + ret[i] = ret[i].add_or_dbl(&v); + } + } +} + +pub fn fft_g1_fast( + ret: &mut [ArkG1], + data: &[ArkG1], + stride: usize, + roots: &[ArkFr], + roots_stride: usize, + _width: usize, +) { + let half = ret.len() / 2; + if half > 0 { + #[cfg(feature = "parallel")] + { + let (lo, hi) = ret.split_at_mut(half); + rayon::join( + || fft_g1_fast(hi, &data[stride..], stride * 2, roots, roots_stride * 2, 1), + || fft_g1_fast(lo, data, stride * 2, roots, roots_stride * 2, 1), + ); + } + + #[cfg(not(feature = "parallel"))] + { + fft_g1_fast( + &mut ret[..half], + data, + stride * 2, + roots, + roots_stride * 2, + 1, + ); + fft_g1_fast( + &mut ret[half..], + &data[stride..], + stride * 2, + roots, + roots_stride * 2, + 1, + ); + } + + for i in 0..half { + let y_times_root = ret[i + half].mul(&roots[i * roots_stride]); + ret[i + half] = ret[i].sub(&y_times_root); + ret[i] = ret[i].add_or_dbl(&y_times_root); + } + } else { + ret[0] = data[0]; + } +} diff --git a/arkworks3/src/fk20_proofs.rs b/arkworks3/src/fk20_proofs.rs new file mode 100644 index 000000000..5ea09a8ef --- /dev/null +++ b/arkworks3/src/fk20_proofs.rs @@ -0,0 +1,325 @@ +use crate::kzg_proofs::{FFTSettings, KZGSettings}; +use crate::kzg_types::{ArkFp, ArkFr as BlstFr, ArkG1, ArkG1Affine, ArkG2}; +use crate::utils::PolyData; +use kzg::common_utils::reverse_bit_order; +use kzg::{FFTFr, FK20MultiSettings, FK20SingleSettings, Fr, G1Mul, Poly, FFTG1, G1}; + +#[cfg(feature = "parallel")] +use rayon::prelude::*; + +#[repr(C)] +#[derive(Debug, Clone, Default)] +pub struct KzgFK20SingleSettings { + pub ks: KZGSettings, + pub x_ext_fft: Vec, + pub x_ext_fft_len: usize, +} + +#[repr(C)] +#[derive(Debug, Clone, Default)] +pub struct KzgFK20MultiSettings { + pub ks: KZGSettings, + pub chunk_len: usize, + pub x_ext_fft_files: Vec>, + pub length: usize, +} + +impl + FK20SingleSettings + for KzgFK20SingleSettings +{ + fn new(ks: &KZGSettings, n2: usize) -> Result { + let n = n2 / 2; + + if n2 > ks.fs.max_width { + return Err(String::from( + "n2 must be equal or less than kzg settings max width", + )); + } + if !n2.is_power_of_two() { + return Err(String::from("n2 must be power of 2")); + } + if n2 < 2 { + return Err(String::from("n2 must be equal or greater than 2")); + } + + let mut x = Vec::new(); + for i in 0..(n - 1) { + x.push(ks.secret_g1[n - 2 - i]) + } + x.push(ArkG1::identity()); + + let new_ks = KZGSettings { + fs: ks.fs.clone(), + ..KZGSettings::default() + }; + + Ok(KzgFK20SingleSettings { + ks: new_ks, + x_ext_fft: toeplitz_part_1(&x, &ks.fs).unwrap(), + x_ext_fft_len: n2, + }) + } + + fn data_availability(&self, p: &PolyData) -> Result, String> { + let n = p.len(); + let n2 = n * 2; + + if n2 > self.ks.fs.max_width { + return Err(String::from( + "n2 must be equal or less than kzg settings max width", + )); + } + if !n.is_power_of_two() { + return Err(String::from("n2 must be power of 2")); + } + + let mut out = fk20_single_da_opt(p, self).unwrap(); + reverse_bit_order(&mut out)?; + Ok(out) + } + + fn data_availability_optimized(&self, p: &PolyData) -> Result, String> { + fk20_single_da_opt(p, self) + } +} + +impl FK20MultiSettings + for KzgFK20MultiSettings +{ + fn new(ks: &KZGSettings, n2: usize, chunk_len: usize) -> Result { + if n2 > ks.fs.max_width { + return Err(String::from( + "n2 must be equal or less than kzg settings max width", + )); + } + if !n2.is_power_of_two() { + return Err(String::from("n2 must be power of 2")); + } + if n2 < 2 { + return Err(String::from("n2 must be equal or greater than 2")); + } + if chunk_len > n2 / 2 { + return Err(String::from("chunk_len must be equal or less than n2/2")); + } + if !chunk_len.is_power_of_two() { + return Err(String::from("chunk_len must be power of 2")); + } + if chunk_len == 0 { + return Err(String::from("chunk_len must be greater than 0")); + } + + let n = n2 / 2; + let k = n / chunk_len; + + let mut x_ext_fft_files = Vec::new(); + + for offset in 0..chunk_len { + let mut x = vec![ArkG1::default(); k]; + let start = if n >= chunk_len + 1 + offset { + n - chunk_len - 1 - offset + } else { + 0 + }; + let mut j = start; + for i in x.iter_mut().take(k - 1) { + i.0 = ks.secret_g1[j].0; + if j >= chunk_len { + j -= chunk_len; + } else { + j = 0; + } + } + x[k - 1] = ArkG1::identity(); + x_ext_fft_files.push(toeplitz_part_1(&x, &ks.fs).unwrap()); + } + + let new_ks = KZGSettings { + fs: ks.fs.clone(), + ..KZGSettings::default() + }; + + Ok(KzgFK20MultiSettings { + ks: new_ks, + x_ext_fft_files, + chunk_len, + length: n, //unsure if this is right + }) + } + + fn data_availability(&self, p: &PolyData) -> Result, String> { + let n = p.len(); + let n2 = n * 2; + + if n2 > self.ks.fs.max_width { + return Err(String::from( + "n2 must be equal or less than kzg settings max width", + )); + } + if !n.is_power_of_two() { + return Err(String::from("n2 must be power of 2")); + } + + let mut out = fk20_multi_da_opt(p, self).unwrap(); + reverse_bit_order(&mut out)?; + Ok(out) + } + + fn data_availability_optimized(&self, p: &PolyData) -> Result, String> { + fk20_multi_da_opt(p, self) + } +} + +fn fk20_single_da_opt(p: &PolyData, fk: &KzgFK20SingleSettings) -> Result, String> { + let n = p.len(); + let n2 = n * 2; + + if n2 > fk.ks.fs.max_width { + return Err(String::from( + "n2 must be equal or less than kzg settings max width", + )); + } + if !n.is_power_of_two() { + return Err(String::from("n2 must be power of 2")); + } + + let outlen = 2 * p.len(); + let toeplitz_coeffs = toeplitz_coeffs_step(p, outlen).unwrap(); + let h_ext_fft = toeplitz_part_2(&toeplitz_coeffs, &fk.x_ext_fft, &fk.ks.fs).unwrap(); + let h = toeplitz_part_3(&h_ext_fft, &fk.ks.fs).unwrap(); + + fk.ks.fs.fft_g1(&h, false) +} + +fn fk20_multi_da_opt(p: &PolyData, fk: &KzgFK20MultiSettings) -> Result, String> { + let n = p.len(); + let n2 = n * 2; + + if n2 > fk.ks.fs.max_width { + return Err(String::from( + "n2 must be equal or less than kzg settings max width", + )); + } + if !n.is_power_of_two() { + return Err(String::from("n2 must be power of 2")); + } + + let n = n2 / 2; + let k = n / fk.chunk_len; + let k2 = k * 2; + + let mut h_ext_fft = Vec::new(); + for _i in 0..k2 { + h_ext_fft.push(ArkG1::identity()); + } + + let mut toeplitz_coeffs = PolyData::new(n2 / fk.chunk_len); + for i in 0..fk.chunk_len { + toeplitz_coeffs = + toeplitz_coeffs_stride(p, i, fk.chunk_len, toeplitz_coeffs.len()).unwrap(); + let h_ext_fft_file = + toeplitz_part_2(&toeplitz_coeffs, &fk.x_ext_fft_files[i], &fk.ks.fs).unwrap(); + for j in 0..k2 { + h_ext_fft[j] = h_ext_fft[j].add_or_dbl(&h_ext_fft_file[j]); + } + } + + // Calculate `h` + let mut h = toeplitz_part_3(&h_ext_fft, &fk.ks.fs).unwrap(); + + // Overwrite the second half of `h` with zero + for i in h.iter_mut().take(k2).skip(k) { + i.0 = ArkG1::identity().0; + } + + fk.ks.fs.fft_g1(&h, false) +} + +fn toeplitz_coeffs_step(p: &PolyData, outlen: usize) -> Result { + toeplitz_coeffs_stride(p, 0, 1, outlen) +} + +fn toeplitz_coeffs_stride( + poly: &PolyData, + offset: usize, + stride: usize, + outlen: usize, +) -> Result { + let n = poly.len(); + + if stride == 0 { + return Err(String::from("stride must be greater than 0")); + } + + let k = n / stride; + let k2 = k * 2; + + if outlen < k2 { + return Err(String::from("outlen must be equal or greater than k2")); + } + + let mut out = PolyData::new(outlen); + out.set_coeff_at(0, &poly.coeffs[n - 1 - offset]); + let mut i = 1; + while i <= (k + 1) && i < k2 { + out.set_coeff_at(i, &BlstFr::zero()); + i += 1; + } + let mut j = 2 * stride - offset - 1; + for i in (k + 2)..k2 { + out.set_coeff_at(i, &poly.coeffs[j]); + j += stride; + } + Ok(out) +} + +fn toeplitz_part_1(x: &[ArkG1], fs: &FFTSettings) -> Result, String> { + let n = x.len(); + let n2 = n * 2; + + let mut x_ext = Vec::new(); + for i in x.iter().take(n) { + x_ext.push(*i); + } + for _i in n..n2 { + x_ext.push(ArkG1::identity()); + } + fs.fft_g1(&x_ext, false) +} + +fn toeplitz_part_2( + toeplitz_coeffs: &PolyData, + x_ext_fft: &[ArkG1], + fs: &FFTSettings, +) -> Result, String> { + let toeplitz_coeffs_fft = fs.fft_fr(&toeplitz_coeffs.coeffs, false).unwrap(); + + #[cfg(feature = "parallel")] + { + let out: Vec<_> = (0..toeplitz_coeffs.len()) + .into_par_iter() + .map(|i| x_ext_fft[i].mul(&toeplitz_coeffs_fft[i])) + .collect(); + Ok(out) + } + + #[cfg(not(feature = "parallel"))] + { + let mut out = Vec::new(); + for i in 0..toeplitz_coeffs.len() { + out.push(x_ext_fft[i].mul(&toeplitz_coeffs_fft[i])); + } + Ok(out) + } +} + +fn toeplitz_part_3(h_ext_fft: &[ArkG1], fs: &FFTSettings) -> Result, String> { + let n = h_ext_fft.len() / 2; + let mut out = fs.fft_g1(h_ext_fft, true).unwrap(); + + // Zero the second half of h + for i in out.iter_mut().take(h_ext_fft.len()).skip(n) { + i.0 = ArkG1::identity().0; + } + Ok(out) +} diff --git a/arkworks3/src/kzg_proofs.rs b/arkworks3/src/kzg_proofs.rs new file mode 100644 index 000000000..5323fe202 --- /dev/null +++ b/arkworks3/src/kzg_proofs.rs @@ -0,0 +1,88 @@ +#![allow(non_camel_case_types)] + +extern crate alloc; +use super::utils::{blst_poly_into_pc_poly, PolyData}; +use crate::kzg_types::{ArkFp, ArkFr, ArkG1Affine}; +use crate::kzg_types::{ArkFr as BlstFr, ArkG1, ArkG2}; +use alloc::sync::Arc; +use ark_bls12_381::Bls12_381; +use ark_ec::{PairingEngine, ProjectiveCurve}; +use ark_poly::Polynomial; +use ark_std::{vec, One}; +use kzg::eip_4844::hash_to_bls_field; +use kzg::msm::precompute::PrecomputationTable; +use kzg::{Fr as FrTrait, G1, G2}; +use kzg::{G1Mul, G2Mul}; +use std::ops::Neg; + +#[derive(Debug, Clone)] +pub struct FFTSettings { + pub max_width: usize, + pub root_of_unity: BlstFr, + pub expanded_roots_of_unity: Vec, + pub reverse_roots_of_unity: Vec, + pub roots_of_unity: Vec, +} + +pub fn expand_root_of_unity(root: &BlstFr, width: usize) -> Result, String> { + let mut generated_powers = vec![BlstFr::one(), *root]; + + while !(generated_powers.last().unwrap().is_one()) { + if generated_powers.len() > width { + return Err(String::from("Root of unity multiplied for too long")); + } + + generated_powers.push(generated_powers.last().unwrap().mul(root)); + } + + if generated_powers.len() != width + 1 { + return Err(String::from("Root of unity has invalid scale")); + } + + Ok(generated_powers) +} + +#[derive(Debug, Clone, Default)] +pub struct KZGSettings { + pub fs: FFTSettings, + pub secret_g1: Vec, + pub secret_g2: Vec, + pub precomputation: Option>>, +} + +pub fn generate_trusted_setup(len: usize, secret: [u8; 32usize]) -> (Vec, Vec) { + let s = hash_to_bls_field::(&secret); + let mut s_pow = ArkFr::one(); + + let mut s1 = Vec::with_capacity(len); + let mut s2 = Vec::with_capacity(len); + + for _ in 0..len { + s1.push(ArkG1::generator().mul(&s_pow)); + s2.push(ArkG2::generator().mul(&s_pow)); + + s_pow = s_pow.mul(&s); + } + + (s1, s2) +} + +pub fn eval_poly(p: &PolyData, x: &BlstFr) -> BlstFr { + let poly = blst_poly_into_pc_poly(&p.coeffs); + BlstFr { + fr: poly.evaluate(&x.fr), + } +} + +pub fn pairings_verify(a1: &ArkG1, a2: &ArkG2, b1: &ArkG1, b2: &ArkG2) -> bool { + let ark_a1_neg = a1.0.neg().into_affine(); + let ark_b1 = b1.0.into_affine(); + let ark_a2 = a2.0.into_affine(); + let ark_b2 = b2.0.into_affine(); + + Bls12_381::product_of_pairings(&[ + (ark_a1_neg.into(), ark_a2.into()), + (ark_b1.into(), ark_b2.into()), + ]) + .is_one() +} diff --git a/arkworks3/src/kzg_types.rs b/arkworks3/src/kzg_types.rs new file mode 100644 index 000000000..06737f23f --- /dev/null +++ b/arkworks3/src/kzg_types.rs @@ -0,0 +1,1258 @@ +use crate::consts::SCALE2_ROOT_OF_UNITY; +use crate::fft_g1::g1_linear_combination; +use crate::kzg_proofs::{ + eval_poly, expand_root_of_unity, pairings_verify, FFTSettings as LFFTSettings, + KZGSettings as LKZGSettings, +}; +use crate::poly::{poly_fast_div, poly_inverse, poly_long_div, poly_mul_direct, poly_mul_fft}; +use crate::recover::{scale_poly, unscale_poly}; +use crate::utils::{ + blst_fp_into_pc_fq, blst_fr_into_pc_fr, blst_p1_into_pc_g1projective, + blst_p2_into_pc_g2projective, pc_fr_into_blst_fr, pc_g1projective_into_blst_p1, + pc_g2projective_into_blst_p2, PolyData, +}; +use crate::P2; +use ark_bls12_381::{g1, g2, Fr, G1Affine}; +use ark_ec::ModelParameters; +use ark_ec::{models::short_weierstrass_jacobian::GroupProjective, AffineCurve, ProjectiveCurve}; +use ark_ff::PrimeField; +use ark_ff::{biginteger::BigInteger256, BigInteger, Field}; +use ark_std::{One, Zero}; + +#[cfg(feature = "rand")] +use ark_std::UniformRand; + +use blst::{ + blst_fp, blst_fp2, blst_fr, blst_p1, blst_p1_affine, blst_p1_compress, blst_p1_from_affine, + blst_p1_in_g1, blst_p1_uncompress, blst_p2, blst_p2_affine, blst_p2_from_affine, + blst_p2_uncompress, BLST_ERROR, +}; +use kzg::common_utils::reverse_bit_order; +use kzg::eip_4844::{BYTES_PER_FIELD_ELEMENT, BYTES_PER_G1, BYTES_PER_G2}; +use kzg::msm::precompute::{precompute, PrecomputationTable}; +use kzg::{ + FFTFr, FFTSettings, FFTSettingsPoly, Fr as KzgFr, G1Affine as G1AffineTrait, G1Fp, G1GetFp, + G1LinComb, G1Mul, G1ProjAddAffine, G2Mul, KZGSettings, PairingVerify, Poly, Scalar256, G1, G2, +}; +use std::ops::{AddAssign, Neg, Sub}; + +extern crate alloc; +use alloc::sync::Arc; + +fn bytes_be_to_uint64(inp: &[u8]) -> u64 { + u64::from_be_bytes(inp.try_into().expect("Input wasn't 8 elements...")) +} + +const BLS12_381_MOD_256: [u64; 4] = [ + 0xffffffff00000001, + 0x53bda402fffe5bfe, + 0x3339d80809a1d805, + 0x73eda753299d7d48, +]; + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +pub struct ArkFr { + pub fr: Fr, +} + +impl ArkFr { + pub fn from_blst_fr(fr: blst_fr) -> Self { + Self { + fr: blst_fr_into_pc_fr(fr), + } + } + + pub fn to_blst_fr(&self) -> blst_fr { + pc_fr_into_blst_fr(self.fr) + } +} + +fn bigint_check_mod_256(a: &[u64; 4]) -> bool { + let (_, overflow) = a[0].overflowing_sub(BLS12_381_MOD_256[0]); + let (_, overflow) = a[1].overflowing_sub(BLS12_381_MOD_256[1] + overflow as u64); + let (_, overflow) = a[2].overflowing_sub(BLS12_381_MOD_256[2] + overflow as u64); + let (_, overflow) = a[3].overflowing_sub(BLS12_381_MOD_256[3] + overflow as u64); + overflow +} + +impl KzgFr for ArkFr { + fn null() -> Self { + Self { + fr: Fr::new(BigInteger256::new([u64::MAX; 4])), + } + } + + fn zero() -> Self { + // Self::from_u64(0) + Self { fr: Fr::zero() } + } + + fn one() -> Self { + // let one = Fr::one(); + // // assert_eq!(one.0.0, [0, 1, 1, 1], "must be eq"); + // Self { fr: one } + Self::from_u64(1) + } + + #[cfg(feature = "rand")] + fn rand() -> Self { + let mut rng = rand::thread_rng(); + Self { + fr: Fr::rand(&mut rng), + } + } + + fn from_bytes(bytes: &[u8]) -> Result { + bytes + .try_into() + .map_err(|_| { + format!( + "Invalid byte length. Expected {}, got {}", + BYTES_PER_FIELD_ELEMENT, + bytes.len() + ) + }) + .and_then(|bytes: &[u8; BYTES_PER_FIELD_ELEMENT]| { + let storage: [u64; 4] = [ + bytes_be_to_uint64(&bytes[24..32]), + bytes_be_to_uint64(&bytes[16..24]), + bytes_be_to_uint64(&bytes[8..16]), + bytes_be_to_uint64(&bytes[0..8]), + ]; + let big_int = BigInteger256::new(storage); + if !big_int.is_zero() && !bigint_check_mod_256(&big_int.0) { + return Err("Invalid scalar".to_string()); + } + Ok(Self { + fr: Fr::from(big_int), + }) + }) + } + + fn from_bytes_unchecked(bytes: &[u8]) -> Result { + bytes + .try_into() + .map_err(|_| { + format!( + "Invalid byte length. Expected {}, got {}", + BYTES_PER_FIELD_ELEMENT, + bytes.len() + ) + }) + .map(|bytes: &[u8; BYTES_PER_FIELD_ELEMENT]| Self { + fr: Fr::from_be_bytes_mod_order(bytes), + }) + } + + fn from_hex(hex: &str) -> Result { + let bytes = hex::decode(&hex[2..]).unwrap(); + Self::from_bytes(&bytes) + } + + fn from_u64_arr(u: &[u64; 4]) -> Self { + Self { + fr: Fr::from(BigInteger256::new(*u)), + } + } + + fn from_u64(val: u64) -> Self { + Self { fr: Fr::from(val) } + } + + fn to_bytes(&self) -> [u8; 32] { + let big_int_256: BigInteger256 = Fr::into(self.fr); + <[u8; 32]>::try_from(big_int_256.to_bytes_be()).unwrap() + } + + fn to_u64_arr(&self) -> [u64; 4] { + let b: BigInteger256 = Fr::into(self.fr); + b.0 + } + + fn is_one(&self) -> bool { + self.fr.is_one() + } + + fn is_zero(&self) -> bool { + self.fr.is_zero() + } + + fn is_null(&self) -> bool { + self.equals(&ArkFr::null()) + } + + fn sqr(&self) -> Self { + Self { + fr: self.fr.square(), + } + } + + fn mul(&self, b: &Self) -> Self { + Self { fr: self.fr * b.fr } + } + + fn add(&self, b: &Self) -> Self { + Self { fr: self.fr + b.fr } + } + + fn sub(&self, b: &Self) -> Self { + Self { fr: self.fr - b.fr } + } + + fn eucl_inverse(&self) -> Self { + // Inverse and eucl inverse work the same way + Self { + fr: self.fr.inverse().unwrap(), + } + } + + fn negate(&self) -> Self { + Self { fr: self.fr.neg() } + } + + fn inverse(&self) -> Self { + Self { + fr: self.fr.inverse().unwrap(), + } + } + + fn pow(&self, n: usize) -> Self { + Self { + fr: self.fr.pow([n as u64]), + } + } + + fn div(&self, b: &Self) -> Result { + let div = self.fr / b.fr; + if div.0 .0.is_empty() { + Ok(Self { fr: Fr::zero() }) + } else { + Ok(Self { fr: div }) + } + } + + fn equals(&self, b: &Self) -> bool { + self.fr == b.fr + } + + fn to_scalar(&self) -> Scalar256 { + Scalar256::from_u64(self.fr.0 .0) + } +} + +#[repr(C)] +#[derive(Debug, Default, PartialEq, Eq, Clone, Copy)] +pub struct ArkG1(pub GroupProjective); + +impl ArkG1 { + pub fn from_blst_p1(p1: blst_p1) -> Self { + Self(blst_p1_into_pc_g1projective(&p1)) + } + + pub fn to_blst_p1(&self) -> blst_p1 { + pc_g1projective_into_blst_p1(self.0) + } +} + +impl From for ArkG1 { + fn from(p1: blst_p1) -> Self { + Self(blst_p1_into_pc_g1projective(&p1)) + } +} + +impl G1 for ArkG1 { + fn identity() -> Self { + ArkG1::from_blst_p1(blst_p1 { + x: blst_fp { + l: [0, 0, 0, 0, 0, 0], + }, + y: blst_fp { + l: [0, 0, 0, 0, 0, 0], + }, + z: blst_fp { + l: [0, 0, 0, 0, 0, 0], + }, + }) + } + + fn generator() -> Self { + ArkG1::from_blst_p1(blst_p1 { + x: blst_fp { + l: [ + 0x5cb38790fd530c16, + 0x7817fc679976fff5, + 0x154f95c7143ba1c1, + 0xf0ae6acdf3d0e747, + 0xedce6ecc21dbf440, + 0x120177419e0bfb75, + ], + }, + y: blst_fp { + l: [ + 0xbaac93d50ce72271, + 0x8c22631a7918fd8e, + 0xdd595f13570725ce, + 0x51ac582950405194, + 0x0e1c8c3fad0059c0, + 0x0bbc3efc5008a26a, + ], + }, + z: blst_fp { + l: [ + 0x760900000002fffd, + 0xebf4000bc40c0002, + 0x5f48985753c758ba, + 0x77ce585370525745, + 0x5c071a97a256ec6d, + 0x15f65ec3fa80e493, + ], + }, + }) + } + + fn negative_generator() -> Self { + ArkG1::from_blst_p1(blst_p1 { + x: blst_fp { + l: [ + 0x5cb38790fd530c16, + 0x7817fc679976fff5, + 0x154f95c7143ba1c1, + 0xf0ae6acdf3d0e747, + 0xedce6ecc21dbf440, + 0x120177419e0bfb75, + ], + }, + y: blst_fp { + l: [ + 0xff526c2af318883a, + 0x92899ce4383b0270, + 0x89d7738d9fa9d055, + 0x12caf35ba344c12a, + 0x3cff1b76964b5317, + 0x0e44d2ede9774430, + ], + }, + z: blst_fp { + l: [ + 0x760900000002fffd, + 0xebf4000bc40c0002, + 0x5f48985753c758ba, + 0x77ce585370525745, + 0x5c071a97a256ec6d, + 0x15f65ec3fa80e493, + ], + }, + }) + } + + #[cfg(feature = "rand")] + fn rand() -> Self { + let mut rng = rand::thread_rng(); + Self(GroupProjective::rand(&mut rng)) + } + + #[allow(clippy::bind_instead_of_map)] + fn from_bytes(bytes: &[u8]) -> Result { + bytes + .try_into() + .map_err(|_| { + format!( + "Invalid byte length. Expected {}, got {}", + BYTES_PER_G1, + bytes.len() + ) + }) + .and_then(|bytes: &[u8; BYTES_PER_G1]| { + let mut blst_affine = blst_p1_affine::default(); + let result = unsafe { blst_p1_uncompress(&mut blst_affine, bytes.as_ptr()) }; + + if result != BLST_ERROR::BLST_SUCCESS { + return Err("Failed to deserialize G1".to_owned()); + } + + let mut blst_point = blst_p1::default(); + unsafe { blst_p1_from_affine(&mut blst_point, &blst_affine) }; + + Ok(ArkG1::from_blst_p1(blst_point)) + }) + } + + fn from_hex(hex: &str) -> Result { + let bytes = hex::decode(&hex[2..]).unwrap(); + Self::from_bytes(&bytes) + } + + fn to_bytes(&self) -> [u8; 48] { + let mut out = [0u8; BYTES_PER_G1]; + unsafe { + blst_p1_compress(out.as_mut_ptr(), &self.to_blst_p1()); + } + out + } + + fn add_or_dbl(&self, b: &Self) -> Self { + Self(self.0 + b.0) + } + + fn is_inf(&self) -> bool { + let temp = &self.0; + temp.z.is_zero() + } + + fn is_valid(&self) -> bool { + unsafe { blst_p1_in_g1(&self.to_blst_p1()) } + } + + fn dbl(&self) -> Self { + Self(self.0.double()) + } + + fn add(&self, b: &Self) -> Self { + Self(self.0 + b.0) + } + + fn sub(&self, b: &Self) -> Self { + Self(self.0.sub(&b.0)) + } + + fn equals(&self, b: &Self) -> bool { + self.0.eq(&b.0) + } + + fn zero() -> Self { + ArkG1::from_blst_p1(blst_p1 { + x: blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + y: blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + z: blst_fp { + l: [0, 0, 0, 0, 0, 0], + }, + }) + } + + fn add_or_dbl_assign(&mut self, b: &Self) { + self.0 += b.0; + } + + fn add_assign(&mut self, b: &Self) { + self.0.add_assign(b.0); + } + + fn dbl_assign(&mut self) { + self.0.double_in_place(); + } +} + +impl G1Mul for ArkG1 { + fn mul(&self, b: &ArkFr) -> Self { + Self(self.0.mul(b.to_u64_arr())) + } +} + +impl G1LinComb for ArkG1 { + fn g1_lincomb( + points: &[Self], + scalars: &[ArkFr], + len: usize, + precomputation: Option<&PrecomputationTable>, + ) -> Self { + let mut out = Self::default(); + g1_linear_combination(&mut out, points, scalars, len, precomputation); + out + } +} + +impl PairingVerify for ArkG1 { + fn verify(a1: &ArkG1, a2: &ArkG2, b1: &ArkG1, b2: &ArkG2) -> bool { + pairings_verify(a1, a2, b1, b2) + } +} + +#[repr(C)] +#[derive(Debug, Default, PartialEq, Eq, Clone)] +pub struct ArkG2(pub GroupProjective); + +impl ArkG2 { + pub fn from_blst_p2(p2: blst::blst_p2) -> Self { + Self(blst_p2_into_pc_g2projective(&p2)) + } + + pub fn to_blst_p2(&self) -> blst::blst_p2 { + pc_g2projective_into_blst_p2(self.0) + } +} + +impl G2 for ArkG2 { + fn generator() -> Self { + ArkG2::from_blst_p2(P2 { + x: blst_fp2 { + fp: [ + blst_fp { + l: [ + 0xf5f28fa202940a10, + 0xb3f5fb2687b4961a, + 0xa1a893b53e2ae580, + 0x9894999d1a3caee9, + 0x6f67b7631863366b, + 0x058191924350bcd7, + ], + }, + blst_fp { + l: [ + 0xa5a9c0759e23f606, + 0xaaa0c59dbccd60c3, + 0x3bb17e18e2867806, + 0x1b1ab6cc8541b367, + 0xc2b6ed0ef2158547, + 0x11922a097360edf3, + ], + }, + ], + }, + y: blst_fp2 { + fp: [ + blst_fp { + l: [ + 0x4c730af860494c4a, + 0x597cfa1f5e369c5a, + 0xe7e6856caa0a635a, + 0xbbefb5e96e0d495f, + 0x07d3a975f0ef25a2, + 0x0083fd8e7e80dae5, + ], + }, + blst_fp { + l: [ + 0xadc0fc92df64b05d, + 0x18aa270a2b1461dc, + 0x86adac6a3be4eba0, + 0x79495c4ec93da33a, + 0xe7175850a43ccaed, + 0x0b2bc2a163de1bf2, + ], + }, + ], + }, + z: blst_fp2 { + fp: [ + blst_fp { + l: [ + 0x760900000002fffd, + 0xebf4000bc40c0002, + 0x5f48985753c758ba, + 0x77ce585370525745, + 0x5c071a97a256ec6d, + 0x15f65ec3fa80e493, + ], + }, + blst_fp { + l: [ + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + ], + }, + ], + }, + }) + } + + fn negative_generator() -> Self { + ArkG2::from_blst_p2(P2 { + x: blst_fp2 { + fp: [ + blst_fp { + l: [ + 0xf5f28fa202940a10, + 0xb3f5fb2687b4961a, + 0xa1a893b53e2ae580, + 0x9894999d1a3caee9, + 0x6f67b7631863366b, + 0x058191924350bcd7, + ], + }, + blst_fp { + l: [ + 0xa5a9c0759e23f606, + 0xaaa0c59dbccd60c3, + 0x3bb17e18e2867806, + 0x1b1ab6cc8541b367, + 0xc2b6ed0ef2158547, + 0x11922a097360edf3, + ], + }, + ], + }, + y: blst_fp2 { + fp: [ + blst_fp { + l: [ + 0x6d8bf5079fb65e61, + 0xc52f05df531d63a5, + 0x7f4a4d344ca692c9, + 0xa887959b8577c95f, + 0x4347fe40525c8734, + 0x197d145bbaff0bb5, + ], + }, + blst_fp { + l: [ + 0x0c3e036d209afa4e, + 0x0601d8f4863f9e23, + 0xe0832636bacc0a84, + 0xeb2def362a476f84, + 0x64044f659f0ee1e9, + 0x0ed54f48d5a1caa7, + ], + }, + ], + }, + z: blst_fp2 { + fp: [ + blst_fp { + l: [ + 0x760900000002fffd, + 0xebf4000bc40c0002, + 0x5f48985753c758ba, + 0x77ce585370525745, + 0x5c071a97a256ec6d, + 0x15f65ec3fa80e493, + ], + }, + blst_fp { + l: [ + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + 0x0000000000000000, + ], + }, + ], + }, + }) + } + + #[allow(clippy::bind_instead_of_map)] + fn from_bytes(bytes: &[u8]) -> Result { + bytes + .try_into() + .map_err(|_| { + format!( + "Invalid byte length. Expected {}, got {}", + BYTES_PER_G2, + bytes.len() + ) + }) + .and_then(|bytes: &[u8; BYTES_PER_G2]| { + let mut blst_affine = blst_p2_affine::default(); + let result = unsafe { blst_p2_uncompress(&mut blst_affine, bytes.as_ptr()) }; + + if result != BLST_ERROR::BLST_SUCCESS { + return Err("Failed to deserialize G1".to_owned()); + } + + let mut blst_point = blst_p2::default(); + unsafe { blst_p2_from_affine(&mut blst_point, &blst_affine) }; + + Ok(ArkG2::from_blst_p2(blst_point)) + }) + } + + fn to_bytes(&self) -> [u8; 96] { + <[u8; 96]>::try_from(self.0.x.c0.0.to_bytes_le()).unwrap() + } + + fn add_or_dbl(&mut self, b: &Self) -> Self { + Self(self.0 + b.0) + } + + fn dbl(&self) -> Self { + Self(self.0.double()) + } + + fn sub(&self, b: &Self) -> Self { + Self(self.0 - b.0) + } + + fn equals(&self, b: &Self) -> bool { + self.0.eq(&b.0) + } +} + +impl G2Mul for ArkG2 { + fn mul(&self, b: &ArkFr) -> Self { + Self(self.0.mul(b.to_u64_arr())) + } +} + +impl Poly for PolyData { + fn new(size: usize) -> PolyData { + Self { + coeffs: vec![ArkFr::default(); size], + } + } + + fn get_coeff_at(&self, i: usize) -> ArkFr { + self.coeffs[i] + } + + fn set_coeff_at(&mut self, i: usize, x: &ArkFr) { + self.coeffs[i] = *x; + } + + fn get_coeffs(&self) -> &[ArkFr] { + &self.coeffs + } + + fn len(&self) -> usize { + self.coeffs.len() + } + + fn eval(&self, x: &ArkFr) -> ArkFr { + eval_poly(self, x) + } + + fn scale(&mut self) { + scale_poly(self); + } + + fn unscale(&mut self) { + unscale_poly(self); + } + + fn inverse(&mut self, new_len: usize) -> Result { + poly_inverse(self, new_len) + } + + fn div(&mut self, x: &Self) -> Result { + if x.len() >= self.len() || x.len() < 128 { + poly_long_div(self, x) + } else { + poly_fast_div(self, x) + } + } + + fn long_div(&mut self, x: &Self) -> Result { + poly_long_div(self, x) + } + + fn fast_div(&mut self, x: &Self) -> Result { + poly_fast_div(self, x) + } + + fn mul_direct(&mut self, x: &Self, len: usize) -> Result { + poly_mul_direct(self, x, len) + } +} + +impl FFTSettingsPoly for LFFTSettings { + fn poly_mul_fft( + a: &PolyData, + x: &PolyData, + len: usize, + fs: Option<&LFFTSettings>, + ) -> Result { + poly_mul_fft(a, x, fs, len) + } +} + +impl Default for LFFTSettings { + fn default() -> Self { + Self { + max_width: 0, + root_of_unity: ArkFr::zero(), + expanded_roots_of_unity: Vec::new(), + reverse_roots_of_unity: Vec::new(), + roots_of_unity: Vec::new(), + } + } +} + +impl FFTSettings for LFFTSettings { + fn new(scale: usize) -> Result { + if scale >= SCALE2_ROOT_OF_UNITY.len() { + return Err(String::from( + "Scale is expected to be within root of unity matrix row size", + )); + } + + let max_width: usize = 1 << scale; + let root_of_unity = ArkFr::from_u64_arr(&SCALE2_ROOT_OF_UNITY[scale]); + + let expanded_roots_of_unity = expand_root_of_unity(&root_of_unity, max_width)?; + let mut reverse_roots_of_unity = expanded_roots_of_unity.clone(); + reverse_roots_of_unity.reverse(); + + let mut roots_of_unity = expanded_roots_of_unity.clone(); + roots_of_unity.pop(); + reverse_bit_order(&mut roots_of_unity)?; + + Ok(LFFTSettings { + max_width, + root_of_unity, + expanded_roots_of_unity, + reverse_roots_of_unity, + roots_of_unity, + }) + } + + fn get_max_width(&self) -> usize { + self.max_width + } + + fn get_expanded_roots_of_unity_at(&self, i: usize) -> ArkFr { + self.expanded_roots_of_unity[i] + } + + fn get_expanded_roots_of_unity(&self) -> &[ArkFr] { + &self.expanded_roots_of_unity + } + + fn get_reverse_roots_of_unity_at(&self, i: usize) -> ArkFr { + self.reverse_roots_of_unity[i] + } + + fn get_reversed_roots_of_unity(&self) -> &[ArkFr] { + &self.reverse_roots_of_unity + } + + fn get_roots_of_unity_at(&self, i: usize) -> ArkFr { + self.roots_of_unity[i] + } + + fn get_roots_of_unity(&self) -> &[ArkFr] { + &self.roots_of_unity + } +} + +impl KZGSettings for LKZGSettings { + fn new( + secret_g1: &[ArkG1], + secret_g2: &[ArkG2], + _length: usize, + fft_settings: &LFFTSettings, + ) -> Result { + Ok(Self { + secret_g1: secret_g1.to_vec(), + secret_g2: secret_g2.to_vec(), + fs: fft_settings.clone(), + precomputation: { + #[cfg(feature = "sppark")] + { + use ark_bls12_381::G1Affine; + let points = + kzg::msm::msm_impls::batch_convert::(secret_g1); + let points = unsafe { + alloc::slice::from_raw_parts( + points.as_ptr() as *const G1Affine, + points.len(), + ) + }; + let prepared = rust_kzg_arkworks3_sppark::prepare_multi_scalar_mult(points); + Some(Arc::new(PrecomputationTable::from_ptr(prepared))) + } + + #[cfg(feature = "sppark_wlc")] + { + let affines = + kzg::msm::msm_impls::batch_convert::(&secret_g1); + let affines = unsafe { + alloc::slice::from_raw_parts( + affines.as_ptr() as *const G1Affine, + secret_g1.len(), + ) + }; + + Some(Arc::new(PrecomputationTable::from_ptr( + rust_kzg_arkworks3_sppark_wlc::multi_scalar_mult_init(affines).context, + ))) + } + + #[cfg(not(any(feature = "sppark", feature = "sppark_wlc")))] + { + precompute(secret_g1).ok().flatten().map(Arc::new) + } + }, + }) + } + + fn commit_to_poly(&self, p: &PolyData) -> Result { + if p.coeffs.len() > self.secret_g1.len() { + return Err(String::from("Polynomial is longer than secret g1")); + } + + let mut out = ArkG1::default(); + g1_linear_combination( + &mut out, + &self.secret_g1, + &p.coeffs, + p.coeffs.len(), + self.get_precomputation(), + ); + + Ok(out) + } + + fn compute_proof_single(&self, p: &PolyData, x: &ArkFr) -> Result { + if p.coeffs.is_empty() { + return Err(String::from("Polynomial must not be empty")); + } + + // `-(x0^n)`, where `n` is `1` + let divisor_0 = x.negate(); + + // Calculate `q = p / (x^n - x0^n)` for our reduced case (see `compute_proof_multi` for + // generic implementation) + let mut out_coeffs = Vec::from(&p.coeffs[1..]); + for i in (1..out_coeffs.len()).rev() { + let tmp = out_coeffs[i].mul(&divisor_0); + out_coeffs[i - 1] = out_coeffs[i - 1].sub(&tmp); + } + + let q = PolyData { coeffs: out_coeffs }; + let ret = self.commit_to_poly(&q)?; + Ok(ret) + // Ok(compute_single(p, x, self)) + } + + fn check_proof_single( + &self, + com: &ArkG1, + proof: &ArkG1, + x: &ArkFr, + y: &ArkFr, + ) -> Result { + let x_g2: ArkG2 = ArkG2::generator().mul(x); + let s_minus_x: ArkG2 = self.secret_g2[1].sub(&x_g2); + let y_g1 = ArkG1::generator().mul(y); + let commitment_minus_y: ArkG1 = com.sub(&y_g1); + + Ok(pairings_verify( + &commitment_minus_y, + &ArkG2::generator(), + proof, + &s_minus_x, + )) + } + + fn compute_proof_multi(&self, p: &PolyData, x: &ArkFr, n: usize) -> Result { + if p.coeffs.is_empty() { + return Err(String::from("Polynomial must not be empty")); + } + + if !n.is_power_of_two() { + return Err(String::from("n must be a power of two")); + } + + // Construct x^n - x0^n = (x - x0.w^0)(x - x0.w^1)...(x - x0.w^(n-1)) + let mut divisor = PolyData { + coeffs: Vec::with_capacity(n + 1), + }; + + // -(x0^n) + let x_pow_n = x.pow(n); + + divisor.coeffs.push(x_pow_n.negate()); + + // Zeros + for _ in 1..n { + divisor.coeffs.push(ArkFr { fr: Fr::zero() }); + } + + // x^n + divisor.coeffs.push(ArkFr { fr: Fr::one() }); + + let mut new_polina = p.clone(); + + // Calculate q = p / (x^n - x0^n) + // let q = p.div(&divisor).unwrap(); + let q = new_polina.div(&divisor)?; + let ret = self.commit_to_poly(&q)?; + Ok(ret) + } + + fn check_proof_multi( + &self, + com: &ArkG1, + proof: &ArkG1, + x: &ArkFr, + ys: &[ArkFr], + n: usize, + ) -> Result { + if !n.is_power_of_two() { + return Err(String::from("n is not a power of two")); + } + + // Interpolate at a coset. + let mut interp = PolyData { + coeffs: self.fs.fft_fr(ys, true)?, + }; + + let inv_x = x.inverse(); // Not euclidean? + let mut inv_x_pow = inv_x; + for i in 1..n { + interp.coeffs[i] = interp.coeffs[i].mul(&inv_x_pow); + inv_x_pow = inv_x_pow.mul(&inv_x); + } + + // [x^n]_2 + let x_pow = inv_x_pow.inverse(); + + let xn2 = ArkG2::generator().mul(&x_pow); + + // [s^n - x^n]_2 + let xn_minus_yn = self.secret_g2[n].sub(&xn2); + + // [interpolation_polynomial(s)]_1 + let is1 = self.commit_to_poly(&interp).unwrap(); + + // [commitment - interpolation_polynomial(s)]_1 = [commit]_1 - [interpolation_polynomial(s)]_1 + let commit_minus_interp = com.sub(&is1); + + let ret = pairings_verify( + &commit_minus_interp, + &ArkG2::generator(), + proof, + &xn_minus_yn, + ); + + Ok(ret) + } + + fn get_expanded_roots_of_unity_at(&self, i: usize) -> ArkFr { + self.fs.get_expanded_roots_of_unity_at(i) + } + + fn get_roots_of_unity_at(&self, i: usize) -> ArkFr { + self.fs.get_roots_of_unity_at(i) + } + + fn get_fft_settings(&self) -> &LFFTSettings { + &self.fs + } + + fn get_g1_secret(&self) -> &[ArkG1] { + &self.secret_g1 + } + + fn get_g2_secret(&self) -> &[ArkG2] { + &self.secret_g2 + } + + fn get_precomputation(&self) -> Option<&PrecomputationTable> { + self.precomputation.as_ref().map(|v| v.as_ref()) + } +} + +type ArkFpInt = ::BaseField; +#[repr(C)] +#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)] +pub struct ArkFp(pub ArkFpInt); + +impl G1Fp for ArkFp { + fn is_zero(&self) -> bool { + self.0.is_zero() + } + + fn set_zero(&mut self) { + self.0.set_zero(); + } + + fn is_one(&self) -> bool { + self.0.is_one() + } + + fn set_one(&mut self) { + self.0.set_one(); + } + + fn inverse(&self) -> Option { + Some(Self(self.0.inverse().unwrap())) + } + + fn square(&self) -> Self { + Self(self.0.square()) + } + + fn double(&self) -> Self { + Self(self.0.double()) + } + + fn from_underlying_arr(arr: &[u64; 6]) -> Self { + let mut default = ArkFpInt::default(); + default.0 .0 = *arr; + Self(default) + } + + fn neg_assign(&mut self) { + self.0 = -self.0; + } + + fn mul_assign_fp(&mut self, b: &Self) { + self.0 *= b.0; + } + + fn sub_assign_fp(&mut self, b: &Self) { + self.0 -= b.0; + } + + fn add_assign_fp(&mut self, b: &Self) { + self.0 += b.0; + } + + fn zero() -> Self { + Self(ArkFpInt::zero()) + } + + fn one() -> Self { + Self(ArkFpInt::one()) + } + + fn bls12_381_rx_p() -> Self { + Self(blst_fp_into_pc_fq(&blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + })) + } +} + +impl G1GetFp for ArkG1 { + fn x(&self) -> &ArkFp { + unsafe { + // Transmute safe due to repr(C) on FsFp + core::mem::transmute(&self.0.x) + } + } + + fn y(&self) -> &ArkFp { + unsafe { + // Transmute safe due to repr(C) on FsFp + core::mem::transmute(&self.0.y) + } + } + + fn z(&self) -> &ArkFp { + unsafe { + // Transmute safe due to repr(C) on FsFp + core::mem::transmute(&self.0.z) + } + } + + fn x_mut(&mut self) -> &mut ArkFp { + unsafe { + // Transmute safe due to repr(C) on FsFp + core::mem::transmute(&mut self.0.x) + } + } + + fn y_mut(&mut self) -> &mut ArkFp { + unsafe { + // Transmute safe due to repr(C) on FsFp + core::mem::transmute(&mut self.0.y) + } + } + + fn z_mut(&mut self) -> &mut ArkFp { + unsafe { + // Transmute safe due to repr(C) on FsFp + core::mem::transmute(&mut self.0.z) + } + } +} + +#[repr(C)] +#[derive(Debug, Default, PartialEq, Eq, Clone, Copy)] +pub struct ArkG1Affine { + pub aff: G1Affine, +} + +impl G1AffineTrait for ArkG1Affine { + fn into_affine(g1: &ArkG1) -> Self { + Self { + aff: g1.0.into_affine(), + } + } + + fn into_affines(g1: &[ArkG1]) -> Vec { + let ark_points: &[GroupProjective] = unsafe { core::mem::transmute(g1) }; + let ark_points = GroupProjective::batch_normalization_into_affine(ark_points); + unsafe { core::mem::transmute(ark_points) } + } + + fn into_affines_loc(out: &mut [Self], g1: &[ArkG1]) { + out.copy_from_slice(&Self::into_affines(g1)); + } + + fn to_proj(&self) -> ArkG1 { + ArkG1(self.aff.into_projective()) + } + + fn x(&self) -> &ArkFp { + unsafe { core::mem::transmute(&self.aff.x) } + } + + fn y(&self) -> &ArkFp { + unsafe { core::mem::transmute(&self.aff.y) } + } + + fn is_infinity(&self) -> bool { + self.aff.infinity + } + + fn is_zero(&self) -> bool { + self.aff.is_zero() + } + + fn zero() -> Self { + Self { + aff: G1Affine::new(ArkFp::zero().0, ArkFp::zero().0, true), + } + } + + fn x_mut(&mut self) -> &mut ArkFp { + unsafe { core::mem::transmute(&mut self.aff.x) } + } + + fn y_mut(&mut self) -> &mut ArkFp { + unsafe { core::mem::transmute(&mut self.aff.y) } + } +} + +pub struct ArkG1ProjAddAffine; +impl G1ProjAddAffine for ArkG1ProjAddAffine { + fn add_assign_affine(proj: &mut ArkG1, aff: &ArkG1Affine) { + proj.0.add_assign_mixed(&aff.aff); + } + + fn add_or_double_assign_affine(proj: &mut ArkG1, aff: &ArkG1Affine) { + proj.0.add_assign_mixed(&aff.aff); + } +} diff --git a/arkworks3/src/lib.rs b/arkworks3/src/lib.rs new file mode 100644 index 000000000..496f93e2d --- /dev/null +++ b/arkworks3/src/lib.rs @@ -0,0 +1,54 @@ +pub type Pairing = blst::Pairing; +pub type Fp = blst::blst_fp; +pub type Fp12 = blst::blst_fp12; +pub type Fp6 = blst::blst_fp6; +pub type Fr = blst::blst_fr; +pub type P1 = blst::blst_p1; +pub type P1Affine = blst::blst_p1_affine; +pub type P2 = blst::blst_p2; +pub type P2Affine = blst::blst_p2_affine; +pub type Scalar = blst::blst_scalar; +pub type Uniq = blst::blst_uniq; + +pub mod consts; +pub mod das; +pub mod eip_4844; +pub mod fft; +pub mod fft_g1; +pub mod fk20_proofs; +pub mod kzg_proofs; +pub mod kzg_types; +pub mod poly; +pub mod recover; +pub mod utils; +pub mod zero_poly; + +trait Eq { + fn equals(&self, other: &T) -> bool; +} + +trait Inverse { + fn inverse(&self) -> T; +} + +trait Zero { + fn is_zero(&self) -> bool; +} + +impl Eq for P1 { + fn equals(&self, other: &P1) -> bool { + self.x.l.eq(&other.x.l) && self.y.l.eq(&other.x.l) && self.z.l.eq(&other.x.l) + } +} + +impl Eq for Fr { + fn equals(&self, other: &Fr) -> bool { + self.l.eq(&other.l) + } +} + +impl Zero for Fr { + fn is_zero(&self) -> bool { + self.l[0] == 0 && self.l[1] == 0 && self.l[2] == 0 && self.l[3] == 0 + } +} diff --git a/arkworks3/src/poly.rs b/arkworks3/src/poly.rs new file mode 100644 index 000000000..01199a7d8 --- /dev/null +++ b/arkworks3/src/poly.rs @@ -0,0 +1,251 @@ +use super::kzg_proofs::FFTSettings; +use super::utils::{blst_poly_into_pc_poly, PolyData}; +use crate::kzg_types::ArkFr as BlstFr; +use crate::utils::pc_poly_into_blst_poly; +use crate::zero_poly::pad_poly; +use ark_bls12_381::Fr; +use ark_poly::univariate::DensePolynomial; +use ark_poly::UVPolynomial; +use ark_std::{log2, Zero}; +use kzg::common_utils::{log2_pow2, next_pow_of_2}; +use kzg::{FFTFr, FFTSettings as FFTSettingsT, Fr as FrTrait, Poly}; +use std::cmp::min; + +pub fn poly_inverse(b: &PolyData, output_len: usize) -> Result { + if b.coeffs.is_empty() { + return Err(String::from("b.coeffs is empty")); + } + + if BlstFr::is_zero(&b.coeffs[0]) { + return Err(String::from("b.coeffs[0] is zero")); + } + + let mut output = PolyData { + coeffs: vec![BlstFr::zero(); output_len], + }; + if b.coeffs.len() == 1 { + output.coeffs[0] = b.coeffs[0].inverse(); + for i in 1..output_len { + output.coeffs[i] = BlstFr::zero(); + } + return Ok(output); + } + + let maxd = output_len - 1; + let scale = next_pow_of_2(log2_pow2(2 * output_len - 1)); + let fs = FFTSettings::new(scale).unwrap(); + + let mut tmp0: PolyData; + let mut tmp1: PolyData; + + output.coeffs[0] = b.coeffs[0].inverse(); + let mut d: usize = 0; + let mut mask: usize = 1 << log2(maxd); + + while mask != 0 { + d = 2 * d + usize::from((maxd & mask) != 0); + mask >>= 1; + + let len_temp: usize = min(d + 1, b.coeffs.len() + output.coeffs.len() - 1); + + tmp0 = poly_mul(b, &output, Some(&fs), len_temp).unwrap(); + + for i in 0..len_temp { + tmp0.coeffs[i] = tmp0.coeffs[i].negate(); + } + let fr_two = BlstFr { fr: Fr::from(2) }; + tmp0.coeffs[0] = tmp0.coeffs[0].add(&fr_two); + + let len_temp2: usize = d + 1; + + tmp1 = poly_mul(&output, &tmp0, Some(&fs), len_temp2).unwrap(); + + if tmp1.coeffs.len() > output_len { + tmp1.coeffs = tmp1.coeffs[..output_len].to_vec(); + } + for i in 0..tmp1.coeffs.len() { + output.coeffs[i] = tmp1.coeffs[i]; + } + } + if d + 1 != output_len { + return Err(String::from("d + 1 is not equals to output_len")); + } + Ok(output) +} + +pub fn poly_mul_direct(p1: &PolyData, p2: &PolyData, len: usize) -> Result { + let p1 = blst_poly_into_pc_poly(&p1.coeffs); + let p2 = blst_poly_into_pc_poly(&p2.coeffs); + if p1.is_zero() || p2.is_zero() { + Ok(pc_poly_into_blst_poly(DensePolynomial::zero())) + } else { + let mut result = vec![Fr::zero(); len]; + for (i, self_coeff) in p1.coeffs.iter().enumerate() { + for (j, other_coeff) in p2.coeffs.iter().enumerate() { + if i + j >= len { + break; + } + result[i + j] += &(*self_coeff * other_coeff); + } + } + let p = pc_poly_into_blst_poly(DensePolynomial::from_coefficients_vec(result)); + Ok(PolyData { + coeffs: pad_poly(&p, len).unwrap(), + }) + } +} + +pub fn poly_long_div(p1: &PolyData, p2: &PolyData) -> Result { + Ok(pc_poly_into_blst_poly( + &blst_poly_into_pc_poly(&p1.coeffs) / &blst_poly_into_pc_poly(&p2.coeffs), + )) +} + +pub fn poly_mul( + a: &PolyData, + b: &PolyData, + fs: Option<&FFTSettings>, + len: usize, +) -> Result { + if a.coeffs.len() < 64 || b.coeffs.len() < 64 || len < 128 { + poly_mul_direct(a, b, len) + } else { + poly_mul_fft(a, b, fs, len) + } +} + +pub fn poly_mul_fft( + a: &PolyData, + b: &PolyData, + fs: Option<&FFTSettings>, + len: usize, +) -> Result { + // Truncate a and b so as not to do excess work for the number of coefficients required. + let a_len = min(a.len(), len); + let b_len = min(b.len(), len); + let length = next_pow_of_2(a_len + b_len - 1); + + // If the FFT settings are NULL then make a local set, otherwise use the ones passed in. + let fs_p = if let Some(x) = fs { + x.clone() + } else { + let scale = log2_pow2(length); + FFTSettings::new(scale).unwrap() + }; + + if length > fs_p.max_width { + return Err(String::from( + "length should be equals or less than FFTSettings max width", + )); + } + + let a = PolyData { + coeffs: a.coeffs[..a_len].to_vec(), + }; + let b = PolyData { + coeffs: b.coeffs[..b_len].to_vec(), + }; + let a_pad = PolyData { + coeffs: pad_poly(&a, length).unwrap(), + }; + let b_pad = PolyData { + coeffs: pad_poly(&b, length).unwrap(), + }; + + let a_fft; + let b_fft; + #[cfg(feature = "parallel")] + { + if length > 1024 { + let mut a_fft_temp = vec![]; + let mut b_fft_temp = vec![]; + + rayon::join( + || a_fft_temp = fs_p.fft_fr(&a_pad.coeffs, false).unwrap(), + || b_fft_temp = fs_p.fft_fr(&b_pad.coeffs, false).unwrap(), + ); + + a_fft = a_fft_temp; + b_fft = b_fft_temp; + } else { + a_fft = fs_p.fft_fr(&a_pad.coeffs, false).unwrap(); + b_fft = fs_p.fft_fr(&b_pad.coeffs, false).unwrap(); + } + } + #[cfg(not(feature = "parallel"))] + { + a_fft = fs_p.fft_fr(&a_pad.coeffs, false).unwrap(); + b_fft = fs_p.fft_fr(&b_pad.coeffs, false).unwrap(); + } + let mut ab_fft = a_pad; + let mut ab = b_pad; + + for i in 0..length { + ab_fft.coeffs[i] = a_fft[i].mul(&b_fft[i]); + } + + ab.coeffs = fs_p.fft_fr(&ab_fft.coeffs, true).unwrap(); + + let data_len = min(len, length); + let mut out = PolyData::new(len); + + for i in 0..data_len { + out.coeffs[i] = ab.coeffs[i]; + } + for i in data_len..len { + out.coeffs[i] = BlstFr::zero(); + } + + Ok(out) +} + +pub fn poly_fast_div(dividend: &PolyData, divisor: &PolyData) -> Result { + if divisor.coeffs.is_empty() { + return Err(String::from("divisor coeffs are empty")); + } + + if divisor.coeffs[divisor.coeffs.len() - 1].is_zero() { + return Err(String::from("divisor coeffs last member is zero")); + } + + let m = dividend.coeffs.len() - 1; + let n = divisor.coeffs.len() - 1; + + if n > m { + return Ok(PolyData::new(0)); + } + + if divisor.coeffs[divisor.coeffs.len() - 1].is_zero() { + return Err(String::from("divisor coeffs last member is zero")); + } + + let mut out = PolyData::new(0); + + if divisor.len() == 1 { + for i in 0..dividend.len() { + out.coeffs + .push(dividend.coeffs[i].div(&divisor.coeffs[0]).unwrap()); + } + return Ok(out); + } + + let a_flip = poly_flip(dividend).unwrap(); + let b_flip = poly_flip(divisor).unwrap(); + + let inv_b_flip = poly_inverse(&b_flip, m - n + 1).unwrap(); + let q_flip = poly_mul(&a_flip, &inv_b_flip, None, m - n + 1).unwrap(); + + out = poly_flip(&q_flip).unwrap(); + + Ok(PolyData { + coeffs: out.coeffs[..m - n + 1].to_vec(), + }) +} + +pub fn poly_flip(input: &PolyData) -> Result { + let mut output = PolyData::new(0); + for i in 0..input.len() { + output.coeffs.push(input.coeffs[input.coeffs.len() - i - 1]); + } + Ok(output) +} diff --git a/arkworks3/src/recover.rs b/arkworks3/src/recover.rs new file mode 100644 index 000000000..c57f0c24d --- /dev/null +++ b/arkworks3/src/recover.rs @@ -0,0 +1,234 @@ +use crate::consts::SCALE_FACTOR; +use crate::kzg_proofs::FFTSettings; +use crate::kzg_types::ArkFr as BlstFr; +use crate::utils::PolyData; + +use kzg::{FFTFr, Fr, Poly, PolyRecover, ZeroPoly}; + +#[cfg(feature = "parallel")] +use kzg::common_utils::next_pow_of_2; + +#[cfg(feature = "parallel")] +static mut INVERSE_FACTORS: Vec = Vec::new(); +#[cfg(feature = "parallel")] +static mut UNSCALE_FACTOR_POWERS: Vec = Vec::new(); + +#[allow(clippy::needless_range_loop)] +pub fn scale_poly(p: &mut PolyData) { + let scale_factor = BlstFr::from_u64(SCALE_FACTOR); + let inv_factor = scale_factor.inverse(); + #[cfg(feature = "parallel")] + { + let optim = next_pow_of_2(p.len() - 1); + if optim <= 1024 { + unsafe { + if INVERSE_FACTORS.len() < p.len() { + if INVERSE_FACTORS.is_empty() { + INVERSE_FACTORS.push(BlstFr::one()); + } + for i in (INVERSE_FACTORS.len())..p.len() { + INVERSE_FACTORS.push(INVERSE_FACTORS[i - 1].mul(&inv_factor)); + } + } + + for i in 1..p.len() { + p.coeffs[i] = p.coeffs[i].mul(&INVERSE_FACTORS[i]); + } + } + } else { + let mut factor_power = BlstFr::one(); + for i in 1..p.len() { + factor_power = factor_power.mul(&inv_factor); + p.set_coeff_at(i, &p.get_coeff_at(i).mul(&factor_power)); + } + } + } + #[cfg(not(feature = "parallel"))] + { + let mut factor_power = BlstFr::one(); + for i in 1..p.len() { + factor_power = factor_power.mul(&inv_factor); + p.set_coeff_at(i, &p.get_coeff_at(i).mul(&factor_power)); + } + } +} + +#[allow(clippy::needless_range_loop)] +pub fn unscale_poly(p: &mut PolyData) { + let scale_factor = BlstFr::from_u64(SCALE_FACTOR); + #[cfg(feature = "parallel")] + { + unsafe { + if UNSCALE_FACTOR_POWERS.len() < p.len() { + if UNSCALE_FACTOR_POWERS.is_empty() { + UNSCALE_FACTOR_POWERS.push(BlstFr::one()); + } + for i in (UNSCALE_FACTOR_POWERS.len())..p.len() { + UNSCALE_FACTOR_POWERS.push(UNSCALE_FACTOR_POWERS[i - 1].mul(&scale_factor)); + } + } + + for i in 1..p.len() { + p.coeffs[i] = p.coeffs[i].mul(&UNSCALE_FACTOR_POWERS[i]); + } + } + } + #[cfg(not(feature = "parallel"))] + { + let mut factor_power = BlstFr::one(); + for i in 1..p.len() { + factor_power = factor_power.mul(&scale_factor); + p.set_coeff_at(i, &p.get_coeff_at(i).mul(&factor_power)); + } + } +} +impl PolyRecover for PolyData { + fn recover_poly_coeffs_from_samples( + samples: &[Option], + fs: &FFTSettings, + ) -> Result { + if !samples.len().is_power_of_two() { + return Err(String::from("samples lenght has to be power of 2")); + } + + let mut missing = Vec::new(); + + for (i, sample) in samples.iter().enumerate() { + if sample.is_none() { + missing.push(i); + } + } + + if missing.len() > samples.len() / 2 { + return Err(String::from( + "Impossible to recover, too many shards are missing", + )); + } + + // Calculate `Z_r,I` + let (zero_eval, mut zero_poly) = + fs.zero_poly_via_multiplication(samples.len(), missing.as_slice())?; + + // Check all is well + for (i, item) in zero_eval.iter().enumerate().take(samples.len()) { + if samples[i].is_none() != item.is_zero() { + return Err(String::from("sample and item are both zero")); + } + } + + // Construct E * Z_r,I: the loop makes the evaluation polynomial + + let mut poly_evaluations_with_zero = vec![BlstFr::zero(); samples.len()]; + + for i in 0..samples.len() { + if samples[i].is_none() { + poly_evaluations_with_zero[i] = BlstFr::zero(); + } else { + poly_evaluations_with_zero[i] = samples[i].unwrap().mul(&zero_eval[i]); + } + } + + // Now inverse FFT so that poly_with_zero is (E * Z_r,I)(x) = (D * Z_r,I)(x) + let mut poly_with_zero = PolyData { + coeffs: fs + .fft_fr(poly_evaluations_with_zero.as_slice(), true) + .unwrap(), + }; + + #[cfg(feature = "parallel")] + let optim = next_pow_of_2(poly_with_zero.len() - 1); + + #[cfg(feature = "parallel")] + { + if optim > 1024 { + rayon::join( + || scale_poly(&mut poly_with_zero), + || scale_poly(&mut zero_poly), + ); + } else { + scale_poly(&mut poly_with_zero); + scale_poly(&mut zero_poly); + } + } + #[cfg(not(feature = "parallel"))] + { + scale_poly(&mut poly_with_zero); + scale_poly(&mut zero_poly); + } + + // Q1 = (D * Z_r,I)(k * x) + let scaled_poly_with_zero = poly_with_zero; // Renaming + // Q2 = Z_r,I(k * x) + let scaled_zero_poly = zero_poly.coeffs; // Renaming + + let eval_scaled_poly_with_zero; + let eval_scaled_zero_poly; + + #[cfg(feature = "parallel")] + { + if optim > 1024 { + let mut eval_scaled_poly_with_zero_temp = vec![]; + let mut eval_scaled_zero_poly_temp = vec![]; + rayon::join( + || { + eval_scaled_poly_with_zero_temp = + fs.fft_fr(&scaled_poly_with_zero.coeffs, false).unwrap() + }, + || eval_scaled_zero_poly_temp = fs.fft_fr(&scaled_zero_poly, false).unwrap(), + ); + + eval_scaled_poly_with_zero = eval_scaled_poly_with_zero_temp; + eval_scaled_zero_poly = eval_scaled_zero_poly_temp; + } else { + eval_scaled_poly_with_zero = + fs.fft_fr(&scaled_poly_with_zero.coeffs, false).unwrap(); + eval_scaled_zero_poly = fs.fft_fr(&scaled_zero_poly, false).unwrap(); + } + } + #[cfg(not(feature = "parallel"))] + { + eval_scaled_poly_with_zero = fs.fft_fr(&scaled_poly_with_zero.coeffs, false).unwrap(); + eval_scaled_zero_poly = fs.fft_fr(&scaled_zero_poly, false).unwrap(); + } + + let mut eval_scaled_reconstructed_poly = eval_scaled_poly_with_zero.clone(); + for i in 0..samples.len() { + eval_scaled_reconstructed_poly[i] = eval_scaled_poly_with_zero[i] + .div(&eval_scaled_zero_poly[i]) + .unwrap(); + } + + // The result of the division is D(k * x): + let mut scaled_reconstructed_poly = PolyData { + coeffs: fs.fft_fr(&eval_scaled_reconstructed_poly, true).unwrap(), + }; + + // k * x -> x + unscale_poly(&mut scaled_reconstructed_poly); + + // Finally we have D(x) which evaluates to our original data at the powers of roots of unity + Ok(scaled_reconstructed_poly) + } + + fn recover_poly_from_samples( + samples: &[Option], + fs: &FFTSettings, + ) -> Result { + let reconstructed_poly = Self::recover_poly_coeffs_from_samples(samples, fs)?; + + // The evaluation polynomial for D(x) is the reconstructed data: + let out = PolyData { + coeffs: fs.fft_fr(&reconstructed_poly.coeffs, false).unwrap(), + }; + + // Check all is well + for (i, sample) in samples.iter().enumerate() { + if !sample.is_none() && !out.get_coeff_at(i).equals(&sample.unwrap()) { + return Err(String::from( + "sample is zero and out coeff at i is not equals to sample", + )); + } + } + Ok(out) + } +} diff --git a/arkworks3/src/utils.rs b/arkworks3/src/utils.rs new file mode 100644 index 000000000..2efa82740 --- /dev/null +++ b/arkworks3/src/utils.rs @@ -0,0 +1,104 @@ +use super::{Fp, P1}; +use crate::kzg_types::ArkFr; +use crate::P2; +use ark_bls12_381::{g1, g2, Fq, Fq2, Fr}; +use ark_ec::models::short_weierstrass_jacobian::GroupProjective; +use ark_ff::{BigInteger256, BigInteger384, Fp2}; +use ark_poly::univariate::DensePolynomial as DensePoly; +use ark_poly::UVPolynomial; +use blst::{blst_fp, blst_fp2, blst_fr, blst_p1, blst_p2}; + +#[derive(Debug, PartialEq, Eq)] +pub struct Error; + +#[derive(Debug, Clone, Eq, PartialEq, Default)] +pub struct PolyData { + pub coeffs: Vec, +} +// FIXME: Store just dense poly here + +pub fn pc_poly_into_blst_poly(poly: DensePoly) -> PolyData { + let mut bls_pol: Vec = { Vec::new() }; + for x in poly.coeffs { + bls_pol.push(ArkFr { fr: x }); + } + PolyData { coeffs: bls_pol } +} + +pub fn blst_poly_into_pc_poly(pd: &[ArkFr]) -> DensePoly { + let mut poly: Vec = vec![Fr::default(); pd.len()]; + for i in 0..pd.len() { + poly[i] = pd[i].fr; + } + DensePoly::from_coefficients_vec(poly) +} + +pub const fn pc_fq_into_blst_fp(fq: Fq) -> Fp { + Fp { l: fq.0 .0 } +} + +pub const fn blst_fr_into_pc_fr(fr: blst_fr) -> Fr { + let big_int = BigInteger256::new(fr.l); + + Fr::new(big_int) +} + +pub const fn pc_fr_into_blst_fr(fr: Fr) -> blst_fr { + blst::blst_fr { l: fr.0 .0 } +} + +pub const fn blst_fp_into_pc_fq(fp: &Fp) -> Fq { + let big_int = BigInteger384::new(fp.l); + Fq::new(big_int) +} + +pub fn blst_fp2_into_pc_fq2(fp: &blst_fp2) -> Fq2 { + Fp2::new(blst_fp_into_pc_fq(&fp.fp[0]), blst_fp_into_pc_fq(&fp.fp[1])) +} + +pub fn blst_p1_into_pc_g1projective(p1: &P1) -> GroupProjective { + GroupProjective::new( + blst_fp_into_pc_fq(&p1.x), + blst_fp_into_pc_fq(&p1.y), + blst_fp_into_pc_fq(&p1.z), + ) +} + +pub const fn pc_g1projective_into_blst_p1(p1: GroupProjective) -> blst_p1 { + blst_p1 { + x: blst_fp { l: p1.x.0 .0 }, + y: blst_fp { l: p1.y.0 .0 }, + z: blst_fp { l: p1.z.0 .0 }, + } +} + +pub fn blst_p2_into_pc_g2projective(p2: &P2) -> GroupProjective { + GroupProjective::new( + blst_fp2_into_pc_fq2(&p2.x), + blst_fp2_into_pc_fq2(&p2.y), + blst_fp2_into_pc_fq2(&p2.z), + ) +} + +pub const fn pc_g2projective_into_blst_p2(p2: GroupProjective) -> blst_p2 { + blst_p2 { + x: blst::blst_fp2 { + fp: [ + blst::blst_fp { l: p2.x.c0.0 .0 }, + blst::blst_fp { l: p2.x.c1.0 .0 }, + ], + }, + y: blst::blst_fp2 { + fp: [ + blst::blst_fp { l: p2.y.c0.0 .0 }, + blst::blst_fp { l: p2.y.c1.0 .0 }, + ], + }, + z: blst::blst_fp2 { + fp: [ + blst::blst_fp { l: p2.z.c0.0 .0 }, + blst::blst_fp { l: p2.z.c1.0 .0 }, + ], + }, + } +} diff --git a/arkworks3/src/zero_poly.rs b/arkworks3/src/zero_poly.rs new file mode 100644 index 000000000..50619ef7e --- /dev/null +++ b/arkworks3/src/zero_poly.rs @@ -0,0 +1,196 @@ +use super::kzg_proofs::FFTSettings; +use super::utils::{blst_poly_into_pc_poly, pc_poly_into_blst_poly, PolyData}; +use crate::kzg_types::ArkFr as BlstFr; +use kzg::common_utils::next_pow_of_2; +use kzg::{FFTFr, Fr as FrTrait, ZeroPoly}; +use std::cmp::{min, Ordering}; +use std::ops::Neg; + +pub(crate) fn pad_poly(poly: &PolyData, new_length: usize) -> Result, String> { + if new_length <= poly.coeffs.len() { + return Ok(poly.coeffs.clone()); + } + + let mut out = poly.coeffs.to_vec(); + + for _i in poly.coeffs.len()..new_length { + out.push(BlstFr::zero()) + } + + Ok(out) +} + +impl ZeroPoly for FFTSettings { + fn do_zero_poly_mul_partial( + &self, + indices: &[usize], + stride: usize, + ) -> Result { + if indices.is_empty() { + return Err(String::from("idx array must be non-zero")); + } + let blstpoly = PolyData { + coeffs: vec![BlstFr::one(); indices.len() + 1], + }; + let mut poly = blst_poly_into_pc_poly(&blstpoly.coeffs); + poly.coeffs[0] = (self.expanded_roots_of_unity[indices[0] * stride]).fr.neg(); + + for (i, indice) in indices.iter().enumerate().skip(1) { + let neg_di = (self.expanded_roots_of_unity[indice * stride]).fr.neg(); + + poly.coeffs[i] = neg_di + poly.coeffs[i - 1]; + + let mut j = i - 1; + while j > 0 { + let temp = poly.coeffs[j] * neg_di; + poly.coeffs[j] = temp + poly.coeffs[j - 1]; + j -= 1; + } + + poly.coeffs[0] *= neg_di; + } + + Ok(pc_poly_into_blst_poly(poly)) + } + + fn reduce_partials(&self, len_out: usize, partials: &[PolyData]) -> Result { + let mut out_degree: usize = 0; + for partial in partials { + out_degree += partial.coeffs.len() - 1; + } + + if out_degree + 1 > len_out { + return Err(String::from("Expected domain size to be a power of 2")); + } + + let mut p_partial = pad_poly(&partials[0], len_out).unwrap(); + let mut mul_eval_ps = self.fft_fr(&p_partial, false).unwrap(); + + for partial in partials.iter().skip(1) { + p_partial = pad_poly(partial, len_out)?; + + let p_eval = self.fft_fr(&p_partial, false).unwrap(); + for j in 0..len_out { + mul_eval_ps[j].fr *= p_eval[j].fr; + } + } + + let coeffs = self.fft_fr(&mul_eval_ps, true)?; + + let out = PolyData { + coeffs: coeffs[..(out_degree + 1)].to_vec(), + }; + + Ok(out) + } + + fn zero_poly_via_multiplication( + &self, + length: usize, + missing_indices: &[usize], + ) -> Result<(Vec, PolyData), String> { + let zero_eval: Vec; + let mut zero_poly: PolyData; + + if missing_indices.is_empty() { + zero_eval = Vec::new(); + zero_poly = PolyData { coeffs: Vec::new() }; + return Ok((zero_eval, zero_poly)); + } + + if missing_indices.len() >= length { + return Err(String::from("Missing idxs greater than domain size")); + } else if length > self.max_width { + return Err(String::from( + "Domain size greater than fft_settings.max_width", + )); + } else if !length.is_power_of_two() { + return Err(String::from("Domain size must be a power of 2")); + } + + let degree_of_partial = 256; + let missing_per_partial = degree_of_partial - 1; + let domain_stride = self.max_width / length; + let mut partial_count = + (missing_per_partial + missing_indices.len() - 1) / missing_per_partial; + let domain_ceiling = min(next_pow_of_2(partial_count * degree_of_partial), length); + + if missing_indices.len() <= missing_per_partial { + zero_poly = self.do_zero_poly_mul_partial(missing_indices, domain_stride)?; + } else { + let mut work = vec![BlstFr::zero(); next_pow_of_2(partial_count * degree_of_partial)]; + + let mut partial_lens = Vec::new(); + + let mut offset = 0; + let mut out_offset = 0; + let max = missing_indices.len(); + + for _i in 0..partial_count { + let end = min(offset + missing_per_partial, max); + + let mut partial = + self.do_zero_poly_mul_partial(&missing_indices[offset..end], domain_stride)?; + partial.coeffs = pad_poly(&partial, degree_of_partial)?; + work.splice( + out_offset..(out_offset + degree_of_partial), + partial.coeffs.to_vec(), + ); + partial_lens.push(degree_of_partial); + + offset += missing_per_partial; + out_offset += degree_of_partial; + } + + partial_lens[partial_count - 1] = + 1 + missing_indices.len() - (partial_count - 1) * missing_per_partial; + + let reduction_factor = 4; + while partial_count > 1 { + let reduced_count = 1 + (partial_count - 1) / reduction_factor; + let partial_size = next_pow_of_2(partial_lens[0]); + + for i in 0..reduced_count { + let start = i * reduction_factor; + let out_end = min((start + reduction_factor) * partial_size, domain_ceiling); + let reduced_len = min(out_end - start * partial_size, length); + let partials_num = min(reduction_factor, partial_count - start); + + let mut partial_vec = Vec::new(); + for j in 0..partials_num { + let k = (start + j) * partial_size; + partial_vec.push(PolyData { + coeffs: work[k..(k + partial_lens[i + j])].to_vec(), + }); + } + + if partials_num > 1 { + let mut reduced_poly = self.reduce_partials(reduced_len, &partial_vec)?; + partial_lens[i] = reduced_poly.coeffs.len(); + reduced_poly.coeffs = pad_poly(&reduced_poly, partial_size * partials_num)?; + work.splice( + (start * partial_size) + ..(start * partial_size + reduced_poly.coeffs.len()), + reduced_poly.coeffs, + ); + } else { + partial_lens[i] = partial_lens[start]; + } + } + + partial_count = reduced_count; + } + + zero_poly = PolyData { coeffs: work }; + } + + match zero_poly.coeffs.len().cmp(&length) { + Ordering::Less => zero_poly.coeffs = pad_poly(&zero_poly, length)?, + Ordering::Greater => zero_poly.coeffs = zero_poly.coeffs[..length].to_vec(), + Ordering::Equal => {} + } + + zero_eval = self.fft_fr(&zero_poly.coeffs, false)?; + Ok((zero_eval, zero_poly)) + } +} diff --git a/arkworks3/tests/batch_adder.rs b/arkworks3/tests/batch_adder.rs new file mode 100644 index 000000000..d7deaba28 --- /dev/null +++ b/arkworks3/tests/batch_adder.rs @@ -0,0 +1,70 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::msm::batch_adder::{ + test_batch_add, test_batch_add_indexed, test_batch_add_indexed_single_bucket, + test_batch_add_step_n, test_phase_one_p_add_p, test_phase_one_p_add_q, + test_phase_one_p_add_q_twice, test_phase_one_zero_or_neg, test_phase_two_p_add_neg, + test_phase_two_p_add_p, test_phase_two_p_add_q, test_phase_two_zero_add_p, + }; + use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkG1, ArkG1Affine}; + + #[test] + fn test_phase_one_zero_or_neg_() { + test_phase_one_zero_or_neg::(); + } + + #[test] + fn test_phase_one_p_add_p_() { + test_phase_one_p_add_p::(); + } + + #[test] + fn test_phase_one_p_add_q_() { + test_phase_one_p_add_q::(); + } + + #[test] + fn test_phase_one_p_add_q_twice_() { + test_phase_one_p_add_q_twice::(); + } + + #[test] + fn test_phase_two_zero_add_p_() { + test_phase_two_zero_add_p::(); + } + + #[test] + fn test_phase_two_p_add_neg_() { + test_phase_two_p_add_neg::(); + } + + #[test] + fn test_phase_two_p_add_q_() { + test_phase_two_p_add_q::(); + } + + #[test] + pub fn test_phase_two_p_add_p_() { + test_phase_two_p_add_p::(); + } + + #[test] + fn test_batch_add_() { + test_batch_add::(); + } + + #[test] + fn test_batch_add_step_n_() { + test_batch_add_step_n::(); + } + + #[test] + fn test_batch_add_indexed_() { + test_batch_add_indexed::(); + } + + #[test] + fn test_batch_add_indexed_single_bucket_() { + test_batch_add_indexed_single_bucket::(); + } +} diff --git a/arkworks3/tests/bls12_381.rs b/arkworks3/tests/bls12_381.rs new file mode 100644 index 000000000..4c5031cef --- /dev/null +++ b/arkworks3/tests/bls12_381.rs @@ -0,0 +1,114 @@ +#[cfg(test)] +mod tests { + use kzg::common_utils::log_2_byte; + use kzg_bench::tests::bls12_381::*; + use rust_kzg_arkworks3::fft_g1::g1_linear_combination; + use rust_kzg_arkworks3::kzg_proofs::pairings_verify; + use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; + + #[test] + pub fn log_2_byte_works_() { + log_2_byte_works(&log_2_byte); + } + + #[test] + pub fn fr_is_zero_works_() { + fr_is_zero_works::(); + } + + #[test] + pub fn fr_is_one_works_() { + fr_is_one_works::(); + } + + #[test] + pub fn fr_from_uint64_works_() { + fr_from_uint64_works::(); + } + + #[test] + pub fn fr_equal_works_() { + fr_equal_works::(); + } + + #[test] + pub fn fr_negate_works_() { + fr_negate_works::(); + } + + #[test] + pub fn fr_pow_works_() { + fr_pow_works::(); + } + + #[test] + pub fn fr_div_works_() { + fr_div_works::(); + } + + #[test] + #[should_panic] + pub fn fr_div_by_zero_() { + fr_div_by_zero::(); + } + + #[test] + pub fn fr_uint64s_roundtrip_() { + fr_uint64s_roundtrip::(); + } + + #[test] + pub fn p1_mul_works_() { + p1_mul_works::(); + } + + #[test] + pub fn p1_sub_works_() { + p1_sub_works::(); + } + + #[test] + pub fn p2_add_or_dbl_works_() { + p2_add_or_dbl_works::(); + } + + #[test] + pub fn p2_mul_works_() { + p2_mul_works::(); + } + + #[test] + pub fn p2_sub_works_() { + p2_sub_works::(); + } + + #[test] + pub fn g1_identity_is_infinity_() { + g1_identity_is_infinity::(); + } + + #[test] + pub fn g1_identity_is_identity_() { + g1_identity_is_identity::(); + } + + #[test] + pub fn g1_make_linear_combination_() { + g1_make_linear_combination::(&g1_linear_combination); + } + + #[test] + pub fn g1_random_linear_combination_() { + g1_random_linear_combination::(&g1_linear_combination); + } + + #[test] + pub fn pairings_work_() { + pairings_work::(&pairings_verify); + } + + #[test] + pub fn fr_is_null_works_() { + fr_is_null_works::(); + } +} diff --git a/arkworks3/tests/bucket_msm.rs b/arkworks3/tests/bucket_msm.rs new file mode 100644 index 000000000..24a9395b8 --- /dev/null +++ b/arkworks3/tests/bucket_msm.rs @@ -0,0 +1,28 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::msm::bucket_msm::{ + test_process_point_and_slices_deal_three_points, + test_process_point_and_slices_glv_deal_two_points, + }; + use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkG1, ArkG1Affine, ArkG1ProjAddAffine}; + + #[test] + pub fn test_process_point_and_slices_deal_three_points_() { + test_process_point_and_slices_deal_three_points::< + ArkG1, + ArkFp, + ArkG1Affine, + ArkG1ProjAddAffine, + >(); + } + + #[test] + fn test_process_point_and_slices_glv_deal_two_points_() { + test_process_point_and_slices_glv_deal_two_points::< + ArkG1, + ArkFp, + ArkG1Affine, + ArkG1ProjAddAffine, + >(); + } +} diff --git a/arkworks3/tests/consts.rs b/arkworks3/tests/consts.rs new file mode 100644 index 000000000..20d237682 --- /dev/null +++ b/arkworks3/tests/consts.rs @@ -0,0 +1,36 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::consts::{ + expand_roots_is_plausible, new_fft_settings_is_plausible, roots_of_unity_are_plausible, + roots_of_unity_is_the_expected_size, roots_of_unity_out_of_bounds_fails, + }; + use rust_kzg_arkworks3::consts::SCALE2_ROOT_OF_UNITY; + use rust_kzg_arkworks3::kzg_proofs::expand_root_of_unity; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::ArkFr; + + #[test] + fn roots_of_unity_out_of_bounds_fails_() { + roots_of_unity_out_of_bounds_fails::(); + } + + #[test] + fn roots_of_unity_are_plausible_() { + roots_of_unity_are_plausible::(&SCALE2_ROOT_OF_UNITY); + } + + #[test] + fn expand_roots_is_plausible_() { + expand_roots_is_plausible::(&SCALE2_ROOT_OF_UNITY, &expand_root_of_unity); + } + + #[test] + fn new_fft_settings_is_plausible_() { + new_fft_settings_is_plausible::(); + } + + #[test] + fn roots_of_unity_is_the_expected_size_() { + roots_of_unity_is_the_expected_size(&SCALE2_ROOT_OF_UNITY); + } +} diff --git a/arkworks3/tests/das.rs b/arkworks3/tests/das.rs new file mode 100644 index 000000000..f4576684c --- /dev/null +++ b/arkworks3/tests/das.rs @@ -0,0 +1,16 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::das::{das_extension_test_known, das_extension_test_random}; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::ArkFr; + + #[test] + fn das_extension_test_known_() { + das_extension_test_known::(); + } + + #[test] + fn das_extension_test_random_() { + das_extension_test_random::(); + } +} diff --git a/arkworks3/tests/eip_4844.rs b/arkworks3/tests/eip_4844.rs new file mode 100644 index 000000000..dd0c8d47b --- /dev/null +++ b/arkworks3/tests/eip_4844.rs @@ -0,0 +1,345 @@ +#[cfg(test)] +mod tests { + use kzg::eip_4844::{ + blob_to_kzg_commitment_rust, blob_to_polynomial, bytes_to_blob, + compute_blob_kzg_proof_rust, compute_kzg_proof_rust, compute_powers, + evaluate_polynomial_in_evaluation_form, verify_blob_kzg_proof_batch_rust, + verify_blob_kzg_proof_rust, verify_kzg_proof_rust, + }; + use kzg::Fr; + use kzg_bench::tests::eip_4844::{ + blob_to_kzg_commitment_test, bytes_to_bls_field_test, + compute_and_verify_blob_kzg_proof_fails_with_incorrect_proof_test, + compute_and_verify_blob_kzg_proof_test, + compute_and_verify_kzg_proof_fails_with_incorrect_proof_test, + compute_and_verify_kzg_proof_round_trip_test, compute_kzg_proof_test, compute_powers_test, + verify_kzg_proof_batch_fails_with_incorrect_proof_test, verify_kzg_proof_batch_test, + }; + #[cfg(not(feature = "minimal-spec"))] + use kzg_bench::tests::eip_4844::{ + compute_and_verify_kzg_proof_within_domain_test, test_vectors_blob_to_kzg_commitment, + test_vectors_compute_blob_kzg_proof, test_vectors_compute_kzg_proof, + test_vectors_verify_blob_kzg_proof, test_vectors_verify_blob_kzg_proof_batch, + test_vectors_verify_kzg_proof, + }; + use rust_kzg_arkworks3::consts::SCALE2_ROOT_OF_UNITY; + use rust_kzg_arkworks3::eip_4844::load_trusted_setup_filename_rust; + use rust_kzg_arkworks3::kzg_proofs::{expand_root_of_unity, FFTSettings, KZGSettings}; + use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; + use rust_kzg_arkworks3::utils::PolyData; + + #[test] + pub fn bytes_to_bls_field_test_() { + bytes_to_bls_field_test::(); + } + + #[test] + pub fn compute_powers_test_() { + compute_powers_test::(&compute_powers); + } + + #[test] + pub fn blob_to_kzg_commitment_test_() { + blob_to_kzg_commitment_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + ); + } + + #[test] + pub fn compute_kzg_proof_test_() { + compute_kzg_proof_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &compute_kzg_proof_rust, + &blob_to_polynomial, + &evaluate_polynomial_in_evaluation_form, + ); + } + + #[test] + pub fn compute_and_verify_kzg_proof_round_trip_test_() { + compute_and_verify_kzg_proof_round_trip_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_kzg_proof_rust, + &blob_to_polynomial, + &evaluate_polynomial_in_evaluation_form, + &verify_kzg_proof_rust, + ); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn compute_and_verify_kzg_proof_within_domain_test_() { + compute_and_verify_kzg_proof_within_domain_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_kzg_proof_rust, + &blob_to_polynomial, + &evaluate_polynomial_in_evaluation_form, + &verify_kzg_proof_rust, + ); + } + + #[test] + pub fn compute_and_verify_kzg_proof_fails_with_incorrect_proof_test_() { + compute_and_verify_kzg_proof_fails_with_incorrect_proof_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_kzg_proof_rust, + &blob_to_polynomial, + &evaluate_polynomial_in_evaluation_form, + &verify_kzg_proof_rust, + ); + } + + #[test] + pub fn compute_and_verify_blob_kzg_proof_test_() { + compute_and_verify_blob_kzg_proof_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_blob_kzg_proof_rust, + &verify_blob_kzg_proof_rust, + ); + } + + #[test] + pub fn compute_and_verify_blob_kzg_proof_fails_with_incorrect_proof_test_() { + compute_and_verify_blob_kzg_proof_fails_with_incorrect_proof_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_blob_kzg_proof_rust, + &verify_blob_kzg_proof_rust, + ); + } + + #[test] + pub fn verify_kzg_proof_batch_test_() { + verify_kzg_proof_batch_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_blob_kzg_proof_rust, + &verify_blob_kzg_proof_batch_rust, + ); + } + + #[test] + pub fn verify_kzg_proof_batch_fails_with_incorrect_proof_test_() { + verify_kzg_proof_batch_fails_with_incorrect_proof_test::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + &compute_blob_kzg_proof_rust, + &verify_blob_kzg_proof_batch_rust, + ); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn test_vectors_blob_to_kzg_commitment_() { + test_vectors_blob_to_kzg_commitment::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &blob_to_kzg_commitment_rust, + &bytes_to_blob, + ); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn test_vectors_compute_kzg_proof_() { + test_vectors_compute_kzg_proof::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &compute_kzg_proof_rust, + &bytes_to_blob, + ); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn test_vectors_compute_blob_kzg_proof_() { + test_vectors_compute_blob_kzg_proof::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &bytes_to_blob, + &compute_blob_kzg_proof_rust, + ); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn test_vectors_verify_kzg_proof_() { + test_vectors_verify_kzg_proof::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >(&load_trusted_setup_filename_rust, &verify_kzg_proof_rust); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn test_vectors_verify_blob_kzg_proof_() { + test_vectors_verify_blob_kzg_proof::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &bytes_to_blob, + &verify_blob_kzg_proof_rust, + ); + } + + #[cfg(not(feature = "minimal-spec"))] + #[test] + pub fn test_vectors_verify_blob_kzg_proof_batch_() { + test_vectors_verify_blob_kzg_proof_batch::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >( + &load_trusted_setup_filename_rust, + &bytes_to_blob, + &verify_blob_kzg_proof_batch_rust, + ); + } + + #[test] + pub fn expand_root_of_unity_too_long() { + let out = expand_root_of_unity(&ArkFr::from_u64_arr(&SCALE2_ROOT_OF_UNITY[1]), 1); + assert!(out.is_err()); + } + + #[test] + pub fn expand_root_of_unity_too_short() { + let out = expand_root_of_unity(&ArkFr::from_u64_arr(&SCALE2_ROOT_OF_UNITY[1]), 3); + assert!(out.is_err()); + } +} diff --git a/arkworks3/tests/fft_fr.rs b/arkworks3/tests/fft_fr.rs new file mode 100644 index 000000000..0c778d71e --- /dev/null +++ b/arkworks3/tests/fft_fr.rs @@ -0,0 +1,29 @@ +mod batch_adder; + +#[cfg(test)] +mod tests { + use kzg_bench::tests::fft_fr::{compare_sft_fft, inverse_fft, roundtrip_fft, stride_fft}; + use rust_kzg_arkworks3::fft::{fft_fr_fast, fft_fr_slow}; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::ArkFr; + + #[test] + fn compare_sft_fft_() { + compare_sft_fft::(&fft_fr_slow, &fft_fr_fast); + } + + #[test] + fn roundtrip_fft_() { + roundtrip_fft::(); + } + + #[test] + fn inverse_fft_() { + inverse_fft::(); + } + + #[test] + fn stride_fft_() { + stride_fft::(); + } +} diff --git a/arkworks3/tests/fft_g1.rs b/arkworks3/tests/fft_g1.rs new file mode 100644 index 000000000..89e15c590 --- /dev/null +++ b/arkworks3/tests/fft_g1.rs @@ -0,0 +1,22 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::fft_g1::{compare_sft_fft, roundtrip_fft, stride_fft}; + use rust_kzg_arkworks3::fft_g1::{fft_g1_fast, fft_g1_slow, make_data}; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::{ArkFr, ArkG1}; + + #[test] + fn roundtrip_fft_() { + roundtrip_fft::(&make_data); + } + + #[test] + fn stride_fft_() { + stride_fft::(&make_data); + } + + #[test] + fn compare_sft_fft_() { + compare_sft_fft::(&fft_g1_slow, &fft_g1_fast, &make_data); + } +} diff --git a/arkworks3/tests/fk20_proofs.rs b/arkworks3/tests/fk20_proofs.rs new file mode 100644 index 000000000..c9415ab3f --- /dev/null +++ b/arkworks3/tests/fk20_proofs.rs @@ -0,0 +1,100 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::fk20_proofs::*; + + use rust_kzg_arkworks3::fk20_proofs::{KzgFK20MultiSettings, KzgFK20SingleSettings}; + use rust_kzg_arkworks3::kzg_proofs::{generate_trusted_setup, FFTSettings, KZGSettings}; + use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr as BlstFr, ArkG1Affine}; + use rust_kzg_arkworks3::kzg_types::{ArkG1, ArkG2}; + use rust_kzg_arkworks3::utils::PolyData; + + #[test] + fn test_fk_single() { + fk_single::< + BlstFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20SingleSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + + #[test] + fn test_fk_single_strided() { + fk_single_strided::< + BlstFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20SingleSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + + #[test] + fn test_fk_multi_settings() { + fk_multi_settings::< + BlstFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20MultiSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + + #[test] + fn test_fk_multi_chunk_len_1_512() { + fk_multi_chunk_len_1_512::< + BlstFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20MultiSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + + #[test] + fn test_fk_multi_chunk_len_16_512() { + fk_multi_chunk_len_16_512::< + BlstFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20MultiSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + + #[test] + fn test_fk_multi_chunk_len_16_16() { + fk_multi_chunk_len_16_16::< + BlstFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + KzgFK20MultiSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } +} diff --git a/arkworks3/tests/kzg_proofs.rs b/arkworks3/tests/kzg_proofs.rs new file mode 100644 index 000000000..a31e5ce95 --- /dev/null +++ b/arkworks3/tests/kzg_proofs.rs @@ -0,0 +1,49 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::kzg_proofs::{ + commit_to_nil_poly, commit_to_too_long_poly_returns_err, proof_multi, proof_single, + }; + use rust_kzg_arkworks3::kzg_proofs::{generate_trusted_setup, FFTSettings, KZGSettings}; + use rust_kzg_arkworks3::kzg_types::{ArkFp, ArkFr, ArkG1, ArkG1Affine, ArkG2}; + use rust_kzg_arkworks3::utils::PolyData; + + #[test] + fn proof_single_() { + proof_single::( + &generate_trusted_setup, + ); + } + #[test] + fn commit_to_nil_poly_() { + commit_to_nil_poly::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + #[test] + fn commit_to_too_long_poly_() { + commit_to_too_long_poly_returns_err::< + ArkFr, + ArkG1, + ArkG2, + PolyData, + FFTSettings, + KZGSettings, + ArkFp, + ArkG1Affine, + >(&generate_trusted_setup); + } + + #[test] + fn proof_multi_() { + proof_multi::( + &generate_trusted_setup, + ); + } +} diff --git a/arkworks3/tests/msm.rs b/arkworks3/tests/msm.rs new file mode 100644 index 000000000..40a8e5ea7 --- /dev/null +++ b/arkworks3/tests/msm.rs @@ -0,0 +1,27 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::msm::msm_slice::{ + test_msm_slice_window_size_1, test_msm_slice_window_size_16, test_msm_slice_window_size_2, + test_msm_slice_window_size_3, + }; + + #[test] + pub fn test_msm_slice_window_size_1_() { + test_msm_slice_window_size_1() + } + + #[test] + fn test_msm_slice_window_size_2_() { + test_msm_slice_window_size_2(); + } + + #[test] + fn test_msm_slice_window_size_3_() { + test_msm_slice_window_size_3(); + } + + #[test] + fn test_msm_slice_window_size_16_() { + test_msm_slice_window_size_16(); + } +} diff --git a/arkworks3/tests/poly.rs b/arkworks3/tests/poly.rs new file mode 100644 index 000000000..4460ffdf1 --- /dev/null +++ b/arkworks3/tests/poly.rs @@ -0,0 +1,83 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::poly::{ + create_poly_of_length_ten, poly_div_by_zero, poly_div_fast_test, poly_div_long_test, + poly_div_random, poly_eval_0_check, poly_eval_check, poly_eval_nil_check, + poly_inverse_simple_0, poly_inverse_simple_1, poly_mul_direct_test, poly_mul_fft_test, + poly_mul_random, poly_test_div, + }; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::ArkFr; + use rust_kzg_arkworks3::utils::PolyData; + + #[test] + fn create_poly_of_length_ten_() { + create_poly_of_length_ten::(); + } + + #[test] + fn poly_eval_check_() { + poly_eval_check::(); + } + + #[test] + fn poly_eval_0_check_() { + poly_eval_0_check::(); + } + + #[test] + fn poly_eval_nil_check_() { + poly_eval_nil_check::(); + } + + #[test] + fn poly_inverse_simple_0_() { + poly_inverse_simple_0::(); + } + + #[test] + fn poly_inverse_simple_1_() { + poly_inverse_simple_1::(); + } + + #[test] + fn poly_test_div_() { + poly_test_div::(); + } + + #[test] + #[should_panic] + fn poly_div_by_zero_() { + poly_div_by_zero::(); + } + + #[test] + fn poly_mul_direct_test_() { + poly_mul_direct_test::(); + } + + #[test] + fn poly_mul_fft_test_() { + poly_mul_fft_test::(); + } + + #[test] + fn poly_mul_random_() { + poly_mul_random::(); + } + + #[test] + fn poly_div_random_() { + poly_div_random::(); + } + + #[test] + fn poly_div_long_test_() { + poly_div_long_test::() + } + + #[test] + fn poly_div_fast_test_() { + poly_div_fast_test::() + } +} diff --git a/arkworks3/tests/recover.rs b/arkworks3/tests/recover.rs new file mode 100644 index 000000000..9f53d88a3 --- /dev/null +++ b/arkworks3/tests/recover.rs @@ -0,0 +1,23 @@ +#[cfg(test)] +mod recover_tests { + use kzg_bench::tests::recover::*; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::ArkFr as Fr; + use rust_kzg_arkworks3::utils::PolyData; + + #[test] + fn recover_simple_() { + recover_simple::(); + } + + //Could be not working because of zero poly. + #[test] + fn recover_random_() { + recover_random::(); + } + + #[test] + fn more_than_half_missing_() { + more_than_half_missing::(); + } +} diff --git a/arkworks3/tests/zero_poly.rs b/arkworks3/tests/zero_poly.rs new file mode 100644 index 000000000..a28463325 --- /dev/null +++ b/arkworks3/tests/zero_poly.rs @@ -0,0 +1,45 @@ +#[cfg(test)] +mod tests { + use kzg_bench::tests::zero_poly::{ + check_test_data, reduce_partials_random, test_reduce_partials, zero_poly_252, + zero_poly_all_but_one, zero_poly_known, zero_poly_random, + }; + use rust_kzg_arkworks3::kzg_proofs::FFTSettings; + use rust_kzg_arkworks3::kzg_types::ArkFr; + use rust_kzg_arkworks3::utils::PolyData; + + #[test] + fn test_reduce_partials_() { + test_reduce_partials::(); + } + + #[test] + fn reduce_partials_random_() { + reduce_partials_random::(); + } + + #[test] + fn check_test_data_() { + check_test_data::(); + } + + #[test] + fn zero_poly_known_() { + zero_poly_known::(); + } + + #[test] + fn zero_poly_random_() { + zero_poly_random::(); + } + + #[test] + fn zero_poly_all_but_one_() { + zero_poly_all_but_one::(); + } + + #[test] + fn zero_poly_252_() { + zero_poly_252::(); + } +} diff --git a/benchmark_script/README.md b/benchmark_script/README.md new file mode 100644 index 000000000..f4a0f1145 --- /dev/null +++ b/benchmark_script/README.md @@ -0,0 +1,247 @@ +# How to produce benchmark images (on Linux) + +## Prerequisites + +* Python interpreter +* Package `texlive-full` (should also install `xelatex`) + +## TLDR + +### 1. Run the Python script + +```bash +python3.11 main.py +``` + +that will parse the input file from the `input` directory and produce Latex files in the `output` directory. + +### 2. Generate benchmark images + +Inside the `output` directory, run the following command: + +```bash +make all +``` + +## In depth + +### 1. Obtain benchmark results file + +1. Setup `Linode` compute instance and SSH into it +3. Clone the `rust-kzg` repository +4. Setup the server following the instructions in `run-benchmarks.sh` +5. Disconnect from the server, then connect to it again using the `Mosh` shell +6. Run `run-benchmarks.sh` + +![Obtaining benchmark results file](images/Screenshot_20230426_151300.png) + +Once the script finishes running, download the results to your host machine using wget, e.g. + +```bash +wget https://paste.c-net.org/ScrutinyConsult +``` + +Alternatives to Linode for those using Windows: + +* Docker +* WSL + +### 2. About benchmark results file + +Inside the `input` directory, I left two files, namely `TendencyDoable-original` and `TendencyDoable-edited`. The former is what I downloaded through wget, while for the latter, I had to make slight changes. At the top of the Python script, I put this explanation: `fit rust benchmarks time into a single line separated by a whitespace`. To illustrate this change, consider the following benchmark snippet (`verify_blob_kzg_proof_batch/64` and `time: [115.09 ms 115.26 ms 115.45 ms]` are separated by a single whitespace): + +`TendencyDoable-original`: + +```text +verify_blob_kzg_proof_batch/64 + time: [115.09 ms 115.26 ms 115.45 ms] + thrpt: [554.38 elem/s 555.26 elem/s 556.07 elem/s] +Found 3 outliers among 100 measurements (3.00%) +``` + +`TendencyDoable-edited`: + +```text +verify_blob_kzg_proof_batch/64 time: [115.09 ms 115.26 ms 115.45 ms] + thrpt: [554.38 elem/s 555.26 elem/s 556.07 elem/s] +Found 3 outliers among 100 measurements (3.00%) +``` + +`Rayon` doesn't have an option to fit benchmark names into a single line, so the choice is to either keep the benchmark names very small or to preprocess the benchmark results file. + +### 3. The Python script + +At the top of the file, define the benchmark results input file: + +```text +BENCH_FILE = 'TendencyDoable-edited' +``` + +I use these variables + +```text +RUST_KZG_BENCH_COUNT = 21 # -2 fk20 benchmarks +GO_KZG_BENCH_COUNT = 19 +OTHER_BENCH_COUNT = 12 +``` + +to check that every array that I append the parsed results to, such as `c_kzg_4844_rust_binding_cpu_1 = []`, has a predefined amount of results and to figure out which array to append these results to. + +At line 678 and forward, you'll find this big chunk of comment that begins like this: + +```text +* go-kzg-4844 = [ + [0] Benchmark/BlobToKZGCommitment + [1] Benchmark/ComputeKZGProof + [2] Benchmark/ComputeBlobKZGProof +``` + +where `[0]`, `[1]`, etc., is what I pass to functions, such as + +``` +make_rust_kzg_latex_from_data("das_extension", "KZG", "ms", 0, index=0) +``` + +to denote at which array position (index) results of the same type are, because benchmarks in rust-kzg, go-kzg-4844, and c-kzg-4844 don't appear in the same order in the input file; they even begin with different names. + +That's the gist of the Python script. Once you run it, you'll see the following output: + +![Python script output](images/Screenshot_20231130_214952.png) + +It's important that the array values match the content of the benchmark results input file. + +### 4. Benchmark images + +The Python script will generate all these Latex files in the `output` directory. We then use `Makefile` and `xelatex` to render them: + +![Latex files](images/Screenshot_20231130_215550.png) + +### 5. Side-by-side benchmark images + +In order to generate side-by-side graphs like this: + +![Latex files](images/verify_blob_kzg_proof_batch_64.png) + +I used the following Latex code: + +```latex +\begin{figure}[h] + \centering + \hspace*{-1cm}\subfloat[][Verify blob KZG proof batch (count=64, parallel)]{\resizebox{0.55\textwidth}{!}{ +%---------------------------------------------------------------------- +\begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=259.666, %%% change this + ylabel near ticks, + yticklabel pos=right, + ylabel={time (ms)}, %%% change this + grid = major, + grid style=dashed, + ] + %%% rust-kzg with zkcrypto backend + \addlegendentry{rust-kzg with zkcrypto backend} + \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + (1 core, 226.01) + (2 cores, 114.01) + (4 cores, 62.622) + (8 cores, 45.076) + (16 cores, 42.269) }; + %%% rust-kzg with blst backend + \addlegendentry{rust-kzg with blst backend} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, 106.29) + (2 cores, 52.307) + (4 cores, 32.279) + (8 cores, 23.525) + (16 cores, 18.397) }; + %%% rust-kzg with mcl backend + \addlegendentry{rust-kzg with mcl backend} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + (1 core, 236.06) + (2 cores, 113.92) + (4 cores, 65.031) + (8 cores, 48.163) + (16 cores, 33.903) }; + +\end{axis} +\end{tikzpicture} +%---------------------------------------------------------------------- + }} + % A blank line here like a new paragraph so next picture is placed below + \subfloat[][Verify blob KZG proof batch (count=64, native vs bindings)]{\resizebox{0.5\textwidth}{!}{ +%---------------------------------------------------------------------- +\begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=214.7225861, %%% change this + ylabel near ticks, + yticklabel pos=right, + ylabel={time (ms)}, %%% change this + grid = major, + grid style=dashed, + ] + %%% rust-kzg with blst backend + \addlegendentry{rust-kzg with blst backend} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, 106.29) + (2 cores, 52.307) + (4 cores, 32.279) + (8 cores, 23.525) + (16 cores, 18.397) }; + %%% go-kzg-4844 (VerifyBlobKZGProofBatch) + \addlegendentry{go-kzg-4844 (VerifyBlobKZGProofBatch)} % TODO: pick new name + \addplot[mark=*, mark options={scale=1.5}, thick, teal] coordinates { + (1 core, 109.274459) + (2 cores, 109.117014) + (4 cores, 103.164998) + (8 cores, 104.680149) + (16 cores, 105.648774) }; + %%% go-kzg-4844 (VerifyBlobKZGProofBatchPar) + \addlegendentry{go-kzg-4844 (VerifyBlobKZGProofBatchPar)} % TODO: pick new name + \addplot[mark=*, mark options={scale=1.5}, thick, cyan] coordinates { + (1 core, 195.202351) + (2 cores, 107.22205) + (4 cores, 72.424288) + (8 cores, 57.183459) + (16 cores, 48.036951) }; + %%% rust binding (c-kzg-4844) + \addlegendentry{rust binding (c-kzg-4844)} + \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + (1 core, 115.26) + (2 cores, 112.03) + (4 cores, 111.98) + (8 cores, 113.25) + (16 cores, 113.08) }; + %%% rust binding (rust-kzg with blst backend) + \addlegendentry{rust binding (rust-kzg with blst backend)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, 140.33) + (2 cores, 70.553) + (4 cores, 47.982) + (8 cores, 36.909) + (16 cores, 29.82) }; + %%% go binding (rust-kzg with blst backend) + \addlegendentry{go binding (rust-kzg with blst backend)} + \addplot[mark=*, mark options={scale=1.5}, thick, blue] coordinates { + (1 core, 137.332656) + (2 cores, 67.693732) + (4 cores, 47.14144) + (8 cores, 36.172303) + (16 cores, 30.163846) }; + +\end{axis} +\end{tikzpicture} +%---------------------------------------------------------------------- + }} + \caption{Performance comparison of verify blob KZG proof batch (count=64)} + \end{figure} +``` + +`\hspace*{-1cm}` and `\resizebox{0.55\textwidth}` play a role here, so be sure to experiment with these two. diff --git a/benchmark_script/images/Screenshot_20230426_151300.png b/benchmark_script/images/Screenshot_20230426_151300.png new file mode 100644 index 000000000..81f734d3f Binary files /dev/null and b/benchmark_script/images/Screenshot_20230426_151300.png differ diff --git a/benchmark_script/images/Screenshot_20231130_214952.png b/benchmark_script/images/Screenshot_20231130_214952.png new file mode 100644 index 000000000..e3925f818 Binary files /dev/null and b/benchmark_script/images/Screenshot_20231130_214952.png differ diff --git a/benchmark_script/images/Screenshot_20231130_215550.png b/benchmark_script/images/Screenshot_20231130_215550.png new file mode 100644 index 000000000..f237af46a Binary files /dev/null and b/benchmark_script/images/Screenshot_20231130_215550.png differ diff --git a/images/verify_blob_kzg_proof_batch_64.png b/benchmark_script/images/verify_blob_kzg_proof_batch_64.png similarity index 100% rename from images/verify_blob_kzg_proof_batch_64.png rename to benchmark_script/images/verify_blob_kzg_proof_batch_64.png diff --git a/benchmark_script/input/graphs/cuda_eip_graph_template.tex b/benchmark_script/input/graphs/cuda_eip_graph_template.tex new file mode 100644 index 000000000..07eacffeb --- /dev/null +++ b/benchmark_script/input/graphs/cuda_eip_graph_template.tex @@ -0,0 +1,70 @@ +\documentclass[border=2pt]{standalone} +\usepackage{graphicx} +\usepackage{pgfplots} +\pgfplotsset{compat=1.14, % <-- added + width=\columnwidth, % <-- added + height=0.75\columnwidth % <-- added, with this the image is in aspect 4:3 + } +\usepackage{subfig} +\usepackage[export]{adjustbox} +\begin{document} +\hbox{ + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={CPU (16 cores), Tesla T4, NVIDIA L4}, + xtick=data, + % x tick label style={rotate=30, anchor=east}, + ymin=0, + enlarge x limits=0.3, + ybar, + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, + grid = major, + grid style=dashed, + ] + + \addlegendentry{blst (parallel, BGMW)} + \addplot coordinates { + (CPU (16 cores), ${16>rust-kzg with blst backend (parallel, bgmw)}) + (Tesla T4, ${Tesla T4>rust-kzg with blst backend (parallel, bgmw)}) + (NVIDIA L4, ${NVIDIA L4>rust-kzg with blst backend (parallel, bgmw)}) + }; + + \addlegendentry{arkworks 0.4.0 (parallel, BGMW)} + \addplot coordinates { + (CPU (16 cores), ${16>rust-kzg with arkworks backend (parallel, bgmw)}) + (Tesla T4, ${Tesla T4>rust-kzg with arkworks backend (parallel, bgmw)}) + (NVIDIA L4, ${NVIDIA L4>rust-kzg with arkworks backend (parallel, bgmw)}) + }; + + \addlegendentry{arkworks 0.3.0 (parallel)} + \addplot coordinates { + (Tesla T4, ${Tesla T4>rust-kzg with arkworks3 backend (parallel)}) + (NVIDIA L4, ${NVIDIA L4>rust-kzg with arkworks3 backend (parallel)}) + }; + + \addlegendentry{blst (sppark)} + \addplot coordinates { + (Tesla T4, ${Tesla T4>rust-kzg with blst backend (sppark)}) + (NVIDIA L4, ${NVIDIA L4>rust-kzg with blst backend (sppark)}) + }; + + \addlegendentry{arkworks 0.3.0 (sppark)} + \addplot coordinates { + (Tesla T4, ${Tesla T4>rust-kzg with arkworks3 backend (sppark)}) + (NVIDIA L4, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark)}) + }; + + \addlegendentry{arkworks 0.3.0 (sppark wlc)} + \addplot coordinates { + (NVIDIA L4, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark_wlc)}) + }; + + \end{axis} + \end{tikzpicture} + }% +} +\end{document} \ No newline at end of file diff --git a/benchmark_script/input/graphs/cuda_msm_graph_template.tex b/benchmark_script/input/graphs/cuda_msm_graph_template.tex new file mode 100644 index 000000000..4c8ec1810 --- /dev/null +++ b/benchmark_script/input/graphs/cuda_msm_graph_template.tex @@ -0,0 +1,70 @@ +\documentclass[border=2pt]{standalone} +\usepackage{graphicx} +\usepackage{pgfplots} +\usepackage{subfig} +\usepackage{pdflscape} +\usepackage[export]{adjustbox} +\begin{document} +\hbox{ + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={$2^{12}$, $2^{14}$, $2^{16}$, $2^{18}$}, + xtick=data, + % x tick label style={rotate=45, anchor=east}, + ymin=0, + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, + xlabel={MSM size}, + grid = major, + grid style=dashed, + ] + + \addlegendentry{rust-kzg with blst backend (parallel, BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + ($2^{12}$, ${NVIDIA L4>rust-kzg with blst backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '4096'}) + ($2^{14}$, ${NVIDIA L4>rust-kzg with blst backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '16384'}) + ($2^{16}$, ${NVIDIA L4>rust-kzg with blst backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '65536'}) + ($2^{18}$, ${NVIDIA L4>rust-kzg with blst backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '262144'}) }; + + \addlegendentry{rust-kzg with blst backend (sppark)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + ($2^{12}$, ${NVIDIA L4>rust-kzg with blst backend (sppark)>bench_g1_lincomb points: '4096'}) + ($2^{14}$, ${NVIDIA L4>rust-kzg with blst backend (sppark)>bench_g1_lincomb points: '16384'}) + ($2^{16}$, ${NVIDIA L4>rust-kzg with blst backend (sppark)>bench_g1_lincomb points: '65536'}) + ($2^{18}$, ${NVIDIA L4>rust-kzg with blst backend (sppark)>bench_g1_lincomb points: '262144'}) }; + + \addlegendentry{rust-kzg with arkworks 0.4.0 backend (parallel, BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, purple] coordinates { + ($2^{12}$, ${NVIDIA L4>rust-kzg with arkworks backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '4096'}) + ($2^{14}$, ${NVIDIA L4>rust-kzg with arkworks backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '16384'}) + ($2^{16}$, ${NVIDIA L4>rust-kzg with arkworks backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '65536'}) + ($2^{18}$, ${NVIDIA L4>rust-kzg with arkworks backend (parallel, bgmw)>bench_g1_lincomb with precomputation points: '262144'}) }; + + \addlegendentry{rust-kzg with arkworks 0.3.0 backend (parallel)} + \addplot[mark=*, mark options={scale=1.5}, thick, blue] coordinates { + ($2^{12}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (parallel)>bench_g1_lincomb points: '4096'}) + ($2^{14}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (parallel)>bench_g1_lincomb points: '16384'}) + ($2^{16}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (parallel)>bench_g1_lincomb points: '65536'}) + ($2^{18}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (parallel)>bench_g1_lincomb points: '262144'}) }; + + \addlegendentry{rust-kzg with arkworks3 backend (sppark)} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + ($2^{12}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark)>bench_g1_lincomb points: '4096'}) + ($2^{14}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark)>bench_g1_lincomb points: '16384'}) + ($2^{16}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark)>bench_g1_lincomb points: '65536'}) + ($2^{18}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark)>bench_g1_lincomb points: '262144'}) }; + + \addlegendentry{rust-kzg with arkworks3 backend (wlc)} + \addplot[mark=*, mark options={scale=1.5}, thick, cyan] coordinates { + ($2^{12}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark_wlc)>bench_g1_lincomb points: '4096'}) + ($2^{14}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark_wlc)>bench_g1_lincomb points: '16384'}) + ($2^{16}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark_wlc)>bench_g1_lincomb points: '65536'}) + ($2^{18}$, ${NVIDIA L4>rust-kzg with arkworks3 backend (sppark_wlc)>bench_g1_lincomb points: '262144'}) }; + \end{axis} + \end{tikzpicture} + } +} +\end{document} diff --git a/benchmark_script/input/graphs/eip_graph_template.tex b/benchmark_script/input/graphs/eip_graph_template.tex new file mode 100644 index 000000000..6124da5b8 --- /dev/null +++ b/benchmark_script/input/graphs/eip_graph_template.tex @@ -0,0 +1,140 @@ +\documentclass[border=2pt]{standalone} +\usepackage{graphicx} +\usepackage{pgfplots} +\usepackage{subfig} +\usepackage{pdflscape} +\usepackage[export]{adjustbox} +\begin{document} +\hbox{ + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, + grid = major, + grid style=dashed, + ] + %%% rust-kzg with zkcrypto backend + \addlegendentry{rust-kzg with zkcrypto backend} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + (1 core, ${1>rust-kzg with zkcrypto backend (parallel)}) + (2 cores, ${2>rust-kzg with zkcrypto backend (parallel)}) + (4 cores, ${4>rust-kzg with zkcrypto backend (parallel)}) + (8 cores, ${8>rust-kzg with zkcrypto backend (parallel)}) + (16 cores, ${16>rust-kzg with zkcrypto backend (parallel)}) }; + %%% rust-kzg with blst backend + \addlegendentry{rust-kzg with blst backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, ${1>rust-kzg with blst backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with blst backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with blst backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with blst backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with blst backend (parallel, bgmw)}) }; + + \addlegendentry{rust-kzg with constantine backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, ${1>rust-kzg with constantine backend (parallel)}) + (2 cores, ${2>rust-kzg with constantine backend (parallel)}) + (4 cores, ${4>rust-kzg with constantine backend (parallel)}) + (8 cores, ${8>rust-kzg with constantine backend (parallel)}) + (16 cores, ${16>rust-kzg with constantine backend (parallel)}) }; + + \addlegendentry{rust-kzg with arkworks backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + (1 core, ${1>rust-kzg with arkworks backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with arkworks backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with arkworks backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with arkworks backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with arkworks backend (parallel, bgmw)}) }; + %%% rust-kzg with mcl backend + %\addlegendentry{rust-kzg with mcl backend} + %\addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + % (1 core, 236.06) + % (2 cores, 113.92) + % (4 cores, 65.031) + % (8 cores, 48.163) + % (16 cores, 33.903) }; + + \end{axis} + \end{tikzpicture} + }% + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=${max_time_2}, + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, + grid = major, + grid style=dashed, + ] + %%% rust-kzg with blst backend + \addlegendentry{rust-kzg with blst backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, ${1>rust-kzg with blst backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with blst backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with blst backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with blst backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with blst backend (parallel, bgmw)}) }; + \addlegendentry{rust-kzg with constantine backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, ${1>rust-kzg with constantine backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with constantine backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with constantine backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with constantine backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with constantine backend (parallel, bgmw)}) }; + %%% go-kzg-4844 (VerifyBlobKZGProofBatch) + \addlegendentry{go-kzg-4844} + \addplot[mark=*, mark options={scale=1.5}, thick, cyan] coordinates { + (1 core, ${1>go-kzg-4844}) + (2 cores, ${2>go-kzg-4844}) + (4 cores, ${4>go-kzg-4844}) + (8 cores, ${8>go-kzg-4844}) + (16 cores, ${16>go-kzg-4844}) }; + %%% rust binding (c-kzg-4844) + \addlegendentry{rust binding (c-kzg-4844)} + \addplot[mark=*, mark options={scale=1.5}, thick, purple] coordinates { + (1 core, ${1>rust binding (c-kzg-4844)}) + (2 cores, ${2>rust binding (c-kzg-4844)}) + (4 cores, ${4>rust binding (c-kzg-4844)}) + (8 cores, ${8>rust binding (c-kzg-4844)}) + (16 cores, ${16>rust binding (c-kzg-4844)}) }; + %%% rust binding (rust-kzg with blst backend) + \addlegendentry{rust binding (rust-kzg with blst backend)} + \addplot[mark=*, mark options={scale=1.5}, thick, pink] coordinates { + (1 core, ${1>rust binding (rust-kzg with blst backend)}) + (2 cores, ${2>rust binding (rust-kzg with blst backend)}) + (4 cores, ${4>rust binding (rust-kzg with blst backend)}) + (8 cores, ${8>rust binding (rust-kzg with blst backend)}) + (16 cores, ${16>rust binding (rust-kzg with blst backend)}) }; + %%% go binding (rust-kzg with blst backend) + \addlegendentry{go binding (rust-kzg with blst backend)} + \addplot[mark=*, mark options={scale=1.5}, thick, blue] coordinates { + (1 core, ${1>go binding (rust-kzg with blst backend)}) + (2 cores, ${2>go binding (rust-kzg with blst backend)}) + (4 cores, ${4>go binding (rust-kzg with blst backend)}) + (8 cores, ${8>go binding (rust-kzg with blst backend)}) + (16 cores, ${16>go binding (rust-kzg with blst backend)}) }; + + \addlegendentry{constantine} + \addplot[mark=*, mark options={scale=1.5}, thick, yellow] coordinates { + (1 core, ${1>constantine}) + (2 cores, ${2>constantine}) + (4 cores, ${4>constantine}) + (8 cores, ${8>constantine}) + (16 cores, ${16>constantine}) }; + \end{axis} + \end{tikzpicture} + } +} +\end{document} diff --git a/benchmark_script/input/graphs/fft_graph_template.tex b/benchmark_script/input/graphs/fft_graph_template.tex new file mode 100644 index 000000000..f599912dc --- /dev/null +++ b/benchmark_script/input/graphs/fft_graph_template.tex @@ -0,0 +1,108 @@ +\documentclass[border=2pt]{standalone} +\usepackage{graphicx} +\usepackage{pgfplots} +\usepackage{subfig} +\usepackage{pdflscape} +\usepackage[export]{adjustbox} +\begin{document} +\hbox{ + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=${max_time}, %%% change this + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, %%% change this + grid = major, + grid style=dashed, + ] + %%% rust-kzg with zkcrypto backend + \addlegendentry{rust-kzg with zkcrypto backend} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + (1 core, ${1>rust-kzg with zkcrypto backend (parallel)>bench_fft_fr scale: '15'}) + (2 cores, ${2>rust-kzg with zkcrypto backend (parallel)>bench_fft_fr scale: '15'}) + (4 cores, ${4>rust-kzg with zkcrypto backend (parallel)>bench_fft_fr scale: '15'}) + (8 cores, ${8>rust-kzg with zkcrypto backend (parallel)>bench_fft_fr scale: '15'}) + (16 cores, ${16>rust-kzg with zkcrypto backend (parallel)>bench_fft_fr scale: '15'}) }; + %%% rust-kzg with blst backend + \addlegendentry{rust-kzg with blst backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, ${1>rust-kzg with blst backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + (2 cores, ${2>rust-kzg with blst backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + (4 cores, ${4>rust-kzg with blst backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + (8 cores, ${8>rust-kzg with blst backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + (16 cores, ${16>rust-kzg with blst backend (parallel, bgmw)>bench_fft_fr scale: '15'}) }; + + \addlegendentry{rust-kzg with constantine backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, ${1>rust-kzg with constantine backend (parallel)>bench_fft_fr scale: '15'}) + (2 cores, ${2>rust-kzg with constantine backend (parallel)>bench_fft_fr scale: '15'}) + (4 cores, ${4>rust-kzg with constantine backend (parallel)>bench_fft_fr scale: '15'}) + (8 cores, ${8>rust-kzg with constantine backend (parallel)>bench_fft_fr scale: '15'}) + (16 cores, ${16>rust-kzg with constantine backend (parallel)>bench_fft_fr scale: '15'}) }; + + % \addlegendentry{rust-kzg with arkworks backend (BGMW)} + % \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + % (1 core, ${1>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + % (2 cores, ${2>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + % (4 cores, ${4>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + % (8 cores, ${8>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_fr scale: '15'}) + % (16 cores, ${16>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_fr scale: '15'}) }; + \end{axis} + \end{tikzpicture} + }% + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=${max_time_2}, %%% change this + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit_2})}, %%% change this + grid = major, + grid style=dashed, + ] + %%% rust-kzg with zkcrypto backend + \addlegendentry{rust-kzg with zkcrypto backend} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + (1 core, ${1>rust-kzg with zkcrypto backend (parallel)>bench_fft_g1 scale: '15'}) + (2 cores, ${2>rust-kzg with zkcrypto backend (parallel)>bench_fft_g1 scale: '15'}) + (4 cores, ${4>rust-kzg with zkcrypto backend (parallel)>bench_fft_g1 scale: '15'}) + (8 cores, ${8>rust-kzg with zkcrypto backend (parallel)>bench_fft_g1 scale: '15'}) + (16 cores, ${16>rust-kzg with zkcrypto backend (parallel)>bench_fft_g1 scale: '15'}) }; + %%% rust-kzg with blst backend + \addlegendentry{rust-kzg with blst backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, ${1>rust-kzg with blst backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + (2 cores, ${2>rust-kzg with blst backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + (4 cores, ${4>rust-kzg with blst backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + (8 cores, ${8>rust-kzg with blst backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + (16 cores, ${16>rust-kzg with blst backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) }; + + \addlegendentry{rust-kzg with constantine backend (BGMW)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, ${1>rust-kzg with constantine backend (parallel)>bench_fft_g1 scale: '15'}) + (2 cores, ${2>rust-kzg with constantine backend (parallel)>bench_fft_g1 scale: '15'}) + (4 cores, ${4>rust-kzg with constantine backend (parallel)>bench_fft_g1 scale: '15'}) + (8 cores, ${8>rust-kzg with constantine backend (parallel)>bench_fft_g1 scale: '15'}) + (16 cores, ${16>rust-kzg with constantine backend (parallel)>bench_fft_g1 scale: '15'}) }; + + % \addlegendentry{rust-kzg with arkworks backend (BGMW)} + % \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + % (1 core, ${1>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + % (2 cores, ${2>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + % (4 cores, ${4>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + % (8 cores, ${8>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) + % (16 cores, ${16>rust-kzg with arkworks backend (parallel, bgmw)>bench_fft_g1 scale: '15'}) }; + \end{axis} + \end{tikzpicture} + } +} +\end{document} diff --git a/benchmark_script/input/graphs/msm_graph_template.tex b/benchmark_script/input/graphs/msm_graph_template.tex new file mode 100644 index 000000000..6a425373d --- /dev/null +++ b/benchmark_script/input/graphs/msm_graph_template.tex @@ -0,0 +1,156 @@ +\documentclass[border=2pt]{standalone} +\usepackage{graphicx} +\usepackage{pgfplots} +\usepackage{subfig} +\usepackage{pdflscape} +\usepackage[export]{adjustbox} +\begin{document} +\hbox{ + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=${max_time}, %%% change this + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, %%% change this + grid = major, + grid style=dashed, + ] + + \addlegendentry{rust-kzg with zkcrypto backend (parallel)} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + (1 core, ${1>rust-kzg with zkcrypto backend (parallel)}) + (2 cores, ${2>rust-kzg with zkcrypto backend (parallel)}) + (4 cores, ${4>rust-kzg with zkcrypto backend (parallel)}) + (8 cores, ${8>rust-kzg with zkcrypto backend (parallel)}) + (16 cores, ${16>rust-kzg with zkcrypto backend (parallel)}) }; + + \addlegendentry{rust-kzg with blst backend (parallel)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, ${1>rust-kzg with blst backend (parallel)}) + (2 cores, ${2>rust-kzg with blst backend (parallel)}) + (4 cores, ${4>rust-kzg with blst backend (parallel)}) + (8 cores, ${8>rust-kzg with blst backend (parallel)}) + (16 cores, ${16>rust-kzg with blst backend (parallel)}) }; + + \addlegendentry{rust-kzg with blst backend (parallel, bgmw)} + \addplot[mark=square*, mark options={scale=1.5}, thick, dashed, green!70!black] coordinates { + (1 core, ${1>rust-kzg with blst backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with blst backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with blst backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with blst backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with blst backend (parallel, bgmw)}) }; + + \addlegendentry{rust-kzg with arkworks backend (parallel)} + \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + (1 core, ${1>rust-kzg with arkworks backend (parallel)}) + (2 cores, ${2>rust-kzg with arkworks backend (parallel)}) + (4 cores, ${4>rust-kzg with arkworks backend (parallel)}) + (8 cores, ${8>rust-kzg with arkworks backend (parallel)}) + (16 cores, ${16>rust-kzg with arkworks backend (parallel)}) }; + + \addlegendentry{rust-kzg with arkworks backend (parallel, bgmw)} + \addplot[mark=square*, mark options={scale=1.5}, thick, dashed, red!70!black] coordinates { + (1 core, ${1>rust-kzg with arkworks backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with arkworks backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with arkworks backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with arkworks backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with arkworks backend (parallel, bgmw)}) }; + + \addlegendentry{rust-kzg with constantine backend (parallel)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, ${1>rust-kzg with constantine backend (parallel)}) + (2 cores, ${2>rust-kzg with constantine backend (parallel)}) + (4 cores, ${4>rust-kzg with constantine backend (parallel)}) + (8 cores, ${8>rust-kzg with constantine backend (parallel)}) + (16 cores, ${16>rust-kzg with constantine backend (parallel)}) }; + + \addlegendentry{rust-kzg with constantine backend (parallel, bgmw)} + \addplot[mark=square*, mark options={scale=1.5}, thick, dashed, orange!70!black] coordinates { + (1 core, ${1>rust-kzg with constantine backend (parallel, bgmw)}) + (2 cores, ${2>rust-kzg with constantine backend (parallel, bgmw)}) + (4 cores, ${4>rust-kzg with constantine backend (parallel, bgmw)}) + (8 cores, ${8>rust-kzg with constantine backend (parallel, bgmw)}) + (16 cores, ${16>rust-kzg with constantine backend (parallel, bgmw)}) }; + \end{axis} + \end{tikzpicture} + }% + \adjustbox{valign=t}{ + \begin{tikzpicture} + \begin{axis}[ + legend style={at={(0.5, -0.3)}, anchor=north, legend cell align=left}, + symbolic x coords={1 core, 2 cores, 4 cores, 8 cores, 16 cores}, + xtick=data, + x tick label style={rotate=45, anchor=east}, + ymin=0, ymax=${max_time_2}, %%% change this + ylabel near ticks, + yticklabel pos=right, + ylabel={time (${time_unit})}, %%% change this + grid = major, + grid style=dashed, + ] + + \addlegendentry{rust-kzg with zkcrypto backend (sequential)} + \addplot[mark=*, mark options={scale=1.5}, thick, black] coordinates { + (1 core, ${1>rust-kzg with zkcrypto backend (sequential)}) + (2 cores, ${2>rust-kzg with zkcrypto backend (sequential)}) + (4 cores, ${4>rust-kzg with zkcrypto backend (sequential)}) + (8 cores, ${8>rust-kzg with zkcrypto backend (sequential)}) + (16 cores, ${16>rust-kzg with zkcrypto backend (sequential)}) }; + + \addlegendentry{rust-kzg with blst backend (sequential)} + \addplot[mark=*, mark options={scale=1.5}, thick, green] coordinates { + (1 core, ${1>rust-kzg with blst backend (sequential)}) + (2 cores, ${2>rust-kzg with blst backend (sequential)}) + (4 cores, ${4>rust-kzg with blst backend (sequential)}) + (8 cores, ${8>rust-kzg with blst backend (sequential)}) + (16 cores, ${16>rust-kzg with blst backend (sequential)}) }; + + \addlegendentry{rust-kzg with blst backend (sequential, bgmw)} + \addplot[mark=square*, mark options={scale=1.5}, thick, dashed, green!70!black] coordinates { + (1 core, ${1>rust-kzg with blst backend (sequential, bgmw)}) + (2 cores, ${2>rust-kzg with blst backend (sequential, bgmw)}) + (4 cores, ${4>rust-kzg with blst backend (sequential, bgmw)}) + (8 cores, ${8>rust-kzg with blst backend (sequential, bgmw)}) + (16 cores, ${16>rust-kzg with blst backend (sequential, bgmw)}) }; + + \addlegendentry{rust-kzg with arkworks backend (sequential)} + \addplot[mark=*, mark options={scale=1.5}, thick, red] coordinates { + (1 core, ${1>rust-kzg with arkworks backend (sequential)}) + (2 cores, ${2>rust-kzg with arkworks backend (sequential)}) + (4 cores, ${4>rust-kzg with arkworks backend (sequential)}) + (8 cores, ${8>rust-kzg with arkworks backend (sequential)}) + (16 cores, ${16>rust-kzg with arkworks backend (sequential)}) }; + + \addlegendentry{rust-kzg with arkworks backend (sequential, bgmw)} + \addplot[mark=square*, mark options={scale=1.5}, thick, dashed, red!70!black] coordinates { + (1 core, ${1>rust-kzg with arkworks backend (sequential, bgmw)}) + (2 cores, ${2>rust-kzg with arkworks backend (sequential, bgmw)}) + (4 cores, ${4>rust-kzg with arkworks backend (sequential, bgmw)}) + (8 cores, ${8>rust-kzg with arkworks backend (sequential, bgmw)}) + (16 cores, ${16>rust-kzg with arkworks backend (sequential, bgmw)}) }; + + \addlegendentry{rust-kzg with constantine backend (sequential)} + \addplot[mark=*, mark options={scale=1.5}, thick, orange] coordinates { + (1 core, ${1>rust-kzg with constantine backend (sequential)}) + (2 cores, ${2>rust-kzg with constantine backend (sequential)}) + (4 cores, ${4>rust-kzg with constantine backend (sequential)}) + (8 cores, ${8>rust-kzg with constantine backend (sequential)}) + (16 cores, ${16>rust-kzg with constantine backend (sequential)}) }; + + \addlegendentry{rust-kzg with constantine backend (sequential, bgmw)} + \addplot[mark=square*, mark options={scale=1.5}, thick, dashed, orange!70!black] coordinates { + (1 core, ${1>rust-kzg with constantine backend (sequential, bgmw)}) + (2 cores, ${2>rust-kzg with constantine backend (sequential, bgmw)}) + (4 cores, ${4>rust-kzg with constantine backend (sequential, bgmw)}) + (8 cores, ${8>rust-kzg with constantine backend (sequential, bgmw)}) + (16 cores, ${16>rust-kzg with constantine backend (sequential, bgmw)}) }; + \end{axis} + \end{tikzpicture} + } +} +\end{document} diff --git a/benchmark_script/input/rust-kzg-benchmarks-L4.txt b/benchmark_script/input/rust-kzg-benchmarks-L4.txt new file mode 100644 index 000000000..8adab0567 --- /dev/null +++ b/benchmark_script/input/rust-kzg-benchmarks-L4.txt @@ -0,0 +1,1036 @@ +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Address sizes: 46 bits physical, 48 bits virtual +Byte Order: Little Endian +CPU(s): 12 +On-line CPU(s) list: 0-11 +Vendor ID: GenuineIntel +Model name: Intel(R) Xeon(R) CPU @ 2.20GHz +CPU family: 6 +Model: 85 +Thread(s) per core: 2 +Core(s) per socket: 6 +Socket(s): 1 +Stepping: 7 +BogoMIPS: 4400.46 +Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat avx512_vnni md_clear arch_capabilities +Hypervisor vendor: KVM +Virtualization type: full +L1d cache: 192 KiB (6 instances) +L1i cache: 192 KiB (6 instances) +L2 cache: 6 MiB (6 instances) +L3 cache: 38.5 MiB (1 instance) +NUMA node(s): 1 +NUMA node0 CPU(s): 0-11 +Vulnerability Gather data sampling: Not affected +Vulnerability Itlb multihit: Not affected +Vulnerability L1tf: Not affected +Vulnerability Mds: Vulnerable; SMT Host state unknown +Vulnerability Meltdown: Not affected +Vulnerability Mmio stale data: Vulnerable +Vulnerability Reg file data sampling: Not affected +Vulnerability Retbleed: Vulnerable +Vulnerability Spec rstack overflow: Not affected +Vulnerability Spec store bypass: Vulnerable +Vulnerability Spectre v1: Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers +Vulnerability Spectre v2: Vulnerable; IBPB: disabled; STIBP: disabled; PBRSB-eIBRS: Vulnerable; BHI: Vulnerable (Syscall hardening enabled) +Vulnerability Srbds: Not affected +Vulnerability Tsx async abort: Vulnerable +Mon Jun 10 18:25:57 2024 ++---------------------------------------------------------------------------------------+ +| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | +|-----------------------------------------+----------------------+----------------------+ +| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | +| | | MIG M. | +|=========================================+======================+======================| +| 0 NVIDIA L4 Off | 00000000:00:03.0 Off | 0 | +| N/A 42C P8 12W / 72W | 1MiB / 23034MiB | 0% Default | +| | | N/A | ++-----------------------------------------+----------------------+----------------------+ + ++---------------------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=======================================================================================| +| No running processes found | ++---------------------------------------------------------------------------------------+ + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [11.752 ms 11.961 ms 12.169 ms] + +compute_kzg_proof time: [12.829 ms 13.070 ms 13.320 ms] + +verify_kzg_proof time: [1.5567 ms 1.5581 ms 1.5596 ms] +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [13.247 ms 13.289 ms 13.338 ms] +Found 12 outliers among 100 measurements (12.00%) + 6 (6.00%) high mild + 6 (6.00%) high severe + +verify_blob_kzg_proof time: [3.5466 ms 3.5498 ms 3.5533 ms] +Found 11 outliers among 100 measurements (11.00%) + 7 (7.00%) high mild + 4 (4.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [3.5756 ms 3.5803 ms 3.5854 ms] + thrpt: [278.91 elem/s 279.31 elem/s 279.68 elem/s] +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.9452 ms 3.9915 ms 4.0490 ms] + thrpt: [493.95 elem/s 501.06 elem/s 506.94 elem/s] +Found 19 outliers among 100 measurements (19.00%) + 3 (3.00%) high mild + 16 (16.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.2287 ms 4.3562 ms 4.4994 ms] + thrpt: [889.01 elem/s 918.23 elem/s 945.92 elem/s] +Found 11 outliers among 100 measurements (11.00%) + 3 (3.00%) high mild + 8 (8.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [6.7314 ms 6.7440 ms 6.7603 ms] + thrpt: [1.1834 Kelem/s 1.1862 Kelem/s 1.1885 Kelem/s] +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [11.158 ms 11.189 ms 11.241 ms] + thrpt: [1.4233 Kelem/s 1.4300 Kelem/s 1.4339 Kelem/s] +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [23.522 ms 23.677 ms 23.816 ms] + thrpt: [1.3436 Kelem/s 1.3515 Kelem/s 1.3604 Kelem/s] +Found 15 outliers among 100 measurements (15.00%) + 14 (14.00%) low severe + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [41.682 ms 42.096 ms 42.483 ms] + thrpt: [1.5065 Kelem/s 1.5203 Kelem/s 1.5355 Kelem/s] +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low severe + 3 (3.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [5.1959 ms 5.2109 ms 5.2269 ms] + change: [-57.185% -56.434% -55.631%] (p = 0.00 < 0.05) + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 8 (8.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [6.8758 ms 6.8969 ms 6.9262 ms] + change: [-48.240% -47.232% -46.207%] (p = 0.00 < 0.05) + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) high mild + 6 (6.00%) high severe + +verify_kzg_proof time: [1.5550 ms 1.5559 ms 1.5568 ms] + change: [-0.1487% +0.0893% +0.2690%] (p = 0.47 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [8.1572 ms 8.2033 ms 8.2539 ms] + change: [-38.696% -38.270% -37.846%] (p = 0.00 < 0.05) + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 9 (9.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [3.5250 ms 3.5298 ms 3.5369 ms] + change: [-0.7250% -0.5629% -0.3600%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 9 outliers among 100 measurements (9.00%) + 6 (6.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [3.5554 ms 3.5589 ms 3.5631 ms] + thrpt: [280.66 elem/s 280.98 elem/s 281.26 elem/s] + change: + time: [-0.7769% -0.5973% -0.4208%] (p = 0.00 < 0.05) + thrpt: [+0.4226% +0.6008% +0.7830%] + Change within noise threshold. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.8845 ms 3.8966 ms 3.9164 ms] + thrpt: [510.68 elem/s 513.26 elem/s 514.87 elem/s] + change: + time: [-3.8006% -2.3776% -1.1278%] (p = 0.00 < 0.05) + thrpt: [+1.1407% +2.4355% +3.9508%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 3 (3.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.9888 ms 4.0345 ms 4.0918 ms] + thrpt: [977.57 elem/s 991.46 elem/s 1.0028 Kelem/s] + change: + time: [-10.515% -7.3857% -4.3880%] (p = 0.00 < 0.05) + thrpt: [+4.5894% +7.9747% +11.750%] + Performance has improved. +Found 14 outliers among 100 measurements (14.00%) + 14 (14.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [6.6477 ms 6.6656 ms 6.6962 ms] + thrpt: [1.1947 Kelem/s 1.2002 Kelem/s 1.2034 Kelem/s] + change: + time: [-1.5382% -1.1620% -0.6442%] (p = 0.00 < 0.05) + thrpt: [+0.6483% +1.1757% +1.5623%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [11.023 ms 11.050 ms 11.096 ms] + thrpt: [1.4420 Kelem/s 1.4480 Kelem/s 1.4515 Kelem/s] + change: + time: [-1.8041% -1.2417% -0.7083%] (p = 0.00 < 0.05) + thrpt: [+0.7133% +1.2573% +1.8373%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [23.156 ms 23.326 ms 23.482 ms] + thrpt: [1.3627 Kelem/s 1.3719 Kelem/s 1.3819 Kelem/s] + change: + time: [-2.3861% -1.4812% -0.5538%] (p = 0.00 < 0.05) + thrpt: [+0.5569% +1.5035% +2.4445%] + Change within noise threshold. +Found 22 outliers among 100 measurements (22.00%) + 18 (18.00%) low severe + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [65.016 ms 65.655 ms 66.326 ms] + thrpt: [964.92 elem/s 974.80 elem/s 984.38 elem/s] + change: + time: [+53.780% +55.964% +58.097%] (p = 0.00 < 0.05) + thrpt: [-36.748% -35.883% -34.972%] + Performance has regressed. +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) low mild + 5 (5.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [15.936 ms 16.120 ms 16.322 ms] + change: [+206.24% +209.34% +213.27%] (p = 0.00 < 0.05) + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 7 (7.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [17.080 ms 17.194 ms 17.322 ms] + change: [+147.41% +149.30% +151.73%] (p = 0.00 < 0.05) + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 6 (6.00%) high mild + 12 (12.00%) high severe + +verify_kzg_proof time: [3.3236 ms 3.3266 ms 3.3300 ms] + change: [+113.07% +113.37% +113.67%] (p = 0.00 < 0.05) + Performance has regressed. +Found 10 outliers among 100 measurements (10.00%) + 6 (6.00%) high mild + 4 (4.00%) high severe + +compute_blob_kzg_proof time: [18.558 ms 18.849 ms 19.158 ms] + change: [+125.70% +129.78% +133.79%] (p = 0.00 < 0.05) + Performance has regressed. +Found 10 outliers among 100 measurements (10.00%) + 10 (10.00%) high mild + +verify_blob_kzg_proof time: [5.0678 ms 5.0717 ms 5.0767 ms] + change: [+43.367% +43.682% +43.918%] (p = 0.00 < 0.05) + Performance has regressed. +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) high mild + 4 (4.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.1921 ms 5.2046 ms 5.2221 ms] + thrpt: [191.49 elem/s 192.14 elem/s 192.60 elem/s] + change: + time: [+45.853% +46.241% +46.727%] (p = 0.00 < 0.05) + thrpt: [-31.846% -31.620% -31.438%] + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 5 (5.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [5.5156 ms 5.5837 ms 5.6725 ms] + thrpt: [352.58 elem/s 358.19 elem/s 362.61 elem/s] + change: + time: [+41.464% +43.295% +45.608%] (p = 0.00 < 0.05) + thrpt: [-31.322% -30.214% -29.311%] + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [5.9289 ms 6.1147 ms 6.3239 ms] + thrpt: [632.52 elem/s 654.17 elem/s 674.66 elem/s] + change: + time: [+46.600% +51.561% +57.103%] (p = 0.00 < 0.05) + thrpt: [-36.347% -34.020% -31.787%] + Performance has regressed. +Found 20 outliers among 100 measurements (20.00%) + 7 (7.00%) high mild + 13 (13.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [8.9311 ms 8.9403 ms 8.9497 ms] + thrpt: [893.89 elem/s 894.82 elem/s 895.75 elem/s] + change: + time: [+33.482% +34.125% +34.534%] (p = 0.00 < 0.05) + thrpt: [-25.669% -25.443% -25.083%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [14.486 ms 14.524 ms 14.589 ms] + thrpt: [1.0967 Kelem/s 1.1016 Kelem/s 1.1045 Kelem/s] + change: + time: [+30.722% +31.439% +32.197%] (p = 0.00 < 0.05) + thrpt: [-24.356% -23.919% -23.502%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [29.477 ms 29.824 ms 30.157 ms] + thrpt: [1.0611 Kelem/s 1.0730 Kelem/s 1.0856 Kelem/s] + change: + time: [+26.268% +27.856% +29.577%] (p = 0.00 < 0.05) + thrpt: [-22.826% -21.787% -20.803%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [46.096 ms 46.871 ms 47.607 ms] + thrpt: [1.3443 Kelem/s 1.3654 Kelem/s 1.3884 Kelem/s] + change: + time: [-29.996% -28.609% -27.158%] (p = 0.00 < 0.05) + thrpt: [+37.284% +40.074% +42.848%] + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [23.827 ms 23.911 ms 24.014 ms] + change: [+46.450% +48.338% +50.179%] (p = 0.00 < 0.05) + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 1 (1.00%) low severe + 2 (2.00%) low mild + 5 (5.00%) high mild + 10 (10.00%) high severe + +compute_kzg_proof time: [27.680 ms 27.957 ms 28.237 ms] + change: [+60.603% +62.595% +64.576%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [3.3989 ms 3.4275 ms 3.4642 ms] + change: [+2.0930% +3.0330% +4.2613%] (p = 0.00 < 0.05) + Performance has regressed. +Found 8 outliers among 100 measurements (8.00%) + 3 (3.00%) high mild + 5 (5.00%) high severe + +compute_blob_kzg_proof time: [27.789 ms 27.981 ms 28.184 ms] + change: [+45.869% +48.442% +50.990%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [5.2806 ms 5.2911 ms 5.3035 ms] + change: [+4.0967% +4.3259% +4.5573%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.3911 ms 5.4017 ms 5.4159 ms] + thrpt: [184.64 elem/s 185.13 elem/s 185.49 elem/s] + change: + time: [+3.3822% +3.7868% +4.1750%] (p = 0.00 < 0.05) + thrpt: [-4.0077% -3.6487% -3.2715%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [5.6630 ms 5.6966 ms 5.7391 ms] + thrpt: [348.48 elem/s 351.08 elem/s 353.17 elem/s] + change: + time: [+0.3381% +2.0228% +3.4960%] (p = 0.01 < 0.05) + thrpt: [-3.3779% -1.9827% -0.3370%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.1624 ms 6.2253 ms 6.3087 ms] + thrpt: [634.04 elem/s 642.54 elem/s 649.10 elem/s] + change: + time: [-1.7089% +1.8093% +5.2637%] (p = 0.31 > 0.05) + thrpt: [-5.0005% -1.7772% +1.7386%] + No change in performance detected. +Found 9 outliers among 100 measurements (9.00%) + 2 (2.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [9.6425 ms 9.6956 ms 9.7493 ms] + thrpt: [820.57 elem/s 825.11 elem/s 829.66 elem/s] + change: + time: [+7.8208% +8.4483% +9.0134%] (p = 0.00 < 0.05) + thrpt: [-8.2682% -7.7902% -7.2535%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [15.113 ms 15.176 ms 15.240 ms] + thrpt: [1.0499 Kelem/s 1.0543 Kelem/s 1.0587 Kelem/s] + change: + time: [+3.8505% +4.4863% +5.0403%] (p = 0.00 < 0.05) + thrpt: [-4.7985% -4.2936% -3.7077%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [25.858 ms 26.039 ms 26.206 ms] + thrpt: [1.2211 Kelem/s 1.2289 Kelem/s 1.2375 Kelem/s] + change: + time: [-13.816% -12.692% -11.503%] (p = 0.00 < 0.05) + thrpt: [+12.999% +14.536% +16.031%] + Performance has improved. +Found 14 outliers among 100 measurements (14.00%) + 8 (8.00%) low severe + 5 (5.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [44.586 ms 44.930 ms 45.256 ms] + thrpt: [1.4142 Kelem/s 1.4244 Kelem/s 1.4354 Kelem/s] + change: + time: [-5.7800% -4.1423% -2.3974%] (p = 0.00 < 0.05) + thrpt: [+2.4563% +4.3213% +6.1346%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 7 (7.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [5.2478 ms 5.2999 ms 5.3564 ms] + change: [-78.046% -77.835% -77.563%] (p = 0.00 < 0.05) + Performance has improved. +Found 19 outliers among 100 measurements (19.00%) + 6 (6.00%) high mild + 13 (13.00%) high severe + +compute_kzg_proof time: [6.8637 ms 6.8745 ms 6.8868 ms] + change: [-75.655% -75.410% -75.164%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [3.4663 ms 3.4755 ms 3.4896 ms] + change: [+0.2661% +1.4016% +2.3511%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [8.0066 ms 8.0584 ms 8.1150 ms] + change: [-71.467% -71.200% -70.913%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [5.2214 ms 5.2333 ms 5.2532 ms] + change: [-1.4281% -1.0923% -0.6482%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.2557 ms 5.3015 ms 5.3565 ms] + thrpt: [186.69 elem/s 188.63 elem/s 190.27 elem/s] + change: + time: [-2.7441% -1.8550% -0.8523%] (p = 0.00 < 0.05) + thrpt: [+0.8596% +1.8900% +2.8215%] + Change within noise threshold. +Found 17 outliers among 100 measurements (17.00%) + 9 (9.00%) high mild + 8 (8.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [5.7771 ms 5.8240 ms 5.8727 ms] + thrpt: [340.56 elem/s 343.40 elem/s 346.19 elem/s] + change: + time: [+1.1779% +2.2367% +3.2867%] (p = 0.00 < 0.05) + thrpt: [-3.1822% -2.1877% -1.1642%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [6.3540 ms 6.4897 ms 6.6428 ms] + thrpt: [602.15 elem/s 616.36 elem/s 629.52 elem/s] + change: + time: [+1.9097% +4.2468% +6.9037%] (p = 0.00 < 0.05) + thrpt: [-6.4579% -4.0738% -1.8739%] + Performance has regressed. +Found 19 outliers among 100 measurements (19.00%) + 2 (2.00%) high mild + 17 (17.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [8.8801 ms 8.9202 ms 8.9639 ms] + thrpt: [892.47 elem/s 896.84 elem/s 900.89 elem/s] + change: + time: [-8.6155% -7.9976% -7.2933%] (p = 0.00 < 0.05) + thrpt: [+7.8671% +8.6928% +9.4278%] + Performance has improved. +Found 15 outliers among 100 measurements (15.00%) + 10 (10.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [14.437 ms 14.457 ms 14.480 ms] + thrpt: [1.1050 Kelem/s 1.1067 Kelem/s 1.1082 Kelem/s] + change: + time: [-5.1572% -4.7341% -4.3153%] (p = 0.00 < 0.05) + thrpt: [+4.5099% +4.9694% +5.4376%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 2 (2.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [29.444 ms 29.762 ms 30.071 ms] + thrpt: [1.0641 Kelem/s 1.0752 Kelem/s 1.0868 Kelem/s] + change: + time: [+12.859% +14.299% +15.707%] (p = 0.00 < 0.05) + thrpt: [-13.575% -12.510% -11.394%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [69.251 ms 69.825 ms 70.434 ms] + thrpt: [908.66 elem/s 916.57 elem/s 924.17 elem/s] + change: + time: [+53.662% +55.409% +57.209%] (p = 0.00 < 0.05) + thrpt: [-36.390% -35.654% -34.922%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [5.6612 ms 5.6776 ms 5.6966 ms] + change: [+5.9514% +7.1269% +8.2407%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [6.6625 ms 6.6815 ms 6.7031 ms] + change: [-3.1375% -2.8069% -2.4501%] (p = 0.00 < 0.05) + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) low mild + 2 (2.00%) high mild + 4 (4.00%) high severe + +verify_kzg_proof time: [3.3504 ms 3.3813 ms 3.4242 ms] + change: [-3.6946% -2.7118% -1.5300%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +compute_blob_kzg_proof time: [7.4730 ms 7.5178 ms 7.5723 ms] + change: [-7.6097% -6.7085% -5.8332%] (p = 0.00 < 0.05) + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 3 (3.00%) high mild + 8 (8.00%) high severe + +verify_blob_kzg_proof time: [5.2412 ms 5.2568 ms 5.2803 ms] + change: [-0.0506% +0.4475% +0.9699%] (p = 0.07 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.2542 ms 5.2665 ms 5.2806 ms] + thrpt: [189.37 elem/s 189.88 elem/s 190.32 elem/s] + change: + time: [-1.7130% -0.6604% +0.2512%] (p = 0.21 > 0.05) + thrpt: [-0.2506% +0.6648% +1.7428%] + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [5.8247 ms 5.8712 ms 5.9195 ms] + thrpt: [337.87 elem/s 340.65 elem/s 343.37 elem/s] + change: + time: [-0.3397% +0.8089% +2.0245%] (p = 0.18 > 0.05) + thrpt: [-1.9843% -0.8024% +0.3408%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.3363 ms 6.4853 ms 6.6575 ms] + thrpt: [600.83 elem/s 616.78 elem/s 631.28 elem/s] + change: + time: [-3.4280% -0.0677% +3.3238%] (p = 0.97 > 0.05) + thrpt: [-3.2169% +0.0677% +3.5496%] + No change in performance detected. +Found 24 outliers among 100 measurements (24.00%) + 9 (9.00%) high mild + 15 (15.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [9.0158 ms 9.0619 ms 9.1105 ms] + thrpt: [878.11 elem/s 882.82 elem/s 887.33 elem/s] + change: + time: [+0.8988% +1.5884% +2.2878%] (p = 0.00 < 0.05) + thrpt: [-2.2366% -1.5635% -0.8908%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [14.562 ms 14.619 ms 14.688 ms] + thrpt: [1.0893 Kelem/s 1.0944 Kelem/s 1.0987 Kelem/s] + change: + time: [+0.6781% +1.1210% +1.6918%] (p = 0.00 < 0.05) + thrpt: [-1.6637% -1.1086% -0.6736%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [29.967 ms 30.223 ms 30.464 ms] + thrpt: [1.0504 Kelem/s 1.0588 Kelem/s 1.0678 Kelem/s] + change: + time: [+0.2408% +1.5493% +2.9495%] (p = 0.03 < 0.05) + thrpt: [-2.8650% -1.5256% -0.2403%] + Change within noise threshold. +Found 21 outliers among 100 measurements (21.00%) + 1 (1.00%) low severe + 19 (19.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [193.50 ms 195.20 ms 196.90 ms] + thrpt: [325.03 elem/s 327.87 elem/s 330.76 elem/s] + change: + time: [+176.00% +179.55% +182.89%] (p = 0.00 < 0.05) + thrpt: [-64.651% -64.228% -63.769%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [13.227 ms 13.309 ms 13.395 ms] + +bench_g1_lincomb with precomputation points: '4096' + time: [10.819 ms 10.912 ms 11.015 ms] +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) high mild + 3 (3.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [6.4552 ms 6.4964 ms 6.5382 ms] + change: [-51.638% -51.189% -50.746%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [20.062 ms 20.964 ms 22.095 ms] + change: [+208.20% +216.09% +225.85%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '4096' + time: [15.774 ms 16.143 ms 16.603 ms] + change: [+43.845% +46.483% +49.675%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [33.247 ms 33.398 ms 33.706 ms] + change: [+58.490% +63.718% +67.751%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [6.9563 ms 7.1491 ms 7.2557 ms] + change: [-79.625% -79.205% -78.704%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [15.826 ms 15.858 ms 15.892 ms] + change: [+121.66% +126.41% +130.92%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [42.620 ms 43.376 ms 44.174 ms] + +bench_g1_lincomb with precomputation points: '16384' + time: [37.455 ms 37.947 ms 38.498 ms] +Found 11 outliers among 100 measurements (11.00%) + 7 (7.00%) high mild + 4 (4.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [7.6064 ms 7.6365 ms 7.6734 ms] + change: [-82.723% -82.395% -82.069%] (p = 0.00 < 0.05) + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) high mild + 7 (7.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [59.046 ms 59.293 ms 59.571 ms] + change: [+673.01% +679.04% +685.91%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '16384' + time: [55.764 ms 60.354 ms 66.266 ms] + change: [+45.109% +55.375% +66.753%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [102.56 ms 108.48 ms 115.40 ms] + change: [+70.666% +80.025% +88.882%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [10.512 ms 10.618 ms 10.867 ms] + change: [-90.313% -89.733% -89.121%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [25.794 ms 25.869 ms 25.968 ms] + change: [+128.88% +136.19% +143.50%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [156.21 ms 156.68 ms 157.14 ms] +Found 13 outliers among 100 measurements (13.00%) + 5 (5.00%) low severe + 2 (2.00%) high mild + 6 (6.00%) high severe + +bench_g1_lincomb with precomputation points: '65536' + time: [145.15 ms 145.89 ms 146.57 ms] +Found 31 outliers among 100 measurements (31.00%) + 14 (14.00%) low severe + 8 (8.00%) high mild + 9 (9.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [13.907 ms 14.104 ms 14.305 ms] + change: [-91.124% -90.998% -90.862%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [227.35 ms 229.40 ms 231.39 ms] + change: [+1499.3% +1526.4% +1553.1%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '65536' + time: [210.07 ms 212.42 ms 214.19 ms] + change: [+43.782% +45.602% +46.977%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [388.27 ms 395.30 ms 402.68 ms] + change: [+68.932% +72.318% +75.887%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [23.744 ms 24.531 ms 25.115 ms] + change: [-94.061% -93.913% -93.761%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [57.978 ms 58.217 ms 58.427 ms] + change: [+137.52% +142.52% +147.43%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [545.98 ms 551.53 ms 557.46 ms] +Found 12 outliers among 100 measurements (12.00%) + 8 (8.00%) high mild + 4 (4.00%) high severe + +bench_g1_lincomb with precomputation points: '262144' + time: [511.67 ms 516.60 ms 521.86 ms] +Found 8 outliers among 100 measurements (8.00%) + 7 (7.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [41.162 ms 41.890 ms 42.661 ms] + change: [-92.544% -92.405% -92.230%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [760.96 ms 782.72 ms 807.48 ms] + change: [+1705.9% +1768.5% +1834.8%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '262144' + time: [713.04 ms 742.53 ms 774.25 ms] + change: [+38.127% +43.734% +50.204%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [1.3948 s 1.4180 s 1.4453 s] + change: [+74.766% +81.160% +87.541%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [77.837 ms 78.031 ms 78.483 ms] + change: [-94.542% -94.387% -94.228%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [193.00 ms 194.19 ms 195.44 ms] + change: [+138.06% +144.00% +149.15%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [2.0083 s 2.0276 s 2.0480 s] +Found 8 outliers among 100 measurements (8.00%) + 8 (8.00%) high mild + +bench_g1_lincomb with precomputation points: '1048576' + time: [1.9299 s 1.9484 s 1.9679 s] + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [115.45 ms 116.75 ms 118.25 ms] + change: [-94.329% -94.242% -94.156%] (p = 0.00 < 0.05) + Performance has improved. +Found 14 outliers among 100 measurements (14.00%) + 5 (5.00%) high mild + 9 (9.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [2.7898 s 2.8637 s 2.9577 s] + change: [+2280.0% +2352.8% +2437.0%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + diff --git a/benchmark_script/input/rust-kzg-benchmarks-T4.txt b/benchmark_script/input/rust-kzg-benchmarks-T4.txt new file mode 100644 index 000000000..b56006ea1 --- /dev/null +++ b/benchmark_script/input/rust-kzg-benchmarks-T4.txt @@ -0,0 +1,938 @@ +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Address sizes: 46 bits physical, 48 bits virtual +Byte Order: Little Endian +CPU(s): 2 +On-line CPU(s) list: 0,1 +Vendor ID: GenuineIntel +Model name: Intel(R) Xeon(R) CPU @ 2.00GHz +CPU family: 6 +Model: 85 +Thread(s) per core: 2 +Core(s) per socket: 1 +Socket(s): 1 +Stepping: 3 +BogoMIPS: 4000.40 +Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat md_clear arch_capabilities +Hypervisor vendor: KVM +Virtualization type: full +L1d cache: 32 KiB (1 instance) +L1i cache: 32 KiB (1 instance) +L2 cache: 1 MiB (1 instance) +L3 cache: 38.5 MiB (1 instance) +NUMA node(s): 1 +NUMA node0 CPU(s): 0,1 +Vulnerability Gather data sampling: Not affected +Vulnerability Itlb multihit: Not affected +Vulnerability L1tf: Mitigation; PTE Inversion +Vulnerability Mds: Vulnerable; SMT Host state unknown +Vulnerability Meltdown: Vulnerable +Vulnerability Mmio stale data: Vulnerable +Vulnerability Reg file data sampling: Not affected +Vulnerability Retbleed: Vulnerable +Vulnerability Spec rstack overflow: Not affected +Vulnerability Spec store bypass: Vulnerable +Vulnerability Spectre v1: Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers +Vulnerability Spectre v2: Vulnerable; IBPB: disabled; STIBP: disabled; PBRSB-eIBRS: Not affected; BHI: Vulnerable (Syscall hardening enabled) +Vulnerability Srbds: Not affected +Vulnerability Tsx async abort: Vulnerable +Thu May 30 13:32:31 2024 ++---------------------------------------------------------------------------------------+ +| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | +|-----------------------------------------+----------------------+----------------------+ +| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | +| | | MIG M. | +|=========================================+======================+======================| +| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 | +| N/A 35C P8 9W / 70W | 0MiB / 15360MiB | 0% Default | +| | | N/A | ++-----------------------------------------+----------------------+----------------------+ + ++---------------------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=======================================================================================| +| No running processes found | ++---------------------------------------------------------------------------------------+ + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [48.222 ms 48.881 ms 49.636 ms] +Found 12 outliers among 100 measurements (12.00%) + 4 (4.00%) high mild + 8 (8.00%) high severe + +compute_kzg_proof time: [51.514 ms 52.901 ms 54.636 ms] +Found 10 outliers among 100 measurements (10.00%) + 1 (1.00%) high mild + 9 (9.00%) high severe + +verify_kzg_proof time: [1.4607 ms 1.4756 ms 1.4938 ms] +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [60.587 ms 64.179 ms 67.986 ms] + +verify_blob_kzg_proof time: [3.6688 ms 3.8592 ms 4.0627 ms] +Found 22 outliers among 100 measurements (22.00%) + 20 (20.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [3.7456 ms 3.9381 ms 4.1413 ms] + thrpt: [241.47 elem/s 253.93 elem/s 266.98 elem/s] +Found 11 outliers among 100 measurements (11.00%) + 11 (11.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.5909 ms 5.6505 ms 5.7197 ms] + thrpt: [349.67 elem/s 353.95 elem/s 357.73 elem/s] +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.229 ms 10.369 ms 10.534 ms] + thrpt: [379.74 elem/s 385.77 elem/s 391.03 elem/s] +Found 11 outliers among 100 measurements (11.00%) + 4 (4.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [19.225 ms 19.832 ms 20.528 ms] + thrpt: [389.70 elem/s 403.39 elem/s 416.12 elem/s] +Found 14 outliers among 100 measurements (14.00%) + 1 (1.00%) high mild + 13 (13.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [36.129 ms 36.500 ms 36.910 ms] + thrpt: [433.49 elem/s 438.36 elem/s 442.86 elem/s] +Found 11 outliers among 100 measurements (11.00%) + 8 (8.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [76.611 ms 80.279 ms 84.134 ms] + thrpt: [380.35 elem/s 398.61 elem/s 417.70 elem/s] +verify_blob_kzg_proof_batch/64 + time: [162.58 ms 171.09 ms 179.77 ms] + thrpt: [356.01 elem/s 374.07 elem/s 393.65 elem/s] + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [20.872 ms 21.091 ms 21.337 ms] + change: [-57.648% -56.853% -56.086%] (p = 0.00 < 0.05) + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) high mild + 6 (6.00%) high severe + +compute_kzg_proof time: [22.264 ms 22.492 ms 22.751 ms] + change: [-58.899% -57.483% -56.241%] (p = 0.00 < 0.05) + Performance has improved. +Found 16 outliers among 100 measurements (16.00%) + 5 (5.00%) high mild + 11 (11.00%) high severe + +verify_kzg_proof time: [1.4527 ms 1.4943 ms 1.5654 ms] + change: [-1.8540% -0.0527% +1.8497%] (p = 0.96 > 0.05) + No change in performance detected. +Found 8 outliers among 100 measurements (8.00%) + 5 (5.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [26.420 ms 27.774 ms 29.213 ms] + change: [-59.911% -56.724% -53.152%] (p = 0.00 < 0.05) + Performance has improved. +Found 22 outliers among 100 measurements (22.00%) + 21 (21.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [3.2902 ms 3.3247 ms 3.3651 ms] + change: [-18.277% -13.852% -9.2935%] (p = 0.00 < 0.05) + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) high mild + 6 (6.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [3.3366 ms 3.3705 ms 3.4095 ms] + thrpt: [293.30 elem/s 296.69 elem/s 299.71 elem/s] + change: + time: [-18.680% -14.414% -9.9439%] (p = 0.00 < 0.05) + thrpt: [+11.042% +16.841% +22.972%] + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 5 (5.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [6.6426 ms 7.0013 ms 7.3730 ms] + thrpt: [271.26 elem/s 285.66 elem/s 301.09 elem/s] + change: + time: [+17.970% +23.905% +30.770%] (p = 0.00 < 0.05) + thrpt: [-23.530% -19.293% -15.233%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [11.991 ms 12.618 ms 13.269 ms] + thrpt: [301.46 elem/s 317.00 elem/s 333.58 elem/s] + change: + time: [+15.573% +21.695% +28.698%] (p = 0.00 < 0.05) + thrpt: [-22.299% -17.828% -13.475%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [51.453 ms 53.128 ms 55.025 ms] + thrpt: [145.39 elem/s 150.58 elem/s 155.48 elem/s] + change: + time: [+155.03% +167.89% +180.12%] (p = 0.00 < 0.05) + thrpt: [-64.301% -62.671% -60.789%] + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 4 (4.00%) high mild + 14 (14.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [76.015 ms 79.618 ms 83.386 ms] + thrpt: [191.88 elem/s 200.96 elem/s 210.49 elem/s] + change: + time: [+107.94% +118.13% +129.20%] (p = 0.00 < 0.05) + thrpt: [-56.370% -54.156% -51.909%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [108.36 ms 112.97 ms 118.02 ms] + thrpt: [271.14 elem/s 283.25 elem/s 295.33 elem/s] + change: + time: [+32.140% +40.727% +50.045%] (p = 0.00 < 0.05) + thrpt: [-33.353% -28.940% -24.322%] + Performance has regressed. +Found 19 outliers among 100 measurements (19.00%) + 19 (19.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [175.14 ms 181.20 ms 187.99 ms] + thrpt: [340.44 elem/s 353.20 elem/s 365.41 elem/s] + change: + time: [-0.2763% +5.9100% +12.909%] (p = 0.07 > 0.05) + thrpt: [-11.433% -5.5802% +0.2771%] + No change in performance detected. +Found 11 outliers among 100 measurements (11.00%) + 11 (11.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [80.098 ms 84.691 ms 89.520 ms] + change: [+279.50% +301.56% +322.16%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [72.167 ms 72.754 ms 73.403 ms] + change: [+218.92% +223.47% +228.04%] (p = 0.00 < 0.05) + Performance has regressed. +Found 11 outliers among 100 measurements (11.00%) + 4 (4.00%) high mild + 7 (7.00%) high severe + +verify_kzg_proof time: [3.1356 ms 3.1725 ms 3.2133 ms] + change: [+110.39% +115.11% +119.13%] (p = 0.00 < 0.05) + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 5 (5.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [95.340 ms 104.67 ms 114.64 ms] + change: [+236.72% +276.84% +315.74%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [5.2423 ms 5.5102 ms 5.7959 ms] + change: [+56.356% +65.736% +74.379%] (p = 0.00 < 0.05) + Performance has regressed. +Found 22 outliers among 100 measurements (22.00%) + 3 (3.00%) high mild + 19 (19.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [4.9042 ms 4.9562 ms 5.0158 ms] + thrpt: [199.37 elem/s 201.77 elem/s 203.91 elem/s] + change: + time: [+44.716% +47.048% +49.748%] (p = 0.00 < 0.05) + thrpt: [-33.221% -31.995% -30.899%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [7.2154 ms 7.2788 ms 7.3533 ms] + thrpt: [271.99 elem/s 274.77 elem/s 277.19 elem/s] + change: + time: [-1.3800% +3.9635% +9.7348%] (p = 0.15 > 0.05) + thrpt: [-8.8712% -3.8124% +1.3993%] + No change in performance detected. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [12.727 ms 12.847 ms 12.980 ms] + thrpt: [308.17 elem/s 311.36 elem/s 314.30 elem/s] + change: + time: [-3.1994% +1.8092% +7.3089%] (p = 0.49 > 0.05) + thrpt: [-6.8111% -1.7771% +3.3052%] + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [23.431 ms 24.700 ms 26.046 ms] + thrpt: [307.15 elem/s 323.88 elem/s 341.43 elem/s] + change: + time: [-56.504% -53.508% -50.438%] (p = 0.00 < 0.05) + thrpt: [+101.77% +115.09% +129.90%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [37.744 ms 38.195 ms 38.721 ms] + thrpt: [413.21 elem/s 418.91 elem/s 423.91 elem/s] + change: + time: [-54.262% -52.028% -49.706%] (p = 0.00 < 0.05) + thrpt: [+98.829% +108.45% +118.63%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [69.971 ms 70.663 ms 71.459 ms] + thrpt: [447.81 elem/s 452.86 elem/s 457.33 elem/s] + change: + time: [-40.239% -37.452% -34.710%] (p = 0.00 < 0.05) + thrpt: [+53.163% +59.877% +67.332%] + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 1 (1.00%) high mild + 11 (11.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [144.43 ms 150.29 ms 156.87 ms] + thrpt: [407.97 elem/s 425.84 elem/s 443.11 elem/s] + change: + time: [-21.561% -17.058% -12.102%] (p = 0.00 < 0.05) + thrpt: [+13.768% +20.567% +27.488%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 13 (13.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [122.87 ms 129.19 ms 136.12 ms] + change: [+41.604% +52.544% +64.487%] (p = 0.00 < 0.05) + Performance has regressed. +Found 17 outliers among 100 measurements (17.00%) + 1 (1.00%) high mild + 16 (16.00%) high severe + +compute_kzg_proof time: [129.71 ms 136.67 ms 144.38 ms] + change: [+77.458% +87.854% +100.08%] (p = 0.00 < 0.05) + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 2 (2.00%) high mild + 16 (16.00%) high severe + +verify_kzg_proof time: [4.3067 ms 4.5597 ms 4.8228 ms] + change: [+35.834% +43.725% +51.366%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [127.15 ms 133.20 ms 139.78 ms] + change: [+15.499% +27.260% +41.557%] (p = 0.00 < 0.05) + Performance has regressed. +Found 19 outliers among 100 measurements (19.00%) + 2 (2.00%) high mild + 17 (17.00%) high severe + +verify_blob_kzg_proof time: [6.3709 ms 6.7448 ms 7.1369 ms] + change: [+13.895% +22.407% +31.927%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [5.5825 ms 5.8410 ms 6.1405 ms] + thrpt: [162.85 elem/s 171.20 elem/s 179.13 elem/s] + change: + time: [+12.787% +17.852% +23.374%] (p = 0.00 < 0.05) + thrpt: [-18.946% -15.148% -11.337%] + Performance has regressed. +Found 17 outliers among 100 measurements (17.00%) + 3 (3.00%) high mild + 14 (14.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [8.6301 ms 8.7391 ms 8.8681 ms] + thrpt: [225.53 elem/s 228.86 elem/s 231.75 elem/s] + change: + time: [+18.166% +20.064% +22.308%] (p = 0.00 < 0.05) + thrpt: [-18.239% -16.711% -15.373%] + Performance has regressed. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [13.615 ms 13.742 ms 13.890 ms] + thrpt: [287.98 elem/s 291.09 elem/s 293.79 elem/s] + change: + time: [+5.4296% +6.9658% +8.4373%] (p = 0.00 < 0.05) + thrpt: [-7.7808% -6.5122% -5.1500%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [22.535 ms 22.762 ms 23.019 ms] + thrpt: [347.54 elem/s 351.46 elem/s 355.00 elem/s] + change: + time: [-12.724% -7.8462% -2.7578%] (p = 0.00 < 0.05) + thrpt: [+2.8360% +8.5142% +14.579%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 2 (2.00%) high mild + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [44.921 ms 47.226 ms 49.670 ms] + thrpt: [322.13 elem/s 338.79 elem/s 356.18 elem/s] + change: + time: [+17.325% +23.647% +30.417%] (p = 0.00 < 0.05) + thrpt: [-23.323% -19.124% -14.767%] + Performance has regressed. +Found 21 outliers among 100 measurements (21.00%) + 5 (5.00%) high mild + 16 (16.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [78.971 ms 81.951 ms 85.366 ms] + thrpt: [374.86 elem/s 390.48 elem/s 405.21 elem/s] + change: + time: [+11.581% +15.975% +21.131%] (p = 0.00 < 0.05) + thrpt: [-17.444% -13.775% -10.379%] + Performance has regressed. +Found 17 outliers among 100 measurements (17.00%) + 1 (1.00%) high mild + 16 (16.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [165.24 ms 173.68 ms 182.72 ms] + thrpt: [350.26 elem/s 368.49 elem/s 387.31 elem/s] + change: + time: [+7.9961% +15.565% +23.254%] (p = 0.00 < 0.05) + thrpt: [-18.866% -13.468% -7.4040%] + Performance has regressed. +Found 24 outliers among 100 measurements (24.00%) + 3 (3.00%) high mild + 21 (21.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +blob_to_kzg_commitment time: [24.132 ms 25.415 ms 26.754 ms] + change: [-81.685% -80.328% -78.878%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [22.433 ms 22.648 ms 22.893 ms] + change: [-84.328% -83.428% -82.517%] (p = 0.00 < 0.05) + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 3 (3.00%) high mild + 8 (8.00%) high severe + +verify_kzg_proof time: [3.5157 ms 3.5536 ms 3.5988 ms] + change: [-26.370% -22.065% -17.401%] (p = 0.00 < 0.05) + Performance has improved. +Found 16 outliers among 100 measurements (16.00%) + 9 (9.00%) high mild + 7 (7.00%) high severe + +compute_blob_kzg_proof time: [26.524 ms 27.885 ms 29.322 ms] + change: [-80.495% -79.065% -77.490%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [5.2331 ms 5.2821 ms 5.3410 ms] + change: [-26.020% -21.687% -16.916%] (p = 0.00 < 0.05) + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) high mild + 6 (6.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.3359 ms 5.4008 ms 5.4792 ms] + thrpt: [182.51 elem/s 185.16 elem/s 187.41 elem/s] + change: + time: [-12.143% -7.5355% -3.0310%] (p = 0.00 < 0.05) + thrpt: [+3.1257% +8.1496% +13.822%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [7.6708 ms 7.7585 ms 7.8638 ms] + thrpt: [254.33 elem/s 257.78 elem/s 260.73 elem/s] + change: + time: [-12.829% -11.221% -9.5456%] (p = 0.00 < 0.05) + thrpt: [+10.553% +12.640% +14.717%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [13.206 ms 13.344 ms 13.500 ms] + thrpt: [296.29 elem/s 299.75 elem/s 302.90 elem/s] + change: + time: [-4.3362% -2.8916% -1.5026%] (p = 0.00 < 0.05) + thrpt: [+1.5255% +2.9778% +4.5328%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 1 (1.00%) high mild + 12 (12.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [56.268 ms 58.884 ms 61.733 ms] + thrpt: [129.59 elem/s 135.86 elem/s 142.18 elem/s] + change: + time: [+145.32% +158.69% +171.33%] (p = 0.00 < 0.05) + thrpt: [-63.144% -61.344% -59.236%] + Performance has regressed. +Found 24 outliers among 100 measurements (24.00%) + 3 (3.00%) high mild + 21 (21.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [79.227 ms 83.256 ms 87.479 ms] + thrpt: [182.90 elem/s 192.18 elem/s 201.95 elem/s] + change: + time: [+64.089% +76.291% +89.073%] (p = 0.00 < 0.05) + thrpt: [-47.110% -43.276% -39.057%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [110.63 ms 115.54 ms 120.87 ms] + thrpt: [264.76 elem/s 276.97 elem/s 289.26 elem/s] + change: + time: [+32.646% +40.981% +49.333%] (p = 0.00 < 0.05) + thrpt: [-33.035% -29.069% -24.611%] + Performance has regressed. +Found 19 outliers among 100 measurements (19.00%) + 1 (1.00%) high mild + 18 (18.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [180.96 ms 188.49 ms 196.79 ms] + thrpt: [325.21 elem/s 339.54 elem/s 353.67 elem/s] + change: + time: [+1.6217% +8.5250% +15.466%] (p = 0.02 < 0.05) + thrpt: [-13.395% -7.8553% -1.5958%] + Performance has regressed. +Found 14 outliers among 100 measurements (14.00%) + 14 (14.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [77.579 ms 81.946 ms 86.573 ms] + +bench_g1_lincomb with precomputation points: '4096' + time: [60.678 ms 64.452 ms 68.348 ms] + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [23.643 ms 24.600 ms 25.667 ms] + change: [-71.960% -69.980% -67.866%] (p = 0.00 < 0.05) + Performance has improved. +Found 18 outliers among 100 measurements (18.00%) + 3 (3.00%) high mild + 15 (15.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [106.64 ms 127.55 ms 156.59 ms] + change: [+368.36% +448.07% +534.68%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [72.939 ms 75.386 ms 81.156 ms] + change: [+15.475% +35.716% +59.340%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [157.98 ms 160.50 ms 163.31 ms] + change: [+4.4147% +19.047% +38.578%] (p = 0.02 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '4096' + time: [23.677 ms 24.077 ms 24.397 ms] + change: [-85.403% -85.060% -84.720%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + + + + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [235.02 ms 246.06 ms 257.85 ms] +Found 22 outliers among 100 measurements (22.00%) + 2 (2.00%) high mild + 20 (20.00%) high severe + +bench_g1_lincomb with precomputation points: '16384' + time: [187.49 ms 195.37 ms 204.25 ms] +Found 14 outliers among 100 measurements (14.00%) + 1 (1.00%) high mild + 13 (13.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [29.348 ms 30.313 ms 31.419 ms] + change: [-88.371% -87.681% -86.979%] (p = 0.00 < 0.05) + Performance has improved. +Found 15 outliers among 100 measurements (15.00%) + 2 (2.00%) high mild + 13 (13.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [318.50 ms 327.73 ms 343.79 ms] + change: [+927.34% +981.17% +1043.4%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '16384' + time: [292.23 ms 340.23 ms 389.65 ms] + change: [+46.902% +74.151% +103.50%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [533.12 ms 542.56 ms 552.49 ms] + change: [+56.917% +65.550% +71.838%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '16384' + time: [34.413 ms 40.475 ms 48.928 ms] + change: [-93.662% -92.752% -91.726%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + + + + + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [815.05 ms 851.44 ms 891.25 ms] +Found 21 outliers among 100 measurements (21.00%) + 2 (2.00%) high mild + 19 (19.00%) high severe + +bench_g1_lincomb with precomputation points: '65536' + time: [695.41 ms 727.49 ms 761.79 ms] +Found 21 outliers among 100 measurements (21.00%) + 6 (6.00%) high mild + 15 (15.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [62.535 ms 65.277 ms 68.095 ms] + change: [-92.771% -92.333% -91.840%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [1.1262 s 1.2159 s 1.3460 s] + change: [+1605.1% +1762.6% +1978.9%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '65536' + time: [924.36 ms 1.0252 s 1.1687 s] + change: [+25.031% +40.918% +62.848%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [1.9123 s 2.1864 s 2.4941 s] + change: [+52.681% +79.821% +113.26%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '65536' + time: [72.094 ms 80.304 ms 93.516 ms] + change: [-96.861% -96.274% -95.545%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + + + + + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [2.8989 s 3.0050 s 3.1192 s] +Found 7 outliers among 100 measurements (7.00%) + 6 (6.00%) high mild + 1 (1.00%) high severe + +bench_g1_lincomb with precomputation points: '262144' + time: [2.4446 s 2.5370 s 2.6357 s] +Found 11 outliers among 100 measurements (11.00%) + 10 (10.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [172.90 ms 180.62 ms 188.99 ms] + change: [-94.336% -93.989% -93.647%] (p = 0.00 < 0.05) + Performance has improved. +Found 20 outliers among 100 measurements (20.00%) + 1 (1.00%) high mild + 19 (19.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [4.0804 s 4.3983 s 4.7674 s] + change: [+2124.3% +2335.1% +2568.2%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '262144' + time: [3.3442 s 3.5622 s 3.8137 s] + change: [+30.817% +40.409% +52.574%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [7.6924 s 8.1043 s 8.4669 s] + change: [+68.064% +84.258% +100.11%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '262144' + time: [267.16 ms 312.61 ms 361.06 ms] + change: [-96.744% -96.143% -95.424%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [12.017 s 12.117 s 12.224 s] + change: [-1.0852% +0.1556% +1.4019%] (p = 0.81 > 0.05) + No change in performance detected. +Found 18 outliers among 100 measurements (18.00%) + 12 (12.00%) low mild + 1 (1.00%) high mild + 5 (5.00%) high severe + +bench_g1_lincomb with precomputation points: '1048576' + time: [10.241 s 10.379 s 10.517 s] +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [481.33 ms 507.61 ms 537.18 ms] + change: [-96.021% -95.811% -95.569%] (p = 0.00 < 0.05) + Performance has improved. +Found 22 outliers among 100 measurements (22.00%) + 22 (22.00%) high severe + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [16.521 s 16.912 s 17.431 s] + change: [-4.1299% +0.2474% +4.1453%] (p = 0.92 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '1048576' + time: [14.038 s 14.245 s 14.534 s] + change: [+34.467% +37.249% +40.293%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (parallel) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [28.882 s 29.305 s 29.827 s] + change: [+67.483% +73.273% +78.557%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark) ~~~~~~~~~~ + + +bench_g1_lincomb points: '1048576' + time: [897.75 ms 1.0144 s 1.1542 s] + change: [-96.917% -96.538% -96.049%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks3 backend (sppark_wlc) ~~~~~~~~~~ + + diff --git a/benchmark_script/input/rust-kzg-benchmarks.txt b/benchmark_script/input/rust-kzg-benchmarks.txt new file mode 100644 index 000000000..ca2219535 --- /dev/null +++ b/benchmark_script/input/rust-kzg-benchmarks.txt @@ -0,0 +1,24491 @@ +Model name: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +CPU(s): 16 + + + +********** BENCHMARKING ON 1 CORES ********** + + + + + +~~~~~~~~~~ go-kzg-4844 ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/crate-crypto/go-kzg-4844 +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +BenchmarkComputeChallenge 3742 319912 ns/op 32 B/op 1 allocs/op +Benchmark/BlobToKZGCommitment 21 54699872 ns/op 382112 B/op 65 allocs/op +Benchmark/ComputeKZGProof 20 55783962 ns/op 907560 B/op 76 allocs/op +Benchmark/ComputeBlobKZGProof 20 56364534 ns/op 907960 B/op 83 allocs/op +Benchmark/VerifyKZGProof 834 1429139 ns/op 6616 B/op 55 allocs/op +Benchmark/VerifyBlobKZGProof 470 2486337 ns/op 400480 B/op 64 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=1) 470 2492762 ns/op 400736 B/op 66 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=2) 252 4780271 ns/op 884244 B/op 487 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=4) 158 7605657 ns/op 1675116 B/op 532 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=8) 88 13128318 ns/op 3256827 B/op 619 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=16) 49 23775055 ns/op 6420366 B/op 793 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=32) 25 45254380 ns/op 12747423 B/op 1149 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=64) 13 87195195 ns/op 25379336 B/op 1795 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=1) 477 2480991 ns/op 400664 B/op 67 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=2) 241 4988077 ns/op 801341 B/op 135 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=4) 100 10044116 ns/op 1602614 B/op 270 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=8) 60 20002459 ns/op 3205147 B/op 537 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=16) 28 40573594 ns/op 6410193 B/op 1072 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=32) 14 79727856 ns/op 12820393 B/op 2149 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=64) 7 160538604 ns/op 25640941 B/op 4315 allocs/op +BenchmarkDeserializeBlob 7363 164064 ns/op 131638 B/op 6 allocs/op +PASS +ok github.com/crate-crypto/go-kzg-4844 40.434s + + + +~~~~~~~~~~ rust binding (c-kzg-4844) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [50.513 ms 50.666 ms 50.823 ms] + +compute_kzg_proof time: [53.712 ms 53.853 ms 53.991 ms] + +compute_blob_kzg_proof time: [53.913 ms 54.069 ms 54.223 ms] + +verify_kzg_proof time: [1.3635 ms 1.3671 ms 1.3708 ms] +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.6513 ms 2.6596 ms 2.6679 ms] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.6559 ms 2.6626 ms 2.6691 ms] + thrpt: [374.66 elem/s 375.57 elem/s 376.52 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [4.5487 ms 4.5674 ms 4.5888 ms] + thrpt: [435.85 elem/s 437.89 elem/s 439.69 elem/s] +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.9867 ms 8.0128 ms 8.0397 ms] + thrpt: [497.53 elem/s 499.20 elem/s 500.83 elem/s] +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [14.921 ms 14.964 ms 15.006 ms] + thrpt: [533.13 elem/s 534.63 elem/s 536.16 elem/s] +verify_blob_kzg_proof_batch/16 + time: [28.858 ms 28.939 ms 29.021 ms] + thrpt: [551.33 elem/s 552.89 elem/s 554.44 elem/s] +verify_blob_kzg_proof_batch/32 + time: [57.107 ms 57.271 ms 57.435 ms] + thrpt: [557.15 elem/s 558.75 elem/s 560.35 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [113.25 ms 113.53 ms 113.80 ms] + thrpt: [562.38 elem/s 563.75 elem/s 565.12 elem/s] + + + + +~~~~~~~~~~ constantine ~~~~~~~~~~ + + + Executing task bench_eth_eip4844_kzg in /root/benches/constantine/constantine.nimble +bench xoshiro512** seed: 1720274277 +Warmup: 1.0365 s, result 224 (displayed to avoid compiler optimizing warmup away) + + +Compiled with Clang +Optimization level => + no optimization: false + release: true + danger: true + inline assembly: true +Using Constantine with 64-bit limbs +Running on Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz + +⚠️ Cycles measurements are approximate and use the CPU nominal clock: Turbo-Boost and overclocking will skew them. +i.e. a 20% overclock will be about 20% off (assuming no dynamic frequency scaling) + +================================================================================================================= + +Trusted Setup loaded successfully +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +blob_to_kzg_commitment serial 29.314 ops/s 34113335 ns/op 91890240 CPU cycles (approx) +blob_to_kzg_commitment 16 threads 24.689 ops/s 40503271 ns/op 109102665 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.842x + +compute_kzg_proof serial 28.728 ops/s 34808669 ns/op 93763243 CPU cycles (approx) +compute_kzg_proof 16 threads 24.368 ops/s 41037779 ns/op 110542470 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.848x + +compute_blob_kzg_proof serial 28.511 ops/s 35073585 ns/op 94476838 CPU cycles (approx) +compute_blob_kzg_proof 16 threads 23.961 ops/s 41734359 ns/op 112418813 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.840x + +verify_kzg_proof serial 936.652 ops/s 1067632 ns/op 2875824 CPU cycles (approx) +verify_kzg_proof is always serial + +verify_blob_kzg_proof serial 469.897 ops/s 2128127 ns/op 5732456 CPU cycles (approx) +verify_blob_kzg_proof 16 threads 439.583 ops/s 2274882 ns/op 6127768 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.935x + +verify_blob_kzg_proof (batch 1) serial 460.749 ops/s 2170378 ns/op 5846270 CPU cycles (approx) +verify_blob_kzg_proof (batch 1) 16 threads 415.810 ops/s 2404943 ns/op 6478115 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.902x + +verify_blob_kzg_proof (batch 2) serial 283.895 ops/s 3522424 ns/op 9488246 CPU cycles (approx) +verify_blob_kzg_proof (batch 2) 16 threads 248.167 ops/s 4029537 ns/op 10854245 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.874x + +verify_blob_kzg_proof (batch 4) serial 160.587 ops/s 6227170 ns/op 16773955 CPU cycles (approx) +verify_blob_kzg_proof (batch 4) 16 threads 146.736 ops/s 6814941 ns/op 18357219 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.914x + +verify_blob_kzg_proof (batch 8) serial 86.108 ops/s 11613352 ns/op 31282571 CPU cycles (approx) +verify_blob_kzg_proof (batch 8) 16 threads 79.471 ops/s 12583157 ns/op 33894914 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.923x + +verify_blob_kzg_proof (batch 16) serial 45.403 ops/s 22025048 ns/op 59328309 CPU cycles (approx) +verify_blob_kzg_proof (batch 16) 16 threads 41.837 ops/s 23902278 ns/op 64384969 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.921x + +verify_blob_kzg_proof (batch 32) serial 23.442 ops/s 42658923 ns/op 114909293 CPU cycles (approx) +verify_blob_kzg_proof (batch 32) 16 threads 21.747 ops/s 45984001 ns/op 123865978 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.928x + +verify_blob_kzg_proof (batch 64) serial 11.870 ops/s 84245293 ns/op 226929503 CPU cycles (approx) +verify_blob_kzg_proof (batch 64) 16 threads 10.896 ops/s 91778013 ns/op 247220199 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.918x + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.7986 ms 7.8308 ms 7.8638 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [76.372 ms 76.559 ms 76.745 ms] + +compute_kzg_proof time: [80.321 ms 80.502 ms 80.682 ms] +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild + +verify_kzg_proof time: [2.6395 ms 2.6450 ms 2.6505 ms] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [80.774 ms 80.971 ms 81.169 ms] + +verify_blob_kzg_proof time: [4.0238 ms 4.0330 ms 4.0421 ms] + +verify_blob_kzg_proof_batch/1 + time: [4.0941 ms 4.1052 ms 4.1168 ms] + thrpt: [242.91 elem/s 243.59 elem/s 244.25 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9312 ms 5.9451 ms 5.9595 ms] + thrpt: [335.60 elem/s 336.41 elem/s 337.20 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.534 ms 10.560 ms 10.587 ms] + thrpt: [377.83 elem/s 378.77 elem/s 379.73 elem/s] +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [17.117 ms 17.155 ms 17.193 ms] + thrpt: [465.31 elem/s 466.32 elem/s 467.38 elem/s] +verify_blob_kzg_proof_batch/16 + time: [31.691 ms 31.763 ms 31.838 ms] + thrpt: [502.55 elem/s 503.72 elem/s 504.88 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [59.537 ms 59.702 ms 59.868 ms] + thrpt: [534.51 elem/s 536.00 elem/s 537.48 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [115.21 ms 115.47 ms 115.74 ms] + thrpt: [552.97 elem/s 554.25 elem/s 555.52 elem/s] +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [8.3206 ms 8.3559 ms 8.3934 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [1.0381 s 1.0412 s 1.0440 s] + +bench_fk_single_da scale: '14' + time: [51.599 s 51.700 s 51.796 s] + +bench_fk_multi_da scale: '14' + time: [12.035 s 12.063 s 12.092 s] +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + +bench_commit_to_poly scale: '15' + time: [501.57 ms 502.82 ms 503.98 ms] + +bench_compute_proof_single scale: '15' + time: [518.21 ms 520.07 ms 522.12 ms] + +bench_g1_lincomb points: '4096' + time: [80.116 ms 80.291 ms 80.479 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [372.46 ms 373.76 ms 375.30 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [410.21 ms 411.59 ms 413.22 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [183.79 ms 184.35 ms 185.04 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.9146 ms 7.9327 ms 7.9558 ms] + change: [+0.1742% +1.1970% +2.0968%] (p = 0.03 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [57.509 ms 57.659 ms 57.810 ms] + change: [-24.961% -24.687% -24.420%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [62.164 ms 62.335 ms 62.516 ms] + change: [-22.848% -22.566% -22.311%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [2.6777 ms 2.6846 ms 2.6915 ms] + change: [+1.1676% +1.4981% +1.8417%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [63.256 ms 63.433 ms 63.616 ms] + change: [-21.938% -21.660% -21.369%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [4.1160 ms 4.1275 ms 4.1390 ms] + change: [+1.9533% +2.3427% +2.7224%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof_batch/1 + time: [4.1875 ms 4.1977 ms 4.2078 ms] + thrpt: [237.65 elem/s 238.22 elem/s 238.81 elem/s] + change: + time: [+1.8949% +2.2531% +2.6245%] (p = 0.00 < 0.05) + thrpt: [-2.5574% -2.2034% -1.8596%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [6.0088 ms 6.0247 ms 6.0404 ms] + thrpt: [331.11 elem/s 331.97 elem/s 332.85 elem/s] + change: + time: [+0.9695% +1.3394% +1.6899%] (p = 0.00 < 0.05) + thrpt: [-1.6618% -1.3217% -0.9602%] + Change within noise threshold. +verify_blob_kzg_proof_batch/4 + time: [10.554 ms 10.587 ms 10.620 ms] + thrpt: [376.66 elem/s 377.82 elem/s 378.99 elem/s] + change: + time: [-0.1492% +0.2509% +0.6476%] (p = 0.22 > 0.05) + thrpt: [-0.6434% -0.2502% +0.1494%] + No change in performance detected. +verify_blob_kzg_proof_batch/8 + time: [24.815 ms 24.881 ms 24.947 ms] + thrpt: [320.67 elem/s 321.53 elem/s 322.39 elem/s] + change: + time: [+44.529% +45.033% +45.535%] (p = 0.00 < 0.05) + thrpt: [-31.288% -31.050% -30.810%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [41.584 ms 41.709 ms 41.839 ms] + thrpt: [382.42 elem/s 383.61 elem/s 384.76 elem/s] + change: + time: [+30.814% +31.310% +31.855%] (p = 0.00 < 0.05) + thrpt: [-24.159% -23.845% -23.556%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [68.514 ms 68.805 ms 69.136 ms] + thrpt: [462.85 elem/s 465.09 elem/s 467.06 elem/s] + change: + time: [+14.646% +15.247% +15.925%] (p = 0.00 < 0.05) + thrpt: [-13.737% -13.230% -12.775%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [122.78 ms 123.06 ms 123.34 ms] + thrpt: [518.87 elem/s 520.05 elem/s 521.24 elem/s] + change: + time: [+6.2454% +6.5747% +6.9191%] (p = 0.00 < 0.05) + thrpt: [-6.4713% -6.1691% -5.8783%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [8.5695 ms 8.6090 ms 8.6642 ms] + change: [+2.2429% +3.0612% +3.7795%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [1.0236 s 1.0279 s 1.0324 s] + change: [-1.8002% -1.2821% -0.7765%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [51.451 s 51.501 s 51.549 s] + change: [-0.5943% -0.3851% -0.1714%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [12.006 s 12.027 s 12.047 s] + change: [-0.5994% -0.2990% -0.0147%] (p = 0.07 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [387.24 ms 389.10 ms 391.30 ms] + change: [-23.013% -22.618% -22.110%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_compute_proof_single scale: '15' + time: [435.29 ms 437.70 ms 440.37 ms] + change: [-16.436% -15.839% -15.219%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [61.252 ms 61.414 ms 61.579 ms] + change: [-23.921% -23.648% -23.395%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [369.14 ms 370.51 ms 371.79 ms] + change: [-1.3776% -0.8705% -0.3623%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [402.70 ms 404.25 ms 405.93 ms] + change: [-2.3313% -1.7828% -1.2417%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [179.99 ms 180.44 ms 180.79 ms] + change: [-2.8145% -2.3645% -1.9527%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.9038 ms 7.9295 ms 7.9560 ms] + change: [-1.1814% -0.5532% +0.0542%] (p = 0.12 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [54.909 ms 55.063 ms 55.217 ms] + change: [-4.8738% -4.5019% -4.1387%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_kzg_proof time: [56.109 ms 56.253 ms 56.402 ms] + change: [-10.109% -9.7567% -9.4125%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.6729 ms 2.6782 ms 2.6834 ms] + change: [-0.5727% -0.2388% +0.0886%] (p = 0.15 > 0.05) + No change in performance detected. + +compute_blob_kzg_proof time: [57.163 ms 57.320 ms 57.477 ms] + change: [-10.006% -9.6365% -9.2724%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [4.1483 ms 4.1581 ms 4.1679 ms] + change: [+0.3642% +0.7416% +1.1167%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1718 ms 4.1827 ms 4.1936 ms] + thrpt: [238.46 elem/s 239.08 elem/s 239.70 elem/s] + change: + time: [-0.7143% -0.3591% -0.0036%] (p = 0.05 < 0.05) + thrpt: [+0.0036% +0.3604% +0.7194%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [6.0294 ms 6.0411 ms 6.0524 ms] + thrpt: [330.44 elem/s 331.07 elem/s 331.71 elem/s] + change: + time: [-0.0498% +0.2715% +0.6043%] (p = 0.11 > 0.05) + thrpt: [-0.6007% -0.2708% +0.0499%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/4 + time: [10.576 ms 10.601 ms 10.626 ms] + thrpt: [376.43 elem/s 377.31 elem/s 378.22 elem/s] + change: + time: [-0.2558% +0.1351% +0.5276%] (p = 0.50 > 0.05) + thrpt: [-0.5249% -0.1349% +0.2565%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [17.070 ms 17.116 ms 17.165 ms] + thrpt: [466.08 elem/s 467.39 elem/s 468.66 elem/s] + change: + time: [-31.458% -31.207% -30.938%] (p = 0.00 < 0.05) + thrpt: [+44.797% +45.365% +45.897%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [31.626 ms 31.700 ms 31.772 ms] + thrpt: [503.58 elem/s 504.74 elem/s 505.92 elem/s] + change: + time: [-24.298% -23.998% -23.701%] (p = 0.00 < 0.05) + thrpt: [+31.064% +31.575% +32.096%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [59.994 ms 60.155 ms 60.317 ms] + thrpt: [530.53 elem/s 531.96 elem/s 533.39 elem/s] + change: + time: [-13.061% -12.571% -12.121%] (p = 0.00 < 0.05) + thrpt: [+13.793% +14.378% +15.024%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [115.24 ms 115.54 ms 115.85 ms] + thrpt: [552.44 elem/s 553.91 elem/s 555.35 elem/s] + change: + time: [-6.4510% -6.1117% -5.7926%] (p = 0.00 < 0.05) + thrpt: [+6.1488% +6.5095% +6.8958%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [8.3354 ms 8.3842 ms 8.4318 ms] + change: [-3.6372% -2.9748% -2.3012%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [1.0200 s 1.0236 s 1.0277 s] + change: [-0.9880% -0.4118% +0.1544%] (p = 0.20 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [51.654 s 51.691 s 51.736 s] + change: [+0.2485% +0.3689% +0.4961%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fk_multi_da scale: '14' + time: [12.040 s 12.058 s 12.079 s] + change: [+0.0258% +0.2602% +0.5158%] (p = 0.06 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [387.15 ms 388.20 ms 389.32 ms] + change: [-0.8544% -0.2308% +0.3105%] (p = 0.49 > 0.05) + No change in performance detected. + +bench_compute_proof_single scale: '15' + time: [385.67 ms 386.61 ms 387.39 ms] + change: [-12.238% -11.673% -11.148%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [80.152 ms 80.364 ms 80.637 ms] + change: [+30.775% +31.422% +32.216%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [55.431 ms 55.625 ms 55.789 ms] +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [370.41 ms 372.60 ms 374.73 ms] + change: [-0.1296% +0.5635% +1.2285%] (p = 0.15 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [408.21 ms 409.62 ms 411.18 ms] + change: [+0.7777% +1.3272% +1.8628%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [182.15 ms 182.90 ms 183.68 ms] + change: [+1.1366% +1.6144% +2.1387%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.0397 ms 8.0534 ms 8.0626 ms] + change: [+0.8884% +1.4123% +1.9704%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low severe + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [76.756 ms 76.977 ms 77.198 ms] + change: [+39.205% +39.798% +40.359%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [81.407 ms 81.595 ms 81.801 ms] + change: [+44.549% +45.049% +45.592%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6399 ms 2.6464 ms 2.6532 ms] + change: [-1.4747% -1.1868% -0.8661%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [81.151 ms 81.348 ms 81.546 ms] + change: [+41.403% +41.918% +42.423%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [4.1324 ms 4.1454 ms 4.1596 ms] + change: [-0.6984% -0.3064% +0.1112%] (p = 0.14 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [4.1641 ms 4.1773 ms 4.1905 ms] + thrpt: [238.64 elem/s 239.39 elem/s 240.15 elem/s] + change: + time: [-0.5296% -0.1292% +0.2475%] (p = 0.54 > 0.05) + thrpt: [-0.2469% +0.1293% +0.5325%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [8.5682 ms 8.5983 ms 8.6331 ms] + thrpt: [231.67 elem/s 232.60 elem/s 233.42 elem/s] + change: + time: [+41.729% +42.331% +42.952%] (p = 0.00 < 0.05) + thrpt: [-30.046% -29.741% -29.443%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [16.682 ms 16.728 ms 16.774 ms] + thrpt: [238.47 elem/s 239.12 elem/s 239.77 elem/s] + change: + time: [+57.253% +57.796% +58.381%] (p = 0.00 < 0.05) + thrpt: [-36.861% -36.627% -36.408%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [33.259 ms 33.356 ms 33.454 ms] + thrpt: [239.14 elem/s 239.84 elem/s 240.53 elem/s] + change: + time: [+94.122% +94.876% +95.672%] (p = 0.00 < 0.05) + thrpt: [-48.894% -48.685% -48.486%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [65.990 ms 66.173 ms 66.359 ms] + thrpt: [241.11 elem/s 241.79 elem/s 242.46 elem/s] + change: + time: [+107.99% +108.75% +109.47%] (p = 0.00 < 0.05) + thrpt: [-52.260% -52.096% -51.920%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [95.602 ms 95.837 ms 96.074 ms] + thrpt: [333.08 elem/s 333.90 elem/s 334.72 elem/s] + change: + time: [+58.741% +59.316% +59.911%] (p = 0.00 < 0.05) + thrpt: [-37.465% -37.232% -37.004%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [170.94 ms 171.28 ms 171.62 ms] + thrpt: [372.91 elem/s 373.66 elem/s 374.41 elem/s] + change: + time: [+47.755% +48.240% +48.736%] (p = 0.00 < 0.05) + thrpt: [-32.767% -32.542% -32.320%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [8.5661 ms 8.6042 ms 8.6294 ms] + change: [+2.2703% +2.9073% +3.5004%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [1.0226 s 1.0260 s 1.0299 s] + change: [-0.2857% +0.2288% +0.7279%] (p = 0.43 > 0.05) + No change in performance detected. +Found 4 outliers among 10 measurements (40.00%) + 2 (20.00%) low mild + 2 (20.00%) high severe + +bench_fk_single_da scale: '14' + time: [51.245 s 51.308 s 51.380 s] + change: [-0.8877% -0.7398% -0.5793%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [12.026 s 12.052 s 12.077 s] + change: [-0.3435% -0.0566% +0.2085%] (p = 0.70 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [500.04 ms 501.72 ms 503.50 ms] + change: [+28.677% +29.245% +29.810%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [511.98 ms 514.49 ms 516.97 ms] + change: [+32.333% +33.077% +33.751%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [79.493 ms 79.826 ms 80.080 ms] + change: [-1.9019% -1.2732% -0.6550%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_new_poly_div scale: '15' + time: [361.57 ms 363.41 ms 365.32 ms] + change: [-3.2122% -2.4647% -1.7210%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [409.02 ms 410.23 ms 411.46 ms] + change: [-0.3431% +0.1483% +0.5775%] (p = 0.56 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [191.14 ms 191.87 ms 192.78 ms] + change: [+4.2942% +4.9011% +5.6055%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.1977 ms 8.2428 ms 8.3038 ms] + change: [+2.1430% +2.8955% +3.6370%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [55.578 ms 55.736 ms 55.902 ms] + change: [-27.886% -27.594% -27.299%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high severe + +compute_kzg_proof time: [56.592 ms 56.736 ms 56.877 ms] + change: [-30.717% -30.466% -30.233%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.6660 ms 2.6728 ms 2.6795 ms] + change: [+0.6314% +0.9965% +1.3340%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [57.350 ms 57.530 ms 57.738 ms] + change: [-29.565% -29.279% -28.998%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [4.1278 ms 4.1400 ms 4.1524 ms] + change: [-0.5751% -0.1297% +0.3160%] (p = 0.57 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1647 ms 4.1775 ms 4.1908 ms] + thrpt: [238.62 elem/s 239.38 elem/s 240.11 elem/s] + change: + time: [-0.4238% +0.0050% +0.4375%] (p = 0.99 > 0.05) + thrpt: [-0.4356% -0.0050% +0.4256%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [8.6471 ms 8.6680 ms 8.6904 ms] + thrpt: [230.14 elem/s 230.73 elem/s 231.29 elem/s] + change: + time: [+0.3541% +0.8106% +1.2524%] (p = 0.00 < 0.05) + thrpt: [-1.2369% -0.8041% -0.3528%] + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [16.861 ms 16.908 ms 16.960 ms] + thrpt: [235.85 elem/s 236.57 elem/s 237.24 elem/s] + change: + time: [+0.6971% +1.0766% +1.5017%] (p = 0.00 < 0.05) + thrpt: [-1.4794% -1.0652% -0.6923%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [33.258 ms 33.361 ms 33.464 ms] + thrpt: [239.06 elem/s 239.80 elem/s 240.54 elem/s] + change: + time: [-0.3782% +0.0149% +0.4502%] (p = 0.95 > 0.05) + thrpt: [-0.4482% -0.0149% +0.3796%] + No change in performance detected. +verify_blob_kzg_proof_batch/16 + time: [66.643 ms 66.834 ms 67.037 ms] + thrpt: [238.68 elem/s 239.40 elem/s 240.09 elem/s] + change: + time: [+0.5564% +0.9983% +1.4206%] (p = 0.00 < 0.05) + thrpt: [-1.4007% -0.9884% -0.5534%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [95.559 ms 95.763 ms 95.964 ms] + thrpt: [333.46 elem/s 334.16 elem/s 334.87 elem/s] + change: + time: [-0.4066% -0.0770% +0.2437%] (p = 0.65 > 0.05) + thrpt: [-0.2431% +0.0770% +0.4083%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [168.48 ms 168.85 ms 169.23 ms] + thrpt: [378.19 elem/s 379.03 elem/s 379.86 elem/s] + change: + time: [-1.7065% -1.4172% -1.1020%] (p = 0.00 < 0.05) + thrpt: [+1.1142% +1.4376% +1.7361%] + Performance has improved. + +bench_fft_fr scale: '15' + time: [8.6567 ms 8.6840 ms 8.7189 ms] + change: [+0.1687% +0.7991% +1.3811%] (p = 0.03 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [1.0173 s 1.0198 s 1.0223 s] + change: [-1.0588% -0.6006% -0.1955%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [51.358 s 51.491 s 51.628 s] + change: [+0.0360% +0.3554% +0.6535%] (p = 0.04 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [12.027 s 12.042 s 12.061 s] + change: [-0.3297% -0.0760% +0.1865%] (p = 0.59 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [383.59 ms 385.75 ms 388.16 ms] + change: [-23.622% -23.116% -22.559%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [388.99 ms 390.48 ms 392.14 ms] + change: [-24.581% -24.102% -23.618%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [79.943 ms 80.361 ms 80.748 ms] + change: [+0.4260% +0.9483% +1.4782%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_g1_lincomb with precomputation points: '4096' + time: [55.092 ms 55.386 ms 55.570 ms] + change: [-1.2862% -0.5224% +0.3706%] (p = 0.26 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [362.47 ms 365.53 ms 368.88 ms] + change: [-0.4383% +0.5828% +1.6204%] (p = 0.31 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [412.55 ms 415.35 ms 418.10 ms] + change: [+0.4556% +1.2493% +1.9595%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [188.24 ms 189.55 ms 190.85 ms] + change: [-2.0166% -1.2055% -0.3866%] (p = 0.01 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [10.428 ms 10.475 ms 10.506 ms] + change: [+24.996% +25.963% +26.955%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [155.92 ms 156.29 ms 156.66 ms] + change: [+179.35% +180.41% +181.45%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [162.95 ms 163.21 ms 163.46 ms] + change: [+186.82% +187.66% +188.54%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [4.0913 ms 4.1083 ms 4.1277 ms] + change: [+53.000% +53.710% +54.619%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [165.46 ms 166.15 ms 166.85 ms] + change: [+187.28% +188.80% +190.36%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [5.6281 ms 5.6408 ms 5.6543 ms] + change: [+35.742% +36.252% +36.769%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.7710 ms 5.7926 ms 5.8158 ms] + thrpt: [171.95 elem/s 172.63 elem/s 173.28 elem/s] + change: + time: [+37.993% +38.662% +39.366%] (p = 0.00 < 0.05) + thrpt: [-28.246% -27.882% -27.533%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [10.882 ms 10.906 ms 10.931 ms] + thrpt: [182.97 elem/s 183.38 elem/s 183.80 elem/s] + change: + time: [+25.374% +25.823% +26.232%] (p = 0.00 < 0.05) + thrpt: [-20.781% -20.523% -20.239%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [15.249 ms 15.292 ms 15.334 ms] + thrpt: [260.85 elem/s 261.58 elem/s 262.32 elem/s] + change: + time: [-9.9266% -9.5627% -9.1918%] (p = 0.00 < 0.05) + thrpt: [+10.122% +10.574% +11.021%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [24.003 ms 24.088 ms 24.184 ms] + thrpt: [330.80 elem/s 332.12 elem/s 333.29 elem/s] + change: + time: [-28.128% -27.795% -27.457%] (p = 0.00 < 0.05) + thrpt: [+37.849% +38.495% +39.137%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [41.367 ms 41.500 ms 41.634 ms] + thrpt: [384.30 elem/s 385.54 elem/s 386.78 elem/s] + change: + time: [-38.179% -37.905% -37.640%] (p = 0.00 < 0.05) + thrpt: [+60.358% +61.044% +61.757%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [86.606 ms 86.852 ms 87.096 ms] + thrpt: [367.41 elem/s 368.44 elem/s 369.49 elem/s] + change: + time: [-9.6367% -9.3059% -8.9802%] (p = 0.00 < 0.05) + thrpt: [+9.8663% +10.261% +10.664%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [154.36 ms 154.78 ms 155.23 ms] + thrpt: [412.29 elem/s 413.50 elem/s 414.62 elem/s] + change: + time: [-8.6613% -8.3357% -8.0018%] (p = 0.00 < 0.05) + thrpt: [+8.6978% +9.0938% +9.4827%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [11.482 ms 11.508 ms 11.525 ms] + change: [+31.564% +32.194% +32.864%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [99.603 s 99.937 s 100.35 s] + change: [+9658.4% +9699.6% +9745.2%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [105.23 s 105.33 s 105.43 s] + change: [+104.00% +104.56% +105.13%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_multi_da scale: '14' + time: [23.138 s 23.199 s 23.259 s] + change: [+92.063% +92.646% +93.188%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [997.94 ms 1.0028 s 1.0081 s] + change: [+157.91% +159.96% +161.79%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [909.89 ms 913.44 ms 917.73 ms] + change: [+132.55% +133.92% +135.29%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [160.52 ms 161.44 ms 162.12 ms] + change: [+98.600% +99.852% +101.18%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [794.62 ms 804.52 ms 815.34 ms] + change: [+116.89% +120.10% +123.58%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [595.43 ms 597.16 ms 598.80 ms] + change: [+42.732% +43.772% +44.816%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [207.54 ms 208.41 ms 209.34 ms] + change: [+9.0616% +9.9472% +10.875%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [10.350 ms 10.398 ms 10.427 ms] + change: [-0.9048% -0.3416% +0.2377%] (p = 0.28 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [155.26 ms 155.64 ms 156.03 ms] + change: [-0.7542% -0.4166% -0.0665%] (p = 0.02 < 0.05) + Change within noise threshold. + +compute_kzg_proof time: [159.76 ms 160.17 ms 160.58 ms] + change: [-2.1372% -1.8593% -1.5413%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [3.9723 ms 3.9846 ms 3.9969 ms] + change: [-3.5636% -3.0124% -2.5280%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [160.51 ms 160.92 ms 161.34 ms] + change: [-3.6197% -3.1448% -2.6789%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [5.4790 ms 5.4971 ms 5.5155 ms] + change: [-2.9410% -2.5489% -2.1255%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [5.4726 ms 5.4880 ms 5.5033 ms] + thrpt: [181.71 elem/s 182.22 elem/s 182.73 elem/s] + change: + time: [-5.6964% -5.2580% -4.7913%] (p = 0.00 < 0.05) + thrpt: [+5.0324% +5.5499% +6.0405%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [11.336 ms 11.369 ms 11.403 ms] + thrpt: [175.40 elem/s 175.91 elem/s 176.42 elem/s] + change: + time: [+3.8616% +4.2458% +4.6325%] (p = 0.00 < 0.05) + thrpt: [-4.4274% -4.0729% -3.7180%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [22.381 ms 22.445 ms 22.507 ms] + thrpt: [177.72 elem/s 178.21 elem/s 178.72 elem/s] + change: + time: [+46.216% +46.780% +47.360%] (p = 0.00 < 0.05) + thrpt: [-32.139% -31.871% -31.608%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [44.009 ms 44.140 ms 44.276 ms] + thrpt: [180.69 elem/s 181.24 elem/s 181.78 elem/s] + change: + time: [+82.368% +83.244% +84.081%] (p = 0.00 < 0.05) + thrpt: [-45.676% -45.428% -45.166%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [87.547 ms 87.785 ms 88.024 ms] + thrpt: [181.77 elem/s 182.26 elem/s 182.76 elem/s] + change: + time: [+110.63% +111.53% +112.40%] (p = 0.00 < 0.05) + thrpt: [-52.920% -52.725% -52.524%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [170.86 ms 171.24 ms 171.62 ms] + thrpt: [186.46 elem/s 186.87 elem/s 187.29 elem/s] + change: + time: [+96.468% +97.167% +97.860%] (p = 0.00 < 0.05) + thrpt: [-49.459% -49.281% -49.101%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [242.91 ms 243.87 ms 244.85 ms] + thrpt: [261.38 elem/s 262.44 elem/s 263.47 elem/s] + change: + time: [+56.789% +57.560% +58.334%] (p = 0.00 < 0.05) + thrpt: [-36.843% -36.532% -36.220%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [11.398 ms 11.424 ms 11.463 ms] + change: [-0.9040% -0.3515% +0.2817%] (p = 0.27 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [99.370 s 99.450 s 99.528 s] + change: [-0.8912% -0.4875% -0.1407%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [105.59 s 105.69 s 105.78 s] + change: [+0.2018% +0.3389% +0.4684%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [23.125 s 23.177 s 23.223 s] + change: [-0.4346% -0.0947% +0.2495%] (p = 0.61 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [1.0042 s 1.0082 s 1.0120 s] + change: [-0.1031% +0.5456% +1.1816%] (p = 0.13 > 0.05) + No change in performance detected. + +bench_compute_proof_single scale: '15' + time: [908.17 ms 911.27 ms 913.94 ms] + change: [-0.8037% -0.2368% +0.2674%] (p = 0.43 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [158.02 ms 158.46 ms 159.32 ms] + change: [-2.2762% -1.5633% -0.7655%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [767.84 ms 770.57 ms 773.64 ms] + change: [-5.5274% -4.2194% -2.9608%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [591.03 ms 593.01 ms 595.33 ms] + change: [-1.1317% -0.6947% -0.2152%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [207.59 ms 208.66 ms 210.00 ms] + change: [-0.5817% +0.1218% +0.8195%] (p = 0.77 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2115 ms 9.2491 ms 9.2951 ms] + change: [-11.044% -10.628% -10.228%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [52.277 ms 52.394 ms 52.512 ms] + change: [-66.444% -66.336% -66.225%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [55.217 ms 55.338 ms 55.458 ms] + change: [-65.564% -65.451% -65.329%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.2391 ms 1.2424 ms 1.2458 ms] + change: [-68.957% -68.836% -68.714%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [56.286 ms 56.410 ms 56.533 ms] + change: [-65.064% -64.946% -64.825%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof time: [2.8113 ms 2.8191 ms 2.8271 ms] + change: [-48.938% -48.716% -48.494%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.8635 ms 2.8705 ms 2.8776 ms] + thrpt: [347.51 elem/s 348.37 elem/s 349.22 elem/s] + change: + time: [-47.888% -47.695% -47.495%] (p = 0.00 < 0.05) + thrpt: [+90.458% +91.186% +91.896%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.5872 ms 4.5978 ms 4.6085 ms] + thrpt: [433.98 elem/s 434.99 elem/s 435.99 elem/s] + change: + time: [-59.705% -59.560% -59.405%] (p = 0.00 < 0.05) + thrpt: [+146.33% +147.28% +148.17%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [8.4107 ms 8.4329 ms 8.4557 ms] + thrpt: [473.06 elem/s 474.33 elem/s 475.58 elem/s] + change: + time: [-62.580% -62.428% -62.287%] (p = 0.00 < 0.05) + thrpt: [+165.16% +166.16% +167.24%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [15.667 ms 15.708 ms 15.748 ms] + thrpt: [507.99 elem/s 509.30 elem/s 510.62 elem/s] + change: + time: [-64.552% -64.413% -64.268%] (p = 0.00 < 0.05) + thrpt: [+179.86% +181.00% +182.10%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [30.177 ms 30.263 ms 30.349 ms] + thrpt: [527.20 elem/s 528.70 elem/s 530.20 elem/s] + change: + time: [-65.670% -65.526% -65.392%] (p = 0.00 < 0.05) + thrpt: [+188.95% +190.07% +191.29%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [57.864 ms 58.041 ms 58.232 ms] + thrpt: [549.52 elem/s 551.33 elem/s 553.02 elem/s] + change: + time: [-66.227% -66.106% -65.970%] (p = 0.00 < 0.05) + thrpt: [+193.86% +195.04% +196.10%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [113.97 ms 114.24 ms 114.51 ms] + thrpt: [558.90 elem/s 560.22 elem/s 561.54 elem/s] + change: + time: [-53.368% -53.154% -52.937%] (p = 0.00 < 0.05) + thrpt: [+112.48% +113.47% +114.45%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.6565 ms 9.6872 ms 9.7236 ms] + change: [-15.860% -15.350% -14.814%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [18.802 s 18.835 s 18.872 s] + change: [-81.096% -81.061% -81.021%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [20.391 s 20.422 s 20.456 s] + change: [-80.713% -80.677% -80.640%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [4.7205 s 4.7328 s 4.7453 s] + change: [-79.644% -79.580% -79.511%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [343.33 ms 344.10 ms 344.90 ms] + change: [-66.019% -65.871% -65.712%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [355.37 ms 356.50 ms 357.73 ms] + change: [-61.036% -60.878% -60.688%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [54.439 ms 54.574 ms 54.710 ms] + change: [-65.714% -65.510% -65.324%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [673.95 ms 676.68 ms 679.44 ms] + change: [-12.689% -12.185% -11.739%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [273.62 ms 274.86 ms 276.20 ms] + change: [-53.921% -53.650% -53.350%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [170.01 ms 170.96 ms 171.47 ms] + change: [-18.939% -18.353% -17.819%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2557 ms 9.2747 ms 9.2937 ms] + change: [-0.6478% -0.2158% +0.2456%] (p = 0.38 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +blob_to_kzg_commitment time: [45.707 ms 45.830 ms 45.953 ms] + change: [-12.836% -12.530% -12.238%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [48.040 ms 48.141 ms 48.244 ms] + change: [-13.263% -13.006% -12.757%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_kzg_proof time: [1.2237 ms 1.2279 ms 1.2324 ms] + change: [-1.4026% -1.0416% -0.6671%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [49.167 ms 49.300 ms 49.436 ms] + change: [-12.906% -12.604% -12.282%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.8060 ms 2.8148 ms 2.8235 ms] + change: [-0.5698% -0.1541% +0.2555%] (p = 0.47 > 0.05) + No change in performance detected. + +verify_blob_kzg_proof_batch/1 + time: [2.8468 ms 2.8565 ms 2.8668 ms] + thrpt: [348.82 elem/s 350.08 elem/s 351.28 elem/s] + change: + time: [-0.9272% -0.4893% -0.0668%] (p = 0.03 < 0.05) + thrpt: [+0.0669% +0.4918% +0.9359%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.5880 ms 4.5996 ms 4.6110 ms] + thrpt: [433.74 elem/s 434.82 elem/s 435.92 elem/s] + change: + time: [-0.2992% +0.0393% +0.3710%] (p = 0.82 > 0.05) + thrpt: [-0.3696% -0.0393% +0.3001%] + No change in performance detected. +verify_blob_kzg_proof_batch/4 + time: [8.4504 ms 8.4737 ms 8.4965 ms] + thrpt: [470.78 elem/s 472.05 elem/s 473.35 elem/s] + change: + time: [+0.1100% +0.4840% +0.8594%] (p = 0.01 < 0.05) + thrpt: [-0.8521% -0.4816% -0.1098%] + Change within noise threshold. +verify_blob_kzg_proof_batch/8 + time: [20.495 ms 20.544 ms 20.591 ms] + thrpt: [388.52 elem/s 389.41 elem/s 390.33 elem/s] + change: + time: [+30.337% +30.786% +31.226%] (p = 0.00 < 0.05) + thrpt: [-23.795% -23.539% -23.276%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [36.343 ms 36.446 ms 36.549 ms] + thrpt: [437.77 elem/s 439.01 elem/s 440.25 elem/s] + change: + time: [+19.934% +20.431% +20.869%] (p = 0.00 < 0.05) + thrpt: [-17.266% -16.965% -16.621%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [64.360 ms 64.529 ms 64.700 ms] + thrpt: [494.59 elem/s 495.90 elem/s 497.20 elem/s] + change: + time: [+10.735% +11.178% +11.649%] (p = 0.00 < 0.05) + thrpt: [-10.434% -10.054% -9.6947%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [118.60 ms 118.85 ms 119.11 ms] + thrpt: [537.34 elem/s 538.47 elem/s 539.62 elem/s] + change: + time: [+3.7196% +4.0384% +4.3885%] (p = 0.00 < 0.05) + thrpt: [-4.2040% -3.8817% -3.5862%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [9.6260 ms 9.6557 ms 9.7149 ms] + change: [-1.0098% -0.3433% +0.3622%] (p = 0.37 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [18.748 s 18.785 s 18.822 s] + change: [-0.5409% -0.2660% +0.0032%] (p = 0.09 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [20.218 s 20.290 s 20.373 s] + change: [-1.0531% -0.6489% -0.2187%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.6870 s 4.7044 s 4.7214 s] + change: [-1.0509% -0.6003% -0.1664%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [315.45 ms 317.87 ms 320.52 ms] + change: [-8.3057% -7.6240% -6.8341%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [324.59 ms 325.57 ms 326.55 ms] + change: [-9.1034% -8.6784% -8.2960%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [47.711 ms 47.812 ms 47.912 ms] + change: [-12.675% -12.391% -12.111%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_new_poly_div scale: '15' + time: [668.25 ms 670.28 ms 672.52 ms] + change: [-1.4719% -0.9455% -0.4298%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [273.66 ms 274.70 ms 275.86 ms] + change: [-0.6832% -0.0588% +0.5428%] (p = 0.86 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [168.84 ms 169.73 ms 170.73 ms] + change: [-1.0094% -0.5053% +0.0239%] (p = 0.09 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2457 ms 9.2646 ms 9.2903 ms] + change: [-0.1780% +0.1214% +0.4361%] (p = 0.48 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [37.850 ms 37.936 ms 38.025 ms] + change: [-17.509% -17.223% -16.928%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [39.619 ms 39.727 ms 39.841 ms] + change: [-17.767% -17.477% -17.183%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2489 ms 1.2523 ms 1.2557 ms] + change: [+1.7408% +2.1150% +2.5228%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [40.572 ms 40.682 ms 40.793 ms] + change: [-17.805% -17.480% -17.164%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.8321 ms 2.8385 ms 2.8452 ms] + change: [+0.4566% +0.8435% +1.2440%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.8939 ms 2.9011 ms 2.9082 ms] + thrpt: [343.85 elem/s 344.70 elem/s 345.55 elem/s] + change: + time: [+1.1130% +1.5612% +1.9967%] (p = 0.00 < 0.05) + thrpt: [-1.9576% -1.5372% -1.1007%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6465 ms 4.6613 ms 4.6775 ms] + thrpt: [427.58 elem/s 429.06 elem/s 430.43 elem/s] + change: + time: [+0.9402% +1.3412% +1.8024%] (p = 0.00 < 0.05) + thrpt: [-1.7705% -1.3234% -0.9314%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [8.5340 ms 8.5529 ms 8.5717 ms] + thrpt: [466.65 elem/s 467.68 elem/s 468.71 elem/s] + change: + time: [+0.5946% +0.9341% +1.2976%] (p = 0.00 < 0.05) + thrpt: [-1.2810% -0.9254% -0.5911%] + Change within noise threshold. +verify_blob_kzg_proof_batch/8 + time: [16.000 ms 16.042 ms 16.089 ms] + thrpt: [497.22 elem/s 498.69 elem/s 500.00 elem/s] + change: + time: [-22.191% -21.913% -21.627%] (p = 0.00 < 0.05) + thrpt: [+27.596% +28.062% +28.520%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [30.472 ms 30.530 ms 30.586 ms] + thrpt: [523.11 elem/s 524.08 elem/s 525.07 elem/s] + change: + time: [-16.527% -16.233% -15.940%] (p = 0.00 < 0.05) + thrpt: [+18.963% +19.379% +19.799%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [58.843 ms 58.973 ms 59.104 ms] + thrpt: [541.42 elem/s 542.62 elem/s 543.82 elem/s] + change: + time: [-8.9302% -8.6095% -8.2896%] (p = 0.00 < 0.05) + thrpt: [+9.0389% +9.4206% +9.8059%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [115.34 ms 115.56 ms 115.78 ms] + thrpt: [552.76 elem/s 553.83 elem/s 554.90 elem/s] + change: + time: [-3.0515% -2.7731% -2.4807%] (p = 0.00 < 0.05) + thrpt: [+2.5438% +2.8522% +3.1475%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +bench_fft_fr scale: '15' + time: [9.7763 ms 9.8032 ms 9.8252 ms] + change: [+1.1690% +2.2996% +3.7132%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [18.953 s 18.986 s 19.018 s] + change: [+0.8142% +1.0696% +1.3297%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [20.243 s 20.311 s 20.380 s] + change: [-0.4201% +0.1035% +0.5983%] (p = 0.71 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6582 s 4.6747 s 4.6927 s] + change: [-1.1503% -0.6319% -0.1348%] (p = 0.04 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [273.99 ms 275.35 ms 276.86 ms] + change: [-14.182% -13.376% -12.522%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [270.20 ms 270.70 ms 271.22 ms] + change: [-17.146% -16.853% -16.551%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [54.048 ms 54.228 ms 54.406 ms] + change: [+12.954% +13.419% +13.839%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [38.663 ms 38.758 ms 38.857 ms] + change: [-30.687% -30.119% -29.639%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +bench_new_poly_div scale: '15' + time: [685.22 ms 691.94 ms 700.15 ms] + change: [+2.2151% +3.2307% +4.5535%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [272.53 ms 273.61 ms 274.88 ms] + change: [-0.9714% -0.3970% +0.1938%] (p = 0.23 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [170.47 ms 171.05 ms 171.51 ms] + change: [+0.4413% +1.0382% +1.6168%] (p = 0.00 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2832 ms 9.3127 ms 9.3600 ms] + change: [+0.3849% +1.1469% +1.8910%] (p = 0.01 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [52.070 ms 52.183 ms 52.297 ms] + change: [+37.130% +37.555% +37.978%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [55.029 ms 55.182 ms 55.339 ms] + change: [+38.343% +38.902% +39.447%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2500 ms 1.2542 ms 1.2586 ms] + change: [-1.0725% -0.6774% -0.2819%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [56.501 ms 56.642 ms 56.782 ms] + change: [+38.727% +39.232% +39.744%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof time: [2.8256 ms 2.8335 ms 2.8413 ms] + change: [-0.5354% -0.1768% +0.1780%] (p = 0.34 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8812 ms 2.8888 ms 2.8965 ms] + thrpt: [345.25 elem/s 346.16 elem/s 347.08 elem/s] + change: + time: [-0.7967% -0.4222% -0.0604%] (p = 0.02 < 0.05) + thrpt: [+0.0604% +0.4240% +0.8031%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [5.9924 ms 6.0085 ms 6.0244 ms] + thrpt: [331.98 elem/s 332.86 elem/s 333.75 elem/s] + change: + time: [+28.335% +28.902% +29.436%] (p = 0.00 < 0.05) + thrpt: [-22.742% -22.422% -22.079%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [11.640 ms 11.672 ms 11.706 ms] + thrpt: [341.70 elem/s 342.69 elem/s 343.64 elem/s] + change: + time: [+35.996% +36.473% +36.933%] (p = 0.00 < 0.05) + thrpt: [-26.971% -26.725% -26.468%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [23.031 ms 23.092 ms 23.152 ms] + thrpt: [345.54 elem/s 346.44 elem/s 347.36 elem/s] + change: + time: [+43.378% +43.945% +44.489%] (p = 0.00 < 0.05) + thrpt: [-30.791% -30.529% -30.255%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [45.779 ms 45.874 ms 45.970 ms] + thrpt: [348.05 elem/s 348.78 elem/s 349.51 elem/s] + change: + time: [+49.848% +50.260% +50.686%] (p = 0.00 < 0.05) + thrpt: [-33.637% -33.449% -33.266%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [73.946 ms 74.372 ms 74.895 ms] + thrpt: [427.27 elem/s 430.27 elem/s 432.75 elem/s] + change: + time: [+25.323% +26.111% +26.996%] (p = 0.00 < 0.05) + thrpt: [-21.257% -20.705% -20.206%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [137.37 ms 137.93 ms 138.58 ms] + thrpt: [461.84 elem/s 464.00 elem/s 465.90 elem/s] + change: + time: [+18.817% +19.359% +19.928%] (p = 0.00 < 0.05) + thrpt: [-16.617% -16.219% -15.837%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) high mild + 3 (3.00%) high severe + +bench_fft_fr scale: '15' + time: [9.7998 ms 9.8480 ms 9.8783 ms] + change: [-2.1956% -0.6876% +0.3515%] (p = 0.42 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [18.931 s 18.956 s 18.980 s] + change: [-0.3739% -0.1601% +0.0587%] (p = 0.18 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [20.383 s 20.419 s 20.456 s] + change: [+0.1428% +0.5347% +0.9093%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.7141 s 4.7254 s 4.7371 s] + change: [+0.6312% +1.0852% +1.5450%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [339.65 ms 340.96 ms 342.28 ms] + change: [+22.986% +23.827% +24.622%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [350.81 ms 352.03 ms 353.33 ms] + change: [+29.456% +30.046% +30.598%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [54.871 ms 55.023 ms 55.178 ms] + change: [+1.0208% +1.4669% +1.9093%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [658.56 ms 663.33 ms 668.37 ms] + change: [-5.4550% -4.1344% -2.9036%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [276.85 ms 277.75 ms 278.60 ms] + change: [+0.9393% +1.5159% +2.0346%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [170.53 ms 171.02 ms 171.49 ms] + change: [-0.6556% -0.1250% +0.3609%] (p = 0.65 > 0.05) + No change in performance detected. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2546 ms 9.2753 ms 9.2966 ms] + change: [-1.7801% -1.0966% -0.4241%] (p = 0.01 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [38.040 ms 38.148 ms 38.258 ms] + change: [-27.157% -26.896% -26.624%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [39.331 ms 39.403 ms 39.476 ms] + change: [-28.833% -28.594% -28.357%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.2420 ms 1.2451 ms 1.2480 ms] + change: [-0.4890% -0.0987% +0.3090%] (p = 0.64 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [40.598 ms 40.714 ms 40.840 ms] + change: [-28.394% -28.120% -27.844%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8148 ms 2.8217 ms 2.8287 ms] + change: [-0.7689% -0.4148% -0.0473%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8380 ms 2.8470 ms 2.8559 ms] + thrpt: [350.16 elem/s 351.25 elem/s 352.36 elem/s] + change: + time: [-1.8518% -1.4488% -1.0513%] (p = 0.00 < 0.05) + thrpt: [+1.0624% +1.4701% +1.8868%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [5.9371 ms 5.9526 ms 5.9688 ms] + thrpt: [335.08 elem/s 335.99 elem/s 336.86 elem/s] + change: + time: [-1.2866% -0.9315% -0.5436%] (p = 0.00 < 0.05) + thrpt: [+0.5466% +0.9403% +1.3034%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [11.515 ms 11.550 ms 11.592 ms] + thrpt: [345.07 elem/s 346.31 elem/s 347.37 elem/s] + change: + time: [-1.4527% -1.0453% -0.5967%] (p = 0.00 < 0.05) + thrpt: [+0.6003% +1.0564% +1.4741%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [22.679 ms 22.734 ms 22.789 ms] + thrpt: [351.04 elem/s 351.90 elem/s 352.75 elem/s] + change: + time: [-1.8901% -1.5489% -1.1911%] (p = 0.00 < 0.05) + thrpt: [+1.2055% +1.5732% +1.9265%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [45.674 ms 45.862 ms 46.097 ms] + thrpt: [347.09 elem/s 348.88 elem/s 350.31 elem/s] + change: + time: [-0.4816% -0.0267% +0.5584%] (p = 0.93 > 0.05) + thrpt: [-0.5553% +0.0268% +0.4839%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [73.048 ms 73.214 ms 73.386 ms] + thrpt: [436.05 elem/s 437.08 elem/s 438.07 elem/s] + change: + time: [-2.2651% -1.5570% -0.9298%] (p = 0.00 < 0.05) + thrpt: [+0.9385% +1.5817% +2.3176%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [134.88 ms 135.14 ms 135.40 ms] + thrpt: [472.68 elem/s 473.59 elem/s 474.49 elem/s] + change: + time: [-2.5158% -2.0247% -1.5838%] (p = 0.00 < 0.05) + thrpt: [+1.6093% +2.0666% +2.5807%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.7708 ms 9.8178 ms 9.8507 ms] + change: [-0.4582% +0.0423% +0.5662%] (p = 0.88 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [18.822 s 18.845 s 18.870 s] + change: [-0.7635% -0.5834% -0.3931%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [20.401 s 20.423 s 20.446 s] + change: [-0.1891% +0.0177% +0.2344%] (p = 0.88 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.7139 s 4.7217 s 4.7284 s] + change: [-0.3804% -0.0791% +0.2099%] (p = 0.61 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [270.23 ms 271.07 ms 272.09 ms] + change: [-20.898% -20.498% -20.060%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [273.94 ms 274.86 ms 275.74 ms] + change: [-22.288% -21.921% -21.550%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [54.074 ms 54.197 ms 54.322 ms] + change: [-1.8421% -1.5014% -1.1417%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb with precomputation points: '4096' + time: [38.335 ms 38.417 ms 38.499 ms] + change: [-1.2123% -0.8787% -0.5500%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_new_poly_div scale: '15' + time: [652.47 ms 655.15 ms 658.01 ms] + change: [-2.0650% -1.2328% -0.4007%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [278.83 ms 279.97 ms 281.12 ms] + change: [+0.2998% +0.7968% +1.3055%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [171.95 ms 172.67 ms 173.25 ms] + change: [+0.5812% +1.0880% +1.6250%] (p = 0.00 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.8966 ms 8.9218 ms 8.9420 ms] + change: [-4.1370% -3.8226% -3.5291%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [49.709 ms 49.830 ms 49.951 ms] + change: [+30.156% +30.622% +31.140%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [51.775 ms 51.901 ms 52.026 ms] + change: [+31.309% +31.718% +32.113%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2099 ms 1.2135 ms 1.2174 ms] + change: [-2.2316% -1.7924% -1.3549%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [53.328 ms 53.495 ms 53.672 ms] + change: [+30.824% +31.391% +31.976%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.5139 ms 2.5210 ms 2.5281 ms] + change: [-10.992% -10.658% -10.346%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.5449 ms 2.5546 ms 2.5643 ms] + thrpt: [389.97 elem/s 391.46 elem/s 392.94 elem/s] + change: + time: [-10.691% -10.270% -9.8349%] (p = 0.00 < 0.05) + thrpt: [+10.908% +11.446% +11.971%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.1591 ms 4.1704 ms 4.1816 ms] + thrpt: [478.29 elem/s 479.57 elem/s 480.87 elem/s] + change: + time: [-30.204% -29.939% -29.675%] (p = 0.00 < 0.05) + thrpt: [+42.197% +42.733% +43.275%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [7.4526 ms 7.4735 ms 7.4945 ms] + thrpt: [533.72 elem/s 535.22 elem/s 536.73 elem/s] + change: + time: [-35.578% -35.296% -35.014%] (p = 0.00 < 0.05) + thrpt: [+53.878% +54.550% +55.225%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.436 ms 13.473 ms 13.511 ms] + thrpt: [592.09 elem/s 593.76 elem/s 595.40 elem/s] + change: + time: [-40.957% -40.735% -40.514%] (p = 0.00 < 0.05) + thrpt: [+68.107% +68.732% +69.368%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [25.447 ms 25.508 ms 25.569 ms] + thrpt: [625.76 elem/s 627.26 elem/s 628.76 elem/s] + change: + time: [-44.691% -44.381% -44.108%] (p = 0.00 < 0.05) + thrpt: [+78.915% +79.795% +80.803%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [48.712 ms 48.861 ms 49.013 ms] + thrpt: [652.89 elem/s 654.92 elem/s 656.93 elem/s] + change: + time: [-33.507% -33.262% -33.014%] (p = 0.00 < 0.05) + thrpt: [+49.285% +49.841% +50.393%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [95.858 ms 96.087 ms 96.319 ms] + thrpt: [664.46 elem/s 666.06 elem/s 667.66 elem/s] + change: + time: [-29.113% -28.897% -28.672%] (p = 0.00 < 0.05) + thrpt: [+40.197% +40.640% +41.069%] + Performance has improved. + +blob_to_kzg_commitment time: [34.047 ms 34.150 ms 34.256 ms] + change: [-31.729% -31.467% -31.188%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [35.050 ms 35.144 ms 35.237 ms] + change: [-32.519% -32.287% -32.047%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1227 ms 1.1260 ms 1.1291 ms] + change: [-8.4898% -8.0505% -7.5989%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [35.574 ms 35.658 ms 35.741 ms] + change: [-33.620% -33.344% -33.082%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.3105 ms 2.3180 ms 2.3255 ms] + change: [-8.4370% -8.0534% -7.6697%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3825 ms 2.3891 ms 2.3956 ms] + thrpt: [417.43 elem/s 418.57 elem/s 419.73 elem/s] + change: + time: [-6.9128% -6.4768% -6.0349%] (p = 0.00 < 0.05) + thrpt: [+6.4225% +6.9254% +7.4262%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [3.8883 ms 3.8986 ms 3.9088 ms] + thrpt: [511.67 elem/s 513.01 elem/s 514.36 elem/s] + change: + time: [-6.8462% -6.5191% -6.1565%] (p = 0.00 < 0.05) + thrpt: [+6.5603% +6.9737% +7.3493%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.9832 ms 7.0005 ms 7.0185 ms] + thrpt: [569.92 elem/s 571.39 elem/s 572.80 elem/s] + change: + time: [-6.6835% -6.3294% -5.9836%] (p = 0.00 < 0.05) + thrpt: [+6.3644% +6.7571% +7.1622%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.020 ms 13.054 ms 13.087 ms] + thrpt: [611.30 elem/s 612.85 elem/s 614.43 elem/s] + change: + time: [-3.4763% -3.1142% -2.7530%] (p = 0.00 < 0.05) + thrpt: [+2.8310% +3.2144% +3.6015%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [24.707 ms 24.774 ms 24.844 ms] + thrpt: [644.03 elem/s 645.83 elem/s 647.60 elem/s] + change: + time: [-3.2193% -2.8754% -2.5225%] (p = 0.00 < 0.05) + thrpt: [+2.5877% +2.9605% +3.3264%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.140 ms 47.226 ms 47.312 ms] + thrpt: [676.37 elem/s 677.59 elem/s 678.82 elem/s] + change: + time: [-3.7101% -3.3461% -3.0048%] (p = 0.00 < 0.05) + thrpt: [+3.0979% +3.4619% +3.8530%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [92.739 ms 92.981 ms 93.227 ms] + thrpt: [686.50 elem/s 688.32 elem/s 690.11 elem/s] + change: + time: [-3.5672% -3.2331% -2.8825%] (p = 0.00 < 0.05) + thrpt: [+2.9680% +3.3411% +3.6992%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [33.813 ms 33.905 ms 33.998 ms] + change: [-1.1248% -0.7161% -0.3128%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [34.996 ms 35.090 ms 35.183 ms] + change: [-0.5397% -0.1535% +0.2116%] (p = 0.43 > 0.05) + No change in performance detected. + +verify_kzg_proof time: [1.0956 ms 1.0989 ms 1.1025 ms] + change: [-2.5748% -2.1347% -1.7092%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [35.795 ms 35.894 ms 35.995 ms] + change: [+0.3140% +0.6639% +1.0218%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.1990 ms 2.2055 ms 2.2119 ms] + change: [-5.2833% -4.8522% -4.4436%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2800 ms 2.2899 ms 2.3024 ms] + thrpt: [434.33 elem/s 436.69 elem/s 438.59 elem/s] + change: + time: [-4.6302% -4.1510% -3.5129%] (p = 0.00 < 0.05) + thrpt: [+3.6407% +4.3307% +4.8550%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.6879 ms 3.6977 ms 3.7077 ms] + thrpt: [539.41 elem/s 540.87 elem/s 542.32 elem/s] + change: + time: [-5.5015% -5.1509% -4.7844%] (p = 0.00 < 0.05) + thrpt: [+5.0249% +5.4307% +5.8218%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.5469 ms 6.5667 ms 6.5867 ms] + thrpt: [607.28 elem/s 609.13 elem/s 610.98 elem/s] + change: + time: [-6.5875% -6.1964% -5.8327%] (p = 0.00 < 0.05) + thrpt: [+6.1939% +6.6057% +7.0521%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.040 ms 12.086 ms 12.141 ms] + thrpt: [658.90 elem/s 661.90 elem/s 664.43 elem/s] + change: + time: [-7.8159% -7.4106% -6.9289%] (p = 0.00 < 0.05) + thrpt: [+7.4447% +8.0037% +8.4785%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [22.780 ms 22.842 ms 22.904 ms] + thrpt: [698.57 elem/s 700.47 elem/s 702.37 elem/s] + change: + time: [-8.1696% -7.7994% -7.4340%] (p = 0.00 < 0.05) + thrpt: [+8.0310% +8.4592% +8.8964%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [44.240 ms 44.362 ms 44.488 ms] + thrpt: [719.29 elem/s 721.33 elem/s 723.33 elem/s] + change: + time: [-6.3754% -6.0642% -5.7306%] (p = 0.00 < 0.05) + thrpt: [+6.0790% +6.4557% +6.8096%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [87.278 ms 87.490 ms 87.711 ms] + thrpt: [729.67 elem/s 731.51 elem/s 733.29 elem/s] + change: + time: [-6.2382% -5.9048% -5.5508%] (p = 0.00 < 0.05) + thrpt: [+5.8770% +6.2754% +6.6532%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.2924 ms 9.3156 ms 9.3419 ms] + change: [-5.2791% -4.7148% -4.1164%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [20.217 s 20.264 s 20.309 s] + change: [+7.2481% +7.5322% +7.7962%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [21.527 s 21.578 s 21.625 s] + change: [+5.3734% +5.6563% +5.8952%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [4.6811 s 4.6944 s 4.7091 s] + change: [-0.8789% -0.5785% -0.2231%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [318.93 ms 319.74 ms 320.76 ms] + change: [+17.431% +17.955% +18.509%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [328.84 ms 329.90 ms 331.02 ms] + change: [+19.497% +20.024% +20.574%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [50.842 ms 51.052 ms 51.473 ms] + change: [-5.9948% -5.4292% -4.8801%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [636.40 ms 639.88 ms 643.86 ms] + change: [-2.9929% -2.3310% -1.5753%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [279.76 ms 280.70 ms 281.65 ms] + change: [-0.2876% +0.2633% +0.7857%] (p = 0.36 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [162.86 ms 163.46 ms 164.05 ms] + change: [-6.1121% -5.6188% -5.1381%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.8796 ms 8.9016 ms 8.9276 ms] + change: [-0.9790% -0.3546% +0.1869%] (p = 0.29 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +blob_to_kzg_commitment time: [41.497 ms 41.608 ms 41.720 ms] + change: [+22.263% +22.717% +23.192%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [43.765 ms 43.882 ms 44.001 ms] + change: [+24.598% +25.057% +25.550%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2063 ms 1.2100 ms 1.2139 ms] + change: [+9.8341% +10.318% +10.816%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [44.557 ms 44.663 ms 44.770 ms] + change: [+23.973% +24.428% +24.878%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5034 ms 2.5115 ms 2.5207 ms] + change: [+13.380% +13.877% +14.421%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5258 ms 2.5327 ms 2.5396 ms] + thrpt: [393.76 elem/s 394.83 elem/s 395.91 elem/s] + change: + time: [+9.9257% +10.603% +11.170%] (p = 0.00 < 0.05) + thrpt: [-10.048% -9.5869% -9.0294%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [4.1702 ms 4.1827 ms 4.1957 ms] + thrpt: [476.67 elem/s 478.16 elem/s 479.59 elem/s] + change: + time: [+12.667% +13.114% +13.606%] (p = 0.00 < 0.05) + thrpt: [-11.977% -11.594% -11.243%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.4515 ms 7.4703 ms 7.4893 ms] + thrpt: [534.09 elem/s 535.45 elem/s 536.81 elem/s] + change: + time: [+13.310% +13.760% +14.201%] (p = 0.00 < 0.05) + thrpt: [-12.435% -12.096% -11.746%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [18.076 ms 18.130 ms 18.186 ms] + thrpt: [439.90 elem/s 441.25 elem/s 442.58 elem/s] + change: + time: [+49.174% +50.004% +50.770%] (p = 0.00 < 0.05) + thrpt: [-33.674% -33.335% -32.964%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [31.417 ms 31.488 ms 31.560 ms] + thrpt: [506.97 elem/s 508.13 elem/s 509.28 elem/s] + change: + time: [+37.360% +37.851% +38.335%] (p = 0.00 < 0.05) + thrpt: [-27.712% -27.458% -27.198%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [54.399 ms 54.551 ms 54.703 ms] + thrpt: [584.97 elem/s 586.60 elem/s 588.25 elem/s] + change: + time: [+22.499% +22.968% +23.451%] (p = 0.00 < 0.05) + thrpt: [-18.996% -18.678% -18.367%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [100.01 ms 100.25 ms 100.50 ms] + thrpt: [636.84 elem/s 638.42 elem/s 639.94 elem/s] + change: + time: [+14.187% +14.582% +14.978%] (p = 0.00 < 0.05) + thrpt: [-13.027% -12.726% -12.424%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.750 ms 33.832 ms 33.913 ms] + change: [-18.963% -18.688% -18.398%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [35.272 ms 35.350 ms 35.429 ms] + change: [-19.721% -19.444% -19.165%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1115 ms 1.1145 ms 1.1175 ms] + change: [-8.2743% -7.8905% -7.4976%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [35.487 ms 35.587 ms 35.687 ms] + change: [-20.616% -20.321% -20.007%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.3247 ms 2.3309 ms 2.3371 ms] + change: [-7.6175% -7.1929% -6.8127%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.3583 ms 2.3648 ms 2.3712 ms] + thrpt: [421.73 elem/s 422.87 elem/s 424.04 elem/s] + change: + time: [-6.9754% -6.6307% -6.2564%] (p = 0.00 < 0.05) + thrpt: [+6.6739% +7.1016% +7.4984%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.8907 ms 3.9055 ms 3.9212 ms] + thrpt: [510.04 elem/s 512.10 elem/s 514.05 elem/s] + change: + time: [-7.0514% -6.6271% -6.1636%] (p = 0.00 < 0.05) + thrpt: [+6.5684% +7.0974% +7.5864%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.8286 ms 6.8465 ms 6.8643 ms] + thrpt: [582.72 elem/s 584.24 elem/s 585.77 elem/s] + change: + time: [-8.6798% -8.3501% -8.0186%] (p = 0.00 < 0.05) + thrpt: [+8.7176% +9.1109% +9.5048%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [13.076 ms 13.107 ms 13.138 ms] + thrpt: [608.91 elem/s 610.35 elem/s 611.80 elem/s] + change: + time: [-27.975% -27.705% -27.428%] (p = 0.00 < 0.05) + thrpt: [+37.794% +38.322% +38.841%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.864 ms 24.943 ms 25.027 ms] + thrpt: [639.31 elem/s 641.47 elem/s 643.51 elem/s] + change: + time: [-21.102% -20.786% -20.458%] (p = 0.00 < 0.05) + thrpt: [+25.720% +26.241% +26.745%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [46.969 ms 47.093 ms 47.218 ms] + thrpt: [677.70 elem/s 679.51 elem/s 681.31 elem/s] + change: + time: [-14.010% -13.672% -13.346%] (p = 0.00 < 0.05) + thrpt: [+15.401% +15.838% +16.292%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [92.829 ms 93.078 ms 93.333 ms] + thrpt: [685.72 elem/s 687.60 elem/s 689.44 elem/s] + change: + time: [-7.4775% -7.1527% -6.8357%] (p = 0.00 < 0.05) + thrpt: [+7.3372% +7.7038% +8.0818%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.828 ms 33.917 ms 34.007 ms] + change: [-0.0991% +0.2501% +0.6215%] (p = 0.17 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [34.962 ms 35.059 ms 35.157 ms] + change: [-1.1804% -0.8223% -0.4718%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.1101 ms 1.1144 ms 1.1191 ms] + change: [-0.8437% -0.3805% +0.0678%] (p = 0.10 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [35.525 ms 35.628 ms 35.730 ms] + change: [-0.2862% +0.1155% +0.5258%] (p = 0.58 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.2111 ms 2.2176 ms 2.2243 ms] + change: [-5.2172% -4.8597% -4.4684%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2685 ms 2.2749 ms 2.2812 ms] + thrpt: [438.36 elem/s 439.57 elem/s 440.83 elem/s] + change: + time: [-4.1960% -3.8007% -3.4339%] (p = 0.00 < 0.05) + thrpt: [+3.5560% +3.9509% +4.3797%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [3.6987 ms 3.7079 ms 3.7170 ms] + thrpt: [538.07 elem/s 539.39 elem/s 540.72 elem/s] + change: + time: [-5.5048% -5.0591% -4.6297%] (p = 0.00 < 0.05) + thrpt: [+4.8544% +5.3286% +5.8255%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.4811 ms 6.5006 ms 6.5198 ms] + thrpt: [613.51 elem/s 615.33 elem/s 617.18 elem/s] + change: + time: [-5.4000% -5.0527% -4.6479%] (p = 0.00 < 0.05) + thrpt: [+4.8745% +5.3216% +5.7082%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [11.959 ms 11.991 ms 12.023 ms] + thrpt: [665.41 elem/s 667.19 elem/s 668.98 elem/s] + change: + time: [-8.8353% -8.5189% -8.2049%] (p = 0.00 < 0.05) + thrpt: [+8.9382% +9.3122% +9.6915%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.824 ms 22.879 ms 22.934 ms] + thrpt: [697.67 elem/s 699.34 elem/s 701.03 elem/s] + change: + time: [-8.6541% -8.2753% -7.9009%] (p = 0.00 < 0.05) + thrpt: [+8.5787% +9.0219% +9.4740%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [44.505 ms 44.615 ms 44.722 ms] + thrpt: [715.53 elem/s 717.25 elem/s 719.01 elem/s] + change: + time: [-5.5910% -5.2616% -4.9208%] (p = 0.00 < 0.05) + thrpt: [+5.1755% +5.5538% +5.9221%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [87.166 ms 87.424 ms 87.689 ms] + thrpt: [729.85 elem/s 732.06 elem/s 734.23 elem/s] + change: + time: [-6.4265% -6.0737% -5.6931%] (p = 0.00 < 0.05) + thrpt: [+6.0368% +6.4665% +6.8679%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +bench_fft_fr scale: '15' + time: [9.3134 ms 9.3331 ms 9.3582 ms] + change: [-0.7609% -0.1802% +0.3415%] (p = 0.56 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [20.296 s 20.314 s 20.334 s] + change: [+0.0057% +0.2465% +0.4955%] (p = 0.08 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [21.587 s 21.625 s 21.663 s] + change: [-0.0652% +0.2158% +0.5188%] (p = 0.18 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.7041 s 4.7139 s 4.7250 s] + change: [+0.0406% +0.4169% +0.7992%] (p = 0.05 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_commit_to_poly scale: '15' + time: [289.45 ms 291.42 ms 293.41 ms] + change: [-9.5189% -8.8574% -8.1552%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [305.39 ms 306.62 ms 307.71 ms] + change: [-7.5497% -7.0584% -6.6000%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [43.327 ms 43.385 ms 43.440 ms] + change: [-15.720% -15.202% -14.665%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [636.88 ms 639.87 ms 643.37 ms] + change: [-0.7674% -0.0023% +0.7574%] (p = 0.99 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [280.54 ms 281.35 ms 282.58 ms] + change: [-0.2358% +0.2294% +0.7899%] (p = 0.44 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [165.07 ms 165.28 ms 165.46 ms] + change: [+0.8425% +1.1587% +1.4146%] (p = 0.00 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0194 ms 9.0500 ms 9.1052 ms] + change: [+1.0592% +1.6947% +2.4127%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [35.729 ms 35.844 ms 35.964 ms] + change: [+5.2345% +5.6815% +6.1239%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +compute_kzg_proof time: [36.694 ms 36.768 ms 36.842 ms] + change: [+4.5333% +4.8751% +5.2307%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2171 ms 1.2213 ms 1.2253 ms] + change: [+9.0026% +9.4395% +9.8764%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [37.554 ms 37.656 ms 37.766 ms] + change: [+5.2877% +5.6919% +6.1043%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.5049 ms 2.5111 ms 2.5174 ms] + change: [+12.768% +13.235% +13.668%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [2.5682 ms 2.5754 ms 2.5826 ms] + thrpt: [387.21 elem/s 388.30 elem/s 389.37 elem/s] + change: + time: [+12.747% +13.206% +13.638%] (p = 0.00 < 0.05) + thrpt: [-12.001% -11.665% -11.306%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.1614 ms 4.1713 ms 4.1813 ms] + thrpt: [478.32 elem/s 479.47 elem/s 480.61 elem/s] + change: + time: [+12.103% +12.498% +12.887%] (p = 0.00 < 0.05) + thrpt: [-11.415% -11.109% -10.796%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [7.4182 ms 7.4394 ms 7.4610 ms] + thrpt: [536.12 elem/s 537.68 elem/s 539.21 elem/s] + change: + time: [+13.957% +14.442% +14.886%] (p = 0.00 < 0.05) + thrpt: [-12.957% -12.620% -12.247%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.379 ms 13.410 ms 13.441 ms] + thrpt: [595.20 elem/s 596.57 elem/s 597.95 elem/s] + change: + time: [+11.442% +11.837% +12.227%] (p = 0.00 < 0.05) + thrpt: [-10.895% -10.584% -10.268%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [25.725 ms 25.787 ms 25.850 ms] + thrpt: [618.96 elem/s 620.46 elem/s 621.96 elem/s] + change: + time: [+12.338% +12.714% +13.087%] (p = 0.00 < 0.05) + thrpt: [-11.573% -11.280% -10.983%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [48.765 ms 48.896 ms 49.031 ms] + thrpt: [652.65 elem/s 654.45 elem/s 656.21 elem/s] + change: + time: [+9.2067% +9.5961% +9.9796%] (p = 0.00 < 0.05) + thrpt: [-9.0740% -8.7558% -8.4305%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [96.406 ms 96.614 ms 96.817 ms] + thrpt: [661.04 elem/s 662.43 elem/s 663.86 elem/s] + change: + time: [+10.090% +10.511% +10.919%] (p = 0.00 < 0.05) + thrpt: [-9.8443% -9.5115% -9.1654%] + Performance has regressed. + +blob_to_kzg_commitment time: [34.174 ms 34.255 ms 34.335 ms] + change: [-4.8297% -4.4334% -4.0642%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [35.004 ms 35.083 ms 35.162 ms] + change: [-4.8792% -4.5844% -4.2940%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1144 ms 1.1187 ms 1.1231 ms] + change: [-8.8087% -8.4383% -8.0683%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [35.603 ms 35.693 ms 35.783 ms] + change: [-5.5739% -5.2136% -4.8682%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3079 ms 2.3137 ms 2.3195 ms] + change: [-8.1690% -7.8601% -7.5394%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3457 ms 2.3532 ms 2.3611 ms] + thrpt: [423.52 elem/s 424.95 elem/s 426.31 elem/s] + change: + time: [-9.0196% -8.6260% -8.2065%] (p = 0.00 < 0.05) + thrpt: [+8.9401% +9.4403% +9.9138%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.8448 ms 3.8534 ms 3.8619 ms] + thrpt: [517.88 elem/s 519.03 elem/s 520.19 elem/s] + change: + time: [-7.9301% -7.6220% -7.3245%] (p = 0.00 < 0.05) + thrpt: [+7.9034% +8.2508% +8.6131%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.8729 ms 6.8933 ms 6.9137 ms] + thrpt: [578.56 elem/s 580.27 elem/s 582.00 elem/s] + change: + time: [-7.7160% -7.3406% -6.9509%] (p = 0.00 < 0.05) + thrpt: [+7.4702% +7.9221% +8.3611%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.986 ms 13.016 ms 13.047 ms] + thrpt: [613.17 elem/s 614.61 elem/s 616.04 elem/s] + change: + time: [-3.2309% -2.9357% -2.6214%] (p = 0.00 < 0.05) + thrpt: [+2.6920% +3.0245% +3.3388%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [24.158 ms 24.221 ms 24.285 ms] + thrpt: [658.85 elem/s 660.58 elem/s 662.30 elem/s] + change: + time: [-6.4016% -6.0740% -5.7359%] (p = 0.00 < 0.05) + thrpt: [+6.0849% +6.4668% +6.8394%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [46.950 ms 47.038 ms 47.125 ms] + thrpt: [679.04 elem/s 680.31 elem/s 681.57 elem/s] + change: + time: [-4.1197% -3.8012% -3.4891%] (p = 0.00 < 0.05) + thrpt: [+3.6153% +3.9515% +4.2968%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [93.631 ms 93.882 ms 94.144 ms] + thrpt: [679.81 elem/s 681.71 elem/s 683.53 elem/s] + change: + time: [-3.1622% -2.8279% -2.4754%] (p = 0.00 < 0.05) + thrpt: [+2.5382% +2.9102% +3.2654%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.944 ms 34.029 ms 34.115 ms] + change: [-1.0076% -0.6587% -0.3349%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_kzg_proof time: [34.999 ms 35.071 ms 35.144 ms] + change: [-0.3528% -0.0334% +0.2665%] (p = 0.83 > 0.05) + No change in performance detected. + +verify_kzg_proof time: [1.1032 ms 1.1068 ms 1.1104 ms] + change: [-1.2220% -0.8531% -0.4557%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [35.649 ms 35.757 ms 35.873 ms] + change: [-0.1982% +0.1814% +0.6037%] (p = 0.38 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.2016 ms 2.2073 ms 2.2130 ms] + change: [-4.9399% -4.6000% -4.2619%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2837 ms 2.2911 ms 2.2984 ms] + thrpt: [435.08 elem/s 436.47 elem/s 437.88 elem/s] + change: + time: [-3.1090% -2.6387% -2.2349%] (p = 0.00 < 0.05) + thrpt: [+2.2859% +2.7102% +3.2088%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.7054 ms 3.7157 ms 3.7258 ms] + thrpt: [536.79 elem/s 538.25 elem/s 539.76 elem/s] + change: + time: [-3.9096% -3.5720% -3.2540%] (p = 0.00 < 0.05) + thrpt: [+3.3634% +3.7043% +4.0687%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/4 + time: [6.5082 ms 6.5274 ms 6.5470 ms] + thrpt: [610.97 elem/s 612.80 elem/s 614.61 elem/s] + change: + time: [-5.7218% -5.3083% -4.9281%] (p = 0.00 < 0.05) + thrpt: [+5.1836% +5.6059% +6.0691%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.008 ms 12.037 ms 12.067 ms] + thrpt: [662.98 elem/s 664.60 elem/s 666.23 elem/s] + change: + time: [-7.8397% -7.5209% -7.2165%] (p = 0.00 < 0.05) + thrpt: [+7.7778% +8.1325% +8.5066%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.904 ms 22.961 ms 23.019 ms] + thrpt: [695.08 elem/s 696.83 elem/s 698.56 elem/s] + change: + time: [-5.5404% -5.2021% -4.8403%] (p = 0.00 < 0.05) + thrpt: [+5.0865% +5.4875% +5.8654%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.589 ms 44.690 ms 44.797 ms] + thrpt: [714.34 elem/s 716.04 elem/s 717.66 elem/s] + change: + time: [-5.2745% -4.9905% -4.6887%] (p = 0.00 < 0.05) + thrpt: [+4.9193% +5.2526% +5.5682%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [87.266 ms 87.448 ms 87.627 ms] + thrpt: [730.37 elem/s 731.86 elem/s 733.39 elem/s] + change: + time: [-7.1725% -6.8531% -6.5243%] (p = 0.00 < 0.05) + thrpt: [+6.9796% +7.3573% +7.7267%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +bench_fft_fr scale: '15' + time: [9.4007 ms 9.4396 ms 9.4856 ms] + change: [+1.0043% +1.4440% +1.8786%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [20.267 s 20.301 s 20.342 s] + change: [-0.2594% -0.0661% +0.1555%] (p = 0.58 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [21.618 s 21.640 s 21.663 s] + change: [-0.1374% +0.0688% +0.2726%] (p = 0.54 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6999 s 4.7071 s 4.7148 s] + change: [-0.4292% -0.1454% +0.1112%] (p = 0.34 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [255.25 ms 256.25 ms 257.56 ms] + change: [-12.778% -12.069% -11.300%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [258.28 ms 259.19 ms 260.13 ms] + change: [-15.908% -15.469% -14.999%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [50.898 ms 51.083 ms 51.340 ms] + change: [+17.228% +17.750% +18.232%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [36.036 ms 36.133 ms 36.224 ms] + change: [-6.3221% -5.9793% -5.6606%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [639.26 ms 641.26 ms 643.15 ms] + change: [-0.4240% +0.2183% +0.7773%] (p = 0.51 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [280.22 ms 281.50 ms 282.89 ms] + change: [-0.5727% +0.0555% +0.6416%] (p = 0.87 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [167.13 ms 167.55 ms 168.19 ms] + change: [+1.2051% +1.5358% +1.8541%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.8070 ms 8.8352 ms 8.8675 ms] + change: [-2.5073% -1.9150% -1.3400%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [34.805 ms 34.873 ms 34.939 ms] + change: [+2.1580% +2.4803% +2.7963%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [36.576 ms 36.664 ms 36.751 ms] + change: [+4.2105% +4.5421% +4.8807%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2156 ms 1.2188 ms 1.2219 ms] + change: [+9.7913% +10.244% +10.726%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [36.802 ms 36.902 ms 37.002 ms] + change: [+2.7554% +3.2000% +3.6254%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.5443 ms 2.5510 ms 2.5582 ms] + change: [+15.152% +15.572% +16.018%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5483 ms 2.5537 ms 2.5591 ms] + thrpt: [390.77 elem/s 391.58 elem/s 392.41 elem/s] + change: + time: [+11.046% +11.463% +11.893%] (p = 0.00 < 0.05) + thrpt: [-10.629% -10.284% -9.9476%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [4.0495 ms 4.0624 ms 4.0761 ms] + thrpt: [490.67 elem/s 492.32 elem/s 493.88 elem/s] + change: + time: [+8.8531% +9.3290% +9.8118%] (p = 0.00 < 0.05) + thrpt: [-8.9351% -8.5330% -8.1331%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.0824 ms 7.1017 ms 7.1211 ms] + thrpt: [561.71 elem/s 563.25 elem/s 564.78 elem/s] + change: + time: [+8.3637% +8.7979% +9.2306%] (p = 0.00 < 0.05) + thrpt: [-8.4505% -8.0864% -7.7182%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [13.206 ms 13.231 ms 13.257 ms] + thrpt: [603.47 elem/s 604.64 elem/s 605.79 elem/s] + change: + time: [+9.5728% +9.9157% +10.269%] (p = 0.00 < 0.05) + thrpt: [-9.3124% -9.0212% -8.7364%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.850 ms 24.927 ms 25.006 ms] + thrpt: [639.85 elem/s 641.86 elem/s 643.86 elem/s] + change: + time: [+8.1158% +8.5637% +9.0123%] (p = 0.00 < 0.05) + thrpt: [-8.2672% -7.8882% -7.5065%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [48.085 ms 48.227 ms 48.369 ms] + thrpt: [661.58 elem/s 663.53 elem/s 665.49 elem/s] + change: + time: [+7.5171% +7.9128% +8.3380%] (p = 0.00 < 0.05) + thrpt: [-7.6963% -7.3326% -6.9915%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [94.826 ms 95.055 ms 95.284 ms] + thrpt: [671.68 elem/s 673.29 elem/s 674.92 elem/s] + change: + time: [+8.3749% +8.6994% +9.0416%] (p = 0.00 < 0.05) + thrpt: [-8.2919% -8.0032% -7.7277%] + Performance has regressed. + +blob_to_kzg_commitment time: [34.506 ms 34.585 ms 34.665 ms] + change: [-1.1319% -0.8270% -0.5218%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [35.129 ms 35.218 ms 35.309 ms] + change: [-4.2697% -3.9439% -3.6030%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1216 ms 1.1254 ms 1.1291 ms] + change: [-8.0252% -7.6384% -7.2335%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.904 ms 35.991 ms 36.089 ms] + change: [-2.8251% -2.4666% -2.0886%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.3232 ms 2.3316 ms 2.3410 ms] + change: [-8.9845% -8.6001% -8.1472%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.3638 ms 2.3698 ms 2.3757 ms] + thrpt: [420.92 elem/s 421.97 elem/s 423.04 elem/s] + change: + time: [-7.5071% -7.2016% -6.8861%] (p = 0.00 < 0.05) + thrpt: [+7.3953% +7.7605% +8.1164%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.9002 ms 3.9141 ms 3.9284 ms] + thrpt: [509.11 elem/s 510.97 elem/s 512.80 elem/s] + change: + time: [-4.1024% -3.6499% -3.1808%] (p = 0.00 < 0.05) + thrpt: [+3.2853% +3.7881% +4.2779%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.9158 ms 6.9334 ms 6.9512 ms] + thrpt: [575.44 elem/s 576.91 elem/s 578.39 elem/s] + change: + time: [-2.7219% -2.3689% -1.9893%] (p = 0.00 < 0.05) + thrpt: [+2.0296% +2.4264% +2.7981%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [13.087 ms 13.126 ms 13.164 ms] + thrpt: [607.70 elem/s 609.50 elem/s 611.31 elem/s] + change: + time: [-1.1253% -0.7970% -0.4443%] (p = 0.00 < 0.05) + thrpt: [+0.4463% +0.8034% +1.1381%] + Change within noise threshold. +verify_blob_kzg_proof_batch/16 + time: [24.412 ms 24.473 ms 24.533 ms] + thrpt: [652.18 elem/s 653.77 elem/s 655.40 elem/s] + change: + time: [-2.2059% -1.8218% -1.4423%] (p = 0.00 < 0.05) + thrpt: [+1.4635% +1.8556% +2.2557%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [47.689 ms 47.793 ms 47.897 ms] + thrpt: [668.10 elem/s 669.55 elem/s 671.01 elem/s] + change: + time: [-1.2511% -0.8982% -0.5294%] (p = 0.00 < 0.05) + thrpt: [+0.5322% +0.9064% +1.2669%] + Change within noise threshold. +verify_blob_kzg_proof_batch/64 + time: [93.820 ms 94.044 ms 94.282 ms] + thrpt: [678.81 elem/s 680.54 elem/s 682.16 elem/s] + change: + time: [-1.4023% -1.0644% -0.6944%] (p = 0.00 < 0.05) + thrpt: [+0.6993% +1.0758% +1.4222%] + Change within noise threshold. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild + 2 (2.00%) high severe + +blob_to_kzg_commitment time: [33.994 ms 34.069 ms 34.144 ms] + change: [-1.8042% -1.4917% -1.1748%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [35.330 ms 35.413 ms 35.492 ms] + change: [+0.2181% +0.5528% +0.8924%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) low mild + +verify_kzg_proof time: [1.1194 ms 1.1250 ms 1.1316 ms] + change: [-0.8853% -0.4577% +0.0344%] (p = 0.05 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.715 ms 35.799 ms 35.882 ms] + change: [-0.9148% -0.5360% -0.1798%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof time: [2.2353 ms 2.2402 ms 2.2450 ms] + change: [-4.3670% -3.9236% -3.5246%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2833 ms 2.2900 ms 2.2966 ms] + thrpt: [435.42 elem/s 436.68 elem/s 437.96 elem/s] + change: + time: [-3.7710% -3.3685% -3.0014%] (p = 0.00 < 0.05) + thrpt: [+3.0943% +3.4859% +3.9188%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.6956 ms 3.7061 ms 3.7166 ms] + thrpt: [538.13 elem/s 539.65 elem/s 541.19 elem/s] + change: + time: [-5.7456% -5.3145% -4.8667%] (p = 0.00 < 0.05) + thrpt: [+5.1157% +5.6128% +6.0958%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.5147 ms 6.5307 ms 6.5466 ms] + thrpt: [611.01 elem/s 612.49 elem/s 614.00 elem/s] + change: + time: [-6.1539% -5.8087% -5.4863%] (p = 0.00 < 0.05) + thrpt: [+5.8048% +6.1669% +6.5574%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [12.051 ms 12.082 ms 12.113 ms] + thrpt: [660.47 elem/s 662.13 elem/s 663.82 elem/s] + change: + time: [-8.3207% -7.9486% -7.5716%] (p = 0.00 < 0.05) + thrpt: [+8.1919% +8.6350% +9.0759%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.887 ms 22.959 ms 23.044 ms] + thrpt: [694.31 elem/s 696.89 elem/s 699.08 elem/s] + change: + time: [-6.5685% -6.1874% -5.7628%] (p = 0.00 < 0.05) + thrpt: [+6.1152% +6.5955% +7.0303%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.410 ms 44.516 ms 44.621 ms] + thrpt: [717.15 elem/s 718.85 elem/s 720.57 elem/s] + change: + time: [-7.1527% -6.8581% -6.5618%] (p = 0.00 < 0.05) + thrpt: [+7.0226% +7.3631% +7.7037%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [87.966 ms 88.137 ms 88.307 ms] + thrpt: [724.75 elem/s 726.14 elem/s 727.56 elem/s] + change: + time: [-6.5799% -6.2806% -5.9830%] (p = 0.00 < 0.05) + thrpt: [+6.3637% +6.7015% +7.0434%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.2415 ms 9.2778 ms 9.3065 ms] + change: [-2.8198% -2.1733% -1.5549%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [20.339 s 20.374 s 20.412 s] + change: [+0.0829% +0.3614% +0.6194%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.630 s 21.660 s 21.693 s] + change: [-0.0815% +0.0950% +0.2769%] (p = 0.34 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.7077 s 4.7165 s 4.7252 s] + change: [-0.0466% +0.1992% +0.4360%] (p = 0.15 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [226.21 ms 226.69 ms 227.30 ms] + change: [-12.029% -11.533% -11.109%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [225.91 ms 226.51 ms 227.19 ms] + change: [-13.007% -12.608% -12.206%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [35.127 ms 35.212 ms 35.317 ms] + change: [-31.419% -31.166% -30.896%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + +bench_new_poly_div scale: '15' + time: [637.63 ms 641.38 ms 645.33 ms] + change: [-0.5881% +0.0188% +0.6577%] (p = 0.96 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [280.69 ms 281.33 ms 281.97 ms] + change: [-0.5786% -0.0616% +0.4566%] (p = 0.83 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [163.41 ms 163.94 ms 164.40 ms] + change: [-2.7330% -2.2804% -1.8437%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9119 ms 8.9442 ms 8.9749 ms] + change: [+0.4610% +1.0663% +1.7028%] (p = 0.01 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [49.281 ms 49.380 ms 49.478 ms] + change: [+44.513% +44.943% +45.377%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [51.997 ms 52.135 ms 52.275 ms] + change: [+46.705% +47.223% +47.758%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2060 ms 1.2090 ms 1.2120 ms] + change: [+7.3240% +7.8004% +8.2623%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [52.873 ms 53.018 ms 53.162 ms] + change: [+47.521% +48.100% +48.649%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5037 ms 2.5097 ms 2.5156 ms] + change: [+11.668% +12.031% +12.393%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [2.5540 ms 2.5620 ms 2.5700 ms] + thrpt: [389.10 elem/s 390.31 elem/s 391.54 elem/s] + change: + time: [+11.399% +11.879% +12.352%] (p = 0.00 < 0.05) + thrpt: [-10.994% -10.618% -10.233%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [5.3735 ms 5.3910 ms 5.4091 ms] + thrpt: [369.75 elem/s 370.99 elem/s 372.20 elem/s] + change: + time: [+44.790% +45.464% +46.108%] (p = 0.00 < 0.05) + thrpt: [-31.557% -31.255% -30.934%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.354 ms 10.380 ms 10.406 ms] + thrpt: [384.39 elem/s 385.34 elem/s 386.32 elem/s] + change: + time: [+58.394% +58.949% +59.500%] (p = 0.00 < 0.05) + thrpt: [-37.304% -37.087% -36.866%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [20.676 ms 20.730 ms 20.784 ms] + thrpt: [384.91 elem/s 385.91 elem/s 386.92 elem/s] + change: + time: [+70.984% +71.575% +72.176%] (p = 0.00 < 0.05) + thrpt: [-41.920% -41.717% -41.515%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) low mild + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [40.549 ms 40.638 ms 40.729 ms] + thrpt: [392.84 elem/s 393.72 elem/s 394.59 elem/s] + change: + time: [+76.255% +77.003% +77.688%] (p = 0.00 < 0.05) + thrpt: [-43.722% -43.504% -43.264%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [66.498 ms 66.681 ms 66.870 ms] + thrpt: [478.54 elem/s 479.89 elem/s 481.22 elem/s] + change: + time: [+49.247% +49.793% +50.320%] (p = 0.00 < 0.05) + thrpt: [-33.475% -33.241% -32.997%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [119.74 ms 120.02 ms 120.33 ms] + thrpt: [531.87 elem/s 533.23 elem/s 534.51 elem/s] + change: + time: [+35.784% +36.177% +36.621%] (p = 0.00 < 0.05) + thrpt: [-26.805% -26.566% -26.353%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [40.350 ms 40.465 ms 40.590 ms] + change: [-18.343% -18.055% -17.756%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [41.688 ms 41.784 ms 41.878 ms] + change: [-20.141% -19.855% -19.585%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1233 ms 1.1264 ms 1.1297 ms] + change: [-6.7221% -6.3657% -6.0107%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [42.162 ms 42.257 ms 42.361 ms] + change: [-20.585% -20.297% -20.014%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.4447 ms 2.4519 ms 2.4592 ms] + change: [-2.6816% -2.3019% -1.9187%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.5562 ms 2.5637 ms 2.5714 ms] + thrpt: [388.90 elem/s 390.06 elem/s 391.21 elem/s] + change: + time: [-0.3640% +0.0648% +0.5031%] (p = 0.77 > 0.05) + thrpt: [-0.5006% -0.0648% +0.3653%] + No change in performance detected. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.2034 ms 4.2152 ms 4.2269 ms] + thrpt: [473.16 elem/s 474.47 elem/s 475.80 elem/s] + change: + time: [-22.158% -21.811% -21.467%] (p = 0.00 < 0.05) + thrpt: [+27.335% +27.895% +28.465%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.3744 ms 7.3999 ms 7.4266 ms] + thrpt: [538.61 elem/s 540.55 elem/s 542.42 elem/s] + change: + time: [-29.038% -28.713% -28.415%] (p = 0.00 < 0.05) + thrpt: [+39.694% +40.278% +40.921%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.453 ms 13.489 ms 13.525 ms] + thrpt: [591.48 elem/s 593.08 elem/s 594.67 elem/s] + change: + time: [-35.158% -34.931% -34.675%] (p = 0.00 < 0.05) + thrpt: [+53.080% +53.684% +54.221%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [25.670 ms 25.756 ms 25.844 ms] + thrpt: [619.11 elem/s 621.22 elem/s 623.29 elem/s] + change: + time: [-36.855% -36.621% -36.367%] (p = 0.00 < 0.05) + thrpt: [+57.152% +57.782% +58.365%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [51.455 ms 51.608 ms 51.762 ms] + thrpt: [618.21 elem/s 620.06 elem/s 621.90 elem/s] + change: + time: [-22.927% -22.605% -22.283%] (p = 0.00 < 0.05) + thrpt: [+28.672% +29.208% +29.747%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [104.92 ms 105.75 ms 106.67 ms] + thrpt: [600.00 elem/s 605.22 elem/s 610.01 elem/s] + change: + time: [-12.554% -11.894% -11.101%] (p = 0.00 < 0.05) + thrpt: [+12.487% +13.499% +14.356%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [40.183 ms 40.311 ms 40.444 ms] + change: [-0.8273% -0.3782% +0.0708%] (p = 0.09 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [41.600 ms 41.693 ms 41.785 ms] + change: [-0.5299% -0.2178% +0.1010%] (p = 0.18 > 0.05) + No change in performance detected. + +verify_kzg_proof time: [1.1111 ms 1.1141 ms 1.1171 ms] + change: [-1.8903% -1.4908% -1.1123%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild + +compute_blob_kzg_proof time: [41.984 ms 42.081 ms 42.178 ms] + change: [-0.7435% -0.4169% -0.0861%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3121 ms 2.3185 ms 2.3249 ms] + change: [-5.8247% -5.4411% -5.0496%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.4401 ms 2.4534 ms 2.4686 ms] + thrpt: [405.09 elem/s 407.60 elem/s 409.82 elem/s] + change: + time: [-4.9212% -4.3021% -3.7080%] (p = 0.00 < 0.05) + thrpt: [+3.8508% +4.4955% +5.1759%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.9702 ms 3.9800 ms 3.9899 ms] + thrpt: [501.26 elem/s 502.51 elem/s 503.75 elem/s] + change: + time: [-5.9261% -5.5790% -5.2315%] (p = 0.00 < 0.05) + thrpt: [+5.5203% +5.9086% +6.2994%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.9085 ms 6.9300 ms 6.9517 ms] + thrpt: [575.40 elem/s 577.20 elem/s 578.99 elem/s] + change: + time: [-6.7788% -6.3499% -5.9024%] (p = 0.00 < 0.05) + thrpt: [+6.2726% +6.7805% +7.2717%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.684 ms 12.720 ms 12.758 ms] + thrpt: [627.08 elem/s 628.91 elem/s 630.71 elem/s] + change: + time: [-6.0792% -5.6964% -5.3147%] (p = 0.00 < 0.05) + thrpt: [+5.6130% +6.0405% +6.4726%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [23.974 ms 24.046 ms 24.118 ms] + thrpt: [663.42 elem/s 665.39 elem/s 667.40 elem/s] + change: + time: [-7.0718% -6.6383% -6.2197%] (p = 0.00 < 0.05) + thrpt: [+6.6322% +7.1103% +7.6100%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [46.370 ms 46.481 ms 46.590 ms] + thrpt: [686.85 elem/s 688.46 elem/s 690.10 elem/s] + change: + time: [-10.278% -9.9347% -9.5859%] (p = 0.00 < 0.05) + thrpt: [+10.602% +11.031% +11.456%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [92.250 ms 93.414 ms 94.777 ms] + thrpt: [675.27 elem/s 685.12 elem/s 693.77 elem/s] + change: + time: [-13.007% -11.663% -10.285%] (p = 0.00 < 0.05) + thrpt: [+11.464% +13.203% +14.952%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high severe + +bench_fft_fr scale: '15' + time: [9.3882 ms 9.4817 ms 9.5565 ms] + change: [+1.7928% +2.5024% +3.3068%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [20.201 s 20.222 s 20.243 s] + change: [-0.9540% -0.7475% -0.5490%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.576 s 21.613 s 21.658 s] + change: [-0.4536% -0.2166% +0.0334%] (p = 0.11 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_fk_multi_da scale: '14' + time: [4.7424 s 4.7561 s 4.7694 s] + change: [+0.4930% +0.8414% +1.1259%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [320.27 ms 321.39 ms 322.59 ms] + change: [+41.124% +41.773% +42.388%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [333.28 ms 334.46 ms 335.76 ms] + change: [+46.951% +47.659% +48.347%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 10 measurements (40.00%) + 2 (20.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [51.106 ms 51.297 ms 51.521 ms] + change: [+45.055% +45.634% +46.261%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [618.75 ms 622.01 ms 626.04 ms] + change: [-3.7688% -3.0207% -2.1147%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [286.74 ms 288.12 ms 289.61 ms] + change: [+1.8672% +2.4120% +3.0337%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [166.53 ms 166.92 ms 167.56 ms] + change: [+1.4396% +1.9059% +2.4129%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9490 ms 8.9841 ms 9.0459 ms] + change: [+0.1814% +0.9313% +1.6375%] (p = 0.04 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [35.654 ms 35.769 ms 35.888 ms] + change: [-11.681% -11.268% -10.839%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [36.805 ms 36.902 ms 37.005 ms] + change: [-11.803% -11.490% -11.184%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2182 ms 1.2233 ms 1.2282 ms] + change: [+8.6599% +9.1136% +9.5684%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [37.325 ms 37.414 ms 37.503 ms] + change: [-11.382% -11.090% -10.811%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.5238 ms 2.5304 ms 2.5369 ms] + change: [+8.7199% +9.1401% +9.5389%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [2.5620 ms 2.5705 ms 2.5791 ms] + thrpt: [387.73 elem/s 389.02 elem/s 390.32 elem/s] + change: + time: [+4.0454% +4.7744% +5.4331%] (p = 0.00 < 0.05) + thrpt: [-5.1531% -4.5568% -3.8881%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.3848 ms 5.3997 ms 5.4143 ms] + thrpt: [369.40 elem/s 370.39 elem/s 371.41 elem/s] + change: + time: [+35.154% +35.670% +36.142%] (p = 0.00 < 0.05) + thrpt: [-26.547% -26.292% -26.010%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.463 ms 10.492 ms 10.521 ms] + thrpt: [380.21 elem/s 381.25 elem/s 382.30 elem/s] + change: + time: [+50.762% +51.396% +52.021%] (p = 0.00 < 0.05) + thrpt: [-34.220% -33.948% -33.670%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [20.612 ms 20.663 ms 20.714 ms] + thrpt: [386.20 elem/s 387.17 elem/s 388.12 elem/s] + change: + time: [+61.839% +62.436% +63.044%] (p = 0.00 < 0.05) + thrpt: [-38.667% -38.437% -38.210%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [40.871 ms 40.965 ms 41.059 ms] + thrpt: [389.68 elem/s 390.58 elem/s 391.47 elem/s] + change: + time: [+69.726% +70.360% +71.011%] (p = 0.00 < 0.05) + thrpt: [-41.524% -41.301% -41.081%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [66.828 ms 67.007 ms 67.196 ms] + thrpt: [476.22 elem/s 477.56 elem/s 478.84 elem/s] + change: + time: [+43.666% +44.162% +44.660%] (p = 0.00 < 0.05) + thrpt: [-30.873% -30.634% -30.394%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [119.47 ms 119.75 ms 120.04 ms] + thrpt: [533.17 elem/s 534.43 elem/s 535.69 elem/s] + change: + time: [+26.311% +28.198% +29.833%] (p = 0.00 < 0.05) + thrpt: [-22.978% -21.995% -20.830%] + Performance has regressed. + +blob_to_kzg_commitment time: [40.808 ms 40.892 ms 40.973 ms] + change: [+13.884% +14.322% +14.773%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild + +compute_kzg_proof time: [42.092 ms 42.192 ms 42.294 ms] + change: [+13.935% +14.334% +14.743%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1299 ms 1.1329 ms 1.1358 ms] + change: [-6.6806% -5.7111% -4.4924%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe + +compute_blob_kzg_proof time: [42.333 ms 42.447 ms 42.557 ms] + change: [+13.045% +13.452% +13.840%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof time: [2.4389 ms 2.4492 ms 2.4616 ms] + change: [-3.6811% -3.2108% -2.6704%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5334 ms 2.5423 ms 2.5528 ms] + thrpt: [391.73 elem/s 393.35 elem/s 394.72 elem/s] + change: + time: [-1.5751% -1.0992% -0.5744%] (p = 0.00 < 0.05) + thrpt: [+0.5778% +1.1114% +1.6003%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.2177 ms 4.2338 ms 4.2508 ms] + thrpt: [470.50 elem/s 472.39 elem/s 474.19 elem/s] + change: + time: [-21.945% -21.593% -21.218%] (p = 0.00 < 0.05) + thrpt: [+26.933% +27.540% +28.115%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.3168 ms 7.3365 ms 7.3559 ms] + thrpt: [543.78 elem/s 545.22 elem/s 546.69 elem/s] + change: + time: [-30.344% -30.074% -29.814%] (p = 0.00 < 0.05) + thrpt: [+42.478% +43.009% +43.563%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [13.661 ms 13.698 ms 13.734 ms] + thrpt: [582.50 elem/s 584.05 elem/s 585.60 elem/s] + change: + time: [-33.956% -33.709% -33.466%] (p = 0.00 < 0.05) + thrpt: [+50.299% +50.849% +51.415%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [25.386 ms 25.452 ms 25.520 ms] + thrpt: [626.96 elem/s 628.63 elem/s 630.26 elem/s] + change: + time: [-38.072% -37.869% -37.649%] (p = 0.00 < 0.05) + thrpt: [+60.384% +60.950% +61.478%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [50.398 ms 50.686 ms 50.979 ms] + thrpt: [627.71 elem/s 631.34 elem/s 634.94 elem/s] + change: + time: [-24.810% -24.358% -23.882%] (p = 0.00 < 0.05) + thrpt: [+31.376% +32.202% +32.997%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [97.960 ms 99.151 ms 100.56 ms] + thrpt: [636.44 elem/s 645.48 elem/s 653.33 elem/s] + change: + time: [-18.202% -17.205% -16.074%] (p = 0.00 < 0.05) + thrpt: [+19.153% +20.780% +22.253%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 8 (8.00%) high mild + 5 (5.00%) high severe + +blob_to_kzg_commitment time: [40.080 ms 40.198 ms 40.330 ms] + change: [-2.0397% -1.6982% -1.2967%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [41.386 ms 41.500 ms 41.615 ms] + change: [-1.9987% -1.6396% -1.2892%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1039 ms 1.1069 ms 1.1098 ms] + change: [-4.7358% -3.5188% -2.5203%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [41.959 ms 42.048 ms 42.137 ms] + change: [-1.2567% -0.9400% -0.5844%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3230 ms 2.3298 ms 2.3368 ms] + change: [-5.4149% -4.8744% -4.3506%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.4160 ms 2.4237 ms 2.4317 ms] + thrpt: [411.23 elem/s 412.60 elem/s 413.91 elem/s] + change: + time: [-5.1558% -4.6664% -4.1951%] (p = 0.00 < 0.05) + thrpt: [+4.3788% +4.8948% +5.4361%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.9732 ms 3.9837 ms 3.9946 ms] + thrpt: [500.67 elem/s 502.04 elem/s 503.37 elem/s] + change: + time: [-6.3721% -5.9057% -5.4623%] (p = 0.00 < 0.05) + thrpt: [+5.7779% +6.2764% +6.8058%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.8993 ms 6.9278 ms 6.9585 ms] + thrpt: [574.84 elem/s 577.38 elem/s 579.77 elem/s] + change: + time: [-6.0501% -5.5701% -5.0764%] (p = 0.00 < 0.05) + thrpt: [+5.3479% +5.8987% +6.4398%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [12.626 ms 12.659 ms 12.692 ms] + thrpt: [630.32 elem/s 631.98 elem/s 633.62 elem/s] + change: + time: [-7.9308% -7.5841% -7.2344%] (p = 0.00 < 0.05) + thrpt: [+7.7986% +8.2065% +8.6140%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [24.021 ms 24.088 ms 24.155 ms] + thrpt: [662.39 elem/s 664.22 elem/s 666.09 elem/s] + change: + time: [-5.7234% -5.3583% -4.9854%] (p = 0.00 < 0.05) + thrpt: [+5.2470% +5.6617% +6.0709%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [46.517 ms 46.643 ms 46.770 ms] + thrpt: [684.20 elem/s 686.06 elem/s 687.93 elem/s] + change: + time: [-8.5497% -7.9759% -7.3905%] (p = 0.00 < 0.05) + thrpt: [+7.9803% +8.6672% +9.3490%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [96.149 ms 97.343 ms 98.710 ms] + thrpt: [648.37 elem/s 657.47 elem/s 665.63 elem/s] + change: + time: [-3.6759% -1.8239% +0.1249%] (p = 0.05 > 0.05) + thrpt: [-0.1247% +1.8578% +3.8162%] + No change in performance detected. +Found 11 outliers among 100 measurements (11.00%) + 6 (6.00%) high mild + 5 (5.00%) high severe + +bench_fft_fr scale: '15' + time: [9.3968 ms 9.4190 ms 9.4344 ms] + change: [-1.4258% -0.7375% +0.0220%] (p = 0.08 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [20.082 s 20.104 s 20.135 s] + change: [-0.7442% -0.5820% -0.3899%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [21.360 s 21.387 s 21.413 s] + change: [-1.3010% -1.0485% -0.8408%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.6519 s 4.6609 s 4.6699 s] + change: [-2.3329% -2.0028% -1.6558%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [253.19 ms 254.60 ms 256.27 ms] + change: [-21.336% -20.781% -20.156%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [256.71 ms 257.31 ms 257.91 ms] + change: [-23.414% -23.067% -22.739%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [50.493 ms 50.883 ms 51.186 ms] + change: [-1.6510% -1.0932% -0.5030%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_g1_lincomb with precomputation points: '4096' + time: [35.664 ms 35.845 ms 35.994 ms] + change: [-1.2582% -0.7242% -0.1535%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_new_poly_div scale: '15' + time: [628.18 ms 632.70 ms 636.84 ms] + change: [+0.7546% +1.7194% +2.6161%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_recover scale: '15' + time: [286.21 ms 287.89 ms 289.64 ms] + change: [-0.8730% -0.0793% +0.6633%] (p = 0.85 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [166.07 ms 166.35 ms 166.83 ms] + change: [-0.6344% -0.2813% +0.0839%] (p = 0.16 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0179 ms 9.0673 ms 9.1161 ms] + change: [-0.8243% -0.0981% +0.6288%] (p = 0.80 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [53.556 ms 54.277 ms 55.078 ms] + change: [+33.005% +35.027% +37.041%] (p = 0.00 < 0.05) + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 9 (9.00%) high mild + +compute_kzg_proof time: [51.796 ms 52.199 ms 52.678 ms] + change: [+24.665% +25.782% +26.952%] (p = 0.00 < 0.05) + Performance has regressed. +Found 17 outliers among 100 measurements (17.00%) + 7 (7.00%) low severe + 2 (2.00%) low mild + 8 (8.00%) high severe + +verify_kzg_proof time: [1.2126 ms 1.2162 ms 1.2201 ms] + change: [+9.4435% +9.9052% +10.350%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low severe + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [52.523 ms 52.999 ms 53.523 ms] + change: [+24.888% +26.045% +27.282%] (p = 0.00 < 0.05) + Performance has regressed. +Found 17 outliers among 100 measurements (17.00%) + 17 (17.00%) high severe + +verify_blob_kzg_proof time: [2.5217 ms 2.5292 ms 2.5367 ms] + change: [+8.1065% +8.5603% +9.0064%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5560 ms 2.5632 ms 2.5705 ms] + thrpt: [389.04 elem/s 390.14 elem/s 391.23 elem/s] + change: + time: [+5.3039% +5.7561% +6.1919%] (p = 0.00 < 0.05) + thrpt: [-5.8309% -5.4428% -5.0368%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.3269 ms 5.3397 ms 5.3527 ms] + thrpt: [373.65 elem/s 374.55 elem/s 375.45 elem/s] + change: + time: [+33.562% +34.039% +34.487%] (p = 0.00 < 0.05) + thrpt: [-25.643% -25.395% -25.128%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [10.378 ms 10.408 ms 10.439 ms] + thrpt: [383.18 elem/s 384.30 elem/s 385.45 elem/s] + change: + time: [+49.442% +50.240% +51.006%] (p = 0.00 < 0.05) + thrpt: [-33.777% -33.440% -33.085%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [20.419 ms 20.470 ms 20.522 ms] + thrpt: [389.82 elem/s 390.82 elem/s 391.80 elem/s] + change: + time: [+61.120% +61.705% +62.344%] (p = 0.00 < 0.05) + thrpt: [-38.402% -38.159% -37.934%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [40.821 ms 40.922 ms 41.025 ms] + thrpt: [390.00 elem/s 390.98 elem/s 391.95 elem/s] + change: + time: [+69.285% +69.885% +70.525%] (p = 0.00 < 0.05) + thrpt: [-41.358% -41.137% -40.928%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [786.84 ms 788.60 ms 790.39 ms] + thrpt: [40.487 elem/s 40.578 elem/s 40.669 elem/s] + change: + time: [+1584.4% +1590.7% +1596.8%] (p = 0.00 < 0.05) + thrpt: [-94.106% -94.085% -94.063%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [1.0033 s 1.0056 s 1.0079 s] + thrpt: [63.499 elem/s 63.643 elem/s 63.790 elem/s] + change: + time: [+918.64% +933.07% +946.20%] (p = 0.00 < 0.05) + thrpt: [-90.442% -90.320% -90.183%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +blob_to_kzg_commitment time: [40.703 ms 40.790 ms 40.879 ms] + change: [-25.949% -24.849% -23.816%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [41.955 ms 42.065 ms 42.176 ms] + change: [-20.178% -19.415% -18.737%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1172 ms 1.1205 ms 1.1238 ms] + change: [-8.2511% -7.8366% -7.4492%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [42.391 ms 42.507 ms 42.627 ms] + change: [-20.642% -19.796% -19.068%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.4290 ms 2.4362 ms 2.4438 ms] + change: [-4.0999% -3.6765% -3.2872%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5220 ms 2.5287 ms 2.5353 ms] + thrpt: [394.43 elem/s 395.46 elem/s 396.50 elem/s] + change: + time: [-1.7309% -1.3448% -0.9521%] (p = 0.00 < 0.05) + thrpt: [+0.9612% +1.3631% +1.7614%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [4.1850 ms 4.1995 ms 4.2150 ms] + thrpt: [474.49 elem/s 476.25 elem/s 477.90 elem/s] + change: + time: [-21.684% -21.354% -21.009%] (p = 0.00 < 0.05) + thrpt: [+26.596% +27.153% +27.688%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.3019 ms 7.3220 ms 7.3423 ms] + thrpt: [544.79 elem/s 546.30 elem/s 547.80 elem/s] + change: + time: [-29.938% -29.653% -29.362%] (p = 0.00 < 0.05) + thrpt: [+41.567% +42.153% +42.730%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [13.552 ms 13.600 ms 13.648 ms] + thrpt: [586.18 elem/s 588.26 elem/s 590.33 elem/s] + change: + time: [-33.844% -33.563% -33.279%] (p = 0.00 < 0.05) + thrpt: [+49.877% +50.518% +51.158%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [27.814 ms 27.907 ms 28.003 ms] + thrpt: [571.38 elem/s 573.34 elem/s 575.26 elem/s] + change: + time: [-32.103% -31.806% -31.530%] (p = 0.00 < 0.05) + thrpt: [+46.050% +46.641% +47.281%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [52.006 ms 52.208 ms 52.410 ms] + thrpt: [610.57 elem/s 612.93 elem/s 615.32 elem/s] + change: + time: [-93.408% -93.380% -93.350%] (p = 0.00 < 0.05) + thrpt: [+1403.8% +1410.5% +1416.9%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [104.52 ms 105.64 ms 106.97 ms] + thrpt: [598.28 elem/s 605.81 elem/s 612.33 elem/s] + change: + time: [-89.604% -89.495% -89.371%] (p = 0.00 < 0.05) + thrpt: [+840.82% +851.90% +861.88%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +blob_to_kzg_commitment time: [40.065 ms 40.184 ms 40.301 ms] + change: [-1.8585% -1.4863% -1.1500%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [41.686 ms 41.799 ms 41.918 ms] + change: [-1.0149% -0.6323% -0.2454%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_kzg_proof time: [1.1112 ms 1.1143 ms 1.1174 ms] + change: [-1.2471% -0.8460% -0.4418%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [42.035 ms 42.134 ms 42.235 ms] + change: [-1.2375% -0.8783% -0.5047%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.3226 ms 2.3291 ms 2.3356 ms] + change: [-4.8106% -4.3972% -4.0106%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.4327 ms 2.4427 ms 2.4530 ms] + thrpt: [407.67 elem/s 409.38 elem/s 411.06 elem/s] + change: + time: [-3.8706% -3.3988% -2.9602%] (p = 0.00 < 0.05) + thrpt: [+3.0505% +3.5184% +4.0264%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.9938 ms 4.0045 ms 4.0157 ms] + thrpt: [498.05 elem/s 499.44 elem/s 500.78 elem/s] + change: + time: [-5.0832% -4.6437% -4.2346%] (p = 0.00 < 0.05) + thrpt: [+4.4219% +4.8698% +5.3555%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.9085 ms 6.9759 ms 7.0890 ms] + thrpt: [564.25 elem/s 573.41 elem/s 579.00 elem/s] + change: + time: [-5.7258% -4.7273% -3.2871%] (p = 0.00 < 0.05) + thrpt: [+3.3988% +4.9619% +6.0735%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [12.668 ms 12.728 ms 12.800 ms] + thrpt: [625.00 elem/s 628.55 elem/s 631.51 elem/s] + change: + time: [-6.9745% -6.4111% -5.7629%] (p = 0.00 < 0.05) + thrpt: [+6.1154% +6.8503% +7.4974%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [23.980 ms 24.044 ms 24.109 ms] + thrpt: [663.64 elem/s 665.44 elem/s 667.23 elem/s] + change: + time: [-14.233% -13.840% -13.480%] (p = 0.00 < 0.05) + thrpt: [+15.581% +16.063% +16.595%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [48.940 ms 49.119 ms 49.306 ms] + thrpt: [649.01 elem/s 651.48 elem/s 653.86 elem/s] + change: + time: [-6.4161% -5.9170% -5.4050%] (p = 0.00 < 0.05) + thrpt: [+5.7139% +6.2892% +6.8560%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [96.130 ms 97.365 ms 98.829 ms] + thrpt: [647.58 elem/s 657.32 elem/s 665.77 elem/s] + change: + time: [-9.5459% -7.8360% -6.1655%] (p = 0.00 < 0.05) + thrpt: [+6.5706% +8.5022% +10.553%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) high mild + 6 (6.00%) high severe + +bench_fft_fr scale: '15' + time: [9.3293 ms 9.3574 ms 9.4106 ms] + change: [-1.1608% -0.4316% +0.3828%] (p = 0.31 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [20.183 s 20.217 s 20.250 s] + change: [+0.3322% +0.5593% +0.7719%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.504 s 21.526 s 21.545 s] + change: [+0.4862% +0.6497% +0.8066%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.6950 s 4.7044 s 4.7148 s] + change: [+0.6498% +0.9335% +1.2379%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [227.86 ms 229.51 ms 231.23 ms] + change: [-10.758% -9.8557% -8.9955%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [229.17 ms 230.30 ms 231.81 ms] + change: [-10.997% -10.497% -9.8965%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [52.244 ms 52.628 ms 53.030 ms] + change: [+2.7748% +3.8628% +5.3868%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [610.54 ms 612.21 ms 614.40 ms] + change: [-3.9330% -3.2390% -2.4537%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [281.63 ms 283.00 ms 284.44 ms] + change: [-2.4367% -1.6970% -0.8969%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [165.49 ms 165.61 ms 165.76 ms] + change: [-0.9442% -0.6067% -0.3198%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low severe + + + + +~~~~~~~~~~ rust binding (rust-kzg with blst backend) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [38.989 ms 39.109 ms 39.235 ms] +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [40.913 ms 41.005 ms 41.102 ms] +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [41.560 ms 41.661 ms 41.765 ms] +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_kzg_proof time: [1.3681 ms 1.3714 ms 1.3749 ms] +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) low mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [3.3293 ms 3.3361 ms 3.3427 ms] +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [3.3511 ms 3.3583 ms 3.3654 ms] + thrpt: [297.14 elem/s 297.77 elem/s 298.41 elem/s] +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [7.0443 ms 7.0704 ms 7.0999 ms] + thrpt: [281.69 elem/s 282.87 elem/s 283.92 elem/s] +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [13.468 ms 13.499 ms 13.529 ms] + thrpt: [295.65 elem/s 296.32 elem/s 296.99 elem/s] +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [26.538 ms 26.636 ms 26.747 ms] + thrpt: [299.10 elem/s 300.34 elem/s 301.45 elem/s] +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [52.680 ms 52.824 ms 52.977 ms] + thrpt: [302.02 elem/s 302.89 elem/s 303.72 elem/s] +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [87.359 ms 87.567 ms 87.801 ms] + thrpt: [364.46 elem/s 365.43 elem/s 366.31 elem/s] +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [162.70 ms 163.00 ms 163.29 ms] + thrpt: [391.94 elem/s 392.65 elem/s 393.36 elem/s] +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + + + + +~~~~~~~~~~ go binding (rust-kzg with blst backend) ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/ethereum/c-kzg-4844/bindings/go +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +Benchmark/BlobToKZGCommitment 28 39607203 ns/op +Benchmark/ComputeKZGProof 28 41089475 ns/op +Benchmark/ComputeBlobKZGProof 28 42260016 ns/op +Benchmark/VerifyKZGProof 849 1395417 ns/op +Benchmark/VerifyBlobKZGProof 352 3373446 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=1) 355 3361543 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=2) 170 7006320 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=4) 90 13485755 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=8) 44 26324250 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=16) 21 53570694 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=32) 13 88931763 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=64) 7 164772275 ns/op +PASS +ok github.com/ethereum/c-kzg-4844/bindings/go 24.636s + + + +********** BENCHMARKING ON 2 CORES ********** + + + + + +~~~~~~~~~~ go-kzg-4844 ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/crate-crypto/go-kzg-4844 +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +BenchmarkComputeChallenge-2 3704 321449 ns/op 32 B/op 1 allocs/op +Benchmark/BlobToKZGCommitment-2 40 28387255 ns/op 382224 B/op 68 allocs/op +Benchmark/ComputeKZGProof-2 40 29522356 ns/op 907672 B/op 79 allocs/op +Benchmark/ComputeBlobKZGProof-2 38 30331115 ns/op 908072 B/op 86 allocs/op +Benchmark/VerifyKZGProof-2 831 1438814 ns/op 6616 B/op 55 allocs/op +Benchmark/VerifyBlobKZGProof-2 457 2479948 ns/op 400480 B/op 64 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-2 486 2491115 ns/op 400736 B/op 66 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-2 248 4874746 ns/op 884649 B/op 497 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-2 164 6940765 ns/op 1675556 B/op 542 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-2 99 12322111 ns/op 3257368 B/op 629 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-2 50 22463997 ns/op 6421152 B/op 806 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-2 26 42080533 ns/op 12748607 B/op 1165 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-2 13 86027134 ns/op 25381128 B/op 1817 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=1)-2 477 2518776 ns/op 400664 B/op 67 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=2)-2 456 2624478 ns/op 801386 B/op 135 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=4)-2 234 5055946 ns/op 1602709 B/op 270 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=8)-2 100 10311294 ns/op 3205331 B/op 538 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=16)-2 60 20639849 ns/op 6410540 B/op 1074 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=32)-2 28 40944216 ns/op 12821134 B/op 2154 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=64)-2 14 80814005 ns/op 25642464 B/op 4325 allocs/op +BenchmarkDeserializeBlob-2 7958 150906 ns/op 131596 B/op 6 allocs/op +PASS +ok github.com/crate-crypto/go-kzg-4844 36.049s + + + +~~~~~~~~~~ rust binding (c-kzg-4844) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [50.530 ms 50.629 ms 50.727 ms] + change: [-0.4377% -0.0734% +0.2744%] (p = 0.69 > 0.05) + No change in performance detected. + +compute_kzg_proof time: [53.359 ms 53.466 ms 53.574 ms] + change: [-1.0193% -0.7180% -0.3522%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [53.815 ms 53.932 ms 54.046 ms] + change: [-0.6168% -0.2541% +0.1165%] (p = 0.17 > 0.05) + No change in performance detected. + +verify_kzg_proof time: [1.3699 ms 1.3736 ms 1.3777 ms] + change: [-0.3565% +0.1993% +0.7154%] (p = 0.49 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.6560 ms 2.6625 ms 2.6691 ms] + change: [-0.2658% +0.1080% +0.5203%] (p = 0.60 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.6483 ms 2.6550 ms 2.6618 ms] + thrpt: [375.69 elem/s 376.65 elem/s 377.61 elem/s] + change: + time: [-0.6404% -0.2858% +0.0788%] (p = 0.12 > 0.05) + thrpt: [-0.0788% +0.2867% +0.6446%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.4778 ms 4.4874 ms 4.4970 ms] + thrpt: [444.74 elem/s 445.69 elem/s 446.65 elem/s] + change: + time: [-2.2547% -1.7521% -1.2840%] (p = 0.00 < 0.05) + thrpt: [+1.3007% +1.7833% +2.3067%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [7.9847 ms 8.0098 ms 8.0365 ms] + thrpt: [497.73 elem/s 499.39 elem/s 500.96 elem/s] + change: + time: [-0.4741% -0.0379% +0.4367%] (p = 0.88 > 0.05) + thrpt: [-0.4348% +0.0380% +0.4764%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [15.018 ms 15.058 ms 15.099 ms] + thrpt: [529.84 elem/s 531.26 elem/s 532.68 elem/s] + change: + time: [+0.2611% +0.6345% +1.0417%] (p = 0.00 < 0.05) + thrpt: [-1.0309% -0.6305% -0.2604%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [28.788 ms 28.843 ms 28.901 ms] + thrpt: [553.61 elem/s 554.72 elem/s 555.79 elem/s] + change: + time: [-0.6601% -0.3300% +0.0054%] (p = 0.06 > 0.05) + thrpt: [-0.0054% +0.3311% +0.6645%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [56.737 ms 56.871 ms 57.003 ms] + thrpt: [561.37 elem/s 562.68 elem/s 564.00 elem/s] + change: + time: [-1.0521% -0.6985% -0.3452%] (p = 0.00 < 0.05) + thrpt: [+0.3464% +0.7034% +1.0633%] + Change within noise threshold. +verify_blob_kzg_proof_batch/64 + time: [112.76 ms 112.96 ms 113.17 ms] + thrpt: [565.52 elem/s 566.59 elem/s 567.58 elem/s] + change: + time: [-0.8063% -0.5008% -0.2108%] (p = 0.00 < 0.05) + thrpt: [+0.2112% +0.5034% +0.8128%] + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) low mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ constantine ~~~~~~~~~~ + + + Executing task bench_eth_eip4844_kzg in /root/benches/constantine/constantine.nimble +bench xoshiro512** seed: 1720311985 +Warmup: 1.0370 s, result 224 (displayed to avoid compiler optimizing warmup away) + + +Compiled with Clang +Optimization level => + no optimization: false + release: true + danger: true + inline assembly: true +Using Constantine with 64-bit limbs +Running on Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz + +⚠️ Cycles measurements are approximate and use the CPU nominal clock: Turbo-Boost and overclocking will skew them. +i.e. a 20% overclock will be about 20% off (assuming no dynamic frequency scaling) + +================================================================================================================= + +Trusted Setup loaded successfully +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +blob_to_kzg_commitment serial 29.344 ops/s 34078088 ns/op 91795281 CPU cycles (approx) +blob_to_kzg_commitment 16 threads 47.705 ops/s 20962236 ns/op 56465435 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.626x + +compute_kzg_proof serial 28.831 ops/s 34684553 ns/op 93428911 CPU cycles (approx) +compute_kzg_proof 16 threads 45.496 ops/s 21979753 ns/op 59206304 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.578x + +compute_blob_kzg_proof serial 28.519 ops/s 35064694 ns/op 94452861 CPU cycles (approx) +compute_blob_kzg_proof 16 threads 44.413 ops/s 22516167 ns/op 60651235 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.557x + +verify_kzg_proof serial 925.484 ops/s 1080516 ns/op 2910541 CPU cycles (approx) +verify_kzg_proof is always serial + +verify_blob_kzg_proof serial 465.948 ops/s 2146163 ns/op 5781045 CPU cycles (approx) +verify_blob_kzg_proof 16 threads 490.493 ops/s 2038767 ns/op 5491764 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.053x + +verify_blob_kzg_proof (batch 1) serial 461.930 ops/s 2164832 ns/op 5831336 CPU cycles (approx) +verify_blob_kzg_proof (batch 1) 16 threads 458.069 ops/s 2183077 ns/op 5880485 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 0.992x + +verify_blob_kzg_proof (batch 2) serial 283.359 ops/s 3529092 ns/op 9506213 CPU cycles (approx) +verify_blob_kzg_proof (batch 2) 16 threads 345.872 ops/s 2891244 ns/op 7788055 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.221x + +verify_blob_kzg_proof (batch 4) serial 158.984 ops/s 6289956 ns/op 16943072 CPU cycles (approx) +verify_blob_kzg_proof (batch 4) 16 threads 228.733 ops/s 4371912 ns/op 11776486 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.439x + +verify_blob_kzg_proof (batch 8) serial 85.956 ops/s 11633797 ns/op 31337643 CPU cycles (approx) +verify_blob_kzg_proof (batch 8) 16 threads 138.904 ops/s 7199191 ns/op 19392255 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.616x + +verify_blob_kzg_proof (batch 16) serial 45.285 ops/s 22082588 ns/op 59483302 CPU cycles (approx) +verify_blob_kzg_proof (batch 16) 16 threads 74.235 ops/s 13470742 ns/op 36285789 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.639x + +verify_blob_kzg_proof (batch 32) serial 23.395 ops/s 42743587 ns/op 115137335 CPU cycles (approx) +verify_blob_kzg_proof (batch 32) 16 threads 40.908 ops/s 24444967 ns/op 65846786 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.749x + +verify_blob_kzg_proof (batch 64) serial 11.893 ops/s 84080878 ns/op 226486603 CPU cycles (approx) +verify_blob_kzg_proof (batch 64) 16 threads 20.711 ops/s 48282688 ns/op 130057892 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.741x + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8579 ms 7.9075 ms 7.9610 ms] + change: [-13.131% -12.576% -12.037%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +blob_to_kzg_commitment time: [76.744 ms 76.881 ms 77.019 ms] + change: [+90.683% +91.322% +91.965%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [80.475 ms 80.687 ms 80.938 ms] + change: [+92.252% +93.038% +93.857%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6257 ms 2.6307 ms 2.6356 ms] + change: [+135.91% +136.61% +137.31%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [81.216 ms 81.402 ms 81.588 ms] + change: [+92.544% +93.199% +93.821%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [4.1240 ms 4.1333 ms 4.1425 ms] + change: [+76.837% +77.463% +78.134%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [4.1541 ms 4.1644 ms 4.1748 ms] + thrpt: [239.53 elem/s 240.13 elem/s 240.72 elem/s] + change: + time: [+69.661% +70.481% +71.336%] (p = 0.00 < 0.05) + thrpt: [-41.635% -41.343% -41.059%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9822 ms 5.9961 ms 6.0103 ms] + thrpt: [332.76 elem/s 333.55 elem/s 334.33 elem/s] + change: + time: [+49.209% +49.735% +50.255%] (p = 0.00 < 0.05) + thrpt: [-33.447% -33.216% -32.980%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.660 ms 10.688 ms 10.716 ms] + thrpt: [373.28 elem/s 374.26 elem/s 375.22 elem/s] + change: + time: [+50.677% +53.210% +54.794%] (p = 0.00 < 0.05) + thrpt: [-35.398% -34.730% -33.633%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [17.072 ms 17.109 ms 17.146 ms] + thrpt: [466.59 elem/s 467.59 elem/s 468.60 elem/s] + change: + time: [+33.599% +34.423% +35.118%] (p = 0.00 < 0.05) + thrpt: [-25.991% -25.608% -25.149%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [31.807 ms 31.900 ms 31.997 ms] + thrpt: [500.04 elem/s 501.56 elem/s 503.03 elem/s] + change: + time: [+32.168% +32.673% +33.256%] (p = 0.00 < 0.05) + thrpt: [-24.957% -24.627% -24.339%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [59.755 ms 59.882 ms 60.009 ms] + thrpt: [533.25 elem/s 534.38 elem/s 535.52 elem/s] + change: + time: [+21.364% +21.913% +22.420%] (p = 0.00 < 0.05) + thrpt: [-18.314% -17.975% -17.603%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [115.40 ms 115.67 ms 115.96 ms] + thrpt: [551.90 elem/s 553.28 elem/s 554.61 elem/s] + change: + time: [+17.039% +18.805% +20.361%] (p = 0.00 < 0.05) + thrpt: [-16.917% -15.828% -14.559%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [8.2786 ms 8.2942 ms 8.3140 ms] + change: [-12.148% -11.524% -10.971%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [1.0245 s 1.0271 s 1.0301 s] + change: [-94.935% -94.920% -94.902%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [51.178 s 51.234 s 51.296 s] + change: [+137.67% +138.01% +138.37%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [11.960 s 11.991 s 12.027 s] + change: [+154.00% +154.90% +155.68%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [496.04 ms 497.49 ms 498.84 ms] + change: [+115.01% +116.76% +118.40%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [514.26 ms 515.91 ms 517.50 ms] + change: [+122.39% +124.02% +125.32%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [79.271 ms 79.595 ms 80.144 ms] + change: [+49.425% +51.307% +52.961%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [363.92 ms 365.79 ms 367.82 ms] + change: [-40.632% -40.252% -39.877%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [401.75 ms 402.23 ms 402.80 ms] + change: [+41.389% +42.130% +42.851%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [179.65 ms 180.06 ms 180.57 ms] + change: [+8.5769% +8.8917% +9.2689%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.7889 ms 7.8096 ms 7.8458 ms] + change: [-1.6541% -1.1352% -0.5884%] (p = 0.00 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [57.350 ms 57.573 ms 57.814 ms] + change: [-25.454% -25.113% -24.778%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [61.423 ms 61.595 ms 61.768 ms] + change: [-23.979% -23.662% -23.349%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [2.6956 ms 2.7039 ms 2.7123 ms] + change: [+2.4470% +2.7821% +3.1804%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [62.172 ms 62.386 ms 62.613 ms] + change: [-23.740% -23.360% -23.012%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [4.0636 ms 4.0746 ms 4.0857 ms] + change: [-1.7763% -1.4211% -1.0793%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.0856 ms 4.0975 ms 4.1094 ms] + thrpt: [243.34 elem/s 244.05 elem/s 244.76 elem/s] + change: + time: [-1.9857% -1.6070% -1.2612%] (p = 0.00 < 0.05) + thrpt: [+1.2773% +1.6333% +2.0259%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [5.9132 ms 5.9302 ms 5.9470 ms] + thrpt: [336.30 elem/s 337.26 elem/s 338.22 elem/s] + change: + time: [-1.4918% -1.0993% -0.7276%] (p = 0.00 < 0.05) + thrpt: [+0.7330% +1.1115% +1.5144%] + Change within noise threshold. +verify_blob_kzg_proof_batch/4 + time: [10.601 ms 10.636 ms 10.672 ms] + thrpt: [374.82 elem/s 376.08 elem/s 377.32 elem/s] + change: + time: [-0.9230% -0.4845% -0.0821%] (p = 0.03 < 0.05) + thrpt: [+0.0821% +0.4869% +0.9316%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [26.645 ms 26.722 ms 26.799 ms] + thrpt: [298.52 elem/s 299.38 elem/s 300.24 elem/s] + change: + time: [+55.666% +56.185% +56.794%] (p = 0.00 < 0.05) + thrpt: [-36.222% -35.973% -35.760%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [40.606 ms 40.736 ms 40.874 ms] + thrpt: [391.44 elem/s 392.77 elem/s 394.03 elem/s] + change: + time: [+27.156% +27.698% +28.243%] (p = 0.00 < 0.05) + thrpt: [-22.023% -21.690% -21.356%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [67.849 ms 68.036 ms 68.223 ms] + thrpt: [469.05 elem/s 470.34 elem/s 471.64 elem/s] + change: + time: [+13.230% +13.616% +13.993%] (p = 0.00 < 0.05) + thrpt: [-12.275% -11.984% -11.684%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [121.62 ms 121.95 ms 122.29 ms] + thrpt: [523.33 elem/s 524.79 elem/s 526.22 elem/s] + change: + time: [+5.0440% +5.4275% +5.8138%] (p = 0.00 < 0.05) + thrpt: [-5.4944% -5.1481% -4.8018%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [8.3952 ms 8.4331 ms 8.4794 ms] + change: [+1.4196% +1.9358% +2.3689%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [1.0328 s 1.0360 s 1.0395 s] + change: [+0.3914% +0.8689% +1.2714%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [51.093 s 51.148 s 51.199 s] + change: [-0.3345% -0.1671% -0.0264%] (p = 0.06 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [12.103 s 12.150 s 12.201 s] + change: [+0.8357% +1.3227% +1.7985%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [395.83 ms 397.78 ms 400.28 ms] + change: [-20.517% -20.041% -19.481%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [444.69 ms 446.95 ms 449.20 ms] + change: [-13.847% -13.366% -12.815%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [61.859 ms 62.223 ms 62.669 ms] + change: [-22.668% -22.014% -21.162%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [379.33 ms 381.20 ms 383.17 ms] + change: [+3.4507% +4.2134% +4.9759%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [410.49 ms 411.83 ms 413.07 ms] + change: [+2.0432% +2.3856% +2.6750%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [184.65 ms 186.18 ms 187.74 ms] + change: [+2.3959% +3.3462% +4.1553%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8914 ms 7.9270 ms 7.9517 ms] + change: [+0.9801% +1.5148% +2.0388%] (p = 0.00 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [55.090 ms 55.235 ms 55.387 ms] + change: [-4.5393% -4.0609% -3.6152%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [57.361 ms 57.507 ms 57.653 ms] + change: [-6.9864% -6.6371% -6.2797%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +verify_kzg_proof time: [2.7400 ms 2.7466 ms 2.7534 ms] + change: [+1.2006% +1.5771% +1.9841%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [57.253 ms 57.399 ms 57.556 ms] + change: [-8.4069% -7.9945% -7.5823%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [4.0904 ms 4.1001 ms 4.1104 ms] + change: [+0.2477% +0.6264% +0.9884%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1851 ms 4.1966 ms 4.2086 ms] + thrpt: [237.61 elem/s 238.29 elem/s 238.94 elem/s] + change: + time: [+1.9978% +2.4183% +2.8370%] (p = 0.00 < 0.05) + thrpt: [-2.7587% -2.3612% -1.9587%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [6.0598 ms 6.0784 ms 6.1016 ms] + thrpt: [327.78 elem/s 329.03 elem/s 330.04 elem/s] + change: + time: [+2.0345% +2.4998% +3.0103%] (p = 0.00 < 0.05) + thrpt: [-2.9223% -2.4389% -1.9939%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.711 ms 10.731 ms 10.752 ms] + thrpt: [372.03 elem/s 372.74 elem/s 373.44 elem/s] + change: + time: [+0.5133% +0.8971% +1.2657%] (p = 0.00 < 0.05) + thrpt: [-1.2499% -0.8891% -0.5107%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [17.180 ms 17.220 ms 17.260 ms] + thrpt: [463.51 elem/s 464.59 elem/s 465.67 elem/s] + change: + time: [-35.805% -35.559% -35.312%] (p = 0.00 < 0.05) + thrpt: [+54.587% +55.181% +55.776%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [32.080 ms 32.152 ms 32.226 ms] + thrpt: [496.50 elem/s 497.63 elem/s 498.75 elem/s] + change: + time: [-21.395% -21.072% -20.767%] (p = 0.00 < 0.05) + thrpt: [+26.211% +26.697% +27.218%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [60.879 ms 61.043 ms 61.246 ms] + thrpt: [522.48 elem/s 524.22 elem/s 525.64 elem/s] + change: + time: [-10.624% -10.278% -9.8984%] (p = 0.00 < 0.05) + thrpt: [+10.986% +11.455% +11.887%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [116.92 ms 117.23 ms 117.56 ms] + thrpt: [544.40 elem/s 545.93 elem/s 547.36 elem/s] + change: + time: [-4.2411% -3.8717% -3.4853%] (p = 0.00 < 0.05) + thrpt: [+3.6112% +4.0276% +4.4289%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [8.4588 ms 8.5301 ms 8.5703 ms] + change: [-0.4968% +0.1736% +0.8397%] (p = 0.64 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [1.0320 s 1.0363 s 1.0409 s] + change: [-0.5042% +0.0272% +0.5838%] (p = 0.92 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [51.902 s 51.959 s 52.033 s] + change: [+1.4263% +1.5857% +1.7737%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +bench_fk_multi_da scale: '14' + time: [12.117 s 12.130 s 12.143 s] + change: [-0.5880% -0.1670% +0.2330%] (p = 0.47 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [385.31 ms 387.11 ms 388.80 ms] + change: [-3.4291% -2.6831% -2.0415%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [389.95 ms 390.86 ms 391.75 ms] + change: [-13.036% -12.551% -12.066%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [80.638 ms 80.879 ms 81.054 ms] + change: [+29.164% +30.353% +31.419%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '4096' + time: [55.966 ms 56.087 ms 56.313 ms] + change: [+56.020% +56.948% +57.938%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [372.11 ms 373.78 ms 375.62 ms] + change: [-2.5903% -1.9460% -1.3025%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [406.74 ms 407.51 ms 408.28 ms] + change: [-1.3848% -1.0493% -0.6725%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [183.33 ms 184.11 ms 184.95 ms] + change: [-2.0380% -1.1104% -0.1589%] (p = 0.04 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [4.5546 ms 4.5724 ms 4.5925 ms] + change: [-42.770% -42.339% -41.796%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [43.051 ms 43.212 ms 43.391 ms] + change: [-22.127% -21.768% -21.370%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high severe + +compute_kzg_proof time: [45.664 ms 45.875 ms 46.120 ms] + change: [-20.651% -20.227% -19.771%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) high mild + 6 (6.00%) high severe + +verify_kzg_proof time: [2.6800 ms 2.6858 ms 2.6915 ms] + change: [-2.5258% -2.2142% -1.8908%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [46.423 ms 46.554 ms 46.707 ms] + change: [-19.223% -18.895% -18.573%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [4.1006 ms 4.1090 ms 4.1174 ms] + change: [-0.0837% +0.2188% +0.5498%] (p = 0.18 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1455 ms 4.1550 ms 4.1649 ms] + thrpt: [240.10 elem/s 240.67 elem/s 241.22 elem/s] + change: + time: [-1.3435% -0.9909% -0.6296%] (p = 0.00 < 0.05) + thrpt: [+0.6336% +1.0008% +1.3618%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.4659 ms 4.5059 ms 4.5706 ms] + thrpt: [437.58 elem/s 443.87 elem/s 447.84 elem/s] + change: + time: [-26.589% -25.871% -24.737%] (p = 0.00 < 0.05) + thrpt: [+32.868% +34.901% +36.220%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [8.5962 ms 8.6307 ms 8.6697 ms] + thrpt: [461.38 elem/s 463.46 elem/s 465.32 elem/s] + change: + time: [-19.947% -19.575% -19.129%] (p = 0.00 < 0.05) + thrpt: [+23.653% +24.339% +24.917%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [16.951 ms 17.023 ms 17.106 ms] + thrpt: [467.67 elem/s 469.95 elem/s 471.93 elem/s] + change: + time: [-1.5794% -1.1409% -0.6036%] (p = 0.00 < 0.05) + thrpt: [+0.6073% +1.1541% +1.6047%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [33.492 ms 33.603 ms 33.727 ms] + thrpt: [474.40 elem/s 476.14 elem/s 477.72 elem/s] + change: + time: [+4.1230% +4.5129% +4.9472%] (p = 0.00 < 0.05) + thrpt: [-4.7140% -4.3180% -3.9598%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [49.050 ms 49.243 ms 49.471 ms] + thrpt: [646.84 elem/s 649.84 elem/s 652.40 elem/s] + change: + time: [-19.771% -19.331% -18.919%] (p = 0.00 < 0.05) + thrpt: [+23.333% +23.963% +24.643%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) low mild + 5 (5.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [86.217 ms 86.494 ms 86.821 ms] + thrpt: [737.15 elem/s 739.94 elem/s 742.31 elem/s] + change: + time: [-26.549% -26.220% -25.911%] (p = 0.00 < 0.05) + thrpt: [+34.972% +35.537% +36.145%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [4.6481 ms 4.6733 ms 4.6998 ms] + change: [-45.420% -44.979% -44.549%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [551.62 ms 554.00 ms 556.49 ms] + change: [-46.869% -46.538% -46.243%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [29.456 s 29.492 s 29.530 s] + change: [-43.337% -43.241% -43.145%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [6.4545 s 6.4661 s 6.4787 s] + change: [-46.815% -46.692% -46.578%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [254.64 ms 255.97 ms 257.35 ms] + change: [-34.291% -33.877% -33.411%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [254.63 ms 256.07 ms 257.79 ms] + change: [-34.858% -34.486% -34.095%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [43.783 ms 43.998 ms 44.218 ms] + change: [-46.097% -45.748% -45.437%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [224.26 ms 225.12 ms 226.02 ms] + change: [-40.138% -39.773% -39.407%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [335.91 ms 338.02 ms 340.95 ms] + change: [-17.578% -17.051% -16.446%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [149.87 ms 151.77 ms 153.10 ms] + change: [-19.401% -18.449% -17.637%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [4.5558 ms 4.5781 ms 4.6090 ms] + change: [-0.6516% +0.2459% +1.0713%] (p = 0.62 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [29.879 ms 29.951 ms 30.024 ms] + change: [-31.018% -30.689% -30.381%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [31.165 ms 31.265 ms 31.368 ms] + change: [-32.278% -31.848% -31.462%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.7063 ms 2.7131 ms 2.7202 ms] + change: [+0.6744% +1.0190% +1.3455%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [32.027 ms 32.122 ms 32.223 ms] + change: [-31.300% -30.999% -30.687%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [4.1166 ms 4.1264 ms 4.1364 ms] + change: [+0.1050% +0.4228% +0.7300%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1167 ms 4.1277 ms 4.1386 ms] + thrpt: [241.63 elem/s 242.27 elem/s 242.92 elem/s] + change: + time: [-1.0047% -0.6583% -0.3076%] (p = 0.00 < 0.05) + thrpt: [+0.3085% +0.6626% +1.0148%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [4.5100 ms 4.5796 ms 4.6758 ms] + thrpt: [427.74 elem/s 436.72 elem/s 443.46 elem/s] + change: + time: [-0.4599% +1.6375% +4.4522%] (p = 0.16 > 0.05) + thrpt: [-4.2624% -1.6111% +0.4620%] + No change in performance detected. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [8.6310 ms 8.6533 ms 8.6757 ms] + thrpt: [461.06 elem/s 462.25 elem/s 463.44 elem/s] + change: + time: [-0.2660% +0.2615% +0.7456%] (p = 0.31 > 0.05) + thrpt: [-0.7401% -0.2608% +0.2667%] + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) low mild + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [16.900 ms 17.199 ms 17.600 ms] + thrpt: [454.56 elem/s 465.15 elem/s 473.37 elem/s] + change: + time: [-0.8135% +1.0317% +3.2974%] (p = 0.40 > 0.05) + thrpt: [-3.1922% -1.0212% +0.8201%] + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [33.307 ms 33.382 ms 33.459 ms] + thrpt: [478.19 elem/s 479.30 elem/s 480.39 elem/s] + change: + time: [-1.0784% -0.6595% -0.2421%] (p = 0.00 < 0.05) + thrpt: [+0.2427% +0.6638% +1.0902%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [48.420 ms 48.573 ms 48.738 ms] + thrpt: [656.57 elem/s 658.80 elem/s 660.88 elem/s] + change: + time: [-1.9133% -1.3604% -0.8554%] (p = 0.00 < 0.05) + thrpt: [+0.8628% +1.3792% +1.9506%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [85.927 ms 86.111 ms 86.294 ms] + thrpt: [741.65 elem/s 743.23 elem/s 744.82 elem/s] + change: + time: [-0.8858% -0.4427% -0.0658%] (p = 0.03 < 0.05) + thrpt: [+0.0659% +0.4447% +0.8937%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) low mild + +bench_fft_fr scale: '15' + time: [4.7141 ms 4.7292 ms 4.7527 ms] + change: [+0.7009% +1.3875% +2.0662%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [554.04 ms 555.16 ms 556.37 ms] + change: [-0.2787% +0.2086% +0.6964%] (p = 0.44 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [29.401 s 29.431 s 29.460 s] + change: [-0.3643% -0.2066% -0.0530%] (p = 0.03 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [6.5097 s 6.5193 s 6.5290 s] + change: [+0.5670% +0.8227% +1.0484%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [199.85 ms 200.49 ms 201.18 ms] + change: [-22.178% -21.676% -21.202%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [200.64 ms 200.95 ms 201.26 ms] + change: [-22.069% -21.524% -21.054%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [44.492 ms 44.695 ms 44.905 ms] + change: [+0.8110% +1.4523% +2.0513%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_g1_lincomb with precomputation points: '4096' + time: [30.326 ms 30.426 ms 30.546 ms] + change: [-46.156% -45.810% -45.496%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [224.67 ms 225.74 ms 227.07 ms] + change: [-0.3516% +0.2768% +0.9889%] (p = 0.46 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [342.35 ms 348.06 ms 355.59 ms] + change: [+0.9457% +2.9697% +5.1729%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [149.44 ms 151.08 ms 152.96 ms] + change: [-1.4067% +1.0590% +3.8893%] (p = 0.52 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [10.476 ms 10.499 ms 10.524 ms] + change: [+127.92% +129.52% +131.12%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [156.32 ms 156.56 ms 156.81 ms] + change: [+421.26% +422.73% +424.22%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [160.52 ms 160.81 ms 161.10 ms] + change: [+412.47% +414.34% +416.32%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_kzg_proof time: [3.9991 ms 4.0099 ms 4.0205 ms] + change: [+47.250% +47.796% +48.424%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [161.48 ms 161.78 ms 162.07 ms] + change: [+401.77% +403.62% +405.42%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [5.5030 ms 5.5213 ms 5.5404 ms] + change: [+33.203% +33.803% +34.342%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.5279 ms 5.5430 ms 5.5580 ms] + thrpt: [179.92 elem/s 180.41 elem/s 180.90 elem/s] + change: + time: [+33.766% +34.288% +34.825%] (p = 0.00 < 0.05) + thrpt: [-25.830% -25.533% -25.243%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [10.755 ms 10.785 ms 10.815 ms] + thrpt: [184.93 elem/s 185.44 elem/s 185.96 elem/s] + change: + time: [+130.60% +135.50% +139.18%] (p = 0.00 < 0.05) + thrpt: [-58.191% -57.538% -56.635%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [15.054 ms 15.087 ms 15.120 ms] + thrpt: [264.55 elem/s 265.13 elem/s 265.71 elem/s] + change: + time: [+73.747% +74.348% +74.915%] (p = 0.00 < 0.05) + thrpt: [-42.829% -42.643% -42.445%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [23.952 ms 24.017 ms 24.083 ms] + thrpt: [332.18 elem/s 333.10 elem/s 333.99 elem/s] + change: + time: [+36.397% +39.644% +42.153%] (p = 0.00 < 0.05) + thrpt: [-29.653% -28.389% -26.685%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [41.580 ms 41.684 ms 41.788 ms] + thrpt: [382.88 elem/s 383.84 elem/s 384.80 elem/s] + change: + time: [+24.467% +24.871% +25.299%] (p = 0.00 < 0.05) + thrpt: [-20.191% -19.917% -19.658%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [85.627 ms 85.855 ms 86.084 ms] + thrpt: [371.73 elem/s 372.72 elem/s 373.72 elem/s] + change: + time: [+75.960% +76.755% +77.469%] (p = 0.00 < 0.05) + thrpt: [-43.652% -43.424% -43.169%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [152.57 ms 152.91 ms 153.25 ms] + thrpt: [417.61 elem/s 418.56 elem/s 419.49 elem/s] + change: + time: [+77.059% +77.569% +78.098%] (p = 0.00 < 0.05) + thrpt: [-43.851% -43.684% -43.522%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [11.222 ms 11.275 ms 11.322 ms] + change: [+137.75% +139.16% +140.60%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 2 (20.00%) low mild + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [99.359 s 99.507 s 99.637 s] + change: [+17779% +17824% +17868%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [105.87 s 106.02 s 106.20 s] + change: [+259.63% +260.25% +260.89%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [23.141 s 23.186 s 23.226 s] + change: [+254.75% +255.65% +256.46%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [1.0005 s 1.0041 s 1.0086 s] + change: [+398.29% +400.82% +403.77%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [914.63 ms 918.39 ms 922.03 ms] + change: [+355.08% +357.02% +358.84%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [159.12 ms 159.99 ms 160.80 ms] + change: [+255.28% +257.46% +259.85%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [792.57 ms 795.06 ms 797.55 ms] + change: [+249.82% +252.20% +254.10%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [599.62 ms 602.94 ms 606.44 ms] + change: [+69.453% +73.227% +76.341%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [208.56 ms 208.95 ms 209.38 ms] + change: [+33.901% +37.709% +40.935%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [5.8771 ms 5.9028 ms 5.9236 ms] + change: [-44.146% -43.807% -43.390%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [79.962 ms 80.146 ms 80.335 ms] + change: [-48.961% -48.809% -48.654%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_kzg_proof time: [81.746 ms 82.039 ms 82.356 ms] + change: [-49.173% -48.983% -48.767%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [3.9942 ms 4.0051 ms 4.0160 ms] + change: [-0.5041% -0.1203% +0.2511%] (p = 0.55 > 0.05) + No change in performance detected. + +compute_blob_kzg_proof time: [82.113 ms 82.292 ms 82.470 ms] + change: [-49.289% -49.132% -48.999%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [5.4933 ms 5.5084 ms 5.5237 ms] + change: [-0.6397% -0.2327% +0.2046%] (p = 0.30 > 0.05) + No change in performance detected. + +verify_blob_kzg_proof_batch/1 + time: [5.5306 ms 5.5464 ms 5.5627 ms] + thrpt: [179.77 elem/s 180.30 elem/s 180.81 elem/s] + change: + time: [-0.3349% +0.0622% +0.4460%] (p = 0.77 > 0.05) + thrpt: [-0.4440% -0.0622% +0.3360%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.8506 ms 5.8678 ms 5.8863 ms] + thrpt: [339.77 elem/s 340.84 elem/s 341.84 elem/s] + change: + time: [-45.819% -45.594% -45.374%] (p = 0.00 < 0.05) + thrpt: [+83.064% +83.804% +84.567%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [11.408 ms 11.449 ms 11.491 ms] + thrpt: [348.09 elem/s 349.38 elem/s 350.62 elem/s] + change: + time: [-24.433% -24.115% -23.759%] (p = 0.00 < 0.05) + thrpt: [+31.163% +31.778% +32.333%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [22.404 ms 22.467 ms 22.531 ms] + thrpt: [355.07 elem/s 356.08 elem/s 357.08 elem/s] + change: + time: [-6.8275% -6.4562% -6.0796%] (p = 0.00 < 0.05) + thrpt: [+6.4732% +6.9018% +7.3279%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [44.489 ms 44.582 ms 44.677 ms] + thrpt: [358.13 elem/s 358.89 elem/s 359.64 elem/s] + change: + time: [+6.6022% +6.9511% +7.2956%] (p = 0.00 < 0.05) + thrpt: [-6.7995% -6.4993% -6.1933%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [86.481 ms 86.702 ms 86.933 ms] + thrpt: [368.10 elem/s 369.08 elem/s 370.02 elem/s] + change: + time: [+0.6150% +0.9864% +1.3747%] (p = 0.00 < 0.05) + thrpt: [-1.3561% -0.9768% -0.6112%] + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [121.45 ms 121.76 ms 122.09 ms] + thrpt: [524.19 elem/s 525.62 elem/s 526.97 elem/s] + change: + time: [-20.653% -20.369% -20.116%] (p = 0.00 < 0.05) + thrpt: [+25.181% +25.579% +26.029%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [6.0778 ms 6.0934 ms 6.1098 ms] + change: [-46.463% -46.204% -45.926%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [53.232 s 53.300 s 53.365 s] + change: [-46.536% -46.435% -46.333%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [59.517 s 59.584 s 59.663 s] + change: [-43.916% -43.801% -43.688%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [12.452 s 12.475 s 12.497 s] + change: [-46.337% -46.196% -46.060%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [505.74 ms 507.88 ms 510.50 ms] + change: [-49.731% -49.418% -49.098%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [463.52 ms 464.80 ms 466.36 ms] + change: [-49.637% -49.390% -49.126%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [80.343 ms 80.593 ms 80.798 ms] + change: [-49.827% -49.545% -49.261%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [455.01 ms 456.71 ms 458.62 ms] + change: [-42.836% -42.556% -42.269%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [525.72 ms 532.12 ms 539.36 ms] + change: [-13.006% -11.745% -10.466%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [174.50 ms 176.29 ms 179.92 ms] + change: [-16.123% -14.669% -13.290%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2731 ms 9.3317 ms 9.3899 ms] + change: [+56.099% +57.348% +58.599%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [53.048 ms 53.205 ms 53.372 ms] + change: [-33.883% -33.615% -33.350%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +compute_kzg_proof time: [55.899 ms 56.104 ms 56.317 ms] + change: [-31.961% -31.612% -31.262%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_kzg_proof time: [1.2567 ms 1.2590 ms 1.2612 ms] + change: [-68.643% -68.512% -68.376%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [57.199 ms 57.325 ms 57.456 ms] + change: [-30.571% -30.340% -30.126%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8556 ms 2.8620 ms 2.8686 ms] + change: [-48.234% -48.044% -47.867%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8432 ms 2.8520 ms 2.8608 ms] + thrpt: [349.56 elem/s 350.64 elem/s 351.71 elem/s] + change: + time: [-48.801% -48.580% -48.353%] (p = 0.00 < 0.05) + thrpt: [+93.621% +94.477% +95.315%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6232 ms 4.6362 ms 4.6490 ms] + thrpt: [430.20 elem/s 431.39 elem/s 432.60 elem/s] + change: + time: [-21.332% -20.988% -20.672%] (p = 0.00 < 0.05) + thrpt: [+26.059% +26.564% +27.117%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [8.5541 ms 8.5742 ms 8.5937 ms] + thrpt: [465.46 elem/s 466.52 elem/s 467.61 elem/s] + change: + time: [-25.430% -25.108% -24.804%] (p = 0.00 < 0.05) + thrpt: [+32.986% +33.525% +34.101%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [15.954 ms 16.001 ms 16.048 ms] + thrpt: [498.50 elem/s 499.96 elem/s 501.45 elem/s] + change: + time: [-29.030% -28.778% -28.484%] (p = 0.00 < 0.05) + thrpt: [+39.830% +40.405% +40.904%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [30.724 ms 30.799 ms 30.876 ms] + thrpt: [518.20 elem/s 519.49 elem/s 520.76 elem/s] + change: + time: [-31.147% -30.915% -30.701%] (p = 0.00 < 0.05) + thrpt: [+44.302% +44.748% +45.237%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [59.173 ms 59.368 ms 59.568 ms] + thrpt: [537.20 elem/s 539.01 elem/s 540.79 elem/s] + change: + time: [-31.813% -31.526% -31.222%] (p = 0.00 < 0.05) + thrpt: [+45.395% +46.041% +46.655%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [115.61 ms 115.87 ms 116.14 ms] + thrpt: [551.04 elem/s 552.32 elem/s 553.60 elem/s] + change: + time: [-5.1561% -4.8344% -4.5105%] (p = 0.00 < 0.05) + thrpt: [+4.7235% +5.0799% +5.4364%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.6300 ms 9.6855 ms 9.7460 ms] + change: [+58.664% +59.821% +61.070%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [18.886 s 18.915 s 18.952 s] + change: [-64.583% -64.512% -64.428%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [20.334 s 20.361 s 20.388 s] + change: [-65.892% -65.828% -65.770%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [4.6864 s 4.6959 s 4.7062 s] + change: [-62.456% -62.357% -62.248%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [342.17 ms 342.93 ms 343.66 ms] + change: [-32.845% -32.477% -32.154%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [349.18 ms 350.86 ms 352.64 ms] + change: [-24.941% -24.513% -24.015%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [53.643 ms 53.777 ms 53.908 ms] + change: [-33.421% -33.173% -32.927%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [671.48 ms 681.62 ms 693.57 ms] + change: [+47.321% +49.245% +51.767%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [275.28 ms 276.18 ms 277.05 ms] + change: [-48.824% -48.098% -47.445%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [169.44 ms 169.69 ms 170.23 ms] + change: [-6.1072% -4.2443% -2.3612%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.1774 ms 9.1998 ms 9.2243 ms] + change: [-1.5904% -0.7853% -0.0256%] (p = 0.08 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [45.067 ms 45.187 ms 45.306 ms] + change: [-15.411% -15.070% -14.738%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [48.405 ms 48.543 ms 48.686 ms] + change: [-13.903% -13.478% -13.089%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2337 ms 1.2380 ms 1.2426 ms] + change: [-2.4007% -1.9580% -1.5195%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [49.289 ms 49.430 ms 49.577 ms] + change: [-14.069% -13.772% -13.452%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.8907 ms 2.9044 ms 2.9190 ms] + change: [+0.9595% +1.4817% +2.0927%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 10 outliers among 100 measurements (10.00%) + 1 (1.00%) low mild + 9 (9.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8257 ms 2.8350 ms 2.8446 ms] + thrpt: [351.54 elem/s 352.74 elem/s 353.90 elem/s] + change: + time: [-1.0461% -0.5955% -0.1237%] (p = 0.01 < 0.05) + thrpt: [+0.1239% +0.5990% +1.0571%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.5439 ms 4.5559 ms 4.5681 ms] + thrpt: [437.82 elem/s 438.99 elem/s 440.16 elem/s] + change: + time: [-2.1238% -1.7323% -1.3860%] (p = 0.00 < 0.05) + thrpt: [+1.4055% +1.7629% +2.1698%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [8.4605 ms 8.4861 ms 8.5114 ms] + thrpt: [469.96 elem/s 471.36 elem/s 472.78 elem/s] + change: + time: [-1.4254% -1.0278% -0.6855%] (p = 0.00 < 0.05) + thrpt: [+0.6902% +1.0385% +1.4460%] + Change within noise threshold. +verify_blob_kzg_proof_batch/8 + time: [20.258 ms 20.317 ms 20.380 ms] + thrpt: [392.54 elem/s 393.76 elem/s 394.90 elem/s] + change: + time: [+26.485% +26.971% +27.541%] (p = 0.00 < 0.05) + thrpt: [-21.594% -21.242% -20.939%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [36.221 ms 36.356 ms 36.504 ms] + thrpt: [438.30 elem/s 440.10 elem/s 441.73 elem/s] + change: + time: [+17.526% +18.040% +18.649%] (p = 0.00 < 0.05) + thrpt: [-15.718% -15.283% -14.913%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [63.338 ms 63.535 ms 63.736 ms] + thrpt: [502.07 elem/s 503.66 elem/s 505.23 elem/s] + change: + time: [+6.5121% +7.0191% +7.5014%] (p = 0.00 < 0.05) + thrpt: [-6.9779% -6.5587% -6.1140%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [118.85 ms 119.12 ms 119.39 ms] + thrpt: [536.06 elem/s 537.29 elem/s 538.50 elem/s] + change: + time: [+2.4695% +2.7985% +3.1065%] (p = 0.00 < 0.05) + thrpt: [-3.0129% -2.7223% -2.4099%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.7279 ms 9.7553 ms 9.7702 ms] + change: [-0.5116% +0.1905% +0.8881%] (p = 0.62 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [18.904 s 18.957 s 19.007 s] + change: [-0.1083% +0.2178% +0.5226%] (p = 0.23 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [20.327 s 20.357 s 20.387 s] + change: [-0.2403% -0.0224% +0.1788%] (p = 0.83 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_multi_da scale: '14' + time: [4.6818 s 4.6883 s 4.6953 s] + change: [-0.4275% -0.1622% +0.1046%] (p = 0.26 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [311.61 ms 312.82 ms 314.08 ms] + change: [-9.2101% -8.7821% -8.3673%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [322.56 ms 323.68 ms 324.99 ms] + change: [-8.2945% -7.7469% -7.1574%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [47.844 ms 47.982 ms 48.122 ms] + change: [-11.116% -10.776% -10.431%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_new_poly_div scale: '15' + time: [667.47 ms 670.21 ms 673.10 ms] + change: [-3.4337% -1.6746% -0.1338%] (p = 0.08 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [271.99 ms 272.96 ms 274.13 ms] + change: [-1.6463% -1.1685% -0.6460%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [168.66 ms 169.09 ms 169.67 ms] + change: [-1.4953% -0.8422% -0.2460%] (p = 0.02 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2000 ms 9.2347 ms 9.2819 ms] + change: [-0.0216% +0.7684% +1.5677%] (p = 0.08 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [37.725 ms 37.805 ms 37.884 ms] + change: [-16.624% -16.337% -16.053%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [39.117 ms 39.235 ms 39.358 ms] + change: [-19.507% -19.174% -18.844%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2354 ms 1.2400 ms 1.2449 ms] + change: [-0.3021% +0.1352% +0.5856%] (p = 0.56 > 0.05) + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [40.346 ms 40.492 ms 40.649 ms] + change: [-18.473% -18.081% -17.693%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 5 (5.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.8084 ms 2.8197 ms 2.8335 ms] + change: [-3.5441% -2.9173% -2.2545%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.8317 ms 2.8403 ms 2.8492 ms] + thrpt: [350.98 elem/s 352.07 elem/s 353.15 elem/s] + change: + time: [-0.2656% +0.1892% +0.6710%] (p = 0.42 > 0.05) + thrpt: [-0.6665% -0.1888% +0.2663%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.5711 ms 4.5837 ms 4.5963 ms] + thrpt: [435.13 elem/s 436.33 elem/s 437.53 elem/s] + change: + time: [+0.2198% +0.6097% +0.9818%] (p = 0.00 < 0.05) + thrpt: [-0.9722% -0.6060% -0.2193%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [8.4977 ms 8.5214 ms 8.5448 ms] + thrpt: [468.12 elem/s 469.41 elem/s 470.72 elem/s] + change: + time: [+0.0098% +0.4166% +0.8343%] (p = 0.05 < 0.05) + thrpt: [-0.8274% -0.4148% -0.0098%] + Change within noise threshold. +verify_blob_kzg_proof_batch/8 + time: [15.756 ms 15.804 ms 15.853 ms] + thrpt: [504.65 elem/s 506.21 elem/s 507.74 elem/s] + change: + time: [-22.553% -22.214% -21.848%] (p = 0.00 < 0.05) + thrpt: [+27.956% +28.557% +29.120%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [30.052 ms 30.130 ms 30.208 ms] + thrpt: [529.66 elem/s 531.03 elem/s 532.42 elem/s] + change: + time: [-17.522% -17.124% -16.742%] (p = 0.00 < 0.05) + thrpt: [+20.108% +20.663% +21.244%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [57.996 ms 58.158 ms 58.322 ms] + thrpt: [548.68 elem/s 550.22 elem/s 551.76 elem/s] + change: + time: [-8.8554% -8.4629% -8.0750%] (p = 0.00 < 0.05) + thrpt: [+8.7843% +9.2453% +9.7158%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [114.24 ms 114.54 ms 114.83 ms] + thrpt: [557.34 elem/s 558.77 elem/s 560.23 elem/s] + change: + time: [-4.1698% -3.8451% -3.5417%] (p = 0.00 < 0.05) + thrpt: [+3.6717% +3.9989% +4.3512%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.6943 ms 9.7179 ms 9.7462 ms] + change: [-0.5676% -0.2158% +0.1708%] (p = 0.29 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [18.806 s 18.844 s 18.886 s] + change: [-0.9359% -0.5959% -0.2465%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [20.252 s 20.297 s 20.346 s] + change: [-0.5999% -0.2905% -0.0013%] (p = 0.07 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6781 s 4.6866 s 4.6957 s] + change: [-0.2601% -0.0371% +0.1910%] (p = 0.78 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [266.64 ms 267.83 ms 269.66 ms] + change: [-14.939% -14.382% -13.645%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [272.30 ms 272.98 ms 273.63 ms] + change: [-16.048% -15.663% -15.293%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [54.277 ms 54.447 ms 54.619 ms] + change: [+13.004% +13.474% +13.975%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [38.236 ms 38.338 ms 38.438 ms] + change: [+24.894% +25.707% +26.388%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [668.89 ms 672.38 ms 676.22 ms] + change: [-0.3350% +0.3234% +1.0436%] (p = 0.40 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [275.38 ms 275.92 ms 276.48 ms] + change: [+0.5987% +1.0846% +1.4882%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [170.23 ms 170.77 ms 171.53 ms] + change: [+0.4006% +0.9933% +1.6800%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [5.2055 ms 5.2341 ms 5.2831 ms] + change: [-44.029% -43.529% -43.034%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [29.370 ms 29.444 ms 29.521 ms] + change: [-22.363% -22.116% -21.854%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [31.226 ms 31.327 ms 31.438 ms] + change: [-20.503% -20.156% -19.771%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 3 (3.00%) high severe + +verify_kzg_proof time: [1.2410 ms 1.2447 ms 1.2486 ms] + change: [+0.7806% +1.2586% +1.7680%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [31.945 ms 32.039 ms 32.137 ms] + change: [-21.256% -20.878% -20.483%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8255 ms 2.8348 ms 2.8444 ms] + change: [-0.0413% +0.5377% +1.1096%] (p = 0.07 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8576 ms 2.8652 ms 2.8729 ms] + thrpt: [348.08 elem/s 349.02 elem/s 349.94 elem/s] + change: + time: [+0.4665% +0.8743% +1.2813%] (p = 0.00 < 0.05) + thrpt: [-1.2651% -0.8667% -0.4643%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.1718 ms 3.1805 ms 3.1893 ms] + thrpt: [627.09 elem/s 628.84 elem/s 630.56 elem/s] + change: + time: [-30.865% -30.613% -30.362%] (p = 0.00 < 0.05) + thrpt: [+43.601% +44.120% +44.644%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.0004 ms 6.0220 ms 6.0449 ms] + thrpt: [661.72 elem/s 664.23 elem/s 666.63 elem/s] + change: + time: [-29.673% -29.331% -28.978%] (p = 0.00 < 0.05) + thrpt: [+40.801% +41.505% +42.192%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.693 ms 11.723 ms 11.754 ms] + thrpt: [680.60 elem/s 682.40 elem/s 684.19 elem/s] + change: + time: [-26.119% -25.819% -25.510%] (p = 0.00 < 0.05) + thrpt: [+34.246% +34.806% +35.353%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [23.079 ms 23.144 ms 23.211 ms] + thrpt: [689.33 elem/s 691.32 elem/s 693.26 elem/s] + change: + time: [-23.460% -23.186% -22.881%] (p = 0.00 < 0.05) + thrpt: [+29.669% +30.185% +30.650%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [37.403 ms 37.492 ms 37.581 ms] + thrpt: [851.50 elem/s 853.53 elem/s 855.55 elem/s] + change: + time: [-35.770% -35.535% -35.290%] (p = 0.00 < 0.05) + thrpt: [+54.537% +55.124% +55.691%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [68.054 ms 68.231 ms 68.410 ms] + thrpt: [935.54 elem/s 937.98 elem/s 940.43 elem/s] + change: + time: [-40.639% -40.428% -40.232%] (p = 0.00 < 0.05) + thrpt: [+67.313% +67.865% +68.460%] + Performance has improved. + +bench_fft_fr scale: '15' + time: [5.2849 ms 5.2972 ms 5.3080 ms] + change: [-45.686% -45.410% -45.148%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low severe + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [10.184 s 10.204 s 10.226 s] + change: [-46.016% -45.850% -45.699%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [11.647 s 11.659 s 11.671 s] + change: [-42.712% -42.561% -42.422%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [2.5513 s 2.5556 s 2.5599 s] + change: [-45.605% -45.470% -45.332%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [175.27 ms 175.61 ms 175.97 ms] + change: [-34.903% -34.448% -34.099%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [174.27 ms 174.57 ms 175.06 ms] + change: [-36.216% -35.989% -35.761%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_g1_lincomb points: '4096' + time: [29.923 ms 30.007 ms 30.101 ms] + change: [-45.123% -44.888% -44.646%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +bench_new_poly_div scale: '15' + time: [377.91 ms 378.61 ms 379.35 ms] + change: [-44.021% -43.690% -43.382%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [156.11 ms 156.40 ms 156.70 ms] + change: [-43.499% -43.333% -43.165%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_zero_poly scale: '15' + time: [98.115 ms 98.320 ms 98.556 ms] + change: [-42.775% -42.401% -42.057%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [5.2132 ms 5.2455 ms 5.2750 ms] + change: [-0.9182% -0.1136% +0.7578%] (p = 0.81 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [20.713 ms 20.759 ms 20.808 ms] + change: [-29.741% -29.495% -29.267%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [21.984 ms 22.041 ms 22.097 ms] + change: [-29.961% -29.644% -29.350%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.2361 ms 1.2399 ms 1.2437 ms] + change: [-1.3972% -1.0057% -0.6094%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [23.231 ms 23.296 ms 23.365 ms] + change: [-27.601% -27.287% -26.971%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8363 ms 2.8442 ms 2.8521 ms] + change: [-0.0915% +0.3300% +0.7702%] (p = 0.14 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8393 ms 2.8470 ms 2.8549 ms] + thrpt: [350.28 elem/s 351.24 elem/s 352.20 elem/s] + change: + time: [-1.0203% -0.6334% -0.2298%] (p = 0.00 < 0.05) + thrpt: [+0.2303% +0.6374% +1.0308%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.1716 ms 3.1815 ms 3.1921 ms] + thrpt: [626.55 elem/s 628.63 elem/s 630.60 elem/s] + change: + time: [-0.3907% +0.0336% +0.4461%] (p = 0.88 > 0.05) + thrpt: [-0.4441% -0.0335% +0.3923%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.0203 ms 6.0405 ms 6.0609 ms] + thrpt: [659.96 elem/s 662.20 elem/s 664.42 elem/s] + change: + time: [-0.2043% +0.3064% +0.8088%] (p = 0.24 > 0.05) + thrpt: [-0.8023% -0.3055% +0.2047%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.736 ms 11.763 ms 11.790 ms] + thrpt: [678.56 elem/s 680.09 elem/s 681.65 elem/s] + change: + time: [-0.0441% +0.3402% +0.6828%] (p = 0.06 > 0.05) + thrpt: [-0.6782% -0.3390% +0.0441%] + No change in performance detected. +verify_blob_kzg_proof_batch/16 + time: [23.005 ms 23.074 ms 23.146 ms] + thrpt: [691.27 elem/s 693.42 elem/s 695.50 elem/s] + change: + time: [-0.6865% -0.3028% +0.1441%] (p = 0.16 > 0.05) + thrpt: [-0.1439% +0.3037% +0.6912%] + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [36.947 ms 37.043 ms 37.142 ms] + thrpt: [861.56 elem/s 863.85 elem/s 866.10 elem/s] + change: + time: [-1.5145% -1.1957% -0.8515%] (p = 0.00 < 0.05) + thrpt: [+0.8588% +1.2101% +1.5378%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [67.977 ms 68.174 ms 68.372 ms] + thrpt: [936.06 elem/s 938.77 elem/s 941.50 elem/s] + change: + time: [-0.4629% -0.0841% +0.3033%] (p = 0.67 > 0.05) + thrpt: [-0.3024% +0.0842% +0.4651%] + No change in performance detected. + +bench_fft_fr scale: '15' + time: [5.3112 ms 5.3331 ms 5.3695 ms] + change: [-0.0014% +0.6531% +1.3305%] (p = 0.09 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [10.193 s 10.230 s 10.270 s] + change: [-0.1730% +0.2567% +0.6953%] (p = 0.29 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [11.646 s 11.659 s 11.672 s] + change: [-0.1569% -0.0002% +0.1621%] (p = 0.99 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [2.5625 s 2.5702 s 2.5785 s] + change: [+0.2454% +0.5703% +0.9337%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [138.65 ms 139.15 ms 139.98 ms] + change: [-21.093% -20.714% -20.328%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [139.11 ms 139.46 ms 139.72 ms] + change: [-20.418% -19.807% -18.916%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [29.705 ms 29.775 ms 29.846 ms] + change: [-1.1374% -0.7733% -0.4087%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_g1_lincomb with precomputation points: '4096' + time: [20.848 ms 20.935 ms 21.032 ms] + change: [-45.682% -45.394% -45.102%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +bench_new_poly_div scale: '15' + time: [378.03 ms 379.17 ms 380.46 ms] + change: [-0.1974% +0.1473% +0.5147%] (p = 0.47 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [154.63 ms 154.99 ms 155.26 ms] + change: [-1.1452% -0.8105% -0.4783%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_zero_poly scale: '15' + time: [98.306 ms 98.487 ms 98.686 ms] + change: [-0.2799% +0.0684% +0.4386%] (p = 0.72 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9344 ms 8.9683 ms 9.0362 ms] + change: [+69.846% +71.371% +72.855%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [49.591 ms 49.710 ms 49.844 ms] + change: [+138.67% +139.46% +140.28%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [51.842 ms 52.004 ms 52.170 ms] + change: [+135.01% +135.95% +136.91%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.2170 ms 1.2206 ms 1.2242 ms] + change: [-1.8191% -1.4247% -0.9909%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [54.610 ms 54.784 ms 54.960 ms] + change: [+134.14% +135.16% +136.09%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.5383 ms 2.5458 ms 2.5539 ms] + change: [-10.848% -10.490% -10.083%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5563 ms 2.5664 ms 2.5793 ms] + thrpt: [387.70 elem/s 389.65 elem/s 391.19 elem/s] + change: + time: [-10.303% -9.8561% -9.3279%] (p = 0.00 < 0.05) + thrpt: [+10.287% +10.934% +11.487%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.1747 ms 4.1867 ms 4.1986 ms] + thrpt: [476.35 elem/s 477.70 elem/s 479.08 elem/s] + change: + time: [+31.043% +31.594% +32.179%] (p = 0.00 < 0.05) + thrpt: [-24.345% -24.008% -23.689%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [7.4438 ms 7.4736 ms 7.5078 ms] + thrpt: [532.78 elem/s 535.21 elem/s 537.36 elem/s] + change: + time: [+23.090% +23.726% +24.467%] (p = 0.00 < 0.05) + thrpt: [-19.657% -19.177% -18.759%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.598 ms 13.643 ms 13.691 ms] + thrpt: [584.31 elem/s 586.39 elem/s 588.31 elem/s] + change: + time: [+15.461% +15.978% +16.443%] (p = 0.00 < 0.05) + thrpt: [-14.121% -13.777% -13.391%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [25.713 ms 25.774 ms 25.834 ms] + thrpt: [619.34 elem/s 620.78 elem/s 622.25 elem/s] + change: + time: [+11.267% +11.702% +12.117%] (p = 0.00 < 0.05) + thrpt: [-10.808% -10.476% -10.126%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [48.865 ms 49.006 ms 49.146 ms] + thrpt: [651.12 elem/s 652.98 elem/s 654.86 elem/s] + change: + time: [+31.739% +32.294% +32.783%] (p = 0.00 < 0.05) + thrpt: [-24.689% -24.411% -24.092%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [95.339 ms 95.557 ms 95.779 ms] + thrpt: [668.20 elem/s 669.76 elem/s 671.29 elem/s] + change: + time: [+39.654% +40.166% +40.679%] (p = 0.00 < 0.05) + thrpt: [-28.916% -28.656% -28.395%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.946 ms 34.033 ms 34.120 ms] + change: [-31.777% -31.537% -31.289%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [35.179 ms 35.275 ms 35.381 ms] + change: [-32.442% -32.168% -31.867%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +verify_kzg_proof time: [1.1164 ms 1.1203 ms 1.1242 ms] + change: [-9.0455% -8.6171% -8.2347%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [35.664 ms 35.746 ms 35.827 ms] + change: [-34.994% -34.751% -34.499%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.3347 ms 2.3420 ms 2.3498 ms] + change: [-8.4374% -8.0076% -7.6115%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.3485 ms 2.3547 ms 2.3612 ms] + thrpt: [423.51 elem/s 424.68 elem/s 425.80 elem/s] + change: + time: [-8.7538% -8.2483% -7.8073%] (p = 0.00 < 0.05) + thrpt: [+8.4684% +8.9898% +9.5936%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.8758 ms 3.8864 ms 3.8970 ms] + thrpt: [513.22 elem/s 514.62 elem/s 516.03 elem/s] + change: + time: [-7.5499% -7.1738% -6.8124%] (p = 0.00 < 0.05) + thrpt: [+7.3104% +7.7282% +8.1665%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.8620 ms 6.8834 ms 6.9045 ms] + thrpt: [579.33 elem/s 581.11 elem/s 582.92 elem/s] + change: + time: [-8.4096% -7.8982% -7.4500%] (p = 0.00 < 0.05) + thrpt: [+8.0497% +8.5755% +9.1817%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [13.163 ms 13.205 ms 13.247 ms] + thrpt: [603.91 elem/s 605.85 elem/s 607.78 elem/s] + change: + time: [-3.6484% -3.2110% -2.7265%] (p = 0.00 < 0.05) + thrpt: [+2.8029% +3.3175% +3.7865%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.456 ms 24.528 ms 24.600 ms] + thrpt: [650.42 elem/s 652.32 elem/s 654.24 elem/s] + change: + time: [-5.1808% -4.8351% -4.4554%] (p = 0.00 < 0.05) + thrpt: [+4.6631% +5.0808% +5.4638%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [47.215 ms 47.358 ms 47.505 ms] + thrpt: [673.61 elem/s 675.70 elem/s 677.75 elem/s] + change: + time: [-3.7677% -3.3624% -2.9531%] (p = 0.00 < 0.05) + thrpt: [+3.0429% +3.4794% +3.9152%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [92.882 ms 93.105 ms 93.323 ms] + thrpt: [685.79 elem/s 687.40 elem/s 689.05 elem/s] + change: + time: [-2.8809% -2.5659% -2.2530%] (p = 0.00 < 0.05) + thrpt: [+2.3049% +2.6335% +2.9664%] + Performance has improved. + +blob_to_kzg_commitment time: [33.949 ms 34.033 ms 34.119 ms] + change: [-0.3664% +0.0014% +0.3696%] (p = 0.99 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [34.874 ms 34.968 ms 35.061 ms] + change: [-1.2677% -0.8711% -0.4983%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_kzg_proof time: [1.1037 ms 1.1066 ms 1.1096 ms] + change: [-1.4483% -1.0707% -0.6821%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [35.586 ms 35.674 ms 35.762 ms] + change: [-0.5084% -0.1998% +0.1523%] (p = 0.25 > 0.05) + No change in performance detected. + +verify_blob_kzg_proof time: [2.2154 ms 2.2233 ms 2.2316 ms] + change: [-5.5326% -5.0671% -4.5743%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2754 ms 2.2823 ms 2.2894 ms] + thrpt: [436.79 elem/s 438.15 elem/s 439.48 elem/s] + change: + time: [-3.4626% -3.0754% -2.6836%] (p = 0.00 < 0.05) + thrpt: [+2.7577% +3.1729% +3.5868%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7235 ms 3.7405 ms 3.7596 ms] + thrpt: [531.97 elem/s 534.68 elem/s 537.14 elem/s] + change: + time: [-4.2652% -3.7521% -3.1866%] (p = 0.00 < 0.05) + thrpt: [+3.2915% +3.8984% +4.4552%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.4789 ms 6.4960 ms 6.5133 ms] + thrpt: [614.13 elem/s 615.76 elem/s 617.39 elem/s] + change: + time: [-6.0250% -5.6271% -5.2552%] (p = 0.00 < 0.05) + thrpt: [+5.5467% +5.9626% +6.4113%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [11.924 ms 11.953 ms 11.981 ms] + thrpt: [667.75 elem/s 669.28 elem/s 670.89 elem/s] + change: + time: [-9.8419% -9.4782% -9.1169%] (p = 0.00 < 0.05) + thrpt: [+10.031% +10.471% +10.916%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.899 ms 22.955 ms 23.010 ms] + thrpt: [695.34 elem/s 697.03 elem/s 698.72 elem/s] + change: + time: [-6.7667% -6.4139% -6.0509%] (p = 0.00 < 0.05) + thrpt: [+6.4406% +6.8534% +7.2578%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.169 ms 44.284 ms 44.409 ms] + thrpt: [720.58 elem/s 722.60 elem/s 724.48 elem/s] + change: + time: [-6.8754% -6.4905% -6.1130%] (p = 0.00 < 0.05) + thrpt: [+6.5110% +6.9410% +7.3830%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [86.916 ms 87.120 ms 87.330 ms] + thrpt: [732.86 elem/s 734.62 elem/s 736.34 elem/s] + change: + time: [-6.7308% -6.4280% -6.1275%] (p = 0.00 < 0.05) + thrpt: [+6.5275% +6.8696% +7.2165%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.2950 ms 9.3430 ms 9.3907 ms] + change: [+73.788% +74.957% +76.244%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [20.208 s 20.246 s 20.287 s] + change: [+97.015% +97.911% +98.742%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [21.548 s 21.596 s 21.645 s] + change: [+84.741% +85.237% +85.681%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [4.7099 s 4.7214 s 4.7338 s] + change: [+82.951% +83.702% +84.469%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [318.97 ms 319.67 ms 320.49 ms] + change: [+128.34% +129.65% +130.85%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [331.96 ms 333.47 ms 335.05 ms] + change: [+135.30% +137.98% +140.07%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [51.069 ms 51.279 ms 51.597 ms] + change: [+71.995% +72.927% +73.773%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [629.79 ms 633.22 ms 637.58 ms] + change: [+65.907% +66.999% +68.236%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +bench_recover scale: '15' + time: [278.70 ms 280.81 ms 283.26 ms] + change: [+79.775% +81.065% +82.595%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [162.66 ms 163.21 ms 163.75 ms] + change: [+65.078% +65.593% +66.127%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0538 ms 9.0656 ms 9.0883 ms] + change: [+0.1550% +0.9486% +1.6959%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [41.531 ms 41.673 ms 41.824 ms] + change: [+21.988% +22.449% +23.020%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +compute_kzg_proof time: [44.304 ms 44.458 ms 44.632 ms] + change: [+26.558% +27.138% +27.745%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high severe + +verify_kzg_proof time: [1.2141 ms 1.2189 ms 1.2241 ms] + change: [+9.9179% +10.378% +10.889%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [44.673 ms 44.922 ms 45.265 ms] + change: [+25.148% +25.924% +26.964%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof time: [2.5015 ms 2.5073 ms 2.5132 ms] + change: [+12.282% +12.772% +13.273%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5375 ms 2.5451 ms 2.5528 ms] + thrpt: [391.73 elem/s 392.91 elem/s 394.09 elem/s] + change: + time: [+11.021% +11.514% +11.950%] (p = 0.00 < 0.05) + thrpt: [-10.674% -10.325% -9.9269%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.1818 ms 4.1963 ms 4.2109 ms] + thrpt: [474.96 elem/s 476.61 elem/s 478.26 elem/s] + change: + time: [+11.523% +12.184% +12.822%] (p = 0.00 < 0.05) + thrpt: [-11.365% -10.861% -10.333%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.4344 ms 7.4554 ms 7.4765 ms] + thrpt: [535.01 elem/s 536.53 elem/s 538.04 elem/s] + change: + time: [+14.313% +14.768% +15.235%] (p = 0.00 < 0.05) + thrpt: [-13.221% -12.868% -12.521%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [18.287 ms 18.351 ms 18.417 ms] + thrpt: [434.38 elem/s 435.95 elem/s 437.47 elem/s] + change: + time: [+52.861% +53.525% +54.160%] (p = 0.00 < 0.05) + thrpt: [-35.132% -34.864% -34.581%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [31.360 ms 31.452 ms 31.546 ms] + thrpt: [507.20 elem/s 508.70 elem/s 510.21 elem/s] + change: + time: [+36.506% +37.021% +37.576%] (p = 0.00 < 0.05) + thrpt: [-27.313% -27.018% -26.743%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [54.581 ms 54.752 ms 54.927 ms] + thrpt: [582.60 elem/s 584.46 elem/s 586.28 elem/s] + change: + time: [+23.126% +23.637% +24.096%] (p = 0.00 < 0.05) + thrpt: [-19.417% -19.118% -18.783%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [100.39 ms 100.63 ms 100.87 ms] + thrpt: [634.46 elem/s 635.97 elem/s 637.49 elem/s] + change: + time: [+15.152% +15.511% +15.906%] (p = 0.00 < 0.05) + thrpt: [-13.723% -13.428% -13.158%] + Performance has regressed. + +blob_to_kzg_commitment time: [33.998 ms 34.092 ms 34.187 ms] + change: [-18.549% -18.192% -17.825%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_kzg_proof time: [35.203 ms 35.275 ms 35.347 ms] + change: [-21.002% -20.654% -20.331%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1179 ms 1.1221 ms 1.1263 ms] + change: [-8.5037% -8.0681% -7.6460%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [35.881 ms 35.992 ms 36.109 ms] + change: [-20.536% -19.878% -19.343%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.3371 ms 2.3441 ms 2.3514 ms] + change: [-6.8402% -6.5052% -6.1334%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3650 ms 2.3719 ms 2.3786 ms] + thrpt: [420.42 elem/s 421.60 elem/s 422.83 elem/s] + change: + time: [-7.2054% -6.8050% -6.4223%] (p = 0.00 < 0.05) + thrpt: [+6.8630% +7.3019% +7.7649%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [3.8949 ms 3.9068 ms 3.9191 ms] + thrpt: [510.33 elem/s 511.93 elem/s 513.50 elem/s] + change: + time: [-7.3656% -6.8983% -6.4805%] (p = 0.00 < 0.05) + thrpt: [+6.9295% +7.4094% +7.9513%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [7.0707 ms 7.0917 ms 7.1133 ms] + thrpt: [562.32 elem/s 564.04 elem/s 565.72 elem/s] + change: + time: [-5.2583% -4.8782% -4.5092%] (p = 0.00 < 0.05) + thrpt: [+4.7222% +5.1284% +5.5502%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.729 ms 12.769 ms 12.810 ms] + thrpt: [624.51 elem/s 626.52 elem/s 628.50 elem/s] + change: + time: [-30.774% -30.417% -30.093%] (p = 0.00 < 0.05) + thrpt: [+43.048% +43.714% +44.454%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [24.984 ms 25.066 ms 25.149 ms] + thrpt: [636.20 elem/s 638.32 elem/s 640.42 elem/s] + change: + time: [-20.664% -20.306% -19.953%] (p = 0.00 < 0.05) + thrpt: [+24.926% +25.480% +26.046%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.212 ms 47.319 ms 47.424 ms] + thrpt: [674.76 elem/s 676.25 elem/s 677.79 elem/s] + change: + time: [-13.909% -13.575% -13.232%] (p = 0.00 < 0.05) + thrpt: [+15.250% +15.707% +16.157%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [93.298 ms 93.519 ms 93.737 ms] + thrpt: [682.76 elem/s 684.35 elem/s 685.97 elem/s] + change: + time: [-7.3891% -7.0696% -6.7706%] (p = 0.00 < 0.05) + thrpt: [+7.2623% +7.6074% +7.9787%] + Performance has improved. + +blob_to_kzg_commitment time: [34.229 ms 34.371 ms 34.539 ms] + change: [+0.3514% +0.8179% +1.3870%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [35.456 ms 35.531 ms 35.603 ms] + change: [+0.4359% +0.7240% +0.9929%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.1247 ms 1.1284 ms 1.1320 ms] + change: [-0.4745% -0.0458% +0.3630%] (p = 0.84 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [36.028 ms 36.125 ms 36.220 ms] + change: [-0.0716% +0.3686% +0.7962%] (p = 0.09 > 0.05) + No change in performance detected. + +verify_blob_kzg_proof time: [2.2195 ms 2.2277 ms 2.2364 ms] + change: [-5.4295% -4.9667% -4.4479%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2948 ms 2.3049 ms 2.3153 ms] + thrpt: [431.92 elem/s 433.86 elem/s 435.76 elem/s] + change: + time: [-3.3035% -2.8260% -2.2940%] (p = 0.00 < 0.05) + thrpt: [+2.3479% +2.9082% +3.4163%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7096 ms 3.7215 ms 3.7336 ms] + thrpt: [535.67 elem/s 537.42 elem/s 539.14 elem/s] + change: + time: [-5.1702% -4.7435% -4.3336%] (p = 0.00 < 0.05) + thrpt: [+4.5299% +4.9798% +5.4521%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.5524 ms 6.5735 ms 6.5954 ms] + thrpt: [606.48 elem/s 608.50 elem/s 610.46 elem/s] + change: + time: [-7.6884% -7.3068% -6.8721%] (p = 0.00 < 0.05) + thrpt: [+7.3792% +7.8828% +8.3287%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [12.071 ms 12.104 ms 12.139 ms] + thrpt: [659.03 elem/s 660.93 elem/s 662.77 elem/s] + change: + time: [-5.6169% -5.2074% -4.7640%] (p = 0.00 < 0.05) + thrpt: [+5.0023% +5.4935% +5.9512%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [22.982 ms 23.059 ms 23.142 ms] + thrpt: [691.40 elem/s 693.87 elem/s 696.20 elem/s] + change: + time: [-8.4837% -8.0061% -7.5551%] (p = 0.00 < 0.05) + thrpt: [+8.1726% +8.7028% +9.2701%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.386 ms 44.494 ms 44.610 ms] + thrpt: [717.33 elem/s 719.19 elem/s 720.96 elem/s] + change: + time: [-6.2640% -5.9707% -5.6400%] (p = 0.00 < 0.05) + thrpt: [+5.9771% +6.3498% +6.6826%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [87.805 ms 88.011 ms 88.222 ms] + thrpt: [725.44 elem/s 727.18 elem/s 728.89 elem/s] + change: + time: [-6.1947% -5.8901% -5.5664%] (p = 0.00 < 0.05) + thrpt: [+5.8946% +6.2587% +6.6037%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [9.3466 ms 9.3947 ms 9.4426 ms] + change: [-0.2643% +0.4032% +1.0999%] (p = 0.28 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [20.181 s 20.198 s 20.216 s] + change: [-0.4526% -0.2389% -0.0299%] (p = 0.05 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [21.496 s 21.519 s 21.537 s] + change: [-0.6040% -0.3589% -0.1270%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low severe + 1 (10.00%) low mild + +bench_fk_multi_da scale: '14' + time: [4.6894 s 4.7029 s 4.7150 s] + change: [-0.8099% -0.3919% -0.0426%] (p = 0.07 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [287.46 ms 289.86 ms 292.66 ms] + change: [-10.128% -9.3265% -8.4185%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [307.95 ms 309.29 ms 310.65 ms] + change: [-7.8426% -7.2520% -6.6750%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [43.670 ms 43.780 ms 43.928 ms] + change: [-15.215% -14.544% -13.764%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [644.50 ms 646.85 ms 649.39 ms] + change: [+1.3912% +2.1539% +2.8255%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [281.23 ms 282.73 ms 284.65 ms] + change: [-0.3785% +0.6832% +1.6741%] (p = 0.23 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [165.45 ms 166.18 ms 167.34 ms] + change: [+1.2899% +1.9735% +2.6230%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.8666 ms 8.9015 ms 8.9334 ms] + change: [-2.1904% -1.7931% -1.4556%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [35.497 ms 35.603 ms 35.709 ms] + change: [+3.0050% +3.5855% +4.1251%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [36.764 ms 36.868 ms 36.972 ms] + change: [+3.3511% +3.7651% +4.1169%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2214 ms 1.2261 ms 1.2308 ms] + change: [+8.2926% +8.7611% +9.3082%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [37.299 ms 37.402 ms 37.506 ms] + change: [+3.1469% +3.5351% +3.9254%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5222 ms 2.5304 ms 2.5386 ms] + change: [+12.994% +13.587% +14.115%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [2.5263 ms 2.5331 ms 2.5399 ms] + thrpt: [393.71 elem/s 394.78 elem/s 395.83 elem/s] + change: + time: [+9.3156% +9.9015% +10.458%] (p = 0.00 < 0.05) + thrpt: [-9.4681% -9.0094% -8.5217%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [4.1383 ms 4.1545 ms 4.1714 ms] + thrpt: [479.45 elem/s 481.40 elem/s 483.29 elem/s] + change: + time: [+11.077% +11.636% +12.238%] (p = 0.00 < 0.05) + thrpt: [-10.904% -10.423% -9.9721%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.3783 ms 7.4095 ms 7.4448 ms] + thrpt: [537.29 elem/s 539.84 elem/s 542.13 elem/s] + change: + time: [+12.112% +12.718% +13.358%] (p = 0.00 < 0.05) + thrpt: [-11.784% -11.283% -10.803%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.377 ms 13.415 ms 13.454 ms] + thrpt: [594.62 elem/s 596.33 elem/s 598.05 elem/s] + change: + time: [+10.443% +10.833% +11.281%] (p = 0.00 < 0.05) + thrpt: [-10.138% -9.7745% -9.4558%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [25.455 ms 25.535 ms 25.617 ms] + thrpt: [624.59 elem/s 626.60 elem/s 628.56 elem/s] + change: + time: [+10.187% +10.736% +11.240%] (p = 0.00 < 0.05) + thrpt: [-10.104% -9.6955% -9.2451%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [48.876 ms 49.020 ms 49.170 ms] + thrpt: [650.81 elem/s 652.79 elem/s 654.72 elem/s] + change: + time: [+9.7264% +10.172% +10.616%] (p = 0.00 < 0.05) + thrpt: [-9.5968% -9.2330% -8.8642%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [95.291 ms 95.585 ms 95.887 ms] + thrpt: [667.45 elem/s 669.56 elem/s 671.63 elem/s] + change: + time: [+8.1927% +8.6060% +9.0613%] (p = 0.00 < 0.05) + thrpt: [-8.3084% -7.9241% -7.5723%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [33.839 ms 33.936 ms 34.037 ms] + change: [-5.0976% -4.6840% -4.2908%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [35.226 ms 35.331 ms 35.435 ms] + change: [-4.5734% -4.1697% -3.7549%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1170 ms 1.1200 ms 1.1231 ms] + change: [-8.6959% -8.2354% -7.7708%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild + +compute_blob_kzg_proof time: [35.527 ms 35.613 ms 35.702 ms] + change: [-5.1413% -4.7826% -4.4430%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.2904 ms 2.2970 ms 2.3036 ms] + change: [-9.6171% -9.2249% -8.8695%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3632 ms 2.3705 ms 2.3778 ms] + thrpt: [420.55 elem/s 421.86 elem/s 423.15 elem/s] + change: + time: [-6.8029% -6.4193% -5.9944%] (p = 0.00 < 0.05) + thrpt: [+6.3766% +6.8596% +7.2995%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.9013 ms 3.9114 ms 3.9215 ms] + thrpt: [510.00 elem/s 511.32 elem/s 512.65 elem/s] + change: + time: [-6.2988% -5.8512% -5.4221%] (p = 0.00 < 0.05) + thrpt: [+5.7330% +6.2149% +6.7222%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.8871 ms 6.9108 ms 6.9352 ms] + thrpt: [576.77 elem/s 578.80 elem/s 580.80 elem/s] + change: + time: [-7.3018% -6.7306% -6.2101%] (p = 0.00 < 0.05) + thrpt: [+6.6213% +7.2163% +7.8769%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.002 ms 13.038 ms 13.075 ms] + thrpt: [611.85 elem/s 613.58 elem/s 615.29 elem/s] + change: + time: [-3.1989% -2.8111% -2.4384%] (p = 0.00 < 0.05) + thrpt: [+2.4993% +2.8924% +3.3046%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [24.198 ms 24.262 ms 24.325 ms] + thrpt: [657.76 elem/s 659.47 elem/s 661.20 elem/s] + change: + time: [-5.3596% -4.9850% -4.5776%] (p = 0.00 < 0.05) + thrpt: [+4.7972% +5.2466% +5.6631%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [47.010 ms 47.135 ms 47.258 ms] + thrpt: [677.13 elem/s 678.90 elem/s 680.70 elem/s] + change: + time: [-4.2362% -3.8460% -3.4598%] (p = 0.00 < 0.05) + thrpt: [+3.5837% +3.9998% +4.4236%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [92.783 ms 93.045 ms 93.312 ms] + thrpt: [685.87 elem/s 687.84 elem/s 689.78 elem/s] + change: + time: [-3.0949% -2.6570% -2.2457%] (p = 0.00 < 0.05) + thrpt: [+2.2973% +2.7295% +3.1938%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [33.700 ms 33.796 ms 33.893 ms] + change: [-0.8458% -0.4125% -0.0416%] (p = 0.05 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [35.095 ms 35.188 ms 35.286 ms] + change: [-0.8231% -0.4060% +0.0188%] (p = 0.05 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1074 ms 1.1108 ms 1.1142 ms] + change: [-1.1684% -0.7697% -0.3624%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [35.482 ms 35.579 ms 35.674 ms] + change: [-0.4474% -0.0973% +0.2664%] (p = 0.60 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.1922 ms 2.1987 ms 2.2052 ms] + change: [-4.6679% -4.2764% -3.8855%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2830 ms 2.2928 ms 2.3030 ms] + thrpt: [434.21 elem/s 436.15 elem/s 438.02 elem/s] + change: + time: [-3.8006% -3.2777% -2.7571%] (p = 0.00 < 0.05) + thrpt: [+2.8353% +3.3888% +3.9507%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.6854 ms 3.6959 ms 3.7067 ms] + thrpt: [539.56 elem/s 541.14 elem/s 542.68 elem/s] + change: + time: [-5.8799% -5.5099% -5.1489%] (p = 0.00 < 0.05) + thrpt: [+5.4284% +5.8312% +6.2472%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.4769 ms 6.4987 ms 6.5219 ms] + thrpt: [613.32 elem/s 615.51 elem/s 617.58 elem/s] + change: + time: [-6.4304% -5.9637% -5.5331%] (p = 0.00 < 0.05) + thrpt: [+5.8572% +6.3419% +6.8724%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [11.933 ms 11.971 ms 12.010 ms] + thrpt: [666.10 elem/s 668.28 elem/s 670.44 elem/s] + change: + time: [-8.5715% -8.1858% -7.7717%] (p = 0.00 < 0.05) + thrpt: [+8.4266% +8.9156% +9.3751%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.724 ms 22.781 ms 22.839 ms] + thrpt: [700.55 elem/s 702.35 elem/s 704.11 elem/s] + change: + time: [-6.4465% -6.1050% -5.7224%] (p = 0.00 < 0.05) + thrpt: [+6.0697% +6.5019% +6.8907%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.185 ms 44.299 ms 44.417 ms] + thrpt: [720.45 elem/s 722.37 elem/s 724.23 elem/s] + change: + time: [-6.3557% -6.0168% -5.6906%] (p = 0.00 < 0.05) + thrpt: [+6.0340% +6.4020% +6.7870%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [86.514 ms 86.811 ms 87.137 ms] + thrpt: [734.48 elem/s 737.23 elem/s 739.77 elem/s] + change: + time: [-7.1264% -6.7001% -6.2592%] (p = 0.00 < 0.05) + thrpt: [+6.6772% +7.1812% +7.6732%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.2817 ms 9.3196 ms 9.3846 ms] + change: [-1.2319% -0.5257% +0.2400%] (p = 0.21 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [20.034 s 20.058 s 20.088 s] + change: [-0.8343% -0.6906% -0.5299%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [21.472 s 21.495 s 21.521 s] + change: [-0.2489% -0.1102% +0.0430%] (p = 0.19 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [4.6989 s 4.7076 s 4.7162 s] + change: [-0.2220% +0.0982% +0.4337%] (p = 0.60 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [254.48 ms 255.87 ms 258.00 ms] + change: [-12.767% -11.727% -10.778%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [259.47 ms 261.00 ms 262.75 ms] + change: [-16.191% -15.612% -14.963%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [50.914 ms 51.094 ms 51.446 ms] + change: [+15.369% +16.401% +17.524%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [36.149 ms 36.397 ms 36.710 ms] + change: [+72.172% +73.551% +75.067%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [634.85 ms 636.23 ms 637.77 ms] + change: [-2.0901% -1.6417% -1.2238%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [281.15 ms 282.55 ms 284.07 ms] + change: [-0.8862% -0.0638% +0.6641%] (p = 0.88 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [163.09 ms 164.39 ms 165.46 ms] + change: [-2.3261% -1.4988% -0.5549%] (p = 0.01 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.8183 ms 8.8846 ms 8.9448 ms] + change: [-1.3761% -0.8023% -0.1843%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + +blob_to_kzg_commitment time: [34.819 ms 34.937 ms 35.057 ms] + change: [+2.9357% +3.3772% +3.8532%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [36.153 ms 36.268 ms 36.384 ms] + change: [+2.6265% +3.0697% +3.4905%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2067 ms 1.2107 ms 1.2148 ms] + change: [+8.7649% +9.1529% +9.5551%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [36.878 ms 36.985 ms 37.091 ms] + change: [+3.5222% +3.9518% +4.3525%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5196 ms 2.5324 ms 2.5517 ms] + change: [+14.504% +15.173% +16.195%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5417 ms 2.5507 ms 2.5604 ms] + thrpt: [390.56 elem/s 392.05 elem/s 393.43 elem/s] + change: + time: [+10.659% +11.249% +11.863%] (p = 0.00 < 0.05) + thrpt: [-10.605% -10.112% -9.6321%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.0377 ms 4.0502 ms 4.0628 ms] + thrpt: [492.27 elem/s 493.81 elem/s 495.33 elem/s] + change: + time: [+9.1069% +9.5850% +10.005%] (p = 0.00 < 0.05) + thrpt: [-9.0952% -8.7466% -8.3468%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.1859 ms 7.2198 ms 7.2593 ms] + thrpt: [551.02 elem/s 554.03 elem/s 556.64 elem/s] + change: + time: [+10.443% +11.097% +11.812%] (p = 0.00 < 0.05) + thrpt: [-10.564% -9.9882% -9.4555%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.293 ms 13.336 ms 13.378 ms] + thrpt: [597.98 elem/s 599.87 elem/s 601.80 elem/s] + change: + time: [+10.908% +11.404% +11.896%] (p = 0.00 < 0.05) + thrpt: [-10.631% -10.237% -9.8353%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [24.799 ms 24.876 ms 24.956 ms] + thrpt: [641.12 elem/s 643.20 elem/s 645.19 elem/s] + change: + time: [+8.7693% +9.1960% +9.6082%] (p = 0.00 < 0.05) + thrpt: [-8.7659% -8.4216% -8.0623%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [48.492 ms 48.644 ms 48.798 ms] + thrpt: [655.77 elem/s 657.84 elem/s 659.91 elem/s] + change: + time: [+9.3517% +9.8090% +10.255%] (p = 0.00 < 0.05) + thrpt: [-9.3012% -8.9328% -8.5520%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [94.631 ms 94.906 ms 95.177 ms] + thrpt: [672.43 elem/s 674.35 elem/s 676.31 elem/s] + change: + time: [+8.8055% +9.3244% +9.8196%] (p = 0.00 < 0.05) + thrpt: [-8.9415% -8.5291% -8.0928%] + Performance has regressed. + +blob_to_kzg_commitment time: [34.178 ms 34.271 ms 34.368 ms] + change: [-2.3439% -1.9058% -1.4892%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [35.197 ms 35.290 ms 35.378 ms] + change: [-3.0919% -2.6971% -2.3064%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1305 ms 1.1339 ms 1.1372 ms] + change: [-7.5020% -7.1022% -6.7182%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [35.685 ms 35.786 ms 35.888 ms] + change: [-3.6264% -3.2413% -2.8523%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3130 ms 2.3199 ms 2.3267 ms] + change: [-9.1198% -8.3914% -7.8143%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3506 ms 2.3579 ms 2.3651 ms] + thrpt: [422.82 elem/s 424.11 elem/s 425.42 elem/s] + change: + time: [-8.0177% -7.5599% -7.1350%] (p = 0.00 < 0.05) + thrpt: [+7.6832% +8.1782% +8.7166%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.8532 ms 3.8634 ms 3.8735 ms] + thrpt: [516.32 elem/s 517.68 elem/s 519.05 elem/s] + change: + time: [-4.9942% -4.6115% -4.2290%] (p = 0.00 < 0.05) + thrpt: [+4.4158% +4.8345% +5.2568%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.8509 ms 6.8676 ms 6.8845 ms] + thrpt: [581.02 elem/s 582.45 elem/s 583.87 elem/s] + change: + time: [-5.4303% -4.8792% -4.3524%] (p = 0.00 < 0.05) + thrpt: [+4.5505% +5.1295% +5.7421%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.051 ms 13.096 ms 13.143 ms] + thrpt: [608.68 elem/s 610.88 elem/s 612.96 elem/s] + change: + time: [-2.2533% -1.8017% -1.3326%] (p = 0.00 < 0.05) + thrpt: [+1.3506% +1.8347% +2.3053%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.852 ms 24.910 ms 24.969 ms] + thrpt: [640.81 elem/s 642.31 elem/s 643.81 elem/s] + change: + time: [-0.2585% +0.1386% +0.5243%] (p = 0.50 > 0.05) + thrpt: [-0.5216% -0.1384% +0.2591%] + No change in performance detected. +verify_blob_kzg_proof_batch/32 + time: [47.235 ms 47.380 ms 47.538 ms] + thrpt: [673.15 elem/s 675.40 elem/s 677.47 elem/s] + change: + time: [-3.0246% -2.5996% -2.1746%] (p = 0.00 < 0.05) + thrpt: [+2.2230% +2.6689% +3.1189%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [92.381 ms 92.553 ms 92.726 ms] + thrpt: [690.20 elem/s 691.50 elem/s 692.79 elem/s] + change: + time: [-2.8183% -2.4794% -2.1403%] (p = 0.00 < 0.05) + thrpt: [+2.1872% +2.5425% +2.9000%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.884 ms 33.964 ms 34.044 ms] + change: [-1.2792% -0.8965% -0.5578%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_kzg_proof time: [34.909 ms 35.002 ms 35.096 ms] + change: [-1.1560% -0.8151% -0.4574%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1093 ms 1.1123 ms 1.1155 ms] + change: [-1.8012% -1.3945% -0.9400%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low severe + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [35.400 ms 35.486 ms 35.572 ms] + change: [-1.2068% -0.8370% -0.4756%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof time: [2.2119 ms 2.2185 ms 2.2252 ms] + change: [-4.7868% -4.3698% -3.9629%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2728 ms 2.2798 ms 2.2869 ms] + thrpt: [437.28 elem/s 438.64 elem/s 439.98 elem/s] + change: + time: [-3.7274% -3.3122% -2.8888%] (p = 0.00 < 0.05) + thrpt: [+2.9748% +3.4257% +3.8717%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7071 ms 3.7182 ms 3.7293 ms] + thrpt: [536.29 elem/s 537.89 elem/s 539.50 elem/s] + change: + time: [-4.1476% -3.7570% -3.3902%] (p = 0.00 < 0.05) + thrpt: [+3.5092% +3.9037% +4.3271%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.4931 ms 6.5097 ms 6.5270 ms] + thrpt: [612.84 elem/s 614.47 elem/s 616.04 elem/s] + change: + time: [-5.5385% -5.2108% -4.8810%] (p = 0.00 < 0.05) + thrpt: [+5.1315% +5.4972% +5.8632%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.989 ms 12.026 ms 12.064 ms] + thrpt: [663.14 elem/s 665.21 elem/s 667.28 elem/s] + change: + time: [-8.6031% -8.1677% -7.7240%] (p = 0.00 < 0.05) + thrpt: [+8.3705% +8.8941% +9.4129%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.775 ms 22.844 ms 22.923 ms] + thrpt: [697.99 elem/s 700.42 elem/s 702.53 elem/s] + change: + time: [-8.6653% -8.2955% -7.9101%] (p = 0.00 < 0.05) + thrpt: [+8.5896% +9.0459% +9.4874%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.107 ms 44.214 ms 44.334 ms] + thrpt: [721.79 elem/s 723.75 elem/s 725.51 elem/s] + change: + time: [-7.0738% -6.6806% -6.3175%] (p = 0.00 < 0.05) + thrpt: [+6.7436% +7.1588% +7.6122%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [86.743 ms 86.955 ms 87.172 ms] + thrpt: [734.18 elem/s 736.01 elem/s 737.81 elem/s] + change: + time: [-6.3189% -6.0483% -5.7478%] (p = 0.00 < 0.05) + thrpt: [+6.0983% +6.4377% +6.7451%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.1779 ms 9.2255 ms 9.2821 ms] + change: [-2.2186% -1.4346% -0.6778%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [20.165 s 20.202 s 20.252 s] + change: [+0.4696% +0.7164% +1.0316%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [21.570 s 21.580 s 21.591 s] + change: [+0.2645% +0.3959% +0.5160%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.7101 s 4.7199 s 4.7301 s] + change: [-0.0056% +0.2621% +0.5583%] (p = 0.10 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [224.00 ms 224.92 ms 225.96 ms] + change: [-12.931% -12.094% -11.416%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [226.32 ms 227.03 ms 228.10 ms] + change: [-13.673% -13.014% -12.329%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [35.663 ms 35.803 ms 36.009 ms] + change: [-30.560% -29.963% -29.424%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [634.55 ms 637.42 ms 640.22 ms] + change: [-0.2973% +0.1859% +0.6926%] (p = 0.49 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [281.41 ms 282.61 ms 284.29 ms] + change: [-0.7019% +0.0217% +0.7524%] (p = 0.96 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [163.67 ms 163.80 ms 164.12 ms] + change: [-0.5218% +0.2382% +0.9261%] (p = 0.55 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [5.0695 ms 5.0896 ms 5.1070 ms] + change: [-42.968% -42.518% -42.125%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [27.548 ms 27.613 ms 27.681 ms] + change: [-18.964% -18.699% -18.421%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [29.082 ms 29.165 ms 29.256 ms] + change: [-17.018% -16.678% -16.365%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2183 ms 1.2229 ms 1.2276 ms] + change: [+9.8762% +10.413% +10.923%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [29.948 ms 30.032 ms 30.119 ms] + change: [-15.685% -15.370% -15.059%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.5191 ms 2.5249 ms 2.5306 ms] + change: [+13.387% +13.812% +14.212%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5540 ms 2.5647 ms 2.5773 ms] + thrpt: [388.00 elem/s 389.91 elem/s 391.54 elem/s] + change: + time: [+11.901% +12.497% +13.215%] (p = 0.00 < 0.05) + thrpt: [-11.673% -11.108% -10.635%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.8972 ms 2.9059 ms 2.9151 ms] + thrpt: [686.09 elem/s 688.26 elem/s 690.31 elem/s] + change: + time: [-22.188% -21.848% -21.527%] (p = 0.00 < 0.05) + thrpt: [+27.433% +27.956% +28.514%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [5.4086 ms 5.4231 ms 5.4380 ms] + thrpt: [735.56 elem/s 737.58 elem/s 739.56 elem/s] + change: + time: [-16.988% -16.692% -16.344%] (p = 0.00 < 0.05) + thrpt: [+19.537% +20.036% +20.465%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [10.494 ms 10.522 ms 10.550 ms] + thrpt: [758.28 elem/s 760.34 elem/s 762.35 elem/s] + change: + time: [-12.863% -12.511% -12.128%] (p = 0.00 < 0.05) + thrpt: [+13.802% +14.300% +14.762%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [20.587 ms 20.632 ms 20.679 ms] + thrpt: [773.71 elem/s 775.48 elem/s 777.19 elem/s] + change: + time: [-10.066% -9.6802% -9.3398%] (p = 0.00 < 0.05) + thrpt: [+10.302% +10.718% +11.193%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [33.641 ms 33.726 ms 33.815 ms] + thrpt: [946.32 elem/s 948.82 elem/s 951.22 elem/s] + change: + time: [-23.995% -23.721% -23.444%] (p = 0.00 < 0.05) + thrpt: [+30.624% +31.098% +31.570%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [59.702 ms 59.828 ms 59.954 ms] + thrpt: [1.0675 Kelem/s 1.0697 Kelem/s 1.0720 Kelem/s] + change: + time: [-31.413% -31.197% -30.975%] (p = 0.00 < 0.05) + thrpt: [+44.875% +45.342% +45.801%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [21.011 ms 21.215 ms 21.454 ms] + change: [-23.960% -23.171% -22.188%] (p = 0.00 < 0.05) + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 6 (6.00%) high severe + +compute_kzg_proof time: [22.340 ms 22.474 ms 22.629 ms] + change: [-23.398% -22.939% -22.325%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe + +verify_kzg_proof time: [1.1184 ms 1.1213 ms 1.1241 ms] + change: [-8.6360% -8.2003% -7.7524%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [22.735 ms 22.803 ms 22.873 ms] + change: [-24.380% -24.070% -23.724%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.2974 ms 2.3035 ms 2.3100 ms] + change: [-9.0893% -8.7689% -8.4353%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.2794 ms 2.2970 ms 2.3150 ms] + thrpt: [431.96 elem/s 435.35 elem/s 438.71 elem/s] + change: + time: [-11.258% -10.437% -9.6204%] (p = 0.00 < 0.05) + thrpt: [+10.644% +11.653% +12.687%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.9900 ms 3.0070 ms 3.0239 ms] + thrpt: [661.39 elem/s 665.11 elem/s 668.89 elem/s] + change: + time: [+2.8326% +3.4816% +4.0970%] (p = 0.00 < 0.05) + thrpt: [-3.9357% -3.3644% -2.7546%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [4.6955 ms 4.7210 ms 4.7465 ms] + thrpt: [842.73 elem/s 847.28 elem/s 851.88 elem/s] + change: + time: [-13.478% -12.947% -12.403%] (p = 0.00 < 0.05) + thrpt: [+14.159% +14.872% +15.578%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [8.6206 ms 8.6585 ms 8.6991 ms] + thrpt: [919.63 elem/s 923.95 elem/s 928.00 elem/s] + change: + time: [-18.123% -17.708% -17.214%] (p = 0.00 < 0.05) + thrpt: [+20.793% +21.518% +22.134%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [14.679 ms 14.755 ms 14.837 ms] + thrpt: [1.0784 Kelem/s 1.0844 Kelem/s 1.0900 Kelem/s] + change: + time: [-28.922% -28.486% -28.045%] (p = 0.00 < 0.05) + thrpt: [+38.975% +39.833% +40.691%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [29.259 ms 29.646 ms 30.125 ms] + thrpt: [1.0622 Kelem/s 1.0794 Kelem/s 1.0937 Kelem/s] + change: + time: [-13.405% -12.098% -10.784%] (p = 0.00 < 0.05) + thrpt: [+12.087% +13.763% +15.481%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [54.616 ms 55.311 ms 56.101 ms] + thrpt: [1.1408 Kelem/s 1.1571 Kelem/s 1.1718 Kelem/s] + change: + time: [-8.6366% -7.5493% -6.1558%] (p = 0.00 < 0.05) + thrpt: [+6.5596% +8.1658% +9.4530%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) high mild + 4 (4.00%) high severe + +blob_to_kzg_commitment time: [20.799 ms 20.948 ms 21.126 ms] + change: [-2.5336% -1.2581% -0.0034%] (p = 0.06 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +compute_kzg_proof time: [21.810 ms 21.879 ms 21.947 ms] + change: [-3.3349% -2.6496% -1.9922%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1150 ms 1.1199 ms 1.1252 ms] + change: [-1.2314% -0.7907% -0.3236%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [22.377 ms 22.457 ms 22.538 ms] + change: [-1.9889% -1.5197% -0.9933%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.1473 ms 2.1552 ms 2.1634 ms] + change: [-6.8935% -6.4401% -6.0308%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.2431 ms 2.2536 ms 2.2637 ms] + thrpt: [441.75 elem/s 443.74 elem/s 445.80 elem/s] + change: + time: [-2.8209% -1.8900% -1.0581%] (p = 0.00 < 0.05) + thrpt: [+1.0695% +1.9265% +2.9028%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [2.8060 ms 2.8303 ms 2.8635 ms] + thrpt: [698.44 elem/s 706.64 elem/s 712.75 elem/s] + change: + time: [-6.8435% -5.8773% -4.7014%] (p = 0.00 < 0.05) + thrpt: [+4.9334% +6.2443% +7.3462%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.2844 ms 4.3055 ms 4.3268 ms] + thrpt: [924.48 elem/s 929.04 elem/s 933.63 elem/s] + change: + time: [-9.4171% -8.8012% -8.1641%] (p = 0.00 < 0.05) + thrpt: [+8.8899% +9.6505% +10.396%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [7.2058 ms 7.2401 ms 7.2749 ms] + thrpt: [1.0997 Kelem/s 1.1050 Kelem/s 1.1102 Kelem/s] + change: + time: [-16.965% -16.381% -15.847%] (p = 0.00 < 0.05) + thrpt: [+18.831% +19.590% +20.432%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [13.070 ms 13.183 ms 13.329 ms] + thrpt: [1.2004 Kelem/s 1.2137 Kelem/s 1.2242 Kelem/s] + change: + time: [-11.472% -10.652% -9.5479%] (p = 0.00 < 0.05) + thrpt: [+10.556% +11.922% +12.959%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [24.795 ms 25.153 ms 25.598 ms] + thrpt: [1.2501 Kelem/s 1.2722 Kelem/s 1.2906 Kelem/s] + change: + time: [-16.955% -15.156% -13.171%] (p = 0.00 < 0.05) + thrpt: [+15.169% +17.863% +20.416%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [49.554 ms 50.649 ms 51.882 ms] + thrpt: [1.2336 Kelem/s 1.2636 Kelem/s 1.2915 Kelem/s] + change: + time: [-10.674% -8.4299% -5.9161%] (p = 0.00 < 0.05) + thrpt: [+6.2881% +9.2059% +11.950%] + Performance has improved. +Found 15 outliers among 100 measurements (15.00%) + 3 (3.00%) high mild + 12 (12.00%) high severe + +bench_fft_fr scale: '15' + time: [5.0729 ms 5.0991 ms 5.1178 ms] + change: [-45.131% -44.787% -44.438%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low severe + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [10.803 s 10.815 s 10.829 s] + change: [-46.614% -46.467% -46.344%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [12.116 s 12.128 s 12.142 s] + change: [-43.863% -43.798% -43.720%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [2.5395 s 2.5561 s 2.5857 s] + change: [-46.243% -45.845% -45.159%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_commit_to_poly scale: '15' + time: [164.85 ms 165.11 ms 165.46 ms] + change: [-26.865% -26.469% -26.101%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [163.31 ms 163.51 ms 163.80 ms] + change: [-28.234% -27.848% -27.547%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [28.213 ms 28.322 ms 28.485 ms] + change: [-21.329% -20.796% -20.231%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [356.73 ms 357.60 ms 358.43 ms] + change: [-44.177% -43.899% -43.612%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [160.41 ms 160.80 ms 161.52 ms] + change: [-43.354% -42.821% -42.218%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [96.378 ms 96.677 ms 97.128 ms] + change: [-41.367% -41.027% -40.659%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [5.0371 ms 5.0825 ms 5.1269 ms] + change: [-0.9650% -0.2567% +0.5450%] (p = 0.52 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +blob_to_kzg_commitment time: [19.411 ms 19.460 ms 19.510 ms] + change: [-7.9179% -7.1010% -6.3941%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [20.428 ms 20.490 ms 20.554 ms] + change: [-6.7660% -6.3463% -5.9208%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2153 ms 1.2189 ms 1.2223 ms] + change: [+8.4439% +8.8893% +9.3443%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [21.234 ms 21.297 ms 21.362 ms] + change: [-5.6158% -5.1663% -4.7320%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.5277 ms 2.5349 ms 2.5421 ms] + change: [+17.085% +17.621% +18.190%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5463 ms 2.5539 ms 2.5615 ms] + thrpt: [390.39 elem/s 391.56 elem/s 392.73 elem/s] + change: + time: [+12.727% +13.326% +13.965%] (p = 0.00 < 0.05) + thrpt: [-12.254% -11.759% -11.290%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [2.8982 ms 2.9462 ms 3.0065 ms] + thrpt: [665.22 elem/s 678.84 elem/s 690.09 elem/s] + change: + time: [+2.0606% +4.0953% +6.4216%] (p = 0.00 < 0.05) + thrpt: [-6.0341% -3.9342% -2.0190%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [5.4021 ms 5.4204 ms 5.4393 ms] + thrpt: [735.39 elem/s 737.95 elem/s 740.46 elem/s] + change: + time: [+25.149% +25.895% +26.639%] (p = 0.00 < 0.05) + thrpt: [-21.036% -20.569% -20.095%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [10.439 ms 10.469 ms 10.502 ms] + thrpt: [761.74 elem/s 764.14 elem/s 766.33 elem/s] + change: + time: [+43.790% +44.600% +45.411%] (p = 0.00 < 0.05) + thrpt: [-31.229% -30.844% -30.454%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [20.665 ms 20.734 ms 20.807 ms] + thrpt: [768.98 elem/s 771.67 elem/s 774.26 elem/s] + change: + time: [+55.478% +57.277% +58.749%] (p = 0.00 < 0.05) + thrpt: [-37.007% -36.418% -35.682%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [33.784 ms 33.859 ms 33.932 ms] + thrpt: [943.05 elem/s 945.09 elem/s 947.18 elem/s] + change: + time: [+32.290% +34.613% +36.593%] (p = 0.00 < 0.05) + thrpt: [-26.790% -25.713% -24.409%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [60.150 ms 60.386 ms 60.671 ms] + thrpt: [1.0549 Kelem/s 1.0599 Kelem/s 1.0640 Kelem/s] + change: + time: [+16.335% +19.225% +21.882%] (p = 0.00 < 0.05) + thrpt: [-17.953% -16.125% -14.042%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +blob_to_kzg_commitment time: [20.959 ms 21.090 ms 21.270 ms] + change: [+7.5922% +8.3750% +9.2442%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +compute_kzg_proof time: [22.615 ms 22.720 ms 22.836 ms] + change: [+10.289% +10.881% +11.598%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1200 ms 1.1235 ms 1.1271 ms] + change: [-8.1632% -7.8063% -7.4465%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [22.499 ms 22.570 ms 22.642 ms] + change: [+5.5367% +5.9795% +6.4128%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.2817 ms 2.2877 ms 2.2938 ms] + change: [-10.103% -9.7515% -9.4115%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2393 ms 2.2569 ms 2.2759 ms] + thrpt: [439.38 elem/s 443.08 elem/s 446.57 elem/s] + change: + time: [-12.350% -11.629% -10.803%] (p = 0.00 < 0.05) + thrpt: [+12.111% +13.160% +14.090%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.0241 ms 3.0403 ms 3.0566 ms] + thrpt: [654.32 elem/s 657.84 elem/s 661.36 elem/s] + change: + time: [+1.1128% +3.1921% +5.0285%] (p = 0.00 < 0.05) + thrpt: [-4.7878% -3.0934% -1.1006%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [4.8787 ms 4.9045 ms 4.9307 ms] + thrpt: [811.25 elem/s 815.59 elem/s 819.89 elem/s] + change: + time: [-10.121% -9.5192% -9.0152%] (p = 0.00 < 0.05) + thrpt: [+9.9085% +10.521% +11.261%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [8.0705 ms 8.1103 ms 8.1578 ms] + thrpt: [980.66 elem/s 986.39 elem/s 991.27 elem/s] + change: + time: [-22.970% -22.532% -22.018%] (p = 0.00 < 0.05) + thrpt: [+28.235% +29.085% +29.819%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [15.145 ms 15.306 ms 15.496 ms] + thrpt: [1.0325 Kelem/s 1.0454 Kelem/s 1.0564 Kelem/s] + change: + time: [-26.993% -26.182% -25.181%] (p = 0.00 < 0.05) + thrpt: [+33.655% +35.468% +36.973%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [28.185 ms 28.525 ms 28.959 ms] + thrpt: [1.1050 Kelem/s 1.1218 Kelem/s 1.1353 Kelem/s] + change: + time: [-16.787% -15.754% -14.501%] (p = 0.00 < 0.05) + thrpt: [+16.961% +18.700% +20.174%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [53.706 ms 54.408 ms 55.342 ms] + thrpt: [1.1565 Kelem/s 1.1763 Kelem/s 1.1917 Kelem/s] + change: + time: [-11.221% -9.8990% -8.3601%] (p = 0.00 < 0.05) + thrpt: [+9.1227% +10.987% +12.639%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high severe + +blob_to_kzg_commitment time: [20.908 ms 20.979 ms 21.054 ms] + change: [-1.4691% -0.5244% +0.1891%] (p = 0.23 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [22.262 ms 22.368 ms 22.485 ms] + change: [-2.2468% -1.5511% -0.7460%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [1.1088 ms 1.1124 ms 1.1164 ms] + change: [-1.2180% -0.8411% -0.3985%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [22.576 ms 22.670 ms 22.770 ms] + change: [-0.1440% +0.4446% +0.9776%] (p = 0.11 > 0.05) + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 5 (5.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.1460 ms 2.1518 ms 2.1578 ms] + change: [-6.2870% -5.9402% -5.5880%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2173 ms 2.2271 ms 2.2370 ms] + thrpt: [447.02 elem/s 449.01 elem/s 451.00 elem/s] + change: + time: [-2.2699% -1.3196% -0.4750%] (p = 0.01 < 0.05) + thrpt: [+0.4773% +1.3373% +2.3226%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.8174 ms 2.8340 ms 2.8510 ms] + thrpt: [701.51 elem/s 705.71 elem/s 709.87 elem/s] + change: + time: [-7.5088% -6.7828% -6.1014%] (p = 0.00 < 0.05) + thrpt: [+6.4979% +7.2764% +8.1184%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [4.2778 ms 4.3019 ms 4.3263 ms] + thrpt: [924.58 elem/s 929.83 elem/s 935.06 elem/s] + change: + time: [-12.948% -12.286% -11.620%] (p = 0.00 < 0.05) + thrpt: [+13.147% +14.007% +14.874%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [7.0856 ms 7.1206 ms 7.1565 ms] + thrpt: [1.1179 Kelem/s 1.1235 Kelem/s 1.1291 Kelem/s] + change: + time: [-12.897% -12.204% -11.574%] (p = 0.00 < 0.05) + thrpt: [+13.089% +13.900% +14.806%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [13.119 ms 13.195 ms 13.296 ms] + thrpt: [1.2034 Kelem/s 1.2125 Kelem/s 1.2196 Kelem/s] + change: + time: [-14.999% -13.787% -12.634%] (p = 0.00 < 0.05) + thrpt: [+14.462% +15.992% +17.646%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [24.932 ms 25.306 ms 25.761 ms] + thrpt: [1.2422 Kelem/s 1.2645 Kelem/s 1.2835 Kelem/s] + change: + time: [-13.228% -11.285% -9.3562%] (p = 0.00 < 0.05) + thrpt: [+10.322% +12.720% +15.244%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [51.331 ms 52.574 ms 53.953 ms] + thrpt: [1.1862 Kelem/s 1.2173 Kelem/s 1.2468 Kelem/s] + change: + time: [-6.2228% -3.3713% -0.7197%] (p = 0.02 < 0.05) + thrpt: [+0.7249% +3.4889% +6.6357%] + Change within noise threshold. +Found 17 outliers among 100 measurements (17.00%) + 1 (1.00%) high mild + 16 (16.00%) high severe + +bench_fft_fr scale: '15' + time: [5.1069 ms 5.1171 ms 5.1371 ms] + change: [+0.3584% +0.8585% +1.4150%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [10.833 s 10.851 s 10.872 s] + change: [+0.1196% +0.3327% +0.5691%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [12.202 s 12.220 s 12.238 s] + change: [+0.5573% +0.7559% +0.9460%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [2.5623 s 2.5672 s 2.5723 s] + change: [-0.7708% +0.4338% +1.1695%] (p = 0.52 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [133.01 ms 133.31 ms 133.63 ms] + change: [-19.637% -19.070% -18.307%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [134.71 ms 135.28 ms 135.86 ms] + change: [-17.863% -17.331% -16.747%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [28.206 ms 28.365 ms 28.528 ms] + change: [-1.0134% -0.3963% +0.2335%] (p = 0.26 > 0.05) + No change in performance detected. + +bench_g1_lincomb with precomputation points: '4096' + time: [19.622 ms 19.721 ms 19.820 ms] + change: [-46.138% -45.725% -45.334%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [359.81 ms 361.66 ms 363.22 ms] + change: [+0.5963% +1.1358% +1.6392%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_recover scale: '15' + time: [160.79 ms 161.24 ms 161.62 ms] + change: [-1.0751% -0.0659% +0.6659%] (p = 0.92 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_zero_poly scale: '15' + time: [97.215 ms 97.670 ms 98.063 ms] + change: [+0.1114% +0.8467% +1.5704%] (p = 0.03 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [5.0107 ms 5.0333 ms 5.0669 ms] + change: [-1.1512% -0.4507% +0.1837%] (p = 0.23 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [22.583 ms 22.661 ms 22.741 ms] + change: [+7.4532% +8.0150% +8.5575%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [23.935 ms 24.024 ms 24.117 ms] + change: [+6.6894% +7.4044% +8.0507%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2205 ms 1.2247 ms 1.2292 ms] + change: [+10.060% +10.572% +11.204%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [24.666 ms 24.902 ms 25.176 ms] + change: [+8.6655% +9.8438% +11.062%] (p = 0.00 < 0.05) + Performance has regressed. +Found 11 outliers among 100 measurements (11.00%) + 2 (2.00%) high mild + 9 (9.00%) high severe + +verify_blob_kzg_proof time: [2.5244 ms 2.5314 ms 2.5389 ms] + change: [+17.144% +17.639% +18.142%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5687 ms 2.5742 ms 2.5799 ms] + thrpt: [387.61 elem/s 388.46 elem/s 389.31 elem/s] + change: + time: [+15.034% +15.586% +16.165%] (p = 0.00 < 0.05) + thrpt: [-13.915% -13.484% -13.069%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [2.9009 ms 2.9122 ms 2.9253 ms] + thrpt: [683.69 elem/s 686.77 elem/s 689.45 elem/s] + change: + time: [+2.0096% +2.7576% +3.5370%] (p = 0.00 < 0.05) + thrpt: [-3.4161% -2.6836% -1.9700%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [5.4312 ms 5.4476 ms 5.4647 ms] + thrpt: [731.98 elem/s 734.27 elem/s 736.49 elem/s] + change: + time: [+25.854% +26.632% +27.450%] (p = 0.00 < 0.05) + thrpt: [-21.538% -21.031% -20.543%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [10.467 ms 10.492 ms 10.517 ms] + thrpt: [760.68 elem/s 762.49 elem/s 764.29 elem/s] + change: + time: [+46.525% +47.347% +48.126%] (p = 0.00 < 0.05) + thrpt: [-32.490% -32.133% -31.752%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [20.636 ms 20.685 ms 20.739 ms] + thrpt: [771.49 elem/s 773.49 elem/s 775.36 elem/s] + change: + time: [+55.539% +56.762% +57.799%] (p = 0.00 < 0.05) + thrpt: [-36.628% -36.209% -35.707%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [369.94 ms 379.68 ms 389.18 ms] + thrpt: [82.223 elem/s 84.282 elem/s 86.500 elem/s] + change: + time: [+1355.5% +1400.3% +1442.5%] (p = 0.00 < 0.05) + thrpt: [-93.517% -93.335% -93.129%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [432.64 ms 438.76 ms 444.70 ms] + thrpt: [143.92 elem/s 145.86 elem/s 147.93 elem/s] + change: + time: [+710.60% +734.56% +757.84%] (p = 0.00 < 0.05) + thrpt: [-88.343% -88.018% -87.663%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +blob_to_kzg_commitment time: [21.096 ms 21.178 ms 21.267 ms] + change: [-7.0439% -6.5454% -6.0360%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +compute_kzg_proof time: [22.215 ms 22.324 ms 22.451 ms] + change: [-7.7011% -7.0767% -6.4700%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1259 ms 1.1294 ms 1.1330 ms] + change: [-8.6578% -8.1588% -7.7015%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [22.753 ms 22.915 ms 23.114 ms] + change: [-9.1780% -7.9794% -6.8490%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe + +verify_blob_kzg_proof time: [2.2748 ms 2.2816 ms 2.2884 ms] + change: [-10.233% -9.8658% -9.4789%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2180 ms 2.2298 ms 2.2422 ms] + thrpt: [445.99 elem/s 448.46 elem/s 450.85 elem/s] + change: + time: [-13.861% -13.379% -12.831%] (p = 0.00 < 0.05) + thrpt: [+14.719% +15.445% +16.091%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.0306 ms 3.0525 ms 3.0758 ms] + thrpt: [650.23 elem/s 655.19 elem/s 659.93 elem/s] + change: + time: [+3.8655% +4.8194% +5.7837%] (p = 0.00 < 0.05) + thrpt: [-5.4675% -4.5978% -3.7217%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.6882 ms 4.7079 ms 4.7280 ms] + thrpt: [846.02 elem/s 849.64 elem/s 853.21 elem/s] + change: + time: [-13.987% -13.578% -13.138%] (p = 0.00 < 0.05) + thrpt: [+15.125% +15.711% +16.261%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [8.0502 ms 8.0922 ms 8.1365 ms] + thrpt: [983.23 elem/s 988.60 elem/s 993.76 elem/s] + change: + time: [-23.293% -22.872% -22.429%] (p = 0.00 < 0.05) + thrpt: [+28.914% +29.655% +30.366%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [16.134 ms 16.215 ms 16.313 ms] + thrpt: [980.80 elem/s 986.74 elem/s 991.71 elem/s] + change: + time: [-22.076% -21.611% -21.105%] (p = 0.00 < 0.05) + thrpt: [+26.751% +27.570% +28.330%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low severe + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [29.721 ms 30.085 ms 30.506 ms] + thrpt: [1.0490 Kelem/s 1.0637 Kelem/s 1.0767 Kelem/s] + change: + time: [-92.293% -92.076% -91.835%] (p = 0.00 < 0.05) + thrpt: [+1124.8% +1162.0% +1197.6%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 3 (3.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [56.866 ms 57.490 ms 58.267 ms] + thrpt: [1.0984 Kelem/s 1.1132 Kelem/s 1.1254 Kelem/s] + change: + time: [-87.121% -86.897% -86.641%] (p = 0.00 < 0.05) + thrpt: [+648.59% +663.20% +676.43%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe + +blob_to_kzg_commitment time: [20.926 ms 21.021 ms 21.127 ms] + change: [-1.3663% -0.7379% -0.1181%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [22.069 ms 22.131 ms 22.197 ms] + change: [-1.4868% -0.8632% -0.2820%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1214 ms 1.1251 ms 1.1289 ms] + change: [-0.7727% -0.3741% +0.0838%] (p = 0.09 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [22.513 ms 22.593 ms 22.677 ms] + change: [-2.3130% -1.4038% -0.6254%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +verify_blob_kzg_proof time: [2.1704 ms 2.1803 ms 2.1906 ms] + change: [-4.9928% -4.4409% -3.8815%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2456 ms 2.2555 ms 2.2658 ms] + thrpt: [441.34 elem/s 443.37 elem/s 445.31 elem/s] + change: + time: [+0.4492% +1.1495% +1.8724%] (p = 0.00 < 0.05) + thrpt: [-1.8380% -1.1364% -0.4472%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.8190 ms 2.8326 ms 2.8462 ms] + thrpt: [702.69 elem/s 706.07 elem/s 709.48 elem/s] + change: + time: [-8.0602% -7.2058% -6.4201%] (p = 0.00 < 0.05) + thrpt: [+6.8605% +7.7654% +8.7668%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [4.2783 ms 4.2998 ms 4.3222 ms] + thrpt: [925.45 elem/s 930.29 elem/s 934.95 elem/s] + change: + time: [-9.3564% -8.6692% -8.0901%] (p = 0.00 < 0.05) + thrpt: [+8.8022% +9.4921% +10.322%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [7.2672 ms 7.3033 ms 7.3422 ms] + thrpt: [1.0896 Kelem/s 1.0954 Kelem/s 1.1008 Kelem/s] + change: + time: [-10.405% -9.7488% -9.0750%] (p = 0.00 < 0.05) + thrpt: [+9.9808% +10.802% +11.614%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [13.004 ms 13.092 ms 13.221 ms] + thrpt: [1.2102 Kelem/s 1.2221 Kelem/s 1.2304 Kelem/s] + change: + time: [-19.972% -19.261% -18.401%] (p = 0.00 < 0.05) + thrpt: [+22.551% +23.855% +24.957%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [26.498 ms 27.007 ms 27.593 ms] + thrpt: [1.1597 Kelem/s 1.1849 Kelem/s 1.2076 Kelem/s] + change: + time: [-12.163% -10.230% -7.9324%] (p = 0.00 < 0.05) + thrpt: [+8.6159% +11.395% +13.847%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [51.247 ms 52.522 ms 54.001 ms] + thrpt: [1.1852 Kelem/s 1.2185 Kelem/s 1.2489 Kelem/s] + change: + time: [-11.251% -8.6401% -5.8060%] (p = 0.00 < 0.05) + thrpt: [+6.1638% +9.4572% +12.677%] + Performance has improved. +Found 17 outliers among 100 measurements (17.00%) + 1 (1.00%) high mild + 16 (16.00%) high severe + +bench_fft_fr scale: '15' + time: [5.0580 ms 5.0669 ms 5.0834 ms] + change: [-2.0292% -1.2977% -0.5627%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low severe + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [10.837 s 10.855 s 10.871 s] + change: [-0.2158% +0.0425% +0.2527%] (p = 0.75 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_single_da scale: '14' + time: [12.195 s 12.209 s 12.225 s] + change: [-0.2788% -0.0880% +0.1196%] (p = 0.41 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [2.5423 s 2.5754 s 2.6349 s] + change: [-1.0263% +0.3218% +3.7108%] (p = 0.81 > 0.05) + No change in performance detected. +Found 3 outliers among 10 measurements (30.00%) + 2 (20.00%) low mild + 1 (10.00%) high severe + +bench_commit_to_poly scale: '15' + time: [129.32 ms 130.49 ms 131.52 ms] + change: [-3.7114% -2.6535% -1.7776%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [127.34 ms 129.03 ms 130.46 ms] + change: [-7.2512% -5.8084% -4.3632%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [22.673 ms 22.758 ms 22.888 ms] + change: [-19.785% -19.208% -18.535%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [352.13 ms 355.67 ms 360.62 ms] + change: [-2.7292% -1.6557% -0.1962%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_recover scale: '15' + time: [159.52 ms 159.93 ms 160.56 ms] + change: [-1.2630% -0.8536% -0.3876%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [95.478 ms 95.785 ms 96.136 ms] + change: [-2.4458% -1.8395% -1.2538%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust binding (rust-kzg with blst backend) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [21.620 ms 21.663 ms 21.706 ms] + change: [-44.817% -44.609% -44.408%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [22.915 ms 22.973 ms 23.032 ms] + change: [-44.156% -43.975% -43.794%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [23.982 ms 24.062 ms 24.151 ms] + change: [-42.513% -42.244% -41.976%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.3649 ms 1.3684 ms 1.3720 ms] + change: [-0.4214% -0.0712% +0.2505%] (p = 0.68 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof time: [3.3486 ms 3.3567 ms 3.3649 ms] + change: [+0.3022% +0.6182% +0.9922%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [3.3718 ms 3.3804 ms 3.3888 ms] + thrpt: [295.09 elem/s 295.82 elem/s 296.58 elem/s] + change: + time: [+0.3250% +0.6590% +1.0069%] (p = 0.00 < 0.05) + thrpt: [-0.9968% -0.6547% -0.3240%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [3.8280 ms 3.8380 ms 3.8482 ms] + thrpt: [519.72 elem/s 521.10 elem/s 522.46 elem/s] + change: + time: [-45.971% -45.717% -45.451%] (p = 0.00 < 0.05) + thrpt: [+83.323% +84.221% +85.085%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.0117 ms 7.0258 ms 7.0401 ms] + thrpt: [568.17 elem/s 569.33 elem/s 570.48 elem/s] + change: + time: [-48.116% -47.953% -47.799%] (p = 0.00 < 0.05) + thrpt: [+91.566% +92.133% +92.737%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.559 ms 13.607 ms 13.664 ms] + thrpt: [585.46 elem/s 587.92 elem/s 590.03 elem/s] + change: + time: [-49.196% -48.914% -48.614%] (p = 0.00 < 0.05) + thrpt: [+94.607% +95.749% +96.837%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [26.689 ms 26.762 ms 26.837 ms] + thrpt: [596.19 elem/s 597.86 elem/s 599.51 elem/s] + change: + time: [-49.536% -49.338% -49.146%] (p = 0.00 < 0.05) + thrpt: [+96.640% +97.387% +98.161%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.808 ms 44.915 ms 45.025 ms] + thrpt: [710.72 elem/s 712.46 elem/s 714.15 elem/s] + change: + time: [-48.884% -48.708% -48.514%] (p = 0.00 < 0.05) + thrpt: [+94.227% +94.962% +95.632%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [84.006 ms 84.224 ms 84.467 ms] + thrpt: [757.69 elem/s 759.87 elem/s 761.85 elem/s] + change: + time: [-48.497% -48.327% -48.167%] (p = 0.00 < 0.05) + thrpt: [+92.927% +93.525% +94.162%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ go binding (rust-kzg with blst backend) ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/ethereum/c-kzg-4844/bindings/go +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +Benchmark/BlobToKZGCommitment-2 55 21683576 ns/op +Benchmark/ComputeKZGProof-2 51 22988187 ns/op +Benchmark/ComputeBlobKZGProof-2 49 24042697 ns/op +Benchmark/VerifyKZGProof-2 878 1385748 ns/op +Benchmark/VerifyBlobKZGProof-2 354 3327254 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-2 360 3337848 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-2 325 3674266 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-2 170 6969753 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-2 84 13526438 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-2 44 26738095 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-2 26 43671361 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-2 13 82266832 ns/op +PASS +ok github.com/ethereum/c-kzg-4844/bindings/go 22.549s + + + +********** BENCHMARKING ON 4 CORES ********** + + + + + +~~~~~~~~~~ go-kzg-4844 ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/crate-crypto/go-kzg-4844 +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +BenchmarkComputeChallenge-4 3741 323092 ns/op 32 B/op 1 allocs/op +Benchmark/BlobToKZGCommitment-4 78 15508718 ns/op 382321 B/op 70 allocs/op +Benchmark/ComputeKZGProof-4 72 16527473 ns/op 907770 B/op 81 allocs/op +Benchmark/ComputeBlobKZGProof-4 69 17331327 ns/op 908170 B/op 88 allocs/op +Benchmark/VerifyKZGProof-4 824 1430276 ns/op 6616 B/op 55 allocs/op +Benchmark/VerifyBlobKZGProof-4 477 2470186 ns/op 400480 B/op 64 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-4 476 2498647 ns/op 400736 B/op 66 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-4 280 4249232 ns/op 884753 B/op 497 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-4 177 6974082 ns/op 1676048 B/op 549 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-4 96 11911296 ns/op 3258011 B/op 638 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-4 52 21798228 ns/op 6421986 B/op 815 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-4 26 41800006 ns/op 12749731 B/op 1174 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-4 13 81500928 ns/op 25382918 B/op 1824 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=1)-4 474 2502044 ns/op 400664 B/op 67 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=2)-4 475 2553889 ns/op 801453 B/op 136 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=4)-4 452 2846408 ns/op 1602920 B/op 272 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=8)-4 226 5359194 ns/op 3205776 B/op 542 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=16)-4 100 10829823 ns/op 6411169 B/op 1078 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=32)-4 56 21896888 ns/op 12822388 B/op 2162 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=64)-4 27 42933827 ns/op 25644859 B/op 4341 allocs/op +BenchmarkDeserializeBlob-4 7656 158580 ns/op 131617 B/op 6 allocs/op +PASS +ok github.com/crate-crypto/go-kzg-4844 34.122s + + + +~~~~~~~~~~ rust binding (c-kzg-4844) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [51.010 ms 51.212 ms 51.446 ms] + change: [+0.7119% +1.1516% +1.6503%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [55.052 ms 55.186 ms 55.324 ms] + change: [+2.8875% +3.2171% +3.5461%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [54.052 ms 54.167 ms 54.283 ms] + change: [+0.1218% +0.4353% +0.7278%] (p = 0.01 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.3754 ms 1.3784 ms 1.3814 ms] + change: [+0.0642% +0.4786% +0.8839%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.6680 ms 2.6752 ms 2.6832 ms] + change: [+0.1159% +0.4797% +0.8469%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.6746 ms 2.6848 ms 2.6964 ms] + thrpt: [370.87 elem/s 372.46 elem/s 373.89 elem/s] + change: + time: [+0.6466% +1.1246% +1.5837%] (p = 0.00 < 0.05) + thrpt: [-1.5590% -1.1121% -0.6424%] + Change within noise threshold. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.6699 ms 4.7452 ms 4.8349 ms] + thrpt: [413.66 elem/s 421.47 elem/s 428.27 elem/s] + change: + time: [+4.0153% +5.7466% +7.7180%] (p = 0.00 < 0.05) + thrpt: [-7.1650% -5.4343% -3.8603%] + Performance has regressed. +Found 11 outliers among 100 measurements (11.00%) + 4 (4.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [8.3026 ms 8.4275 ms 8.5920 ms] + thrpt: [465.55 elem/s 474.64 elem/s 481.78 elem/s] + change: + time: [+3.7084% +5.2146% +7.4639%] (p = 0.00 < 0.05) + thrpt: [-6.9455% -4.9561% -3.5758%] + Performance has regressed. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [15.496 ms 15.788 ms 16.149 ms] + thrpt: [495.39 elem/s 506.70 elem/s 516.27 elem/s] + change: + time: [+2.7712% +4.8472% +7.0976%] (p = 0.00 < 0.05) + thrpt: [-6.6272% -4.6231% -2.6965%] + Performance has regressed. +Found 11 outliers among 100 measurements (11.00%) + 6 (6.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [29.546 ms 29.956 ms 30.509 ms] + thrpt: [524.43 elem/s 534.11 elem/s 541.52 elem/s] + change: + time: [+2.5146% +3.8585% +5.6929%] (p = 0.00 < 0.05) + thrpt: [-5.3862% -3.7151% -2.4529%] + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 4 (4.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [59.036 ms 59.430 ms 59.850 ms] + thrpt: [534.67 elem/s 538.45 elem/s 542.04 elem/s] + change: + time: [+3.7769% +4.4995% +5.2411%] (p = 0.00 < 0.05) + thrpt: [-4.9801% -4.3058% -3.6394%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [116.12 ms 118.38 ms 121.15 ms] + thrpt: [528.29 elem/s 540.64 elem/s 551.17 elem/s] + change: + time: [+2.8739% +4.7995% +7.5973%] (p = 0.00 < 0.05) + thrpt: [-7.0609% -4.5797% -2.7936%] + Performance has regressed. +Found 15 outliers among 100 measurements (15.00%) + 6 (6.00%) high mild + 9 (9.00%) high severe + + + + +~~~~~~~~~~ constantine ~~~~~~~~~~ + + + Executing task bench_eth_eip4844_kzg in /root/benches/constantine/constantine.nimble +bench xoshiro512** seed: 1720334925 +Warmup: 1.0401 s, result 224 (displayed to avoid compiler optimizing warmup away) + + +Compiled with Clang +Optimization level => + no optimization: false + release: true + danger: true + inline assembly: true +Using Constantine with 64-bit limbs +Running on Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz + +⚠️ Cycles measurements are approximate and use the CPU nominal clock: Turbo-Boost and overclocking will skew them. +i.e. a 20% overclock will be about 20% off (assuming no dynamic frequency scaling) + +================================================================================================================= + +Trusted Setup loaded successfully +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +blob_to_kzg_commitment serial 27.904 ops/s 35837744 ns/op 96534875 CPU cycles (approx) +blob_to_kzg_commitment 16 threads 77.273 ops/s 12941080 ns/op 34858921 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.770x + +compute_kzg_proof serial 28.815 ops/s 34703938 ns/op 93480825 CPU cycles (approx) +compute_kzg_proof 16 threads 81.707 ops/s 12238824 ns/op 32967304 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.836x + +compute_blob_kzg_proof serial 28.405 ops/s 35205374 ns/op 94831564 CPU cycles (approx) +compute_blob_kzg_proof 16 threads 80.535 ops/s 12416887 ns/op 33446957 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.835x + +verify_kzg_proof serial 928.608 ops/s 1076881 ns/op 2900742 CPU cycles (approx) +verify_kzg_proof is always serial + +verify_blob_kzg_proof serial 463.310 ops/s 2158384 ns/op 5813951 CPU cycles (approx) +verify_blob_kzg_proof 16 threads 500.343 ops/s 1998628 ns/op 5383626 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.080x + +verify_blob_kzg_proof (batch 1) serial 466.652 ops/s 2142926 ns/op 5772316 CPU cycles (approx) +verify_blob_kzg_proof (batch 1) 16 threads 483.457 ops/s 2068437 ns/op 5571670 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.036x + +verify_blob_kzg_proof (batch 2) serial 283.353 ops/s 3529169 ns/op 9506380 CPU cycles (approx) +verify_blob_kzg_proof (batch 2) 16 threads 431.283 ops/s 2318664 ns/op 6245691 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.522x + +verify_blob_kzg_proof (batch 4) serial 158.844 ops/s 6295490 ns/op 16957933 CPU cycles (approx) +verify_blob_kzg_proof (batch 4) 16 threads 316.058 ops/s 3163980 ns/op 8522692 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.990x + +verify_blob_kzg_proof (batch 8) serial 85.554 ops/s 11688557 ns/op 31485077 CPU cycles (approx) +verify_blob_kzg_proof (batch 8) 16 threads 222.049 ops/s 4503501 ns/op 12130920 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.595x + +verify_blob_kzg_proof (batch 16) serial 44.805 ops/s 22319091 ns/op 60120225 CPU cycles (approx) +verify_blob_kzg_proof (batch 16) 16 threads 132.429 ops/s 7551241 ns/op 20340525 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.956x + +verify_blob_kzg_proof (batch 32) serial 23.366 ops/s 42796999 ns/op 115280949 CPU cycles (approx) +verify_blob_kzg_proof (batch 32) 16 threads 65.517 ops/s 15263116 ns/op 41113776 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.804x + +verify_blob_kzg_proof (batch 64) serial 11.803 ops/s 84723962 ns/op 228218443 CPU cycles (approx) +verify_blob_kzg_proof (batch 64) 16 threads 36.771 ops/s 27195184 ns/op 73254866 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 3.115x + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.9016 ms 7.9230 ms 7.9433 ms] + change: [+56.707% +57.943% +59.261%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [77.020 ms 77.189 ms 77.366 ms] + change: [+265.17% +267.19% +269.12%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [80.860 ms 81.016 ms 81.178 ms] + change: [+264.77% +266.08% +267.35%] (p = 0.00 < 0.05) + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6980 ms 2.7036 ms 2.7090 ms] + change: [+139.43% +140.33% +141.23%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild + +compute_blob_kzg_proof time: [81.544 ms 81.724 ms 81.920 ms] + change: [+260.14% +261.72% +263.34%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high severe + +verify_blob_kzg_proof time: [4.1389 ms 4.1493 ms 4.1601 ms] + change: [+89.282% +90.308% +91.298%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1605 ms 4.1720 ms 4.1832 ms] + thrpt: [239.05 elem/s 239.70 elem/s 240.36 elem/s] + change: + time: [+84.015% +84.971% +85.970%] (p = 0.00 < 0.05) + thrpt: [-46.228% -45.937% -45.657%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [5.9945 ms 6.0090 ms 6.0238 ms] + thrpt: [332.02 elem/s 332.84 elem/s 333.64 elem/s] + change: + time: [+111.02% +112.14% +113.28%] (p = 0.00 < 0.05) + thrpt: [-53.113% -52.861% -52.610%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.668 ms 10.699 ms 10.731 ms] + thrpt: [372.77 elem/s 373.87 elem/s 374.97 elem/s] + change: + time: [+147.36% +148.82% +150.31%] (p = 0.00 < 0.05) + thrpt: [-60.049% -59.811% -59.573%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [17.171 ms 17.204 ms 17.237 ms] + thrpt: [464.13 elem/s 465.01 elem/s 465.89 elem/s] + change: + time: [+134.21% +135.56% +136.83%] (p = 0.00 < 0.05) + thrpt: [-57.776% -57.548% -57.304%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [31.827 ms 31.913 ms 32.001 ms] + thrpt: [499.98 elem/s 501.37 elem/s 502.71 elem/s] + change: + time: [+141.26% +143.76% +145.52%] (p = 0.00 < 0.05) + thrpt: [-59.270% -58.976% -58.551%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [60.025 ms 60.145 ms 60.265 ms] + thrpt: [530.99 elem/s 532.05 elem/s 533.11 elem/s] + change: + time: [+117.91% +122.70% +127.00%] (p = 0.00 < 0.05) + thrpt: [-55.947% -55.096% -54.109%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [115.80 ms 116.09 ms 116.41 ms] + thrpt: [549.77 elem/s 551.29 elem/s 552.67 elem/s] + change: + time: [+115.03% +121.03% +126.54%] (p = 0.00 < 0.05) + thrpt: [-55.858% -54.757% -53.494%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [8.2768 ms 8.3454 ms 8.4823 ms] + change: [+63.130% +64.799% +67.058%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [1.0247 s 1.0284 s 1.0323 s] + change: [-90.564% -90.527% -90.488%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [51.614 s 51.659 s 51.708 s] + change: [+322.45% +323.11% +323.80%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [12.087 s 12.096 s 12.107 s] + change: [+359.06% +369.69% +375.84%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [503.55 ms 505.65 ms 507.97 ms] + change: [+285.31% +288.08% +290.72%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_compute_proof_single scale: '15' + time: [516.50 ms 518.55 ms 520.52 ms] + change: [+300.99% +306.54% +312.57%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [80.355 ms 80.655 ms 81.051 ms] + change: [+249.85% +252.56% +255.02%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_new_poly_div scale: '15' + time: [376.35 ms 379.40 ms 383.04 ms] + change: [+4.9865% +6.6703% +8.2471%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_recover scale: '15' + time: [405.21 ms 407.80 ms 410.68 ms] + change: [+152.76% +154.70% +156.74%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [181.23 ms 182.29 ms 183.54 ms] + change: [+88.570% +90.043% +91.594%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8707 ms 7.8846 ms 7.8968 ms] + change: [-1.8425% -0.9699% -0.1892%] (p = 0.04 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [57.825 ms 58.075 ms 58.346 ms] + change: [-25.193% -24.762% -24.380%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high severe + +compute_kzg_proof time: [62.363 ms 62.558 ms 62.775 ms] + change: [-23.078% -22.783% -22.471%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6859 ms 2.6928 ms 2.6998 ms] + change: [-0.7328% -0.3993% -0.0729%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [63.183 ms 63.356 ms 63.541 ms] + change: [-22.761% -22.476% -22.159%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [4.1028 ms 4.1183 ms 4.1351 ms] + change: [-1.2289% -0.7486% -0.2356%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [4.1442 ms 4.1558 ms 4.1676 ms] + thrpt: [239.95 elem/s 240.63 elem/s 241.30 elem/s] + change: + time: [-0.7937% -0.3873% +0.0004%] (p = 0.06 > 0.05) + thrpt: [-0.0004% +0.3888% +0.8000%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [6.0898 ms 6.1055 ms 6.1217 ms] + thrpt: [326.71 elem/s 327.57 elem/s 328.42 elem/s] + change: + time: [+1.2439% +1.6059% +1.9605%] (p = 0.00 < 0.05) + thrpt: [-1.9228% -1.5805% -1.2286%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.844 ms 10.876 ms 10.907 ms] + thrpt: [366.73 elem/s 367.80 elem/s 368.86 elem/s] + change: + time: [+1.2432% +1.6519% +2.0663%] (p = 0.00 < 0.05) + thrpt: [-2.0245% -1.6251% -1.2279%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [25.146 ms 25.220 ms 25.294 ms] + thrpt: [316.28 elem/s 317.21 elem/s 318.15 elem/s] + change: + time: [+46.046% +46.593% +47.129%] (p = 0.00 < 0.05) + thrpt: [-32.032% -31.784% -31.529%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [42.329 ms 42.465 ms 42.606 ms] + thrpt: [375.53 elem/s 376.79 elem/s 377.99 elem/s] + change: + time: [+32.507% +33.065% +33.650%] (p = 0.00 < 0.05) + thrpt: [-25.177% -24.848% -24.532%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [70.169 ms 70.347 ms 70.530 ms] + thrpt: [453.71 elem/s 454.89 elem/s 456.04 elem/s] + change: + time: [+16.571% +16.962% +17.362%] (p = 0.00 < 0.05) + thrpt: [-14.793% -14.502% -14.216%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [126.81 ms 127.09 ms 127.39 ms] + thrpt: [502.40 elem/s 503.57 elem/s 504.69 elem/s] + change: + time: [+9.0865% +9.4777% +9.8725%] (p = 0.00 < 0.05) + thrpt: [-8.9855% -8.6572% -8.3296%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +bench_fft_fr scale: '15' + time: [8.5505 ms 8.5668 ms 8.5764 ms] + change: [+1.4966% +2.6483% +3.5000%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [1.0241 s 1.0275 s 1.0316 s] + change: [-0.5842% -0.0842% +0.4327%] (p = 0.77 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [51.399 s 51.460 s 51.513 s] + change: [-0.5314% -0.3864% -0.2483%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [12.028 s 12.060 s 12.096 s] + change: [-0.5495% -0.2987% +0.0092%] (p = 0.08 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [394.16 ms 396.11 ms 398.40 ms] + change: [-22.201% -21.662% -21.128%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [438.65 ms 439.85 ms 441.21 ms] + change: [-15.581% -15.176% -14.765%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [61.468 ms 61.781 ms 62.082 ms] + change: [-23.848% -23.431% -23.041%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [372.45 ms 374.54 ms 376.60 ms] + change: [-2.3086% -1.2793% -0.2815%] (p = 0.03 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [402.80 ms 405.06 ms 407.94 ms] + change: [-1.5637% -0.6723% +0.2474%] (p = 0.20 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [180.17 ms 180.59 ms 181.13 ms] + change: [-1.7847% -1.0277% -0.3966%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8612 ms 7.9035 ms 7.9385 ms] + change: [-0.6639% +0.1366% +0.8983%] (p = 0.75 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [54.579 ms 54.727 ms 54.877 ms] + change: [-6.2601% -5.7650% -5.2468%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [56.711 ms 56.930 ms 57.204 ms] + change: [-9.4915% -8.9962% -8.4971%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6208 ms 2.6271 ms 2.6334 ms] + change: [-2.7752% -2.4388% -2.0976%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [56.852 ms 56.980 ms 57.106 ms] + change: [-10.390% -10.063% -9.7286%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof time: [4.0761 ms 4.0869 ms 4.0984 ms] + change: [-1.2609% -0.7613% -0.2979%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1177 ms 4.1284 ms 4.1389 ms] + thrpt: [241.61 elem/s 242.23 elem/s 242.85 elem/s] + change: + time: [-1.0364% -0.6597% -0.2743%] (p = 0.00 < 0.05) + thrpt: [+0.2751% +0.6641% +1.0472%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [5.9493 ms 5.9682 ms 5.9897 ms] + thrpt: [333.90 elem/s 335.11 elem/s 336.18 elem/s] + change: + time: [-2.6463% -2.2490% -1.8325%] (p = 0.00 < 0.05) + thrpt: [+1.8667% +2.3008% +2.7182%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.652 ms 10.680 ms 10.709 ms] + thrpt: [373.52 elem/s 374.52 elem/s 375.53 elem/s] + change: + time: [-2.1728% -1.7960% -1.4034%] (p = 0.00 < 0.05) + thrpt: [+1.4233% +1.8289% +2.2211%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [17.096 ms 17.137 ms 17.176 ms] + thrpt: [465.75 elem/s 466.83 elem/s 467.94 elem/s] + change: + time: [-32.306% -32.050% -31.798%] (p = 0.00 < 0.05) + thrpt: [+46.622% +47.168% +47.723%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [32.047 ms 32.130 ms 32.214 ms] + thrpt: [496.68 elem/s 497.98 elem/s 499.27 elem/s] + change: + time: [-24.638% -24.337% -24.018%] (p = 0.00 < 0.05) + thrpt: [+31.610% +32.166% +32.692%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [60.176 ms 60.315 ms 60.453 ms] + thrpt: [529.34 elem/s 530.55 elem/s 531.78 elem/s] + change: + time: [-14.549% -14.261% -13.960%] (p = 0.00 < 0.05) + thrpt: [+16.225% +16.633% +17.027%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [116.14 ms 116.45 ms 116.79 ms] + thrpt: [547.97 elem/s 549.58 elem/s 551.06 elem/s] + change: + time: [-8.7084% -8.3724% -8.0369%] (p = 0.00 < 0.05) + thrpt: [+8.7393% +9.1375% +9.5391%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [8.3498 ms 8.3865 ms 8.4176 ms] + change: [-2.6773% -2.2964% -1.8847%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [1.0323 s 1.0350 s 1.0381 s] + change: [+0.2661% +0.7335% +1.2043%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high severe + +bench_fk_single_da scale: '14' + time: [51.777 s 51.812 s 51.847 s] + change: [+0.5633% +0.6842% +0.8239%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [12.047 s 12.067 s 12.087 s] + change: [-0.2707% +0.0542% +0.3773%] (p = 0.76 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [384.96 ms 385.99 ms 386.94 ms] + change: [-3.1769% -2.5550% -2.0215%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [388.34 ms 390.34 ms 392.31 ms] + change: [-11.801% -11.256% -10.735%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [79.725 ms 79.960 ms 80.254 ms] + change: [+28.874% +29.522% +30.180%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb with precomputation points: '4096' + time: [55.726 ms 55.940 ms 56.168 ms] + change: [+181.97% +184.03% +186.53%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [374.43 ms 375.92 ms 377.56 ms] + change: [-0.3133% +0.3682% +1.0702%] (p = 0.33 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [406.42 ms 408.57 ms 411.12 ms] + change: [-0.0530% +0.8668% +1.7789%] (p = 0.08 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [183.89 ms 184.96 ms 186.04 ms] + change: [+1.8908% +2.5173% +3.1566%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.9419 ms 2.9577 ms 2.9798 ms] + change: [-62.817% -62.448% -62.036%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [22.438 ms 22.577 ms 22.749 ms] + change: [-59.005% -58.746% -58.439%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high severe + +compute_kzg_proof time: [23.821 ms 23.887 ms 23.962 ms] + change: [-58.264% -58.042% -57.831%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [2.6599 ms 2.6660 ms 2.6720 ms] + change: [+1.1462% +1.4780% +1.8240%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [24.546 ms 24.624 ms 24.715 ms] + change: [-56.949% -56.784% -56.603%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof time: [4.0867 ms 4.0982 ms 4.1106 ms] + change: [-0.1285% +0.2767% +0.6990%] (p = 0.18 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [4.1016 ms 4.1110 ms 4.1203 ms] + thrpt: [242.70 elem/s 243.25 elem/s 243.81 elem/s] + change: + time: [-0.7637% -0.4218% -0.0812%] (p = 0.02 < 0.05) + thrpt: [+0.0812% +0.4236% +0.7695%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [4.5898 ms 4.6076 ms 4.6267 ms] + thrpt: [432.27 elem/s 434.07 elem/s 435.75 elem/s] + change: + time: [-23.197% -22.797% -22.371%] (p = 0.00 < 0.05) + thrpt: [+28.818% +29.529% +30.203%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.5638 ms 6.7923 ms 7.0214 ms] + thrpt: [569.68 elem/s 588.90 elem/s 609.40 elem/s] + change: + time: [-38.333% -36.403% -34.140%] (p = 0.00 < 0.05) + thrpt: [+51.837% +57.240% +62.162%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [8.8457 ms 9.1306 ms 9.4744 ms] + thrpt: [844.38 elem/s 876.18 elem/s 904.40 elem/s] + change: + time: [-48.434% -46.719% -44.650%] (p = 0.00 < 0.05) + thrpt: [+80.670% +87.684% +93.926%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 1 (1.00%) high mild + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [17.034 ms 17.118 ms 17.230 ms] + thrpt: [928.60 elem/s 934.68 elem/s 939.31 elem/s] + change: + time: [-47.035% -46.722% -46.354%] (p = 0.00 < 0.05) + thrpt: [+86.407% +87.694% +88.804%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [24.952 ms 25.190 ms 25.500 ms] + thrpt: [1.2549 Kelem/s 1.2703 Kelem/s 1.2824 Kelem/s] + change: + time: [-58.623% -58.236% -57.667%] (p = 0.00 < 0.05) + thrpt: [+136.22% +139.44% +141.68%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [43.679 ms 43.830 ms 44.010 ms] + thrpt: [1.4542 Kelem/s 1.4602 Kelem/s 1.4652 Kelem/s] + change: + time: [-62.537% -62.362% -62.184%] (p = 0.00 < 0.05) + thrpt: [+164.44% +165.69% +166.93%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe + +bench_fft_fr scale: '15' + time: [2.8770 ms 2.8888 ms 2.8976 ms] + change: [-65.674% -65.514% -65.360%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [347.55 ms 354.84 ms 362.90 ms] + change: [-66.362% -65.718% -64.880%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [19.976 s 20.264 s 20.515 s] + change: [-61.502% -60.889% -60.407%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [3.9196 s 3.9598 s 3.9942 s] + change: [-67.492% -67.184% -66.884%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [128.50 ms 128.96 ms 129.45 ms] + change: [-66.833% -66.674% -66.518%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [132.35 ms 132.75 ms 133.08 ms] + change: [-66.247% -66.045% -65.846%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [22.486 ms 22.788 ms 23.288 ms] + change: [-72.067% -71.448% -70.483%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [153.17 ms 154.64 ms 156.14 ms] + change: [-59.389% -59.037% -58.619%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [307.17 ms 308.71 ms 310.32 ms] + change: [-25.050% -24.440% -23.860%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [130.48 ms 132.62 ms 135.70 ms] + change: [-28.736% -27.317% -25.775%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.8778 ms 2.9006 ms 2.9215 ms] + change: [-3.9113% -2.7707% -1.7073%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [16.147 ms 16.186 ms 16.226 ms] + change: [-28.862% -28.306% -27.822%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [17.378 ms 17.460 ms 17.564 ms] + change: [-27.302% -26.906% -26.452%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +verify_kzg_proof time: [2.6224 ms 2.6310 ms 2.6397 ms] + change: [-1.7576% -1.3123% -0.9311%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [18.183 ms 18.249 ms 18.325 ms] + change: [-26.271% -25.892% -25.495%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) low mild + 4 (4.00%) high severe + +verify_blob_kzg_proof time: [4.0652 ms 4.0783 ms 4.0916 ms] + change: [-0.9180% -0.4854% -0.0563%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1427 ms 4.1556 ms 4.1690 ms] + thrpt: [239.86 elem/s 240.64 elem/s 241.39 elem/s] + change: + time: [+0.7109% +1.0866% +1.4877%] (p = 0.00 < 0.05) + thrpt: [-1.4659% -1.0749% -0.7058%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.5033 ms 4.5179 ms 4.5341 ms] + thrpt: [441.10 elem/s 442.69 elem/s 444.12 elem/s] + change: + time: [-2.4711% -1.9469% -1.4271%] (p = 0.00 < 0.05) + thrpt: [+1.4478% +1.9856% +2.5337%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.4772 ms 4.4901 ms 4.5037 ms] + thrpt: [888.15 elem/s 890.85 elem/s 893.42 elem/s] + change: + time: [-36.061% -33.894% -31.587%] (p = 0.00 < 0.05) + thrpt: [+46.170% +51.273% +56.399%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [8.6655 ms 8.8951 ms 9.1800 ms] + thrpt: [871.46 elem/s 899.37 elem/s 923.20 elem/s] + change: + time: [-6.9190% -2.5786% +2.0938%] (p = 0.27 > 0.05) + thrpt: [-2.0509% +2.6468% +7.4333%] + No change in performance detected. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [16.900 ms 17.090 ms 17.322 ms] + thrpt: [923.67 elem/s 936.23 elem/s 946.77 elem/s] + change: + time: [-1.4243% -0.1659% +1.1460%] (p = 0.82 > 0.05) + thrpt: [-1.1330% +0.1661% +1.4449%] + No change in performance detected. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [24.395 ms 24.454 ms 24.514 ms] + thrpt: [1.3054 Kelem/s 1.3086 Kelem/s 1.3118 Kelem/s] + change: + time: [-4.1233% -2.9231% -1.9557%] (p = 0.00 < 0.05) + thrpt: [+1.9947% +3.0111% +4.3006%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [42.896 ms 43.021 ms 43.170 ms] + thrpt: [1.4825 Kelem/s 1.4877 Kelem/s 1.4920 Kelem/s] + change: + time: [-2.3394% -1.8465% -1.3453%] (p = 0.00 < 0.05) + thrpt: [+1.3637% +1.8812% +2.3955%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [2.9178 ms 2.9346 ms 2.9564 ms] + change: [+1.1310% +1.7610% +2.4280%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [355.86 ms 360.47 ms 365.59 ms] + change: [-0.9939% +1.5869% +4.1253%] (p = 0.26 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [19.917 s 20.222 s 20.543 s] + change: [-2.2182% -0.2083% +1.8111%] (p = 0.85 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [3.8888 s 3.9312 s 3.9731 s] + change: [-2.0657% -0.7219% +0.7906%] (p = 0.36 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [110.28 ms 110.72 ms 111.18 ms] + change: [-14.576% -14.160% -13.722%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [111.14 ms 114.24 ms 117.86 ms] + change: [-16.223% -15.119% -13.067%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [22.787 ms 22.870 ms 22.966 ms] + change: [-2.7845% +0.6728% +3.1777%] (p = 0.74 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [16.286 ms 16.338 ms 16.413 ms] + change: [-71.030% -70.785% -70.562%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [154.12 ms 157.32 ms 162.77 ms] + change: [+0.8040% +2.9279% +5.1285%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [317.52 ms 321.02 ms 324.85 ms] + change: [+2.7794% +3.9856% +5.3351%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [130.27 ms 131.83 ms 133.71 ms] + change: [-4.4488% -2.4467% -0.4254%] (p = 0.04 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [10.278 ms 10.324 ms 10.370 ms] + change: [+254.99% +257.81% +260.59%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [154.52 ms 154.86 ms 155.22 ms] + change: [+853.54% +856.74% +859.90%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [159.49 ms 159.76 ms 160.04 ms] + change: [+809.49% +815.04% +819.66%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [3.9828 ms 3.9930 ms 4.0034 ms] + change: [+51.144% +51.770% +52.403%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [160.76 ms 161.10 ms 161.47 ms] + change: [+778.87% +782.83% +786.68%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [5.4732 ms 5.4880 ms 5.5030 ms] + change: [+34.002% +34.564% +35.129%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [5.4913 ms 5.5069 ms 5.5225 ms] + thrpt: [181.08 elem/s 181.59 elem/s 182.11 elem/s] + change: + time: [+31.945% +32.516% +33.092%] (p = 0.00 < 0.05) + thrpt: [-24.864% -24.538% -24.211%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [10.710 ms 10.738 ms 10.766 ms] + thrpt: [185.77 elem/s 186.25 elem/s 186.74 elem/s] + change: + time: [+136.63% +137.68% +138.67%] (p = 0.00 < 0.05) + thrpt: [-58.102% -57.926% -57.739%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [15.108 ms 15.140 ms 15.171 ms] + thrpt: [263.66 elem/s 264.21 elem/s 264.77 elem/s] + change: + time: [+235.97% +237.18% +238.39%] (p = 0.00 < 0.05) + thrpt: [-70.449% -70.342% -70.235%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [23.769 ms 23.824 ms 23.878 ms] + thrpt: [335.04 elem/s 335.80 elem/s 336.57 elem/s] + change: + time: [+159.59% +167.83% +174.96%] (p = 0.00 < 0.05) + thrpt: [-63.631% -62.663% -61.478%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [41.214 ms 41.308 ms 41.405 ms] + thrpt: [386.43 elem/s 387.33 elem/s 388.22 elem/s] + change: + time: [+138.43% +141.71% +144.49%] (p = 0.00 < 0.05) + thrpt: [-59.098% -58.629% -58.058%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [85.034 ms 85.251 ms 85.482 ms] + thrpt: [374.35 elem/s 375.36 elem/s 376.32 elem/s] + change: + time: [+247.28% +248.62% +249.82%] (p = 0.00 < 0.05) + thrpt: [-71.414% -71.316% -71.205%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [152.20 ms 152.44 ms 152.69 ms] + thrpt: [419.16 elem/s 419.84 elem/s 420.51 elem/s] + change: + time: [+253.01% +254.34% +255.58%] (p = 0.00 < 0.05) + thrpt: [-71.877% -71.778% -71.673%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [11.287 ms 11.307 ms 11.346 ms] + change: [+282.55% +285.64% +288.46%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low severe + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [99.346 s 99.451 s 99.548 s] + change: [+27104% +27489% +27846%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [105.37 s 105.54 s 105.72 s] + change: [+413.69% +421.93% +429.99%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [23.034 s 23.064 s 23.094 s] + change: [+480.44% +486.68% +493.11%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [991.21 ms 995.31 ms 999.82 ms] + change: [+796.99% +801.38% +806.72%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [905.61 ms 906.85 ms 908.16 ms] + change: [+690.80% +706.07% +716.21%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [158.35 ms 159.22 ms 160.26 ms] + change: [+583.94% +590.04% +595.28%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [793.72 ms 796.85 ms 800.27 ms] + change: [+392.02% +402.75% +413.15%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [593.21 ms 598.01 ms 603.65 ms] + change: [+83.637% +86.287% +88.996%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [216.11 ms 216.96 ms 217.92 ms] + change: [+63.819% +65.432% +66.797%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.9444 ms 3.9784 ms 4.0223 ms] + change: [-61.592% -61.304% -61.038%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [43.962 ms 44.068 ms 44.177 ms] + change: [-71.640% -71.544% -71.450%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +compute_kzg_proof time: [45.138 ms 45.528 ms 46.060 ms] + change: [-71.745% -71.503% -71.136%] (p = 0.00 < 0.05) + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) high mild + 4 (4.00%) high severe + +verify_kzg_proof time: [3.9781 ms 3.9904 ms 4.0029 ms] + change: [-0.4731% -0.0665% +0.3203%] (p = 0.75 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [45.393 ms 45.488 ms 45.585 ms] + change: [-71.847% -71.765% -71.676%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [5.4525 ms 5.4688 ms 5.4859 ms] + change: [-0.7463% -0.3494% +0.0466%] (p = 0.10 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [5.5079 ms 5.5193 ms 5.5307 ms] + thrpt: [180.81 elem/s 181.18 elem/s 181.56 elem/s] + change: + time: [-0.1225% +0.2258% +0.5726%] (p = 0.21 > 0.05) + thrpt: [-0.5693% -0.2253% +0.1227%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [6.0007 ms 6.0284 ms 6.0617 ms] + thrpt: [329.94 elem/s 331.76 elem/s 333.29 elem/s] + change: + time: [-44.165% -43.859% -43.503%] (p = 0.00 < 0.05) + thrpt: [+77.002% +78.124% +79.099%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [5.8662 ms 5.8819 ms 5.8975 ms] + thrpt: [678.25 elem/s 680.06 elem/s 681.87 elem/s] + change: + time: [-61.275% -61.150% -61.013%] (p = 0.00 < 0.05) + thrpt: [+156.49% +157.40% +158.23%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [11.472 ms 11.769 ms 12.145 ms] + thrpt: [658.73 elem/s 679.78 elem/s 697.34 elem/s] + change: + time: [-51.853% -50.602% -48.939%] (p = 0.00 < 0.05) + thrpt: [+95.844% +102.44% +107.70%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [22.571 ms 22.628 ms 22.685 ms] + thrpt: [705.30 elem/s 707.08 elem/s 708.88 elem/s] + change: + time: [-45.406% -45.221% -45.043%] (p = 0.00 < 0.05) + thrpt: [+81.960% +82.552% +83.169%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [43.739 ms 44.197 ms 44.778 ms] + thrpt: [714.63 elem/s 724.03 elem/s 731.61 elem/s] + change: + time: [-48.728% -48.157% -47.528%] (p = 0.00 < 0.05) + thrpt: [+90.578% +92.890% +95.038%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [61.300 ms 61.553 ms 61.844 ms] + thrpt: [1.0349 Kelem/s 1.0398 Kelem/s 1.0440 Kelem/s] + change: + time: [-59.801% -59.621% -59.425%] (p = 0.00 < 0.05) + thrpt: [+146.46% +147.66% +148.76%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [3.8285 ms 3.8929 ms 4.0048 ms] + change: [-66.148% -65.754% -65.207%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [33.199 s 33.868 s 34.439 s] + change: [-66.578% -65.945% -65.397%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [38.675 s 39.210 s 39.830 s] + change: [-63.366% -62.850% -62.278%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [7.4845 s 7.5504 s 7.6142 s] + change: [-67.553% -67.262% -66.985%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [252.61 ms 254.20 ms 256.30 ms] + change: [-74.655% -74.461% -74.213%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [252.85 ms 253.96 ms 255.10 ms] + change: [-72.130% -71.996% -71.853%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [43.436 ms 43.496 ms 43.557 ms] + change: [-72.720% -72.571% -72.444%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [315.92 ms 316.70 ms 317.48 ms] + change: [-60.450% -60.256% -60.066%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [495.38 ms 498.31 ms 501.43 ms] + change: [-17.563% -16.673% -15.794%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [150.71 ms 154.10 ms 157.16 ms] + change: [-29.828% -28.487% -27.394%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.3079 ms 9.3398 ms 9.3860 ms] + change: [+132.48% +134.33% +136.27%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [52.468 ms 52.670 ms 52.918 ms] + change: [+18.998% +19.520% +20.087%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [55.403 ms 55.575 ms 55.755 ms] + change: [+20.623% +22.069% +23.199%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +verify_kzg_proof time: [1.2390 ms 1.2425 ms 1.2460 ms] + change: [-68.918% -68.785% -68.655%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [56.234 ms 56.399 ms 56.602 ms] + change: [+23.538% +23.986% +24.512%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8241 ms 2.8313 ms 2.8384 ms] + change: [-48.442% -48.229% -48.023%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.8435 ms 2.8513 ms 2.8593 ms] + thrpt: [349.73 elem/s 350.72 elem/s 351.68 elem/s] + change: + time: [-48.508% -48.340% -48.164%] (p = 0.00 < 0.05) + thrpt: [+92.917% +93.572% +94.206%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6202 ms 4.6344 ms 4.6495 ms] + thrpt: [430.16 elem/s 431.56 elem/s 432.88 elem/s] + change: + time: [-23.599% -23.124% -22.675%] (p = 0.00 < 0.05) + thrpt: [+29.324% +30.080% +30.888%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [8.5006 ms 8.5219 ms 8.5439 ms] + thrpt: [468.17 elem/s 469.38 elem/s 470.56 elem/s] + change: + time: [+44.336% +44.884% +45.429%] (p = 0.00 < 0.05) + thrpt: [-31.238% -30.979% -30.717%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [15.868 ms 15.908 ms 15.951 ms] + thrpt: [501.52 elem/s 502.88 elem/s 504.15 elem/s] + change: + time: [+30.933% +35.175% +38.648%] (p = 0.00 < 0.05) + thrpt: [-27.875% -26.022% -23.625%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [30.370 ms 30.452 ms 30.536 ms] + thrpt: [523.98 elem/s 525.41 elem/s 526.84 elem/s] + change: + time: [+34.089% +34.577% +35.047%] (p = 0.00 < 0.05) + thrpt: [-25.952% -25.693% -25.423%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [58.428 ms 58.566 ms 58.704 ms] + thrpt: [545.11 elem/s 546.39 elem/s 547.68 elem/s] + change: + time: [+30.754% +32.512% +33.929%] (p = 0.00 < 0.05) + thrpt: [-25.333% -24.535% -23.521%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [114.74 ms 115.03 ms 115.30 ms] + thrpt: [555.06 elem/s 556.40 elem/s 557.76 elem/s] + change: + time: [+85.888% +86.872% +87.776%] (p = 0.00 < 0.05) + thrpt: [-46.745% -46.488% -46.204%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +bench_fft_fr scale: '15' + time: [9.6777 ms 9.7106 ms 9.7328 ms] + change: [+146.67% +150.65% +153.36%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [18.844 s 18.874 s 18.908 s] + change: [-45.195% -44.271% -43.146%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [20.304 s 20.354 s 20.407 s] + change: [-48.915% -48.091% -47.362%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [4.7145 s 4.7200 s 4.7254 s] + change: [-38.020% -37.487% -36.935%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [338.02 ms 338.97 ms 340.01 ms] + change: [+32.183% +33.351% +34.282%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [348.77 ms 350.20 ms 351.97 ms] + change: [+37.033% +37.898% +38.789%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [53.343 ms 53.465 ms 53.587 ms] + change: [+22.541% +22.931% +23.342%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [688.60 ms 692.92 ms 697.76 ms] + change: [+117.16% +118.80% +120.44%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [275.52 ms 276.72 ms 277.98 ms] + change: [-44.905% -44.467% -44.006%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [170.62 ms 171.79 ms 173.56 ms] + change: [+9.3877% +11.245% +13.271%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2488 ms 9.2837 ms 9.3066 ms] + change: [-1.5676% -0.8483% -0.1878%] (p = 0.03 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [46.220 ms 46.351 ms 46.497 ms] + change: [-12.486% -11.996% -11.553%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [48.675 ms 48.804 ms 48.940 ms] + change: [-12.553% -12.183% -11.827%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2357 ms 1.2397 ms 1.2437 ms] + change: [-0.6419% -0.2209% +0.2554%] (p = 0.35 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [49.358 ms 49.479 ms 49.610 ms] + change: [-12.642% -12.270% -11.926%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8357 ms 2.8431 ms 2.8506 ms] + change: [+0.0533% +0.4177% +0.7786%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8381 ms 2.8469 ms 2.8557 ms] + thrpt: [350.18 elem/s 351.26 elem/s 352.35 elem/s] + change: + time: [-0.5783% -0.1560% +0.2680%] (p = 0.47 > 0.05) + thrpt: [-0.2673% +0.1563% +0.5817%] + No change in performance detected. +verify_blob_kzg_proof_batch/2 + time: [4.5880 ms 4.5992 ms 4.6102 ms] + thrpt: [433.82 elem/s 434.86 elem/s 435.92 elem/s] + change: + time: [-1.1568% -0.7598% -0.3725%] (p = 0.00 < 0.05) + thrpt: [+0.3739% +0.7656% +1.1704%] + Change within noise threshold. +verify_blob_kzg_proof_batch/4 + time: [8.4591 ms 8.4803 ms 8.5010 ms] + thrpt: [470.53 elem/s 471.68 elem/s 472.86 elem/s] + change: + time: [-0.8415% -0.4882% -0.1445%] (p = 0.01 < 0.05) + thrpt: [+0.1447% +0.4906% +0.8486%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [20.882 ms 20.939 ms 20.997 ms] + thrpt: [381.01 elem/s 382.06 elem/s 383.10 elem/s] + change: + time: [+31.128% +31.625% +32.132%] (p = 0.00 < 0.05) + thrpt: [-24.318% -24.027% -23.738%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [36.815 ms 36.915 ms 37.015 ms] + thrpt: [432.26 elem/s 433.43 elem/s 434.60 elem/s] + change: + time: [+20.776% +21.222% +21.698%] (p = 0.00 < 0.05) + thrpt: [-17.830% -17.507% -17.202%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [64.889 ms 65.035 ms 65.176 ms] + thrpt: [490.97 elem/s 492.04 elem/s 493.15 elem/s] + change: + time: [+10.671% +11.045% +11.396%] (p = 0.00 < 0.05) + thrpt: [-10.230% -9.9468% -9.6420%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [120.32 ms 120.59 ms 120.88 ms] + thrpt: [529.45 elem/s 530.71 elem/s 531.92 elem/s] + change: + time: [+4.4923% +4.8412% +5.1752%] (p = 0.00 < 0.05) + thrpt: [-4.9206% -4.6177% -4.2991%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.8220 ms 9.8585 ms 9.8811 ms] + change: [+0.7186% +1.2883% +1.7931%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [18.889 s 18.903 s 18.917 s] + change: [-0.0401% +0.1519% +0.3319%] (p = 0.14 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [20.350 s 20.389 s 20.425 s] + change: [-0.1573% +0.1741% +0.4807%] (p = 0.31 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.7139 s 4.7219 s 4.7311 s] + change: [-0.1594% +0.0408% +0.2770%] (p = 0.74 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [317.19 ms 319.02 ms 321.58 ms] + change: [-6.4991% -5.8872% -5.0001%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [325.77 ms 327.36 ms 329.00 ms] + change: [-7.1801% -6.5231% -5.9179%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [47.589 ms 47.743 ms 47.903 ms] + change: [-11.082% -10.703% -10.326%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +bench_new_poly_div scale: '15' + time: [691.36 ms 697.34 ms 703.07 ms] + change: [-0.4789% +0.6378% +1.7428%] (p = 0.29 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [278.87 ms 280.52 ms 282.32 ms] + change: [+0.6128% +1.3723% +2.1629%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [172.18 ms 172.85 ms 173.42 ms] + change: [-0.4600% +0.2834% +1.0433%] (p = 0.50 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2792 ms 9.3032 ms 9.3209 ms] + change: [-0.0460% +0.4604% +1.0083%] (p = 0.13 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [38.679 ms 38.769 ms 38.861 ms] + change: [-16.667% -16.358% -16.039%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [39.891 ms 40.072 ms 40.271 ms] + change: [-18.338% -17.893% -17.449%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 3 (3.00%) high severe + +verify_kzg_proof time: [1.2416 ms 1.2454 ms 1.2493 ms] + change: [-0.3202% +0.1453% +0.6001%] (p = 0.55 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [40.553 ms 40.653 ms 40.755 ms] + change: [-18.133% -17.838% -17.517%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8240 ms 2.8322 ms 2.8405 ms] + change: [-0.7914% -0.3850% -0.0016%] (p = 0.06 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8660 ms 2.8741 ms 2.8823 ms] + thrpt: [346.94 elem/s 347.94 elem/s 348.92 elem/s] + change: + time: [+0.5202% +0.9565% +1.3658%] (p = 0.00 < 0.05) + thrpt: [-1.3474% -0.9474% -0.5175%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6185 ms 4.6359 ms 4.6548 ms] + thrpt: [429.66 elem/s 431.42 elem/s 433.04 elem/s] + change: + time: [+0.3139% +0.7985% +1.3129%] (p = 0.00 < 0.05) + thrpt: [-1.2959% -0.7922% -0.3129%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [8.5259 ms 8.5499 ms 8.5748 ms] + thrpt: [466.48 elem/s 467.84 elem/s 469.16 elem/s] + change: + time: [+0.4341% +0.8211% +1.2075%] (p = 0.00 < 0.05) + thrpt: [-1.1931% -0.8144% -0.4322%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [15.909 ms 15.963 ms 16.020 ms] + thrpt: [499.37 elem/s 501.15 elem/s 502.87 elem/s] + change: + time: [-24.100% -23.764% -23.418%] (p = 0.00 < 0.05) + thrpt: [+30.578% +31.172% +31.752%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [30.355 ms 30.435 ms 30.516 ms] + thrpt: [524.32 elem/s 525.70 elem/s 527.10 elem/s] + change: + time: [-17.868% -17.553% -17.238%] (p = 0.00 < 0.05) + thrpt: [+20.828% +21.290% +21.755%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [58.346 ms 58.486 ms 58.628 ms] + thrpt: [545.81 elem/s 547.14 elem/s 548.46 elem/s] + change: + time: [-10.357% -10.070% -9.7914%] (p = 0.00 < 0.05) + thrpt: [+10.854% +11.197% +11.553%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [114.29 ms 114.56 ms 114.85 ms] + thrpt: [557.26 elem/s 558.64 elem/s 559.99 elem/s] + change: + time: [-5.3321% -4.9997% -4.6928%] (p = 0.00 < 0.05) + thrpt: [+4.9238% +5.2629% +5.6325%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.6772 ms 9.7177 ms 9.7433 ms] + change: [-2.0876% -1.5249% -0.9960%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [18.819 s 18.843 s 18.865 s] + change: [-0.4633% -0.3157% -0.1802%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [20.259 s 20.281 s 20.302 s] + change: [-0.7364% -0.5329% -0.3206%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.6911 s 4.7003 s 4.7099 s] + change: [-0.7385% -0.4574% -0.1880%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [270.51 ms 271.95 ms 273.48 ms] + change: [-15.582% -14.755% -14.071%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [273.59 ms 275.33 ms 277.24 ms] + change: [-16.553% -15.895% -15.202%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [53.905 ms 54.030 ms 54.159 ms] + change: [+12.727% +13.168% +13.631%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [38.440 ms 38.578 ms 38.726 ms] + change: [+134.51% +135.76% +137.06%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_new_poly_div scale: '15' + time: [679.83 ms 681.85 ms 684.34 ms] + change: [-3.0974% -2.2218% -1.3041%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [274.13 ms 275.63 ms 277.38 ms] + change: [-2.5646% -1.7438% -0.9022%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [172.41 ms 172.75 ms 172.94 ms] + change: [-0.6570% -0.2164% +0.2532%] (p = 0.40 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.3419 ms 3.3526 ms 3.3644 ms] + change: [-64.166% -63.878% -63.541%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [15.068 ms 15.110 ms 15.154 ms] + change: [-61.172% -61.026% -60.875%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [16.577 ms 16.723 ms 16.906 ms] + change: [-58.701% -58.268% -57.825%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe + +verify_kzg_proof time: [1.2406 ms 1.2444 ms 1.2484 ms] + change: [-0.4511% +0.0321% +0.5280%] (p = 0.89 > 0.05) + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [17.546 ms 17.589 ms 17.633 ms] + change: [-56.885% -56.734% -56.582%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.8142 ms 2.8270 ms 2.8417 ms] + change: [-0.7067% -0.1811% +0.4044%] (p = 0.54 > 0.05) + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.8308 ms 2.8379 ms 2.8450 ms] + thrpt: [351.49 elem/s 352.37 elem/s 353.25 elem/s] + change: + time: [-1.6490% -1.2591% -0.8762%] (p = 0.00 < 0.05) + thrpt: [+0.8839% +1.2752% +1.6766%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [3.3480 ms 3.3969 ms 3.4544 ms] + thrpt: [578.96 elem/s 588.77 elem/s 597.38 elem/s] + change: + time: [-27.955% -26.726% -25.370%] (p = 0.00 < 0.05) + thrpt: [+33.995% +36.474% +38.802%] + Performance has improved. +Found 16 outliers among 100 measurements (16.00%) + 5 (5.00%) high mild + 11 (11.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.2863 ms 4.4888 ms 4.6921 ms] + thrpt: [852.51 elem/s 891.11 elem/s 933.21 elem/s] + change: + time: [-49.784% -47.499% -45.133%] (p = 0.00 < 0.05) + thrpt: [+82.258% +90.474% +99.141%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [6.1796 ms 6.3614 ms 6.5788 ms] + thrpt: [1.2160 Kelem/s 1.2576 Kelem/s 1.2946 Kelem/s] + change: + time: [-61.208% -60.149% -58.688%] (p = 0.00 < 0.05) + thrpt: [+142.06% +150.94% +157.79%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) high mild + 8 (8.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [11.734 ms 11.772 ms 11.818 ms] + thrpt: [1.3539 Kelem/s 1.3592 Kelem/s 1.3636 Kelem/s] + change: + time: [-61.500% -61.322% -61.144%] (p = 0.00 < 0.05) + thrpt: [+157.36% +158.55% +159.74%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [18.891 ms 18.958 ms 19.040 ms] + thrpt: [1.6806 Kelem/s 1.6880 Kelem/s 1.6940 Kelem/s] + change: + time: [-67.725% -67.586% -67.411%] (p = 0.00 < 0.05) + thrpt: [+206.85% +208.51% +209.84%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [34.830 ms 34.930 ms 35.046 ms] + thrpt: [1.8262 Kelem/s 1.8322 Kelem/s 1.8375 Kelem/s] + change: + time: [-69.626% -69.510% -69.392%] (p = 0.00 < 0.05) + thrpt: [+226.71% +227.98% +229.23%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [3.3769 ms 3.3878 ms 3.4023 ms] + change: [-65.232% -64.995% -64.764%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [6.4176 s 6.5522 s 6.6706 s] + change: [-65.933% -65.228% -64.581%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) low mild + +bench_fk_single_da scale: '14' + time: [7.9776 s 8.0486 s 8.1311 s] + change: [-60.630% -60.314% -59.843%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [1.5505 s 1.5671 s 1.5865 s] + change: [-66.985% -66.659% -66.268%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [88.742 ms 88.941 ms 89.124 ms] + change: [-67.444% -67.248% -67.062%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [91.275 ms 91.503 ms 91.709 ms] + change: [-66.981% -66.731% -66.493%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [15.137 ms 15.199 ms 15.268 ms] + change: [-72.004% -71.870% -71.734%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +bench_new_poly_div scale: '15' + time: [261.76 ms 263.41 ms 265.27 ms] + change: [-61.663% -61.369% -61.096%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [101.37 ms 101.64 ms 101.99 ms] + change: [-63.259% -62.986% -62.730%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [67.152 ms 67.581 ms 68.198 ms] + change: [-61.138% -60.870% -60.594%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.3305 ms 3.3529 ms 3.3886 ms] + change: [-0.9482% +1.5860% +5.9730%] (p = 0.47 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [11.350 ms 11.488 ms 11.659 ms] + change: [-24.820% -23.970% -22.739%] (p = 0.00 < 0.05) + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 4 (4.00%) high mild + 5 (5.00%) high severe + +compute_kzg_proof time: [12.518 ms 12.559 ms 12.600 ms] + change: [-25.757% -24.902% -24.196%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2312 ms 1.2348 ms 1.2385 ms] + change: [-0.9281% -0.4776% -0.0156%] (p = 0.04 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [13.563 ms 13.660 ms 13.781 ms] + change: [-22.909% -22.339% -21.528%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof time: [2.8064 ms 2.8146 ms 2.8228 ms] + change: [-1.0220% -0.4385% +0.1097%] (p = 0.13 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8904 ms 2.8983 ms 2.9062 ms] + thrpt: [344.09 elem/s 345.03 elem/s 345.97 elem/s] + change: + time: [+1.7631% +2.1295% +2.5121%] (p = 0.00 < 0.05) + thrpt: [-2.4505% -2.0851% -1.7326%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [3.2586 ms 3.2717 ms 3.2856 ms] + thrpt: [608.72 elem/s 611.30 elem/s 613.76 elem/s] + change: + time: [-5.3313% -3.6845% -2.2181%] (p = 0.00 < 0.05) + thrpt: [+2.2684% +3.8254% +5.6315%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.7115 ms 4.8854 ms 5.0611 ms] + thrpt: [790.35 elem/s 818.77 elem/s 848.99 elem/s] + change: + time: [+2.8055% +8.8362% +15.158%] (p = 0.00 < 0.05) + thrpt: [-13.163% -8.1188% -2.7290%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [6.1217 ms 6.2941 ms 6.5081 ms] + thrpt: [1.2292 Kelem/s 1.2710 Kelem/s 1.3068 Kelem/s] + change: + time: [-5.4353% -1.0589% +3.1377%] (p = 0.65 > 0.05) + thrpt: [-3.0423% +1.0702% +5.7477%] + No change in performance detected. +Found 10 outliers among 100 measurements (10.00%) + 1 (1.00%) high mild + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [11.766 ms 11.796 ms 11.826 ms] + thrpt: [1.3529 Kelem/s 1.3564 Kelem/s 1.3599 Kelem/s] + change: + time: [-0.2622% +0.2032% +0.6260%] (p = 0.38 > 0.05) + thrpt: [-0.6221% -0.2028% +0.2629%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [18.914 ms 18.976 ms 19.046 ms] + thrpt: [1.6801 Kelem/s 1.6864 Kelem/s 1.6919 Kelem/s] + change: + time: [-0.4499% +0.0948% +0.6089%] (p = 0.74 > 0.05) + thrpt: [-0.6053% -0.0947% +0.4520%] + No change in performance detected. +Found 7 outliers among 100 measurements (7.00%) + 5 (5.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [34.572 ms 34.679 ms 34.801 ms] + thrpt: [1.8390 Kelem/s 1.8455 Kelem/s 1.8512 Kelem/s] + change: + time: [-1.1588% -0.7212% -0.2688%] (p = 0.00 < 0.05) + thrpt: [+0.2696% +0.7265% +1.1723%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [3.3723 ms 3.3785 ms 3.3836 ms] + change: [-0.8388% -0.1665% +0.5268%] (p = 0.66 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [6.3788 s 6.5690 s 6.7634 s] + change: [-3.0270% +0.2564% +3.9363%] (p = 0.89 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [7.9286 s 7.9962 s 8.0784 s] + change: [-1.9612% -0.6501% +0.7623%] (p = 0.38 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [1.5497 s 1.5690 s 1.5879 s] + change: [-1.6455% +0.1196% +1.8581%] (p = 0.89 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [77.028 ms 77.471 ms 77.838 ms] + change: [-13.680% -13.218% -12.808%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_compute_proof_single scale: '15' + time: [77.879 ms 78.261 ms 78.787 ms] + change: [-15.024% -14.585% -14.121%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [15.246 ms 15.296 ms 15.348 ms] + change: [+0.1055% +0.6385% +1.1841%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [11.287 ms 11.328 ms 11.381 ms] + change: [-70.787% -70.636% -70.455%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_new_poly_div scale: '15' + time: [262.66 ms 263.65 ms 264.78 ms] + change: [-0.7188% +0.0934% +0.8234%] (p = 0.82 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [101.88 ms 104.17 ms 106.37 ms] + change: [-0.0421% +1.0099% +2.3764%] (p = 0.15 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [66.925 ms 67.132 ms 67.422 ms] + change: [-1.6867% -0.7201% +0.1365%] (p = 0.16 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9162 ms 8.9355 ms 8.9483 ms] + change: [+152.18% +161.20% +167.24%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [49.721 ms 49.871 ms 50.023 ms] + change: [+327.66% +334.11% +339.66%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [51.985 ms 52.131 ms 52.277 ms] + change: [+313.28% +315.11% +316.80%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2141 ms 1.2174 ms 1.2207 ms] + change: [-2.0793% -1.6641% -1.2621%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [52.857 ms 53.098 ms 53.453 ms] + change: [+284.74% +288.72% +292.57%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.5148 ms 2.5214 ms 2.5280 ms] + change: [-10.769% -10.419% -10.062%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5482 ms 2.5561 ms 2.5641 ms] + thrpt: [390.00 elem/s 391.23 elem/s 392.44 elem/s] + change: + time: [-12.167% -11.809% -11.436%] (p = 0.00 < 0.05) + thrpt: [+12.913% +13.390% +13.852%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.2076 ms 4.2217 ms 4.2363 ms] + thrpt: [472.11 elem/s 473.74 elem/s 475.33 elem/s] + change: + time: [+28.366% +29.035% +29.756%] (p = 0.00 < 0.05) + thrpt: [-22.932% -22.502% -22.098%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.4590 ms 7.4844 ms 7.5154 ms] + thrpt: [532.24 elem/s 534.45 elem/s 536.26 elem/s] + change: + time: [+47.824% +53.199% +58.800%] (p = 0.00 < 0.05) + thrpt: [-37.028% -34.725% -32.352%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.481 ms 13.512 ms 13.542 ms] + thrpt: [590.74 elem/s 592.06 elem/s 593.43 elem/s] + change: + time: [+107.54% +114.68% +120.74%] (p = 0.00 < 0.05) + thrpt: [-54.698% -53.419% -51.816%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [25.491 ms 25.559 ms 25.628 ms] + thrpt: [624.31 elem/s 626.00 elem/s 627.68 elem/s] + change: + time: [+115.88% +116.68% +117.44%] (p = 0.00 < 0.05) + thrpt: [-54.010% -53.849% -53.678%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [49.026 ms 49.144 ms 49.261 ms] + thrpt: [649.60 elem/s 651.15 elem/s 652.72 elem/s] + change: + time: [+157.89% +158.98% +160.07%] (p = 0.00 < 0.05) + thrpt: [-61.548% -61.387% -61.224%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [96.040 ms 96.297 ms 96.557 ms] + thrpt: [662.82 elem/s 664.61 elem/s 666.39 elem/s] + change: + time: [+176.50% +177.69% +178.82%] (p = 0.00 < 0.05) + thrpt: [-64.135% -63.988% -63.834%] + Performance has regressed. + +blob_to_kzg_commitment time: [34.079 ms 34.191 ms 34.307 ms] + change: [-31.750% -31.441% -31.130%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [35.066 ms 35.165 ms 35.264 ms] + change: [-32.823% -32.545% -32.259%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1125 ms 1.1155 ms 1.1184 ms] + change: [-8.8497% -8.4184% -8.0286%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [35.777 ms 35.869 ms 35.967 ms] + change: [-32.927% -32.448% -32.079%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.3200 ms 2.3258 ms 2.3316 ms] + change: [-8.0923% -7.7587% -7.4365%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3830 ms 2.3905 ms 2.3984 ms] + thrpt: [416.95 elem/s 418.32 elem/s 419.65 elem/s] + change: + time: [-6.8914% -6.4773% -6.0537%] (p = 0.00 < 0.05) + thrpt: [+6.4437% +6.9259% +7.4014%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.8880 ms 3.8994 ms 3.9110 ms] + thrpt: [511.38 elem/s 512.90 elem/s 514.41 elem/s] + change: + time: [-8.0563% -7.6337% -7.2279%] (p = 0.00 < 0.05) + thrpt: [+7.7910% +8.2646% +8.7622%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.9553 ms 6.9728 ms 6.9899 ms] + thrpt: [572.25 elem/s 573.66 elem/s 575.10 elem/s] + change: + time: [-7.2887% -6.8354% -6.4712%] (p = 0.00 < 0.05) + thrpt: [+6.9189% +7.3369% +7.8617%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [13.099 ms 13.140 ms 13.183 ms] + thrpt: [606.83 elem/s 608.82 elem/s 610.71 elem/s] + change: + time: [-3.1117% -2.7520% -2.3583%] (p = 0.00 < 0.05) + thrpt: [+2.4153% +2.8299% +3.2116%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [24.252 ms 24.327 ms 24.403 ms] + thrpt: [655.66 elem/s 657.70 elem/s 659.74 elem/s] + change: + time: [-5.2172% -4.8197% -4.4186%] (p = 0.00 < 0.05) + thrpt: [+4.6229% +5.0638% +5.5044%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.280 ms 47.402 ms 47.530 ms] + thrpt: [673.26 elem/s 675.07 elem/s 676.81 elem/s] + change: + time: [-3.8918% -3.5438% -3.2265%] (p = 0.00 < 0.05) + thrpt: [+3.3340% +3.6740% +4.0494%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [93.682 ms 93.899 ms 94.120 ms] + thrpt: [679.98 elem/s 681.59 elem/s 683.16 elem/s] + change: + time: [-2.8417% -2.4908% -2.1272%] (p = 0.00 < 0.05) + thrpt: [+2.1735% +2.5545% +2.9248%] + Performance has improved. + +blob_to_kzg_commitment time: [33.901 ms 33.987 ms 34.072 ms] + change: [-1.0244% -0.5977% -0.1894%] (p = 0.01 < 0.05) + Change within noise threshold. + +compute_kzg_proof time: [34.983 ms 35.068 ms 35.153 ms] + change: [-0.6598% -0.2781% +0.1005%] (p = 0.15 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1206 ms 1.1280 ms 1.1368 ms] + change: [-0.0494% +0.4357% +0.9501%] (p = 0.11 > 0.05) + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [35.542 ms 35.630 ms 35.718 ms] + change: [-1.0329% -0.6666% -0.3064%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.2238 ms 2.2297 ms 2.2355 ms] + change: [-4.4639% -4.1288% -3.7689%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2898 ms 2.2979 ms 2.3068 ms] + thrpt: [433.51 elem/s 435.17 elem/s 436.72 elem/s] + change: + time: [-4.3384% -3.8727% -3.3868%] (p = 0.00 < 0.05) + thrpt: [+3.5055% +4.0287% +4.5351%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.7044 ms 3.7144 ms 3.7245 ms] + thrpt: [536.99 elem/s 538.44 elem/s 539.90 elem/s] + change: + time: [-5.1162% -4.7446% -4.3659%] (p = 0.00 < 0.05) + thrpt: [+4.5652% +4.9809% +5.3920%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.5100 ms 6.5334 ms 6.5584 ms] + thrpt: [609.90 elem/s 612.24 elem/s 614.44 elem/s] + change: + time: [-6.7067% -6.3012% -5.8899%] (p = 0.00 < 0.05) + thrpt: [+6.2586% +6.7249% +7.1888%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.989 ms 12.025 ms 12.063 ms] + thrpt: [663.18 elem/s 665.26 elem/s 667.30 elem/s] + change: + time: [-8.9041% -8.4838% -8.0854%] (p = 0.00 < 0.05) + thrpt: [+8.7967% +9.2703% +9.7745%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [22.831 ms 22.909 ms 22.993 ms] + thrpt: [695.87 elem/s 698.41 elem/s 700.81 elem/s] + change: + time: [-6.2582% -5.8297% -5.3829%] (p = 0.00 < 0.05) + thrpt: [+5.6892% +6.1906% +6.6760%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.622 ms 44.742 ms 44.859 ms] + thrpt: [713.35 elem/s 715.21 elem/s 717.13 elem/s] + change: + time: [-5.9684% -5.6123% -5.2456%] (p = 0.00 < 0.05) + thrpt: [+5.5360% +5.9460% +6.3472%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [87.023 ms 87.257 ms 87.494 ms] + thrpt: [731.48 elem/s 733.46 elem/s 735.44 elem/s] + change: + time: [-7.4091% -7.0732% -6.7427%] (p = 0.00 < 0.05) + thrpt: [+7.2302% +7.6116% +8.0019%] + Performance has improved. + +bench_fft_fr scale: '15' + time: [9.3175 ms 9.3764 ms 9.4145 ms] + change: [+175.35% +177.50% +179.60%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [20.295 s 20.317 s 20.339 s] + change: [+200.34% +209.29% +218.50%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_single_da scale: '14' + time: [21.492 s 21.513 s 21.532 s] + change: [+166.23% +169.04% +171.34%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [4.7023 s 4.7115 s 4.7210 s] + change: [+196.71% +200.28% +204.06%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [320.90 ms 321.95 ms 322.84 ms] + change: [+314.24% +316.52% +318.76%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_compute_proof_single scale: '15' + time: [332.95 ms 334.51 ms 336.19 ms] + change: [+324.70% +327.56% +330.24%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [50.708 ms 50.958 ms 51.237 ms] + change: [+230.84% +233.01% +235.06%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_new_poly_div scale: '15' + time: [649.07 ms 657.15 ms 665.43 ms] + change: [+145.77% +149.25% +152.67%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [284.79 ms 286.31 ms 287.82 ms] + change: [+173.83% +177.83% +180.99%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [164.91 ms 165.95 ms 167.09 ms] + change: [+146.65% +148.53% +150.41%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0305 ms 9.0573 ms 9.0987 ms] + change: [+0.8020% +1.3163% +1.8290%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [42.010 ms 42.136 ms 42.263 ms] + change: [+23.484% +23.978% +24.469%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_kzg_proof time: [44.422 ms 44.540 ms 44.661 ms] + change: [+26.578% +27.013% +27.482%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2151 ms 1.2190 ms 1.2233 ms] + change: [+8.3535% +8.9748% +9.5636%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [44.568 ms 44.683 ms 44.800 ms] + change: [+24.940% +25.408% +25.856%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5226 ms 2.5333 ms 2.5471 ms] + change: [+13.074% +13.613% +14.288%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5622 ms 2.5711 ms 2.5809 ms] + thrpt: [387.47 elem/s 388.94 elem/s 390.29 elem/s] + change: + time: [+11.313% +11.887% +12.455%] (p = 0.00 < 0.05) + thrpt: [-11.076% -10.624% -10.163%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.1707 ms 4.1810 ms 4.1914 ms] + thrpt: [477.17 elem/s 478.35 elem/s 479.54 elem/s] + change: + time: [+12.137% +12.562% +12.959%] (p = 0.00 < 0.05) + thrpt: [-11.472% -11.160% -10.823%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [7.4714 ms 7.4936 ms 7.5159 ms] + thrpt: [532.21 elem/s 533.79 elem/s 535.37 elem/s] + change: + time: [+14.158% +14.696% +15.252%] (p = 0.00 < 0.05) + thrpt: [-13.234% -12.813% -12.402%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [18.219 ms 18.276 ms 18.333 ms] + thrpt: [436.36 elem/s 437.73 elem/s 439.11 elem/s] + change: + time: [+51.337% +51.978% +52.638%] (p = 0.00 < 0.05) + thrpt: [-34.485% -34.201% -33.922%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [31.710 ms 31.817 ms 31.933 ms] + thrpt: [501.05 elem/s 502.88 elem/s 504.57 elem/s] + change: + time: [+38.176% +38.884% +39.630%] (p = 0.00 < 0.05) + thrpt: [-28.382% -27.997% -27.629%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [55.166 ms 55.369 ms 55.601 ms] + thrpt: [575.52 elem/s 577.94 elem/s 580.06 elem/s] + change: + time: [+23.194% +23.753% +24.264%] (p = 0.00 < 0.05) + thrpt: [-19.526% -19.194% -18.827%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [101.26 ms 101.52 ms 101.79 ms] + thrpt: [628.72 elem/s 630.40 elem/s 632.05 elem/s] + change: + time: [+15.917% +16.349% +16.779%] (p = 0.00 < 0.05) + thrpt: [-14.368% -14.052% -13.732%] + Performance has regressed. + +blob_to_kzg_commitment time: [34.036 ms 34.118 ms 34.200 ms] + change: [-19.331% -19.028% -18.714%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [35.009 ms 35.097 ms 35.184 ms] + change: [-21.484% -21.201% -20.912%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_kzg_proof time: [1.1292 ms 1.1334 ms 1.1377 ms] + change: [-7.7811% -7.3444% -6.9175%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.805 ms 35.895 ms 35.985 ms] + change: [-19.957% -19.667% -19.370%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3177 ms 2.3239 ms 2.3301 ms] + change: [-8.8147% -8.2652% -7.7988%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3454 ms 2.3535 ms 2.3617 ms] + thrpt: [423.43 elem/s 424.90 elem/s 426.37 elem/s] + change: + time: [-8.9323% -8.4636% -8.0213%] (p = 0.00 < 0.05) + thrpt: [+8.7208% +9.2462% +9.8084%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.8568 ms 3.8680 ms 3.8794 ms] + thrpt: [515.55 elem/s 517.06 elem/s 518.57 elem/s] + change: + time: [-7.8602% -7.4865% -7.1489%] (p = 0.00 < 0.05) + thrpt: [+7.6993% +8.0923% +8.5308%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.9076 ms 6.9293 ms 6.9512 ms] + thrpt: [575.44 elem/s 577.26 elem/s 579.08 elem/s] + change: + time: [-7.9174% -7.5296% -7.0982%] (p = 0.00 < 0.05) + thrpt: [+7.6405% +8.1427% +8.5982%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.086 ms 13.120 ms 13.153 ms] + thrpt: [608.24 elem/s 609.78 elem/s 611.35 elem/s] + change: + time: [-28.501% -28.215% -27.919%] (p = 0.00 < 0.05) + thrpt: [+38.732% +39.304% +39.861%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [24.292 ms 24.353 ms 24.414 ms] + thrpt: [655.36 elem/s 657.00 elem/s 658.66 elem/s] + change: + time: [-23.786% -23.458% -23.136%] (p = 0.00 < 0.05) + thrpt: [+30.099% +30.648% +31.209%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [47.274 ms 47.381 ms 47.490 ms] + thrpt: [673.83 elem/s 675.37 elem/s 676.91 elem/s] + change: + time: [-14.828% -14.427% -14.054%] (p = 0.00 < 0.05) + thrpt: [+16.352% +16.859% +17.410%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [93.596 ms 93.863 ms 94.153 ms] + thrpt: [679.74 elem/s 681.84 elem/s 683.79 elem/s] + change: + time: [-7.9037% -7.5449% -7.1919%] (p = 0.00 < 0.05) + thrpt: [+7.7492% +8.1607% +8.5820%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [34.008 ms 34.095 ms 34.185 ms] + change: [-0.4132% -0.0694% +0.2882%] (p = 0.70 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +compute_kzg_proof time: [35.055 ms 35.160 ms 35.268 ms] + change: [-0.2014% +0.1772% +0.5657%] (p = 0.38 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_kzg_proof time: [1.1198 ms 1.1238 ms 1.1278 ms] + change: [-1.3738% -0.9345% -0.4807%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.641 ms 35.724 ms 35.807 ms] + change: [-0.8180% -0.4757% -0.1379%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.2196 ms 2.2260 ms 2.2322 ms] + change: [-4.5840% -4.2141% -3.8402%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2847 ms 2.2928 ms 2.3008 ms] + thrpt: [434.63 elem/s 436.15 elem/s 437.69 elem/s] + change: + time: [-3.0637% -2.5787% -2.0977%] (p = 0.00 < 0.05) + thrpt: [+2.1426% +2.6470% +3.1605%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.6961 ms 3.7066 ms 3.7170 ms] + thrpt: [538.07 elem/s 539.57 elem/s 541.11 elem/s] + change: + time: [-4.5699% -4.1722% -3.7825%] (p = 0.00 < 0.05) + thrpt: [+3.9312% +4.3539% +4.7888%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.5286 ms 6.5487 ms 6.5690 ms] + thrpt: [608.92 elem/s 610.80 elem/s 612.69 elem/s] + change: + time: [-5.9072% -5.4927% -5.0661%] (p = 0.00 < 0.05) + thrpt: [+5.3365% +5.8119% +6.2780%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [11.995 ms 12.025 ms 12.056 ms] + thrpt: [663.56 elem/s 665.26 elem/s 666.95 elem/s] + change: + time: [-8.6663% -8.3400% -7.9911%] (p = 0.00 < 0.05) + thrpt: [+8.6852% +9.0988% +9.4886%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.891 ms 22.961 ms 23.032 ms] + thrpt: [694.68 elem/s 696.82 elem/s 698.95 elem/s] + change: + time: [-6.0772% -5.7154% -5.3409%] (p = 0.00 < 0.05) + thrpt: [+5.6423% +6.0618% +6.4704%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [44.526 ms 44.626 ms 44.726 ms] + thrpt: [715.47 elem/s 717.07 elem/s 718.68 elem/s] + change: + time: [-6.1078% -5.8155% -5.5284%] (p = 0.00 < 0.05) + thrpt: [+5.8519% +6.1746% +6.5051%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [87.470 ms 87.737 ms 88.022 ms] + thrpt: [727.09 elem/s 729.45 elem/s 731.68 elem/s] + change: + time: [-6.9279% -6.5268% -6.1498%] (p = 0.00 < 0.05) + thrpt: [+6.5528% +6.9825% +7.4435%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.3555 ms 9.3813 ms 9.4082 ms] + change: [-0.8468% -0.1355% +0.5681%] (p = 0.74 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [20.237 s 20.253 s 20.269 s] + change: [-0.4518% -0.3171% -0.1817%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.546 s 21.566 s 21.586 s] + change: [+0.1235% +0.2469% +0.3827%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [4.6883 s 4.6948 s 4.7014 s] + change: [-0.6015% -0.3538% -0.1114%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [296.29 ms 298.26 ms 300.29 ms] + change: [-8.0140% -7.3572% -6.6688%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [307.13 ms 308.81 ms 310.53 ms] + change: [-8.3976% -7.6836% -6.9369%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [43.527 ms 43.719 ms 43.849 ms] + change: [-14.761% -14.241% -13.660%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [654.79 ms 657.50 ms 660.47 ms] + change: [-1.2433% +0.0542% +1.4434%] (p = 0.95 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [283.95 ms 285.80 ms 287.61 ms] + change: [-0.9612% -0.1773% +0.6206%] (p = 0.69 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [164.07 ms 164.86 ms 166.17 ms] + change: [-1.8329% -1.2310% -0.5612%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.8866 ms 8.9065 ms 8.9205 ms] + change: [-1.9407% -1.1706% -0.3653%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +blob_to_kzg_commitment time: [35.915 ms 36.014 ms 36.118 ms] + change: [+5.2190% +5.6300% +6.0493%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [36.953 ms 37.049 ms 37.151 ms] + change: [+4.9636% +5.3745% +5.8206%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2127 ms 1.2163 ms 1.2200 ms] + change: [+7.9374% +8.4018% +8.8305%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [37.694 ms 37.786 ms 37.880 ms] + change: [+5.4046% +5.7730% +6.1272%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5191 ms 2.5266 ms 2.5343 ms] + change: [+13.037% +13.505% +13.957%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5260 ms 2.5322 ms 2.5383 ms] + thrpt: [393.97 elem/s 394.92 elem/s 395.88 elem/s] + change: + time: [+9.9699% +10.441% +10.935%] (p = 0.00 < 0.05) + thrpt: [-9.8570% -9.4542% -9.0660%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [4.1550 ms 4.1660 ms 4.1767 ms] + thrpt: [478.85 elem/s 480.08 elem/s 481.35 elem/s] + change: + time: [+11.962% +12.393% +12.813%] (p = 0.00 < 0.05) + thrpt: [-11.358% -11.026% -10.684%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/4 + time: [7.4402 ms 7.4610 ms 7.4819 ms] + thrpt: [534.63 elem/s 536.12 elem/s 537.62 elem/s] + change: + time: [+13.469% +13.930% +14.393%] (p = 0.00 < 0.05) + thrpt: [-12.582% -12.227% -11.870%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [13.447 ms 13.477 ms 13.509 ms] + thrpt: [592.19 elem/s 593.58 elem/s 594.94 elem/s] + change: + time: [+11.704% +12.076% +12.474%] (p = 0.00 < 0.05) + thrpt: [-11.091% -10.775% -10.478%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [25.678 ms 25.748 ms 25.818 ms] + thrpt: [619.73 elem/s 621.41 elem/s 623.09 elem/s] + change: + time: [+11.679% +12.136% +12.592%] (p = 0.00 < 0.05) + thrpt: [-11.184% -10.823% -10.458%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [49.261 ms 49.396 ms 49.530 ms] + thrpt: [646.08 elem/s 647.82 elem/s 649.59 elem/s] + change: + time: [+10.296% +10.690% +11.052%] (p = 0.00 < 0.05) + thrpt: [-9.9520% -9.6573% -9.3348%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [95.736 ms 95.944 ms 96.156 ms] + thrpt: [665.58 elem/s 667.06 elem/s 668.51 elem/s] + change: + time: [+8.9300% +9.3540% +9.7675%] (p = 0.00 < 0.05) + thrpt: [-8.8984% -8.5539% -8.1979%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.746 ms 33.839 ms 33.935 ms] + change: [-6.4120% -6.0402% -5.6812%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [34.979 ms 35.057 ms 35.136 ms] + change: [-5.7217% -5.3772% -5.0517%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1207 ms 1.1251 ms 1.1295 ms] + change: [-8.2586% -7.8401% -7.4246%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.597 ms 35.686 ms 35.774 ms] + change: [-5.8997% -5.5581% -5.2452%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.3109 ms 2.3170 ms 2.3235 ms] + change: [-8.6617% -8.2924% -7.9139%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3560 ms 2.3621 ms 2.3680 ms] + thrpt: [422.30 elem/s 423.36 elem/s 424.44 elem/s] + change: + time: [-7.0288% -6.7184% -6.3897%] (p = 0.00 < 0.05) + thrpt: [+6.8259% +7.2023% +7.5602%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.8852 ms 3.8993 ms 3.9144 ms] + thrpt: [510.94 elem/s 512.92 elem/s 514.77 elem/s] + change: + time: [-6.8229% -6.4023% -5.9819%] (p = 0.00 < 0.05) + thrpt: [+6.3625% +6.8402% +7.3226%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.0549 ms 7.0771 ms 7.0998 ms] + thrpt: [563.40 elem/s 565.20 elem/s 566.98 elem/s] + change: + time: [-5.5688% -5.1449% -4.7394%] (p = 0.00 < 0.05) + thrpt: [+4.9752% +5.4239% +5.8972%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.763 ms 12.817 ms 12.882 ms] + thrpt: [621.01 elem/s 624.19 elem/s 626.83 elem/s] + change: + time: [-5.3815% -4.9035% -4.3832%] (p = 0.00 < 0.05) + thrpt: [+4.5842% +5.1563% +5.6876%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [25.150 ms 25.222 ms 25.294 ms] + thrpt: [632.55 elem/s 634.38 elem/s 636.18 elem/s] + change: + time: [-2.4310% -2.0442% -1.6522%] (p = 0.00 < 0.05) + thrpt: [+1.6800% +2.0869% +2.4916%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.176 ms 47.299 ms 47.426 ms] + thrpt: [674.73 elem/s 676.55 elem/s 678.32 elem/s] + change: + time: [-4.6111% -4.2461% -3.8721%] (p = 0.00 < 0.05) + thrpt: [+4.0281% +4.4344% +4.8340%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [94.072 ms 94.358 ms 94.666 ms] + thrpt: [676.06 elem/s 678.27 elem/s 680.33 elem/s] + change: + time: [-2.0064% -1.6532% -1.2794%] (p = 0.00 < 0.05) + thrpt: [+1.2960% +1.6810% +2.0475%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +blob_to_kzg_commitment time: [33.901 ms 34.000 ms 34.111 ms] + change: [+0.0563% +0.4771% +0.9211%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [34.932 ms 35.027 ms 35.123 ms] + change: [-0.4361% -0.0862% +0.2527%] (p = 0.64 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1045 ms 1.1079 ms 1.1115 ms] + change: [-1.7582% -1.3192% -0.8695%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [35.539 ms 35.641 ms 35.747 ms] + change: [-0.5095% -0.1250% +0.2658%] (p = 0.53 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.2129 ms 2.2204 ms 2.2287 ms] + change: [-4.5738% -4.1723% -3.7443%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.2621 ms 2.2693 ms 2.2768 ms] + thrpt: [439.21 elem/s 440.67 elem/s 442.06 elem/s] + change: + time: [-4.3375% -3.9283% -3.5267%] (p = 0.00 < 0.05) + thrpt: [+3.6556% +4.0890% +4.5341%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.6627 ms 3.6712 ms 3.6798 ms] + thrpt: [543.51 elem/s 544.78 elem/s 546.05 elem/s] + change: + time: [-6.2804% -5.8484% -5.4454%] (p = 0.00 < 0.05) + thrpt: [+5.7590% +6.2117% +6.7012%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.5011 ms 6.5150 ms 6.5289 ms] + thrpt: [612.66 elem/s 613.97 elem/s 615.28 elem/s] + change: + time: [-8.2948% -7.9434% -7.5839%] (p = 0.00 < 0.05) + thrpt: [+8.2062% +8.6288% +9.0451%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.910 ms 11.940 ms 11.969 ms] + thrpt: [668.39 elem/s 670.04 elem/s 671.72 elem/s] + change: + time: [-7.3499% -6.8433% -6.3771%] (p = 0.00 < 0.05) + thrpt: [+6.8115% +7.3460% +7.9330%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [22.729 ms 22.784 ms 22.841 ms] + thrpt: [700.49 elem/s 702.25 elem/s 703.94 elem/s] + change: + time: [-9.9947% -9.6651% -9.3244%] (p = 0.00 < 0.05) + thrpt: [+10.283% +10.699% +11.105%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.330 ms 44.428 ms 44.523 ms] + thrpt: [718.72 elem/s 720.27 elem/s 721.86 elem/s] + change: + time: [-6.4002% -6.0697% -5.7612%] (p = 0.00 < 0.05) + thrpt: [+6.1134% +6.4619% +6.8379%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/64 + time: [86.660 ms 86.871 ms 87.088 ms] + thrpt: [734.89 elem/s 736.73 elem/s 738.51 elem/s] + change: + time: [-8.3160% -7.9347% -7.5740%] (p = 0.00 < 0.05) + thrpt: [+8.1947% +8.6185% +9.0703%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.2882 ms 9.3022 ms 9.3243 ms] + change: [-1.0587% -0.6943% -0.3087%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.173 s 20.191 s 20.209 s] + change: [-0.4248% -0.3039% -0.1832%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.457 s 21.488 s 21.523 s] + change: [-0.5464% -0.3647% -0.1819%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [4.7015 s 4.7088 s 4.7172 s] + change: [+0.0880% +0.2979% +0.5175%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [256.04 ms 257.63 ms 259.55 ms] + change: [-14.442% -13.623% -12.769%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [257.17 ms 258.43 ms 259.74 ms] + change: [-16.937% -16.313% -15.702%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [51.270 ms 51.477 ms 51.714 ms] + change: [+17.501% +18.035% +18.561%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [36.278 ms 36.422 ms 36.634 ms] + change: [+221.10% +223.88% +226.93%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [662.23 ms 664.86 ms 667.67 ms] + change: [+0.5138% +1.1188% +1.7633%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [287.60 ms 289.11 ms 290.75 ms] + change: [+0.3131% +1.1578% +2.0205%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [166.02 ms 167.10 ms 168.09 ms] + change: [+0.5863% +1.3029% +2.0089%] (p = 0.00 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9069 ms 8.9270 ms 8.9463 ms] + change: [-1.2603% -0.4333% +0.2687%] (p = 0.34 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [35.040 ms 35.148 ms 35.260 ms] + change: [+2.9036% +3.3754% +3.8194%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [36.808 ms 36.935 ms 37.067 ms] + change: [+4.9802% +5.4490% +5.8990%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +verify_kzg_proof time: [1.2307 ms 1.2339 ms 1.2371 ms] + change: [+11.003% +11.443% +11.894%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [37.173 ms 37.269 ms 37.367 ms] + change: [+4.1511% +4.5665% +4.9928%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5414 ms 2.5494 ms 2.5577 ms] + change: [+14.258% +14.817% +15.332%] (p = 0.00 < 0.05) + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5508 ms 2.5607 ms 2.5718 ms] + thrpt: [388.83 elem/s 390.52 elem/s 392.04 elem/s] + change: + time: [+12.265% +12.842% +13.488%] (p = 0.00 < 0.05) + thrpt: [-11.885% -11.380% -10.925%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.0742 ms 4.0939 ms 4.1153 ms] + thrpt: [485.99 elem/s 488.54 elem/s 490.90 elem/s] + change: + time: [+10.929% +11.512% +12.198%] (p = 0.00 < 0.05) + thrpt: [-10.872% -10.324% -9.8526%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.0788 ms 7.1039 ms 7.1293 ms] + thrpt: [561.06 elem/s 563.07 elem/s 565.06 elem/s] + change: + time: [+8.6205% +9.0400% +9.4910%] (p = 0.00 < 0.05) + thrpt: [-8.6683% -8.2905% -7.9363%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [13.005 ms 13.048 ms 13.091 ms] + thrpt: [611.11 elem/s 613.10 elem/s 615.16 elem/s] + change: + time: [+8.8090% +9.2874% +9.7622%] (p = 0.00 < 0.05) + thrpt: [-8.8939% -8.4981% -8.0958%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [25.060 ms 25.132 ms 25.202 ms] + thrpt: [634.87 elem/s 636.64 elem/s 638.46 elem/s] + change: + time: [+9.9105% +10.305% +10.712%] (p = 0.00 < 0.05) + thrpt: [-9.6754% -9.3423% -9.0168%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [48.326 ms 48.449 ms 48.571 ms] + thrpt: [658.82 elem/s 660.49 elem/s 662.17 elem/s] + change: + time: [+8.6697% +9.0510% +9.4191%] (p = 0.00 < 0.05) + thrpt: [-8.6083% -8.2998% -7.9780%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [95.363 ms 95.657 ms 95.974 ms] + thrpt: [666.84 elem/s 669.06 elem/s 671.12 elem/s] + change: + time: [+9.6797% +10.114% +10.560%] (p = 0.00 < 0.05) + thrpt: [-9.5513% -9.1848% -8.8255%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe + +blob_to_kzg_commitment time: [34.001 ms 34.086 ms 34.174 ms] + change: [-3.4388% -3.0208% -2.6323%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [34.960 ms 35.045 ms 35.133 ms] + change: [-5.5206% -5.1180% -4.7079%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1152 ms 1.1184 ms 1.1218 ms] + change: [-9.1840% -8.8393% -8.4624%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [35.502 ms 35.572 ms 35.643 ms] + change: [-4.8650% -4.5528% -4.2352%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3102 ms 2.3160 ms 2.3218 ms] + change: [-9.5122% -9.1545% -8.7879%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3572 ms 2.3631 ms 2.3691 ms] + thrpt: [422.11 elem/s 423.16 elem/s 424.22 elem/s] + change: + time: [-8.1666% -7.7143% -7.2693%] (p = 0.00 < 0.05) + thrpt: [+7.8391% +8.3592% +8.8928%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.8724 ms 3.8852 ms 3.8989 ms] + thrpt: [512.97 elem/s 514.78 elem/s 516.48 elem/s] + change: + time: [-5.6771% -5.0981% -4.5208%] (p = 0.00 < 0.05) + thrpt: [+4.7348% +5.3719% +6.0188%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.9071 ms 6.9305 ms 6.9575 ms] + thrpt: [574.92 elem/s 577.16 elem/s 579.12 elem/s] + change: + time: [-2.9252% -2.4414% -1.9504%] (p = 0.00 < 0.05) + thrpt: [+1.9892% +2.5025% +3.0134%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.009 ms 13.042 ms 13.075 ms] + thrpt: [611.84 elem/s 613.41 elem/s 614.94 elem/s] + change: + time: [-0.4644% -0.0496% +0.3740%] (p = 0.82 > 0.05) + thrpt: [-0.3726% +0.0496% +0.4665%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [24.290 ms 24.364 ms 24.441 ms] + thrpt: [654.64 elem/s 656.69 elem/s 658.72 elem/s] + change: + time: [-3.4688% -3.0532% -2.6679%] (p = 0.00 < 0.05) + thrpt: [+2.7410% +3.1493% +3.5935%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [47.570 ms 47.672 ms 47.773 ms] + thrpt: [669.83 elem/s 671.25 elem/s 672.70 elem/s] + change: + time: [-1.9345% -1.6037% -1.2741%] (p = 0.00 < 0.05) + thrpt: [+1.2906% +1.6298% +1.9727%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [94.042 ms 94.302 ms 94.567 ms] + thrpt: [676.77 elem/s 678.67 elem/s 680.55 elem/s] + change: + time: [-1.8532% -1.4164% -1.0296%] (p = 0.00 < 0.05) + thrpt: [+1.0404% +1.4368% +1.8882%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.756 ms 33.858 ms 33.993 ms] + change: [-1.0708% -0.6680% -0.2510%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +compute_kzg_proof time: [35.024 ms 35.100 ms 35.176 ms] + change: [-0.1626% +0.1582% +0.4799%] (p = 0.35 > 0.05) + No change in performance detected. + +verify_kzg_proof time: [1.1128 ms 1.1156 ms 1.1186 ms] + change: [-1.1128% -0.7322% -0.3523%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [35.818 ms 35.934 ms 36.066 ms] + change: [+0.6008% +1.0177% +1.4449%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.2161 ms 2.2208 ms 2.2254 ms] + change: [-4.4212% -4.1105% -3.7831%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2637 ms 2.2697 ms 2.2758 ms] + thrpt: [439.40 elem/s 440.58 elem/s 441.76 elem/s] + change: + time: [-4.2899% -3.9535% -3.5782%] (p = 0.00 < 0.05) + thrpt: [+3.7110% +4.1162% +4.4822%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.6631 ms 3.6736 ms 3.6842 ms] + thrpt: [542.86 elem/s 544.42 elem/s 545.98 elem/s] + change: + time: [-5.8680% -5.4450% -5.0228%] (p = 0.00 < 0.05) + thrpt: [+5.2885% +5.7586% +6.2337%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.4882 ms 6.5052 ms 6.5220 ms] + thrpt: [613.30 elem/s 614.90 elem/s 616.50 elem/s] + change: + time: [-6.5727% -6.1369% -5.7236%] (p = 0.00 < 0.05) + thrpt: [+6.0711% +6.5381% +7.0351%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [11.977 ms 12.015 ms 12.053 ms] + thrpt: [663.73 elem/s 665.85 elem/s 667.93 elem/s] + change: + time: [-8.2447% -7.8770% -7.4860%] (p = 0.00 < 0.05) + thrpt: [+8.0917% +8.5505% +8.9855%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [22.888 ms 22.947 ms 23.007 ms] + thrpt: [695.43 elem/s 697.25 elem/s 699.06 elem/s] + change: + time: [-6.1858% -5.8166% -5.4161%] (p = 0.00 < 0.05) + thrpt: [+5.7262% +6.1758% +6.5936%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.140 ms 44.231 ms 44.323 ms] + thrpt: [721.98 elem/s 723.48 elem/s 724.96 elem/s] + change: + time: [-7.4948% -7.2192% -6.9409%] (p = 0.00 < 0.05) + thrpt: [+7.4586% +7.7809% +8.1020%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [86.576 ms 86.803 ms 87.035 ms] + thrpt: [735.33 elem/s 737.30 elem/s 739.23 elem/s] + change: + time: [-8.3124% -7.9513% -7.6095%] (p = 0.00 < 0.05) + thrpt: [+8.2362% +8.6381% +9.0660%] + Performance has improved. + +bench_fft_fr scale: '15' + time: [9.2371 ms 9.2598 ms 9.2966 ms] + change: [-1.0592% -0.6013% -0.2103%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.183 s 20.216 s 20.251 s] + change: [-0.0578% +0.1241% +0.3211%] (p = 0.25 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [21.523 s 21.556 s 21.595 s] + change: [+0.0971% +0.3186% +0.5595%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high severe + +bench_fk_multi_da scale: '14' + time: [4.6992 s 4.7082 s 4.7166 s] + change: [-0.2804% -0.0120% +0.2316%] (p = 0.94 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [224.58 ms 225.48 ms 226.37 ms] + change: [-13.194% -12.479% -11.862%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [226.51 ms 226.88 ms 227.25 ms] + change: [-12.671% -12.208% -11.755%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [35.121 ms 35.454 ms 35.817 ms] + change: [-31.994% -31.548% -31.069%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [652.37 ms 656.95 ms 661.74 ms] + change: [-2.0510% -1.1889% -0.2842%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [281.60 ms 282.58 ms 283.53 ms] + change: [-2.8881% -2.2600% -1.6524%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [165.74 ms 166.31 ms 167.22 ms] + change: [-0.7143% +0.2540% +1.5588%] (p = 0.69 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.2400 ms 3.2913 ms 3.3451 ms] + change: [-63.566% -63.285% -62.846%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [14.267 ms 14.331 ms 14.401 ms] + change: [-57.915% -57.674% -57.396%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe + +compute_kzg_proof time: [15.494 ms 15.551 ms 15.611 ms] + change: [-55.883% -55.695% -55.489%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +verify_kzg_proof time: [1.2112 ms 1.2148 ms 1.2185 ms] + change: [+8.4612% +8.8859% +9.3208%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [16.153 ms 16.217 ms 16.288 ms] + change: [-55.108% -54.871% -54.649%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.5052 ms 2.5111 ms 2.5167 ms] + change: [+12.742% +13.071% +13.434%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof_batch/1 + time: [2.5492 ms 2.5566 ms 2.5640 ms] + thrpt: [390.01 elem/s 391.15 elem/s 392.28 elem/s] + change: + time: [+12.191% +12.638% +13.075%] (p = 0.00 < 0.05) + thrpt: [-11.563% -11.220% -10.867%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.8972 ms 2.9050 ms 2.9128 ms] + thrpt: [686.62 elem/s 688.46 elem/s 690.32 elem/s] + change: + time: [-21.231% -20.922% -20.612%] (p = 0.00 < 0.05) + thrpt: [+25.963% +26.457% +26.954%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [4.3025 ms 4.4647 ms 4.6235 ms] + thrpt: [865.14 elem/s 895.92 elem/s 929.68 elem/s] + change: + time: [-33.951% -31.367% -28.887%] (p = 0.00 < 0.05) + thrpt: [+40.621% +45.702% +51.403%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [5.4981 ms 5.6407 ms 5.8190 ms] + thrpt: [1.3748 Kelem/s 1.4183 Kelem/s 1.4551 Kelem/s] + change: + time: [-54.189% -53.052% -51.528%] (p = 0.00 < 0.05) + thrpt: [+106.31% +113.00% +118.29%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 8 (8.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [10.692 ms 10.873 ms 11.082 ms] + thrpt: [1.4438 Kelem/s 1.4715 Kelem/s 1.4965 Kelem/s] + change: + time: [-53.394% -52.616% -51.777%] (p = 0.00 < 0.05) + thrpt: [+107.37% +111.04% +114.56%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 1 (1.00%) high mild + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [17.192 ms 17.262 ms 17.342 ms] + thrpt: [1.8452 Kelem/s 1.8538 Kelem/s 1.8613 Kelem/s] + change: + time: [-61.149% -60.973% -60.771%] (p = 0.00 < 0.05) + thrpt: [+154.91% +156.24% +157.40%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [30.469 ms 30.544 ms 30.620 ms] + thrpt: [2.0901 Kelem/s 2.0953 Kelem/s 2.1005 Kelem/s] + change: + time: [-64.943% -64.813% -64.686%] (p = 0.00 < 0.05) + thrpt: [+183.18% +184.19% +185.25%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [11.293 ms 11.356 ms 11.422 ms] + change: [-21.346% -20.761% -20.151%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [12.238 ms 12.290 ms 12.342 ms] + change: [-21.451% -20.970% -20.511%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1202 ms 1.1230 ms 1.1258 ms] + change: [-7.7686% -7.4500% -7.1151%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [12.871 ms 13.009 ms 13.169 ms] + change: [-20.701% -19.779% -18.680%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +verify_blob_kzg_proof time: [2.2217 ms 2.2282 ms 2.2346 ms] + change: [-11.583% -11.266% -10.933%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.1054 ms 2.1128 ms 2.1201 ms] + thrpt: [471.67 elem/s 473.29 elem/s 474.97 elem/s] + change: + time: [-17.761% -17.356% -16.996%] (p = 0.00 < 0.05) + thrpt: [+20.476% +21.001% +21.597%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [2.7225 ms 2.7471 ms 2.7726 ms] + thrpt: [721.35 elem/s 728.05 elem/s 734.63 elem/s] + change: + time: [-6.2933% -5.4378% -4.5797%] (p = 0.00 < 0.05) + thrpt: [+4.7995% +5.7505% +6.7159%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.6349 ms 3.6838 ms 3.7346 ms] + thrpt: [1.0711 Kelem/s 1.0858 Kelem/s 1.1004 Kelem/s] + change: + time: [-20.551% -17.492% -14.192%] (p = 0.00 < 0.05) + thrpt: [+16.539% +21.200% +25.866%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [5.5598 ms 5.5970 ms 5.6349 ms] + thrpt: [1.4197 Kelem/s 1.4293 Kelem/s 1.4389 Kelem/s] + change: + time: [-3.8568% -0.7753% +1.9216%] (p = 0.63 > 0.05) + thrpt: [-1.8853% +0.7814% +4.0115%] + No change in performance detected. +verify_blob_kzg_proof_batch/16 + time: [9.2631 ms 9.3684 ms 9.4881 ms] + thrpt: [1.6863 Kelem/s 1.7079 Kelem/s 1.7273 Kelem/s] + change: + time: [-15.726% -13.841% -12.030%] (p = 0.00 < 0.05) + thrpt: [+13.676% +16.065% +18.661%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [19.316 ms 19.589 ms 19.902 ms] + thrpt: [1.6079 Kelem/s 1.6336 Kelem/s 1.6566 Kelem/s] + change: + time: [+11.772% +13.484% +15.256%] (p = 0.00 < 0.05) + thrpt: [-13.237% -11.882% -10.532%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [33.625 ms 34.068 ms 34.544 ms] + thrpt: [1.8527 Kelem/s 1.8786 Kelem/s 1.9033 Kelem/s] + change: + time: [+10.042% +11.537% +13.269%] (p = 0.00 < 0.05) + thrpt: [-11.715% -10.343% -9.1255%] + Performance has regressed. +Found 10 outliers among 100 measurements (10.00%) + 9 (9.00%) high mild + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [11.202 ms 11.272 ms 11.349 ms] + change: [-1.5694% -0.7362% +0.1149%] (p = 0.10 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +compute_kzg_proof time: [12.143 ms 12.199 ms 12.255 ms] + change: [-1.3518% -0.7434% -0.1054%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1158 ms 1.1190 ms 1.1222 ms] + change: [-0.8251% -0.4866% -0.1303%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [12.328 ms 12.379 ms 12.430 ms] + change: [-6.0895% -4.8488% -3.7533%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.1020 ms 2.1086 ms 2.1152 ms] + change: [-5.7671% -5.3640% -4.9676%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.1165 ms 2.1284 ms 2.1403 ms] + thrpt: [467.23 elem/s 469.85 elem/s 472.48 elem/s] + change: + time: [+0.0943% +0.7342% +1.4024%] (p = 0.03 < 0.05) + thrpt: [-1.3830% -0.7288% -0.0942%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [2.5876 ms 2.6063 ms 2.6253 ms] + thrpt: [761.82 elem/s 767.37 elem/s 772.92 elem/s] + change: + time: [-6.2499% -5.1236% -4.0495%] (p = 0.00 < 0.05) + thrpt: [+4.2204% +5.4003% +6.6665%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/4 + time: [3.0729 ms 3.1110 ms 3.1490 ms] + thrpt: [1.2702 Kelem/s 1.2858 Kelem/s 1.3017 Kelem/s] + change: + time: [-17.096% -15.548% -14.014%] (p = 0.00 < 0.05) + thrpt: [+16.298% +18.411% +20.621%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [4.5710 ms 4.6180 ms 4.6706 ms] + thrpt: [1.7128 Kelem/s 1.7324 Kelem/s 1.7502 Kelem/s] + change: + time: [-18.552% -17.492% -16.480%] (p = 0.00 < 0.05) + thrpt: [+19.732% +21.200% +22.778%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [7.6737 ms 7.7159 ms 7.7600 ms] + thrpt: [2.0619 Kelem/s 2.0736 Kelem/s 2.0850 Kelem/s] + change: + time: [-18.772% -17.639% -16.577%] (p = 0.00 < 0.05) + thrpt: [+19.871% +21.417% +23.111%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [15.029 ms 15.259 ms 15.500 ms] + thrpt: [2.0646 Kelem/s 2.0971 Kelem/s 2.1293 Kelem/s] + change: + time: [-23.779% -22.105% -20.526%] (p = 0.00 < 0.05) + thrpt: [+25.828% +28.379% +31.198%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [28.106 ms 28.766 ms 29.472 ms] + thrpt: [2.1716 Kelem/s 2.2249 Kelem/s 2.2771 Kelem/s] + change: + time: [-18.106% -15.564% -13.287%] (p = 0.00 < 0.05) + thrpt: [+15.323% +18.432% +22.108%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [3.2765 ms 3.2992 ms 3.3147 ms] + change: [-64.586% -64.372% -64.160%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [6.6877 s 6.8775 s 7.0658 s] + change: [-66.918% -65.981% -65.013%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [7.9647 s 8.0866 s 8.2113 s] + change: [-63.203% -62.486% -61.890%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [1.5323 s 1.5507 s 1.5713 s] + change: [-67.411% -67.065% -66.637%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_commit_to_poly scale: '15' + time: [83.839 ms 84.033 ms 84.270 ms] + change: [-62.888% -62.654% -62.377%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [85.853 ms 86.026 ms 86.337 ms] + change: [-62.144% -62.018% -61.859%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [14.296 ms 14.346 ms 14.408 ms] + change: [-59.668% -59.367% -59.071%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [244.42 ms 246.88 ms 250.11 ms] + change: [-62.896% -62.421% -61.805%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [102.91 ms 103.54 ms 104.20 ms] + change: [-63.533% -63.298% -63.037%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [65.674 ms 66.191 ms 67.080 ms] + change: [-60.962% -60.362% -59.662%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.2468 ms 3.2568 ms 3.2793 ms] + change: [-1.1755% -0.1061% +0.9402%] (p = 0.86 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [10.515 ms 10.551 ms 10.593 ms] + change: [-7.1258% -6.3979% -5.7049%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [11.555 ms 11.597 ms 11.643 ms] + change: [-5.4940% -4.9323% -4.3817%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2163 ms 1.2196 ms 1.2228 ms] + change: [+8.5247% +8.9554% +9.3946%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [12.396 ms 12.436 ms 12.479 ms] + change: [-0.0679% +0.4651% +0.9832%] (p = 0.09 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.5251 ms 2.5329 ms 2.5408 ms] + change: [+19.584% +20.119% +20.645%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.6428 ms 2.6504 ms 2.6582 ms] + thrpt: [376.19 elem/s 377.30 elem/s 378.38 elem/s] + change: + time: [+23.724% +24.530% +25.312%] (p = 0.00 < 0.05) + thrpt: [-20.199% -19.698% -19.175%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.9746 ms 2.9841 ms 2.9936 ms] + thrpt: [668.09 elem/s 670.21 elem/s 672.36 elem/s] + change: + time: [+13.608% +14.496% +15.391%] (p = 0.00 < 0.05) + thrpt: [-13.338% -12.661% -11.978%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [4.7503 ms 4.8669 ms 4.9794 ms] + thrpt: [803.30 elem/s 821.89 elem/s 842.06 elem/s] + change: + time: [+52.146% +56.440% +60.443%] (p = 0.00 < 0.05) + thrpt: [-37.672% -36.078% -34.274%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [5.7451 ms 5.9804 ms 6.2448 ms] + thrpt: [1.2811 Kelem/s 1.3377 Kelem/s 1.3925 Kelem/s] + change: + time: [+24.355% +29.504% +35.387%] (p = 0.00 < 0.05) + thrpt: [-26.138% -22.782% -19.585%] + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 2 (2.00%) high mild + 16 (16.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [10.790 ms 10.971 ms 11.176 ms] + thrpt: [1.4317 Kelem/s 1.4584 Kelem/s 1.4828 Kelem/s] + change: + time: [+39.821% +42.186% +44.726%] (p = 0.00 < 0.05) + thrpt: [-30.904% -29.670% -28.480%] + Performance has regressed. +Found 16 outliers among 100 measurements (16.00%) + 3 (3.00%) high mild + 13 (13.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [17.220 ms 17.265 ms 17.311 ms] + thrpt: [1.8485 Kelem/s 1.8534 Kelem/s 1.8583 Kelem/s] + change: + time: [+11.349% +13.149% +14.911%] (p = 0.00 < 0.05) + thrpt: [-12.976% -11.621% -10.193%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [30.593 ms 30.856 ms 31.195 ms] + thrpt: [2.0516 Kelem/s 2.0741 Kelem/s 2.0920 Kelem/s] + change: + time: [+4.5153% +7.2675% +10.050%] (p = 0.00 < 0.05) + thrpt: [-9.1323% -6.7751% -4.3203%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +blob_to_kzg_commitment time: [11.299 ms 11.355 ms 11.415 ms] + change: [+6.9079% +7.6241% +8.3361%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [12.015 ms 12.070 ms 12.129 ms] + change: [+3.4278% +4.0777% +4.7143%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1095 ms 1.1123 ms 1.1155 ms] + change: [-8.3119% -7.8496% -7.3455%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [12.697 ms 12.760 ms 12.828 ms] + change: [+2.0039% +2.6080% +3.2112%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.2089 ms 2.2144 ms 2.2199 ms] + change: [-12.924% -12.576% -12.213%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.1515 ms 2.1641 ms 2.1769 ms] + thrpt: [459.36 elem/s 462.09 elem/s 464.79 elem/s] + change: + time: [-18.884% -18.349% -17.828%] (p = 0.00 < 0.05) + thrpt: [+21.696% +22.473% +23.280%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [2.7212 ms 2.7449 ms 2.7697 ms] + thrpt: [722.11 elem/s 728.62 elem/s 734.96 elem/s] + change: + time: [-8.9168% -8.0159% -7.0634%] (p = 0.00 < 0.05) + thrpt: [+7.6002% +8.7144% +9.7898%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.6356 ms 3.6845 ms 3.7329 ms] + thrpt: [1.0715 Kelem/s 1.0856 Kelem/s 1.1002 Kelem/s] + change: + time: [-26.249% -24.294% -22.210%] (p = 0.00 < 0.05) + thrpt: [+28.551% +32.090% +35.591%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [6.2714 ms 6.3853 ms 6.5282 ms] + thrpt: [1.2254 Kelem/s 1.2529 Kelem/s 1.2756 Kelem/s] + change: + time: [+1.7985% +6.7696% +11.722%] (p = 0.00 < 0.05) + thrpt: [-10.492% -6.3404% -1.7667%] + Performance has regressed. +Found 21 outliers among 100 measurements (21.00%) + 16 (16.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [9.1914 ms 9.3013 ms 9.4255 ms] + thrpt: [1.6975 Kelem/s 1.7202 Kelem/s 1.7408 Kelem/s] + change: + time: [-17.059% -15.218% -13.377%] (p = 0.00 < 0.05) + thrpt: [+15.442% +17.950% +20.568%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 2 (2.00%) high mild + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [18.401 ms 18.738 ms 19.107 ms] + thrpt: [1.6748 Kelem/s 1.7078 Kelem/s 1.7391 Kelem/s] + change: + time: [+6.4959% +8.5272% +10.972%] (p = 0.00 < 0.05) + thrpt: [-9.8874% -7.8572% -6.0997%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [33.263 ms 33.755 ms 34.371 ms] + thrpt: [1.8621 Kelem/s 1.8960 Kelem/s 1.9241 Kelem/s] + change: + time: [+7.4351% +9.3955% +11.882%] (p = 0.00 < 0.05) + thrpt: [-10.620% -8.5886% -6.9206%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +blob_to_kzg_commitment time: [11.170 ms 11.223 ms 11.278 ms] + change: [-1.8805% -1.1632% -0.5128%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [12.163 ms 12.239 ms 12.323 ms] + change: [+0.6141% +1.4042% +2.2445%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 6 outliers among 100 measurements (6.00%) + 5 (5.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1068 ms 1.1099 ms 1.1132 ms] + change: [-1.3465% -0.8289% -0.3204%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [12.761 ms 12.871 ms 13.002 ms] + change: [-0.0619% +0.8687% +2.0510%] (p = 0.12 > 0.05) + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof time: [2.1012 ms 2.1072 ms 2.1132 ms] + change: [-5.1839% -4.8397% -4.4980%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof_batch/1 + time: [2.0694 ms 2.0779 ms 2.0864 ms] + thrpt: [479.29 elem/s 481.26 elem/s 483.24 elem/s] + change: + time: [-4.6771% -3.9836% -3.2688%] (p = 0.00 < 0.05) + thrpt: [+3.3793% +4.1489% +4.9066%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.5671 ms 2.5877 ms 2.6086 ms] + thrpt: [766.70 elem/s 772.88 elem/s 779.09 elem/s] + change: + time: [-6.8633% -5.7272% -4.6085%] (p = 0.00 < 0.05) + thrpt: [+4.8311% +6.0751% +7.3691%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.0673 ms 3.0958 ms 3.1253 ms] + thrpt: [1.2799 Kelem/s 1.2921 Kelem/s 1.3041 Kelem/s] + change: + time: [-17.333% -15.979% -14.601%] (p = 0.00 < 0.05) + thrpt: [+17.098% +19.018% +20.968%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [4.6292 ms 4.6843 ms 4.7450 ms] + thrpt: [1.6860 Kelem/s 1.7078 Kelem/s 1.7282 Kelem/s] + change: + time: [-28.432% -26.639% -25.064%] (p = 0.00 < 0.05) + thrpt: [+33.448% +36.311% +39.728%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 2 (2.00%) high mild + 11 (11.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [7.6064 ms 7.6467 ms 7.6886 ms] + thrpt: [2.0810 Kelem/s 2.0924 Kelem/s 2.1035 Kelem/s] + change: + time: [-18.938% -17.789% -16.720%] (p = 0.00 < 0.05) + thrpt: [+20.077% +21.639% +23.363%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [14.717 ms 14.904 ms 15.113 ms] + thrpt: [2.1174 Kelem/s 2.1470 Kelem/s 2.1743 Kelem/s] + change: + time: [-22.228% -20.457% -18.591%] (p = 0.00 < 0.05) + thrpt: [+22.837% +25.718% +28.582%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [28.192 ms 28.735 ms 29.306 ms] + thrpt: [2.1838 Kelem/s 2.2272 Kelem/s 2.2702 Kelem/s] + change: + time: [-17.089% -14.872% -12.643%] (p = 0.00 < 0.05) + thrpt: [+14.473% +17.470% +20.612%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 9 (9.00%) high mild + +bench_fft_fr scale: '15' + time: [3.2420 ms 3.2567 ms 3.2726 ms] + change: [-1.9405% -1.3755% -0.8004%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [6.5664 s 6.6950 s 6.8206 s] + change: [-5.9519% -2.6537% +0.5765%] (p = 0.15 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [7.9804 s 8.0596 s 8.1396 s] + change: [-2.1605% -0.3337% +1.5515%] (p = 0.73 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_multi_da scale: '14' + time: [1.5278 s 1.5458 s 1.5637 s] + change: [-2.0016% -0.3146% +1.3903%] (p = 0.74 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [71.502 ms 71.992 ms 72.307 ms] + change: [-15.374% -14.735% -14.192%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [73.297 ms 73.518 ms 73.802 ms] + change: [-15.050% -14.585% -14.062%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [14.189 ms 14.380 ms 14.528 ms] + change: [-1.2395% -0.2459% +0.8019%] (p = 0.66 > 0.05) + No change in performance detected. + +bench_g1_lincomb with precomputation points: '4096' + time: [10.466 ms 10.502 ms 10.550 ms] + change: [-71.524% -71.260% -70.995%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [241.56 ms 243.72 ms 246.77 ms] + change: [-2.8980% -1.2804% +0.3123%] (p = 0.16 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_recover scale: '15' + time: [102.85 ms 103.33 ms 103.92 ms] + change: [-1.3732% +0.1799% +2.1312%] (p = 0.87 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [64.894 ms 65.485 ms 65.789 ms] + change: [-3.2680% -1.7751% -0.4653%] (p = 0.03 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.1820 ms 3.1927 ms 3.2093 ms] + change: [-2.6493% -1.9740% -1.3380%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [12.900 ms 13.240 ms 13.599 ms] + change: [+14.592% +17.974% +21.324%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [14.097 ms 14.488 ms 14.902 ms] + change: [+15.343% +18.376% +21.922%] (p = 0.00 < 0.05) + Performance has regressed. +Found 11 outliers among 100 measurements (11.00%) + 9 (9.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [1.2219 ms 1.2253 ms 1.2286 ms] + change: [+9.2080% +9.7563% +10.281%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [14.557 ms 14.843 ms 15.148 ms] + change: [+12.771% +15.317% +18.000%] (p = 0.00 < 0.05) + Performance has regressed. +Found 19 outliers among 100 measurements (19.00%) + 9 (9.00%) high mild + 10 (10.00%) high severe + +verify_blob_kzg_proof time: [2.5191 ms 2.5269 ms 2.5359 ms] + change: [+19.422% +19.919% +20.479%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5405 ms 2.5507 ms 2.5631 ms] + thrpt: [390.15 elem/s 392.05 elem/s 393.62 elem/s] + change: + time: [+22.065% +22.753% +23.468%] (p = 0.00 < 0.05) + thrpt: [-19.008% -18.535% -18.077%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.9558 ms 2.9978 ms 3.0512 ms] + thrpt: [655.49 elem/s 667.16 elem/s 676.63 elem/s] + change: + time: [+13.925% +15.847% +17.998%] (p = 0.00 < 0.05) + thrpt: [-15.253% -13.679% -12.223%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.4987 ms 3.6854 ms 3.8775 ms] + thrpt: [1.0316 Kelem/s 1.0854 Kelem/s 1.1433 Kelem/s] + change: + time: [+13.391% +19.045% +25.925%] (p = 0.00 < 0.05) + thrpt: [-20.588% -15.998% -11.810%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [5.4634 ms 5.5019 ms 5.5578 ms] + thrpt: [1.4394 Kelem/s 1.4540 Kelem/s 1.4643 Kelem/s] + change: + time: [+15.718% +17.453% +19.461%] (p = 0.00 < 0.05) + thrpt: [-16.291% -14.860% -13.583%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [10.640 ms 10.764 ms 10.917 ms] + thrpt: [1.4656 Kelem/s 1.4864 Kelem/s 1.5038 Kelem/s] + change: + time: [+38.992% +40.773% +43.099%] (p = 0.00 < 0.05) + thrpt: [-30.118% -28.964% -28.053%] + Performance has regressed. +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [87.968 ms 90.377 ms 92.853 ms] + thrpt: [344.63 elem/s 354.07 elem/s 363.77 elem/s] + change: + time: [+488.06% +506.37% +523.98%] (p = 0.00 < 0.05) + thrpt: [-83.974% -83.508% -82.995%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [103.75 ms 106.13 ms 108.48 ms] + thrpt: [589.99 elem/s 603.03 elem/s 616.88 elem/s] + change: + time: [+258.62% +269.34% +280.72%] (p = 0.00 < 0.05) + thrpt: [-73.734% -72.925% -72.116%] + Performance has regressed. + +blob_to_kzg_commitment time: [11.338 ms 11.422 ms 11.520 ms] + change: [-16.091% -13.737% -11.365%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high severe + +compute_kzg_proof time: [12.291 ms 12.370 ms 12.463 ms] + change: [-17.047% -14.619% -12.170%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +verify_kzg_proof time: [1.1071 ms 1.1110 ms 1.1151 ms] + change: [-9.8105% -9.3687% -8.9181%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [12.493 ms 12.549 ms 12.607 ms] + change: [-17.228% -15.451% -13.747%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.2253 ms 2.2296 ms 2.2341 ms] + change: [-12.108% -11.768% -11.434%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.1180 ms 2.1289 ms 2.1401 ms] + thrpt: [467.28 elem/s 469.73 elem/s 472.14 elem/s] + change: + time: [-17.102% -16.537% -16.004%] (p = 0.00 < 0.05) + thrpt: [+19.053% +19.813% +20.630%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.7434 ms 2.7693 ms 2.7956 ms] + thrpt: [715.40 elem/s 722.21 elem/s 729.03 elem/s] + change: + time: [-9.4583% -7.6228% -6.0162%] (p = 0.00 < 0.05) + thrpt: [+6.4013% +8.2518% +10.446%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [3.4708 ms 3.5002 ms 3.5328 ms] + thrpt: [1.1323 Kelem/s 1.1428 Kelem/s 1.1525 Kelem/s] + change: + time: [-9.8089% -5.0245% +0.1246%] (p = 0.06 > 0.05) + thrpt: [-0.1245% +5.2903% +10.876%] + No change in performance detected. +Found 8 outliers among 100 measurements (8.00%) + 5 (5.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.3490 ms 5.3798 ms 5.4115 ms] + thrpt: [1.4783 Kelem/s 1.4871 Kelem/s 1.4956 Kelem/s] + change: + time: [-3.3315% -2.2198% -1.2479%] (p = 0.00 < 0.05) + thrpt: [+1.2637% +2.2702% +3.4463%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [10.001 ms 10.129 ms 10.258 ms] + thrpt: [1.5597 Kelem/s 1.5796 Kelem/s 1.5998 Kelem/s] + change: + time: [-7.6521% -5.9044% -4.2026%] (p = 0.00 < 0.05) + thrpt: [+4.3870% +6.2749% +8.2862%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [17.620 ms 17.760 ms 17.904 ms] + thrpt: [1.7873 Kelem/s 1.8018 Kelem/s 1.8161 Kelem/s] + change: + time: [-80.902% -80.349% -79.792%] (p = 0.00 < 0.05) + thrpt: [+394.84% +408.87% +423.62%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [33.836 ms 34.224 ms 34.628 ms] + thrpt: [1.8482 Kelem/s 1.8700 Kelem/s 1.8915 Kelem/s] + change: + time: [-68.548% -67.753% -66.925%] (p = 0.00 < 0.05) + thrpt: [+202.35% +210.10% +217.94%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +blob_to_kzg_commitment time: [11.200 ms 11.279 ms 11.370 ms] + change: [-2.3496% -1.2486% -0.1600%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [12.097 ms 12.153 ms 12.210 ms] + change: [-2.6109% -1.7584% -0.9338%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1139 ms 1.1171 ms 1.1202 ms] + change: [+0.3189% +0.8120% +1.3119%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [12.492 ms 12.566 ms 12.646 ms] + change: [-0.6813% +0.1304% +0.9039%] (p = 0.74 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.1117 ms 2.1199 ms 2.1282 ms] + change: [-5.3235% -4.9193% -4.4794%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.0469 ms 2.0570 ms 2.0676 ms] + thrpt: [483.64 elem/s 486.14 elem/s 488.55 elem/s] + change: + time: [-4.1038% -3.3746% -2.6768%] (p = 0.00 < 0.05) + thrpt: [+2.7504% +3.4925% +4.2794%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.5431 ms 2.5608 ms 2.5787 ms] + thrpt: [775.58 elem/s 781.00 elem/s 786.43 elem/s] + change: + time: [-8.5804% -7.5278% -6.4161%] (p = 0.00 < 0.05) + thrpt: [+6.8560% +8.1406% +9.3857%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.0229 ms 3.0426 ms 3.0624 ms] + thrpt: [1.3061 Kelem/s 1.3147 Kelem/s 1.3232 Kelem/s] + change: + time: [-14.064% -13.072% -12.177%] (p = 0.00 < 0.05) + thrpt: [+13.865% +15.038% +16.366%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [4.5777 ms 4.6394 ms 4.7066 ms] + thrpt: [1.6997 Kelem/s 1.7244 Kelem/s 1.7476 Kelem/s] + change: + time: [-14.990% -13.762% -12.391%] (p = 0.00 < 0.05) + thrpt: [+14.144% +15.958% +17.633%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [7.5562 ms 7.6327 ms 7.7192 ms] + thrpt: [2.0728 Kelem/s 2.0962 Kelem/s 2.1175 Kelem/s] + change: + time: [-25.897% -24.644% -23.346%] (p = 0.00 < 0.05) + thrpt: [+30.456% +32.703% +34.947%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [15.387 ms 15.632 ms 15.899 ms] + thrpt: [2.0127 Kelem/s 2.0471 Kelem/s 2.0796 Kelem/s] + change: + time: [-13.476% -11.984% -10.379%] (p = 0.00 < 0.05) + thrpt: [+11.581% +13.616% +15.575%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 5 (5.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [28.689 ms 29.487 ms 30.322 ms] + thrpt: [2.1107 Kelem/s 2.1704 Kelem/s 2.2308 Kelem/s] + change: + time: [-16.434% -13.842% -11.309%] (p = 0.00 < 0.05) + thrpt: [+12.752% +16.066% +19.666%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [3.1994 ms 3.2184 ms 3.2313 ms] + change: [-1.9307% -1.2977% -0.6952%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [6.6239 s 6.7835 s 6.9378 s] + change: [-1.7627% +1.3226% +4.4847%] (p = 0.42 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [8.1265 s 8.2382 s 8.3555 s] + change: [+0.5741% +2.2155% +3.9663%] (p = 0.03 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [1.5382 s 1.5464 s 1.5568 s] + change: [-1.2593% +0.0400% +1.3838%] (p = 0.95 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [67.935 ms 68.298 ms 68.636 ms] + change: [-5.9179% -5.2391% -4.5821%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [70.102 ms 70.503 ms 70.988 ms] + change: [-5.7354% -4.6519% -3.7343%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [12.797 ms 12.913 ms 13.012 ms] + change: [-12.315% -10.799% -9.2925%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [241.96 ms 246.23 ms 250.68 ms] + change: [-1.0908% +1.0320% +3.0632%] (p = 0.38 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [100.88 ms 101.46 ms 102.40 ms] + change: [-3.5784% -1.3018% +0.9861%] (p = 0.33 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [64.052 ms 64.525 ms 64.844 ms] + change: [-2.0447% -1.3567% -0.6036%] (p = 0.00 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust binding (rust-kzg with blst backend) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [11.934 ms 11.960 ms 11.986 ms] + change: [-44.956% -44.789% -44.628%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [13.295 ms 13.408 ms 13.545 ms] + change: [-42.140% -41.637% -41.107%] (p = 0.00 < 0.05) + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) high mild + 6 (6.00%) high severe + +compute_blob_kzg_proof time: [14.218 ms 14.267 ms 14.321 ms] + change: [-41.002% -40.706% -40.419%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 6 (6.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.3510 ms 1.3549 ms 1.3586 ms] + change: [-1.9676% -1.6268% -1.2691%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low severe + +verify_blob_kzg_proof time: [3.2865 ms 3.2948 ms 3.3031 ms] + change: [-2.1746% -1.8422% -1.4982%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [3.3224 ms 3.3328 ms 3.3439 ms] + thrpt: [299.06 elem/s 300.05 elem/s 300.99 elem/s] + change: + time: [-1.8109% -1.4078% -0.9978%] (p = 0.00 < 0.05) + thrpt: [+1.0078% +1.4279% +1.8443%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.7836 ms 3.7920 ms 3.8006 ms] + thrpt: [526.23 elem/s 527.43 elem/s 528.59 elem/s] + change: + time: [-1.5322% -1.1995% -0.8561%] (p = 0.00 < 0.05) + thrpt: [+0.8635% +1.2140% +1.5561%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.7061 ms 3.7251 ms 3.7488 ms] + thrpt: [1.0670 Kelem/s 1.0738 Kelem/s 1.0793 Kelem/s] + change: + time: [-47.280% -46.979% -46.624%] (p = 0.00 < 0.05) + thrpt: [+87.351% +88.606% +89.682%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [6.9735 ms 7.0056 ms 7.0434 ms] + thrpt: [1.1358 Kelem/s 1.1419 Kelem/s 1.1472 Kelem/s] + change: + time: [-48.836% -48.516% -48.184%] (p = 0.00 < 0.05) + thrpt: [+92.990% +94.234% +95.450%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [13.559 ms 13.604 ms 13.656 ms] + thrpt: [1.1717 Kelem/s 1.1761 Kelem/s 1.1801 Kelem/s] + change: + time: [-49.400% -49.165% -48.915%] (p = 0.00 < 0.05) + thrpt: [+95.754% +96.715% +97.628%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [22.537 ms 22.783 ms 23.084 ms] + thrpt: [1.3862 Kelem/s 1.4046 Kelem/s 1.4199 Kelem/s] + change: + time: [-49.870% -49.275% -48.558%] (p = 0.00 < 0.05) + thrpt: [+94.392% +97.143% +99.482%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [41.302 ms 41.432 ms 41.585 ms] + thrpt: [1.5390 Kelem/s 1.5447 Kelem/s 1.5495 Kelem/s] + change: + time: [-51.020% -50.807% -50.607%] (p = 0.00 < 0.05) + thrpt: [+102.46% +103.28% +104.16%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ go binding (rust-kzg with blst backend) ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/ethereum/c-kzg-4844/bindings/go +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +Benchmark/BlobToKZGCommitment-4 96 12537654 ns/op +Benchmark/ComputeKZGProof-4 90 13158703 ns/op +Benchmark/ComputeBlobKZGProof-4 85 14213389 ns/op +Benchmark/VerifyKZGProof-4 842 1407782 ns/op +Benchmark/VerifyBlobKZGProof-4 357 3300108 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-4 362 3325073 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-4 309 3730755 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-4 313 3756795 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-4 171 6997212 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-4 85 13488582 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-4 48 22072407 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-4 27 42196875 ns/op +PASS +ok github.com/ethereum/c-kzg-4844/bindings/go 22.954s + + + +********** BENCHMARKING ON 8 CORES ********** + + + + + +~~~~~~~~~~ go-kzg-4844 ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/crate-crypto/go-kzg-4844 +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +BenchmarkComputeChallenge-8 3771 315030 ns/op 32 B/op 1 allocs/op +Benchmark/BlobToKZGCommitment-8 128 8966471 ns/op 382512 B/op 74 allocs/op +Benchmark/ComputeKZGProof-8 100 10683386 ns/op 907966 B/op 85 allocs/op +Benchmark/ComputeBlobKZGProof-8 100 10826046 ns/op 908365 B/op 92 allocs/op +Benchmark/VerifyKZGProof-8 841 1405664 ns/op 6616 B/op 55 allocs/op +Benchmark/VerifyBlobKZGProof-8 471 2473507 ns/op 400480 B/op 64 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-8 480 2477174 ns/op 400736 B/op 66 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-8 270 4375411 ns/op 884993 B/op 499 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-8 171 6953639 ns/op 1676386 B/op 551 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-8 100 11987849 ns/op 3259021 B/op 651 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-8 55 22027370 ns/op 6423223 B/op 826 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-8 27 42274297 ns/op 12751480 B/op 1186 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-8 13 81543526 ns/op 25386498 B/op 1841 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=1)-8 484 2468576 ns/op 400664 B/op 67 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=2)-8 456 2603711 ns/op 801548 B/op 136 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=4)-8 351 3279832 ns/op 1603103 B/op 273 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=8)-8 253 4120859 ns/op 3206333 B/op 546 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=16)-8 169 5977611 ns/op 6412390 B/op 1089 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=32)-8 99 12545892 ns/op 12824805 B/op 2183 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=64)-8 49 23600155 ns/op 25650091 B/op 4384 allocs/op +BenchmarkDeserializeBlob-8 7694 156210 ns/op 131614 B/op 6 allocs/op +PASS +ok github.com/crate-crypto/go-kzg-4844 34.024s + + + +~~~~~~~~~~ rust binding (c-kzg-4844) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [50.221 ms 50.341 ms 50.460 ms] + change: [-2.2124% -1.7002% -1.2429%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [52.732 ms 52.861 ms 52.989 ms] + change: [-4.5638% -4.2141% -3.8982%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [53.534 ms 53.695 ms 53.856 ms] + change: [-1.2323% -0.8705% -0.5091%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.3541 ms 1.3589 ms 1.3639 ms] + change: [-1.6521% -1.2441% -0.8141%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.6311 ms 2.6384 ms 2.6460 ms] + change: [-1.7743% -1.3774% -0.9813%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.6276 ms 2.6373 ms 2.6473 ms] + thrpt: [377.74 elem/s 379.17 elem/s 380.57 elem/s] + change: + time: [-2.3028% -1.7699% -1.2380%] (p = 0.00 < 0.05) + thrpt: [+1.2535% +1.8018% +2.3571%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.4208 ms 4.4346 ms 4.4488 ms] + thrpt: [449.56 elem/s 451.00 elem/s 452.41 elem/s] + change: + time: [-8.2800% -6.5472% -4.9916%] (p = 0.00 < 0.05) + thrpt: [+5.2538% +7.0058% +9.0275%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.8578 ms 7.8772 ms 7.8965 ms] + thrpt: [506.56 elem/s 507.80 elem/s 509.05 elem/s] + change: + time: [-8.3365% -6.5298% -5.1092%] (p = 0.00 < 0.05) + thrpt: [+5.3843% +6.9860% +9.0947%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [14.893 ms 14.941 ms 14.989 ms] + thrpt: [533.71 elem/s 535.44 elem/s 537.17 elem/s] + change: + time: [-7.4692% -5.3672% -3.5509%] (p = 0.00 < 0.05) + thrpt: [+3.6816% +5.6716% +8.0721%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [28.727 ms 28.805 ms 28.884 ms] + thrpt: [553.93 elem/s 555.45 elem/s 556.97 elem/s] + change: + time: [-5.5942% -3.8426% -2.4821%] (p = 0.00 < 0.05) + thrpt: [+2.5452% +3.9961% +5.9257%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [56.395 ms 56.580 ms 56.781 ms] + thrpt: [563.57 elem/s 565.57 elem/s 567.42 elem/s] + change: + time: [-5.4957% -4.7952% -4.0593%] (p = 0.00 < 0.05) + thrpt: [+4.2311% +5.0367% +5.8153%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [111.97 ms 112.23 ms 112.50 ms] + thrpt: [568.88 elem/s 570.24 elem/s 571.56 elem/s] + change: + time: [-7.3696% -5.1915% -3.3334%] (p = 0.00 < 0.05) + thrpt: [+3.4483% +5.4758% +7.9559%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + + + + +~~~~~~~~~~ constantine ~~~~~~~~~~ + + + Executing task bench_eth_eip4844_kzg in /root/benches/constantine/constantine.nimble +bench xoshiro512** seed: 1720355375 +Warmup: 1.0248 s, result 224 (displayed to avoid compiler optimizing warmup away) + + +Compiled with Clang +Optimization level => + no optimization: false + release: true + danger: true + inline assembly: true +Using Constantine with 64-bit limbs +Running on Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz + +⚠️ Cycles measurements are approximate and use the CPU nominal clock: Turbo-Boost and overclocking will skew them. +i.e. a 20% overclock will be about 20% off (assuming no dynamic frequency scaling) + +================================================================================================================= + +Trusted Setup loaded successfully +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +blob_to_kzg_commitment serial 29.488 ops/s 33911532 ns/op 91346571 CPU cycles (approx) +blob_to_kzg_commitment 16 threads 153.226 ops/s 6526320 ns/op 17579750 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 5.196x + +compute_kzg_proof serial 29.079 ops/s 34389393 ns/op 92633771 CPU cycles (approx) +compute_kzg_proof 16 threads 142.613 ops/s 7011984 ns/op 18887957 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.904x + +compute_blob_kzg_proof serial 28.532 ops/s 35048376 ns/op 94408865 CPU cycles (approx) +compute_blob_kzg_proof 16 threads 128.866 ops/s 7759981 ns/op 20902832 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.516x + +verify_kzg_proof serial 945.821 ops/s 1057282 ns/op 2847957 CPU cycles (approx) +verify_kzg_proof is always serial + +verify_blob_kzg_proof serial 467.154 ops/s 2140622 ns/op 5766112 CPU cycles (approx) +verify_blob_kzg_proof 16 threads 516.974 ops/s 1934333 ns/op 5210445 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.107x + +verify_blob_kzg_proof (batch 1) serial 463.489 ops/s 2157548 ns/op 5811719 CPU cycles (approx) +verify_blob_kzg_proof (batch 1) 16 threads 521.268 ops/s 1918400 ns/op 5167526 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.125x + +verify_blob_kzg_proof (batch 2) serial 277.509 ops/s 3603489 ns/op 9706583 CPU cycles (approx) +verify_blob_kzg_proof (batch 2) 16 threads 446.142 ops/s 2241440 ns/op 6037676 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.608x + +verify_blob_kzg_proof (batch 4) serial 158.420 ops/s 6312325 ns/op 17003299 CPU cycles (approx) +verify_blob_kzg_proof (batch 4) 16 threads 454.142 ops/s 2201954 ns/op 5930967 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.866x + +verify_blob_kzg_proof (batch 8) serial 86.302 ops/s 11587197 ns/op 31212071 CPU cycles (approx) +verify_blob_kzg_proof (batch 8) 16 threads 266.412 ops/s 3753578 ns/op 10110894 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 3.087x + +verify_blob_kzg_proof (batch 16) serial 45.498 ops/s 21978875 ns/op 59203889 CPU cycles (approx) +verify_blob_kzg_proof (batch 16) 16 threads 182.332 ops/s 5484490 ns/op 14773402 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.007x + +verify_blob_kzg_proof (batch 32) serial 23.293 ops/s 42931060 ns/op 115642249 CPU cycles (approx) +verify_blob_kzg_proof (batch 32) 16 threads 94.732 ops/s 10556073 ns/op 28434592 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.067x + +verify_blob_kzg_proof (batch 64) serial 11.892 ops/s 84091460 ns/op 226514955 CPU cycles (approx) +verify_blob_kzg_proof (batch 64) 16 threads 50.547 ops/s 19783540 ns/op 53290379 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.251x + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8285 ms 7.8840 ms 7.9309 ms] + change: [+143.23% +144.92% +146.48%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [75.934 ms 76.138 ms 76.346 ms] + change: [+569.28% +575.04% +580.03%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [79.903 ms 80.127 ms 80.359 ms] + change: [+555.76% +559.33% +562.99%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.6608 ms 2.6680 ms 2.6754 ms] + change: [+137.97% +139.05% +140.08%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [80.824 ms 81.046 ms 81.278 ms] + change: [+540.51% +544.98% +549.23%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof time: [4.0576 ms 4.0674 ms 4.0775 ms] + change: [+91.007% +91.870% +92.752%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1222 ms 4.1322 ms 4.1423 ms] + thrpt: [241.41 elem/s 242.00 elem/s 242.59 elem/s] + change: + time: [+99.710% +100.88% +101.98%] (p = 0.00 < 0.05) + thrpt: [-50.491% -50.219% -49.927%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [6.1952 ms 6.2123 ms 6.2309 ms] + thrpt: [320.98 elem/s 321.94 elem/s 322.83 elem/s] + change: + time: [+140.73% +142.59% +144.45%] (p = 0.00 < 0.05) + thrpt: [-59.092% -58.779% -58.459%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.945 ms 10.973 ms 11.000 ms] + thrpt: [363.63 elem/s 364.53 elem/s 365.45 elem/s] + change: + time: [+258.13% +260.64% +263.12%] (p = 0.00 < 0.05) + thrpt: [-72.461% -72.272% -72.077%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [17.808 ms 17.858 ms 17.913 ms] + thrpt: [446.61 elem/s 447.97 elem/s 449.24 elem/s] + change: + time: [+279.27% +284.93% +290.15%] (p = 0.00 < 0.05) + thrpt: [-74.369% -74.021% -73.633%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [33.006 ms 33.104 ms 33.207 ms] + thrpt: [481.83 elem/s 483.32 elem/s 484.76 elem/s] + change: + time: [+328.64% +333.71% +338.26%] (p = 0.00 < 0.05) + thrpt: [-77.183% -76.943% -76.671%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [62.524 ms 62.676 ms 62.829 ms] + thrpt: [509.32 elem/s 510.56 elem/s 511.81 elem/s] + change: + time: [+294.16% +300.95% +307.43%] (p = 0.00 < 0.05) + thrpt: [-75.456% -75.059% -74.630%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [121.44 ms 121.80 ms 122.17 ms] + thrpt: [523.87 elem/s 525.47 elem/s 527.00 elem/s] + change: + time: [+301.62% +313.05% +324.55%] (p = 0.00 < 0.05) + thrpt: [-76.446% -75.790% -75.101%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +bench_fft_fr scale: '15' + time: [8.2206 ms 8.2401 ms 8.2652 ms] + change: [+155.14% +156.72% +158.44%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [1.0298 s 1.0340 s 1.0383 s] + change: [-85.103% -84.757% -84.386%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [51.302 s 51.367 s 51.437 s] + change: [+514.72% +523.52% +532.18%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [11.962 s 11.984 s 12.006 s] + change: [+669.60% +674.94% +679.31%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [495.88 ms 498.40 ms 501.37 ms] + change: [+627.23% +632.54% +638.63%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [513.41 ms 514.95 ms 516.51 ms] + change: [+627.53% +633.74% +640.78%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [79.325 ms 79.829 ms 80.213 ms] + change: [+514.80% +524.52% +534.85%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [370.48 ms 373.77 ms 377.21 ms] + change: [+48.785% +51.794% +54.825%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [403.26 ms 405.13 ms 407.06 ms] + change: [+287.82% +295.07% +300.81%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [182.03 ms 182.75 ms 183.56 ms] + change: [+182.27% +184.07% +185.83%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8533 ms 7.8725 ms 7.8885 ms] + change: [-0.8029% +0.0775% +0.8027%] (p = 0.86 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low severe + +blob_to_kzg_commitment time: [57.833 ms 57.980 ms 58.127 ms] + change: [-24.123% -23.848% -23.563%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_kzg_proof time: [62.286 ms 62.461 ms 62.642 ms] + change: [-22.365% -22.047% -21.749%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.6546 ms 2.6621 ms 2.6699 ms] + change: [-0.6114% -0.2228% +0.1805%] (p = 0.28 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [63.249 ms 63.387 ms 63.523 ms] + change: [-22.065% -21.789% -21.513%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [4.1274 ms 4.1430 ms 4.1609 ms] + change: [+1.4146% +1.8582% +2.3569%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [4.0997 ms 4.1139 ms 4.1281 ms] + thrpt: [242.24 elem/s 243.08 elem/s 243.92 elem/s] + change: + time: [-0.8672% -0.4422% -0.0303%] (p = 0.04 < 0.05) + thrpt: [+0.0303% +0.4442% +0.8747%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [6.0844 ms 6.1036 ms 6.1225 ms] + thrpt: [326.67 elem/s 327.67 elem/s 328.71 elem/s] + change: + time: [-2.1748% -1.7499% -1.3210%] (p = 0.00 < 0.05) + thrpt: [+1.3387% +1.7810% +2.2231%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [10.862 ms 10.900 ms 10.938 ms] + thrpt: [365.69 elem/s 366.98 elem/s 368.25 elem/s] + change: + time: [-1.1047% -0.6668% -0.1944%] (p = 0.00 < 0.05) + thrpt: [+0.1948% +0.6713% +1.1170%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [25.303 ms 25.382 ms 25.463 ms] + thrpt: [314.18 elem/s 315.18 elem/s 316.17 elem/s] + change: + time: [+41.521% +42.130% +42.727%] (p = 0.00 < 0.05) + thrpt: [-29.936% -29.642% -29.339%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [41.789 ms 41.875 ms 41.961 ms] + thrpt: [381.31 elem/s 382.09 elem/s 382.88 elem/s] + change: + time: [+26.022% +26.496% +26.946%] (p = 0.00 < 0.05) + thrpt: [-21.227% -20.946% -20.649%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [69.743 ms 69.937 ms 70.130 ms] + thrpt: [456.30 elem/s 457.55 elem/s 458.83 elem/s] + change: + time: [+11.166% +11.586% +11.993%] (p = 0.00 < 0.05) + thrpt: [-10.709% -10.383% -10.044%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [126.68 ms 126.92 ms 127.15 ms] + thrpt: [503.36 elem/s 504.27 elem/s 505.19 elem/s] + change: + time: [+3.8307% +4.2040% +4.5627%] (p = 0.00 < 0.05) + thrpt: [-4.3636% -4.0344% -3.6893%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [8.5030 ms 8.5514 ms 8.6059 ms] + change: [+3.2314% +3.9401% +4.6594%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [1.0313 s 1.0326 s 1.0340 s] + change: [-0.5690% -0.1347% +0.2925%] (p = 0.58 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [51.066 s 51.136 s 51.203 s] + change: [-0.6474% -0.4491% -0.2536%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [11.933 s 11.942 s 11.951 s] + change: [-0.5481% -0.3520% -0.1581%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [390.04 ms 394.44 ms 399.53 ms] + change: [-21.932% -20.859% -19.664%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + +bench_compute_proof_single scale: '15' + time: [433.24 ms 435.62 ms 438.05 ms] + change: [-15.955% -15.406% -14.844%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [61.213 ms 61.441 ms 61.608 ms] + change: [-23.283% -22.619% -21.866%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [371.50 ms 374.18 ms 376.82 ms] + change: [-1.0127% +0.1120% +1.2566%] (p = 0.86 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [397.32 ms 399.02 ms 401.07 ms] + change: [-2.1653% -1.5085% -0.8451%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [180.44 ms 181.15 ms 181.60 ms] + change: [-1.4108% -0.6603% +0.0956%] (p = 0.12 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8359 ms 7.8595 ms 7.8969 ms] + change: [-0.2578% +0.3004% +1.0108%] (p = 0.41 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [54.382 ms 54.581 ms 54.784 ms] + change: [-6.2760% -5.8626% -5.4343%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [55.746 ms 55.934 ms 56.124 ms] + change: [-10.836% -10.451% -10.056%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.6579 ms 2.6635 ms 2.6690 ms] + change: [-0.3016% +0.0529% +0.3980%] (p = 0.77 > 0.05) + No change in performance detected. + +compute_blob_kzg_proof time: [57.389 ms 57.558 ms 57.738 ms] + change: [-9.5071% -9.1954% -8.8784%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [4.0872 ms 4.0986 ms 4.1101 ms] + change: [-1.5640% -1.0705% -0.6153%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1131 ms 4.1254 ms 4.1379 ms] + thrpt: [241.67 elem/s 242.40 elem/s 243.12 elem/s] + change: + time: [-0.1698% +0.2799% +0.7385%] (p = 0.23 > 0.05) + thrpt: [-0.7331% -0.2791% +0.1701%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9699 ms 5.9906 ms 6.0132 ms] + thrpt: [332.60 elem/s 333.86 elem/s 335.01 elem/s] + change: + time: [-2.2827% -1.8526% -1.3660%] (p = 0.00 < 0.05) + thrpt: [+1.3849% +1.8876% +2.3360%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.492 ms 10.525 ms 10.559 ms] + thrpt: [378.82 elem/s 380.04 elem/s 381.25 elem/s] + change: + time: [-3.9199% -3.4380% -2.9716%] (p = 0.00 < 0.05) + thrpt: [+3.0626% +3.5604% +4.0798%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [17.102 ms 17.159 ms 17.224 ms] + thrpt: [464.48 elem/s 466.22 elem/s 467.79 elem/s] + change: + time: [-32.708% -32.397% -32.071%] (p = 0.00 < 0.05) + thrpt: [+47.213% +47.922% +48.605%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [31.809 ms 31.892 ms 31.976 ms] + thrpt: [500.38 elem/s 501.70 elem/s 503.00 elem/s] + change: + time: [-24.101% -23.841% -23.582%] (p = 0.00 < 0.05) + thrpt: [+30.859% +31.304% +31.754%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [59.913 ms 60.063 ms 60.215 ms] + thrpt: [531.43 elem/s 532.78 elem/s 534.11 elem/s] + change: + time: [-14.446% -14.120% -13.786%] (p = 0.00 < 0.05) + thrpt: [+15.991% +16.441% +16.885%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [115.39 ms 115.69 ms 116.01 ms] + thrpt: [551.67 elem/s 553.20 elem/s 554.66 elem/s] + change: + time: [-9.1340% -8.8460% -8.5525%] (p = 0.00 < 0.05) + thrpt: [+9.3524% +9.7044% +10.052%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [8.3185 ms 8.3333 ms 8.3514 ms] + change: [-3.4132% -2.7998% -2.2193%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [1.0316 s 1.0362 s 1.0413 s] + change: [-0.1165% +0.3492% +0.7972%] (p = 0.21 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [51.415 s 51.469 s 51.523 s] + change: [+0.4786% +0.6507% +0.8249%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [12.012 s 12.025 s 12.039 s] + change: [+0.5627% +0.6952% +0.8346%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [383.58 ms 385.81 ms 387.97 ms] + change: [-3.5312% -2.1880% -0.9116%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_compute_proof_single scale: '15' + time: [384.83 ms 388.31 ms 392.06 ms] + change: [-11.810% -10.862% -9.8715%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [79.887 ms 80.133 ms 80.387 ms] + change: [+28.860% +30.083% +31.150%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [55.348 ms 55.435 ms 55.562 ms] + change: [+424.29% +427.01% +429.75%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [372.89 ms 375.49 ms 378.25 ms] + change: [-0.6454% +0.3503% +1.3795%] (p = 0.52 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [406.97 ms 409.25 ms 411.70 ms] + change: [+1.8342% +2.5650% +3.3282%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [180.55 ms 181.23 ms 181.98 ms] + change: [-0.7615% -0.0325% +0.7219%] (p = 0.94 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4822 ms 2.5806 ms 2.6800 ms] + change: [-68.290% -67.429% -66.456%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [13.223 ms 13.700 ms 14.191 ms] + change: [-75.745% -74.900% -73.939%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [18.645 ms 19.063 ms 19.501 ms] + change: [-66.619% -65.918% -65.224%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + +verify_kzg_proof time: [2.6594 ms 2.6680 ms 2.6767 ms] + change: [-0.2350% +0.1709% +0.5445%] (p = 0.39 > 0.05) + No change in performance detected. + +compute_blob_kzg_proof time: [18.753 ms 19.188 ms 19.627 ms] + change: [-67.406% -66.664% -65.973%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [4.0858 ms 4.0975 ms 4.1092 ms] + change: [-0.4144% -0.0276% +0.3956%] (p = 0.90 > 0.05) + No change in performance detected. + +verify_blob_kzg_proof_batch/1 + time: [4.1219 ms 4.1345 ms 4.1467 ms] + thrpt: [241.15 elem/s 241.87 elem/s 242.60 elem/s] + change: + time: [-0.1915% +0.2190% +0.6316%] (p = 0.31 > 0.05) + thrpt: [-0.6277% -0.2185% +0.1918%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [4.6195 ms 4.6504 ms 4.6876 ms] + thrpt: [426.66 elem/s 430.07 elem/s 432.95 elem/s] + change: + time: [-22.979% -22.371% -21.649%] (p = 0.00 < 0.05) + thrpt: [+27.631% +28.818% +29.834%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [5.1036 ms 5.2437 ms 5.4052 ms] + thrpt: [740.02 elem/s 762.82 elem/s 783.76 elem/s] + change: + time: [-51.386% -50.179% -48.680%] (p = 0.00 < 0.05) + thrpt: [+94.856% +100.72% +105.70%] + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 2 (2.00%) high mild + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.6573 ms 5.9529 ms 6.2554 ms] + thrpt: [1.2789 Kelem/s 1.3439 Kelem/s 1.4141 Kelem/s] + change: + time: [-67.393% -65.308% -63.800%] (p = 0.00 < 0.05) + thrpt: [+176.24% +188.25% +206.69%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [10.623 ms 11.208 ms 11.820 ms] + thrpt: [1.3536 Kelem/s 1.4275 Kelem/s 1.5061 Kelem/s] + change: + time: [-66.808% -64.855% -62.816%] (p = 0.00 < 0.05) + thrpt: [+168.93% +184.54% +201.28%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [14.125 ms 14.848 ms 15.628 ms] + thrpt: [2.0476 Kelem/s 2.1551 Kelem/s 2.2655 Kelem/s] + change: + time: [-76.389% -75.279% -74.126%] (p = 0.00 < 0.05) + thrpt: [+286.49% +304.51% +323.52%] + Performance has improved. +Found 23 outliers among 100 measurements (23.00%) + 3 (3.00%) high mild + 20 (20.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [22.862 ms 23.599 ms 24.476 ms] + thrpt: [2.6148 Kelem/s 2.7120 Kelem/s 2.7994 Kelem/s] + change: + time: [-80.261% -79.602% -78.966%] (p = 0.00 < 0.05) + thrpt: [+375.42% +390.23% +406.61%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 11 (11.00%) high severe + +bench_fft_fr scale: '15' + time: [2.4053 ms 2.4373 ms 2.4662 ms] + change: [-71.906% -71.183% -70.588%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low severe + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [264.90 ms 270.24 ms 276.01 ms] + change: [-74.458% -73.921% -73.349%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [15.676 s 15.966 s 16.256 s] + change: [-69.488% -68.979% -68.477%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [2.7170 s 2.7568 s 2.7988 s] + change: [-77.383% -77.074% -76.708%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [70.541 ms 70.899 ms 71.556 ms] + change: [-81.705% -81.307% -80.753%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [69.568 ms 70.924 ms 73.127 ms] + change: [-82.299% -81.789% -81.284%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [13.017 ms 14.821 ms 15.946 ms] + change: [-84.594% -83.163% -81.527%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [127.93 ms 129.65 ms 130.75 ms] + change: [-66.003% -65.637% -65.302%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [290.47 ms 291.53 ms 292.41 ms] + change: [-29.249% -28.766% -28.302%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_zero_poly scale: '15' + time: [120.95 ms 121.61 ms 122.95 ms] + change: [-33.162% -32.538% -31.793%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4061 ms 2.4525 ms 2.4762 ms] + change: [-9.9742% -6.8226% -3.6901%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [9.2475 ms 9.4996 ms 9.7727 ms] + change: [-33.600% -30.659% -27.382%] (p = 0.00 < 0.05) + Performance has improved. +Found 22 outliers among 100 measurements (22.00%) + 2 (2.00%) high mild + 20 (20.00%) high severe + +compute_kzg_proof time: [10.616 ms 10.788 ms 10.983 ms] + change: [-44.980% -43.408% -41.761%] (p = 0.00 < 0.05) + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 13 (13.00%) high severe + +verify_kzg_proof time: [2.6097 ms 2.6167 ms 2.6237 ms] + change: [-2.3230% -1.9245% -1.4963%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [11.678 ms 11.930 ms 12.201 ms] + change: [-39.748% -37.825% -35.731%] (p = 0.00 < 0.05) + Performance has improved. +Found 23 outliers among 100 measurements (23.00%) + 2 (2.00%) high mild + 21 (21.00%) high severe + +verify_blob_kzg_proof time: [4.1357 ms 4.1485 ms 4.1616 ms] + change: [+0.8277% +1.2451% +1.6603%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1974 ms 4.2077 ms 4.2182 ms] + thrpt: [237.07 elem/s 237.66 elem/s 238.24 elem/s] + change: + time: [+1.3818% +1.7716% +2.1687%] (p = 0.00 < 0.05) + thrpt: [-2.1227% -1.7408% -1.3630%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [4.5544 ms 4.5871 ms 4.6311 ms] + thrpt: [431.86 elem/s 436.01 elem/s 439.14 elem/s] + change: + time: [-2.4388% -1.3613% -0.1443%] (p = 0.01 < 0.05) + thrpt: [+0.1445% +1.3801% +2.4998%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.6119 ms 4.6352 ms 4.6650 ms] + thrpt: [857.45 elem/s 862.97 elem/s 867.32 elem/s] + change: + time: [-14.301% -11.605% -9.1386%] (p = 0.00 < 0.05) + thrpt: [+10.058% +13.129% +16.687%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [6.8213 ms 7.1671 ms 7.5066 ms] + thrpt: [1.0657 Kelem/s 1.1162 Kelem/s 1.1728 Kelem/s] + change: + time: [+12.343% +20.397% +28.583%] (p = 0.00 < 0.05) + thrpt: [-22.229% -16.941% -10.987%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [9.2641 ms 9.6726 ms 10.124 ms] + thrpt: [1.5803 Kelem/s 1.6542 Kelem/s 1.7271 Kelem/s] + change: + time: [-19.470% -13.701% -7.3206%] (p = 0.00 < 0.05) + thrpt: [+7.8989% +15.877% +24.177%] + Performance has improved. +Found 15 outliers among 100 measurements (15.00%) + 15 (15.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [13.072 ms 13.568 ms 14.140 ms] + thrpt: [2.2632 Kelem/s 2.3585 Kelem/s 2.4481 Kelem/s] + change: + time: [-14.244% -8.6240% -2.7601%] (p = 0.01 < 0.05) + thrpt: [+2.8385% +9.4379% +16.610%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [22.804 ms 23.667 ms 24.676 ms] + thrpt: [2.5936 Kelem/s 2.7042 Kelem/s 2.8065 Kelem/s] + change: + time: [-4.7079% +0.2896% +5.5454%] (p = 0.92 > 0.05) + thrpt: [-5.2540% -0.2887% +4.9405%] + No change in performance detected. +Found 11 outliers among 100 measurements (11.00%) + 1 (1.00%) high mild + 10 (10.00%) high severe + +bench_fft_fr scale: '15' + time: [2.4176 ms 2.4587 ms 2.5028 ms] + change: [-2.5956% +0.6651% +4.2858%] (p = 0.73 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [255.14 ms 259.16 ms 263.34 ms] + change: [-6.5212% -4.1015% -1.6394%] (p = 0.01 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [15.744 s 15.952 s 16.156 s] + change: [-2.3174% -0.0902% +2.2025%] (p = 0.94 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [2.7439 s 2.7856 s 2.8317 s] + change: [-1.0619% +1.0465% +3.2343%] (p = 0.39 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [57.914 ms 58.405 ms 59.375 ms] + change: [-21.347% -18.728% -16.729%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [59.097 ms 59.705 ms 60.311 ms] + change: [-18.134% -15.930% -13.691%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [12.567 ms 13.627 ms 15.005 ms] + change: [-12.185% -2.3128% +9.3262%] (p = 0.71 > 0.05) + No change in performance detected. + +bench_g1_lincomb with precomputation points: '4096' + time: [9.0625 ms 9.3472 ms 9.6687 ms] + change: [-83.789% -83.163% -82.310%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [126.27 ms 127.09 ms 127.53 ms] + change: [-2.6756% -1.7294% -0.7276%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [299.72 ms 301.03 ms 302.46 ms] + change: [+2.6908% +3.2591% +3.8343%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [122.46 ms 122.93 ms 123.41 ms] + change: [-0.3031% +0.8491% +1.9240%] (p = 0.17 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [10.308 ms 10.350 ms 10.408 ms] + change: [+324.23% +334.37% +345.44%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [155.72 ms 156.04 ms 156.38 ms] + change: [+1496.5% +1542.6% +1586.9%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_kzg_proof time: [160.67 ms 161.00 ms 161.33 ms] + change: [+1365.7% +1392.4% +1416.7%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [3.9915 ms 4.0099 ms 4.0324 ms] + change: [+52.402% +53.244% +54.141%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [161.46 ms 161.79 ms 162.11 ms] + change: [+1226.2% +1256.1% +1285.6%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + +verify_blob_kzg_proof time: [5.4374 ms 5.4525 ms 5.4676 ms] + change: [+30.894% +31.431% +31.972%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [5.5056 ms 5.5191 ms 5.5323 ms] + thrpt: [180.76 elem/s 181.19 elem/s 181.63 elem/s] + change: + time: [+30.709% +31.167% +31.636%] (p = 0.00 < 0.05) + thrpt: [-24.033% -23.761% -23.494%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [10.693 ms 10.720 ms 10.746 ms] + thrpt: [186.11 elem/s 186.57 elem/s 187.04 elem/s] + change: + time: [+131.40% +133.70% +135.50%] (p = 0.00 < 0.05) + thrpt: [-57.537% -57.210% -56.785%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/4 + time: [15.032 ms 15.078 ms 15.124 ms] + thrpt: [264.48 elem/s 265.28 elem/s 266.09 elem/s] + change: + time: [+223.03% +225.30% +227.22%] (p = 0.00 < 0.05) + thrpt: [-69.439% -69.259% -69.043%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [23.945 ms 24.015 ms 24.089 ms] + thrpt: [332.10 elem/s 333.13 elem/s 334.10 elem/s] + change: + time: [+220.01% +235.07% +252.13%] (p = 0.00 < 0.05) + thrpt: [-71.602% -70.156% -68.751%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [41.561 ms 41.651 ms 41.742 ms] + thrpt: [383.31 elem/s 384.14 elem/s 384.98 elem/s] + change: + time: [+311.41% +330.61% +349.55%] (p = 0.00 < 0.05) + thrpt: [-77.755% -76.777% -75.693%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [85.417 ms 85.658 ms 85.920 ms] + thrpt: [372.44 elem/s 373.58 elem/s 374.63 elem/s] + change: + time: [+505.53% +531.33% +555.40%] (p = 0.00 < 0.05) + thrpt: [-84.742% -84.160% -83.485%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [152.69 ms 152.95 ms 153.22 ms] + thrpt: [417.69 elem/s 418.42 elem/s 419.15 elem/s] + change: + time: [+519.88% +546.27% +570.76%] (p = 0.00 < 0.05) + thrpt: [-85.092% -84.527% -83.868%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [11.298 ms 11.339 ms 11.398 ms] + change: [+359.38% +370.70% +382.50%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [99.277 s 99.381 s 99.493 s] + change: [+37639% +38247% +38851%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [105.67 s 105.80 s 105.94 s] + change: [+554.84% +563.26% +571.99%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [23.133 s 23.154 s 23.178 s] + change: [+717.39% +731.19% +744.01%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [986.02 ms 988.67 ms 991.58 ms] + change: [+1568.1% +1586.8% +1604.7%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 10 measurements (40.00%) + 2 (20.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [905.17 ms 907.59 ms 910.02 ms] + change: [+1410.6% +1426.6% +1439.6%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [158.95 ms 159.46 ms 159.95 ms] + change: [+1027.3% +1109.7% +1192.4%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [796.02 ms 799.49 ms 803.47 ms] + change: [+525.38% +530.52% +535.65%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [598.13 ms 601.49 ms 604.60 ms] + change: [+98.299% +99.811% +101.17%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_zero_poly scale: '15' + time: [207.69 ms 208.99 ms 210.50 ms] + change: [+68.005% +69.501% +71.165%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [3.1593 ms 3.1942 ms 3.2408 ms] + change: [-69.545% -69.220% -68.882%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [25.207 ms 25.267 ms 25.330 ms] + change: [-83.860% -83.808% -83.751%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [26.593 ms 26.648 ms 26.705 ms] + change: [-83.498% -83.448% -83.401%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [3.9646 ms 3.9745 ms 3.9843 ms] + change: [-1.5006% -0.8844% -0.3656%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [27.256 ms 27.315 ms 27.376 ms] + change: [-83.168% -83.117% -83.063%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [5.4665 ms 5.4813 ms 5.4961 ms] + change: [+0.1148% +0.5286% +0.8864%] (p = 0.01 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [5.4997 ms 5.5175 ms 5.5366 ms] + thrpt: [180.61 elem/s 181.24 elem/s 181.83 elem/s] + change: + time: [-0.4149% -0.0297% +0.3676%] (p = 0.89 > 0.05) + thrpt: [-0.3662% +0.0297% +0.4166%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9066 ms 6.0209 ms 6.1727 ms] + thrpt: [324.01 elem/s 332.18 elem/s 338.61 elem/s] + change: + time: [-44.912% -43.834% -42.344%] (p = 0.00 < 0.05) + thrpt: [+73.444% +78.045% +81.529%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.0688 ms 6.1718 ms 6.3039 ms] + thrpt: [634.53 elem/s 648.11 elem/s 659.11 elem/s] + change: + time: [-59.760% -59.068% -58.017%] (p = 0.00 < 0.05) + thrpt: [+138.19% +144.31% +148.51%] + Performance has improved. +Found 19 outliers among 100 measurements (19.00%) + 4 (4.00%) high mild + 15 (15.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [9.2847 ms 9.7200 ms 10.140 ms] + thrpt: [788.93 elem/s 823.05 elem/s 861.63 elem/s] + change: + time: [-61.246% -59.525% -57.751%] (p = 0.00 < 0.05) + thrpt: [+136.69% +147.07% +158.03%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [12.266 ms 12.772 ms 13.330 ms] + thrpt: [1.2003 Kelem/s 1.2527 Kelem/s 1.3044 Kelem/s] + change: + time: [-70.404% -69.335% -68.012%] (p = 0.00 < 0.05) + thrpt: [+212.61% +226.11% +237.89%] + Performance has improved. +Found 19 outliers among 100 measurements (19.00%) + 1 (1.00%) high mild + 18 (18.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [23.992 ms 24.970 ms 26.022 ms] + thrpt: [1.2297 Kelem/s 1.2815 Kelem/s 1.3338 Kelem/s] + change: + time: [-71.952% -70.849% -69.615%] (p = 0.00 < 0.05) + thrpt: [+229.11% +243.04% +256.53%] + Performance has improved. +Found 22 outliers among 100 measurements (22.00%) + 22 (22.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [32.036 ms 32.967 ms 34.044 ms] + thrpt: [1.8799 Kelem/s 1.9413 Kelem/s 1.9977 Kelem/s] + change: + time: [-78.993% -78.447% -77.743%] (p = 0.00 < 0.05) + thrpt: [+349.29% +363.96% +376.02%] + Performance has improved. +Found 15 outliers among 100 measurements (15.00%) + 4 (4.00%) high mild + 11 (11.00%) high severe + +bench_fft_fr scale: '15' + time: [3.0375 ms 3.0856 ms 3.1356 ms] + change: [-73.035% -72.297% -71.627%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [23.238 s 24.026 s 24.980 s] + change: [-76.582% -75.825% -74.944%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [30.358 s 30.874 s 31.430 s] + change: [-71.327% -70.820% -70.286%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [5.0929 s 5.1704 s 5.2476 s] + change: [-78.009% -77.669% -77.325%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [153.87 ms 155.70 ms 158.25 ms] + change: [-84.423% -84.306% -84.162%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [129.10 ms 129.54 ms 130.17 ms] + change: [-85.769% -85.688% -85.612%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [24.993 ms 25.036 ms 25.072 ms] + change: [-84.367% -84.277% -84.189%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_new_poly_div scale: '15' + time: [251.94 ms 256.14 ms 260.59 ms] + change: [-68.491% -67.963% -67.333%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [476.10 ms 479.38 ms 482.58 ms] + change: [-20.965% -20.301% -19.624%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [139.37 ms 139.93 ms 140.79 ms] + change: [-33.373% -32.833% -32.323%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.1741 ms 9.2155 ms 9.2775 ms] + change: [+185.96% +189.58% +193.36%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [52.119 ms 52.382 ms 52.708 ms] + change: [+106.19% +107.31% +108.68%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high severe + +compute_kzg_proof time: [54.701 ms 54.848 ms 55.005 ms] + change: [+105.06% +105.82% +106.52%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2379 ms 1.2417 ms 1.2456 ms] + change: [-69.008% -68.874% -68.727%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low severe + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [55.798 ms 55.929 ms 56.061 ms] + change: [+104.09% +104.76% +105.35%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.8014 ms 2.8089 ms 2.8166 ms] + change: [-48.952% -48.754% -48.569%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8137 ms 2.8215 ms 2.8294 ms] + thrpt: [353.43 elem/s 354.43 elem/s 355.40 elem/s] + change: + time: [-49.090% -48.863% -48.644%] (p = 0.00 < 0.05) + thrpt: [+94.718% +95.555% +96.427%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.5384 ms 4.5506 ms 4.5631 ms] + thrpt: [438.30 elem/s 439.50 elem/s 440.69 elem/s] + change: + time: [-26.270% -24.420% -22.944%] (p = 0.00 < 0.05) + thrpt: [+29.776% +32.310% +35.630%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [8.4406 ms 8.4635 ms 8.4864 ms] + thrpt: [471.34 elem/s 472.62 elem/s 473.90 elem/s] + change: + time: [+34.236% +37.132% +39.509%] (p = 0.00 < 0.05) + thrpt: [-28.320% -27.077% -25.504%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [15.665 ms 15.721 ms 15.778 ms] + thrpt: [507.03 elem/s 508.88 elem/s 510.68 elem/s] + change: + time: [+55.020% +61.737% +69.419%] (p = 0.00 < 0.05) + thrpt: [-40.975% -38.171% -35.492%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [30.073 ms 30.170 ms 30.279 ms] + thrpt: [528.42 elem/s 530.32 elem/s 532.04 elem/s] + change: + time: [+126.27% +136.22% +146.02%] (p = 0.00 < 0.05) + thrpt: [-59.354% -57.666% -55.806%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [57.983 ms 58.151 ms 58.324 ms] + thrpt: [548.66 elem/s 550.29 elem/s 551.89 elem/s] + change: + time: [+123.36% +132.88% +142.39%] (p = 0.00 < 0.05) + thrpt: [-58.745% -57.060% -55.230%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [114.12 ms 114.41 ms 114.71 ms] + thrpt: [557.92 elem/s 559.40 elem/s 560.79 elem/s] + change: + time: [+236.06% +247.04% +257.30%] (p = 0.00 < 0.05) + thrpt: [-72.012% -71.185% -70.243%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.6829 ms 9.7234 ms 9.7509 ms] + change: [+200.74% +208.24% +215.63%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [18.779 s 18.801 s 18.827 s] + change: [-24.723% -21.746% -19.077%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low severe + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [20.285 s 20.303 s 20.322 s] + change: [-35.416% -34.239% -33.111%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [4.6884 s 4.6985 s 4.7086 s] + change: [-10.484% -9.1262% -7.7254%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [336.40 ms 338.22 ms 340.54 ms] + change: [+115.63% +117.98% +120.21%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [348.87 ms 351.24 ms 353.91 ms] + change: [+168.21% +170.40% +172.69%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [53.394 ms 53.614 ms 53.870 ms] + change: [+112.46% +113.65% +114.88%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +bench_new_poly_div scale: '15' + time: [673.58 ms 677.40 ms 681.16 ms] + change: [+159.80% +164.47% +169.15%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [272.74 ms 274.40 ms 276.23 ms] + change: [-43.258% -42.760% -42.229%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_zero_poly scale: '15' + time: [170.42 ms 171.04 ms 171.67 ms] + change: [+21.376% +22.049% +22.719%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.1622 ms 9.2578 ms 9.3445 ms] + change: [-1.0859% +0.0504% +1.0533%] (p = 0.93 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [44.105 ms 44.227 ms 44.367 ms] + change: [-16.137% -15.568% -15.074%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [48.100 ms 48.225 ms 48.355 ms] + change: [-12.418% -12.075% -11.736%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.2291 ms 1.2324 ms 1.2357 ms] + change: [-0.8753% -0.4360% +0.0077%] (p = 0.05 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [48.892 ms 49.035 ms 49.184 ms] + change: [-12.640% -12.327% -11.985%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.8001 ms 2.8094 ms 2.8190 ms] + change: [-0.4305% +0.0174% +0.4388%] (p = 0.94 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8329 ms 2.8415 ms 2.8502 ms] + thrpt: [350.85 elem/s 351.93 elem/s 353.00 elem/s] + change: + time: [+0.2963% +0.7092% +1.1061%] (p = 0.00 < 0.05) + thrpt: [-1.0940% -0.7042% -0.2955%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6097 ms 4.6228 ms 4.6364 ms] + thrpt: [431.37 elem/s 432.64 elem/s 433.87 elem/s] + change: + time: [+1.1908% +1.5851% +1.9907%] (p = 0.00 < 0.05) + thrpt: [-1.9518% -1.5604% -1.1768%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [8.3866 ms 8.4101 ms 8.4338 ms] + thrpt: [474.28 elem/s 475.62 elem/s 476.95 elem/s] + change: + time: [-1.0168% -0.6312% -0.2264%] (p = 0.00 < 0.05) + thrpt: [+0.2270% +0.6352% +1.0273%] + Change within noise threshold. +verify_blob_kzg_proof_batch/8 + time: [19.961 ms 20.030 ms 20.099 ms] + thrpt: [398.02 elem/s 399.39 elem/s 400.79 elem/s] + change: + time: [+26.770% +27.413% +28.044%] (p = 0.00 < 0.05) + thrpt: [-21.902% -21.515% -21.117%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [36.060 ms 36.170 ms 36.282 ms] + thrpt: [440.99 elem/s 442.35 elem/s 443.70 elem/s] + change: + time: [+19.324% +19.886% +20.429%] (p = 0.00 < 0.05) + thrpt: [-16.963% -16.588% -16.195%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [63.920 ms 64.086 ms 64.253 ms] + thrpt: [498.03 elem/s 499.33 elem/s 500.63 elem/s] + change: + time: [+9.7824% +10.206% +10.619%] (p = 0.00 < 0.05) + thrpt: [-9.5993% -9.2606% -8.9107%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [118.78 ms 119.11 ms 119.43 ms] + thrpt: [535.87 elem/s 537.34 elem/s 538.82 elem/s] + change: + time: [+3.6917% +4.1059% +4.4660%] (p = 0.00 < 0.05) + thrpt: [-4.2751% -3.9439% -3.5603%] + Performance has regressed. + +bench_fft_fr scale: '15' + time: [9.6327 ms 9.6543 ms 9.6824 ms] + change: [-0.9640% -0.3711% +0.3272%] (p = 0.32 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [18.811 s 18.840 s 18.867 s] + change: [+0.0054% +0.2077% +0.4109%] (p = 0.07 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_single_da scale: '14' + time: [20.282 s 20.313 s 20.341 s] + change: [-0.1295% +0.0468% +0.2058%] (p = 0.61 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6986 s 4.7089 s 4.7190 s] + change: [-0.1016% +0.2194% +0.5257%] (p = 0.20 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [310.73 ms 313.81 ms 317.08 ms] + change: [-8.2909% -7.2180% -6.1654%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [322.82 ms 323.98 ms 325.21 ms] + change: [-8.5311% -7.7609% -7.0431%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [47.725 ms 47.865 ms 48.007 ms] + change: [-11.195% -10.724% -10.262%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_new_poly_div scale: '15' + time: [682.23 ms 688.79 ms 694.84 ms] + change: [+0.5897% +1.6813% +2.7154%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [274.61 ms 275.60 ms 276.61 ms] + change: [-0.3140% +0.4375% +1.1520%] (p = 0.28 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [168.83 ms 170.16 ms 171.27 ms] + change: [-1.5091% -0.8732% -0.1736%] (p = 0.02 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.1522 ms 9.1843 ms 9.2113 ms] + change: [-1.5072% -0.8532% -0.1991%] (p = 0.03 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [38.081 ms 38.183 ms 38.288 ms] + change: [-14.017% -13.666% -13.324%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [39.676 ms 39.784 ms 39.890 ms] + change: [-17.822% -17.504% -17.199%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2439 ms 1.2468 ms 1.2497 ms] + change: [+0.7760% +1.1026% +1.4323%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [40.704 ms 40.791 ms 40.877 ms] + change: [-17.111% -16.812% -16.512%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.8321 ms 2.8399 ms 2.8477 ms] + change: [+0.6497% +1.0836% +1.5271%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [2.8250 ms 2.8326 ms 2.8401 ms] + thrpt: [352.09 elem/s 353.03 elem/s 353.98 elem/s] + change: + time: [-0.6960% -0.3109% +0.0941%] (p = 0.14 > 0.05) + thrpt: [-0.0940% +0.3119% +0.7009%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.5719 ms 4.5832 ms 4.5947 ms] + thrpt: [435.28 elem/s 436.38 elem/s 437.45 elem/s] + change: + time: [-1.2398% -0.8556% -0.4671%] (p = 0.00 < 0.05) + thrpt: [+0.4693% +0.8630% +1.2554%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [8.3768 ms 8.3968 ms 8.4168 ms] + thrpt: [475.24 elem/s 476.37 elem/s 477.51 elem/s] + change: + time: [-0.5082% -0.1580% +0.2000%] (p = 0.40 > 0.05) + thrpt: [-0.1996% +0.1583% +0.5108%] + No change in performance detected. +verify_blob_kzg_proof_batch/8 + time: [15.671 ms 15.712 ms 15.752 ms] + thrpt: [507.87 elem/s 509.18 elem/s 510.48 elem/s] + change: + time: [-21.893% -21.560% -21.222%] (p = 0.00 < 0.05) + thrpt: [+26.938% +27.487% +28.030%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [30.379 ms 30.454 ms 30.530 ms] + thrpt: [524.07 elem/s 525.38 elem/s 526.68 elem/s] + change: + time: [-16.132% -15.802% -15.472%] (p = 0.00 < 0.05) + thrpt: [+18.305% +18.768% +19.235%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [58.049 ms 58.198 ms 58.348 ms] + thrpt: [548.43 elem/s 549.85 elem/s 551.26 elem/s] + change: + time: [-9.5149% -9.1876% -8.8509%] (p = 0.00 < 0.05) + thrpt: [+9.7104% +10.117% +10.515%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [113.42 ms 113.67 ms 113.92 ms] + thrpt: [561.78 elem/s 563.04 elem/s 564.26 elem/s] + change: + time: [-4.8995% -4.5645% -4.2401%] (p = 0.00 < 0.05) + thrpt: [+4.4279% +4.7828% +5.1519%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.6397 ms 9.6636 ms 9.6841 ms] + change: [-1.0230% -0.2841% +0.3039%] (p = 0.48 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [18.900 s 18.928 s 18.955 s] + change: [+0.2738% +0.4667% +0.6922%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [20.262 s 20.282 s 20.300 s] + change: [-0.3166% -0.1525% +0.0260%] (p = 0.12 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6767 s 4.6882 s 4.6998 s] + change: [-0.7689% -0.4387% -0.1242%] (p = 0.02 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [270.54 ms 271.89 ms 273.20 ms] + change: [-14.345% -13.358% -12.410%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [271.22 ms 272.16 ms 273.22 ms] + change: [-16.429% -15.996% -15.550%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [53.115 ms 53.266 ms 53.418 ms] + change: [+10.853% +11.284% +11.726%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [38.016 ms 38.113 ms 38.211 ms] + change: [+285.85% +307.32% +323.03%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_new_poly_div scale: '15' + time: [666.23 ms 671.37 ms 677.03 ms] + change: [-3.7276% -2.5293% -1.3104%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [270.75 ms 272.32 ms 274.44 ms] + change: [-1.8584% -1.1898% -0.3274%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [169.05 ms 170.14 ms 171.33 ms] + change: [-0.5771% +0.0905% +0.7559%] (p = 0.80 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.7186 ms 2.7536 ms 2.8015 ms] + change: [-70.313% -70.038% -69.736%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [8.7764 ms 9.0077 ms 9.2417 ms] + change: [-77.063% -76.409% -75.804%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [9.9129 ms 10.112 ms 10.321 ms] + change: [-75.134% -74.583% -74.111%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.2329 ms 1.2370 ms 1.2411 ms] + change: [-0.7872% -0.4230% -0.0328%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [10.617 ms 10.762 ms 10.920 ms] + change: [-73.990% -73.616% -73.222%] (p = 0.00 < 0.05) + Performance has improved. +Found 18 outliers among 100 measurements (18.00%) + 5 (5.00%) high mild + 13 (13.00%) high severe + +verify_blob_kzg_proof time: [2.7983 ms 2.8066 ms 2.8154 ms] + change: [-1.5762% -1.1700% -0.7776%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8462 ms 2.8536 ms 2.8610 ms] + thrpt: [349.53 elem/s 350.43 elem/s 351.35 elem/s] + change: + time: [+0.3761% +0.7402% +1.1165%] (p = 0.00 < 0.05) + thrpt: [-1.1041% -0.7348% -0.3747%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [3.2619 ms 3.2866 ms 3.3201 ms] + thrpt: [602.39 elem/s 608.54 elem/s 613.15 elem/s] + change: + time: [-28.849% -28.291% -27.583%] (p = 0.00 < 0.05) + thrpt: [+38.089% +39.453% +40.546%] + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 3 (3.00%) low mild + 4 (4.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.4637 ms 3.5963 ms 3.7439 ms] + thrpt: [1.0684 Kelem/s 1.1123 Kelem/s 1.1548 Kelem/s] + change: + time: [-58.707% -57.171% -55.307%] (p = 0.00 < 0.05) + thrpt: [+123.75% +133.48% +142.17%] + Performance has improved. +Found 18 outliers among 100 measurements (18.00%) + 3 (3.00%) high mild + 15 (15.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.6621 ms 5.7643 ms 5.8554 ms] + thrpt: [1.3663 Kelem/s 1.3879 Kelem/s 1.4129 Kelem/s] + change: + time: [-63.978% -63.312% -62.752%] (p = 0.00 < 0.05) + thrpt: [+168.47% +172.57% +177.61%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 5 (5.00%) low severe + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [7.5225 ms 7.9127 ms 8.3120 ms] + thrpt: [1.9249 Kelem/s 2.0221 Kelem/s 2.1270 Kelem/s] + change: + time: [-75.234% -74.018% -72.801%] (p = 0.00 < 0.05) + thrpt: [+267.66% +284.88% +303.78%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [9.9666 ms 10.194 ms 10.477 ms] + thrpt: [3.0544 Kelem/s 3.1390 Kelem/s 3.2107 Kelem/s] + change: + time: [-82.940% -82.483% -82.019%] (p = 0.00 < 0.05) + thrpt: [+456.14% +470.88% +486.16%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 1 (1.00%) high mild + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [17.896 ms 18.172 ms 18.540 ms] + thrpt: [3.4521 Kelem/s 3.5219 Kelem/s 3.5762 Kelem/s] + change: + time: [-84.256% -84.013% -83.649%] (p = 0.00 < 0.05) + thrpt: [+511.59% +525.52% +535.17%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) high mild + 6 (6.00%) high severe + +bench_fft_fr scale: '15' + time: [2.6778 ms 2.7421 ms 2.8073 ms] + change: [-72.072% -71.602% -71.114%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [4.6882 s 4.7995 s 4.9266 s] + change: [-75.250% -74.643% -74.013%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [6.2892 s 6.3834 s 6.4769 s] + change: [-69.000% -68.526% -68.101%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [1.0846 s 1.1133 s 1.1495 s] + change: [-76.829% -76.253% -75.465%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [48.615 ms 49.388 ms 50.173 ms] + change: [-82.127% -81.962% -81.779%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [47.972 ms 48.723 ms 49.904 ms] + change: [-82.409% -82.192% -81.829%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [8.7131 ms 8.9442 ms 9.1768 ms] + change: [-83.610% -83.208% -82.839%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [220.85 ms 223.48 ms 226.16 ms] + change: [-67.189% -66.712% -66.214%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [80.372 ms 81.958 ms 83.857 ms] + change: [-70.123% -69.493% -68.828%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [56.242 ms 57.005 ms 57.473 ms] + change: [-67.354% -66.877% -66.429%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.7028 ms 2.7351 ms 2.7545 ms] + change: [-2.2905% -1.0027% +0.2036%] (p = 0.17 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +blob_to_kzg_commitment time: [6.9065 ms 7.1201 ms 7.3376 ms] + change: [-24.141% -20.955% -17.930%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [8.1497 ms 8.3046 ms 8.4715 ms] + change: [-20.133% -17.873% -15.490%] (p = 0.00 < 0.05) + Performance has improved. +Found 20 outliers among 100 measurements (20.00%) + 15 (15.00%) high mild + 5 (5.00%) high severe + +verify_kzg_proof time: [1.2298 ms 1.2324 ms 1.2351 ms] + change: [-1.0881% -0.6811% -0.3048%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low severe + 2 (2.00%) low mild + +compute_blob_kzg_proof time: [8.9997 ms 9.1496 ms 9.3105 ms] + change: [-16.680% -14.983% -13.080%] (p = 0.00 < 0.05) + Performance has improved. +Found 21 outliers among 100 measurements (21.00%) + 2 (2.00%) high mild + 19 (19.00%) high severe + +verify_blob_kzg_proof time: [2.8132 ms 2.8214 ms 2.8296 ms] + change: [+0.1056% +0.5262% +0.9813%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8198 ms 2.8280 ms 2.8361 ms] + thrpt: [352.60 elem/s 353.60 elem/s 354.63 elem/s] + change: + time: [-1.2652% -0.8961% -0.5150%] (p = 0.00 < 0.05) + thrpt: [+0.5177% +0.9042% +1.2814%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [3.3286 ms 3.4232 ms 3.5361 ms] + thrpt: [565.59 elem/s 584.26 elem/s 600.85 elem/s] + change: + time: [+0.9262% +4.1561% +7.6006%] (p = 0.01 < 0.05) + thrpt: [-7.0637% -3.9903% -0.9177%] + Change within noise threshold. +Found 9 outliers among 100 measurements (9.00%) + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.6998 ms 3.8728 ms 4.0574 ms] + thrpt: [985.85 elem/s 1.0328 Kelem/s 1.0811 Kelem/s] + change: + time: [+1.0572% +7.6889% +14.522%] (p = 0.02 < 0.05) + thrpt: [-12.681% -7.1399% -1.0461%] + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 18 (18.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [5.4524 ms 5.5944 ms 5.7269 ms] + thrpt: [1.3969 Kelem/s 1.4300 Kelem/s 1.4672 Kelem/s] + change: + time: [-5.7577% -2.9469% -0.0224%] (p = 0.05 < 0.05) + thrpt: [+0.0224% +3.0364% +6.1094%] + Change within noise threshold. +Found 15 outliers among 100 measurements (15.00%) + 5 (5.00%) low severe + 10 (10.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [7.9894 ms 8.4275 ms 8.8632 ms] + thrpt: [1.8052 Kelem/s 1.8986 Kelem/s 2.0027 Kelem/s] + change: + time: [-1.1102% +6.5056% +14.559%] (p = 0.09 > 0.05) + thrpt: [-12.709% -6.1083% +1.1227%] + No change in performance detected. +verify_blob_kzg_proof_batch/32 + time: [11.704 ms 12.347 ms 13.012 ms] + thrpt: [2.4592 Kelem/s 2.5916 Kelem/s 2.7340 Kelem/s] + change: + time: [+13.398% +21.119% +28.371%] (p = 0.00 < 0.05) + thrpt: [-22.101% -17.437% -11.815%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [18.802 ms 19.560 ms 20.408 ms] + thrpt: [3.1361 Kelem/s 3.2720 Kelem/s 3.4040 Kelem/s] + change: + time: [+3.0827% +7.6382% +13.677%] (p = 0.00 < 0.05) + thrpt: [-12.032% -7.0962% -2.9905%] + Performance has regressed. +Found 18 outliers among 100 measurements (18.00%) + 1 (1.00%) high mild + 17 (17.00%) high severe + +bench_fft_fr scale: '15' + time: [2.7222 ms 2.7384 ms 2.7587 ms] + change: [-1.4846% +0.2060% +1.9276%] (p = 0.83 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [4.7256 s 4.8634 s 5.0186 s] + change: [-2.5531% +1.3324% +5.4658%] (p = 0.54 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [6.2883 s 6.3988 s 6.5166 s] + change: [-2.1156% +0.2415% +2.6238%] (p = 0.85 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [1.0883 s 1.1063 s 1.1254 s] + change: [-4.1928% -0.6269% +2.6020%] (p = 0.75 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [41.179 ms 41.761 ms 42.475 ms] + change: [-16.179% -14.800% -13.258%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [42.360 ms 42.631 ms 42.983 ms] + change: [-13.718% -11.744% -9.8742%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [8.6755 ms 8.9026 ms 9.1378 ms] + change: [-4.2711% -0.4654% +3.0696%] (p = 0.81 > 0.05) + No change in performance detected. + +bench_g1_lincomb with precomputation points: '4096' + time: [6.5606 ms 6.7440 ms 6.9396 ms] + change: [-82.843% -82.305% -81.748%] (p = 0.00 < 0.05) + Performance has improved. +Found 23 outliers among 100 measurements (23.00%) + 2 (2.00%) high mild + 21 (21.00%) high severe + +bench_new_poly_div scale: '15' + time: [217.14 ms 219.39 ms 221.46 ms] + change: [-3.3927% -1.8334% -0.3210%] (p = 0.04 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [81.872 ms 83.484 ms 84.835 ms] + change: [-1.9863% +0.7933% +3.4438%] (p = 0.58 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [54.632 ms 55.848 ms 57.227 ms] + change: [-2.9920% -0.1613% +2.8689%] (p = 0.92 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9475 ms 8.9718 ms 9.0049 ms] + change: [+226.53% +229.60% +233.54%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +blob_to_kzg_commitment time: [49.650 ms 49.763 ms 49.876 ms] + change: [+577.82% +598.91% +620.48%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_kzg_proof time: [52.153 ms 52.300 ms 52.447 ms] + change: [+517.19% +529.77% +541.85%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2114 ms 1.2143 ms 1.2171 ms] + change: [-1.7306% -1.4496% -1.1581%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [52.759 ms 52.897 ms 53.036 ms] + change: [+468.09% +478.14% +487.89%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.5138 ms 2.5200 ms 2.5264 ms] + change: [-11.020% -10.683% -10.327%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.5361 ms 2.5434 ms 2.5512 ms] + thrpt: [391.97 elem/s 393.17 elem/s 394.30 elem/s] + change: + time: [-10.426% -10.063% -9.6890%] (p = 0.00 < 0.05) + thrpt: [+10.729% +11.189% +11.640%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.1574 ms 4.1678 ms 4.1784 ms] + thrpt: [478.65 elem/s 479.87 elem/s 481.07 elem/s] + change: + time: [+17.859% +21.754% +25.244%] (p = 0.00 < 0.05) + thrpt: [-20.156% -17.867% -15.153%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.3945 ms 7.4148 ms 7.4358 ms] + thrpt: [537.94 elem/s 539.47 elem/s 540.94 elem/s] + change: + time: [+82.724% +91.456% +100.42%] (p = 0.00 < 0.05) + thrpt: [-50.106% -47.769% -45.273%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.439 ms 13.485 ms 13.537 ms] + thrpt: [590.98 elem/s 593.26 elem/s 595.30 elem/s] + change: + time: [+135.38% +141.04% +147.40%] (p = 0.00 < 0.05) + thrpt: [-59.580% -58.513% -57.515%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [25.377 ms 25.457 ms 25.539 ms] + thrpt: [626.48 elem/s 628.50 elem/s 630.50 elem/s] + change: + time: [+187.11% +202.08% +218.50%] (p = 0.00 < 0.05) + thrpt: [-68.603% -66.896% -65.171%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [48.704 ms 48.847 ms 48.994 ms] + thrpt: [653.14 elem/s 655.10 elem/s 657.03 elem/s] + change: + time: [+275.38% +295.61% +317.35%] (p = 0.00 < 0.05) + thrpt: [-76.039% -74.722% -73.360%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [95.504 ms 95.843 ms 96.231 ms] + thrpt: [665.07 elem/s 667.76 elem/s 670.13 elem/s] + change: + time: [+369.69% +389.99% +409.92%] (p = 0.00 < 0.05) + thrpt: [-80.389% -79.592% -78.709%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [33.779 ms 33.872 ms 33.978 ms] + change: [-32.187% -31.933% -31.660%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [35.159 ms 35.277 ms 35.402 ms] + change: [-32.842% -32.549% -32.228%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1075 ms 1.1115 ms 1.1154 ms] + change: [-8.7416% -8.3717% -8.0397%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [35.381 ms 35.517 ms 35.668 ms] + change: [-33.177% -32.857% -32.551%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.3223 ms 2.3288 ms 2.3354 ms] + change: [-7.9103% -7.5880% -7.2542%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3358 ms 2.3424 ms 2.3493 ms] + thrpt: [425.67 elem/s 426.91 elem/s 428.13 elem/s] + change: + time: [-8.2993% -7.9035% -7.5150%] (p = 0.00 < 0.05) + thrpt: [+8.1256% +8.5817% +9.0504%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.8812 ms 3.8966 ms 3.9139 ms] + thrpt: [511.00 elem/s 513.27 elem/s 515.31 elem/s] + change: + time: [-6.9257% -6.5070% -6.0249%] (p = 0.00 < 0.05) + thrpt: [+6.4111% +6.9599% +7.4410%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.8811 ms 6.9022 ms 6.9244 ms] + thrpt: [577.67 elem/s 579.52 elem/s 581.30 elem/s] + change: + time: [-7.3244% -6.9122% -6.5326%] (p = 0.00 < 0.05) + thrpt: [+6.9891% +7.4255% +7.9033%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.953 ms 12.986 ms 13.020 ms] + thrpt: [614.42 elem/s 616.03 elem/s 617.61 elem/s] + change: + time: [-4.1448% -3.6957% -3.2898%] (p = 0.00 < 0.05) + thrpt: [+3.4017% +3.8375% +4.3240%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.248 ms 24.336 ms 24.430 ms] + thrpt: [654.93 elem/s 657.48 elem/s 659.86 elem/s] + change: + time: [-4.8751% -4.4065% -3.9470%] (p = 0.00 < 0.05) + thrpt: [+4.1092% +4.6096% +5.1249%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.079 ms 47.183 ms 47.284 ms] + thrpt: [676.76 elem/s 678.21 elem/s 679.71 elem/s] + change: + time: [-3.7592% -3.4076% -3.0427%] (p = 0.00 < 0.05) + thrpt: [+3.1382% +3.5279% +3.9061%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [93.669 ms 93.983 ms 94.307 ms] + thrpt: [678.63 elem/s 680.97 elem/s 683.26 elem/s] + change: + time: [-2.4443% -1.9406% -1.4607%] (p = 0.00 < 0.05) + thrpt: [+1.4823% +1.9790% +2.5055%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [33.823 ms 33.907 ms 33.992 ms] + change: [-0.2869% +0.1033% +0.4788%] (p = 0.60 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [34.835 ms 34.939 ms 35.047 ms] + change: [-1.4152% -0.9593% -0.5148%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1137 ms 1.1180 ms 1.1232 ms] + change: [+0.0954% +0.5323% +1.0134%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.380 ms 35.491 ms 35.620 ms] + change: [-0.5950% -0.0711% +0.4497%] (p = 0.80 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.2001 ms 2.2063 ms 2.2124 ms] + change: [-5.6465% -5.2616% -4.8787%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2661 ms 2.2727 ms 2.2794 ms] + thrpt: [438.71 elem/s 440.00 elem/s 441.29 elem/s] + change: + time: [-3.3649% -2.9751% -2.5711%] (p = 0.00 < 0.05) + thrpt: [+2.6389% +3.0663% +3.4820%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.6874 ms 3.6983 ms 3.7093 ms] + thrpt: [539.19 elem/s 540.79 elem/s 542.39 elem/s] + change: + time: [-5.5908% -5.0900% -4.6094%] (p = 0.00 < 0.05) + thrpt: [+4.8322% +5.3630% +5.9219%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [6.5030 ms 6.5216 ms 6.5406 ms] + thrpt: [611.57 elem/s 613.35 elem/s 615.10 elem/s] + change: + time: [-5.9249% -5.5153% -5.1325%] (p = 0.00 < 0.05) + thrpt: [+5.4102% +5.8373% +6.2980%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.998 ms 12.026 ms 12.054 ms] + thrpt: [663.68 elem/s 665.20 elem/s 666.77 elem/s] + change: + time: [-7.7155% -7.3922% -7.0629%] (p = 0.00 < 0.05) + thrpt: [+7.5997% +7.9822% +8.3606%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [22.732 ms 22.796 ms 22.865 ms] + thrpt: [699.76 elem/s 701.87 elem/s 703.85 elem/s] + change: + time: [-6.7831% -6.3255% -5.9037%] (p = 0.00 < 0.05) + thrpt: [+6.2741% +6.7526% +7.2767%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [43.880 ms 43.993 ms 44.111 ms] + thrpt: [725.44 elem/s 727.38 elem/s 729.26 elem/s] + change: + time: [-7.0578% -6.7597% -6.4448%] (p = 0.00 < 0.05) + thrpt: [+6.8887% +7.2497% +7.5938%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [86.407 ms 86.619 ms 86.850 ms] + thrpt: [736.90 elem/s 738.86 elem/s 740.68 elem/s] + change: + time: [-8.2230% -7.8351% -7.4501%] (p = 0.00 < 0.05) + thrpt: [+8.0498% +8.5011% +8.9598%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [9.4201 ms 9.4364 ms 9.4668 ms] + change: [+241.33% +243.93% +246.92%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low severe + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [20.085 s 20.105 s 20.125 s] + change: [+300.70% +313.39% +325.47%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [21.497 s 21.555 s 21.631 s] + change: [+230.69% +236.85% +242.92%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [4.6994 s 4.7128 s 4.7277 s] + change: [+318.64% +325.98% +333.10%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [319.13 ms 320.05 ms 320.89 ms] + change: [+654.87% +665.93% +675.75%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [331.50 ms 332.61 ms 333.74 ms] + change: [+664.46% +677.58% +688.08%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [51.316 ms 51.463 ms 51.584 ms] + change: [+461.64% +476.47% +491.57%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [653.52 ms 658.15 ms 662.03 ms] + change: [+196.55% +200.00% +203.69%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [285.23 ms 286.87 ms 288.58 ms] + change: [+235.98% +242.59% +249.24%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [166.02 ms 166.67 ms 167.20 ms] + change: [+188.49% +196.14% +203.79%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9464 ms 8.9762 ms 9.0151 ms] + change: [-0.7040% -0.0951% +0.4608%] (p = 0.77 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [41.957 ms 42.091 ms 42.228 ms] + change: [+23.643% +24.136% +24.671%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [44.158 ms 44.303 ms 44.454 ms] + change: [+26.229% +26.802% +27.404%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2150 ms 1.2182 ms 1.2214 ms] + change: [+8.1721% +8.6783% +9.1963%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [45.063 ms 45.185 ms 45.312 ms] + change: [+26.731% +27.313% +27.859%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild + +verify_blob_kzg_proof time: [2.5134 ms 2.5200 ms 2.5265 ms] + change: [+13.787% +14.219% +14.653%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [2.5452 ms 2.5512 ms 2.5572 ms] + thrpt: [391.05 elem/s 391.97 elem/s 392.90 elem/s] + change: + time: [+11.833% +12.254% +12.677%] (p = 0.00 < 0.05) + thrpt: [-11.251% -10.916% -10.581%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [4.1694 ms 4.1790 ms 4.1886 ms] + thrpt: [477.48 elem/s 478.58 elem/s 479.69 elem/s] + change: + time: [+12.579% +12.999% +13.415%] (p = 0.00 < 0.05) + thrpt: [-11.828% -11.504% -11.173%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [7.4453 ms 7.4644 ms 7.4834 ms] + thrpt: [534.52 elem/s 535.88 elem/s 537.25 elem/s] + change: + time: [+13.998% +14.457% +14.912%] (p = 0.00 < 0.05) + thrpt: [-12.977% -12.631% -12.279%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [18.365 ms 18.421 ms 18.478 ms] + thrpt: [432.95 elem/s 434.29 elem/s 435.62 elem/s] + change: + time: [+52.586% +53.171% +53.766%] (p = 0.00 < 0.05) + thrpt: [-34.966% -34.714% -34.463%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [31.792 ms 31.883 ms 31.976 ms] + thrpt: [500.38 elem/s 501.83 elem/s 503.27 elem/s] + change: + time: [+39.313% +39.862% +40.446%] (p = 0.00 < 0.05) + thrpt: [-28.798% -28.501% -28.219%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [54.944 ms 55.093 ms 55.252 ms] + thrpt: [579.16 elem/s 580.84 elem/s 582.41 elem/s] + change: + time: [+24.744% +25.230% +25.709%] (p = 0.00 < 0.05) + thrpt: [-20.451% -20.147% -19.836%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [100.93 ms 101.20 ms 101.47 ms] + thrpt: [630.73 elem/s 632.43 elem/s 634.13 elem/s] + change: + time: [+16.375% +16.830% +17.256%] (p = 0.00 < 0.05) + thrpt: [-14.716% -14.405% -14.071%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [34.715 ms 34.836 ms 34.971 ms] + change: [-17.618% -17.238% -16.789%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [35.366 ms 35.483 ms 35.608 ms] + change: [-20.280% -19.909% -19.526%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1269 ms 1.1324 ms 1.1397 ms] + change: [-7.7780% -7.3407% -6.8305%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.786 ms 35.890 ms 35.997 ms] + change: [-20.884% -20.570% -20.256%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.3249 ms 2.3317 ms 2.3386 ms] + change: [-7.8217% -7.4712% -7.1119%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3782 ms 2.3853 ms 2.3925 ms] + thrpt: [417.97 elem/s 419.24 elem/s 420.48 elem/s] + change: + time: [-6.8534% -6.5047% -6.1504%] (p = 0.00 < 0.05) + thrpt: [+6.5534% +6.9572% +7.3577%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.9432 ms 3.9541 ms 3.9652 ms] + thrpt: [504.39 elem/s 505.80 elem/s 507.20 elem/s] + change: + time: [-5.7263% -5.3820% -5.0168%] (p = 0.00 < 0.05) + thrpt: [+5.2818% +5.6881% +6.0741%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.9855 ms 7.0029 ms 7.0200 ms] + thrpt: [569.80 elem/s 571.19 elem/s 572.61 elem/s] + change: + time: [-6.5259% -6.1827% -5.8725%] (p = 0.00 < 0.05) + thrpt: [+6.2389% +6.5902% +6.9816%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [13.120 ms 13.164 ms 13.216 ms] + thrpt: [605.33 elem/s 607.72 elem/s 609.76 elem/s] + change: + time: [-28.877% -28.539% -28.184%] (p = 0.00 < 0.05) + thrpt: [+39.245% +39.936% +40.602%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [25.061 ms 25.123 ms 25.187 ms] + thrpt: [635.24 elem/s 636.86 elem/s 638.44 elem/s] + change: + time: [-21.501% -21.202% -20.895%] (p = 0.00 < 0.05) + thrpt: [+26.415% +26.907% +27.389%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.483 ms 47.610 ms 47.739 ms] + thrpt: [670.31 elem/s 672.12 elem/s 673.93 elem/s] + change: + time: [-13.908% -13.581% -13.247%] (p = 0.00 < 0.05) + thrpt: [+15.269% +15.716% +16.155%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [94.200 ms 94.435 ms 94.675 ms] + thrpt: [676.00 elem/s 677.72 elem/s 679.41 elem/s] + change: + time: [-7.0088% -6.6825% -6.3412%] (p = 0.00 < 0.05) + thrpt: [+6.7706% +7.1610% +7.5370%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [33.536 ms 33.625 ms 33.720 ms] + change: [-3.9342% -3.4743% -3.0492%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [34.772 ms 34.882 ms 35.009 ms] + change: [-2.1533% -1.6931% -1.2117%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1023 ms 1.1056 ms 1.1087 ms] + change: [-2.8072% -2.3095% -1.8471%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [35.405 ms 35.497 ms 35.593 ms] + change: [-1.4840% -1.0964% -0.7038%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.2112 ms 2.2166 ms 2.2219 ms] + change: [-5.2988% -4.9369% -4.5668%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2615 ms 2.2699 ms 2.2799 ms] + thrpt: [438.62 elem/s 440.56 elem/s 442.18 elem/s] + change: + time: [-5.2933% -4.8388% -4.3825%] (p = 0.00 < 0.05) + thrpt: [+4.5833% +5.0849% +5.5891%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.6897 ms 3.7017 ms 3.7145 ms] + thrpt: [538.44 elem/s 540.29 elem/s 542.04 elem/s] + change: + time: [-6.7852% -6.3834% -5.9753%] (p = 0.00 < 0.05) + thrpt: [+6.3550% +6.8186% +7.2790%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.4439 ms 6.4596 ms 6.4756 ms] + thrpt: [617.70 elem/s 619.23 elem/s 620.74 elem/s] + change: + time: [-8.0800% -7.7575% -7.4304%] (p = 0.00 < 0.05) + thrpt: [+8.0268% +8.4099% +8.7903%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.004 ms 12.031 ms 12.059 ms] + thrpt: [663.43 elem/s 664.94 elem/s 666.43 elem/s] + change: + time: [-9.0064% -8.6044% -8.2286%] (p = 0.00 < 0.05) + thrpt: [+8.9664% +9.4145% +9.8979%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [22.804 ms 22.869 ms 22.936 ms] + thrpt: [697.60 elem/s 699.63 elem/s 701.64 elem/s] + change: + time: [-9.3093% -8.9721% -8.6317%] (p = 0.00 < 0.05) + thrpt: [+9.4472% +9.8564% +10.265%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.057 ms 44.152 ms 44.247 ms] + thrpt: [723.22 elem/s 724.77 elem/s 726.33 elem/s] + change: + time: [-7.5780% -7.2637% -6.9525%] (p = 0.00 < 0.05) + thrpt: [+7.4720% +7.8327% +8.1994%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [86.781 ms 87.018 ms 87.256 ms] + thrpt: [733.48 elem/s 735.48 elem/s 737.49 elem/s] + change: + time: [-8.1834% -7.8536% -7.5342%] (p = 0.00 < 0.05) + thrpt: [+8.1481% +8.5230% +8.9128%] + Performance has improved. + +bench_fft_fr scale: '15' + time: [9.2845 ms 9.3244 ms 9.3500 ms] + change: [-2.0772% -1.4018% -0.7961%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.279 s 20.334 s 20.387 s] + change: [+0.8519% +1.1382% +1.4389%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.834 s 21.906 s 21.979 s] + change: [+1.1475% +1.6289% +2.0761%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [4.7593 s 4.7934 s 4.8325 s] + change: [+0.8987% +1.7087% +2.4590%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [304.35 ms 307.86 ms 311.04 ms] + change: [-4.9722% -3.8076% -2.9114%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_compute_proof_single scale: '15' + time: [304.79 ms 306.99 ms 309.29 ms] + change: [-8.4256% -7.7023% -6.9044%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [43.459 ms 43.604 ms 43.792 ms] + change: [-15.200% -14.619% -14.087%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [651.08 ms 653.37 ms 655.91 ms] + change: [-1.4098% -0.7272% +0.1038%] (p = 0.09 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [281.41 ms 282.85 ms 284.22 ms] + change: [-2.1702% -1.4024% -0.6241%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [165.97 ms 167.27 ms 169.16 ms] + change: [-0.2305% +0.5351% +1.3144%] (p = 0.24 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0585 ms 9.1582 ms 9.2063 ms] + change: [+0.8164% +1.6710% +2.4696%] (p = 0.00 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [36.376 ms 36.497 ms 36.621 ms] + change: [+8.0700% +8.5400% +8.9733%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_kzg_proof time: [37.102 ms 37.212 ms 37.323 ms] + change: [+6.1772% +6.6803% +7.1546%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2211 ms 1.2261 ms 1.2315 ms] + change: [+11.587% +12.220% +12.838%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [38.206 ms 38.340 ms 38.493 ms] + change: [+7.5287% +8.0088% +8.5484%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.5092 ms 2.5168 ms 2.5245 ms] + change: [+13.098% +13.544% +13.982%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.6003 ms 2.6074 ms 2.6148 ms] + thrpt: [382.44 elem/s 383.52 elem/s 384.57 elem/s] + change: + time: [+14.270% +14.872% +15.406%] (p = 0.00 < 0.05) + thrpt: [-13.349% -12.946% -12.488%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.1962 ms 4.2057 ms 4.2152 ms] + thrpt: [474.48 elem/s 475.54 elem/s 476.62 elem/s] + change: + time: [+13.156% +13.616% +14.069%] (p = 0.00 < 0.05) + thrpt: [-12.334% -11.984% -11.626%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.6624 ms 7.6911 ms 7.7216 ms] + thrpt: [518.03 elem/s 520.08 elem/s 522.03 elem/s] + change: + time: [+18.527% +19.065% +19.597%] (p = 0.00 < 0.05) + thrpt: [-16.386% -16.012% -15.631%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.393 ms 13.440 ms 13.489 ms] + thrpt: [593.09 elem/s 595.22 elem/s 597.32 elem/s] + change: + time: [+11.257% +11.713% +12.184%] (p = 0.00 < 0.05) + thrpt: [-10.861% -10.485% -10.118%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [26.146 ms 26.248 ms 26.348 ms] + thrpt: [607.25 elem/s 609.57 elem/s 611.95 elem/s] + change: + time: [+14.220% +14.775% +15.320%] (p = 0.00 < 0.05) + thrpt: [-13.285% -12.873% -12.450%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [48.986 ms 49.197 ms 49.425 ms] + thrpt: [647.45 elem/s 650.45 elem/s 653.25 elem/s] + change: + time: [+10.927% +11.426% +12.004%] (p = 0.00 < 0.05) + thrpt: [-10.717% -10.254% -9.8509%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [96.667 ms 96.861 ms 97.058 ms] + thrpt: [659.40 elem/s 660.74 elem/s 662.07 elem/s] + change: + time: [+10.937% +11.311% +11.686%] (p = 0.00 < 0.05) + thrpt: [-10.463% -10.162% -9.8591%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [34.200 ms 34.311 ms 34.435 ms] + change: [-6.4243% -5.9900% -5.5867%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +compute_kzg_proof time: [35.258 ms 35.387 ms 35.517 ms] + change: [-5.3339% -4.9058% -4.4367%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1175 ms 1.1223 ms 1.1271 ms] + change: [-9.5051% -8.9877% -8.4394%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [36.562 ms 36.693 ms 36.821 ms] + change: [-4.8011% -4.2961% -3.8166%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild + +verify_blob_kzg_proof time: [2.3122 ms 2.3188 ms 2.3255 ms] + change: [-8.2382% -7.8672% -7.4861%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3862 ms 2.3995 ms 2.4143 ms] + thrpt: [414.20 elem/s 416.75 elem/s 419.08 elem/s] + change: + time: [-8.5506% -7.9727% -7.3398%] (p = 0.00 < 0.05) + thrpt: [+7.9212% +8.6634% +9.3501%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 6 (6.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.8960 ms 3.9070 ms 3.9181 ms] + thrpt: [510.45 elem/s 511.90 elem/s 513.35 elem/s] + change: + time: [-7.4609% -7.1036% -6.7766%] (p = 0.00 < 0.05) + thrpt: [+7.2692% +7.6468% +8.0624%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.9351 ms 6.9533 ms 6.9719 ms] + thrpt: [573.73 elem/s 575.27 elem/s 576.77 elem/s] + change: + time: [-10.028% -9.5929% -9.1770%] (p = 0.00 < 0.05) + thrpt: [+10.104% +10.611% +11.146%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.045 ms 13.088 ms 13.134 ms] + thrpt: [609.12 elem/s 611.25 elem/s 613.27 elem/s] + change: + time: [-3.1177% -2.6220% -2.1514%] (p = 0.00 < 0.05) + thrpt: [+2.1987% +2.6926% +3.2180%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.613 ms 24.689 ms 24.768 ms] + thrpt: [645.99 elem/s 648.06 elem/s 650.06 elem/s] + change: + time: [-6.3848% -5.9402% -5.4791%] (p = 0.00 < 0.05) + thrpt: [+5.7967% +6.3153% +6.8203%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [47.428 ms 47.580 ms 47.761 ms] + thrpt: [670.00 elem/s 672.55 elem/s 674.71 elem/s] + change: + time: [-3.8305% -3.2866% -2.7069%] (p = 0.00 < 0.05) + thrpt: [+2.7822% +3.3983% +3.9831%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [93.151 ms 93.419 ms 93.695 ms] + thrpt: [683.07 elem/s 685.08 elem/s 687.06 elem/s] + change: + time: [-3.8958% -3.5533% -3.1957%] (p = 0.00 < 0.05) + thrpt: [+3.3012% +3.6843% +4.0538%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [34.016 ms 34.130 ms 34.245 ms] + change: [-1.0050% -0.5265% -0.0716%] (p = 0.03 < 0.05) + Change within noise threshold. + +compute_kzg_proof time: [35.282 ms 35.369 ms 35.457 ms] + change: [-0.4695% -0.0494% +0.4291%] (p = 0.83 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1140 ms 1.1173 ms 1.1207 ms] + change: [-1.0944% -0.6089% -0.1182%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [36.245 ms 36.368 ms 36.496 ms] + change: [-1.3639% -0.8855% -0.3988%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.2156 ms 2.2223 ms 2.2295 ms] + change: [-4.5858% -4.1605% -3.7755%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.2811 ms 2.2883 ms 2.2957 ms] + thrpt: [435.59 elem/s 437.01 elem/s 438.39 elem/s] + change: + time: [-5.3030% -4.6365% -4.0101%] (p = 0.00 < 0.05) + thrpt: [+4.1776% +4.8619% +5.5999%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7085 ms 3.7177 ms 3.7272 ms] + thrpt: [536.59 elem/s 537.96 elem/s 539.30 elem/s] + change: + time: [-5.2045% -4.8441% -4.4843%] (p = 0.00 < 0.05) + thrpt: [+4.6948% +5.0907% +5.4902%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.5538 ms 6.5774 ms 6.6017 ms] + thrpt: [605.90 elem/s 608.14 elem/s 610.34 elem/s] + change: + time: [-5.8124% -5.4059% -4.9662%] (p = 0.00 < 0.05) + thrpt: [+5.2257% +5.7149% +6.1710%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [11.916 ms 11.952 ms 11.993 ms] + thrpt: [667.05 elem/s 669.36 elem/s 671.35 elem/s] + change: + time: [-9.1034% -8.6819% -8.2389%] (p = 0.00 < 0.05) + thrpt: [+8.9786% +9.5073% +10.015%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [22.733 ms 22.798 ms 22.863 ms] + thrpt: [699.82 elem/s 701.83 elem/s 703.82 elem/s] + change: + time: [-8.0572% -7.6604% -7.2945%] (p = 0.00 < 0.05) + thrpt: [+7.8684% +8.2959% +8.7633%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [43.995 ms 44.089 ms 44.182 ms] + thrpt: [724.27 elem/s 725.81 elem/s 727.36 elem/s] + change: + time: [-7.7335% -7.3377% -6.9691%] (p = 0.00 < 0.05) + thrpt: [+7.4911% +7.9187% +8.3817%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [86.883 ms 87.111 ms 87.348 ms] + thrpt: [732.70 elem/s 734.69 elem/s 736.62 elem/s] + change: + time: [-7.1197% -6.7524% -6.3962%] (p = 0.00 < 0.05) + thrpt: [+6.8333% +7.2413% +7.6655%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +bench_fft_fr scale: '15' + time: [9.3983 ms 9.4480 ms 9.4892 ms] + change: [+0.7485% +1.2410% +1.7502%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.196 s 20.233 s 20.276 s] + change: [-0.8129% -0.4935% -0.1635%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.506 s 21.546 s 21.585 s] + change: [-2.0176% -1.6419% -1.2757%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + +bench_fk_multi_da scale: '14' + time: [4.7110 s 4.7185 s 4.7256 s] + change: [-2.3741% -1.5624% -0.8424%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [259.25 ms 261.64 ms 264.43 ms] + change: [-16.188% -15.013% -13.734%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [257.47 ms 259.03 ms 261.02 ms] + change: [-16.425% -15.624% -14.719%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +bench_g1_lincomb points: '4096' + time: [51.575 ms 51.707 ms 51.927 ms] + change: [+17.303% +18.283% +19.545%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '4096' + time: [36.264 ms 36.326 ms 36.371 ms] + change: [+423.71% +438.86% +453.95%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [646.26 ms 648.75 ms 651.41 ms] + change: [-1.2735% -0.7068% -0.1626%] (p = 0.03 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [284.58 ms 285.66 ms 286.73 ms] + change: [+0.3778% +0.9913% +1.6571%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [165.95 ms 167.04 ms 167.92 ms] + change: [-1.4534% -0.4594% +0.5273%] (p = 0.40 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9005 ms 8.9306 ms 8.9654 ms] + change: [-2.8049% -1.9701% -1.0708%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [35.107 ms 35.249 ms 35.411 ms] + change: [+2.7334% +3.2783% +3.9039%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe + +compute_kzg_proof time: [36.400 ms 36.482 ms 36.566 ms] + change: [+2.7954% +3.1473% +3.4747%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) low mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2079 ms 1.2127 ms 1.2182 ms] + change: [+7.6329% +8.1564% +8.6189%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [37.201 ms 37.282 ms 37.363 ms] + change: [+2.0949% +2.5132% +2.9274%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.5401 ms 2.5485 ms 2.5571 ms] + change: [+14.166% +14.677% +15.198%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5611 ms 2.5686 ms 2.5761 ms] + thrpt: [388.19 elem/s 389.32 elem/s 390.45 elem/s] + change: + time: [+11.746% +12.251% +12.719%] (p = 0.00 < 0.05) + thrpt: [-11.284% -10.914% -10.512%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.0620 ms 4.0758 ms 4.0910 ms] + thrpt: [488.88 elem/s 490.70 elem/s 492.37 elem/s] + change: + time: [+9.1366% +9.6328% +10.126%] (p = 0.00 < 0.05) + thrpt: [-9.1949% -8.7864% -8.3717%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.1143 ms 7.1335 ms 7.1522 ms] + thrpt: [559.27 elem/s 560.73 elem/s 562.25 elem/s] + change: + time: [+7.9312% +8.4549% +8.9487%] (p = 0.00 < 0.05) + thrpt: [-8.2137% -7.7957% -7.3484%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [13.126 ms 13.156 ms 13.186 ms] + thrpt: [606.71 elem/s 608.07 elem/s 609.46 elem/s] + change: + time: [+9.6022% +10.079% +10.474%] (p = 0.00 < 0.05) + thrpt: [-9.4806% -9.1559% -8.7610%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [25.059 ms 25.121 ms 25.184 ms] + thrpt: [635.34 elem/s 636.91 elem/s 638.49 elem/s] + change: + time: [+9.7801% +10.193% +10.614%] (p = 0.00 < 0.05) + thrpt: [-9.5953% -9.2502% -8.9088%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [48.265 ms 48.442 ms 48.637 ms] + thrpt: [657.94 elem/s 660.59 elem/s 663.01 elem/s] + change: + time: [+9.4479% +9.8733% +10.362%] (p = 0.00 < 0.05) + thrpt: [-9.3890% -8.9861% -8.6323%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [94.870 ms 95.099 ms 95.328 ms] + thrpt: [671.37 elem/s 672.98 elem/s 674.60 elem/s] + change: + time: [+8.7814% +9.1701% +9.5489%] (p = 0.00 < 0.05) + thrpt: [-8.7166% -8.3998% -8.0725%] + Performance has regressed. + +blob_to_kzg_commitment time: [33.748 ms 33.868 ms 34.001 ms] + change: [-4.4764% -3.9186% -3.3929%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [35.001 ms 35.084 ms 35.167 ms] + change: [-4.1422% -3.8323% -3.5210%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1198 ms 1.1235 ms 1.1277 ms] + change: [-7.4629% -7.1019% -6.7207%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [35.598 ms 35.714 ms 35.834 ms] + change: [-4.5695% -4.2056% -3.7915%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof time: [2.2932 ms 2.2978 ms 2.3025 ms] + change: [-10.183% -9.8364% -9.4911%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3366 ms 2.3419 ms 2.3474 ms] + thrpt: [426.01 elem/s 427.00 elem/s 427.98 elem/s] + change: + time: [-9.1496% -8.8245% -8.4605%] (p = 0.00 < 0.05) + thrpt: [+9.2425% +9.6785% +10.071%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.8858 ms 3.8987 ms 3.9127 ms] + thrpt: [511.15 elem/s 512.99 elem/s 514.69 elem/s] + change: + time: [-4.8076% -4.3450% -3.8715%] (p = 0.00 < 0.05) + thrpt: [+4.0274% +4.5424% +5.0504%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.8986 ms 6.9193 ms 6.9399 ms] + thrpt: [576.38 elem/s 578.09 elem/s 579.82 elem/s] + change: + time: [-3.3752% -3.0034% -2.6060%] (p = 0.00 < 0.05) + thrpt: [+2.6758% +3.0964% +3.4931%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [13.048 ms 13.091 ms 13.136 ms] + thrpt: [609.01 elem/s 611.11 elem/s 613.14 elem/s] + change: + time: [-0.8878% -0.4967% -0.0511%] (p = 0.02 < 0.05) + thrpt: [+0.0511% +0.4992% +0.8957%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.265 ms 24.340 ms 24.416 ms] + thrpt: [655.30 elem/s 657.35 elem/s 659.38 elem/s] + change: + time: [-3.4955% -3.1105% -2.7233%] (p = 0.00 < 0.05) + thrpt: [+2.7996% +3.2104% +3.6221%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.319 ms 47.454 ms 47.606 ms] + thrpt: [672.18 elem/s 674.34 elem/s 676.26 elem/s] + change: + time: [-2.5044% -2.0392% -1.5825%] (p = 0.00 < 0.05) + thrpt: [+1.6079% +2.0816% +2.5688%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [93.486 ms 93.713 ms 93.943 ms] + thrpt: [681.26 elem/s 682.94 elem/s 684.59 elem/s] + change: + time: [-1.7967% -1.4577% -1.1298%] (p = 0.00 < 0.05) + thrpt: [+1.1427% +1.4793% +1.8296%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [33.905 ms 34.002 ms 34.105 ms] + change: [-0.0695% +0.3967% +0.8789%] (p = 0.10 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +compute_kzg_proof time: [34.972 ms 35.066 ms 35.161 ms] + change: [-0.4157% -0.0524% +0.2950%] (p = 0.78 > 0.05) + No change in performance detected. + +verify_kzg_proof time: [1.1182 ms 1.1213 ms 1.1242 ms] + change: [-0.6333% -0.2415% +0.1274%] (p = 0.22 > 0.05) + No change in performance detected. + +compute_blob_kzg_proof time: [35.812 ms 35.897 ms 35.983 ms] + change: [+0.0920% +0.5119% +0.9190%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.2197 ms 2.2255 ms 2.2314 ms] + change: [-3.4655% -3.1471% -2.8292%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.2843 ms 2.2926 ms 2.3022 ms] + thrpt: [434.36 elem/s 436.18 elem/s 437.78 elem/s] + change: + time: [-2.5283% -2.1053% -1.6363%] (p = 0.00 < 0.05) + thrpt: [+1.6635% +2.1506% +2.5939%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.7252 ms 3.7362 ms 3.7482 ms] + thrpt: [533.59 elem/s 535.30 elem/s 536.88 elem/s] + change: + time: [-4.6193% -4.1685% -3.7427%] (p = 0.00 < 0.05) + thrpt: [+3.8883% +4.3499% +4.8430%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.4957 ms 6.5175 ms 6.5399 ms] + thrpt: [611.63 elem/s 613.73 elem/s 615.79 elem/s] + change: + time: [-6.2326% -5.8069% -5.3771%] (p = 0.00 < 0.05) + thrpt: [+5.6826% +6.1649% +6.6469%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.099 ms 12.128 ms 12.157 ms] + thrpt: [658.08 elem/s 659.62 elem/s 661.18 elem/s] + change: + time: [-7.7414% -7.3541% -6.9814%] (p = 0.00 < 0.05) + thrpt: [+7.5054% +7.9379% +8.3909%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [22.991 ms 23.042 ms 23.095 ms] + thrpt: [692.79 elem/s 694.38 elem/s 695.93 elem/s] + change: + time: [-5.6894% -5.3327% -4.9656%] (p = 0.00 < 0.05) + thrpt: [+5.2251% +5.6331% +6.0326%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [44.572 ms 44.681 ms 44.794 ms] + thrpt: [714.39 elem/s 716.19 elem/s 717.94 elem/s] + change: + time: [-6.2027% -5.8434% -5.4967%] (p = 0.00 < 0.05) + thrpt: [+5.8165% +6.2061% +6.6128%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [87.407 ms 87.684 ms 87.962 ms] + thrpt: [727.59 elem/s 729.89 elem/s 732.20 elem/s] + change: + time: [-6.8098% -6.4333% -6.0788%] (p = 0.00 < 0.05) + thrpt: [+6.4722% +6.8757% +7.3074%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [9.3157 ms 9.3288 ms 9.3376 ms] + change: [-1.5071% -1.0487% -0.5829%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.219 s 20.239 s 20.259 s] + change: [-0.2006% +0.0257% +0.2423%] (p = 0.83 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [21.491 s 21.512 s 21.531 s] + change: [-0.3620% -0.1577% +0.0414%] (p = 0.17 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6747 s 4.6829 s 4.6905 s] + change: [-0.9852% -0.7551% -0.5414%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [223.09 ms 224.83 ms 226.81 ms] + change: [-15.179% -14.071% -12.909%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_compute_proof_single scale: '15' + time: [224.08 ms 225.35 ms 226.67 ms] + change: [-13.849% -13.003% -12.283%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [34.918 ms 35.047 ms 35.136 ms] + change: [-33.128% -32.475% -31.922%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [637.31 ms 641.38 ms 645.83 ms] + change: [-1.9033% -1.1354% -0.3354%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 3 outliers among 10 measurements (30.00%) + 2 (20.00%) low mild + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [279.76 ms 280.85 ms 281.85 ms] + change: [-2.2314% -1.6806% -1.1804%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [163.33 ms 163.75 ms 164.27 ms] + change: [-2.4142% -1.6504% -0.8899%] (p = 0.00 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.6263 ms 2.6703 ms 2.7118 ms] + change: [-70.543% -70.253% -69.936%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [7.5598 ms 7.7120 ms 7.8777 ms] + change: [-77.787% -77.319% -76.837%] (p = 0.00 < 0.05) + Performance has improved. +Found 19 outliers among 100 measurements (19.00%) + 1 (1.00%) high mild + 18 (18.00%) high severe + +compute_kzg_proof time: [9.0607 ms 9.2526 ms 9.4547 ms] + change: [-74.134% -73.614% -73.097%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.2169 ms 1.2209 ms 1.2250 ms] + change: [+8.3474% +8.7966% +9.2404%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [10.040 ms 10.244 ms 10.456 ms] + change: [-72.012% -71.462% -70.860%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.5156 ms 2.5302 ms 2.5472 ms] + change: [+12.917% +13.690% +14.492%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5277 ms 2.5359 ms 2.5442 ms] + thrpt: [393.06 elem/s 394.34 elem/s 395.61 elem/s] + change: + time: [+10.036% +10.610% +11.147%] (p = 0.00 < 0.05) + thrpt: [-10.029% -9.5921% -9.1210%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [2.9412 ms 2.9509 ms 2.9609 ms] + thrpt: [675.48 elem/s 677.75 elem/s 679.98 elem/s] + change: + time: [-21.378% -21.019% -20.664%] (p = 0.00 < 0.05) + thrpt: [+26.047% +26.612% +27.192%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.4301 ms 3.6039 ms 3.7868 ms] + thrpt: [1.0563 Kelem/s 1.1099 Kelem/s 1.1661 Kelem/s] + change: + time: [-47.659% -44.705% -41.798%] (p = 0.00 < 0.05) + thrpt: [+71.814% +80.848% +91.054%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [5.0672 ms 5.1779 ms 5.2780 ms] + thrpt: [1.5157 Kelem/s 1.5450 Kelem/s 1.5788 Kelem/s] + change: + time: [-58.300% -57.307% -56.467%] (p = 0.00 < 0.05) + thrpt: [+129.71% +134.23% +139.81%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) low severe + 3 (3.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [8.4242 ms 8.7417 ms 9.0421 ms] + thrpt: [1.7695 Kelem/s 1.8303 Kelem/s 1.8993 Kelem/s] + change: + time: [-63.446% -62.062% -60.705%] (p = 0.00 < 0.05) + thrpt: [+154.49% +163.59% +173.57%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [9.0608 ms 9.2599 ms 9.5154 ms] + thrpt: [3.3630 Kelem/s 3.4557 Kelem/s 3.5317 Kelem/s] + change: + time: [-79.718% -79.275% -78.738%] (p = 0.00 < 0.05) + thrpt: [+370.32% +382.52% +393.05%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 2 (2.00%) high mild + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [15.853 ms 16.330 ms 16.900 ms] + thrpt: [3.7869 Kelem/s 3.9192 Kelem/s 4.0371 Kelem/s] + change: + time: [-81.922% -81.377% -80.712%] (p = 0.00 < 0.05) + thrpt: [+418.45% +436.96% +453.16%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) high mild + 8 (8.00%) high severe + +blob_to_kzg_commitment time: [6.2639 ms 6.3158 ms 6.3734 ms] + change: [-19.926% -18.104% -16.296%] (p = 0.00 < 0.05) + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 6 (6.00%) high mild + 3 (3.00%) high severe + +compute_kzg_proof time: [7.1662 ms 7.2419 ms 7.3197 ms] + change: [-23.601% -21.731% -19.847%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1073 ms 1.1108 ms 1.1150 ms] + change: [-8.5252% -8.0072% -7.4323%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [7.7384 ms 7.8207 ms 7.9023 ms] + change: [-25.449% -23.657% -21.962%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.1882 ms 2.1932 ms 2.1982 ms] + change: [-13.928% -13.319% -12.776%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.1519 ms 2.1613 ms 2.1709 ms] + thrpt: [460.64 elem/s 462.69 elem/s 464.72 elem/s] + change: + time: [-15.205% -14.773% -14.316%] (p = 0.00 < 0.05) + thrpt: [+16.708% +17.334% +17.931%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [2.5771 ms 2.5953 ms 2.6137 ms] + thrpt: [765.21 elem/s 770.63 elem/s 776.06 elem/s] + change: + time: [-12.724% -12.052% -11.402%] (p = 0.00 < 0.05) + thrpt: [+12.870% +13.704% +14.580%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [3.1321 ms 3.1619 ms 3.1931 ms] + thrpt: [1.2527 Kelem/s 1.2650 Kelem/s 1.2771 Kelem/s] + change: + time: [-16.572% -12.262% -7.7343%] (p = 0.00 < 0.05) + thrpt: [+8.3826% +13.976% +19.863%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [4.3174 ms 4.3551 ms 4.3929 ms] + thrpt: [1.8211 Kelem/s 1.8369 Kelem/s 1.8530 Kelem/s] + change: + time: [-17.642% -15.891% -13.902%] (p = 0.00 < 0.05) + thrpt: [+16.147% +18.893% +21.422%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [7.2945 ms 7.3730 ms 7.4526 ms] + thrpt: [2.1469 Kelem/s 2.1701 Kelem/s 2.1934 Kelem/s] + change: + time: [-18.635% -15.657% -12.394%] (p = 0.00 < 0.05) + thrpt: [+14.148% +18.563% +22.902%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [14.640 ms 14.889 ms 15.140 ms] + thrpt: [2.1136 Kelem/s 2.1493 Kelem/s 2.1858 Kelem/s] + change: + time: [+55.947% +60.787% +65.445%] (p = 0.00 < 0.05) + thrpt: [-39.557% -37.806% -35.876%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [26.968 ms 27.318 ms 27.683 ms] + thrpt: [2.3119 Kelem/s 2.3428 Kelem/s 2.3732 Kelem/s] + change: + time: [+61.398% +67.287% +72.866%] (p = 0.00 < 0.05) + thrpt: [-42.152% -40.222% -38.041%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [6.2330 ms 6.3142 ms 6.3996 ms] + change: [-1.5887% -0.0258% +1.4418%] (p = 0.97 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +compute_kzg_proof time: [7.0305 ms 7.1113 ms 7.1934 ms] + change: [-3.4618% -1.8038% -0.3564%] (p = 0.02 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.1051 ms 1.1090 ms 1.1134 ms] + change: [-1.8881% -1.2763% -0.7341%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [7.2936 ms 7.3705 ms 7.4511 ms] + change: [-7.1410% -5.7559% -4.2000%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [1.9213 ms 1.9252 ms 1.9292 ms] + change: [-12.498% -12.218% -11.957%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.0391 ms 2.0474 ms 2.0559 ms] + thrpt: [486.41 elem/s 488.43 elem/s 490.40 elem/s] + change: + time: [-5.8219% -5.2690% -4.6790%] (p = 0.00 < 0.05) + thrpt: [+4.9086% +5.5621% +6.1818%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.2210 ms 2.2509 ms 2.2822 ms] + thrpt: [876.36 elem/s 888.54 elem/s 900.49 elem/s] + change: + time: [-14.468% -13.270% -11.932%] (p = 0.00 < 0.05) + thrpt: [+13.549% +15.300% +16.915%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [2.6005 ms 2.6254 ms 2.6494 ms] + thrpt: [1.5098 Kelem/s 1.5236 Kelem/s 1.5382 Kelem/s] + change: + time: [-18.093% -16.967% -15.862%] (p = 0.00 < 0.05) + thrpt: [+18.853% +20.434% +22.089%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [3.3897 ms 3.4382 ms 3.4876 ms] + thrpt: [2.2939 Kelem/s 2.3268 Kelem/s 2.3601 Kelem/s] + change: + time: [-22.339% -21.055% -19.669%] (p = 0.00 < 0.05) + thrpt: [+24.485% +26.670% +28.765%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [5.6222 ms 5.7027 ms 5.7814 ms] + thrpt: [2.7675 Kelem/s 2.8057 Kelem/s 2.8459 Kelem/s] + change: + time: [-24.100% -22.655% -21.332%] (p = 0.00 < 0.05) + thrpt: [+27.116% +29.291% +31.752%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [10.621 ms 10.835 ms 11.051 ms] + thrpt: [2.8956 Kelem/s 2.9535 Kelem/s 3.0129 Kelem/s] + change: + time: [-29.123% -27.230% -25.394%] (p = 0.00 < 0.05) + thrpt: [+34.037% +37.420% +41.089%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [17.602 ms 17.956 ms 18.326 ms] + thrpt: [3.4923 Kelem/s 3.5643 Kelem/s 3.6359 Kelem/s] + change: + time: [-35.950% -34.270% -32.621%] (p = 0.00 < 0.05) + thrpt: [+48.415% +52.138% +56.127%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [2.5905 ms 2.6220 ms 2.6578 ms] + change: [-71.893% -71.453% -71.061%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [4.7505 s 4.8281 s 4.9114 s] + change: [-76.530% -76.144% -75.734%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [6.1213 s 6.1972 s 6.2744 s] + change: [-71.565% -71.192% -70.878%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [1.0483 s 1.0634 s 1.0782 s] + change: [-77.634% -77.292% -77.011%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [45.664 ms 46.398 ms 48.257 ms] + change: [-79.736% -78.807% -77.537%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +bench_compute_proof_single scale: '15' + time: [44.232 ms 44.628 ms 45.084 ms] + change: [-80.417% -80.262% -80.089%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [7.5684 ms 8.4390 ms 9.0837 ms] + change: [-78.533% -77.265% -75.646%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +bench_new_poly_div scale: '15' + time: [199.92 ms 202.32 ms 204.76 ms] + change: [-68.911% -68.456% -68.027%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [79.944 ms 81.260 ms 82.158 ms] + change: [-72.025% -71.555% -71.053%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [52.688 ms 53.088 ms 53.448 ms] + change: [-68.378% -67.781% -67.238%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.6190 ms 2.6312 ms 2.6406 ms] + change: [-1.9038% -0.7301% +0.3941%] (p = 0.27 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [5.9630 ms 6.1042 ms 6.2577 ms] + change: [-5.9532% -3.3252% -0.7649%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 20 outliers among 100 measurements (20.00%) + 3 (3.00%) high mild + 17 (17.00%) high severe + +compute_kzg_proof time: [7.4532 ms 7.5962 ms 7.7441 ms] + change: [+4.5351% +6.8189% +9.3090%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2093 ms 1.2134 ms 1.2176 ms] + change: [+9.9103% +10.377% +10.907%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [8.7693 ms 8.9264 ms 9.0816 ms] + change: [+18.462% +21.109% +23.653%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.5082 ms 2.5161 ms 2.5243 ms] + change: [+30.204% +30.693% +31.193%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5311 ms 2.5378 ms 2.5445 ms] + thrpt: [393.01 elem/s 394.05 elem/s 395.09 elem/s] + change: + time: [+23.344% +23.952% +24.559%] (p = 0.00 < 0.05) + thrpt: [-19.717% -19.323% -18.926%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [2.9393 ms 2.9483 ms 2.9574 ms] + thrpt: [676.26 elem/s 678.37 elem/s 680.43 elem/s] + change: + time: [+29.130% +30.982% +32.768%] (p = 0.00 < 0.05) + thrpt: [-24.681% -23.654% -22.559%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.3162 ms 3.4721 ms 3.6394 ms] + thrpt: [1.0991 Kelem/s 1.1520 Kelem/s 1.2062 Kelem/s] + change: + time: [+26.779% +32.248% +38.478%] (p = 0.00 < 0.05) + thrpt: [-27.786% -24.385% -21.123%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [5.0534 ms 5.1717 ms 5.2784 ms] + thrpt: [1.5156 Kelem/s 1.5469 Kelem/s 1.5831 Kelem/s] + change: + time: [+46.509% +50.422% +54.255%] (p = 0.00 < 0.05) + thrpt: [-35.172% -33.520% -31.745%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 5 (5.00%) low severe + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [7.8650 ms 8.2221 ms 8.5716 ms] + thrpt: [1.8666 Kelem/s 1.9460 Kelem/s 2.0343 Kelem/s] + change: + time: [+38.018% +44.179% +50.433%] (p = 0.00 < 0.05) + thrpt: [-33.525% -30.642% -27.546%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [11.869 ms 12.492 ms 13.111 ms] + thrpt: [2.4407 Kelem/s 2.5616 Kelem/s 2.6960 Kelem/s] + change: + time: [+9.4447% +15.298% +20.706%] (p = 0.00 < 0.05) + thrpt: [-17.154% -13.268% -8.6296%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [16.719 ms 17.438 ms 18.232 ms] + thrpt: [3.5102 Kelem/s 3.6702 Kelem/s 3.8280 Kelem/s] + change: + time: [-7.1986% -2.8839% +2.1360%] (p = 0.23 > 0.05) + thrpt: [-2.0913% +2.9695% +7.7571%] + No change in performance detected. +Found 20 outliers among 100 measurements (20.00%) + 1 (1.00%) high mild + 19 (19.00%) high severe + +blob_to_kzg_commitment time: [6.3320 ms 6.3919 ms 6.4552 ms] + change: [+1.9519% +4.7126% +7.3849%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [7.0575 ms 7.1188 ms 7.1831 ms] + change: [-8.2836% -6.2841% -4.3126%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1070 ms 1.1108 ms 1.1147 ms] + change: [-9.1235% -8.6057% -8.1071%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [7.3901 ms 7.4482 ms 7.5105 ms] + change: [-18.098% -16.560% -14.912%] (p = 0.00 < 0.05) + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 8 (8.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.0826 ms 2.0921 ms 2.1016 ms] + change: [-17.327% -16.853% -16.368%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.0884 ms 2.0956 ms 2.1029 ms] + thrpt: [475.54 elem/s 477.19 elem/s 478.83 elem/s] + change: + time: [-17.779% -17.423% -17.050%] (p = 0.00 < 0.05) + thrpt: [+20.555% +21.099% +21.623%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [2.5212 ms 2.5382 ms 2.5555 ms] + thrpt: [782.62 elem/s 787.95 elem/s 793.27 elem/s] + change: + time: [-14.587% -13.908% -13.277%] (p = 0.00 < 0.05) + thrpt: [+15.310% +16.154% +17.079%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [2.9254 ms 2.9550 ms 2.9848 ms] + thrpt: [1.3401 Kelem/s 1.3536 Kelem/s 1.3673 Kelem/s] + change: + time: [-18.822% -14.893% -10.747%] (p = 0.00 < 0.05) + thrpt: [+12.041% +17.499% +23.187%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [4.3142 ms 4.3557 ms 4.3989 ms] + thrpt: [1.8186 Kelem/s 1.8367 Kelem/s 1.8543 Kelem/s] + change: + time: [-17.660% -15.778% -13.573%] (p = 0.00 < 0.05) + thrpt: [+15.704% +18.734% +21.447%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [6.9459 ms 7.0237 ms 7.1013 ms] + thrpt: [2.2531 Kelem/s 2.2780 Kelem/s 2.3035 Kelem/s] + change: + time: [-18.136% -14.575% -10.492%] (p = 0.00 < 0.05) + thrpt: [+11.722% +17.062% +22.154%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [14.769 ms 14.958 ms 15.157 ms] + thrpt: [2.1113 Kelem/s 2.1393 Kelem/s 2.1667 Kelem/s] + change: + time: [+13.886% +19.744% +26.269%] (p = 0.00 < 0.05) + thrpt: [-20.804% -16.489% -12.193%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [24.800 ms 25.216 ms 25.637 ms] + thrpt: [2.4964 Kelem/s 2.5380 Kelem/s 2.5807 Kelem/s] + change: + time: [+37.795% +44.605% +51.176%] (p = 0.00 < 0.05) + thrpt: [-33.852% -30.846% -27.428%] + Performance has regressed. + +blob_to_kzg_commitment time: [6.2474 ms 6.3427 ms 6.4431 ms] + change: [-2.5875% -0.7695% +1.2517%] (p = 0.41 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_kzg_proof time: [7.1761 ms 7.2951 ms 7.4229 ms] + change: [+0.4726% +2.4756% +4.5242%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1006 ms 1.1030 ms 1.1054 ms] + change: [-1.4704% -0.9868% -0.4819%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [7.3911 ms 7.4686 ms 7.5491 ms] + change: [-1.0413% +0.2738% +1.5857%] (p = 0.69 > 0.05) + No change in performance detected. + +verify_blob_kzg_proof time: [1.9132 ms 1.9172 ms 1.9213 ms] + change: [-8.9152% -8.4673% -8.0153%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) low mild + +verify_blob_kzg_proof_batch/1 + time: [2.0476 ms 2.0577 ms 2.0687 ms] + thrpt: [483.39 elem/s 485.98 elem/s 488.37 elem/s] + change: + time: [-2.4099% -1.8088% -1.1805%] (p = 0.00 < 0.05) + thrpt: [+1.1947% +1.8421% +2.4695%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.2695 ms 2.2939 ms 2.3184 ms] + thrpt: [862.68 elem/s 871.87 elem/s 881.23 elem/s] + change: + time: [-10.800% -9.6251% -8.5316%] (p = 0.00 < 0.05) + thrpt: [+9.3274% +10.650% +12.108%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [2.5704 ms 2.6011 ms 2.6315 ms] + thrpt: [1.5200 Kelem/s 1.5378 Kelem/s 1.5562 Kelem/s] + change: + time: [-13.424% -11.977% -10.597%] (p = 0.00 < 0.05) + thrpt: [+11.853% +13.606% +15.506%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [3.6636 ms 3.7131 ms 3.7636 ms] + thrpt: [2.1256 Kelem/s 2.1545 Kelem/s 2.1837 Kelem/s] + change: + time: [-16.075% -14.753% -13.366%] (p = 0.00 < 0.05) + thrpt: [+15.429% +17.307% +19.154%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [5.7358 ms 5.7949 ms 5.8535 ms] + thrpt: [2.7334 Kelem/s 2.7611 Kelem/s 2.7895 Kelem/s] + change: + time: [-18.773% -17.496% -16.242%] (p = 0.00 < 0.05) + thrpt: [+19.392% +21.206% +23.111%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [11.458 ms 11.664 ms 11.876 ms] + thrpt: [2.6946 Kelem/s 2.7435 Kelem/s 2.7929 Kelem/s] + change: + time: [-23.839% -22.025% -20.213%] (p = 0.00 < 0.05) + thrpt: [+25.334% +28.246% +31.301%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [20.088 ms 20.401 ms 20.723 ms] + thrpt: [3.0884 Kelem/s 3.1371 Kelem/s 3.1859 Kelem/s] + change: + time: [-20.903% -19.096% -17.225%] (p = 0.00 < 0.05) + thrpt: [+20.810% +23.603% +26.428%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [2.6795 ms 2.7327 ms 2.7617 ms] + change: [-0.6399% +1.3132% +3.2900%] (p = 0.22 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [4.8033 s 4.8756 s 4.9630 s] + change: [-1.3232% +0.9848% +3.5202%] (p = 0.45 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_fk_single_da scale: '14' + time: [6.1234 s 6.2406 s 6.3687 s] + change: [-1.6457% +0.6997% +3.0248%] (p = 0.58 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [1.0468 s 1.0660 s 1.0863 s] + change: [-2.0525% +0.2482% +2.5870%] (p = 0.85 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [38.003 ms 38.496 ms 38.893 ms] + change: [-23.707% -19.261% -15.493%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [39.585 ms 39.945 ms 40.471 ms] + change: [-11.723% -10.862% -9.8848%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [7.8920 ms 8.3978 ms 8.8255 ms] + change: [-4.1065% +5.0402% +14.428%] (p = 0.32 > 0.05) + No change in performance detected. + +bench_g1_lincomb with precomputation points: '4096' + time: [5.7351 ms 5.9580 ms 6.2235 ms] + change: [-84.202% -83.915% -83.495%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [199.10 ms 201.02 ms 202.85 ms] + change: [-2.1571% -0.6423% +0.9249%] (p = 0.45 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [82.162 ms 83.893 ms 85.829 ms] + change: [+2.5831% +5.0097% +7.5346%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_zero_poly scale: '15' + time: [53.592 ms 54.235 ms 54.743 ms] + change: [-0.5014% +1.7035% +3.9490%] (p = 0.17 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.6392 ms 2.6727 ms 2.6973 ms] + change: [+0.4191% +1.7948% +3.3152%] (p = 0.04 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [8.3115 ms 8.4287 ms 8.5476 ms] + change: [+30.232% +32.889% +35.773%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_kzg_proof time: [9.5980 ms 9.7502 ms 9.9082 ms] + change: [+30.520% +33.655% +36.668%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.2122 ms 1.2159 ms 1.2200 ms] + change: [+9.1219% +9.5906% +10.043%] (p = 0.00 < 0.05) + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) low mild + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [10.031 ms 10.158 ms 10.300 ms] + change: [+33.690% +36.008% +38.307%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.5126 ms 2.5198 ms 2.5273 ms] + change: [+31.146% +31.587% +32.062%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5218 ms 2.5324 ms 2.5447 ms] + thrpt: [392.97 elem/s 394.89 elem/s 396.54 elem/s] + change: + time: [+22.249% +23.068% +23.907%] (p = 0.00 < 0.05) + thrpt: [-19.294% -18.744% -18.200%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.9556 ms 2.9664 ms 2.9786 ms] + thrpt: [671.45 elem/s 674.21 elem/s 676.68 elem/s] + change: + time: [+27.869% +29.317% +30.799%] (p = 0.00 < 0.05) + thrpt: [-23.547% -22.670% -21.795%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.0628 ms 3.1529 ms 3.2574 ms] + thrpt: [1.2280 Kelem/s 1.2687 Kelem/s 1.3060 Kelem/s] + change: + time: [+17.443% +21.213% +25.345%] (p = 0.00 < 0.05) + thrpt: [-20.220% -17.501% -14.852%] + Performance has regressed. +Found 14 outliers among 100 measurements (14.00%) + 4 (4.00%) high mild + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.0938 ms 5.1453 ms 5.1935 ms] + thrpt: [1.5404 Kelem/s 1.5548 Kelem/s 1.5705 Kelem/s] + change: + time: [+36.367% +38.571% +40.898%] (p = 0.00 < 0.05) + thrpt: [-29.027% -27.835% -26.669%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low severe + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [9.2373 ms 9.4033 ms 9.5517 ms] + thrpt: [1.6751 Kelem/s 1.7015 Kelem/s 1.7321 Kelem/s] + change: + time: [+59.083% +62.270% +65.103%] (p = 0.00 < 0.05) + thrpt: [-39.432% -38.374% -37.140%] + Performance has regressed. +Found 15 outliers among 100 measurements (15.00%) + 12 (12.00%) low severe + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [48.430 ms 49.828 ms 51.287 ms] + thrpt: [623.94 elem/s 642.21 elem/s 660.75 elem/s] + change: + time: [+312.87% +327.20% +340.63%] (p = 0.00 < 0.05) + thrpt: [-77.305% -76.592% -75.779%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [57.755 ms 58.899 ms 60.077 ms] + thrpt: [1.0653 Kelem/s 1.0866 Kelem/s 1.1081 Kelem/s] + change: + time: [+181.63% +188.71% +195.88%] (p = 0.00 < 0.05) + thrpt: [-66.203% -65.363% -64.492%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [6.1633 ms 6.2022 ms 6.2447 ms] + change: [-27.493% -26.416% -25.229%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [7.3965 ms 7.4620 ms 7.5316 ms] + change: [-24.851% -23.469% -22.064%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1177 ms 1.1222 ms 1.1267 ms] + change: [-7.9551% -7.5495% -7.0982%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [7.9100 ms 8.0015 ms 8.0950 ms] + change: [-22.666% -21.229% -19.872%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof time: [2.0916 ms 2.1052 ms 2.1192 ms] + change: [-17.032% -16.452% -15.856%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.1255 ms 2.1364 ms 2.1473 ms] + thrpt: [465.71 elem/s 468.08 elem/s 470.47 elem/s] + change: + time: [-16.246% -15.637% -15.044%] (p = 0.00 < 0.05) + thrpt: [+17.708% +18.535% +19.397%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [2.5580 ms 2.5768 ms 2.5957 ms] + thrpt: [770.51 elem/s 776.15 elem/s 781.86 elem/s] + change: + time: [-13.925% -13.134% -12.477%] (p = 0.00 < 0.05) + thrpt: [+14.256% +15.119% +16.178%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [2.8924 ms 2.9196 ms 2.9467 ms] + thrpt: [1.3574 Kelem/s 1.3701 Kelem/s 1.3829 Kelem/s] + change: + time: [-10.487% -7.3988% -4.5308%] (p = 0.00 < 0.05) + thrpt: [+4.7458% +7.9900% +11.715%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [5.1008 ms 5.1511 ms 5.2016 ms] + thrpt: [1.5380 Kelem/s 1.5531 Kelem/s 1.5684 Kelem/s] + change: + time: [-1.2397% +0.1124% +1.5525%] (p = 0.87 > 0.05) + thrpt: [-1.5288% -0.1123% +1.2553%] + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [8.4641 ms 8.5380 ms 8.6128 ms] + thrpt: [1.8577 Kelem/s 1.8740 Kelem/s 1.8903 Kelem/s] + change: + time: [-10.760% -9.2026% -7.3408%] (p = 0.00 < 0.05) + thrpt: [+7.9223% +10.135% +12.057%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [15.540 ms 15.795 ms 16.053 ms] + thrpt: [1.9934 Kelem/s 2.0260 Kelem/s 2.0592 Kelem/s] + change: + time: [-69.331% -68.301% -67.235%] (p = 0.00 < 0.05) + thrpt: [+205.20% +215.47% +226.06%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [27.317 ms 27.712 ms 28.113 ms] + thrpt: [2.2765 Kelem/s 2.3094 Kelem/s 2.3428 Kelem/s] + change: + time: [-54.087% -52.949% -51.791%] (p = 0.00 < 0.05) + thrpt: [+107.43% +112.54% +117.80%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [6.1244 ms 6.1803 ms 6.2409 ms] + change: [-1.3998% -0.3536% +0.8281%] (p = 0.55 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [7.5059 ms 7.6313 ms 7.7579 ms] + change: [+0.4633% +2.2682% +4.1340%] (p = 0.02 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.1132 ms 1.1167 ms 1.1203 ms] + change: [-0.3577% +0.1405% +0.6181%] (p = 0.58 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [7.6622 ms 7.7708 ms 7.8841 ms] + change: [-4.7163% -2.8824% -1.1070%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [1.9256 ms 1.9342 ms 1.9440 ms] + change: [-8.8620% -8.1255% -7.3878%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.0194 ms 2.0281 ms 2.0369 ms] + thrpt: [490.93 elem/s 493.08 elem/s 495.20 elem/s] + change: + time: [-5.7007% -5.0689% -4.4179%] (p = 0.00 < 0.05) + thrpt: [+4.6221% +5.3395% +6.0453%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [2.1233 ms 2.1390 ms 2.1548 ms] + thrpt: [928.14 elem/s 935.02 elem/s 941.92 elem/s] + change: + time: [-17.860% -16.991% -16.129%] (p = 0.00 < 0.05) + thrpt: [+19.230% +20.468% +21.743%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [2.4855 ms 2.5140 ms 2.5427 ms] + thrpt: [1.5732 Kelem/s 1.5911 Kelem/s 1.6093 Kelem/s] + change: + time: [-15.111% -13.894% -12.609%] (p = 0.00 < 0.05) + thrpt: [+14.428% +16.135% +17.801%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [3.5094 ms 3.5539 ms 3.5986 ms] + thrpt: [2.2231 Kelem/s 2.2510 Kelem/s 2.2796 Kelem/s] + change: + time: [-32.136% -31.006% -29.822%] (p = 0.00 < 0.05) + thrpt: [+42.494% +44.941% +47.353%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [5.5439 ms 5.6321 ms 5.7191 ms] + thrpt: [2.7976 Kelem/s 2.8409 Kelem/s 2.8861 Kelem/s] + change: + time: [-35.231% -34.035% -32.890%] (p = 0.00 < 0.05) + thrpt: [+49.008% +51.594% +54.395%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [11.677 ms 11.913 ms 12.149 ms] + thrpt: [2.6340 Kelem/s 2.6862 Kelem/s 2.7405 Kelem/s] + change: + time: [-26.415% -24.580% -22.657%] (p = 0.00 < 0.05) + thrpt: [+29.294% +32.590% +35.897%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [20.833 ms 21.251 ms 21.672 ms] + thrpt: [2.9531 Kelem/s 3.0116 Kelem/s 3.0720 Kelem/s] + change: + time: [-25.206% -23.315% -21.494%] (p = 0.00 < 0.05) + thrpt: [+27.379% +30.403% +33.700%] + Performance has improved. + +bench_fft_fr scale: '15' + time: [2.6066 ms 2.6400 ms 2.6710 ms] + change: [-4.1515% -2.5730% -0.9797%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [4.7903 s 4.9012 s 5.0222 s] + change: [-2.2202% +0.5250% +3.6413%] (p = 0.74 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [6.1666 s 6.2501 s 6.3429 s] + change: [-2.1844% +0.1528% +2.5300%] (p = 0.90 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [1.0729 s 1.0922 s 1.1185 s] + change: [-0.3947% +2.4503% +5.6764%] (p = 0.13 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_commit_to_poly scale: '15' + time: [39.066 ms 41.028 ms 43.449 ms] + change: [+1.9990% +6.1757% +11.218%] (p = 0.01 < 0.05) + Performance has regressed. + +bench_compute_proof_single scale: '15' + time: [41.416 ms 43.631 ms 46.367 ms] + change: [+6.0541% +10.563% +16.400%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [8.2045 ms 8.3864 ms 8.5589 ms] + change: [-4.7609% +2.3689% +10.777%] (p = 0.57 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [198.38 ms 200.64 ms 202.81 ms] + change: [-1.5072% -0.1905% +1.2892%] (p = 0.81 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [80.620 ms 81.576 ms 82.812 ms] + change: [-4.3524% -2.3817% -0.3055%] (p = 0.04 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [53.027 ms 53.739 ms 54.735 ms] + change: [-1.8510% +0.8382% +3.5224%] (p = 0.57 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust binding (rust-kzg with blst backend) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [7.0724 ms 7.2335 ms 7.4081 ms] + change: [-40.853% -39.521% -38.277%] (p = 0.00 < 0.05) + Performance has improved. +Found 18 outliers among 100 measurements (18.00%) + 1 (1.00%) high mild + 17 (17.00%) high severe + +compute_kzg_proof time: [8.7662 ms 8.9518 ms 9.1449 ms] + change: [-34.700% -33.234% -31.811%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [9.8912 ms 10.072 ms 10.259 ms] + change: [-30.695% -29.404% -28.067%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.3538 ms 1.3580 ms 1.3623 ms] + change: [+0.4479% +1.5214% +3.2597%] (p = 0.02 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [3.3120 ms 3.3243 ms 3.3372 ms] + change: [+0.4515% +0.8940% +1.3683%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [3.3336 ms 3.3433 ms 3.3534 ms] + thrpt: [298.20 elem/s 299.10 elem/s 299.97 elem/s] + change: + time: [-0.1145% +0.3166% +0.7460%] (p = 0.16 > 0.05) + thrpt: [-0.7405% -0.3156% +0.1147%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.9294 ms 3.9420 ms 3.9565 ms] + thrpt: [505.50 elem/s 507.35 elem/s 508.98 elem/s] + change: + time: [+3.5619% +3.9573% +4.3744%] (p = 0.00 < 0.05) + thrpt: [-4.1910% -3.8066% -3.4394%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.1150 ms 4.2554 ms 4.4130 ms] + thrpt: [906.40 elem/s 939.98 elem/s 972.05 elem/s] + change: + time: [+10.774% +14.236% +18.236%] (p = 0.00 < 0.05) + thrpt: [-15.424% -12.462% -9.7264%] + Performance has regressed. +Found 17 outliers among 100 measurements (17.00%) + 2 (2.00%) high mild + 15 (15.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [4.1165 ms 4.3108 ms 4.5216 ms] + thrpt: [1.7693 Kelem/s 1.8558 Kelem/s 1.9434 Kelem/s] + change: + time: [-41.044% -38.467% -35.336%] (p = 0.00 < 0.05) + thrpt: [+54.645% +62.514% +69.617%] + Performance has improved. +Found 20 outliers among 100 measurements (20.00%) + 20 (20.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [8.2618 ms 8.6933 ms 9.1457 ms] + thrpt: [1.7495 Kelem/s 1.8405 Kelem/s 1.9366 Kelem/s] + change: + time: [-39.247% -36.100% -32.654%] (p = 0.00 < 0.05) + thrpt: [+48.488% +56.494% +64.601%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [11.708 ms 11.772 ms 11.845 ms] + thrpt: [2.7015 Kelem/s 2.7183 Kelem/s 2.7333 Kelem/s] + change: + time: [-49.051% -48.331% -47.665%] (p = 0.00 < 0.05) + thrpt: [+91.076% +93.538% +96.274%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 6 (6.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [22.077 ms 22.771 ms 23.550 ms] + thrpt: [2.7176 Kelem/s 2.8106 Kelem/s 2.8989 Kelem/s] + change: + time: [-46.603% -45.041% -43.227%] (p = 0.00 < 0.05) + thrpt: [+76.141% +81.955% +87.277%] + Performance has improved. +Found 15 outliers among 100 measurements (15.00%) + 3 (3.00%) high mild + 12 (12.00%) high severe + + + + +~~~~~~~~~~ go binding (rust-kzg with blst backend) ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/ethereum/c-kzg-4844/bindings/go +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +Benchmark/BlobToKZGCommitment-8 176 7241399 ns/op +Benchmark/ComputeKZGProof-8 100 10344657 ns/op +Benchmark/ComputeBlobKZGProof-8 100 10409390 ns/op +Benchmark/VerifyKZGProof-8 888 1362807 ns/op +Benchmark/VerifyBlobKZGProof-8 361 3304812 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-8 358 3311952 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-8 313 3815355 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-8 296 4010340 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-8 278 3823326 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-8 145 8450878 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-8 100 11601477 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-8 55 21108343 ns/op +PASS +ok github.com/ethereum/c-kzg-4844/bindings/go 23.384s + + + +********** BENCHMARKING ON 16 CORES ********** + + + + + +~~~~~~~~~~ go-kzg-4844 ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/crate-crypto/go-kzg-4844 +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +BenchmarkComputeChallenge-16 3764 321052 ns/op 32 B/op 1 allocs/op +Benchmark/BlobToKZGCommitment-16 159 7330298 ns/op 382896 B/op 82 allocs/op +Benchmark/ComputeKZGProof-16 141 8564543 ns/op 908353 B/op 93 allocs/op +Benchmark/ComputeBlobKZGProof-16 132 8949203 ns/op 908749 B/op 100 allocs/op +Benchmark/VerifyKZGProof-16 842 1405896 ns/op 6616 B/op 55 allocs/op +Benchmark/VerifyBlobKZGProof-16 482 2444357 ns/op 400480 B/op 64 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-16 492 2459639 ns/op 400736 B/op 66 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-16 283 4245445 ns/op 885228 B/op 500 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-16 175 6887502 ns/op 1676833 B/op 552 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-16 100 11810938 ns/op 3259768 B/op 653 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-16 57 21870285 ns/op 6425964 B/op 852 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-16 26 41396381 ns/op 12755610 B/op 1211 allocs/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-16 14 80162999 ns/op 25392446 B/op 1863 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=1)-16 470 2489142 ns/op 400664 B/op 67 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=2)-16 474 2500012 ns/op 801658 B/op 136 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=4)-16 374 3149392 ns/op 1603396 B/op 273 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=8)-16 243 4615410 ns/op 3206846 B/op 547 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=16)-16 180 6724049 ns/op 6413893 B/op 1097 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=32)-16 100 12121919 ns/op 12828393 B/op 2210 allocs/op +Benchmark/VerifyBlobKZGProofBatchPar(count=64)-16 50 24330724 ns/op 25656441 B/op 4438 allocs/op +BenchmarkDeserializeBlob-16 7459 160622 ns/op 131632 B/op 6 allocs/op +PASS +ok github.com/crate-crypto/go-kzg-4844 35.735s + + + +~~~~~~~~~~ rust binding (c-kzg-4844) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [50.572 ms 50.714 ms 50.860 ms] + change: [+0.3976% +0.7409% +1.1285%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [53.007 ms 53.117 ms 53.229 ms] + change: [+0.1521% +0.4855% +0.8244%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [53.577 ms 53.702 ms 53.829 ms] + change: [-0.3537% +0.0130% +0.4036%] (p = 0.95 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +verify_kzg_proof time: [1.3652 ms 1.3716 ms 1.3789 ms] + change: [-0.0523% +0.4081% +0.8523%] (p = 0.09 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.6536 ms 2.6610 ms 2.6685 ms] + change: [+0.4537% +0.8577% +1.2614%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [2.6379 ms 2.6468 ms 2.6574 ms] + thrpt: [376.30 elem/s 377.82 elem/s 379.09 elem/s] + change: + time: [-0.1733% +0.3583% +0.8785%] (p = 0.19 > 0.05) + thrpt: [-0.8708% -0.3570% +0.1736%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.5038 ms 4.5230 ms 4.5451 ms] + thrpt: [440.03 elem/s 442.19 elem/s 444.07 elem/s] + change: + time: [+1.4494% +1.9937% +2.5177%] (p = 0.00 < 0.05) + thrpt: [-2.4559% -1.9547% -1.4286%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.9666 ms 7.9875 ms 8.0090 ms] + thrpt: [499.44 elem/s 500.78 elem/s 502.09 elem/s] + change: + time: [+1.0408% +1.4012% +1.7555%] (p = 0.00 < 0.05) + thrpt: [-1.7252% -1.3818% -1.0301%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [14.923 ms 14.969 ms 15.016 ms] + thrpt: [532.75 elem/s 534.45 elem/s 536.10 elem/s] + change: + time: [-0.2663% +0.1851% +0.6485%] (p = 0.42 > 0.05) + thrpt: [-0.6443% -0.1848% +0.2670%] + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [28.838 ms 28.945 ms 29.070 ms] + thrpt: [550.40 elem/s 552.77 elem/s 554.82 elem/s] + change: + time: [+0.0300% +0.4860% +0.9922%] (p = 0.05 > 0.05) + thrpt: [-0.9825% -0.4836% -0.0299%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [56.542 ms 56.693 ms 56.841 ms] + thrpt: [562.97 elem/s 564.44 elem/s 565.95 elem/s] + change: + time: [-0.2269% +0.2000% +0.6501%] (p = 0.37 > 0.05) + thrpt: [-0.6459% -0.1996% +0.2274%] + No change in performance detected. +verify_blob_kzg_proof_batch/64 + time: [112.14 ms 112.47 ms 112.82 ms] + thrpt: [567.29 elem/s 569.06 elem/s 570.71 elem/s] + change: + time: [-0.1902% +0.2074% +0.5911%] (p = 0.29 > 0.05) + thrpt: [-0.5877% -0.2070% +0.1906%] + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + + + + +~~~~~~~~~~ constantine ~~~~~~~~~~ + + + Executing task bench_eth_eip4844_kzg in /root/benches/constantine/constantine.nimble +bench xoshiro512** seed: 1720374685 +Warmup: 1.0318 s, result 224 (displayed to avoid compiler optimizing warmup away) + + +Compiled with Clang +Optimization level => + no optimization: false + release: true + danger: true + inline assembly: true +Using Constantine with 64-bit limbs +Running on Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz + +⚠️ Cycles measurements are approximate and use the CPU nominal clock: Turbo-Boost and overclocking will skew them. +i.e. a 20% overclock will be about 20% off (assuming no dynamic frequency scaling) + +================================================================================================================= + +Trusted Setup loaded successfully +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +blob_to_kzg_commitment serial 29.261 ops/s 34174922 ns/op 92056096 CPU cycles (approx) +blob_to_kzg_commitment 16 threads 177.918 ops/s 5620557 ns/op 15139924 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 6.080x + +compute_kzg_proof serial 28.838 ops/s 34676273 ns/op 93406571 CPU cycles (approx) +compute_kzg_proof 16 threads 164.401 ops/s 6082692 ns/op 16384767 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 5.700x + +compute_blob_kzg_proof serial 28.291 ops/s 35347111 ns/op 95213587 CPU cycles (approx) +compute_blob_kzg_proof 16 threads 155.067 ops/s 6448814 ns/op 17370984 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 5.481x + +verify_kzg_proof serial 909.809 ops/s 1099132 ns/op 2960683 CPU cycles (approx) +verify_kzg_proof is always serial + +verify_blob_kzg_proof serial 476.500 ops/s 2098634 ns/op 5653015 CPU cycles (approx) +verify_blob_kzg_proof 16 threads 521.552 ops/s 1917354 ns/op 5164712 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.095x + +verify_blob_kzg_proof (batch 1) serial 464.133 ops/s 2154557 ns/op 5803655 CPU cycles (approx) +verify_blob_kzg_proof (batch 1) 16 threads 521.042 ops/s 1919231 ns/op 5169770 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.123x + +verify_blob_kzg_proof (batch 2) serial 278.984 ops/s 3584429 ns/op 9655228 CPU cycles (approx) +verify_blob_kzg_proof (batch 2) 16 threads 452.839 ops/s 2208292 ns/op 5948394 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 1.623x + +verify_blob_kzg_proof (batch 4) serial 158.418 ops/s 6312427 ns/op 17003593 CPU cycles (approx) +verify_blob_kzg_proof (batch 4) 16 threads 410.218 ops/s 2437729 ns/op 6566424 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 2.589x + +verify_blob_kzg_proof (batch 8) serial 87.053 ops/s 11487258 ns/op 30942902 CPU cycles (approx) +verify_blob_kzg_proof (batch 8) 16 threads 311.797 ops/s 3207210 ns/op 8639157 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 3.581x + +verify_blob_kzg_proof (batch 16) serial 45.729 ops/s 21867869 ns/op 58904886 CPU cycles (approx) +verify_blob_kzg_proof (batch 16) 16 threads 198.022 ops/s 5049941 ns/op 13602876 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.330x + +verify_blob_kzg_proof (batch 32) serial 23.211 ops/s 43082805 ns/op 116051041 CPU cycles (approx) +verify_blob_kzg_proof (batch 32) 16 threads 100.911 ops/s 9909731 ns/op 26693568 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 4.347x + +verify_blob_kzg_proof (batch 64) serial 11.864 ops/s 84291133 ns/op 227052876 CPU cycles (approx) +verify_blob_kzg_proof (batch 64) 16 threads 61.295 ops/s 16314491 ns/op 43945911 CPU cycles (approx) +Speedup ratio parallel 16 threads over serial: 5.167x + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.9419 ms 7.9751 ms 8.0234 ms] + change: [+192.97% +197.00% +201.11%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [76.808 ms 77.031 ms 77.248 ms] + change: [+1133.7% +1146.4% +1158.3%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_kzg_proof time: [80.822 ms 81.056 ms 81.302 ms] + change: [+944.46% +962.16% +980.02%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_kzg_proof time: [2.6041 ms 2.6128 ms 2.6215 ms] + change: [+132.09% +133.16% +134.21%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +compute_blob_kzg_proof time: [81.316 ms 81.506 ms 81.702 ms] + change: [+933.82% +948.87% +963.91%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [4.0628 ms 4.0765 ms 4.0903 ms] + change: [+109.49% +110.76% +111.97%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1073 ms 4.1204 ms 4.1339 ms] + thrpt: [241.90 elem/s 242.69 elem/s 243.47 elem/s] + change: + time: [+102.12% +103.17% +104.27%] (p = 0.00 < 0.05) + thrpt: [-51.045% -50.780% -50.524%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9505 ms 5.9661 ms 5.9819 ms] + thrpt: [334.34 elem/s 335.23 elem/s 336.10 elem/s] + change: + time: [+176.75% +178.92% +181.11%] (p = 0.00 < 0.05) + thrpt: [-64.427% -64.148% -63.866%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [10.541 ms 10.574 ms 10.609 ms] + thrpt: [377.06 elem/s 378.28 elem/s 379.48 elem/s] + change: + time: [+315.68% +320.62% +325.53%] (p = 0.00 < 0.05) + thrpt: [-76.500% -76.226% -75.943%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [16.989 ms 17.037 ms 17.086 ms] + thrpt: [468.23 elem/s 469.56 elem/s 470.88 elem/s] + change: + time: [+373.26% +379.39% +385.60%] (p = 0.00 < 0.05) + thrpt: [-79.407% -79.140% -78.870%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [31.654 ms 31.768 ms 31.887 ms] + thrpt: [501.78 elem/s 503.66 elem/s 505.47 elem/s] + change: + time: [+455.18% +464.04% +473.13%] (p = 0.00 < 0.05) + thrpt: [-82.552% -82.271% -81.988%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [59.407 ms 59.562 ms 59.717 ms] + thrpt: [535.86 elem/s 537.26 elem/s 538.66 elem/s] + change: + time: [+390.22% +399.99% +410.27%] (p = 0.00 < 0.05) + thrpt: [-80.402% -80.000% -79.601%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [114.53 ms 114.83 ms 115.13 ms] + thrpt: [555.90 elem/s 557.35 elem/s 558.81 elem/s] + change: + time: [+429.76% +440.34% +451.32%] (p = 0.00 < 0.05) + thrpt: [-81.862% -81.493% -81.124%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [8.1792 ms 8.2106 ms 8.2559 ms] + change: [+211.09% +214.76% +218.40%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [1.0233 s 1.0250 s 1.0268 s] + change: [-79.593% -79.087% -78.599%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [51.220 s 51.311 s 51.413 s] + change: [+708.86% +720.96% +732.05%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [11.957 s 11.975 s 11.998 s] + change: [+970.28% +996.46% +1016.2%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +bench_commit_to_poly scale: '15' + time: [495.87 ms 497.36 ms 498.95 ms] + change: [+1067.5% +1117.6% +1165.0%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [514.40 ms 516.71 ms 518.65 ms] + change: [+1027.0% +1078.7% +1134.5%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [79.537 ms 79.808 ms 80.021 ms] + change: [+789.13% +831.00% +862.59%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [363.17 ms 366.81 ms 371.11 ms] + change: [+79.968% +82.825% +85.795%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [404.20 ms 406.52 ms 409.71 ms] + change: [+389.39% +396.41% +403.91%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_zero_poly scale: '15' + time: [179.94 ms 180.77 ms 181.66 ms] + change: [+225.95% +233.93% +241.30%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.8033 ms 7.8428 ms 7.8785 ms] + change: [-2.1950% -1.6922% -1.1976%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [57.113 ms 57.271 ms 57.436 ms] + change: [-25.953% -25.651% -25.354%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [62.118 ms 62.313 ms 62.521 ms] + change: [-23.449% -23.123% -22.795%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +verify_kzg_proof time: [2.6174 ms 2.6239 ms 2.6302 ms] + change: [+0.0229% +0.4251% +0.8473%] (p = 0.05 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +compute_blob_kzg_proof time: [63.135 ms 63.280 ms 63.427 ms] + change: [-22.613% -22.361% -22.109%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [4.0640 ms 4.0762 ms 4.0891 ms] + change: [-0.4695% -0.0057% +0.4585%] (p = 0.99 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1291 ms 4.1410 ms 4.1530 ms] + thrpt: [240.79 elem/s 241.49 elem/s 242.18 elem/s] + change: + time: [+0.0711% +0.4992% +0.9210%] (p = 0.02 < 0.05) + thrpt: [-0.9125% -0.4967% -0.0710%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9732 ms 5.9928 ms 6.0143 ms] + thrpt: [332.54 elem/s 333.73 elem/s 334.83 elem/s] + change: + time: [+0.0184% +0.4473% +0.9065%] (p = 0.05 < 0.05) + thrpt: [-0.8984% -0.4454% -0.0184%] + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.572 ms 10.601 ms 10.630 ms] + thrpt: [376.31 elem/s 377.34 elem/s 378.36 elem/s] + change: + time: [-0.1718% +0.2479% +0.6417%] (p = 0.25 > 0.05) + thrpt: [-0.6376% -0.2473% +0.1721%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [26.771 ms 26.851 ms 26.933 ms] + thrpt: [297.03 elem/s 297.94 elem/s 298.83 elem/s] + change: + time: [+56.995% +57.606% +58.259%] (p = 0.00 < 0.05) + thrpt: [-36.813% -36.551% -36.304%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [41.208 ms 41.363 ms 41.537 ms] + thrpt: [385.20 elem/s 386.82 elem/s 388.28 elem/s] + change: + time: [+29.524% +30.206% +30.917%] (p = 0.00 < 0.05) + thrpt: [-23.616% -23.199% -22.794%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [68.951 ms 69.175 ms 69.419 ms] + thrpt: [460.97 elem/s 462.60 elem/s 464.10 elem/s] + change: + time: [+15.671% +16.139% +16.665%] (p = 0.00 < 0.05) + thrpt: [-14.285% -13.896% -13.548%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [123.44 ms 123.80 ms 124.21 ms] + thrpt: [515.27 elem/s 516.95 elem/s 518.49 elem/s] + change: + time: [+7.3975% +7.8156% +8.2618%] (p = 0.00 < 0.05) + thrpt: [-7.6313% -7.2490% -6.8880%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [8.3730 ms 8.3890 ms 8.4280 ms] + change: [+1.2344% +2.3311% +3.5137%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [1.0164 s 1.0207 s 1.0264 s] + change: [-0.9160% -0.4159% +0.1335%] (p = 0.16 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [51.163 s 51.281 s 51.405 s] + change: [-0.3691% -0.0584% +0.2346%] (p = 0.72 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [12.009 s 12.021 s 12.031 s] + change: [+0.1698% +0.3796% +0.5653%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [386.89 ms 390.20 ms 393.78 ms] + change: [-22.277% -21.547% -20.783%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [444.73 ms 449.51 ms 454.17 ms] + change: [-13.920% -13.006% -12.079%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [61.070 ms 61.285 ms 61.497 ms] + change: [-23.267% -22.795% -22.177%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [379.93 ms 384.22 ms 388.42 ms] + change: [+3.0646% +4.7461% +6.3483%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [397.67 ms 399.73 ms 401.70 ms] + change: [-2.6120% -1.6706% -0.9331%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [180.60 ms 181.60 ms 182.56 ms] + change: [-0.2070% +0.4551% +1.1930%] (p = 0.26 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [7.7677 ms 7.8234 ms 7.8529 ms] + change: [-1.0232% -0.4323% +0.1049%] (p = 0.17 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [54.975 ms 55.151 ms 55.328 ms] + change: [-4.1017% -3.7023% -3.2648%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_kzg_proof time: [56.523 ms 56.751 ms 57.015 ms] + change: [-9.4008% -8.9269% -8.4113%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6296 ms 2.6396 ms 2.6503 ms] + change: [+0.1468% +0.5978% +1.0336%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [57.092 ms 57.270 ms 57.451 ms] + change: [-9.8352% -9.4975% -9.1141%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [4.0438 ms 4.0569 ms 4.0700 ms] + change: [-0.9227% -0.4735% -0.0489%] (p = 0.04 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [4.0649 ms 4.0774 ms 4.0902 ms] + thrpt: [244.49 elem/s 245.26 elem/s 246.01 elem/s] + change: + time: [-1.9559% -1.5368% -1.1146%] (p = 0.00 < 0.05) + thrpt: [+1.1271% +1.5608% +1.9949%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [5.9037 ms 5.9221 ms 5.9411 ms] + thrpt: [336.64 elem/s 337.72 elem/s 338.77 elem/s] + change: + time: [-1.6548% -1.1809% -0.7513%] (p = 0.00 < 0.05) + thrpt: [+0.7570% +1.1950% +1.6826%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [10.589 ms 10.619 ms 10.650 ms] + thrpt: [375.58 elem/s 376.68 elem/s 377.75 elem/s] + change: + time: [-0.2254% +0.1760% +0.5890%] (p = 0.39 > 0.05) + thrpt: [-0.5856% -0.1757% +0.2259%] + No change in performance detected. +verify_blob_kzg_proof_batch/8 + time: [17.118 ms 17.157 ms 17.198 ms] + thrpt: [465.18 elem/s 466.27 elem/s 467.36 elem/s] + change: + time: [-36.346% -36.102% -35.864%] (p = 0.00 < 0.05) + thrpt: [+55.918% +56.501% +57.100%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [31.481 ms 31.554 ms 31.628 ms] + thrpt: [505.88 elem/s 507.06 elem/s 508.24 elem/s] + change: + time: [-24.072% -23.714% -23.368%] (p = 0.00 < 0.05) + thrpt: [+30.493% +31.085% +31.703%] + Performance has improved. +verify_blob_kzg_proof_batch/32 + time: [59.885 ms 60.023 ms 60.162 ms] + thrpt: [531.90 elem/s 533.13 elem/s 534.36 elem/s] + change: + time: [-13.597% -13.230% -12.876%] (p = 0.00 < 0.05) + thrpt: [+14.779% +15.247% +15.737%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [115.69 ms 115.95 ms 116.22 ms] + thrpt: [550.68 elem/s 551.95 elem/s 553.20 elem/s] + change: + time: [-6.7192% -6.3421% -5.9938%] (p = 0.00 < 0.05) + thrpt: [+6.3760% +6.7715% +7.2032%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [8.3497 ms 8.3862 ms 8.4259 ms] + change: [-2.2711% -1.2692% -0.2806%] (p = 0.03 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [1.0231 s 1.0269 s 1.0312 s] + change: [-0.0435% +0.6053% +1.2206%] (p = 0.09 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high severe + +bench_fk_single_da scale: '14' + time: [51.284 s 51.371 s 51.464 s] + change: [-0.1160% +0.1749% +0.4688%] (p = 0.28 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [11.956 s 11.982 s 12.006 s] + change: [-0.5519% -0.3190% -0.0901%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_commit_to_poly scale: '15' + time: [383.34 ms 384.22 ms 385.35 ms] + change: [-2.4624% -1.5317% -0.6587%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [391.60 ms 393.84 ms 396.88 ms] + change: [-13.444% -12.384% -11.213%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [79.810 ms 79.914 ms 80.115 ms] + change: [+29.209% +30.296% +31.248%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [55.816 ms 56.021 ms 56.210 ms] + change: [+835.81% +861.20% +880.97%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 2 (20.00%) low mild + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [383.22 ms 387.13 ms 390.69 ms] + change: [-0.7338% +0.7576% +2.2108%] (p = 0.34 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [404.59 ms 406.20 ms 407.80 ms] + change: [+0.9707% +1.6193% +2.2642%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [184.02 ms 185.22 ms 186.25 ms] + change: [+1.1616% +1.9952% +2.8239%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4198 ms 2.4389 ms 2.4812 ms] + change: [-68.661% -68.002% -67.312%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [13.933 ms 14.137 ms 14.364 ms] + change: [-74.766% -74.367% -73.996%] (p = 0.00 < 0.05) + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 7 (7.00%) high mild + 4 (4.00%) high severe + +compute_kzg_proof time: [15.509 ms 15.729 ms 15.957 ms] + change: [-72.712% -72.284% -71.847%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [2.7069 ms 2.7124 ms 2.7180 ms] + change: [+2.2964% +2.7607% +3.1950%] (p = 0.00 < 0.05) + Performance has regressed. + +compute_blob_kzg_proof time: [16.786 ms 17.105 ms 17.452 ms] + change: [-70.673% -70.133% -69.400%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof time: [4.1153 ms 4.1273 ms 4.1401 ms] + change: [+1.2997% +1.7356% +2.2013%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [4.1577 ms 4.1681 ms 4.1781 ms] + thrpt: [239.34 elem/s 239.92 elem/s 240.52 elem/s] + change: + time: [+1.8135% +2.2245% +2.6456%] (p = 0.00 < 0.05) + thrpt: [-2.5774% -2.1761% -1.7812%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [4.6422 ms 4.6881 ms 4.7574 ms] + thrpt: [420.40 elem/s 426.61 elem/s 430.83 elem/s] + change: + time: [-21.656% -20.837% -19.527%] (p = 0.00 < 0.05) + thrpt: [+24.265% +26.321% +27.642%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.8140 ms 4.9954 ms 5.2008 ms] + thrpt: [769.11 elem/s 800.74 elem/s 830.92 elem/s] + change: + time: [-54.757% -52.959% -51.144%] (p = 0.00 < 0.05) + thrpt: [+104.68% +112.58% +121.03%] + Performance has improved. +Found 16 outliers among 100 measurements (16.00%) + 1 (1.00%) high mild + 15 (15.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [8.0298 ms 8.0946 ms 8.1510 ms] + thrpt: [981.48 elem/s 988.32 elem/s 996.29 elem/s] + change: + time: [-53.204% -52.822% -52.454%] (p = 0.00 < 0.05) + thrpt: [+110.32% +111.96% +113.69%] + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 5 (5.00%) low severe + 4 (4.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [8.1916 ms 8.2530 ms 8.3225 ms] + thrpt: [1.9225 Kelem/s 1.9387 Kelem/s 1.9532 Kelem/s] + change: + time: [-74.044% -73.845% -73.632%] (p = 0.00 < 0.05) + thrpt: [+279.25% +282.34% +285.27%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 5 (5.00%) high mild + 8 (8.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [12.114 ms 12.214 ms 12.325 ms] + thrpt: [2.5964 Kelem/s 2.6200 Kelem/s 2.6416 Kelem/s] + change: + time: [-79.830% -79.652% -79.444%] (p = 0.00 < 0.05) + thrpt: [+386.48% +391.44% +395.77%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [20.904 ms 20.965 ms 21.030 ms] + thrpt: [3.0432 Kelem/s 3.0526 Kelem/s 3.0616 Kelem/s] + change: + time: [-81.986% -81.919% -81.849%] (p = 0.00 < 0.05) + thrpt: [+450.95% +453.06% +455.12%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild + +bench_fft_fr scale: '15' + time: [2.2368 ms 2.2455 ms 2.2546 ms] + change: [-73.293% -73.124% -72.948%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [226.44 ms 231.90 ms 237.61 ms] + change: [-77.928% -77.417% -76.751%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [15.794 s 15.981 s 16.191 s] + change: [-69.225% -68.891% -68.478%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [2.7449 s 2.7624 s 2.7805 s] + change: [-77.112% -76.946% -76.795%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [84.001 ms 85.410 ms 87.291 ms] + change: [-78.318% -77.757% -77.357%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [86.813 ms 87.888 ms 89.217 ms] + change: [-77.875% -77.595% -77.299%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [14.055 ms 14.191 ms 14.371 ms] + change: [-82.674% -82.390% -82.109%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [118.45 ms 119.25 ms 120.12 ms] + change: [-69.302% -68.770% -68.204%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [297.87 ms 299.42 ms 300.90 ms] + change: [-26.794% -26.288% -25.837%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [123.64 ms 125.11 ms 126.35 ms] + change: [-33.449% -32.879% -32.197%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with arkworks backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.3806 ms 2.4291 ms 2.4858 ms] + change: [-5.4550% -3.0692% -0.8021%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [9.1814 ms 9.2127 ms 9.2522 ms] + change: [-35.887% -34.831% -33.829%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [10.891 ms 10.922 ms 10.961 ms] + change: [-31.581% -30.563% -29.558%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [2.6431 ms 2.6498 ms 2.6565 ms] + change: [-2.6241% -2.3075% -1.9873%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [11.696 ms 11.731 ms 11.769 ms] + change: [-32.787% -31.417% -30.090%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [4.0934 ms 4.1035 ms 4.1141 ms] + change: [-0.9828% -0.5766% -0.1923%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [4.1612 ms 4.1739 ms 4.1868 ms] + thrpt: [238.84 elem/s 239.58 elem/s 240.31 elem/s] + change: + time: [-0.2387% +0.1400% +0.5249%] (p = 0.49 > 0.05) + thrpt: [-0.5222% -0.1398% +0.2392%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6568 ms 4.7668 ms 4.8975 ms] + thrpt: [408.37 elem/s 419.57 elem/s 429.48 elem/s] + change: + time: [-1.1182% +1.6785% +4.4486%] (p = 0.27 > 0.05) + thrpt: [-4.2591% -1.6508% +1.1309%] + No change in performance detected. +Found 13 outliers among 100 measurements (13.00%) + 3 (3.00%) high mild + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.6699 ms 4.7593 ms 4.8742 ms] + thrpt: [820.64 elem/s 840.47 elem/s 856.54 elem/s] + change: + time: [-8.8417% -4.7266% -0.3988%] (p = 0.04 < 0.05) + thrpt: [+0.4004% +4.9611% +9.6993%] + Change within noise threshold. +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [7.9924 ms 8.0745 ms 8.1473 ms] + thrpt: [981.93 elem/s 990.77 elem/s 1.0009 Kelem/s] + change: + time: [-1.4810% -0.2472% +0.9654%] (p = 0.69 > 0.05) + thrpt: [-0.9562% +0.2478% +1.5033%] + No change in performance detected. +Found 16 outliers among 100 measurements (16.00%) + 10 (10.00%) low severe + 3 (3.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [8.1708 ms 8.2159 ms 8.2662 ms] + thrpt: [1.9356 Kelem/s 1.9475 Kelem/s 1.9582 Kelem/s] + change: + time: [-1.3905% -0.4496% +0.5033%] (p = 0.38 > 0.05) + thrpt: [-0.5008% +0.4516% +1.4101%] + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [11.754 ms 11.787 ms 11.821 ms] + thrpt: [2.7071 Kelem/s 2.7149 Kelem/s 2.7225 Kelem/s] + change: + time: [-4.4019% -3.4943% -2.6428%] (p = 0.00 < 0.05) + thrpt: [+2.7145% +3.6208% +4.6046%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [20.766 ms 20.858 ms 20.982 ms] + thrpt: [3.0502 Kelem/s 3.0684 Kelem/s 3.0819 Kelem/s] + change: + time: [-1.0786% -0.5131% +0.1613%] (p = 0.09 > 0.05) + thrpt: [-0.1610% +0.5158% +1.0903%] + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [2.3388 ms 2.4270 ms 2.4954 ms] + change: [+4.4211% +6.4442% +9.1446%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [225.91 ms 230.10 ms 234.62 ms] + change: [-3.7725% -0.7783% +2.2706%] (p = 0.64 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [15.725 s 15.940 s 16.140 s] + change: [-2.1294% -0.2582% +1.3431%] (p = 0.80 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [2.7561 s 2.7819 s 2.8072 s] + change: [-0.4520% +0.7065% +1.8702%] (p = 0.26 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [60.786 ms 61.022 ms 61.244 ms] + change: [-29.976% -28.622% -27.043%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [62.647 ms 62.891 ms 63.173 ms] + change: [-29.436% -28.631% -27.788%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [13.888 ms 14.263 ms 14.643 ms] + change: [-2.1367% +0.5637% +3.6150%] (p = 0.74 > 0.05) + No change in performance detected. + +bench_g1_lincomb with precomputation points: '4096' + time: [9.4489 ms 9.4909 ms 9.5231 ms] + change: [-83.252% -83.157% -83.060%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [115.71 ms 116.51 ms 117.97 ms] + change: [-5.1358% -3.5014% -1.9457%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_recover scale: '15' + time: [295.90 ms 297.22 ms 298.63 ms] + change: [-1.4090% -0.7339% -0.0863%] (p = 0.06 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [124.47 ms 125.82 ms 126.94 ms] + change: [-0.6359% +0.4286% +1.4755%] (p = 0.49 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (sequential) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [10.270 ms 10.368 ms 10.443 ms] + change: [+319.74% +326.18% +332.27%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [154.61 ms 154.97 ms 155.35 ms] + change: [+1574.0% +1582.2% +1589.2%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [159.23 ms 159.57 ms 159.92 ms] + change: [+1355.2% +1361.0% +1366.5%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [3.9981 ms 4.0111 ms 4.0244 ms] + change: [+50.726% +51.371% +51.957%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [159.90 ms 160.24 ms 160.59 ms] + change: [+1260.7% +1265.9% +1271.0%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [5.4769 ms 5.4896 ms 5.5025 ms] + change: [+33.322% +33.777% +34.264%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [5.5341 ms 5.5515 ms 5.5706 ms] + thrpt: [179.51 elem/s 180.13 elem/s 180.70 elem/s] + change: + time: [+32.402% +33.005% +33.608%] (p = 0.00 < 0.05) + thrpt: [-25.154% -24.815% -24.472%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [10.733 ms 10.759 ms 10.786 ms] + thrpt: [185.42 elem/s 185.89 elem/s 186.34 elem/s] + change: + time: [+119.61% +125.71% +131.05%] (p = 0.00 < 0.05) + thrpt: [-56.719% -55.696% -54.465%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [15.112 ms 15.153 ms 15.195 ms] + thrpt: [263.25 elem/s 263.97 elem/s 264.68 elem/s] + change: + time: [+210.86% +218.40% +224.55%] (p = 0.00 < 0.05) + thrpt: [-69.188% -68.593% -67.831%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [23.975 ms 24.053 ms 24.137 ms] + thrpt: [331.44 elem/s 332.59 elem/s 333.68 elem/s] + change: + time: [+195.06% +197.89% +201.09%] (p = 0.00 < 0.05) + thrpt: [-66.788% -66.431% -66.108%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [41.433 ms 41.526 ms 41.622 ms] + thrpt: [384.41 elem/s 385.30 elem/s 386.17 elem/s] + change: + time: [+402.24% +405.43% +408.52%] (p = 0.00 < 0.05) + thrpt: [-80.335% -80.215% -80.089%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [85.361 ms 85.592 ms 85.833 ms] + thrpt: [372.82 elem/s 373.87 elem/s 374.88 elem/s] + change: + time: [+623.23% +626.16% +629.05%] (p = 0.00 < 0.05) + thrpt: [-86.284% -86.229% -86.173%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [151.59 ms 151.93 ms 152.27 ms] + thrpt: [420.30 elem/s 421.24 elem/s 422.19 elem/s] + change: + time: [+623.82% +628.41% +631.98%] (p = 0.00 < 0.05) + thrpt: [-86.338% -86.271% -86.184%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_fft_fr scale: '15' + time: [11.342 ms 11.370 ms 11.428 ms] + change: [+367.17% +377.77% +386.99%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [99.200 s 99.398 s 99.604 s] + change: [+42253% +43098% +43899%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [105.63 s 105.80 s 105.95 s] + change: [+555.60% +563.73% +572.88%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [23.119 s 23.148 s 23.178 s] + change: [+724.55% +732.10% +739.93%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_commit_to_poly scale: '15' + time: [1.0070 s 1.0105 s 1.0139 s] + change: [+1549.6% +1556.5% +1563.6%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_compute_proof_single scale: '15' + time: [917.78 ms 922.23 ms 927.09 ms] + change: [+1355.8% +1364.4% +1373.2%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [158.71 ms 159.09 ms 159.56 ms] + change: [+993.76% +1023.0% +1051.1%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [793.33 ms 798.73 ms 804.28 ms] + change: [+577.71% +584.61% +591.08%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [597.00 ms 599.01 ms 600.87 ms] + change: [+100.35% +101.54% +102.59%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [207.52 ms 208.79 ms 209.94 ms] + change: [+65.462% +67.228% +68.917%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with zkcrypto backend (parallel) ~~~~~~~~~~ + + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.9851 ms 2.9998 ms 3.0189 ms] + change: [-71.094% -70.857% -70.653%] (p = 0.00 < 0.05) + Performance has improved. + +blob_to_kzg_commitment time: [24.014 ms 24.054 ms 24.097 ms] + change: [-84.526% -84.479% -84.433%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_kzg_proof time: [25.583 ms 25.653 ms 25.733 ms] + change: [-83.982% -83.924% -83.866%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [3.9785 ms 3.9874 ms 3.9963 ms] + change: [-0.9829% -0.5899% -0.1959%] (p = 0.00 < 0.05) + Change within noise threshold. + +compute_blob_kzg_proof time: [26.225 ms 26.272 ms 26.318 ms] + change: [-83.649% -83.605% -83.558%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [5.4849 ms 5.5004 ms 5.5168 ms] + change: [-0.1547% +0.1972% +0.6139%] (p = 0.30 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [5.4894 ms 5.5028 ms 5.5163 ms] + thrpt: [181.28 elem/s 181.72 elem/s 182.17 elem/s] + change: + time: [-1.2943% -0.8764% -0.4764%] (p = 0.00 < 0.05) + thrpt: [+0.4787% +0.8841% +1.3113%] + Change within noise threshold. +verify_blob_kzg_proof_batch/2 + time: [5.9446 ms 5.9571 ms 5.9697 ms] + thrpt: [335.03 elem/s 335.73 elem/s 336.44 elem/s] + change: + time: [-44.807% -44.633% -44.454%] (p = 0.00 < 0.05) + thrpt: [+80.030% +80.611% +81.182%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.1797 ms 6.3875 ms 6.6294 ms] + thrpt: [603.37 elem/s 626.22 elem/s 647.28 elem/s] + change: + time: [-59.170% -57.848% -56.247%] (p = 0.00 < 0.05) + thrpt: [+128.55% +137.23% +144.92%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 11 (11.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [10.431 ms 10.578 ms 10.707 ms] + thrpt: [747.15 elem/s 756.27 elem/s 766.91 elem/s] + change: + time: [-56.671% -56.022% -55.452%] (p = 0.00 < 0.05) + thrpt: [+124.48% +127.38% +130.79%] + Performance has improved. +Found 21 outliers among 100 measurements (21.00%) + 19 (19.00%) low severe + 2 (2.00%) low mild +verify_blob_kzg_proof_batch/16 + time: [10.842 ms 10.877 ms 10.917 ms] + thrpt: [1.4655 Kelem/s 1.4710 Kelem/s 1.4758 Kelem/s] + change: + time: [-73.914% -73.806% -73.706%] (p = 0.00 < 0.05) + thrpt: [+280.32% +281.77% +283.34%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [21.021 ms 21.096 ms 21.186 ms] + thrpt: [1.5105 Kelem/s 1.5169 Kelem/s 1.5223 Kelem/s] + change: + time: [-75.461% -75.353% -75.241%] (p = 0.00 < 0.05) + thrpt: [+303.89% +305.73% +307.52%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [29.219 ms 29.310 ms 29.427 ms] + thrpt: [2.1749 Kelem/s 2.1836 Kelem/s 2.1904 Kelem/s] + change: + time: [-80.783% -80.709% -80.619%] (p = 0.00 < 0.05) + thrpt: [+415.96% +418.37% +420.38%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [2.7786 ms 2.7991 ms 2.8284 ms] + change: [-75.765% -75.556% -75.314%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [23.240 s 23.814 s 24.389 s] + change: [-76.587% -76.042% -75.452%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [29.949 s 30.359 s 30.838 s] + change: [-71.672% -71.304% -70.806%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [5.0338 s 5.0860 s 5.1404 s] + change: [-78.256% -78.029% -77.758%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [165.39 ms 168.25 ms 172.31 ms] + change: [-83.846% -83.268% -82.742%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [150.31 ms 153.75 ms 157.76 ms] + change: [-84.223% -83.434% -82.943%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low severe + +bench_g1_lincomb points: '4096' + time: [24.190 ms 24.215 ms 24.260 ms] + change: [-84.833% -84.786% -84.738%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [245.74 ms 246.64 ms 247.47 ms] + change: [-69.357% -69.121% -68.878%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [475.44 ms 476.92 ms 478.53 ms] + change: [-20.740% -20.382% -20.001%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [137.86 ms 139.63 ms 140.56 ms] + change: [-34.289% -33.704% -33.043%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.1927 ms 9.2141 ms 9.2368 ms] + change: [+205.32% +206.72% +208.16%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [52.015 ms 52.154 ms 52.293 ms] + change: [+116.11% +116.82% +117.53%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [55.202 ms 55.349 ms 55.497 ms] + change: [+114.85% +115.76% +116.70%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2426 ms 1.2460 ms 1.2493 ms] + change: [-68.821% -68.709% -68.598%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) low mild + 4 (4.00%) high mild + +compute_blob_kzg_proof time: [56.238 ms 56.348 ms 56.458 ms] + change: [+113.91% +114.48% +115.05%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.8032 ms 2.8116 ms 2.8202 ms] + change: [-49.096% -48.883% -48.668%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.8805 ms 2.8898 ms 2.8994 ms] + thrpt: [344.90 elem/s 346.04 elem/s 347.17 elem/s] + change: + time: [-47.694% -47.485% -47.266%] (p = 0.00 < 0.05) + thrpt: [+89.631% +90.423% +91.182%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [4.6723 ms 4.6906 ms 4.7126 ms] + thrpt: [424.40 elem/s 426.38 elem/s 428.06 elem/s] + change: + time: [-21.601% -21.260% -20.832%] (p = 0.00 < 0.05) + thrpt: [+26.314% +27.000% +27.553%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [8.5716 ms 8.5929 ms 8.6146 ms] + thrpt: [464.33 elem/s 465.50 elem/s 466.65 elem/s] + change: + time: [+29.587% +34.527% +39.049%] (p = 0.00 < 0.05) + thrpt: [-28.083% -25.666% -22.832%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [15.917 ms 15.965 ms 16.012 ms] + thrpt: [499.62 elem/s 501.10 elem/s 502.60 elem/s] + change: + time: [+49.041% +50.921% +53.086%] (p = 0.00 < 0.05) + thrpt: [-34.677% -33.740% -32.904%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [30.406 ms 30.501 ms 30.602 ms] + thrpt: [522.84 elem/s 524.58 elem/s 526.21 elem/s] + change: + time: [+179.08% +180.41% +181.72%] (p = 0.00 < 0.05) + thrpt: [-64.504% -64.338% -64.168%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [58.522 ms 58.674 ms 58.825 ms] + thrpt: [543.99 elem/s 545.38 elem/s 546.80 elem/s] + change: + time: [+176.74% +178.13% +179.38%] (p = 0.00 < 0.05) + thrpt: [-64.206% -64.046% -63.864%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [114.53 ms 114.79 ms 115.07 ms] + thrpt: [556.17 elem/s 557.52 elem/s 558.79 elem/s] + change: + time: [+289.91% +291.66% +293.18%] (p = 0.00 < 0.05) + thrpt: [-74.566% -74.468% -74.353%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.7342 ms 9.7601 ms 9.7934 ms] + change: [+246.85% +249.98% +252.65%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fft_g1 scale: '15' + time: [18.864 s 18.888 s 18.910 s] + change: [-22.559% -20.687% -18.742%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_single_da scale: '14' + time: [20.261 s 20.295 s 20.331 s] + change: [-34.216% -33.150% -32.231%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [4.6937 s 4.7058 s 4.7184 s] + change: [-8.4674% -7.4765% -6.4637%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [336.95 ms 337.45 ms 337.96 ms] + change: [+93.063% +99.584% +107.06%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + +bench_compute_proof_single scale: '15' + time: [349.86 ms 351.82 ms 353.79 ms] + change: [+123.48% +130.29% +140.00%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [53.635 ms 53.798 ms 53.962 ms] + change: [+121.10% +121.89% +122.73%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +bench_new_poly_div scale: '15' + time: [673.52 ms 676.02 ms 678.51 ms] + change: [+172.72% +174.09% +175.47%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [275.06 ms 276.65 ms 278.14 ms] + change: [-42.382% -41.992% -41.604%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [170.05 ms 170.64 ms 171.22 ms] + change: [+22.710% +23.845% +24.920%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.2017 ms 9.2598 ms 9.3162 ms] + change: [-0.4249% +0.1587% +0.7257%] (p = 0.63 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [44.340 ms 44.471 ms 44.606 ms] + change: [-15.045% -14.731% -14.379%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_kzg_proof time: [48.648 ms 48.805 ms 48.968 ms] + change: [-12.206% -11.822% -11.423%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.2402 ms 1.2456 ms 1.2528 ms] + change: [-0.6979% -0.2574% +0.1614%] (p = 0.24 > 0.05) + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [49.349 ms 49.566 ms 49.831 ms] + change: [-12.455% -12.036% -11.521%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.8174 ms 2.8259 ms 2.8344 ms] + change: [+0.0944% +0.5056% +0.9471%] (p = 0.02 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [2.8407 ms 2.8485 ms 2.8563 ms] + thrpt: [350.10 elem/s 351.07 elem/s 352.03 elem/s] + change: + time: [-1.8410% -1.4303% -1.0096%] (p = 0.00 < 0.05) + thrpt: [+1.0199% +1.4511% +1.8755%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [4.6130 ms 4.6263 ms 4.6399 ms] + thrpt: [431.05 elem/s 432.31 elem/s 433.55 elem/s] + change: + time: [-1.8975% -1.3711% -0.8764%] (p = 0.00 < 0.05) + thrpt: [+0.8841% +1.3902% +1.9342%] + Change within noise threshold. +verify_blob_kzg_proof_batch/4 + time: [8.4637 ms 8.4851 ms 8.5065 ms] + thrpt: [470.23 elem/s 471.41 elem/s 472.61 elem/s] + change: + time: [-1.5992% -1.2544% -0.8902%] (p = 0.00 < 0.05) + thrpt: [+0.8982% +1.2703% +1.6252%] + Change within noise threshold. +verify_blob_kzg_proof_batch/8 + time: [20.076 ms 20.129 ms 20.189 ms] + thrpt: [396.26 elem/s 397.43 elem/s 398.49 elem/s] + change: + time: [+25.544% +26.086% +26.604%] (p = 0.00 < 0.05) + thrpt: [-21.013% -20.689% -20.347%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [36.432 ms 36.525 ms 36.617 ms] + thrpt: [436.95 elem/s 438.06 elem/s 439.18 elem/s] + change: + time: [+19.261% +19.750% +20.240%] (p = 0.00 < 0.05) + thrpt: [-16.833% -16.493% -16.150%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [64.616 ms 64.781 ms 64.944 ms] + thrpt: [492.73 elem/s 493.97 elem/s 495.23 elem/s] + change: + time: [+10.011% +10.408% +10.785%] (p = 0.00 < 0.05) + thrpt: [-9.7351% -9.4270% -9.1003%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [118.93 ms 119.23 ms 119.53 ms] + thrpt: [535.44 elem/s 536.78 elem/s 538.12 elem/s] + change: + time: [+3.4935% +3.8643% +4.2260%] (p = 0.00 < 0.05) + thrpt: [-4.0547% -3.7206% -3.3756%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +bench_fft_fr scale: '15' + time: [9.6756 ms 9.6983 ms 9.7221 ms] + change: [-1.1681% -0.6712% -0.2295%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [18.879 s 18.902 s 18.926 s] + change: [-0.0988% +0.0765% +0.2606%] (p = 0.42 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [20.307 s 20.348 s 20.392 s] + change: [-0.0221% +0.2584% +0.5404%] (p = 0.10 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [4.6812 s 4.6923 s 4.7057 s] + change: [-0.6387% -0.2867% +0.0995%] (p = 0.17 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [311.53 ms 314.66 ms 318.05 ms] + change: [-7.7301% -6.7512% -5.8707%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [325.62 ms 329.21 ms 333.07 ms] + change: [-7.6724% -6.4264% -5.2022%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [47.476 ms 47.626 ms 47.792 ms] + change: [-11.856% -11.471% -11.070%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_new_poly_div scale: '15' + time: [676.79 ms 681.17 ms 686.01 ms] + change: [-0.0655% +0.7623% +1.5831%] (p = 0.09 > 0.05) + No change in performance detected. + +bench_recover scale: '15' + time: [272.08 ms 272.97 ms 273.91 ms] + change: [-1.9440% -1.3295% -0.6598%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_zero_poly scale: '15' + time: [168.22 ms 169.17 ms 170.19 ms] + change: [-2.2748% -1.5842% -0.8937%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low severe + 2 (20.00%) high severe + + + + +~~~~~~~~~~ rust-kzg with blst backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.1559 ms 9.2037 ms 9.2643 ms] + change: [-1.5505% -0.7051% +0.1102%] (p = 0.13 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [37.885 ms 37.998 ms 38.121 ms] + change: [-14.912% -14.556% -14.190%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [39.164 ms 39.266 ms 39.371 ms] + change: [-19.876% -19.545% -19.216%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2308 ms 1.2334 ms 1.2359 ms] + change: [-1.3261% -0.8612% -0.3910%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [39.926 ms 40.038 ms 40.153 ms] + change: [-19.701% -19.223% -18.798%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.7907 ms 2.7975 ms 2.8042 ms] + change: [-1.4041% -1.0052% -0.6229%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_blob_kzg_proof_batch/1 + time: [2.8503 ms 2.8600 ms 2.8709 ms] + thrpt: [348.33 elem/s 349.64 elem/s 350.83 elem/s] + change: + time: [-0.0084% +0.4063% +0.9002%] (p = 0.08 > 0.05) + thrpt: [-0.8921% -0.4046% +0.0084%] + No change in performance detected. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.5834 ms 4.5962 ms 4.6090 ms] + thrpt: [433.93 elem/s 435.14 elem/s 436.36 elem/s] + change: + time: [-1.0326% -0.6511% -0.2463%] (p = 0.00 < 0.05) + thrpt: [+0.2470% +0.6554% +1.0433%] + Change within noise threshold. +verify_blob_kzg_proof_batch/4 + time: [8.3890 ms 8.4085 ms 8.4284 ms] + thrpt: [474.59 elem/s 475.71 elem/s 476.81 elem/s] + change: + time: [-1.2557% -0.9027% -0.5724%] (p = 0.00 < 0.05) + thrpt: [+0.5756% +0.9109% +1.2716%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [15.739 ms 15.786 ms 15.834 ms] + thrpt: [505.23 elem/s 506.78 elem/s 508.30 elem/s] + change: + time: [-21.876% -21.577% -21.259%] (p = 0.00 < 0.05) + thrpt: [+26.998% +27.514% +28.001%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [30.027 ms 30.108 ms 30.191 ms] + thrpt: [529.96 elem/s 531.42 elem/s 532.86 elem/s] + change: + time: [-17.878% -17.568% -17.264%] (p = 0.00 < 0.05) + thrpt: [+20.866% +21.312% +21.770%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [57.966 ms 58.141 ms 58.317 ms] + thrpt: [548.73 elem/s 550.39 elem/s 552.05 elem/s] + change: + time: [-10.606% -10.250% -9.8917%] (p = 0.00 < 0.05) + thrpt: [+10.978% +11.421% +11.864%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [113.57 ms 113.89 ms 114.23 ms] + thrpt: [560.27 elem/s 561.93 elem/s 563.53 elem/s] + change: + time: [-4.8345% -4.4766% -4.1078%] (p = 0.00 < 0.05) + thrpt: [+4.2838% +4.6864% +5.0801%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + +bench_fft_fr scale: '15' + time: [9.5776 ms 9.6217 ms 9.6572 ms] + change: [-1.2595% -0.7803% -0.2854%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [18.797 s 18.830 s 18.862 s] + change: [-0.5942% -0.3807% -0.1786%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [20.204 s 20.248 s 20.293 s] + change: [-0.7886% -0.4894% -0.2042%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.6906 s 4.6979 s 4.7036 s] + change: [-0.1969% +0.1198% +0.3938%] (p = 0.48 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [267.38 ms 268.75 ms 270.06 ms] + change: [-15.637% -14.591% -13.610%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [268.87 ms 269.98 ms 271.50 ms] + change: [-19.002% -17.993% -16.979%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [53.614 ms 53.756 ms 53.894 ms] + change: [+12.384% +12.870% +13.329%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb with precomputation points: '4096' + time: [38.290 ms 38.407 ms 38.530 ms] + change: [+303.72% +305.87% +307.92%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_new_poly_div scale: '15' + time: [671.15 ms 676.41 ms 682.49 ms] + change: [-1.7624% -0.6989% +0.3763%] (p = 0.25 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [271.52 ms 272.29 ms 273.10 ms] + change: [-0.7028% -0.2488% +0.1902%] (p = 0.31 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [170.93 ms 171.61 ms 172.38 ms] + change: [+1.3960% +2.1624% +2.9690%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4958 ms 2.5041 ms 2.5201 ms] + change: [-72.799% -72.533% -72.259%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +blob_to_kzg_commitment time: [8.9480 ms 8.9750 ms 9.0018 ms] + change: [-76.484% -76.380% -76.279%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_kzg_proof time: [10.236 ms 10.263 ms 10.292 ms] + change: [-73.957% -73.862% -73.758%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2270 ms 1.2301 ms 1.2334 ms] + change: [-0.3774% +0.0422% +0.4663%] (p = 0.85 > 0.05) + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [11.264 ms 11.292 ms 11.321 ms] + change: [-71.900% -71.797% -71.686%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.8240 ms 2.8304 ms 2.8369 ms] + change: [+0.8426% +1.1784% +1.5146%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.8401 ms 2.8481 ms 2.8563 ms] + thrpt: [350.10 elem/s 351.11 elem/s 352.11 elem/s] + change: + time: [-0.8772% -0.4171% +0.0223%] (p = 0.08 > 0.05) + thrpt: [-0.0223% +0.4188% +0.8850%] + No change in performance detected. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.3476 ms 3.3997 ms 3.4590 ms] + thrpt: [578.20 elem/s 588.29 elem/s 597.45 elem/s] + change: + time: [-27.130% -26.033% -24.890%] (p = 0.00 < 0.05) + thrpt: [+33.138% +35.195% +37.230%] + Performance has improved. +Found 13 outliers among 100 measurements (13.00%) + 13 (13.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.3673 ms 3.4298 ms 3.5099 ms] + thrpt: [1.1396 Kelem/s 1.1663 Kelem/s 1.1879 Kelem/s] + change: + time: [-59.970% -59.211% -58.213%] (p = 0.00 < 0.05) + thrpt: [+139.31% +145.16% +149.81%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.6406 ms 5.6839 ms 5.7254 ms] + thrpt: [1.3973 Kelem/s 1.4075 Kelem/s 1.4183 Kelem/s] + change: + time: [-64.303% -63.994% -63.712%] (p = 0.00 < 0.05) + thrpt: [+175.58% +177.73% +180.13%] + Performance has improved. +Found 14 outliers among 100 measurements (14.00%) + 3 (3.00%) low severe + 8 (8.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [5.6698 ms 5.6876 ms 5.7061 ms] + thrpt: [2.8040 Kelem/s 2.8131 Kelem/s 2.8220 Kelem/s] + change: + time: [-81.188% -81.109% -81.026%] (p = 0.00 < 0.05) + thrpt: [+427.03% +429.36% +431.57%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [9.1400 ms 9.1721 ms 9.2114 ms] + thrpt: [3.4740 Kelem/s 3.4889 Kelem/s 3.5011 Kelem/s] + change: + time: [-84.297% -84.224% -84.137%] (p = 0.00 < 0.05) + thrpt: [+530.41% +533.89% +536.80%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [16.135 ms 16.173 ms 16.213 ms] + thrpt: [3.9474 Kelem/s 3.9572 Kelem/s 3.9666 Kelem/s] + change: + time: [-85.853% -85.800% -85.747%] (p = 0.00 < 0.05) + thrpt: [+601.61% +604.21% +606.84%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [2.3647 ms 2.3734 ms 2.3780 ms] + change: [-75.517% -75.388% -75.265%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fft_g1 scale: '15' + time: [4.9182 s 5.0655 s 5.2103 s] + change: [-73.846% -73.099% -72.358%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [6.3376 s 6.4507 s 6.5682 s] + change: [-68.666% -68.142% -67.515%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_multi_da scale: '14' + time: [1.1010 s 1.1202 s 1.1388 s] + change: [-76.517% -76.156% -75.739%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_commit_to_poly scale: '15' + time: [61.478 ms 61.808 ms 62.057 ms] + change: [-77.187% -77.035% -76.890%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [60.529 ms 60.848 ms 61.156 ms] + change: [-77.663% -77.512% -77.378%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [8.9942 ms 9.0151 ms 9.0365 ms] + change: [-83.287% -83.229% -83.168%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +bench_new_poly_div scale: '15' + time: [194.07 ms 195.51 ms 197.19 ms] + change: [-71.432% -71.097% -70.751%] (p = 0.00 < 0.05) + Performance has improved. + +bench_recover scale: '15' + time: [75.511 ms 76.172 ms 76.859 ms] + change: [-72.309% -72.139% -71.940%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [50.763 ms 51.449 ms 52.369 ms] + change: [-70.626% -69.922% -69.309%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with blst backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.5119 ms 2.5354 ms 2.5552 ms] + change: [-0.9501% +0.1668% +1.2293%] (p = 0.79 > 0.05) + No change in performance detected. + +blob_to_kzg_commitment time: [6.3256 ms 6.3491 ms 6.3783 ms] + change: [-29.616% -29.258% -28.883%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [7.9520 ms 7.9772 ms 8.0083 ms] + change: [-22.616% -22.275% -21.928%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2309 ms 1.2337 ms 1.2369 ms] + change: [+0.2369% +0.6402% +1.0466%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [8.8514 ms 8.8871 ms 8.9324 ms] + change: [-21.691% -21.296% -20.881%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.7817 ms 2.7884 ms 2.7952 ms] + change: [-1.7875% -1.4848% -1.1417%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.9099 ms 2.9200 ms 2.9305 ms] + thrpt: [341.24 elem/s 342.46 elem/s 343.66 elem/s] + change: + time: [+2.0480% +2.5243% +2.9668%] (p = 0.00 < 0.05) + thrpt: [-2.8813% -2.4622% -2.0069%] + Performance has regressed. +verify_blob_kzg_proof_batch/2 + time: [3.2526 ms 3.2631 ms 3.2737 ms] + thrpt: [610.92 elem/s 612.91 elem/s 614.89 elem/s] + change: + time: [-5.6903% -4.0162% -2.4864%] (p = 0.00 < 0.05) + thrpt: [+2.5498% +4.1842% +6.0336%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.2853 ms 3.3656 ms 3.4655 ms] + thrpt: [1.1542 Kelem/s 1.1885 Kelem/s 1.2176 Kelem/s] + change: + time: [-5.1658% -1.8717% +1.8962%] (p = 0.28 > 0.05) + thrpt: [-1.8609% +1.9074% +5.4472%] + No change in performance detected. +Found 9 outliers among 100 measurements (9.00%) + 9 (9.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.6689 ms 5.7010 ms 5.7327 ms] + thrpt: [1.3955 Kelem/s 1.4033 Kelem/s 1.4112 Kelem/s] + change: + time: [-0.6317% +0.3006% +1.1944%] (p = 0.53 > 0.05) + thrpt: [-1.1803% -0.2997% +0.6357%] + No change in performance detected. +Found 10 outliers among 100 measurements (10.00%) + 2 (2.00%) low severe + 6 (6.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [5.6552 ms 5.6771 ms 5.7012 ms] + thrpt: [2.8064 Kelem/s 2.8183 Kelem/s 2.8293 Kelem/s] + change: + time: [-0.6990% -0.1858% +0.3310%] (p = 0.48 > 0.05) + thrpt: [-0.3299% +0.1861% +0.7039%] + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [9.1947 ms 9.2207 ms 9.2470 ms] + thrpt: [3.4606 Kelem/s 3.4704 Kelem/s 3.4802 Kelem/s] + change: + time: [+0.0052% +0.5307% +0.9744%] (p = 0.03 < 0.05) + thrpt: [-0.9650% -0.5279% -0.0052%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [16.328 ms 16.389 ms 16.471 ms] + thrpt: [3.8857 Kelem/s 3.9052 Kelem/s 3.9196 Kelem/s] + change: + time: [+0.8561% +1.3315% +1.7971%] (p = 0.00 < 0.05) + thrpt: [-1.7653% -1.3140% -0.8488%] + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [2.3704 ms 2.3914 ms 2.4174 ms] + change: [-0.0430% +1.0042% +2.1173%] (p = 0.10 > 0.05) + No change in performance detected. + +bench_fft_g1 scale: '15' + time: [4.8171 s 4.9605 s 5.1303 s] + change: [-5.8598% -2.0736% +2.3956%] (p = 0.38 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [6.3335 s 6.4228 s 6.5204 s] + change: [-2.7085% -0.4319% +1.9577%] (p = 0.73 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [1.1020 s 1.1195 s 1.1365 s] + change: [-2.2838% -0.0552% +2.3263%] (p = 0.97 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [42.306 ms 42.438 ms 42.600 ms] + change: [-31.657% -31.266% -30.872%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [43.475 ms 43.589 ms 43.804 ms] + change: [-28.316% -27.841% -27.315%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [8.8958 ms 8.9170 ms 8.9384 ms] + change: [-1.4235% -1.0881% -0.7507%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [6.5170 ms 6.5569 ms 6.6040 ms] + change: [-83.041% -82.928% -82.800%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 5 (5.00%) high severe + +bench_new_poly_div scale: '15' + time: [193.69 ms 195.33 ms 196.86 ms] + change: [-1.3095% -0.0913% +1.0278%] (p = 0.89 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_recover scale: '15' + time: [74.943 ms 76.500 ms 77.396 ms] + change: [-1.1704% +0.2160% +1.5816%] (p = 0.77 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_zero_poly scale: '15' + time: [50.863 ms 52.010 ms 53.460 ms] + change: [-2.4529% +0.1683% +2.9679%] (p = 0.92 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [8.9255 ms 8.9361 ms 8.9528 ms] + change: [+251.06% +253.96% +256.82%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high mild + +blob_to_kzg_commitment time: [49.182 ms 49.301 ms 49.424 ms] + change: [+672.55% +676.50% +680.08%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [51.795 ms 51.939 ms 52.093 ms] + change: [+548.06% +551.10% +553.84%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2155 ms 1.2197 ms 1.2241 ms] + change: [-2.1858% -1.5011% -0.6771%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [52.574 ms 52.722 ms 52.868 ms] + change: [+489.78% +493.23% +496.17%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof time: [2.4904 ms 2.4982 ms 2.5059 ms] + change: [-10.788% -10.407% -10.032%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5350 ms 2.5419 ms 2.5487 ms] + thrpt: [392.36 elem/s 393.40 elem/s 394.47 elem/s] + change: + time: [-13.327% -12.948% -12.567%] (p = 0.00 < 0.05) + thrpt: [+14.373% +14.874% +15.376%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [4.1615 ms 4.1730 ms 4.1845 ms] + thrpt: [477.96 elem/s 479.27 elem/s 480.60 elem/s] + change: + time: [+27.349% +27.884% +28.435%] (p = 0.00 < 0.05) + thrpt: [-22.140% -21.804% -21.476%] + Performance has regressed. +verify_blob_kzg_proof_batch/4 + time: [7.4149 ms 7.4349 ms 7.4550 ms] + thrpt: [536.56 elem/s 538.00 elem/s 539.45 elem/s] + change: + time: [+114.55% +120.91% +126.40%] (p = 0.00 < 0.05) + thrpt: [-55.830% -54.733% -53.391%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [13.417 ms 13.458 ms 13.501 ms] + thrpt: [592.55 elem/s 594.43 elem/s 596.25 elem/s] + change: + time: [+134.53% +136.07% +137.59%] (p = 0.00 < 0.05) + thrpt: [-57.910% -57.639% -57.362%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [25.470 ms 25.544 ms 25.620 ms] + thrpt: [624.52 elem/s 626.37 elem/s 628.19 elem/s] + change: + time: [+347.68% +349.95% +352.20%] (p = 0.00 < 0.05) + thrpt: [-77.886% -77.775% -77.663%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [48.797 ms 48.932 ms 49.067 ms] + thrpt: [652.18 elem/s 653.97 elem/s 655.77 elem/s] + change: + time: [+428.60% +430.67% +432.82%] (p = 0.00 < 0.05) + thrpt: [-81.232% -81.156% -81.082%] + Performance has regressed. +verify_blob_kzg_proof_batch/64 + time: [95.561 ms 95.820 ms 96.084 ms] + thrpt: [666.08 elem/s 667.92 elem/s 669.73 elem/s] + change: + time: [+481.32% +484.68% +487.43%] (p = 0.00 < 0.05) + thrpt: [-82.977% -82.897% -82.798%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +blob_to_kzg_commitment time: [33.860 ms 33.931 ms 34.001 ms] + change: [-31.408% -31.176% -30.958%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + +compute_kzg_proof time: [35.163 ms 35.274 ms 35.396 ms] + change: [-32.384% -32.087% -31.797%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1162 ms 1.1205 ms 1.1253 ms] + change: [-9.0310% -8.2798% -7.6679%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [35.478 ms 35.600 ms 35.724 ms] + change: [-32.761% -32.475% -32.158%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.2942 ms 2.3020 ms 2.3100 ms] + change: [-8.2895% -7.8548% -7.4090%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3284 ms 2.3348 ms 2.3412 ms] + thrpt: [427.13 elem/s 428.31 elem/s 429.47 elem/s] + change: + time: [-8.4910% -8.1501% -7.8103%] (p = 0.00 < 0.05) + thrpt: [+8.4720% +8.8732% +9.2789%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [3.8661 ms 3.8808 ms 3.8958 ms] + thrpt: [513.38 elem/s 515.36 elem/s 517.32 elem/s] + change: + time: [-7.4302% -7.0039% -6.5802%] (p = 0.00 < 0.05) + thrpt: [+7.0437% +7.5314% +8.0266%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.8553 ms 6.8765 ms 6.8979 ms] + thrpt: [579.89 elem/s 581.69 elem/s 583.49 elem/s] + change: + time: [-7.9048% -7.5110% -7.1536%] (p = 0.00 < 0.05) + thrpt: [+7.7048% +8.1210% +8.5833%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [12.931 ms 12.972 ms 13.017 ms] + thrpt: [614.60 elem/s 616.71 elem/s 618.69 elem/s] + change: + time: [-4.0482% -3.6127% -3.1837%] (p = 0.00 < 0.05) + thrpt: [+3.2884% +3.7482% +4.2190%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [25.236 ms 25.315 ms 25.396 ms] + thrpt: [630.03 elem/s 632.04 elem/s 634.03 elem/s] + change: + time: [-1.2979% -0.8978% -0.4435%] (p = 0.00 < 0.05) + thrpt: [+0.4455% +0.9060% +1.3150%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.309 ms 47.478 ms 47.678 ms] + thrpt: [671.17 elem/s 674.00 elem/s 676.40 elem/s] + change: + time: [-3.3899% -2.9721% -2.4960%] (p = 0.00 < 0.05) + thrpt: [+2.5599% +3.0631% +3.5088%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [93.084 ms 93.424 ms 93.781 ms] + thrpt: [682.44 elem/s 685.05 elem/s 687.55 elem/s] + change: + time: [-2.9347% -2.5013% -2.0478%] (p = 0.00 < 0.05) + thrpt: [+2.0906% +2.5655% +3.0235%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 5 (5.00%) high mild + +blob_to_kzg_commitment time: [33.993 ms 34.100 ms 34.228 ms] + change: [+0.0960% +0.4991% +0.9424%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [34.942 ms 35.089 ms 35.261 ms] + change: [-1.0574% -0.5226% +0.0233%] (p = 0.07 > 0.05) + No change in performance detected. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [1.1226 ms 1.1248 ms 1.1271 ms] + change: [+0.2053% +0.6789% +1.1584%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 4 (4.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [36.091 ms 36.155 ms 36.224 ms] + change: [+1.1711% +1.5579% +1.9505%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.2505 ms 2.2548 ms 2.2592 ms] + change: [-2.4428% -2.0499% -1.6719%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.3181 ms 2.3244 ms 2.3308 ms] + thrpt: [429.04 elem/s 430.23 elem/s 431.38 elem/s] + change: + time: [-0.8288% -0.4454% -0.0766%] (p = 0.03 < 0.05) + thrpt: [+0.0766% +0.4474% +0.8357%] + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7434 ms 3.7502 ms 3.7568 ms] + thrpt: [532.37 elem/s 533.30 elem/s 534.27 elem/s] + change: + time: [-3.7739% -3.3636% -2.9551%] (p = 0.00 < 0.05) + thrpt: [+3.0451% +3.4807% +3.9219%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.5749 ms 6.5853 ms 6.5957 ms] + thrpt: [606.45 elem/s 607.41 elem/s 608.37 elem/s] + change: + time: [-4.5669% -4.2341% -3.9040%] (p = 0.00 < 0.05) + thrpt: [+4.0626% +4.4213% +4.7855%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [12.181 ms 12.201 ms 12.221 ms] + thrpt: [654.59 elem/s 655.68 elem/s 656.78 elem/s] + change: + time: [-6.2995% -5.9430% -5.6014%] (p = 0.00 < 0.05) + thrpt: [+5.9338% +6.3185% +6.7230%] + Performance has improved. +verify_blob_kzg_proof_batch/16 + time: [23.175 ms 23.225 ms 23.284 ms] + thrpt: [687.17 elem/s 688.91 elem/s 690.41 elem/s] + change: + time: [-8.6120% -8.2548% -7.8854%] (p = 0.00 < 0.05) + thrpt: [+8.5605% +8.9976% +9.4236%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [45.005 ms 45.087 ms 45.171 ms] + thrpt: [708.42 elem/s 709.74 elem/s 711.03 elem/s] + change: + time: [-5.4644% -5.0352% -4.6450%] (p = 0.00 < 0.05) + thrpt: [+4.8712% +5.3022% +5.7802%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [88.733 ms 88.879 ms 89.038 ms] + thrpt: [718.79 elem/s 720.08 elem/s 721.26 elem/s] + change: + time: [-5.2663% -4.8647% -4.4820%] (p = 0.00 < 0.05) + thrpt: [+4.6923% +5.1135% +5.5590%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.5266 ms 9.5924 ms 9.6655 ms] + change: [+295.06% +299.57% +303.79%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [20.561 s 20.580 s 20.598 s] + change: [+301.14% +314.88% +327.23%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_single_da scale: '14' + time: [21.968 s 21.983 s 21.997 s] + change: [+236.99% +242.26% +247.04%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_fk_multi_da scale: '14' + time: [4.7828 s 4.7881 s 4.7946 s] + change: [+321.29% +327.69% +334.36%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_commit_to_poly scale: '15' + time: [324.25 ms 325.04 ms 325.79 ms] + change: [+662.74% +666.23% +669.64%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_compute_proof_single scale: '15' + time: [335.46 ms 336.41 ms 337.52 ms] + change: [+663.18% +667.92% +672.34%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_g1_lincomb points: '4096' + time: [51.901 ms 52.027 ms 52.272 ms] + change: [+482.65% +485.02% +487.38%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [655.18 ms 658.47 ms 661.81 ms] + change: [+233.96% +237.11% +240.35%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_recover scale: '15' + time: [285.46 ms 286.38 ms 287.37 ms] + change: [+272.42% +276.68% +281.74%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_zero_poly scale: '15' + time: [166.96 ms 167.67 ms 168.25 ms] + change: [+216.62% +222.44% +228.32%] (p = 0.00 < 0.05) + Performance has regressed. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, arkmsm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0003 ms 9.0467 ms 9.0927 ms] + change: [+0.9435% +1.3389% +1.6870%] (p = 0.00 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [42.154 ms 42.240 ms 42.329 ms] + change: [+23.336% +23.870% +24.346%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [44.594 ms 44.665 ms 44.737 ms] + change: [+26.642% +27.290% +27.872%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2288 ms 1.2308 ms 1.2328 ms] + change: [+8.7301% +9.1253% +9.4845%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [45.175 ms 45.265 ms 45.358 ms] + change: [+24.822% +25.198% +25.535%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.5446 ms 2.5490 ms 2.5534 ms] + change: [+12.766% +13.048% +13.345%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.5843 ms 2.5912 ms 2.6001 ms] + thrpt: [384.60 elem/s 385.92 elem/s 386.96 elem/s] + change: + time: [+11.033% +11.482% +11.946%] (p = 0.00 < 0.05) + thrpt: [-10.671% -10.299% -9.9368%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.2200 ms 4.2273 ms 4.2345 ms] + thrpt: [472.31 elem/s 473.11 elem/s 473.93 elem/s] + change: + time: [+12.441% +12.722% +13.012%] (p = 0.00 < 0.05) + thrpt: [-11.514% -11.286% -11.064%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [7.5191 ms 7.5316 ms 7.5442 ms] + thrpt: [530.21 elem/s 531.09 elem/s 531.98 elem/s] + change: + time: [+14.102% +14.370% +14.626%] (p = 0.00 < 0.05) + thrpt: [-12.760% -12.565% -12.359%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [18.280 ms 18.315 ms 18.349 ms] + thrpt: [435.98 elem/s 436.80 elem/s 437.63 elem/s] + change: + time: [+49.722% +50.109% +50.485%] (p = 0.00 < 0.05) + thrpt: [-33.548% -33.382% -33.210%] + Performance has regressed. +verify_blob_kzg_proof_batch/16 + time: [31.955 ms 32.015 ms 32.075 ms] + thrpt: [498.83 elem/s 499.77 elem/s 500.71 elem/s] + change: + time: [+37.444% +37.847% +38.256%] (p = 0.00 < 0.05) + thrpt: [-27.670% -27.456% -27.243%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [55.137 ms 55.300 ms 55.483 ms] + thrpt: [576.75 elem/s 578.66 elem/s 580.38 elem/s] + change: + time: [+22.206% +22.652% +23.111%] (p = 0.00 < 0.05) + thrpt: [-18.772% -18.469% -18.171%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [102.09 ms 102.27 ms 102.44 ms] + thrpt: [624.75 elem/s 625.82 elem/s 626.92 elem/s] + change: + time: [+14.758% +15.062% +15.326%] (p = 0.00 < 0.05) + thrpt: [-13.289% -13.090% -12.860%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [34.578 ms 34.664 ms 34.758 ms] + change: [-18.203% -17.936% -17.648%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [35.665 ms 35.743 ms 35.825 ms] + change: [-20.198% -19.975% -19.758%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1362 ms 1.1385 ms 1.1408 ms] + change: [-7.9304% -7.6201% -7.2644%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low severe + 2 (2.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [36.270 ms 36.358 ms 36.450 ms] + change: [-19.921% -19.676% -19.430%] (p = 0.00 < 0.05) + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 3 (3.00%) low mild + 9 (9.00%) high mild + +verify_blob_kzg_proof time: [2.3532 ms 2.3582 ms 2.3631 ms] + change: [-7.7283% -7.4853% -7.2317%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3942 ms 2.4017 ms 2.4097 ms] + thrpt: [414.99 elem/s 416.38 elem/s 417.67 elem/s] + change: + time: [-7.7341% -7.3153% -6.9060%] (p = 0.00 < 0.05) + thrpt: [+7.4183% +7.8927% +8.3824%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.9221 ms 3.9298 ms 3.9375 ms] + thrpt: [507.93 elem/s 508.93 elem/s 509.93 elem/s] + change: + time: [-7.3021% -7.0388% -6.8130%] (p = 0.00 < 0.05) + thrpt: [+7.3111% +7.5717% +7.8773%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.9728 ms 6.9850 ms 6.9967 ms] + thrpt: [571.70 elem/s 572.66 elem/s 573.66 elem/s] + change: + time: [-7.4772% -7.2582% -7.0386%] (p = 0.00 < 0.05) + thrpt: [+7.5716% +7.8263% +8.0815%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) low mild +verify_blob_kzg_proof_batch/8 + time: [13.251 ms 13.283 ms 13.315 ms] + thrpt: [600.82 elem/s 602.27 elem/s 603.71 elem/s] + change: + time: [-27.701% -27.474% -27.254%] (p = 0.00 < 0.05) + thrpt: [+37.465% +37.883% +38.315%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [24.699 ms 24.763 ms 24.837 ms] + thrpt: [644.21 elem/s 646.13 elem/s 647.81 elem/s] + change: + time: [-22.906% -22.653% -22.394%] (p = 0.00 < 0.05) + thrpt: [+28.856% +29.287% +29.712%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) low mild + 5 (5.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [48.011 ms 48.091 ms 48.173 ms] + thrpt: [664.27 elem/s 665.41 elem/s 666.52 elem/s] + change: + time: [-13.359% -13.037% -12.740%] (p = 0.00 < 0.05) + thrpt: [+14.600% +14.992% +15.418%] + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [94.439 ms 94.630 ms 94.826 ms] + thrpt: [674.92 elem/s 676.32 elem/s 677.68 elem/s] + change: + time: [-7.7207% -7.4672% -7.2324%] (p = 0.00 < 0.05) + thrpt: [+7.7963% +8.0698% +8.3666%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + +blob_to_kzg_commitment time: [34.281 ms 34.367 ms 34.479 ms] + change: [-1.2193% -0.8542% -0.4316%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe + +compute_kzg_proof time: [35.572 ms 35.642 ms 35.713 ms] + change: [-0.5818% -0.2845% +0.0105%] (p = 0.06 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1307 ms 1.1326 ms 1.1346 ms] + change: [-0.6595% -0.2824% +0.0735%] (p = 0.13 > 0.05) + No change in performance detected. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [36.036 ms 36.144 ms 36.270 ms] + change: [-0.9774% -0.5889% -0.1858%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 5 (5.00%) high severe + +verify_blob_kzg_proof time: [2.2355 ms 2.2410 ms 2.2469 ms] + change: [-5.2812% -4.9688% -4.6414%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.3192 ms 2.3249 ms 2.3308 ms] + thrpt: [429.04 elem/s 430.13 elem/s 431.17 elem/s] + change: + time: [-3.6016% -3.1974% -2.7839%] (p = 0.00 < 0.05) + thrpt: [+2.8636% +3.3030% +3.7361%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7850 ms 3.7937 ms 3.8031 ms] + thrpt: [525.88 elem/s 527.19 elem/s 528.40 elem/s] + change: + time: [-3.7530% -3.4626% -3.1696%] (p = 0.00 < 0.05) + thrpt: [+3.2733% +3.5868% +3.8994%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.5798 ms 6.5964 ms 6.6160 ms] + thrpt: [604.59 elem/s 606.39 elem/s 607.92 elem/s] + change: + time: [-5.8528% -5.5634% -5.2287%] (p = 0.00 < 0.05) + thrpt: [+5.5172% +5.8912% +6.2167%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [12.169 ms 12.195 ms 12.225 ms] + thrpt: [654.42 elem/s 656.00 elem/s 657.40 elem/s] + change: + time: [-8.4856% -8.1901% -7.8847%] (p = 0.00 < 0.05) + thrpt: [+8.5596% +8.9207% +9.2725%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [23.199 ms 23.252 ms 23.310 ms] + thrpt: [686.41 elem/s 688.12 elem/s 689.69 elem/s] + change: + time: [-6.4514% -6.1019% -5.7814%] (p = 0.00 < 0.05) + thrpt: [+6.1362% +6.4984% +6.8963%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.965 ms 45.027 ms 45.088 ms] + thrpt: [709.72 elem/s 710.68 elem/s 711.66 elem/s] + change: + time: [-6.5653% -6.3697% -6.1656%] (p = 0.00 < 0.05) + thrpt: [+6.5707% +6.8030% +7.0266%] + Performance has improved. +verify_blob_kzg_proof_batch/64 + time: [88.269 ms 88.417 ms 88.583 ms] + thrpt: [722.49 elem/s 723.84 elem/s 725.06 elem/s] + change: + time: [-6.8011% -6.5649% -6.3080%] (p = 0.00 < 0.05) + thrpt: [+6.7327% +7.0261% +7.2974%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +bench_fft_fr scale: '15' + time: [9.4606 ms 9.4815 ms 9.4952 ms] + change: [-1.3175% -0.8136% -0.3935%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.491 s 20.516 s 20.542 s] + change: [-0.4537% -0.3119% -0.1551%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_single_da scale: '14' + time: [21.842 s 21.853 s 21.863 s] + change: [-0.6760% -0.5914% -0.5131%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.7578 s 4.7649 s 4.7739 s] + change: [-0.6914% -0.4833% -0.2584%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_commit_to_poly scale: '15' + time: [293.40 ms 295.72 ms 298.35 ms] + change: [-9.7683% -9.0221% -8.2768%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [308.14 ms 308.79 ms 309.39 ms] + change: [-8.5587% -8.2105% -7.8819%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [44.005 ms 44.133 ms 44.353 ms] + change: [-15.648% -15.234% -14.786%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_new_poly_div scale: '15' + time: [650.56 ms 653.63 ms 657.16 ms] + change: [-1.4546% -0.7339% +0.0261%] (p = 0.07 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [286.09 ms 286.65 ms 287.29 ms] + change: [-0.3076% +0.0924% +0.4872%] (p = 0.68 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [166.56 ms 167.32 ms 168.27 ms] + change: [-0.5136% +0.0580% +0.6395%] (p = 0.84 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0904 ms 9.1172 ms 9.1524 ms] + change: [+0.2152% +0.6000% +1.0272%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +blob_to_kzg_commitment time: [36.437 ms 36.502 ms 36.571 ms] + change: [+5.8213% +6.2123% +6.5608%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [37.764 ms 37.827 ms 37.889 ms] + change: [+5.8579% +6.1308% +6.3961%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild + +verify_kzg_proof time: [1.2354 ms 1.2381 ms 1.2409 ms] + change: [+8.7865% +9.2036% +9.6093%] (p = 0.00 < 0.05) + Performance has regressed. +Found 12 outliers among 100 measurements (12.00%) + 2 (2.00%) low mild + 7 (7.00%) high mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [38.429 ms 38.498 ms 38.571 ms] + change: [+6.1074% +6.5127% +6.8904%] (p = 0.00 < 0.05) + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_blob_kzg_proof time: [2.5510 ms 2.5559 ms 2.5609 ms] + change: [+13.683% +14.051% +14.415%] (p = 0.00 < 0.05) + Performance has regressed. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) low mild + 6 (6.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5798 ms 2.5838 ms 2.5880 ms] + thrpt: [386.40 elem/s 387.02 elem/s 387.62 elem/s] + change: + time: [+10.812% +11.138% +11.463%] (p = 0.00 < 0.05) + thrpt: [-10.284% -10.021% -9.7571%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.2432 ms 4.2518 ms 4.2611 ms] + thrpt: [469.36 elem/s 470.38 elem/s 471.35 elem/s] + change: + time: [+11.717% +12.076% +12.425%] (p = 0.00 < 0.05) + thrpt: [-11.051% -10.775% -10.488%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.5700 ms 7.5924 ms 7.6160 ms] + thrpt: [525.21 elem/s 526.84 elem/s 528.40 elem/s] + change: + time: [+14.641% +15.100% +15.565%] (p = 0.00 < 0.05) + thrpt: [-13.469% -13.119% -12.772%] + Performance has regressed. +Found 11 outliers among 100 measurements (11.00%) + 1 (1.00%) low mild + 9 (9.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.630 ms 13.670 ms 13.715 ms] + thrpt: [583.30 elem/s 585.21 elem/s 586.92 elem/s] + change: + time: [+11.683% +12.096% +12.578%] (p = 0.00 < 0.05) + thrpt: [-11.173% -10.790% -10.461%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [26.029 ms 26.079 ms 26.141 ms] + thrpt: [612.06 elem/s 613.52 elem/s 614.70 elem/s] + change: + time: [+11.804% +12.160% +12.526%] (p = 0.00 < 0.05) + thrpt: [-11.131% -10.842% -10.558%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [49.945 ms 50.049 ms 50.163 ms] + thrpt: [637.92 elem/s 639.37 elem/s 640.71 elem/s] + change: + time: [+10.869% +11.153% +11.429%] (p = 0.00 < 0.05) + thrpt: [-10.257% -10.034% -9.8035%] + Performance has regressed. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [97.413 ms 97.563 ms 97.713 ms] + thrpt: [654.98 elem/s 655.99 elem/s 657.00 elem/s] + change: + time: [+10.078% +10.344% +10.599%] (p = 0.00 < 0.05) + thrpt: [-9.5833% -9.3743% -9.1555%] + Performance has regressed. + +blob_to_kzg_commitment time: [34.619 ms 34.679 ms 34.742 ms] + change: [-5.2503% -4.9954% -4.7469%] (p = 0.00 < 0.05) + Performance has improved. +Found 8 outliers among 100 measurements (8.00%) + 1 (1.00%) low severe + 3 (3.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [35.768 ms 35.829 ms 35.892 ms] + change: [-5.5026% -5.2820% -5.0581%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [1.1347 ms 1.1364 ms 1.1382 ms] + change: [-8.5216% -8.1936% -7.8906%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [36.303 ms 36.383 ms 36.471 ms] + change: [-5.7674% -5.4955% -5.1869%] (p = 0.00 < 0.05) + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 1 (1.00%) low severe + 3 (3.00%) low mild + 2 (2.00%) high mild + 4 (4.00%) high severe + +verify_blob_kzg_proof time: [2.3644 ms 2.3683 ms 2.3720 ms] + change: [-7.5811% -7.3401% -7.1103%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof_batch/1 + time: [2.3961 ms 2.4021 ms 2.4085 ms] + thrpt: [415.20 elem/s 416.30 elem/s 417.34 elem/s] + change: + time: [-7.3046% -7.0314% -6.7645%] (p = 0.00 < 0.05) + thrpt: [+7.2553% +7.5632% +7.8802%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.9308 ms 3.9392 ms 3.9478 ms] + thrpt: [506.61 elem/s 507.72 elem/s 508.80 elem/s] + change: + time: [-7.6379% -7.3533% -7.0753%] (p = 0.00 < 0.05) + thrpt: [+7.6140% +7.9369% +8.2695%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.0030 ms 7.0165 ms 7.0312 ms] + thrpt: [568.90 elem/s 570.08 elem/s 571.19 elem/s] + change: + time: [-7.9019% -7.5847% -7.2326%] (p = 0.00 < 0.05) + thrpt: [+7.7965% +8.2072% +8.5799%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.185 ms 13.219 ms 13.255 ms] + thrpt: [603.56 elem/s 605.21 elem/s 606.75 elem/s] + change: + time: [-3.6838% -3.3036% -2.8845%] (p = 0.00 < 0.05) + thrpt: [+2.9702% +3.4165% +3.8247%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [24.606 ms 24.665 ms 24.729 ms] + thrpt: [647.01 elem/s 648.69 elem/s 650.25 elem/s] + change: + time: [-5.7260% -5.4222% -5.1211%] (p = 0.00 < 0.05) + thrpt: [+5.3975% +5.7331% +6.0738%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [47.662 ms 47.725 ms 47.788 ms] + thrpt: [669.62 elem/s 670.50 elem/s 671.40 elem/s] + change: + time: [-4.8839% -4.6428% -4.4035%] (p = 0.00 < 0.05) + thrpt: [+4.6064% +4.8689% +5.1347%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [94.095 ms 94.301 ms 94.535 ms] + thrpt: [677.00 elem/s 678.68 elem/s 680.16 elem/s] + change: + time: [-3.6059% -3.3434% -3.0646%] (p = 0.00 < 0.05) + thrpt: [+3.1614% +3.4590% +3.7408%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [34.336 ms 34.396 ms 34.460 ms] + change: [-1.0565% -0.8163% -0.5602%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [35.422 ms 35.485 ms 35.547 ms] + change: [-1.1905% -0.9600% -0.7043%] (p = 0.00 < 0.05) + Change within noise threshold. + +verify_kzg_proof time: [1.1292 ms 1.1318 ms 1.1343 ms] + change: [-1.0749% -0.7882% -0.5161%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [36.117 ms 36.182 ms 36.247 ms] + change: [-0.8472% -0.5520% -0.2584%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 5 (5.00%) high mild + +verify_blob_kzg_proof time: [2.2360 ms 2.2407 ms 2.2453 ms] + change: [-5.6542% -5.3877% -5.1448%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.3061 ms 2.3135 ms 2.3218 ms] + thrpt: [430.69 elem/s 432.24 elem/s 433.64 elem/s] + change: + time: [-4.0891% -3.6892% -3.2427%] (p = 0.00 < 0.05) + thrpt: [+3.3514% +3.8306% +4.2635%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.7660 ms 3.7750 ms 3.7846 ms] + thrpt: [528.45 elem/s 529.80 elem/s 531.07 elem/s] + change: + time: [-4.4851% -4.1685% -3.8634%] (p = 0.00 < 0.05) + thrpt: [+4.0187% +4.3499% +4.6957%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) low mild + 5 (5.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.5689 ms 6.5875 ms 6.6126 ms] + thrpt: [604.91 elem/s 607.21 elem/s 608.93 elem/s] + change: + time: [-6.4491% -6.1150% -5.7261%] (p = 0.00 < 0.05) + thrpt: [+6.0739% +6.5133% +6.8937%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [12.144 ms 12.164 ms 12.183 ms] + thrpt: [656.65 elem/s 657.70 elem/s 658.78 elem/s] + change: + time: [-8.2714% -7.9817% -7.7066%] (p = 0.00 < 0.05) + thrpt: [+8.3501% +8.6741% +9.0173%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [23.196 ms 23.240 ms 23.288 ms] + thrpt: [687.05 elem/s 688.45 elem/s 689.79 elem/s] + change: + time: [-6.0917% -5.7759% -5.4770%] (p = 0.00 < 0.05) + thrpt: [+5.7944% +6.1300% +6.4868%] + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [44.937 ms 44.995 ms 45.053 ms] + thrpt: [710.27 elem/s 711.19 elem/s 712.11 elem/s] + change: + time: [-5.8990% -5.7214% -5.5391%] (p = 0.00 < 0.05) + thrpt: [+5.8640% +6.0687% +6.2688%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [88.323 ms 88.526 ms 88.755 ms] + thrpt: [721.08 elem/s 722.95 elem/s 724.61 elem/s] + change: + time: [-6.4439% -6.1239% -5.7992%] (p = 0.00 < 0.05) + thrpt: [+6.1562% +6.5234% +6.8878%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [9.4865 ms 9.5239 ms 9.5431 ms] + change: [-0.5142% -0.0230% +0.4647%] (p = 0.93 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fft_g1 scale: '15' + time: [20.503 s 20.519 s 20.532 s] + change: [-0.1353% +0.0133% +0.1522%] (p = 0.86 > 0.05) + No change in performance detected. +Found 2 outliers among 10 measurements (20.00%) + 1 (10.00%) low severe + 1 (10.00%) low mild + +bench_fk_single_da scale: '14' + time: [21.797 s 21.809 s 21.821 s] + change: [-0.2725% -0.1996% -0.1246%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.7619 s 4.7655 s 4.7693 s] + change: [-0.1868% +0.0120% +0.1828%] (p = 0.90 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [257.46 ms 258.54 ms 259.97 ms] + change: [-13.457% -12.571% -11.760%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_compute_proof_single scale: '15' + time: [261.12 ms 261.98 ms 263.11 ms] + change: [-15.489% -15.159% -14.811%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_g1_lincomb points: '4096' + time: [51.972 ms 52.255 ms 52.623 ms] + change: [+17.199% +17.925% +18.697%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 1 (10.00%) high mild + 1 (10.00%) high severe + +bench_g1_lincomb with precomputation points: '4096' + time: [36.804 ms 36.906 ms 37.022 ms] + change: [+458.77% +463.05% +466.98%] (p = 0.00 < 0.05) + Performance has regressed. + +bench_new_poly_div scale: '15' + time: [647.27 ms 648.95 ms 650.87 ms] + change: [-1.3029% -0.7168% -0.1602%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_recover scale: '15' + time: [284.48 ms 285.34 ms 286.47 ms] + change: [-0.8257% -0.4571% -0.0257%] (p = 0.05 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_zero_poly scale: '15' + time: [166.56 ms 167.09 ms 167.77 ms] + change: [-0.4839% +0.0503% +0.5533%] (p = 0.86 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (sequential, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [9.0060 ms 9.0260 ms 9.0406 ms] + change: [-1.6075% -1.2168% -0.8602%] (p = 0.00 < 0.05) + Change within noise threshold. + +blob_to_kzg_commitment time: [35.149 ms 35.211 ms 35.274 ms] + change: [+2.1013% +2.3711% +2.6262%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +compute_kzg_proof time: [36.797 ms 36.860 ms 36.925 ms] + change: [+3.6255% +3.8759% +4.1343%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.2305 ms 1.2325 ms 1.2347 ms] + change: [+9.0245% +9.4454% +9.9181%] (p = 0.00 < 0.05) + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) low mild + 3 (3.00%) high severe + +compute_blob_kzg_proof time: [37.493 ms 37.546 ms 37.597 ms] + change: [+3.5318% +3.7711% +4.0085%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof time: [2.5446 ms 2.5500 ms 2.5567 ms] + change: [+13.454% +13.806% +14.193%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.5878 ms 2.5938 ms 2.6001 ms] + thrpt: [384.61 elem/s 385.53 elem/s 386.42 elem/s] + change: + time: [+11.649% +12.116% +12.570%] (p = 0.00 < 0.05) + thrpt: [-11.166% -10.807% -10.433%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [4.1109 ms 4.1200 ms 4.1298 ms] + thrpt: [484.28 elem/s 485.44 elem/s 486.51 elem/s] + change: + time: [+8.7652% +9.1383% +9.5103%] (p = 0.00 < 0.05) + thrpt: [-8.6844% -8.3731% -8.0588%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [7.2111 ms 7.2383 ms 7.2690 ms] + thrpt: [550.28 elem/s 552.62 elem/s 554.70 elem/s] + change: + time: [+9.2777% +9.8793% +10.464%] (p = 0.00 < 0.05) + thrpt: [-9.4727% -8.9910% -8.4900%] + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [13.204 ms 13.228 ms 13.252 ms] + thrpt: [603.68 elem/s 604.78 elem/s 605.88 elem/s] + change: + time: [+8.4878% +8.7511% +9.0263%] (p = 0.00 < 0.05) + thrpt: [-8.2790% -8.0469% -7.8237%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [25.234 ms 25.290 ms 25.347 ms] + thrpt: [631.23 elem/s 632.66 elem/s 634.07 elem/s] + change: + time: [+8.4888% +8.8189% +9.1361%] (p = 0.00 < 0.05) + thrpt: [-8.3713% -8.1042% -7.8246%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [49.094 ms 49.221 ms 49.358 ms] + thrpt: [648.33 elem/s 650.12 elem/s 651.81 elem/s] + change: + time: [+9.0816% +9.3934% +9.7154%] (p = 0.00 < 0.05) + thrpt: [-8.8551% -8.5868% -8.3255%] + Performance has regressed. +Found 10 outliers among 100 measurements (10.00%) + 1 (1.00%) low severe + 3 (3.00%) low mild + 3 (3.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [96.151 ms 96.280 ms 96.408 ms] + thrpt: [663.84 elem/s 664.73 elem/s 665.62 elem/s] + change: + time: [+8.4415% +8.7587% +9.0523%] (p = 0.00 < 0.05) + thrpt: [-8.3008% -8.0534% -7.7844%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) low mild + +blob_to_kzg_commitment time: [34.443 ms 34.529 ms 34.624 ms] + change: [-2.2350% -1.9372% -1.6132%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [35.687 ms 35.743 ms 35.800 ms] + change: [-3.2536% -3.0306% -2.8210%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_kzg_proof time: [1.1406 ms 1.1423 ms 1.1439 ms] + change: [-8.0377% -7.6603% -7.3300%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low severe + 2 (2.00%) low mild + 1 (1.00%) high mild + +compute_blob_kzg_proof time: [36.236 ms 36.310 ms 36.390 ms] + change: [-3.5229% -3.2924% -3.0323%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.3439 ms 2.3483 ms 2.3529 ms] + change: [-8.2010% -7.9093% -7.6340%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.4040 ms 2.4098 ms 2.4159 ms] + thrpt: [413.92 elem/s 414.96 elem/s 415.98 elem/s] + change: + time: [-7.4093% -7.0933% -6.7598%] (p = 0.00 < 0.05) + thrpt: [+7.2498% +7.6349% +8.0022%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.9648 ms 3.9723 ms 3.9798 ms] + thrpt: [502.54 elem/s 503.48 elem/s 504.44 elem/s] + change: + time: [-3.8789% -3.5832% -3.3200%] (p = 0.00 < 0.05) + thrpt: [+3.4340% +3.7164% +4.0354%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [6.9966 ms 7.0094 ms 7.0224 ms] + thrpt: [569.61 elem/s 570.66 elem/s 571.71 elem/s] + change: + time: [-3.6051% -3.1621% -2.7576%] (p = 0.00 < 0.05) + thrpt: [+2.8358% +3.2654% +3.7400%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [12.974 ms 13.009 ms 13.048 ms] + thrpt: [613.14 elem/s 614.94 elem/s 616.60 elem/s] + change: + time: [-1.9538% -1.6527% -1.3309%] (p = 0.00 < 0.05) + thrpt: [+1.3489% +1.6805% +1.9927%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [25.410 ms 25.449 ms 25.488 ms] + thrpt: [627.75 elem/s 628.71 elem/s 629.67 elem/s] + change: + time: [+0.3622% +0.6288% +0.8916%] (p = 0.00 < 0.05) + thrpt: [-0.8838% -0.6249% -0.3609%] + Change within noise threshold. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low severe + 3 (3.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [47.956 ms 48.024 ms 48.092 ms] + thrpt: [665.39 elem/s 666.33 elem/s 667.27 elem/s] + change: + time: [-2.7294% -2.4322% -2.1355%] (p = 0.00 < 0.05) + thrpt: [+2.1821% +2.4929% +2.8060%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [94.433 ms 94.588 ms 94.744 ms] + thrpt: [675.51 elem/s 676.62 elem/s 677.73 elem/s] + change: + time: [-1.9913% -1.7572% -1.5443%] (p = 0.00 < 0.05) + thrpt: [+1.5685% +1.7887% +2.0317%] + Performance has improved. + +blob_to_kzg_commitment time: [34.407 ms 34.472 ms 34.542 ms] + change: [-0.5004% -0.1649% +0.1440%] (p = 0.33 > 0.05) + No change in performance detected. +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [35.633 ms 35.705 ms 35.778 ms] + change: [-0.3503% -0.1055% +0.1385%] (p = 0.42 > 0.05) + No change in performance detected. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_kzg_proof time: [1.1332 ms 1.1357 ms 1.1385 ms] + change: [-0.7368% -0.4596% -0.1528%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe + +compute_blob_kzg_proof time: [36.131 ms 36.195 ms 36.265 ms] + change: [-0.5899% -0.3163% -0.0406%] (p = 0.03 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high severe + +verify_blob_kzg_proof time: [2.2471 ms 2.2506 ms 2.2542 ms] + change: [-4.3985% -4.1610% -3.9345%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.3199 ms 2.3254 ms 2.3312 ms] + thrpt: [428.97 elem/s 430.03 elem/s 431.05 elem/s] + change: + time: [-3.8510% -3.5030% -3.1666%] (p = 0.00 < 0.05) + thrpt: [+3.2701% +3.6301% +4.0052%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.7652 ms 3.7727 ms 3.7805 ms] + thrpt: [529.03 elem/s 530.13 elem/s 531.18 elem/s] + change: + time: [-5.2850% -5.0260% -4.7510%] (p = 0.00 < 0.05) + thrpt: [+4.9879% +5.2920% +5.5799%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [6.5686 ms 6.5815 ms 6.5956 ms] + thrpt: [606.46 elem/s 607.76 elem/s 608.96 elem/s] + change: + time: [-6.3544% -6.1040% -5.8322%] (p = 0.00 < 0.05) + thrpt: [+6.1934% +6.5008% +6.7856%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [12.189 ms 12.214 ms 12.241 ms] + thrpt: [653.56 elem/s 654.96 elem/s 656.32 elem/s] + change: + time: [-6.4528% -6.1106% -5.7781%] (p = 0.00 < 0.05) + thrpt: [+6.1324% +6.5082% +6.8979%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [23.136 ms 23.171 ms 23.206 ms] + thrpt: [689.47 elem/s 690.51 elem/s 691.57 elem/s] + change: + time: [-9.1505% -8.9508% -8.7542%] (p = 0.00 < 0.05) + thrpt: [+9.5940% +9.8307% +10.072%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [44.939 ms 44.999 ms 45.057 ms] + thrpt: [710.22 elem/s 711.13 elem/s 712.08 elem/s] + change: + time: [-6.4825% -6.3001% -6.1194%] (p = 0.00 < 0.05) + thrpt: [+6.5183% +6.7237% +6.9318%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [88.583 ms 88.729 ms 88.876 ms] + thrpt: [720.10 elem/s 721.30 elem/s 722.49 elem/s] + change: + time: [-6.4099% -6.1944% -5.9833%] (p = 0.00 < 0.05) + thrpt: [+6.3641% +6.6035% +6.8489%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [9.3754 ms 9.4004 ms 9.4290 ms] + change: [-1.2533% -0.8138% -0.3154%] (p = 0.01 < 0.05) + Change within noise threshold. + +bench_fft_g1 scale: '15' + time: [20.543 s 20.558 s 20.571 s] + change: [+0.0835% +0.1933% +0.2917%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_fk_single_da scale: '14' + time: [21.858 s 21.871 s 21.883 s] + change: [+0.2012% +0.2830% +0.3609%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_fk_multi_da scale: '14' + time: [4.7643 s 4.7694 s 4.7741 s] + change: [-0.0674% +0.0812% +0.2075%] (p = 0.26 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [227.13 ms 227.42 ms 227.73 ms] + change: [-12.536% -12.036% -11.647%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [227.83 ms 228.48 ms 229.18 ms] + change: [-13.236% -12.788% -12.389%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [35.714 ms 35.795 ms 35.901 ms] + change: [-31.618% -31.218% -30.871%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [640.25 ms 642.08 ms 643.86 ms] + change: [-1.4444% -1.0577% -0.6732%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_recover scale: '15' + time: [283.80 ms 284.79 ms 285.73 ms] + change: [-0.6967% -0.1930% +0.2597%] (p = 0.47 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [165.69 ms 166.21 ms 166.75 ms] + change: [-1.4094% -1.0062% -0.5764%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4142 ms 2.4211 ms 2.4269 ms] + change: [-73.244% -73.131% -73.025%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +blob_to_kzg_commitment time: [8.0054 ms 8.0239 ms 8.0450 ms] + change: [-76.799% -76.724% -76.648%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [9.2227 ms 9.2514 ms 9.2869 ms] + change: [-74.183% -74.090% -73.981%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [1.2359 ms 1.2386 ms 1.2415 ms] + change: [+8.6615% +8.9861% +9.2870%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_blob_kzg_proof time: [9.9672 ms 9.9895 ms 10.013 ms] + change: [-72.481% -72.401% -72.319%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.5432 ms 2.5479 ms 2.5525 ms] + change: [+12.933% +13.207% +13.498%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_blob_kzg_proof_batch/1 + time: [2.6171 ms 2.6227 ms 2.6283 ms] + thrpt: [380.47 elem/s 381.29 elem/s 382.11 elem/s] + change: + time: [+12.416% +12.783% +13.146%] (p = 0.00 < 0.05) + thrpt: [-11.618% -11.335% -11.045%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low severe + 3 (3.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [3.0828 ms 3.1618 ms 3.2546 ms] + thrpt: [614.52 elem/s 632.54 elem/s 648.77 elem/s] + change: + time: [-18.026% -16.191% -13.518%] (p = 0.00 < 0.05) + thrpt: [+15.632% +19.319% +21.990%] + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 10 (10.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.3912 ms 3.5505 ms 3.7214 ms] + thrpt: [1.0749 Kelem/s 1.1266 Kelem/s 1.1795 Kelem/s] + change: + time: [-48.358% -46.054% -43.332%] (p = 0.00 < 0.05) + thrpt: [+76.465% +85.370% +93.640%] + Performance has improved. +Found 24 outliers among 100 measurements (24.00%) + 2 (2.00%) high mild + 22 (22.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.2307 ms 5.2653 ms 5.2965 ms] + thrpt: [1.5104 Kelem/s 1.5194 Kelem/s 1.5294 Kelem/s] + change: + time: [-57.220% -56.892% -56.613%] (p = 0.00 < 0.05) + thrpt: [+130.48% +131.98% +133.75%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 3 (3.00%) low severe + 1 (1.00%) low mild + 2 (2.00%) high mild + 3 (3.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [5.2443 ms 5.2793 ms 5.3198 ms] + thrpt: [3.0076 Kelem/s 3.0307 Kelem/s 3.0509 Kelem/s] + change: + time: [-77.372% -77.216% -77.043%] (p = 0.00 < 0.05) + thrpt: [+335.60% +338.90% +341.92%] + Performance has improved. +Found 11 outliers among 100 measurements (11.00%) + 7 (7.00%) high mild + 4 (4.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [8.4148 ms 8.4368 ms 8.4595 ms] + thrpt: [3.7827 Kelem/s 3.7929 Kelem/s 3.8028 Kelem/s] + change: + time: [-81.303% -81.251% -81.196%] (p = 0.00 < 0.05) + thrpt: [+431.81% +433.36% +434.85%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [14.507 ms 14.545 ms 14.586 ms] + thrpt: [4.3877 Kelem/s 4.4001 Kelem/s 4.4118 Kelem/s] + change: + time: [-83.659% -83.607% -83.556%] (p = 0.00 < 0.05) + thrpt: [+508.11% +510.03% +511.96%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [5.7094 ms 5.7226 ms 5.7365 ms] + change: [-28.934% -28.680% -28.428%] (p = 0.00 < 0.05) + Performance has improved. + +compute_kzg_proof time: [6.2611 ms 6.2773 ms 6.2936 ms] + change: [-32.465% -32.147% -31.876%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild + +verify_kzg_proof time: [1.1279 ms 1.1302 ms 1.1325 ms] + change: [-9.0248% -8.7733% -8.5212%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [6.7012 ms 6.7165 ms 6.7319 ms] + change: [-32.987% -32.764% -32.543%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof time: [2.1877 ms 2.1949 ms 2.2022 ms] + change: [-14.177% -13.853% -13.569%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.1261 ms 2.1308 ms 2.1355 ms] + thrpt: [468.27 elem/s 469.31 elem/s 470.35 elem/s] + change: + time: [-19.001% -18.756% -18.514%] (p = 0.00 < 0.05) + thrpt: [+22.721% +23.085% +23.459%] + Performance has improved. +verify_blob_kzg_proof_batch/2 + time: [2.3880 ms 2.3958 ms 2.4038 ms] + thrpt: [832.01 elem/s 834.79 elem/s 837.50 elem/s] + change: + time: [-26.410% -24.227% -22.287%] (p = 0.00 < 0.05) + thrpt: [+28.678% +31.973% +35.887%] + Performance has improved. +verify_blob_kzg_proof_batch/4 + time: [2.9233 ms 2.9383 ms 2.9535 ms] + thrpt: [1.3543 Kelem/s 1.3613 Kelem/s 1.3683 Kelem/s] + change: + time: [-21.045% -17.243% -13.312%] (p = 0.00 < 0.05) + thrpt: [+15.356% +20.836% +26.655%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [4.0858 ms 4.1072 ms 4.1290 ms] + thrpt: [1.9375 Kelem/s 1.9478 Kelem/s 1.9580 Kelem/s] + change: + time: [-22.601% -21.996% -21.314%] (p = 0.00 < 0.05) + thrpt: [+27.088% +28.198% +29.201%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [6.7268 ms 6.7762 ms 6.8286 ms] + thrpt: [2.3431 Kelem/s 2.3612 Kelem/s 2.3785 Kelem/s] + change: + time: [+26.994% +28.354% +29.715%] (p = 0.00 < 0.05) + thrpt: [-22.908% -22.090% -21.256%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [12.895 ms 13.023 ms 13.157 ms] + thrpt: [2.4323 Kelem/s 2.4572 Kelem/s 2.4815 Kelem/s] + change: + time: [+52.817% +54.359% +55.853%] (p = 0.00 < 0.05) + thrpt: [-35.837% -35.216% -34.562%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [22.912 ms 23.124 ms 23.339 ms] + thrpt: [2.7422 Kelem/s 2.7677 Kelem/s 2.7933 Kelem/s] + change: + time: [+57.415% +58.979% +60.477%] (p = 0.00 < 0.05) + thrpt: [-37.686% -37.099% -36.474%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [5.5688 ms 5.5815 ms 5.5945 ms] + change: [-2.7967% -2.4662% -2.1478%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +compute_kzg_proof time: [6.0948 ms 6.1101 ms 6.1259 ms] + change: [-3.0301% -2.6640% -2.3162%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1289 ms 1.1322 ms 1.1356 ms] + change: [-0.2726% +0.0457% +0.3886%] (p = 0.79 > 0.05) + No change in performance detected. +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) low severe + 5 (5.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [6.5131 ms 6.5293 ms 6.5458 ms] + change: [-3.1103% -2.7864% -2.4673%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.0711 ms 2.0747 ms 2.0783 ms] + change: [-5.8431% -5.4763% -5.1321%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof_batch/1 + time: [2.0573 ms 2.0625 ms 2.0681 ms] + thrpt: [483.53 elem/s 484.85 elem/s 486.08 elem/s] + change: + time: [-3.5197% -3.2054% -2.8554%] (p = 0.00 < 0.05) + thrpt: [+2.9394% +3.3115% +3.6481%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.2492 ms 2.2580 ms 2.2670 ms] + thrpt: [882.23 elem/s 885.72 elem/s 889.21 elem/s] + change: + time: [-6.2362% -5.7504% -5.2346%] (p = 0.00 < 0.05) + thrpt: [+5.5237% +6.1012% +6.6510%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [2.5695 ms 2.5808 ms 2.5919 ms] + thrpt: [1.5433 Kelem/s 1.5499 Kelem/s 1.5568 Kelem/s] + change: + time: [-12.758% -12.167% -11.584%] (p = 0.00 < 0.05) + thrpt: [+13.101% +13.852% +14.624%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [3.2630 ms 3.2835 ms 3.3047 ms] + thrpt: [2.4208 Kelem/s 2.4364 Kelem/s 2.4517 Kelem/s] + change: + time: [-20.725% -20.055% -19.424%] (p = 0.00 < 0.05) + thrpt: [+24.106% +25.087% +26.143%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [5.1037 ms 5.1373 ms 5.1720 ms] + thrpt: [3.0936 Kelem/s 3.1145 Kelem/s 3.1350 Kelem/s] + change: + time: [-24.931% -24.187% -23.404%] (p = 0.00 < 0.05) + thrpt: [+30.555% +31.904% +33.211%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [9.7909 ms 9.8930 ms 9.9982 ms] + thrpt: [3.2006 Kelem/s 3.2346 Kelem/s 3.2683 Kelem/s] + change: + time: [-25.089% -24.034% -22.940%] (p = 0.00 < 0.05) + thrpt: [+29.769% +31.638% +33.493%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [16.666 ms 16.828 ms 16.995 ms] + thrpt: [3.7658 Kelem/s 3.8032 Kelem/s 3.8401 Kelem/s] + change: + time: [-28.179% -27.227% -26.209%] (p = 0.00 < 0.05) + thrpt: [+35.518% +37.414% +39.235%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +bench_fft_fr scale: '15' + time: [2.2978 ms 2.3051 ms 2.3113 ms] + change: [-75.545% -75.374% -75.150%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_fft_g1 scale: '15' + time: [4.8447 s 4.9964 s 5.1398 s] + change: [-76.456% -75.696% -74.998%] (p = 0.00 < 0.05) + Performance has improved. + +bench_fk_single_da scale: '14' + time: [6.2571 s 6.3448 s 6.4439 s] + change: [-71.343% -70.989% -70.527%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high mild + +bench_fk_multi_da scale: '14' + time: [1.0658 s 1.0810 s 1.0961 s] + change: [-77.665% -77.334% -76.983%] (p = 0.00 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [55.287 ms 55.714 ms 56.103 ms] + change: [-75.722% -75.559% -75.381%] (p = 0.00 < 0.05) + Performance has improved. + +bench_compute_proof_single scale: '15' + time: [55.071 ms 55.245 ms 55.466 ms] + change: [-75.965% -75.853% -75.729%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb points: '4096' + time: [8.0005 ms 8.0217 ms 8.0524 ms] + change: [-77.665% -77.566% -77.465%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_new_poly_div scale: '15' + time: [178.39 ms 179.33 ms 179.95 ms] + change: [-72.163% -71.897% -71.503%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [76.050 ms 76.210 ms 76.520 ms] + change: [-73.306% -73.127% -72.932%] (p = 0.00 < 0.05) + Performance has improved. + +bench_zero_poly scale: '15' + time: [50.709 ms 51.282 ms 51.919 ms] + change: [-69.721% -69.342% -68.840%] (p = 0.00 < 0.05) + Performance has improved. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, bgmw) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4637 ms 2.4855 ms 2.4988 ms] + change: [+1.2190% +2.0373% +2.7660%] (p = 0.00 < 0.05) + Performance has regressed. + +blob_to_kzg_commitment time: [5.7406 ms 5.7763 ms 5.8187 ms] + change: [+2.7717% +3.4904% +4.2697%] (p = 0.00 < 0.05) + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 6 (6.00%) high severe + +compute_kzg_proof time: [7.0888 ms 7.1178 ms 7.1558 ms] + change: [+15.905% +16.493% +17.214%] (p = 0.00 < 0.05) + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 3 (3.00%) high severe + +verify_kzg_proof time: [1.2260 ms 1.2285 ms 1.2308 ms] + change: [+8.2344% +8.5862% +8.9250%] (p = 0.00 < 0.05) + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 3 (3.00%) low mild + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [7.8996 ms 7.9373 ms 7.9841 ms] + change: [+20.876% +21.563% +22.336%] (p = 0.00 < 0.05) + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) high mild + 3 (3.00%) high severe + +verify_blob_kzg_proof time: [2.5524 ms 2.5570 ms 2.5616 ms] + change: [+22.929% +23.247% +23.569%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.6473 ms 2.6527 ms 2.6580 ms] + thrpt: [376.23 elem/s 376.97 elem/s 377.75 elem/s] + change: + time: [+28.186% +28.618% +29.078%] (p = 0.00 < 0.05) + thrpt: [-22.528% -22.250% -21.988%] + Performance has regressed. +Found 7 outliers among 100 measurements (7.00%) + 7 (7.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [2.9912 ms 2.9976 ms 3.0040 ms] + thrpt: [665.77 elem/s 667.20 elem/s 668.63 elem/s] + change: + time: [+32.168% +32.752% +33.340%] (p = 0.00 < 0.05) + thrpt: [-25.004% -24.672% -24.339%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [3.5824 ms 3.7731 ms 3.9688 ms] + thrpt: [1.0079 Kelem/s 1.0601 Kelem/s 1.1166 Kelem/s] + change: + time: [+38.945% +46.201% +53.827%] (p = 0.00 < 0.05) + thrpt: [-34.992% -31.601% -28.029%] + Performance has regressed. +verify_blob_kzg_proof_batch/8 + time: [5.1828 ms 5.2217 ms 5.2577 ms] + thrpt: [1.5216 Kelem/s 1.5321 Kelem/s 1.5436 Kelem/s] + change: + time: [+57.574% +59.030% +60.554%] (p = 0.00 < 0.05) + thrpt: [-37.716% -37.119% -36.538%] + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 4 (4.00%) low severe + 1 (1.00%) low mild + 2 (2.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [5.2084 ms 5.2385 ms 5.2720 ms] + thrpt: [3.0349 Kelem/s 3.0543 Kelem/s 3.0719 Kelem/s] + change: + time: [+1.0406% +1.9705% +2.8752%] (p = 0.00 < 0.05) + thrpt: [-2.7948% -1.9324% -1.0299%] + Performance has regressed. +Found 12 outliers among 100 measurements (12.00%) + 7 (7.00%) high mild + 5 (5.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [8.4577 ms 8.5172 ms 8.5872 ms] + thrpt: [3.7265 Kelem/s 3.7571 Kelem/s 3.7835 Kelem/s] + change: + time: [-14.995% -13.907% -12.755%] (p = 0.00 < 0.05) + thrpt: [+14.619% +16.153% +17.640%] + Performance has improved. +Found 9 outliers among 100 measurements (9.00%) + 2 (2.00%) high mild + 7 (7.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [14.379 ms 14.413 ms 14.449 ms] + thrpt: [4.4292 Kelem/s 4.4406 Kelem/s 4.4510 Kelem/s] + change: + time: [-15.217% -14.352% -13.492%] (p = 0.00 < 0.05) + thrpt: [+15.597% +16.757% +17.948%] + Performance has improved. +Found 12 outliers among 100 measurements (12.00%) + 3 (3.00%) low mild + 4 (4.00%) high mild + 5 (5.00%) high severe + +blob_to_kzg_commitment time: [5.7017 ms 5.7185 ms 5.7368 ms] + change: [-1.7753% -1.0010% -0.3071%] (p = 0.01 < 0.05) + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +compute_kzg_proof time: [6.2961 ms 6.3125 ms 6.3293 ms] + change: [-11.845% -11.314% -10.891%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) low mild + 3 (3.00%) high mild + +verify_kzg_proof time: [1.1291 ms 1.1319 ms 1.1346 ms] + change: [-8.2194% -7.9658% -7.7098%] (p = 0.00 < 0.05) + Performance has improved. + +compute_blob_kzg_proof time: [6.6952 ms 6.7135 ms 6.7325 ms] + change: [-15.943% -15.418% -14.940%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [2.1804 ms 2.1862 ms 2.1923 ms] + change: [-14.775% -14.499% -14.230%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +verify_blob_kzg_proof_batch/1 + time: [2.1374 ms 2.1431 ms 2.1491 ms] + thrpt: [465.31 elem/s 466.62 elem/s 467.86 elem/s] + change: + time: [-19.490% -19.213% -18.946%] (p = 0.00 < 0.05) + thrpt: [+23.375% +23.782% +24.208%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.4456 ms 2.4562 ms 2.4677 ms] + thrpt: [810.47 elem/s 814.25 elem/s 817.80 elem/s] + change: + time: [-18.442% -18.060% -17.646%] (p = 0.00 < 0.05) + thrpt: [+21.427% +22.041% +22.612%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [2.9279 ms 2.9414 ms 2.9549 ms] + thrpt: [1.3537 Kelem/s 1.3599 Kelem/s 1.3662 Kelem/s] + change: + time: [-25.916% -22.043% -17.842%] (p = 0.00 < 0.05) + thrpt: [+21.717% +28.276% +34.981%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/8 + time: [4.0527 ms 4.0714 ms 4.0906 ms] + thrpt: [1.9557 Kelem/s 1.9649 Kelem/s 1.9740 Kelem/s] + change: + time: [-22.660% -22.029% -21.319%] (p = 0.00 < 0.05) + thrpt: [+27.096% +28.253% +29.300%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [6.6920 ms 6.7249 ms 6.7586 ms] + thrpt: [2.3674 Kelem/s 2.3792 Kelem/s 2.3909 Kelem/s] + change: + time: [+27.337% +28.376% +29.370%] (p = 0.00 < 0.05) + thrpt: [-22.702% -22.104% -21.468%] + Performance has regressed. +verify_blob_kzg_proof_batch/32 + time: [12.930 ms 13.064 ms 13.203 ms] + thrpt: [2.4237 Kelem/s 2.4495 Kelem/s 2.4748 Kelem/s] + change: + time: [+51.528% +53.380% +55.339%] (p = 0.00 < 0.05) + thrpt: [-35.625% -34.803% -34.006%] + Performance has regressed. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [22.852 ms 23.063 ms 23.294 ms] + thrpt: [2.7475 Kelem/s 2.7750 Kelem/s 2.8006 Kelem/s] + change: + time: [+58.423% +60.023% +61.572%] (p = 0.00 < 0.05) + thrpt: [-38.108% -37.509% -36.878%] + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [5.5430 ms 5.5556 ms 5.5688 ms] + change: [-3.2335% -2.8478% -2.4949%] (p = 0.00 < 0.05) + Performance has improved. +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) low mild + 6 (6.00%) high mild + +compute_kzg_proof time: [6.0792 ms 6.0946 ms 6.1101 ms] + change: [-3.8157% -3.4517% -3.1058%] (p = 0.00 < 0.05) + Performance has improved. + +verify_kzg_proof time: [1.1149 ms 1.1171 ms 1.1193 ms] + change: [-1.2992% -1.0319% -0.7498%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) low mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [6.5374 ms 6.5563 ms 6.5755 ms] + change: [-2.7419% -2.3416% -1.9350%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof time: [2.0486 ms 2.0552 ms 2.0618 ms] + change: [-6.3767% -5.9954% -5.5957%] (p = 0.00 < 0.05) + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) low mild + 2 (2.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.0603 ms 2.0662 ms 2.0724 ms] + thrpt: [482.53 elem/s 483.98 elem/s 485.36 elem/s] + change: + time: [-3.9594% -3.5876% -3.2016%] (p = 0.00 < 0.05) + thrpt: [+3.3074% +3.7211% +4.1227%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.2565 ms 2.2665 ms 2.2774 ms] + thrpt: [878.21 elem/s 882.41 elem/s 886.34 elem/s] + change: + time: [-8.3173% -7.7236% -7.0470%] (p = 0.00 < 0.05) + thrpt: [+7.5813% +8.3701% +9.0718%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [2.5948 ms 2.6038 ms 2.6132 ms] + thrpt: [1.5307 Kelem/s 1.5362 Kelem/s 1.5415 Kelem/s] + change: + time: [-11.998% -11.477% -10.967%] (p = 0.00 < 0.05) + thrpt: [+12.318% +12.965% +13.634%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [3.2484 ms 3.2688 ms 3.2898 ms] + thrpt: [2.4318 Kelem/s 2.4474 Kelem/s 2.4628 Kelem/s] + change: + time: [-20.307% -19.714% -19.119%] (p = 0.00 < 0.05) + thrpt: [+23.638% +24.554% +25.482%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [5.0754 ms 5.1044 ms 5.1338 ms] + thrpt: [3.1166 Kelem/s 3.1346 Kelem/s 3.1525 Kelem/s] + change: + time: [-24.676% -24.098% -23.556%] (p = 0.00 < 0.05) + thrpt: [+30.815% +31.749% +32.760%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/32 + time: [9.8354 ms 9.9487 ms 10.064 ms] + thrpt: [3.1796 Kelem/s 3.2165 Kelem/s 3.2536 Kelem/s] + change: + time: [-25.021% -23.845% -22.691%] (p = 0.00 < 0.05) + thrpt: [+29.350% +31.312% +33.370%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [16.428 ms 16.646 ms 16.868 ms] + thrpt: [3.7943 Kelem/s 3.8447 Kelem/s 3.8957 Kelem/s] + change: + time: [-29.008% -27.824% -26.661%] (p = 0.00 < 0.05) + thrpt: [+36.354% +38.551% +40.861%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +bench_fft_fr scale: '15' + time: [2.3192 ms 2.3245 ms 2.3269 ms] + change: [-0.9966% +0.0632% +0.8667%] (p = 0.90 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low severe + +bench_fft_g1 scale: '15' + time: [4.7642 s 4.9042 s 5.0497 s] + change: [-5.6053% -1.8451% +2.5200%] (p = 0.41 > 0.05) + No change in performance detected. + +bench_fk_single_da scale: '14' + time: [6.2081 s 6.2658 s 6.3291 s] + change: [-2.9726% -1.2457% +0.4036%] (p = 0.21 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_multi_da scale: '14' + time: [1.0763 s 1.0876 s 1.0990 s] + change: [-1.1138% +0.6060% +2.3399%] (p = 0.53 > 0.05) + No change in performance detected. + +bench_commit_to_poly scale: '15' + time: [37.655 ms 37.729 ms 37.852 ms] + change: [-32.478% -31.971% -31.413%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 10 measurements (30.00%) + 1 (10.00%) low mild + 2 (20.00%) high severe + +bench_compute_proof_single scale: '15' + time: [39.172 ms 39.227 ms 39.307 ms] + change: [-29.072% -28.697% -28.347%] (p = 0.00 < 0.05) + Performance has improved. + +bench_g1_lincomb points: '4096' + time: [7.9972 ms 8.0081 ms 8.0244 ms] + change: [-0.9849% -0.4846% -0.0693%] (p = 0.06 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_g1_lincomb with precomputation points: '4096' + time: [5.8656 ms 5.8935 ms 5.9294 ms] + change: [-84.140% -84.029% -83.908%] (p = 0.00 < 0.05) + Performance has improved. + +bench_new_poly_div scale: '15' + time: [178.83 ms 179.93 ms 180.77 ms] + change: [-1.7995% -0.4613% +0.7188%] (p = 0.53 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_recover scale: '15' + time: [75.636 ms 76.239 ms 76.846 ms] + change: [-0.8548% +0.3500% +1.5529%] (p = 0.59 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [50.363 ms 50.766 ms 51.511 ms] + change: [-1.0467% +0.7893% +2.7790%] (p = 0.45 > 0.05) + No change in performance detected. + + + + +~~~~~~~~~~ rust-kzg with constantine backend (parallel, constantine_msm) ~~~~~~~~~~ + + + +running 1 test +test eip_4844::tests::kzg_settings_to_rust_check_conversion ... ignored + +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s + +bench_DAS_extension scale: '15' + time: [2.4145 ms 2.4583 ms 2.4898 ms] + change: [-2.5735% -1.4591% -0.0899%] (p = 0.04 < 0.05) + Change within noise threshold. +Found 2 outliers among 10 measurements (20.00%) + 2 (20.00%) high severe + +blob_to_kzg_commitment time: [7.9092 ms 7.9591 ms 8.0103 ms] + change: [+42.365% +43.262% +44.233%] (p = 0.00 < 0.05) + Performance has regressed. +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) low mild + 7 (7.00%) high mild + 1 (1.00%) high severe + +compute_kzg_proof time: [9.0116 ms 9.0699 ms 9.1288 ms] + change: [+47.851% +48.818% +49.898%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_kzg_proof time: [1.2277 ms 1.2308 ms 1.2342 ms] + change: [+9.6699% +9.9759% +10.296%] (p = 0.00 < 0.05) + Performance has regressed. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_blob_kzg_proof time: [9.8394 ms 9.9250 ms 10.022 ms] + change: [+50.093% +51.382% +52.840%] (p = 0.00 < 0.05) + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) high mild + 5 (5.00%) high severe + +verify_blob_kzg_proof time: [2.5390 ms 2.5437 ms 2.5484 ms] + change: [+23.309% +23.772% +24.233%] (p = 0.00 < 0.05) + Performance has regressed. + +verify_blob_kzg_proof_batch/1 + time: [2.5854 ms 2.5914 ms 2.5978 ms] + thrpt: [384.94 elem/s 385.89 elem/s 386.79 elem/s] + change: + time: [+24.961% +25.420% +25.900%] (p = 0.00 < 0.05) + thrpt: [-20.572% -20.268% -19.975%] + Performance has regressed. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [2.9730 ms 2.9842 ms 2.9971 ms] + thrpt: [667.32 elem/s 670.19 elem/s 672.73 elem/s] + change: + time: [+30.896% +31.666% +32.480%] (p = 0.00 < 0.05) + thrpt: [-24.517% -24.050% -23.603%] + Performance has regressed. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [3.2239 ms 3.3505 ms 3.4894 ms] + thrpt: [1.1463 Kelem/s 1.1938 Kelem/s 1.2407 Kelem/s] + change: + time: [+23.260% +28.676% +33.920%] (p = 0.00 < 0.05) + thrpt: [-25.328% -22.285% -18.870%] + Performance has regressed. +Found 20 outliers among 100 measurements (20.00%) + 1 (1.00%) high mild + 19 (19.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [5.1841 ms 5.2019 ms 5.2199 ms] + thrpt: [1.5326 Kelem/s 1.5379 Kelem/s 1.5432 Kelem/s] + change: + time: [+57.999% +59.139% +60.251%] (p = 0.00 < 0.05) + thrpt: [-37.598% -37.162% -36.709%] + Performance has regressed. +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low severe + 4 (4.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [5.1471 ms 5.1640 ms 5.1821 ms] + thrpt: [3.0876 Kelem/s 3.0983 Kelem/s 3.1086 Kelem/s] + change: + time: [+0.4981% +1.1692% +1.8605%] (p = 0.00 < 0.05) + thrpt: [-1.8265% -1.1557% -0.4957%] + Change within noise threshold. +Found 4 outliers among 100 measurements (4.00%) + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [35.378 ms 35.851 ms 36.336 ms] + thrpt: [880.68 elem/s 892.57 elem/s 904.51 elem/s] + change: + time: [+253.64% +260.36% +266.91%] (p = 0.00 < 0.05) + thrpt: [-72.745% -72.250% -71.723%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [41.945 ms 42.582 ms 43.260 ms] + thrpt: [1.4794 Kelem/s 1.5030 Kelem/s 1.5258 Kelem/s] + change: + time: [+150.79% +155.81% +161.10%] (p = 0.00 < 0.05) + thrpt: [-61.701% -60.908% -60.125%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe + +blob_to_kzg_commitment time: [5.6902 ms 5.7060 ms 5.7221 ms] + change: [-28.811% -28.309% -27.809%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +compute_kzg_proof time: [6.2472 ms 6.2630 ms 6.2796 ms] + change: [-31.431% -30.948% -30.456%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1227 ms 1.1249 ms 1.1271 ms] + change: [-8.3715% -8.0769% -7.7922%] (p = 0.00 < 0.05) + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [6.6604 ms 6.6778 ms 6.6954 ms] + change: [-33.392% -32.717% -32.111%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.1553 ms 2.1607 ms 2.1663 ms] + change: [-15.319% -15.059% -14.777%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.1498 ms 2.1558 ms 2.1617 ms] + thrpt: [462.60 elem/s 463.87 elem/s 465.16 elem/s] + change: + time: [-17.125% -16.811% -16.508%] (p = 0.00 < 0.05) + thrpt: [+19.772% +20.208% +20.664%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/2 + time: [2.4072 ms 2.4193 ms 2.4314 ms] + thrpt: [822.58 elem/s 826.67 elem/s 830.82 elem/s] + change: + time: [-19.416% -18.929% -18.441%] (p = 0.00 < 0.05) + thrpt: [+22.610% +23.349% +24.094%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) low mild +verify_blob_kzg_proof_batch/4 + time: [2.8971 ms 2.9170 ms 2.9420 ms] + thrpt: [1.3596 Kelem/s 1.3713 Kelem/s 1.3807 Kelem/s] + change: + time: [-16.448% -12.938% -9.4352%] (p = 0.00 < 0.05) + thrpt: [+10.418% +14.860% +19.687%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [4.0721 ms 4.0912 ms 4.1108 ms] + thrpt: [1.9461 Kelem/s 1.9554 Kelem/s 1.9646 Kelem/s] + change: + time: [-21.808% -21.351% -20.898%] (p = 0.00 < 0.05) + thrpt: [+26.419% +27.148% +27.890%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [6.7599 ms 6.8008 ms 6.8420 ms] + thrpt: [2.3385 Kelem/s 2.3527 Kelem/s 2.3669 Kelem/s] + change: + time: [+30.800% +31.695% +32.618%] (p = 0.00 < 0.05) + thrpt: [-24.595% -24.067% -23.547%] + Performance has regressed. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [13.064 ms 13.201 ms 13.343 ms] + thrpt: [2.3983 Kelem/s 2.4240 Kelem/s 2.4494 Kelem/s] + change: + time: [-63.780% -63.178% -62.531%] (p = 0.00 < 0.05) + thrpt: [+166.88% +171.58% +176.09%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/64 + time: [22.996 ms 23.197 ms 23.406 ms] + thrpt: [2.7344 Kelem/s 2.7589 Kelem/s 2.7831 Kelem/s] + change: + time: [-46.475% -45.523% -44.533%] (p = 0.00 < 0.05) + thrpt: [+80.287% +83.562% +86.829%] + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +blob_to_kzg_commitment time: [5.5317 ms 5.5482 ms 5.5644 ms] + change: [-3.1503% -2.7661% -2.3733%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + +compute_kzg_proof time: [6.1070 ms 6.1246 ms 6.1423 ms] + change: [-2.5772% -2.2089% -1.8182%] (p = 0.00 < 0.05) + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild + +verify_kzg_proof time: [1.1230 ms 1.1253 ms 1.1276 ms] + change: [-0.6652% -0.3406% -0.0075%] (p = 0.05 < 0.05) + Change within noise threshold. +Found 5 outliers among 100 measurements (5.00%) + 4 (4.00%) high mild + 1 (1.00%) high severe + +compute_blob_kzg_proof time: [6.5079 ms 6.5260 ms 6.5442 ms] + change: [-2.6253% -2.2732% -1.9136%] (p = 0.00 < 0.05) + Performance has improved. + +verify_blob_kzg_proof time: [2.0479 ms 2.0536 ms 2.0595 ms] + change: [-5.3036% -4.9570% -4.5622%] (p = 0.00 < 0.05) + Performance has improved. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [2.0824 ms 2.0880 ms 2.0940 ms] + thrpt: [477.54 elem/s 478.93 elem/s 480.22 elem/s] + change: + time: [-3.5229% -3.1446% -2.7678%] (p = 0.00 < 0.05) + thrpt: [+2.8465% +3.2467% +3.6516%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/2 + time: [2.2371 ms 2.2463 ms 2.2559 ms] + thrpt: [886.56 elem/s 890.35 elem/s 894.02 elem/s] + change: + time: [-7.7478% -7.1519% -6.5501%] (p = 0.00 < 0.05) + thrpt: [+7.0092% +7.7027% +8.3985%] + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +verify_blob_kzg_proof_batch/4 + time: [2.5908 ms 2.6025 ms 2.6140 ms] + thrpt: [1.5302 Kelem/s 1.5370 Kelem/s 1.5439 Kelem/s] + change: + time: [-11.615% -10.781% -10.036%] (p = 0.00 < 0.05) + thrpt: [+11.155% +12.084% +13.141%] + Performance has improved. +verify_blob_kzg_proof_batch/8 + time: [3.2432 ms 3.2603 ms 3.2775 ms] + thrpt: [2.4409 Kelem/s 2.4538 Kelem/s 2.4667 Kelem/s] + change: + time: [-20.904% -20.310% -19.773%] (p = 0.00 < 0.05) + thrpt: [+24.646% +25.486% +26.429%] + Performance has improved. +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild +verify_blob_kzg_proof_batch/16 + time: [5.0600 ms 5.0950 ms 5.1306 ms] + thrpt: [3.1186 Kelem/s 3.1403 Kelem/s 3.1620 Kelem/s] + change: + time: [-25.775% -25.082% -24.421%] (p = 0.00 < 0.05) + thrpt: [+32.312% +33.480% +34.725%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +verify_blob_kzg_proof_batch/32 + time: [10.337 ms 10.480 ms 10.633 ms] + thrpt: [3.0096 Kelem/s 3.0535 Kelem/s 3.0956 Kelem/s] + change: + time: [-21.995% -20.617% -19.218%] (p = 0.00 < 0.05) + thrpt: [+23.790% +25.971% +28.197%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [16.623 ms 16.797 ms 16.981 ms] + thrpt: [3.7689 Kelem/s 3.8102 Kelem/s 3.8502 Kelem/s] + change: + time: [-28.553% -27.590% -26.624%] (p = 0.00 < 0.05) + thrpt: [+36.285% +38.103% +39.964%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 2 (2.00%) high mild + 2 (2.00%) high severe + +bench_fft_fr scale: '15' + time: [2.3121 ms 2.3386 ms 2.3764 ms] + change: [+0.2724% +1.4249% +2.7601%] (p = 0.05 < 0.05) + Change within noise threshold. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fft_g1 scale: '15' + time: [4.7501 s 4.8799 s 5.0184 s] + change: [-4.3609% -0.4963% +3.6245%] (p = 0.83 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high mild + +bench_fk_single_da scale: '14' + time: [6.2327 s 6.3374 s 6.4425 s] + change: [-0.7982% +1.1427% +3.1799%] (p = 0.28 > 0.05) + No change in performance detected. + +bench_fk_multi_da scale: '14' + time: [1.0430 s 1.0579 s 1.0731 s] + change: [-4.4242% -2.7285% -1.0732%] (p = 0.01 < 0.05) + Performance has improved. + +bench_commit_to_poly scale: '15' + time: [44.850 ms 45.077 ms 45.269 ms] + change: [+16.657% +18.155% +19.513%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low severe + +bench_compute_proof_single scale: '15' + time: [44.509 ms 45.165 ms 45.672 ms] + change: [+11.320% +13.615% +15.520%] (p = 0.00 < 0.05) + Performance has regressed. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) low mild + +bench_g1_lincomb points: '4096' + time: [8.0912 ms 8.1305 ms 8.1535 ms] + change: [+0.6958% +1.1727% +1.6898%] (p = 0.00 < 0.05) + Change within noise threshold. + +bench_new_poly_div scale: '15' + time: [179.35 ms 180.30 ms 181.48 ms] + change: [-0.6625% +0.2735% +1.2983%] (p = 0.62 > 0.05) + No change in performance detected. +Found 1 outliers among 10 measurements (10.00%) + 1 (10.00%) high severe + +bench_recover scale: '15' + time: [75.021 ms 75.673 ms 76.405 ms] + change: [-3.7327% -1.9086% -0.3001%] (p = 0.05 > 0.05) + No change in performance detected. + +bench_zero_poly scale: '15' + time: [47.955 ms 48.725 ms 49.808 ms] + change: [-5.4888% -3.1372% -0.5491%] (p = 0.03 < 0.05) + Change within noise threshold. + + + + +~~~~~~~~~~ rust binding (rust-kzg with blst backend) ~~~~~~~~~~ + + + +running 9 tests +test bindings::tests::test_blob_to_kzg_commitment ... ignored +test bindings::tests::test_compute_blob_kzg_proof ... ignored +test bindings::tests::test_compute_kzg_proof ... ignored +test bindings::tests::test_end_to_end ... ignored +test bindings::tests::test_parse_kzg_trusted_setup ... ignored +test bindings::tests::test_verify_blob_kzg_proof ... ignored +test bindings::tests::test_verify_blob_kzg_proof_batch ... ignored +test bindings::tests::test_verify_kzg_proof ... ignored +test ethereum_kzg_settings::tests::compare_default_with_file ... ignored + +test result: ok. 0 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.00s + +blob_to_kzg_commitment time: [6.9272 ms 6.9494 ms 6.9785 ms] + change: [-6.2201% -3.9276% -1.7375%] (p = 0.00 < 0.05) + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) high mild + 4 (4.00%) high severe + +compute_kzg_proof time: [8.5363 ms 8.5906 ms 8.6569 ms] + change: [-6.1440% -4.0340% -1.9141%] (p = 0.00 < 0.05) + Performance has improved. +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + +compute_blob_kzg_proof time: [9.5631 ms 9.5973 ms 9.6415 ms] + change: [-6.4792% -4.7152% -2.9382%] (p = 0.00 < 0.05) + Performance has improved. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe + +verify_kzg_proof time: [1.3820 ms 1.3845 ms 1.3872 ms] + change: [-0.6272% +1.0865% +2.1871%] (p = 0.14 > 0.05) + No change in performance detected. +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 1 (1.00%) high severe + +verify_blob_kzg_proof time: [3.3589 ms 3.3657 ms 3.3725 ms] + change: [+0.8132% +1.2442% +1.6747%] (p = 0.00 < 0.05) + Change within noise threshold. +Found 3 outliers among 100 measurements (3.00%) + 2 (2.00%) low mild + 1 (1.00%) high mild + +verify_blob_kzg_proof_batch/1 + time: [3.3760 ms 3.3829 ms 3.3898 ms] + thrpt: [295.00 elem/s 295.61 elem/s 296.21 elem/s] + change: + time: [+0.8044% +1.1826% +1.5367%] (p = 0.00 < 0.05) + thrpt: [-1.5135% -1.1687% -0.7980%] + Change within noise threshold. +Found 1 outliers among 100 measurements (1.00%) + 1 (1.00%) high mild +verify_blob_kzg_proof_batch/2 + time: [3.9657 ms 3.9778 ms 3.9921 ms] + thrpt: [500.99 elem/s 502.80 elem/s 504.33 elem/s] + change: + time: [+0.4355% +0.9061% +1.4448%] (p = 0.00 < 0.05) + thrpt: [-1.4242% -0.8980% -0.4336%] + Change within noise threshold. +Found 13 outliers among 100 measurements (13.00%) + 1 (1.00%) low mild + 6 (6.00%) high mild + 6 (6.00%) high severe +verify_blob_kzg_proof_batch/4 + time: [4.2107 ms 4.3379 ms 4.4843 ms] + thrpt: [892.00 elem/s 922.10 elem/s 949.96 elem/s] + change: + time: [-2.7373% +1.9392% +6.8281%] (p = 0.43 > 0.05) + thrpt: [-6.3917% -1.9023% +2.8143%] + No change in performance detected. +Found 14 outliers among 100 measurements (14.00%) + 3 (3.00%) high mild + 11 (11.00%) high severe +verify_blob_kzg_proof_batch/8 + time: [6.7534 ms 6.8084 ms 6.8570 ms] + thrpt: [1.1667 Kelem/s 1.1750 Kelem/s 1.1846 Kelem/s] + change: + time: [+50.458% +57.940% +65.367%] (p = 0.00 < 0.05) + thrpt: [-39.528% -36.685% -33.536%] + Performance has regressed. +Found 13 outliers among 100 measurements (13.00%) + 4 (4.00%) low severe + 6 (6.00%) low mild + 1 (1.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/16 + time: [6.8361 ms 6.8577 ms 6.8812 ms] + thrpt: [2.3252 Kelem/s 2.3331 Kelem/s 2.3405 Kelem/s] + change: + time: [-25.023% -21.115% -16.987%] (p = 0.00 < 0.05) + thrpt: [+20.463% +26.766% +33.374%] + Performance has improved. +Found 6 outliers among 100 measurements (6.00%) + 4 (4.00%) high mild + 2 (2.00%) high severe +verify_blob_kzg_proof_batch/32 + time: [10.908 ms 10.937 ms 10.971 ms] + thrpt: [2.9169 Kelem/s 2.9257 Kelem/s 2.9336 Kelem/s] + change: + time: [-7.7079% -7.0882% -6.4974%] (p = 0.00 < 0.05) + thrpt: [+6.9489% +7.6289% +8.3516%] + Performance has improved. +Found 4 outliers among 100 measurements (4.00%) + 3 (3.00%) high mild + 1 (1.00%) high severe +verify_blob_kzg_proof_batch/64 + time: [19.717 ms 19.769 ms 19.832 ms] + thrpt: [3.2271 Kelem/s 3.2373 Kelem/s 3.2459 Kelem/s] + change: + time: [-16.054% -13.180% -10.460%] (p = 0.00 < 0.05) + thrpt: [+11.681% +15.181% +19.124%] + Performance has improved. +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe + + + + +~~~~~~~~~~ go binding (rust-kzg with blst backend) ~~~~~~~~~~ + + +goos: linux +goarch: amd64 +pkg: github.com/ethereum/c-kzg-4844/bindings/go +cpu: Intel(R) Xeon(R) Platinum 8280 CPU @ 2.70GHz +Benchmark/BlobToKZGCommitment-16 171 7027527 ns/op +Benchmark/ComputeKZGProof-16 136 8509580 ns/op +Benchmark/ComputeBlobKZGProof-16 123 9585774 ns/op +Benchmark/VerifyKZGProof-16 859 1404197 ns/op +Benchmark/VerifyBlobKZGProof-16 355 3348508 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=1)-16 357 3333017 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=2)-16 300 3935594 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=4)-16 253 4130942 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=8)-16 178 6833931 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=16)-16 175 6828852 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=32)-16 100 10953536 ns/op +Benchmark/VerifyBlobKZGProofBatch(count=64)-16 57 19722596 ns/op +PASS +ok github.com/ethereum/c-kzg-4844/bindings/go 24.225s diff --git a/benchmark_script/main.py b/benchmark_script/main.py new file mode 100644 index 000000000..3c5031da5 --- /dev/null +++ b/benchmark_script/main.py @@ -0,0 +1,559 @@ +import re +import pandas as pd +import subprocess +import os + +normalize_benchmark_name = { + 'blob_to_kzg_commitment': 'blob_to_kzg_commitment', + 'Benchmark/BlobToKZGCommitment': 'blob_to_kzg_commitment', + + 'compute_kzg_proof': 'compute_kzg_proof', + 'Benchmark/ComputeKZGProof': 'compute_kzg_proof', + + 'compute_blob_kzg_proof': 'compute_blob_kzg_proof', + 'Benchmark/ComputeBlobKZGProof': 'compute_blob_kzg_proof', + + 'verify_kzg_proof': 'verify_kzg_proof', + 'Benchmark/VerifyKZGProof': 'verify_kzg_proof', + + 'verify_blob_kzg_proof': 'verify_blob_kzg_proof', + 'Benchmark/VerifyBlobKZGProof': 'verify_blob_kzg_proof', + + 'verify_blob_kzg_proof_batch/1': 'verify_blob_kzg_proof_batch/1', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=1)': 'verify_blob_kzg_proof_batch/1', + 'verify_blob_kzg_proof (batch 1)': 'verify_blob_kzg_proof_batch/1', + + 'verify_blob_kzg_proof_batch/2': 'verify_blob_kzg_proof_batch/2', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=2)': 'verify_blob_kzg_proof_batch/2', + 'verify_blob_kzg_proof (batch 2)': 'verify_blob_kzg_proof_batch/2', + + 'verify_blob_kzg_proof_batch/4': 'verify_blob_kzg_proof_batch/4', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=4)': 'verify_blob_kzg_proof_batch/4', + 'verify_blob_kzg_proof (batch 4)': 'verify_blob_kzg_proof_batch/4', + + 'verify_blob_kzg_proof_batch/8': 'verify_blob_kzg_proof_batch/8', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=8)': 'verify_blob_kzg_proof_batch/8', + 'verify_blob_kzg_proof (batch 8)': 'verify_blob_kzg_proof_batch/8', + + 'verify_blob_kzg_proof_batch/16': 'verify_blob_kzg_proof_batch/16', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=16)': 'verify_blob_kzg_proof_batch/16', + 'verify_blob_kzg_proof (batch 16)': 'verify_blob_kzg_proof_batch/16', + + 'verify_blob_kzg_proof_batch/32': 'verify_blob_kzg_proof_batch/32', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=32)': 'verify_blob_kzg_proof_batch/32', + 'verify_blob_kzg_proof (batch 32)': 'verify_blob_kzg_proof_batch/32', + + + 'verify_blob_kzg_proof_batch/64': 'verify_blob_kzg_proof_batch/64', + 'Benchmark/VerifyBlobKZGProofBatchPar(count=64)': 'verify_blob_kzg_proof_batch/64', + 'verify_blob_kzg_proof (batch 64)': 'verify_blob_kzg_proof_batch/64', + + 'Benchmark/VerifyBlobKZGProofBatch(count=1)': 'verify_blob_kzg_proof_batch/1 (sequential)', + 'Benchmark/VerifyBlobKZGProofBatch(count=2)': 'verify_blob_kzg_proof_batch/2 (sequential)', + 'Benchmark/VerifyBlobKZGProofBatch(count=4)': 'verify_blob_kzg_proof_batch/4 (sequential)', + 'Benchmark/VerifyBlobKZGProofBatch(count=8)': 'verify_blob_kzg_proof_batch/8 (sequential)', + 'Benchmark/VerifyBlobKZGProofBatch(count=16)': 'verify_blob_kzg_proof_batch/16 (sequential)', + 'Benchmark/VerifyBlobKZGProofBatch(count=32)': 'verify_blob_kzg_proof_batch/32 (sequential)', + 'Benchmark/VerifyBlobKZGProofBatch(count=64)': 'verify_blob_kzg_proof_batch/64 (sequential)', + 'BenchmarkComputeChallenge': 'BenchmarkComputeChallenge', + 'BenchmarkDeserializeBlob': 'BenchmarkDeserializeBlob', + + "bench_DAS_extension scale: '15'": "bench_DAS_extension scale: '15'", + "bench_fft_fr scale: '15'": "bench_fft_fr scale: '15'", + "bench_fft_g1 scale: '15'": "bench_fft_g1 scale: '15'", + "bench_fk_single_da scale: '14'": "bench_fk_single_da scale: '14'", + "bench_fk_multi_da scale: '14'": "bench_fk_multi_da scale: '14'", + "bench_commit_to_poly scale: '15'": "bench_commit_to_poly scale: '15'", + "bench_compute_proof_single scale: '15'": "bench_compute_proof_single scale: '15'", + "bench_g1_lincomb points: '4096'": "bench_g1_lincomb points: '4096'", + "bench_new_poly_div scale: '15'": "bench_new_poly_div scale: '15'", + "bench_recover scale: '15'": "bench_recover scale: '15'", + "bench_zero_poly scale: '15'": "bench_zero_poly scale: '15'", + "bench_g1_lincomb with precomputation points: '4096'": "bench_g1_lincomb with precomputation points: '4096'", + + "bench_g1_lincomb points: '16384'": "bench_g1_lincomb points: '16384'", + "bench_g1_lincomb with precomputation points: '16384'": "bench_g1_lincomb with precomputation points: '16384'", + + "bench_g1_lincomb points: '65536'": "bench_g1_lincomb points: '65536'", + "bench_g1_lincomb with precomputation points: '65536'": "bench_g1_lincomb with precomputation points: '65536'", + + "bench_g1_lincomb points: '262144'": "bench_g1_lincomb points: '262144'", + "bench_g1_lincomb with precomputation points: '262144'": "bench_g1_lincomb with precomputation points: '262144'", + + "bench_g1_lincomb points: '1048576'": "bench_g1_lincomb points: '1048576'", + "bench_g1_lincomb with precomputation points: '1048576'": "bench_g1_lincomb with precomputation points: '1048576'", +} + +benchmark_name_to_sheet_name = { + 'blob_to_kzg_commitment': 'Blob to KZG commitment', + 'compute_kzg_proof': 'Compute KZG proof', + 'compute_blob_kzg_proof': 'Compute blob KZG proof', + 'verify_kzg_proof': 'Verify KZG proof', + 'verify_blob_kzg_proof': 'Verify blob KZG proof', + 'verify_blob_kzg_proof_batch/1': 'Verify blob KZG proof batch (count=1)', + 'verify_blob_kzg_proof_batch/2': 'Verify blob KZG proof batch (count=2)', + 'verify_blob_kzg_proof_batch/4': 'Verify blob KZG proof batch (count=4)', + 'verify_blob_kzg_proof_batch/8': 'Verify blob KZG proof batch (count=8)', + 'verify_blob_kzg_proof_batch/16': 'Verify blob KZG proof batch (count=16)', + 'verify_blob_kzg_proof_batch/32': 'Verify blob KZG proof batch (count=32)', + 'verify_blob_kzg_proof_batch/64': 'Verify blob KZG proof batch (count=64)', + "bench_DAS_extension scale: '15'": 'DAS extension (scale=15)', + "bench_fft_fr scale: '15'": 'FFT Fr (scale=15)', + "bench_fft_g1 scale: '15'": 'FFT G1 (scale=15)', + "bench_fk_single_da scale: '14'": 'FK single (scale=14)', + "bench_fk_multi_da scale: '14'": 'FK multi (scale=14)', + "bench_commit_to_poly scale: '15'": 'Commit to poly (scale=15)', + "bench_compute_proof_single scale: '15'": 'Compute proof single (scale=15)', + "bench_g1_lincomb with precomputation points: '4096'": 'Multi-scalar multiplication (points=4096)', + "bench_new_poly_div scale: '15'": 'New poly div (scale=15)', + "bench_recover scale: '15'": 'Recover (scale=15)', + "bench_zero_poly scale: '15'": 'Zero poly (scale=15)', +} + +def parse_benchmark_group(file, name): + data = "" + while True: + pos = file.tell() + line = file.readline() + if len(line) == 0: + file.seek(pos) + break; + res = re.match(r"^~+ ([^~]+) ~+$", line) + if not (res is None): + file.seek(pos) + break + res = re.match(r"^\*+ BENCHMARKING ([^\*]+) \*+$", line) + if not (res is None): + file.seek(pos) + break + data += line + data = data.strip() + + go_matches = re.findall(r"^(.+)\t *\d+\t *(\d+) ns\/op(?:\t *\d+ B\/op\t *\d+ allocs\/op)?$", data, flags=re.M) + rust_matches = re.findall(r"^(\S.+)\s+time:\s*\[\d+.\d*\sm?s\s(\d+.\d*\sm?s)\s\d+.\d*\sm?s\]", data, flags=re.M) + nim_matches = re.findall(r"(\w+(?:\s\(batch\s\d+\))?\s+\d+ threads|verify_kzg_proof\s+serial)\s+\d+\.\d+\sops\/s\s+(\d+)\sns\/op", data, flags=re.M) + + output = {} + + if len(go_matches) > 0: + for (name, time) in go_matches: + res = re.match(r"^([^-\s]+)(?:-\d+)?\s*$", name) + name = res.group(1) + + normalized_name = normalize_benchmark_name.get(name) + if normalized_name is None: + print("Warning! Unrecognized benchmark name - ", name) + normalized_name = name + + output[normalized_name] = int(time) + elif len(rust_matches) > 0: + for (name, time) in rust_matches: + name = name.strip() + time = re.match(r"^(\d+\.\d+) (m?s)$", time) + + if time.group(2) == 'ms': + scale = 1000000 + elif time.group(2) == 's': + scale = 1000000000 + else: + print("Unrecognized time unit: ", time.group(2)) + continue + + normalized_name = normalize_benchmark_name.get(name) + if normalized_name is None: + print("Warning! Unrecognized benchmark name - ", name) + normalized_name = name + + output[normalized_name] = int(float(time.group(1)) * scale) + elif len(nim_matches) > 0: + for (name, time) in nim_matches: + res = re.match("^(\w+(?:\s\(batch\s\d+\))?)", name) + name = res.group(1) + + normalized_name = normalize_benchmark_name.get(name) + if normalized_name is None: + print("Warning! Unrecognized benchmark name - ", name) + output[normalized_name] = int(time) + else: + print("Unrecognized! ", name) + + return output + + +def parse_thread_group(file, threads): + group = {} + + while True: + pos = file.tell() + line = file.readline() + if len(line) == 0: + file.seek(pos) + break; + res = re.match(r"^~+([^~]+)~+$", line) + if res is None and len(line.strip()) != 0: + file.seek(pos) + break + if not (res is None): + group_name = res.group(1).strip() + group[group_name] = parse_benchmark_group(file, group_name) + + return group + +def replace_path(match, resolve_var): + path = match.group(1) + + result = resolve_var(path.split(">")) + + return str(result) + + +def expand_template(in_filename, out_filename, resolve_var): + with open(in_filename, "r") as in_file, open(out_filename, "w") as out_file: + for line in in_file: + out_line = re.sub(r'\$\{([^}]+)\}', lambda match: replace_path(match, resolve_var), line) + out_file.write(out_line) + +def generate_from_template(template_name, out_filename, resolve_var): + expand_template(template_name, f"./output/{out_filename}.tex", resolve_var) + status = subprocess.call(f"wsl xelatex -halt-on-error -output-directory=./output ./output/{out_filename}.tex", shell=True) + if status != 0: + print("Failed to generate graph pdf") + return + status = subprocess.call(f"wsl convert -verbose -density 300 -trim ./output/{out_filename}.pdf -quality 100 -flatten ./output/{out_filename}.jpg") + if status != 0: + print("Failed to convert graph pdf to image") + return + +def generate_eip_graph(out_filename, data, criteria, time_unit): + max_time = None + max_time_2 = None + for cores in data: + for backend in ['rust-kzg with blst backend (parallel, bgmw)', 'rust-kzg with zkcrypto backend (parallel)']: + result = None + for i in criteria: + if i in data[cores][backend]: + result = data[cores][backend][i] + break; + if max_time is None and not (result is None): + max_time = result + if not (max_time is None) and not (result is None) and max_time < result: + max_time = result + for backend in ['rust-kzg with blst backend (parallel, bgmw)', 'go-kzg-4844', 'rust binding (c-kzg-4844)', 'rust binding (rust-kzg with blst backend)', 'go binding (rust-kzg with blst backend)']: + result = None + for i in criteria: + if i in data[cores][backend]: + result = data[cores][backend][i] + break; + if max_time_2 is None and not (result is None): + max_time_2 = result + if not (max_time_2 is None) and not (result is None) and max_time_2 < result: + max_time_2 = result + + time_scale = None + if time_unit == 'ms': + time_scale = 1 / 1000000 + elif time_unit == 's': + time_scale = 1 / 1000000000 + + max_time *= time_scale + max_time *= 1.1 + max_time_2 *= time_scale + max_time_2 *= 1.1 + + def resolve_var(path): + if len(path) == 1: + if path[0] == 'max_time_2': + return max_time_2 + if path[0] == 'max_time': + return max_time + if path[0] == 'time_unit': + return time_unit + + obj = data + for segment in path: + obj = obj[segment] + + result = None + for i in criteria: + if i in obj: + result = obj[i] + break + return result * time_scale + + generate_from_template("./input/graphs/eip_graph_template.tex", out_filename, resolve_var) + +def generate_fft_graph(out_filename, data): + max_time = None + max_time_2 = None + for cores in data: + for backend in ['rust-kzg with blst backend (parallel, bgmw)', 'rust-kzg with arkworks backend (parallel, bgmw)', 'rust-kzg with constantine backend (parallel, bgmw)', 'rust-kzg with zkcrypto backend (parallel)']: + result = data[cores][backend]["bench_fft_fr scale: '15'"] + if max_time is None: + max_time = result + elif max_time < result: + max_time = result + for backend in ['rust-kzg with blst backend (parallel, bgmw)', 'rust-kzg with arkworks backend (parallel, bgmw)', 'rust-kzg with constantine backend (parallel, bgmw)', 'rust-kzg with zkcrypto backend (parallel)']: + result = data[cores][backend]["bench_fft_g1 scale: '15'"] + if max_time_2 is None: + max_time_2 = result + elif max_time_2 < result: + max_time_2 = result + time_unit = 'ms' + time_scale = 1 / 1000000 + time_unit_2 = 's' + time_scale_2 = 1 / 1000000000 + + max_time *= time_scale + max_time *= 1.1 + max_time_2 *= time_scale_2 + max_time_2 *= 1.1 + + def resolve_var(path): + if len(path) == 1: + if path[0] == 'max_time_2': + return max_time_2 + if path[0] == 'max_time': + return max_time + if path[0] == 'time_unit': + return time_unit + if path[0] == 'time_unit_2': + return time_unit_2 + + result = data + for segment in path: + result = result[segment] + + if path[len(path) - 1] == "bench_fft_g1 scale: '15'": + return result * time_scale_2 + + return result * time_scale + + generate_from_template("./input/graphs/fft_graph_template.tex", out_filename, resolve_var) + +def generate_msm_graph(out_filename, data): + max_time = None + max_time_2 = None + for cores in data: + for backend in ['rust-kzg with blst backend (parallel)', 'rust-kzg with arkworks backend (parallel)', 'rust-kzg with constantine backend (parallel)', 'rust-kzg with zkcrypto backend (parallel)']: + result = data[cores][backend]["bench_g1_lincomb points: '4096'"] + if max_time is None: + max_time = result + elif max_time < result: + max_time = result + for backend in ['rust-kzg with blst backend (sequential)', 'rust-kzg with arkworks backend (sequential)', 'rust-kzg with constantine backend (sequential)', 'rust-kzg with zkcrypto backend (sequential)']: + result = data[cores][backend]["bench_g1_lincomb points: '4096'"] + if max_time_2 is None: + max_time_2 = result + elif max_time_2 < result: + max_time_2 = result + time_unit = 'ms' + time_scale = 1 / 1000000 + + max_time *= time_scale + max_time *= 1.1 + max_time_2 *= time_scale + max_time_2 *= 1.1 + + def resolve_var(path): + if len(path) == 1: + if path[0] == 'max_time_2': + return max_time_2 + if path[0] == 'max_time': + return max_time + if path[0] == 'time_unit': + return time_unit + + obj = data + for segment in path: + obj = obj[segment] + + result = None + for i in ["bench_g1_lincomb with precomputation points: '4096'", "bench_g1_lincomb points: '4096'"]: + if i in obj: + result = obj[i] + break + return result * time_scale + + generate_from_template("./input/graphs/msm_graph_template.tex", out_filename, resolve_var) + +def parse_cuda_benches(input): + with open(f"./input/{input}") as bench_results: + line = bench_results.readline() + + groups = {} + name = '' + + while len(line) > 0: + result = re.match(r"^~+([^~]+)~+$", line) + + if not (result is None): + group_name = result.group(1).strip() + + group = parse_benchmark_group(bench_results, group_name) + + if group_name in groups: + groups[group_name] = groups[group_name] | group + else: + groups[group_name] = group + + result = re.match(r"^\|\s+0\s+(.+)Off \|.+\|.+\|$", line) + if not (result is None): + name = result.group(1).strip() + + line = bench_results.readline() + + return (name, groups) + +def generate_cuda_eip_graph(out_filename, data, criteria, time_unit): + time_scale = None + if time_unit == 'ms': + time_scale = 1 / 1000000 + elif time_unit == 's': + time_scale = 1 / 1000000000 + + def resolve_var(path): + if len(path) == 1: + if path[0] == 'time_unit': + return time_unit + + obj = data + for segment in path: + obj = obj[segment] + + result = None + for i in criteria: + if i in obj: + result = obj[i] + break + + if result is None: + return '0' + return result * time_scale + + generate_from_template("./input/graphs/cuda_eip_graph_template.tex", out_filename, resolve_var) + +def generate_cuda_msm_graph(data, time_unit): + time_scale = None + if time_unit == 'ms': + time_scale = 1 / 1000000 + elif time_unit == 's': + time_scale = 1 / 1000000000 + + def resolve_var(path): + if len(path) == 1: + if path[0] == 'time_unit': + return time_unit + + obj = data + for segment in path: + obj = obj[segment] + + if obj is None: + return '0' + return obj * time_scale + + generate_from_template("./input/graphs/cuda_msm_graph_template.tex", "cuda_msm", resolve_var) + +def main(): + if not os.path.exists("./output"): + os.makedirs("./output") + + with open("./input/rust-kzg-benchmarks.txt", "r", encoding="utf8") as bench_results, pd.ExcelWriter("./output/results.ods", mode="w", engine="odf") as output_writer: + groups = {} + + line = bench_results.readline() + while len(line) > 0: + result = re.match(r"^\*+ BENCHMARKING ON (\d+) CORES \*+$", line) + if not (result is None): + group = parse_thread_group(bench_results, result.group(1)) + groups[result.group(1)] = group + df = pd.DataFrame(data=group) + df.to_excel(output_writer, sheet_name=f"{result.group(1)} cores") + + line = bench_results.readline() + + # additional aggregation sheets + aggr_groups = [ + ['blob_to_kzg_commitment'], + ['compute_kzg_proof'], + ['compute_blob_kzg_proof'], + ['verify_kzg_proof'], + ['verify_blob_kzg_proof'], + ['verify_blob_kzg_proof_batch/1', 'verify_blob_kzg_proof_batch/1 (sequential)'], # fallback to sequential version + ['verify_blob_kzg_proof_batch/2', 'verify_blob_kzg_proof_batch/2 (sequential)'], + ['verify_blob_kzg_proof_batch/4', 'verify_blob_kzg_proof_batch/4 (sequential)'], + ['verify_blob_kzg_proof_batch/8', 'verify_blob_kzg_proof_batch/8 (sequential)'], + ['verify_blob_kzg_proof_batch/16', 'verify_blob_kzg_proof_batch/16 (sequential)'], + ['verify_blob_kzg_proof_batch/32', 'verify_blob_kzg_proof_batch/32 (sequential)'], + ['verify_blob_kzg_proof_batch/64', 'verify_blob_kzg_proof_batch/64 (sequential)'], + ["bench_DAS_extension scale: '15'"], + ["bench_fft_fr scale: '15'"], + ["bench_fft_g1 scale: '15'"], + ["bench_fk_single_da scale: '14'"], + ["bench_fk_multi_da scale: '14'"], + ["bench_commit_to_poly scale: '15'"], + ["bench_compute_proof_single scale: '15'"], + ["bench_g1_lincomb with precomputation points: '4096'", "bench_g1_lincomb points: '4096'"], # fallback to lincomb without precomputation + ["bench_new_poly_div scale: '15'"], + ["bench_recover scale: '15'"], + ["bench_zero_poly scale: '15'"], + ] + + aggregated_data = {} + + for aggrs in aggr_groups: + aggregated_data[aggrs[0]] = {} + for group in groups: + for backend in groups[group]: + result = None + for aggr in aggrs: + if aggr in groups[group][backend]: + result = groups[group][backend][aggr] + break + if result is None: + print("Skipping \"" + aggr + "\" for " + backend + " backend") + continue + if not (backend in aggregated_data[aggrs[0]]): + aggregated_data[aggrs[0]][backend] = {} + aggregated_data[aggrs[0]][backend][group] = result + for aggregate in aggregated_data: + df = pd.DataFrame(data=aggregated_data[aggregate]) + df.to_excel(output_writer, sheet_name=benchmark_name_to_sheet_name[aggregate]) + + eip_graphs = [ + ('blob_to_kzg_commitment', ['blob_to_kzg_commitment']), + ('blob_to_kzg_commitment', ['blob_to_kzg_commitment']), + ('compute_kzg_proof', ['compute_kzg_proof']), + ('compute_blob_kzg_proof', ['compute_blob_kzg_proof']), + ('verify_kzg_proof', ['verify_kzg_proof']), + ('verify_blob_kzg_proof', ['verify_blob_kzg_proof']), + ('verify_blob_kzg_proof_batch_1', ['verify_blob_kzg_proof_batch/1', 'verify_blob_kzg_proof_batch/1 (sequential)']), # fallback to sequential version + ('verify_blob_kzg_proof_batch_2', ['verify_blob_kzg_proof_batch/2', 'verify_blob_kzg_proof_batch/2 (sequential)']), + ('verify_blob_kzg_proof_batch_4', ['verify_blob_kzg_proof_batch/4', 'verify_blob_kzg_proof_batch/4 (sequential)']), + ('verify_blob_kzg_proof_batch_8', ['verify_blob_kzg_proof_batch/8', 'verify_blob_kzg_proof_batch/8 (sequential)']), + ('verify_blob_kzg_proof_batch_16', ['verify_blob_kzg_proof_batch/16', 'verify_blob_kzg_proof_batch/16 (sequential)']), + ('verify_blob_kzg_proof_batch_32', ['verify_blob_kzg_proof_batch/32', 'verify_blob_kzg_proof_batch/32 (sequential)']), + ('verify_blob_kzg_proof_batch_64', ['verify_blob_kzg_proof_batch/64', 'verify_blob_kzg_proof_batch/64 (sequential)']), + ] + + for (graph_name, criteria) in eip_graphs: + generate_eip_graph(graph_name, groups, criteria, 'ms') + generate_fft_graph('fft', groups) + generate_msm_graph('multi_scalar_multiplication', groups) + + (name, benches) = parse_cuda_benches('rust-kzg-benchmarks-T4.txt') + df = pd.DataFrame(data=benches) + df.to_excel(output_writer, sheet_name=f"GPU {name}") + groups[name] = benches + + (name, benches) = parse_cuda_benches('rust-kzg-benchmarks-L4.txt') + df = pd.DataFrame(data=benches) + df.to_excel(output_writer, sheet_name=f"GPU {name}") + groups[name] = benches + + for (graph_name, criteria) in eip_graphs: + generate_cuda_eip_graph('cuda_' + graph_name, groups, criteria, 'ms') + generate_cuda_msm_graph(groups, 's') + +if __name__ == '__main__': + main() diff --git a/blst-sppark/Cargo.toml b/blst-sppark/Cargo.toml new file mode 100644 index 000000000..d2fb9d18a --- /dev/null +++ b/blst-sppark/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "rust-kzg-blst-sppark" +version = "0.1.0" +edition = "2021" + +[dependencies] +blst = "0.3.11" +sppark = "0.1.6" + +[build-dependencies] +cc = "^1.0.70" +which = "^4.0" + +[dev-dependencies] +criterion = "0.5.1" +kzg = { path = "../kzg" } +rand = "0.8.5" +rust-kzg-blst = { path = "../blst" } + +[[bench]] +name = "lincomb" +harness = false \ No newline at end of file diff --git a/blst-sppark/benches/lincomb.rs b/blst-sppark/benches/lincomb.rs new file mode 100644 index 000000000..3a2c33f39 --- /dev/null +++ b/blst-sppark/benches/lincomb.rs @@ -0,0 +1,53 @@ +use blst::{blst_fr, blst_p1_affine}; +use criterion::{criterion_group, criterion_main, Criterion}; +use kzg::Fr; +use kzg::G1; +use rust_kzg_blst::types::fp::FsFp; +use rust_kzg_blst::types::fr::FsFr; +use rust_kzg_blst::types::g1::{FsG1, FsG1Affine}; + +extern crate alloc; + +fn bench_g1_lincomb(c: &mut Criterion) { + const NUM_POINTS: usize = 1usize << 21; + + let points = (0..NUM_POINTS) + .into_iter() + .map(|_| FsG1::rand()) + .collect::>(); + let scalars = (0..NUM_POINTS) + .into_iter() + .map(|_| FsFr::rand()) + .collect::>(); + + let affines = kzg::msm::msm_impls::batch_convert::(&points); + let scalars = + unsafe { alloc::slice::from_raw_parts(scalars.as_ptr() as *const blst_fr, scalars.len()) }; + + let affines = unsafe { + alloc::slice::from_raw_parts(affines.as_ptr() as *const blst_p1_affine, affines.len()) + }; + + let id = format!("bench_g1_lincomb points: '{}'", NUM_POINTS); + c.bench_function(&id, |b| { + b.iter(|| { + rust_kzg_blst_sppark::multi_scalar_mult(&affines, &scalars); + }) + }); + + let msm = rust_kzg_blst_sppark::prepare_multi_scalar_mult(&affines); + let id = format!("bench_g1_lincomb points (prepared, mont): '{}'", NUM_POINTS); + c.bench_function(&id, |b| { + b.iter(|| { + rust_kzg_blst_sppark::multi_scalar_mult_prepared(msm, &scalars); + }) + }); +} + +criterion_group! { + name = benches; + config = Criterion::default()/*.sample_size(100)*/; + targets = bench_g1_lincomb +} + +criterion_main!(benches); diff --git a/blst-sppark/build.rs b/blst-sppark/build.rs new file mode 100644 index 000000000..a49e8bc26 --- /dev/null +++ b/blst-sppark/build.rs @@ -0,0 +1,95 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use std::env; +use std::path::PathBuf; + +fn main() { + // account for cross-compilation [by examining environment variable] + let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + + // Set CC environment variable to choose alternative C compiler. + // Optimization level depends on whether or not --release is passed + // or implied. + let mut cc = cc::Build::new(); + + let c_src_dir = PathBuf::from("src"); + let files = vec![c_src_dir.join("lib.c")]; + let mut cc_opt = None; + + match (cfg!(feature = "portable"), cfg!(feature = "force-adx")) { + (true, false) => { + println!("Compiling in portable mode without ISA extensions"); + cc_opt = Some("__BLST_PORTABLE__"); + } + (false, true) => { + if target_arch.eq("x86_64") { + println!("Enabling ADX support via `force-adx` feature"); + cc_opt = Some("__ADX__"); + } else { + println!("`force-adx` is ignored for non-x86_64 targets"); + } + } + (false, false) => + { + #[cfg(target_arch = "x86_64")] + if target_arch.eq("x86_64") && std::is_x86_feature_detected!("adx") { + println!("Enabling ADX because it was detected on the host"); + cc_opt = Some("__ADX__"); + } + } + (true, true) => panic!("Cannot compile with both `portable` and `force-adx` features"), + } + + cc.flag_if_supported("-mno-avx") // avoid costly transitions + .flag_if_supported("-fno-builtin") + .flag_if_supported("-Wno-unused-command-line-argument"); + if !cfg!(debug_assertions) { + cc.opt_level(2); + } + if let Some(def) = cc_opt { + cc.define(def, None); + } + if let Some(include) = env::var_os("DEP_BLST_C_SRC") { + cc.include(include); + } + cc.files(&files).compile("msm_cuda"); + + if cfg!(target_os = "windows") && !cfg!(target_env = "msvc") { + return; + } + // Detect if there is CUDA compiler and engage "cuda" feature accordingly + let nvcc = match env::var("NVCC") { + Ok(var) => which::which(var), + Err(_) => which::which("nvcc"), + }; + + if nvcc.is_ok() { + let mut nvcc = cc::Build::new(); + nvcc.cuda(true); + nvcc.flag("-arch=sm_80"); + nvcc.flag("-gencode").flag("arch=compute_70,code=sm_70"); + nvcc.flag("-t0"); + if cfg!(feature = "quiet") { + nvcc.flag("-diag-suppress=177"); // bug in the warning system. + } + #[cfg(not(target_env = "msvc"))] + nvcc.flag("-Xcompiler").flag("-Wno-unused-function"); + nvcc.define("TAKE_RESPONSIBILITY_FOR_ERROR_MESSAGE", None); + if let Some(def) = cc_opt { + nvcc.define(def, None); + } + if let Some(include) = env::var_os("DEP_BLST_C_SRC") { + nvcc.include(include); + } + if let Some(include) = env::var_os("DEP_SPPARK_ROOT") { + nvcc.include(include); + } + nvcc.file("cuda/pippenger.cu").compile("blst_cuda_msm"); + + println!("cargo:rustc-cfg=feature=\"cuda\""); + println!("cargo:rerun-if-changed=cuda"); + println!("cargo:rerun-if-env-changed=CXXFLAGS"); + } +} diff --git a/blst-sppark/cuda/pippenger.cu b/blst-sppark/cuda/pippenger.cu new file mode 100644 index 000000000..53cf84ad4 --- /dev/null +++ b/blst-sppark/cuda/pippenger.cu @@ -0,0 +1,37 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#include + +#include + +#include +#include + +typedef jacobian_t point_t; +typedef xyzz_t bucket_t; +typedef bucket_t::affine_t affine_t; +typedef fr_t scalar_t; + +#include + +#ifndef __CUDA_ARCH__ + +extern "C" +void *prepare_msm(const affine_t points[], size_t npoints) { + return new msm_t{points, npoints}; +} + +extern "C" +RustError mult_pippenger_prepared(void *msm, point_t* out, size_t npoints, const scalar_t scalars[]) { + return static_cast*>(msm)->invoke(*out, slice_t{scalars, npoints}, true); +} + +extern "C" +RustError mult_pippenger(point_t* out, const affine_t points[], size_t npoints, + const scalar_t scalars[]) +{ + return mult_pippenger(out, points, npoints, scalars, true); +} +#endif \ No newline at end of file diff --git a/blst-sppark/src/lib.c b/blst-sppark/src/lib.c new file mode 100644 index 000000000..e69de29bb diff --git a/blst-sppark/src/lib.rs b/blst-sppark/src/lib.rs new file mode 100644 index 000000000..7aa9047b2 --- /dev/null +++ b/blst-sppark/src/lib.rs @@ -0,0 +1,62 @@ +// Copyright Supranational LLC +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +use blst::*; +use std::ffi::c_void; + +pub fn prepare_multi_scalar_mult(points: &[blst_p1_affine]) -> *mut c_void { + #[cfg_attr(feature = "quiet", allow(improper_ctypes))] + extern "C" { + fn prepare_msm(points: *const blst_p1_affine, npoints: usize) -> *mut c_void; + } + + let npoints = points.len(); + + unsafe { prepare_msm(&points[0], npoints) } +} + +pub fn multi_scalar_mult_prepared(msm: *mut c_void, scalars: &[blst_fr]) -> blst_p1 { + #[cfg_attr(feature = "quiet", allow(improper_ctypes))] + extern "C" { + fn mult_pippenger_prepared( + msm: *mut c_void, + out: *mut blst_p1, + npoints: usize, + scalars: *const blst_fr, + ) -> sppark::Error; + } + + let npoints = scalars.len(); + let mut ret = blst_p1::default(); + + let err = unsafe { mult_pippenger_prepared(msm, &mut ret, npoints, &scalars[0]) }; + if err.code != 0 { + panic!("{}", String::from(err)); + } + ret +} + +pub fn multi_scalar_mult(points: &[blst_p1_affine], scalars: &[blst_fr]) -> blst_p1 { + #[cfg_attr(feature = "quiet", allow(improper_ctypes))] + extern "C" { + fn mult_pippenger( + out: *mut blst_p1, + points: *const blst_p1_affine, + npoints: usize, + scalars: *const blst_fr, + ) -> sppark::Error; + } + + let npoints = points.len(); + if npoints != scalars.len() { + panic!("length mismatch") + } + + let mut ret = blst_p1::default(); + let err = unsafe { mult_pippenger(&mut ret, &points[0], npoints, &scalars[0]) }; + if err.code != 0 { + panic!("{}", String::from(err)); + } + ret +} diff --git a/blst/Cargo.toml b/blst/Cargo.toml index 61f8fdc71..548e5b588 100644 --- a/blst/Cargo.toml +++ b/blst/Cargo.toml @@ -12,6 +12,7 @@ rand = { version = "0.8.5", optional = true } rayon = { version = "1.8.0", optional = true } smallvec = { version = "1.11.1", features = ["const_generics"] } hex = { version = "0.4.3", default-features = false, features = ["alloc"] } +rust-kzg-blst-sppark = { path = "../blst-sppark", version = "0.1.0", optional = true } [dev-dependencies] criterion = "0.5.1" @@ -44,6 +45,10 @@ bgmw = [ arkmsm = [ "kzg/arkmsm" ] +sppark = [ + "dep:rust-kzg-blst-sppark", + "kzg/sppark" +] [[bench]] name = "das" diff --git a/blst/benches/lincomb.rs b/blst/benches/lincomb.rs index 9468b0b07..ee409915e 100644 --- a/blst/benches/lincomb.rs +++ b/blst/benches/lincomb.rs @@ -11,7 +11,7 @@ fn bench_g1_lincomb_(c: &mut Criterion) { criterion_group! { name = benches; - config = Criterion::default().sample_size(10); + config = Criterion::default().sample_size(100); targets = bench_g1_lincomb_ } diff --git a/blst/go.patch b/blst/go.patch index dd2de92cc..61c8a26dc 100644 --- a/blst/go.patch +++ b/blst/go.patch @@ -1,14 +1,14 @@ -From 90e9a518ca03716ef1d9d77e263db25b56030867 Mon Sep 17 00:00:00 2001 +From d0e5b619807c0b9e936ce178b2a8e019da020a14 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:09:11 +0300 -Subject: [PATCH] Patch go binding +Date: Thu, 16 May 2024 13:26:25 +0300 +Subject: [PATCH] Patch go bindings --- bindings/go/main.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bindings/go/main.go b/bindings/go/main.go -index bdd5385..155fc81 100644 +index bf344a1..4f1c0f4 100644 --- a/bindings/go/main.go +++ b/bindings/go/main.go @@ -2,7 +2,15 @@ package ckzg4844 @@ -29,8 +29,8 @@ index bdd5385..155fc81 100644 import ( @@ -11,9 +19,6 @@ import ( + "errors" "fmt" - "strings" "unsafe" - - // So its functions are available during compilation. @@ -39,5 +39,5 @@ index bdd5385..155fc81 100644 const ( -- -2.34.1 +2.36.2.windows.1 diff --git a/blst/nim.patch b/blst/nim.patch index 9efdd1540..4109e0a1f 100644 --- a/blst/nim.patch +++ b/blst/nim.patch @@ -1,6 +1,6 @@ -From f34d21606bb5bc3dee4e7a643d7ab89a2c994fef Mon Sep 17 00:00:00 2001 +From 118b0f6c3f9bd5e7335129eea28c713b8b2856dd Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:26:35 +0200 +Date: Thu, 16 May 2024 13:29:29 +0300 Subject: [PATCH] Patch nim bindings --- @@ -8,7 +8,7 @@ Subject: [PATCH] Patch nim bindings 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bindings/nim/kzg_abi.nim b/bindings/nim/kzg_abi.nim -index 36e4ba1..74d0ebc 100644 +index 9162588..529e09a 100644 --- a/bindings/nim/kzg_abi.nim +++ b/bindings/nim/kzg_abi.nim @@ -10,6 +10,7 @@ from os import DirSep, AltSep @@ -28,8 +28,8 @@ index 36e4ba1..74d0ebc 100644 +{.passl: "-l:rust_kzg_blst.a" .} +{.passl: "-lm" .} - {.passc: "-I" & bindingsPath .} - {.passc: "-I" & srcPath .} + {.passc: "-I" & escape(bindingsPath) .} + {.passc: "-I" & escape(srcPath) .} -- -2.34.1 +2.36.2.windows.1 diff --git a/blst/nodejs.patch b/blst/nodejs.patch index 3e310fd91..c80a87652 100644 --- a/blst/nodejs.patch +++ b/blst/nodejs.patch @@ -1,27 +1,14 @@ -From 954c55533e265f32eabe0dc863b1add2478bb570 Mon Sep 17 00:00:00 2001 +From cb0c44c9df8a7a6a92ed5b4f1acb771532812257 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:02:51 +0300 -Subject: [PATCH] Patch nodejs binding +Date: Thu, 16 May 2024 14:19:08 +0300 +Subject: [PATCH] Patch nodejs bindings --- - bindings/node.js/Makefile | 1 - - bindings/node.js/binding.gyp | 31 +++---------------------------- - 2 files changed, 3 insertions(+), 29 deletions(-) + bindings/node.js/binding.gyp | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) -diff --git a/bindings/node.js/Makefile b/bindings/node.js/Makefile -index 17850ec..efc9961 100644 ---- a/bindings/node.js/Makefile -+++ b/bindings/node.js/Makefile -@@ -31,7 +31,6 @@ build: install clean - @# Prepare the dependencies directory - @mkdir -p deps/c-kzg - @cp -r ../../blst deps -- @cp ../../src/c_kzg_4844.c deps/c-kzg - @cp ../../src/c_kzg_4844.h deps/c-kzg - @# Build the bindings - @$(YARN) node-gyp --loglevel=warn configure diff --git a/bindings/node.js/binding.gyp b/bindings/node.js/binding.gyp -index 5ac368e..6cde37f 100644 +index c42bb8f..e781e61 100644 --- a/bindings/node.js/binding.gyp +++ b/bindings/node.js/binding.gyp @@ -3,9 +3,7 @@ @@ -35,40 +22,27 @@ index 5ac368e..6cde37f 100644 ], "include_dirs": [ "<(module_root_dir)/deps/blst/bindings", -@@ -16,31 +14,8 @@ +@@ -16,9 +14,11 @@ "__BLST_PORTABLE__", - "NAPI_DISABLE_CPP_EXCEPTIONS" + "NAPI_CPP_EXCEPTIONS" ], -- "conditions": [ -- ["OS!='win'", { -- "sources": ["deps/blst/build/assembly.S"], -- "cflags_cc": [ -- "-std=c++17", -- "-fPIC" -- ] -- }], -- ["OS=='win'", { -- "sources": ["deps/blst/build/win64/*-x86_64.asm"], -- "defines": [ -- "_CRT_SECURE_NO_WARNINGS", -- ], -- "msbuild_settings": { -- "ClCompile": { -- "AdditionalOptions": ["/std:c++17"] -- } -- } -- }], -- ["OS=='mac'", { -- "xcode_settings": { -- "CLANG_CXX_LIBRARY": "libc++", -- "MACOSX_DEPLOYMENT_TARGET": "13.0" -- } -- }] + "libraries": [ + "<(module_root_dir)/../../../../target/release/rust_kzg_blst.a" - ] - } - ] ++ ], + "conditions": [ + ["OS!='win'", { +- "sources": ["deps/blst/build/assembly.S"], + "cflags_cc": [ + "-fexceptions", + "-std=c++17", +@@ -26,7 +26,6 @@ + ] + }], + ["OS=='win'", { +- "sources": ["deps/blst/build/win64/*-x86_64.asm"], + "defines": [ + "_CRT_SECURE_NO_WARNINGS", + "_HAS_EXCEPTIONS=1" -- -2.34.1 +2.36.2.windows.1 diff --git a/blst/python.patch b/blst/python.patch index c039782de..cff0fc8f7 100644 --- a/blst/python.patch +++ b/blst/python.patch @@ -1,48 +1,30 @@ -From a8ff3fe1e4372380f15769bbb8490b0089aa2928 Mon Sep 17 00:00:00 2001 +From 57a93a8db7319a368a25d470aa074e3af5ecb4b6 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 13:51:37 +0300 -Subject: [PATCH] Patch python binding +Date: Thu, 16 May 2024 12:56:53 +0300 +Subject: [PATCH] Patch python bindings --- - bindings/python/Makefile | 5 +---- - bindings/python/setup.py | 6 +++--- - 2 files changed, 4 insertions(+), 7 deletions(-) + setup.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -diff --git a/bindings/python/Makefile b/bindings/python/Makefile -index c6bd222..99d6501 100644 ---- a/bindings/python/Makefile -+++ b/bindings/python/Makefile -@@ -1,11 +1,8 @@ - .PHONY: all - all: install test - --../../src/c_kzg_4844.o: -- make -C../../src c_kzg_4844.o -- - .PHONY: install --install: setup.py ckzg.c ../../src/c_kzg_4844.o -+install: setup.py ckzg.c - python3 setup.py install - - .PHONY: test -diff --git a/bindings/python/setup.py b/bindings/python/setup.py -index b072833..db37db4 100644 ---- a/bindings/python/setup.py -+++ b/bindings/python/setup.py -@@ -8,10 +8,10 @@ def main(): +diff --git a/setup.py b/setup.py +index 42d4c36..f982863 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,10 +35,10 @@ def main(): ext_modules=[ Extension( "ckzg", -- sources=["ckzg.c", "../../src/c_kzg_4844.c"], -+ sources=["ckzg.c"], - include_dirs=["../../inc", "../../src"], -- library_dirs=["../../lib"], -- libraries=["blst"])]) -+ library_dirs=["../../lib", "../../../../target/release"], -+ libraries=[":rust_kzg_blst.a"])]) - - if __name__ == "__main__": - main() +- sources=["bindings/python/ckzg.c", "src/c_kzg_4844.c"], ++ sources=["bindings/python/ckzg.c"], + include_dirs=["inc", "src"], +- library_dirs=["lib"], +- libraries=["blst"] ++ library_dirs=["lib", "../../target/release"], ++ libraries=[":rust_kzg_blst.a"] + ) + ], + cmdclass={ -- -2.34.1 +2.36.2.windows.1 diff --git a/blst/rust.patch b/blst/rust.patch index 94821b9f7..1d5d72991 100644 --- a/blst/rust.patch +++ b/blst/rust.patch @@ -1,30 +1,36 @@ -From e7d529a9ba017de920555ae9b4ab05a18174cdcf Mon Sep 17 00:00:00 2001 +From de2366bc220f4773271f54b040bb81c297edab1a Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:42:12 +0200 +Date: Sat, 6 Jul 2024 16:06:23 +0300 Subject: [PATCH] Patch rust bindings --- - bindings/rust/Cargo.toml | 1 + - bindings/rust/build.rs | 22 +++------------------- - 2 files changed, 4 insertions(+), 19 deletions(-) + Cargo.toml | 1 + + bindings/rust/build.rs | 41 +++-------------------------------------- + 2 files changed, 4 insertions(+), 38 deletions(-) -diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml -index 98bd814..9391f27 100644 ---- a/bindings/rust/Cargo.toml -+++ b/bindings/rust/Cargo.toml +diff --git a/Cargo.toml b/Cargo.toml +index f355f8c..7be1795 100644 +--- a/Cargo.toml ++++ b/Cargo.toml @@ -1,3 +1,4 @@ +[workspace] [package] name = "c-kzg" - version = "0.1.0" + version = "1.0.2" diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs -index 5148333..ec42e21 100644 +index cd07487..0e9d7f6 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs -@@ -15,24 +15,7 @@ fn main() { - - let c_src_dir = root_dir.join("src"); +@@ -3,46 +3,11 @@ use std::{env, path::PathBuf}; + fn main() { + let root_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); +- // Obtain the header files of blst +- let blst_base_dir = root_dir.join("blst"); +- let blst_headers_dir = blst_base_dir.join("bindings"); +- +- let c_src_dir = root_dir.join("src"); +- - let mut cc = cc::Build::new(); - - #[cfg(all(windows, target_env = "msvc"))] @@ -41,22 +47,30 @@ index 5148333..ec42e21 100644 - cc.include(blst_headers_dir.clone()); - cc.warnings(false); - cc.file(c_src_dir.join("c_kzg_4844.c")); +- #[cfg(not(debug_assertions))] +- cc.define("NDEBUG", None); - - cc.try_compile("ckzg").expect("Failed to compile ckzg"); +- +- #[cfg(feature = "generate-bindings")] +- { +- let header_path = c_src_dir.join("c_kzg_4844.h"); +- let bindings_out_path = root_dir.join("bindings/rust/src/bindings/generated.rs"); +- make_bindings( +- header_path.to_str().expect("valid header path"), +- blst_headers_dir.to_str().expect("valid blst header path"), +- &bindings_out_path, +- ); +- } + let rust_kzg_target_dir = root_dir.join("../../target/release/"); - let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); - let bindings_out_path = out_dir.join("generated.rs"); -@@ -46,7 +29,8 @@ fn main() { - ); - // Finally, tell cargo this provides ckzg/ckzg_min - println!("cargo:rustc-link-lib=ckzg"); + println!("cargo:rustc-link-search={}", rust_kzg_target_dir.display()); + println!("cargo:rustc-link-arg=-l:rust_kzg_blst.a"); } - fn make_bindings

(header_path: &str, blst_headers_dir: &str, bindings_out_path: P) + #[cfg(feature = "generate-bindings")] -- -2.34.1 +2.45.2.windows.1 diff --git a/blst/src/kzg_proofs.rs b/blst/src/kzg_proofs.rs index 0e56511cb..fced3869b 100644 --- a/blst/src/kzg_proofs.rs +++ b/blst/src/kzg_proofs.rs @@ -29,12 +29,46 @@ pub fn g1_linear_combination( len: usize, precomputation: Option<&PrecomputationTable>, ) { - *out = msm::( - points, - scalars, - len, - precomputation, - ); + #[cfg(feature = "sppark")] + { + use blst::{blst_fr, blst_scalar, blst_scalar_from_fr}; + use kzg::{G1Mul, G1}; + + if len < 8 { + *out = FsG1::default(); + for i in 0..len { + let tmp = points[i].mul(&scalars[i]); + out.add_or_dbl_assign(&tmp); + } + + return; + } + + let scalars = + unsafe { alloc::slice::from_raw_parts(scalars.as_ptr() as *const blst_fr, len) }; + + let point = if let Some(precomputation) = precomputation { + rust_kzg_blst_sppark::multi_scalar_mult_prepared(precomputation.table, scalars) + } else { + let affines = kzg::msm::msm_impls::batch_convert::(&points); + let affines = unsafe { + alloc::slice::from_raw_parts(affines.as_ptr() as *const blst_p1_affine, len) + }; + rust_kzg_blst_sppark::multi_scalar_mult(&affines[0..len], &scalars) + }; + + *out = FsG1(point); + } + + #[cfg(not(feature = "sppark"))] + { + *out = msm::( + points, + scalars, + len, + precomputation, + ); + } } pub fn pairings_verify(a1: &FsG1, a2: &FsG2, b1: &FsG1, b2: &FsG2) -> bool { diff --git a/blst/src/types/fp.rs b/blst/src/types/fp.rs index 460098a9f..de8d2a73d 100644 --- a/blst/src/types/fp.rs +++ b/blst/src/types/fp.rs @@ -5,29 +5,35 @@ use kzg::G1Fp; #[derive(Debug, Default, Clone, Copy, Eq, PartialEq)] pub struct FsFp(pub blst_fp); impl G1Fp for FsFp { - const ONE: Self = Self(blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }); - const ZERO: Self = Self(blst_fp { - l: [0, 0, 0, 0, 0, 0], - }); - const BLS12_381_RX_P: Self = Self(blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }); + fn one() -> Self { + Self(blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }) + } + fn zero() -> Self { + Self(blst_fp { + l: [0, 0, 0, 0, 0, 0], + }) + } + fn bls12_381_rx_p() -> Self { + Self(blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }) + } fn inverse(&self) -> Option { let mut out: Self = *self; diff --git a/blst/src/types/g1.rs b/blst/src/types/g1.rs index 6c15f1f2d..173240307 100644 --- a/blst/src/types/g1.rs +++ b/blst/src/types/g1.rs @@ -143,31 +143,33 @@ impl G1 for FsG1 { unsafe { blst_p1_is_equal(&self.0, &b.0) } } - const ZERO: Self = Self(blst_p1 { - x: blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }, - y: blst_fp { - l: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }, - z: blst_fp { - l: [0, 0, 0, 0, 0, 0], - }, - }); + fn zero() -> Self { + Self(blst_p1 { + x: blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + y: blst_fp { + l: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + z: blst_fp { + l: [0, 0, 0, 0, 0, 0], + }, + }) + } fn add_or_dbl_assign(&mut self, b: &Self) { unsafe { diff --git a/blst/src/types/kzg_settings.rs b/blst/src/types/kzg_settings.rs index 3a3d159f6..8a8f42d5c 100644 --- a/blst/src/types/kzg_settings.rs +++ b/blst/src/types/kzg_settings.rs @@ -37,7 +37,27 @@ impl KZGSettings for secret_g1: secret_g1.to_vec(), secret_g2: secret_g2.to_vec(), fs: fft_settings.clone(), - precomputation: precompute(secret_g1).ok().flatten().map(Arc::new), + precomputation: { + #[cfg(feature = "sppark")] + { + use blst::blst_p1_affine; + let points = + kzg::msm::msm_impls::batch_convert::(secret_g1); + let points = unsafe { + alloc::slice::from_raw_parts( + points.as_ptr() as *const blst_p1_affine, + points.len(), + ) + }; + let prepared = rust_kzg_blst_sppark::prepare_multi_scalar_mult(points); + Some(Arc::new(PrecomputationTable::from_ptr(prepared))) + } + + #[cfg(not(feature = "sppark"))] + { + precompute(secret_g1).ok().flatten().map(Arc::new) + } + }, }) } diff --git a/constantine/go.patch b/constantine/go.patch index 14183710b..9848a604d 100644 --- a/constantine/go.patch +++ b/constantine/go.patch @@ -1,14 +1,14 @@ -From 90e9a518ca03716ef1d9d77e263db25b56030867 Mon Sep 17 00:00:00 2001 +From d0e5b619807c0b9e936ce178b2a8e019da020a14 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:09:11 +0300 -Subject: [PATCH] Patch go binding +Date: Thu, 16 May 2024 13:26:25 +0300 +Subject: [PATCH] Patch go bindings --- bindings/go/main.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bindings/go/main.go b/bindings/go/main.go -index bdd5385..155fc81 100644 +index bf344a1..4f1c0f4 100644 --- a/bindings/go/main.go +++ b/bindings/go/main.go @@ -2,7 +2,15 @@ package ckzg4844 @@ -29,8 +29,8 @@ index bdd5385..155fc81 100644 import ( @@ -11,9 +19,6 @@ import ( + "errors" "fmt" - "strings" "unsafe" - - // So its functions are available during compilation. @@ -39,5 +39,5 @@ index bdd5385..155fc81 100644 const ( -- -2.34.1 +2.36.2.windows.1 diff --git a/constantine/nim.patch b/constantine/nim.patch index 86f3ca5db..c501b162d 100644 --- a/constantine/nim.patch +++ b/constantine/nim.patch @@ -1,6 +1,6 @@ -From f34d21606bb5bc3dee4e7a643d7ab89a2c994fef Mon Sep 17 00:00:00 2001 +From 118b0f6c3f9bd5e7335129eea28c713b8b2856dd Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:26:35 +0200 +Date: Thu, 16 May 2024 13:29:29 +0300 Subject: [PATCH] Patch nim bindings --- @@ -8,7 +8,7 @@ Subject: [PATCH] Patch nim bindings 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bindings/nim/kzg_abi.nim b/bindings/nim/kzg_abi.nim -index 36e4ba1..74d0ebc 100644 +index 9162588..529e09a 100644 --- a/bindings/nim/kzg_abi.nim +++ b/bindings/nim/kzg_abi.nim @@ -10,6 +10,7 @@ from os import DirSep, AltSep @@ -28,8 +28,8 @@ index 36e4ba1..74d0ebc 100644 +{.passl: "-l:rust_kzg_constantine.a" .} +{.passl: "-lm" .} - {.passc: "-I" & bindingsPath .} - {.passc: "-I" & srcPath .} + {.passc: "-I" & escape(bindingsPath) .} + {.passc: "-I" & escape(srcPath) .} -- -2.34.1 +2.36.2.windows.1 diff --git a/constantine/nodejs.patch b/constantine/nodejs.patch index 1cf0e3dce..2a1c5fc5b 100644 --- a/constantine/nodejs.patch +++ b/constantine/nodejs.patch @@ -1,27 +1,14 @@ -From 954c55533e265f32eabe0dc863b1add2478bb570 Mon Sep 17 00:00:00 2001 +From cb0c44c9df8a7a6a92ed5b4f1acb771532812257 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:02:51 +0300 -Subject: [PATCH] Patch nodejs binding +Date: Thu, 16 May 2024 14:19:08 +0300 +Subject: [PATCH] Patch nodejs bindings --- - bindings/node.js/Makefile | 1 - - bindings/node.js/binding.gyp | 31 +++---------------------------- - 2 files changed, 3 insertions(+), 29 deletions(-) + bindings/node.js/binding.gyp | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) -diff --git a/bindings/node.js/Makefile b/bindings/node.js/Makefile -index 17850ec..efc9961 100644 ---- a/bindings/node.js/Makefile -+++ b/bindings/node.js/Makefile -@@ -31,7 +31,6 @@ build: install clean - @# Prepare the dependencies directory - @mkdir -p deps/c-kzg - @cp -r ../../blst deps -- @cp ../../src/c_kzg_4844.c deps/c-kzg - @cp ../../src/c_kzg_4844.h deps/c-kzg - @# Build the bindings - @$(YARN) node-gyp --loglevel=warn configure diff --git a/bindings/node.js/binding.gyp b/bindings/node.js/binding.gyp -index 5ac368e..6cde37f 100644 +index c42bb8f..e781e61 100644 --- a/bindings/node.js/binding.gyp +++ b/bindings/node.js/binding.gyp @@ -3,9 +3,7 @@ @@ -35,40 +22,27 @@ index 5ac368e..6cde37f 100644 ], "include_dirs": [ "<(module_root_dir)/deps/blst/bindings", -@@ -16,31 +14,8 @@ +@@ -16,9 +14,11 @@ "__BLST_PORTABLE__", - "NAPI_DISABLE_CPP_EXCEPTIONS" + "NAPI_CPP_EXCEPTIONS" ], -- "conditions": [ -- ["OS!='win'", { -- "sources": ["deps/blst/build/assembly.S"], -- "cflags_cc": [ -- "-std=c++17", -- "-fPIC" -- ] -- }], -- ["OS=='win'", { -- "sources": ["deps/blst/build/win64/*-x86_64.asm"], -- "defines": [ -- "_CRT_SECURE_NO_WARNINGS", -- ], -- "msbuild_settings": { -- "ClCompile": { -- "AdditionalOptions": ["/std:c++17"] -- } -- } -- }], -- ["OS=='mac'", { -- "xcode_settings": { -- "CLANG_CXX_LIBRARY": "libc++", -- "MACOSX_DEPLOYMENT_TARGET": "13.0" -- } -- }] + "libraries": [ + "<(module_root_dir)/../../../../target/release/rust_kzg_constantine.a" - ] - } - ] ++ ], + "conditions": [ + ["OS!='win'", { +- "sources": ["deps/blst/build/assembly.S"], + "cflags_cc": [ + "-fexceptions", + "-std=c++17", +@@ -26,7 +26,6 @@ + ] + }], + ["OS=='win'", { +- "sources": ["deps/blst/build/win64/*-x86_64.asm"], + "defines": [ + "_CRT_SECURE_NO_WARNINGS", + "_HAS_EXCEPTIONS=1" -- -2.34.1 +2.36.2.windows.1 diff --git a/constantine/python.patch b/constantine/python.patch index c9ab361f1..abef42c3f 100644 --- a/constantine/python.patch +++ b/constantine/python.patch @@ -1,48 +1,30 @@ -From a8ff3fe1e4372380f15769bbb8490b0089aa2928 Mon Sep 17 00:00:00 2001 +From 57a93a8db7319a368a25d470aa074e3af5ecb4b6 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 13:51:37 +0300 -Subject: [PATCH] Patch python binding +Date: Thu, 16 May 2024 12:56:53 +0300 +Subject: [PATCH] Patch python bindings --- - bindings/python/Makefile | 5 +---- - bindings/python/setup.py | 6 +++--- - 2 files changed, 4 insertions(+), 7 deletions(-) + setup.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -diff --git a/bindings/python/Makefile b/bindings/python/Makefile -index c6bd222..99d6501 100644 ---- a/bindings/python/Makefile -+++ b/bindings/python/Makefile -@@ -1,11 +1,8 @@ - .PHONY: all - all: install test - --../../src/c_kzg_4844.o: -- make -C../../src c_kzg_4844.o -- - .PHONY: install --install: setup.py ckzg.c ../../src/c_kzg_4844.o -+install: setup.py ckzg.c - python3 setup.py install - - .PHONY: test -diff --git a/bindings/python/setup.py b/bindings/python/setup.py -index b072833..db37db4 100644 ---- a/bindings/python/setup.py -+++ b/bindings/python/setup.py -@@ -8,10 +8,10 @@ def main(): +diff --git a/setup.py b/setup.py +index 42d4c36..f982863 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,10 +35,10 @@ def main(): ext_modules=[ Extension( "ckzg", -- sources=["ckzg.c", "../../src/c_kzg_4844.c"], -+ sources=["ckzg.c"], - include_dirs=["../../inc", "../../src"], -- library_dirs=["../../lib"], -- libraries=["blst"])]) -+ library_dirs=["../../lib", "../../../../target/release"], -+ libraries=[":rust_kzg_constantine.a"])]) - - if __name__ == "__main__": - main() +- sources=["bindings/python/ckzg.c", "src/c_kzg_4844.c"], ++ sources=["bindings/python/ckzg.c"], + include_dirs=["inc", "src"], +- library_dirs=["lib"], +- libraries=["blst"] ++ library_dirs=["lib", "../../target/release"], ++ libraries=[":rust_kzg_constantine.a"] + ) + ], + cmdclass={ -- -2.34.1 +2.36.2.windows.1 diff --git a/constantine/rust.patch b/constantine/rust.patch index 63c5a2f98..25eb4ab55 100644 --- a/constantine/rust.patch +++ b/constantine/rust.patch @@ -1,30 +1,36 @@ -From e7d529a9ba017de920555ae9b4ab05a18174cdcf Mon Sep 17 00:00:00 2001 +From de2366bc220f4773271f54b040bb81c297edab1a Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:42:12 +0200 +Date: Sat, 6 Jul 2024 16:06:23 +0300 Subject: [PATCH] Patch rust bindings --- - bindings/rust/Cargo.toml | 1 + - bindings/rust/build.rs | 22 +++------------------- - 2 files changed, 4 insertions(+), 19 deletions(-) + Cargo.toml | 1 + + bindings/rust/build.rs | 41 +++-------------------------------------- + 2 files changed, 4 insertions(+), 38 deletions(-) -diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml -index 98bd814..9391f27 100644 ---- a/bindings/rust/Cargo.toml -+++ b/bindings/rust/Cargo.toml +diff --git a/Cargo.toml b/Cargo.toml +index f355f8c..7be1795 100644 +--- a/Cargo.toml ++++ b/Cargo.toml @@ -1,3 +1,4 @@ +[workspace] [package] name = "c-kzg" - version = "0.1.0" + version = "1.0.2" diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs -index 5148333..ec42e21 100644 +index cd07487..0e9d7f6 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs -@@ -15,24 +15,7 @@ fn main() { - - let c_src_dir = root_dir.join("src"); +@@ -3,46 +3,11 @@ use std::{env, path::PathBuf}; + fn main() { + let root_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); +- // Obtain the header files of blst +- let blst_base_dir = root_dir.join("blst"); +- let blst_headers_dir = blst_base_dir.join("bindings"); +- +- let c_src_dir = root_dir.join("src"); +- - let mut cc = cc::Build::new(); - - #[cfg(all(windows, target_env = "msvc"))] @@ -41,22 +47,30 @@ index 5148333..ec42e21 100644 - cc.include(blst_headers_dir.clone()); - cc.warnings(false); - cc.file(c_src_dir.join("c_kzg_4844.c")); +- #[cfg(not(debug_assertions))] +- cc.define("NDEBUG", None); - - cc.try_compile("ckzg").expect("Failed to compile ckzg"); +- +- #[cfg(feature = "generate-bindings")] +- { +- let header_path = c_src_dir.join("c_kzg_4844.h"); +- let bindings_out_path = root_dir.join("bindings/rust/src/bindings/generated.rs"); +- make_bindings( +- header_path.to_str().expect("valid header path"), +- blst_headers_dir.to_str().expect("valid blst header path"), +- &bindings_out_path, +- ); +- } + let rust_kzg_target_dir = root_dir.join("../../target/release/"); - let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); - let bindings_out_path = out_dir.join("generated.rs"); -@@ -46,7 +29,8 @@ fn main() { - ); - // Finally, tell cargo this provides ckzg/ckzg_min - println!("cargo:rustc-link-lib=ckzg"); + println!("cargo:rustc-link-search={}", rust_kzg_target_dir.display()); + println!("cargo:rustc-link-arg=-l:rust_kzg_constantine.a"); } - fn make_bindings

(header_path: &str, blst_headers_dir: &str, bindings_out_path: P) + #[cfg(feature = "generate-bindings")] -- -2.34.1 +2.45.2.windows.1 diff --git a/constantine/src/types/fp.rs b/constantine/src/types/fp.rs index ac66b3acf..aef809279 100644 --- a/constantine/src/types/fp.rs +++ b/constantine/src/types/fp.rs @@ -20,29 +20,37 @@ impl Debug for CtFp { } impl G1Fp for CtFp { - const ONE: Self = Self(bls12_381_fp { - limbs: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }); - const ZERO: Self = Self(bls12_381_fp { - limbs: [0, 0, 0, 0, 0, 0], - }); - const BLS12_381_RX_P: Self = Self(bls12_381_fp { - limbs: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }); + fn one() -> Self { + Self(bls12_381_fp { + limbs: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }) + } + + fn zero() -> Self { + Self(bls12_381_fp { + limbs: [0, 0, 0, 0, 0, 0], + }) + } + + fn bls12_381_rx_p() -> Self { + Self(bls12_381_fp { + limbs: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }) + } fn inverse(&self) -> Option { let mut out: Self = *self; diff --git a/constantine/src/types/g1.rs b/constantine/src/types/g1.rs index b6f191338..a7dbfb02a 100644 --- a/constantine/src/types/g1.rs +++ b/constantine/src/types/g1.rs @@ -198,29 +198,31 @@ impl G1 for CtG1 { unsafe { constantine::ctt_bls12_381_g1_jac_is_eq(&self.0, &b.0) != 0 } } - const ZERO: Self = CtG1::from_xyz( - bls12_381_fp { - limbs: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }, - bls12_381_fp { - limbs: [ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ], - }, - bls12_381_fp { limbs: [0; 6] }, - ); + fn zero() -> Self { + CtG1::from_xyz( + bls12_381_fp { + limbs: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + bls12_381_fp { + limbs: [ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ], + }, + bls12_381_fp { limbs: [0; 6] }, + ) + } fn add_or_dbl_assign(&mut self, b: &Self) { unsafe { diff --git a/images/blob_to_kzg_commitment.jpg b/images/blob_to_kzg_commitment.jpg new file mode 100644 index 000000000..8c6120492 Binary files /dev/null and b/images/blob_to_kzg_commitment.jpg differ diff --git a/images/blob_to_kzg_commitment.png b/images/blob_to_kzg_commitment.png deleted file mode 100644 index 175b68719..000000000 Binary files a/images/blob_to_kzg_commitment.png and /dev/null differ diff --git a/images/compute_blob_kzg_proof.jpg b/images/compute_blob_kzg_proof.jpg new file mode 100644 index 000000000..54fc807f0 Binary files /dev/null and b/images/compute_blob_kzg_proof.jpg differ diff --git a/images/compute_blob_kzg_proof.png b/images/compute_blob_kzg_proof.png deleted file mode 100644 index a9affa342..000000000 Binary files a/images/compute_blob_kzg_proof.png and /dev/null differ diff --git a/images/compute_kzg_proof.jpg b/images/compute_kzg_proof.jpg new file mode 100644 index 000000000..ccc305598 Binary files /dev/null and b/images/compute_kzg_proof.jpg differ diff --git a/images/compute_kzg_proof.png b/images/compute_kzg_proof.png deleted file mode 100644 index 910e9f09d..000000000 Binary files a/images/compute_kzg_proof.png and /dev/null differ diff --git a/images/cuda_blob_to_kzg_commitment.jpg b/images/cuda_blob_to_kzg_commitment.jpg new file mode 100644 index 000000000..57deb5555 Binary files /dev/null and b/images/cuda_blob_to_kzg_commitment.jpg differ diff --git a/images/cuda_compute_blob_kzg_proof.jpg b/images/cuda_compute_blob_kzg_proof.jpg new file mode 100644 index 000000000..438542b50 Binary files /dev/null and b/images/cuda_compute_blob_kzg_proof.jpg differ diff --git a/images/cuda_compute_kzg_proof.jpg b/images/cuda_compute_kzg_proof.jpg new file mode 100644 index 000000000..544d813f4 Binary files /dev/null and b/images/cuda_compute_kzg_proof.jpg differ diff --git a/images/cuda_msm.jpg b/images/cuda_msm.jpg new file mode 100644 index 000000000..abd6fd7be Binary files /dev/null and b/images/cuda_msm.jpg differ diff --git a/images/fft.jpg b/images/fft.jpg new file mode 100644 index 000000000..8656bf97f Binary files /dev/null and b/images/fft.jpg differ diff --git a/images/fft.png b/images/fft.png deleted file mode 100644 index dce46e1f8..000000000 Binary files a/images/fft.png and /dev/null differ diff --git a/images/multi_scalar_multiplication.jpg b/images/multi_scalar_multiplication.jpg new file mode 100644 index 000000000..12c629649 Binary files /dev/null and b/images/multi_scalar_multiplication.jpg differ diff --git a/images/multi_scalar_multiplication.png b/images/multi_scalar_multiplication.png deleted file mode 100644 index 226beb1cb..000000000 Binary files a/images/multi_scalar_multiplication.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof.jpg b/images/verify_blob_kzg_proof.jpg new file mode 100644 index 000000000..d0ff5d5c2 Binary files /dev/null and b/images/verify_blob_kzg_proof.jpg differ diff --git a/images/verify_blob_kzg_proof.png b/images/verify_blob_kzg_proof.png deleted file mode 100644 index 2164e0835..000000000 Binary files a/images/verify_blob_kzg_proof.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof_batch_1.jpg b/images/verify_blob_kzg_proof_batch_1.jpg new file mode 100644 index 000000000..74dccb068 Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_1.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_1.png b/images/verify_blob_kzg_proof_batch_1.png deleted file mode 100644 index 387a600eb..000000000 Binary files a/images/verify_blob_kzg_proof_batch_1.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof_batch_16.jpg b/images/verify_blob_kzg_proof_batch_16.jpg new file mode 100644 index 000000000..97008d76b Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_16.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_16.png b/images/verify_blob_kzg_proof_batch_16.png deleted file mode 100644 index af4f3f64d..000000000 Binary files a/images/verify_blob_kzg_proof_batch_16.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof_batch_2.jpg b/images/verify_blob_kzg_proof_batch_2.jpg new file mode 100644 index 000000000..7e011f5cd Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_2.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_2.png b/images/verify_blob_kzg_proof_batch_2.png deleted file mode 100644 index d8c63a08a..000000000 Binary files a/images/verify_blob_kzg_proof_batch_2.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof_batch_32.jpg b/images/verify_blob_kzg_proof_batch_32.jpg new file mode 100644 index 000000000..0330d0485 Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_32.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_32.png b/images/verify_blob_kzg_proof_batch_32.png deleted file mode 100644 index 1337ccbbf..000000000 Binary files a/images/verify_blob_kzg_proof_batch_32.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof_batch_4.jpg b/images/verify_blob_kzg_proof_batch_4.jpg new file mode 100644 index 000000000..a71e6a029 Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_4.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_4.png b/images/verify_blob_kzg_proof_batch_4.png deleted file mode 100644 index 5ae0f042b..000000000 Binary files a/images/verify_blob_kzg_proof_batch_4.png and /dev/null differ diff --git a/images/verify_blob_kzg_proof_batch_64.jpg b/images/verify_blob_kzg_proof_batch_64.jpg new file mode 100644 index 000000000..65139c96d Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_64.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_8.jpg b/images/verify_blob_kzg_proof_batch_8.jpg new file mode 100644 index 000000000..06996ceb0 Binary files /dev/null and b/images/verify_blob_kzg_proof_batch_8.jpg differ diff --git a/images/verify_blob_kzg_proof_batch_8.png b/images/verify_blob_kzg_proof_batch_8.png deleted file mode 100644 index a2ba3f2bf..000000000 Binary files a/images/verify_blob_kzg_proof_batch_8.png and /dev/null differ diff --git a/images/verify_kzg_proof.jpg b/images/verify_kzg_proof.jpg new file mode 100644 index 000000000..10d9b52b2 Binary files /dev/null and b/images/verify_kzg_proof.jpg differ diff --git a/images/verify_kzg_proof.png b/images/verify_kzg_proof.png deleted file mode 100644 index 2000b150f..000000000 Binary files a/images/verify_kzg_proof.png and /dev/null differ diff --git a/kzg-bench/src/benches/lincomb.rs b/kzg-bench/src/benches/lincomb.rs index 0a9347e54..325984c24 100644 --- a/kzg-bench/src/benches/lincomb.rs +++ b/kzg-bench/src/benches/lincomb.rs @@ -20,12 +20,17 @@ pub fn bench_g1_lincomb< Option<&PrecomputationTable>, ), ) { - const NUM_POINTS: usize = 4096; + let npoints_npow = &std::env::var("BENCH_NPOW") + .unwrap_or("12".to_string()) + .parse::() + .unwrap(); + let num_points = 1usize << npoints_npow; - let points = [TG1::rand(); NUM_POINTS]; - let scalars = [TFr::rand(); NUM_POINTS]; + let points = (0..num_points).map(|_| TG1::rand()).collect::>(); + let scalars = (0..num_points).map(|_| TFr::rand()).collect::>(); + + let id = format!("bench_g1_lincomb points: '{}'", num_points); - let id = format!("bench_g1_lincomb points: '{}'", NUM_POINTS); c.bench_function(&id, |b| { b.iter(|| { let mut out = TG1::default(); @@ -33,7 +38,7 @@ pub fn bench_g1_lincomb< &mut out, points.as_slice(), scalars.as_slice(), - NUM_POINTS, + num_points, None, ) }) @@ -44,7 +49,7 @@ pub fn bench_g1_lincomb< if precomputation.is_some() { let id = format!( "bench_g1_lincomb with precomputation points: '{}'", - NUM_POINTS + num_points ); c.bench_function(&id, |b| { b.iter(|| { @@ -53,7 +58,7 @@ pub fn bench_g1_lincomb< &mut out, points.as_slice(), scalars.as_slice(), - NUM_POINTS, + num_points, precomputation.as_ref(), ) }) diff --git a/kzg-bench/src/tests/eip_4844.rs b/kzg-bench/src/tests/eip_4844.rs index f88991c07..5510a6859 100644 --- a/kzg-bench/src/tests/eip_4844.rs +++ b/kzg-bench/src/tests/eip_4844.rs @@ -702,7 +702,11 @@ pub fn test_vectors_compute_blob_kzg_proof< .get_output_bytes() .and_then(|commitment_bytes| TG1::from_bytes(&commitment_bytes).ok()); - assert!(proof.equals(&expected_commitment.unwrap_or_default())); + assert!( + expected_commitment.is_some(), + "Expected that `compute_blob_kzg_proof` would throw an error, but it succeeded" + ); + assert_eq!(proof, expected_commitment.unwrap()); } Err(_) => { assert!(test.get_output_bytes().is_none()); diff --git a/kzg/Cargo.toml b/kzg/Cargo.toml index ad5fb2524..2deab6d5c 100644 --- a/kzg/Cargo.toml +++ b/kzg/Cargo.toml @@ -29,3 +29,4 @@ std = [ rand = [] arkmsm = [] bgmw = [] +sppark = [] diff --git a/kzg/src/lib.rs b/kzg/src/lib.rs index 3f546fd84..fb9a1a4e5 100644 --- a/kzg/src/lib.rs +++ b/kzg/src/lib.rs @@ -71,7 +71,7 @@ pub trait Fr: Default + Clone + PartialEq + Sync { } pub trait G1: Clone + Default + PartialEq + Sync + Debug + Send { - const ZERO: Self; + fn zero() -> Self; fn identity() -> Self; @@ -147,13 +147,16 @@ pub trait G1LinComb>: } pub trait G1Fp: Clone + Default + Sync + Copy + PartialEq + Debug + Send { - const ZERO: Self; - const ONE: Self; - const BLS12_381_RX_P: Self; + fn zero() -> Self; + + fn one() -> Self; + + fn bls12_381_rx_p() -> Self; fn inverse(&self) -> Option; fn square(&self) -> Self; + fn double(&self) -> Self; fn from_underlying_arr(arr: &[u64; 6]) -> Self; @@ -187,19 +190,19 @@ pub trait G1Fp: Clone + Default + Sync + Copy + PartialEq + Debug + Send { } fn is_zero(&self) -> bool { - *self == Self::ZERO + *self == Self::zero() } fn set_zero(&mut self) { - *self = Self::ZERO; + *self = Self::zero(); } fn is_one(&self) -> bool { - *self == Self::ONE + *self == Self::one() } fn set_one(&mut self) { - *self = Self::ONE; + *self = Self::one(); } } diff --git a/kzg/src/msm/arkmsm/batch_adder.rs b/kzg/src/msm/arkmsm/batch_adder.rs index f7843417b..63527d176 100644 --- a/kzg/src/msm/arkmsm/batch_adder.rs +++ b/kzg/src/msm/arkmsm/batch_adder.rs @@ -19,8 +19,8 @@ where { pub fn new(max_batch_cnt: usize) -> Self { BatchAdder { - inverse_state: TFp::ONE, - inverses: vec![TFp::ONE; max_batch_cnt], + inverse_state: TFp::one(), + inverses: vec![TFp::one(); max_batch_cnt], phantom_g1: PhantomData, phantom_affine: PhantomData, } diff --git a/kzg/src/msm/arkmsm/bucket_msm.rs b/kzg/src/msm/arkmsm/bucket_msm.rs index d44bab81f..1823ac416 100644 --- a/kzg/src/msm/arkmsm/bucket_msm.rs +++ b/kzg/src/msm/arkmsm/bucket_msm.rs @@ -294,7 +294,7 @@ impl< } fn calc_running_sum_total(&self, running_sums: &[TG1Affine]) -> TG1 { - let mut running_sum_total = TG1::ZERO; + let mut running_sum_total = TG1::zero(); for (i, running_sum) in running_sums.iter().enumerate().skip(1) { for _ in 0..i { TProjAddAffine::add_or_double_assign_affine(&mut running_sum_total, running_sum); @@ -308,7 +308,7 @@ impl< } fn calc_sum_of_sum_total(&self, sum_of_sums: &[TG1Affine]) -> TG1 { - let mut sum = TG1::ZERO; + let mut sum = TG1::zero(); sum_of_sums .iter() .for_each(|p| TProjAddAffine::add_or_double_assign_affine(&mut sum, p)); @@ -322,7 +322,7 @@ impl< &window_sums[1..] .iter() .rev() - .fold(TG1::ZERO, |mut total, sum_i| { + .fold(TG1::zero(), |mut total, sum_i| { total.add_assign(sum_i); for _ in 0..self.window_bits { total.dbl_assign(); diff --git a/kzg/src/msm/bgmw.rs b/kzg/src/msm/bgmw.rs index 29fbfcb18..d4ea64296 100644 --- a/kzg/src/msm/bgmw.rs +++ b/kzg/src/msm/bgmw.rs @@ -3,8 +3,8 @@ use core::marker::PhantomData; use crate::{Fr, G1Affine, G1Fp, G1GetFp, G1Mul, Scalar256, G1}; use super::pippenger_utils::{ - booth_decode, booth_encode, get_wval_limb, is_zero, p1_dadd, p1_to_jacobian, - pippenger_window_size, type_is_zero, P1XYZZ, + booth_decode, booth_encode, get_wval_limb, is_zero, num_bits, p1_dadd, p1_to_jacobian, + type_is_zero, P1XYZZ, }; #[derive(Debug, Clone)] @@ -78,6 +78,84 @@ const fn get_sequential_window_size(window: BgmwWindow) -> usize { } } +/// Function, which approximates minimum of this function: +/// y = ceil(255/w) * (npoints) + 2^w - 2 +/// This function is number of additions and doublings required to compute msm using Pippenger algorithm, with BGMW +/// precomputation table. +/// Parts of this function: +/// ceil(255/w) - how many parts will be in decomposed scalar. Scalar width is 255 bits, so converting it into q-ary +/// representation, will produce 255/w parts. q-ary representation, where q = 2^w, for scalar a is: +/// a = a_1 + a_2 * q + ... + a_n * q^(ceil(255/w)). +/// npoints - each scalar must be assigned to a bucket (bucket accumulation). Assigning point to bucket means +/// adding it to existing point in bucket - hence, the addition. +/// 2^w - 2 - computing total bucket sum (bucket aggregation). Total number of buckets (scratch size) is 2^(w-1). +/// Adding each point to total bucket sum requires 2 point addition operations, so 2 * 2^(w-1) = 2^w. +#[allow(unused)] +const fn bgmw_window_size(npoints: usize) -> usize { + let wbits = num_bits(npoints); + + match (wbits) { + 1 => 4, + 2..=3 => 5, + 4 => 6, + 5 => 7, + 6..=7 => 8, + 8 => 9, + 9..=10 => 10, + 11 => 11, + 12 => 12, + 13..=14 => 13, + 15..=16 => 15, + 17 => 16, + 18..=19 => 17, + 20 => 19, + 21..=22 => 20, + 23..=24 => 22, + 25..=26 => 24, + 27..=29 => 26, + 30..=32 => 29, + 33..=37 => 32, + _ => 37, + } +} + +#[cfg(feature = "parallel")] +const fn bgmw_parallel_window_size(npoints: usize, ncpus: usize) -> (usize, usize, usize) { + let mut min_ops = usize::MAX; + let mut opt = 0; + + let mut win = 2; + while win <= 40 { + let ops = (1 << win) + ((((255 + win - 1) / win) + ncpus - 1) / ncpus * npoints) - 2; + if min_ops >= ops { + min_ops = ops; + opt = win; + } + win += 1; + } + + let mut mult = 1; + + let mut opt_x = 1; + + while mult <= 8 { + let nx = ncpus * mult; + let wnd = bgmw_window_size(npoints / nx); + + let ops = mult * ((255 + wnd - 1) / wnd) * ((npoints + nx - 1) / nx) + (1 << wnd) - 2; + + if min_ops > ops { + min_ops = ops; + opt = wnd; + opt_x = nx; + } + + mult += 1; + } + + (opt_x, (255 + opt - 1) / opt, opt) +} + impl< TFr: Fr, TG1Fp: G1Fp, @@ -120,7 +198,9 @@ impl< })) } - pub fn multiply_sequential(&self, scalars: &[Scalar256]) -> TG1 { + pub fn multiply_sequential(&self, scalars: &[TFr]) -> TG1 { + let scalars = scalars.iter().map(TFr::to_scalar).collect::>(); + let scalars = &scalars[..]; let window = get_sequential_window_size(self.window); let mut buckets = vec![P1XYZZ::::default(); 1 << (window - 1)]; @@ -165,7 +245,7 @@ impl< } #[cfg(feature = "parallel")] - pub fn multiply_parallel(&self, scalars: &[Scalar256]) -> TG1 { + pub fn multiply_parallel(&self, scalars: &[TFr]) -> TG1 { use super::{ cell::Cell, thread_pool::{da_pool, ThreadPoolExt}, @@ -189,6 +269,9 @@ impl< BgmwWindow::Parallel(values) => values, }; + let scalars = scalars.iter().map(TFr::to_scalar).collect::>(); + let scalars = &scalars[..]; + // |grid[]| holds "coordinates" and place for result let mut grid: Vec<(Tile, Cell)> = Vec::with_capacity(nx * ny); #[allow(clippy::uninit_vec)] @@ -267,7 +350,7 @@ impl< (window, window) }; - p1_tile_bgmw(points, &scalars[x..], &mut buckets, y, wbits, cbits); + p1_tile_bgmw(points, &scalars[x..(x + dx)], &mut buckets, y, wbits, cbits); } }); } @@ -284,28 +367,21 @@ impl< fn window(npoints: usize) -> BgmwWindow { #[cfg(feature = "parallel")] { - let default_window = pippenger_window_size(npoints); - - use super::{parallel_pippenger_utils::breakdown, thread_pool::da_pool}; + use super::thread_pool::da_pool; let pool = da_pool(); let ncpus = pool.max_count(); - if npoints > 32 && ncpus > 2 { - BgmwWindow::Parallel(breakdown(default_window, ncpus)) + + if npoints >= 32 && ncpus >= 2 { + BgmwWindow::Parallel(bgmw_parallel_window_size(npoints, ncpus)) } else { - BgmwWindow::Sync(default_window) + BgmwWindow::Sync(bgmw_window_size(npoints)) } } #[cfg(not(feature = "parallel"))] { - let n_exponent = npoints.trailing_zeros(); - - // TODO: experiment with different q exponents, to find optimal - match n_exponent { - 12 => 13, // this value is picked from https://github.com/LuoGuiwen/MSM_blst/blob/2e098f09f07969ac3191406976be6d1c197100f2/ches_config_files/config_file_n_exp_12.h#L17 - _ => pippenger_window_size(npoints), // default to pippenger window size. This is not optimal window size, but still better than simple pippenger - } + bgmw_window_size(npoints) } } } diff --git a/kzg/src/msm/mod.rs b/kzg/src/msm/mod.rs index 9167c71e3..be25b52a7 100644 --- a/kzg/src/msm/mod.rs +++ b/kzg/src/msm/mod.rs @@ -13,5 +13,8 @@ pub mod types; mod parallel_pippenger_utils; mod pippenger_utils; -#[cfg(all(feature = "bgmw", any(not(feature = "arkmsm"), feature = "parallel")))] +#[cfg(feature = "bgmw")] mod bgmw; + +#[cfg(feature = "sppark")] +mod sppark; diff --git a/kzg/src/msm/msm_impls.rs b/kzg/src/msm/msm_impls.rs index d44a0348a..425f9f07e 100644 --- a/kzg/src/msm/msm_impls.rs +++ b/kzg/src/msm/msm_impls.rs @@ -1,4 +1,4 @@ -use crate::{Fr, G1Affine, G1Fp, G1GetFp, G1Mul, G1ProjAddAffine, Scalar256, G1}; +use crate::{Fr, G1Affine, G1Fp, G1GetFp, G1Mul, G1ProjAddAffine, G1}; use alloc::vec::Vec; #[cfg(all(feature = "arkmsm", not(feature = "parallel")))] @@ -18,14 +18,16 @@ fn msm_parallel< TG1Fp: G1Fp, TG1Affine: G1Affine, >( - points: &[TG1Affine], - scalars: &[Scalar256], + points: &[TG1], + scalars: &[TFr], precomputation: Option<&PrecomputationTable>, ) -> TG1 { if let Some(precomputation) = precomputation { precomputation.multiply_parallel(scalars) } else { - tiling_parallel_pippenger(points, scalars) + let points = batch_convert::(points); + let scalars = scalars.iter().map(TFr::to_scalar).collect::>(); + tiling_parallel_pippenger(&points, &scalars) } } @@ -39,8 +41,8 @@ fn msm_sequential< TG1Affine: G1Affine, TProjAddAffine: G1ProjAddAffine, >( - points: &[TG1Affine], - scalars: &[Scalar256], + points: &[TG1], + scalars: &[TFr], precomputation: Option<&PrecomputationTable>, ) -> TG1 { #[cfg(not(feature = "arkmsm"))] @@ -49,17 +51,23 @@ fn msm_sequential< if let Some(precomputation) = precomputation { precomputation.multiply_sequential(scalars) } else { - tiling_pippenger(points, scalars) + let points = batch_convert::(points); + let scalars = scalars.iter().map(TFr::to_scalar).collect::>(); + tiling_pippenger(&points, &scalars) } } #[cfg(feature = "arkmsm")] { - VariableBaseMSM::multi_scalar_mul::(points, scalars) + let points = batch_convert::(points); + let scalars = scalars.iter().map(TFr::to_scalar).collect::>(); + VariableBaseMSM::multi_scalar_mul::( + &points, &scalars, + ) } } -fn batch_convert + Sized>( +pub fn batch_convert + Sized>( points: &[TG1], ) -> Vec { #[cfg(feature = "parallel")] @@ -91,19 +99,17 @@ pub fn msm< return out; } - let points = batch_convert::(&points[0..len]); - let scalars = scalars[0..len] - .iter() - .map(TFr::to_scalar) - .collect::>(); - #[cfg(feature = "parallel")] - return msm_parallel::(&points, &scalars, precomputation); + return msm_parallel::( + &points[0..len], + &scalars[0..len], + precomputation, + ); #[cfg(not(feature = "parallel"))] return msm_sequential::( - &points, - &scalars, + &points[0..len], + &scalars[0..len], precomputation, ); } diff --git a/kzg/src/msm/pippenger_utils.rs b/kzg/src/msm/pippenger_utils.rs index e8b3dd706..c0d4f5504 100644 --- a/kzg/src/msm/pippenger_utils.rs +++ b/kzg/src/msm/pippenger_utils.rs @@ -101,12 +101,12 @@ fn p1_dadd_affine>( 2 * size_of::(), ); - out.zzz = TFp::BLS12_381_RX_P; + out.zzz = TFp::bls12_381_rx_p(); if subtract { out.zzz.neg_assign(); } - out.zz = TFp::BLS12_381_RX_P; + out.zz = TFp::bls12_381_rx_p(); return; } @@ -284,6 +284,19 @@ pub const fn num_bits(l: usize) -> usize { 8 * core::mem::size_of::() - l.leading_zeros() as usize } +/// Function, which approximates minimum of this function: +/// y = ceil(255/w) * (npoints + 2^w + w + 1) +/// This function is number of additions and doublings required to compute msm using Pippenger algorithm. +/// Parts of this function: +/// ceil(255/w) - how many parts will be in decomposed scalar. Scalar width is 255 bits, so converting it into q-ary +/// representation, will produce 255/w parts. q-ary representation, where q = 2^w, for scalar a is: +/// a = a_1 + a_2 * q + ... + a_n * q^(ceil(255/w)). +/// npoints - each scalar must be assigned to a bucket (bucket accumulation). Assigning point to bucket means +/// adding it to existing point in bucket - hence, the addition. +/// 2^w - computing total bucket sum (bucket aggregation). Total number of buckets (scratch size) is 2^(w-1). +/// Adding each point to total bucket sum requires 2 point addition operations, so 2 * 2^(w-1) = 2^w. +/// w + 1 - each bucket sum must be multiplied by 2^w. To do this, we need w doublings. Adding this sum to the +/// total requires one more point addition, hence +1. pub const fn pippenger_window_size(npoints: usize) -> usize { let wbits = num_bits(npoints); diff --git a/kzg/src/msm/precompute.rs b/kzg/src/msm/precompute.rs index 7eacbf98d..1b29713de 100644 --- a/kzg/src/msm/precompute.rs +++ b/kzg/src/msm/precompute.rs @@ -4,14 +4,22 @@ use alloc::string::String; use crate::{Fr, G1Affine, G1Fp, G1GetFp, G1Mul, G1}; -#[cfg(all(feature = "bgmw", any(not(feature = "arkmsm"), feature = "parallel")))] +#[cfg(any( + all(feature = "arkmsm", feature = "bgmw"), + all(feature = "arkmsm", feature = "sppark"), + all(feature = "bgmw", feature = "sppark") +))] +compile_error!("incompatible features, please select only one: `arkmsm`, `bgmw` or `sppark`"); + +#[cfg(feature = "bgmw")] pub type PrecomputationTable = super::bgmw::BgmwTable; -#[cfg(any( - not(feature = "bgmw"), - all(feature = "arkmsm", not(feature = "parallel")) -))] +#[cfg(feature = "sppark")] +pub type PrecomputationTable = + super::sppark::SpparkPrecomputation; + +#[cfg(all(not(feature = "bgmw"), not(feature = "sppark")))] #[derive(Debug, Clone)] pub struct EmptyTable where @@ -26,10 +34,7 @@ where g1_affine_marker: core::marker::PhantomData, } -#[cfg(any( - not(feature = "bgmw"), - all(feature = "arkmsm", not(feature = "parallel")) -))] +#[cfg(all(not(feature = "bgmw"), not(feature = "sppark")))] impl EmptyTable where TFr: Fr, @@ -41,20 +46,17 @@ where Ok(None) } - pub fn multiply_sequential(&self, _: &[crate::Scalar256]) -> TG1 { + pub fn multiply_sequential(&self, _: &[TFr]) -> TG1 { panic!("This function must not be called") } #[cfg(feature = "parallel")] - pub fn multiply_parallel(&self, _: &[crate::Scalar256]) -> TG1 { + pub fn multiply_parallel(&self, _: &[TFr]) -> TG1 { panic!("This function must not be called") } } -#[cfg(any( - not(feature = "bgmw"), - all(feature = "arkmsm", not(feature = "parallel")) -))] +#[cfg(all(not(feature = "bgmw"), not(feature = "sppark")))] pub type PrecomputationTable = EmptyTable; pub fn precompute( diff --git a/kzg/src/msm/sppark.rs b/kzg/src/msm/sppark.rs new file mode 100644 index 000000000..75511a708 --- /dev/null +++ b/kzg/src/msm/sppark.rs @@ -0,0 +1,71 @@ +use std::ffi::c_void; + +use crate::{Fr, G1Affine, G1Fp, G1GetFp, G1Mul, G1}; + +#[derive(Debug)] +pub struct SpparkPrecomputation +where + TFr: Fr, + TG1: G1 + G1Mul + G1GetFp, + TG1Fp: G1Fp, + TG1Affine: G1Affine, +{ + // table holds a reference to value, initialized in C land. It should be never dereferenced + pub table: *mut c_void, + + fr_marker: core::marker::PhantomData, + g1_marker: core::marker::PhantomData, + g1_fp_marker: core::marker::PhantomData, + g1_affine_marker: core::marker::PhantomData, +} + +unsafe impl Sync for SpparkPrecomputation +where + TFr: Fr, + TG1: G1 + G1Mul + G1GetFp, + TG1Fp: G1Fp, + TG1Affine: G1Affine, +{ +} + +unsafe impl Send for SpparkPrecomputation +where + TFr: Fr, + TG1: G1 + G1Mul + G1GetFp, + TG1Fp: G1Fp, + TG1Affine: G1Affine, +{ +} + +impl SpparkPrecomputation +where + TFr: Fr, + TG1: G1 + G1Mul + G1GetFp, + TG1Fp: G1Fp, + TG1Affine: G1Affine, +{ + pub fn new(_: &[TG1]) -> Result, String> { + // TODO: currently no trait-based implementation for sppark msm, maybe in future + Ok(None) + } + + pub fn multiply_sequential(&self, _: &[TFr]) -> TG1 { + panic!("This function must not be called") + } + + #[cfg(feature = "parallel")] + pub fn multiply_parallel(&self, _: &[TFr]) -> TG1 { + panic!("This function must not be called") + } + + pub fn from_ptr(table: *mut c_void) -> Self { + Self { + table, + + fr_marker: core::marker::PhantomData::, + g1_marker: core::marker::PhantomData::, + g1_fp_marker: core::marker::PhantomData::, + g1_affine_marker: core::marker::PhantomData::, + } + } +} diff --git a/mcl/kzg-bench/src/shared_tests/bls12_381.rs b/mcl/kzg-bench/src/shared_tests/bls12_381.rs index 200aacd86..76696bc71 100644 --- a/mcl/kzg-bench/src/shared_tests/bls12_381.rs +++ b/mcl/kzg-bench/src/shared_tests/bls12_381.rs @@ -1,5 +1,6 @@ #[cfg(test)] mod tests { + use kzg::common_utils::log_2_byte; use kzg_bench::tests::bls12_381::*; use rust_kzg_mcl::data_types::fr::Fr; use rust_kzg_mcl::data_types::g1::g1_linear_combination; @@ -7,7 +8,6 @@ mod tests { use rust_kzg_mcl::data_types::g2::G2; use rust_kzg_mcl::kzg10::Curve; use rust_kzg_mcl::mcl_methods::init; - use kzg::common_utils::log_2_byte; use rust_kzg_mcl::CurveType; #[test] diff --git a/mcl/kzg/src/fk20_fft.rs b/mcl/kzg/src/fk20_fft.rs index c753b0598..9f03c5cf8 100644 --- a/mcl/kzg/src/fk20_fft.rs +++ b/mcl/kzg/src/fk20_fft.rs @@ -1,4 +1,4 @@ -use kzg::common_utils::{next_pow_of_2, is_power_of_2, reverse_bit_order}; +use kzg::common_utils::{is_power_of_2, next_pow_of_2, reverse_bit_order}; use crate::data_types::{fp::*, fr::*, g1::*}; use std::iter; diff --git a/mcl/kzg/src/zero_poly.rs b/mcl/kzg/src/zero_poly.rs index d7387ca78..31da2c269 100644 --- a/mcl/kzg/src/zero_poly.rs +++ b/mcl/kzg/src/zero_poly.rs @@ -1,8 +1,8 @@ use crate::data_types::fr::Fr; use crate::fk20_fft::FFTSettings; use crate::kzg10::Polynomial; -use std::cmp::min; use kzg::common_utils::{is_power_of_2, next_pow_of_2}; +use std::cmp::min; /// Copy all of the coefficients of polynomial @p p to @p out, padding to length @p p_len with zeros. pub fn pad_poly(new_length: usize, poly: &Polynomial) -> Result, String> { diff --git a/readme.md b/readme.md index 419768362..cd09111b6 100644 --- a/readme.md +++ b/readme.md @@ -6,13 +6,14 @@ The goal is to create a parallelized KZG library for Ethereum Data Sharding (aka Support for multiple backend ECC libraries is implemented via [Traits](https://github.com/sifraitech/kzg/blob/main/kzg/src/lib.rs). Such an approach allows to easy change backend ECC libraries as all the crates shared the same interface (see [benchmarks](https://github.com/sifraitech/kzg/tree/main/kzg-bench/src/benches) and [tests](https://github.com/sifraitech/kzg/tree/main/kzg-bench/src/tests)). The current state of supported backend ECC libraries: -| Backend ECC | FFT/DAS | EIP-4844 (non-parallel) | EIP-4844 (parallel) | [c-kzg-4844](https://github.com/ethereum/c-kzg-4844) drop-in replacement | -| :---: | :---: | :---: | :---: | :---: | -| [blst](https://github.com/supranational/blst) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| [constantine](https://github.com/mratsim/constantine) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| [mcl](https://github.com/herumi/mcl) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | -| [arkworks](https://github.com/arkworks-rs/algebra) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| [zkcrypto](https://github.com/zkcrypto/bls12_381) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| Backend ECC | FFT/DAS | EIP-4844 (non-parallel) | EIP-4844 (parallel) | [c-kzg-4844](https://github.com/ethereum/c-kzg-4844) drop-in replacement | GPU acceleration | +| :---: | :---: | :---: | :---: | :---: | :---: | +| [blst](https://github.com/supranational/blst) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: via [sppark](https://github.com/supranational/sppark) | +| [constantine](https://github.com/mratsim/constantine) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | +| [mcl](https://github.com/herumi/mcl) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | +| [arkworks](https://github.com/arkworks-rs/algebra) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | +| [arkworks3](https://github.com/arkworks-rs/algebra/tree/v0.3.0) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: via [sppark](https://github.com/supranational/sppark) and [wlc_msm](https://github.com/dunkirkturbo/wlc_msm/tree/master) | +| [zkcrypto](https://github.com/zkcrypto/bls12_381) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | # Drop-in replacement for c-kzg-4844 @@ -37,47 +38,84 @@ Benchmarks [run](https://github.com/sifraitech/kzg/blob/main/.github/workflows/b ## Blob to KZG commitment -![blob to kzg commitment](images/blob_to_kzg_commitment.png) +![blob to kzg commitment](images/blob_to_kzg_commitment.jpg) ## Compute KZG proof -![compute kzg proof](images/compute_kzg_proof.png) +![compute kzg proof](images/compute_kzg_proof.jpg) ## Verify KZG proof -![verify kzg proof](images/verify_kzg_proof.png) +![verify kzg proof](images/verify_kzg_proof.jpg) ## Compute blob KZG proof -![compute blob kzg proof](images/compute_blob_kzg_proof.png) +![compute blob kzg proof](images/compute_blob_kzg_proof.jpg) ## Verify blob KZG proof -![verify blob kzg proof](images/verify_blob_kzg_proof.png) +![verify blob kzg proof](images/verify_blob_kzg_proof.jpg) ## Verify blob KZG proof batch -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_64.png) +![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_64.jpg)

Click to expand (blobs count 32 to 1) -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_32.png) -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_16.png) -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_8.png) -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_4.png) -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_2.png) -![verify blob kzg proof batch count 64](images/verify_blob_kzg_proof_batch_1.png) +## Verify blob KZG proof batch (count 32) + +![verify blob kzg proof batch count 32](images/verify_blob_kzg_proof_batch_32.jpg) + +## Verify blob KZG proof batch (count 16) + +![verify blob kzg proof batch count 16](images/verify_blob_kzg_proof_batch_16.jpg) + +## Verify blob KZG proof batch (count 8) + +![verify blob kzg proof batch count 8](images/verify_blob_kzg_proof_batch_8.jpg) + +## Verify blob KZG proof batch (count 4) + +![verify blob kzg proof batch count 4](images/verify_blob_kzg_proof_batch_4.jpg) + +## Verify blob KZG proof batch (count 2) + +![verify blob kzg proof batch count 2](images/verify_blob_kzg_proof_batch_2.jpg) + +## Verify blob KZG proof batch (count 1) + +![verify blob kzg proof batch count 1](images/verify_blob_kzg_proof_batch_1.jpg)
## Fast Fourier transform (FFT) -![fft fr g1](images/fft.png) +![fft fr g1](images/fft.jpg) ## Multi-scalar multiplication (MSM) -![commit to polynomial](images/multi_scalar_multiplication.png) +![commit to polynomial](images/multi_scalar_multiplication.jpg) + +# GPU acceleration + +GPU-accelerated multi-scalar multiplication is available for `arkworks3` and `blst` backends. + +## Multi-scalar multiplication + +![multi-scalar multiplication](images/cuda_msm.jpg) + +## Blob to KZG commitment + +![blob to KZG commitment](images/cuda_blob_to_kzg_commitment.jpg) + +## Compute KZG proof + +![compute blob KZG proof](images/cuda_compute_kzg_proof.jpg) + +## Compute blob KZG proof + +![compute blob KZG proof](images/cuda_compute_blob_kzg_proof.jpg) # Authors diff --git a/run-benchmarks.py b/run-benchmarks.py new file mode 100644 index 000000000..18f8e9d2f --- /dev/null +++ b/run-benchmarks.py @@ -0,0 +1,56 @@ +import asyncio +from argparse import ArgumentParser + +from aiogram import Bot +from aiogram.client.default import DefaultBotProperties +from aiogram.enums import ParseMode +from aiogram.types import FSInputFile + +import subprocess +import os + +def create_parser() -> ArgumentParser: + parser = ArgumentParser() + parser.add_argument("--token", help="Telegram Bot API Token") + parser.add_argument("--chat-id", type=int, help="Target chat id") + + return parser + +async def main(): + parser = create_parser() + ns = parser.parse_args() + + token = ns.token + chat_id = ns.chat_id + + async with Bot( + token=token, + default=DefaultBotProperties( + parse_mode=ParseMode.HTML, + ), + ) as bot: + await bot.send_message(chat_id=chat_id, text="Script started") + output = subprocess.run("./run-benchmarks.sh > logs.txt 2>&1", shell=True) + async with Bot( + token=token, + default=DefaultBotProperties( + parse_mode=ParseMode.HTML, + ), + ) as bot: + await bot.send_message(chat_id=chat_id, text=f"Benchmarks completed with status code {output.returncode}") + try: + output = FSInputFile(os.path.join(os.path.dirname(__file__), "linode_benchmarks.txt")) + await bot.send_document(chat_id=chat_id, document=output) + except Exception as e: + await bot.send_message(chat_id=chat_id, text=f"Failed to send results") + print(e) + + try: + logs = FSInputFile(os.path.join(os.path.dirname(__file__), "logs.txt")) + await bot.send_document(chat_id=chat_id, document=logs, caption="Logs") + except Exception as e: + await bot.send_message(chat_id=chat_id, text=f"Failed to send logs") + print(e) + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/run-benchmarks.sh b/run-benchmarks.sh index 792b21dcb..79e5a7fde 100644 --- a/run-benchmarks.sh +++ b/run-benchmarks.sh @@ -14,8 +14,12 @@ # This script is designed to be run once and forgotten about. # # 1.2. setup system -# apt -y install htop gcc g++ clang make git mosh golang +# apt -y install htop gcc g++ clang make git mosh golang libgmp-dev llvm python3-full +# python3 -m venv ./venv +# ./venv/bin/pip install aiogram # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +# curl https://nim-lang.org/choosenim/init.sh -sSf | sh +# choosenim 1.6.14 # # 1.3. setup mosh-server # locale-gen en_US.UTF-8 @@ -54,15 +58,15 @@ cargo rustc --release --crate-type=staticlib --features=parallel mv ../target/release/librust_kzg_blst.a ../target/release/rust_kzg_blst.a git clone https://github.com/ethereum/c-kzg-4844.git cd c-kzg-4844 || exit -git -c advice.detachedHead=false checkout 6d21a0ea981b5e1862c7a4603cf22565c8492f9a # TODO: keep this updated +git -c advice.detachedHead=false checkout 1bccee0878ffc80efe8741afdb5793ef9105aa35 # TODO: keep this updated git submodule update --init cd src || exit export CFLAGS="-Ofast -fno-builtin-memcpy -fPIC -Wall -Wextra -Werror" make blst unset CFLAGS cd .. -git apply < ../rust.patch -git apply < ../go.patch +git apply < ../rust.patch || exit +git apply < ../go.patch || exit cd ../.. # 2.3. prepare rust-kzg with mcl backend @@ -78,6 +82,9 @@ cd ../.. # 2.5. prepare go-kzg-4844 git clone https://github.com/crate-crypto/go-kzg-4844 +# 2.6. prepare constantine +git clone https://github.com/mratsim/constantine + for (( i=0; i> ../../../"$paste_file" - cd ../../.. + cd c-kzg-4844 || exit + print_msg "rust binding (c-kzg-4844)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench >> ../"$paste_file" + cd .. + + # 3.3. constantine + cd constantine || exit + print_msg "constantine" ../"$paste_file" + CC=clang taskset --cpu-list "${taskset_cpu_list[$i]}" nimble bench_eth_eip4844_kzg >> ../"$paste_file" + cd .. # rust crates cd rust-kzg || exit # 3.3. rust-kzg with arkworks backend (sequential) print_msg "rust-kzg with arkworks backend (sequential)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml >> ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml --no-default-features --features std,rand >> ../"$paste_file" + + print_msg "rust-kzg with arkworks backend (sequential, arkmsm)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml --no-default-features --features std,rand,arkmsm >> ../"$paste_file" + + print_msg "rust-kzg with arkworks backend (sequential, bgmw)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml --no-default-features --features std,rand,bgmw >> ../"$paste_file" # 3.4. rust-kzg with arkworks backend (parallel) print_msg "rust-kzg with arkworks backend (parallel)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml --features parallel >> ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml --no-default-features --features std,rand,parallel >> ../"$paste_file" + + print_msg "rust-kzg with arkworks backend (parallel, bgmw)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path arkworks/Cargo.toml --no-default-features --features std,rand,parallel,bgmw >> ../"$paste_file" # 3.5. rust-kzg with zkcrypto backend (sequential) print_msg "rust-kzg with zkcrypto backend (sequential)" ../"$paste_file" @@ -117,35 +139,61 @@ do # 3.7. rust-kzg with blst backend (sequential) print_msg "rust-kzg with blst backend (sequential)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml >> ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml --no-default-features --features std,rand >> ../"$paste_file" + + print_msg "rust-kzg with blst backend (sequential, arkmsm)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml --no-default-features --features std,rand,arkmsm >> ../"$paste_file" + + print_msg "rust-kzg with blst backend (sequential, bgmw)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml --no-default-features --features std,rand,bgmw >> ../"$paste_file" # 3.8. rust-kzg with blst backend (parallel) print_msg "rust-kzg with blst backend (parallel)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml --features parallel >> ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml --no-default-features --features std,rand,parallel >> ../"$paste_file" + + print_msg "rust-kzg with blst backend (parallel, bgmw)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path blst/Cargo.toml --no-default-features --features std,rand,parallel,bgmw >> ../"$paste_file" - # 3.9. rust-kzg with mcl backend (sequential) - print_msg "rust-kzg with mcl backend (sequential)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path mcl/kzg-bench/Cargo.toml >> ../"$paste_file" + # 3.9. rust-kzg with mcl backend (sequential) FIXME: mcl benchmarks do not work + #print_msg "rust-kzg with mcl backend (sequential)" ../"$paste_file" + #taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path mcl/kzg-bench/Cargo.toml >> ../"$paste_file" # 3.10. rust-kzg with mcl backend (parallel) - print_msg "rust-kzg with mcl backend (parallel)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path mcl/kzg-bench/Cargo.toml --features rust-kzg-mcl/parallel >> ../"$paste_file" + #print_msg "rust-kzg with mcl backend (parallel)" ../"$paste_file" + #taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path mcl/kzg-bench/Cargo.toml --features rust-kzg-mcl/parallel >> ../"$paste_file" # 3.11. rust-kzg with constantine backend (sequential) print_msg "rust-kzg with constantine backend (sequential)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/kzg-bench/Cargo.toml >> ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand >> ../"$paste_file" + + print_msg "rust-kzg with constantine backend (sequential, arkmsm)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand,arkmsm >> ../"$paste_file" + + print_msg "rust-kzg with constantine backend (sequential, bgmw)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand,bgmw >> ../"$paste_file" - # 3.12. rust-kzg with constantine backend (parallel) + # 3.12. rust-kzg with constantine backend (sequential, constantine_msm) + print_msg "rust-kzg with constantine backend (sequential, constantine_msm)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand,constantine_msm >> ../"$paste_file" + + # 3.13. rust-kzg with constantine backend (parallel) print_msg "rust-kzg with constantine backend (parallel)" ../"$paste_file" - taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/kzg-bench/Cargo.toml --features rust-kzg-constantine/parallel >> ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand,parallel >> ../"$paste_file" + + print_msg "rust-kzg with constantine backend (parallel, bgmw)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand,parallel,bgmw >> ../"$paste_file" + + # 3.14. rust-kzg with constantine backend (parallel, constantine_msm) + print_msg "rust-kzg with constantine backend (parallel, constantine_msm)" ../"$paste_file" + taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench --manifest-path constantine/Cargo.toml --no-default-features --features std,rand,parallel,constantine_msm >> ../"$paste_file" - # 3.11. rust binding (rust-kzg with blst backend) + # 3.15. rust binding (rust-kzg with blst backend) print_msg "rust binding (rust-kzg with blst backend)" ../"$paste_file" cd blst/c-kzg-4844/bindings/rust/ || exit taskset --cpu-list "${taskset_cpu_list[$i]}" cargo bench >> ../../../../../"$paste_file" cd ../../../.. - # 3.12. go binding (rust-kzg with blst backend) + # 3.16. go binding (rust-kzg with blst backend) print_msg "go binding (rust-kzg with blst backend)" ../"$paste_file" cd blst/c-kzg-4844/bindings/go/ || exit export CGO_CFLAGS="-O2 -D__BLST_PORTABLE__" diff --git a/run-c-kzg-4844-benches.sh b/run-c-kzg-4844-benches.sh index 6d38aea6f..890a3b653 100755 --- a/run-c-kzg-4844-benches.sh +++ b/run-c-kzg-4844-benches.sh @@ -16,7 +16,7 @@ while [[ -n $# ]]; do -p|--parallel) parallel=true ;; - blst|arkworks|mcl|zkcrypto|constantine) + blst|arkworks|arkworks3|mcl|zkcrypto|constantine) backend="$1" ;; *) diff --git a/run-c-kzg-4844-fuzz.sh b/run-c-kzg-4844-fuzz.sh index eab754abd..33cd54d32 100644 --- a/run-c-kzg-4844-fuzz.sh +++ b/run-c-kzg-4844-fuzz.sh @@ -1,7 +1,7 @@ #!/bin/bash # current checkout hash -C_KZG_4844_GIT_HASH=624aa60d01da524827123506975431aa5454c80d +C_KZG_4844_GIT_HASH=1bccee0878ffc80efe8741afdb5793ef9105aa35 set -e @@ -27,7 +27,7 @@ while [[ -n $# ]]; do --bgmw) use_bgmw=true ;; - blst|arkworks|mcl|zkcrypto|constantine) + blst|arkworks|arkworks3|mcl|zkcrypto|constantine) backend="$1" ;; *) diff --git a/run-c-kzg-4844-tests.sh b/run-c-kzg-4844-tests.sh index 0330212cc..6dc87fdd8 100755 --- a/run-c-kzg-4844-tests.sh +++ b/run-c-kzg-4844-tests.sh @@ -16,7 +16,7 @@ while [[ -n $# ]]; do -p|--parallel) parallel=true ;; - blst|arkworks|mcl|zkcrypto|constantine) + blst|arkworks|arkworks3|mcl|zkcrypto|constantine) backend="$1" ;; *) diff --git a/run-cuda-benchmarks.sh b/run-cuda-benchmarks.sh new file mode 100644 index 000000000..4632d23da --- /dev/null +++ b/run-cuda-benchmarks.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# shellcheck disable=SC2103,SC2002 +# shellcheck source=/dev/null + +# 1.1. Follow the instructions in the comments, then exit and open a connection through the Mosh shell. +# +# IMPORTANT!!! +# +# Switch to the Debian Sid branch by modifying the file "/etc/apt/sources.list", and then upgrade all packages. +# This process will involve updating grub and selecting options on the screen. +# It is necessary because the go binding will not work with outdated libc family packages, +# and the current version of Go is too low to run benchmarks from "go-kzg-4844". +# +# This script is designed to be run once and forgotten about. +# +# 1.2. setup system +# apt -y install htop gcc g++ clang make git mosh golang libgmp-dev llvm python3 python3-pip +# pip install aiogram +# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +# curl https://nim-lang.org/choosenim/init.sh -sSf | sh +# choosenim 1.6.14 +# +# 1.3. setup mosh-server +# locale-gen en_US.UTF-8 +# update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 +# source /etc/default/locale + +SECONDS=0 + +paste_name="linode_benchmarks" +paste_file="$paste_name.txt" + +print_msg () { + printf "\n\n\n~~~~~~~~~~ %s ~~~~~~~~~~\n\n\n" "$1" >> "$2" +} + +lscpu >> "$paste_file" +nvidia-smi >> "$paste_file" + +# 2. prepare benchmarks + +# 2.1. prepare rust-kzg +git clone https://github.com/ArtiomTr/rust-kzg.git +cd rust-kzg || exit +git checkout Integrate_sppark_msm || exit + +# 3. run benchmarks +print_msg "rust-kzg with blst backend (parallel, bgmw)" ../"$paste_file" +cargo bench --manifest-path blst/Cargo.toml --bench eip_4844 --no-default-features --features std,rand,parallel,bgmw >> ../"$paste_file" + +print_msg "rust-kzg with blst backend (sppark)" ../"$paste_file" +cargo bench --manifest-path blst/Cargo.toml --bench eip_4844 --no-default-features --features std,rand,parallel,sppark >> ../"$paste_file" + +print_msg "rust-kzg with arkworks backend (parallel, bgmw)" ../"$paste_file" +cargo bench --manifest-path arkworks/Cargo.toml --bench eip_4844 --no-default-features --features std,rand,parallel,bgmw >> ../"$paste_file" + +print_msg "rust-kzg with arkworks3 backend (parallel)" ../"$paste_file" +cargo bench --manifest-path arkworks3/Cargo.toml --bench eip_4844 --no-default-features --features std,rand,parallel >> ../"$paste_file" + +print_msg "rust-kzg with arkworks3 backend (sppark)" ../"$paste_file" +cargo bench --manifest-path arkworks3/Cargo.toml --bench eip_4844 --no-default-features --features std,rand,parallel,sppark >> ../"$paste_file" + +print_msg "rust-kzg with arkworks3 backend (sppark_wlc)" ../"$paste_file" +cargo bench --manifest-path arkworks3/Cargo.toml --bench eip_4844 --no-default-features --features std,rand,parallel,sppark_wlc >> ../"$paste_file" + +point_count=("12" "14" "16" "18" "20") +jobs_count=${#point_count[@]} + +for (( i=0; i> ../"$paste_file" + + print_msg "rust-kzg with blst backend (sppark)" ../"$paste_file" + cargo bench --manifest-path blst/Cargo.toml --bench lincomb --no-default-features --features std,rand,parallel,sppark >> ../"$paste_file" + + print_msg "rust-kzg with arkworks backend (parallel, bgmw)" ../"$paste_file" + cargo bench --manifest-path arkworks/Cargo.toml --bench lincomb --no-default-features --features std,rand,parallel,bgmw >> ../"$paste_file" + + print_msg "rust-kzg with arkworks3 backend (parallel)" ../"$paste_file" + cargo bench --manifest-path arkworks3/Cargo.toml --bench lincomb --no-default-features --features std,rand,parallel >> ../"$paste_file" + + print_msg "rust-kzg with arkworks3 backend (sppark)" ../"$paste_file" + cargo bench --manifest-path arkworks3/Cargo.toml --bench lincomb --no-default-features --features std,rand,parallel,sppark >> ../"$paste_file" + + print_msg "rust-kzg with arkworks3 backend (sppark_wlc)" ../"$paste_file" + cargo bench --manifest-path arkworks3/Cargo.toml --bench lincomb --no-default-features --features std,rand,parallel,sppark_wlc >> ../"$paste_file" + +done + +cd .. + +# 4. collect results + +paste_url=$(curl --upload-file "$paste_file" "https://paste.c-net.org/") + +echo "==========================================" +echo "Uploaded to $paste_url" +echo "==========================================" +echo "Script finished in $(printf '%02dh:%02dm:%02ds\n' $((SECONDS/3600)) $((SECONDS%3600/60)) $((SECONDS%60)))" +echo "Success!" diff --git a/zkcrypto/go.patch b/zkcrypto/go.patch index 9ef34988f..babb42101 100644 --- a/zkcrypto/go.patch +++ b/zkcrypto/go.patch @@ -1,14 +1,14 @@ -From 90e9a518ca03716ef1d9d77e263db25b56030867 Mon Sep 17 00:00:00 2001 +From d0e5b619807c0b9e936ce178b2a8e019da020a14 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:09:11 +0300 -Subject: [PATCH] Patch go binding +Date: Thu, 16 May 2024 13:26:25 +0300 +Subject: [PATCH] Patch go bindings --- bindings/go/main.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bindings/go/main.go b/bindings/go/main.go -index bdd5385..155fc81 100644 +index bf344a1..4f1c0f4 100644 --- a/bindings/go/main.go +++ b/bindings/go/main.go @@ -2,7 +2,15 @@ package ckzg4844 @@ -29,8 +29,8 @@ index bdd5385..155fc81 100644 import ( @@ -11,9 +19,6 @@ import ( + "errors" "fmt" - "strings" "unsafe" - - // So its functions are available during compilation. @@ -39,5 +39,5 @@ index bdd5385..155fc81 100644 const ( -- -2.34.1 +2.36.2.windows.1 diff --git a/zkcrypto/nim.patch b/zkcrypto/nim.patch index 1df91029a..832a9f011 100644 --- a/zkcrypto/nim.patch +++ b/zkcrypto/nim.patch @@ -1,6 +1,6 @@ -From f34d21606bb5bc3dee4e7a643d7ab89a2c994fef Mon Sep 17 00:00:00 2001 +From 118b0f6c3f9bd5e7335129eea28c713b8b2856dd Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:26:35 +0200 +Date: Thu, 16 May 2024 13:29:29 +0300 Subject: [PATCH] Patch nim bindings --- @@ -8,7 +8,7 @@ Subject: [PATCH] Patch nim bindings 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bindings/nim/kzg_abi.nim b/bindings/nim/kzg_abi.nim -index 36e4ba1..74d0ebc 100644 +index 9162588..529e09a 100644 --- a/bindings/nim/kzg_abi.nim +++ b/bindings/nim/kzg_abi.nim @@ -10,6 +10,7 @@ from os import DirSep, AltSep @@ -28,8 +28,8 @@ index 36e4ba1..74d0ebc 100644 +{.passl: "-l:rust_kzg_zkcrypto.a" .} +{.passl: "-lm" .} - {.passc: "-I" & bindingsPath .} - {.passc: "-I" & srcPath .} + {.passc: "-I" & escape(bindingsPath) .} + {.passc: "-I" & escape(srcPath) .} -- -2.34.1 +2.36.2.windows.1 diff --git a/zkcrypto/nodejs.patch b/zkcrypto/nodejs.patch index 710482442..fca9ea0ed 100644 --- a/zkcrypto/nodejs.patch +++ b/zkcrypto/nodejs.patch @@ -1,27 +1,14 @@ -From 954c55533e265f32eabe0dc863b1add2478bb570 Mon Sep 17 00:00:00 2001 +From cb0c44c9df8a7a6a92ed5b4f1acb771532812257 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 14:02:51 +0300 -Subject: [PATCH] Patch nodejs binding +Date: Thu, 16 May 2024 14:19:08 +0300 +Subject: [PATCH] Patch nodejs bindings --- - bindings/node.js/Makefile | 1 - - bindings/node.js/binding.gyp | 31 +++---------------------------- - 2 files changed, 3 insertions(+), 29 deletions(-) + bindings/node.js/binding.gyp | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) -diff --git a/bindings/node.js/Makefile b/bindings/node.js/Makefile -index 17850ec..efc9961 100644 ---- a/bindings/node.js/Makefile -+++ b/bindings/node.js/Makefile -@@ -31,7 +31,6 @@ build: install clean - @# Prepare the dependencies directory - @mkdir -p deps/c-kzg - @cp -r ../../blst deps -- @cp ../../src/c_kzg_4844.c deps/c-kzg - @cp ../../src/c_kzg_4844.h deps/c-kzg - @# Build the bindings - @$(YARN) node-gyp --loglevel=warn configure diff --git a/bindings/node.js/binding.gyp b/bindings/node.js/binding.gyp -index 5ac368e..6cde37f 100644 +index c42bb8f..e781e61 100644 --- a/bindings/node.js/binding.gyp +++ b/bindings/node.js/binding.gyp @@ -3,9 +3,7 @@ @@ -35,40 +22,27 @@ index 5ac368e..6cde37f 100644 ], "include_dirs": [ "<(module_root_dir)/deps/blst/bindings", -@@ -16,31 +14,8 @@ +@@ -16,9 +14,11 @@ "__BLST_PORTABLE__", - "NAPI_DISABLE_CPP_EXCEPTIONS" + "NAPI_CPP_EXCEPTIONS" ], -- "conditions": [ -- ["OS!='win'", { -- "sources": ["deps/blst/build/assembly.S"], -- "cflags_cc": [ -- "-std=c++17", -- "-fPIC" -- ] -- }], -- ["OS=='win'", { -- "sources": ["deps/blst/build/win64/*-x86_64.asm"], -- "defines": [ -- "_CRT_SECURE_NO_WARNINGS", -- ], -- "msbuild_settings": { -- "ClCompile": { -- "AdditionalOptions": ["/std:c++17"] -- } -- } -- }], -- ["OS=='mac'", { -- "xcode_settings": { -- "CLANG_CXX_LIBRARY": "libc++", -- "MACOSX_DEPLOYMENT_TARGET": "13.0" -- } -- }] + "libraries": [ + "<(module_root_dir)/../../../../target/release/rust_kzg_zkcrypto.a" - ] - } - ] ++ ], + "conditions": [ + ["OS!='win'", { +- "sources": ["deps/blst/build/assembly.S"], + "cflags_cc": [ + "-fexceptions", + "-std=c++17", +@@ -26,7 +26,6 @@ + ] + }], + ["OS=='win'", { +- "sources": ["deps/blst/build/win64/*-x86_64.asm"], + "defines": [ + "_CRT_SECURE_NO_WARNINGS", + "_HAS_EXCEPTIONS=1" -- -2.34.1 +2.36.2.windows.1 diff --git a/zkcrypto/python.patch b/zkcrypto/python.patch index 01dae992d..b37f4727c 100644 --- a/zkcrypto/python.patch +++ b/zkcrypto/python.patch @@ -1,48 +1,30 @@ -From a8ff3fe1e4372380f15769bbb8490b0089aa2928 Mon Sep 17 00:00:00 2001 +From 57a93a8db7319a368a25d470aa074e3af5ecb4b6 Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 26 Oct 2023 13:51:37 +0300 -Subject: [PATCH] Patch python binding +Date: Thu, 16 May 2024 12:56:53 +0300 +Subject: [PATCH] Patch python bindings --- - bindings/python/Makefile | 5 +---- - bindings/python/setup.py | 6 +++--- - 2 files changed, 4 insertions(+), 7 deletions(-) + setup.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -diff --git a/bindings/python/Makefile b/bindings/python/Makefile -index c6bd222..99d6501 100644 ---- a/bindings/python/Makefile -+++ b/bindings/python/Makefile -@@ -1,11 +1,8 @@ - .PHONY: all - all: install test - --../../src/c_kzg_4844.o: -- make -C../../src c_kzg_4844.o -- - .PHONY: install --install: setup.py ckzg.c ../../src/c_kzg_4844.o -+install: setup.py ckzg.c - python3 setup.py install - - .PHONY: test -diff --git a/bindings/python/setup.py b/bindings/python/setup.py -index b072833..db37db4 100644 ---- a/bindings/python/setup.py -+++ b/bindings/python/setup.py -@@ -8,10 +8,10 @@ def main(): +diff --git a/setup.py b/setup.py +index 42d4c36..f982863 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,10 +35,10 @@ def main(): ext_modules=[ Extension( "ckzg", -- sources=["ckzg.c", "../../src/c_kzg_4844.c"], -+ sources=["ckzg.c"], - include_dirs=["../../inc", "../../src"], -- library_dirs=["../../lib"], -- libraries=["blst"])]) -+ library_dirs=["../../lib", "../../../../target/release"], -+ libraries=[":rust_kzg_zkcrypto.a"])]) - - if __name__ == "__main__": - main() +- sources=["bindings/python/ckzg.c", "src/c_kzg_4844.c"], ++ sources=["bindings/python/ckzg.c"], + include_dirs=["inc", "src"], +- library_dirs=["lib"], +- libraries=["blst"] ++ library_dirs=["lib", "../../target/release"], ++ libraries=[":rust_kzg_zkcrypto.a"] + ) + ], + cmdclass={ -- -2.34.1 +2.36.2.windows.1 diff --git a/zkcrypto/rust.patch b/zkcrypto/rust.patch index 2088ac1ca..b55d50147 100644 --- a/zkcrypto/rust.patch +++ b/zkcrypto/rust.patch @@ -1,30 +1,36 @@ -From e7d529a9ba017de920555ae9b4ab05a18174cdcf Mon Sep 17 00:00:00 2001 +From de2366bc220f4773271f54b040bb81c297edab1a Mon Sep 17 00:00:00 2001 From: sirse -Date: Thu, 25 Jan 2024 11:42:12 +0200 +Date: Sat, 6 Jul 2024 16:06:23 +0300 Subject: [PATCH] Patch rust bindings --- - bindings/rust/Cargo.toml | 1 + - bindings/rust/build.rs | 22 +++------------------- - 2 files changed, 4 insertions(+), 19 deletions(-) + Cargo.toml | 1 + + bindings/rust/build.rs | 41 +++-------------------------------------- + 2 files changed, 4 insertions(+), 38 deletions(-) -diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml -index 98bd814..9391f27 100644 ---- a/bindings/rust/Cargo.toml -+++ b/bindings/rust/Cargo.toml +diff --git a/Cargo.toml b/Cargo.toml +index f355f8c..7be1795 100644 +--- a/Cargo.toml ++++ b/Cargo.toml @@ -1,3 +1,4 @@ +[workspace] [package] name = "c-kzg" - version = "0.1.0" + version = "1.0.2" diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs -index 5148333..ec42e21 100644 +index cd07487..0e9d7f6 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs -@@ -15,24 +15,7 @@ fn main() { - - let c_src_dir = root_dir.join("src"); +@@ -3,46 +3,11 @@ use std::{env, path::PathBuf}; + fn main() { + let root_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); +- // Obtain the header files of blst +- let blst_base_dir = root_dir.join("blst"); +- let blst_headers_dir = blst_base_dir.join("bindings"); +- +- let c_src_dir = root_dir.join("src"); +- - let mut cc = cc::Build::new(); - - #[cfg(all(windows, target_env = "msvc"))] @@ -41,22 +47,30 @@ index 5148333..ec42e21 100644 - cc.include(blst_headers_dir.clone()); - cc.warnings(false); - cc.file(c_src_dir.join("c_kzg_4844.c")); +- #[cfg(not(debug_assertions))] +- cc.define("NDEBUG", None); - - cc.try_compile("ckzg").expect("Failed to compile ckzg"); +- +- #[cfg(feature = "generate-bindings")] +- { +- let header_path = c_src_dir.join("c_kzg_4844.h"); +- let bindings_out_path = root_dir.join("bindings/rust/src/bindings/generated.rs"); +- make_bindings( +- header_path.to_str().expect("valid header path"), +- blst_headers_dir.to_str().expect("valid blst header path"), +- &bindings_out_path, +- ); +- } + let rust_kzg_target_dir = root_dir.join("../../target/release/"); - let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); - let bindings_out_path = out_dir.join("generated.rs"); -@@ -46,7 +29,8 @@ fn main() { - ); - // Finally, tell cargo this provides ckzg/ckzg_min - println!("cargo:rustc-link-lib=ckzg"); + println!("cargo:rustc-link-search={}", rust_kzg_target_dir.display()); + println!("cargo:rustc-link-arg=-l:rust_kzg_zkcrypto.a"); } - fn make_bindings

(header_path: &str, blst_headers_dir: &str, bindings_out_path: P) + #[cfg(feature = "generate-bindings")] -- -2.34.1 +2.45.2.windows.1 diff --git a/zkcrypto/src/kzg_types.rs b/zkcrypto/src/kzg_types.rs index 4bf94a20c..944c10bd9 100644 --- a/zkcrypto/src/kzg_types.rs +++ b/zkcrypto/src/kzg_types.rs @@ -306,18 +306,24 @@ impl KzgFr for ZFr { #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] pub struct ZFp(pub Fp); impl G1Fp for ZFp { - const ZERO: Self = Self(Fp::zero()); + fn zero() -> Self { + Self(Fp::zero()) + } - const ONE: Self = Self(Fp::one()); + fn one() -> Self { + Self(Fp::one()) + } - const BLS12_381_RX_P: Self = Self(Fp([ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ])); + fn bls12_381_rx_p() -> Self { + Self(Fp([ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ])) + } fn inverse(&self) -> Option { self.0.invert().map(Self).into() @@ -489,27 +495,29 @@ impl G1 for ZG1 { self.proj = self.proj.double(); } - const ZERO: Self = Self { - proj: G1Projective { - x: Fp([ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ]), - y: Fp([ - 8505329371266088957, - 17002214543764226050, - 6865905132761471162, - 8632934651105793861, - 6631298214892334189, - 1582556514881692819, - ]), - z: Fp([0, 0, 0, 0, 0, 0]), - }, - }; + fn zero() -> Self { + Self { + proj: G1Projective { + x: Fp([ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ]), + y: Fp([ + 8505329371266088957, + 17002214543764226050, + 6865905132761471162, + 8632934651105793861, + 6631298214892334189, + 1582556514881692819, + ]), + z: Fp([0, 0, 0, 0, 0, 0]), + }, + } + } } impl G1Mul for ZG1 { @@ -565,8 +573,8 @@ impl G1AffineTrait for ZG1Affine { fn zero() -> Self { Self(G1Affine { - x: ZFp::ZERO.0, - y: ZFp::ZERO.0, + x: ZFp::zero().0, + y: ZFp::zero().0, infinity: Choice::from(1), }) }